Commit d38abcb0 authored by nanahira's avatar nanahira

add --extra-script

parent 5e2374eb
......@@ -106,7 +106,7 @@ extern bool auto_watch_mode;
extern bool open_file;
extern wchar_t open_file_name[256];
extern bool bot_mode;
extern bool expansions_specified;
extern std::vector<std::wstring> expansions_list;
extern std::vector<std::wstring> extra_script_list;
#endif
......@@ -602,6 +602,13 @@ unsigned char* DataManager::ReadScriptFromFile(const char* script_name, int* sle
*slen = (int)len;
return scriptBuffer;
}
void DataManager::LoadExtraScripts(intptr_t pduel) {
char sname[1024];
for(auto name : extra_script_list) {
BufferIO::EncodeUTF8(name.c_str(), sname);
preload_script(pduel, sname);
}
}
bool DataManager::deck_sort_lv(code_pointer p1, code_pointer p2) {
if ((p1->second.type & 0x7) != (p2->second.type & 0x7))
return (p1->second.type & 0x7) < (p2->second.type & 0x7);
......
......@@ -122,7 +122,8 @@ public:
static uint32_t CardReader(uint32_t, card_data*);
static unsigned char* ScriptReaderEx(const char* script_name, int* slen);
static unsigned char* ScriptReaderExSingle(const char* path, const char* script_name, int* slen, int pre_len = 2, unsigned int use_irr = FALSE);
void LoadExtraScripts(intptr_t pduel);
//read by IFileSystem
static unsigned char* ReadScriptFromIrrFS(const char* script_name, int* slen);
//read by fread
......
......@@ -19,8 +19,9 @@ bool auto_watch_mode = false;
bool open_file = false;
wchar_t open_file_name[256] = L"";
bool bot_mode = false;
bool expansions_specified = false;
std::vector<std::wstring> expansions_list;
std::vector<std::wstring> specials_list;
std::vector<std::wstring> extra_script_list;
void ClickButton(irr::gui::IGUIElement* btn) {
irr::SEvent event;
......@@ -93,6 +94,7 @@ int main(int argc, char* argv[]) {
bool keep_on_return = false;
bool deckCategorySpecified = false;
bool expansions_specified = false;
expansions_list.push_back(L"./expansions");
for(int i = 1; i < wargc; ++i) {
if (wargc == 2 && std::wcslen(wargv[1]) >= 4) {
......@@ -228,6 +230,12 @@ int main(int argc, char* argv[]) {
expansions_list.push_back(wargv[i]);
}
continue;
} else if (!std::wcscmp(wargv[i], L"--extra-script")) { // specify extra script
++i;
if(i < wargc) {
extra_script_list.push_back(wargv[i]);
}
continue;
}
}
ygo::mainGame->MainLoop();
......
......@@ -192,6 +192,7 @@ bool ReplayMode::StartDuel() {
preload_script(pduel, "./script/patches/entry.lua");
preload_script(pduel, "./script/special.lua");
preload_script(pduel, "./script/init.lua");
dataManager.LoadExtraScripts(pduel);
mainGame->dInfo.lp[0] = cur_replay.params.start_lp;
mainGame->dInfo.lp[1] = cur_replay.params.start_lp;
mainGame->dInfo.start_lp = cur_replay.params.start_lp;
......
......@@ -462,6 +462,7 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
preload_script(pduel, "./script/patches/entry.lua");
preload_script(pduel, "./script/special.lua");
preload_script(pduel, "./script/init.lua");
dataManager.LoadExtraScripts(pduel);
unsigned int opt = (unsigned int)host_info.duel_rule << 16;
if(host_info.no_shuffle_deck)
opt |= DUEL_PSEUDO_SHUFFLE;
......
......@@ -64,6 +64,7 @@ int SingleMode::SinglePlayThread() {
preload_script(pduel, "./script/patches/entry.lua");
preload_script(pduel, "./script/special.lua");
preload_script(pduel, "./script/init.lua");
dataManager.LoadExtraScripts(pduel);
mainGame->dInfo.lp[0] = start_lp;
mainGame->dInfo.lp[1] = start_lp;
mainGame->dInfo.start_lp = start_lp;
......
......@@ -436,6 +436,7 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
preload_script(pduel, "./script/patches/entry.lua");
preload_script(pduel, "./script/special.lua");
preload_script(pduel, "./script/init.lua");
dataManager.LoadExtraScripts(pduel);
unsigned int opt = (unsigned int)host_info.duel_rule << 16;
if(host_info.no_shuffle_deck)
opt |= DUEL_PSEUDO_SHUFFLE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment