mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-01 01:08:01 +03:00
Completely get rid of TriggerIndex
This commit is contained in:
parent
1828ddaeab
commit
d394bcc39f
8 changed files with 111 additions and 117 deletions
|
@ -919,10 +919,6 @@ void LaraAboveWater(ITEM_INFO* item, COLL_INFO* coll) //hmmmm
|
||||||
// Check for collision with items
|
// Check for collision with items
|
||||||
LaraBaddieCollision(item, coll);
|
LaraBaddieCollision(item, coll);
|
||||||
|
|
||||||
// FIXME: refresh floor globals because sometimes they are messed by calling GetFloorHeight
|
|
||||||
// all over the place. Needed for monkeyswing. Remove when block flags decoupled from floordata. -- Lwmte 19.08.21
|
|
||||||
RefreshFloorGlobals(item);
|
|
||||||
|
|
||||||
// Handle Lara collision
|
// Handle Lara collision
|
||||||
if (Lara.Vehicle == NO_ITEM)
|
if (Lara.Vehicle == NO_ITEM)
|
||||||
lara_collision_routines[item->currentAnimState](item, coll);
|
lara_collision_routines[item->currentAnimState](item, coll);
|
||||||
|
|
|
@ -1080,8 +1080,6 @@ void DoFloorThings(FLOOR_INFO* floor, int x, int y, int z)
|
||||||
int height = floor->floor * 256;
|
int height = floor->floor * 256;
|
||||||
if (height != NO_HEIGHT)
|
if (height != NO_HEIGHT)
|
||||||
{
|
{
|
||||||
TriggerIndex = NULL;
|
|
||||||
|
|
||||||
if (floor->index != 0)
|
if (floor->index != 0)
|
||||||
{
|
{
|
||||||
short* data = &g_Level.FloorData[floor->index];
|
short* data = &g_Level.FloorData[floor->index];
|
||||||
|
@ -1131,11 +1129,7 @@ void DoFloorThings(FLOOR_INFO* floor, int x, int y, int z)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TRIGGER_TYPE:
|
case TRIGGER_TYPE:
|
||||||
if (!TriggerIndex)
|
|
||||||
TriggerIndex = data - 1;
|
|
||||||
|
|
||||||
data++;
|
data++;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
trigger = *(data++);
|
trigger = *(data++);
|
||||||
|
@ -1152,18 +1146,6 @@ void DoFloorThings(FLOOR_INFO* floor, int x, int y, int z)
|
||||||
} while (!(trigger & END_BIT));
|
} while (!(trigger & END_BIT));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LAVA_TYPE:
|
|
||||||
TriggerIndex = data - 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CLIMB_TYPE:
|
|
||||||
case MONKEY_TYPE:
|
|
||||||
case TRIGTRIGGER_TYPE:
|
|
||||||
case MINER_TYPE:
|
|
||||||
if (!TriggerIndex)
|
|
||||||
TriggerIndex = data - 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SPLIT1:
|
case SPLIT1:
|
||||||
case SPLIT2:
|
case SPLIT2:
|
||||||
case NOCOLF1T:
|
case NOCOLF1T:
|
||||||
|
@ -1258,13 +1240,6 @@ void DoFloorThings(FLOOR_INFO* floor, int x, int y, int z)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RefreshFloorGlobals(ITEM_INFO* item)
|
|
||||||
{
|
|
||||||
auto room = item->roomNumber;
|
|
||||||
auto floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &room);
|
|
||||||
DoFloorThings(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GetCollisionInfo(COLL_INFO* coll, int xPos, int yPos, int zPos, int roomNumber, int objectHeight)
|
void GetCollisionInfo(COLL_INFO* coll, int xPos, int yPos, int zPos, int roomNumber, int objectHeight)
|
||||||
{
|
{
|
||||||
int resetRoom;
|
int resetRoom;
|
||||||
|
|
|
@ -126,7 +126,6 @@ int Move3DPosTo3DPos(PHD_3DPOS* src, PHD_3DPOS* dest, int velocity, short angAdd
|
||||||
int MoveLaraPosition(PHD_VECTOR* pos, ITEM_INFO* item, ITEM_INFO* l);
|
int MoveLaraPosition(PHD_VECTOR* pos, ITEM_INFO* item, ITEM_INFO* l);
|
||||||
int TestBoundsCollide(ITEM_INFO* item, ITEM_INFO* l, int radius);
|
int TestBoundsCollide(ITEM_INFO* item, ITEM_INFO* l, int radius);
|
||||||
void CreatureCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll);
|
void CreatureCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll);
|
||||||
void RefreshFloorGlobals(ITEM_INFO* item);
|
|
||||||
void GetCollisionInfo(COLL_INFO* coll, int xPos, int yPos, int zPos, int roomNumber, int objectHeight);
|
void GetCollisionInfo(COLL_INFO* coll, int xPos, int yPos, int zPos, int roomNumber, int objectHeight);
|
||||||
void GetObjectCollisionInfo(COLL_INFO* coll, int xPos, int yPos, int zPos, int roomNumber, int objectHeight);
|
void GetObjectCollisionInfo(COLL_INFO* coll, int xPos, int yPos, int zPos, int roomNumber, int objectHeight);
|
||||||
void LaraBaddieCollision(ITEM_INFO* item, COLL_INFO* coll);
|
void LaraBaddieCollision(ITEM_INFO* item, COLL_INFO* coll);
|
||||||
|
|
|
@ -104,7 +104,6 @@ short NextFxActive;
|
||||||
short NextFxFree;
|
short NextFxFree;
|
||||||
short NextItemActive;
|
short NextItemActive;
|
||||||
short NextItemFree;
|
short NextItemFree;
|
||||||
short *TriggerIndex;
|
|
||||||
|
|
||||||
int DisableLaraControl = 0;
|
int DisableLaraControl = 0;
|
||||||
int WeatherType;
|
int WeatherType;
|
||||||
|
@ -130,7 +129,6 @@ int InitialiseGame;
|
||||||
int RequiredStartPos;
|
int RequiredStartPos;
|
||||||
int WeaponDelay;
|
int WeaponDelay;
|
||||||
int WeaponEnemyTimer;
|
int WeaponEnemyTimer;
|
||||||
HEIGHT_TYPES HeightType;
|
|
||||||
int HeavyTriggered;
|
int HeavyTriggered;
|
||||||
short SkyPos1;
|
short SkyPos1;
|
||||||
short SkyPos2;
|
short SkyPos2;
|
||||||
|
@ -162,6 +160,7 @@ short FlashFadeG;
|
||||||
short FlashFadeB;
|
short FlashFadeB;
|
||||||
short FlashFader;
|
short FlashFader;
|
||||||
|
|
||||||
|
HEIGHT_TYPES HeightType;
|
||||||
int SplitFloor;
|
int SplitFloor;
|
||||||
int SplitCeiling;
|
int SplitCeiling;
|
||||||
int TiltXOffset;
|
int TiltXOffset;
|
||||||
|
@ -1756,9 +1755,86 @@ int CheckNoColCeilingTriangle(FLOOR_INFO *floor, int x, int z)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
short* GetTriggerIndex(FLOOR_INFO* floor, int x, int y, int z)
|
||||||
|
{
|
||||||
|
ROOM_INFO* r;
|
||||||
|
while (floor->pitRoom != NO_ROOM)
|
||||||
|
{
|
||||||
|
if (CheckNoColFloorTriangle(floor, x, z) == 1)
|
||||||
|
break;
|
||||||
|
r = &g_Level.Rooms[floor->pitRoom];
|
||||||
|
floor = &XZ_GET_SECTOR(r, x - r->x, z - r->z);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((floor->floor * 256) == NO_HEIGHT || floor->index == 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
short* triggerIndex = NULL;
|
||||||
|
|
||||||
|
short* data = &g_Level.FloorData[floor->index];
|
||||||
|
short type;
|
||||||
|
int trigger;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
type = *(data++);
|
||||||
|
|
||||||
|
switch (type & DATA_TYPE)
|
||||||
|
{
|
||||||
|
case DOOR_TYPE:
|
||||||
|
case TILT_TYPE:
|
||||||
|
case ROOF_TYPE:
|
||||||
|
case SPLIT1:
|
||||||
|
case SPLIT2:
|
||||||
|
case SPLIT3:
|
||||||
|
case SPLIT4:
|
||||||
|
case NOCOLF1T:
|
||||||
|
case NOCOLF1B:
|
||||||
|
case NOCOLF2T:
|
||||||
|
case NOCOLF2B:
|
||||||
|
case NOCOLC1T:
|
||||||
|
case NOCOLC1B:
|
||||||
|
case NOCOLC2T:
|
||||||
|
case NOCOLC2B:
|
||||||
|
data++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LAVA_TYPE:
|
||||||
|
case CLIMB_TYPE:
|
||||||
|
case MONKEY_TYPE:
|
||||||
|
case TRIGTRIGGER_TYPE:
|
||||||
|
case MINER_TYPE:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TRIGGER_TYPE:
|
||||||
|
triggerIndex = data - 1;
|
||||||
|
data++;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
trigger = *(data++);
|
||||||
|
|
||||||
|
if (TRIG_BITS(trigger) != TO_OBJECT)
|
||||||
|
{
|
||||||
|
if (TRIG_BITS(trigger) == TO_CAMERA ||
|
||||||
|
TRIG_BITS(trigger) == TO_FLYBY)
|
||||||
|
{
|
||||||
|
trigger = *(data++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} while (!(trigger & END_BIT));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (!(type & END_BIT));
|
||||||
|
|
||||||
|
return triggerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
int GetFloorHeight(FLOOR_INFO *floor, int x, int y, int z)
|
int GetFloorHeight(FLOOR_INFO *floor, int x, int y, int z)
|
||||||
{
|
{
|
||||||
|
|
||||||
TiltYOffset = 0;
|
TiltYOffset = 0;
|
||||||
TiltXOffset = 0;
|
TiltXOffset = 0;
|
||||||
OnObject = 0;
|
OnObject = 0;
|
||||||
|
@ -1777,15 +1853,8 @@ int GetFloorHeight(FLOOR_INFO *floor, int x, int y, int z)
|
||||||
int height = floor->floor * 256;
|
int height = floor->floor * 256;
|
||||||
if (height != NO_HEIGHT)
|
if (height != NO_HEIGHT)
|
||||||
{
|
{
|
||||||
// return height;
|
|
||||||
|
|
||||||
|
|
||||||
TriggerIndex = NULL;
|
|
||||||
|
|
||||||
if (floor->index != 0)
|
if (floor->index != 0)
|
||||||
{
|
{
|
||||||
// return height;
|
|
||||||
|
|
||||||
short* data = &g_Level.FloorData[floor->index];
|
short* data = &g_Level.FloorData[floor->index];
|
||||||
short type, hadj;
|
short type, hadj;
|
||||||
|
|
||||||
|
@ -1799,6 +1868,14 @@ int GetFloorHeight(FLOOR_INFO *floor, int x, int y, int z)
|
||||||
|
|
||||||
switch (type & DATA_TYPE)
|
switch (type & DATA_TYPE)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
case LAVA_TYPE:
|
||||||
|
case CLIMB_TYPE:
|
||||||
|
case MONKEY_TYPE:
|
||||||
|
case TRIGTRIGGER_TYPE:
|
||||||
|
case MINER_TYPE:
|
||||||
|
break;
|
||||||
|
|
||||||
case DOOR_TYPE:
|
case DOOR_TYPE:
|
||||||
case ROOF_TYPE:
|
case ROOF_TYPE:
|
||||||
case SPLIT3:
|
case SPLIT3:
|
||||||
|
@ -1833,11 +1910,7 @@ int GetFloorHeight(FLOOR_INFO *floor, int x, int y, int z)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TRIGGER_TYPE:
|
case TRIGGER_TYPE:
|
||||||
if (!TriggerIndex)
|
|
||||||
TriggerIndex = data - 1;
|
|
||||||
|
|
||||||
data++;
|
data++;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
trigger = *(data++);
|
trigger = *(data++);
|
||||||
|
@ -1850,32 +1923,10 @@ int GetFloorHeight(FLOOR_INFO *floor, int x, int y, int z)
|
||||||
trigger = *(data++);
|
trigger = *(data++);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
/*item = &g_Level.Items[trigger & VALUE_BITS];
|
|
||||||
obj = &Objects[item->objectNumber];
|
|
||||||
|
|
||||||
if (obj->floor && !(item->flags & 0x8000))
|
|
||||||
{
|
|
||||||
(obj->floor)(item, x, y, z, &height);
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
|
|
||||||
} while (!(trigger & END_BIT));
|
} while (!(trigger & END_BIT));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LAVA_TYPE:
|
|
||||||
TriggerIndex = data - 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CLIMB_TYPE:
|
|
||||||
case MONKEY_TYPE:
|
|
||||||
case TRIGTRIGGER_TYPE:
|
|
||||||
case MINER_TYPE:
|
|
||||||
if (!TriggerIndex)
|
|
||||||
TriggerIndex = data - 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SPLIT1:
|
case SPLIT1:
|
||||||
case SPLIT2:
|
case SPLIT2:
|
||||||
case NOCOLF1T:
|
case NOCOLF1T:
|
||||||
|
@ -3522,13 +3573,12 @@ void TestTriggersAtXYZ(int x, int y, int z, short roomNumber, int heavy, int fla
|
||||||
{
|
{
|
||||||
auto roomNum = roomNumber;
|
auto roomNum = roomNumber;
|
||||||
auto floor = GetFloor(x, y, z, &roomNum);
|
auto floor = GetFloor(x, y, z, &roomNum);
|
||||||
GetFloorHeight(floor, x, y, z);
|
|
||||||
|
|
||||||
// Don't process legacy triggers if trigger triggerer wasn't used
|
// Don't process legacy triggers if trigger triggerer wasn't used
|
||||||
if (floor->Flags.MarkTriggerer && !floor->Flags.MarkTriggererActive)
|
if (floor->Flags.MarkTriggerer && !floor->Flags.MarkTriggererActive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TestTriggers(TriggerIndex, heavy, flags);
|
TestTriggers(GetTriggerIndex(floor, x, y, z), heavy, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessSectorFlags(int x, int y, int z, short roomNumber)
|
void ProcessSectorFlags(int x, int y, int z, short roomNumber)
|
||||||
|
|
|
@ -76,7 +76,6 @@ extern short NextFxActive;
|
||||||
extern short NextFxFree;
|
extern short NextFxFree;
|
||||||
extern short NextItemActive;
|
extern short NextItemActive;
|
||||||
extern short NextItemFree;
|
extern short NextItemFree;
|
||||||
extern short* TriggerIndex;
|
|
||||||
extern int DisableLaraControl;
|
extern int DisableLaraControl;
|
||||||
extern int WeatherType;
|
extern int WeatherType;
|
||||||
extern int LaraDrawType;
|
extern int LaraDrawType;
|
||||||
|
@ -154,6 +153,7 @@ void AlterFloorHeight(ITEM_INFO* item, int height);
|
||||||
int CheckNoColCeilingTriangle(FLOOR_INFO* floor, int x, int z);
|
int CheckNoColCeilingTriangle(FLOOR_INFO* floor, int x, int z);
|
||||||
int CheckNoColFloorTriangle(FLOOR_INFO* floor, int x, int z);
|
int CheckNoColFloorTriangle(FLOOR_INFO* floor, int x, int z);
|
||||||
int GetFloorHeight(FLOOR_INFO* floor, int x, int y, int z);
|
int GetFloorHeight(FLOOR_INFO* floor, int x, int y, int z);
|
||||||
|
short* GetTriggerIndex(FLOOR_INFO* floor, int x, int y, int z);
|
||||||
FLOOR_INFO* GetFloor(int x, int y, int z, short* roomNumber);
|
FLOOR_INFO* GetFloor(int x, int y, int z, short* roomNumber);
|
||||||
//void UpdateDebris();
|
//void UpdateDebris();
|
||||||
int LOS(GAME_VECTOR* start, GAME_VECTOR* end);
|
int LOS(GAME_VECTOR* start, GAME_VECTOR* end);
|
||||||
|
|
|
@ -130,40 +130,13 @@ void ControlTriggerTriggerer(short itemNumber)
|
||||||
{
|
{
|
||||||
ITEM_INFO* item = &g_Level.Items[itemNumber];
|
ITEM_INFO* item = &g_Level.Items[itemNumber];
|
||||||
FLOOR_INFO* floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &item->roomNumber);
|
FLOOR_INFO* floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &item->roomNumber);
|
||||||
int height = GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
|
||||||
|
|
||||||
if (TriggerIndex)
|
if (floor->Flags.MarkTriggerer)
|
||||||
{
|
|
||||||
short* trigger = TriggerIndex;
|
|
||||||
|
|
||||||
if ((*trigger & 0x1F) == 5)
|
|
||||||
{
|
|
||||||
if ((*trigger & 0x8000) != 0)
|
|
||||||
return;
|
|
||||||
trigger++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((*trigger & 0x1F) == 6)
|
|
||||||
{
|
|
||||||
if ((*trigger & 0x8000) != 0)
|
|
||||||
return;
|
|
||||||
trigger++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((*trigger & 0x1F) == 19)
|
|
||||||
{
|
|
||||||
if ((*trigger & 0x8000) != 0)
|
|
||||||
return;
|
|
||||||
trigger++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((*trigger & 0x1F) == 20)
|
|
||||||
{
|
{
|
||||||
if (TriggerActive(item))
|
if (TriggerActive(item))
|
||||||
*trigger |= 0x20u;
|
floor->Flags.MarkTriggererActive = true;
|
||||||
else
|
else
|
||||||
*trigger &= 0xDFu;
|
floor->Flags.MarkTriggererActive = false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -811,10 +811,11 @@ bool SaveGame::readGameStatusChunks(ChunkId* chunkId, int maxSize, int arg)
|
||||||
g_Level.Rooms[roomIndex].mesh[staticIndex].y,
|
g_Level.Rooms[roomIndex].mesh[staticIndex].y,
|
||||||
g_Level.Rooms[roomIndex].mesh[staticIndex].z,
|
g_Level.Rooms[roomIndex].mesh[staticIndex].z,
|
||||||
&roomIndex);
|
&roomIndex);
|
||||||
int height = GetFloorHeight(floor, g_Level.Rooms[roomIndex].mesh[staticIndex].x,
|
|
||||||
|
TestTriggersAtXYZ(g_Level.Rooms[roomIndex].mesh[staticIndex].x,
|
||||||
g_Level.Rooms[roomIndex].mesh[staticIndex].y,
|
g_Level.Rooms[roomIndex].mesh[staticIndex].y,
|
||||||
g_Level.Rooms[roomIndex].mesh[staticIndex].z);
|
g_Level.Rooms[roomIndex].mesh[staticIndex].z, roomIndex, true, NULL);
|
||||||
TestTriggers(TriggerIndex, 1, 0);
|
|
||||||
floor->stopper = false;
|
floor->stopper = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1182,12 +1182,12 @@ void SwitchControl(short itemNumber)
|
||||||
int GetKeyTrigger(ITEM_INFO* item)
|
int GetKeyTrigger(ITEM_INFO* item)
|
||||||
{
|
{
|
||||||
FLOOR_INFO* floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &item->roomNumber);
|
FLOOR_INFO* floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &item->roomNumber);
|
||||||
GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
auto triggerIndex = GetTriggerIndex(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
||||||
|
|
||||||
if (TriggerIndex)
|
if (triggerIndex)
|
||||||
{
|
{
|
||||||
short* trigger = TriggerIndex;
|
short* trigger = triggerIndex;
|
||||||
for (short i = *TriggerIndex; (i & 0x1F) != 4; trigger++)
|
for (short i = *triggerIndex; (i & 0x1F) != 4; trigger++)
|
||||||
{
|
{
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
break;
|
break;
|
||||||
|
@ -1210,12 +1210,12 @@ int GetKeyTrigger(ITEM_INFO* item)
|
||||||
int GetSwitchTrigger(ITEM_INFO* item, short* itemNos, int AttatchedToSwitch)
|
int GetSwitchTrigger(ITEM_INFO* item, short* itemNos, int AttatchedToSwitch)
|
||||||
{
|
{
|
||||||
FLOOR_INFO* floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &item->roomNumber);
|
FLOOR_INFO* floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &item->roomNumber);
|
||||||
GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
auto triggerIndex = GetTriggerIndex(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
||||||
|
|
||||||
if (TriggerIndex)
|
if (triggerIndex)
|
||||||
{
|
{
|
||||||
short* trigger;
|
short* trigger;
|
||||||
for (trigger = TriggerIndex; (*trigger & DATA_TYPE) != TRIGGER_TYPE; trigger++)
|
for (trigger = triggerIndex; (*trigger & DATA_TYPE) != TRIGGER_TYPE; trigger++)
|
||||||
{
|
{
|
||||||
if (*trigger & END_BIT)
|
if (*trigger & END_BIT)
|
||||||
break;
|
break;
|
||||||
|
@ -1338,16 +1338,16 @@ void CogSwitchCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll)
|
||||||
ITEM_INFO* item = &g_Level.Items[itemNum];
|
ITEM_INFO* item = &g_Level.Items[itemNum];
|
||||||
|
|
||||||
FLOOR_INFO* floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &item->roomNumber);
|
FLOOR_INFO* floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &item->roomNumber);
|
||||||
GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
auto triggerIndex = GetTriggerIndex(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
||||||
|
|
||||||
if (!TriggerIndex)
|
if (!triggerIndex)
|
||||||
{
|
{
|
||||||
ObjectCollision(itemNum, l, coll);
|
ObjectCollision(itemNum, l, coll);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
short* trigger = TriggerIndex;
|
short* trigger = triggerIndex;
|
||||||
for (int i = *TriggerIndex; (i & 0x1F) != 4; trigger++)
|
for (int i = *triggerIndex; (i & 0x1F) != 4; trigger++)
|
||||||
{
|
{
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue