From 27838ae0b2a11d505d669fe4cad6d0372cb650e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?eray=20or=C3=A7unus?= Date: Mon, 1 Jul 2019 22:46:44 +0300 Subject: [PATCH] Kangaroo cheat and bug fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: eray orçunus --- src/Pad.cpp | 30 +++++++++++++++++++++++++- src/config.h | 2 +- src/entities/Ped.cpp | 43 ++++++++++++++++++++++---------------- src/entities/Ped.h | 6 +++--- src/entities/PedIK.cpp | 8 +++---- src/render/Hud.cpp | 12 +++++------ src/weapons/Weapon.h | 2 +- src/weapons/WeaponInfo.cpp | 8 +++---- 8 files changed, 72 insertions(+), 39 deletions(-) diff --git a/src/Pad.cpp b/src/Pad.cpp index 13b9b589..002e7180 100644 --- a/src/Pad.cpp +++ b/src/Pad.cpp @@ -14,6 +14,7 @@ #include "Game.h" #include "CutsceneMgr.h" #include "Font.h" +#include "Hud.h" #include "Text.h" #include "Timer.h" #include "World.h" @@ -24,7 +25,6 @@ #include "Weather.h" #include "win.h" - CPad *Pads = (CPad*)0x6F0360; // [2] CMousePointerStateHelper &MousePointerStateHelper = *(CMousePointerStateHelper*)0x95CC8C; @@ -70,6 +70,28 @@ WRAPPER void StrongGripCheat() { EAXJMP(0x491670); } WRAPPER void NastyLimbsCheat() { EAXJMP(0x4916A0); } ////////////////////////////////////////////////////////////////////////// +#ifdef KANGAROO_CHEAT +void KangarooCheat() +{ + wchar *string; + CPed *playerPed = FindPlayerPed(); + int m_fMass; + + if (playerPed->m_ped_flagI80) { + string = TheText.Get("CHEATOF"); + m_fMass = 70.0f; + } else { + string = TheText.Get("CHEAT1"); + m_fMass = 15.0f; + } + CHud::SetHelpMessage(string, 1); + playerPed->m_ped_flagI80 = !playerPed->m_ped_flagI80; + + playerPed->m_fMass = m_fMass; + playerPed->m_fAirResistance = 0.4f / m_fMass; +} +#endif + void CControllerState::Clear(void) { @@ -509,6 +531,12 @@ void CPad::AddToPCCheatString(char c) // "NASTYLIMBSCHEAT" if ( !_CHEATCMP("TAEHCSBMILYTSAN") ) NastyLimbsCheat(); + +#ifdef KANGAROO_CHEAT + // "KANGAROO" + if (!_CHEATCMP("OORAGNAK")) + KangarooCheat(); +#endif #undef _CHEATCMP } diff --git a/src/config.h b/src/config.h index 61b4f9b6..b43a3a9f 100644 --- a/src/config.h +++ b/src/config.h @@ -78,4 +78,4 @@ enum Config { //#define USE_MY_DOCUMENTS #define NASTY_GAME #define PS2_MATFX - +#define KANGAROO_CHEAT diff --git a/src/entities/Ped.cpp b/src/entities/Ped.cpp index 963454b8..e908f14c 100644 --- a/src/entities/Ped.cpp +++ b/src/entities/Ped.cpp @@ -435,6 +435,9 @@ CPed::CPed(uint32 pedType) : m_pedIK(this) m_ped_flagI4 = false; bRecordedForReplay = false; m_ped_flagI10 = false; +#ifdef KANGAROO_CHEAT + m_ped_flagI80 = false; +#endif if ((CGeneral::GetRandomNumber() & 3) == 0) m_ped_flagD1 = true; @@ -461,12 +464,12 @@ CPed::CPed(uint32 pedType) : m_pedIK(this) for(int i = 0; i < NUM_PED_WEAPONTYPES; i++) { - CWeapon *weapon = GetWeapon(i); - weapon->m_eWeaponType = WEAPONTYPE_UNARMED; - weapon->m_eWeaponState = WEAPONSTATE_READY; - weapon->m_nAmmoInClip = 0; - weapon->m_nAmmoTotal = 0; - weapon->m_nTimer = 0; + CWeapon &weapon = GetWeapon(i); + weapon.m_eWeaponType = WEAPONTYPE_UNARMED; + weapon.m_eWeaponState = WEAPONSTATE_READY; + weapon.m_nAmmoInClip = 0; + weapon.m_nAmmoTotal = 0; + weapon.m_nTimer = 0; } m_lastHitState = 0; @@ -479,23 +482,27 @@ CPed::CPed(uint32 pedType) : m_pedIK(this) CPopulation::UpdatePedCount(m_nPedType, false); } -void +uint32 CPed::GiveWeapon(eWeaponType weaponType, uint32 ammo) { - if (HasWeapon(weaponType)) { - if (ammo > 99999) - m_weapons[weaponType].m_nAmmoTotal = 99999; - else - m_weapons[weaponType].m_nAmmoTotal = ammo; + CWeapon &weapon = GetWeapon(weaponType); - m_weapons[weaponType].Reload(); + if (HasWeapon(weaponType)) { + if (weapon.m_nAmmoTotal + ammo > 99999) + weapon.m_nAmmoTotal = 99999; + else + weapon.m_nAmmoTotal += ammo; + + weapon.Reload(); } else { - m_weapons[weaponType].Initialise(weaponType, ammo); + weapon.Initialise(weaponType, ammo); // TODO: It seems game uses this as both weapon count and max WeaponType we have, which is ofcourse erroneous. m_maxWeaponTypeAllowed++; } - if (m_weapons[weaponType].m_eWeaponState == WEAPONSTATE_OUT_OF_AMMO) - m_weapons[weaponType].m_eWeaponState = WEAPONSTATE_READY; + if (weapon.m_eWeaponState == WEAPONSTATE_OUT_OF_AMMO) + weapon.m_eWeaponState = WEAPONSTATE_READY; + + return weaponType; } static RwObject* @@ -1227,8 +1234,8 @@ bool CPed::SelectGunIfArmed(void) { for (int i = 0; i < m_maxWeaponTypeAllowed; i++) { - if (GetWeapon(i)->m_nAmmoTotal > 0) { - eWeaponType weaponType = GetWeapon(i)->m_eWeaponType; + if (GetWeapon(i).m_nAmmoTotal > 0) { + eWeaponType weaponType = GetWeapon(i).m_eWeaponType; if (weaponType >= WEAPONTYPE_COLT45 && weaponType != WEAPONTYPE_M16 && weaponType <= WEAPONTYPE_FLAMETHROWER) { SetCurrentWeapon(i); return true; diff --git a/src/entities/Ped.h b/src/entities/Ped.h index 572ed17d..92fa32c1 100644 --- a/src/entities/Ped.h +++ b/src/entities/Ped.h @@ -382,7 +382,7 @@ public: bool IsPointerValid(void); void SortPeds(CPed**, int, int); void BuildPedLists(void); - void GiveWeapon(eWeaponType weaponType, uint32 ammo); + uint32 GiveWeapon(eWeaponType weaponType, uint32 ammo); void SetPedStats(ePedStats); static void GetLocalPositionToOpenCarDoor(CVector *output, CVehicle *veh, uint32 enterType, float offset); static void GetPositionToOpenCarDoor(CVector *output, CVehicle *veh, uint32 enterType, float seatPosMult); @@ -416,8 +416,8 @@ public: static void PedSetQuickDraggedOutCarPositionCB(CAnimBlendAssociation *assoc, void *arg); static void PedSetDraggedOutCarPositionCB(CAnimBlendAssociation *assoc, void *arg); - inline bool HasWeapon(uint32 weaponType) { return m_weapons[weaponType].m_eWeaponType == weaponType; } - inline CWeapon *GetWeapon(uint32 weaponType) { return &m_weapons[weaponType]; } + inline bool HasWeapon(uint8 weaponType) { return m_weapons[weaponType].m_eWeaponType == weaponType; } + inline CWeapon &GetWeapon(uint8 weaponType) { return m_weapons[weaponType]; } inline CWeapon *GetWeapon(void) { return &m_weapons[m_currentWeapon]; } inline RwFrame *GetNodeFrame(int nodeId) { return m_pFrames[nodeId]->frame; } diff --git a/src/entities/PedIK.cpp b/src/entities/PedIK.cpp index 9d688ff9..fa773bbf 100644 --- a/src/entities/PedIK.cpp +++ b/src/entities/PedIK.cpp @@ -27,11 +27,11 @@ CPedIK::GetComponentPosition(RwV3d *pos, PedNode node) RwMatrix *mat; f = m_ped->GetNodeFrame(node); - mat = &f->modelling; + mat = RwFrameGetMatrix(f); *pos = mat->pos; for (f = RwFrameGetParent(f); f; f = RwFrameGetParent(f)) - RwV3dTransformPoints(pos, pos, 1, &f->modelling); + RwV3dTransformPoints(pos, pos, 1, RwFrameGetMatrix(f)); } RwMatrix* @@ -39,10 +39,10 @@ CPedIK::GetWorldMatrix(RwFrame *source, RwMatrix *destination) { RwFrame *i; - *destination = source->modelling; + *destination = *RwFrameGetMatrix(source); for (i = RwFrameGetParent(source); i; i = RwFrameGetParent(i)) - RwMatrixTransform(destination, &i->modelling, rwCOMBINEPOSTCONCAT); + RwMatrixTransform(destination, RwFrameGetMatrix(i), rwCOMBINEPOSTCONCAT); return destination; } diff --git a/src/render/Hud.cpp b/src/render/Hud.cpp index 83e62ba0..2547ab2b 100644 --- a/src/render/Hud.cpp +++ b/src/render/Hud.cpp @@ -300,10 +300,10 @@ void CHud::Draw() /* DrawAmmo */ - int16 AmmoAmount = CWeaponInfo::GetWeaponInfo(FindPlayerPed()->GetWeapon()->m_eWeaponType)->m_nAmountofAmmunition; - int32 AmmoInClip = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoInClip; - int32 TotalAmmo = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoTotal; - int32 Ammo, Clip; + uint32 AmmoAmount = CWeaponInfo::GetWeaponInfo(FindPlayerPed()->GetWeapon()->m_eWeaponType)->m_nAmountofAmmunition; + uint32 AmmoInClip = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoInClip; + uint32 TotalAmmo = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_weapons[CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_currentWeapon].m_nAmmoTotal; + uint32 Ammo, Clip; if (AmmoAmount <= 1 || AmmoAmount >= 1000) sprintf(sTemp, "%d", TotalAmmo); @@ -1359,7 +1359,7 @@ void CHud::SetHelpMessage(wchar *message, bool quick) CMessages::InsertPlayerControlKeysInString(m_HelpMessage); for (int i = 0; i < 256; i++) { - m_LastHelpMessage[i] = message[i]; + m_LastHelpMessage[i] = 0; } m_HelpMessageState = 0; @@ -1443,7 +1443,7 @@ STARTPATCHES InjectHook(0x5048F0, &CHud::Initialise, PATCH_JUMP); InjectHook(0x504CC0, &CHud::ReInitialise, PATCH_JUMP); InjectHook(0x50A250, &CHud::SetBigMessage, PATCH_JUMP); - //InjectHook(0x5051E0, &CHud::SetHelpMessage, PATCH_JUMP); + InjectHook(0x5051E0, &CHud::SetHelpMessage, PATCH_JUMP); InjectHook(0x50A210, &CHud::SetMessage, PATCH_JUMP); InjectHook(0x50A320, &CHud::SetPagerMessage, PATCH_JUMP); InjectHook(0x505290, &CHud::SetVehicleName, PATCH_JUMP); diff --git a/src/weapons/Weapon.h b/src/weapons/Weapon.h index 055e2ff3..8cb435ce 100644 --- a/src/weapons/Weapon.h +++ b/src/weapons/Weapon.h @@ -47,7 +47,7 @@ public: eWeaponState m_eWeaponState; uint32 m_nAmmoInClip; uint32 m_nAmmoTotal; - int32 m_nTimer; + uint32 m_nTimer; bool m_bAddRotOffset; CWeapon() { diff --git a/src/weapons/WeaponInfo.cpp b/src/weapons/WeaponInfo.cpp index 46ecfb54..4830c86a 100644 --- a/src/weapons/WeaponInfo.cpp +++ b/src/weapons/WeaponInfo.cpp @@ -61,7 +61,7 @@ CWeaponInfo::LoadWeaponData(void) char animToPlay[32], anim2ToPlay[32]; CAnimBlendAssociation *animAssoc; - AnimationId animId, anim2Id; + AnimationId animId; int bp, buflen; int lp, linelen; @@ -101,7 +101,6 @@ CWeaponInfo::LoadWeaponData(void) fireOffsetY = 0.0f; fireOffsetZ = 0.0f; animId = ANIM_WALK; - anim2Id = ANIM_WALK; sscanf( &line[lp], "%s %s %f %d %d %d %d %f %f %f %f %f %f %f %s %s %f %f %f %f %d %d", @@ -136,9 +135,9 @@ CWeaponInfo::LoadWeaponData(void) animAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, animToPlay); animId = static_cast(animAssoc->animId); - if (strncmp(anim2ToPlay, "null", 5) != 0) { + if (strncmp(anim2ToPlay, "null", 4) != 0) { animAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, anim2ToPlay); - anim2Id = static_cast(animAssoc->animId); + ms_apWeaponInfos[weaponType].m_Anim2ToPlay = static_cast(animAssoc->animId); } CVector vecFireOffset(fireOffsetX, fireOffsetY, fireOffsetZ); @@ -155,7 +154,6 @@ CWeaponInfo::LoadWeaponData(void) ms_apWeaponInfos[weaponType].m_fSpread = spread; ms_apWeaponInfos[weaponType].m_vecFireOffset = vecFireOffset; ms_apWeaponInfos[weaponType].m_AnimToPlay = animId; - ms_apWeaponInfos[weaponType].m_Anim2ToPlay = anim2Id; ms_apWeaponInfos[weaponType].m_fAnimLoopStart = animLoopStart * 0.03f; ms_apWeaponInfos[weaponType].m_fAnimLoopEnd = animLoopEnd * 0.03f; ms_apWeaponInfos[weaponType].m_fAnimFrameFire = delayBetweenAnimAndFire * 0.03f;