summaryrefslogtreecommitdiffstats
path: root/src/vehicles
diff options
context:
space:
mode:
Diffstat (limited to 'src/vehicles')
-rw-r--r--src/vehicles/Automobile.cpp7
-rw-r--r--src/vehicles/Bike.cpp2
-rw-r--r--src/vehicles/Cranes.cpp6
-rw-r--r--src/vehicles/Door.cpp55
-rw-r--r--src/vehicles/Door.h19
-rw-r--r--src/vehicles/HandlingMgr.cpp77
-rw-r--r--src/vehicles/HandlingMgr.h76
-rw-r--r--src/vehicles/Train.cpp58
-rw-r--r--src/vehicles/Vehicle.cpp3
-rw-r--r--src/vehicles/Vehicle.h4
10 files changed, 142 insertions, 165 deletions
diff --git a/src/vehicles/Automobile.cpp b/src/vehicles/Automobile.cpp
index 65e3f313..15cbf231 100644
--- a/src/vehicles/Automobile.cpp
+++ b/src/vehicles/Automobile.cpp
@@ -1641,13 +1641,13 @@ CAutomobile::ProcessControl(void)
// TODO: make the numbers defines
float heading;
- if(GetPosition().x > 1950.0f-400.0f){
+ if(GetPosition().x > 1950.0f){
if(m_vecMoveSpeed.x > 0.0f)
m_vecMoveSpeed.x *= -1.0f;
heading = GetForward().Heading();
if(heading > 0.0f) // going west
SetHeading(-heading);
- }else if(GetPosition().x < -1950.0f-400.0f){
+ }else if(GetPosition().x < -1950.0f){
if(m_vecMoveSpeed.x < 0.0f)
m_vecMoveSpeed.x *= -1.0f;
heading = GetForward().Heading();
@@ -2193,8 +2193,7 @@ CAutomobile::PreRender(void)
case MI_TAXI:
case MI_CABBIE:
- case MI_ZEBRA:
- case MI_KAUFMAN:
+ case MI_BORGNINE:
if(bTaxiLight){
CVector pos = GetPosition() + GetUp()*0.95f;
CCoronas::RegisterCorona((uintptr)this + 21,
diff --git a/src/vehicles/Bike.cpp b/src/vehicles/Bike.cpp
index 19e95a6e..531128be 100644
--- a/src/vehicles/Bike.cpp
+++ b/src/vehicles/Bike.cpp
@@ -83,7 +83,7 @@ CBike::CBike(int32 id, uint8 CreatedBy)
case MI_SANCHEZ:
m_bikeAnimType = ASSOCGRP_BIKE_DIRT;
break;
- default: assert(0 && "invalid bike model ID");
+ default: m_bikeAnimType = ASSOCGRP_BIKE_STANDARD; //assert(0 && "invalid bike model ID"); // TODO
}
m_vehType = VEHICLE_TYPE_BIKE;
diff --git a/src/vehicles/Cranes.cpp b/src/vehicles/Cranes.cpp
index 8433a0ba..ce254100 100644
--- a/src/vehicles/Cranes.cpp
+++ b/src/vehicles/Cranes.cpp
@@ -62,6 +62,7 @@ void CCranes::InitCranes(void)
}
}
}
+/* // TODO(LCS)
for (CPtrNode* pNode = CWorld::GetBigBuildingList(LEVEL_MAINLAND).first; pNode; pNode = pNode->next) {
CEntity* pEntity = (CEntity*)pNode->item;
if (MODELID_CRANE_1 == pEntity->GetModelIndex() ||
@@ -72,6 +73,7 @@ void CCranes::InitCranes(void)
MODELID_CRANE_6 == pEntity->GetModelIndex())
AddThisOneCrane(pEntity);
}
+*/
}
void CCranes::AddThisOneCrane(CEntity* pEntity)
@@ -464,7 +466,7 @@ bool CCranes::DoesMilitaryCraneHaveThisOneAlready(uint32 mi)
case MI_FIRETRUCK: return (CarsCollectedMilitaryCrane & 1);
case MI_AMBULAN: return (CarsCollectedMilitaryCrane & 2);
case MI_ENFORCER: return (CarsCollectedMilitaryCrane & 4);
- case MI_FBIRANCH: return (CarsCollectedMilitaryCrane & 8);
+ case (uint32)MI_FBIRANCH: return (CarsCollectedMilitaryCrane & 8);
case MI_RHINO: return (CarsCollectedMilitaryCrane & 0x10);
case MI_BARRACKS: return (CarsCollectedMilitaryCrane & 0x20);
case MI_POLICE: return (CarsCollectedMilitaryCrane & 0x40);
@@ -479,7 +481,7 @@ void CCranes::RegisterCarForMilitaryCrane(uint32 mi)
case MI_FIRETRUCK: CarsCollectedMilitaryCrane |= 1; break;
case MI_AMBULAN: CarsCollectedMilitaryCrane |= 2; break;
case MI_ENFORCER: CarsCollectedMilitaryCrane |= 4; break;
- case MI_FBIRANCH: CarsCollectedMilitaryCrane |= 8; break;
+ case (uint32)MI_FBIRANCH: CarsCollectedMilitaryCrane |= 8; break;
case MI_RHINO: CarsCollectedMilitaryCrane |= 0x10; break;
case MI_BARRACKS: CarsCollectedMilitaryCrane |= 0x20; break;
case MI_POLICE: CarsCollectedMilitaryCrane |= 0x40; break;
diff --git a/src/vehicles/Door.cpp b/src/vehicles/Door.cpp
index c80965aa..72a30339 100644
--- a/src/vehicles/Door.cpp
+++ b/src/vehicles/Door.cpp
@@ -168,3 +168,58 @@ CTrainDoor::IsClosed(void)
{
return m_fPosn == RetTranslationWhenClosed();
}
+
+bool
+CFerryDoor::IsInUse(void)
+{
+ float translationDifference = m_fPrevPosn - m_fPosn;
+ m_fPrevPosn = m_fPosn;
+ return Abs(translationDifference) > 0.002f;
+}
+
+float
+CFerryDoor::RetTranslationWhenClosed(void)
+{
+ if(Abs(m_fClosedPosn) < Abs(m_fOpenPosn))
+ return m_fClosedPosn;
+ else
+ return m_fOpenPosn;
+}
+
+bool
+CFerryDoor::IsClosed(void)
+{
+ return m_fPosn == RetTranslationWhenClosed();
+}
+
+float
+CFerryDoor::RetTranslationWhenOpen(void)
+{
+ if(Abs(m_fClosedPosn) < Abs(m_fOpenPosn))
+ return m_fOpenPosn;
+ else
+ return m_fClosedPosn;
+}
+
+bool
+CFerryDoor::IsFullyOpen(void)
+{
+ if(Abs(m_fPosn) < Abs(RetTranslationWhenOpen()) - 0.5f)
+ return false;
+ return true;
+}
+
+void
+CFerryDoor::Open(float ratio)
+{
+ float open;
+
+ m_fPrevPosn = m_fPosn;
+ open = RetTranslationWhenOpen();
+ if(ratio < 1.0f){
+ m_fPosn = open*ratio;
+ }else{
+ m_nDoorState = DOORST_OPEN;
+ m_fPosn = open;
+ }
+} \ No newline at end of file
diff --git a/src/vehicles/Door.h b/src/vehicles/Door.h
index 567d3263..da5a3de0 100644
--- a/src/vehicles/Door.h
+++ b/src/vehicles/Door.h
@@ -67,3 +67,22 @@ public:
float RetTranslationWhenOpen(void);
void Open(float ratio);
};
+
+
+class CFerryDoor {
+private:
+ float m_fClosedPosn;
+ float m_fOpenPosn;
+ int8 m_nDirn;
+ int8 m_nAxis;
+ int8 m_nDoorState;
+ float m_fPosn;
+ float m_fPrevPosn;
+public:
+ bool IsInUse(void);
+ float RetTranslationWhenClosed(void);
+ float RetTranslationWhenOpen(void);
+ bool IsClosed(void);
+ bool IsFullyOpen(void);
+ void Open(float ratio);
+}; \ No newline at end of file
diff --git a/src/vehicles/HandlingMgr.cpp b/src/vehicles/HandlingMgr.cpp
index 9aa834ac..040b6972 100644
--- a/src/vehicles/HandlingMgr.cpp
+++ b/src/vehicles/HandlingMgr.cpp
@@ -44,6 +44,7 @@ const char VehicleNames[NUMHANDLINGS][14] = {
"RHINO",
"BARRACKS",
"TRAIN",
+ "FERRY",
"HELI",
"DODO",
"COACH",
@@ -56,66 +57,40 @@ const char VehicleNames[NUMHANDLINGS][14] = {
"DEADDODO",
"FLATBED",
"YANKEE",
- "GOLFCART",
- "VOODOO",
- "WASHING",
- "CUBAN",
- "ROMERO",
- "PACKER",
- "ADMIRAL",
- "GANGBUR",
- "ZEBRA",
- "TOPFUN",
- "GLENDALE",
- "OCEANIC",
- "HERMES",
- "SABRE1",
- "SABRETUR",
- "PHEONIX",
- "WALTON",
- "REGINA",
- "COMET",
- "DELUXO",
- "BURRITO",
- "SPAND",
- "BAGGAGE",
- "KAUFMAN",
- "RANCHER",
- "FBIRANCH",
- "VIRGO",
- "GREENWOO",
- "HOTRING",
- "SANDKING",
- "BLISTAC",
- "BOXVILLE",
- "BENSON",
- "DESPERAD",
- "LOVEFIST",
- "BLOODRA",
- "BLOODRB",
+ "BLISTA",
+ "BELLYUP",
+ "MRWONGS",
+ "YARDIE",
+ "YAKUZA",
+ "DIABLOS",
+ "COLUMB",
+ "HOODS",
+ "PANLANT",
+ "BORGNINE",
+ "CAMPVAN",
+ "BALLOT",
+ "SPIDER",
+ "SHELBY",
+ "PONTIAC",
+ "ESPRIT",
+ "MINI",
+ "HOTROD",
+ "SINDACCO",
+ "FORELLI",
"BIKE",
"MOPED",
"DIRTBIKE",
"ANGEL",
+ "DIRTBIK2",
+ "ANGE2",
"FREEWAY",
"PREDATOR",
"SPEEDER",
"REEFER",
- "RIO",
- "SQUALO",
- "TROPIC",
- "COASTGRD",
- "DINGHY",
- "MARQUIS",
- "CUPBOAT",
- "SEAPLANE",
- "SPARROW",
- "SEASPAR",
"MAVERICK",
"COASTMAV",
"POLMAV",
"HUNTER",
- "RCBARON",
"RCGOBLIN",
"RCCOPTER"
};
@@ -422,15 +397,15 @@ cHandlingDataMgr::GetHandlingId(const char *name)
tFlyingHandlingData*
cHandlingDataMgr::GetFlyingPointer(uint8 id)
{
- if(id >= HANDLING_SEAPLANE && id <= HANDLING_RCCOPTER)
- return &FlyingHandlingData[id-HANDLING_SEAPLANE];
+ if(id >= HANDLING_MAVERICK && id <= HANDLING_RCCOPTER)
+ return &FlyingHandlingData[id-HANDLING_MAVERICK];
return &FlyingHandlingData[0];
}
tBoatHandlingData*
cHandlingDataMgr::GetBoatPointer(uint8 id)
{
- if(id >= HANDLING_PREDATOR && id <= HANDLING_SEAPLANE)
+ if(id >= HANDLING_PREDATOR && id <= HANDLING_MAVERICK)
return &BoatHandlingData[id-HANDLING_PREDATOR];
return &BoatHandlingData[0];
}
diff --git a/src/vehicles/HandlingMgr.h b/src/vehicles/HandlingMgr.h
index 446395f2..e6b5236f 100644
--- a/src/vehicles/HandlingMgr.h
+++ b/src/vehicles/HandlingMgr.h
@@ -36,6 +36,7 @@ enum tVehicleType
HANDLING_RHINO,
HANDLING_BARRACKS,
HANDLING_TRAIN,
+ HANDLING_FERRY,
HANDLING_HELI,
HANDLING_DODO,
HANDLING_COACH,
@@ -48,76 +49,51 @@ enum tVehicleType
HANDLING_DEADDODO,
HANDLING_FLATBED,
HANDLING_YANKEE,
- HANDLING_GOLFCART,
- HANDLING_VOODOO,
- HANDLING_WASHING,
- HANDLING_CUBAN,
- HANDLING_ROMERO,
- HANDLING_PACKER,
- HANDLING_ADMIRAL,
- HANDLING_GANGBUR,
- HANDLING_ZEBRA,
- HANDLING_TOPFUN,
- HANDLING_GLENDALE,
- HANDLING_OCEANIC,
- HANDLING_HERMES,
- HANDLING_SABRE1,
- HANDLING_SABRETUR,
- HANDLING_PHEONIX,
- HANDLING_WALTON,
- HANDLING_REGINA,
- HANDLING_COMET,
- HANDLING_DELUXO,
- HANDLING_BURRITO,
- HANDLING_SPAND,
- HANDLING_BAGGAGE,
- HANDLING_KAUFMAN,
- HANDLING_RANCHER,
- HANDLING_FBIRANCH,
- HANDLING_VIRGO,
- HANDLING_GREENWOO,
- HANDLING_HOTRING,
- HANDLING_SANDKING,
- HANDLING_BLISTAC,
- HANDLING_BOXVILLE,
- HANDLING_BENSON,
- HANDLING_DESPERAD,
- HANDLING_LOVEFIST,
- HANDLING_BLOODRA,
- HANDLING_BLOODRB,
+ HANDLING_BLISTA,
+ HANDLING_BELLYUP,
+ HANDLING_MRWONGS,
+ HANDLING_YARDIE,
+ HANDLING_YAKUZA,
+ HANDLING_DIABLOS,
+ HANDLING_COLUMB,
+ HANDLING_HOODS,
+ HANDLING_PANLANT,
+ HANDLING_BORGNINE,
+ HANDLING_CAMPVAN,
+ HANDLING_BALLOT,
+ HANDLING_SPIDER,
+ HANDLING_SHELBY,
+ HANDLING_PONTIAC,
+ HANDLING_ESPRIT,
+ HANDLING_MINI,
+ HANDLING_HOTROD,
+ HANDLING_SINDACCO,
+ HANDLING_FORELLI,
HANDLING_BIKE,
HANDLING_MOPED,
HANDLING_DIRTBIKE,
HANDLING_ANGEL,
+ HANDLING_DIRTBIK2,
+ HANDLING_ANGE2,
HANDLING_FREEWAY,
HANDLING_PREDATOR,
HANDLING_SPEEDER,
HANDLING_REEFER,
- HANDLING_RIO,
- HANDLING_SQUALO,
- HANDLING_TROPIC,
- HANDLING_COASTGRD,
- HANDLING_DINGHY,
- HANDLING_MARQUIS,
- HANDLING_CUPBOAT,
- HANDLING_SEAPLANE, // both boat and plane!
- HANDLING_SPARROW,
- HANDLING_SEASPAR,
+
HANDLING_MAVERICK,
HANDLING_COASTMAV,
HANDLING_POLMAV,
HANDLING_HUNTER,
- HANDLING_RCBARON,
HANDLING_RCGOBLIN,
HANDLING_RCCOPTER,
NUMHANDLINGS,
NUMBIKEHANDLINGS = HANDLING_FREEWAY+1 - HANDLING_BIKE,
- NUMFLYINGHANDLINGS = HANDLING_RCCOPTER+1 - HANDLING_SEAPLANE,
- NUMBOATHANDLINGS = HANDLING_SEAPLANE+1 - HANDLING_PREDATOR,
+ NUMFLYINGHANDLINGS = HANDLING_RCCOPTER+1 - HANDLING_MAVERICK,
+ NUMBOATHANDLINGS = HANDLING_COASTMAV+1 - HANDLING_PREDATOR,
};
enum tField // most likely a handling field enum, never used so :shrug:
diff --git a/src/vehicles/Train.cpp b/src/vehicles/Train.cpp
index 1a4af307..fefe1781 100644
--- a/src/vehicles/Train.cpp
+++ b/src/vehicles/Train.cpp
@@ -459,11 +459,11 @@ CTrain::InitTrains(void)
CStreaming::LoadAllRequestedModels(false);
// El-Train wagons
- float wagonPositions[] = { 0.0f, 20.0f, 40.0f, 0.0f, 20.0f };
- int8 firstWagon[] = { 1, 0, 0, 1, 0 };
- int8 lastWagon[] = { 0, 0, 1, 0, 1 };
- int16 wagonGroup[] = { 0, 0, 0, 1, 1 };
- for(i = 0; i < 5; i++){
+ float wagonPositions[] = { 0.0f, 20.0f, 0.0f, 20.0f };
+ int8 firstWagon[] = { 1, 0, 1, 0 };
+ int8 lastWagon[] = { 0, 1, 0, 1 };
+ int16 wagonGroup[] = { 0, 0, 1, 1 };
+ for(i = 0; i < 4; i++){
train = new CTrain(MI_TRAIN, PERMANENT_VEHICLE);
train->GetMatrix().SetTranslate(0.0f, 0.0f, 0.0f);
train->SetStatus(STATUS_ABANDONED);
@@ -650,52 +650,6 @@ CTrain::ReadAndInterpretTrackFile(Const char *filename, CTrainNode **nodes, int1
}
void
-PlayAnnouncement(uint8 sound, uint8 station)
-{
- // this was gone in a PC version but inlined on PS2
- cAudioScriptObject *obj = new cAudioScriptObject;
- obj->AudioId = sound;
- obj->Posn = CTrain::aStationCoors[station];
- obj->AudioEntity = AEHANDLE_NONE;
- DMAudio.CreateOneShotScriptObject(obj);
-}
-
-void
-ProcessTrainAnnouncements(void)
-{
-#ifdef GTA_TRAIN
- for (int i = 0; i < ARRAY_SIZE(StationDist); i++) {
- for (int j = 0; j < ARRAY_SIZE(EngineTrackPosition); j++) {
- if (!bTrainArrivalAnnounced[i]) {
- float preDist = StationDist[i] - 100.0f;
- if (preDist < 0.0f)
- preDist += TotalLengthOfTrack;
- if (EngineTrackPosition[j] > preDist && EngineTrackPosition[j] < StationDist[i]) {
- bTrainArrivalAnnounced[i] = true;
- PlayAnnouncement(SCRIPT_SOUND_TRAIN_ANNOUNCEMENT_1, i);
- break;
- }
- } else {
- float postDist = StationDist[i] + 10.0f;
-#ifdef FIX_BUGS
- if (postDist > TotalLengthOfTrack)
- postDist -= TotalLengthOfTrack;
-#else
- if (postDist < 0.0f) // does this even make sense here?
- postDist += TotalLengthOfTrack;
-#endif
- if (EngineTrackPosition[j] > StationDist[i] && EngineTrackPosition[j] < postDist) {
- bTrainArrivalAnnounced[i] = false;
- PlayAnnouncement(SCRIPT_SOUND_TRAIN_ANNOUNCEMENT_2, i);
- break;
- }
- }
- }
- }
-#endif
-}
-
-void
CTrain::UpdateTrains(void)
{
#ifdef GTA_TRAIN
@@ -732,8 +686,6 @@ CTrain::UpdateTrains(void)
// time offset for each train
time += 0x20000/2;
}
-
- ProcessTrainAnnouncements();
}
// Update Subway
diff --git a/src/vehicles/Vehicle.cpp b/src/vehicles/Vehicle.cpp
index 1849fd7f..c2bca63e 100644
--- a/src/vehicles/Vehicle.cpp
+++ b/src/vehicles/Vehicle.cpp
@@ -1841,8 +1841,7 @@ CVehicle::SetDriver(CPed *driver)
case MI_TAXI:
case MI_CABBIE:
- case MI_ZEBRA:
- case MI_KAUFMAN:
+ case MI_BORGNINE:
CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 12;
break;
diff --git a/src/vehicles/Vehicle.h b/src/vehicles/Vehicle.h
index 7388bfab..795161bf 100644
--- a/src/vehicles/Vehicle.h
+++ b/src/vehicles/Vehicle.h
@@ -384,8 +384,8 @@ public:
bool IsAlarmOn(void) { return m_nAlarmState != 0 && m_nAlarmState != -1 && GetStatus() != STATUS_WRECKED; }
CVehicleModelInfo* GetModelInfo() { return (CVehicleModelInfo*)CModelInfo::GetModelInfo(GetModelIndex()); }
- bool IsTaxi(void) { return GetModelIndex() == MI_TAXI || GetModelIndex() == MI_CABBIE || GetModelIndex() == MI_ZEBRA || GetModelIndex() == MI_KAUFMAN; }
- bool IsLimo(void) { return GetModelIndex() == MI_STRETCH || GetModelIndex() == MI_LOVEFIST; }
+ bool IsTaxi(void) { return GetModelIndex() == MI_TAXI || GetModelIndex() == MI_CABBIE || GetModelIndex() == MI_BORGNINE; }
+ bool IsLimo(void) { return GetModelIndex() == MI_STRETCH; }
bool IsRealHeli(void) { return !!(pHandling->Flags & HANDLING_IS_HELI); }
bool IsRealPlane(void) { return !!(pHandling->Flags & HANDLING_IS_PLANE); }