From 5a0f9685584458d6049515377809f625fe64d4a4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 25 Jan 2026 14:35:57 +0000 Subject: [PATCH 1/2] Initial plan From bd0650f8913d690927ae5fc3be9d256fe2c59e65 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 25 Jan 2026 14:40:04 +0000 Subject: [PATCH 2/2] Add TO_VOLUME enum and implement trigger handling for volume enabled state Co-authored-by: TrainWrack <120750885+TrainWrack@users.noreply.github.com> --- TombEngine/Game/control/trigger.cpp | 38 +++++++++++++++++++++++++++++ TombEngine/Game/control/trigger.h | 1 + 2 files changed, 39 insertions(+) diff --git a/TombEngine/Game/control/trigger.cpp b/TombEngine/Game/control/trigger.cpp index b3bcff71c1..c32e2d1a14 100644 --- a/TombEngine/Game/control/trigger.cpp +++ b/TombEngine/Game/control/trigger.cpp @@ -806,6 +806,44 @@ void TestTriggers(int x, int y, int z, FloorInfo* floor, Activator activator, bo } break; + case TO_VOLUME: + { + // Find the volume by global index across all rooms + int globalIndex = 0; + TriggerVolume* targetVolume = nullptr; + + for (auto& room : g_Level.Rooms) + { + for (auto& volume : room.TriggerVolumes) + { + if (globalIndex == value) + { + targetVolume = &volume; + break; + } + globalIndex++; + } + if (targetVolume != nullptr) + break; + } + + if (targetVolume != nullptr) + { + // Set volume enabled state based on trigger type + if (triggerType == TRIGGER_TYPES::ANTIPAD || + triggerType == TRIGGER_TYPES::ANTITRIGGER || + triggerType == TRIGGER_TYPES::HEAVYANTITRIGGER) + { + targetVolume->Enabled = false; + } + else + { + targetVolume->Enabled = true; + } + } + } + break; + case TO_VOLUMEEVENT: case TO_GLOBALEVENT: trigger = *(data++); diff --git a/TombEngine/Game/control/trigger.h b/TombEngine/Game/control/trigger.h index f1b3e2668b..8a2f8a3e23 100644 --- a/TombEngine/Game/control/trigger.h +++ b/TombEngine/Game/control/trigger.h @@ -54,6 +54,7 @@ enum TRIGOBJECTS_TYPES TO_CUTSCENE, TO_UNUSED1, // TRNG FmvNg TO_UNUSED2, // TRNG TimerfieldNg + TO_VOLUME, TO_VOLUMEEVENT, TO_GLOBALEVENT };