Merge branch 'lcs' of github.com:GTAmodding/re3 into lcs

This commit is contained in:
aap 2021-08-16 00:25:14 +02:00
commit f4894952fc
6 changed files with 138 additions and 57 deletions

View File

@ -599,8 +599,18 @@ void CCarAI::TellOccupantsToLeaveCar(CVehicle* pVehicle)
{ {
if (pVehicle->pDriver){ if (pVehicle->pDriver){
pVehicle->pDriver->SetObjective(OBJECTIVE_LEAVE_CAR, pVehicle); pVehicle->pDriver->SetObjective(OBJECTIVE_LEAVE_CAR, pVehicle);
if (pVehicle->GetModelIndex() == MI_AMBULAN) switch (pVehicle->GetModelIndex()) {
case MI_FIRETRUCK:
case MI_FBICAR:
case MI_ENFORCER:
case MI_BARRACKS:
case MI_RHINO:
case MI_POLICE:
break;
case MI_AMBULAN:
pVehicle->pDriver->Say(SOUND_PED_LEAVE_VEHICLE); pVehicle->pDriver->Say(SOUND_PED_LEAVE_VEHICLE);
break;
}
} }
int timer = 100; int timer = 100;
for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++){ for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++){
@ -616,8 +626,18 @@ void CCarAI::TellOccupantsToFleeCar(CVehicle* pVehicle)
{ {
if (pVehicle->pDriver && !pVehicle->pDriver->IsPlayer()) { if (pVehicle->pDriver && !pVehicle->pDriver->IsPlayer()) {
pVehicle->pDriver->SetObjective(OBJECTIVE_FLEE_ON_FOOT_TILL_SAFE); 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); pVehicle->pDriver->Say(SOUND_PED_LEAVE_VEHICLE);
break;
}
} }
int timer = 100; int timer = 100;
for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++) { for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++) {

View File

@ -41,7 +41,7 @@
//--LCS: file done except TODO //--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_DANGER (14.0f)
#define DISTANCE_TO_SCAN_FOR_PED_DANGER (11.0f) #define DISTANCE_TO_SCAN_FOR_PED_DANGER (11.0f)
#define SAFE_DISTANCE_TO_PED (3.0f) #define SAFE_DISTANCE_TO_PED (3.0f)
@ -81,8 +81,16 @@
#define DISTANCE_BETWEEN_CAR_AND_DEAD_PED (6.0f) #define DISTANCE_BETWEEN_CAR_AND_DEAD_PED (6.0f)
#define PROBABILITY_OF_PASSENGER_IN_VEHICLE (0.125f) #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 ONSCREEN_DESPAWN_RANGE (190.0f)
#define MINIMAL_DISTANCE_TO_SPAWN_ONSCREEN (130.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 REQUEST_ONSCREEN_DISTANCE (140.0f)
#define OFFSCREEN_DESPAWN_RANGE (60.0f) #define OFFSCREEN_DESPAWN_RANGE (60.0f)
#define MINIMAL_DISTANCE_TO_SPAWN_OFFSCREEN (40.0f) #define MINIMAL_DISTANCE_TO_SPAWN_OFFSCREEN (40.0f)
@ -148,33 +156,53 @@ CCarCtrl::GenerateOneRandomCar()
CZoneInfo zone; CZoneInfo zone;
CTheZones::GetZoneInfoForTimeOfDay(&vecTargetPos, &zone); CTheZones::GetZoneInfoForTimeOfDay(&vecTargetPos, &zone);
pPlayer->m_nTrafficMultiplier = pPlayer->m_fRoadDensity * zone.carDensity; pPlayer->m_nTrafficMultiplier = pPlayer->m_fRoadDensity * zone.carDensity;
if (NumRandomCars >= pPlayer->m_nTrafficMultiplier * CarDensityMultiplier * CIniFile::CarNumberMultiplier) #ifdef GTA_NETWORK
return; if (gIsMultiplayerGame) {
if (NumFiretrucksOnDuty + NumAmbulancesOnDuty + NumParkedCars + NumMissionCars + NumLawEnforcerCars + NumRandomCars >= MaxNumberOfCarsInUse) // TODO
return; }
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; CWanted* pWanted = pPlayer->m_pPed->m_pWanted;
int carClass; int carClass;
int carModel; int carModel;
if (pWanted->GetWantedLevel() > 1 && NumLawEnforcerCars < pWanted->m_MaximumLawEnforcerVehicles && #ifdef GTA_NETWORK
pWanted->m_CurrentCops < pWanted->m_MaxCops && !CGame::IsInInterior() && ( if (gIsMultiplayerGame) {
pWanted->GetWantedLevel() > 3 || carModel = ChooseModel(&zone, &carClass);
pWanted->GetWantedLevel() > 2 && CTimer::GetTimeInMilliseconds() > LastTimeLawEnforcerCreated + 5000 || if (carModel == -1)
pWanted->GetWantedLevel() > 1 && CTimer::GetTimeInMilliseconds() > LastTimeLawEnforcerCreated + 8000)) { return;
/* 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. */ else
carClass = COPS; #else
carModel = ChoosePoliceCarModel(); {
}else{ if (pWanted->GetWantedLevel() > 1 && NumLawEnforcerCars < pWanted->m_MaximumLawEnforcerVehicles &&
for (int i = 0; i < 5; i++) { pWanted->m_CurrentCops < pWanted->m_MaxCops && !CGame::IsInInterior() && (
carModel = ChooseModel(&zone, &carClass); pWanted->GetWantedLevel() > 3 ||
if (carModel == -1) pWanted->GetWantedLevel() > 2 && CTimer::GetTimeInMilliseconds() > LastTimeLawEnforcerCreated + 5000 ||
return; pWanted->GetWantedLevel() > 1 && CTimer::GetTimeInMilliseconds() > LastTimeLawEnforcerCreated + 8000)) {
if (!(carClass == COPS && pWanted->GetWantedLevel() >= 1)) /* Last pWanted->GetWantedLevel() > 1 is unnecessary but I added it for better readability. */
/* All cop spawns with wanted level are handled by condition above. */ /* Wouldn't be surprised it was there originally but was optimized out. */
/* In particular it means that cop cars never spawn if player has wanted level of 1. */ carClass = COPS;
break; 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 frontX, frontY;
float preferredDistance, angleLimit; float preferredDistance, angleLimit;
float requestMultiplier = 1.0f; float requestMultiplier = 1.0f;
@ -373,10 +401,16 @@ CCarCtrl::GenerateOneRandomCar()
CVehicle* pVehicle; CVehicle* pVehicle;
if (CModelInfo::IsBoatModel(carModel)) if (CModelInfo::IsBoatModel(carModel))
pVehicle = new CBoat(carModel, RANDOM_VEHICLE); pVehicle = new CBoat(carModel, RANDOM_VEHICLE);
else if (CModelInfo::IsBikeModel(carModel))
pVehicle = new CBike(carModel, RANDOM_VEHICLE);
else 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_nPrevRouteNode = 0;
pVehicle->AutoPilot.m_nCurrentRouteNode = curNodeId; pVehicle->AutoPilot.m_nCurrentRouteNode = curNodeId;
pVehicle->AutoPilot.m_nNextRouteNode = nextNodeId; pVehicle->AutoPilot.m_nNextRouteNode = nextNodeId;
@ -394,7 +428,7 @@ CCarCtrl::GenerateOneRandomCar()
pVehicle->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_STOP_FOR_CARS; pVehicle->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_STOP_FOR_CARS;
pVehicle->AutoPilot.m_nCarMission = MISSION_CRUISE; pVehicle->AutoPilot.m_nCarMission = MISSION_CRUISE;
} }
if (carModel == MI_FBIRANCH){ if (carModel == MI_FBICAR){
pVehicle->m_currentColour1 = 0; pVehicle->m_currentColour1 = 0;
pVehicle->m_currentColour2 = 0; pVehicle->m_currentColour2 = 0;
} }
@ -616,6 +650,9 @@ CCarCtrl::GenerateOneRandomCar()
break; break;
} }
CVisibilityPlugins::SetClumpAlpha(pVehicle->GetClump(), 0); CVisibilityPlugins::SetClumpAlpha(pVehicle->GetClump(), 0);
#ifdef GTA_MOBILE
//CVisibilityPlugins::SetObjectDistanceAlpha(pVehicle->GetClump(), 0) // TODO(LCS)
#endif
if (!pVehicle->GetIsOnScreen()){ if (!pVehicle->GetIsOnScreen()){
if ((vecTargetPos - pVehicle->GetPosition()).Magnitude2D() > OFFSCREEN_DESPAWN_RANGE * (pVehicle->bExtendedRange ? EXTENDED_RANGE_DESPAWN_MULTIPLIER : 1.0f)) { 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. */ /* Too far away cars that are not visible aren't needed. */
@ -628,7 +665,7 @@ CCarCtrl::GenerateOneRandomCar()
delete pVehicle; delete pVehicle;
return; 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; delete pVehicle;
return; return;
} }
@ -662,16 +699,21 @@ CCarCtrl::GenerateOneRandomCar()
CCarAI::AddPoliceCarOccupants(pVehicle); CCarAI::AddPoliceCarOccupants(pVehicle);
else { else {
pVehicle->SetUpDriver(); pVehicle->SetUpDriver();
int32 passengers = 0; #ifdef GTA_NETWORK
for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++) if (!gIsMultiplayerGame)
passengers += (CGeneral::GetRandomNumberInRange(0.0f, 1.0f) < PROBABILITY_OF_PASSENGER_IN_VEHICLE) ? 1 : 0; #endif
if (CModelInfo::IsCarModel(carModel) && (CModelInfo::GetModelInfo(carModel)->GetAnimFileIndex() == CAnimManager::GetAnimationBlockIndex("van") && passengers >= 1)) {
passengers = 1; int32 passengers = 0;
for (int i = 0; i < passengers; i++) { for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++)
CPed* pPassenger = pVehicle->SetupPassenger(i); passengers += (CGeneral::GetRandomNumberInRange(0.0f, 1.0f) < PROBABILITY_OF_PASSENGER_IN_VEHICLE) ? 1 : 0;
if (pPassenger) { if (CModelInfo::IsCarModel(carModel) && (CModelInfo::GetModelInfo(carModel)->GetAnimFileIndex() == CAnimManager::GetAnimationBlockIndex("van") && passengers >= 1))
++CPopulation::ms_nTotalCarPassengerPeds; passengers = 1;
pPassenger->bCarPassenger = true; 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 int32
@ -802,6 +847,8 @@ CCarCtrl::ChooseModel(CZoneInfo* pZone, int* pClass) {
} }
if (i == 0) if (i == 0)
return -1; return -1;
if (CModelInfo::GetColModel(model)->boundingSphere.radius > 20.0f)
return -1;
return model; return model;
} }
@ -1586,7 +1633,7 @@ void CCarCtrl::WeaveThroughCarsSectorList(CPtrList& lst, CVehicle* pVehicle, CPh
continue; continue;
if (Abs(pTestVehicle->GetPosition().z - pVehicle->GetPosition().z) >= VEHICLE_HEIGHT_DIFF_TO_CONSIDER_WEAVING) if (Abs(pTestVehicle->GetPosition().z - pVehicle->GetPosition().z) >= VEHICLE_HEIGHT_DIFF_TO_CONSIDER_WEAVING)
continue; continue;
if (pTestVehicle != pVehicle) if (pTestVehicle != pVehicle && (!pVehicle->bPartOfConvoy || !pTestVehicle->bPartOfConvoy))
WeaveForOtherCar(pTestVehicle, pVehicle, pAngleToWeaveLeft, pAngleToWeaveRight); WeaveForOtherCar(pTestVehicle, pVehicle, pAngleToWeaveLeft, pAngleToWeaveRight);
} }
} }
@ -1594,8 +1641,6 @@ void CCarCtrl::WeaveThroughCarsSectorList(CPtrList& lst, CVehicle* pVehicle, CPh
void CCarCtrl::WeaveForOtherCar(CEntity* pOtherEntity, CVehicle* pVehicle, float* pAngleToWeaveLeft, float* pAngleToWeaveRight) void CCarCtrl::WeaveForOtherCar(CEntity* pOtherEntity, CVehicle* pVehicle, float* pAngleToWeaveLeft, float* pAngleToWeaveRight)
{ {
CVehicle* pOtherCar = (CVehicle*)pOtherEntity; CVehicle* pOtherCar = (CVehicle*)pOtherEntity;
if (pVehicle->bPartOfConvoy && pOtherCar->bPartOfConvoy)
return;
if (pVehicle->AutoPilot.m_nCarMission == MISSION_RAMPLAYER_CLOSE && pOtherEntity == FindPlayerVehicle()) if (pVehicle->AutoPilot.m_nCarMission == MISSION_RAMPLAYER_CLOSE && pOtherEntity == FindPlayerVehicle())
return; return;
if (pVehicle->AutoPilot.m_nCarMission == MISSION_RAMCAR_CLOSE && pOtherEntity == pVehicle->AutoPilot.m_pTargetCar) if (pVehicle->AutoPilot.m_nCarMission == MISSION_RAMCAR_CLOSE && pOtherEntity == pVehicle->AutoPilot.m_pTargetCar)
@ -3406,7 +3451,13 @@ CCarCtrl::BoatWithTallMast(int32 mi)
bool CCarCtrl::OkToCreateVehicleAtThisPosition(const CVector& pos) bool CCarCtrl::OkToCreateVehicleAtThisPosition(const CVector& pos)
{ {
#ifdef GTA_NETWORK
if (gIsMultiplayerGame) {
// TODO
}
#else
return true; return true;
#endif
} }
float CCarCtrl::FindSpeedMultiplierWithSpeedFromNodes(int8 type) float CCarCtrl::FindSpeedMultiplierWithSpeedFromNodes(int8 type)

View File

@ -8,7 +8,12 @@
#include "Population.h" #include "Population.h"
float CIniFile::PedNumberMultiplier = 0.6f; 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() void CIniFile::LoadIniFile()
{ {

View File

@ -1089,28 +1089,30 @@ enum
MI_LAST_VEHICLE = MI_VCNMAV, MI_LAST_VEHICLE = MI_VCNMAV,
// these indices are sort of original
// with these two i don't know which is which: // these indices are original
MI_CADDY = -963, MI_CADDY = -999,
MI_BAGGAGE = -999, MI_MARQUIS = -990,
MI_RCBARON = -955,
MI_COMET = -972, // ps2 CAutomobile::IsOpenTopCar
MI_SANDKING = -981, // ps2 CAutomobile::ProcessControl
MI_VOODOO = -984, // ps2 hydraulics
MI_SEASPAR = -986, MI_SEASPAR = -986,
MI_SPARROW = -985, MI_SPARROW = -985,
MI_VOODOO = -984,
MI_SANDKING = -981,
MI_COMET = -972,
MI_BAGGAGE = -963,
MI_VICECHEE = -954,
MI_RCBARON = -955,
// these two are unknown
MI_RIO = -992,
MI_TROPIC = -988,
// HACK HACK, hopefully temporary // HACK HACK, hopefully temporary
MI_FBIRANCH = -2000, MI_FBIRANCH = -2000,
MI_VICECHEE,
MI_RIO,
MI_SQUALO, MI_SQUALO,
MI_JETMAX, MI_JETMAX,
MI_COASTG, MI_COASTG,
MI_DINGHY, MI_DINGHY,
MI_MARQUIS,
MI_SKIMMER, MI_SKIMMER,
MI_TROPIC,
MI_CUBAN, MI_CUBAN,
MI_PHEONIX, MI_PHEONIX,
MI_SABRE, MI_SABRE,

View File

@ -83,6 +83,9 @@ CVehicle::CVehicle(uint8 CreatedBy)
m_fGasPedal = 0.0f; m_fGasPedal = 0.0f;
m_fBrakePedal = 0.0f; m_fBrakePedal = 0.0f;
m_fWheelSpin = 0.0f; m_fWheelSpin = 0.0f;
#if defined FIX_BUGS || !defined GTA_PSP
bRewardVehicle = false;
#endif
m_vehLCS_29E = 0; m_vehLCS_29E = 0;
m_vehLCS_29C = 0; m_vehLCS_29C = 0;
m_vehLCS_2A3 = -1; m_vehLCS_2A3 = -1;

View File

@ -248,7 +248,7 @@ public:
#if (!defined GTA_PS2 || defined FIX_BUGS) // <- I think this can be moved back to CAutomobile? #if (!defined GTA_PS2 || defined FIX_BUGS) // <- I think this can be moved back to CAutomobile?
uint8 m_bombType : 3; uint8 m_bombType : 3;
#endif #endif
uint8 bDriverLastFrame : 1; uint8 bDriverLastFrame : 1; // originally not in CVehicle (TODO - carbomb stuff)
uint8 bRewardVehicle : 1; // 25B_40 uint8 bRewardVehicle : 1; // 25B_40
int8 m_numPedsUseItAsCover; int8 m_numPedsUseItAsCover;