Port freecam & hardmode to III & VC
This commit is contained in:
parent
600ef84cef
commit
b3c16e04d6
104
src/game.cpp
104
src/game.cpp
@ -87,6 +87,19 @@ Game::Game()
|
|||||||
CPlayerPed* pPlayer = FindPlayerPed();
|
CPlayerPed* pPlayer = FindPlayerPed();
|
||||||
int hplayer = CPools::GetPedRef(pPlayer);
|
int hplayer = CPools::GetPedRef(pPlayer);
|
||||||
|
|
||||||
|
if (m_HardMode::m_bEnabled)
|
||||||
|
{
|
||||||
|
if (pPlayer->m_fHealth > 50.0f)
|
||||||
|
pPlayer->m_fHealth = 50.0f;
|
||||||
|
|
||||||
|
pPlayer->m_fArmour = 0.0f;
|
||||||
|
|
||||||
|
#ifdef GTASA
|
||||||
|
CStats::SetStatValue(STAT_MAX_HEALTH, 350.0f);
|
||||||
|
CStats::SetStatValue(STAT_STAMINA, 0.0f);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef GTASA
|
#ifdef GTASA
|
||||||
if (m_bScreenShot)
|
if (m_bScreenShot)
|
||||||
{
|
{
|
||||||
@ -97,16 +110,6 @@ Game::Game()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_HardMode::m_bEnabled)
|
|
||||||
{
|
|
||||||
if (pPlayer->m_fHealth > 50.0f)
|
|
||||||
pPlayer->m_fHealth = 50.0f;
|
|
||||||
|
|
||||||
pPlayer->m_fArmour = 0.0f;
|
|
||||||
CStats::SetStatValue(STAT_MAX_HEALTH, 350.0f);
|
|
||||||
CStats::SetStatValue(STAT_STAMINA, 0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int m_nSolidWaterObj;
|
static int m_nSolidWaterObj;
|
||||||
if (m_bSolidWater)
|
if (m_bSolidWater)
|
||||||
{
|
{
|
||||||
@ -141,6 +144,8 @@ Game::Game()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
if (freeCam.Pressed())
|
if (freeCam.Pressed())
|
||||||
{
|
{
|
||||||
if (m_Freecam::m_bEnabled)
|
if (m_Freecam::m_bEnabled)
|
||||||
@ -158,7 +163,6 @@ Game::Game()
|
|||||||
{
|
{
|
||||||
FreeCam();
|
FreeCam();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// improve this later
|
// improve this later
|
||||||
static uint syncTimer;
|
static uint syncTimer;
|
||||||
@ -220,50 +224,56 @@ void SetPlayerMission(std::string& rootkey, std::string& name, std::string& id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef GTASA
|
|
||||||
void Game::FreeCam()
|
void Game::FreeCam()
|
||||||
{
|
{
|
||||||
int delta = (CTimer::m_snTimeInMillisecondsNonClipped -
|
int delta = (CTimer::m_snTimeInMilliseconds - CTimer::m_snPreviousTimeInMilliseconds);
|
||||||
CTimer::m_snPreviousTimeInMillisecondsNonClipped);
|
|
||||||
|
|
||||||
int ratio = 1 / (1 + (delta * m_Freecam::m_nMul));
|
int ratio = 1 / (1 + (delta * m_Freecam::m_nMul));
|
||||||
int speed = m_Freecam::m_nMul + m_Freecam::m_nMul * ratio * delta;
|
int speed = m_Freecam::m_nMul + m_Freecam::m_nMul * ratio * delta;
|
||||||
|
|
||||||
if (!m_Freecam::m_bInitDone)
|
if (!m_Freecam::m_bInitDone)
|
||||||
{
|
{
|
||||||
CPlayerPed* player = FindPlayerPed(-1);
|
CPlayerPed* player = FindPlayerPed();
|
||||||
Command<Commands::SET_EVERYONE_IGNORE_PLAYER>(0, true);
|
Command<Commands::SET_EVERYONE_IGNORE_PLAYER>(0, true);
|
||||||
|
|
||||||
m_Freecam::m_bHudState = patch::Get<BYTE>(0xBA6769); // hud
|
m_Freecam::m_bHudState = patch::Get<BYTE>(BY_GAME(0xBA6769, 0x86963A, NULL)); // hud
|
||||||
m_Freecam::m_bRadarState = patch::Get<BYTE>(0xBA676C); // radar
|
patch::Set<BYTE>(BY_GAME(0xBA6769, 0x86963A, NULL), 0); // hud
|
||||||
patch::Set<BYTE>(0xBA6769, 0); // hud
|
m_Freecam::m_bRadarState = patch::Get<BYTE>(BY_GAME(0xBA676C, 0xA10AB6, NULL)); // radar
|
||||||
patch::Set<BYTE>(0xBA676C, 2); // radar
|
|
||||||
|
|
||||||
CVector player_pos = player->GetPosition();
|
CVector playerPos = player->GetPosition();
|
||||||
CPad::GetPad(0)->DisablePlayerControls = true;
|
CPad::GetPad(0)->DisablePlayerControls = true;
|
||||||
|
|
||||||
Command<Commands::CREATE_RANDOM_CHAR>(player_pos.x, player_pos.y, player_pos.z, &m_Freecam::m_nPed);
|
Command<Commands::CREATE_RANDOM_CHAR>(playerPos.x, playerPos.y, playerPos.z, &m_Freecam::m_nPed);
|
||||||
m_Freecam::m_pPed = CPools::GetPed(m_Freecam::m_nPed);
|
m_Freecam::m_pPed = CPools::GetPed(m_Freecam::m_nPed);
|
||||||
m_Freecam::m_pPed->m_bIsVisible = false;
|
|
||||||
|
|
||||||
Command<Commands::FREEZE_CHAR_POSITION_AND_DONT_LOAD_COLLISION>(m_Freecam::m_nPed, true);
|
|
||||||
Command<Commands::SET_CHAR_COLLISION>(m_Freecam::m_nPed, false);
|
|
||||||
Command<Commands::SET_LOAD_COLLISION_FOR_CHAR_FLAG>(m_Freecam::m_nPed, false);
|
|
||||||
|
|
||||||
m_Freecam::m_fTotalMouse.x = player->GetHeading() + 89.6f;
|
m_Freecam::m_fTotalMouse.x = player->GetHeading() + 89.6f;
|
||||||
m_Freecam::m_fTotalMouse.y = 0;
|
m_Freecam::m_fTotalMouse.y = 0;
|
||||||
|
playerPos.z -= 20;
|
||||||
|
|
||||||
m_Freecam::m_bInitDone = true;
|
Command<Commands::FREEZE_CHAR_POSITION_AND_DONT_LOAD_COLLISION>(m_Freecam::m_nPed, true);
|
||||||
player_pos.z -= 20;
|
Command<Commands::SET_LOAD_COLLISION_FOR_CHAR_FLAG>(m_Freecam::m_nPed, false);
|
||||||
m_Freecam::m_pPed->SetPosn(player_pos);
|
|
||||||
|
|
||||||
|
#ifdef GTASA
|
||||||
|
m_Freecam::m_pPed->m_bIsVisible = false;
|
||||||
|
Command<Commands::SET_CHAR_COLLISION>(m_Freecam::m_nPed, false);
|
||||||
|
m_Freecam::m_pPed->SetPosn(playerPos);
|
||||||
TheCamera.LerpFOV(TheCamera.FindCamFOV(), m_Freecam::m_fFOV, 1000, true);
|
TheCamera.LerpFOV(TheCamera.FindCamFOV(), m_Freecam::m_fFOV, 1000, true);
|
||||||
Command<Commands::CAMERA_PERSIST_FOV>(true);
|
Command<Commands::CAMERA_PERSIST_FOV>(true);
|
||||||
|
patch::Set<BYTE>(0xBA676C, 2); // disable radar
|
||||||
|
#else
|
||||||
|
m_Freecam::m_pPed->m_nFlags.bIsVisible = false;
|
||||||
|
m_Freecam::m_pPed->m_nFlags.bUseCollision = false;
|
||||||
|
m_Freecam::m_pPed->SetPosition(playerPos);
|
||||||
|
patch::Set<BYTE>(0xA10AB6, 1); // disable radar
|
||||||
|
#endif
|
||||||
|
|
||||||
|
m_Freecam::m_bInitDone = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CVector pos = m_Freecam::m_pPed->GetPosition();
|
CVector pos = m_Freecam::m_pPed->GetPosition();
|
||||||
|
|
||||||
Command<Commands::GET_PC_MOUSE_MOVEMENT>(&m_Freecam::m_fMouse.x, &m_Freecam::m_fMouse.y);
|
m_Freecam::m_fMouse.x = CPad::NewMouseControllerState.X;
|
||||||
|
m_Freecam::m_fMouse.y = CPad::NewMouseControllerState.Y;
|
||||||
m_Freecam::m_fTotalMouse.x = m_Freecam::m_fTotalMouse.x - m_Freecam::m_fMouse.x / 250;
|
m_Freecam::m_fTotalMouse.x = m_Freecam::m_fTotalMouse.x - m_Freecam::m_fMouse.x / 250;
|
||||||
m_Freecam::m_fTotalMouse.y = m_Freecam::m_fTotalMouse.y + m_Freecam::m_fMouse.y / 3;
|
m_Freecam::m_fTotalMouse.y = m_Freecam::m_fTotalMouse.y + m_Freecam::m_fMouse.y / 3;
|
||||||
|
|
||||||
@ -279,10 +289,15 @@ void Game::FreeCam()
|
|||||||
|
|
||||||
if (freeCamTeleportPlayer.Pressed())
|
if (freeCamTeleportPlayer.Pressed())
|
||||||
{
|
{
|
||||||
CPlayerPed* player = FindPlayerPed(-1);
|
CPlayerPed* player = FindPlayerPed();
|
||||||
CVector pos = m_Freecam::m_pPed->GetPosition();
|
CVector pos = m_Freecam::m_pPed->GetPosition();
|
||||||
CEntity* player_entity = FindPlayerEntity(-1);
|
|
||||||
pos.z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, 1000, nullptr, &player_entity) + 0.5f;
|
#ifdef GTASA
|
||||||
|
CEntity* playerEntity = FindPlayerEntity(-1);
|
||||||
|
pos.z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, 1000, nullptr, &playerEntity) + 0.5f;
|
||||||
|
#else
|
||||||
|
pos.z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, 1000, nullptr) + 0.5f;
|
||||||
|
#endif
|
||||||
Command<Commands::SET_CHAR_COORDINATES>(CPools::GetPedRef(player), pos.x, pos.y, pos.z);
|
Command<Commands::SET_CHAR_COORDINATES>(CPools::GetPedRef(player), pos.x, pos.y, pos.z);
|
||||||
|
|
||||||
// disble them again cause they get enabled
|
// disble them again cause they get enabled
|
||||||
@ -330,6 +345,7 @@ void Game::FreeCam()
|
|||||||
pos.y += speed * sin(angle * 3.14159f / 180.0f);
|
pos.y += speed * sin(angle * 3.14159f / 180.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef GTASA
|
||||||
if (CPad::NewMouseControllerState.wheelUp)
|
if (CPad::NewMouseControllerState.wheelUp)
|
||||||
{
|
{
|
||||||
if (m_Freecam::m_fFOV > 10.0f)
|
if (m_Freecam::m_fFOV > 10.0f)
|
||||||
@ -356,6 +372,10 @@ void Game::FreeCam()
|
|||||||
Command<Commands::ATTACH_CAMERA_TO_CHAR>(m_Freecam::m_nPed, 0.0, 0.0, 20.0, 90.0, 180, m_Freecam::m_fTotalMouse.y, 0.0, 2);
|
Command<Commands::ATTACH_CAMERA_TO_CHAR>(m_Freecam::m_nPed, 0.0, 0.0, 20.0, 90.0, 180, m_Freecam::m_fTotalMouse.y, 0.0, 2);
|
||||||
m_Freecam::m_pPed->SetPosn(pos);
|
m_Freecam::m_pPed->SetPosn(pos);
|
||||||
CIplStore::AddIplsNeededAtPosn(pos);
|
CIplStore::AddIplsNeededAtPosn(pos);
|
||||||
|
#else
|
||||||
|
m_Freecam::m_pPed->m_placement.SetHeading(m_Freecam::m_fTotalMouse.x);
|
||||||
|
m_Freecam::m_pPed->SetPosition(pos);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::ClearFreecamStuff()
|
void Game::ClearFreecamStuff()
|
||||||
@ -363,15 +383,17 @@ void Game::ClearFreecamStuff()
|
|||||||
m_Freecam::m_bInitDone = false;
|
m_Freecam::m_bInitDone = false;
|
||||||
Command<Commands::SET_EVERYONE_IGNORE_PLAYER>(0, false);
|
Command<Commands::SET_EVERYONE_IGNORE_PLAYER>(0, false);
|
||||||
patch::Set<BYTE>(BY_GAME(0xBA6769, 0x86963A, NULL), m_Freecam::m_bHudState); // hud
|
patch::Set<BYTE>(BY_GAME(0xBA6769, 0x86963A, NULL), m_Freecam::m_bHudState); // hud
|
||||||
patch::Set<BYTE>(0xBA676C, m_Freecam::m_bRadarState); // radar
|
patch::Set<BYTE>(BY_GAME(0xBA676C, 0xA10AB6, NULL), m_Freecam::m_bRadarState); // radar
|
||||||
CPad::GetPad(0)->DisablePlayerControls = false;
|
CPad::GetPad(0)->DisablePlayerControls = false;
|
||||||
|
|
||||||
Command<Commands::DELETE_CHAR>(m_Freecam::m_nPed);
|
Command<Commands::DELETE_CHAR>(m_Freecam::m_nPed);
|
||||||
m_Freecam::m_pPed = nullptr;
|
m_Freecam::m_pPed = nullptr;
|
||||||
|
|
||||||
|
#ifdef GTASA
|
||||||
Command<Commands::CAMERA_PERSIST_FOV>(false);
|
Command<Commands::CAMERA_PERSIST_FOV>(false);
|
||||||
|
#endif
|
||||||
Command<Commands::RESTORE_CAMERA_JUMPCUT>();
|
Command<Commands::RESTORE_CAMERA_JUMPCUT>();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void Game::Draw()
|
void Game::Draw()
|
||||||
{
|
{
|
||||||
@ -479,7 +501,6 @@ of LS without completing missions"))
|
|||||||
{
|
{
|
||||||
Command<Commands::FREEZE_ONSCREEN_TIMER>(m_bMissionTimer);
|
Command<Commands::FREEZE_ONSCREEN_TIMER>(m_bMissionTimer);
|
||||||
}
|
}
|
||||||
#ifdef GTASA
|
|
||||||
if (Ui::CheckboxWithHint("Hard mode", &m_HardMode::m_bEnabled, "Makes the game more challanging to play. \n\
|
if (Ui::CheckboxWithHint("Hard mode", &m_HardMode::m_bEnabled, "Makes the game more challanging to play. \n\
|
||||||
Lowers armour, health, stamina etc."))
|
Lowers armour, health, stamina etc."))
|
||||||
{
|
{
|
||||||
@ -489,19 +510,28 @@ Lowers armour, health, stamina etc."))
|
|||||||
{
|
{
|
||||||
m_HardMode::m_fBacArmour = player->m_fArmour;
|
m_HardMode::m_fBacArmour = player->m_fArmour;
|
||||||
m_HardMode::m_fBacHealth = player->m_fHealth;
|
m_HardMode::m_fBacHealth = player->m_fHealth;
|
||||||
|
|
||||||
|
#ifdef GTASA
|
||||||
m_HardMode::m_fBacMaxHealth = CStats::GetStatValue(STAT_MAX_HEALTH);
|
m_HardMode::m_fBacMaxHealth = CStats::GetStatValue(STAT_MAX_HEALTH);
|
||||||
m_HardMode::m_fBacStamina = CStats::GetStatValue(STAT_STAMINA);
|
m_HardMode::m_fBacStamina = CStats::GetStatValue(STAT_STAMINA);
|
||||||
|
#else
|
||||||
|
m_HardMode::m_fBacMaxHealth = 100.0f;
|
||||||
|
#endif
|
||||||
player->m_fHealth = 50.0f;
|
player->m_fHealth = 50.0f;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player->m_fArmour = m_HardMode::m_fBacArmour;
|
player->m_fArmour = m_HardMode::m_fBacArmour;
|
||||||
|
|
||||||
|
#ifdef GTASA
|
||||||
CStats::SetStatValue(STAT_STAMINA, m_HardMode::m_fBacStamina);
|
CStats::SetStatValue(STAT_STAMINA, m_HardMode::m_fBacStamina);
|
||||||
CStats::SetStatValue(STAT_MAX_HEALTH, m_HardMode::m_fBacMaxHealth);
|
CStats::SetStatValue(STAT_MAX_HEALTH, m_HardMode::m_fBacMaxHealth);
|
||||||
|
#endif
|
||||||
player->m_fHealth = m_HardMode::m_fBacHealth;
|
player->m_fHealth = m_HardMode::m_fBacHealth;
|
||||||
CWeaponInfo::LoadWeaponData();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef GTASA
|
||||||
|
|
||||||
if (Ui::CheckboxWithHint("Keep stuff", &m_bKeepStuff, "Keep stuff after arrest/death"))
|
if (Ui::CheckboxWithHint("Keep stuff", &m_bKeepStuff, "Keep stuff after arrest/death"))
|
||||||
{
|
{
|
||||||
Command<Commands::SWITCH_ARREST_PENALTIES>(m_bKeepStuff);
|
Command<Commands::SWITCH_ARREST_PENALTIES>(m_bKeepStuff);
|
||||||
|
45
src/game.h
45
src/game.h
@ -9,27 +9,6 @@ private:
|
|||||||
static inline bool m_bDisableReplay;
|
static inline bool m_bDisableReplay;
|
||||||
static inline bool m_bMissionTimer;
|
static inline bool m_bMissionTimer;
|
||||||
|
|
||||||
#ifdef GTASA
|
|
||||||
static inline bool m_bForbiddenArea = true; // wanted level when going outside playable aea
|
|
||||||
static inline bool m_bSolidWater; // walk on water hack
|
|
||||||
static inline bool m_bScreenShot;
|
|
||||||
static inline bool m_bKeepStuff;
|
|
||||||
static inline ResourceStore m_StatData{ "stat", eResourceType::TYPE_TEXT };
|
|
||||||
|
|
||||||
static inline std::vector<std::string> m_DayNames =
|
|
||||||
{
|
|
||||||
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
|
|
||||||
};
|
|
||||||
|
|
||||||
struct m_RandomCheats
|
|
||||||
{
|
|
||||||
static inline bool m_bEnabled;
|
|
||||||
static inline bool m_bProgressBar = true;
|
|
||||||
static inline std::string m_EnabledCheats[92][2];
|
|
||||||
static inline int m_nInterval = 10;
|
|
||||||
static inline CJson m_Json = CJson("cheat name");
|
|
||||||
static inline uint m_nTimer;
|
|
||||||
};
|
|
||||||
struct m_Freecam
|
struct m_Freecam
|
||||||
{
|
{
|
||||||
static inline bool m_bEnabled;
|
static inline bool m_bEnabled;
|
||||||
@ -52,14 +31,32 @@ private:
|
|||||||
static inline float m_fBacStamina = 0.0f;
|
static inline float m_fBacStamina = 0.0f;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef GTASA
|
||||||
|
static inline bool m_bForbiddenArea = true; // wanted level when going outside playable aea
|
||||||
|
static inline bool m_bSolidWater; // walk on water hack
|
||||||
|
static inline bool m_bScreenShot;
|
||||||
|
static inline bool m_bKeepStuff;
|
||||||
|
static inline ResourceStore m_StatData{ "stat", eResourceType::TYPE_TEXT };
|
||||||
|
|
||||||
|
static inline std::vector<std::string> m_DayNames =
|
||||||
|
{
|
||||||
|
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
|
||||||
|
};
|
||||||
|
|
||||||
|
struct m_RandomCheats
|
||||||
|
{
|
||||||
|
static inline bool m_bEnabled;
|
||||||
|
static inline bool m_bProgressBar = true;
|
||||||
|
static inline std::string m_EnabledCheats[92][2];
|
||||||
|
static inline int m_nInterval = 10;
|
||||||
|
static inline CJson m_Json = CJson("cheat name");
|
||||||
|
static inline uint m_nTimer;
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void RealTimeClock();
|
static void RealTimeClock();
|
||||||
#ifdef GTASA
|
|
||||||
// TODO: Update freecam with aap's code
|
|
||||||
static void FreeCam();
|
static void FreeCam();
|
||||||
static void ClearFreecamStuff();
|
static void ClearFreecamStuff();
|
||||||
#endif
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static inline bool m_bFreezeTime;
|
static inline bool m_bFreezeTime;
|
||||||
|
@ -692,11 +692,6 @@ void Vehicle::Draw()
|
|||||||
\nEnabling this would disable\nAll cars have nitro\nAll taxis have nitro");
|
\nEnabling this would disable\nAll cars have nitro\nAll taxis have nitro");
|
||||||
#elif GTA3
|
#elif GTA3
|
||||||
Ui::CheckboxAddress("Perfect handling", 0x95CD66);
|
Ui::CheckboxAddress("Perfect handling", 0x95CD66);
|
||||||
static bool bTankMode = false;
|
|
||||||
if (Ui::CheckboxWithHint("Tank mode", &bTankMode))
|
|
||||||
{
|
|
||||||
Call<0x490EE0>();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
Ui::CheckboxWithHint("Watertight car", &m_bVehWatertight, "Peds inside won't drown if the vehicle\nis submerged in water");
|
Ui::CheckboxWithHint("Watertight car", &m_bVehWatertight, "Peds inside won't drown if the vehicle\nis submerged in water");
|
||||||
Ui::CheckboxAddress("Wheels only", BY_GAME(0x96914B, 0xA10B70, 0x95CD78));
|
Ui::CheckboxAddress("Wheels only", BY_GAME(0x96914B, 0xA10B70, 0x95CD78));
|
||||||
|
@ -2,5 +2,5 @@
|
|||||||
#define MENU_NAME "Cheat Menu"
|
#define MENU_NAME "Cheat Menu"
|
||||||
#define MENU_VERSION_NUMBER "3.1"
|
#define MENU_VERSION_NUMBER "3.1"
|
||||||
#define MENU_VERSION MENU_VERSION_NUMBER"-beta"
|
#define MENU_VERSION MENU_VERSION_NUMBER"-beta"
|
||||||
#define BUILD_NUMBER "20220110"
|
#define BUILD_NUMBER "20220118"
|
||||||
#define MENU_TITLE MENU_NAME " v" MENU_VERSION
|
#define MENU_TITLE MENU_NAME " v" MENU_VERSION
|
||||||
|
Loading…
Reference in New Issue
Block a user