diff --git a/src/core/Pad.cpp b/src/core/Pad.cpp index 897923dd..ab66dd9b 100644 --- a/src/core/Pad.cpp +++ b/src/core/Pad.cpp @@ -38,6 +38,7 @@ #include "WaterLevel.h" #include "General.h" #include "Fluff.h" +#include "Gangs.h" CPad Pads[MAX_PADS]; CMousePointerStateHelper MousePointerStateHelper; @@ -176,8 +177,11 @@ void HealthCheat() FindPlayerPed()->m_fHealth = CWorld::Players[0].m_nMaxHealth; if (FindPlayerVehicle()) { FindPlayerVehicle()->m_fHealth = 1000.0f; - if (FindPlayerVehicle()->m_vehType == VEHICLE_TYPE_CAR) + if (FindPlayerVehicle()->m_vehType == VEHICLE_TYPE_CAR) { ((CAutomobile*)FindPlayerVehicle())->Damage.SetEngineStatus(0); + for (int32 i = 0; i < 4; i++) + ((CAutomobile*)FindPlayerVehicle())->Damage.SetWheelStatus(i, WHEEL_STATUS_OK); + } } } @@ -380,6 +384,12 @@ void NastyLimbsCheat() CPed::bNastyLimbsCheat = !CPed::bNastyLimbsCheat; } +void FannyMagnetCheat() +{ + CHud::SetHelpMessage(TheText.Get("CHEAT1"), true); + CPed::bFannyMagnetCheat = !CPed::bFannyMagnetCheat; +} + void BlackCarsCheat() { CHud::SetHelpMessage(TheText.Get("CHEAT1"), true); @@ -418,6 +428,17 @@ void SuicideCheat(void) { FindPlayerPed()->InflictDamage(nil, WEAPONTYPE_UNARMED, 1000.0f, PEDPIECE_TORSO, 0); } +void DoChicksWithGunsCheat(void) { + CHud::SetHelpMessage(TheText.Get("CHEAT1"), true); + CStreaming::SetModelIsDeletable(CGangs::GetGangPedModel1(GANG_PLAYER)); + CStreaming::SetModelIsDeletable(CGangs::GetGangPedModel2(GANG_PLAYER)); + CStreaming::SetModelTxdIsDeletable(CGangs::GetGangPedModel1(GANG_PLAYER)); + CStreaming::SetModelTxdIsDeletable(CGangs::GetGangPedModel2(GANG_PLAYER)); + CStreaming::RemoveCurrentZonesModels(); + CGangs::SetGangPedModels(GANG_PLAYER, MI_HFYBE, MI_WFYBE); + CGangs::SetGangWeapons(GANG_PLAYER, WEAPONTYPE_M4, WEAPONTYPE_M4); +} + ////////////////////////////////////////////////////////////////////////// #ifdef KANGAROO_CHEAT @@ -474,6 +495,12 @@ void AltDodoCheat(void) } #endif +void FlyingFishCheat(void) +{ + CHud::SetHelpMessage(TheText.Get("CHEAT1"), true); + CVehicle::bCheat8 = !CVehicle::bCheat8; +} + bool CControllerState::CheckForInput(void) { @@ -996,7 +1023,7 @@ int Cheat_strncmp(char* sourceStr, char* origCheatStr) { char cheatCodeVals[] = { 3,5,7,1,13,27,3,7,1,11,13,8,7,32,13,6,28,19,10,3,3,5,7,1,13,27,3,7 }; - for (int32 i = 0; i < strlen(origCheatStr); i++) { + for (uint32 i = 0; i < strlen(origCheatStr); i++) { if ((sourceStr[i] != origCheatStr[i] - cheatCodeVals[i]) || i >= ARRAY_SIZE(cheatCodeVals)) { return 1; } @@ -1120,6 +1147,7 @@ void CPad::AddToPCCheatString(char c) //COMEFLYWITHME else if (!Cheat_strncmp(KeyBoardCheatString, "HROUVr\\SGPZWJ")) { KeyBoardCheatString[0] = ' '; + ChittyChittyBangBangCheat(); } // "GRIPISEVERYTHING" else if (!Cheat_strncmp(KeyBoardCheatString, "JSPIatULWP`QWi_M")) { @@ -1133,6 +1161,7 @@ void CPad::AddToPCCheatString(char c) // "CHICKSWITHGUNS" else if (!Cheat_strncmp(KeyBoardCheatString, "VS\\HUoL^TVPQOc")) { KeyBoardCheatString[0] = ' '; + DoChicksWithGunsCheat(); } // "ICANTTAKEITANYMORE" else if (!Cheat_strncmp(KeyBoardCheatString, "HWVNfiD[JPXI[t[G_\\")) { @@ -1260,10 +1289,17 @@ void CPad::AddToPCCheatString(char c) //CERTAINDEATH else if (!Cheat_strncmp(KeyBoardCheatString, "KYHFQiLHU]RK")) { KeyBoardCheatString[0] = ' '; - if (!CSmokeTrails::CigOn) - CSmokeTrails::CigOn = true; - else - CSmokeTrails::CigOn = false; + CSmokeTrails::CigOn = !CSmokeTrails::CigOn; + } + //AIRSHIP + else if (!Cheat_strncmp(KeyBoardCheatString, "SNOT_dD")) { + KeyBoardCheatString[0] = ' '; + FlyingFishCheat(); + } + //FANNYMAGNET + else if (!Cheat_strncmp(KeyBoardCheatString, "WJUHNh\\UOLS")) { + KeyBoardCheatString[0] = ' '; + FannyMagnetCheat(); } // "ILOVESCOTLAND" if (!_CHEATCMP("DNALTOCSEVOLI")) @@ -2671,6 +2707,7 @@ void CPad::ResetCheats(void) CPopulation::ms_bGivePedsWeapons = false; CPed::bNastyLimbsCheat = false; + CPed::bFannyMagnetCheat = false; CPed::bPedCheat2 = false; CPed::bPedCheat3 = false; @@ -2679,6 +2716,7 @@ void CPad::ResetCheats(void) CVehicle::bCheat3 = false; CVehicle::bCheat4 = false; CVehicle::bCheat5 = false; + CVehicle::bCheat8 = false; gbBlackCars = false; gbPinkCars = false; diff --git a/src/core/Streaming.cpp b/src/core/Streaming.cpp index 985b28c9..d560a695 100644 --- a/src/core/Streaming.cpp +++ b/src/core/Streaming.cpp @@ -1554,19 +1554,32 @@ CStreaming::RemoveCurrentZonesModels(void) { int i; - if(ms_currentPedGrp != -1) - for(i = 0; i < NUMMODELSPERPEDGROUP; i++){ - if(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] == -1) + if (ms_currentPedGrp != -1) + for (i = 0; i < NUMMODELSPERPEDGROUP; i++) { + if (CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] == -1) break; - if(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] != MI_MALE01) + if (CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] != MI_MALE01) { SetModelIsDeletable(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i]); + SetModelTxdIsDeletable(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i]); + } } - for(i = 0; i < NUM_GANGS; i++){ - SetModelIsDeletable(CGangs::GetGangPedModel1(i)); - SetModelIsDeletable(CGangs::GetGangPedModel2(i)); - if(CGangs::GetGangVehicleModel(i) != -1) + CStreaming::RequestModel(MI_MALE01, STREAMFLAGS_DONT_REMOVE); + CStreaming::RequestModel(MI_TAXI_D, STREAMFLAGS_DONT_REMOVE); + + for (i = 0; i < NUM_GANGS; i++) { + if (CGangs::GetGangPedModel1(i) != -1) { + SetModelIsDeletable(CGangs::GetGangPedModel1(i)); + SetModelTxdIsDeletable(CGangs::GetGangPedModel1(i)); + } + if (CGangs::GetGangPedModel2(i) != -1) { + SetModelIsDeletable(CGangs::GetGangPedModel2(i)); + SetModelTxdIsDeletable(CGangs::GetGangPedModel2(i)); + } + if (CGangs::GetGangVehicleModel(i) != -1) { SetModelIsDeletable(CGangs::GetGangVehicleModel(i)); + SetModelTxdIsDeletable(CGangs::GetGangVehicleModel(i)); + } } ms_currentPedGrp = -1; diff --git a/src/modelinfo/ModelIndices.h b/src/modelinfo/ModelIndices.h index 7b67c199..60b69088 100644 --- a/src/modelinfo/ModelIndices.h +++ b/src/modelinfo/ModelIndices.h @@ -157,16 +157,63 @@ enum MI_FIREMAN, MI_MALE01, - MI_TAXI_D = 28, // HMOCA - - MI_BMYBB = 47, - MI_WMOST = 52, - MI_WMYBE = 58, + MI_HFYST = 9, + MI_HFOST, + MI_HMYST, + MI_HMOST, + MI_HFYRI, + MI_HFORI, + MI_HMYRI, + MI_HMORI, + MI_HFYBE, + MI_HFOBE, + MI_HMYBE, + MI_HMOBE, + MI_HFYBU, + MI_HFYMD, + MI_HFYCG, + MI_HFYPR, + MI_HFOTR, + MI_HMOTR, + MI_HMYAP, + MI_HMOCA, + MI_TAXI_D = MI_HMOCA, + MI_BMODK, + MI_BMYKR, + MI_BFYST, + MI_BFOST, + MI_BMYST, + MI_BMOST, + MI_BFYRI, + MI_BFORI, + MI_BMYRI, + MI_BFYBE, + MI_BMYBE, + MI_BFOBE, + MI_BMOBE, + MI_BMYBU, + MI_BFYPR, + MI_BFOTR, + MI_BMOTR, + MI_BMYPI, + MI_BMYBB, + MI_WMYCR, + MI_WFYST, + MI_WFOST, + MI_WMIST, + MI_WMOST, + MI_WFYRI, + MI_WFORI, + MI_WMYRI, + MI_WMORI, + MI_WFYBE, + MI_WMYBE, MI_WFOBE, MI_WMOBE, - - MI_WFOGO = 63, - MI_WMOGO = 64, + MI_WMYCW, + MI_WMYGO, + MI_WFOGO, + MI_WMOGO, MI_CBA = 83, MI_CBB, @@ -516,4 +563,4 @@ IsFence(int16 id) { return id == MI_FENCE || id == MI_FENCE2; -} \ No newline at end of file +} diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index 1b98dad6..14aa312a 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -130,6 +130,7 @@ CVector vecPedDirtBikeJumpRhsAnimOffset; CVector vecPedBikeKickAnimOffset; bool CPed::bNastyLimbsCheat; +bool CPed::bFannyMagnetCheat; bool CPed::bPedCheat2; bool CPed::bPedCheat3; CVector2D CPed::ms_vec2DFleePosition; @@ -11673,6 +11674,11 @@ CPed::ProcessControl(void) #ifndef VC_PED_PORTS m_pCurrentPhysSurface = nil; #endif + if (bFannyMagnetCheat && m_nPedType == PEDTYPE_CIVFEMALE + && m_pedStats->m_sexiness > 40 && !m_leader) { + SetLeader(FindPlayerPed()); + } + } else { if (bIsStanding && (!m_pCurrentPhysSurface || IsPlayer()) || bIsInWater || !bUsesCollision) { diff --git a/src/peds/Ped.h b/src/peds/Ped.h index 69d1ba5a..a268d912 100644 --- a/src/peds/Ped.h +++ b/src/peds/Ped.h @@ -1076,6 +1076,7 @@ public: static uint16 nEnterCarRangeMultiplier; static bool bNastyLimbsCheat; + static bool bFannyMagnetCheat; static bool bPedCheat2; static bool bPedCheat3; static CVector2D ms_vec2DFleePosition; diff --git a/src/vehicles/Boat.cpp b/src/vehicles/Boat.cpp index 63abba20..673372b0 100644 --- a/src/vehicles/Boat.cpp +++ b/src/vehicles/Boat.cpp @@ -55,6 +55,7 @@ CBoat::CBoat(int mi, uint8 owner) : CVehicle(owner) SetModelIndex(mi); pHandling = mod_HandlingManager.GetHandlingData((eHandlingId)minfo->m_handlingId); + pFlyingHandling = mod_HandlingManager.GetFlyingPointer((eHandlingId)minfo->m_handlingId); minfo->ChooseVehicleColour(m_currentColour1, m_currentColour2); m_fMass = pHandling->fMass; @@ -545,6 +546,28 @@ CBoat::ProcessControl(void) } } + if (m_modelIndex == MI_SKIMMER && CTimer::GetTimeStep() > 0.0f) { + if (GetStatus() == STATUS_PLAYER) { + if (m_fPropellerY <= CTimer::GetTimeStep() * 0.0005f) { + m_fPropellerY = 0.0f; + } + else { + m_fPropellerY -= CTimer::GetTimeStep() * 0.0005f; + } + } + else { + if (m_fPropellerY < 0.22f) { + m_fPropellerY += CTimer::GetTimeStep() * 0.001f; + } + FlyingControl(FLIGHT_MODEL_SEAPLANE); + } + } + else { + if (bCheat8) { + FlyingControl(FLIGHT_MODEL_PLANE); + } + } + ProcessDelayedExplosion(); } @@ -563,7 +586,7 @@ CBoat::ProcessControlInputs(uint8 pad) m_fAccelerate += (CPad::GetPad(pad)->GetAccelerate()/255.0f - m_fAccelerate)*0.1f; m_fAccelerate = clamp(m_fAccelerate, 0.0f, 1.0f); }else - m_fAccelerate = -m_fBrake*0.2f; + m_fAccelerate = -m_fBrake*0.3f; m_fSteeringLeftRight += (-CPad::GetPad(pad)->GetSteeringLeftRight()/128.0f - m_fSteeringLeftRight)*0.2f; m_fSteeringLeftRight = clamp(m_fSteeringLeftRight, -1.0f, 1.0f); @@ -912,20 +935,35 @@ void CBoat::AddWakePoint(CVector point) { int i; - if(m_afWakePointLifeTime[0] > 0.0f){ - if((CVector2D(GetPosition()) - m_avec2dWakePoints[0]).MagnitudeSqr() < SQR(1.0f)){ - for(i = Min(m_nNumWakePoints, ARRAY_SIZE(m_afWakePointLifeTime)-1); i != 0; i--){ - m_avec2dWakePoints[i] = m_avec2dWakePoints[i-1]; - m_afWakePointLifeTime[i] = m_afWakePointLifeTime[i-1]; + if (m_afWakePointLifeTime[0] > 0.0f) { + if ((CVector2D(GetPosition()) - m_avec2dWakePoints[0]).MagnitudeSqr() < SQR(2.0f)) { + if (GetStatus() == STATUS_PHYSICS) { + if (VehicleCreatedBy == MISSION_VEHICLE) { + if (m_nNumWakePoints >= 20) + m_nNumWakePoints = 20; + } + else { + if (m_nNumWakePoints >= 15) + m_nNumWakePoints = 15; + } + } + else { + if (m_nNumWakePoints >= 31) + m_nNumWakePoints = 31; + } + for (i = m_nNumWakePoints; i != 0; i--) { + m_avec2dWakePoints[i] = m_avec2dWakePoints[i - 1]; + m_afWakePointLifeTime[i] = m_afWakePointLifeTime[i - 1]; } m_avec2dWakePoints[0] = point; - m_afWakePointLifeTime[0] = 400.0f; - if(m_nNumWakePoints < ARRAY_SIZE(m_afWakePointLifeTime)) + m_afWakePointLifeTime[0] = 150.0f; + if (m_nNumWakePoints < ARRAY_SIZE(m_afWakePointLifeTime)) m_nNumWakePoints++; } - }else{ + } + else { m_avec2dWakePoints[0] = point; - m_afWakePointLifeTime[0] = 400.0f; + m_afWakePointLifeTime[0] = 150.0f; m_nNumWakePoints = 1; } } diff --git a/src/vehicles/Vehicle.cpp b/src/vehicles/Vehicle.cpp index 824aeac1..2c770834 100644 --- a/src/vehicles/Vehicle.cpp +++ b/src/vehicles/Vehicle.cpp @@ -40,6 +40,7 @@ bool CVehicle::bAllDodosCheat; bool CVehicle::bCheat3; bool CVehicle::bCheat4; bool CVehicle::bCheat5; +bool CVehicle::bCheat8; #ifdef ALT_DODO_CHEAT bool CVehicle::bAltDodoCheat; #endif diff --git a/src/vehicles/Vehicle.h b/src/vehicles/Vehicle.h index 6be16c83..b1e3d803 100644 --- a/src/vehicles/Vehicle.h +++ b/src/vehicles/Vehicle.h @@ -399,6 +399,7 @@ public: static bool bCheat3; static bool bCheat4; static bool bCheat5; + static bool bCheat8; #ifdef ALT_DODO_CHEAT static bool bAltDodoCheat; #endif