#include "../main.h" #include "game.h" #include "util.h" #include "keystuff.h" #include "aimstuff.h" extern int iGtaVersion; extern CNetGame* pNetGame; extern CGame* pGame; extern CChatWindow *pChatWindow; extern DWORD dwGraphicsLoop; // Used for the external dll game loop. #define NUDE void _declspec(naked) //----------------------------------------------------------- // Globals which are used to avoid stack frame alteration // inside the following hook procedures. DWORD dwFarClipHookAddr=0; DWORD dwFarClipReturnAddr=0; // used generically PED_TYPE *_pPlayer; BYTE byteSavedCameraMode; DWORD dwCurPlayerActor=0; BYTE *pbyteCameraMode = (BYTE *)0xB6F1A8; BYTE *pbyteCurrentPlayer = (BYTE *)0xB7CD74; PED_TYPE pedCrimeReportTemp; // pay attention! used in 0x100A1790 ; void __thiscall CGame::PlayCrimeReport as pedCrimeReportTemp 0x10150D00 int iRadarColor1=0; DWORD dwSavedCheatFn=0; BOOL bAllowVehicleCreation=FALSE; float fFarClip=1400.0f; DWORD dwParam1; DWORD dwParam2; DWORD dwParamThis; DWORD unnamed_101516D4; WORD wLastRendObj=0; BYTE Unk1_JmpCode[] = {0xFF,0x19,0xD1,0xBE,0x35,0x00}; BYTE TaskEnterVehicleDriver_HookJmpCode[] = {0xFF,0x25,0xBB,0x19,0x69,0x00,0x90}; BYTE TaskExitVehicle_HookJmpCode[] = {0xFF,0x25,0xBA,0xB8,0x63,0x00,0x90}; BYTE RadarTranslateColor_HookJmpCode[] = {0xFF,0x25,0x79,0x4A,0x58,0x00,0x90}; BYTE CheatProcessHook_JmpCode[] = {0xFF,0x25,0xAA,0x85,0x43,0x00,0x90}; BYTE Unk2_JmpCode[] = {0xFF,0x25,0x33,0x14,0x42,0x00}; BYTE Unk3_JmpCode[] = {0xFF,0x25,0x61,0x36,0x53,0x00,0x90,0x90,0x90}; BYTE CGameShutdown_HookJmpCode[] = {0xFF,0x25,0xF1,0xC8,0x53,0x00,0x90}; BYTE PedDamage_HookJmpCode[] = {0xFF,0x25,0xBC,0x5A,0x4B,0x00}; BYTE Unk4_JmpCode[] = {0xFF,0x25,0x74,0x22,0x50,0x00,0x90,0x90,0x90,0x90}; BYTE Unk5_JmpCode[] = {0xFF,0x25,0x61,0x38,0x4C,0x00}; BYTE GetText_HookJmpCode[] = {0xFF,0x25,0x43,0x00,0x6A,0x00,0x90,0x90,0x90}; BYTE Unk6_JmpCode[] = {0xFF,0x25,0xD8,0xFF,0x5E,0x00,0x90}; BYTE CProjectileInfo_Update_HookJmpCode[] = {0xFF,0x25,0x1B,0x8B,0x73,0x00}; BYTE CWeapon__Satchel__Activate_HookJmpCode[] = {0xFF,0x25,0x5B,0x88,0x73,0x00}; BYTE Unk7_JmpCode[] = {0xFF,0x25,0x36,0xA0,0x63,0x00,0x90}; BYTE Unk8_JmpCode[] = {0xFF,0x25,0x77,0xAB,0x5E,0x00,0x90}; BYTE Unk9_JmpCode[] = {0xFF,0x25,0x39,0x88,0x4C,0x00,0x90,0x90}; BYTE CAnimManager__AddAnimation_Hook_HookJmpCode[] = {0xFF,0x25,0x34,0x39,0x4D,0x00,0x90,0x90,0x90,0x90}; BYTE CAnimManager__BlendAnimation_HookJmpCode[] = {0xFF,0x25,0x09,0x46,0x4D,0x00,0x90}; BYTE Unk10_JmpCode[] = {0xFF,0x25,0xE5,0x42,0x4D,0x00,0x90}; BYTE Unk11_JmpCode[] = {0xFF,0x25,0x29,0x3B,0x4D,0x00}; BYTE RwRasterDestroy_HookJmpCode[] = {0xFF,0x25,0x21,0xC7,0x59,0x00}; BYTE CFileLoader__LoadObjectInstance_HookJmpCode[] = {0xFF,0x25,0x84,0x80,0x53,0x00,0x90}; BYTE CRenderer__AddEntityToRenderList_HookJmpCode[] = {0xFF,0x25,0xA6,0x34,0x55,0x00,0x90,0x90,0x90}; BYTE CEventDamage__AffectsPed_HookJmpCode[] = {0xFF,0x25,0x33,0x34,0x4B,0x00}; BYTE Unk12_JmpCode[] = {0xFF,0x25,0xC6,0x84,0x6D,0x00,0x90,0x90}; BYTE CStreaming__RequestModel_HookJmpCode[] = {0xFF,0x25,0xD7,0x87,0x40,0x00}; BYTE CWorld__ProcessVerticalLine_HookJmpCode[] = {0xFF,0x25,0xDB,0x74,0x56,0x00}; //----------------------------------------------------------- // TODO: implement functions // radar scale/shape fix bool bHudScaleFix = true; DWORD dwHudScaleX = 0; DWORD dwHudScaleY = 0; float fMaximumWidth; float fMaximumHeight; bool bSomeHudScaleFixFlag = false; float* CRadar__radarHeight = (float*)0x866B74; float* CRadar__radarWidth = (float*)0x866B78; void ProcessHudScaleFix() { if ( bHudScaleFix ) { dwHudScaleX = *(DWORD*)0x859520; dwHudScaleY = *(DWORD*)0x859524; fMaximumWidth = (float)pGame->GetScreenWidth(); fMaximumHeight = (float)pGame->GetScreenHeight(); if ( pGame->GetScreenWidth() > 0 && pGame->GetScreenHeight() > 0 ) { if ( fMaximumWidth / fMaximumHeight >= 1.6f ) { *CRadar__radarHeight = 82.0f; *CRadar__radarWidth = 96.0f; *(float*)0x859524 = 0.00242f; *(float*)0x859520 = 0.00222f / (fMaximumWidth / fMaximumHeight); bSomeHudScaleFixFlag = true; } else { *CRadar__radarHeight = 76.0f; *CRadar__radarWidth = 94.0f; } } } } void FUNC_100A24C0() { if(bSomeHudScaleFixFlag == true) { *(DWORD*)0x859520 = dwHudScaleX; *(DWORD*)0x859524 = dwHudScaleY; *CRadar__radarHeight = 76.0f; *CRadar__radarWidth = 94.0f; bSomeHudScaleFixFlag = false; } } NUDE CHud__DrawRadar_Hook() { __asm pushad ProcessHudScaleFix(); __asm { popad // call original CHud::DrawRadar mov edx, 0x58A330 call edx pushad } FUNC_100A24C0(); __asm { popad retn } } bool bSomeFlag = false; NUDE CHud__DrawCrossHairs_Hook() { __asm pushad bSomeFlag = false; if ( pGame && pGame->FindPlayerPed() ) { if ( pGame->FindPlayerPed()->GetCameraMode() == 53 ) { ProcessHudScaleFix(); bSomeFlag = true; } } __asm { popad // call original CHud::DrawCrossHairs mov edx, 0x58E020 call edx pushad } if (bSomeFlag) { FUNC_100A24C0(); bSomeFlag = false; } __asm { popad retn } } //----------------------------------------------------------- NUDE CCamera__Process_Hook() { _asm pushad if(pGame) { pGame->GetCamera()->FUNC_1009D6B0(); } _asm popad _asm mov eax, 0x52B730 _asm jmp eax } //----------------------------------------------------------- NUDE CGame__Process_Hook() { // TODO: CGame__Process_Hook } //----------------------------------------------------------- NUDE CPed_Render_Hook() { // TODO: CPed_Render_Hook } //----------------------------------------------------------- NUDE CAnimManager__AddAnimation_Hook() { // TODO: CAnimManager__AddAnimation_Hook } //----------------------------------------------------------- NUDE CAnimManager__BlendAnimation_Hook() { // TODO: CAnimManager__BlendAnimation_Hook } //----------------------------------------------------------- NUDE CPlayerPed_ProcessControl_Hook() { // TODO: CPlayerPed_ProcessControl_Hook } //----------------------------------------------------------- NUDE CCivillianPed__ProcessControl_Hook() { // TODO: CCivillianPed__ProcessControl_Hook } //----------------------------------------------------------- NUDE TaskUseGun_Hook() { // TODO: TaskUseGun_Hook } //----------------------------------------------------------- NUDE WeaponRender__GetWeaponSkill_Hook() { // TODO: WeaponRender__GetWeaponSkill_Hook } //----------------------------------------------------------- NUDE CWorld__ProcessAttachedEntities_Hook() { // TODO: CWorld__ProcessAttachedEntities_Hook } //----------------------------------------------------------- NUDE CWorld__ProcessPedsAfterPreRender_Hook() { // TODO: CWorld__ProcessPedsAfterPreRender_Hook } //----------------------------------------------------------- NUDE AllVehicles_ProcessControl_Hook() { // TODO: AllVehicles_ProcessControl_Hook } //----------------------------------------------------------- // fix horn processing VEHICLE_TYPE *_pHornVehicle; int _iHasSetHornHookFix = 0; BYTE _byteSavedControlFlags = 0; DWORD _dwVehicleParams = 0; DWORD _dwAudioClass = 0; NUDE VehicleHorn_Hook() { _asm mov _dwAudioClass, ecx _asm mov edx, [esp+4] _asm mov _dwVehicleParams, edx _asm mov eax, [edx+16] _asm mov _pHornVehicle, eax _byteSavedControlFlags = _pHornVehicle->entity.nControlFlags; if( _pHornVehicle->pDriver && IN_VEHICLE(_pHornVehicle->pDriver) ) { _pHornVehicle->entity.nControlFlags = 0x02; //_iHasSetHornHookFix = 1; } else { _pHornVehicle->entity.nControlFlags = 0x22; //_iHasSetHornHookFix = 0; } _asm push _dwVehicleParams _asm mov ecx, _dwAudioClass _asm mov edx, 0x5002C0 _asm call edx _pHornVehicle->entity.nControlFlags = _byteSavedControlFlags; _asm retn 4 } //----------------------------------------------------------- DWORD dwSayParam1; DWORD dwSayParam2; float fSayParam3; DWORD dwSayParam4; DWORD dwSayParam5; DWORD dwSayParam6; NUDE CPed_Say_Hook() { _asm mov eax, [esp+4] _asm mov dwSayParam1, eax _asm mov eax, [esp+8] _asm mov dwSayParam2, eax _asm mov eax, [esp+12] _asm mov fSayParam3, eax _asm mov eax, [esp+16] _asm mov dwSayParam4, eax _asm mov eax, [esp+20] _asm mov dwSayParam5, eax _asm mov eax, [esp+24] _asm mov dwSayParam6, eax _asm pushad if(dwSayParam1 != 45) { if(pChatWindow) pChatWindow->AddDebugMessage("CPed::Say(%u,%u,%f,%u,%u,%u)", dwSayParam1,dwSayParam2,fSayParam3,dwSayParam4,dwSayParam5,dwSayParam6); } _asm popad _asm mov eax, [esp+4] _asm test ax, ax _asm mov edx, 0x5EFFE7 _asm jmp edx } //----------------------------------------------------------- NUDE ZoneOverlay_Hook() { _asm pushad if (pNetGame && pNetGame->GetGangZonePool()) pNetGame->GetGangZonePool()->Draw(); _asm popad _asm ret } //----------------------------------------------------------- NUDE PlayerWalk_Hook() { _asm pushad if (pNetGame && pNetGame->GetWalkStyle()) { _asm popad _asm mov [esi + 0x4D4], eax } else { _asm popad } _asm ret } //----------------------------------------------------------- NUDE PickUpPickup_Hook() { // TODO: PickUpPickup_Hook } //----------------------------------------------------------- NUDE CWeapon_FireCamera_Hook() { _asm mov ebx, [esp+8] _asm mov dwCurPlayerActor, ebx _asm pushad if (dwCurPlayerActor == (DWORD)GamePool_FindPlayerPed()) { *(BYTE*)0xC8A7C0 = 1; *(BYTE*)0xC8A7C1 = 1; } _asm popad _asm mov ebx, 0x73C260 _asm jmp ebx } //----------------------------------------------------------- NUDE CCameraCamShake_Sniper_Hook() { _asm ret } //----------------------------------------------------------- NUDE CTrain_ProcessControl_Derailment() { _asm { mov eax, [esi+1444]; // get the speed and eax, 0x80000000; // get the upper bit or eax, 0x3F800000; // or it with 1.0f (it'll be -ve if bit is set) mov [esi+1444], eax; // set the new speed ret; } } //----------------------------------------------------------- NUDE TaskEnterVehicleDriver_Hook() { // TODO: TaskEnterVehicleDriver_Hook } //----------------------------------------------------------- NUDE TaskExitVehicle() { // TODO: TaskExitVehicle } //----------------------------------------------------------- NUDE AddVehicleHook() { _asm pushad if(!bAllowVehicleCreation) { _asm popad _asm xor eax, eax _asm ret } _asm popad _asm mov eax, 0x421446 _asm jmp eax } //----------------------------------------------------------- // disable cheat code processing NUDE CheatProcessorHook() { __asm { mov dwSavedCheatFn, eax pushad // CCheat::m_bHasPlayerCheated = true mov edx, 0x96918C mov byte ptr [edx], 1 popad // dont process cheat mov edx, 0x438581 cmp eax, 0 jmp edx } } //----------------------------------------------------------- NUDE RadarTranslateColor() { _asm mov eax, [esp+4] _asm mov iRadarColor1, eax TranslateColorCodeToRGBA(iRadarColor1); // return will still be in eax. _asm ret } //----------------------------------------------------------- NUDE SetFarClipHook() { _asm fld fFarClip _asm push esi _asm mov esi, [esp+8] _asm mov edx, dwFarClipReturnAddr _asm jmp edx } //----------------------------------------------------------- // We use this to trap and exit the game DWORD dwShutDownTick; void QuitGame(); // todo: implement `QuitGame` NUDE CGameShutdownHook() { dwShutDownTick = GetTickCount() + 2000; QuitGame(); while(GetTickCount() < dwShutDownTick) { Sleep(100); } ExitProcess(0); } //----------------------------------------------------------- NUDE PedDamage_Hook() {} //----------------------------------------------------------- NUDE AnimCrashFixHook() { __asm { push edi mov edi, [esp+8] ;// arg0 test edi, edi jz exitFn mov eax, 0x4D41C5 ;// CAnimManager::UncompressAnimation jmp eax exitFn: pop edi ret } } //----------------------------------------------------------- NUDE SetForegroundWindowCrashFixHook() { __asm { mov eax, ds:0xC17054; test eax, eax; jz exitFn; push 0x746929; // return address; ret; exitFn: xor eax, eax; ret; } } //----------------------------------------------------------- NUDE GenTaskAlloc_Hook() { _asm mov edi, [esp+4] _asm mov dwParam1, edi //_asm mov edx, [esp+8] //_asm mov dwParam2, edx _asm mov dwParamThis, ecx _asm pushad _asm mov edx, [edi] _asm mov ecx, edi _asm call dword ptr [edx+4] _asm mov dwParam2, eax //pChatWindow->AddDebugMessage("TaskAlloc: 0x%X, 0x%X, 0x%X",dwParamThis,dwParam1,dwParam2); _asm popad _asm mov eax, fs:0 _asm mov edx, 0x4C3876 _asm jmp edx } //----------------------------------------------------------- // used for correct report message using 100A1790 ; void __thiscall CGame::PlayCrimeReport NUDE PoliceScannerAudio_FindPlayerPed_Hook() { __asm { mov eax, offset pedCrimeReportTemp retn } } //----------------------------------------------------------- // delete satchel projectile if the owner is dead (not sure if this code will work properly) DWORD dwProjectileObject = 0; DWORD dwProjectileInfo = 0; NUDE CProjectile_Update_Hook() { __asm { mov dwProjectileObject, esi mov dwProjectileInfo, ebx pushad mov eax, dwProjectileInfo mov ecx, [eax+4] ;// dwProjectileInfo->pOwner test ecx, ecx // jnz dont_delete // if the owner == nullptr, delete the projectile // delete projectile CProjectileInfo::RemoveIfThisIsAProjectile push dwProjectileObject mov eax, 0x739A40 call eax // correct stack add esp, 4 popad mov dl, 0x0FF jmp end_hook dont_delete: popad // original code mov ecx, [ebx+4] mov dl, [ecx+36h] end_hook: push 0x738F40 retn } } //----------------------------------------------------------- NUDE CWeapon__Satchel__Activate_Hook() { __asm { CMP DWORD PTR DS:[ESI-0x20], 0x27 MOV EDI, DWORD PTR SS:[EBP] JNZ skip MOV EAX, [ESP] CMP DWORD PTR DS:[ESI-0x1C], EAX JNZ skip MOV EAX, 0x738880 JMP EAX skip: MOV EAX, 0x7388DB JMP EAX } } //----------------------------------------------------------- NUDE PathProcessingCrashFixHook() { __asm { push esi test ecx, ecx; jz exitFn mov esi,dword ptr ss:[esp+8] mov eax,dword ptr ds:[esi] mov edx, 0x63A047; jmp edx; exitFn: mov esi, 0x63a04d; jmp esi; } } //----------------------------------------------------------- NUDE SetCarColorCrashFix() { __asm { test eax, eax; jz exitFn; // CPool_CVehicle_GetAt(scmParam1) == NULL mov ecx, 0x47eab8; mov cl,byte ptr ds:[0xA43C7C]; // get color1 (was replaced by jmpcode) jmp ecx; // continue function exitFn: mov esi, 0x47eaca; jmp esi; } } //----------------------------------------------------------- NUDE GetText_Hook() { // TODO: GetText_Hook } //----------------------------------------------------------- NUDE CCustomCarPlateMgr__CreatePlateTexture__RwRasterCreate_Hook() { // TODO: CCustomCarPlateMgr__CreatePlateTexture__RwRasterCreate_Hook } //----------------------------------------------------------- NUDE RwRasterDestroy_Hook() { // TODO: RwRasterDestroy_Hook } //----------------------------------------------------------- NUDE CVehicle__Render_Hook() { // TODO: CVehicle__Render_Hook } //----------------------------------------------------------- NUDE CObject__Render_Hook() { // TODO: CObject__Render_Hook } //----------------------------------------------------------- NUDE CRadar__DrawMap__FindPlayerSpeed_Hook() { // TODO: CRadar__DrawMap__FindPlayerSpeed_Hook } //----------------------------------------------------------- NUDE CFileLoader__LoadObjectInstance_Hook() { // TODO: CFileLoader__LoadObjectInstance_Hook } //----------------------------------------------------------- float fEscalatorCheck1; float fEscalatorCheck2; NUDE CEscalator__Update_Hook() { __asm pushad UnFuck(0x858BA4, 4); UnFuck(0x858F84, 4); fEscalatorCheck1 = *(float*)0x858BA4; fEscalatorCheck2 = *(float*)0x858F84; *(float*)0x858BA4 = 40.0f; *(float*)0x858F84 = 50.0f; __asm { popad mov eax, 0x717D30 // CEscalator::Update call eax pushad } *(float*)0x858BA4 = fEscalatorCheck1; *(float*)0x858F84 = fEscalatorCheck2; __asm popad __asm ret } //----------------------------------------------------------- NUDE CObject__CreateRwObject_Hook() { // TODO: CObject__CreateRwObject_Hook } //----------------------------------------------------------- NUDE CEntity__DeleteRwObject_Hook() { // TODO: CEntity__DeleteRwObject_Hook } //----------------------------------------------------------- NUDE CAutomobile__BreakTowLink_Hook() { // TODO: CAutomobile__BreakTowLink_Hook } //----------------------------------------------------------- NUDE CWorld__ProcessAttachedEntities__PositionAttachedEntity_Hook() { // TODO: CWorld__ProcessAttachedEntities__PositionAttachedEntity_Hook } //----------------------------------------------------------- NUDE CRenderer__RenderEverythingBarRoads_Hook() { // TODO: CRenderer__RenderEverythingBarRoads_Hook } //----------------------------------------------------------- NUDE CRenderer__RenderFadingInEntities_Hook() { // TODO: CRenderer__RenderFadingInEntities_Hook } //----------------------------------------------------------- NUDE CRenderer__AddEntityToRenderList_Hook() { // TODO: CRenderer__AddEntityToRenderList_Hook } //----------------------------------------------------------- NUDE CEntity__RenderEffects__RenderRoadsignAtomic_Hook() { // TODO: CEntity__RenderEffects__RenderRoadsignAtomic_Hook } //----------------------------------------------------------- NUDE CEventDamage__AffectsPed_Hook() { // TODO: CEventDamage__AffectsPed_Hook } //----------------------------------------------------------- NUDE CCollision__BuildCacheOfCameraCollision_Hook() { // TODO: CCollision__BuildCacheOfCameraCollision_Hook } //----------------------------------------------------------- NUDE CCollision__CheckCameraCollisionVehicles_Hook() { // TODO: CCollision__CheckCameraCollisionVehicles_Hook } //----------------------------------------------------------- NUDE CWorld__CameraToIgnoreThisObject_Hook() { // TODO: CWorld__CameraToIgnoreThisObject_Hook } //----------------------------------------------------------- NUDE CAutomobile__ProcessEntityCollision_Hook() { // TODO: CAutomobile__ProcessEntityCollision_Hook } //----------------------------------------------------------- NUDE CBike__ProcessEntityCollision_Hook() { // TODO: CBike__ProcessEntityCollision_Hook } //----------------------------------------------------------- NUDE CMonsterTruck__ProcessEntityCollision_Hook() { // TODO: CMonsterTruck__ProcessEntityCollision_Hook } //----------------------------------------------------------- NUDE CPhysical__ProcessEntityCollision_Hook() { // TODO: CPhysical__ProcessEntityCollision_Hook } //----------------------------------------------------------- NUDE CVehicle__UsesSiren_Hook() { // TODO: CVehicle__UsesSiren_Hook } //----------------------------------------------------------- NUDE CAEWeatherAudioEntity__UpdateParameters_Hook() { // TODO: CAEWeatherAudioEntity__UpdateParameters_Hook } //----------------------------------------------------------- NUDE CWorld__ProcessVerticalLine_Hook() { // TODO: CWorld__ProcessVerticalLine_Hook } //----------------------------------------------------------- NUDE CStreaming__RequestModel_Hook() { // TODO: CStreaming__RequestModel_Hook } //----------------------------------------------------------- // todo: implement fully ENTITY_TYPE* pFiringEntity = 0; VECTOR* pPosn = 0; VECTOR* pEffectPosn = 0; ENTITY_TYPE* pTargetEntity = 0; VECTOR* pTarget = 0; VECTOR* pPosnForDriveBy = 0; DWORD dwUnknown8 = 0; DWORD dwAdditionalEffects = 0; NUDE CWeapon__FireInstantHit_Hook() { __asm { mov eax, [esp+0x4] mov pFiringEntity, eax mov eax, [esp+0x8] mov pPosn, eax mov eax, [esp+0xC] mov pEffectPosn, eax mov eax, [esp+0x10] mov pTargetEntity, eax mov eax, [esp+0x14] mov pTarget, eax mov eax, [esp+0x18] mov pPosnForDriveBy, eax mov eax, [esp+0x1C] mov dwUnknown8, eax mov eax, [esp+0x20] mov dwAdditionalEffects, eax pushad } if(pFiringEntity != (ENTITY_TYPE*)GamePool_FindPlayerPed()) { __asm { popad retn 0x20 } } // todo: implement sub_10013C90 /*if ( pNetGame && pNetGame->m_pPools->pPlayerPool ) sub_10013C90();*/ _asm popad _asm ret 0x20 } //----------------------------------------------------------- NUDE CWorld__ProcessLineOfSight_Hook() { // TODO: CWorld__ProcessLineOfSight_Hook } //----------------------------------------------------------- NUDE CWeapon__FireSniper_Hook() { // TODO: CWeapon__FireSniper_Hook } //----------------------------------------------------------- NUDE CBulletInfo__AddBullet_Hook() { // TODO: CBulletInfo__AddBullet_Hook } //----------------------------------------------------------- NUDE CVehicle__InflictDamage_Hook() { // TODO: CVehicle__InflictDamage_Hook } //----------------------------------------------------------- // fps-related hook NUDE CTimer__GetCurrentTimeInCycles_Hook() { Sleep(1); _asm mov edx, 0x561A80 _asm jmp edx } //----------------------------------------------------------- DWORD dwRandCaller; NUDE Rand_Hook() { _asm mov eax, [esp+0] _asm mov dwRandCaller, eax /* if(dwRandCaller > 0x73FB10 && dwRandCaller < 0x74132E) { _asm mov eax, iSyncedRandomNumber _asm ret }*/ rand(); _asm ret } //----------------------------------------------------------- // We use a special bit (32) on dwProcFlags (+28) to indicate // whether we should process gravity/collisions on this PlayerPed. NUDE CPlayerPed_ProcessCollision_Hook() { _asm test ecx, ecx _asm jnz ptr_is_ok _asm ret ptr_is_ok: _asm mov eax, [ecx+28] _asm shr eax, 31 _asm cmp eax, 1 _asm jne do_process_cols _asm ret // we set top bit so don't process this do_process_cols: _asm mov edx, 0x54DFB0 _asm jmp edx } //----------------------------------------------------------- DWORD dwMat; DWORD dwMatEffects; DWORD dwDataParam; NUDE VehicleModel_SetEnvironmentMapHook() { _asm mov eax, [esp+4] _asm mov dwMat, eax _asm mov eax, [esp+8] _asm mov dwDataParam, eax UnFuck(0x6D64F0,1); *(PBYTE)0x6D64F0 = 0xC3; /* _asm push dwMat _asm mov edx, 0x812140 // _RpMatFXMaterialGetEffects _asm call edx _asm pop edx _asm mov dwMatEffects, eax*/ _asm push 0 _asm push dwMat _asm mov edx, 0x811C80 // _RpMatFXMaterialSetEffects _asm call edx _asm pop edx _asm pop edx //pChatWindow->AddDebugMessage("SetEnvironmentMapCB(0x%X,0x%X,%d)",dwMat,dwDataParam,dwMatEffects); _asm mov edx, 0x4C8848 _asm cmp [esp+8], 0FFFFh _asm jmp edx } //----------------------------------------------------------- NUDE FUNC_100A5FF0() { _asm mov edx, 0x550F10 _asm call edx _asm ret } //----------------------------------------------------------- void InstallMethodHook( DWORD dwInstallAddress, DWORD dwHookFunction ) { DWORD oldProt, oldProt2; VirtualProtect((LPVOID)dwInstallAddress,4,PAGE_EXECUTE_READWRITE,&oldProt); *(PDWORD)dwInstallAddress = (DWORD)dwHookFunction; VirtualProtect((LPVOID)dwInstallAddress,4,oldProt,&oldProt2); } //----------------------------------------------------------- void InstallHook( DWORD dwInstallAddress, DWORD dwHookFunction, DWORD dwHookStorage, BYTE * pbyteJmpCode, int iJmpCodeSize ) { DWORD oldProt, oldProt2; // Install the pointer to procaddr. VirtualProtect((PVOID)dwHookStorage,4,PAGE_EXECUTE_READWRITE,&oldProt); *(PDWORD)dwHookStorage = (DWORD)dwHookFunction; VirtualProtect((PVOID)dwHookStorage,4,oldProt,&oldProt2); // Install the Jmp code. VirtualProtect((PVOID)dwInstallAddress,iJmpCodeSize,PAGE_EXECUTE_READWRITE,&oldProt); memcpy((PVOID)dwInstallAddress,pbyteJmpCode,iJmpCodeSize); VirtualProtect((PVOID)dwInstallAddress,iJmpCodeSize,oldProt,&oldProt2); } //----------------------------------------------------------- void InstallCallHook(DWORD dwInstallAddress, DWORD dwHookFunction, BYTE byteJumpCode = 0xE8) { DWORD oldProt, oldProt2; DWORD disp = dwHookFunction - (dwInstallAddress + 5); VirtualProtect((LPVOID)dwInstallAddress,5,PAGE_EXECUTE_READWRITE,&oldProt); *(PBYTE)(dwInstallAddress) = byteJumpCode; *(PDWORD)(dwInstallAddress+1) = (DWORD)disp; VirtualProtect((LPVOID)dwInstallAddress,5,oldProt,&oldProt2); } //----------------------------------------------------------- void InstallGameAndGraphicsLoopHooks() { UnFuck(0x53EB13,4); *(int *)0x53EB13 = dwGraphicsLoop - 0x53EB12 - 5; // relative addr InstallCallHook(0x58FC53,(DWORD)CHud__DrawRadar_Hook); InstallCallHook(0x58FBBF,(DWORD)CHud__DrawCrossHairs_Hook); InstallCallHook(0x53C104,(DWORD)CCamera__Process_Hook); InstallCallHook(0x53E981,(DWORD)CGame__Process_Hook); // For fixing fogging issues (needed for both debug and net) InstallMethodHook(0x86D1B0,(DWORD)CPed_Render_Hook); // This is PlayerPed InstallMethodHook(0x86C0F0,(DWORD)CPed_Render_Hook); InstallMethodHook(0x86C168,(DWORD)CPed_Render_Hook); InstallMethodHook(0x86C248,(DWORD)CPed_Render_Hook); InstallMethodHook(0x86C3A0,(DWORD)CPed_Render_Hook); InstallCallHook(0x53E930,(DWORD)CTimer__GetCurrentTimeInCycles_Hook); } //----------------------------------------------------------- void GameInstallHooks() { InstallGameAndGraphicsLoopHooks(); InstallHook(0x4D3AA0,(DWORD)CAnimManager__AddAnimation_Hook,0x4D3934,CAnimManager__AddAnimation_Hook_HookJmpCode,sizeof(CAnimManager__AddAnimation_Hook_HookJmpCode)); InstallHook(0x4D4610,(DWORD)CAnimManager__BlendAnimation_Hook,0x4D4609,CAnimManager__BlendAnimation_HookJmpCode,sizeof(CAnimManager__BlendAnimation_HookJmpCode)); InstallMethodHook(0x86D190,(DWORD)CPlayerPed_ProcessControl_Hook); InstallMethodHook(0x86C0D0,(DWORD)CCivillianPed__ProcessControl_Hook); InstallMethodHook(0x86D744,(DWORD)TaskUseGun_Hook); InstallCallHook(0x7330A2,(DWORD)WeaponRender__GetWeaponSkill_Hook); InstallMethodHook(0x86D194,(DWORD)CPlayerPed_ProcessCollision_Hook); InstallCallHook(0x5689FD,(DWORD)CWorld__ProcessAttachedEntities_Hook); InstallCallHook(0x53EA03,(DWORD)CWorld__ProcessPedsAfterPreRender_Hook); InstallMethodHook(0x871148,(DWORD)AllVehicles_ProcessControl_Hook); // Automobile InstallMethodHook(0x8721C8,(DWORD)AllVehicles_ProcessControl_Hook); // boat InstallMethodHook(0x871388,(DWORD)AllVehicles_ProcessControl_Hook); // motorbike1 InstallMethodHook(0x871970,(DWORD)AllVehicles_ProcessControl_Hook); // plane InstallMethodHook(0x8716A8,(DWORD)AllVehicles_ProcessControl_Hook); // heli InstallMethodHook(0x871550,(DWORD)AllVehicles_ProcessControl_Hook); // pushbike InstallMethodHook(0x871800,(DWORD)AllVehicles_ProcessControl_Hook); // truck InstallMethodHook(0x871B10,(DWORD)AllVehicles_ProcessControl_Hook); // quad InstallMethodHook(0x872398,(DWORD)AllVehicles_ProcessControl_Hook); // train InstallMethodHook(0x871C50,(DWORD)AllVehicles_ProcessControl_Hook); InstallCallHook(0x501B1D,(DWORD)VehicleHorn_Hook); InstallCallHook(0x501B42,(DWORD)VehicleHorn_Hook); InstallCallHook(0x501FC2,(DWORD)VehicleHorn_Hook); InstallCallHook(0x502067,(DWORD)VehicleHorn_Hook); InstallCallHook(0x5021AE,(DWORD)VehicleHorn_Hook); // Radar and map hooks for gang zones InstallCallHook(0x5869BF,(DWORD)ZoneOverlay_Hook); InstallCallHook(0x5759E4,(DWORD)ZoneOverlay_Hook); InstallCallHook(0x609A4E,(DWORD)PlayerWalk_Hook); InstallCallHook(0x4579C6,(DWORD)PickUpPickup_Hook, 0xE9); InstallCallHook(0x73C252,(DWORD)CWeapon_FireCamera_Hook, 0xE9); // Hook the call to CCamera::CamShake when called for sniper fire InstallCallHook(0x73ACE2,(DWORD)CCameraCamShake_Sniper_Hook); // Hook the train derailment code InstallCallHook(0x6F8CF8,(DWORD)CTrain_ProcessControl_Derailment); InstallHook(0x6402F0,(DWORD)TaskEnterVehicleDriver_Hook, 0x6919BB,TaskEnterVehicleDriver_HookJmpCode,sizeof(TaskEnterVehicleDriver_HookJmpCode)); InstallHook(0x63B8C0,(DWORD)TaskExitVehicle, 0x63B8BA,TaskExitVehicle_HookJmpCode,sizeof(TaskExitVehicle_HookJmpCode)); InstallHook(0x438576,(DWORD)CheatProcessorHook, 0x4385AA,CheatProcessHook_JmpCode,sizeof(CheatProcessHook_JmpCode)); InstallHook(0x584770,(DWORD)RadarTranslateColor,0x584A79, RadarTranslateColor_HookJmpCode,sizeof(RadarTranslateColor_HookJmpCode)); InstallHook(0x53C900,(DWORD)CGameShutdownHook,0x53C8F1, CGameShutdown_HookJmpCode,sizeof(CGameShutdown_HookJmpCode)); InstallHook(0x4B5AC0,(DWORD)PedDamage_Hook,0x4B5ABC, PedDamage_HookJmpCode,sizeof(PedDamage_HookJmpCode)); // Fix for 0x004D41C5 crash InstallCallHook(0x4D41C0, (DWORD)AnimCrashFixHook, 0xE9); InstallCallHook(0x4E7427,(DWORD)PoliceScannerAudio_FindPlayerPed_Hook); // Fix for crash when the player who threw the satchel died InstallHook(0x738F3A, (DWORD)CProjectile_Update_Hook, 0x738B1B, CProjectileInfo_Update_HookJmpCode, sizeof(CProjectileInfo_Update_HookJmpCode)); // Fix for all satchels blowing up when someone activated their satchel InstallHook(0x738877, (DWORD)CWeapon__Satchel__Activate_Hook, 0x73885B, CWeapon__Satchel__Activate_HookJmpCode, sizeof(CWeapon__Satchel__Activate_HookJmpCode)); InstallHook(0x6A0050, (DWORD)GetText_Hook, 0x6A0043, GetText_HookJmpCode, sizeof (GetText_HookJmpCode)); InstallCallHook(0x6FDED6,(DWORD)CCustomCarPlateMgr__CreatePlateTexture__RwRasterCreate_Hook); if(iGtaVersion == GTASA_VERSION_USA10) { InstallHook(0x7FB020,(DWORD)RwRasterDestroy_Hook,0x59C721,RwRasterDestroy_HookJmpCode,sizeof(RwRasterDestroy_HookJmpCode)); unnamed_101516D4 = 0x7FB026; } else { InstallHook(0x7FB060,(DWORD)RwRasterDestroy_Hook,0x59C721,RwRasterDestroy_HookJmpCode,sizeof(RwRasterDestroy_HookJmpCode)); unnamed_101516D4 = 0x7FB066; } InstallCallHook(0x6D0E7E,(DWORD)CVehicle__Render_Hook); InstallMethodHook(0x866FA8,(DWORD)CObject__Render_Hook); InstallCallHook(0x586C0A,(DWORD)CRadar__DrawMap__FindPlayerSpeed_Hook); InstallHook(0x538090,(DWORD)CFileLoader__LoadObjectInstance_Hook,0x538084,CFileLoader__LoadObjectInstance_HookJmpCode,sizeof(CFileLoader__LoadObjectInstance_HookJmpCode)); InstallCallHook(0x718599,(DWORD)CEscalator__Update_Hook); InstallMethodHook(0x866F7C,(DWORD)CObject__CreateRwObject_Hook); InstallMethodHook(0x866F80,(DWORD)CEntity__DeleteRwObject_Hook); InstallMethodHook(0x8585E8,(DWORD)CEntity__DeleteRwObject_Hook); InstallMethodHook(0x871218,(DWORD)CAutomobile__BreakTowLink_Hook); InstallMethodHook(0x871778,(DWORD)CAutomobile__BreakTowLink_Hook); InstallMethodHook(0x8718D0,(DWORD)CAutomobile__BreakTowLink_Hook); InstallMethodHook(0x871A40,(DWORD)CAutomobile__BreakTowLink_Hook); InstallMethodHook(0x871BE0,(DWORD)CAutomobile__BreakTowLink_Hook); InstallCallHook(0x5648D3,(DWORD)CWorld__ProcessAttachedEntities__PositionAttachedEntity_Hook); InstallCallHook(0x53DFDD,(DWORD)CRenderer__RenderEverythingBarRoads_Hook); InstallCallHook(0x53E019,(DWORD)CRenderer__RenderFadingInEntities_Hook); InstallHook(0x5534B0,(DWORD)CRenderer__AddEntityToRenderList_Hook,0x5534A6,CRenderer__AddEntityToRenderList_HookJmpCode,sizeof(CRenderer__AddEntityToRenderList_HookJmpCode)); InstallCallHook(0x5342F9,(DWORD)CEntity__RenderEffects__RenderRoadsignAtomic_Hook); InstallHook(0x4B35A0,(DWORD)CEventDamage__AffectsPed_Hook,0x4B3433,CEventDamage__AffectsPed_HookJmpCode,sizeof(CEventDamage__AffectsPed_HookJmpCode)); InstallCallHook(0x41B02E,(DWORD)CCollision__BuildCacheOfCameraCollision_Hook); InstallCallHook(0x41AF80,(DWORD)CCollision__CheckCameraCollisionVehicles_Hook); InstallCallHook(0x41AB78,(DWORD)CWorld__CameraToIgnoreThisObject_Hook); InstallMethodHook(0x871178,(DWORD)CAutomobile__ProcessEntityCollision_Hook); InstallMethodHook(0x8716D8,(DWORD)CAutomobile__ProcessEntityCollision_Hook); InstallMethodHook(0x8719A0,(DWORD)CAutomobile__ProcessEntityCollision_Hook); InstallMethodHook(0x871B40,(DWORD)CAutomobile__ProcessEntityCollision_Hook); InstallMethodHook(0x8713B8,(DWORD)CBike__ProcessEntityCollision_Hook); InstallMethodHook(0x871580,(DWORD)CBike__ProcessEntityCollision_Hook); InstallMethodHook(0x871830,(DWORD)CMonsterTruck__ProcessEntityCollision_Hook); InstallMethodHook(0x8721F8,(DWORD)CPhysical__ProcessEntityCollision_Hook); InstallCallHook(0x6E0954,(DWORD)CVehicle__UsesSiren_Hook); InstallCallHook(0x6B2BCB,(DWORD)CVehicle__UsesSiren_Hook); InstallCallHook(0x4F77DA,(DWORD)CVehicle__UsesSiren_Hook); InstallMethodHook(0x872A74,(DWORD)CAEWeatherAudioEntity__UpdateParameters_Hook); InstallHook(0x5674E0,(DWORD)CWorld__ProcessVerticalLine_Hook,0x5674DB,CWorld__ProcessVerticalLine_HookJmpCode,sizeof(CWorld__ProcessVerticalLine_HookJmpCode)); } //----------------------------------------------------------- void InstallModelInfoHackHooks() { InstallHook(0x4087EA,(DWORD)CStreaming__RequestModel_Hook,0x4087D7,CStreaming__RequestModel_HookJmpCode,sizeof(CStreaming__RequestModel_HookJmpCode)); } //----------------------------------------------------------- void InstallShotSyncHooks() { InstallCallHook(0x742495,(DWORD)CWeapon__FireInstantHit_Hook); InstallCallHook(0x7424EC,(DWORD)CWeapon__FireInstantHit_Hook); InstallCallHook(0x742548,(DWORD)CWeapon__FireInstantHit_Hook); InstallCallHook(0x740721,(DWORD)CWorld__ProcessLineOfSight_Hook); InstallCallHook(0x740B69,(DWORD)CWorld__ProcessLineOfSight_Hook); InstallCallHook(0x736247,(DWORD)CWorld__ProcessLineOfSight_Hook); InstallCallHook(0x7424CB,(DWORD)CWeapon__FireSniper_Hook); InstallCallHook(0x73AC4B,(DWORD)CBulletInfo__AddBullet_Hook); } //----------------------------------------------------------- void InstallVehicleFriendyFireHooks() { InstallCallHook(0x6D7C90,(DWORD)CVehicle__InflictDamage_Hook,0xE9); } //-----------------------------------------------------------