| 1 |
#include "Localization.h" |
| 2 |
#include "../Daodan_Config.h" |
| 3 |
#include "../Daodan_Patch.h" |
| 4 |
#include "../Inifile_Reader.h" |
| 5 |
#include "Utility.h" |
| 6 |
#include "Cheater.h" |
| 7 |
|
| 8 |
#include <beaengine/BeaEngine.h> |
| 9 |
|
| 10 |
void LocalizationIniCallback(const char* section, const char* name, const char* value) |
| 11 |
{ |
| 12 |
if (!_stricmp(name, "blam")) |
| 13 |
{ |
| 14 |
char* str = _strdup(value); |
| 15 |
DDrPatch_Int32((int*)(OniExe + 0x0010fb73), (int)str); |
| 16 |
} |
| 17 |
else if (!_stricmp(name, "damn")) |
| 18 |
{ |
| 19 |
char* str = _strdup(value); |
| 20 |
DDrPatch_Int32((int*)(OniExe + 0x0010fb6e), (int)str); |
| 21 |
} |
| 22 |
else if (!_stricmp(name, "savepoint")) |
| 23 |
{ |
| 24 |
char* str = malloc(strlen(value) + 10); |
| 25 |
memset(str, ' ', 5); |
| 26 |
strcpy(str+5, value); |
| 27 |
strcpy(str + strlen(str), " %d"); |
| 28 |
bool b1 = DDrPatch_Int32((int*)(OniExe + 0x000fd730), (int)str); |
| 29 |
bool b2 = DDrPatch_Int32((int*)(OniExe + 0x000fd738), (int)str); |
| 30 |
} |
| 31 |
else if (!_stricmp(name, "syndicatewarehouse")) |
| 32 |
{ |
| 33 |
char* str = _strdup(value); |
| 34 |
DDrPatch_Int32((int*)(OniExe + 0x000fd71a), (int)str); |
| 35 |
DDrPatch_Int32((int*)(OniExe + 0x0010ef75), (int)str); |
| 36 |
} |
| 37 |
else if (!_stricmp(name, "shapeshifter_on")) |
| 38 |
DDr_CheatTable[0].message_on = _strdup(value); |
| 39 |
else if (!_stricmp(name, "shapeshifter_off")) |
| 40 |
DDr_CheatTable[0].message_off = _strdup(value); |
| 41 |
else if (!_stricmp(name, "liveforever_on")) |
| 42 |
DDr_CheatTable[1].message_on = _strdup(value); |
| 43 |
else if (!_stricmp(name, "liveforever_off")) |
| 44 |
DDr_CheatTable[1].message_off = _strdup(value); |
| 45 |
else if (!_stricmp(name, "touchofdeath_on")) |
| 46 |
DDr_CheatTable[2].message_on = _strdup(value); |
| 47 |
else if (!_stricmp(name, "touchofdeath_off")) |
| 48 |
DDr_CheatTable[2].message_off = _strdup(value); |
| 49 |
else if (!_stricmp(name, "canttouchthis_on")) |
| 50 |
DDr_CheatTable[3].message_on = _strdup(value); |
| 51 |
else if (!_stricmp(name, "canttouchthis_off")) |
| 52 |
DDr_CheatTable[3].message_off = _strdup(value); |
| 53 |
else if (!_stricmp(name, "fatloot_on")) |
| 54 |
DDr_CheatTable[4].message_on = _strdup(value); |
| 55 |
else if (!_stricmp(name, "glassworld_on")) |
| 56 |
DDr_CheatTable[5].message_on = _strdup(value); |
| 57 |
else if (!_stricmp(name, "glassworld_off")) |
| 58 |
DDr_CheatTable[5].message_off = _strdup(value); |
| 59 |
else if (!_stricmp(name, "winlevel_on")) |
| 60 |
DDr_CheatTable[6].message_on = _strdup(value); |
| 61 |
else if (!_stricmp(name, "loselevel_on")) |
| 62 |
DDr_CheatTable[7].message_on = _strdup(value); |
| 63 |
else if (!_stricmp(name, "bighead_on")) |
| 64 |
DDr_CheatTable[8].message_on = _strdup(value); |
| 65 |
else if (!_stricmp(name, "bighead_off")) |
| 66 |
DDr_CheatTable[8].message_off = _strdup(value); |
| 67 |
else if (!_stricmp(name, "minime_on")) |
| 68 |
DDr_CheatTable[9].message_on = _strdup(value); |
| 69 |
else if (!_stricmp(name, "minime_off")) |
| 70 |
DDr_CheatTable[9].message_off = _strdup(value); |
| 71 |
else if (!_stricmp(name, "superammo_on")) |
| 72 |
DDr_CheatTable[10].message_on = _strdup(value); |
| 73 |
else if (!_stricmp(name, "superammo_off")) |
| 74 |
DDr_CheatTable[10].message_off = _strdup(value); |
| 75 |
else if (!_stricmp(name, "devmode_on")) |
| 76 |
{ |
| 77 |
char* str = _strdup(value); |
| 78 |
DDr_CheatTable[11].message_on = str; |
| 79 |
DDr_CheatTable[cheat_x].message_on = str; |
| 80 |
} |
| 81 |
else if (!_stricmp(name, "devmode_off")) |
| 82 |
{ |
| 83 |
char* str = _strdup(value); |
| 84 |
DDr_CheatTable[11].message_off = str; |
| 85 |
DDr_CheatTable[cheat_x].message_off = str; |
| 86 |
} |
| 87 |
else if (!_stricmp(name, "reservoirdogs_on")) |
| 88 |
DDr_CheatTable[12].message_on = _strdup(value); |
| 89 |
else if (!_stricmp(name, "reservoirdogs_off")) |
| 90 |
DDr_CheatTable[12].message_off = _strdup(value); |
| 91 |
else if (!_stricmp(name, "roughjustice_on")) |
| 92 |
DDr_CheatTable[13].message_on = _strdup(value); |
| 93 |
else if (!_stricmp(name, "roughjustice_off")) |
| 94 |
DDr_CheatTable[13].message_off = _strdup(value); |
| 95 |
else if (!_stricmp(name, "chenille_on")) |
| 96 |
DDr_CheatTable[14].message_on = _strdup(value); |
| 97 |
else if (!_stricmp(name, "chenille_off")) |
| 98 |
DDr_CheatTable[14].message_off = _strdup(value); |
| 99 |
else if (!_stricmp(name, "behemoth_on")) |
| 100 |
DDr_CheatTable[15].message_on = _strdup(value); |
| 101 |
else if (!_stricmp(name, "behemoth_off")) |
| 102 |
DDr_CheatTable[15].message_off = _strdup(value); |
| 103 |
else if (!_stricmp(name, "elderrune_on")) |
| 104 |
DDr_CheatTable[16].message_on = _strdup(value); |
| 105 |
else if (!_stricmp(name, "elderrune_off")) |
| 106 |
DDr_CheatTable[16].message_off = _strdup(value); |
| 107 |
else if (!_stricmp(name, "moonshadow_on")) |
| 108 |
DDr_CheatTable[17].message_on = _strdup(value); |
| 109 |
else if (!_stricmp(name, "moonshadow_off")) |
| 110 |
DDr_CheatTable[17].message_off = _strdup(value); |
| 111 |
else if (!_stricmp(name, "munitionfrenzy_on")) |
| 112 |
DDr_CheatTable[18].message_on = _strdup(value); |
| 113 |
else if (!_stricmp(name, "fistsoflegend_on")) |
| 114 |
DDr_CheatTable[19].message_on = _strdup(value); |
| 115 |
else if (!_stricmp(name, "fistsoflegend_off")) |
| 116 |
DDr_CheatTable[19].message_off = _strdup(value); |
| 117 |
else if (!_stricmp(name, "killmequick_on")) |
| 118 |
DDr_CheatTable[20].message_on = _strdup(value); |
| 119 |
else if (!_stricmp(name, "killmequick_off")) |
| 120 |
DDr_CheatTable[20].message_off = _strdup(value); |
| 121 |
else if (!_stricmp(name, "carousel_on")) |
| 122 |
DDr_CheatTable[21].message_on = _strdup(value); |
| 123 |
else if (!_stricmp(name, "carousel_off")) |
| 124 |
DDr_CheatTable[21].message_off = _strdup(value); |
| 125 |
} |
| 126 |
|
| 127 |
void DD_Localization() |
| 128 |
{ |
| 129 |
char* lang = DDrConfig_GetOptOfType("language.language", C_STRING)->value.stringVal; |
| 130 |
char filename[50] = "daodan_locales/"; |
| 131 |
strcpy(filename + strlen(filename), lang); |
| 132 |
strcpy(filename + strlen(filename), ".ini"); |
| 133 |
// STARTUPMESSAGE("Locale file: %s", filename); |
| 134 |
if (_stricmp(lang, "en")) |
| 135 |
{ |
| 136 |
STARTUPMESSAGE("Language: %s", lang); |
| 137 |
uint32_t attr = GetFileAttributes("daodan_locales"); |
| 138 |
if (attr == INVALID_FILE_ATTRIBUTES) |
| 139 |
{ |
| 140 |
STARTUPMESSAGE("Locales folder does not exist", 0); |
| 141 |
return; |
| 142 |
} |
| 143 |
if ((attr & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) |
| 144 |
{ |
| 145 |
STARTUPMESSAGE("Locales folder does not exist", 0); |
| 146 |
return; |
| 147 |
} |
| 148 |
|
| 149 |
if (GetFileAttributes(filename) == INVALID_FILE_ATTRIBUTES) |
| 150 |
{ |
| 151 |
STARTUPMESSAGE("Locale file for language \"%s\" does not exist", lang); |
| 152 |
return; |
| 153 |
} |
| 154 |
|
| 155 |
if (!Inifile_Read(filename, LocalizationIniCallback)) |
| 156 |
STARTUPMESSAGE("Error reading %s, check your syntax!", filename); |
| 157 |
} |
| 158 |
} |
| 159 |
|