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);