Changeset 347 for Daodan/src


Ignore:
Timestamp:
Jun 9, 2009, 2:42:24 PM (15 years ago)
Author:
rossy
Message:

some more things for daodan.ini

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Daodan/src/Daodan.c

    r346 r347  
    2121HMODULE DDrONiModule;
    2222
     23bool patch_fonttexturecache = true;
     24bool patch_largetextures = true;
     25bool patch_pathfinding = true;
     26bool patch_projaware = true;
     27bool patch_wpfadetime = true;
     28bool patch_kickguns = false;
     29bool patch_cooldowntimer = true;
     30bool patch_throwtest = false;
     31bool patch_alttab = true;
     32bool patch_particledisablebit = false;
     33bool patch_multibyte = true;
     34bool patch_cheattable = true;
     35
     36bool patch_safeprintf = true;
     37bool patch_daodandisplayenum = true;
     38bool patch_usegettickcount = true;
     39bool patch_usedaodangl = false;
     40
    2341bool DDrPatch_Init()
    2442{
     
    2644       
    2745        // Font texture cache doubled
    28         DDrPatch_Byte  (OniExe + 0x00020ea7, 0x20);
    29         DDrPatch_Byte  (OniExe + 0x00020f4a, 0x40);
     46        if (patch_fonttexturecache)
     47        {
     48                DDrPatch_Byte  (OniExe + 0x00020ea7, 0x20);
     49                DDrPatch_Byte  (OniExe + 0x00020f4a, 0x40);
     50        }
    3051       
    3152        // Now supports textures up to 512x512
    32         DDrPatch_Byte  (OniExe + 0x00005251, 0x10);
     53        if (patch_largetextures)
     54                DDrPatch_Byte  (OniExe + 0x00005251, 0x10);
    3355       
    3456        // Non-"_Final" levels are now valid
     
    3658       
    3759        // Pathfinding grid cache size x8
    38         DDrPatch_Byte  (OniExe + 0x0010b03b, 0x20);
    39         DDrPatch_Byte  (OniExe + 0x0010b04c, 0x20);
     60        if (patch_pathfinding)
     61        {
     62                DDrPatch_Byte  (OniExe + 0x0010b03b, 0x20);
     63                DDrPatch_Byte  (OniExe + 0x0010b04c, 0x20);
     64        }
    4065       
    4166        // Projectile awareness fixed
    42         DDrPatch_Byte  (OniExe + 0x0009c07c, 0x6c);
    43         DDrPatch_Byte  (OniExe + 0x0009c080, 0x70);
    44         DDrPatch_Byte  (OniExe + 0x0009c084, 0x74);
    45         DDrPatch_Byte  (OniExe + 0x0009c110, 0x6c);
     67        if (patch_projaware)
     68        {
     69                DDrPatch_Byte  (OniExe + 0x0009c07c, 0x6c);
     70                DDrPatch_Byte  (OniExe + 0x0009c080, 0x70);
     71                DDrPatch_Byte  (OniExe + 0x0009c084, 0x74);
     72                DDrPatch_Byte  (OniExe + 0x0009c110, 0x6c);
     73        }
    4674       
    4775        // Forced DirectInput (for Windows NT)
    4876        DDrPatch_Byte  (OniExe + 0x00002e6d, 0xeb);
    4977       
    50         // Makes wp_fadetime actually have a function
    51         const char fadetime_patch[] = { 0x66, 0x8B, 0x1D, 0xC4, 0x7D, 0x62, 0x00, 0x66, 0x89, 0x5E, 0x46, 0x5B, 0x5E, 0x83, 0xC4, 0x14, 0xC3 };
    52         DDrPatch_Const (OniExe + 0x0011a889, fadetime_patch);
    53         DDrPatch_Byte  (OniExe + 0x0011a560, 0x31);
    54        
    55         // Sets the fadetime to 4800 by default
    56         DDrPatch_Int16 (OniExe + 0x0011ab0e, 0x12c0);
     78        if (patch_wpfadetime)
     79        {
     80                // Makes wp_fadetime actually have a function
     81                const char fadetime_patch[] = { 0x66, 0x8B, 0x1D, 0xC4, 0x7D, 0x62, 0x00, 0x66, 0x89, 0x5E, 0x46, 0x5B, 0x5E, 0x83, 0xC4, 0x14, 0xC3 };
     82                DDrPatch_Const (OniExe + 0x0011a889, fadetime_patch);
     83                DDrPatch_Byte  (OniExe + 0x0011a560, 0x31);
     84               
     85                // Sets the fadetime to 4800 by default
     86                DDrPatch_Int16 (OniExe + 0x0011ab0e, 0x12c0);
     87        }
    5788       
    5889       
    5990        // Hackish fix for Konoko not kicking guns
    60 //      const char kickgun_patch[] = { 0x00, 0x05, 0x00, 0x00, 0x00, 0xC7, 0x05, 0x1C, 0xC9, 0x5E, 0x00, 0x70, 0xB8, 0x43, 0x00, 0xC7, 0x05, 0x20, 0xC9, 0x5E, 0x00, 0x20, 0xBE, 0x43 };
    61 //      DDrPatch_Const (OniExe + 0x000dc420, kickgun_patch);
     91        if (patch_kickguns)
     92        {
     93                const char kickgun_patch[] = { 0x00, 0x05, 0x00, 0x00, 0x00, 0xC7, 0x05, 0x1C, 0xC9, 0x5E, 0x00, 0x70, 0xB8, 0x43, 0x00, 0xC7, 0x05, 0x20, 0xC9, 0x5E, 0x00, 0x20, 0xBE, 0x43 };
     94                DDrPatch_Const (OniExe + 0x000dc420, kickgun_patch);
     95        }
    6296       
    6397        // Cooldown timer exploit fix ^_^
    64         const char cooldown_patch[] = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 };
    65         DDrPatch_Const (OniExe + 0x0011a825, cooldown_patch);
    66        
    67 //      const char throwtest_patch[] = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 };
    68 //      DDrPatch_Const(OniExe + 0x000dc190, throwtest_patch);
     98        if (patch_cooldowntimer)
     99        {
     100                const char cooldown_patch[] = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 };
     101                DDrPatch_Const (OniExe + 0x0011a825, cooldown_patch);
     102        }
     103       
     104        if (patch_throwtest)
     105        {
     106                const char throwtest_patch[] = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 };
     107                DDrPatch_Const(OniExe + 0x000dc190, throwtest_patch);
     108        }
    69109       
    70110        // Disable UUrPlatform_Initalize/Terminate, this enables the Alt-Tab and the Windows key but has the possible side effect of allowing the screensaver to enable itself in-game.
    71         DDrPatch_Byte  ((void*)UUrPlatform_Initialize, 0xC3);
    72         DDrPatch_Byte  ((void*)UUrPlatform_Terminate, 0xC3);
     111        if (patch_alttab)
     112        {
     113                DDrPatch_Byte  ((void*)UUrPlatform_Initialize, 0xC3);
     114                DDrPatch_Byte  ((void*)UUrPlatform_Terminate, 0xC3);
     115        }
    73116       
    74117        // Unlocks particle action disabling/enabling bits for all events. (Will be controlled by a command line switch when I figure out how to do that without Win32 hacks.)
    75         //DDrPatch_Int16 (OniExe + 0x001b184, 0x9090);
     118        if (patch_particledisablebit)
     119                DDrPatch_Int16 (OniExe + 0x001b184, 0x9090);
    76120       
    77121        // Multi-byte patch (multiple language support)
    78         DDrPatch_Byte  (OniExe + 0x0002d8f8, 0xeb);
    79         DDrPatch_Byte  (OniExe + 0x0002d9ad, 0xeb);
    80         DDrPatch_Byte  (OniExe + 0x0002dbe2, 0xeb);
    81         DDrPatch_Byte  (OniExe + 0x0002dec3, 0xeb);
    82         DDrPatch_Byte  (OniExe + 0x0002e2ab, 0xeb);
    83         DDrPatch_Byte  (OniExe + 0x0002e2c4, 0xeb);
    84         DDrPatch_Byte  (OniExe + 0x0002e379, 0xeb);
    85         DDrPatch_Byte  (OniExe + 0x0002e48c, 0xeb);
    86         DDrPatch_Byte  (OniExe + 0x0002e4d0, 0xeb);
    87         DDrPatch_Byte  (OniExe + 0x0002e4f4, 0xeb);
    88         DDrPatch_Byte  (OniExe + 0x0002e646, 0xeb);
    89         DDrPatch_Byte  (OniExe + 0x0002e695, 0xeb);
    90         DDrPatch_Byte  (OniExe + 0x0002e944, 0xeb);
    91         DDrPatch_Byte  (OniExe + 0x0002e95d, 0xeb);
    92         DDrPatch_Byte  (OniExe + 0x0002e98e, 0xeb);
    93         DDrPatch_Byte  (OniExe + 0x0002e9dc, 0xeb);
     122        if (patch_multibyte)
     123        {
     124                DDrPatch_Byte  (OniExe + 0x0002d8f8, 0xeb);
     125                DDrPatch_Byte  (OniExe + 0x0002d9ad, 0xeb);
     126                DDrPatch_Byte  (OniExe + 0x0002dbe2, 0xeb);
     127                DDrPatch_Byte  (OniExe + 0x0002dec3, 0xeb);
     128                DDrPatch_Byte  (OniExe + 0x0002e2ab, 0xeb);
     129                DDrPatch_Byte  (OniExe + 0x0002e2c4, 0xeb);
     130                DDrPatch_Byte  (OniExe + 0x0002e379, 0xeb);
     131                DDrPatch_Byte  (OniExe + 0x0002e48c, 0xeb);
     132                DDrPatch_Byte  (OniExe + 0x0002e4d0, 0xeb);
     133                DDrPatch_Byte  (OniExe + 0x0002e4f4, 0xeb);
     134                DDrPatch_Byte  (OniExe + 0x0002e646, 0xeb);
     135                DDrPatch_Byte  (OniExe + 0x0002e695, 0xeb);
     136                DDrPatch_Byte  (OniExe + 0x0002e944, 0xeb);
     137                DDrPatch_Byte  (OniExe + 0x0002e95d, 0xeb);
     138                DDrPatch_Byte  (OniExe + 0x0002e98e, 0xeb);
     139                DDrPatch_Byte  (OniExe + 0x0002e9dc, 0xeb);
     140        }
    94141       
    95142        // Cheat table patch
    96         DDrPatch_Int32 (OniExe + 0x000f616b, (int)&DDr_CheatTable[0].name);
    97         DDrPatch_Int32 (OniExe + 0x000f617a, (int)&DDr_CheatTable[0].message_on);
     143        if (patch_cheattable)
     144        {
     145                DDrPatch_Int32 (OniExe + 0x000f616b, (int)&DDr_CheatTable[0].name);
     146                DDrPatch_Int32 (OniExe + 0x000f617a, (int)&DDr_CheatTable[0].message_on);
     147        }
    98148       
    99149        return true;
    100150}
    101151
    102 enum {s_unknown, s_language} ini_section;
     152enum {s_unknown, s_patch, s_language} ini_section;
    103153
    104154bool DDrIniCallback(char* section, bool newsection, char* name, char* value)
     
    106156        if (newsection)
    107157        {
    108                 if (!stricmp(section, "language"))
     158                if (!stricmp(section, "patch"))
     159                        ini_section = s_patch;
     160                else if (!stricmp(section, "language"))
    109161                        ini_section = s_language;
    110162                else
     
    117169        switch (ini_section)
    118170        {
     171                case s_patch:
     172                        if (!stricmp(name, "fonttexturecache"))
     173                                patch_fonttexturecache = !stricmp(value, "true");
     174                        else if (!stricmp(name, "largetextures"))
     175                                patch_largetextures = !stricmp(value, "true");
     176                        else if (!stricmp(name, "pathfinding"))
     177                                patch_pathfinding = !stricmp(value, "true");
     178                        else if (!stricmp(name, "projaware"))
     179                                patch_projaware = !stricmp(value, "true");
     180                        else if (!stricmp(name, "wpfadetime"))
     181                                patch_wpfadetime = !stricmp(value, "true");
     182                        else if (!stricmp(name, "kickguns"))
     183                                patch_kickguns = !stricmp(value, "true");
     184                        else if (!stricmp(name, "cooldowntimer"))
     185                                patch_cooldowntimer = !stricmp(value, "true");
     186                        else if (!stricmp(name, "throwtest"))
     187                                patch_throwtest = !stricmp(value, "true");
     188                        else if (!stricmp(name, "alttab"))
     189                                patch_alttab = !stricmp(value, "true");
     190                        else if (!stricmp(name, "particledisablebit"))
     191                                patch_particledisablebit = !stricmp(value, "true");
     192                        else if (!stricmp(name, "multibyte"))
     193                                patch_multibyte = !stricmp(value, "true");
     194                        else if (!stricmp(name, "cheattable"))
     195                                patch_cheattable = !stricmp(value, "true");
     196                        else if (!stricmp(name, "safeprintf"))
     197                                patch_safeprintf = !stricmp(value, "true");
     198                        else if (!stricmp(name, "daodandisplayenum"))
     199                                patch_daodandisplayenum = !stricmp(value, "true");
     200                        else if (!stricmp(name, "usegettickcount"))
     201                                patch_usegettickcount = !stricmp(value, "true");
     202                        else if (!stricmp(name, "usedaodangl"))
     203                                patch_usedaodangl = !stricmp(value, "true");
     204                        else
     205                                DDrStartupMessage("unrecognised patch \"%s\"", name);
     206                        break;
    119207                case s_language:
    120208                        if (!stricmp(name, "savepoint"))
    121209                        {
    122                                 DDrPatch_StrDup(OniExe + 0x000fd730, value);
    123                                 DDrPatch_StrDup(OniExe + 0x000fd738, value);
     210                                char* str = strdup(value);
     211                                DDrPatch_Int32(OniExe + 0x000fd730, (int)str);
     212                                DDrPatch_Int32(OniExe + 0x000fd738, (int)str);
    124213                        }
    125214                        else if (!stricmp(name, "syndicatewarehouse"))
    126215                        {
    127                                 DDrPatch_StrDup(OniExe + 0x000fd71a, value);
    128                                 DDrPatch_StrDup(OniExe + 0x0010ef75, value);
     216                                char* str = strdup(value);
     217                                DDrPatch_Int32(OniExe + 0x000fd71a, (int)str);
     218                                DDrPatch_Int32(OniExe + 0x0010ef75, (int)str);
    129219                        }
     220                        else if (!stricmp(name, "damn"))
     221                                DDrPatch_StrDup(OniExe + 0x0010fb6e, value);
    130222                        else if (!stricmp(name, "blam"))
    131223                                DDrPatch_StrDup(OniExe + 0x0010fb73, value);
     
    166258       
    167259        // Safe startup message printer
    168         DDrPatch_MakeJump(UUrStartupMessage, DDrStartupMessage);
     260        if (patch_safeprintf)
     261                DDrPatch_MakeJump(UUrStartupMessage, DDrStartupMessage);
    169262       
    170263        // Daodan device mode enumeration function
    171         DDrPatch_MakeJump(gl_enumerate_valid_display_modes, daodan_enumerate_valid_display_modes);
     264        if (patch_daodandisplayenum)
     265                DDrPatch_MakeJump(gl_enumerate_valid_display_modes, daodan_enumerate_valid_display_modes);
    172266       
    173267        // Performance patch
    174         DDrPatch_MakeJump(UUrMachineTime_High, DDrMachineTime_High);
    175         DDrPatch_MakeJump(UUrMachineTime_High_Frequency, DDrMachineTime_High_Frequency);
    176         DDrPatch_MakeJump(UUrMachineTime_Sixtieths, DDrMachineTime_Sixtieths);
     268        if (patch_usegettickcount)
     269        {
     270                DDrPatch_MakeJump(UUrMachineTime_High, DDrMachineTime_High);
     271                DDrPatch_MakeJump(UUrMachineTime_High_Frequency, DDrMachineTime_High_Frequency);
     272                DDrPatch_MakeJump(UUrMachineTime_Sixtieths, DDrMachineTime_Sixtieths);
     273        }
    177274       
    178275        // Cheats always enabled
     
    180277       
    181278        // Windowed mode
    182 //      DDrPatch_MakeJump(ONrPlatform_Initialize, DDrPlatform_Initialize);
    183 //      DDrPatch_MakeJump(gl_platform_initialize, daodangl_platform_initialize);
     279        if (patch_usedaodangl)
     280        {
     281                DDrPatch_MakeJump(ONrPlatform_Initialize, DDrPlatform_Initialize);
     282                DDrPatch_MakeJump(gl_platform_initialize, daodangl_platform_initialize);
     283        }
    184284       
    185285        init_daodan_gl();
Note: See TracChangeset for help on using the changeset viewer.