Merge remote-tracking branch 'origin/lcs' into lcs

* origin/lcs:
  Remove size assert
  Add TXD mid field
  Enable GTA_BRIDGE
  LCS model indices
This commit is contained in:
Sergeanur 2021-01-23 15:14:24 +02:00
commit defbb01aaa
10 changed files with 891 additions and 189 deletions

View File

@ -9311,7 +9311,8 @@ cAudioManager::ProcessBridge()
void
cAudioManager::ProcessBridgeWarning()
{
if (CStats::CommercialPassed && m_sQueueSample.m_fDistance < 450.f) {
// TODO: LCS
/* if (CStats::CommercialPassed && m_sQueueSample.m_fDistance < 450.f) {
m_sQueueSample.m_nVolume = ComputeVolume(100, 450.f, m_sQueueSample.m_fDistance);
if (m_sQueueSample.m_nVolume != 0) {
m_sQueueSample.m_nCounter = 0;
@ -9332,7 +9333,7 @@ cAudioManager::ProcessBridgeWarning()
m_sQueueSample.m_bRequireReflection = false;
AddSampleToRequestedQueue();
}
}
}*/
}
void

View File

@ -544,8 +544,8 @@ public:
#endif
};
#ifdef AUDIO_MSS
static_assert(sizeof(cAudioManager) == 0x5558, "cAudioManager: error");
#endif
//#ifdef AUDIO_MSS
//static_assert(sizeof(cAudioManager) == 0x5558, "cAudioManager: error");
//#endif
extern cAudioManager AudioManager;

View File

@ -161,3 +161,23 @@ bool CBridge::ThisIsABridgeObjectMovingUp(int index)
return false;
#endif
}
void CBridge::ForceBridgeState(uint8 state)
{
#ifdef GTA_BRIDGE
State = state;
switch (state)
{
case STATE_BRIDGE_LOCKED:
case STATE_LIFT_PART_MOVING_DOWN:
case STATE_LIFT_PART_ABOUT_TO_MOVE_UP:
ThePaths.SetLinksBridgeLights(-330.0f, -230.0f, -700.0f, -588.0f, true);
break;
case STATE_BRIDGE_ALWAYS_UNLOCKED:
ThePaths.SetLinksBridgeLights(-330.0f, -230.0f, -700.0f, -588.0f, false);
break;
default:
break;
}
#endif
}

View File

@ -26,4 +26,5 @@ public:
static bool ShouldLightsBeFlashing();
static void FindBridgeEntities();
static bool ThisIsABridgeObjectMovingUp(int);
static void ForceBridgeState(uint8 state);
};

View File

@ -1825,7 +1825,7 @@ void CGarage::FindDoorsEntities()
}
}
if (m_pDoor1 && m_pDoor2) {
if (m_pDoor1->GetModelIndex() != MI_LCS_GARAGEDOOR39 && m_pDoor1->GetModelIndex() != MI_LCS_GARAGEDOOR40) {
if (m_pDoor1->GetModelIndex() != MI_CRUSHERBODY && m_pDoor1->GetModelIndex() != MI_CRUSHERLID) {
CVector2D vecDoor1ToGarage(m_pDoor1->GetPosition().x - GetGarageCenterX(), m_pDoor1->GetPosition().y - GetGarageCenterY());
CVector2D vecDoor2ToGarage(m_pDoor2->GetPosition().x - GetGarageCenterX(), m_pDoor2->GetPosition().y - GetGarageCenterY());
if (DotProduct2D(vecDoor1ToGarage, vecDoor2ToGarage) > 0.0f) {
@ -2409,46 +2409,47 @@ void CGarages::Load(uint8* buf, uint32 size)
bool
CGarages::IsModelIndexADoor(uint32 id)
{
return id == MI_LCS_GARAGEDOOR01 ||
id == MI_LCS_GARAGEDOOR02 ||
id == MI_LCS_GARAGEDOOR03 ||
id == MI_LCS_GARAGEDOOR04 ||
id == MI_LCS_GARAGEDOOR05 ||
id == MI_LCS_GARAGEDOOR06 ||
id == MI_LCS_GARAGEDOOR07 ||
id == MI_LCS_GARAGEDOOR08 ||
id == MI_LCS_GARAGEDOOR09 ||
id == MI_LCS_GARAGEDOOR10 ||
id == MI_LCS_GARAGEDOOR11 ||
id == MI_LCS_GARAGEDOOR12 ||
id == MI_LCS_GARAGEDOOR13 ||
id == MI_LCS_GARAGEDOOR14 ||
id == MI_LCS_GARAGEDOOR15 ||
id == MI_LCS_GARAGEDOOR16 ||
id == MI_LCS_GARAGEDOOR17 ||
id == MI_LCS_GARAGEDOOR18 ||
id == MI_LCS_GARAGEDOOR19 ||
id == MI_LCS_GARAGEDOOR20 ||
id == MI_LCS_GARAGEDOOR21 ||
id == MI_LCS_GARAGEDOOR22 ||
id == MI_LCS_GARAGEDOOR23 ||
id == MI_LCS_GARAGEDOOR24 ||
id == MI_LCS_GARAGEDOOR25 ||
id == MI_LCS_GARAGEDOOR26 ||
id == MI_LCS_GARAGEDOOR27 ||
id == MI_LCS_GARAGEDOOR28 ||
id == MI_LCS_GARAGEDOOR29 ||
id == MI_LCS_GARAGEDOOR30 ||
id == MI_LCS_GARAGEDOOR31 ||
id == MI_LCS_GARAGEDOOR32 ||
id == MI_LCS_GARAGEDOOR33 ||
id == MI_LCS_GARAGEDOOR34 ||
id == MI_LCS_GARAGEDOOR35 ||
id == MI_LCS_GARAGEDOOR36 ||
id == MI_LCS_GARAGEDOOR37 ||
id == MI_LCS_GARAGEDOOR38 ||
id == MI_LCS_GARAGEDOOR39 ||
id == MI_LCS_GARAGEDOOR40;
return id == MI_GARAGEDOOR1 ||
id == MI_GARAGEDOOR17 ||
id == MI_GARAGEDOOR27 ||
id == MI_GARAGEDOOR28 ||
id == MI_GARAGEDOOR29 ||
id == MI_GARAGEDOOR30 ||
id == MI_GARAGEDOOR31 ||
id == MI_GARAGEDOOR32 ||
id == MI_GARAGEDOOR33 ||
id == MI_GARAGEDOOR34 ||
id == MI_GARAGEDOOR35 ||
id == MI_GARAGEDOOR36 ||
id == MI_GARAGEDOOR37 ||
id == MI_GARAGEDOOR38 ||
id == MI_GARAGEDOOR39 ||
id == MI_CRUSHERBODY ||
id == MI_CRUSHERLID ||
id == MI_GARAGEDOOR2 ||
id == MI_GARAGEDOOR3 ||
id == MI_GARAGEDOOR4 ||
id == MI_GARAGEDOOR5 ||
id == MI_GARAGEDOOR6 ||
id == MI_GARAGEDOOR7 ||
id == MI_GARAGEDOOR9 ||
id == MI_GARAGEDOOR10 ||
id == MI_GARAGEDOOR11 ||
id == MI_GARAGEDOOR12 ||
id == MI_GARAGEDOOR13 ||
id == MI_GARAGEDOOR14 ||
id == MI_GARAGEDOOR15 ||
id == MI_GARAGEDOOR16 ||
id == MI_GARAGEDOOR18 ||
id == MI_GARAGEDOOR19 ||
id == MI_GARAGEDOOR20 ||
id == MI_GARAGEDOOR21 ||
id == MI_GARAGEDOOR22 ||
id == MI_GARAGEDOOR23 ||
id == MI_GARAGEDOOR24 ||
id == MI_GARAGEDOOR25 ||
id == MI_GARAGEDOOR26 ||
id == MI_DOOR2_SJL;
}
void CGarages::StopCarFromBlowingUp(CAutomobile* pCar)

View File

@ -1788,56 +1788,35 @@ void
CWorld::RepositionOneObject(CEntity *pEntity)
{
int16 modelId = pEntity->GetModelIndex();
if (modelId == MI_PARKINGMETER || modelId == MI_PHONEBOOTH1 || modelId == MI_WASTEBIN ||
modelId == MI_BIN || modelId == MI_POSTBOX1 || modelId == MI_NEWSSTAND || modelId == MI_TRAFFICCONE ||
modelId == MI_DUMP1 || modelId == MI_ROADWORKBARRIER1 || modelId == MI_BUSSIGN1 || modelId == MI_NOPARKINGSIGN1 ||
modelId == MI_PHONESIGN || modelId == MI_FIRE_HYDRANT || modelId == MI_BOLLARDLIGHT ||
modelId == MI_PARKTABLE || modelId == MI_PARKINGMETER2 || modelId == MI_TELPOLE02 ||
modelId == MI_PARKBENCH || modelId == MI_BARRIER1 || IsTreeModel(modelId)
) {
if (IsLightThatNeedsRepositioning(modelId) || IsTreeModel(modelId) || modelId == MI_PARKINGMETER ||
modelId == MI_PHONEBOOTH1 || modelId == MI_WASTEBIN || modelId == MI_BIN || modelId == MI_POSTBOX1 ||
modelId == MI_NEWSSTAND || modelId == MI_TRAFFICCONE || modelId == MI_DUMP1 ||
modelId == MI_ROADWORKBARRIER1 || modelId == MI_BUSSIGN1 || modelId == MI_NOPARKINGSIGN1 ||
modelId == MI_PHONESIGN || modelId == MI_TAXISIGN || modelId == MI_FISHSTALL01 ||
modelId == MI_FISHSTALL02 || modelId == MI_FISHSTALL03 || modelId == MI_FISHSTALL04 ||
modelId == MI_BAGELSTAND2 || modelId == MI_FIRE_HYDRANT || modelId == MI_BOLLARDLIGHT ||
modelId == MI_PARKTABLE) {
CVector& position = pEntity->GetMatrix().GetPosition();
CColModel* pColModel = pEntity->GetColModel();
float fBoundingBoxMinZ = pColModel->boundingBox.min.z;
float fHeight = pColModel->boundingBox.max.z - pColModel->boundingBox.min.z;
if (fHeight < OBJECT_REPOSITION_OFFSET_Z) fHeight = OBJECT_REPOSITION_OFFSET_Z;
float fBoundingBoxMinZ = pEntity->GetColModel()->boundingBox.min.z;
position.z = FindGroundZFor3DCoord(position.x, position.y,
position.z + fHeight, nil) -
fBoundingBoxMinZ;
position.z + OBJECT_REPOSITION_OFFSET_Z, nil) -
fBoundingBoxMinZ;
pEntity->m_matrix.UpdateRW();
pEntity->UpdateRwFrame();
} else if(IsLightThatNeedsRepositioning(modelId)) {
CVector position = pEntity->GetMatrix().GetPosition();
CColModel* pColModel = pEntity->GetColModel();
float fBoundingBoxMinZ = pColModel->boundingBox.min.z;
float fHeight = pColModel->boundingBox.max.z - pColModel->boundingBox.min.z;
if (fHeight < OBJECT_REPOSITION_OFFSET_Z) fHeight = OBJECT_REPOSITION_OFFSET_Z;
if (pColModel->numBoxes == 1)
position = pEntity->GetMatrix() * CVector(
(pColModel->boxes[0].min.x + pColModel->boxes[0].max.x) / 2,
(pColModel->boxes[0].min.y + pColModel->boxes[0].max.y) / 2,
pColModel->boxes[0].min.z);
else if (pColModel->numSpheres > 0) {
position.z = 1000.0f;
for (int i = 0; i < pColModel->numSpheres; i++) {
if (pColModel->spheres[i].center.z < position.z)
position = pColModel->spheres[i].center;
}
if (position.z < 1000.0f)
position = pEntity->GetMatrix() * position;
}
pEntity->GetMatrix().GetPosition().z = FindGroundZFor3DCoord(position.x, position.y, pEntity->GetMatrix().GetPosition().z + fHeight, nil) - fBoundingBoxMinZ;
pEntity->GetMatrix().UpdateRW();
pEntity->UpdateRwFrame();
}
if(modelId == MI_BUOY) {
} else if(modelId == MI_BUOY) {
float fWaterLevel = 0.0f;
bool bFound = true;
const CVector &position = pEntity->GetPosition();
float fGroundZ = FindGroundZFor3DCoord(position.x, position.y,
position.z + OBJECT_REPOSITION_OFFSET_Z, &bFound);
CColModel *pColModel = pEntity->GetColModel();
float fHeight = pColModel->boundingBox.max.z - pColModel->boundingBox.min.z;
pEntity->GetMatrix().GetPosition().z = 0.2f * fHeight + 6.0f - 0.5f * fHeight;
if(CWaterLevel::GetWaterLevelNoWaves(position.x, position.y, position.z + OBJECT_REPOSITION_OFFSET_Z,
&fWaterLevel)) {
if(!bFound || fWaterLevel > fGroundZ) {
CColModel *pColModel = pEntity->GetColModel();
float fHeight = pColModel->boundingBox.max.z - pColModel->boundingBox.min.z;
pEntity->GetMatrix().GetPosition().z = 0.2f * fHeight + fWaterLevel - 0.5f * fHeight;
}
}
}
}

View File

@ -198,7 +198,7 @@ enum Config {
//#define ANIM_COMPRESSION // only keep most recently used anims uncompressed
#define GTA_TRAIN
//#define GTA_BRIDGE
#define GTA_BRIDGE
#if defined GTA_PS2
# define GTA_PS2_STUFF

View File

@ -2,17 +2,25 @@
#include "General.h"
#include "ModelIndices.h"
#include "main.h"
#define X(name, var) int16 var = -1;
CModelIndices *gpModelIndices;
/*#define X(name, var) int16 var = -1;
MODELINDICES
#undef X
#undef X*/
void
InitModelIndices(void)
{
#define X(name, var) var = -1;
/*#define X(name, var) var = -1;
MODELINDICES
#undef X
#undef X*/
if (gMakeResources)
{
gpModelIndices = new CModelIndices;
memset(gpModelIndices, -1, sizeof(CModelIndices));
}
}
void

View File

@ -2,8 +2,591 @@
#include "ModelInfo.h"
struct CModelIndices
{
int16 TRAFFICLIGHTS;
int16 TLIGHT_POST;
int16 TLIGHT_WALK;
int16 TLIGHT_BOX1;
int16 TLIGHT_BOX2;
int16 TRAFFICLIGHTS_VERTICAL;
int16 TRAFFICLIGHTS_MIAMI;
int16 TRAFFICLIGHTS_TWOVERTICAL;
int16 SINGLESTREETLIGHTS1;
int16 SINGLESTREETLIGHTS2;
int16 SINGLESTREETLIGHTS3;
int16 DOUBLESTREETLIGHTS;
int16 STREETLAMP1;
int16 STREETLAMP2;
int16 ROADSFORROADBLOCKSSTART;
int16 ROADSFORROADBLOCKSEND;
int16 TREE2;
int16 TREE3;
int16 TREE6;
int16 TREE8;
int16 TREE1;
int16 TREE4;
int16 TREE5;
int16 TREE7;
int16 TREE9;
int16 TREE10;
int16 TREE11;
int16 TREE12;
int16 TREE13;
int16 TREE14;
int16 CRANE_1;
int16 CRANE_2;
int16 CRANE_3;
int16 CRANE_4;
int16 CRANE_5;
int16 CRANE_6;
int16 PARKINGMETER;
int16 PARKINGMETER2;
int16 MALLFAN;
int16 HOTELFAN_NIGHT;
int16 HOTELFAN_DAY;
int16 HOTROOMFAN;
int16 PHONEBOOTH1;
int16 WASTEBIN;
int16 BIN;
int16 POSTBOX1;
int16 NEWSSTAND;
int16 TRAFFICCONE;
int16 DUMP1;
int16 ROADWORKBARRIER1;
int16 BUSSIGN1;
int16 NOPARKINGSIGN1;
int16 PHONESIGN;
int16 TAXISIGN;
int16 FISHSTALL01;
int16 FISHSTALL02;
int16 FISHSTALL03;
int16 FISHSTALL04;
int16 BAGELSTAND2;
int16 FIRE_HYDRANT;
int16 COLLECTABLE1;
int16 MONEY;
int16 CARMINE;
int16 GARAGEDOOR1;
int16 GARAGEDOOR2;
int16 GARAGEDOOR3;
int16 GARAGEDOOR4;
int16 GARAGEDOOR5;
int16 GARAGEDOOR6;
int16 GARAGEDOOR7;
int16 GARAGEDOOR9;
int16 GARAGEDOOR10;
int16 GARAGEDOOR11;
int16 GARAGEDOOR12;
int16 GARAGEDOOR13;
int16 GARAGEDOOR14;
int16 GARAGEDOOR15;
int16 GARAGEDOOR16;
int16 GARAGEDOOR17;
int16 GARAGEDOOR18;
int16 GARAGEDOOR19;
int16 GARAGEDOOR20;
int16 GARAGEDOOR21;
int16 GARAGEDOOR22;
int16 GARAGEDOOR23;
int16 GARAGEDOOR24;
int16 GARAGEDOOR25;
int16 GARAGEDOOR26;
int16 GARAGEDOOR27;
int16 GARAGEDOOR28;
int16 GARAGEDOOR29;
int16 GARAGEDOOR30;
int16 GARAGEDOOR31;
int16 GARAGEDOOR32;
int16 GARAGEDOOR33;
int16 GARAGEDOOR34;
int16 GARAGEDOOR35;
int16 GARAGEDOOR36;
int16 GARAGEDOOR37;
int16 GARAGEDOOR38;
int16 GARAGEDOOR39;
int16 TESTRAMP1; // UNUSED
int16 TESTRAMP2;
int16 NAUTICALMINE;
int16 CRUSHERBODY;
int16 CRUSHERLID;
int16 DONKEYMAG;
int16 BULLION;
int16 FLOATPACKAGE1;
int16 BRIEFCASE;
int16 CHINABANNER1;
int16 CHINABANNER2;
int16 CHINABANNER3;
int16 CHINABANNER4;
int16 CHINABANNER5;
int16 CHINABANNER6;
int16 CHINABANNER7;
int16 CHINABANNER8;
int16 CHINABANNER9;
int16 CHINABANNER10;
int16 CHINABANNER11;
int16 CHINABANNER12;
int16 CHINALANTERN;
int16 GLASS1;
int16 GLASS2;
int16 GLASS3;
int16 GLASS4;
int16 GLASS5;
int16 GLASS6;
int16 GLASS7;
int16 GLASS8;
int16 BRIDGELIFT;
int16 BRIDGEWEIGHT;
int16 BRIDGEROADSEGMENT;
int16 EXPLODINGBARREL;
int16 ITALYBANNER1;
int16 MEGADAMAGE;
int16 REGENERATOR;
int16 INVISIBLE;
int16 GOOD_CAR;
int16 BAD_CAR;
int16 PICKUP_ADRENALINE;
int16 PICKUP_BODYARMOUR;
int16 PICKUP_INFO;
int16 PICKUP_HEALTH;
int16 PICKUP_BONUS;
int16 PICKUP_BRIBE;
int16 PICKUP_KILLFRENZY;
int16 PICKUP_CAMERA;
int16 PICKUP_REVENUE;
int16 PICKUP_SAVEGAME;
int16 PICKUP_PROPERTY;
int16 PICKUP_PROPERTY_FORSALE;
int16 PICKUP_CLOTHES;
int16 BOLLARDLIGHT;
int16 CA_SP1;
int16 CA_SP2;
int16 CA_SP3;
int16 CA_SP4;
int16 PACKAGE1IZZY;
int16 MAGNET;
int16 RAILTRACKS;
int16 FENCE;
int16 FENCE2;
int16 PETROLPUMP;
int16 PETROLPUMP2;
int16 BODYCAST;
int16 IZZY_CONFDOOR;
int16 SHIPDOOR;
int16 IZZY_JDDOOR;
int16 IZZY_JDDOOR_SLIDER;
int16 LITEHOUSE_GATE;
int16 COFFEE;
int16 BUOY;
int16 PARKTABLE;
int16 SUBWAY1;
int16 SUBWAY2;
int16 SUBWAY3;
int16 SUBWAY4;
int16 SUBWAY5;
int16 SUBWAY6;
int16 SUBWAY7;
int16 SUBWAY8;
int16 SUBWAY9;
int16 SUBWAY10;
int16 SUBWAY11;
int16 SUBWAY12;
int16 SUBWAY13;
int16 SUBWAY14;
int16 SUBWAY15;
int16 SUBWAY16;
int16 SUBWAY17;
int16 SUBWAY18;
int16 SUBPLATFORM_IND;
int16 SUBPLATFORM_COMS;
int16 SUBPLATFORM_COMS2;
int16 SUBPLATFORM_COMN;
int16 SUBPLATFORM_SUB;
int16 SUBPLATFORM_SUB2;
int16 FILES;
int16 LAMPPOST1;
int16 VEG_PALM01;
int16 VEG_PALM02;
int16 VEG_PALM03;
int16 VEG_PALM04;
int16 VEG_PALM05;
int16 VEG_PALM06;
int16 VEG_PALM07;
int16 VEG_PALM08;
int16 MLAMPPOST;
int16 BARRIER1;
int16 LITTLEHA_POLICE;
int16 TELPOLE02;
int16 TRAFFICLIGHT01;
int16 PARKBENCH;
int16 PLC_STINGER;
int16 LIGHTBEAM;
int16 AIRPORTRADAR;
int16 RCBOMB;
int16 JM_SALRADIO;
int16 BEACHBALL;
int16 SANDCASTLE1;
int16 SANDCASTLE2;
int16 JELLYFISH;
int16 JELLYFISH01;
int16 FISH1SINGLE;
int16 FISH1S;
int16 FISH2SINGLE;
int16 FISH2S;
int16 FISH3SINGLE;
int16 FISH3S;
int16 TURTLE;
int16 DOLPHIN;
int16 SHARK;
int16 SUBMARINE;
int16 ESCALATORSTEP;
int16 LOUNGE_WOOD_UP;
int16 LOUNGE_TOWEL_UP;
int16 LOUNGE_WOOD_DN;
int16 LOTION;
int16 BEACHTOWEL01;
int16 BEACHTOWEL02;
int16 BEACHTOWEL03;
int16 BEACHTOWEL04;
int16 BLIMP_NIGHT;
int16 BLIMP_DAY;
int16 YT_MAIN_BODY;
int16 YT_MAIN_BODY2;
int16 SMALL_HELIX;
int16 PT_BARRIER;
int16 SUBWAYGATE;
int16 IN_PMBRIDRAMP3;
int16 IN_PMBRIDG2_UPGS;
int16 IN_PMBRIDGE2;
int16 IN_PMBRIDG1_UPGS;
int16 PM_LIGHTRIG3;
int16 PM_LIGHTRIG1;
int16 IN_PMSCAFF_UPS;
int16 IN_PM_CONCBLOK2;
int16 IN_PMSCAFFH_NS;
int16 IN_PM_GRAVL_JMP;
int16 IN_PM_SCAFFCOVR;
int16 IN_PM_GIRDER2;
int16 IN_PM_SCAFFH_WE;
int16 IN_PM_SIXCONC2;
int16 IN_BMBRIDRAMP3;
int16 IN_BMBRIDG2_UPGS;
int16 IN_BMBRIDGE2;
int16 IN_BMBRIDG1_UPGS;
int16 BM_LIGHTRIG3;
int16 BM_LIGHTRIG1;
int16 IN_BMSCAFF_UPS;
int16 IN_BM_CONCBLOK2;
int16 IN_BMSCAFFH_NS;
int16 IN_BM_GRAVL_JMP;
int16 IN_BM_SCAFFCOVR;
int16 IN_BM_GIRDER2;
int16 IN_BM_SCAFFH_WE;
int16 IN_BM_SIXCONC2;
int16 CRATE_SJL;
int16 DOOR1_SJL;
int16 DOOR2_SJL;
int16 SJL_PORTACABIN;
int16 SJL_PORTACABINRED;
int16 advert_test; // txd
};
extern CModelIndices *gpModelIndices;
#define MI_TRAFFICLIGHTS gpModelIndices->TRAFFICLIGHTS
#define MI_TLIGHT_POST gpModelIndices->TLIGHT_POST
#define MI_TLIGHT_WALK gpModelIndices->TLIGHT_WALK
#define MI_TLIGHT_BOX1 gpModelIndices->TLIGHT_BOX1
#define MI_TLIGHT_BOX2 gpModelIndices->TLIGHT_BOX2
#define MI_TRAFFICLIGHTS_VERTICAL gpModelIndices->TRAFFICLIGHTS_VERTICAL
#define MI_TRAFFICLIGHTS_MIAMI gpModelIndices->TRAFFICLIGHTS_MIAMI
#define MI_TRAFFICLIGHTS_TWOVERTICAL gpModelIndices->TRAFFICLIGHTS_TWOVERTICAL
#define MI_SINGLESTREETLIGHTS1 gpModelIndices->SINGLESTREETLIGHTS1
#define MI_SINGLESTREETLIGHTS2 gpModelIndices->SINGLESTREETLIGHTS2
#define MI_SINGLESTREETLIGHTS3 gpModelIndices->SINGLESTREETLIGHTS3
#define MI_DOUBLESTREETLIGHTS gpModelIndices->DOUBLESTREETLIGHTS
#define MI_STREETLAMP1 gpModelIndices->STREETLAMP1
#define MI_STREETLAMP2 gpModelIndices->STREETLAMP2
#define MI_ROADSFORROADBLOCKSSTART gpModelIndices->ROADSFORROADBLOCKSSTART
#define MI_ROADSFORROADBLOCKSEND gpModelIndices->ROADSFORROADBLOCKSEND
#define MI_TREE2 gpModelIndices->TREE2
#define MI_TREE3 gpModelIndices->TREE3
#define MI_TREE6 gpModelIndices->TREE6
#define MI_TREE8 gpModelIndices->TREE8
#define MI_TREE1 gpModelIndices->TREE1
#define MI_TREE4 gpModelIndices->TREE4
#define MI_TREE5 gpModelIndices->TREE5
#define MI_TREE7 gpModelIndices->TREE7
#define MI_TREE9 gpModelIndices->TREE9
#define MI_TREE10 gpModelIndices->TREE10
#define MI_TREE11 gpModelIndices->TREE11
#define MI_TREE12 gpModelIndices->TREE12
#define MI_TREE13 gpModelIndices->TREE13
#define MI_TREE14 gpModelIndices->TREE14
#define MODELID_CRANE_1 gpModelIndices->CRANE_1
#define MODELID_CRANE_2 gpModelIndices->CRANE_2
#define MODELID_CRANE_3 gpModelIndices->CRANE_3
#define MODELID_CRANE_4 gpModelIndices->CRANE_4
#define MODELID_CRANE_5 gpModelIndices->CRANE_5
#define MODELID_CRANE_6 gpModelIndices->CRANE_6
#define MI_PARKINGMETER gpModelIndices->PARKINGMETER
#define MI_PARKINGMETER2 gpModelIndices->PARKINGMETER2
#define MI_MALLFAN gpModelIndices->MALLFAN
#define MI_HOTELFAN_NIGHT gpModelIndices->HOTELFAN_NIGHT
#define MI_HOTELFAN_DAY gpModelIndices->HOTELFAN_DAY
#define MI_HOTROOMFAN gpModelIndices->HOTROOMFAN
#define MI_PHONEBOOTH1 gpModelIndices->PHONEBOOTH1
#define MI_WASTEBIN gpModelIndices->WASTEBIN
#define MI_BIN gpModelIndices->BIN
#define MI_POSTBOX1 gpModelIndices->POSTBOX1
#define MI_NEWSSTAND gpModelIndices->NEWSSTAND
#define MI_TRAFFICCONE gpModelIndices->TRAFFICCONE
#define MI_DUMP1 gpModelIndices->DUMP1
#define MI_ROADWORKBARRIER1 gpModelIndices->ROADWORKBARRIER1
#define MI_BUSSIGN1 gpModelIndices->BUSSIGN1
#define MI_NOPARKINGSIGN1 gpModelIndices->NOPARKINGSIGN1
#define MI_PHONESIGN gpModelIndices->PHONESIGN
#define MI_TAXISIGN gpModelIndices->TAXISIGN
#define MI_FISHSTALL01 gpModelIndices->FISHSTALL01
#define MI_FISHSTALL02 gpModelIndices->FISHSTALL02
#define MI_FISHSTALL03 gpModelIndices->FISHSTALL03
#define MI_FISHSTALL04 gpModelIndices->FISHSTALL04
#define MI_BAGELSTAND2 gpModelIndices->BAGELSTAND2
#define MI_FIRE_HYDRANT gpModelIndices->FIRE_HYDRANT
#define MI_COLLECTABLE1 gpModelIndices->COLLECTABLE1
#define MI_MONEY gpModelIndices->MONEY
#define MI_CARMINE gpModelIndices->CARMINE
#define MI_GARAGEDOOR1 gpModelIndices->GARAGEDOOR1
#define MI_GARAGEDOOR2 gpModelIndices->GARAGEDOOR2
#define MI_GARAGEDOOR3 gpModelIndices->GARAGEDOOR3
#define MI_GARAGEDOOR4 gpModelIndices->GARAGEDOOR4
#define MI_GARAGEDOOR5 gpModelIndices->GARAGEDOOR5
#define MI_GARAGEDOOR6 gpModelIndices->GARAGEDOOR6
#define MI_GARAGEDOOR7 gpModelIndices->GARAGEDOOR7
#define MI_GARAGEDOOR9 gpModelIndices->GARAGEDOOR9
#define MI_GARAGEDOOR10 gpModelIndices->GARAGEDOOR10
#define MI_GARAGEDOOR11 gpModelIndices->GARAGEDOOR11
#define MI_GARAGEDOOR12 gpModelIndices->GARAGEDOOR12
#define MI_GARAGEDOOR13 gpModelIndices->GARAGEDOOR13
#define MI_GARAGEDOOR14 gpModelIndices->GARAGEDOOR14
#define MI_GARAGEDOOR15 gpModelIndices->GARAGEDOOR15
#define MI_GARAGEDOOR16 gpModelIndices->GARAGEDOOR16
#define MI_GARAGEDOOR17 gpModelIndices->GARAGEDOOR17
#define MI_GARAGEDOOR18 gpModelIndices->GARAGEDOOR18
#define MI_GARAGEDOOR19 gpModelIndices->GARAGEDOOR19
#define MI_GARAGEDOOR20 gpModelIndices->GARAGEDOOR20
#define MI_GARAGEDOOR21 gpModelIndices->GARAGEDOOR21
#define MI_GARAGEDOOR22 gpModelIndices->GARAGEDOOR22
#define MI_GARAGEDOOR23 gpModelIndices->GARAGEDOOR23
#define MI_GARAGEDOOR24 gpModelIndices->GARAGEDOOR24
#define MI_GARAGEDOOR25 gpModelIndices->GARAGEDOOR25
#define MI_GARAGEDOOR26 gpModelIndices->GARAGEDOOR26
#define MI_GARAGEDOOR27 gpModelIndices->GARAGEDOOR27
#define MI_GARAGEDOOR28 gpModelIndices->GARAGEDOOR28
#define MI_GARAGEDOOR29 gpModelIndices->GARAGEDOOR29
#define MI_GARAGEDOOR30 gpModelIndices->GARAGEDOOR30
#define MI_GARAGEDOOR31 gpModelIndices->GARAGEDOOR31
#define MI_GARAGEDOOR32 gpModelIndices->GARAGEDOOR32
#define MI_GARAGEDOOR33 gpModelIndices->GARAGEDOOR33
#define MI_GARAGEDOOR34 gpModelIndices->GARAGEDOOR34
#define MI_GARAGEDOOR35 gpModelIndices->GARAGEDOOR35
#define MI_GARAGEDOOR36 gpModelIndices->GARAGEDOOR36
#define MI_GARAGEDOOR37 gpModelIndices->GARAGEDOOR37
#define MI_GARAGEDOOR38 gpModelIndices->GARAGEDOOR38
#define MI_GARAGEDOOR39 gpModelIndices->GARAGEDOOR39
#define MI_TESTRAMP1 gpModelIndices->TESTRAMP1 // UNUSED
#define MI_TESTRAMP2 gpModelIndices->TESTRAMP2
#define MI_NAUTICALMINE gpModelIndices->NAUTICALMINE
#define MI_CRUSHERBODY gpModelIndices->CRUSHERBODY
#define MI_CRUSHERLID gpModelIndices->CRUSHERLID
#define MI_DONKEYMAG gpModelIndices->DONKEYMAG
#define MI_BULLION gpModelIndices->BULLION
#define MI_FLOATPACKAGE1 gpModelIndices->FLOATPACKAGE1
#define MI_BRIEFCASE gpModelIndices->BRIEFCASE
#define MI_CHINABANNER1 gpModelIndices->CHINABANNER1
#define MI_CHINABANNER2 gpModelIndices->CHINABANNER2
#define MI_CHINABANNER3 gpModelIndices->CHINABANNER3
#define MI_CHINABANNER4 gpModelIndices->CHINABANNER4
#define MI_CHINABANNER5 gpModelIndices->CHINABANNER5
#define MI_CHINABANNER6 gpModelIndices->CHINABANNER6
#define MI_CHINABANNER7 gpModelIndices->CHINABANNER7
#define MI_CHINABANNER8 gpModelIndices->CHINABANNER8
#define MI_CHINABANNER9 gpModelIndices->CHINABANNER9
#define MI_CHINABANNER10 gpModelIndices->CHINABANNER10
#define MI_CHINABANNER11 gpModelIndices->CHINABANNER11
#define MI_CHINABANNER12 gpModelIndices->CHINABANNER12
#define MI_CHINALANTERN gpModelIndices->CHINALANTERN
#define MI_GLASS1 gpModelIndices->GLASS1
#define MI_GLASS2 gpModelIndices->GLASS2
#define MI_GLASS3 gpModelIndices->GLASS3
#define MI_GLASS4 gpModelIndices->GLASS4
#define MI_GLASS5 gpModelIndices->GLASS5
#define MI_GLASS6 gpModelIndices->GLASS6
#define MI_GLASS7 gpModelIndices->GLASS7
#define MI_GLASS8 gpModelIndices->GLASS8
#define MI_BRIDGELIFT gpModelIndices->BRIDGELIFT
#define MI_BRIDGEWEIGHT gpModelIndices->BRIDGEWEIGHT
#define MI_BRIDGEROADSEGMENT gpModelIndices->BRIDGEROADSEGMENT
#define MI_EXPLODINGBARREL gpModelIndices->EXPLODINGBARREL
#define MI_ITALYBANNER1 gpModelIndices->ITALYBANNER1
#define MI_MEGADAMAGE gpModelIndices->MEGADAMAGE
#define MI_REGENERATOR gpModelIndices->REGENERATOR
#define MI_INVISIBLE gpModelIndices->INVISIBLE
#define MI_GOOD_CAR gpModelIndices->GOOD_CAR
#define MI_BAD_CAR gpModelIndices->BAD_CAR
#define MI_PICKUP_ADRENALINE gpModelIndices->PICKUP_ADRENALINE
#define MI_PICKUP_BODYARMOUR gpModelIndices->PICKUP_BODYARMOUR
#define MI_PICKUP_INFO gpModelIndices->PICKUP_INFO
#define MI_PICKUP_HEALTH gpModelIndices->PICKUP_HEALTH
#define MI_PICKUP_BONUS gpModelIndices->PICKUP_BONUS
#define MI_PICKUP_BRIBE gpModelIndices->PICKUP_BRIBE
#define MI_PICKUP_KILLFRENZY gpModelIndices->PICKUP_KILLFRENZY
#define MI_PICKUP_CAMERA gpModelIndices->PICKUP_CAMERA
#define MI_PICKUP_REVENUE gpModelIndices->PICKUP_REVENUE
#define MI_PICKUP_SAVEGAME gpModelIndices->PICKUP_SAVEGAME
#define MI_PICKUP_PROPERTY gpModelIndices->PICKUP_PROPERTY
#define MI_PICKUP_PROPERTY_FORSALE gpModelIndices->PICKUP_PROPERTY_FORSALE
#define MI_PICKUP_CLOTHES gpModelIndices->PICKUP_CLOTHES
#define MI_BOLLARDLIGHT gpModelIndices->BOLLARDLIGHT
#define MI_CA_SP1 gpModelIndices->CA_SP1
#define MI_CA_SP2 gpModelIndices->CA_SP2
#define MI_CA_SP3 gpModelIndices->CA_SP3
#define MI_CA_SP4 gpModelIndices->CA_SP4
#define MI_PACKAGE1IZZY gpModelIndices->PACKAGE1IZZY
#define MI_MAGNET gpModelIndices->MAGNET
#define MI_RAILTRACKS gpModelIndices->RAILTRACKS
#define MI_FENCE gpModelIndices->FENCE
#define MI_FENCE2 gpModelIndices->FENCE2
#define MI_PETROLPUMP gpModelIndices->PETROLPUMP
#define MI_PETROLPUMP2 gpModelIndices->PETROLPUMP2
#define MI_BODYCAST gpModelIndices->BODYCAST
#define MI_IZZY_CONFDOOR gpModelIndices->IZZY_CONFDOOR
#define MI_SHIPDOOR gpModelIndices->SHIPDOOR
#define MI_IZZY_JDDOOR gpModelIndices->IZZY_JDDOOR
#define MI_IZZY_JDDOOR_SLIDER gpModelIndices->IZZY_JDDOOR_SLIDER
#define MI_LITEHOUSE_GATE gpModelIndices->LITEHOUSE_GATE
#define MI_COFFEE gpModelIndices->COFFEE
#define MI_BUOY gpModelIndices->BUOY
#define MI_PARKTABLE gpModelIndices->PARKTABLE
#define MI_SUBWAY1 gpModelIndices->SUBWAY1
#define MI_SUBWAY2 gpModelIndices->SUBWAY2
#define MI_SUBWAY3 gpModelIndices->SUBWAY3
#define MI_SUBWAY4 gpModelIndices->SUBWAY4
#define MI_SUBWAY5 gpModelIndices->SUBWAY5
#define MI_SUBWAY6 gpModelIndices->SUBWAY6
#define MI_SUBWAY7 gpModelIndices->SUBWAY7
#define MI_SUBWAY8 gpModelIndices->SUBWAY8
#define MI_SUBWAY9 gpModelIndices->SUBWAY9
#define MI_SUBWAY10 gpModelIndices->SUBWAY10
#define MI_SUBWAY11 gpModelIndices->SUBWAY11
#define MI_SUBWAY12 gpModelIndices->SUBWAY12
#define MI_SUBWAY13 gpModelIndices->SUBWAY13
#define MI_SUBWAY14 gpModelIndices->SUBWAY14
#define MI_SUBWAY15 gpModelIndices->SUBWAY15
#define MI_SUBWAY16 gpModelIndices->SUBWAY16
#define MI_SUBWAY17 gpModelIndices->SUBWAY17
#define MI_SUBWAY18 gpModelIndices->SUBWAY18
#define MI_SUBPLATFORM_IND gpModelIndices->SUBPLATFORM_IND
#define MI_SUBPLATFORM_COMS gpModelIndices->SUBPLATFORM_COMS
#define MI_SUBPLATFORM_COMS2 gpModelIndices->SUBPLATFORM_COMS2
#define MI_SUBPLATFORM_COMN gpModelIndices->SUBPLATFORM_COMN
#define MI_SUBPLATFORM_SUB gpModelIndices->SUBPLATFORM_SUB
#define MI_SUBPLATFORM_SUB2 gpModelIndices->SUBPLATFORM_SUB2
#define MI_FILES gpModelIndices->FILES
#define MI_LAMPPOST1 gpModelIndices->LAMPPOST1
#define MI_VEG_PALM01 gpModelIndices->VEG_PALM01
#define MI_VEG_PALM02 gpModelIndices->VEG_PALM02
#define MI_VEG_PALM03 gpModelIndices->VEG_PALM03
#define MI_VEG_PALM04 gpModelIndices->VEG_PALM04
#define MI_VEG_PALM05 gpModelIndices->VEG_PALM05
#define MI_VEG_PALM06 gpModelIndices->VEG_PALM06
#define MI_VEG_PALM07 gpModelIndices->VEG_PALM07
#define MI_VEG_PALM08 gpModelIndices->VEG_PALM08
#define MI_MLAMPPOST gpModelIndices->MLAMPPOST
#define MI_BARRIER1 gpModelIndices->BARRIER1
#define MI_LITTLEHA_POLICE gpModelIndices->LITTLEHA_POLICE
#define MI_TELPOLE02 gpModelIndices->TELPOLE02
#define MI_TRAFFICLIGHT01 gpModelIndices->TRAFFICLIGHT01
#define MI_PARKBENCH gpModelIndices->PARKBENCH
#define MI_PLC_STINGER gpModelIndices->PLC_STINGER
#define MI_LIGHTBEAM gpModelIndices->LIGHTBEAM
#define MI_AIRPORTRADAR gpModelIndices->AIRPORTRADAR
#define MI_RCBOMB gpModelIndices->RCBOMB
#define MI_JM_SALRADIO gpModelIndices->JM_SALRADIO
#define MI_BEACHBALL gpModelIndices->BEACHBALL
#define MI_SANDCASTLE1 gpModelIndices->SANDCASTLE1
#define MI_SANDCASTLE2 gpModelIndices->SANDCASTLE2
#define MI_JELLYFISH gpModelIndices->JELLYFISH
#define MI_JELLYFISH01 gpModelIndices->JELLYFISH01
#define MI_FISH1SINGLE gpModelIndices->FISH1SINGLE
#define MI_FISH1S gpModelIndices->FISH1S
#define MI_FISH2SINGLE gpModelIndices->FISH2SINGLE
#define MI_FISH2S gpModelIndices->FISH2S
#define MI_FISH3SINGLE gpModelIndices->FISH3SINGLE
#define MI_FISH3S gpModelIndices->FISH3S
#define MI_TURTLE gpModelIndices->TURTLE
#define MI_DOLPHIN gpModelIndices->DOLPHIN
#define MI_SHARK gpModelIndices->SHARK
#define MI_SUBMARINE gpModelIndices->SUBMARINE
#define MI_ESCALATORSTEP gpModelIndices->ESCALATORSTEP
#define MI_LOUNGE_WOOD_UP gpModelIndices->LOUNGE_WOOD_UP
#define MI_LOUNGE_TOWEL_UP gpModelIndices->LOUNGE_TOWEL_UP
#define MI_LOUNGE_WOOD_DN gpModelIndices->LOUNGE_WOOD_DN
#define MI_LOTION gpModelIndices->LOTION
#define MI_BEACHTOWEL01 gpModelIndices->BEACHTOWEL01
#define MI_BEACHTOWEL02 gpModelIndices->BEACHTOWEL02
#define MI_BEACHTOWEL03 gpModelIndices->BEACHTOWEL03
#define MI_BEACHTOWEL04 gpModelIndices->BEACHTOWEL04
#define MI_BLIMP_NIGHT gpModelIndices->BLIMP_NIGHT
#define MI_BLIMP_DAY gpModelIndices->BLIMP_DAY
#define MI_YT_MAIN_BODY gpModelIndices->YT_MAIN_BODY
#define MI_YT_MAIN_BODY2 gpModelIndices->YT_MAIN_BODY2
#define MI_SMALL_HELIX gpModelIndices->SMALL_HELIX
#define MI_PT_BARRIER gpModelIndices->PT_BARRIER
#define MI_SUBWAYGATE gpModelIndices->SUBWAYGATE
#define MI_IN_PMBRIDRAMP3 gpModelIndices->IN_PMBRIDRAMP3
#define MI_IN_PMBRIDG2_UPGS gpModelIndices->IN_PMBRIDG2_UPGS
#define MI_IN_PMBRIDGE2 gpModelIndices->IN_PMBRIDGE2
#define MI_IN_PMBRIDG1_UPGS gpModelIndices->IN_PMBRIDG1_UPGS
#define MI_PM_LIGHTRIG3 gpModelIndices->PM_LIGHTRIG3
#define MI_PM_LIGHTRIG1 gpModelIndices->PM_LIGHTRIG1
#define MI_IN_PMSCAFF_UPS gpModelIndices->IN_PMSCAFF_UPS
#define MI_IN_PM_CONCBLOK2 gpModelIndices->IN_PM_CONCBLOK2
#define MI_IN_PMSCAFFH_NS gpModelIndices->IN_PMSCAFFH_NS
#define MI_IN_PM_GRAVL_JMP gpModelIndices->IN_PM_GRAVL_JMP
#define MI_IN_PM_SCAFFCOVR gpModelIndices->IN_PM_SCAFFCOVR
#define MI_IN_PM_GIRDER2 gpModelIndices->IN_PM_GIRDER2
#define MI_IN_PM_SCAFFH_WE gpModelIndices->IN_PM_SCAFFH_WE
#define MI_IN_PM_SIXCONC2 gpModelIndices->IN_PM_SIXCONC2
#define MI_IN_BMBRIDRAMP3 gpModelIndices->IN_BMBRIDRAMP3
#define MI_IN_BMBRIDG2_UPGS gpModelIndices->IN_BMBRIDG2_UPGS
#define MI_IN_BMBRIDGE2 gpModelIndices->IN_BMBRIDGE2
#define MI_IN_BMBRIDG1_UPGS gpModelIndices->IN_BMBRIDG1_UPGS
#define MI_BM_LIGHTRIG3 gpModelIndices->BM_LIGHTRIG3
#define MI_BM_LIGHTRIG1 gpModelIndices->BM_LIGHTRIG1
#define MI_IN_BMSCAFF_UPS gpModelIndices->IN_BMSCAFF_UPS
#define MI_IN_BM_CONCBLOK2 gpModelIndices->IN_BM_CONCBLOK2
#define MI_IN_BMSCAFFH_NS gpModelIndices->IN_BMSCAFFH_NS
#define MI_IN_BM_GRAVL_JMP gpModelIndices->IN_BM_GRAVL_JMP
#define MI_IN_BM_SCAFFCOVR gpModelIndices->IN_BM_SCAFFCOVR
#define MI_IN_BM_GIRDER2 gpModelIndices->IN_BM_GIRDER2
#define MI_IN_BM_SCAFFH_WE gpModelIndices->IN_BM_SCAFFH_WE
#define MI_IN_BM_SIXCONC2 gpModelIndices->IN_BM_SIXCONC2
#define MI_CRATE_SJL gpModelIndices->CRATE_SJL
#define MI_DOOR1_SJL gpModelIndices->DOOR1_SJL
#define MI_DOOR2_SJL gpModelIndices->DOOR2_SJL
#define MI_SJL_PORTACABIN gpModelIndices->SJL_PORTACABIN
#define MI_SJL_PORTACABINRED gpModelIndices->SJL_PORTACABINRED
#define MODELINDICES \
X("fire_hydrant", MI_FIRE_HYDRANT) \
X("fire_hydrant", MI_FIRE_HYDRANT) /* BUG: second time */ \
X("bagelstnd02", MI_BAGELSTAND2) \
X("fish01", MI_FISHSTALL01) \
X("fishstall02", MI_FISHSTALL02) \
X("fishstall03", MI_FISHSTALL03) \
X("fishstall04", MI_FISHSTALL04) \
X("taxisign", MI_TAXISIGN) \
X("phonesign", MI_PHONESIGN) \
X("noparkingsign1", MI_NOPARKINGSIGN1) \
X("bussign1", MI_BUSSIGN1) \
@ -16,12 +599,17 @@
X("wastebin", MI_WASTEBIN) \
X("phonebooth1", MI_PHONEBOOTH1) \
X("parkingmeter", MI_PARKINGMETER) \
X("trafficlight1", MI_TRAFFICLIGHTS) \
X("tlight_post", MI_TLIGHT_POST) \
X("tlight_walk", MI_TLIGHT_WALK) \
X("tlight_box1", MI_TLIGHT_BOX1) \
X("tlight_box2", MI_TLIGHT_BOX2) \
X("parkingmeterg", MI_PARKINGMETER2) \
X("mall_fans", MI_MALLFAN) \
X("htl_fan_rotate_nt", MI_HOTELFAN_NIGHT) \
X("htl_fan_rotate_dy", MI_HOTELFAN_DAY) \
X("hotroomfan", MI_HOTROOMFAN) \
X("trafficlight1", MI_TRAFFICLIGHTS) \
X("trafficlight1", MI_TRAFFICLIGHTS) /* BUG: second time */ \
X("MTraffic4", MI_TRAFFICLIGHTS_VERTICAL) \
X("MTraffic1", MI_TRAFFICLIGHTS_MIAMI) \
X("MTraffic2", MI_TRAFFICLIGHTS_TWOVERTICAL) \
@ -31,47 +619,110 @@
X("doublestreetlght1", MI_DOUBLESTREETLIGHTS) \
X("Streetlamp1", MI_STREETLAMP1) \
X("Streetlamp2", MI_STREETLAMP2) \
X("rd_Road2A10", MI_ROADSFORROADBLOCKSSTART) \
X("rd_Road1A30", MI_ROADSFORROADBLOCKSEND) \
X("veg_tree1", MI_TREE1) \
X("veg_tree3", MI_TREE2) \
X("veg_treea1", MI_TREE3) \
X("veg_treenew01", MI_TREE4) \
X("veg_treenew05", MI_TREE5) \
X("veg_treeb1", MI_TREE6) \
X("veg_treenew10", MI_TREE7) \
X("veg_treea3", MI_TREE8) \
X("doc_crane_cab0", MODELID_CRANE_1) \
X("doc_crane_cab01", MODELID_CRANE_2) \
X("doc_crane_cab02", MODELID_CRANE_3) \
X("doc_crane_cab03", MODELID_CRANE_4) \
X("boatcranelg0", MODELID_CRANE_5) \
X("LODnetopa0", MODELID_CRANE_6) \
X("veg_treenew09", MI_TREE9) \
X("veg_treenew08", MI_TREE10) \
X("veg_treenew03", MI_TREE11) \
X("veg_treenew16", MI_TREE12) \
X("veg_treenew17", MI_TREE13) \
X("veg_treenew06", MI_TREE14) \
X("crusher_crane", MODELID_CRANE_1) \
X("package1", MI_COLLECTABLE1) \
X("Money", MI_MONEY) \
X("barrel1", MI_CARMINE) \
X("dk_paynspraydoor", MI_GARAGEDOOR2) \
X("dk_waretankdoor1", MI_GARAGEDOOR3) \
X("hav_garagedoor1", MI_GARAGEDOOR4) \
X("hav_garagedoor02", MI_GARAGEDOOR5) \
X("hav_garagedoor03", MI_GARAGEDOOR6) \
X("hav_garagedoor04", MI_GARAGEDOOR7) \
X("lh_showdoor03", MI_GARAGEDOOR9) \
X("lh_showdoor1", MI_GARAGEDOOR10) \
X("lhtankdoor", MI_GARAGEDOOR11) \
X("nbtgardoor", MI_GARAGEDOOR12) \
X("dk_camjonesdoor", MI_GARAGEDOOR13) \
X("nbtgardoor02", MI_GARAGEDOOR14) \
X("dt_savedra", MI_GARAGEDOOR15) \
X("dt_savedrb", MI_GARAGEDOOR16) \
X("dk_bombdoor", MI_GARAGEDOOR18) \
X("haiwshpnsdoor", MI_GARAGEDOOR19) \
X("wshpnsdoor", MI_GARAGEDOOR20) \
X("nbecpnsdoor", MI_GARAGEDOOR21) \
X("nbtgardoor03", MI_GARAGEDOOR22) \
X("dt_savedrc", MI_GARAGEDOOR23) \
X("dt_savedrd", MI_GARAGEDOOR24) \
X("man_frntstepGD", MI_GARAGEDOOR25) \
X("svegrgedoor", MI_GARAGEDOOR26) \
X("oddjgaragdoor", MI_GARAGEDOOR1) \
X("bombdoor", MI_GARAGEDOOR2) \
X("door_bombshop", MI_GARAGEDOOR3) \
X("vheistlocdoor", MI_GARAGEDOOR4) \
X("door2_garage", MI_GARAGEDOOR5) \
X("ind_slidedoor", MI_GARAGEDOOR6) \
X("bankjobdoor", MI_GARAGEDOOR7) \
X("door_jmsgrage", MI_GARAGEDOOR9) \
X("jamesgrge_kb", MI_GARAGEDOOR10) \
X("door_sfehousegrge", MI_GARAGEDOOR11) \
X("shedgaragedoor", MI_GARAGEDOOR12) \
X("door4_garage", MI_GARAGEDOOR13) \
X("door_col_compnd_01", MI_GARAGEDOOR14) \
X("door_col_compnd_02", MI_GARAGEDOOR15) \
X("door_col_compnd_03", MI_GARAGEDOOR16) \
X("door_col_compnd_04", MI_GARAGEDOOR17) \
X("door_col_compnd_05", MI_GARAGEDOOR18) \
X("impex_door", MI_GARAGEDOOR19) \
X("SalvGarage", MI_GARAGEDOOR20) \
X("door3_garage", MI_GARAGEDOOR21) \
X("leveldoor2", MI_GARAGEDOOR22) \
X("double_garage_dr", MI_GARAGEDOOR23) \
X("amcogaragedoor", MI_GARAGEDOOR24) \
X("towergaragedoor1", MI_GARAGEDOOR25) \
X("towergaragedoor2", MI_GARAGEDOOR26) \
X("towergaragedoor3", MI_GARAGEDOOR27) \
X("plysve_gragedoor", MI_GARAGEDOOR28) \
X("impexpsubgrgdoor", MI_GARAGEDOOR29) \
X("Sub_sprayshopdoor", MI_GARAGEDOOR30) \
X("ind_plyrwoor", MI_GARAGEDOOR31) \
X("8ballsuburbandoor", MI_GARAGEDOOR32) \
X("door_nthgrage", MI_GARAGEDOOR33) \
X("hangardoor1", MI_GARAGEDOOR34) \
X("hangardoor2", MI_GARAGEDOOR35) \
X("neds_door", MI_GARAGEDOOR36) \
X("fs_wrhsedoor", MI_GARAGEDOOR37) \
X("jm_ContraGarage", MI_GARAGEDOOR38) \
X("jm_imp_SalvGarage", MI_GARAGEDOOR39) \
X("Testramp1", MI_TESTRAMP1) /* BUG: LCS used MI_TESTRAMP2 here */ \
X("Testramp2", MI_TESTRAMP2) \
X("barrel2", MI_NAUTICALMINE) \
X("crushercrush", MI_CRUSHERBODY) \
X("crushertop", MI_CRUSHERLID) \
X("donkeymag", MI_DONKEYMAG) \
X("bullion", MI_BULLION) \
X("floatpackge1", MI_FLOATPACKAGE1) \
X("briefcase", MI_BRIEFCASE) \
X("wglasssmash", MI_GLASS1) \
X("chinabanner1", MI_CHINABANNER1) \
X("chinabanner2", MI_CHINABANNER2) \
X("chinabanner3", MI_CHINABANNER3) \
X("chinabanner4", MI_CHINABANNER4) \
X("iten_chinatown5", MI_CHINABANNER5) \
X("iten_chinatown7", MI_CHINABANNER6) \
X("iten_chinatown3", MI_CHINABANNER7) \
X("iten_chinatown2", MI_CHINABANNER8) \
X("iten_chinatown4", MI_CHINABANNER9) \
X("iten_washline01", MI_CHINABANNER10) \
X("iten_washline02", MI_CHINABANNER11) \
X("iten_washline03", MI_CHINABANNER12) \
X("chinalanterns", MI_CHINALANTERN) \
X("glassfx1", MI_GLASS1) \
X("glassfx2", MI_GLASS2) \
X("glassfx3", MI_GLASS3) \
X("glassfx4", MI_GLASS4) \
X("glassfx55", MI_GLASS5) \
X("glassfxsub1", MI_GLASS6) \
X("glassfxsub2", MI_GLASS7) \
X("glassfx_composh", MI_GLASS8) \
X("bridge_liftsec", MI_BRIDGELIFT) \
X("bridge_liftweight", MI_BRIDGEWEIGHT) \
X("subbridge_lift", MI_BRIDGEROADSEGMENT) \
X("flagsitaly", MI_ITALYBANNER1) \
X("small_helix", MI_SMALL_HELIX) \
X("barrel4", MI_EXPLODINGBARREL) \
X("Crate_sjl", MI_CRATE_SJL) \
X("Door1_sjl", MI_DOOR1_SJL) \
X("Door2_sjl", MI_DOOR2_SJL) \
X("SJL_PortaCabin", MI_SJL_PORTACABIN) \
X("SJL_PortaCabinred", MI_SJL_PORTACABINRED) \
X("megaDamage", MI_MEGADAMAGE) \
X("regenerator", MI_REGENERATOR) \
X("invisible", MI_INVISIBLE) \
X("good_car", MI_GOOD_CAR) \
X("bad_car", MI_BAD_CAR) \
X("adrenaline", MI_PICKUP_ADRENALINE) \
X("bodyarmour", MI_PICKUP_BODYARMOUR) \
X("info", MI_PICKUP_INFO) \
@ -82,16 +733,57 @@
X("camerapickup", MI_PICKUP_CAMERA) \
X("bigdollar", MI_PICKUP_REVENUE) \
X("pickupsave", MI_PICKUP_SAVEGAME) \
X("clothesp", MI_PICKUP_CLOTHES) \
X("property_locked", MI_PICKUP_PROPERTY) \
X("property_fsale", MI_PICKUP_PROPERTY_FORSALE) \
X("clothesp", MI_PICKUP_CLOTHES) \
X("bollardlight", MI_BOLLARDLIGHT) \
X("ca_sp1", MI_CA_SP1) \
X("ca_sp2", MI_CA_SP2) \
X("ca_sp3", MI_CA_SP3) \
X("ca_sp4", MI_CA_SP4) \
X("package1izzy", MI_PACKAGE1IZZY) \
X("magnet", MI_MAGNET) \
X("streetlamp1", MI_STREETLAMP1) \
X("streetlamp2", MI_STREETLAMP2) \
X("railtrax_lo4b", MI_RAILTRACKS) \
X("bar_barrier10", MI_FENCE) \
X("bar_barrier12", MI_FENCE2) \
X("petrolpump", MI_PETROLPUMP) \
X("washgaspump", MI_PETROLPUMP2) \
X("bodycast", MI_BODYCAST) \
X("izzy_confDoor", MI_IZZY_CONFDOOR) \
X("shipdoor", MI_SHIPDOOR) \
X("izzy_jdDoor", MI_IZZY_JDDOOR) \
X("izzy_jdDoor_slider", MI_IZZY_JDDOOR_SLIDER) \
X("litehouse_gate", MI_LITEHOUSE_GATE) \
X("coffee", MI_COFFEE) \
X("bouy", MI_BUOY) \
X("parktable1", MI_PARKTABLE) \
X("sbwy_tunl_start", MI_SUBWAY1) \
X("sbwy_tunl_bit", MI_SUBWAY2) \
X("sbwy_tunl_bend", MI_SUBWAY3) \
X("sbwy_tunl_cstm6", MI_SUBWAY4) \
X("sbwy_tunl_cstm7", MI_SUBWAY5) \
X("sbwy_tunl_cstm8", MI_SUBWAY6) \
X("sbwy_tunl_cstm10", MI_SUBWAY7) \
X("sbwy_tunl_cstm9", MI_SUBWAY8) \
X("sbwy_tunl_cstm11", MI_SUBWAY9) \
X("sbwy_tunl_cstm1", MI_SUBWAY10) \
X("sbwy_tunl_cstm2", MI_SUBWAY11) \
X("sbwy_tunl_cstm4", MI_SUBWAY12) \
X("sbwy_tunl_cstm3", MI_SUBWAY13) \
X("sbwy_tunl_cstm5", MI_SUBWAY14) \
X("subplatform_n2", MI_SUBWAY15) \
X("suby_tunl_start", MI_SUBWAY16) \
X("sbwy_tunl_start2", MI_SUBWAY17) \
X("indy_tunl_start", MI_SUBWAY18) \
X("indsubway03", MI_SUBPLATFORM_IND) \
X("comerside_subway", MI_SUBPLATFORM_COMS) \
X("subplatform", MI_SUBPLATFORM_COMS2) \
X("subplatform_n", MI_SUBPLATFORM_COMN) \
X("Otherside_subway", MI_SUBPLATFORM_SUB) \
X("subplatform_sub", MI_SUBPLATFORM_SUB2) \
X("files", MI_FILES) \
X("lamppost1", MI_LAMPPOST1) \
X("veg_palm04", MI_VEG_PALM01) \
X("veg_palwee02", MI_VEG_PALM02) \
@ -107,10 +799,12 @@
X("telgrphpole02", MI_TELPOLE02) \
X("trafficlight1", MI_TRAFFICLIGHT01) \
X("parkbench1", MI_PARKBENCH) \
X("Money", MI_MONEY) \
X("plc_stinger", MI_PLC_STINGER) \
X("od_lightbeam", MI_LIGHTBEAM) \
X("ap_radar1_01", MI_AIRPORTRADAR) \
X("rcbomb", MI_RCBOMB) \
X("jm_salradio", MI_JM_SALRADIO) \
X("beachball", MI_BEACHBALL) \
X("sandcastle1", MI_SANDCASTLE1) \
X("sandcastle2", MI_SANDCASTLE2) \
@ -138,54 +832,42 @@
X("blimp_night", MI_BLIMP_NIGHT) \
X("blimp_day", MI_BLIMP_DAY) \
X("yt_main_body", MI_YT_MAIN_BODY) \
X("yt_main_body2", MI_YT_MAIN_BODY2) \
X("oddjgaragdoor", MI_LCS_GARAGEDOOR01) \
X("bombdoor", MI_LCS_GARAGEDOOR02) \
X("door_bombshop", MI_LCS_GARAGEDOOR03) \
X("vheistlocdoor", MI_LCS_GARAGEDOOR04) \
X("door2_garage", MI_LCS_GARAGEDOOR05) \
X("ind_slidedoor", MI_LCS_GARAGEDOOR06) \
X("bankjobdoor", MI_LCS_GARAGEDOOR07) \
X("door_jmsgrage", MI_LCS_GARAGEDOOR08) \
X("ind_safeh_gdoor", MI_LCS_GARAGEDOOR09) \
X("door_sfehousegrge", MI_LCS_GARAGEDOOR10) \
X("shedgaragedoor", MI_LCS_GARAGEDOOR11) \
X("door4_garage", MI_LCS_GARAGEDOOR12) \
X("door_col_compnd_01", MI_LCS_GARAGEDOOR13) \
X("door_col_compnd_02", MI_LCS_GARAGEDOOR14) \
X("door_col_compnd_03", MI_LCS_GARAGEDOOR15) \
X("door_col_compnd_04", MI_LCS_GARAGEDOOR16) \
X("door_col_compnd_05", MI_LCS_GARAGEDOOR17) \
X("impex_door", MI_LCS_GARAGEDOOR18) \
X("SalvGarage", MI_LCS_GARAGEDOOR19) \
X("door3_garage", MI_LCS_GARAGEDOOR20) \
X("leveldoor2", MI_LCS_GARAGEDOOR21) \
X("double_garage_dr", MI_LCS_GARAGEDOOR22) \
X("amcogaragedoor", MI_LCS_GARAGEDOOR23) \
X("towergaragedoor1", MI_LCS_GARAGEDOOR24) \
X("towergaragedoor2", MI_LCS_GARAGEDOOR25) \
X("towergaragedoor3", MI_LCS_GARAGEDOOR26) \
X("plysve_gragedoor", MI_LCS_GARAGEDOOR27) \
X("impexpsubgrgdoor", MI_LCS_GARAGEDOOR28) \
X("Sub_sprayshopdoor", MI_LCS_GARAGEDOOR29) \
X("ind_plyrwoor", MI_LCS_GARAGEDOOR30) \
X("8ballsuburbandoor", MI_LCS_GARAGEDOOR31) \
X("door_nthgrage", MI_LCS_GARAGEDOOR32) \
X("hangardoor1", MI_LCS_GARAGEDOOR33) \
X("hangardoor2", MI_LCS_GARAGEDOOR34) \
X("neds_door", MI_LCS_GARAGEDOOR35) \
X("fs_wrhsedoor", MI_LCS_GARAGEDOOR36) \
X("jm_ContraGarage", MI_LCS_GARAGEDOOR37) \
X("jm_imp_SalvGarage", MI_LCS_GARAGEDOOR38) \
X("crushercrush", MI_LCS_GARAGEDOOR39) \
X("crushertop", MI_LCS_GARAGEDOOR40) \
X("crusher_crane", MI_LCS_CRANE01) \
X("pt_barrier", MI_PT_BARRIER) \
X("subwaygate", MI_SUBWAYGATE) \
X("in_PMbridramp3", MI_IN_PMBRIDRAMP3) \
X("in_PMbridg2_upgs", MI_IN_PMBRIDG2_UPGS) \
X("in_PMbridge2", MI_IN_PMBRIDGE2) \
X("in_PMbridg1_upgs", MI_IN_PMBRIDG1_UPGS) \
X("pm_lightrig3", MI_PM_LIGHTRIG3) \
X("pm_lightrig1", MI_PM_LIGHTRIG1) \
X("in_pmSCAFF_UPS", MI_IN_PMSCAFF_UPS) \
X("in_pm_concblok2", MI_IN_PM_CONCBLOK2) \
X("in_pmSCAFFH_ns", MI_IN_PMSCAFFH_NS) \
X("in_pm_gravl_jmp", MI_IN_PM_GRAVL_JMP) \
X("in_pm_scaffcovr", MI_IN_PM_SCAFFCOVR) \
X("in_pm_girder2", MI_IN_PM_GIRDER2) \
X("in_pm_scaffH_we", MI_IN_PM_SCAFFH_WE) \
X("in_pm_sixconc2", MI_IN_PM_SIXCONC2) \
X("in_BMbridramp3", MI_IN_BMBRIDRAMP3) \
X("in_BMbridg2_upgs", MI_IN_BMBRIDG2_UPGS) \
X("in_BMbridge2", MI_IN_BMBRIDGE2) \
X("in_BMbridg1_upgs", MI_IN_BMBRIDG1_UPGS) \
X("Bm_lightrig3", MI_BM_LIGHTRIG3) \
X("bm_lightrig1", MI_BM_LIGHTRIG1) \
X("in_BmSCAFF_UPS", MI_IN_BMSCAFF_UPS) \
X("in_Bm_concblok2", MI_IN_BM_CONCBLOK2) \
X("in_BmSCAFFH_ns", MI_IN_BMSCAFFH_NS) \
X("in_Bm_gravl_jmp", MI_IN_BM_GRAVL_JMP) \
X("in_Bm_scaffcovr", MI_IN_BM_SCAFFCOVR) \
X("in_Bm_girder2", MI_IN_BM_GIRDER2) \
X("in_Bm_scaffH_we", MI_IN_BM_SCAFFH_WE) \
X("in_Bm_sixconc2", MI_IN_BM_SIXCONC2)
// NB: MI_LCS_ <- temporary stuff so that garages started somewhat working
/*X("yt_main_body2", MI_YT_MAIN_BODY2) \*/
#define X(name, var) extern int16 var;
MODELINDICES
#undef X
//#define X(name, var) extern int16 var;
// MODELINDICES
//#undef X
// and some hardcoded ones
// expand as needed
@ -576,11 +1258,7 @@ IsLightThatNeedsRepositioning(int16 id)
return id == MI_SINGLESTREETLIGHTS1 ||
id == MI_SINGLESTREETLIGHTS2 ||
id == MI_SINGLESTREETLIGHTS3 ||
id == MI_TRAFFICLIGHTS_MIAMI ||
id == MI_TRAFFICLIGHTS_TWOVERTICAL ||
id == MI_MLAMPPOST ||
id == MI_STREETLAMP1 ||
id == MI_STREETLAMP2;
id == MI_DOUBLESTREETLIGHTS;
}
inline bool
@ -592,7 +1270,9 @@ IsLightObject(int16 id)
id == MI_SINGLESTREETLIGHTS2 ||
id == MI_SINGLESTREETLIGHTS3 ||
id == MI_DOUBLESTREETLIGHTS ||
id == MI_TRAFFICLIGHTS_TWOVERTICAL;
id == MI_TRAFFICLIGHTS_TWOVERTICAL ||
id == MI_TRAFFICLIGHTS ||
id == MI_FENCE;
}
inline bool
@ -624,24 +1304,26 @@ IsPedModel(int16 id)
inline bool
IsPalmTreeModel(int16 id)
{
return id == MI_VEG_PALM01 ||
id == MI_VEG_PALM02 ||
id == MI_VEG_PALM03 ||
id == MI_VEG_PALM04 ||
id == MI_VEG_PALM05 ||
id == MI_VEG_PALM06 ||
id == MI_VEG_PALM07 ||
id == MI_VEG_PALM08;
return false;
}
inline bool
IsTreeModel(int16 id)
{
return id == MI_TREE2 ||
return id == MI_TREE1 ||
id == MI_TREE2 ||
id == MI_TREE3 ||
id == MI_TREE4 ||
id == MI_TREE5 ||
id == MI_TREE6 ||
id == MI_TREE7 ||
id == MI_TREE8 ||
IsPalmTreeModel(id);
id == MI_TREE9 ||
id == MI_TREE10 ||
id == MI_TREE11 ||
id == MI_TREE12 ||
id == MI_TREE13 ||
id == MI_TREE14;
}
inline bool

View File

@ -50,7 +50,12 @@ void CCranes::InitCranes(void)
for (int j = 0; j < NUMSECTORS_Y; j++) {
for (CPtrNode* pNode = CWorld::GetSector(i, j)->m_lists[ENTITYLIST_BUILDINGS].first; pNode; pNode = pNode->next) {
CEntity* pEntity = (CEntity*)pNode->item;
if (MI_LCS_CRANE01 == pEntity->GetModelIndex())
if (MODELID_CRANE_1 == pEntity->GetModelIndex() ||
MODELID_CRANE_2 == pEntity->GetModelIndex() ||
MODELID_CRANE_3 == pEntity->GetModelIndex() ||
MODELID_CRANE_4 == pEntity->GetModelIndex() ||
MODELID_CRANE_5 == pEntity->GetModelIndex() ||
MODELID_CRANE_6 == pEntity->GetModelIndex())
AddThisOneCrane(pEntity);
}
}
@ -58,7 +63,12 @@ void CCranes::InitCranes(void)
// TODO(LCS)
for (CPtrNode* pNode = CWorld::GetBigBuildingList(LEVEL_INDUSTRIAL).first; pNode; pNode = pNode->next) {
CEntity* pEntity = (CEntity*)pNode->item;
if (MI_LCS_CRANE01 == pEntity->GetModelIndex())
if (MODELID_CRANE_1 == pEntity->GetModelIndex() ||
MODELID_CRANE_2 == pEntity->GetModelIndex() ||
MODELID_CRANE_3 == pEntity->GetModelIndex() ||
MODELID_CRANE_4 == pEntity->GetModelIndex() ||
MODELID_CRANE_5 == pEntity->GetModelIndex() ||
MODELID_CRANE_6 == pEntity->GetModelIndex())
AddThisOneCrane(pEntity);
}