diff --git a/docs/progress.svg b/docs/progress.svg
index d4d718a66..1e126714a 100644
--- a/docs/progress.svg
+++ b/docs/progress.svg
@@ -144,7 +144,7 @@
-
+
@@ -1118,7 +1118,7 @@
-
+
@@ -1459,10 +1459,10 @@
-Functions decompiled (count): 31.00%
-Functions decompiled (bytesize): 30.66%
-Functions not decompiled, but with known names (count): 55.01%
-Functions not decompiled, but with known names (bytesize): 53.37%
+Functions decompiled (count): 31.14%
+Functions decompiled (bytesize): 30.72%
+Functions not decompiled, but with known names (count): 54.87%
+Functions not decompiled, but with known names (bytesize): 53.31%
Functions not decompiled, with unknown names (count): 13.99%
Functions not decompiled, with unknown names (bytesize): 15.97%
diff --git a/docs/progress.txt b/docs/progress.txt
index 90a6dcce8..e46d64b68 100644
--- a/docs/progress.txt
+++ b/docs/progress.txt
@@ -182,7 +182,7 @@ EffectSpaz ---------- ---------- +
CreatureCollision 0x00412910 0x00000078 +
ObjectCollision 0x00412990 0x00000059 +
DoorCollision 0x004129F0 0x0000007B +
-TrapCollision 0x00412A70 0x00000096 *
+TrapCollision 0x00412A70 0x00000096 +
ItemPushLara 0x00412B10 0x00000335 +
TestBoundsCollide 0x00412E50 0x000000D1 +
TestLaraPosition 0x00412F30 0x00000137 -
diff --git a/src/game/collide.c b/src/game/collide.c
index 848ff706f..2d1af9a38 100644
--- a/src/game/collide.c
+++ b/src/game/collide.c
@@ -663,6 +663,19 @@ void DoorCollision(int16_t item_num, ITEM_INFO* lara_item, COLL_INFO* coll)
}
}
+void TrapCollision(int16_t item_num, ITEM_INFO* lara_item, COLL_INFO* coll)
+{
+ ITEM_INFO* item = &Items[item_num];
+
+ if (item->status == IS_ACTIVE) {
+ if (TestBoundsCollide(item, lara_item, coll->radius)) {
+ TestCollision(item, lara_item);
+ }
+ } else if (item->status != IS_INVISIBLE) {
+ ObjectCollision(item_num, lara_item, coll);
+ }
+}
+
void ItemPushLara(
ITEM_INFO* item, ITEM_INFO* lara_item, COLL_INFO* coll, int32_t spazon,
int32_t bigpush)
@@ -791,6 +804,7 @@ void T1MInjectGameCollide()
INJECT(0x00412910, CreatureCollision);
INJECT(0x00412990, ObjectCollision);
INJECT(0x004129F0, DoorCollision);
+ INJECT(0x00412A70, TrapCollision);
INJECT(0x00412B10, ItemPushLara);
INJECT(0x00412E50, TestBoundsCollide);
}
diff --git a/src/game/collide.h b/src/game/collide.h
index b58451a81..3d0091662 100644
--- a/src/game/collide.h
+++ b/src/game/collide.h
@@ -4,10 +4,6 @@
#include "types.h"
#include
-// clang-format off
-#define TrapCollision ((void (*)(int16_t item_num, ITEM_INFO* lara_item, COLL_INFO* coll))0x00412A70)
-// clang-format on
-
void GetCollisionInfo(
COLL_INFO* coll, int32_t xpos, int32_t ypos, int32_t zpos, int16_t room_num,
int32_t objheight);
@@ -26,6 +22,7 @@ void EffectSpaz(ITEM_INFO* lara_item, COLL_INFO* coll);
void CreatureCollision(int16_t item_num, ITEM_INFO* lara_item, COLL_INFO* coll);
void ObjectCollision(int16_t item_num, ITEM_INFO* lara_item, COLL_INFO* coll);
void DoorCollision(int16_t item_num, ITEM_INFO* lara_item, COLL_INFO* coll);
+void TrapCollision(int16_t item_num, ITEM_INFO* lara_item, COLL_INFO* coll);
void ItemPushLara(
ITEM_INFO* item, ITEM_INFO* lara_item, COLL_INFO* coll, int32_t spazon,
int32_t bigpush);