Changeset 346
- Timestamp:
- Jun 9, 2009, 2:00:41 PM (16 years ago)
- Location:
- Daodan
- Files:
-
- 5 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
Daodan/build.bat
r339 r346 1 gcc -O3 -s -Wall -shared -fomit-frame-pointer -o build\binkw32.dll src\Oni_Symbols.S src\Daodan.c src\Daodan_DLLStubs.c src\Daodan_Patch.c src\Daodan_Utility.c src\Daodan_Win32.c src\Daodan_Cheater.c src\Daodan_Persistence.c src\daodan_gl.c -lgdi321 gcc -O3 -s -Wall -shared -fomit-frame-pointer -o build\binkw32.dll src\Oni_Symbols.S src\Daodan.c src\Daodan_DLLStubs.c src\Daodan_Patch.c src\Daodan_Utility.c src\Daodan_Win32.c src\Daodan_Cheater.c src\Daodan_Persistence.c src\daodan_gl.c src\inifile_reader.c -lgdi32 -
Daodan/src/Daodan.c
r342 r346 1 #include <string.h> 2 1 3 #include "Daodan.h" 2 4 #include "Daodan_Patch.h" … … 14 16 #include "daodan_gl.h" 15 17 18 #include "inifile.h" 19 16 20 HMODULE DDrDLLModule; 17 21 HMODULE DDrONiModule; … … 19 23 bool DDrPatch_Init() 20 24 { 21 DDrStartupMessage(" daodan attached,patching engine");25 DDrStartupMessage("patching engine"); 22 26 23 27 // Font texture cache doubled … … 96 100 } 97 101 102 enum {s_unknown, s_language} ini_section; 103 104 bool DDrIniCallback(char* section, bool newsection, char* name, char* value) 105 { 106 if (newsection) 107 { 108 if (!stricmp(section, "language")) 109 ini_section = s_language; 110 else 111 { 112 ini_section = s_unknown; 113 DDrStartupMessage("unrecognised ini section \"%s\"", section); 114 } 115 } 116 117 switch (ini_section) 118 { 119 case s_language: 120 if (!stricmp(name, "savepoint")) 121 { 122 DDrPatch_StrDup(OniExe + 0x000fd730, value); 123 DDrPatch_StrDup(OniExe + 0x000fd738, value); 124 } 125 else if (!stricmp(name, "syndicatewarehouse")) 126 { 127 DDrPatch_StrDup(OniExe + 0x000fd71a, value); 128 DDrPatch_StrDup(OniExe + 0x0010ef75, value); 129 } 130 else if (!stricmp(name, "blam")) 131 DDrPatch_StrDup(OniExe + 0x0010fb73, value); 132 else 133 DDrStartupMessage("unrecognised language item \"%s\"", name); 134 break; 135 default: 136 break; 137 } 138 139 return true; 140 } 141 142 void DDrConfig() 143 { 144 if (GetFileAttributes("daodan.ini") == INVALID_FILE_ATTRIBUTES) 145 { 146 DDrStartupMessage("daodan.ini doesn't exist, creating"); 147 FILE* fp = fopen("daodan.ini", "w"); 148 if (fp) 149 { 150 fputs("[Options]\n", fp); 151 fclose(fp); 152 } 153 } 154 155 DDrStartupMessage("parsing daodan.ini..."); 156 if (!inifile_read("daodan.ini", DDrIniCallback)) 157 DDrStartupMessage("error reading daodan.ini, check your syntax!"); 158 DDrStartupMessage("finished parsing"); 159 } 160 98 161 void __cdecl DDrMain(int argc, char* argv[]) 99 162 { 163 DDrStartupMessage("daodan attached!"); 164 DDrConfig(); 100 165 DDrPatch_Init(); 101 166 -
Daodan/src/Daodan_Patch.c
r272 r346 1 1 #include "Daodan_Patch.h" 2 2 #include <windows.h> 3 #include <string.h> 3 4 4 5 bool DDrPatch_MakeJump(void* from, void* to) … … 87 88 return false; 88 89 } 90 91 bool DDrPatch_StrDup(int* dest, const char* value) 92 { 93 DWORD oldp; 94 95 if (VirtualProtect(dest, 4, PAGE_EXECUTE_READWRITE, &oldp)) 96 { 97 *dest = (int)strdup(value); 98 VirtualProtect(dest, 4, oldp, &oldp); 99 return true; 100 } 101 else 102 return false; 103 } -
Daodan/src/Daodan_Patch.h
r274 r346 15 15 bool DDrPatch_Int32(int* dest, int value); 16 16 bool DDrPatch_Int16(short* dest, short value); 17 bool DDrPatch_StrDup(int* dest, const char* value); 17 18 18 19 #endif
Note:
See TracChangeset
for help on using the changeset viewer.