room: test sector range for Torso boss (#1497)

This provides an option to test a range of sectors around the one on
which a large and heavy item dies. It ultimately resolves the potential
softlock when killing Torso boss in Great Pyramid.

Resolves #1236.
This commit is contained in:
lahm86 2024-09-07 15:28:07 +01:00 committed by GitHub
parent 858f13dab1
commit c4de1a2daf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 29 additions and 2 deletions

View file

@ -14,6 +14,7 @@
- fixed `/tp` console command reporting teleport fails as success (#1484, regression from 4.1) - fixed `/tp` console command reporting teleport fails as success (#1484, regression from 4.1)
- fixed console commands causing improper ring shutdown with selected inventory item (#1460, regression from 3.0) - fixed console commands causing improper ring shutdown with selected inventory item (#1460, regression from 3.0)
- fixed console input immediately ending demo (#1480, regression from 4.1) - fixed console input immediately ending demo (#1480, regression from 4.1)
- fixed a potential softlock when killing the Torso boss in Great Pyramid (#1236)
- changed `/tp` console command to look for the closest place to teleport to when targeting items (#1484) - changed `/tp` console command to look for the closest place to teleport to when targeting items (#1484)
- improved appearance of textures around edges when bilinear filter is off (#1483) - improved appearance of textures around edges when bilinear filter is off (#1483)
Since this removes the seams on pushblocks, this was made optional. Since this removes the seams on pushblocks, this was made optional.

View file

@ -516,6 +516,7 @@ Not all options are turned on by default. Refer to `TR1X_ConfigTool.exe` for det
- fixed looking forward too far causing an upside down camera frame - fixed looking forward too far causing an upside down camera frame
- fixed the Scion being extremely difficult to shoot with the shotgun - fixed the Scion being extremely difficult to shoot with the shotgun
- fixed collision issues with drawbridges, trapdoors, and bridges when stacked over each other, over slopes, and near the ground - fixed collision issues with drawbridges, trapdoors, and bridges when stacked over each other, over slopes, and near the ground
- fixed a potential softlock when killing the Torso boss in Great Pyramid
#### Cheats #### Cheats
- added a fly cheat - added a fly cheat

View file

@ -40,6 +40,8 @@ static int16_t Room_GetCeilingTiltHeight(
const SECTOR_INFO *sector, const int32_t x, const int32_t z); const SECTOR_INFO *sector, const int32_t x, const int32_t z);
static SECTOR_INFO *Room_GetSkySector( static SECTOR_INFO *Room_GetSkySector(
const SECTOR_INFO *sector, int32_t x, int32_t z); const SECTOR_INFO *sector, int32_t x, int32_t z);
static void Room_TestSectorTrigger(
const ITEM_INFO *item, const SECTOR_INFO *sector);
static void Room_TriggerMusicTrack(int16_t track, const TRIGGER *const trigger) static void Room_TriggerMusicTrack(int16_t track, const TRIGGER *const trigger)
{ {
@ -736,11 +738,34 @@ void Room_PopulateSectorData(
void Room_TestTriggers(const ITEM_INFO *const item) void Room_TestTriggers(const ITEM_INFO *const item)
{ {
const bool is_heavy = item->object_id != O_LARA;
int16_t room_num = item->room_num; int16_t room_num = item->room_num;
const SECTOR_INFO *const sector = const SECTOR_INFO *sector =
Room_GetSector(item->pos.x, MAX_HEIGHT, item->pos.z, &room_num); Room_GetSector(item->pos.x, MAX_HEIGHT, item->pos.z, &room_num);
Room_TestSectorTrigger(item, sector);
if (item->object_id != O_TORSO) {
return;
}
for (int32_t dx = -1; dx < 2; dx++) {
for (int32_t dz = -1; dz < 2; dz++) {
if (!dx && !dz) {
continue;
}
room_num = item->room_num;
sector = Room_GetSector(
item->pos.x + dx * WALL_L, MAX_HEIGHT,
item->pos.z + dz * WALL_L, &room_num);
Room_TestSectorTrigger(item, sector);
}
}
}
static void Room_TestSectorTrigger(
const ITEM_INFO *const item, const SECTOR_INFO *const sector)
{
const bool is_heavy = item->object_id != O_LARA;
if (!is_heavy && sector->is_death_sector && Lava_TestFloor(item)) { if (!is_heavy && sector->is_death_sector && Lava_TestFloor(item)) {
Lava_Burn(g_LaraItem); Lava_Burn(g_LaraItem);
} }