From e30e1ccccd80e6b3971819080006c4361d53813e Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 15 Aug 2021 18:27:30 +0300 Subject: lil fix --- src/control/CarAI.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/control/CarAI.cpp b/src/control/CarAI.cpp index 11d756b4..87bd033c 100644 --- a/src/control/CarAI.cpp +++ b/src/control/CarAI.cpp @@ -599,8 +599,11 @@ void CCarAI::TellOccupantsToLeaveCar(CVehicle* pVehicle) { if (pVehicle->pDriver){ pVehicle->pDriver->SetObjective(OBJECTIVE_LEAVE_CAR, pVehicle); - if (pVehicle->GetModelIndex() == MI_AMBULAN) + switch (pVehicle->GetModelIndex()) { + case MI_AMBULAN: pVehicle->pDriver->Say(SOUND_PED_LEAVE_VEHICLE); + break; + } } int timer = 100; for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++){ -- cgit v1.2.3 From 1b178a55d7bf45f6a35a7a99b32fb46290bff59d Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 15 Aug 2021 18:35:47 +0300 Subject: actual fix --- src/control/CarAI.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src') diff --git a/src/control/CarAI.cpp b/src/control/CarAI.cpp index 87bd033c..ead39b7f 100644 --- a/src/control/CarAI.cpp +++ b/src/control/CarAI.cpp @@ -600,6 +600,13 @@ void CCarAI::TellOccupantsToLeaveCar(CVehicle* pVehicle) if (pVehicle->pDriver){ pVehicle->pDriver->SetObjective(OBJECTIVE_LEAVE_CAR, pVehicle); switch (pVehicle->GetModelIndex()) { + case MI_FIRETRUCK: + case MI_FBICAR: + case MI_ENFORCER: + case MI_CHOPPER: + case MI_RHINO: + case MI_POLICE: + break; case MI_AMBULAN: pVehicle->pDriver->Say(SOUND_PED_LEAVE_VEHICLE); break; -- cgit v1.2.3 From 25075decb268fb4df0f945074ac34fd737cd125e Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 15 Aug 2021 18:40:38 +0300 Subject: bruh --- src/control/CarAI.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/control/CarAI.cpp b/src/control/CarAI.cpp index ead39b7f..1f5b9161 100644 --- a/src/control/CarAI.cpp +++ b/src/control/CarAI.cpp @@ -603,7 +603,7 @@ void CCarAI::TellOccupantsToLeaveCar(CVehicle* pVehicle) case MI_FIRETRUCK: case MI_FBICAR: case MI_ENFORCER: - case MI_CHOPPER: + case MI_BARRACKS: case MI_RHINO: case MI_POLICE: break; -- cgit v1.2.3 From 495a447c8a17deb410af77f7f28cf0c70259253e Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 15 Aug 2021 18:41:59 +0300 Subject: merged correct switch --- src/control/CarAI.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/control/CarAI.cpp b/src/control/CarAI.cpp index 1f5b9161..1ee99b89 100644 --- a/src/control/CarAI.cpp +++ b/src/control/CarAI.cpp @@ -626,8 +626,18 @@ void CCarAI::TellOccupantsToFleeCar(CVehicle* pVehicle) { if (pVehicle->pDriver && !pVehicle->pDriver->IsPlayer()) { pVehicle->pDriver->SetObjective(OBJECTIVE_FLEE_ON_FOOT_TILL_SAFE); - if (pVehicle->GetModelIndex() != MI_FIRETRUCK && pVehicle->GetModelIndex() == MI_AMBULAN) + switch (pVehicle->GetModelIndex()) { + case MI_FIRETRUCK: + case MI_FBIRANCH: + case MI_ENFORCER: + case MI_BARRACKS: + case MI_RHINO: + case MI_POLICE: + break; + case MI_AMBULAN: pVehicle->pDriver->Say(SOUND_PED_LEAVE_VEHICLE); + break; + } } int timer = 100; for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++) { -- cgit v1.2.3 From 9ba2f7d43c9b37d3c075aa450c31b3fd052e2b88 Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 15 Aug 2021 23:30:25 +0300 Subject: fix --- src/control/CarCtrl.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src') diff --git a/src/control/CarCtrl.cpp b/src/control/CarCtrl.cpp index 026a2057..2bedaec2 100644 --- a/src/control/CarCtrl.cpp +++ b/src/control/CarCtrl.cpp @@ -1586,7 +1586,7 @@ void CCarCtrl::WeaveThroughCarsSectorList(CPtrList& lst, CVehicle* pVehicle, CPh continue; if (Abs(pTestVehicle->GetPosition().z - pVehicle->GetPosition().z) >= VEHICLE_HEIGHT_DIFF_TO_CONSIDER_WEAVING) continue; - if (pTestVehicle != pVehicle) + if (pTestVehicle != pVehicle && (!pVehicle->bPartOfConvoy || !pTestVehicle->bPartOfConvoy)) WeaveForOtherCar(pTestVehicle, pVehicle, pAngleToWeaveLeft, pAngleToWeaveRight); } } @@ -1594,8 +1594,6 @@ void CCarCtrl::WeaveThroughCarsSectorList(CPtrList& lst, CVehicle* pVehicle, CPh void CCarCtrl::WeaveForOtherCar(CEntity* pOtherEntity, CVehicle* pVehicle, float* pAngleToWeaveLeft, float* pAngleToWeaveRight) { CVehicle* pOtherCar = (CVehicle*)pOtherEntity; - if (pVehicle->bPartOfConvoy && pOtherCar->bPartOfConvoy) - return; if (pVehicle->AutoPilot.m_nCarMission == MISSION_RAMPLAYER_CLOSE && pOtherEntity == FindPlayerVehicle()) return; if (pVehicle->AutoPilot.m_nCarMission == MISSION_RAMCAR_CLOSE && pOtherEntity == pVehicle->AutoPilot.m_pTargetCar) -- cgit v1.2.3 From 8e2ed40f66bfe8a97ab07bf5f5f653d700abea3e Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Mon, 16 Aug 2021 01:03:08 +0300 Subject: small revision --- src/control/CarCtrl.cpp | 129 ++++++++++++++++++++++++++++++------------- src/core/IniFile.cpp | 7 ++- src/modelinfo/ModelIndices.h | 21 ++++--- src/vehicles/Automobile.cpp | 2 +- src/vehicles/Vehicle.cpp | 3 + src/vehicles/Vehicle.h | 2 +- 6 files changed, 115 insertions(+), 49 deletions(-) (limited to 'src') diff --git a/src/control/CarCtrl.cpp b/src/control/CarCtrl.cpp index 2bedaec2..927ee148 100644 --- a/src/control/CarCtrl.cpp +++ b/src/control/CarCtrl.cpp @@ -41,7 +41,7 @@ //--LCS: file done except TODO -#define DISTANCE_TO_SPAWN_ROADBLOCK_PEDS (51.0f) +#define DISTANCE_TO_SPAWN_ROADBLOCK_PEDS (51.0f) // apparently POPULATION_CULL_RANGE? TODO: unite with CPopulation #define DISTANCE_TO_SCAN_FOR_DANGER (14.0f) #define DISTANCE_TO_SCAN_FOR_PED_DANGER (11.0f) #define SAFE_DISTANCE_TO_PED (3.0f) @@ -81,8 +81,16 @@ #define DISTANCE_BETWEEN_CAR_AND_DEAD_PED (6.0f) #define PROBABILITY_OF_PASSENGER_IN_VEHICLE (0.125f) +#ifdef GTA_PSP +#define ONSCREEN_DESPAWN_RANGE (160.0f) +#define MINIMAL_DISTANCE_TO_SPAWN_ONSCREEN (100.0f) +#define MAX_DISTANCE_FROM_CAMERA_TO_SPAWN_ONSCREEN (82.5f) +#else #define ONSCREEN_DESPAWN_RANGE (190.0f) #define MINIMAL_DISTANCE_TO_SPAWN_ONSCREEN (130.0f) +#define MAX_DISTANCE_FROM_CAMERA_TO_SPAWN_ONSCREEN (105.0f) +#endif + #define REQUEST_ONSCREEN_DISTANCE (140.0f) #define OFFSCREEN_DESPAWN_RANGE (60.0f) #define MINIMAL_DISTANCE_TO_SPAWN_OFFSCREEN (40.0f) @@ -148,33 +156,53 @@ CCarCtrl::GenerateOneRandomCar() CZoneInfo zone; CTheZones::GetZoneInfoForTimeOfDay(&vecTargetPos, &zone); pPlayer->m_nTrafficMultiplier = pPlayer->m_fRoadDensity * zone.carDensity; - if (NumRandomCars >= pPlayer->m_nTrafficMultiplier * CarDensityMultiplier * CIniFile::CarNumberMultiplier) - return; - if (NumFiretrucksOnDuty + NumAmbulancesOnDuty + NumParkedCars + NumMissionCars + NumLawEnforcerCars + NumRandomCars >= MaxNumberOfCarsInUse) - return; +#ifdef GTA_NETWORK + if (gIsMultiplayerGame) { + // TODO + } + else +#endif + { + if (NumRandomCars >= pPlayer->m_nTrafficMultiplier * CarDensityMultiplier * CIniFile::CarNumberMultiplier) + return; + if (NumFiretrucksOnDuty + NumAmbulancesOnDuty + NumParkedCars + NumMissionCars + NumLawEnforcerCars + NumRandomCars >= MaxNumberOfCarsInUse) + return; + } CWanted* pWanted = pPlayer->m_pPed->m_pWanted; int carClass; int carModel; - if (pWanted->GetWantedLevel() > 1 && NumLawEnforcerCars < pWanted->m_MaximumLawEnforcerVehicles && - pWanted->m_CurrentCops < pWanted->m_MaxCops && !CGame::IsInInterior() && ( - pWanted->GetWantedLevel() > 3 || - pWanted->GetWantedLevel() > 2 && CTimer::GetTimeInMilliseconds() > LastTimeLawEnforcerCreated + 5000 || - pWanted->GetWantedLevel() > 1 && CTimer::GetTimeInMilliseconds() > LastTimeLawEnforcerCreated + 8000)) { - /* Last pWanted->GetWantedLevel() > 1 is unnecessary but I added it for better readability. */ - /* Wouldn't be surprised it was there originally but was optimized out. */ - carClass = COPS; - carModel = ChoosePoliceCarModel(); - }else{ - for (int i = 0; i < 5; i++) { - carModel = ChooseModel(&zone, &carClass); - if (carModel == -1) - return; - if (!(carClass == COPS && pWanted->GetWantedLevel() >= 1)) - /* All cop spawns with wanted level are handled by condition above. */ - /* In particular it means that cop cars never spawn if player has wanted level of 1. */ - break; +#ifdef GTA_NETWORK + if (gIsMultiplayerGame) { + carModel = ChooseModel(&zone, &carClass); + if (carModel == -1) + return; + } + else +#else + { + if (pWanted->GetWantedLevel() > 1 && NumLawEnforcerCars < pWanted->m_MaximumLawEnforcerVehicles && + pWanted->m_CurrentCops < pWanted->m_MaxCops && !CGame::IsInInterior() && ( + pWanted->GetWantedLevel() > 3 || + pWanted->GetWantedLevel() > 2 && CTimer::GetTimeInMilliseconds() > LastTimeLawEnforcerCreated + 5000 || + pWanted->GetWantedLevel() > 1 && CTimer::GetTimeInMilliseconds() > LastTimeLawEnforcerCreated + 8000)) { + /* Last pWanted->GetWantedLevel() > 1 is unnecessary but I added it for better readability. */ + /* Wouldn't be surprised it was there originally but was optimized out. */ + carClass = COPS; + carModel = ChoosePoliceCarModel(); + } + else { + for (int i = 0; i < 5; i++) { + carModel = ChooseModel(&zone, &carClass); + if (carModel == -1) + return; + if (!(carClass == COPS && pWanted->GetWantedLevel() >= 1)) + /* All cop spawns with wanted level are handled by condition above. */ + /* In particular it means that cop cars never spawn if player has wanted level of 1. */ + break; + } } } +#endif float frontX, frontY; float preferredDistance, angleLimit; float requestMultiplier = 1.0f; @@ -373,10 +401,16 @@ CCarCtrl::GenerateOneRandomCar() CVehicle* pVehicle; if (CModelInfo::IsBoatModel(carModel)) pVehicle = new CBoat(carModel, RANDOM_VEHICLE); - else if (CModelInfo::IsBikeModel(carModel)) - pVehicle = new CBike(carModel, RANDOM_VEHICLE); else - pVehicle = new CAutomobile(carModel, RANDOM_VEHICLE); + { + if (CModelInfo::IsBikeModel(carModel)) + pVehicle = new CBike(carModel, RANDOM_VEHICLE); + else + pVehicle = new CAutomobile(carModel, RANDOM_VEHICLE); +#ifdef GTA_NETWORK + // TODO +#endif + } pVehicle->AutoPilot.m_nPrevRouteNode = 0; pVehicle->AutoPilot.m_nCurrentRouteNode = curNodeId; pVehicle->AutoPilot.m_nNextRouteNode = nextNodeId; @@ -394,7 +428,7 @@ CCarCtrl::GenerateOneRandomCar() pVehicle->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_STOP_FOR_CARS; pVehicle->AutoPilot.m_nCarMission = MISSION_CRUISE; } - if (carModel == MI_FBIRANCH){ + if (carModel == MI_FBICAR){ pVehicle->m_currentColour1 = 0; pVehicle->m_currentColour2 = 0; } @@ -616,6 +650,9 @@ CCarCtrl::GenerateOneRandomCar() break; } CVisibilityPlugins::SetClumpAlpha(pVehicle->GetClump(), 0); +#ifdef GTA_MOBILE + //CVisibilityPlugins::SetObjectDistanceAlpha(pVehicle->GetClump(), 0) // TODO(LCS) +#endif if (!pVehicle->GetIsOnScreen()){ if ((vecTargetPos - pVehicle->GetPosition()).Magnitude2D() > OFFSCREEN_DESPAWN_RANGE * (pVehicle->bExtendedRange ? EXTENDED_RANGE_DESPAWN_MULTIPLIER : 1.0f)) { /* Too far away cars that are not visible aren't needed. */ @@ -628,7 +665,7 @@ CCarCtrl::GenerateOneRandomCar() delete pVehicle; return; } - if ((TheCamera.GetPosition() - pVehicle->GetPosition()).Magnitude2D() < 105.0f * requestMultiplier * TheCamera.GenerationDistMultiplier || bTopDownCamera) { + if ((TheCamera.GetPosition() - pVehicle->GetPosition()).Magnitude2D() < MAX_DISTANCE_FROM_CAMERA_TO_SPAWN_ONSCREEN * requestMultiplier * TheCamera.GenerationDistMultiplier || bTopDownCamera) { delete pVehicle; return; } @@ -662,16 +699,21 @@ CCarCtrl::GenerateOneRandomCar() CCarAI::AddPoliceCarOccupants(pVehicle); else { pVehicle->SetUpDriver(); - int32 passengers = 0; - for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++) - passengers += (CGeneral::GetRandomNumberInRange(0.0f, 1.0f) < PROBABILITY_OF_PASSENGER_IN_VEHICLE) ? 1 : 0; - if (CModelInfo::IsCarModel(carModel) && (CModelInfo::GetModelInfo(carModel)->GetAnimFileIndex() == CAnimManager::GetAnimationBlockIndex("van") && passengers >= 1)) - passengers = 1; - for (int i = 0; i < passengers; i++) { - CPed* pPassenger = pVehicle->SetupPassenger(i); - if (pPassenger) { - ++CPopulation::ms_nTotalCarPassengerPeds; - pPassenger->bCarPassenger = true; +#ifdef GTA_NETWORK + if (!gIsMultiplayerGame) +#endif + { + int32 passengers = 0; + for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++) + passengers += (CGeneral::GetRandomNumberInRange(0.0f, 1.0f) < PROBABILITY_OF_PASSENGER_IN_VEHICLE) ? 1 : 0; + if (CModelInfo::IsCarModel(carModel) && (CModelInfo::GetModelInfo(carModel)->GetAnimFileIndex() == CAnimManager::GetAnimationBlockIndex("van") && passengers >= 1)) + passengers = 1; + for (int i = 0; i < passengers; i++) { + CPed* pPassenger = pVehicle->SetupPassenger(i); + if (pPassenger) { + ++CPopulation::ms_nTotalCarPassengerPeds; + pPassenger->bCarPassenger = true; + } } } } @@ -741,6 +783,9 @@ CCarCtrl::GenerateOneRandomCar() } } } +#ifdef GTA_NETWORK + // TODO +#endif } int32 @@ -802,6 +847,8 @@ CCarCtrl::ChooseModel(CZoneInfo* pZone, int* pClass) { } if (i == 0) return -1; + if (CModelInfo::GetColModel(model)->boundingSphere.radius > 20.0f) + return -1; return model; } @@ -3404,7 +3451,13 @@ CCarCtrl::BoatWithTallMast(int32 mi) bool CCarCtrl::OkToCreateVehicleAtThisPosition(const CVector& pos) { +#ifdef GTA_NETWORK + if (gIsMultiplayerGame) { + // TODO + } +#else return true; +#endif } float CCarCtrl::FindSpeedMultiplierWithSpeedFromNodes(int8 type) diff --git a/src/core/IniFile.cpp b/src/core/IniFile.cpp index 8e0929ae..cf7a7f0c 100644 --- a/src/core/IniFile.cpp +++ b/src/core/IniFile.cpp @@ -8,7 +8,12 @@ #include "Population.h" float CIniFile::PedNumberMultiplier = 0.6f; -float CIniFile::CarNumberMultiplier = 0.8f; +float CIniFile::CarNumberMultiplier = +#ifdef GTA_PSP + 0.7f; +#else + 0.8f; +#endif void CIniFile::LoadIniFile() { diff --git a/src/modelinfo/ModelIndices.h b/src/modelinfo/ModelIndices.h index efaa1ef8..173b50ff 100644 --- a/src/modelinfo/ModelIndices.h +++ b/src/modelinfo/ModelIndices.h @@ -1089,26 +1089,31 @@ enum MI_LAST_VEHICLE = MI_VCNMAV, + // these indices are sort of original - // with these three i don't know which is which: - MI_RCBARON = -999, - MI_CADDY = -963, + MI_CADDY = -999, + + // with these two i don't know which is which: + MI_RCBARON = -963, MI_BAGGAGE = -955, + MI_SANDKING = -981, + MI_VICECHEE = -954, + MI_MARQUIS = -990, + + // these two also unknown + MI_RIO = -992, + MI_TROPIC = -988, + // HACK HACK, hopefully temporary MI_SEASPAR = -2000, MI_SPARROW, MI_FBIRANCH, - MI_VICECHEE, - MI_RIO, MI_SQUALO, MI_JETMAX, MI_COASTG, MI_DINGHY, - MI_MARQUIS, MI_SKIMMER, - MI_TROPIC, - MI_SANDKING, MI_VOODOO, MI_CUBAN, MI_PHEONIX, diff --git a/src/vehicles/Automobile.cpp b/src/vehicles/Automobile.cpp index 1625b1b2..0b6f4422 100644 --- a/src/vehicles/Automobile.cpp +++ b/src/vehicles/Automobile.cpp @@ -495,7 +495,7 @@ CAutomobile::ProcessControl(void) m_aSuspensionSpringRatio[1] < 1.0f && CSurfaceTable::GetAdhesionGroup(m_aWheelColPoints[1].surfaceB) == ADHESIVE_SAND || m_aSuspensionSpringRatio[2] < 1.0f && CSurfaceTable::GetAdhesionGroup(m_aWheelColPoints[2].surfaceB) == ADHESIVE_SAND || m_aSuspensionSpringRatio[3] < 1.0f && CSurfaceTable::GetAdhesionGroup(m_aWheelColPoints[3].surfaceB) == ADHESIVE_SAND){ - if(GetModelIndex() != MI_RCBANDIT /*&& GetModelIndex() != MI_SANDKING*/ && GetModelIndex() != MI_BFINJECT){ + if(GetModelIndex() != MI_RCBANDIT && GetModelIndex() != MI_SANDKING && GetModelIndex() != MI_BFINJECT){ bStuckInSand = true; if(CWeather::WetRoads > 0.0f) ApplyMoveForce(m_vecMoveSpeed * -CTimer::GetTimeStep()*SAND_SLOWDOWN*m_fMass * (1.0f-CWeather::WetRoads)); diff --git a/src/vehicles/Vehicle.cpp b/src/vehicles/Vehicle.cpp index d1404b14..281311e8 100644 --- a/src/vehicles/Vehicle.cpp +++ b/src/vehicles/Vehicle.cpp @@ -84,6 +84,9 @@ CVehicle::CVehicle(uint8 CreatedBy) m_fGasPedal = 0.0f; m_fBrakePedal = 0.0; m_vehLCS_264 = 0; +#if defined FIX_BUGS || !defined GTA_PSP + bRewardVehicle = false; +#endif m_vehLCS_29E = 0; m_vehLCS_29C = 0; m_vehLCS_2A3 = -1; diff --git a/src/vehicles/Vehicle.h b/src/vehicles/Vehicle.h index b89c8158..dc044b53 100644 --- a/src/vehicles/Vehicle.h +++ b/src/vehicles/Vehicle.h @@ -248,7 +248,7 @@ public: #if (!defined GTA_PS2 || defined FIX_BUGS) // <- I think this can be moved back to CAutomobile? uint8 m_bombType : 3; #endif - uint8 bDriverLastFrame : 1; + uint8 bDriverLastFrame : 1; // originally not in CVehicle (TODO - carbomb stuff) uint8 bRewardVehicle : 1; // 25B_40 int8 m_numPedsUseItAsCover; -- cgit v1.2.3