1 |
+ |
#include <string.h> |
2 |
+ |
|
3 |
|
#include "Daodan.h" |
4 |
|
#include "Daodan_Patch.h" |
5 |
|
#include "Daodan_Utility.h" |
15 |
|
#include "oni_gl.h" |
16 |
|
#include "daodan_gl.h" |
17 |
|
|
18 |
+ |
#include "inifile.h" |
19 |
+ |
|
20 |
|
HMODULE DDrDLLModule; |
21 |
|
HMODULE DDrONiModule; |
22 |
|
|
23 |
|
bool DDrPatch_Init() |
24 |
|
{ |
25 |
< |
DDrStartupMessage("daodan attached, patching engine"); |
25 |
> |
DDrStartupMessage("patching engine"); |
26 |
|
|
27 |
|
// Font texture cache doubled |
28 |
|
DDrPatch_Byte (OniExe + 0x00020ea7, 0x20); |
99 |
|
return true; |
100 |
|
} |
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 |
+ |
|
161 |
|
void __cdecl DDrMain(int argc, char* argv[]) |
162 |
|
{ |
163 |
+ |
DDrStartupMessage("daodan attached!"); |
164 |
+ |
DDrConfig(); |
165 |
|
DDrPatch_Init(); |
166 |
|
|
167 |
|
// Safe startup message printer |