Changeset 346 for Daodan/src


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

parses daodan.ini to add language patches

Location:
Daodan/src
Files:
5 added
3 edited

Legend:

Unmodified
Added
Removed
  • Daodan/src/Daodan.c

    r342 r346  
     1#include <string.h>
     2
    13#include "Daodan.h"
    24#include "Daodan_Patch.h"
     
    1416#include "daodan_gl.h"
    1517
     18#include "inifile.h"
     19
    1620HMODULE DDrDLLModule;
    1721HMODULE DDrONiModule;
     
    1923bool DDrPatch_Init()
    2024{
    21         DDrStartupMessage("daodan attached, patching engine");
     25        DDrStartupMessage("patching engine");
    2226       
    2327        // Font texture cache doubled
     
    96100}
    97101
     102enum {s_unknown, s_language} ini_section;
     103
     104bool 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
     142void 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
    98161void __cdecl DDrMain(int argc, char* argv[])
    99162{
     163        DDrStartupMessage("daodan attached!");
     164        DDrConfig();
    100165        DDrPatch_Init();
    101166       
  • Daodan/src/Daodan_Patch.c

    r272 r346  
    11#include "Daodan_Patch.h"
    22#include <windows.h>
     3#include <string.h>
    34
    45bool DDrPatch_MakeJump(void* from, void* to)
     
    8788                return false;
    8889}
     90
     91bool 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  
    1515bool DDrPatch_Int32(int* dest, int value);
    1616bool DDrPatch_Int16(short* dest, short value);
     17bool DDrPatch_StrDup(int* dest, const char* value);
    1718
    1819#endif
Note: See TracChangeset for help on using the changeset viewer.