Commit d38abcb0 authored by nanahira's avatar nanahira

add --extra-script

parent 5e2374eb
...@@ -106,7 +106,7 @@ extern bool auto_watch_mode; ...@@ -106,7 +106,7 @@ extern bool auto_watch_mode;
extern bool open_file; extern bool open_file;
extern wchar_t open_file_name[256]; extern wchar_t open_file_name[256];
extern bool bot_mode; extern bool bot_mode;
extern bool expansions_specified;
extern std::vector<std::wstring> expansions_list; extern std::vector<std::wstring> expansions_list;
extern std::vector<std::wstring> extra_script_list;
#endif #endif
...@@ -602,6 +602,13 @@ unsigned char* DataManager::ReadScriptFromFile(const char* script_name, int* sle ...@@ -602,6 +602,13 @@ unsigned char* DataManager::ReadScriptFromFile(const char* script_name, int* sle
*slen = (int)len; *slen = (int)len;
return scriptBuffer; 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) { bool DataManager::deck_sort_lv(code_pointer p1, code_pointer p2) {
if ((p1->second.type & 0x7) != (p2->second.type & 0x7)) if ((p1->second.type & 0x7) != (p2->second.type & 0x7))
return (p1->second.type & 0x7) < (p2->second.type & 0x7); return (p1->second.type & 0x7) < (p2->second.type & 0x7);
......
...@@ -122,6 +122,7 @@ public: ...@@ -122,6 +122,7 @@ public:
static uint32_t CardReader(uint32_t, card_data*); static uint32_t CardReader(uint32_t, card_data*);
static unsigned char* ScriptReaderEx(const char* script_name, int* slen); 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); 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 //read by IFileSystem
static unsigned char* ReadScriptFromIrrFS(const char* script_name, int* slen); static unsigned char* ReadScriptFromIrrFS(const char* script_name, int* slen);
......
...@@ -19,8 +19,9 @@ bool auto_watch_mode = false; ...@@ -19,8 +19,9 @@ bool auto_watch_mode = false;
bool open_file = false; bool open_file = false;
wchar_t open_file_name[256] = L""; wchar_t open_file_name[256] = L"";
bool bot_mode = false; bool bot_mode = false;
bool expansions_specified = false;
std::vector<std::wstring> expansions_list; 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) { void ClickButton(irr::gui::IGUIElement* btn) {
irr::SEvent event; irr::SEvent event;
...@@ -93,6 +94,7 @@ int main(int argc, char* argv[]) { ...@@ -93,6 +94,7 @@ int main(int argc, char* argv[]) {
bool keep_on_return = false; bool keep_on_return = false;
bool deckCategorySpecified = false; bool deckCategorySpecified = false;
bool expansions_specified = false;
expansions_list.push_back(L"./expansions"); expansions_list.push_back(L"./expansions");
for(int i = 1; i < wargc; ++i) { for(int i = 1; i < wargc; ++i) {
if (wargc == 2 && std::wcslen(wargv[1]) >= 4) { if (wargc == 2 && std::wcslen(wargv[1]) >= 4) {
...@@ -228,6 +230,12 @@ int main(int argc, char* argv[]) { ...@@ -228,6 +230,12 @@ int main(int argc, char* argv[]) {
expansions_list.push_back(wargv[i]); expansions_list.push_back(wargv[i]);
} }
continue; 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(); ygo::mainGame->MainLoop();
......
...@@ -192,6 +192,7 @@ bool ReplayMode::StartDuel() { ...@@ -192,6 +192,7 @@ bool ReplayMode::StartDuel() {
preload_script(pduel, "./script/patches/entry.lua"); preload_script(pduel, "./script/patches/entry.lua");
preload_script(pduel, "./script/special.lua"); preload_script(pduel, "./script/special.lua");
preload_script(pduel, "./script/init.lua"); preload_script(pduel, "./script/init.lua");
dataManager.LoadExtraScripts(pduel);
mainGame->dInfo.lp[0] = cur_replay.params.start_lp; mainGame->dInfo.lp[0] = cur_replay.params.start_lp;
mainGame->dInfo.lp[1] = cur_replay.params.start_lp; mainGame->dInfo.lp[1] = cur_replay.params.start_lp;
mainGame->dInfo.start_lp = 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) { ...@@ -462,6 +462,7 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
preload_script(pduel, "./script/patches/entry.lua"); preload_script(pduel, "./script/patches/entry.lua");
preload_script(pduel, "./script/special.lua"); preload_script(pduel, "./script/special.lua");
preload_script(pduel, "./script/init.lua"); preload_script(pduel, "./script/init.lua");
dataManager.LoadExtraScripts(pduel);
unsigned int opt = (unsigned int)host_info.duel_rule << 16; unsigned int opt = (unsigned int)host_info.duel_rule << 16;
if(host_info.no_shuffle_deck) if(host_info.no_shuffle_deck)
opt |= DUEL_PSEUDO_SHUFFLE; opt |= DUEL_PSEUDO_SHUFFLE;
......
...@@ -64,6 +64,7 @@ int SingleMode::SinglePlayThread() { ...@@ -64,6 +64,7 @@ int SingleMode::SinglePlayThread() {
preload_script(pduel, "./script/patches/entry.lua"); preload_script(pduel, "./script/patches/entry.lua");
preload_script(pduel, "./script/special.lua"); preload_script(pduel, "./script/special.lua");
preload_script(pduel, "./script/init.lua"); preload_script(pduel, "./script/init.lua");
dataManager.LoadExtraScripts(pduel);
mainGame->dInfo.lp[0] = start_lp; mainGame->dInfo.lp[0] = start_lp;
mainGame->dInfo.lp[1] = start_lp; mainGame->dInfo.lp[1] = start_lp;
mainGame->dInfo.start_lp = start_lp; mainGame->dInfo.start_lp = start_lp;
......
...@@ -436,6 +436,7 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -436,6 +436,7 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
preload_script(pduel, "./script/patches/entry.lua"); preload_script(pduel, "./script/patches/entry.lua");
preload_script(pduel, "./script/special.lua"); preload_script(pduel, "./script/special.lua");
preload_script(pduel, "./script/init.lua"); preload_script(pduel, "./script/init.lua");
dataManager.LoadExtraScripts(pduel);
unsigned int opt = (unsigned int)host_info.duel_rule << 16; unsigned int opt = (unsigned int)host_info.duel_rule << 16;
if(host_info.no_shuffle_deck) if(host_info.no_shuffle_deck)
opt |= DUEL_PSEUDO_SHUFFLE; 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