Last active
July 22, 2017 09:26
-
-
Save aap/a449ef8a039eb2f17fe4ebf4ae4c37b5 to your computer and use it in GitHub Desktop.
24h timecycle for GTA SA
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define _CRT_SECURE_NO_WARNINGS | |
#pragma warning(disable: 4244) // int to float | |
#pragma warning(disable: 4800) // int to bool | |
#pragma warning(disable: 4838) // narrowing conversion | |
#include <windows.h> | |
// use https://github.com/aap/skygfx_vc/blob/master/src/MemoryMgr.h | |
#include "MemoryMgr.h" | |
#define NUMWEATHERS 23 | |
#define NUMHOURS 24 | |
#define EXTRASTART 21 | |
typedef unsigned char uchar; | |
typedef unsigned short ushort; | |
typedef unsigned int uint; | |
HMODULE dllModule; | |
class CTimeCycle | |
{ | |
public: | |
static uchar m_nDirectionalMult[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nWaterFogAlpha[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nHighLightMinIntensity[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fCloudAlpha[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fPostFx2Alpha[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fPostFx2Blue[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fPostFx2Green[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fPostFx2Red[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fPostFx1Alpha[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fPostFx1Blue[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fPostFx1Green[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fPostFx1Red[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fWaterAlpha[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fWaterBlue[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fWaterGreen[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fWaterRed[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nLowCloudsRed[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fLightsOnGroundBrightness[NUMHOURS][NUMWEATHERS]; | |
static ushort m_fFogStart[NUMHOURS][NUMWEATHERS]; | |
static ushort m_fFarClip[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nPoleShadowStrength[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nLightShadowStrength[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nShadowStrength[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fSpriteBrightness[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fSpriteSize[NUMHOURS][NUMWEATHERS]; | |
static uchar m_fSunSize[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nSunCoronaRed[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nSunCoreBlue[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nSunCoreGreen[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nSunCoreRed[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nSkyBottomRed[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nSkyTopBlue[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nSkyTopGreen[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nSkyTopRed[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nAmbientBlue_Obj[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nAmbientGreen_Obj[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nAmbientRed_Obj[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nAmbientBlue[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nAmbientGreen[NUMHOURS][NUMWEATHERS]; | |
static uchar m_nAmbientRed[NUMHOURS][NUMWEATHERS]; | |
static int &m_ExtraColourWeatherType; | |
static int &m_ExtraColour; | |
static int &m_bExtraColourOn; | |
static float &m_ExtraColourInter; | |
static void StartExtraColour(int extracolor, int keepInter); | |
}; | |
uchar CTimeCycle::m_nDirectionalMult[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nWaterFogAlpha[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nHighLightMinIntensity[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fCloudAlpha[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fPostFx2Alpha[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fPostFx2Blue[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fPostFx2Green[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fPostFx2Red[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fPostFx1Alpha[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fPostFx1Blue[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fPostFx1Green[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fPostFx1Red[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fWaterAlpha[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fWaterBlue[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fWaterGreen[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fWaterRed[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nLowCloudsRed[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fLightsOnGroundBrightness[NUMHOURS][NUMWEATHERS]; | |
ushort CTimeCycle::m_fFogStart[NUMHOURS][NUMWEATHERS]; | |
ushort CTimeCycle::m_fFarClip[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nPoleShadowStrength[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nLightShadowStrength[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nShadowStrength[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fSpriteBrightness[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fSpriteSize[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_fSunSize[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nSunCoronaRed[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nSunCoreBlue[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nSunCoreGreen[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nSunCoreRed[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nSkyBottomRed[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nSkyTopBlue[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nSkyTopGreen[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nSkyTopRed[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nAmbientBlue_Obj[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nAmbientGreen_Obj[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nAmbientRed_Obj[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nAmbientBlue[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nAmbientGreen[NUMHOURS][NUMWEATHERS]; | |
uchar CTimeCycle::m_nAmbientRed[NUMHOURS][NUMWEATHERS]; | |
int &CTimeCycle::m_ExtraColourWeatherType = *(int*)0xB79E40; | |
int &CTimeCycle::m_ExtraColour = *(int*)0xB79E44; | |
int &CTimeCycle::m_bExtraColourOn = *(int*)0xB7C484; | |
float &CTimeCycle::m_ExtraColourInter = *(float*)0xB79E3C; | |
void | |
CTimeCycle::StartExtraColour(int extracolor, int keepInter) | |
{ | |
CTimeCycle::m_ExtraColourWeatherType = extracolor / NUMHOURS + EXTRASTART; | |
CTimeCycle::m_ExtraColour = extracolor % NUMHOURS; | |
CTimeCycle::m_bExtraColourOn = 1; | |
CTimeCycle::m_ExtraColourInter = 0.0f; | |
if(!keepInter) | |
CTimeCycle::m_ExtraColourInter = 1.0f; | |
} | |
uchar timecycleHours[25] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 }; | |
uchar timecycleUnk[24] = { 30, 30, 30, 30, 30, 30, 30, 50, 52, 54, 56, 58, 60, 60, 60, 60, 60, 60, 60, 60, 50, 42, 35, 32 }; | |
void __declspec(naked) | |
mod24(void) | |
{ | |
_asm{ | |
// leave next hour % NUMHOURS in ebp | |
push eax | |
push edx | |
push ecx | |
mov eax, ebp | |
cdq | |
mov ecx,NUMHOURS | |
idiv ecx | |
mov ebp,edx | |
pop ecx | |
pop edx | |
pop eax | |
push 0x56056F | |
retn | |
} | |
} | |
void __declspec(naked) | |
mod24_1(void) | |
{ | |
_asm{ | |
// save extra weather to stack, extra hour to eax | |
cdq | |
mov ecx,NUMHOURS | |
idiv ecx // eax = weather, edx = hour | |
mov ecx,eax | |
add ecx,EXTRASTART | |
mov [esp+10h],ecx | |
mov eax,edx | |
push 0x5605F5 | |
retn | |
} | |
} | |
void __declspec(naked) | |
mod24_2(void) | |
{ | |
_asm{ | |
// leave extra weather in ebx, extra hour in edi | |
cdq | |
mov ecx,NUMHOURS | |
idiv ecx // eax = weather, edx = hour | |
mov ebx,eax | |
add ebx,EXTRASTART | |
mov edi,ebx | |
push 0x56116D | |
retn | |
} | |
} | |
void | |
patch(void) | |
{ | |
Patch<void*>(0x55F7C7, (void*)&CTimeCycle::m_nDirectionalMult); | |
Patch<void*>(0x5BBFEC, (void*)&CTimeCycle::m_nDirectionalMult); | |
Patch<void*>(0x55F7B8, (void*)&CTimeCycle::m_nWaterFogAlpha); | |
Patch<void*>(0x5BBFC5, (void*)&CTimeCycle::m_nWaterFogAlpha); | |
Patch<void*>(0x55F7A9, (void*)&CTimeCycle::m_nHighLightMinIntensity); | |
Patch<void*>(0x5BBFBF, (void*)&CTimeCycle::m_nHighLightMinIntensity); | |
Patch<void*>(0x55F793, (void*)&CTimeCycle::m_fCloudAlpha); | |
Patch<void*>(0x5BBFB2, (void*)&CTimeCycle::m_fCloudAlpha); | |
Patch<void*>(0x55F77D, (void*)&CTimeCycle::m_fPostFx2Alpha); | |
Patch<void*>(0x560E4B, (void*)&CTimeCycle::m_fPostFx2Alpha); | |
Patch<void*>(0x5BBF99, (void*)&CTimeCycle::m_fPostFx2Alpha); | |
Patch<void*>(0x55F767, (void*)&CTimeCycle::m_fPostFx2Blue); | |
Patch<void*>(0x560E2A, (void*)&CTimeCycle::m_fPostFx2Blue); | |
Patch<void*>(0x5BBF73, (void*)&CTimeCycle::m_fPostFx2Blue); | |
Patch<void*>(0x55F751, (void*)&CTimeCycle::m_fPostFx2Green); | |
Patch<void*>(0x560E09, (void*)&CTimeCycle::m_fPostFx2Green); | |
Patch<void*>(0x5BBF5F, (void*)&CTimeCycle::m_fPostFx2Green); | |
Patch<void*>(0x55F73B, (void*)&CTimeCycle::m_fPostFx2Red); | |
Patch<void*>(0x560DE3, (void*)&CTimeCycle::m_fPostFx2Red); | |
Patch<void*>(0x5BBF4D, (void*)&CTimeCycle::m_fPostFx2Red); | |
Patch<void*>(0x55F725, (void*)&CTimeCycle::m_fPostFx1Alpha); | |
Patch<void*>(0x560DC2, (void*)&CTimeCycle::m_fPostFx1Alpha); | |
Patch<void*>(0x5BBF87, (void*)&CTimeCycle::m_fPostFx1Alpha); | |
Patch<void*>(0x55F70F, (void*)&CTimeCycle::m_fPostFx1Blue); | |
Patch<void*>(0x560DA1, (void*)&CTimeCycle::m_fPostFx1Blue); | |
Patch<void*>(0x5BBF3B, (void*)&CTimeCycle::m_fPostFx1Blue); | |
Patch<void*>(0x55F6FC, (void*)&CTimeCycle::m_fPostFx1Green); | |
Patch<void*>(0x560D86, (void*)&CTimeCycle::m_fPostFx1Green); | |
Patch<void*>(0x5BBF29, (void*)&CTimeCycle::m_fPostFx1Green); | |
Patch<void*>(0x55F6E9, (void*)&CTimeCycle::m_fPostFx1Red); | |
Patch<void*>(0x560D66, (void*)&CTimeCycle::m_fPostFx1Red); | |
Patch<void*>(0x5BBF17, (void*)&CTimeCycle::m_fPostFx1Red); | |
Patch<void*>(0x55F6D6, (void*)&CTimeCycle::m_fWaterAlpha); | |
Patch<void*>(0x560C46, (void*)&CTimeCycle::m_fWaterAlpha); | |
Patch<void*>(0x5BBF08, (void*)&CTimeCycle::m_fWaterAlpha); | |
Patch<void*>(0x55F6C3, (void*)&CTimeCycle::m_fWaterBlue); | |
Patch<void*>(0x560C2B, (void*)&CTimeCycle::m_fWaterBlue); | |
Patch<void*>(0x5BBEF9, (void*)&CTimeCycle::m_fWaterBlue); | |
Patch<void*>(0x55F6B0, (void*)&CTimeCycle::m_fWaterGreen); | |
Patch<void*>(0x560C10, (void*)&CTimeCycle::m_fWaterGreen); | |
Patch<void*>(0x5BBEEA, (void*)&CTimeCycle::m_fWaterGreen); | |
Patch<void*>(0x55F69C, (void*)&CTimeCycle::m_fWaterRed); | |
Patch<void*>(0x560BF0, (void*)&CTimeCycle::m_fWaterRed); | |
Patch<void*>(0x5BBEDB, (void*)&CTimeCycle::m_fWaterRed); | |
Patch<void*>(0x55F690, (void*)&CTimeCycle::m_nFluffyCloudsBottomBlue); | |
Patch<void*>(0x5BBECC, (void*)&CTimeCycle::m_nFluffyCloudsBottomBlue); | |
Patch<void*>(0x55F683, (void*)&CTimeCycle::m_nFluffyCloudsBottomGreen); | |
Patch<void*>(0x5BBEC6, (void*)&CTimeCycle::m_nFluffyCloudsBottomGreen); | |
Patch<void*>(0x55F677, (void*)&CTimeCycle::m_nFluffyCloudsBottomRed); | |
Patch<void*>(0x5BBEC0, (void*)&CTimeCycle::m_nFluffyCloudsBottomRed); | |
Patch<void*>(0x55F66B, (void*)&CTimeCycle::m_nLowCloudsBlue); | |
Patch<void*>(0x5BBEB6, (void*)&CTimeCycle::m_nLowCloudsBlue); | |
Patch<void*>(0x55F65F, (void*)&CTimeCycle::m_nLowCloudsGreen); | |
Patch<void*>(0x5BBEAC, (void*)&CTimeCycle::m_nLowCloudsGreen); | |
Patch<void*>(0x55F653, (void*)&CTimeCycle::m_nLowCloudsRed); | |
Patch<void*>(0x5BBEA2, (void*)&CTimeCycle::m_nLowCloudsRed); | |
Patch<void*>(0x55F640, (void*)&CTimeCycle::m_fLightsOnGroundBrightness); | |
Patch<void*>(0x5BBE98, (void*)&CTimeCycle::m_fLightsOnGroundBrightness); | |
Patch<void*>(0x55F62E, (void*)&CTimeCycle::m_fFogStart); | |
Patch<void*>(0x560D42, (void*)&CTimeCycle::m_fFogStart); | |
Patch<void*>(0x5BBE7B, (void*)&CTimeCycle::m_fFogStart); | |
Patch<void*>(0x55F61B, (void*)&CTimeCycle::m_fFarClip); | |
Patch<void*>(0x560D0C, (void*)&CTimeCycle::m_fFarClip); | |
Patch<void*>(0x5BBE65, (void*)&CTimeCycle::m_fFarClip); | |
Patch<void*>(0x55F60F, (void*)&CTimeCycle::m_nPoleShadowStrength); | |
Patch<void*>(0x5BBE52, (void*)&CTimeCycle::m_nPoleShadowStrength); | |
Patch<void*>(0x55F603, (void*)&CTimeCycle::m_nLightShadowStrength); | |
Patch<void*>(0x5BBE4C, (void*)&CTimeCycle::m_nLightShadowStrength); | |
Patch<void*>(0x55F5F7, (void*)&CTimeCycle::m_nShadowStrength); | |
Patch<void*>(0x5BBE3B, (void*)&CTimeCycle::m_nShadowStrength); | |
Patch<void*>(0x55F5E4, (void*)&CTimeCycle::m_fSpriteBrightness); | |
Patch<void*>(0x5BBE2E, (void*)&CTimeCycle::m_fSpriteBrightness); | |
Patch<void*>(0x55F5D2, (void*)&CTimeCycle::m_fSpriteSize); | |
Patch<void*>(0x5BBE19, (void*)&CTimeCycle::m_fSpriteSize); | |
Patch<void*>(0x55F5C0, (void*)&CTimeCycle::m_fSunSize); | |
Patch<void*>(0x5BBDFE, (void*)&CTimeCycle::m_fSunSize); | |
Patch<void*>(0x55F5B5, (void*)&CTimeCycle::m_nSunCoronaBlue); | |
Patch<void*>(0x5BBDE6, (void*)&CTimeCycle::m_nSunCoronaBlue); | |
Patch<void*>(0x55F5A9, (void*)&CTimeCycle::m_nSunCoronaGreen); | |
Patch<void*>(0x5BBDE0, (void*)&CTimeCycle::m_nSunCoronaGreen); | |
Patch<void*>(0x55F59D, (void*)&CTimeCycle::m_nSunCoronaRed); | |
Patch<void*>(0x5BBDDA, (void*)&CTimeCycle::m_nSunCoronaRed); | |
Patch<void*>(0x55F591, (void*)&CTimeCycle::m_nSunCoreBlue); | |
Patch<void*>(0x5BBDC7, (void*)&CTimeCycle::m_nSunCoreBlue); | |
Patch<void*>(0x55F585, (void*)&CTimeCycle::m_nSunCoreGreen); | |
Patch<void*>(0x5BBDBA, (void*)&CTimeCycle::m_nSunCoreGreen); | |
Patch<void*>(0x55F579, (void*)&CTimeCycle::m_nSunCoreRed); | |
Patch<void*>(0x5BBDAD, (void*)&CTimeCycle::m_nSunCoreRed); | |
Patch<void*>(0x55F56D, (void*)&CTimeCycle::m_nSkyBottomBlue); | |
Patch<void*>(0x560BCA, (void*)&CTimeCycle::m_nSkyBottomBlue); | |
Patch<void*>(0x5BBDA0, (void*)&CTimeCycle::m_nSkyBottomBlue); | |
Patch<void*>(0x55F561, (void*)&CTimeCycle::m_nSkyBottomGreen); | |
Patch<void*>(0x560BA0, (void*)&CTimeCycle::m_nSkyBottomGreen); | |
Patch<void*>(0x5BBD93, (void*)&CTimeCycle::m_nSkyBottomGreen); | |
Patch<void*>(0x55F555, (void*)&CTimeCycle::m_nSkyBottomRed); | |
Patch<void*>(0x560B6D, (void*)&CTimeCycle::m_nSkyBottomRed); | |
Patch<void*>(0x5BBD86, (void*)&CTimeCycle::m_nSkyBottomRed); | |
Patch<void*>(0x55F549, (void*)&CTimeCycle::m_nSkyTopBlue); | |
Patch<void*>(0x560B47, (void*)&CTimeCycle::m_nSkyTopBlue); | |
Patch<void*>(0x560FD8, (void*)&CTimeCycle::m_nSkyTopBlue); | |
Patch<void*>(0x561197, (void*)&CTimeCycle::m_nSkyTopBlue); | |
Patch<void*>(0x5BBD79, (void*)&CTimeCycle::m_nSkyTopBlue); | |
Patch<void*>(0x55F53D, (void*)&CTimeCycle::m_nSkyTopGreen); | |
Patch<void*>(0x560B19, (void*)&CTimeCycle::m_nSkyTopGreen); | |
Patch<void*>(0x560FCE, (void*)&CTimeCycle::m_nSkyTopGreen); | |
Patch<void*>(0x56118D, (void*)&CTimeCycle::m_nSkyTopGreen); | |
Patch<void*>(0x5BBD6C, (void*)&CTimeCycle::m_nSkyTopGreen); | |
Patch<void*>(0x55F531, (void*)&CTimeCycle::m_nSkyTopRed); | |
Patch<void*>(0x560AEA, (void*)&CTimeCycle::m_nSkyTopRed); | |
Patch<void*>(0x560FC4, (void*)&CTimeCycle::m_nSkyTopRed); | |
Patch<void*>(0x561181, (void*)&CTimeCycle::m_nSkyTopRed); | |
Patch<void*>(0x5BBD5F, (void*)&CTimeCycle::m_nSkyTopRed); | |
Patch<void*>(0x55F51E, (void*)&CTimeCycle::m_nAmbientBlue_Obj); | |
Patch<void*>(0x560CF0, (void*)&CTimeCycle::m_nAmbientBlue_Obj); | |
Patch<void*>(0x5BBD52, (void*)&CTimeCycle::m_nAmbientBlue_Obj); | |
Patch<void*>(0x55F50C, (void*)&CTimeCycle::m_nAmbientGreen_Obj); | |
Patch<void*>(0x560CD5, (void*)&CTimeCycle::m_nAmbientGreen_Obj); | |
Patch<void*>(0x5BBD45, (void*)&CTimeCycle::m_nAmbientGreen_Obj); | |
Patch<void*>(0x55F4FA, (void*)&CTimeCycle::m_nAmbientRed_Obj); | |
Patch<void*>(0x560CB5, (void*)&CTimeCycle::m_nAmbientRed_Obj); | |
Patch<void*>(0x5BBD38, (void*)&CTimeCycle::m_nAmbientRed_Obj); | |
Patch<void*>(0x55F4E8, (void*)&CTimeCycle::m_nAmbientBlue); | |
Patch<void*>(0x560C9A, (void*)&CTimeCycle::m_nAmbientBlue); | |
Patch<void*>(0x5BBD2B, (void*)&CTimeCycle::m_nAmbientBlue); | |
Patch<void*>(0x55F4D6, (void*)&CTimeCycle::m_nAmbientGreen); | |
Patch<void*>(0x560C7F, (void*)&CTimeCycle::m_nAmbientGreen); | |
Patch<void*>(0x5BBD1E, (void*)&CTimeCycle::m_nAmbientGreen); | |
Patch<void*>(0x55F4C5, (void*)&CTimeCycle::m_nAmbientRed); | |
Patch<void*>(0x560C61, (void*)&CTimeCycle::m_nAmbientRed); | |
Patch<void*>(0x5BBD11, (void*)&CTimeCycle::m_nAmbientRed); | |
static char *timecycstr = "timecyc_24h.dat"; | |
Patch<char*>(0x5BBAD9 +1, timecycstr); | |
Patch<int>(0x5BBB18 +1, NUMHOURS); | |
Patch<uchar*>(0x560572, timecycleHours + 0x0); | |
Patch<uchar*>(0x56051E, timecycleHours + 0x1); | |
Patch<uchar*>(0x560579, timecycleHours + 0x1); | |
Patch<uchar*>(0x560543, timecycleHours + 0x2); | |
Patch<uchar*>(0x5613AD, timecycleUnk); | |
Patch<uchar*>(0x5613B8, timecycleUnk); | |
InjectHook(0x560562, mod24, PATCH_JUMP); | |
InjectHook(0x5605DA, mod24_1, PATCH_JUMP); | |
InjectHook(0x561158, mod24_2, PATCH_JUMP); | |
InjectHook(0x55FEC0, CTimeCycle::StartExtraColour, PATCH_JUMP); | |
} | |
BOOL WINAPI | |
DllMain(HINSTANCE hInst, DWORD reason, LPVOID) | |
{ | |
if(reason == DLL_PROCESS_ATTACH){ | |
// TODO: is this correct? | |
if(*(DWORD*)DynBaseAddress(0x82457C) != 0x94BF && | |
*(DWORD*)DynBaseAddress(0x8245BC) == 0x94BF) | |
return FALSE; | |
dllModule = hInst; | |
patch(); | |
} | |
return TRUE; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment