Skip to content

Commit

Permalink
port TrapObjects
Browse files Browse the repository at this point in the history
  • Loading branch information
rr- committed Feb 21, 2021
1 parent a633a1e commit 9dd540c
Show file tree
Hide file tree
Showing 6 changed files with 795 additions and 612 deletions.
1,144 changes: 572 additions & 572 deletions docs/progress.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
78 changes: 39 additions & 39 deletions docs/progress.txt
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,8 @@ UpdateLaraRoom 0x004126A0 0x0000005F *
LaraBaddieCollision 0x00412700 0x00000209 *
CreatureCollision 0x00412910 0x00000078 *
ObjectCollision 0x00412990 0x00000059 *
DoorCollision 0x004129F0 0x0000007B -
TrapCollision 0x00412A70 0x00000096 -
DoorCollision 0x004129F0 0x0000007B *
TrapCollision 0x00412A70 0x00000096 *
ItemPushLara 0x00412B10 0x00000335 -
TestBoundsCollide 0x00412E50 0x000000D1 -
TestLaraPosition 0x00412F30 0x00000137 -
Expand Down Expand Up @@ -454,14 +454,14 @@ LaraColSwim 0x004292C0 0x00000013 +
LaraColUWDeath 0x004292E0 0x0000005E +
LaraSwimCollision 0x00429340 0x000000FA +
LaraWaterCurrent 0x00429440 0x000001DB +
DrawLightning 0x00429620 0x000004D1 -
InitialiseLightning 0x00429B00 0x0000007E -
LightningControl 0x00429B80 0x000002AF -
LightningCollision 0x00429E30 0x00000061 -
InitialiseThorsHandle 0x00429EA0 0x00000086 -
ThorsHandleControl 0x00429F30 0x000002B0 -
ThorsHandleCollision 0x0042A1F0 0x0000004B -
ThorsHeadCollision 0x0042A240 0x00000052 -
DrawLightning 0x00429620 0x000004D1 *
InitialiseLightning 0x00429B00 0x0000007E *
LightningControl 0x00429B80 0x000002AF *
LightningCollision 0x00429E30 0x00000061 *
InitialiseThorsHandle 0x00429EA0 0x00000086 *
ThorsHandleControl 0x00429F30 0x000002B0 *
ThorsHandleCollision 0x0042A1F0 0x0000004B *
ThorsHeadCollision 0x0042A240 0x00000052 *
sub_42A2A0 0x0042A2A0 0x0000000C -
sub_42A2B0 0x0042A2B0 0x0000000C -
DB_Log 0x0042A2C0 0x00000037 +
Expand All @@ -485,15 +485,15 @@ mn_stop_ambient_sounds 0x0042B000 0x0000007E -
mn_update_sound_effects 0x0042B080 0x0000027D -
StopSoundEffect 0x0042B300 0x0000010E *
adjust_master_volume 0x0042B410 0x00000012 -
InitialiseMovableBlock 0x0042B430 0x00000030 -
MovableBlockControl 0x0042B460 0x0000014A -
MovableBlockCollision 0x0042B5B0 0x00000208 -
InitialiseMovableBlock 0x0042B430 0x00000030 *
MovableBlockControl 0x0042B460 0x0000014A *
MovableBlockCollision 0x0042B5B0 0x00000208 *
TestBlockPush 0x0042B7E0 0x00000142 -
TestBlockPull 0x0042B940 0x00000239 -
InitialiseRollingBlock 0x0042BB90 0x00000024 -
RollingBlockControl 0x0042BBC0 0x000000DA -
InitialiseRollingBlock 0x0042BB90 0x00000024 *
RollingBlockControl 0x0042BBC0 0x000000DA *
AlterFloorHeight 0x0042BCA0 0x000000BE -
DrawMovableBlock 0x0042BD60 0x00000081 -
DrawMovableBlock 0x0042BD60 0x00000081 *
DrawUnclippedItem 0x0042BDF0 0x00000068 *
AbortionControl 0x0042BE60 0x0000049E *
NatlaControl 0x0042C330 0x0000059F *
Expand Down Expand Up @@ -558,7 +558,7 @@ BaldyControl 0x00432B90 0x000004CC *
PickUpCollision 0x00433080 0x000001BF -
PickUpScionCollision 0x00433240 0x00000164 -
PickUpScion4Collision 0x004333B0 0x00000108 -
MidasCollision 0x004334C0 0x00000217 -
MidasCollision 0x004334C0 0x00000217 *
SwitchCollision 0x004336F0 0x0000011C -
SwitchCollision2 0x00433810 0x000000F0 -
KeyHoleCollision 0x00433900 0x00000227 -
Expand All @@ -583,7 +583,7 @@ draw_scaled_spriteC 0x004360A0 0x000001FB -
InitialiseLevel 0x004362A0 0x00000119 *
InitialiseLevelFlags 0x004363C0 0x00000018 -
BaddyObjects 0x004363E0 0x00000C2F +
TrapObjects 0x00437010 0x00000356 *
TrapObjects 0x00437010 0x00000356 +
ObjectObjects 0x00437370 0x000006D3 *
InitialiseObjects 0x00437A50 0x00000063 +
sub_437AC0 0x00437AC0 0x00000006 -
Expand Down Expand Up @@ -642,32 +642,32 @@ T_GetTextWidth 0x00439A20 0x000000AC +
T_RemovePrint 0x00439AD0 0x00000025 +
T_DrawText 0x00439B00 0x00000153 +
T_DrawThisText 0x00439C60 0x000003A2 +
InitialiseRollingBall 0x0043A010 0x00000040 -
RollingBallControl 0x0043A050 0x0000025D -
RollingBallCollision 0x0043A2B0 0x00000264 -
SpikeCollision 0x0043A520 0x0000014E -
InitialiseRollingBall 0x0043A010 0x00000040 *
RollingBallControl 0x0043A050 0x0000025D *
RollingBallCollision 0x0043A2B0 0x00000264 *
SpikeCollision 0x0043A520 0x0000014E *
TrapDoorControl 0x0043A670 0x00000053 -
TrapDoorFloor 0x0043A6D0 0x00000042 -
TrapDoorCeiling 0x0043A720 0x00000046 -
OnTrapDoor 0x0043A770 0x000000A3 -
PendulumControl 0x0043A820 0x0000014B -
FallingBlockControl 0x0043A970 0x000000F9 -
FallingBlockFloor 0x0043AA70 0x00000035 -
FallingBlockCeiling 0x0043AAB0 0x00000034 -
TeethTrapControl 0x0043AAF0 0x000000C1 -
FallingCeilingControl 0x0043ABC0 0x0000009E -
InitialiseDamoclesSword 0x0043AC60 0x0000003E -
DamoclesSwordControl 0x0043ACA0 0x00000129 -
DamoclesSwordCollision 0x0043ADD0 0x000000E8 -
DartEmitterControl 0x0043AEC0 0x0000019B -
DartsControl 0x0043B060 0x00000140 -
DartEffectControl 0x0043B1A0 0x0000004C -
FlameEmitterControl 0x0043B1F0 0x000000A3 -
FlameControl 0x0043B2A0 0x00000185 -
PendulumControl 0x0043A820 0x0000014B *
FallingBlockControl 0x0043A970 0x000000F9 *
FallingBlockFloor 0x0043AA70 0x00000035 *
FallingBlockCeiling 0x0043AAB0 0x00000034 *
TeethTrapControl 0x0043AAF0 0x000000C1 *
FallingCeilingControl 0x0043ABC0 0x0000009E *
InitialiseDamoclesSword 0x0043AC60 0x0000003B *
DamoclesSwordControl 0x0043ACA0 0x00000129 *
DamoclesSwordCollision 0x0043ADD0 0x000000E8 *
DartEmitterControl 0x0043AEC0 0x0000019B *
DartsControl 0x0043B060 0x00000140 *
DartEffectControl 0x0043B1A0 0x0000004C *
FlameEmitterControl 0x0043B1F0 0x000000A3 *
FlameControl 0x0043B2A0 0x00000185 *
LavaBurn 0x0043B430 0x000000E8 -
LavaEmitterControl 0x0043B520 0x000000C7 -
LavaControl 0x0043B5F0 0x00000119 -
LavaWedgeControl 0x0043B710 0x00000139 -
LavaEmitterControl 0x0043B520 0x000000C7 *
LavaControl 0x0043B5F0 0x00000119 *
LavaWedgeControl 0x0043B710 0x00000139 *
CentaurControl 0x0043B850 0x000002B9 *
InitialiseWarrior2 0x0043BB30 0x00000028 *
FlyerControl 0x0043BB60 0x00000625 *
Expand Down
2 changes: 2 additions & 0 deletions src/game/collide.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
#define LaraBaddieCollision ((void __cdecl(*)(ITEM_INFO *item, COLL_INFO *coll))0x00412700)
#define CreatureCollision ((void __cdecl(*)(int16_t item_num, ITEM_INFO* lara_item, COLL_INFO* coll))0x00412910)
#define ObjectCollision ((void __cdecl(*)(int16_t item_num, ITEM_INFO* lara_item, COLL_INFO* coll))0x00412990)
#define DoorCollision ((void __cdecl(*)(int16_t item_num, ITEM_INFO* lara_item, COLL_INFO* coll))0x004129F0)
#define TrapCollision ((void __cdecl(*)(int16_t item_num, ITEM_INFO* lara_item, COLL_INFO* coll))0x00412A70)
// clang-format on

#endif
138 changes: 138 additions & 0 deletions src/game/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "game/people.h"
#include "game/rat.h"
#include "game/setup.h"
#include "game/traps.h"
#include "game/types.h"
#include "game/warrior.h"
#include "game/wolf.h"
Expand Down Expand Up @@ -478,6 +479,142 @@ void __cdecl BaddyObjects()
}
}

void __cdecl TrapObjects()
{
Objects[O_FALLING_BLOCK].control = FallingBlockControl;
Objects[O_FALLING_BLOCK].floor = FallingBlockFloor;
Objects[O_FALLING_BLOCK].ceiling = FallingBlockCeiling;
Objects[O_FALLING_BLOCK].save_position = 1;
Objects[O_FALLING_BLOCK].save_anim = 1;
Objects[O_FALLING_BLOCK].save_flags = 1;

Objects[O_PENDULUM].control = PendulumControl;
Objects[O_PENDULUM].collision = TrapCollision;
Objects[O_PENDULUM].shadow_size = UNIT_SHADOW / 2;
Objects[O_PENDULUM].save_flags = 1;
Objects[O_PENDULUM].save_anim = 1;

Objects[O_TEETH_TRAP].control = TeethTrapControl;
Objects[O_TEETH_TRAP].collision = TrapCollision;
Objects[O_TEETH_TRAP].save_flags = 1;
Objects[O_TEETH_TRAP].save_anim = 1;

Objects[O_ROLLING_BALL].initialise = InitialiseRollingBall;
Objects[O_ROLLING_BALL].control = RollingBallControl;
Objects[O_ROLLING_BALL].collision = RollingBallCollision;
Objects[O_ROLLING_BALL].save_position = 1;
Objects[O_ROLLING_BALL].save_anim = 1;
Objects[O_ROLLING_BALL].save_flags = 1;

Objects[O_SPIKES].collision = SpikeCollision;

Objects[O_FALLING_CEILING1].control = FallingCeilingControl;
Objects[O_FALLING_CEILING1].collision = TrapCollision;
Objects[O_FALLING_CEILING1].save_position = 1;
Objects[O_FALLING_CEILING1].save_anim = 1;
Objects[O_FALLING_CEILING1].save_flags = 1;

Objects[O_FALLING_CEILING2].control = FallingCeilingControl;
Objects[O_FALLING_CEILING2].collision = TrapCollision;
Objects[O_FALLING_CEILING2].save_position = 1;
Objects[O_FALLING_CEILING2].save_anim = 1;
Objects[O_FALLING_CEILING2].save_flags = 1;

Objects[O_DAMOCLES_SWORD].initialise = InitialiseDamoclesSword;
Objects[O_DAMOCLES_SWORD].control = DamoclesSwordControl;
Objects[O_DAMOCLES_SWORD].collision = DamoclesSwordCollision;
Objects[O_DAMOCLES_SWORD].shadow_size = UNIT_SHADOW;
Objects[O_DAMOCLES_SWORD].save_position = 1;
Objects[O_DAMOCLES_SWORD].save_anim = 1;
Objects[O_DAMOCLES_SWORD].save_flags = 1;

Objects[O_MOVABLE_BLOCK].initialise = InitialiseMovableBlock;
Objects[O_MOVABLE_BLOCK].control = MovableBlockControl;
Objects[O_MOVABLE_BLOCK].draw_routine = DrawMovableBlock;
Objects[O_MOVABLE_BLOCK].collision = MovableBlockCollision;
Objects[O_MOVABLE_BLOCK].save_position = 1;
Objects[O_MOVABLE_BLOCK].save_anim = 1;
Objects[O_MOVABLE_BLOCK].save_flags = 1;

Objects[O_MOVABLE_BLOCK2].initialise = InitialiseMovableBlock;
Objects[O_MOVABLE_BLOCK2].control = MovableBlockControl;
Objects[O_MOVABLE_BLOCK2].draw_routine = DrawMovableBlock;
Objects[O_MOVABLE_BLOCK2].collision = MovableBlockCollision;
Objects[O_MOVABLE_BLOCK2].save_position = 1;
Objects[O_MOVABLE_BLOCK2].save_anim = 1;
Objects[O_MOVABLE_BLOCK2].save_flags = 1;

Objects[O_MOVABLE_BLOCK3].initialise = InitialiseMovableBlock;
Objects[O_MOVABLE_BLOCK3].draw_routine = DrawMovableBlock;
Objects[O_MOVABLE_BLOCK3].control = MovableBlockControl;
Objects[O_MOVABLE_BLOCK3].collision = MovableBlockCollision;
Objects[O_MOVABLE_BLOCK3].save_position = 1;
Objects[O_MOVABLE_BLOCK3].save_anim = 1;
Objects[O_MOVABLE_BLOCK3].save_flags = 1;

Objects[O_MOVABLE_BLOCK4].initialise = InitialiseMovableBlock;
Objects[O_MOVABLE_BLOCK4].control = MovableBlockControl;
Objects[O_MOVABLE_BLOCK4].draw_routine = DrawMovableBlock;
Objects[O_MOVABLE_BLOCK4].collision = MovableBlockCollision;
Objects[O_MOVABLE_BLOCK4].save_position = 1;
Objects[O_MOVABLE_BLOCK4].save_anim = 1;
Objects[O_MOVABLE_BLOCK4].save_flags = 1;

Objects[O_ROLLING_BLOCK].initialise = InitialiseRollingBlock;
Objects[O_ROLLING_BLOCK].control = RollingBlockControl;
Objects[O_ROLLING_BLOCK].save_position = 1;
Objects[O_ROLLING_BLOCK].save_anim = 1;
Objects[O_ROLLING_BLOCK].save_flags = 1;

Objects[O_LIGHTNING_EMITTER].initialise = InitialiseLightning;
Objects[O_LIGHTNING_EMITTER].control = LightningControl;
Objects[O_LIGHTNING_EMITTER].draw_routine = DrawLightning;
Objects[O_LIGHTNING_EMITTER].collision = LightningCollision;
Objects[O_LIGHTNING_EMITTER].save_flags = 1;

Objects[O_THORS_HANDLE].initialise = InitialiseThorsHandle;
Objects[O_THORS_HANDLE].control = ThorsHandleControl;
Objects[O_THORS_HANDLE].draw_routine = DrawUnclippedItem;
Objects[O_THORS_HANDLE].collision = ThorsHandleCollision;
Objects[O_THORS_HANDLE].save_flags = 1;
Objects[O_THORS_HANDLE].save_anim = 1;

Objects[O_THORS_HEAD].collision = ThorsHeadCollision;
Objects[O_THORS_HEAD].draw_routine = DrawUnclippedItem;
Objects[O_THORS_HEAD].save_flags = 1;
Objects[O_THORS_HEAD].save_anim = 1;

Objects[O_MIDAS_TOUCH].collision = MidasCollision;
Objects[O_MIDAS_TOUCH].draw_routine = DrawDummyItem;

Objects[O_DART_EMITTER].control = DartEmitterControl;

Objects[O_DARTS].collision = ObjectCollision;
Objects[O_DARTS].control = DartsControl;
Objects[O_DARTS].shadow_size = UNIT_SHADOW / 2;
Objects[O_DARTS].save_flags = 1;

Objects[O_DART_EFFECT].control = DartEffectControl;
Objects[O_DART_EFFECT].draw_routine = DrawSpriteItem;

Objects[O_FLAME_EMITTER].control = FlameEmitterControl;
Objects[O_FLAME_EMITTER].draw_routine = DrawDummyItem;

Objects[O_FLAME].control = FlameControl;

Objects[O_LAVA_EMITTER].control = LavaEmitterControl;
Objects[O_LAVA_EMITTER].draw_routine = DrawDummyItem;
Objects[O_LAVA_EMITTER].collision = ObjectCollision;

Objects[O_LAVA].control = LavaControl;

Objects[O_LAVA_WEDGE].control = LavaWedgeControl;
Objects[O_LAVA_WEDGE].collision = CreatureCollision;
Objects[O_LAVA_WEDGE].save_position = 1;
Objects[O_LAVA_WEDGE].save_anim = 1;
Objects[O_LAVA_WEDGE].save_flags = 1;
}

void __cdecl InitialiseObjects()
{
for (int i = 0; i < NUMBER_OBJECTS; i++) {
Expand Down Expand Up @@ -573,5 +710,6 @@ void __cdecl InitialiseObjects()
void Tomb1MInjectGameSetup()
{
INJECT(0x004363E0, BaddyObjects);
INJECT(0x00437010, TrapObjects);
INJECT(0x00437A50, InitialiseObjects);
}
2 changes: 1 addition & 1 deletion src/game/setup.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
#define TOMB1MAIN_GAME_SETUP_H

// clang-format off
#define TrapObjects ((void __cdecl(*)())0x00437010)
#define ObjectObjects ((void __cdecl(*)())0x00437370)
#define InitialiseLevel ((int32_t __cdecl(*)(int32_t level_number))0x004362A0)
// clang-format on

void __cdecl BaddyObjects();
void __cdecl TrapObjects();
void __cdecl InitialiseObjects();

void Tomb1MInjectGameSetup();
Expand Down
43 changes: 43 additions & 0 deletions src/game/traps.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#ifndef TOMB1MAIN_GAME_TRAPS_H
#define TOMB1MAIN_GAME_TRAPS_H

// clang-format off
#define InitialiseLightning ((void __cdecl(*)(int16_t item_num))0x00429B00)
#define DrawLightning ((void __cdecl(*)(ITEM_INFO *item))0x00429620)
#define LightningControl ((void __cdecl(*)(int16_t item_num))0x00429B80)
#define LightningCollision ((void __cdecl(*)(int16_t item_num, ITEM_INFO* litem, COLL_INFO* coll))0x00429E30)
#define InitialiseThorsHandle ((void __cdecl(*)(int16_t item_num))0x00429EA0)
#define ThorsHandleControl ((void __cdecl(*)(int16_t item_num))0x00429F30)
#define ThorsHandleCollision ((void __cdecl(*)(int16_t item_num, ITEM_INFO* litem, COLL_INFO* coll))0x0042A1F0)
#define ThorsHeadCollision ((void __cdecl(*)(int16_t item_num, ITEM_INFO* litem, COLL_INFO* coll))0x0042A240)
#define MidasCollision ((void __cdecl(*)(int16_t item_num, ITEM_INFO* litem, COLL_INFO* coll))0x004334C0)
#define InitialiseMovableBlock ((void __cdecl(*)(int16_t item_num))0x0042B430)
#define MovableBlockControl ((void __cdecl(*)(int16_t item_num))0x0042B460)
#define MovableBlockCollision ((void __cdecl(*)(int16_t item_num, ITEM_INFO* litem, COLL_INFO* coll))0x0042B5B0)
#define InitialiseRollingBlock ((void __cdecl(*)(int16_t item_num))0x0042BB90)
#define RollingBlockControl ((void __cdecl(*)(int16_t item_num))0x0042BBC0)
#define DrawMovableBlock ((void __cdecl(*)(ITEM_INFO *item))0x0042BD60)
#define InitialiseRollingBall ((void __cdecl(*)(int16_t item_num))0x0043A010)
#define RollingBallControl ((void __cdecl(*)(int16_t item_num))0x0043A050)
#define RollingBallCollision ((void __cdecl(*)(int16_t item_num, ITEM_INFO* litem, COLL_INFO* coll))0x0043A2B0)
#define SpikeCollision ((void __cdecl(*)(int16_t item_num, ITEM_INFO* litem, COLL_INFO* coll))0x0043A520)
#define PendulumControl ((void __cdecl(*)(int16_t item_num))0x0043A820)
#define FallingBlockControl ((void __cdecl(*)(int16_t item_num))0x0043A970)
#define FallingBlockFloor ((void __cdecl(*)(ITEM_INFO *item, int32_t x, int32_t y, int32_t z, int16_t *height))0x0043AA70)
#define FallingBlockCeiling ((void __cdecl(*)(ITEM_INFO *item, int32_t x, int32_t y, int32_t z, int16_t *height))0x0043AAB0)
#define TeethTrapControl ((void __cdecl(*)(int16_t item_num))0x0043AAF0)
#define FallingCeilingControl ((void __cdecl(*)(int16_t item_num))0x0043ABC0)
#define InitialiseDamoclesSword ((void __cdecl(*)(int16_t item_num))0x0043AC60)
#define DamoclesSwordControl ((void __cdecl(*)(int16_t item_num))0x0043ACA0)
#define DamoclesSwordCollision ((void __cdecl(*)(int16_t item_num, ITEM_INFO* litem, COLL_INFO* coll))0x0043ADD0)
#define DartEmitterControl ((void __cdecl(*)(int16_t item_num))0x0043AEC0)
#define DartsControl ((void __cdecl(*)(int16_t item_num))0x0043B060)
#define DartEffectControl ((void __cdecl(*)(int16_t item_num))0x0043B1A0)
#define FlameEmitterControl ((void __cdecl(*)(int16_t item_num))0x0043B1F0)
#define FlameControl ((void __cdecl(*)(int16_t item_num))0x0043B2A0)
#define LavaEmitterControl ((void __cdecl(*)(int16_t item_num))0x0043B520)
#define LavaControl ((void __cdecl(*)(int16_t item_num))0x0043B5F0)
#define LavaWedgeControl ((void __cdecl(*)(int16_t item_num))0x0043B710)
// clang-format on

#endif

0 comments on commit 9dd540c

Please sign in to comment.