diff --git a/TR5Main/Game/floordata.cpp b/TR5Main/Game/floordata.cpp index 2b5a9aa1d..fcc6e7691 100644 --- a/TR5Main/Game/floordata.cpp +++ b/TR5Main/Game/floordata.cpp @@ -252,8 +252,8 @@ std::optional FLOOR_INFO::GetFloorHeight(int startRoomNumber, int x, int y, { auto item = &g_Level.Items[itemNumber]; auto itemHeight = Objects[item->objectNumber].floor(itemNumber, x, y, z); - if (itemHeight >= y && itemHeight < height) - height = itemHeight; + if (itemHeight && *itemHeight >= y && *itemHeight < height) + height = *itemHeight; } } @@ -276,8 +276,8 @@ std::optional FLOOR_INFO::GetCeilingHeight(int startRoomNumber, int x, int { auto item = &g_Level.Items[itemNumber]; auto itemHeight = Objects[item->objectNumber].ceiling(itemNumber, x, y, z); - if (itemHeight <= y && itemHeight > height) - height = itemHeight; + if (itemHeight && *itemHeight <= y && *itemHeight > height) + height = *itemHeight; } } diff --git a/TR5Main/Objects/Generic/Object/generic_bridge.cpp b/TR5Main/Objects/Generic/Object/generic_bridge.cpp index 719367784..5a0c6cb1e 100644 --- a/TR5Main/Objects/Generic/Object/generic_bridge.cpp +++ b/TR5Main/Objects/Generic/Object/generic_bridge.cpp @@ -9,16 +9,16 @@ void InitialiseBridge(short itemNumber) FLOOR_INFO::AddCeiling(itemNumber); } -int BridgeFloor(short itemNumber, int x, int y, int z) +std::optional BridgeFloor(short itemNumber, int x, int y, int z) { auto item = &g_Level.Items[itemNumber]; - return item->pos.yPos + GetOffset(&item->pos, x, z); + return std::optional{item->pos.yPos + GetOffset(&item->pos, x, z)}; } -int BridgeCeiling(short itemNumber, int x, int y, int z) +std::optional BridgeCeiling(short itemNumber, int x, int y, int z) { auto item = &g_Level.Items[itemNumber]; - return item->pos.yPos + GetOffset(&item->pos, x, z); + return std::optional{item->pos.yPos + GetOffset(&item->pos, x, z)}; } int GetOffset(PHD_3DPOS* pos, int x, int z) diff --git a/TR5Main/Objects/Generic/Object/generic_bridge.h b/TR5Main/Objects/Generic/Object/generic_bridge.h index f26862a81..f8ea7bd2a 100644 --- a/TR5Main/Objects/Generic/Object/generic_bridge.h +++ b/TR5Main/Objects/Generic/Object/generic_bridge.h @@ -2,6 +2,6 @@ #include "phd_global.h" void InitialiseBridge(short itemNumber); -int BridgeFloor(short itemNumber, int x, int y, int z); -int BridgeCeiling(short itemNumber, int x, int y, int z); +std::optional BridgeFloor(short itemNumber, int x, int y, int z); +std::optional BridgeCeiling(short itemNumber, int x, int y, int z); int GetOffset(PHD_3DPOS* pos, int x, int z); diff --git a/TR5Main/Objects/Generic/generic_objects.cpp b/TR5Main/Objects/Generic/generic_objects.cpp index 0346956a4..8f9c8f461 100644 --- a/TR5Main/Objects/Generic/generic_objects.cpp +++ b/TR5Main/Objects/Generic/generic_objects.cpp @@ -9,14 +9,15 @@ static void StartObject() { - OBJECT_INFO* obj; - - obj = &Objects[ID_BRIDGE]; - if (obj->loaded) + for (int objNumber = ID_BRIDGE1; objNumber <= ID_BRIDGE8; ++objNumber) { - obj->initialise = InitialiseBridge; - obj->floor = BridgeFloor; - obj->ceiling = BridgeCeiling; + auto obj = &Objects[objNumber]; + if (obj->loaded) + { + obj->initialise = InitialiseBridge; + obj->floor = BridgeFloor; + obj->ceiling = BridgeCeiling; + } } } diff --git a/TR5Main/Objects/objectslist.h b/TR5Main/Objects/objectslist.h index ea3c8db7f..a8e9edd3e 100644 --- a/TR5Main/Objects/objectslist.h +++ b/TR5Main/Objects/objectslist.h @@ -955,7 +955,14 @@ typedef enum GAME_OBJECT_ID ID_LASERHEAD_BASE, ID_LASERHEAD_TENTACLE, - ID_BRIDGE = 1340, + ID_BRIDGE1 = 1340, + ID_BRIDGE2, + ID_BRIDGE3, + ID_BRIDGE4, + ID_BRIDGE5, + ID_BRIDGE6, + ID_BRIDGE7, + ID_BRIDGE8, ID_HORIZON = 1350, ID_BINOCULAR_GRAPHICS, diff --git a/TR5Main/Specific/setup.h b/TR5Main/Specific/setup.h index 69c7af6cf..098cf28a4 100644 --- a/TR5Main/Specific/setup.h +++ b/TR5Main/Specific/setup.h @@ -21,8 +21,8 @@ struct OBJECT_INFO int frameBase; std::function initialise; std::function control; - std::function floor; - std::function ceiling; + std::function(short itemNumber, int x, int y, int z)> floor; + std::function(short itemNumber, int x, int y, int z)> ceiling; std::function drawRoutine; std::function drawRoutineExtra; std::function collision;