Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Lensflare Modification for GTA San Andreas
- vol-gta.com 01/05/2012 DK22Pac
- */
- #include <windows.h>
- #include <stdio.h>
- #include <stdlib.h>
- #define patch(a, v, s) _patch((void*)(a), (DWORD)(v), (s))
- #define rwRENDERSTATETEXTURERASTER 1
- #define _RwEngineInstance 0xC97B24
- #define _txdIndexByName 0x731850
- #define _getTexDictionary 0x408340
- #define _RwTexDictionaryFindNamedTexture 0x7F39F0
- #define _drawTexturedRect 0x728350
- #define _RGBA__set 0x7170C0
- #define _processLineOfSight 0x56BA00
- #define playerPtr 0xB6F5F0
- #define ignoringEntity 0xB7CD68
- BOOL APIENTRY DllMain(HMODULE, DWORD, LPVOID);
- void _patch(void*,DWORD,DWORD);
- void LensflareDisableRandomizer(void);
- void NotTestPlayer(void);
- void setHaloSizeAndTexture(void);
- typedef struct halo
- {
- float distance, size;
- short red, green, blue, alpha;
- char texture[32];
- } h;
- char buf[1024];
- char aFx[8] = "fx";
- int i;
- float fZero = 0.0f;
- float fOne = 0.003921568627451f;
- float a[4];
- float t1, t2, t3;
- float t4 = 4.0f;
- char b[16];
- DWORD rwT;
- DWORD * pT = &rwT;
- h list[50];
- halo * pList = &list[0];
- BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved)
- {
- if(reason==DLL_PROCESS_ATTACH)
- {
- patch(0x6FB30A, pList, 4);
- patch(0x88DBA8, pList, 4);
- patch(0x6FB46B, (char)sizeof(halo), 1);
- patch(0x6FB355, 0xE9, 1);
- patch(0x6FB356, (DWORD)&LensflareDisableRandomizer - 0x6FB35A, 4);
- patch(0x6FB409, 0xE9, 1);
- patch(0x6FB40A, (DWORD)&NotTestPlayer - 0x6FB40E, 4);
- patch(0x6FB461, 0xE9, 1);
- patch(0x6FB462, (DWORD)&setHaloSizeAndTexture - 0x6FB466, 4);
- FILE * f = fopen("lensflare.dat", "rt");
- i = 0;
- while(!feof(f))
- {
- fgets(buf, 1024, f);
- if (buf[0] == ';') continue;
- if (buf[0] == '\0' || i > 49) break;
- sscanf(buf, "%*d %f %f %d %d %d %d %s", &list[i].distance,
- &list[i].size, &list[i].red, &list[i].green, &list[i].blue,
- &list[i].alpha, list[i].texture);
- if (strncmp (list[i].texture, "null", 4) == 0) memset(&list[i].texture, 0, 32);
- i++;
- }
- fclose(f);
- }
- return TRUE;
- }
- void _patch(void* pAddress, DWORD data, DWORD iSize)
- {
- unsigned long dwProtect[2];
- VirtualProtect(pAddress, iSize, PAGE_EXECUTE_READWRITE, &dwProtect[0]);
- switch(iSize)
- {
- case 1: *(BYTE*)pAddress = (BYTE)data;
- break;
- case 2: *(WORD*)pAddress = (WORD)data;
- break;
- case 4: *(DWORD*)pAddress = (DWORD)data;
- break;
- default: memset(pAddress, data, iSize);
- break;
- }
- VirtualProtect(pAddress, iSize, dwProtect[0], &dwProtect[1]);
- }
- void __declspec(naked) LensflareDisableRandomizer()
- {
- _asm
- {
- fmul [fZero]
- fadd [fOne]
- mov eax, 0x6FB35B
- jmp eax
- }
- }
- void __declspec(naked) NotTestPlayer()
- {
- _asm
- {
- mov eax, playerPtr
- mov edx, [eax]
- mov eax, ignoringEntity
- mov [eax], edx
- mov eax, _processLineOfSight
- call eax
- mov edx, 0x6FB40E
- jmp edx
- }
- }
- void __declspec(naked) setHaloSizeAndTexture()
- {
- _asm
- {
- mov ecx, [esp]
- mov t1, ecx
- mov ecx, [esp+4]
- mov t2, ecx
- fld dword ptr [esi+4]
- fmul [t4]
- fstp [t3]
- }
- a[0] = t1-t3;
- a[1] = t2-t3;
- a[2] = t1+t3;
- a[3] = t2+t3;
- __asm{
- xor eax, eax
- movsx eax, [esi+0xE]
- push eax
- movsx eax, [esi+0xC]
- push eax
- movsx eax, [esi+0xA]
- push eax
- movsx eax, [esi+8]
- push eax
- lea ecx, [b]
- mov eax, _RGBA__set
- call eax
- push eax
- lea eax, [a]
- push eax
- lea eax, [aFx]
- push eax
- mov eax, _txdIndexByName
- call eax
- add esp, 4
- push eax
- mov eax, _getTexDictionary
- call eax
- add esp, 4
- lea edx, [esi+0x10]
- push edx
- push eax
- mov eax, _RwTexDictionaryFindNamedTexture
- call eax
- add esp, 8
- mov rwT, eax
- mov ecx, pT
- mov eax, _drawTexturedRect
- call eax
- mov eax, 0x6FB466
- jmp eax
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement