Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //////////////////// CTextSprite.h ////////////////////////////////////
- struct CTextSprite // sizeof=0x3C
- {
- int type;
- char field_4;
- char field_5;
- short textureID;
- float cornerA_X;
- float cornerA_Y;
- float cornerB_X;
- float cornerB_Y;
- float angle;
- int transparentColor;
- char gxt[8];
- int field_28;
- int field_2C;
- int field_30;
- int field_34;
- char textboxStyle;
- char field_39[3];
- };
- ///////////////////// INJECTOR.H ////////////////////////////
- #include <Windows.h>
- void WriteMemory(void* Address, int size, DWORD value, bool vp = false)
- {
- DWORD oldProtect;
- if(vp)
- VirtualProtect(Address, size, PAGE_EXECUTE_READWRITE, &oldProtect);
- memcpy(Address, &value, size);
- if(vp)
- VirtualProtect(Address, size, oldProtect, &oldProtect);
- }
- #define GV_UNK -1
- #define GV_US10 1
- #define GV_EU10 2
- #define GV_EU101 3
- DWORD GetGameVersion(void)
- {
- return
- (*(DWORD*)0x8A6168 == 0x8523A0)? GV_EU101: //1.01 eu
- (*(DWORD*)0x8A4004 == 0x8339CA)? GV_US10: //1.0 us
- (*(DWORD*)0x8A4004 == 0x833A0A)? GV_EU10: //1.0 eu
- GV_UNK; //other
- }
- struct
- {
- void LoadAddresses(DWORD GV)
- {
- switch(GV)
- {
- case GV_US10:
- sub_464980 = 0x464980; // sub_ADDRESS based in 1.0US
- sub_465A40 = 0x465A40;
- sub_84A7B0 = 0x84A7B0;
- sub_856170 = 0x856170;
- loadScm = 0x468D50;
- opcode_038F = 0x484075;
- break;
- }
- }
- DWORD sub_464980;
- DWORD sub_465A40;
- DWORD sub_84A7B0;
- DWORD sub_856170;
- DWORD loadScm;
- DWORD opcode_038F;
- } Address;
- /////////////////////////// dllmain.cpp /////////////////////////////////
- #include <Windows.h>
- #include <stdio.h>
- #include "CTextSprite.h"
- #include "Injector.h"
- #define NEW_SIZE 1024 // old is 128
- CTextSprite textSprites[NEW_SIZE];
- DWORD* textures;//[NEW_SIZE];
- void Inject_textSprites(void);
- void Inject_textures(void);
- BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
- {
- DWORD GameVersion;
- switch (ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- Address.LoadAddresses(GetGameVersion());
- Inject_textSprites();
- Inject_textures();
- break;
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- case DLL_PROCESS_DETACH:
- break;
- }
- return TRUE;
- }
- void Inject_textSprites(void)
- {
- /*
- .text:0046498A 054 mov esi, offset _textSprites ; used for mini-games
- .text:00469175 024 cmp esi, (offset _textSprites.cornerA_X+2) ; used for mini-games
- .text:004691A2 024 mov esi, (offset _textSprites.transparentColor+2) ; used for mini-games
- .text:0046A196 020 mov eax, offset _textSprites.field_4 ; used for mini-games
- .text:0046E5B2 0D4 mov dword ptr _textSprites.type[eax], 5 ; used for mini-games
- .text:0046E5BD 0D4 mov _textSprites.textureID[eax], dx ; used for mini-games
- .text:0046E5CC 0D4 fstp _textSprites.cornerA_X[eax] ; used for mini-games
- .text:0046E5FC 0D4 fstp _textSprites.cornerA_Y[eax] ; used for mini-games
- .text:0046E608 0D4 fstp _textSprites.cornerB_X[eax] ; used for mini-games
- .text:0046E61A 0D4 fstp _textSprites.cornerB_Y[eax] ; used for mini-games
- .text:0046E630 0D4 fstp _textSprites.angle[eax] ; used for mini-games
- .text:0046E655 0D8 lea ecx, _textSprites.transparentColor[esi] ; used for mini-games
- .text:0046E667 0D4 mov _textSprites.gxt[esi], 0 ; used for mini-games
- .text:004770A7 090 mov dword ptr _textSprites.type[eax], 2 ; used for mini-games
- .text:004770B1 090 mov _textSprites.textureID[eax], 0FFFFh ; used for mini-games
- .text:004770C5 094 fstp _textSprites.cornerA_X[eax] ; used for mini-games
- .text:004770EF 0A0 fstp _textSprites.cornerA_Y[eax] ; used for mini-games
- .text:004770FB 0A0 fstp _textSprites.cornerB_X[eax] ; used for mini-games
- .text:00477105 0A0 fstp _textSprites.cornerB_Y[eax] ; used for mini-games
- .text:0047710B 0A0 mov _textSprites.angle[eax], 0 ; used for mini-games
- .text:0047711B 094 lea ecx, _textSprites.transparentColor[edi] ; used for mini-games
- .text:00477133 090 lea edx, _textSprites.gxt[esi] ; used for mini-games
- .text:00477151 090 mov byte ptr (_textSprites.field_28+2)[edi], cl ; used for mini-games
- .text:00477157 090 mov _textSprites.field_34[edi], 1 ; used for mini-games
- .text:00477161 090 mov dword ptr _textSprites.textboxStyle[edi], ebx ; used for mini-games
- .text:00483ED4 168 mov dword ptr _textSprites.type[eax], 4 ; used for mini-games
- .text:00483EDF 168 mov _textSprites.textureID[eax], dx ; used for mini-games
- .text:00483EEE 168 fstp _textSprites.cornerA_X[eax] ; used for mini-games
- .text:00483F1E 168 fstp _textSprites.cornerA_Y[eax] ; used for mini-games
- .text:00483F2A 168 fstp _textSprites.cornerB_X[eax] ; used for mini-games
- .text:00483F3C 168 fstp _textSprites.cornerB_Y[eax] ; used for mini-games
- .text:00483F42 168 mov _textSprites.angle[eax], 0 ; used for mini-games
- .text:00483F6F 16C lea ecx, _textSprites.transparentColor[esi] ; used for mini-games
- .text:00483F81 168 mov _textSprites.gxt[esi], 0 ; used for mini-games
- .text:00483FDB 168 mov dword ptr _textSprites.type[eax], 3 ; used for mini-games
- .text:00483FE7 168 mov _textSprites.textureID[eax], 0FFFFh ; used for mini-games
- .text:00483FF8 168 fstp _textSprites.cornerA_X[eax] ; used for mini-games
- .text:00484028 168 fstp _textSprites.cornerA_Y[eax] ; used for mini-games
- .text:00484036 170 fstp _textSprites.cornerB_X[eax] ; used for mini-games
- .text:00484048 170 fstp _textSprites.cornerB_Y[eax] ; used for mini-games
- .text:0048404E 170 mov _textSprites.angle[eax], 0 ; used for mini-games
- .text:004840DA 16C lea ecx, (_textSprites.textboxStyle+1DC4h)[ecx*4] ; used for mini-games
- .text:00485590 168 mov _textSprites.field_4[ecx], 1 ; used for mini-games
- .text:004855A8 168 mov _textSprites.field_4[edx], 0 ; used for mini-games
- .text:0084A791 010 push offset _textSprites ; objects
- .text:008561BC 00C push offset _textSprites ; objects
- */
- }
- void Inject_textures(void)
- {
- textures = new DWORD[NEW_SIZE];
- DWORD atextures = (DWORD) textures;
- /////// DEBUG TEXT /////////////////////////////////////
- char atxt[12];
- sprintf(atxt, "%X", atextures);
- MessageBoxA(NULL, atxt, "Caption", MB_OK);
- ///////////////////////////////////////////////////////
- //0x036A2F50
- WriteMemory((void*)(Address.sub_464980 + 0xFA + 0x3), 4, atextures, true); // if remove it works
- WriteMemory((void*)(Address.sub_464980 + 0x1ED + 0x3), 4, atextures, true); // -
- WriteMemory((void*)(Address.opcode_038F + 0x65 + 0x3), 4, atextures, true);
- //////////////////
- //WriteMemory((void*)(Address.sub_465A40 + 0x2), 1, 0xBE, true); // (mov esi, ...), HOODLUM shit.
- //WriteMemory((void*)(Address.sub_465A40 + 0x2 + 0x1), 4, atextures, true);
- //////////////////
- WriteMemory((void*)(0x0401554 + 0x1), 4, atextures, true);
- //WriteMemory((void*)(Address.loadScm + 0x4B7 + 0x2), 4, atextures+0x1E, true); // I SHOULD SET IT WHEN I DO THE SPRITES
- WriteMemory((void*)(Address.loadScm + 0x4C6 + 0x1), 4, atextures, true);
- WriteMemory((void*)(Address.sub_84A7B0 + 0x11 + 0x1), 4, atextures, true);
- WriteMemory((void*)(Address.sub_856170 + 0xC + 0x1), 4, atextures, true);
- /*
- .text:00464A7A 05C lea ecx, _textures[ecx*4]
- .text:00464B6D 078 lea ecx, _textures[ecx*4]
- .text:00465A42 008 mov esi, offset _textures
- .text:00469207 024 cmp esi, (offset _textures+1Eh)
- .text:00469216 024 mov esi, offset _textures
- .text:0084A7C1 010 push offset _textures ; objects
- .text:0085617C 00C push offset _textures ; objects
- .text:004840DA 16C lea ecx, (_textSprites.textboxStyle+1DC4h)[ecx*4] ; used for mini-games
- */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement