MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / SwitchTrigger

Function SwitchTrigger

TombEngine/Game/control/trigger.cpp:122–231  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

120}
121
122bool SwitchTrigger(short itemNumber, short timer)
123{
124 auto& item = g_Level.Items[itemNumber];
125 const auto& player = Lara;
126
127 // Handle reusable receptacles.
128 if (item.ObjectNumber >= ID_PUZZLE_DONE1 && item.ObjectNumber <= ID_PUZZLE_DONE16 &&
129 item.ItemFlags[1] != 0)
130 {
131 item.Flags |= IFLAG_ACTIVATION_MASK;
132 item.Status = ITEM_ACTIVE;
133 item.ItemFlags[1] = false;
134
135 return true;
136 }
137
138 if (item.ObjectNumber >= ID_PUZZLE_HOLE1 && item.ObjectNumber <= ID_PUZZLE_HOLE16 &&
139 item.ItemFlags[1] != 0)
140 {
141 item.Flags |= IFLAG_ACTIVATION_MASK;
142 item.Status = ITEM_DEACTIVATED;
143 item.ItemFlags[1] = false;
144
145 return true;
146 }
147
148 if ((item.ObjectNumber >= ID_PUZZLE_DONE1 && item.ObjectNumber <= ID_PUZZLE_DONE16) ||
149 (item.ObjectNumber >= ID_PUZZLE_HOLE1 && item.ObjectNumber <= ID_PUZZLE_HOLE16))
150 {
151 return false;
152 }
153
154 // Handle reusable receptacles.
155 if (item.ObjectNumber >= ID_KEY_HOLE1 && item.ObjectNumber <= ID_KEY_HOLE16 &&
156 item.ItemFlags[1] != 0 &&
157 (item.ItemFlags[5] == (int)ReusableReceptacleState::Empty || item.ItemFlags[5] == (int)ReusableReceptacleState::None) &&
158 player.Control.HandStatus != HandStatus::Busy)
159 {
160 item.Flags |= IFLAG_ACTIVATION_MASK;
161 item.Status = ITEM_ACTIVE;
162 item.ItemFlags[5] = (int)ReusableReceptacleState::Done;
163 item.ItemFlags[1] = false;
164 return true;
165 }
166
167 if (item.ObjectNumber >= ID_KEY_HOLE1 && item.ObjectNumber <= ID_KEY_HOLE16 &&
168 item.ItemFlags[1] != 0 && item.ItemFlags[5] == (int)ReusableReceptacleState::Done &&
169 player.Control.HandStatus != HandStatus::Busy)
170 {
171 item.Flags |= IFLAG_ACTIVATION_MASK;
172 item.Status = ITEM_DEACTIVATED;
173 item.ItemFlags[5] = (int)ReusableReceptacleState::Empty;
174 item.ItemFlags[1] = false;
175 return true;
176 }
177
178 if (item.ObjectNumber >= ID_KEY_HOLE1 && item.ObjectNumber <= ID_KEY_HOLE16)
179 return false;

Callers 1

TestTriggersFunction · 0.85

Calls 2

TriggerPulleyFunction · 0.85
RemoveActiveItemFunction · 0.85

Tested by 1

TestTriggersFunction · 0.68