mirror of
https://github.com/GTAmodding/re3.git
synced 2021-02-19 17:49:54 +01:00
Remove Miami stuff
This commit is contained in:
parent
dfe0642195
commit
9960c41193
@ -6,7 +6,6 @@
|
|||||||
#include "Curves.h"
|
#include "Curves.h"
|
||||||
#include "PathFind.h"
|
#include "PathFind.h"
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void CAutoPilot::ModifySpeed(float speed)
|
void CAutoPilot::ModifySpeed(float speed)
|
||||||
{
|
{
|
||||||
m_fMaxTrafficSpeed = Max(0.01f, speed);
|
m_fMaxTrafficSpeed = Max(0.01f, speed);
|
||||||
@ -40,7 +39,6 @@ void CAutoPilot::ModifySpeed(float speed)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void CAutoPilot::RemoveOnePathNode()
|
void CAutoPilot::RemoveOnePathNode()
|
||||||
{
|
{
|
||||||
--m_nPathFindNodesCount;
|
--m_nPathFindNodesCount;
|
||||||
@ -49,7 +47,6 @@ void CAutoPilot::RemoveOnePathNode()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef COMPATIBLE_SAVES
|
#ifdef COMPATIBLE_SAVES
|
||||||
//--MIAMI: TODO
|
|
||||||
void CAutoPilot::Save(uint8*& buf)
|
void CAutoPilot::Save(uint8*& buf)
|
||||||
{
|
{
|
||||||
WriteSaveBuf<int32>(buf, m_nCurrentRouteNode);
|
WriteSaveBuf<int32>(buf, m_nCurrentRouteNode);
|
||||||
@ -89,7 +86,6 @@ void CAutoPilot::Save(uint8*& buf)
|
|||||||
SkipSaveBuf(buf, 6);
|
SkipSaveBuf(buf, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: TODO
|
|
||||||
void CAutoPilot::Load(uint8*& buf)
|
void CAutoPilot::Load(uint8*& buf)
|
||||||
{
|
{
|
||||||
m_nCurrentRouteNode = ReadSaveBuf<int32>(buf);
|
m_nCurrentRouteNode = ReadSaveBuf<int32>(buf);
|
||||||
|
@ -26,15 +26,6 @@ enum eCarMission : uint8
|
|||||||
MISSION_BLOCKCAR_FARAWAY,
|
MISSION_BLOCKCAR_FARAWAY,
|
||||||
MISSION_BLOCKCAR_CLOSE,
|
MISSION_BLOCKCAR_CLOSE,
|
||||||
MISSION_BLOCKCAR_HANDBRAKESTOP,
|
MISSION_BLOCKCAR_HANDBRAKESTOP,
|
||||||
#ifdef MIAMI
|
|
||||||
MISSION_HELI_FLYTOCOORS,
|
|
||||||
MISSION_ATTACKPLAYER,
|
|
||||||
MISSION_PLANE_FLYTOCOORS,
|
|
||||||
MISSION_HELI_LAND,
|
|
||||||
MISSION_SLOWLY_DRIVE_TOWARDS_PLAYER_1,
|
|
||||||
MISSION_SLOWLY_DRIVE_TOWARDS_PLAYER_2,
|
|
||||||
MISSION_BLOCKPLAYER_FORWARDANDBACK
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eCarTempAction : uint8
|
enum eCarTempAction : uint8
|
||||||
@ -84,18 +75,11 @@ public:
|
|||||||
uint32 m_nTimeTempAction;
|
uint32 m_nTimeTempAction;
|
||||||
float m_fMaxTrafficSpeed;
|
float m_fMaxTrafficSpeed;
|
||||||
uint8 m_nCruiseSpeed;
|
uint8 m_nCruiseSpeed;
|
||||||
#ifdef MIAMI
|
|
||||||
uint8 m_nCruiseSpeedMultiplierType;
|
|
||||||
float m_fCruiseSpeedMultiplier;
|
|
||||||
#endif
|
|
||||||
uint8 m_bSlowedDownBecauseOfCars : 1;
|
uint8 m_bSlowedDownBecauseOfCars : 1;
|
||||||
uint8 m_bSlowedDownBecauseOfPeds : 1;
|
uint8 m_bSlowedDownBecauseOfPeds : 1;
|
||||||
uint8 m_bStayInCurrentLevel : 1;
|
uint8 m_bStayInCurrentLevel : 1;
|
||||||
uint8 m_bStayInFastLane : 1;
|
uint8 m_bStayInFastLane : 1;
|
||||||
uint8 m_bIgnorePathfinding : 1;
|
uint8 m_bIgnorePathfinding : 1;
|
||||||
#ifdef MIAMI
|
|
||||||
uint8 m_nSwitchDistance;
|
|
||||||
#endif
|
|
||||||
CVector m_vecDestinationCoors;
|
CVector m_vecDestinationCoors;
|
||||||
CPathNode *m_aPathFindNodesInfo[NUM_PATH_NODES_IN_AUTOPILOT];
|
CPathNode *m_aPathFindNodesInfo[NUM_PATH_NODES_IN_AUTOPILOT];
|
||||||
int16 m_nPathFindNodesCount;
|
int16 m_nPathFindNodesCount;
|
||||||
@ -125,10 +109,6 @@ public:
|
|||||||
m_nTimeToStartMission = CTimer::GetTimeInMilliseconds();
|
m_nTimeToStartMission = CTimer::GetTimeInMilliseconds();
|
||||||
m_nAntiReverseTimer = m_nTimeToStartMission;
|
m_nAntiReverseTimer = m_nTimeToStartMission;
|
||||||
m_bStayInFastLane = false;
|
m_bStayInFastLane = false;
|
||||||
#ifdef MIAMI
|
|
||||||
m_nCruiseSpeedMultiplierType = 0;
|
|
||||||
m_fCruiseSpeedMultiplier = 1.0f;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModifySpeed(float);
|
void ModifySpeed(float);
|
||||||
@ -139,3 +119,4 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
static_assert(sizeof(CAutoPilot) == 0x70, "CAutoPilot: error");
|
@ -21,23 +21,16 @@
|
|||||||
|
|
||||||
#define DISTANCE_TO_SWITCH_DISTANCE_GOTO 20.0f
|
#define DISTANCE_TO_SWITCH_DISTANCE_GOTO 20.0f
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
float CCarAI::FindSwitchDistanceClose(CVehicle* pVehicle)
|
float CCarAI::FindSwitchDistanceClose(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
return 30.0f;
|
return 30.0f;
|
||||||
#else
|
|
||||||
return pVehicle->AutoPilot.m_nSwitchDistance;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
float CCarAI::FindSwitchDistanceFarNormalVehicle(CVehicle* pVehicle)
|
float CCarAI::FindSwitchDistanceFarNormalVehicle(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
return FindSwitchDistanceClose(pVehicle) + 5.0f;
|
return FindSwitchDistanceClose(pVehicle) + 5.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
float CCarAI::FindSwitchDistanceFar(CVehicle* pVehicle)
|
float CCarAI::FindSwitchDistanceFar(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
if (pVehicle->bIsLawEnforcer)
|
if (pVehicle->bIsLawEnforcer)
|
||||||
@ -45,23 +38,6 @@ float CCarAI::FindSwitchDistanceFar(CVehicle* pVehicle)
|
|||||||
return FindSwitchDistanceFarNormalVehicle(pVehicle);
|
return FindSwitchDistanceFarNormalVehicle(pVehicle);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
//--MIAMI: done
|
|
||||||
void CCarAI::BackToCruisingIfNoWantedLevel(CVehicle* pVehicle)
|
|
||||||
{
|
|
||||||
if (FindPlayerPed()->m_pWanted->m_bIgnoredByEveryone || pVehicle->bIsLawEnforcer &&
|
|
||||||
(FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())) {
|
|
||||||
CCarCtrl::JoinCarWithRoadSystem(pVehicle);
|
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_CRUISE;
|
|
||||||
pVehicle->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_STOP_FOR_CARS;
|
|
||||||
pVehicle->m_bSirenOrAlarm = false;
|
|
||||||
if (CCullZones::NoPolice())
|
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
if (pVehicle->bIsLawEnforcer){
|
if (pVehicle->bIsLawEnforcer){
|
||||||
@ -91,7 +67,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
if (pVehicle->UsesSiren(pVehicle->GetModelIndex()))
|
if (pVehicle->UsesSiren(pVehicle->GetModelIndex()))
|
||||||
pVehicle->m_bSirenOrAlarm = true;
|
pVehicle->m_bSirenOrAlarm = true;
|
||||||
}
|
}
|
||||||
#ifndef MIAMI
|
|
||||||
if (FindPlayerPed()->m_pWanted->m_bIgnoredByEveryone || pVehicle->bIsLawEnforcer &&
|
if (FindPlayerPed()->m_pWanted->m_bIgnoredByEveryone || pVehicle->bIsLawEnforcer &&
|
||||||
(FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())) {
|
(FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())) {
|
||||||
CCarCtrl::JoinCarWithRoadSystem(pVehicle);
|
CCarCtrl::JoinCarWithRoadSystem(pVehicle);
|
||||||
@ -101,9 +76,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
if (CCullZones::NoPolice())
|
if (CCullZones::NoPolice())
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
BackToCruisingIfNoWantedLevel(pVehicle);
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case MISSION_RAMPLAYER_CLOSE:
|
case MISSION_RAMPLAYER_CLOSE:
|
||||||
if (FindSwitchDistanceFar(pVehicle) >= (FindPlayerCoors() - pVehicle->GetPosition()).Magnitude2D() ||
|
if (FindSwitchDistanceFar(pVehicle) >= (FindPlayerCoors() - pVehicle->GetPosition()).Magnitude2D() ||
|
||||||
@ -148,11 +120,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
pVehicle->m_bSirenOrAlarm = false;
|
pVehicle->m_bSirenOrAlarm = false;
|
||||||
pVehicle->m_nCarHornTimer = 0;
|
pVehicle->m_nCarHornTimer = 0;
|
||||||
}
|
}
|
||||||
#ifdef MIAMI
|
|
||||||
if (pVehicle->bIsLawEnforcer)
|
|
||||||
MellowOutChaseSpeed(pVehicle);
|
|
||||||
BackToCruisingIfNoWantedLevel(pVehicle);
|
|
||||||
#else
|
|
||||||
if (FindPlayerPed()->m_pWanted->m_bIgnoredByEveryone || pVehicle->bIsLawEnforcer &&
|
if (FindPlayerPed()->m_pWanted->m_bIgnoredByEveryone || pVehicle->bIsLawEnforcer &&
|
||||||
(FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())){
|
(FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())){
|
||||||
CCarCtrl::JoinCarWithRoadSystem(pVehicle);
|
CCarCtrl::JoinCarWithRoadSystem(pVehicle);
|
||||||
@ -165,7 +132,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
|
|
||||||
else if (pVehicle->bIsLawEnforcer)
|
else if (pVehicle->bIsLawEnforcer)
|
||||||
MellowOutChaseSpeed(pVehicle);
|
MellowOutChaseSpeed(pVehicle);
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case MISSION_BLOCKPLAYER_FARAWAY:
|
case MISSION_BLOCKPLAYER_FARAWAY:
|
||||||
if (FindSwitchDistanceClose(pVehicle) > (FindPlayerCoors() - pVehicle->GetPosition()).Magnitude2D() ||
|
if (FindSwitchDistanceClose(pVehicle) > (FindPlayerCoors() - pVehicle->GetPosition()).Magnitude2D() ||
|
||||||
@ -174,7 +140,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
if (pVehicle->UsesSiren(pVehicle->GetModelIndex()))
|
if (pVehicle->UsesSiren(pVehicle->GetModelIndex()))
|
||||||
pVehicle->m_bSirenOrAlarm = true;
|
pVehicle->m_bSirenOrAlarm = true;
|
||||||
}
|
}
|
||||||
#ifndef MIAMI
|
|
||||||
if (FindPlayerPed()->m_pWanted->m_bIgnoredByEveryone || pVehicle->bIsLawEnforcer &&
|
if (FindPlayerPed()->m_pWanted->m_bIgnoredByEveryone || pVehicle->bIsLawEnforcer &&
|
||||||
(FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())) {
|
(FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())) {
|
||||||
CCarCtrl::JoinCarWithRoadSystem(pVehicle);
|
CCarCtrl::JoinCarWithRoadSystem(pVehicle);
|
||||||
@ -184,9 +149,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
if (CCullZones::NoPolice())
|
if (CCullZones::NoPolice())
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
BackToCruisingIfNoWantedLevel(pVehicle);
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case MISSION_BLOCKPLAYER_CLOSE:
|
case MISSION_BLOCKPLAYER_CLOSE:
|
||||||
if (FindSwitchDistanceFar(pVehicle) >= (FindPlayerCoors() - pVehicle->GetPosition()).Magnitude2D() ||
|
if (FindSwitchDistanceFar(pVehicle) >= (FindPlayerCoors() - pVehicle->GetPosition()).Magnitude2D() ||
|
||||||
@ -216,11 +178,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
pVehicle->m_bSirenOrAlarm = false;
|
pVehicle->m_bSirenOrAlarm = false;
|
||||||
pVehicle->m_nCarHornTimer = 0;
|
pVehicle->m_nCarHornTimer = 0;
|
||||||
}
|
}
|
||||||
#ifdef MIAMI
|
|
||||||
if (pVehicle->bIsLawEnforcer)
|
|
||||||
MellowOutChaseSpeed(pVehicle);
|
|
||||||
BackToCruisingIfNoWantedLevel(pVehicle);
|
|
||||||
#else
|
|
||||||
if (FindPlayerPed()->m_pWanted->m_bIgnoredByEveryone || pVehicle->bIsLawEnforcer &&
|
if (FindPlayerPed()->m_pWanted->m_bIgnoredByEveryone || pVehicle->bIsLawEnforcer &&
|
||||||
(FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())) {
|
(FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())) {
|
||||||
CCarCtrl::JoinCarWithRoadSystem(pVehicle);
|
CCarCtrl::JoinCarWithRoadSystem(pVehicle);
|
||||||
@ -235,11 +192,7 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case MISSION_GOTOCOORDS:
|
case MISSION_GOTOCOORDS:
|
||||||
#ifdef MIAMI
|
|
||||||
if ((pVehicle->AutoPilot.m_vecDestinationCoors - pVehicle->GetPosition()).Magnitude2D() < FindSwitchDistanceClose(pVehicle) ||
|
|
||||||
#else
|
|
||||||
if ((pVehicle->AutoPilot.m_vecDestinationCoors - pVehicle->GetPosition()).Magnitude2D() < DISTANCE_TO_SWITCH_DISTANCE_GOTO ||
|
if ((pVehicle->AutoPilot.m_vecDestinationCoors - pVehicle->GetPosition()).Magnitude2D() < DISTANCE_TO_SWITCH_DISTANCE_GOTO ||
|
||||||
#endif
|
|
||||||
pVehicle->AutoPilot.m_bIgnorePathfinding)
|
pVehicle->AutoPilot.m_bIgnorePathfinding)
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_GOTOCOORDS_STRAIGHT;
|
pVehicle->AutoPilot.m_nCarMission = MISSION_GOTOCOORDS_STRAIGHT;
|
||||||
break;
|
break;
|
||||||
@ -251,12 +204,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
if (distance < 5.0f){
|
if (distance < 5.0f){
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
||||||
pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
||||||
#ifdef MIAMI
|
|
||||||
if (pVehicle->bParking) {
|
|
||||||
TellOccupantsToLeaveCar(pVehicle);
|
|
||||||
pVehicle->bParking = false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else if (distance > FindSwitchDistanceFarNormalVehicle(pVehicle) && !pVehicle->AutoPilot.m_bIgnorePathfinding && (CTimer::GetFrameCounter() & 7) == 0){
|
else if (distance > FindSwitchDistanceFarNormalVehicle(pVehicle) && !pVehicle->AutoPilot.m_bIgnorePathfinding && (CTimer::GetFrameCounter() & 7) == 0){
|
||||||
pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
||||||
@ -313,12 +260,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
if (distance < 1.0f) {
|
if (distance < 1.0f) {
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
||||||
pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
||||||
#ifdef MIAMI
|
|
||||||
if (pVehicle->bParking) {
|
|
||||||
TellOccupantsToLeaveCar(pVehicle);
|
|
||||||
pVehicle->bParking = false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else if (distance > FindSwitchDistanceFarNormalVehicle(pVehicle) && !pVehicle->AutoPilot.m_bIgnorePathfinding && (CTimer::GetFrameCounter() & 7) == 0) {
|
else if (distance > FindSwitchDistanceFarNormalVehicle(pVehicle) && !pVehicle->AutoPilot.m_bIgnorePathfinding && (CTimer::GetFrameCounter() & 7) == 0) {
|
||||||
pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
||||||
@ -338,7 +279,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
break;
|
break;
|
||||||
case MISSION_RAMCAR_CLOSE:
|
case MISSION_RAMCAR_CLOSE:
|
||||||
if (pVehicle->AutoPilot.m_pTargetCar){
|
if (pVehicle->AutoPilot.m_pTargetCar){
|
||||||
#ifndef MIAMI
|
|
||||||
if
|
if
|
||||||
#ifdef FIX_BUGS
|
#ifdef FIX_BUGS
|
||||||
(FindPlayerVehicle() == pVehicle->AutoPilot.m_pTargetCar &&
|
(FindPlayerVehicle() == pVehicle->AutoPilot.m_pTargetCar &&
|
||||||
@ -356,12 +296,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
if (CCullZones::NoPolice())
|
if (CCullZones::NoPolice())
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
#ifdef FIX_BUGS // btw fixed in SA
|
|
||||||
if (FindPlayerVehicle() == pVehicle->AutoPilot.m_pTargetCar)
|
|
||||||
#endif
|
|
||||||
BackToCruisingIfNoWantedLevel(pVehicle);
|
|
||||||
#endif
|
|
||||||
if ((pVehicle->AutoPilot.m_pTargetCar->GetPosition() - pVehicle->GetPosition()).Magnitude2D() <= FindSwitchDistanceFar(pVehicle) ||
|
if ((pVehicle->AutoPilot.m_pTargetCar->GetPosition() - pVehicle->GetPosition()).Magnitude2D() <= FindSwitchDistanceFar(pVehicle) ||
|
||||||
pVehicle->AutoPilot.m_bIgnorePathfinding){
|
pVehicle->AutoPilot.m_bIgnorePathfinding){
|
||||||
if (pVehicle->GetHasCollidedWith(pVehicle->AutoPilot.m_pTargetCar)){
|
if (pVehicle->GetHasCollidedWith(pVehicle->AutoPilot.m_pTargetCar)){
|
||||||
@ -403,42 +337,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#ifdef MIAMI
|
|
||||||
case MISSION_ATTACKPLAYER:
|
|
||||||
if (pVehicle->bIsLawEnforcer)
|
|
||||||
MellowOutChaseSpeedBoat(pVehicle);
|
|
||||||
BackToCruisingIfNoWantedLevel(pVehicle);
|
|
||||||
break;
|
|
||||||
case MISSION_SLOWLY_DRIVE_TOWARDS_PLAYER_1:
|
|
||||||
if (((CVector2D)(pVehicle->AutoPilot.m_vecDestinationCoors) - pVehicle->GetPosition()).Magnitude() < 1.5f)
|
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_SLOWLY_DRIVE_TOWARDS_PLAYER_2;
|
|
||||||
BackToCruisingIfNoWantedLevel(pVehicle);
|
|
||||||
break;
|
|
||||||
case MISSION_SLOWLY_DRIVE_TOWARDS_PLAYER_2:
|
|
||||||
{
|
|
||||||
float distance = ((CVector2D)FindPlayerCoors() - pVehicle->GetPosition()).Magnitude();
|
|
||||||
if (distance < 13.0f) {
|
|
||||||
TellOccupantsToLeaveCar(pVehicle);
|
|
||||||
pVehicle->AutoPilot.m_nCruiseSpeed = 0;
|
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_STOP_FOREVER;
|
|
||||||
}
|
|
||||||
if (distance > 70.0f || FindPlayerPed()->m_pWanted->m_bIgnoredByEveryone ||
|
|
||||||
(FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())) {
|
|
||||||
TellOccupantsToLeaveCar(pVehicle);
|
|
||||||
pVehicle->AutoPilot.m_nCruiseSpeed = 0;
|
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_STOP_FOREVER;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case MISSION_BLOCKPLAYER_FORWARDANDBACK:
|
|
||||||
{
|
|
||||||
CVector2D diff = (CVector2D)FindPlayerCoors() - pVehicle->GetPosition();
|
|
||||||
float distance = Max(0.001f, diff.Magnitude());
|
|
||||||
if (!FindPlayerVehicle() || DotProduct2D(CVector2D(diff.x / distance, diff.y / distance), FindPlayerSpeed()) > 0.05f)
|
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_BLOCKPLAYER_CLOSE;
|
|
||||||
BackToCruisingIfNoWantedLevel(pVehicle);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
default:
|
default:
|
||||||
if (pVehicle->bIsLawEnforcer && FindPlayerPed()->m_pWanted->m_nWantedLevel > 0 && !CCullZones::NoPolice()){
|
if (pVehicle->bIsLawEnforcer && FindPlayerPed()->m_pWanted->m_nWantedLevel > 0 && !CCullZones::NoPolice()){
|
||||||
if (ABS(FindPlayerCoors().x - pVehicle->GetPosition().x) > 10.0f ||
|
if (ABS(FindPlayerCoors().x - pVehicle->GetPosition().x) > 10.0f ||
|
||||||
@ -446,9 +344,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
pVehicle->AutoPilot.m_nCruiseSpeed = FindPoliceCarSpeedForWantedLevel(pVehicle);
|
pVehicle->AutoPilot.m_nCruiseSpeed = FindPoliceCarSpeedForWantedLevel(pVehicle);
|
||||||
pVehicle->SetStatus(STATUS_PHYSICS);
|
pVehicle->SetStatus(STATUS_PHYSICS);
|
||||||
pVehicle->AutoPilot.m_nCarMission =
|
pVehicle->AutoPilot.m_nCarMission =
|
||||||
#ifdef MIAMI
|
|
||||||
pVehicle->GetVehicleAppearance() == VEHICLE_BOAT ? FindPoliceBoatMissionForWantedLevel() :
|
|
||||||
#endif
|
|
||||||
FindPoliceCarMissionForWantedLevel();
|
FindPoliceCarMissionForWantedLevel();
|
||||||
pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
||||||
pVehicle->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_AVOID_CARS;
|
pVehicle->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_AVOID_CARS;
|
||||||
@ -470,13 +365,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
pVehicle->AutoPilot.m_nCruiseSpeed = 0;
|
pVehicle->AutoPilot.m_nCruiseSpeed = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef MIAMI
|
|
||||||
if (pVehicle->bIsLawEnforcer && FindPlayerPed()->m_pWanted->m_nWantedLevel >= 1 && CCullZones::PoliceAbandonCars()) {
|
|
||||||
TellOccupantsToLeaveCar(pVehicle);
|
|
||||||
pVehicle->AutoPilot.m_nCruiseSpeed = 0;
|
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
float flatSpeed = pVehicle->GetMoveSpeed().MagnitudeSqr2D();
|
float flatSpeed = pVehicle->GetMoveSpeed().MagnitudeSqr2D();
|
||||||
if (flatSpeed > SQR(0.018f)){
|
if (flatSpeed > SQR(0.018f)){
|
||||||
pVehicle->AutoPilot.m_nTimeToStartMission = CTimer::GetTimeInMilliseconds();
|
pVehicle->AutoPilot.m_nTimeToStartMission = CTimer::GetTimeInMilliseconds();
|
||||||
@ -485,16 +373,9 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
if (pVehicle->GetStatus() == STATUS_PHYSICS && pVehicle->AutoPilot.m_nTempAction == TEMPACT_NONE){
|
if (pVehicle->GetStatus() == STATUS_PHYSICS && pVehicle->AutoPilot.m_nTempAction == TEMPACT_NONE){
|
||||||
if (pVehicle->AutoPilot.m_nCarMission != MISSION_NONE){
|
if (pVehicle->AutoPilot.m_nCarMission != MISSION_NONE){
|
||||||
if (pVehicle->AutoPilot.m_nCarMission != MISSION_STOP_FOREVER &&
|
if (pVehicle->AutoPilot.m_nCarMission != MISSION_STOP_FOREVER &&
|
||||||
#ifdef MIAMI
|
|
||||||
pVehicle->AutoPilot.m_nCarMission != MISSION_BLOCKPLAYER_HANDBRAKESTOP &&
|
|
||||||
#endif
|
|
||||||
pVehicle->AutoPilot.m_nCruiseSpeed != 0 &&
|
pVehicle->AutoPilot.m_nCruiseSpeed != 0 &&
|
||||||
(pVehicle->VehicleCreatedBy != RANDOM_VEHICLE || pVehicle->AutoPilot.m_nCarMission != MISSION_CRUISE)){
|
(pVehicle->VehicleCreatedBy != RANDOM_VEHICLE || pVehicle->AutoPilot.m_nCarMission != MISSION_CRUISE)){
|
||||||
if (pVehicle->AutoPilot.m_nDrivingStyle != DRIVINGSTYLE_STOP_FOR_CARS
|
if (pVehicle->AutoPilot.m_nDrivingStyle != DRIVINGSTYLE_STOP_FOR_CARS
|
||||||
#ifdef MIAMI
|
|
||||||
&& pVehicle->AutoPilot.m_nDrivingStyle != DRIVINGSTYLE_STOP_FOR_CARS_IGNORE_LIGHTS ||
|
|
||||||
pVehicle->VehicleCreatedBy == MISSION_VEHICLE
|
|
||||||
#endif
|
|
||||||
) {
|
) {
|
||||||
if (CTimer::GetTimeInMilliseconds() - pVehicle->m_nLastTimeCollided > 500)
|
if (CTimer::GetTimeInMilliseconds() - pVehicle->m_nLastTimeCollided > 500)
|
||||||
pVehicle->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds();
|
pVehicle->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds();
|
||||||
@ -526,15 +407,6 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + 400;
|
pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + 400;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef MIAMI
|
|
||||||
if (pVehicle->bIsLawEnforcer) {
|
|
||||||
if (pVehicle->AutoPilot.m_nCarMission == MISSION_RAMPLAYER_FARAWAY ||
|
|
||||||
pVehicle->AutoPilot.m_nCarMission == MISSION_RAMPLAYER_CLOSE) {
|
|
||||||
if (FindPlayerVehicle() && FindPlayerVehicle()->GetVehicleAppearance() == VEHICLE_BIKE)
|
|
||||||
pVehicle->AutoPilot.m_nCarMission = MISSION_BLOCKPLAYER_FARAWAY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (pVehicle->GetUp().z < 0.7f){
|
if (pVehicle->GetUp().z < 0.7f){
|
||||||
pVehicle->AutoPilot.m_nTempAction = TEMPACT_WAIT;
|
pVehicle->AutoPilot.m_nTempAction = TEMPACT_WAIT;
|
||||||
pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + 1000;
|
pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + 1000;
|
||||||
@ -574,45 +446,13 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
|||||||
if ((uint8)(pVehicle->m_randomSeed ^ CGeneral::GetRandomNumber()) == 0xAD)
|
if ((uint8)(pVehicle->m_randomSeed ^ CGeneral::GetRandomNumber()) == 0xAD)
|
||||||
pVehicle->m_nCarHornTimer = 45;
|
pVehicle->m_nCarHornTimer = 45;
|
||||||
}
|
}
|
||||||
#ifdef MIAMI
|
|
||||||
float target = 1.0f;
|
|
||||||
if (pVehicle->AutoPilot.m_nCarMission == MISSION_CRUISE)
|
|
||||||
target = CCarCtrl::FindSpeedMultiplierWithSpeedFromNodes(pVehicle->AutoPilot.m_nCruiseSpeedMultiplierType);
|
|
||||||
float change = CTimer::GetTimeStep() * 0.01f;
|
|
||||||
if (Abs(pVehicle->AutoPilot.m_fCruiseSpeedMultiplier - target) < change)
|
|
||||||
pVehicle->AutoPilot.m_fCruiseSpeedMultiplier = target;
|
|
||||||
else if (pVehicle->AutoPilot.m_fCruiseSpeedMultiplier > target)
|
|
||||||
pVehicle->AutoPilot.m_fCruiseSpeedMultiplier -= change;
|
|
||||||
else
|
|
||||||
pVehicle->AutoPilot.m_fCruiseSpeedMultiplier += change;
|
|
||||||
|
|
||||||
if (pVehicle->bIsLawEnforcer && FindPlayerPed()->m_pWanted->m_nWantedLevel > 0) {
|
|
||||||
if (!FindPlayerVehicle() ||
|
|
||||||
FindPlayerVehicle()->GetVehicleAppearance() == VEHICLE_CAR ||
|
|
||||||
FindPlayerVehicle()->GetVehicleAppearance() == VEHICLE_BIKE) {
|
|
||||||
if (pVehicle->GetVehicleAppearance() == VEHICLE_BOAT) {
|
|
||||||
pVehicle->AutoPilot.m_nTempAction = TEMPACT_WAIT;
|
|
||||||
pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + 1000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (FindPlayerVehicle()->GetVehicleAppearance() == VEHICLE_BOAT) {
|
|
||||||
if (pVehicle->GetVehicleAppearance() == VEHICLE_CAR ||
|
|
||||||
pVehicle->GetVehicleAppearance() == VEHICLE_BIKE) {
|
|
||||||
pVehicle->AutoPilot.m_nTempAction = TEMPACT_WAIT;
|
|
||||||
pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + 1000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void CCarAI::CarHasReasonToStop(CVehicle* pVehicle)
|
void CCarAI::CarHasReasonToStop(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
pVehicle->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds();
|
pVehicle->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
float CCarAI::GetCarToGoToCoors(CVehicle* pVehicle, CVector* pTarget)
|
float CCarAI::GetCarToGoToCoors(CVehicle* pVehicle, CVector* pTarget)
|
||||||
{
|
{
|
||||||
if (pVehicle->AutoPilot.m_nCarMission != MISSION_GOTOCOORDS && pVehicle->AutoPilot.m_nCarMission != MISSION_GOTOCOORDS_STRAIGHT){
|
if (pVehicle->AutoPilot.m_nCarMission != MISSION_GOTOCOORDS && pVehicle->AutoPilot.m_nCarMission != MISSION_GOTOCOORDS_STRAIGHT){
|
||||||
@ -630,18 +470,6 @@ float CCarAI::GetCarToGoToCoors(CVehicle* pVehicle, CVector* pTarget)
|
|||||||
return (pVehicle->GetPosition() - *pTarget).Magnitude2D();
|
return (pVehicle->GetPosition() - *pTarget).Magnitude2D();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
//--MIAMI: done
|
|
||||||
float CCarAI::GetCarToParkAtCoors(CVehicle* pVehicle, CVector* pTarget)
|
|
||||||
{
|
|
||||||
GetCarToGoToCoors(pVehicle, pTarget);
|
|
||||||
pVehicle->bParking = true;
|
|
||||||
pVehicle->AutoPilot.m_nCruiseSpeed = 10;
|
|
||||||
return (pVehicle->GetPosition() - *pTarget).Magnitude2D();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//--MIAMI: TODO: MI_VICECHEE
|
|
||||||
void CCarAI::AddPoliceCarOccupants(CVehicle* pVehicle)
|
void CCarAI::AddPoliceCarOccupants(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
if (pVehicle->bOccupantsHaveBeenGenerated)
|
if (pVehicle->bOccupantsHaveBeenGenerated)
|
||||||
@ -661,43 +489,23 @@ void CCarAI::AddPoliceCarOccupants(CVehicle* pVehicle)
|
|||||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel > 1)
|
if (FindPlayerPed()->m_pWanted->m_nWantedLevel > 1)
|
||||||
pVehicle->SetupPassenger(0);
|
pVehicle->SetupPassenger(0);
|
||||||
return;
|
return;
|
||||||
#ifdef MIAMI
|
|
||||||
case MI_PREDATOR:
|
|
||||||
pVehicle->SetUpDriver();
|
|
||||||
return;
|
|
||||||
//TODO(MIAMI) uncomment this when we have MI_VICECHEE
|
|
||||||
/*
|
|
||||||
case MI_VICECHEE:
|
|
||||||
{
|
|
||||||
pVehicle->SetUpDriver()->bIsMiamiViceCop = true;
|
|
||||||
pVehicle->SetUpPassenger(0)->bIsMiamiViceCop = true;
|
|
||||||
CPopulation::NumMiamiViceCops += 2;
|
|
||||||
CCarCtrl::MiamiViceCycle = (CCarCtrl::MiamiViceCycle + 1) % 4;
|
|
||||||
CCarCtrl::LastTimeMiamiViceGenerated = CTimer::GetTimeInMilliseconds();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
#endif
|
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void CCarAI::AddAmbulanceOccupants(CVehicle* pVehicle)
|
void CCarAI::AddAmbulanceOccupants(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
pVehicle->SetUpDriver();
|
pVehicle->SetUpDriver();
|
||||||
pVehicle->SetupPassenger(1);
|
pVehicle->SetupPassenger(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void CCarAI::AddFiretruckOccupants(CVehicle* pVehicle)
|
void CCarAI::AddFiretruckOccupants(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
pVehicle->SetUpDriver();
|
pVehicle->SetUpDriver();
|
||||||
pVehicle->SetupPassenger(0);
|
pVehicle->SetupPassenger(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void CCarAI::TellOccupantsToLeaveCar(CVehicle* pVehicle)
|
void CCarAI::TellOccupantsToLeaveCar(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
if (pVehicle->pDriver){
|
if (pVehicle->pDriver){
|
||||||
@ -708,38 +516,11 @@ void CCarAI::TellOccupantsToLeaveCar(CVehicle* pVehicle)
|
|||||||
int timer = 100;
|
int timer = 100;
|
||||||
for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++){
|
for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++){
|
||||||
if (pVehicle->pPassengers[i]) {
|
if (pVehicle->pPassengers[i]) {
|
||||||
#ifdef MIAMI
|
|
||||||
pVehicle->pPassengers[i]->m_leaveCarTimer = timer;
|
|
||||||
pVehicle->pPassengers[i]->SetObjective(OBJECTIVE_LEAVE_VEHICLE, pVehicle);
|
pVehicle->pPassengers[i]->SetObjective(OBJECTIVE_LEAVE_VEHICLE, pVehicle);
|
||||||
timer += CGeneral::GetRandomNumberInRange(200, 400);
|
|
||||||
#else
|
|
||||||
pVehicle->pPassengers[i]->SetObjective(OBJECTIVE_LEAVE_VEHICLE, pVehicle);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
//--MIAMI: done
|
|
||||||
void CCarAI::TellOccupantsToFleeCar(CVehicle* pVehicle)
|
|
||||||
{
|
|
||||||
if (pVehicle->pDriver && !pVehicle->pDriver->IsPlayer()) {
|
|
||||||
pVehicle->pDriver->SetObjective(OBJECTIVE_FLEE_TILL_SAFE);
|
|
||||||
if (pVehicle->GetModelIndex() != MI_FIRETRUCK && pVehicle->GetModelIndex() == MI_AMBULAN)
|
|
||||||
pVehicle->pDriver->Say(SOUND_PED_LEAVE_VEHICLE);
|
|
||||||
}
|
|
||||||
int timer = 100;
|
|
||||||
for (int i = 0; i < pVehicle->m_nNumMaxPassengers; i++) {
|
|
||||||
if (pVehicle->pPassengers[i]) {
|
|
||||||
pVehicle->pPassengers[i]->m_leaveCarTimer = timer;
|
|
||||||
pVehicle->pPassengers[i]->SetObjective(OBJECTIVE_FLEE_TILL_SAFE);
|
|
||||||
timer += CGeneral::GetRandomNumberInRange(200, 400);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void CCarAI::TellCarToRamOtherCar(CVehicle* pVehicle, CVehicle* pTarget)
|
void CCarAI::TellCarToRamOtherCar(CVehicle* pVehicle, CVehicle* pTarget)
|
||||||
{
|
{
|
||||||
pVehicle->AutoPilot.m_pTargetCar = pTarget;
|
pVehicle->AutoPilot.m_pTargetCar = pTarget;
|
||||||
@ -749,7 +530,6 @@ void CCarAI::TellCarToRamOtherCar(CVehicle* pVehicle, CVehicle* pTarget)
|
|||||||
pVehicle->AutoPilot.m_nCruiseSpeed = Max(6, pVehicle->AutoPilot.m_nCruiseSpeed);
|
pVehicle->AutoPilot.m_nCruiseSpeed = Max(6, pVehicle->AutoPilot.m_nCruiseSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void CCarAI::TellCarToBlockOtherCar(CVehicle* pVehicle, CVehicle* pTarget)
|
void CCarAI::TellCarToBlockOtherCar(CVehicle* pVehicle, CVehicle* pTarget)
|
||||||
{
|
{
|
||||||
pVehicle->AutoPilot.m_pTargetCar = pTarget;
|
pVehicle->AutoPilot.m_pTargetCar = pTarget;
|
||||||
@ -759,7 +539,6 @@ void CCarAI::TellCarToBlockOtherCar(CVehicle* pVehicle, CVehicle* pTarget)
|
|||||||
pVehicle->AutoPilot.m_nCruiseSpeed = Max(6, pVehicle->AutoPilot.m_nCruiseSpeed);
|
pVehicle->AutoPilot.m_nCruiseSpeed = Max(6, pVehicle->AutoPilot.m_nCruiseSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
eCarMission CCarAI::FindPoliceCarMissionForWantedLevel()
|
eCarMission CCarAI::FindPoliceCarMissionForWantedLevel()
|
||||||
{
|
{
|
||||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel){
|
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel){
|
||||||
@ -774,24 +553,6 @@ eCarMission CCarAI::FindPoliceCarMissionForWantedLevel()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
//--MIAMI: done
|
|
||||||
eCarMission CCarAI::FindPoliceBoatMissionForWantedLevel()
|
|
||||||
{
|
|
||||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel) {
|
|
||||||
case 0:
|
|
||||||
case 1: return MISSION_BLOCKPLAYER_FARAWAY;
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
case 4:
|
|
||||||
case 5:
|
|
||||||
case 6: return MISSION_ATTACKPLAYER;
|
|
||||||
default: return MISSION_BLOCKPLAYER_FARAWAY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
int32 CCarAI::FindPoliceCarSpeedForWantedLevel(CVehicle* pVehicle)
|
int32 CCarAI::FindPoliceCarSpeedForWantedLevel(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel) {
|
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel) {
|
||||||
@ -806,7 +567,6 @@ int32 CCarAI::FindPoliceCarSpeedForWantedLevel(CVehicle* pVehicle)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void CCarAI::MellowOutChaseSpeed(CVehicle* pVehicle)
|
void CCarAI::MellowOutChaseSpeed(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
if (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel == 1){
|
if (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel == 1){
|
||||||
@ -845,31 +605,8 @@ void CCarAI::MellowOutChaseSpeed(CVehicle* pVehicle)
|
|||||||
pVehicle->AutoPilot.m_nCruiseSpeed = 34;
|
pVehicle->AutoPilot.m_nCruiseSpeed = 34;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef MIAMI
|
|
||||||
if (!FindPlayerVehicle() && FindPlayerPed()->GetMoveSpeed().Magnitude() < 0.07f) {
|
|
||||||
if ((FindPlayerCoors() - pVehicle->GetPosition()).Magnitude() < 30.0f)
|
|
||||||
pVehicle->AutoPilot.m_nCruiseSpeed = Min(10, pVehicle->AutoPilot.m_nCruiseSpeed);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
//--MIAMI: done
|
|
||||||
void CCarAI::MellowOutChaseSpeedBoat(CVehicle* pVehicle)
|
|
||||||
{
|
|
||||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel) {
|
|
||||||
case 0: pVehicle->AutoPilot.m_nCruiseSpeed = 8; break;
|
|
||||||
case 1: pVehicle->AutoPilot.m_nCruiseSpeed = 10; break;
|
|
||||||
case 2: pVehicle->AutoPilot.m_nCruiseSpeed = 15; break;
|
|
||||||
case 3: pVehicle->AutoPilot.m_nCruiseSpeed = 20; break;
|
|
||||||
case 4: pVehicle->AutoPilot.m_nCruiseSpeed = 25; break;
|
|
||||||
case 5: pVehicle->AutoPilot.m_nCruiseSpeed = 30; break;
|
|
||||||
case 6: pVehicle->AutoPilot.m_nCruiseSpeed = 40; break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void CCarAI::MakeWayForCarWithSiren(CVehicle *pVehicle)
|
void CCarAI::MakeWayForCarWithSiren(CVehicle *pVehicle)
|
||||||
{
|
{
|
||||||
float flatSpeed = pVehicle->GetMoveSpeed().Magnitude2D();
|
float flatSpeed = pVehicle->GetMoveSpeed().Magnitude2D();
|
||||||
@ -892,10 +629,6 @@ void CCarAI::MakeWayForCarWithSiren(CVehicle *pVehicle)
|
|||||||
continue;
|
continue;
|
||||||
if (vehicle == pVehicle)
|
if (vehicle == pVehicle)
|
||||||
continue;
|
continue;
|
||||||
#ifdef MIAMI
|
|
||||||
if (vehicle->AutoPilot.m_nDrivingStyle == DRIVINGSTYLE_AVOID_CARS)
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
if (Abs(pVehicle->GetPosition().z - vehicle->GetPosition().z) >= 5.0f)
|
if (Abs(pVehicle->GetPosition().z - vehicle->GetPosition().z) >= 5.0f)
|
||||||
continue;
|
continue;
|
||||||
CVector2D distance = vehicle->GetPosition() - pVehicle->GetPosition();
|
CVector2D distance = vehicle->GetPosition() - pVehicle->GetPosition();
|
||||||
|
@ -10,32 +10,17 @@ public:
|
|||||||
static float FindSwitchDistanceClose(CVehicle*);
|
static float FindSwitchDistanceClose(CVehicle*);
|
||||||
static float FindSwitchDistanceFarNormalVehicle(CVehicle*);
|
static float FindSwitchDistanceFarNormalVehicle(CVehicle*);
|
||||||
static float FindSwitchDistanceFar(CVehicle*);
|
static float FindSwitchDistanceFar(CVehicle*);
|
||||||
#ifdef MIAMI
|
|
||||||
static void BackToCruisingIfNoWantedLevel(CVehicle*);
|
|
||||||
#endif
|
|
||||||
static void UpdateCarAI(CVehicle*);
|
static void UpdateCarAI(CVehicle*);
|
||||||
static void CarHasReasonToStop(CVehicle*);
|
static void CarHasReasonToStop(CVehicle*);
|
||||||
static float GetCarToGoToCoors(CVehicle*, CVector*);
|
static float GetCarToGoToCoors(CVehicle*, CVector*);
|
||||||
#ifdef MIAMI
|
|
||||||
static float GetCarToParkAtCoors(CVehicle*, CVector*);
|
|
||||||
#endif
|
|
||||||
static void AddPoliceCarOccupants(CVehicle*);
|
static void AddPoliceCarOccupants(CVehicle*);
|
||||||
static void AddAmbulanceOccupants(CVehicle*);
|
static void AddAmbulanceOccupants(CVehicle*);
|
||||||
static void AddFiretruckOccupants(CVehicle*);
|
static void AddFiretruckOccupants(CVehicle*);
|
||||||
static void TellOccupantsToLeaveCar(CVehicle*);
|
static void TellOccupantsToLeaveCar(CVehicle*);
|
||||||
#ifdef MIAMI
|
|
||||||
static void TellOccupantsToFleeCar(CVehicle*);
|
|
||||||
#endif
|
|
||||||
static void TellCarToRamOtherCar(CVehicle*, CVehicle*);
|
static void TellCarToRamOtherCar(CVehicle*, CVehicle*);
|
||||||
static void TellCarToBlockOtherCar(CVehicle*, CVehicle*);
|
static void TellCarToBlockOtherCar(CVehicle*, CVehicle*);
|
||||||
static eCarMission FindPoliceCarMissionForWantedLevel();
|
static eCarMission FindPoliceCarMissionForWantedLevel();
|
||||||
#ifdef MIAMI
|
|
||||||
static eCarMission FindPoliceBoatMissionForWantedLevel();
|
|
||||||
#endif
|
|
||||||
static int32 FindPoliceCarSpeedForWantedLevel(CVehicle*);
|
static int32 FindPoliceCarSpeedForWantedLevel(CVehicle*);
|
||||||
static void MellowOutChaseSpeed(CVehicle*);
|
static void MellowOutChaseSpeed(CVehicle*);
|
||||||
#ifdef MIAMI
|
|
||||||
static void MellowOutChaseSpeedBoat(CVehicle*);
|
|
||||||
#endif
|
|
||||||
static void MakeWayForCarWithSiren(CVehicle *veh);
|
static void MakeWayForCarWithSiren(CVehicle *veh);
|
||||||
};
|
};
|
||||||
|
@ -1641,7 +1641,6 @@ void CCarCtrl::PickNextNodeToChaseCar(CVehicle* pVehicle, float targetX, float t
|
|||||||
CPathNode* pTargetNode;
|
CPathNode* pTargetNode;
|
||||||
int16 numNodes;
|
int16 numNodes;
|
||||||
float distanceToTargetNode;
|
float distanceToTargetNode;
|
||||||
#ifndef MIAMI
|
|
||||||
if (pTarget && pTarget->m_pCurGroundEntity &&
|
if (pTarget && pTarget->m_pCurGroundEntity &&
|
||||||
pTarget->m_pCurGroundEntity->IsBuilding() &&
|
pTarget->m_pCurGroundEntity->IsBuilding() &&
|
||||||
((CBuilding*)pTarget->m_pCurGroundEntity)->GetIsATreadable() &&
|
((CBuilding*)pTarget->m_pCurGroundEntity)->GetIsATreadable() &&
|
||||||
@ -1667,7 +1666,6 @@ void CCarCtrl::PickNextNodeToChaseCar(CVehicle* pVehicle, float targetX, float t
|
|||||||
#endif
|
#endif
|
||||||
&pTargetNode, &numNodes, 1, pVehicle, &distanceToTargetNode, 999999.9f, closestNode);
|
&pTargetNode, &numNodes, 1, pVehicle, &distanceToTargetNode, 999999.9f, closestNode);
|
||||||
}else
|
}else
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
|
|
||||||
ThePaths.DoPathSearch(0, pCurNode->GetPosition(), curNode,
|
ThePaths.DoPathSearch(0, pCurNode->GetPosition(), curNode,
|
||||||
@ -2751,15 +2749,3 @@ bool CCarCtrl::MapCouldMoveInThisArea(float x, float y)
|
|||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
float CCarCtrl::FindSpeedMultiplierWithSpeedFromNodes(int8 type)
|
|
||||||
{
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case 1: return 1.5f;
|
|
||||||
case 2: return 2.0f;
|
|
||||||
}
|
|
||||||
return 1.0f;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@ -104,9 +104,6 @@ public:
|
|||||||
static void ClearInterestingVehicleList();
|
static void ClearInterestingVehicleList();
|
||||||
static void FindLinksToGoWithTheseNodes(CVehicle*);
|
static void FindLinksToGoWithTheseNodes(CVehicle*);
|
||||||
static bool GenerateOneEmergencyServicesCar(uint32, CVector);
|
static bool GenerateOneEmergencyServicesCar(uint32, CVector);
|
||||||
#ifdef MIAMI
|
|
||||||
static float FindSpeedMultiplierWithSpeedFromNodes(int8);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static float GetPositionAlongCurrentCurve(CVehicle* pVehicle)
|
static float GetPositionAlongCurrentCurve(CVehicle* pVehicle)
|
||||||
{
|
{
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -55,7 +55,6 @@ public:
|
|||||||
|
|
||||||
struct CPathNode
|
struct CPathNode
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
CVector pos;
|
CVector pos;
|
||||||
CPathNode *prev;
|
CPathNode *prev;
|
||||||
CPathNode *next;
|
CPathNode *next;
|
||||||
@ -81,44 +80,6 @@ struct CPathNode
|
|||||||
CPathNode *GetNext(void) { return next; }
|
CPathNode *GetNext(void) { return next; }
|
||||||
void SetPrev(CPathNode *node) { prev = node; }
|
void SetPrev(CPathNode *node) { prev = node; }
|
||||||
void SetNext(CPathNode *node) { next = node; }
|
void SetNext(CPathNode *node) { next = node; }
|
||||||
#else
|
|
||||||
int16 prevIndex;
|
|
||||||
int16 nextIndex;
|
|
||||||
int16 x;
|
|
||||||
int16 y;
|
|
||||||
int16 z;
|
|
||||||
int16 distance; // in path search
|
|
||||||
int16 firstLink;
|
|
||||||
int8 width;
|
|
||||||
int8 group;
|
|
||||||
|
|
||||||
uint8 numLinks : 4;
|
|
||||||
uint8 bDeadEnd : 1;
|
|
||||||
uint8 bDisabled : 1;
|
|
||||||
uint8 bBetweenLevels : 1;
|
|
||||||
uint8 bUseInRoadBlock : 1;
|
|
||||||
|
|
||||||
uint8 bWaterPath : 1;
|
|
||||||
uint8 flagB2 : 1; // flag 2 in node info, always zero
|
|
||||||
uint8 flagB4 : 1; // where is this set?
|
|
||||||
uint8 speedLimit : 2;
|
|
||||||
//uint8 flagB20 : 1;
|
|
||||||
//uint8 flagB40 : 1;
|
|
||||||
//uint8 flagB80 : 1;
|
|
||||||
|
|
||||||
uint8 spawnRate : 4;
|
|
||||||
uint8 flagsC : 4;
|
|
||||||
|
|
||||||
CVector GetPosition(void) { return CVector(x/8.0f, y/8.0f, z/8.0f); }
|
|
||||||
void SetPosition(const CVector &p) { x = p.x*8.0f; y = p.y*8.0f; z = p.z*8.0f; }
|
|
||||||
float GetX(void) { return x/8.0f; }
|
|
||||||
float GetY(void) { return y/8.0f; }
|
|
||||||
float GetZ(void) { return z/8.0f; }
|
|
||||||
CPathNode *GetPrev(void);
|
|
||||||
CPathNode *GetNext(void);
|
|
||||||
void SetPrev(CPathNode *node);
|
|
||||||
void SetNext(CPathNode *node);
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
union CConnectionFlags
|
union CConnectionFlags
|
||||||
@ -132,7 +93,6 @@ union CConnectionFlags
|
|||||||
|
|
||||||
struct CCarPathLink
|
struct CCarPathLink
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
CVector2D pos;
|
CVector2D pos;
|
||||||
CVector2D dir;
|
CVector2D dir;
|
||||||
int16 pathNodeIndex;
|
int16 pathNodeIndex;
|
||||||
@ -149,26 +109,6 @@ struct CCarPathLink
|
|||||||
float GetY(void) { return pos.y; }
|
float GetY(void) { return pos.y; }
|
||||||
float GetDirX(void) { return dir.x; }
|
float GetDirX(void) { return dir.x; }
|
||||||
float GetDirY(void) { return dir.y; }
|
float GetDirY(void) { return dir.y; }
|
||||||
#else
|
|
||||||
int16 x;
|
|
||||||
int16 y;
|
|
||||||
int16 pathNodeIndex;
|
|
||||||
int8 dirX;
|
|
||||||
int8 dirY;
|
|
||||||
int8 numLeftLanes : 3;
|
|
||||||
int8 numRightLanes : 3;
|
|
||||||
uint8 flag1 : 1;
|
|
||||||
uint8 trafficLightType : 2;
|
|
||||||
uint8 bBridgeLights : 1; // at least in LCS...
|
|
||||||
int8 width;
|
|
||||||
|
|
||||||
CVector2D GetPosition(void) { return CVector2D(x/8.0f, y/8.0f); }
|
|
||||||
CVector2D GetDirection(void) { return CVector2D(dirX/100.0f, dirY/100.0f); }
|
|
||||||
float GetX(void) { return x/8.0f; }
|
|
||||||
float GetY(void) { return y/8.0f; }
|
|
||||||
float GetDirX(void) { return dirX/100.0f; }
|
|
||||||
float GetDirY(void) { return dirY/100.0f; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
float OneWayLaneOffset()
|
float OneWayLaneOffset()
|
||||||
{
|
{
|
||||||
@ -183,7 +123,6 @@ struct CCarPathLink
|
|||||||
// This is what we're reading from the files, only temporary
|
// This is what we're reading from the files, only temporary
|
||||||
struct CPathInfoForObject
|
struct CPathInfoForObject
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
int16 x;
|
int16 x;
|
||||||
int16 y;
|
int16 y;
|
||||||
int16 z;
|
int16 z;
|
||||||
@ -192,28 +131,6 @@ struct CPathInfoForObject
|
|||||||
int8 numLeftLanes;
|
int8 numLeftLanes;
|
||||||
int8 numRightLanes;
|
int8 numRightLanes;
|
||||||
uint8 crossing : 1;
|
uint8 crossing : 1;
|
||||||
#else
|
|
||||||
float x;
|
|
||||||
float y;
|
|
||||||
float z;
|
|
||||||
int8 type;
|
|
||||||
int8 next;
|
|
||||||
int8 numLeftLanes;
|
|
||||||
int8 numRightLanes;
|
|
||||||
int8 speedLimit;
|
|
||||||
int8 width;
|
|
||||||
|
|
||||||
uint8 crossing : 1;
|
|
||||||
uint8 flag02 : 1; // always zero
|
|
||||||
uint8 roadBlock : 1;
|
|
||||||
uint8 disabled : 1;
|
|
||||||
uint8 waterPath : 1;
|
|
||||||
uint8 betweenLevels : 1;
|
|
||||||
|
|
||||||
uint8 spawnRate : 4;
|
|
||||||
|
|
||||||
void SwapConnectionsToBeRightWayRound(void);
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
extern CPathInfoForObject *InfoForTileCars;
|
extern CPathInfoForObject *InfoForTileCars;
|
||||||
extern CPathInfoForObject *InfoForTilePeds;
|
extern CPathInfoForObject *InfoForTilePeds;
|
||||||
@ -221,7 +138,6 @@ extern CPathInfoForObject *InfoForTilePeds;
|
|||||||
struct CTempNode
|
struct CTempNode
|
||||||
{
|
{
|
||||||
CVector pos;
|
CVector pos;
|
||||||
#ifndef MIAMI
|
|
||||||
float dirX;
|
float dirX;
|
||||||
float dirY;
|
float dirY;
|
||||||
int16 link1;
|
int16 link1;
|
||||||
@ -229,37 +145,12 @@ struct CTempNode
|
|||||||
int8 numLeftLanes;
|
int8 numLeftLanes;
|
||||||
int8 numRightLanes;
|
int8 numRightLanes;
|
||||||
int8 linkState;
|
int8 linkState;
|
||||||
#else
|
|
||||||
int8 dirX; // *100
|
|
||||||
int8 dirY;
|
|
||||||
int16 link1;
|
|
||||||
int16 link2;
|
|
||||||
int8 numLeftLanes;
|
|
||||||
int8 numRightLanes;
|
|
||||||
int8 width;
|
|
||||||
bool isCross;
|
|
||||||
int8 linkState;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
struct CTempNodeExternal // made up name
|
|
||||||
{
|
|
||||||
CVector pos;
|
|
||||||
int16 next;
|
|
||||||
int8 numLeftLanes;
|
|
||||||
int8 numRightLanes;
|
|
||||||
int8 width;
|
|
||||||
bool isCross;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
struct CTempDetachedNode // unused
|
struct CTempDetachedNode // unused
|
||||||
{
|
{
|
||||||
uint8 foo[20];
|
uint8 foo[20];
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
class CPathFind
|
class CPathFind
|
||||||
{
|
{
|
||||||
@ -267,15 +158,10 @@ public:
|
|||||||
CPathNode m_pathNodes[NUM_PATHNODES];
|
CPathNode m_pathNodes[NUM_PATHNODES];
|
||||||
CCarPathLink m_carPathLinks[NUM_CARPATHLINKS];
|
CCarPathLink m_carPathLinks[NUM_CARPATHLINKS];
|
||||||
CTreadable *m_mapObjects[NUM_MAPOBJECTS];
|
CTreadable *m_mapObjects[NUM_MAPOBJECTS];
|
||||||
#ifndef MIAMI
|
|
||||||
uint8 m_objectFlags[NUM_MAPOBJECTS];
|
uint8 m_objectFlags[NUM_MAPOBJECTS];
|
||||||
int16 m_connections[NUM_PATHCONNECTIONS];
|
int16 m_connections[NUM_PATHCONNECTIONS];
|
||||||
int16 m_distances[NUM_PATHCONNECTIONS];
|
int16 m_distances[NUM_PATHCONNECTIONS];
|
||||||
CConnectionFlags m_connectionFlags[NUM_PATHCONNECTIONS];
|
CConnectionFlags m_connectionFlags[NUM_PATHCONNECTIONS];
|
||||||
#else
|
|
||||||
uint16 m_connections[NUM_PATHCONNECTIONS]; // and flags
|
|
||||||
uint8 m_distances[NUM_PATHCONNECTIONS];
|
|
||||||
#endif
|
|
||||||
int16 m_carPathConnections[NUM_PATHCONNECTIONS];
|
int16 m_carPathConnections[NUM_PATHCONNECTIONS];
|
||||||
|
|
||||||
int32 m_numPathNodes;
|
int32 m_numPathNodes;
|
||||||
@ -293,20 +179,12 @@ public:
|
|||||||
void RegisterMapObject(CTreadable *mapObject);
|
void RegisterMapObject(CTreadable *mapObject);
|
||||||
void StoreNodeInfoPed(int16 id, int16 node, int8 type, int8 next, int16 x, int16 y, int16 z, int16 width, bool crossing);
|
void StoreNodeInfoPed(int16 id, int16 node, int8 type, int8 next, int16 x, int16 y, int16 z, int16 width, bool crossing);
|
||||||
void StoreNodeInfoCar(int16 id, int16 node, int8 type, int8 next, int16 x, int16 y, int16 z, int16 width, int8 numLeft, int8 numRight);
|
void StoreNodeInfoCar(int16 id, int16 node, int8 type, int8 next, int16 x, int16 y, int16 z, int16 width, int8 numLeft, int8 numRight);
|
||||||
#ifndef MIAMI
|
|
||||||
void CalcNodeCoors(int16 x, int16 y, int16 z, int32 id, CVector *out);
|
void CalcNodeCoors(int16 x, int16 y, int16 z, int32 id, CVector *out);
|
||||||
#else
|
|
||||||
void CalcNodeCoors(float x, float y, float z, int32 id, CVector *out);
|
|
||||||
#endif
|
|
||||||
bool LoadPathFindData(void);
|
bool LoadPathFindData(void);
|
||||||
void PreparePathData(void);
|
void PreparePathData(void);
|
||||||
void CountFloodFillGroups(uint8 type);
|
void CountFloodFillGroups(uint8 type);
|
||||||
void PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoForObject *objectpathinfo,
|
void PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoForObject *objectpathinfo,
|
||||||
#ifndef MIAMI
|
|
||||||
float maxdist, CTempDetachedNode *detachednodes, int32 numDetached);
|
float maxdist, CTempDetachedNode *detachednodes, int32 numDetached);
|
||||||
#else
|
|
||||||
float maxdist, CPathInfoForObject *detachednodes, int32 numDetached);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool IsPathObject(int id) { return id < PATHNODESIZE && (InfoForTileCars[id*12].type != 0 || InfoForTilePeds[id*12].type != 0); }
|
bool IsPathObject(int id) { return id < PATHNODESIZE && (InfoForTileCars[id*12].type != 0 || InfoForTilePeds[id*12].type != 0); }
|
||||||
|
|
||||||
@ -324,56 +202,29 @@ public:
|
|||||||
void MarkRoadsBetweenLevelsNodeAndNeighbours(int32 nodeId);
|
void MarkRoadsBetweenLevelsNodeAndNeighbours(int32 nodeId);
|
||||||
void MarkRoadsBetweenLevelsInArea(float x1, float x2, float y1, float y2, float z1, float z2);
|
void MarkRoadsBetweenLevelsInArea(float x1, float x2, float y1, float y2, float z1, float z2);
|
||||||
void PedMarkRoadsBetweenLevelsInArea(float x1, float x2, float y1, float y2, float z1, float z2);
|
void PedMarkRoadsBetweenLevelsInArea(float x1, float x2, float y1, float y2, float z1, float z2);
|
||||||
#ifndef MIAMI
|
|
||||||
int32 FindNodeClosestToCoors(CVector coors, uint8 type, float distLimit, bool ignoreDisabled = false, bool ignoreBetweenLevels = false);
|
int32 FindNodeClosestToCoors(CVector coors, uint8 type, float distLimit, bool ignoreDisabled = false, bool ignoreBetweenLevels = false);
|
||||||
#else
|
|
||||||
//--MIAMI: TODO: check callers for new arguments
|
|
||||||
int32 FindNodeClosestToCoors(CVector coors, uint8 type, float distLimit, bool ignoreDisabled = false, bool ignoreBetweenLevels = false, bool ignoreFlagB4 = false, bool bWaterPath = false);
|
|
||||||
#endif
|
|
||||||
int32 FindNodeClosestToCoorsFavourDirection(CVector coors, uint8 type, float dirX, float dirY);
|
int32 FindNodeClosestToCoorsFavourDirection(CVector coors, uint8 type, float dirX, float dirY);
|
||||||
float FindNodeOrientationForCarPlacement(int32 nodeId);
|
float FindNodeOrientationForCarPlacement(int32 nodeId);
|
||||||
float FindNodeOrientationForCarPlacementFacingDestination(int32 nodeId, float x, float y, bool towards);
|
float FindNodeOrientationForCarPlacementFacingDestination(int32 nodeId, float x, float y, bool towards);
|
||||||
bool NewGenerateCarCreationCoors(float x, float y, float dirX, float dirY, float spawnDist, float angleLimit, bool forward, CVector *pPosition, int32 *pNode1, int32 *pNode2, float *pPositionBetweenNodes, bool ignoreDisabled = false);
|
bool NewGenerateCarCreationCoors(float x, float y, float dirX, float dirY, float spawnDist, float angleLimit, bool forward, CVector *pPosition, int32 *pNode1, int32 *pNode2, float *pPositionBetweenNodes, bool ignoreDisabled = false);
|
||||||
bool GeneratePedCreationCoors(float x, float y, float minDist, float maxDist, float minDistOffScreen, float maxDistOffScreen, CVector *pPosition, int32 *pNode1, int32 *pNode2, float *pPositionBetweenNodes, CMatrix *camMatrix);
|
bool GeneratePedCreationCoors(float x, float y, float minDist, float maxDist, float minDistOffScreen, float maxDistOffScreen, CVector *pPosition, int32 *pNode1, int32 *pNode2, float *pPositionBetweenNodes, CMatrix *camMatrix);
|
||||||
#ifndef MIAMI
|
|
||||||
CTreadable *FindRoadObjectClosestToCoors(CVector coors, uint8 type);
|
CTreadable *FindRoadObjectClosestToCoors(CVector coors, uint8 type);
|
||||||
#endif
|
|
||||||
void FindNextNodeWandering(uint8, CVector, CPathNode**, CPathNode**, uint8, uint8*);
|
void FindNextNodeWandering(uint8, CVector, CPathNode**, CPathNode**, uint8, uint8*);
|
||||||
void DoPathSearch(uint8 type, CVector start, int32 startNodeId, CVector target, CPathNode **nodes, int16 *numNodes, int16 maxNumNodes, CVehicle *vehicle, float *dist, float distLimit, int32 forcedTargetNode);
|
void DoPathSearch(uint8 type, CVector start, int32 startNodeId, CVector target, CPathNode **nodes, int16 *numNodes, int16 maxNumNodes, CVehicle *vehicle, float *dist, float distLimit, int32 forcedTargetNode);
|
||||||
bool TestCoorsCloseness(CVector target, uint8 type, CVector start);
|
bool TestCoorsCloseness(CVector target, uint8 type, CVector start);
|
||||||
void Save(uint8 *buf, uint32 *size);
|
void Save(uint8 *buf, uint32 *size);
|
||||||
void Load(uint8 *buf, uint32 size);
|
void Load(uint8 *buf, uint32 size);
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
CPathNode *GetNode(int16 index);
|
|
||||||
int16 GetIndex(CPathNode *node);
|
|
||||||
|
|
||||||
uint16 ConnectedNode(int id) { return m_connections[id] & 0x3FFF; }
|
|
||||||
bool ConnectionCrossesRoad(int id) { return !!(m_connections[id] & 0x8000); }
|
|
||||||
bool ConnectionHasTrafficLight(int id) { return !!(m_connections[id] & 0x4000); }
|
|
||||||
void ConnectionSetTrafficLight(int id) { m_connections[id] |= 0x4000; }
|
|
||||||
#else
|
|
||||||
uint16 ConnectedNode(int id) { return m_connections[id]; }
|
uint16 ConnectedNode(int id) { return m_connections[id]; }
|
||||||
bool ConnectionCrossesRoad(int id) { return m_connectionFlags[id].bCrossesRoad; }
|
bool ConnectionCrossesRoad(int id) { return m_connectionFlags[id].bCrossesRoad; }
|
||||||
bool ConnectionHasTrafficLight(int id) { return m_connectionFlags[id].bTrafficLight; }
|
bool ConnectionHasTrafficLight(int id) { return m_connectionFlags[id].bTrafficLight; }
|
||||||
void ConnectionSetTrafficLight(int id) { m_connectionFlags[id].bTrafficLight = true; }
|
void ConnectionSetTrafficLight(int id) { m_connectionFlags[id].bTrafficLight = true; }
|
||||||
#endif
|
|
||||||
|
|
||||||
void DisplayPathData(void);
|
void DisplayPathData(void);
|
||||||
};
|
};
|
||||||
#ifndef MIAMI
|
|
||||||
static_assert(sizeof(CPathFind) == 0x49bf4, "CPathFind: error");
|
static_assert(sizeof(CPathFind) == 0x49bf4, "CPathFind: error");
|
||||||
#endif
|
|
||||||
|
|
||||||
extern CPathFind ThePaths;
|
extern CPathFind ThePaths;
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
inline CPathNode *CPathNode::GetPrev(void) { return ThePaths.GetNode(prevIndex); }
|
|
||||||
inline CPathNode *CPathNode::GetNext(void) { return ThePaths.GetNode(nextIndex); }
|
|
||||||
inline void CPathNode::SetPrev(CPathNode *node) { prevIndex = ThePaths.GetIndex(node); }
|
|
||||||
inline void CPathNode::SetNext(CPathNode *node) { nextIndex = ThePaths.GetIndex(node); }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern bool gbShowPedPaths;
|
extern bool gbShowPedPaths;
|
||||||
extern bool gbShowCarPaths;
|
extern bool gbShowCarPaths;
|
||||||
extern bool gbShowCarPathsLinks;
|
extern bool gbShowCarPathsLinks;
|
||||||
|
@ -417,10 +417,8 @@ void CRecordDataForChase::GiveUsACar(int32 mi, CVector pos, float angle, CAutomo
|
|||||||
*ppCar = pCar;
|
*ppCar = pCar;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: unused
|
|
||||||
void RemoveUnusedCollision(void)
|
void RemoveUnusedCollision(void)
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
static const char* dontDeleteArray[] = {
|
static const char* dontDeleteArray[] = {
|
||||||
"rd_SrRoad2A50", "rd_SrRoad2A20", "rd_CrossRda1w22", "rd_CrossRda1rw22",
|
"rd_SrRoad2A50", "rd_SrRoad2A20", "rd_CrossRda1w22", "rd_CrossRda1rw22",
|
||||||
"road_broadway02", "road_broadway01", "com_21way5", "com_21way50",
|
"road_broadway02", "road_broadway01", "com_21way5", "com_21way50",
|
||||||
@ -432,7 +430,6 @@ void RemoveUnusedCollision(void)
|
|||||||
CModelInfo::RemoveColModelsFromOtherLevels(LEVEL_NONE);
|
CModelInfo::RemoveColModelsFromOtherLevels(LEVEL_NONE);
|
||||||
for (int i = 0; i < ARRAY_SIZE(dontDeleteArray); i++)
|
for (int i = 0; i < ARRAY_SIZE(dontDeleteArray); i++)
|
||||||
CModelInfo::GetModelInfo(dontDeleteArray[i], nil)->GetColModel()->level = LEVEL_COMMERCIAL;
|
CModelInfo::GetModelInfo(dontDeleteArray[i], nil)->GetColModel()->level = LEVEL_COMMERCIAL;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRecordDataForChase::StartChaseScene(float startTime)
|
void CRecordDataForChase::StartChaseScene(float startTime)
|
||||||
|
@ -15,40 +15,22 @@
|
|||||||
#include "CarCtrl.h"
|
#include "CarCtrl.h"
|
||||||
#include "General.h"
|
#include "General.h"
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
#define ROADBLOCKDIST (80.0f)
|
#define ROADBLOCKDIST (80.0f)
|
||||||
#else
|
|
||||||
#define ROADBLOCKDIST (90.0f)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int16 CRoadBlocks::NumRoadBlocks;
|
int16 CRoadBlocks::NumRoadBlocks;
|
||||||
#ifndef MIAMI
|
|
||||||
int16 CRoadBlocks::RoadBlockObjects[NUMROADBLOCKS];
|
int16 CRoadBlocks::RoadBlockObjects[NUMROADBLOCKS];
|
||||||
#else
|
|
||||||
int16 CRoadBlocks::RoadBlockNodes[NUMROADBLOCKS];
|
|
||||||
#endif
|
|
||||||
bool CRoadBlocks::InOrOut[NUMROADBLOCKS];
|
bool CRoadBlocks::InOrOut[NUMROADBLOCKS];
|
||||||
|
|
||||||
//--MIAMI: TODO: script roadblocks
|
|
||||||
void
|
void
|
||||||
CRoadBlocks::Init(void)
|
CRoadBlocks::Init(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
NumRoadBlocks = 0;
|
NumRoadBlocks = 0;
|
||||||
#ifndef MIAMI
|
|
||||||
for (i = 0; i < ThePaths.m_numMapObjects; i++) {
|
for (i = 0; i < ThePaths.m_numMapObjects; i++) {
|
||||||
if (ThePaths.m_objectFlags[i] & UseInRoadBlock) {
|
if (ThePaths.m_objectFlags[i] & UseInRoadBlock) {
|
||||||
#else
|
|
||||||
for(i = 0; i < ThePaths.m_numCarPathNodes; i++){
|
|
||||||
if(ThePaths.m_pathNodes[i].bUseInRoadBlock && ThePaths.m_pathNodes[i].numLinks == 2){
|
|
||||||
#endif
|
|
||||||
if (NumRoadBlocks < NUMROADBLOCKS) {
|
if (NumRoadBlocks < NUMROADBLOCKS) {
|
||||||
InOrOut[NumRoadBlocks] = true;
|
InOrOut[NumRoadBlocks] = true;
|
||||||
#ifndef MIAMI
|
|
||||||
RoadBlockObjects[NumRoadBlocks] = i;
|
RoadBlockObjects[NumRoadBlocks] = i;
|
||||||
#else
|
|
||||||
RoadBlockNodes[NumRoadBlocks] = i;
|
|
||||||
#endif
|
|
||||||
NumRoadBlocks++;
|
NumRoadBlocks++;
|
||||||
} else {
|
} else {
|
||||||
#ifndef MASTER
|
#ifndef MASTER
|
||||||
@ -128,19 +110,14 @@ CRoadBlocks::GenerateRoadBlocks(void)
|
|||||||
int16 nRoadblockNode = (int16)(NUMROADBLOCKS * frame) / 16;
|
int16 nRoadblockNode = (int16)(NUMROADBLOCKS * frame) / 16;
|
||||||
const int16 maxRoadBlocks = (int16)(NUMROADBLOCKS * (frame + 1)) / 16;
|
const int16 maxRoadBlocks = (int16)(NUMROADBLOCKS * (frame + 1)) / 16;
|
||||||
for (; nRoadblockNode < Min(NumRoadBlocks, maxRoadBlocks); nRoadblockNode++) {
|
for (; nRoadblockNode < Min(NumRoadBlocks, maxRoadBlocks); nRoadblockNode++) {
|
||||||
#ifndef MIAMI
|
|
||||||
CTreadable *mapObject = ThePaths.m_mapObjects[RoadBlockObjects[nRoadblockNode]];
|
CTreadable *mapObject = ThePaths.m_mapObjects[RoadBlockObjects[nRoadblockNode]];
|
||||||
CVector2D vecDistance = FindPlayerCoors() - mapObject->GetPosition();
|
CVector2D vecDistance = FindPlayerCoors() - mapObject->GetPosition();
|
||||||
#else
|
|
||||||
CVector2D vecDistance = FindPlayerCoors() - ThePaths.m_pathNodes[nRoadblockNode].GetPosition();
|
|
||||||
#endif
|
|
||||||
if (vecDistance.x > -ROADBLOCKDIST && vecDistance.x < ROADBLOCKDIST &&
|
if (vecDistance.x > -ROADBLOCKDIST && vecDistance.x < ROADBLOCKDIST &&
|
||||||
vecDistance.y > -ROADBLOCKDIST && vecDistance.y < ROADBLOCKDIST &&
|
vecDistance.y > -ROADBLOCKDIST && vecDistance.y < ROADBLOCKDIST &&
|
||||||
vecDistance.Magnitude() < ROADBLOCKDIST) {
|
vecDistance.Magnitude() < ROADBLOCKDIST) {
|
||||||
if (!InOrOut[nRoadblockNode]) {
|
if (!InOrOut[nRoadblockNode]) {
|
||||||
InOrOut[nRoadblockNode] = true;
|
InOrOut[nRoadblockNode] = true;
|
||||||
if (FindPlayerVehicle() && (CGeneral::GetRandomNumber() & 0x7F) < FindPlayerPed()->m_pWanted->m_RoadblockDensity) {
|
if (FindPlayerVehicle() && (CGeneral::GetRandomNumber() & 0x7F) < FindPlayerPed()->m_pWanted->m_RoadblockDensity) {
|
||||||
#ifndef MIAMI
|
|
||||||
CWanted *pPlayerWanted = FindPlayerPed()->m_pWanted;
|
CWanted *pPlayerWanted = FindPlayerPed()->m_pWanted;
|
||||||
float fMapObjectRadius = 2.0f * mapObject->GetColModel()->boundingBox.max.x;
|
float fMapObjectRadius = 2.0f * mapObject->GetColModel()->boundingBox.max.x;
|
||||||
int32 vehicleId = MI_POLICE;
|
int32 vehicleId = MI_POLICE;
|
||||||
@ -210,13 +187,10 @@ CRoadBlocks::GenerateRoadBlocks(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
InOrOut[nRoadblockNode] = false;
|
InOrOut[nRoadblockNode] = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: TODO script roadblocks
|
|
||||||
}
|
}
|
||||||
|
@ -7,11 +7,7 @@ class CRoadBlocks
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static int16 NumRoadBlocks;
|
static int16 NumRoadBlocks;
|
||||||
#ifndef MIAMI
|
|
||||||
static int16 RoadBlockObjects[NUMROADBLOCKS];
|
static int16 RoadBlockObjects[NUMROADBLOCKS];
|
||||||
#else
|
|
||||||
static int16 RoadBlockNodes[NUMROADBLOCKS];
|
|
||||||
#endif
|
|
||||||
static bool InOrOut[NUMROADBLOCKS];
|
static bool InOrOut[NUMROADBLOCKS];
|
||||||
|
|
||||||
static void Init(void);
|
static void Init(void);
|
||||||
|
@ -372,9 +372,6 @@ private:
|
|||||||
friend class CRunningScript;
|
friend class CRunningScript;
|
||||||
friend class CHud;
|
friend class CHud;
|
||||||
friend void CMissionCleanup::Process();
|
friend void CMissionCleanup::Process();
|
||||||
#ifdef MIAMI
|
|
||||||
friend class CColStore;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -934,13 +934,11 @@ CCamera::CamControl(void)
|
|||||||
if(CCullZones::CamStairsForPlayer() && CCullZones::FindZoneWithStairsAttributeForPlayer())
|
if(CCullZones::CamStairsForPlayer() && CCullZones::FindZoneWithStairsAttributeForPlayer())
|
||||||
stairs = true;
|
stairs = true;
|
||||||
// Some hack for Mr Whoopee in a bomb shop
|
// Some hack for Mr Whoopee in a bomb shop
|
||||||
#ifndef MIAMI // uhh, check this
|
|
||||||
if(Cams[ActiveCam].Using3rdPersonMouseCam() && CCollision::ms_collisionInMemory == LEVEL_COMMERCIAL){
|
if(Cams[ActiveCam].Using3rdPersonMouseCam() && CCollision::ms_collisionInMemory == LEVEL_COMMERCIAL){
|
||||||
if(pTargetEntity->GetPosition().x < 83.0f && pTargetEntity->GetPosition().x > 18.0f &&
|
if(pTargetEntity->GetPosition().x < 83.0f && pTargetEntity->GetPosition().x > 18.0f &&
|
||||||
pTargetEntity->GetPosition().y < -305.0f && pTargetEntity->GetPosition().y > -390.0f)
|
pTargetEntity->GetPosition().y < -305.0f && pTargetEntity->GetPosition().y > -390.0f)
|
||||||
disableGarageCam = true;
|
disableGarageCam = true;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
if(!disableGarageCam && (CGarages::IsPointInAGarageCameraZone(pTargetEntity->GetPosition()) || stairs)){
|
if(!disableGarageCam && (CGarages::IsPointInAGarageCameraZone(pTargetEntity->GetPosition()) || stairs)){
|
||||||
if(!m_bGarageFixedCamPositionSet && m_bLookingAtPlayer){
|
if(!m_bGarageFixedCamPositionSet && m_bLookingAtPlayer){
|
||||||
if(pToGarageWeAreIn || stairs){
|
if(pToGarageWeAreIn || stairs){
|
||||||
|
@ -20,10 +20,6 @@
|
|||||||
#include "SurfaceTable.h"
|
#include "SurfaceTable.h"
|
||||||
#include "Lines.h"
|
#include "Lines.h"
|
||||||
#include "Collision.h"
|
#include "Collision.h"
|
||||||
#ifdef MIAMI
|
|
||||||
#include "Camera.h"
|
|
||||||
#include "ColStore.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum Direction
|
enum Direction
|
||||||
{
|
{
|
||||||
@ -38,32 +34,22 @@ enum Direction
|
|||||||
eLevelName CCollision::ms_collisionInMemory;
|
eLevelName CCollision::ms_collisionInMemory;
|
||||||
CLinkList<CColModel*> CCollision::ms_colModelCache;
|
CLinkList<CColModel*> CCollision::ms_colModelCache;
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void
|
void
|
||||||
CCollision::Init(void)
|
CCollision::Init(void)
|
||||||
{
|
{
|
||||||
ms_colModelCache.Init(NUMCOLCACHELINKS);
|
ms_colModelCache.Init(NUMCOLCACHELINKS);
|
||||||
ms_collisionInMemory = LEVEL_NONE;
|
ms_collisionInMemory = LEVEL_NONE;
|
||||||
#ifdef MIAMI
|
|
||||||
CColStore::Initialise();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void
|
void
|
||||||
CCollision::Shutdown(void)
|
CCollision::Shutdown(void)
|
||||||
{
|
{
|
||||||
ms_colModelCache.Shutdown();
|
ms_colModelCache.Shutdown();
|
||||||
#ifdef MIAMI
|
|
||||||
CColStore::Shutdown();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void
|
void
|
||||||
CCollision::Update(void)
|
CCollision::Update(void)
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
CVector playerCoors;
|
CVector playerCoors;
|
||||||
playerCoors = FindPlayerCoors();
|
playerCoors = FindPlayerCoors();
|
||||||
eLevelName level = CTheZones::m_CurrLevel;
|
eLevelName level = CTheZones::m_CurrLevel;
|
||||||
@ -97,10 +83,8 @@ CCollision::Update(void)
|
|||||||
if(ms_collisionInMemory != CGame::currLevel)
|
if(ms_collisionInMemory != CGame::currLevel)
|
||||||
LoadCollisionWhenINeedIt(forceLevelChange);
|
LoadCollisionWhenINeedIt(forceLevelChange);
|
||||||
CStreaming::HaveAllBigBuildingsLoaded(CGame::currLevel);
|
CStreaming::HaveAllBigBuildingsLoaded(CGame::currLevel);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: unused
|
|
||||||
eLevelName
|
eLevelName
|
||||||
GetCollisionInSectorList(CPtrList &list)
|
GetCollisionInSectorList(CPtrList &list)
|
||||||
{
|
{
|
||||||
@ -117,7 +101,6 @@ GetCollisionInSectorList(CPtrList &list)
|
|||||||
return LEVEL_NONE;
|
return LEVEL_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: unused
|
|
||||||
// Get a level this sector is in based on collision models
|
// Get a level this sector is in based on collision models
|
||||||
eLevelName
|
eLevelName
|
||||||
GetCollisionInSector(CSector §)
|
GetCollisionInSector(CSector §)
|
||||||
@ -138,11 +121,9 @@ GetCollisionInSector(CSector §)
|
|||||||
return (eLevelName)level;
|
return (eLevelName)level;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void
|
void
|
||||||
CCollision::LoadCollisionWhenINeedIt(bool forceChange)
|
CCollision::LoadCollisionWhenINeedIt(bool forceChange)
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
eLevelName level, l;
|
eLevelName level, l;
|
||||||
bool multipleLevels;
|
bool multipleLevels;
|
||||||
CVector playerCoors;
|
CVector playerCoors;
|
||||||
@ -229,14 +210,11 @@ CCollision::LoadCollisionWhenINeedIt(bool forceChange)
|
|||||||
CTimer::Update();
|
CTimer::Update();
|
||||||
DMAudio.SetEffectsFadeVol(127);
|
DMAudio.SetEffectsFadeVol(127);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void
|
void
|
||||||
CCollision::SortOutCollisionAfterLoad(void)
|
CCollision::SortOutCollisionAfterLoad(void)
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
if(ms_collisionInMemory == CGame::currLevel)
|
if(ms_collisionInMemory == CGame::currLevel)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -248,10 +226,6 @@ CCollision::SortOutCollisionAfterLoad(void)
|
|||||||
}
|
}
|
||||||
ms_collisionInMemory = CGame::currLevel;
|
ms_collisionInMemory = CGame::currLevel;
|
||||||
CGame::TidyUpMemory(true, false);
|
CGame::TidyUpMemory(true, false);
|
||||||
#else
|
|
||||||
CColStore::LoadCollision(TheCamera.GetPosition());
|
|
||||||
CStreaming::LoadAllRequestedModels(false);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -2000,11 +1974,7 @@ CColModel::CColModel(void)
|
|||||||
vertices = nil;
|
vertices = nil;
|
||||||
triangles = nil;
|
triangles = nil;
|
||||||
trianglePlanes = nil;
|
trianglePlanes = nil;
|
||||||
#ifndef MIAMI
|
|
||||||
level = CGame::currLevel;
|
level = CGame::currLevel;
|
||||||
#else
|
|
||||||
level = 0; // generic col slot
|
|
||||||
#endif
|
|
||||||
ownsCollisionVolumes = true;
|
ownsCollisionVolumes = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,11 +93,7 @@ struct CColModel
|
|||||||
int16 numLines;
|
int16 numLines;
|
||||||
int16 numBoxes;
|
int16 numBoxes;
|
||||||
int16 numTriangles;
|
int16 numTriangles;
|
||||||
#ifndef MIAMI
|
|
||||||
int32 level;
|
int32 level;
|
||||||
#else
|
|
||||||
uint8 level; // colstore slot but probably same name
|
|
||||||
#endif
|
|
||||||
bool ownsCollisionVolumes;
|
bool ownsCollisionVolumes;
|
||||||
CColSphere *spheres;
|
CColSphere *spheres;
|
||||||
CColLine *lines;
|
CColLine *lines;
|
||||||
|
@ -24,10 +24,6 @@
|
|||||||
#include "ZoneCull.h"
|
#include "ZoneCull.h"
|
||||||
#include "CdStream.h"
|
#include "CdStream.h"
|
||||||
#include "FileLoader.h"
|
#include "FileLoader.h"
|
||||||
#ifdef MIAMI
|
|
||||||
#include "Streaming.h"
|
|
||||||
#include "ColStore.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
char CFileLoader::ms_line[256];
|
char CFileLoader::ms_line[256];
|
||||||
|
|
||||||
@ -57,9 +53,7 @@ CFileLoader::LoadLevel(const char *filename)
|
|||||||
|
|
||||||
savedTxd = RwTexDictionaryGetCurrent();
|
savedTxd = RwTexDictionaryGetCurrent();
|
||||||
objectsLoaded = false;
|
objectsLoaded = false;
|
||||||
#ifndef MIAMI
|
|
||||||
savedLevel = CGame::currLevel;
|
savedLevel = CGame::currLevel;
|
||||||
#endif
|
|
||||||
if(savedTxd == nil){
|
if(savedTxd == nil){
|
||||||
savedTxd = RwTexDictionaryCreate();
|
savedTxd = RwTexDictionaryCreate();
|
||||||
RwTexDictionarySetCurrent(savedTxd);
|
RwTexDictionarySetCurrent(savedTxd);
|
||||||
@ -83,17 +77,12 @@ CFileLoader::LoadLevel(const char *filename)
|
|||||||
AddTexDictionaries(savedTxd, txd);
|
AddTexDictionaries(savedTxd, txd);
|
||||||
RwTexDictionaryDestroy(txd);
|
RwTexDictionaryDestroy(txd);
|
||||||
}else if(strncmp(line, "COLFILE", 7) == 0){
|
}else if(strncmp(line, "COLFILE", 7) == 0){
|
||||||
#ifndef MIAMI
|
|
||||||
int level;
|
int level;
|
||||||
sscanf(line+8, "%d", &level);
|
sscanf(line+8, "%d", &level);
|
||||||
CGame::currLevel = (eLevelName)level;
|
CGame::currLevel = (eLevelName)level;
|
||||||
LoadingScreenLoadingFile(line+10);
|
LoadingScreenLoadingFile(line+10);
|
||||||
LoadCollisionFile(line+10);
|
LoadCollisionFile(line+10);
|
||||||
CGame::currLevel = savedLevel;
|
CGame::currLevel = savedLevel;
|
||||||
#else
|
|
||||||
LoadingScreenLoadingFile(line+10);
|
|
||||||
LoadCollisionFile(line+10, 0);
|
|
||||||
#endif
|
|
||||||
}else if(strncmp(line, "MODELFILE", 9) == 0){
|
}else if(strncmp(line, "MODELFILE", 9) == 0){
|
||||||
LoadingScreenLoadingFile(line + 10);
|
LoadingScreenLoadingFile(line + 10);
|
||||||
LoadModelFile(line + 10);
|
LoadModelFile(line + 10);
|
||||||
@ -105,16 +94,8 @@ CFileLoader::LoadLevel(const char *filename)
|
|||||||
LoadObjectTypes(line + 4);
|
LoadObjectTypes(line + 4);
|
||||||
}else if(strncmp(line, "IPL", 3) == 0){
|
}else if(strncmp(line, "IPL", 3) == 0){
|
||||||
if(!objectsLoaded){
|
if(!objectsLoaded){
|
||||||
#ifndef MIAMI
|
|
||||||
CModelInfo::ConstructMloClumps();
|
CModelInfo::ConstructMloClumps();
|
||||||
CObjectData::Initialise("DATA\\OBJECT.DAT");
|
CObjectData::Initialise("DATA\\OBJECT.DAT");
|
||||||
#else
|
|
||||||
LoadingScreenLoadingFile("Collision");
|
|
||||||
CObjectData::Initialise("DATA\\OBJECT.DAT");
|
|
||||||
CStreaming::Init();
|
|
||||||
CColStore::LoadAllCollision();
|
|
||||||
// TODO: anim indices
|
|
||||||
#endif
|
|
||||||
objectsLoaded = true;
|
objectsLoaded = true;
|
||||||
}
|
}
|
||||||
LoadingScreenLoadingFile(line + 4);
|
LoadingScreenLoadingFile(line + 4);
|
||||||
@ -131,18 +112,8 @@ CFileLoader::LoadLevel(const char *filename)
|
|||||||
|
|
||||||
CFileMgr::CloseFile(fd);
|
CFileMgr::CloseFile(fd);
|
||||||
RwTexDictionarySetCurrent(savedTxd);
|
RwTexDictionarySetCurrent(savedTxd);
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
int i;
|
|
||||||
for(i = 1; i < COLSTORESIZE; i++)
|
|
||||||
if(CColStore::GetSlot(i))
|
|
||||||
CColStore::GetBoundingBox(i).Grow(120.0f);
|
|
||||||
CWorld::RepositionCertainDynamicObjects();
|
|
||||||
CColStore::RemoveAllCollision();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
void
|
void
|
||||||
CFileLoader::LoadCollisionFromDatFile(int currlevel)
|
CFileLoader::LoadCollisionFromDatFile(int currlevel)
|
||||||
{
|
{
|
||||||
@ -166,7 +137,6 @@ CFileLoader::LoadCollisionFromDatFile(int currlevel)
|
|||||||
|
|
||||||
CFileMgr::CloseFile(fd);
|
CFileMgr::CloseFile(fd);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
char*
|
char*
|
||||||
CFileLoader::LoadLine(int fd)
|
CFileLoader::LoadLine(int fd)
|
||||||
@ -208,14 +178,8 @@ struct ColHeader
|
|||||||
uint32 size;
|
uint32 size;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
#ifndef MIAMI
|
|
||||||
void
|
void
|
||||||
CFileLoader::LoadCollisionFile(const char *filename)
|
CFileLoader::LoadCollisionFile(const char *filename)
|
||||||
#else
|
|
||||||
void
|
|
||||||
CFileLoader::LoadCollisionFile(const char *filename, uint8 colSlot)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
char modelname[24];
|
char modelname[24];
|
||||||
@ -232,17 +196,10 @@ CFileLoader::LoadCollisionFile(const char *filename, uint8 colSlot)
|
|||||||
|
|
||||||
mi = CModelInfo::GetModelInfo(modelname, nil);
|
mi = CModelInfo::GetModelInfo(modelname, nil);
|
||||||
if(mi){
|
if(mi){
|
||||||
#ifndef MIAMI
|
|
||||||
if(mi->GetColModel()){
|
if(mi->GetColModel()){
|
||||||
#else
|
|
||||||
if(mi->GetColModel() && mi->DoesOwnColModel()){
|
|
||||||
#endif
|
|
||||||
LoadCollisionModel(work_buff+24, *mi->GetColModel(), modelname);
|
LoadCollisionModel(work_buff+24, *mi->GetColModel(), modelname);
|
||||||
}else{
|
}else{
|
||||||
CColModel *model = new CColModel;
|
CColModel *model = new CColModel;
|
||||||
#ifdef MIAMI
|
|
||||||
model->level = colSlot;
|
|
||||||
#endif
|
|
||||||
LoadCollisionModel(work_buff+24, *model, modelname);
|
LoadCollisionModel(work_buff+24, *model, modelname);
|
||||||
mi->SetColModel(model, true);
|
mi->SetColModel(model, true);
|
||||||
}
|
}
|
||||||
@ -254,82 +211,6 @@ CFileLoader::LoadCollisionFile(const char *filename, uint8 colSlot)
|
|||||||
CFileMgr::CloseFile(fd);
|
CFileMgr::CloseFile(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
bool
|
|
||||||
CFileLoader::LoadCollisionFileFirstTime(uint8 *buffer, uint32 size, uint8 colSlot)
|
|
||||||
{
|
|
||||||
uint32 modelsize;
|
|
||||||
char modelname[24];
|
|
||||||
CBaseModelInfo *mi;
|
|
||||||
ColHeader *header;
|
|
||||||
int modelIndex;
|
|
||||||
|
|
||||||
while(size > 8){
|
|
||||||
header = (ColHeader*)buffer;
|
|
||||||
modelsize = header->size;
|
|
||||||
if(strncmp(header->ident, "COLL", 4) != 0)
|
|
||||||
return size-8 < CDSTREAM_SECTOR_SIZE;
|
|
||||||
memcpy(modelname, buffer+8, 24);
|
|
||||||
memcpy(work_buff, buffer+32, modelsize-24);
|
|
||||||
size -= 32 + (modelsize-24);
|
|
||||||
buffer += 32 + (modelsize-24);
|
|
||||||
if(modelsize > 15*1024)
|
|
||||||
debug("colmodel %s is huge, size %d\n", modelname, modelsize);
|
|
||||||
|
|
||||||
mi = CModelInfo::GetModelInfo(modelname, &modelIndex);
|
|
||||||
if(mi){
|
|
||||||
if(modelIndex == 855)
|
|
||||||
modelIndex = modelIndex;
|
|
||||||
CColStore::IncludeModelIndex(colSlot, modelIndex);
|
|
||||||
CColModel *model = new CColModel;
|
|
||||||
model->level = colSlot;
|
|
||||||
LoadCollisionModel(work_buff, *model, modelname);
|
|
||||||
mi->SetColModel(model, true);
|
|
||||||
}else{
|
|
||||||
debug("colmodel %s can't find a modelinfo\n", modelname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
CFileLoader::LoadCollisionFile(uint8 *buffer, uint32 size, uint8 colSlot)
|
|
||||||
{
|
|
||||||
uint32 modelsize;
|
|
||||||
char modelname[24];
|
|
||||||
CBaseModelInfo *mi;
|
|
||||||
ColHeader *header;
|
|
||||||
|
|
||||||
while(size > 8){
|
|
||||||
header = (ColHeader*)buffer;
|
|
||||||
modelsize = header->size;
|
|
||||||
if(strncmp(header->ident, "COLL", 4) != 0)
|
|
||||||
return size-8 < CDSTREAM_SECTOR_SIZE;
|
|
||||||
memcpy(modelname, buffer+8, 24);
|
|
||||||
memcpy(work_buff, buffer+32, modelsize-24);
|
|
||||||
size -= 32 + (modelsize-24);
|
|
||||||
buffer += 32 + (modelsize-24);
|
|
||||||
if(modelsize > 15*1024)
|
|
||||||
debug("colmodel %s is huge, size %d\n", modelname, modelsize);
|
|
||||||
|
|
||||||
mi = CModelInfo::GetModelInfo(modelname, CColStore::GetSlot(colSlot)->minIndex, CColStore::GetSlot(colSlot)->maxIndex);
|
|
||||||
if(mi){
|
|
||||||
if(mi->GetColModel()){
|
|
||||||
LoadCollisionModel(work_buff, *mi->GetColModel(), modelname);
|
|
||||||
}else{
|
|
||||||
CColModel *model = new CColModel;
|
|
||||||
model->level = colSlot;
|
|
||||||
LoadCollisionModel(work_buff, *model, modelname);
|
|
||||||
mi->SetColModel(model, true);
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
debug("colmodel %s can't find a modelinfo\n", modelname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CFileLoader::LoadCollisionModel(uint8 *buf, CColModel &model, char *modelname)
|
CFileLoader::LoadCollisionModel(uint8 *buf, CColModel &model, char *modelname)
|
||||||
{
|
{
|
||||||
@ -1182,36 +1063,18 @@ CFileLoader::LoadObjectInstance(const char *line)
|
|||||||
CSimpleModelInfo *mi;
|
CSimpleModelInfo *mi;
|
||||||
RwMatrix *xform;
|
RwMatrix *xform;
|
||||||
CEntity *entity;
|
CEntity *entity;
|
||||||
#ifdef MIAMI
|
|
||||||
float area;
|
|
||||||
|
|
||||||
if(sscanf(line, "%d %s %f %f %f %f %f %f %f %f %f %f %f",
|
|
||||||
&id, name, &area,
|
|
||||||
&trans.x, &trans.y, &trans.z,
|
|
||||||
&scale.x, &scale.y, &scale.z,
|
|
||||||
&axis.x, &axis.y, &axis.z, &angle) != 13){
|
|
||||||
#endif
|
|
||||||
if(sscanf(line, "%d %s %f %f %f %f %f %f %f %f %f %f",
|
if(sscanf(line, "%d %s %f %f %f %f %f %f %f %f %f %f",
|
||||||
&id, name,
|
&id, name,
|
||||||
&trans.x, &trans.y, &trans.z,
|
&trans.x, &trans.y, &trans.z,
|
||||||
&scale.x, &scale.y, &scale.z,
|
&scale.x, &scale.y, &scale.z,
|
||||||
&axis.x, &axis.y, &axis.z, &angle) != 12)
|
&axis.x, &axis.y, &axis.z, &angle) != 12)
|
||||||
return;
|
return;
|
||||||
#ifdef MIAMI
|
|
||||||
area = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
mi = (CSimpleModelInfo*)CModelInfo::GetModelInfo(id);
|
mi = (CSimpleModelInfo*)CModelInfo::GetModelInfo(id);
|
||||||
if(mi == nil)
|
if(mi == nil)
|
||||||
return;
|
return;
|
||||||
assert(mi->IsSimple());
|
assert(mi->IsSimple());
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
if(!CStreaming::IsObjectInCdImage(id))
|
|
||||||
debug("Not in cdimage %s\n", mi->GetName());
|
|
||||||
#endif
|
|
||||||
|
|
||||||
angle = -RADTODEG(2.0f * acosf(angle));
|
angle = -RADTODEG(2.0f * acosf(angle));
|
||||||
xform = RwMatrixCreate();
|
xform = RwMatrixCreate();
|
||||||
RwMatrixRotate(xform, &axis, angle, rwCOMBINEREPLACE);
|
RwMatrixRotate(xform, &axis, angle, rwCOMBINEREPLACE);
|
||||||
@ -1226,9 +1089,6 @@ CFileLoader::LoadObjectInstance(const char *line)
|
|||||||
entity->SetModelIndexNoCreate(id);
|
entity->SetModelIndexNoCreate(id);
|
||||||
entity->GetMatrix() = CMatrix(xform);
|
entity->GetMatrix() = CMatrix(xform);
|
||||||
entity->m_level = CTheZones::GetLevelFromPosition(entity->GetPosition());
|
entity->m_level = CTheZones::GetLevelFromPosition(entity->GetPosition());
|
||||||
#ifdef MIAMI
|
|
||||||
entity->m_area = area;
|
|
||||||
#endif
|
|
||||||
if(mi->IsSimple()){
|
if(mi->IsSimple()){
|
||||||
if(mi->m_isBigBuilding)
|
if(mi->m_isBigBuilding)
|
||||||
entity->SetupBigBuilding();
|
entity->SetupBigBuilding();
|
||||||
@ -1238,28 +1098,14 @@ CFileLoader::LoadObjectInstance(const char *line)
|
|||||||
if(mi->GetLargestLodDistance() < 2.0f)
|
if(mi->GetLargestLodDistance() < 2.0f)
|
||||||
entity->bIsVisible = false;
|
entity->bIsVisible = false;
|
||||||
CWorld::Add(entity);
|
CWorld::Add(entity);
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
CColModel *col = entity->GetColModel();
|
|
||||||
if(col->numSpheres || col->numBoxes || col->numTriangles){
|
|
||||||
if(col->level != 0)
|
|
||||||
CColStore::GetBoundingBox(col->level).ContainRect(entity->GetBoundRect());
|
|
||||||
}else
|
|
||||||
entity->bUsesCollision = false;
|
|
||||||
// TODO: set some flag here if col min is below 6
|
|
||||||
#endif
|
|
||||||
}else{
|
}else{
|
||||||
entity = new CDummyObject;
|
entity = new CDummyObject;
|
||||||
entity->SetModelIndexNoCreate(id);
|
entity->SetModelIndexNoCreate(id);
|
||||||
entity->GetMatrix() = CMatrix(xform);
|
entity->GetMatrix() = CMatrix(xform);
|
||||||
CWorld::Add(entity);
|
CWorld::Add(entity);
|
||||||
//--MIAMI: TODO
|
|
||||||
if(IsGlass(entity->GetModelIndex()))
|
if(IsGlass(entity->GetModelIndex()))
|
||||||
entity->bIsVisible = false;
|
entity->bIsVisible = false;
|
||||||
entity->m_level = CTheZones::GetLevelFromPosition(entity->GetPosition());
|
entity->m_level = CTheZones::GetLevelFromPosition(entity->GetPosition());
|
||||||
#ifdef MIAMI
|
|
||||||
entity->m_area = area;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RwMatrixDestroy(xform);
|
RwMatrixDestroy(xform);
|
||||||
|
@ -8,13 +8,7 @@ public:
|
|||||||
static void LoadCollisionFromDatFile(int currlevel);
|
static void LoadCollisionFromDatFile(int currlevel);
|
||||||
static char *LoadLine(int fd);
|
static char *LoadLine(int fd);
|
||||||
static RwTexDictionary *LoadTexDictionary(const char *filename);
|
static RwTexDictionary *LoadTexDictionary(const char *filename);
|
||||||
#ifndef MIAMI
|
|
||||||
static void LoadCollisionFile(const char *filename);
|
static void LoadCollisionFile(const char *filename);
|
||||||
#else
|
|
||||||
static void LoadCollisionFile(const char *filename, uint8 colSlot = 0);
|
|
||||||
static bool LoadCollisionFileFirstTime(uint8 *buffer, uint32 size, uint8 colSlot);
|
|
||||||
static bool LoadCollisionFile(uint8 *buffer, uint32 size, uint8 colSlot);
|
|
||||||
#endif
|
|
||||||
static void LoadCollisionModel(uint8 *buf, struct CColModel &model, char *name);
|
static void LoadCollisionModel(uint8 *buf, struct CColModel &model, char *name);
|
||||||
static void LoadModelFile(const char *filename);
|
static void LoadModelFile(const char *filename);
|
||||||
static RpAtomic *FindRelatedModelInfoCB(RpAtomic *atomic, void *data);
|
static RpAtomic *FindRelatedModelInfoCB(RpAtomic *atomic, void *data);
|
||||||
|
@ -624,10 +624,6 @@ public:
|
|||||||
void LoadAllTextures();
|
void LoadAllTextures();
|
||||||
void LoadSettings();
|
void LoadSettings();
|
||||||
void MessageScreen(const char *);
|
void MessageScreen(const char *);
|
||||||
#ifdef MIAMI
|
|
||||||
//--MIAMI: TODO: implement the second argument
|
|
||||||
void MessageScreen(const char *str, bool) { MessageScreen(str); }
|
|
||||||
#endif
|
|
||||||
void PickNewPlayerColour();
|
void PickNewPlayerColour();
|
||||||
void PrintBriefs();
|
void PrintBriefs();
|
||||||
static void PrintErrorMessage();
|
static void PrintErrorMessage();
|
||||||
|
@ -89,9 +89,6 @@
|
|||||||
|
|
||||||
|
|
||||||
eLevelName CGame::currLevel;
|
eLevelName CGame::currLevel;
|
||||||
#ifdef MIAMI
|
|
||||||
int32 CGame::currArea;
|
|
||||||
#endif
|
|
||||||
bool CGame::bDemoMode = true;
|
bool CGame::bDemoMode = true;
|
||||||
bool CGame::nastyGame = true;
|
bool CGame::nastyGame = true;
|
||||||
bool CGame::frenchGame;
|
bool CGame::frenchGame;
|
||||||
@ -322,9 +319,7 @@ bool CGame::Initialise(const char* datFile)
|
|||||||
CDraw::SetFOV(120.0f);
|
CDraw::SetFOV(120.0f);
|
||||||
CDraw::ms_fLODDistance = 500.0f;
|
CDraw::ms_fLODDistance = 500.0f;
|
||||||
LoadingScreen("Loading the Game", "Setup streaming", nil);
|
LoadingScreen("Loading the Game", "Setup streaming", nil);
|
||||||
#ifndef MIAMI
|
|
||||||
CStreaming::Init();
|
CStreaming::Init();
|
||||||
#endif
|
|
||||||
CStreaming::LoadInitialVehicles();
|
CStreaming::LoadInitialVehicles();
|
||||||
CStreaming::LoadInitialPeds();
|
CStreaming::LoadInitialPeds();
|
||||||
CStreaming::RequestBigBuildings(LEVEL_NONE);
|
CStreaming::RequestBigBuildings(LEVEL_NONE);
|
||||||
@ -372,10 +367,8 @@ bool CGame::Initialise(const char* datFile)
|
|||||||
CWaterCannons::Init();
|
CWaterCannons::Init();
|
||||||
CBridge::Init();
|
CBridge::Init();
|
||||||
CGarages::Init();
|
CGarages::Init();
|
||||||
#ifndef MIAMI
|
|
||||||
LoadingScreen("Loading the Game", "Position dynamic objects", nil);
|
LoadingScreen("Loading the Game", "Position dynamic objects", nil);
|
||||||
CWorld::RepositionCertainDynamicObjects();
|
CWorld::RepositionCertainDynamicObjects();
|
||||||
#endif
|
|
||||||
LoadingScreen("Loading the Game", "Initialise vehicle paths", nil);
|
LoadingScreen("Loading the Game", "Initialise vehicle paths", nil);
|
||||||
#ifdef GTA_ZONECULL
|
#ifdef GTA_ZONECULL
|
||||||
CCullZones::ResolveVisibilities();
|
CCullZones::ResolveVisibilities();
|
||||||
@ -390,9 +383,7 @@ bool CGame::Initialise(const char* datFile)
|
|||||||
CTheScripts::Process();
|
CTheScripts::Process();
|
||||||
TheCamera.Process();
|
TheCamera.Process();
|
||||||
LoadingScreen("Loading the Game", "Load scene", nil);
|
LoadingScreen("Loading the Game", "Load scene", nil);
|
||||||
#ifndef MIAMI
|
|
||||||
CModelInfo::RemoveColModelsFromOtherLevels(currLevel);
|
CModelInfo::RemoveColModelsFromOtherLevels(currLevel);
|
||||||
#endif
|
|
||||||
CCollision::ms_collisionInMemory = currLevel;
|
CCollision::ms_collisionInMemory = currLevel;
|
||||||
for (int i = 0; i < MAX_PADS; i++)
|
for (int i = 0; i < MAX_PADS; i++)
|
||||||
CPad::GetPad(i)->Clear(true);
|
CPad::GetPad(i)->Clear(true);
|
||||||
@ -532,9 +523,7 @@ void CGame::ReloadIPLs(void)
|
|||||||
CRoadBlocks::Init();
|
CRoadBlocks::Init();
|
||||||
CCranes::InitCranes();
|
CCranes::InitCranes();
|
||||||
CGarages::Init();
|
CGarages::Init();
|
||||||
#ifndef MIAMI
|
|
||||||
CWorld::RepositionCertainDynamicObjects();
|
CWorld::RepositionCertainDynamicObjects();
|
||||||
#endif
|
|
||||||
#ifdef GTA_ZONECULL
|
#ifdef GTA_ZONECULL
|
||||||
CCullZones::ResolveVisibilities();
|
CCullZones::ResolveVisibilities();
|
||||||
#endif
|
#endif
|
||||||
|
@ -12,9 +12,6 @@ class CGame
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static eLevelName currLevel;
|
static eLevelName currLevel;
|
||||||
#ifdef MIAMI
|
|
||||||
static int32 currArea;
|
|
||||||
#endif
|
|
||||||
static bool bDemoMode;
|
static bool bDemoMode;
|
||||||
static bool nastyGame;
|
static bool nastyGame;
|
||||||
static bool frenchGame;
|
static bool frenchGame;
|
||||||
|
@ -80,6 +80,4 @@ public:
|
|||||||
|
|
||||||
~CPlayerInfo() { };
|
~CPlayerInfo() { };
|
||||||
};
|
};
|
||||||
#ifndef MIAMI
|
|
||||||
static_assert(sizeof(CPlayerInfo) == 0x13C, "CPlayerInfo: error");
|
static_assert(sizeof(CPlayerInfo) == 0x13C, "CPlayerInfo: error");
|
||||||
#endif
|
|
||||||
|
@ -32,10 +32,6 @@
|
|||||||
#include "Replay.h"
|
#include "Replay.h"
|
||||||
#endif
|
#endif
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#ifdef MIAMI
|
|
||||||
#include "ColStore.h"
|
|
||||||
#include "DMAudio.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool CStreaming::ms_disableStreaming;
|
bool CStreaming::ms_disableStreaming;
|
||||||
bool CStreaming::ms_bLoadingBigModel;
|
bool CStreaming::ms_bLoadingBigModel;
|
||||||
@ -57,9 +53,7 @@ int32 CStreaming::ms_vehiclesLoaded[MAXVEHICLESLOADED];
|
|||||||
int32 CStreaming::ms_lastVehicleDeleted;
|
int32 CStreaming::ms_lastVehicleDeleted;
|
||||||
CDirectory *CStreaming::ms_pExtraObjectsDir;
|
CDirectory *CStreaming::ms_pExtraObjectsDir;
|
||||||
int32 CStreaming::ms_numPriorityRequests;
|
int32 CStreaming::ms_numPriorityRequests;
|
||||||
#ifndef MIAMI
|
|
||||||
bool CStreaming::ms_hasLoadedLODs;
|
bool CStreaming::ms_hasLoadedLODs;
|
||||||
#endif
|
|
||||||
int32 CStreaming::ms_currentPedGrp;
|
int32 CStreaming::ms_currentPedGrp;
|
||||||
int32 CStreaming::ms_currentPedLoading;
|
int32 CStreaming::ms_currentPedLoading;
|
||||||
int32 CStreaming::ms_lastCullZone;
|
int32 CStreaming::ms_lastCullZone;
|
||||||
@ -190,9 +184,7 @@ CStreaming::Init2(void)
|
|||||||
|
|
||||||
ms_pExtraObjectsDir = new CDirectory(EXTRADIRSIZE);
|
ms_pExtraObjectsDir = new CDirectory(EXTRADIRSIZE);
|
||||||
ms_numPriorityRequests = 0;
|
ms_numPriorityRequests = 0;
|
||||||
#ifndef MIAMI
|
|
||||||
ms_hasLoadedLODs = true;
|
ms_hasLoadedLODs = true;
|
||||||
#endif
|
|
||||||
ms_currentPedGrp = -1;
|
ms_currentPedGrp = -1;
|
||||||
ms_lastCullZone = -1; // unused because RemoveModelsNotVisibleFromCullzone is gone
|
ms_lastCullZone = -1; // unused because RemoveModelsNotVisibleFromCullzone is gone
|
||||||
ms_loadedGangs = 0;
|
ms_loadedGangs = 0;
|
||||||
@ -239,7 +231,6 @@ CStreaming::Init2(void)
|
|||||||
CModelInfo::GetModelInfo("IslandLODsubIND", &islandLODsubInd);
|
CModelInfo::GetModelInfo("IslandLODsubIND", &islandLODsubInd);
|
||||||
CModelInfo::GetModelInfo("IslandLODsubCOM", &islandLODsubCom);
|
CModelInfo::GetModelInfo("IslandLODsubCOM", &islandLODsubCom);
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
for(i = CPools::GetBuildingPool()->GetSize()-1; i >= 0; i--){
|
for(i = CPools::GetBuildingPool()->GetSize()-1; i >= 0; i--){
|
||||||
CBuilding *building = CPools::GetBuildingPool()->GetSlot(i);
|
CBuilding *building = CPools::GetBuildingPool()->GetSlot(i);
|
||||||
if(building == nil)
|
if(building == nil)
|
||||||
@ -250,7 +241,6 @@ CStreaming::Init2(void)
|
|||||||
if(building->GetModelIndex() == islandLODsubInd) pIslandLODsubIndEntity = building;
|
if(building->GetModelIndex() == islandLODsubInd) pIslandLODsubIndEntity = building;
|
||||||
if(building->GetModelIndex() == islandLODsubCom) pIslandLODsubComEntity = building;
|
if(building->GetModelIndex() == islandLODsubCom) pIslandLODsubComEntity = building;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -302,35 +292,21 @@ CStreaming::Update(void)
|
|||||||
if(CTimer::GetIsPaused())
|
if(CTimer::GetIsPaused())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
train = FindPlayerTrain();
|
train = FindPlayerTrain();
|
||||||
if(train && train->GetPosition().z < 0.0f){
|
if(train && train->GetPosition().z < 0.0f){
|
||||||
RequestSubway();
|
RequestSubway();
|
||||||
requestedSubway = true;
|
requestedSubway = true;
|
||||||
}else if(!ms_disableStreaming)
|
}else if(!ms_disableStreaming)
|
||||||
AddModelsToRequestList(TheCamera.GetPosition());
|
AddModelsToRequestList(TheCamera.GetPosition());
|
||||||
#else
|
|
||||||
LoadBigBuildingsWhenNeeded();
|
|
||||||
if(!ms_disableStreaming && TheCamera.GetPosition().z < 55.0f)
|
|
||||||
AddModelsToRequestList(TheCamera.GetPosition());
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DeleteFarAwayRwObjects(TheCamera.GetPosition());
|
DeleteFarAwayRwObjects(TheCamera.GetPosition());
|
||||||
|
|
||||||
if(!ms_disableStreaming &&
|
if(!ms_disableStreaming &&
|
||||||
#ifndef MIAMI
|
|
||||||
!CCutsceneMgr::IsRunning() &&
|
!CCutsceneMgr::IsRunning() &&
|
||||||
!requestedSubway &&
|
!requestedSubway &&
|
||||||
!CGame::playingIntro &&
|
!CGame::playingIntro &&
|
||||||
#else
|
|
||||||
!CCutsceneMgr::IsCutsceneProcessing() &&
|
|
||||||
#endif
|
|
||||||
ms_numModelsRequested < 5 &&
|
ms_numModelsRequested < 5 &&
|
||||||
!CRenderer::m_loadingPriority
|
!CRenderer::m_loadingPriority
|
||||||
#ifdef MIAMI
|
|
||||||
&& CGame::currArea == 0
|
|
||||||
// replay is also MIAMI
|
|
||||||
#endif
|
|
||||||
#ifdef FIX_BUGS
|
#ifdef FIX_BUGS
|
||||||
&& !CReplay::IsPlayingBack()
|
&& !CReplay::IsPlayingBack()
|
||||||
#endif
|
#endif
|
||||||
@ -341,16 +317,6 @@ CStreaming::Update(void)
|
|||||||
|
|
||||||
LoadRequestedModels();
|
LoadRequestedModels();
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
if(CWorld::Players[0].m_pRemoteVehicle){
|
|
||||||
CColStore::AddCollisionNeededAtPosn(FindPlayerCoors());
|
|
||||||
CColStore::LoadCollision(CWorld::Players[0].m_pRemoteVehicle->GetPosition());
|
|
||||||
CColStore::EnsureCollisionIsInMemory(CWorld::Players[0].m_pRemoteVehicle->GetPosition());
|
|
||||||
}else{
|
|
||||||
CColStore::LoadCollision(FindPlayerCoors());
|
|
||||||
CColStore::EnsureCollisionIsInMemory(FindPlayerCoors());
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for(si = ms_endRequestedList.m_prev; si != &ms_startRequestedList; si = prev){
|
for(si = ms_endRequestedList.m_prev; si != &ms_startRequestedList; si = prev){
|
||||||
prev = si->m_prev;
|
prev = si->m_prev;
|
||||||
@ -409,7 +375,6 @@ CStreaming::LoadCdDirectory(const char *dirname, int n)
|
|||||||
imgSelector = n<<24;
|
imgSelector = n<<24;
|
||||||
assert(sizeof(direntry) == 32);
|
assert(sizeof(direntry) == 32);
|
||||||
while(CFileMgr::Read(fd, (char*)&direntry, sizeof(direntry))){
|
while(CFileMgr::Read(fd, (char*)&direntry, sizeof(direntry))){
|
||||||
#ifndef MIAMI
|
|
||||||
dot = strchr(direntry.name, '.');
|
dot = strchr(direntry.name, '.');
|
||||||
if(dot) *dot = '\0';
|
if(dot) *dot = '\0';
|
||||||
if(direntry.size > (uint32)ms_streamingBufferSize)
|
if(direntry.size > (uint32)ms_streamingBufferSize)
|
||||||
@ -452,64 +417,6 @@ CStreaming::LoadCdDirectory(const char *dirname, int n)
|
|||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
lastID = -1;
|
lastID = -1;
|
||||||
#else
|
|
||||||
bool bAddToStreaming = false;
|
|
||||||
|
|
||||||
if(direntry.size > (uint32)ms_streamingBufferSize)
|
|
||||||
ms_streamingBufferSize = direntry.size;
|
|
||||||
direntry.name[23] = '\0';
|
|
||||||
dot = strchr(direntry.name, '.');
|
|
||||||
if(dot == nil || dot-direntry.name > 20){
|
|
||||||
debug("%s is too long\n", direntry.name);
|
|
||||||
lastID = -1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
*dot = '\0';
|
|
||||||
|
|
||||||
if(!CGeneral::faststricmp(dot+1, "DFF")){
|
|
||||||
if(CModelInfo::GetModelInfo(direntry.name, &modelId)){
|
|
||||||
bAddToStreaming = true;
|
|
||||||
}else{
|
|
||||||
#ifdef FIX_BUGS
|
|
||||||
// remember which cdimage this came from
|
|
||||||
ms_pExtraObjectsDir->AddItem(direntry, n);
|
|
||||||
#else
|
|
||||||
ms_pExtraObjectsDir->AddItem(direntry);
|
|
||||||
#endif
|
|
||||||
lastID = -1;
|
|
||||||
}
|
|
||||||
}else if(!CGeneral::faststricmp(dot+1, "TXD")){
|
|
||||||
modelId = CTxdStore::FindTxdSlot(direntry.name);
|
|
||||||
if(modelId == -1)
|
|
||||||
modelId = CTxdStore::AddTxdSlot(direntry.name);
|
|
||||||
modelId += STREAM_OFFSET_TXD;
|
|
||||||
bAddToStreaming = true;
|
|
||||||
}else if(!CGeneral::faststricmp(dot+1, "COL")){
|
|
||||||
modelId = CColStore::FindColSlot(direntry.name);
|
|
||||||
if(modelId == -1)
|
|
||||||
modelId = CColStore::AddColSlot(direntry.name);
|
|
||||||
modelId += STREAM_OFFSET_COL;
|
|
||||||
bAddToStreaming = true;
|
|
||||||
// TODO: IFP
|
|
||||||
}else{
|
|
||||||
*dot = '.';
|
|
||||||
lastID = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(bAddToStreaming){
|
|
||||||
if(ms_aInfoForModel[modelId].GetCdSize()){
|
|
||||||
debug("%s.%s appears more than once in %s\n", direntry.name, dot+1, dirname);
|
|
||||||
lastID = -1;
|
|
||||||
}else{
|
|
||||||
direntry.offset |= imgSelector;
|
|
||||||
ms_aInfoForModel[modelId].SetCdPosnAndSize(direntry.offset, direntry.size);
|
|
||||||
if(lastID != -1)
|
|
||||||
ms_aInfoForModel[lastID].m_nextID = modelId;
|
|
||||||
lastID = modelId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CFileMgr::CloseFile(fd);
|
CFileMgr::CloseFile(fd);
|
||||||
@ -533,7 +440,6 @@ CStreaming::ConvertBufferToObject(int8 *buf, int32 streamId)
|
|||||||
stream = RwStreamOpen(rwSTREAMMEMORY, rwSTREAMREAD, &mem);
|
stream = RwStreamOpen(rwSTREAMMEMORY, rwSTREAMREAD, &mem);
|
||||||
|
|
||||||
if(streamId < STREAM_OFFSET_TXD){
|
if(streamId < STREAM_OFFSET_TXD){
|
||||||
//--MIAMI: also check animation
|
|
||||||
// Model
|
// Model
|
||||||
mi = CModelInfo::GetModelInfo(streamId);
|
mi = CModelInfo::GetModelInfo(streamId);
|
||||||
|
|
||||||
@ -575,11 +481,7 @@ CStreaming::ConvertBufferToObject(int8 *buf, int32 streamId)
|
|||||||
RwStreamClose(stream, &mem);
|
RwStreamClose(stream, &mem);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#ifndef MIAMI
|
|
||||||
}else{
|
}else{
|
||||||
#else
|
|
||||||
}else if(streamId >= STREAM_OFFSET_TXD && streamId < STREAM_OFFSET_COL){
|
|
||||||
#endif
|
|
||||||
// Txd
|
// Txd
|
||||||
assert(streamId < NUMSTREAMINFO);
|
assert(streamId < NUMSTREAMINFO);
|
||||||
if((ms_aInfoForModel[streamId].m_flags & STREAMFLAGS_KEEP_IN_MEMORY) == 0 &&
|
if((ms_aInfoForModel[streamId].m_flags & STREAMFLAGS_KEEP_IN_MEMORY) == 0 &&
|
||||||
@ -604,22 +506,10 @@ CStreaming::ConvertBufferToObject(int8 *buf, int32 streamId)
|
|||||||
RwStreamClose(stream, &mem);
|
RwStreamClose(stream, &mem);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#ifdef MIAMI
|
|
||||||
}else if(streamId >= STREAM_OFFSET_COL && streamId < NUMSTREAMINFO){
|
|
||||||
if(!CColStore::LoadCol(streamId-STREAM_OFFSET_COL, mem.start, mem.length)){
|
|
||||||
debug("Failed to load %s.col\n", CColStore::GetColName(streamId - STREAM_OFFSET_COL));
|
|
||||||
RemoveModel(streamId);
|
|
||||||
ReRequestModel(streamId);
|
|
||||||
RwStreamClose(stream, &mem);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// TODO: IFPs
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RwStreamClose(stream, &mem);
|
RwStreamClose(stream, &mem);
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
// We shouldn't even end up here unless load was successful
|
// We shouldn't even end up here unless load was successful
|
||||||
if(!success){
|
if(!success){
|
||||||
ReRequestModel(streamId);
|
ReRequestModel(streamId);
|
||||||
@ -629,7 +519,6 @@ CStreaming::ConvertBufferToObject(int8 *buf, int32 streamId)
|
|||||||
debug("Failed to load %s.txd\n", CTxdStore::GetTxdName(streamId - STREAM_OFFSET_TXD));
|
debug("Failed to load %s.txd\n", CTxdStore::GetTxdName(streamId - STREAM_OFFSET_TXD));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if(streamId < STREAM_OFFSET_TXD){
|
if(streamId < STREAM_OFFSET_TXD){
|
||||||
// Model
|
// Model
|
||||||
@ -648,11 +537,7 @@ CStreaming::ConvertBufferToObject(int8 *buf, int32 streamId)
|
|||||||
if((ms_aInfoForModel[streamId].m_flags & STREAMFLAGS_CANT_REMOVE) == 0)
|
if((ms_aInfoForModel[streamId].m_flags & STREAMFLAGS_CANT_REMOVE) == 0)
|
||||||
ms_aInfoForModel[streamId].AddToList(&ms_startLoadedList);
|
ms_aInfoForModel[streamId].AddToList(&ms_startLoadedList);
|
||||||
}
|
}
|
||||||
#ifndef MIAMI
|
|
||||||
}else{
|
}else{
|
||||||
#else
|
|
||||||
}else if(streamId >= STREAM_OFFSET_TXD && streamId < STREAM_OFFSET_COL){ // TODO: animations
|
|
||||||
#endif
|
|
||||||
// Txd
|
// Txd
|
||||||
if((ms_aInfoForModel[streamId].m_flags & STREAMFLAGS_CANT_REMOVE) == 0)
|
if((ms_aInfoForModel[streamId].m_flags & STREAMFLAGS_CANT_REMOVE) == 0)
|
||||||
ms_aInfoForModel[streamId].AddToList(&ms_startLoadedList);
|
ms_aInfoForModel[streamId].AddToList(&ms_startLoadedList);
|
||||||
@ -667,23 +552,10 @@ CStreaming::ConvertBufferToObject(int8 *buf, int32 streamId)
|
|||||||
endTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond();
|
endTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond();
|
||||||
timeDiff = endTime - startTime;
|
timeDiff = endTime - startTime;
|
||||||
if(timeDiff > 5){
|
if(timeDiff > 5){
|
||||||
#ifndef MIAMI
|
|
||||||
if(streamId < STREAM_OFFSET_TXD)
|
if(streamId < STREAM_OFFSET_TXD)
|
||||||
debug("model %s took %d ms\n", CModelInfo::GetModelInfo(streamId)->GetName(), timeDiff);
|
debug("model %s took %d ms\n", CModelInfo::GetModelInfo(streamId)->GetName(), timeDiff);
|
||||||
else
|
else
|
||||||
debug("txd %s took %d ms\n", CTxdStore::GetTxdName(streamId - STREAM_OFFSET_TXD), timeDiff);
|
debug("txd %s took %d ms\n", CTxdStore::GetTxdName(streamId - STREAM_OFFSET_TXD), timeDiff);
|
||||||
#else
|
|
||||||
// TODO: is this inlined?
|
|
||||||
static char objname[32];
|
|
||||||
if(streamId < STREAM_OFFSET_TXD)
|
|
||||||
sprintf(objname, "%s.dff", CModelInfo::GetModelInfo(streamId)->GetName());
|
|
||||||
else if(streamId >= STREAM_OFFSET_TXD && streamId < STREAM_OFFSET_COL)
|
|
||||||
sprintf(objname, "%s.txd", CTxdStore::GetTxdName(streamId-STREAM_OFFSET_TXD));
|
|
||||||
else if(streamId >= STREAM_OFFSET_COL && streamId < NUMSTREAMINFO)
|
|
||||||
sprintf(objname, "%s.col", CColStore::GetColName(streamId-STREAM_OFFSET_COL));
|
|
||||||
// TODO: IFP
|
|
||||||
debug("%s took %d ms\n", objname, timeDiff);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -841,11 +713,7 @@ CStreaming::RequestSubway(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
#define BIGBUILDINGFLAGS STREAMFLAGS_DONT_REMOVE|STREAMFLAGS_PRIORITY
|
#define BIGBUILDINGFLAGS STREAMFLAGS_DONT_REMOVE|STREAMFLAGS_PRIORITY
|
||||||
#else
|
|
||||||
#define BIGBUILDINGFLAGS STREAMFLAGS_DONT_REMOVE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CStreaming::RequestBigBuildings(eLevelName level)
|
CStreaming::RequestBigBuildings(eLevelName level)
|
||||||
@ -857,54 +725,12 @@ CStreaming::RequestBigBuildings(eLevelName level)
|
|||||||
for(i = n; i >= 0; i--){
|
for(i = n; i >= 0; i--){
|
||||||
b = CPools::GetBuildingPool()->GetSlot(i);
|
b = CPools::GetBuildingPool()->GetSlot(i);
|
||||||
if(b && b->bIsBIGBuilding && b->m_level == level)
|
if(b && b->bIsBIGBuilding && b->m_level == level)
|
||||||
#ifdef MIAMI
|
|
||||||
if(!b->bStreamBIGBuilding)
|
|
||||||
#endif
|
|
||||||
RequestModel(b->GetModelIndex(), BIGBUILDINGFLAGS);
|
RequestModel(b->GetModelIndex(), BIGBUILDINGFLAGS);
|
||||||
}
|
}
|
||||||
RequestIslands(level);
|
RequestIslands(level);
|
||||||
#ifndef MIAMI
|
|
||||||
ms_hasLoadedLODs = false;
|
ms_hasLoadedLODs = false;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
void
|
|
||||||
CStreaming::RequestBigBuildings(eLevelName level, const CVector &pos)
|
|
||||||
{
|
|
||||||
int i, n;
|
|
||||||
CBuilding *b;
|
|
||||||
|
|
||||||
n = CPools::GetBuildingPool()->GetSize()-1;
|
|
||||||
for(i = n; i >= 0; i--){
|
|
||||||
b = CPools::GetBuildingPool()->GetSlot(i);
|
|
||||||
if(b && b->bIsBIGBuilding && b->m_level == level)
|
|
||||||
if(b->bStreamBIGBuilding){
|
|
||||||
if(CRenderer::ShouldModelBeStreamed(b))
|
|
||||||
RequestModel(b->GetModelIndex(), 0);
|
|
||||||
}else
|
|
||||||
RequestModel(b->GetModelIndex(), BIGBUILDINGFLAGS);
|
|
||||||
}
|
|
||||||
RequestIslands(level);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
CStreaming::InstanceBigBuildings(eLevelName level, const CVector &pos)
|
|
||||||
{
|
|
||||||
int i, n;
|
|
||||||
CBuilding *b;
|
|
||||||
|
|
||||||
n = CPools::GetBuildingPool()->GetSize()-1;
|
|
||||||
for(i = n; i >= 0; i--){
|
|
||||||
b = CPools::GetBuildingPool()->GetSlot(i);
|
|
||||||
if(b && b->bIsBIGBuilding && b->m_level == level &&
|
|
||||||
b->bStreamBIGBuilding && b->m_rwObject == nil)
|
|
||||||
if(CRenderer::ShouldModelBeStreamed(b))
|
|
||||||
b->CreateRwObject();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CStreaming::RequestIslands(eLevelName level)
|
CStreaming::RequestIslands(eLevelName level)
|
||||||
{
|
{
|
||||||
@ -1002,20 +828,10 @@ CStreaming::RemoveModel(int32 id)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if(ms_aInfoForModel[id].m_loadState == STREAMSTATE_LOADED){
|
if(ms_aInfoForModel[id].m_loadState == STREAMSTATE_LOADED){
|
||||||
#ifndef MIAMI
|
|
||||||
if(id < STREAM_OFFSET_TXD)
|
if(id < STREAM_OFFSET_TXD)
|
||||||
CModelInfo::GetModelInfo(id)->DeleteRwObject();
|
CModelInfo::GetModelInfo(id)->DeleteRwObject();
|
||||||
else
|
else
|
||||||
CTxdStore::RemoveTxd(id - STREAM_OFFSET_TXD);
|
CTxdStore::RemoveTxd(id - STREAM_OFFSET_TXD);
|
||||||
#else
|
|
||||||
if(id < STREAM_OFFSET_TXD)
|
|
||||||
CModelInfo::GetModelInfo(id)->DeleteRwObject();
|
|
||||||
else if(id >= STREAM_OFFSET_TXD && id < STREAM_OFFSET_COL)
|
|
||||||
CTxdStore::RemoveTxd(id - STREAM_OFFSET_TXD);
|
|
||||||
else if(id >= STREAM_OFFSET_COL && id < NUMSTREAMINFO)
|
|
||||||
CColStore::RemoveCol(id - STREAM_OFFSET_COL);
|
|
||||||
// TODO: IFP
|
|
||||||
#endif
|
|
||||||
ms_memoryUsed -= ms_aInfoForModel[id].GetCdSize()*CDSTREAM_SECTOR_SIZE;
|
ms_memoryUsed -= ms_aInfoForModel[id].GetCdSize()*CDSTREAM_SECTOR_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1034,26 +850,15 @@ CStreaming::RemoveModel(int32 id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(ms_aInfoForModel[id].m_loadState == STREAMSTATE_STARTED){
|
if(ms_aInfoForModel[id].m_loadState == STREAMSTATE_STARTED){
|
||||||
#ifndef MIAMI
|
|
||||||
if(id < STREAM_OFFSET_TXD)
|
if(id < STREAM_OFFSET_TXD)
|
||||||
RpClumpGtaCancelStream();
|
RpClumpGtaCancelStream();
|
||||||
else
|
else
|
||||||
CTxdStore::RemoveTxd(id - STREAM_OFFSET_TXD);
|
CTxdStore::RemoveTxd(id - STREAM_OFFSET_TXD);
|
||||||
#else
|
|
||||||
if(id < STREAM_OFFSET_TXD)
|
|
||||||
RpClumpGtaCancelStream();
|
|
||||||
else if(id >= STREAM_OFFSET_TXD && id < STREAM_OFFSET_COL)
|
|
||||||
CTxdStore::RemoveTxd(id - STREAM_OFFSET_TXD);
|
|
||||||
else if(id >= STREAM_OFFSET_COL && id < NUMSTREAMINFO)
|
|
||||||
CColStore::RemoveCol(id - STREAM_OFFSET_COL);
|
|
||||||
// TODO: IFP
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ms_aInfoForModel[id].m_loadState = STREAMSTATE_NOTLOADED;
|
ms_aInfoForModel[id].m_loadState = STREAMSTATE_NOTLOADED;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: change islands
|
|
||||||
void
|
void
|
||||||
CStreaming::RemoveUnusedBuildings(eLevelName level)
|
CStreaming::RemoveUnusedBuildings(eLevelName level)
|
||||||
{
|
{
|
||||||
@ -1065,7 +870,6 @@ CStreaming::RemoveUnusedBuildings(eLevelName level)
|
|||||||
RemoveBuildings(LEVEL_SUBURBAN);
|
RemoveBuildings(LEVEL_SUBURBAN);
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void
|
void
|
||||||
CStreaming::RemoveBuildings(eLevelName level)
|
CStreaming::RemoveBuildings(eLevelName level)
|
||||||
{
|
{
|
||||||
@ -1126,7 +930,6 @@ CStreaming::RemoveBuildings(eLevelName level)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: change islands
|
|
||||||
void
|
void
|
||||||
CStreaming::RemoveUnusedBigBuildings(eLevelName level)
|
CStreaming::RemoveUnusedBigBuildings(eLevelName level)
|
||||||
{
|
{
|
||||||
@ -1155,21 +958,6 @@ DeleteIsland(CEntity *island)
|
|||||||
void
|
void
|
||||||
CStreaming::RemoveIslandsNotUsed(eLevelName level)
|
CStreaming::RemoveIslandsNotUsed(eLevelName level)
|
||||||
{
|
{
|
||||||
#ifdef MIAMI
|
|
||||||
int i;
|
|
||||||
if(pIslandLODindustEntity == nil)
|
|
||||||
for(i = CPools::GetBuildingPool()->GetSize()-1; i >= 0; i--){
|
|
||||||
CBuilding *building = CPools::GetBuildingPool()->GetSlot(i);
|
|
||||||
if(building == nil)
|
|
||||||
continue;
|
|
||||||
if(building->GetModelIndex() == islandLODindust) pIslandLODindustEntity = building;
|
|
||||||
if(building->GetModelIndex() == islandLODcomInd) pIslandLODcomIndEntity = building;
|
|
||||||
if(building->GetModelIndex() == islandLODcomSub) pIslandLODcomSubEntity = building;
|
|
||||||
if(building->GetModelIndex() == islandLODsubInd) pIslandLODsubIndEntity = building;
|
|
||||||
if(building->GetModelIndex() == islandLODsubCom) pIslandLODsubComEntity = building;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
switch(level){
|
switch(level){
|
||||||
case LEVEL_INDUSTRIAL:
|
case LEVEL_INDUSTRIAL:
|
||||||
DeleteIsland(pIslandLODindustEntity);
|
DeleteIsland(pIslandLODindustEntity);
|
||||||
@ -1196,7 +984,6 @@ CStreaming::RemoveIslandsNotUsed(eLevelName level)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--MIAMI: done
|
|
||||||
void
|
void
|
||||||
CStreaming::RemoveBigBuildings(eLevelName level)
|
CStreaming::RemoveBigBuildings(eLevelName level)
|
||||||
{
|
{
|
||||||
@ -1400,7 +1187,6 @@ CStreaming::IsObjectInCdImage(int32 id)
|
|||||||
return ms_aInfoForModel[id].GetCdPosnAndSize(posn, size);
|
return ms_aInfoForModel[id].GetCdPosnAndSize(posn, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
void
|
void
|
||||||
CStreaming::HaveAllBigBuildingsLoaded(eLevelName level)
|
CStreaming::HaveAllBigBuildingsLoaded(eLevelName level)
|
||||||
{
|
{
|
||||||
@ -1435,7 +1221,6 @@ CStreaming::HaveAllBigBuildingsLoaded(eLevelName level)
|
|||||||
RemoveUnusedBigBuildings(level);
|
RemoveUnusedBigBuildings(level);
|
||||||
ms_hasLoadedLODs = true;
|
ms_hasLoadedLODs = true;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CStreaming::SetModelIsDeletable(int32 id)
|
CStreaming::SetModelIsDeletable(int32 id)
|
||||||
@ -1669,44 +1454,6 @@ CStreaming::RemoveCurrentZonesModels(void)
|
|||||||
ms_loadedGangCars = 0;
|
ms_loadedGangCars = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
void
|
|
||||||
CStreaming::LoadBigBuildingsWhenNeeded(void)
|
|
||||||
{
|
|
||||||
// Very much like CCollision::Update and CCollision::LoadCollisionWhenINeedIt
|
|
||||||
if(CCutsceneMgr::IsCutsceneProcessing())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(CTheZones::m_CurrLevel == LEVEL_NONE ||
|
|
||||||
CTheZones::m_CurrLevel == CGame::currLevel)
|
|
||||||
return;
|
|
||||||
|
|
||||||
CTimer::Suspend();
|
|
||||||
CGame::currLevel = CTheZones::m_CurrLevel;
|
|
||||||
DMAudio.SetEffectsFadeVol(0);
|
|
||||||
CPad::StopPadsShaking();
|
|
||||||
CCollision::LoadCollisionScreen(CGame::currLevel);
|
|
||||||
DMAudio.Service();
|
|
||||||
|
|
||||||
// CPopulation::DealWithZoneChange is unused in VC
|
|
||||||
RemoveUnusedBigBuildings(CGame::currLevel);
|
|
||||||
RemoveUnusedBuildings(CGame::currLevel);
|
|
||||||
RemoveUnusedModelsInLoadedList();
|
|
||||||
CGame::TidyUpMemory(true, true);
|
|
||||||
|
|
||||||
CReplay::EmptyReplayBuffer();
|
|
||||||
if(CGame::currLevel != LEVEL_NONE)
|
|
||||||
LoadSplash(GetLevelSplashScreen(CGame::currLevel));
|
|
||||||
|
|
||||||
CStreaming::RequestBigBuildings(CGame::currLevel, TheCamera.GetPosition());
|
|
||||||
CStreaming::LoadAllRequestedModels(true);
|
|
||||||
|
|
||||||
CGame::TidyUpMemory(true, true);
|
|
||||||
CTimer::Resume();
|
|
||||||
DMAudio.SetEffectsFadeVol(127);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// Find starting offset of the cdimage we next want to read
|
// Find starting offset of the cdimage we next want to read
|
||||||
// Not useful at all on PC...
|
// Not useful at all on PC...
|
||||||
@ -2691,33 +2438,11 @@ CStreaming::LoadScene(const CVector &pos)
|
|||||||
CCullZones::ForceCullZoneCoors(pos);
|
CCullZones::ForceCullZoneCoors(pos);
|
||||||
#endif
|
#endif
|
||||||
DeleteAllRwObjects();
|
DeleteAllRwObjects();
|
||||||
#ifndef MIAMI
|
|
||||||
AddModelsToRequestList(pos);
|
AddModelsToRequestList(pos);
|
||||||
CRadar::StreamRadarSections(pos);
|
CRadar::StreamRadarSections(pos);
|
||||||
RemoveUnusedBigBuildings(level);
|
RemoveUnusedBigBuildings(level);
|
||||||
RequestBigBuildings(level);
|
RequestBigBuildings(level);
|
||||||
LoadAllRequestedModels(false);
|
LoadAllRequestedModels(false);
|
||||||
#else
|
|
||||||
if(level == LEVEL_NONE)
|
|
||||||
level = CGame::currLevel;
|
|
||||||
CGame::currLevel = level;
|
|
||||||
RemoveUnusedBigBuildings(level);
|
|
||||||
RequestBigBuildings(level, pos);
|
|
||||||
RequestBigBuildings(LEVEL_NONE, pos);
|
|
||||||
RemoveIslandsNotUsed(level);
|
|
||||||
LoadAllRequestedModels(false);
|
|
||||||
InstanceBigBuildings(level, pos);
|
|
||||||
InstanceBigBuildings(LEVEL_NONE, pos);
|
|
||||||
AddModelsToRequestList(pos);
|
|
||||||
CRadar::StreamRadarSections(pos);
|
|
||||||
|
|
||||||
// TODO: stream zone vehicles
|
|
||||||
LoadAllRequestedModels(false);
|
|
||||||
// TODO: InstanceLoadedModels
|
|
||||||
|
|
||||||
for(int i = 0; i < NUMSTREAMINFO; i++)
|
|
||||||
ms_aInfoForModel[i].m_flags &= ~STREAMFLAGS_20;
|
|
||||||
#endif
|
|
||||||
debug("End load scene\n");
|
debug("End load scene\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,12 +4,7 @@
|
|||||||
|
|
||||||
enum {
|
enum {
|
||||||
STREAM_OFFSET_TXD = MODELINFOSIZE,
|
STREAM_OFFSET_TXD = MODELINFOSIZE,
|
||||||
#ifndef MIAMI
|
|
||||||
NUMSTREAMINFO = STREAM_OFFSET_TXD+TXDSTORESIZE
|
NUMSTREAMINFO = STREAM_OFFSET_TXD+TXDSTORESIZE
|
||||||
#else
|
|
||||||
STREAM_OFFSET_COL = STREAM_OFFSET_TXD+TXDSTORESIZE,
|
|
||||||
NUMSTREAMINFO = STREAM_OFFSET_COL+COLSTORESIZE
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum StreamFlags
|
enum StreamFlags
|
||||||
@ -19,9 +14,6 @@ enum StreamFlags
|
|||||||
STREAMFLAGS_DEPENDENCY = 0x04, // Is this right?
|
STREAMFLAGS_DEPENDENCY = 0x04, // Is this right?
|
||||||
STREAMFLAGS_PRIORITY = 0x08,
|
STREAMFLAGS_PRIORITY = 0x08,
|
||||||
STREAMFLAGS_NOFADE = 0x10,
|
STREAMFLAGS_NOFADE = 0x10,
|
||||||
#ifdef MIAMI
|
|
||||||
STREAMFLAGS_20 = 0x20,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
STREAMFLAGS_CANT_REMOVE = STREAMFLAGS_DONT_REMOVE|STREAMFLAGS_SCRIPTOWNED,
|
STREAMFLAGS_CANT_REMOVE = STREAMFLAGS_DONT_REMOVE|STREAMFLAGS_SCRIPTOWNED,
|
||||||
STREAMFLAGS_KEEP_IN_MEMORY = STREAMFLAGS_DONT_REMOVE|STREAMFLAGS_SCRIPTOWNED|STREAMFLAGS_DEPENDENCY,
|
STREAMFLAGS_KEEP_IN_MEMORY = STREAMFLAGS_DONT_REMOVE|STREAMFLAGS_SCRIPTOWNED|STREAMFLAGS_DEPENDENCY,
|
||||||
@ -102,9 +94,7 @@ public:
|
|||||||
static int32 ms_lastVehicleDeleted;
|
static int32 ms_lastVehicleDeleted;
|
||||||
static CDirectory *ms_pExtraObjectsDir;
|
static CDirectory *ms_pExtraObjectsDir;
|
||||||
static int32 ms_numPriorityRequests;
|
static int32 ms_numPriorityRequests;
|
||||||
#ifndef MIAMI
|
|
||||||
static bool ms_hasLoadedLODs;
|
static bool ms_hasLoadedLODs;
|
||||||
#endif
|
|
||||||
static int32 ms_currentPedGrp;
|
static int32 ms_currentPedGrp;
|
||||||
static int32 ms_lastCullZone;
|
static int32 ms_lastCullZone;
|
||||||
static uint16 ms_loadedGangs;
|
static uint16 ms_loadedGangs;
|
||||||
@ -125,28 +115,14 @@ public:
|
|||||||
static bool FinishLoadingLargeFile(int8 *buf, int32 streamId);
|
static bool FinishLoadingLargeFile(int8 *buf, int32 streamId);
|
||||||
static bool HasModelLoaded(int32 id) { return ms_aInfoForModel[id].m_loadState == STREAMSTATE_LOADED; }
|
static bool HasModelLoaded(int32 id) { return ms_aInfoForModel[id].m_loadState == STREAMSTATE_LOADED; }
|
||||||
static bool HasTxdLoaded(int32 id) { return HasModelLoaded(id+STREAM_OFFSET_TXD); }
|
static bool HasTxdLoaded(int32 id) { return HasModelLoaded(id+STREAM_OFFSET_TXD); }
|
||||||
#ifdef MIAMI
|
|
||||||
static bool HasColLoaded(int32 id) { return HasModelLoaded(id+STREAM_OFFSET_COL); }
|
|
||||||
#endif
|
|
||||||
static bool CanRemoveModel(int32 id) { return (ms_aInfoForModel[id].m_flags & STREAMFLAGS_CANT_REMOVE) == 0; }
|
static bool CanRemoveModel(int32 id) { return (ms_aInfoForModel[id].m_flags & STREAMFLAGS_CANT_REMOVE) == 0; }
|
||||||
static bool CanRemoveTxd(int32 id) { return CanRemoveModel(id+STREAM_OFFSET_TXD); }
|
static bool CanRemoveTxd(int32 id) { return CanRemoveModel(id+STREAM_OFFSET_TXD); }
|
||||||
#ifdef MIAMI
|
|
||||||
static bool CanRemoveCol(int32 id) { return CanRemoveModel(id+STREAM_OFFSET_COL); }
|
|
||||||
#endif
|
|
||||||
static void RequestModel(int32 model, int32 flags);
|
static void RequestModel(int32 model, int32 flags);
|
||||||
static void ReRequestModel(int32 model) { RequestModel(model, ms_aInfoForModel[model].m_flags); }
|
static void ReRequestModel(int32 model) { RequestModel(model, ms_aInfoForModel[model].m_flags); }
|
||||||
static void RequestTxd(int32 txd, int32 flags) { RequestModel(txd + STREAM_OFFSET_TXD, flags); }
|
static void RequestTxd(int32 txd, int32 flags) { RequestModel(txd + STREAM_OFFSET_TXD, flags); }
|
||||||
static void ReRequestTxd(int32 txd) { ReRequestModel(txd + STREAM_OFFSET_TXD); }
|
static void ReRequestTxd(int32 txd) { ReRequestModel(txd + STREAM_OFFSET_TXD); }
|
||||||
#ifdef MIAMI
|
|
||||||
static void RequestCol(int32 col, int32 flags) { RequestModel(col + STREAM_OFFSET_COL, flags); }
|
|
||||||
static void ReRequestCol(int32 col) { ReRequestModel(col + STREAM_OFFSET_COL); }
|
|
||||||
#endif
|
|
||||||
static void RequestSubway(void);
|
static void RequestSubway(void);
|
||||||
static void RequestBigBuildings(eLevelName level);
|
static void RequestBigBuildings(eLevelName level);
|
||||||
#ifdef MIAMI
|
|
||||||
static void RequestBigBuildings(eLevelName level, const CVector &pos);
|
|
||||||
static void InstanceBigBuildings(eLevelName level, const CVector &pos);
|
|
||||||
#endif
|
|
||||||
static void RequestIslands(eLevelName level);
|
static void RequestIslands(eLevelName level);
|
||||||
static void RequestSpecialModel(int32 modelId, const char *modelName, int32 flags);
|
static void RequestSpecialModel(int32 modelId, const char *modelName, int32 flags);
|
||||||
static void RequestSpecialChar(int32 charId, const char *modelName, int32 flags);
|
static void RequestSpecialChar(int32 charId, const char *modelName, int32 flags);
|
||||||
@ -155,9 +131,6 @@ public:
|
|||||||
static void DecrementRef(int32 id);
|
static void DecrementRef(int32 id);
|
||||||
static void RemoveModel(int32 id);
|
static void RemoveModel(int32 id);
|
||||||
static void RemoveTxd(int32 id) { RemoveModel(id + STREAM_OFFSET_TXD); }
|
static void RemoveTxd(int32 id) { RemoveModel(id + STREAM_OFFSET_TXD); }
|
||||||
#ifdef MIAMI
|
|
||||||
static void RemoveCol(int32 id) { RemoveModel(id + STREAM_OFFSET_COL); }
|
|
||||||
#endif
|
|
||||||
static void RemoveUnusedBuildings(eLevelName level);
|
static void RemoveUnusedBuildings(eLevelName level);
|
||||||
static void RemoveBuildings(eLevelName level);
|
static void RemoveBuildings(eLevelName level);
|
||||||
static void RemoveUnusedBigBuildings(eLevelName level);
|
static void RemoveUnusedBigBuildings(eLevelName level);
|
||||||
@ -172,9 +145,7 @@ public:
|
|||||||
static bool IsTxdUsedByRequestedModels(int32 txdId);
|
static bool IsTxdUsedByRequestedModels(int32 txdId);
|
||||||
static bool AddToLoadedVehiclesList(int32 modelId);
|
static bool AddToLoadedVehiclesList(int32 modelId);
|
||||||
static bool IsObjectInCdImage(int32 id);
|
static bool IsObjectInCdImage(int32 id);
|
||||||
#ifndef MIAMI
|
|
||||||
static void HaveAllBigBuildingsLoaded(eLevelName level);
|
static void HaveAllBigBuildingsLoaded(eLevelName level);
|
||||||
#endif
|
|
||||||
static void SetModelIsDeletable(int32 id);
|
static void SetModelIsDeletable(int32 id);
|
||||||
static void SetModelTxdIsDeletable(int32 id);
|
static void SetModelTxdIsDeletable(int32 id);
|
||||||
static void SetMissionDoesntRequireModel(int32 id);
|
static void SetMissionDoesntRequireModel(int32 id);
|
||||||
@ -183,9 +154,6 @@ public:
|
|||||||
static void StreamVehiclesAndPeds(void);
|
static void StreamVehiclesAndPeds(void);
|
||||||
static void StreamZoneModels(const CVector &pos);
|
static void StreamZoneModels(const CVector &pos);
|
||||||
static void RemoveCurrentZonesModels(void);
|
static void RemoveCurrentZonesModels(void);
|
||||||
#ifdef MIAMI
|
|
||||||
static void LoadBigBuildingsWhenNeeded(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int32 GetCdImageOffset(int32 lastPosn);
|
static int32 GetCdImageOffset(int32 lastPosn);
|
||||||
static int32 GetNextFileOnCd(int32 position, bool priority);
|
static int32 GetNextFileOnCd(int32 position, bool priority);
|
||||||
|
@ -122,9 +122,4 @@ public:
|
|||||||
static bool DoWeHaveMoreThanXOccurencesOfSet(int32 count, uint16 *set);
|
static bool DoWeHaveMoreThanXOccurencesOfSet(int32 count, uint16 *set);
|
||||||
|
|
||||||
static void CompressIndicesArray() {};// todo
|
static void CompressIndicesArray() {};// todo
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
//--MIAMI: TODO
|
|
||||||
static bool PoliceAbandonCars(void) { return false; }
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
@ -7,14 +7,8 @@ enum Config {
|
|||||||
MAX_CDIMAGES = 8, // additional cdimages
|
MAX_CDIMAGES = 8, // additional cdimages
|
||||||
MAX_CDCHANNELS = 5,
|
MAX_CDCHANNELS = 5,
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
MODELINFOSIZE = 5500,
|
MODELINFOSIZE = 5500,
|
||||||
TXDSTORESIZE = 850,
|
TXDSTORESIZE = 850,
|
||||||
#else
|
|
||||||
MODELINFOSIZE = 6500,
|
|
||||||
TXDSTORESIZE = 1385,
|
|
||||||
COLSTORESIZE = 31,
|
|
||||||
#endif
|
|
||||||
EXTRADIRSIZE = 128,
|
EXTRADIRSIZE = 128,
|
||||||
CUTSCENEDIRSIZE = 512,
|
CUTSCENEDIRSIZE = 512,
|
||||||
|
|
||||||
@ -47,17 +41,10 @@ enum Config {
|
|||||||
NUMTEMPOBJECTS = 30,
|
NUMTEMPOBJECTS = 30,
|
||||||
|
|
||||||
// Path data
|
// Path data
|
||||||
#ifndef MIAMI
|
|
||||||
NUM_PATHNODES = 4930,
|
NUM_PATHNODES = 4930,
|
||||||
NUM_CARPATHLINKS = 2076,
|
NUM_CARPATHLINKS = 2076,
|
||||||
NUM_MAPOBJECTS = 1250,
|
NUM_MAPOBJECTS = 1250,
|
||||||
NUM_PATHCONNECTIONS = 10260,
|
NUM_PATHCONNECTIONS = 10260,
|
||||||
#else
|
|
||||||
NUM_PATHNODES = 9650,
|
|
||||||
NUM_CARPATHLINKS = 3500,
|
|
||||||
NUM_MAPOBJECTS = 1250,
|
|
||||||
NUM_PATHCONNECTIONS = 20400,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Link list lengths
|
// Link list lengths
|
||||||
NUMALPHALIST = 20,
|
NUMALPHALIST = 20,
|
||||||
@ -123,11 +110,7 @@ enum Config {
|
|||||||
NUMMODELSPERPEDGROUP = 8,
|
NUMMODELSPERPEDGROUP = 8,
|
||||||
NUMSHOTINFOS = 100,
|
NUMSHOTINFOS = 100,
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
NUMROADBLOCKS = 600,
|
NUMROADBLOCKS = 600,
|
||||||
#else
|
|
||||||
NUMROADBLOCKS = 300,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
NUMVISIBLEENTITIES = 2000,
|
NUMVISIBLEENTITIES = 2000,
|
||||||
NUMINVISIBLEENTITIES = 150,
|
NUMINVISIBLEENTITIES = 150,
|
||||||
|
@ -39,20 +39,13 @@ public:
|
|||||||
m_entries = (U*)malloc(sizeof(U)*size);
|
m_entries = (U*)malloc(sizeof(U)*size);
|
||||||
m_flags = (Flags*)malloc(sizeof(Flags)*size);
|
m_flags = (Flags*)malloc(sizeof(Flags)*size);
|
||||||
m_size = size;
|
m_size = size;
|
||||||
#ifndef MIAMI
|
|
||||||
m_allocPtr = 0;
|
m_allocPtr = 0;
|
||||||
#else
|
|
||||||
m_allocPtr = -1;
|
|
||||||
#endif
|
|
||||||
for(int i = 0; i < size; i++){
|
for(int i = 0; i < size; i++){
|
||||||
m_flags[i].id = 0;
|
m_flags[i].id = 0;
|
||||||
m_flags[i].free = 1;
|
m_flags[i].free = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef MIAMI
|
|
||||||
CPool(int size, const char *name)
|
|
||||||
: CPool(size) {}
|
|
||||||
#endif
|
|
||||||
~CPool() {
|
~CPool() {
|
||||||
Flush();
|
Flush();
|
||||||
}
|
}
|
||||||
|
@ -52,9 +52,6 @@ CEntity::CEntity(void)
|
|||||||
bRenderScorched = false;
|
bRenderScorched = false;
|
||||||
bHasBlip = false;
|
bHasBlip = false;
|
||||||
bIsBIGBuilding = false;
|
bIsBIGBuilding = false;
|
||||||
#ifdef MIAMI
|
|
||||||
bStreamBIGBuilding = false;
|
|
||||||
#endif
|
|
||||||
bRenderDamaged = false;
|
bRenderDamaged = false;
|
||||||
|
|
||||||
bBulletProof = false;
|
bBulletProof = false;
|
||||||
@ -348,11 +345,6 @@ CEntity::SetupBigBuilding(void)
|
|||||||
bStreamingDontDelete = true;
|
bStreamingDontDelete = true;
|
||||||
bUsesCollision = false;
|
bUsesCollision = false;
|
||||||
m_level = CTheZones::GetLevelFromPosition(GetPosition());
|
m_level = CTheZones::GetLevelFromPosition(GetPosition());
|
||||||
#ifdef MIAMI
|
|
||||||
if(mi->m_lodDistances[0] <= 2000.0f)
|
|
||||||
bStreamBIGBuilding = true;
|
|
||||||
// TODO: the stuff down there isn't right yet
|
|
||||||
#endif
|
|
||||||
if(m_level == LEVEL_NONE){
|
if(m_level == LEVEL_NONE){
|
||||||
if(mi->GetTxdSlot() != CTxdStore::FindTxdSlot("generic")){
|
if(mi->GetTxdSlot() != CTxdStore::FindTxdSlot("generic")){
|
||||||
mi->SetTexDictionary("generic");
|
mi->SetTexDictionary("generic");
|
||||||
|
@ -59,9 +59,6 @@ public:
|
|||||||
uint32 bRenderScorched : 1;
|
uint32 bRenderScorched : 1;
|
||||||
uint32 bHasBlip : 1;
|
uint32 bHasBlip : 1;
|
||||||
uint32 bIsBIGBuilding : 1; // Set if this entity is a big building
|
uint32 bIsBIGBuilding : 1; // Set if this entity is a big building
|
||||||
#ifdef MIAMI
|
|
||||||
uint32 bStreamBIGBuilding : 1; // set when draw dist <= 2000
|
|
||||||
#endif
|
|
||||||
uint32 bRenderDamaged : 1; // use damaged LOD models for objects with applicable damage
|
uint32 bRenderDamaged : 1; // use damaged LOD models for objects with applicable damage
|
||||||
|
|
||||||
// flagsC
|
// flagsC
|
||||||
@ -93,12 +90,7 @@ public:
|
|||||||
uint16 m_scanCode;
|
uint16 m_scanCode;
|
||||||
uint16 m_randomSeed;
|
uint16 m_randomSeed;
|
||||||
int16 m_modelIndex;
|
int16 m_modelIndex;
|
||||||
#ifndef MIAMI
|
|
||||||
uint16 m_level; // int16
|
uint16 m_level; // int16
|
||||||
#else
|
|
||||||
int8 m_level;
|
|
||||||
int8 m_area;
|
|
||||||
#endif
|
|
||||||
CReference *m_pFirstReference;
|
CReference *m_pFirstReference;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -267,7 +267,6 @@ void
|
|||||||
CPhysical::AddCollisionRecord_Treadable(CEntity *ent)
|
CPhysical::AddCollisionRecord_Treadable(CEntity *ent)
|
||||||
{
|
{
|
||||||
if(ent->IsBuilding() && ((CBuilding*)ent)->GetIsATreadable()){
|
if(ent->IsBuilding() && ((CBuilding*)ent)->GetIsATreadable()){
|
||||||
#ifndef MIAMI
|
|
||||||
CTreadable *t = (CTreadable*)ent;
|
CTreadable *t = (CTreadable*)ent;
|
||||||
if(t->m_nodeIndices[PATH_PED][0] >= 0 ||
|
if(t->m_nodeIndices[PATH_PED][0] >= 0 ||
|
||||||
t->m_nodeIndices[PATH_PED][1] >= 0 ||
|
t->m_nodeIndices[PATH_PED][1] >= 0 ||
|
||||||
@ -279,7 +278,6 @@ CPhysical::AddCollisionRecord_Treadable(CEntity *ent)
|
|||||||
t->m_nodeIndices[PATH_CAR][2] >= 0 ||
|
t->m_nodeIndices[PATH_CAR][2] >= 0 ||
|
||||||
t->m_nodeIndices[PATH_CAR][3] >= 0)
|
t->m_nodeIndices[PATH_CAR][3] >= 0)
|
||||||
m_treadable[PATH_CAR] = t;
|
m_treadable[PATH_CAR] = t;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,12 +8,8 @@ public:
|
|||||||
static void *operator new(size_t);
|
static void *operator new(size_t);
|
||||||
static void operator delete(void*, size_t);
|
static void operator delete(void*, size_t);
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
int16 m_nodeIndices[2][12]; // first car, then ped
|
int16 m_nodeIndices[2][12]; // first car, then ped
|
||||||
#endif
|
|
||||||
|
|
||||||
bool GetIsATreadable(void) { return true; }
|
bool GetIsATreadable(void) { return true; }
|
||||||
};
|
};
|
||||||
#ifndef MIAMI
|
|
||||||
static_assert(sizeof(CTreadable) == 0x94, "CTreadable: error");
|
static_assert(sizeof(CTreadable) == 0x94, "CTreadable: error");
|
||||||
#endif
|
|
||||||
|
@ -200,20 +200,6 @@ CModelInfo::GetModelInfo(const char *name, int *id)
|
|||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
CBaseModelInfo*
|
|
||||||
CModelInfo::GetModelInfo(const char *name, int minIndex, int maxIndex)
|
|
||||||
{
|
|
||||||
CBaseModelInfo *modelinfo;
|
|
||||||
for(int i = minIndex; i <= maxIndex; i++){
|
|
||||||
modelinfo = CModelInfo::ms_modelInfoPtrs[i];
|
|
||||||
if(modelinfo && !CGeneral::faststricmp(modelinfo->GetName(), name))
|
|
||||||
return modelinfo;
|
|
||||||
}
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
CModelInfo::IsBoatModel(int32 id)
|
CModelInfo::IsBoatModel(int32 id)
|
||||||
{
|
{
|
||||||
@ -228,7 +214,6 @@ CModelInfo::IsBikeModel(int32 id)
|
|||||||
((CVehicleModelInfo*)GetModelInfo(id))->m_vehicleType == VEHICLE_TYPE_BIKE;
|
((CVehicleModelInfo*)GetModelInfo(id))->m_vehicleType == VEHICLE_TYPE_BIKE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
void
|
void
|
||||||
CModelInfo::RemoveColModelsFromOtherLevels(eLevelName level)
|
CModelInfo::RemoveColModelsFromOtherLevels(eLevelName level)
|
||||||
{
|
{
|
||||||
@ -245,7 +230,6 @@ CModelInfo::RemoveColModelsFromOtherLevels(eLevelName level)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CModelInfo::ConstructMloClumps()
|
CModelInfo::ConstructMloClumps()
|
||||||
|
@ -42,9 +42,6 @@ public:
|
|||||||
static CBaseModelInfo *GetModelInfo(int id){
|
static CBaseModelInfo *GetModelInfo(int id){
|
||||||
return ms_modelInfoPtrs[id];
|
return ms_modelInfoPtrs[id];
|
||||||
}
|
}
|
||||||
#ifdef MIAMI
|
|
||||||
static CBaseModelInfo *GetModelInfo(const char *name, int minIndex, int maxIndex);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static bool IsBoatModel(int32 id);
|
static bool IsBoatModel(int32 id);
|
||||||
static bool IsBikeModel(int32 id);
|
static bool IsBikeModel(int32 id);
|
||||||
|
@ -130,16 +130,6 @@ CSimpleModelInfo::GetAtomicFromDistance(float dist)
|
|||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
RpAtomic*
|
|
||||||
CSimpleModelInfo::GetFirstAtomicFromDistance(float dist)
|
|
||||||
{
|
|
||||||
if(dist < m_lodDistances[0] * TheCamera.LODDistMultiplier)
|
|
||||||
return m_atomics[0];
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CSimpleModelInfo::FindRelatedModel(void)
|
CSimpleModelInfo::FindRelatedModel(void)
|
||||||
{
|
{
|
||||||
|
@ -40,9 +40,6 @@ public:
|
|||||||
float GetNearDistance(void);
|
float GetNearDistance(void);
|
||||||
float GetLargestLodDistance(void);
|
float GetLargestLodDistance(void);
|
||||||
RpAtomic *GetAtomicFromDistance(float dist);
|
RpAtomic *GetAtomicFromDistance(float dist);
|
||||||
#ifdef MIAMI
|
|
||||||
RpAtomic *GetFirstAtomicFromDistance(float dist); // inline
|
|
||||||
#endif
|
|
||||||
void FindRelatedModel(void);
|
void FindRelatedModel(void);
|
||||||
void SetupBigBuilding(void);
|
void SetupBigBuilding(void);
|
||||||
|
|
||||||
|
@ -187,10 +187,8 @@ CCivilianPed::CivilianAI(void)
|
|||||||
void
|
void
|
||||||
CCivilianPed::ProcessControl(void)
|
CCivilianPed::ProcessControl(void)
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
if (m_nZoneLevel > LEVEL_NONE && m_nZoneLevel != CCollision::ms_collisionInMemory)
|
if (m_nZoneLevel > LEVEL_NONE && m_nZoneLevel != CCollision::ms_collisionInMemory)
|
||||||
return;
|
return;
|
||||||
#endif
|
|
||||||
|
|
||||||
CPed::ProcessControl();
|
CPed::ProcessControl();
|
||||||
|
|
||||||
|
@ -425,14 +425,8 @@ CCopPed::CopAI(void)
|
|||||||
#ifdef VC_PED_PORTS
|
#ifdef VC_PED_PORTS
|
||||||
float dotProd;
|
float dotProd;
|
||||||
if (m_nRoadblockNode != -1) {
|
if (m_nRoadblockNode != -1) {
|
||||||
#ifndef MIAMI
|
|
||||||
CTreadable *roadBlockRoad = ThePaths.m_mapObjects[CRoadBlocks::RoadBlockObjects[m_nRoadblockNode]];
|
CTreadable *roadBlockRoad = ThePaths.m_mapObjects[CRoadBlocks::RoadBlockObjects[m_nRoadblockNode]];
|
||||||
dotProd = DotProduct2D(playerOrHisVeh->GetPosition() - roadBlockRoad->GetPosition(), GetPosition() - roadBlockRoad->GetPosition());
|
dotProd = DotProduct2D(playerOrHisVeh->GetPosition() - roadBlockRoad->GetPosition(), GetPosition() - roadBlockRoad->GetPosition());
|
||||||
#else
|
|
||||||
// TODO: check this, i'm only getting this compile here....
|
|
||||||
CPathNode *roadBlockNode = &ThePaths.m_pathNodes[CRoadBlocks::RoadBlockNodes[m_nRoadblockNode]];
|
|
||||||
dotProd = DotProduct2D(playerOrHisVeh->GetPosition() - roadBlockNode->GetPosition(), GetPosition() - roadBlockNode->GetPosition());
|
|
||||||
#endif
|
|
||||||
} else
|
} else
|
||||||
dotProd = -1.0f;
|
dotProd = -1.0f;
|
||||||
|
|
||||||
@ -565,10 +559,8 @@ CCopPed::CopAI(void)
|
|||||||
void
|
void
|
||||||
CCopPed::ProcessControl(void)
|
CCopPed::ProcessControl(void)
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
if (m_nZoneLevel > LEVEL_NONE && m_nZoneLevel != CCollision::ms_collisionInMemory)
|
if (m_nZoneLevel > LEVEL_NONE && m_nZoneLevel != CCollision::ms_collisionInMemory)
|
||||||
return;
|
return;
|
||||||
#endif
|
|
||||||
|
|
||||||
CPed::ProcessControl();
|
CPed::ProcessControl();
|
||||||
if (bWasPostponed)
|
if (bWasPostponed)
|
||||||
|
@ -44,10 +44,8 @@ CEmergencyPed::InRange(CPed *victim)
|
|||||||
void
|
void
|
||||||
CEmergencyPed::ProcessControl(void)
|
CEmergencyPed::ProcessControl(void)
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
if (m_nZoneLevel > LEVEL_NONE && m_nZoneLevel != CCollision::ms_collisionInMemory)
|
if (m_nZoneLevel > LEVEL_NONE && m_nZoneLevel != CCollision::ms_collisionInMemory)
|
||||||
return;
|
return;
|
||||||
#endif
|
|
||||||
|
|
||||||
CPed::ProcessControl();
|
CPed::ProcessControl();
|
||||||
if (bWasPostponed)
|
if (bWasPostponed)
|
||||||
|
@ -9397,10 +9397,8 @@ CPed::ProcessControl(void)
|
|||||||
CColPoint foundCol;
|
CColPoint foundCol;
|
||||||
CEntity *foundEnt = nil;
|
CEntity *foundEnt = nil;
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
if (m_nZoneLevel > LEVEL_NONE && m_nZoneLevel != CCollision::ms_collisionInMemory)
|
if (m_nZoneLevel > LEVEL_NONE && m_nZoneLevel != CCollision::ms_collisionInMemory)
|
||||||
return;
|
return;
|
||||||
#endif
|
|
||||||
|
|
||||||
int alpha = CVisibilityPlugins::GetClumpAlpha(GetClump());
|
int alpha = CVisibilityPlugins::GetClumpAlpha(GetClump());
|
||||||
if (!bFadeOut) {
|
if (!bFadeOut) {
|
||||||
|
@ -858,7 +858,6 @@ CPopulation::AddPedInCar(CVehicle* car)
|
|||||||
void
|
void
|
||||||
CPopulation::MoveCarsAndPedsOutOfAbandonedZones()
|
CPopulation::MoveCarsAndPedsOutOfAbandonedZones()
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
eLevelName level;
|
eLevelName level;
|
||||||
int zone;
|
int zone;
|
||||||
int frame = CTimer::GetFrameCounter() & 7;
|
int frame = CTimer::GetFrameCounter() & 7;
|
||||||
@ -941,7 +940,6 @@ CPopulation::MoveCarsAndPedsOutOfAbandonedZones()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -194,7 +194,6 @@ CRenderer::RenderRoads(void)
|
|||||||
t = (CTreadable*)ms_aVisibleEntityPtrs[i];
|
t = (CTreadable*)ms_aVisibleEntityPtrs[i];
|
||||||
if(t->IsBuilding() && t->GetIsATreadable()){
|
if(t->IsBuilding() && t->GetIsATreadable()){
|
||||||
#ifndef MASTER
|
#ifndef MASTER
|
||||||
#ifndef MIAMI
|
|
||||||
if(gbShowCarRoadGroups || gbShowPedRoadGroups){
|
if(gbShowCarRoadGroups || gbShowPedRoadGroups){
|
||||||
int ind = 0;
|
int ind = 0;
|
||||||
if(gbShowCarRoadGroups)
|
if(gbShowCarRoadGroups)
|
||||||
@ -203,7 +202,6 @@ CRenderer::RenderRoads(void)
|
|||||||
ind += ThePaths.m_pathNodes[t->m_nodeIndices[PATH_PED][0]].group;
|
ind += ThePaths.m_pathNodes[t->m_nodeIndices[PATH_PED][0]].group;
|
||||||
SetAmbientColoursToIndicateRoadGroup(ind);
|
SetAmbientColoursToIndicateRoadGroup(ind);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
RenderOneRoad(t);
|
RenderOneRoad(t);
|
||||||
#ifndef MASTER
|
#ifndef MASTER
|
||||||
@ -328,7 +326,6 @@ enum Visbility
|
|||||||
int32
|
int32
|
||||||
CRenderer::SetupEntityVisibility(CEntity *ent)
|
CRenderer::SetupEntityVisibility(CEntity *ent)
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
CSimpleModelInfo *mi = (CSimpleModelInfo*)CModelInfo::GetModelInfo(ent->m_modelIndex);
|
CSimpleModelInfo *mi = (CSimpleModelInfo*)CModelInfo::GetModelInfo(ent->m_modelIndex);
|
||||||
CTimeModelInfo *ti;
|
CTimeModelInfo *ti;
|
||||||
int32 other;
|
int32 other;
|
||||||
@ -474,164 +471,11 @@ CRenderer::SetupEntityVisibility(CEntity *ent)
|
|||||||
ent->bDistanceFade = true;
|
ent->bDistanceFade = true;
|
||||||
return VIS_OFFSCREEN; // Why this?
|
return VIS_OFFSCREEN; // Why this?
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
CSimpleModelInfo *mi = (CSimpleModelInfo*)CModelInfo::GetModelInfo(ent->m_modelIndex);
|
|
||||||
CTimeModelInfo *ti;
|
|
||||||
int32 other;
|
|
||||||
float dist;
|
|
||||||
|
|
||||||
bool request = true;
|
|
||||||
if(mi->GetModelType() == MITYPE_TIME){
|
|
||||||
ti = (CTimeModelInfo*)mi;
|
|
||||||
other = ti->GetOtherTimeModel();
|
|
||||||
if(CClock::GetIsTimeInRange(ti->GetTimeOn(), ti->GetTimeOff())){
|
|
||||||
// don't fade in, or between time objects
|
|
||||||
if(CANTIMECULL)
|
|
||||||
ti->m_alpha = 255;
|
|
||||||
}else{
|
|
||||||
// Hide if possible
|
|
||||||
if(CANTIMECULL)
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
// can't cull, so we'll try to draw this one, but don't request
|
|
||||||
// it since what we really want is the other one.
|
|
||||||
request = false;
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
// TODO(MIAMI): weapon
|
|
||||||
if(mi->GetModelType() != MITYPE_SIMPLE){
|
|
||||||
if(FindPlayerVehicle() == ent &&
|
|
||||||
TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_1STPERSON){
|
|
||||||
// Player's vehicle in first person mode
|
|
||||||
if(TheCamera.Cams[TheCamera.ActiveCam].DirectionWasLooking == LOOKING_FORWARD ||
|
|
||||||
ent->GetModelIndex() == MI_RHINO ||
|
|
||||||
ent->GetModelIndex() == MI_COACH ||
|
|
||||||
TheCamera.m_bInATunnelAndABigVehicle){
|
|
||||||
ent->bNoBrightHeadLights = true;
|
|
||||||
}else{
|
|
||||||
m_pFirstPersonVehicle = (CVehicle*)ent;
|
|
||||||
ent->bNoBrightHeadLights = false;
|
|
||||||
}
|
|
||||||
return VIS_OFFSCREEN;
|
|
||||||
}else{
|
|
||||||
// All sorts of Clumps
|
|
||||||
if(ent->m_rwObject == nil || !ent->bIsVisible)
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
// TODO(MIAMI): occlusion
|
|
||||||
if(!ent->GetIsOnScreen())
|
|
||||||
return VIS_OFFSCREEN;
|
|
||||||
if(ent->bDrawLast){
|
|
||||||
dist = (ent->GetPosition() - ms_vecCameraPosition).Magnitude();
|
|
||||||
CVisibilityPlugins::InsertEntityIntoSortedList(ent, dist);
|
|
||||||
ent->bDistanceFade = false;
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}else
|
|
||||||
return VIS_VISIBLE;
|
|
||||||
}
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}
|
|
||||||
// TODO(MIAMI): this is different
|
|
||||||
if(ent->IsObject() &&
|
|
||||||
((CObject*)ent)->ObjectCreatedBy == TEMP_OBJECT){
|
|
||||||
if(ent->m_rwObject == nil || !ent->bIsVisible)
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
return ent->GetIsOnScreen() ? VIS_VISIBLE : VIS_OFFSCREEN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Simple ModelInfo
|
|
||||||
|
|
||||||
// TODO(MIAMI): area
|
|
||||||
|
|
||||||
dist = (ent->GetPosition() - ms_vecCameraPosition).Magnitude();
|
|
||||||
|
|
||||||
if(LOD_DISTANCE < dist && dist < mi->GetLargestLodDistance() + FADE_DISTANCE)
|
|
||||||
dist += mi->GetLargestLodDistance() - 300.0f;
|
|
||||||
|
|
||||||
if(ent->IsObject() && ent->bRenderDamaged)
|
|
||||||
mi->m_isDamaged = true;
|
|
||||||
|
|
||||||
RpAtomic *a = mi->GetAtomicFromDistance(dist);
|
|
||||||
if(a){
|
|
||||||
mi->m_isDamaged = false;
|
|
||||||
if(ent->m_rwObject == nil)
|
|
||||||
ent->CreateRwObject();
|
|
||||||
assert(ent->m_rwObject);
|
|
||||||
RpAtomic *rwobj = (RpAtomic*)ent->m_rwObject;
|
|
||||||
// Make sure our atomic uses the right geometry and not
|
|
||||||
// that of an atomic for another draw distance.
|
|
||||||
if(RpAtomicGetGeometry(a) != RpAtomicGetGeometry(rwobj))
|
|
||||||
RpAtomicSetGeometry(rwobj, RpAtomicGetGeometry(a), rpATOMICSAMEBOUNDINGSPHERE); // originally 5 (mistake?)
|
|
||||||
mi->IncreaseAlpha();
|
|
||||||
if(ent->m_rwObject == nil || !ent->bIsVisible)
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
|
|
||||||
if(!ent->GetIsOnScreen()){
|
|
||||||
mi->m_alpha = 255;
|
|
||||||
return VIS_OFFSCREEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mi->m_alpha != 255){
|
|
||||||
CVisibilityPlugins::InsertEntityIntoSortedList(ent, dist);
|
|
||||||
ent->bDistanceFade = true;
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mi->m_drawLast || ent->bDrawLast){
|
|
||||||
if(CVisibilityPlugins::InsertEntityIntoSortedList(ent, dist)){
|
|
||||||
ent->bDistanceFade = false;
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return VIS_VISIBLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Object is not loaded, figure out what to do
|
|
||||||
|
|
||||||
if(mi->m_noFade){
|
|
||||||
mi->m_isDamaged = false;
|
|
||||||
// request model
|
|
||||||
if(dist - STREAM_DISTANCE < mi->GetLargestLodDistance() && request)
|
|
||||||
return VIS_STREAMME;
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// We might be fading
|
|
||||||
|
|
||||||
a = mi->GetAtomicFromDistance(dist - FADE_DISTANCE);
|
|
||||||
mi->m_isDamaged = false;
|
|
||||||
if(a == nil){
|
|
||||||
// request model
|
|
||||||
if(dist - FADE_DISTANCE - STREAM_DISTANCE < mi->GetLargestLodDistance() && request)
|
|
||||||
return VIS_STREAMME;
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ent->m_rwObject == nil)
|
|
||||||
ent->CreateRwObject();
|
|
||||||
assert(ent->m_rwObject);
|
|
||||||
RpAtomic *rwobj = (RpAtomic*)ent->m_rwObject;
|
|
||||||
if(RpAtomicGetGeometry(a) != RpAtomicGetGeometry(rwobj))
|
|
||||||
RpAtomicSetGeometry(rwobj, RpAtomicGetGeometry(a), rpATOMICSAMEBOUNDINGSPHERE); // originally 5 (mistake?)
|
|
||||||
mi->IncreaseAlpha();
|
|
||||||
if(ent->m_rwObject == nil || !ent->bIsVisible)
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
|
|
||||||
// TODO(MIAMI): occlusion
|
|
||||||
if(!ent->GetIsOnScreen()){
|
|
||||||
mi->m_alpha = 255;
|
|
||||||
return VIS_OFFSCREEN;
|
|
||||||
}else{
|
|
||||||
CVisibilityPlugins::InsertEntityIntoSortedList(ent, dist);
|
|
||||||
ent->bDistanceFade = true;
|
|
||||||
return VIS_OFFSCREEN; // Why this?
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int32
|
int32
|
||||||
CRenderer::SetupBigBuildingVisibility(CEntity *ent)
|
CRenderer::SetupBigBuildingVisibility(CEntity *ent)
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
CSimpleModelInfo *mi = (CSimpleModelInfo *)CModelInfo::GetModelInfo(ent->GetModelIndex());
|
CSimpleModelInfo *mi = (CSimpleModelInfo *)CModelInfo::GetModelInfo(ent->GetModelIndex());
|
||||||
CTimeModelInfo *ti;
|
CTimeModelInfo *ti;
|
||||||
int32 other;
|
int32 other;
|
||||||
@ -713,121 +557,6 @@ CRenderer::SetupBigBuildingVisibility(CEntity *ent)
|
|||||||
if(ent->IsVisibleComplex())
|
if(ent->IsVisibleComplex())
|
||||||
CVisibilityPlugins::InsertEntityIntoSortedList(ent, dist);
|
CVisibilityPlugins::InsertEntityIntoSortedList(ent, dist);
|
||||||
return VIS_INVISIBLE;
|
return VIS_INVISIBLE;
|
||||||
#else
|
|
||||||
CSimpleModelInfo *mi = (CSimpleModelInfo*)CModelInfo::GetModelInfo(ent->m_modelIndex);
|
|
||||||
CTimeModelInfo *ti;
|
|
||||||
int32 other;
|
|
||||||
|
|
||||||
// TODO(MIAMI): area
|
|
||||||
|
|
||||||
bool request = true;
|
|
||||||
if(mi->GetModelType() == MITYPE_TIME){
|
|
||||||
ti = (CTimeModelInfo*)mi;
|
|
||||||
other = ti->GetOtherTimeModel();
|
|
||||||
if(CClock::GetIsTimeInRange(ti->GetTimeOn(), ti->GetTimeOff())){
|
|
||||||
// don't fade in, or between time objects
|
|
||||||
if(CANTIMECULL)
|
|
||||||
ti->m_alpha = 255;
|
|
||||||
}else{
|
|
||||||
// Hide if possible
|
|
||||||
if(CANTIMECULL){
|
|
||||||
ent->DeleteRwObject();
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}
|
|
||||||
// can't cull, so we'll try to draw this one, but don't request
|
|
||||||
// it since what we really want is the other one.
|
|
||||||
request = false;
|
|
||||||
}
|
|
||||||
}else if(mi->GetModelType() == MITYPE_VEHICLE)
|
|
||||||
return ent->IsVisible() ? VIS_VISIBLE : VIS_INVISIBLE;
|
|
||||||
|
|
||||||
float dist = (ms_vecCameraPosition-ent->GetPosition()).Magnitude();
|
|
||||||
CSimpleModelInfo *nonLOD = mi->GetRelatedModel();
|
|
||||||
|
|
||||||
// Find out whether to draw below near distance.
|
|
||||||
// This is only the case if there is a non-LOD which is either not
|
|
||||||
// loaded or not completely faded in yet.
|
|
||||||
if(dist < mi->GetNearDistance() && dist < LOD_DISTANCE){
|
|
||||||
// No non-LOD or non-LOD is completely visible.
|
|
||||||
if(nonLOD == nil ||
|
|
||||||
nonLOD->GetRwObject() && nonLOD->m_alpha == 255)
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
|
|
||||||
// But if it is a time object, we'd rather draw the wrong
|
|
||||||
// non-LOD than the right LOD.
|
|
||||||
if(nonLOD->GetModelType() == MITYPE_TIME){
|
|
||||||
ti = (CTimeModelInfo*)nonLOD;
|
|
||||||
other = ti->GetOtherTimeModel();
|
|
||||||
if(other != -1 && CModelInfo::GetModelInfo(other)->GetRwObject())
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RpAtomic *a = mi->GetFirstAtomicFromDistance(dist);
|
|
||||||
if(a){
|
|
||||||
if(ent->m_rwObject == nil)
|
|
||||||
ent->CreateRwObject();
|
|
||||||
assert(ent->m_rwObject);
|
|
||||||
RpAtomic *rwobj = (RpAtomic*)ent->m_rwObject;
|
|
||||||
|
|
||||||
// Make sure our atomic uses the right geometry and not
|
|
||||||
// that of an atomic for another draw distance.
|
|
||||||
if(RpAtomicGetGeometry(a) != RpAtomicGetGeometry(rwobj))
|
|
||||||
RpAtomicSetGeometry(rwobj, RpAtomicGetGeometry(a), rpATOMICSAMEBOUNDINGSPHERE); // originally 5 (mistake?)
|
|
||||||
mi->IncreaseAlpha();
|
|
||||||
// TODO(MIAMI): occlusion
|
|
||||||
if(!ent->IsVisibleComplex()){
|
|
||||||
mi->m_alpha = 255;
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mi->m_alpha != 255){
|
|
||||||
CVisibilityPlugins::InsertEntityIntoSortedList(ent, dist);
|
|
||||||
ent->bDistanceFade = true;
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mi->m_drawLast){
|
|
||||||
CVisibilityPlugins::InsertEntityIntoSortedList(ent, dist);
|
|
||||||
ent->bDistanceFade = false;
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}
|
|
||||||
return VIS_VISIBLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mi->m_noFade){
|
|
||||||
ent->DeleteRwObject();
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// get faded atomic
|
|
||||||
a = mi->GetFirstAtomicFromDistance(dist - FADE_DISTANCE);
|
|
||||||
if(a == nil){
|
|
||||||
if(ent->bStreamBIGBuilding && dist-STREAM_DISTANCE < mi->GetLodDistance(0) && request){
|
|
||||||
return ent->GetIsOnScreen() ? VIS_STREAMME : VIS_INVISIBLE;
|
|
||||||
}else{
|
|
||||||
ent->DeleteRwObject();
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fade...
|
|
||||||
if(ent->m_rwObject == nil)
|
|
||||||
ent->CreateRwObject();
|
|
||||||
assert(ent->m_rwObject);
|
|
||||||
RpAtomic *rwobj = (RpAtomic*)ent->m_rwObject;
|
|
||||||
if(RpAtomicGetGeometry(a) != RpAtomicGetGeometry(rwobj))
|
|
||||||
RpAtomicSetGeometry(rwobj, RpAtomicGetGeometry(a), rpATOMICSAMEBOUNDINGSPHERE); // originally 5 (mistake?)
|
|
||||||
mi->IncreaseAlpha();
|
|
||||||
// TODO(MIAMI): occlusion
|
|
||||||
if(ent->IsVisibleComplex()){
|
|
||||||
CVisibilityPlugins::InsertEntityIntoSortedList(ent, dist);
|
|
||||||
ent->bDistanceFade = true;
|
|
||||||
}else
|
|
||||||
mi->m_alpha = 255;
|
|
||||||
return VIS_INVISIBLE;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -974,11 +703,7 @@ CRenderer::ScanWorld(void)
|
|||||||
}
|
}
|
||||||
ScanSectorPoly(poly, 3, ScanSectorList);
|
ScanSectorPoly(poly, 3, ScanSectorList);
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
ScanBigBuildingList(CWorld::GetBigBuildingList(CCollision::ms_collisionInMemory));
|
ScanBigBuildingList(CWorld::GetBigBuildingList(CCollision::ms_collisionInMemory));
|
||||||
#else
|
|
||||||
ScanBigBuildingList(CWorld::GetBigBuildingList(CGame::currLevel));
|
|
||||||
#endif
|
|
||||||
ScanBigBuildingList(CWorld::GetBigBuildingList(LEVEL_NONE));
|
ScanBigBuildingList(CWorld::GetBigBuildingList(LEVEL_NONE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1223,27 +948,11 @@ CRenderer::ScanBigBuildingList(CPtrList &list)
|
|||||||
CPtrNode *node;
|
CPtrNode *node;
|
||||||
CEntity *ent;
|
CEntity *ent;
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
for(node = list.first; node; node = node->next){
|
for(node = list.first; node; node = node->next){
|
||||||
ent = (CEntity*)node->item;
|
ent = (CEntity*)node->item;
|
||||||
if(!ent->bZoneCulled && SetupBigBuildingVisibility(ent) == VIS_VISIBLE)
|
if(!ent->bZoneCulled && SetupBigBuildingVisibility(ent) == VIS_VISIBLE)
|
||||||
ms_aVisibleEntityPtrs[ms_nNoOfVisibleEntities++] = ent;
|
ms_aVisibleEntityPtrs[ms_nNoOfVisibleEntities++] = ent;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
// TODO(MIAMI): some flags and such
|
|
||||||
for(node = list.first; node; node = node->next){
|
|
||||||
ent = (CEntity*)node->item;
|
|
||||||
switch(SetupBigBuildingVisibility(ent)){
|
|
||||||
case VIS_VISIBLE:
|
|
||||||
ms_aVisibleEntityPtrs[ms_nNoOfVisibleEntities++] = ent;
|
|
||||||
break;
|
|
||||||
case VIS_STREAMME:
|
|
||||||
if(!CStreaming::ms_disableStreaming)
|
|
||||||
CStreaming::RequestModel(ent->GetModelIndex(), 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -543,13 +543,11 @@ RestoreForStartLoad()
|
|||||||
ReadDataFromBufferPointer(_buf, TheCamera.GetMatrix().GetPosition().z);
|
ReadDataFromBufferPointer(_buf, TheCamera.GetMatrix().GetPosition().z);
|
||||||
CStreaming::RemoveUnusedBigBuildings(CGame::currLevel);
|
CStreaming::RemoveUnusedBigBuildings(CGame::currLevel);
|
||||||
CStreaming::RemoveUnusedBuildings(CGame::currLevel);
|
CStreaming::RemoveUnusedBuildings(CGame::currLevel);
|
||||||
#ifndef MIAMI
|
|
||||||
CCollision::SortOutCollisionAfterLoad();
|
CCollision::SortOutCollisionAfterLoad();
|
||||||
CStreaming::RequestBigBuildings(CGame::currLevel);
|
CStreaming::RequestBigBuildings(CGame::currLevel);
|
||||||
CStreaming::LoadAllRequestedModels(false);
|
CStreaming::LoadAllRequestedModels(false);
|
||||||
CStreaming::HaveAllBigBuildingsLoaded(CGame::currLevel);
|
CStreaming::HaveAllBigBuildingsLoaded(CGame::currLevel);
|
||||||
CGame::TidyUpMemory(true, false);
|
CGame::TidyUpMemory(true, false);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (CloseFile(file)) {
|
if (CloseFile(file)) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -229,11 +229,9 @@ CAutomobile::ProcessControl(void)
|
|||||||
colModel = GetColModel();
|
colModel = GetColModel();
|
||||||
bWarnedPeds = false;
|
bWarnedPeds = false;
|
||||||
|
|
||||||
#ifndef MIAMI
|
|
||||||
// skip if the collision isn't for the current level
|
// skip if the collision isn't for the current level
|
||||||
if(colModel->level > LEVEL_NONE && colModel->level != CCollision::ms_collisionInMemory)
|
if(colModel->level > LEVEL_NONE && colModel->level != CCollision::ms_collisionInMemory)
|
||||||
return;
|
return;
|
||||||
#endif
|
|
||||||
|
|
||||||
// Improve grip of vehicles in certain cases
|
// Improve grip of vehicles in certain cases
|
||||||
bool strongGrip1 = false;
|
bool strongGrip1 = false;
|
||||||
|
@ -197,6 +197,8 @@ public:
|
|||||||
static void SetAllTaxiLights(bool set);
|
static void SetAllTaxiLights(bool set);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(CAutomobile) == 0x5A8, "CAutomobile: error");
|
||||||
|
|
||||||
inline uint8 GetCarDoorFlag(int32 carnode) {
|
inline uint8 GetCarDoorFlag(int32 carnode) {
|
||||||
switch (carnode) {
|
switch (carnode) {
|
||||||
case CAR_DOOR_LF:
|
case CAR_DOOR_LF:
|
||||||
|
@ -109,10 +109,8 @@ CBoat::GetComponentWorldPosition(int32 component, CVector &pos)
|
|||||||
void
|
void
|
||||||
CBoat::ProcessControl(void)
|
CBoat::ProcessControl(void)
|
||||||
{
|
{
|
||||||
#ifndef MIAMI
|
|
||||||
if(m_nZoneLevel > LEVEL_NONE && m_nZoneLevel != CCollision::ms_collisionInMemory)
|
if(m_nZoneLevel > LEVEL_NONE && m_nZoneLevel != CCollision::ms_collisionInMemory)
|
||||||
return;
|
return;
|
||||||
#endif
|
|
||||||
|
|
||||||
bool onLand = m_fDamageImpulse > 0.0f && m_vecDamageNormal.z > 0.1f;
|
bool onLand = m_fDamageImpulse > 0.0f && m_vecDamageNormal.z > 0.1f;
|
||||||
|
|
||||||
|
@ -72,6 +72,8 @@ public:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(CBoat) == 0x484, "CBoat: error");
|
||||||
|
|
||||||
extern float MAX_WAKE_LENGTH;
|
extern float MAX_WAKE_LENGTH;
|
||||||
extern float MIN_WAKE_INTERVAL;
|
extern float MIN_WAKE_INTERVAL;
|
||||||
extern float WAKE_LIFETIME;
|
extern float WAKE_LIFETIME;
|
@ -95,3 +95,4 @@ public:
|
|||||||
|
|
||||||
static void ActivateHeli(bool activate);
|
static void ActivateHeli(bool activate);
|
||||||
};
|
};
|
||||||
|
static_assert(sizeof(CHeli) == 0x33C, "CHeli: error");
|
||||||
|
@ -63,6 +63,7 @@ public:
|
|||||||
static bool HasCesnaBeenDestroyed(void);
|
static bool HasCesnaBeenDestroyed(void);
|
||||||
static bool HasDropOffCesnaBeenShotDown(void);
|
static bool HasDropOffCesnaBeenShotDown(void);
|
||||||
};
|
};
|
||||||
|
static_assert(sizeof(CPlane) == 0x29C, "CPlane: error");
|
||||||
|
|
||||||
extern float LandingPoint;
|
extern float LandingPoint;
|
||||||
extern float TakeOffPoint;
|
extern float TakeOffPoint;
|
||||||
|
@ -91,3 +91,4 @@ public:
|
|||||||
float *totalLength, float *totalDuration, CTrainInterpolationLine *interpLines, bool rightRail);
|
float *totalLength, float *totalDuration, CTrainInterpolationLine *interpLines, bool rightRail);
|
||||||
static void UpdateTrains(void);
|
static void UpdateTrains(void);
|
||||||
};
|
};
|
||||||
|
static_assert(sizeof(CTrain) == 0x2E4, "CTrain: error");
|
||||||
|
@ -99,9 +99,6 @@ CVehicle::CVehicle(uint8 CreatedBy)
|
|||||||
m_bSirenOrAlarm = 0;
|
m_bSirenOrAlarm = 0;
|
||||||
m_nCarHornTimer = 0;
|
m_nCarHornTimer = 0;
|
||||||
m_nCarHornPattern = 0;
|
m_nCarHornPattern = 0;
|
||||||
#ifdef MIAMI
|
|
||||||
bParking = false;
|
|
||||||
#endif
|
|
||||||
m_nAlarmState = 0;
|
m_nAlarmState = 0;
|
||||||
m_nDoorLock = CARLOCK_UNLOCKED;
|
m_nDoorLock = CARLOCK_UNLOCKED;
|
||||||
m_nLastWeaponDamage = -1;
|
m_nLastWeaponDamage = -1;
|
||||||
@ -121,9 +118,6 @@ CVehicle::CVehicle(uint8 CreatedBy)
|
|||||||
AutoPilot.m_nTimeToStartMission = CTimer::GetTimeInMilliseconds();
|
AutoPilot.m_nTimeToStartMission = CTimer::GetTimeInMilliseconds();
|
||||||
AutoPilot.m_bStayInCurrentLevel = false;
|
AutoPilot.m_bStayInCurrentLevel = false;
|
||||||
AutoPilot.m_bIgnorePathfinding = false;
|
AutoPilot.m_bIgnorePathfinding = false;
|
||||||
#ifdef MIAMI
|
|
||||||
AutoPilot.m_nSwitchDistance = 20;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CVehicle::~CVehicle()
|
CVehicle::~CVehicle()
|
||||||
@ -1353,23 +1347,3 @@ CVehicle::Load(uint8*& buf)
|
|||||||
SkipSaveBuf(buf, 99);
|
SkipSaveBuf(buf, 99);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
eVehicleAppearance
|
|
||||||
//--MIAMI: TODO, implement VC version, appearance != type
|
|
||||||
// This would work for cars, boats and bikes but not for planes and helis
|
|
||||||
CVehicle::GetVehicleAppearance(void)
|
|
||||||
{
|
|
||||||
if (IsCar())
|
|
||||||
return VEHICLE_CAR;
|
|
||||||
if (IsBoat())
|
|
||||||
return VEHICLE_BOAT;
|
|
||||||
if (IsBike())
|
|
||||||
return VEHICLE_BIKE;
|
|
||||||
if (IsPlane())
|
|
||||||
return VEHICLE_PLANE;
|
|
||||||
if (IsHeli())
|
|
||||||
return VEHICLE_HELI;
|
|
||||||
return VEHICLE_NONE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@ -109,18 +109,6 @@ enum eFlightModel
|
|||||||
FLIGHT_MODEL_SEAPLANE
|
FLIGHT_MODEL_SEAPLANE
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
enum eVehicleAppearance
|
|
||||||
{
|
|
||||||
VEHICLE_NONE,
|
|
||||||
VEHICLE_CAR,
|
|
||||||
VEHICLE_BIKE,
|
|
||||||
VEHICLE_HELI,
|
|
||||||
VEHICLE_BOAT,
|
|
||||||
VEHICLE_PLANE,
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Or Weapon.h?
|
// Or Weapon.h?
|
||||||
void FireOneInstantHitRound(CVector *shotSource, CVector *shotTarget, int32 damage);
|
void FireOneInstantHitRound(CVector *shotSource, CVector *shotTarget, int32 damage);
|
||||||
|
|
||||||
@ -184,10 +172,6 @@ public:
|
|||||||
uint8 bIsCarParkVehicle : 1; // Car has been created using the special CAR_PARK script command
|
uint8 bIsCarParkVehicle : 1; // Car has been created using the special CAR_PARK script command
|
||||||
uint8 bHasAlreadyBeenRecorded : 1; // Used for replays
|
uint8 bHasAlreadyBeenRecorded : 1; // Used for replays
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
uint8 bParking : 1;
|
|
||||||
#endif;
|
|
||||||
|
|
||||||
int8 m_numPedsUseItAsCover;
|
int8 m_numPedsUseItAsCover;
|
||||||
uint8 m_nAmmoInClip; // Used to make the guns on boat do a reload (20 by default)
|
uint8 m_nAmmoInClip; // Used to make the guns on boat do a reload (20 by default)
|
||||||
int8 m_nPacManPickupsCarried;
|
int8 m_nPacManPickupsCarried;
|
||||||
@ -252,9 +236,6 @@ public:
|
|||||||
virtual void Load(uint8*& buf);
|
virtual void Load(uint8*& buf);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MIAMI
|
|
||||||
eVehicleAppearance GetVehicleAppearance(void);
|
|
||||||
#endif
|
|
||||||
bool IsCar(void) { return m_vehType == VEHICLE_TYPE_CAR; }
|
bool IsCar(void) { return m_vehType == VEHICLE_TYPE_CAR; }
|
||||||
bool IsBoat(void) { return m_vehType == VEHICLE_TYPE_BOAT; }
|
bool IsBoat(void) { return m_vehType == VEHICLE_TYPE_BOAT; }
|
||||||
bool IsTrain(void) { return m_vehType == VEHICLE_TYPE_TRAIN; }
|
bool IsTrain(void) { return m_vehType == VEHICLE_TYPE_TRAIN; }
|
||||||
@ -310,4 +291,9 @@ public:
|
|||||||
static bool m_bDisableMouseSteering;
|
static bool m_bDisableMouseSteering;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(CVehicle) == 0x288, "CVehicle: error");
|
||||||
|
static_assert(offsetof(CVehicle, m_pCurGroundEntity) == 0x1E0, "CVehicle: error");
|
||||||
|
static_assert(offsetof(CVehicle, m_nAlarmState) == 0x1A0, "CVehicle: error");
|
||||||
|
static_assert(offsetof(CVehicle, m_nLastWeaponDamage) == 0x228, "CVehicle: error");
|
||||||
|
|
||||||
void DestroyVehicleAndDriverAndPassengers(CVehicle* pVehicle);
|
void DestroyVehicleAndDriverAndPassengers(CVehicle* pVehicle);
|
||||||
|
Loading…
Reference in New Issue
Block a user