--- Daodan/src/Daodan.c 2009/06/10 12:40:16 349 +++ Daodan/src/Daodan.c 2009/07/21 03:33:07 447 @@ -6,6 +6,7 @@ #include "Daodan_Win32.h" #include "Daodan_Cheater.h" #include "Daodan_Persistence.h" +#include "Daodan_BSL.h" #include "Daodan_WindowHack.h" @@ -34,8 +35,9 @@ bool patch_cooldowntimer = true; bool patch_throwtest = false; bool patch_alttab = true; bool patch_particledisablebit = false; -bool patch_multibyte = true; +bool patch_multibyte = false; bool patch_cheattable = true; +bool patch_argb8888 = true; bool patch_safeprintf = true; bool patch_daodandisplayenum = true; @@ -43,6 +45,10 @@ bool patch_usegettickcount = true; bool patch_cheatsenabled = true; bool patch_usedaodangl = false; bool patch_windowhack = true; +bool patch_daodaninit = true; +bool patch_bsl = true; + +bool opt_usedaodanbsl = true; bool DDrPatch_Init() { @@ -127,7 +133,7 @@ bool DDrPatch_Init() DDrPatch_Int16 (OniExe + 0x001b184, 0x9090); // Multi-byte patch (multiple language support) - if (patch_multibyte) + if (!patch_multibyte) { DDrPatch_Byte (OniExe + 0x0002d8f8, 0xeb); DDrPatch_Byte (OniExe + 0x0002d9ad, 0xeb); @@ -154,17 +160,27 @@ bool DDrPatch_Init() DDrPatch_Int32 (OniExe + 0x000f617a, (int)&DDr_CheatTable[0].message_on); } + if (patch_argb8888) + { + DDrPatch_Byte (OniExe + 0x00135af0, 0x07); + DDrPatch_Byte (OniExe + 0x00135af4, 0x0B); + } + return true; } -enum {s_unknown, s_patch, s_language} ini_section; +enum {s_unknown, s_options, s_patch, s_bsl, s_language} ini_section; bool DDrIniCallback(char* section, bool newsection, char* name, char* value) { if (newsection) { - if (!stricmp(section, "patch")) + if (!stricmp(section, "options")) + ini_section = s_options; + else if (!stricmp(section, "patch")) ini_section = s_patch; + else if (!stricmp(section, "bsl")) + ini_section = s_bsl; else if (!stricmp(section, "language")) ini_section = s_language; else @@ -176,6 +192,10 @@ bool DDrIniCallback(char* section, bool switch (ini_section) { + case s_options: + if (!stricmp(name, "usedaodanbsl")) + opt_usedaodanbsl = !stricmp(value, "true"); + break; case s_patch: if (!stricmp(name, "fonttexturecache")) patch_fonttexturecache = !stricmp(value, "true"); @@ -205,6 +225,8 @@ bool DDrIniCallback(char* section, bool patch_multibyte = !stricmp(value, "true"); else if (!stricmp(name, "cheattable")) patch_cheattable = !stricmp(value, "true"); + else if (!stricmp(name, "argb8888")) + patch_argb8888 = !stricmp(value, "true"); else if (!stricmp(name, "safeprintf")) patch_safeprintf = !stricmp(value, "true"); else if (!stricmp(name, "daodandisplayenum")) @@ -217,9 +239,16 @@ bool DDrIniCallback(char* section, bool patch_usedaodangl = !stricmp(value, "true"); else if (!stricmp(name, "windowhack")) patch_windowhack = !stricmp(value, "true"); + else if (!stricmp(name, "daodaninit")) + patch_daodaninit = !stricmp(value, "true"); + else if (!stricmp(name, "bsl")) + patch_bsl = !stricmp(value, "true"); else DDrStartupMessage("unrecognised patch \"%s\"", name); break; + case s_bsl: + + break; case s_language: if (!stricmp(name, "savepoint")) { @@ -354,6 +383,12 @@ void DDrConfig() DDrStartupMessage("finished parsing"); } +void ONICALL DDrGame_Init() +{ + if (opt_usedaodanbsl) + SLrDaodan_Initalize(); +} + void __cdecl DDrMain(int argc, char* argv[]) { DDrStartupMessage("daodan attached!"); @@ -391,6 +426,13 @@ void __cdecl DDrMain(int argc, char* arg if (patch_windowhack) DDrWindowHack_Install(); + if (patch_daodaninit) + DDrPatch_MakeCall(OniExe + 0x000d345a, DDrGame_Init); + + // Patches for existing BSL functions + if (patch_bsl) + SLrDaodan_Patch(); + init_daodan_gl(); ONiMain(argc, argv);