diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/Camera.cpp | 11 | ||||
-rw-r--r-- | src/core/Camera.h | 2 | ||||
-rw-r--r-- | src/core/Collision.cpp | 6 | ||||
-rw-r--r-- | src/core/ControllerConfig.h | 2 | ||||
-rw-r--r-- | src/core/Explosion.h | 12 | ||||
-rw-r--r-- | src/core/Fire.cpp | 1 | ||||
-rw-r--r-- | src/core/Fire.h | 3 | ||||
-rw-r--r-- | src/core/PlayerInfo.cpp | 9 | ||||
-rw-r--r-- | src/core/PlayerInfo.h | 11 | ||||
-rw-r--r-- | src/core/User.cpp | 2 | ||||
-rw-r--r-- | src/core/User.h | 2 | ||||
-rw-r--r-- | src/core/Wanted.cpp | 13 | ||||
-rw-r--r-- | src/core/World.cpp | 1 | ||||
-rw-r--r-- | src/core/World.h | 1 | ||||
-rw-r--r-- | src/core/config.h | 6 | ||||
-rw-r--r-- | src/core/re3.cpp | 18 |
16 files changed, 80 insertions, 20 deletions
diff --git a/src/core/Camera.cpp b/src/core/Camera.cpp index a66d6ac9..b5ba76db 100644 --- a/src/core/Camera.cpp +++ b/src/core/Camera.cpp @@ -1304,6 +1304,17 @@ CCam::GetWeaponFirstPersonOn() return false; } +float +CCamera::Find3rdPersonQuickAimPitch(void) +{ + float clampedFrontZ = clamp(Cams[ActiveCam].Front.z, -1.0f, 1.0f); + + // float rot = atan2(clampedFrontZ, sqrt(1.0f - sq(clampedFrontZ))); + float rot = Asin(clampedFrontZ); + + return -(DEGTORAD(((0.5f - m_f3rdPersonCHairMultY) * 1.8f * 0.5f * Cams[ActiveCam].FOV)) + rot); +} + STARTPATCHES InjectHook(0x42C760, (bool (CCamera::*)(const CVector ¢er, float radius, const CMatrix *mat))&CCamera::IsSphereVisible, PATCH_JUMP); InjectHook(0x46FD00, &CCamera::SetFadeColour, PATCH_JUMP); diff --git a/src/core/Camera.h b/src/core/Camera.h index 1a2aae79..3ce0d9a6 100644 --- a/src/core/Camera.h +++ b/src/core/Camera.h @@ -469,6 +469,8 @@ int m_iModeObbeCamIsInForCar; void Restore(void); void SetWidescreenOff(void); + float Find3rdPersonQuickAimPitch(void); + void dtor(void) { this->CCamera::~CCamera(); } }; static_assert(offsetof(CCamera, m_WideScreenOn) == 0x70, "CCamera: error"); diff --git a/src/core/Collision.cpp b/src/core/Collision.cpp index 7982e77d..cc360f79 100644 --- a/src/core/Collision.cpp +++ b/src/core/Collision.cpp @@ -2023,11 +2023,11 @@ CColModel::operator=(const CColModel &other) numVerts = 0; for(i = 0; i < other.numTriangles; i++){ if(other.triangles[i].a > numVerts) - other.triangles[i].a = numVerts; + numVerts = other.triangles[i].a; if(other.triangles[i].b > numVerts) - other.triangles[i].b = numVerts; + numVerts = other.triangles[i].b; if(other.triangles[i].c > numVerts) - other.triangles[i].c = numVerts; + numVerts = other.triangles[i].c; } numVerts++; if(vertices) diff --git a/src/core/ControllerConfig.h b/src/core/ControllerConfig.h index 8a434245..b064a381 100644 --- a/src/core/ControllerConfig.h +++ b/src/core/ControllerConfig.h @@ -22,7 +22,7 @@ public: int32 m_ContSetOrder; }; - bool field_0; + bool firstCapture; char _pad0[3]; DIJOYSTATE2 m_OldState; DIJOYSTATE2 m_NewState; diff --git a/src/core/Explosion.h b/src/core/Explosion.h index 69508490..93d60ab3 100644 --- a/src/core/Explosion.h +++ b/src/core/Explosion.h @@ -4,8 +4,16 @@ class CEntity; enum eExplosionType { - EXPLOSION_3 = 3, - EXPLOSION_4 + EXPLOSION_GRENADE, + EXPLOSION_MOLOTOV, + EXPLOSION_ROCKET, + EXPLOSION_CAR, + EXPLOSION_CAR_QUICK, + EXPLOSION_HELI, + EXPLOSION_MINE, + EXPLOSION_BARREL, + EXPLOSION_TANK_GRENADE, + EXPLOSION_HELI_BOMB }; class CExplosion diff --git a/src/core/Fire.cpp b/src/core/Fire.cpp index bc59de2f..a2894d43 100644 --- a/src/core/Fire.cpp +++ b/src/core/Fire.cpp @@ -7,3 +7,4 @@ CFireManager &gFireManager = *(CFireManager*)0x8F31D0; WRAPPER void CFire::Extinguish(void) { EAXJMP(0x479D40); } WRAPPER void CFireManager::StartFire(CEntity *entityOnFire, CEntity *culprit, float, uint32) { EAXJMP(0x479590); } +WRAPPER CFire *CFireManager::FindFurthestFire_NeverMindFireMen(CVector coors, float, float) { EAXJMP(0x479430); } diff --git a/src/core/Fire.h b/src/core/Fire.h index 9c9e1dec..040e9a25 100644 --- a/src/core/Fire.h +++ b/src/core/Fire.h @@ -4,6 +4,7 @@ class CEntity; class CFire { +public: bool m_bIsOngoing; bool m_bExists; bool m_bPropogationFlag; @@ -18,7 +19,6 @@ class CFire int field_28; float field_2C; -public: void Extinguish(void); }; @@ -26,5 +26,6 @@ class CFireManager { public: void StartFire(CEntity *entityOnFire, CEntity *culprit, float, uint32); + CFire *FindFurthestFire_NeverMindFireMen(CVector coors, float, float); }; extern CFireManager &gFireManager; diff --git a/src/core/PlayerInfo.cpp b/src/core/PlayerInfo.cpp index 81c7a199..d9a4c0b0 100644 --- a/src/core/PlayerInfo.cpp +++ b/src/core/PlayerInfo.cpp @@ -1,7 +1,9 @@ #include "common.h" #include "patcher.h" +#include "PlayerPed.h" #include "PlayerInfo.h" #include "Frontend.h" +#include "Vehicle.h" WRAPPER void CPlayerInfo::MakePlayerSafe(bool) { EAXJMP(0x4A1400); } WRAPPER void CPlayerInfo::LoadPlayerSkin() { EAXJMP(0x4A1700); } @@ -12,3 +14,10 @@ void CPlayerInfo::SetPlayerSkin(char *skin) strncpy(m_aSkinName, skin, 32); LoadPlayerSkin(); } + +CVector& CPlayerInfo::GetPos() +{ + if (m_pPed->bInVehicle && m_pPed->m_pMyVehicle) + return m_pPed->m_pMyVehicle->GetPosition(); + return m_pPed->GetPosition(); +} diff --git a/src/core/PlayerInfo.h b/src/core/PlayerInfo.h index d8128424..decfb24c 100644 --- a/src/core/PlayerInfo.h +++ b/src/core/PlayerInfo.h @@ -20,7 +20,7 @@ public: CPlayerPed *m_pPed; CVehicle *m_pRemoteVehicle; CColModel m_ColModel; - CVehicle *m_pVehicleEx; + CVehicle *m_pVehicleEx; // vehicle using the col model above char m_aPlayerName[70]; int32 m_nMoney; int32 m_nVisibleMoney; @@ -45,10 +45,10 @@ public: int8 field_225; int8 field_226; int8 field_227; - int32 m_nTimeLostRemoteCar; - int32 m_nTimeLastHealthLoss; - int32 m_nTimeLastArmourLoss; - int32 field_240; + uint32 m_nTimeLostRemoteCar; + uint32 m_nTimeLastHealthLoss; + uint32 m_nTimeLastArmourLoss; + uint32 m_nTimeTankShotGun; int32 m_nUpsideDownCounter; int32 field_248; int16 m_nTrafficMultiplier; @@ -70,6 +70,7 @@ public: void LoadPlayerSkin(); void AwardMoneyForExplosion(CVehicle *vehicle); void SetPlayerSkin(char* skin); + CVector& GetPos(); }; static_assert(sizeof(CPlayerInfo) == 0x13C, "CPlayerInfo: error"); diff --git a/src/core/User.cpp b/src/core/User.cpp index c9cb97cc..f40a06db 100644 --- a/src/core/User.cpp +++ b/src/core/User.cpp @@ -13,6 +13,8 @@ COnscreenTimer& CUserDisplay::OnscnTimer = *(COnscreenTimer*)0x862238; CPager& CUserDisplay::Pager = *(CPager*)0x8F2744; CCurrentVehicle& CUserDisplay::CurrentVehicle = *(CCurrentVehicle*)0x8F5FE8; +WRAPPER void CPager::AddMessage(wchar*, uint16, uint16, uint16) { EAXJMP(0x52B940); } + void COnscreenTimer::Init() { m_bDisabled = false; for(uint32 i = 0; i < NUMONSCREENTIMERENTRIES; i++) { diff --git a/src/core/User.h b/src/core/User.h index 8b744c7e..cac2a318 100644 --- a/src/core/User.h +++ b/src/core/User.h @@ -52,6 +52,8 @@ class CCurrentVehicle class CPager { +public: + void AddMessage(wchar*, uint16, uint16, uint16); }; class CUserDisplay diff --git a/src/core/Wanted.cpp b/src/core/Wanted.cpp index 7b865311..26b115e3 100644 --- a/src/core/Wanted.cpp +++ b/src/core/Wanted.cpp @@ -40,19 +40,19 @@ CWanted::Initialise() bool CWanted::AreSwatRequired() { - return m_nWantedLevel >= 4; + return m_nWantedLevel == 4 || m_bSwatRequired; } bool CWanted::AreFbiRequired() { - return m_nWantedLevel >= 5; + return m_nWantedLevel == 5 || m_bFbiRequired; } bool CWanted::AreArmyRequired() { - return m_nWantedLevel >= 6; + return m_nWantedLevel == 6 || m_bArmyRequired; } int32 @@ -77,6 +77,8 @@ void CWanted::SetWantedLevel(int32 level) { ClearQdCrimes(); + if (level > MaximumWantedLevel) + level = MaximumWantedLevel; switch (level) { case 0: m_nChaos = 0; @@ -100,8 +102,6 @@ CWanted::SetWantedLevel(int32 level) m_nChaos = 3220; break; default: - if (level > MaximumWantedLevel) - m_nChaos = MaximumWantedLevel; break; } UpdateWantedLevel(); @@ -275,6 +275,9 @@ CWanted::UpdateWantedLevel() { int32 CurrWantedLevel = m_nWantedLevel; + if (m_nChaos > nMaximumWantedLevel) + m_nChaos = nMaximumWantedLevel; + if (m_nChaos >= 0 && m_nChaos < 40) { m_nWantedLevel = 0; m_MaximumLawEnforcerVehicles = 0; diff --git a/src/core/World.cpp b/src/core/World.cpp index 829a64d4..0440a951 100644 --- a/src/core/World.cpp +++ b/src/core/World.cpp @@ -29,6 +29,7 @@ bool &CWorld::bForceProcessControl = *(bool*)0x95CD6C; bool &CWorld::bProcessCutsceneOnly = *(bool*)0x95CD8B; WRAPPER void CWorld::RemoveReferencesToDeletedObject(CEntity*) { EAXJMP(0x4B3BF0); } +WRAPPER void CWorld::FindObjectsKindaColliding(const CVector &, float, bool, int16*, int16, CEntity **, bool, bool, bool, bool, bool){ EAXJMP(0x4B2A30); } void CWorld::Add(CEntity *ent) diff --git a/src/core/World.h b/src/core/World.h index fd9d6fc3..e4f46589 100644 --- a/src/core/World.h +++ b/src/core/World.h @@ -103,6 +103,7 @@ public: static float FindGroundZFor3DCoord(float x, float y, float z, bool *found); static float FindRoofZFor3DCoord(float x, float y, float z, bool *found); static void RemoveReferencesToDeletedObject(CEntity*); + static void FindObjectsKindaColliding(const CVector &, float, bool, int16*, int16, CEntity **, bool, bool, bool, bool, bool); static float GetSectorX(float f) { return ((f - WORLD_MIN_X)/SECTOR_SIZE_X); } static float GetSectorY(float f) { return ((f - WORLD_MIN_Y)/SECTOR_SIZE_Y); } diff --git a/src/core/config.h b/src/core/config.h index 38682e22..07c86c0d 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -64,6 +64,8 @@ enum Config { NUMRADARBLIPS = 32, NUMPICKUPS = 336, NUMEVENTS = 64, + + NUM_CARGENS = 160 }; // We'll use this once we're ready to become independent of the game @@ -117,7 +119,7 @@ enum Config { # define CHATTYSPLASH // print what the game is loading #endif -//#define FIX_BUGS // fix bugs in the game, TODO: use this more +#define FIX_BUGS // fix bugs in the game, TODO: use this more #define KANGAROO_CHEAT #define ASPECT_RATIO_SCALE -#define USE_DEBUG_SCRIPT_LOADER
\ No newline at end of file +#define USE_DEBUG_SCRIPT_LOADER diff --git a/src/core/re3.cpp b/src/core/re3.cpp index a0032bc6..35b3cfa4 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -150,6 +150,18 @@ FixCar(void) ((CAutomobile*)veh)->Fix(); } +static int engineStatus; +static void +SetEngineStatus(void) +{ + CVehicle *veh = FindPlayerVehicle(); + if(veh == nil) + return; + if(!veh->IsCar()) + return; + ((CAutomobile*)veh)->Damage.SetEngineStatus(engineStatus); +} + static void ToggleComedy(void) { @@ -295,9 +307,13 @@ DebugMenuPopulate(void) DebugMenuAddCmd("Spawn", "Spawn Enforcer", [](){ SpawnCar(MI_ENFORCER); }); DebugMenuAddCmd("Spawn", "Spawn Banshee", [](){ SpawnCar(MI_BANSHEE); }); DebugMenuAddCmd("Spawn", "Spawn Yakuza", [](){ SpawnCar(MI_YAKUZA); }); + DebugMenuAddCmd("Spawn", "Spawn Yardie", [](){ SpawnCar(MI_YARDIE); }); DebugMenuAddCmd("Spawn", "Spawn Dodo", [](){ SpawnCar(MI_DODO); }); + DebugMenuAddCmd("Spawn", "Spawn Rhino", [](){ SpawnCar(MI_RHINO); }); + DebugMenuAddCmd("Spawn", "Spawn Firetruck", [](){ SpawnCar(MI_FIRETRUCK); }); - + DebugMenuAddVar("Debug", "Engine Status", &engineStatus, nil, 1, 0, 226, nil); + DebugMenuAddCmd("Debug", "Set Engine Status", SetEngineStatus); DebugMenuAddCmd("Debug", "Fix Car", FixCar); DebugMenuAddCmd("Debug", "Toggle Comedy Controls", ToggleComedy); DebugMenuAddCmd("Debug", "Place Car on Road", PlaceOnRoad); |