From c9948af9ba87e02cf33a00762a66d7da56975bcc Mon Sep 17 00:00:00 2001 From: Marcin Kurczewski Date: Tue, 5 Nov 2024 00:04:56 +0100 Subject: [PATCH] tr2/objects: port Object_SetupGeneralObjects --- docs/tr2/progress.svg | 132 ++++++------- docs/tr2/progress.txt | 60 +++--- src/tr2/game/objects/effects/blood.c | 10 + src/tr2/game/objects/effects/blood.h | 5 + src/tr2/game/objects/effects/body_part.c | 11 ++ src/tr2/game/objects/effects/body_part.h | 5 + src/tr2/game/objects/effects/bubbles.c | 9 + src/tr2/game/objects/effects/bubbles.h | 5 + src/tr2/game/objects/effects/explosion.c | 10 + src/tr2/game/objects/effects/explosion.h | 5 + src/tr2/game/objects/effects/glow.c | 9 + src/tr2/game/objects/effects/glow.h | 5 + src/tr2/game/objects/effects/gun_flash.c | 9 + src/tr2/game/objects/effects/gun_flash.h | 5 + src/tr2/game/objects/effects/missile_flame.c | 10 + src/tr2/game/objects/effects/missile_flame.h | 5 + .../game/objects/effects/missile_harpoon.c | 10 + .../game/objects/effects/missile_harpoon.h | 5 + src/tr2/game/objects/effects/missile_knife.c | 10 + src/tr2/game/objects/effects/missile_knife.h | 5 + src/tr2/game/objects/effects/ricochet.c | 9 + src/tr2/game/objects/effects/ricochet.h | 5 + src/tr2/game/objects/effects/snow_sprite.c | 9 + src/tr2/game/objects/effects/snow_sprite.h | 5 + src/tr2/game/objects/effects/splash.c | 10 + src/tr2/game/objects/effects/splash.h | 5 + src/tr2/game/objects/effects/twinkle.c | 6 + src/tr2/game/objects/effects/twinkle.h | 2 + src/tr2/game/objects/effects/water_sprite.c | 10 + src/tr2/game/objects/effects/water_sprite.h | 5 + src/tr2/game/objects/effects/waterfall.c | 11 ++ src/tr2/game/objects/effects/waterfall.h | 5 + src/tr2/game/objects/general/alarm_sound.c | 10 + src/tr2/game/objects/general/alarm_sound.h | 5 + src/tr2/game/objects/general/bell.c | 13 ++ src/tr2/game/objects/general/bell.h | 5 + src/tr2/game/objects/general/big_bowl.c | 11 ++ src/tr2/game/objects/general/big_bowl.h | 5 + src/tr2/game/objects/general/bird_tweeter.c | 10 + src/tr2/game/objects/general/bird_tweeter.h | 5 + src/tr2/game/objects/general/bridge_flat.c | 7 + src/tr2/game/objects/general/bridge_flat.h | 2 + src/tr2/game/objects/general/bridge_tilt_1.c | 7 + src/tr2/game/objects/general/bridge_tilt_1.h | 2 + src/tr2/game/objects/general/bridge_tilt_2.c | 7 + src/tr2/game/objects/general/bridge_tilt_2.h | 2 + src/tr2/game/objects/general/camera_target.c | 9 + src/tr2/game/objects/general/camera_target.h | 5 + src/tr2/game/objects/general/clock_chimes.c | 12 ++ src/tr2/game/objects/general/clock_chimes.h | 5 + .../game/objects/general/cutscene_player.c | 10 + .../game/objects/general/cutscene_player.h | 5 + src/tr2/game/objects/general/detonator.c | 15 ++ src/tr2/game/objects/general/detonator.h | 3 + src/tr2/game/objects/general/ding_dong.c | 11 ++ src/tr2/game/objects/general/ding_dong.h | 5 + src/tr2/game/objects/general/door.c | 10 + src/tr2/game/objects/general/door.h | 2 + src/tr2/game/objects/general/drawbridge.c | 15 ++ src/tr2/game/objects/general/drawbridge.h | 2 + src/tr2/game/objects/general/earthquake.c | 12 ++ src/tr2/game/objects/general/earthquake.h | 5 + src/tr2/game/objects/general/final_cutscene.c | 11 ++ src/tr2/game/objects/general/final_cutscene.h | 5 + .../objects/general/final_level_counter.c | 9 + .../objects/general/final_level_counter.h | 2 + src/tr2/game/objects/general/flare_item.c | 14 ++ src/tr2/game/objects/general/flare_item.h | 5 + src/tr2/game/objects/general/gong_bonger.c | 8 + src/tr2/game/objects/general/gong_bonger.h | 2 + src/tr2/game/objects/general/grenade.c | 7 + src/tr2/game/objects/general/grenade.h | 2 + src/tr2/game/objects/general/harpoon_bolt.c | 7 + src/tr2/game/objects/general/harpoon_bolt.h | 1 + src/tr2/game/objects/general/hot_liquid.c | 10 + src/tr2/game/objects/general/hot_liquid.h | 5 + src/tr2/game/objects/general/keyhole.c | 6 + src/tr2/game/objects/general/keyhole.h | 2 + src/tr2/game/objects/general/lara_alarm.c | 12 ++ src/tr2/game/objects/general/lara_alarm.h | 5 + src/tr2/game/objects/general/lift.c | 12 ++ src/tr2/game/objects/general/lift.h | 1 + src/tr2/game/objects/general/pickup.c | 10 + src/tr2/game/objects/general/pickup.h | 2 + src/tr2/game/objects/general/puzzle_hole.c | 10 + src/tr2/game/objects/general/puzzle_hole.h | 2 + src/tr2/game/objects/general/secret.c | 13 ++ src/tr2/game/objects/general/secret.h | 5 + src/tr2/game/objects/general/sphere_of_doom.c | 15 ++ src/tr2/game/objects/general/sphere_of_doom.h | 5 + src/tr2/game/objects/general/switch.c | 8 + src/tr2/game/objects/general/switch.h | 2 + src/tr2/game/objects/general/trapdoor.c | 9 + src/tr2/game/objects/general/trapdoor.h | 2 + src/tr2/game/objects/general/window.c | 24 +++ src/tr2/game/objects/general/window.h | 7 + src/tr2/game/objects/setup.c | 187 +++++++++++++++++- src/tr2/game/objects/setup.h | 1 + src/tr2/game/objects/vehicles/boat.c | 11 ++ src/tr2/game/objects/vehicles/boat.h | 1 + src/tr2/game/objects/vehicles/skidoo_fast.c | 14 ++ src/tr2/game/objects/vehicles/skidoo_fast.h | 5 + src/tr2/global/funcs.h | 59 +++--- src/tr2/inject_exec.c | 1 + src/tr2/meson.build | 31 +++ 105 files changed, 1047 insertions(+), 127 deletions(-) create mode 100644 src/tr2/game/objects/effects/blood.c create mode 100644 src/tr2/game/objects/effects/blood.h create mode 100644 src/tr2/game/objects/effects/body_part.c create mode 100644 src/tr2/game/objects/effects/body_part.h create mode 100644 src/tr2/game/objects/effects/bubbles.c create mode 100644 src/tr2/game/objects/effects/bubbles.h create mode 100644 src/tr2/game/objects/effects/explosion.c create mode 100644 src/tr2/game/objects/effects/explosion.h create mode 100644 src/tr2/game/objects/effects/glow.c create mode 100644 src/tr2/game/objects/effects/glow.h create mode 100644 src/tr2/game/objects/effects/gun_flash.c create mode 100644 src/tr2/game/objects/effects/gun_flash.h create mode 100644 src/tr2/game/objects/effects/missile_flame.c create mode 100644 src/tr2/game/objects/effects/missile_flame.h create mode 100644 src/tr2/game/objects/effects/missile_harpoon.c create mode 100644 src/tr2/game/objects/effects/missile_harpoon.h create mode 100644 src/tr2/game/objects/effects/missile_knife.c create mode 100644 src/tr2/game/objects/effects/missile_knife.h create mode 100644 src/tr2/game/objects/effects/ricochet.c create mode 100644 src/tr2/game/objects/effects/ricochet.h create mode 100644 src/tr2/game/objects/effects/snow_sprite.c create mode 100644 src/tr2/game/objects/effects/snow_sprite.h create mode 100644 src/tr2/game/objects/effects/splash.c create mode 100644 src/tr2/game/objects/effects/splash.h create mode 100644 src/tr2/game/objects/effects/water_sprite.c create mode 100644 src/tr2/game/objects/effects/water_sprite.h create mode 100644 src/tr2/game/objects/effects/waterfall.c create mode 100644 src/tr2/game/objects/effects/waterfall.h create mode 100644 src/tr2/game/objects/general/alarm_sound.c create mode 100644 src/tr2/game/objects/general/alarm_sound.h create mode 100644 src/tr2/game/objects/general/bell.c create mode 100644 src/tr2/game/objects/general/bell.h create mode 100644 src/tr2/game/objects/general/big_bowl.c create mode 100644 src/tr2/game/objects/general/big_bowl.h create mode 100644 src/tr2/game/objects/general/bird_tweeter.c create mode 100644 src/tr2/game/objects/general/bird_tweeter.h create mode 100644 src/tr2/game/objects/general/camera_target.c create mode 100644 src/tr2/game/objects/general/camera_target.h create mode 100644 src/tr2/game/objects/general/clock_chimes.c create mode 100644 src/tr2/game/objects/general/clock_chimes.h create mode 100644 src/tr2/game/objects/general/cutscene_player.c create mode 100644 src/tr2/game/objects/general/cutscene_player.h create mode 100644 src/tr2/game/objects/general/ding_dong.c create mode 100644 src/tr2/game/objects/general/ding_dong.h create mode 100644 src/tr2/game/objects/general/earthquake.c create mode 100644 src/tr2/game/objects/general/earthquake.h create mode 100644 src/tr2/game/objects/general/final_cutscene.c create mode 100644 src/tr2/game/objects/general/final_cutscene.h create mode 100644 src/tr2/game/objects/general/flare_item.c create mode 100644 src/tr2/game/objects/general/flare_item.h create mode 100644 src/tr2/game/objects/general/hot_liquid.c create mode 100644 src/tr2/game/objects/general/hot_liquid.h create mode 100644 src/tr2/game/objects/general/lara_alarm.c create mode 100644 src/tr2/game/objects/general/lara_alarm.h create mode 100644 src/tr2/game/objects/general/secret.c create mode 100644 src/tr2/game/objects/general/secret.h create mode 100644 src/tr2/game/objects/general/sphere_of_doom.c create mode 100644 src/tr2/game/objects/general/sphere_of_doom.h create mode 100644 src/tr2/game/objects/general/window.c create mode 100644 src/tr2/game/objects/general/window.h create mode 100644 src/tr2/game/objects/vehicles/skidoo_fast.c create mode 100644 src/tr2/game/objects/vehicles/skidoo_fast.h diff --git a/docs/tr2/progress.svg b/docs/tr2/progress.svg index 825a3becf..594036346 100644 --- a/docs/tr2/progress.svg +++ b/docs/tr2/progress.svg @@ -69,10 +69,10 @@ Tomb2.exe progress according to the physical function order: -71.30% (887) · 26.29% (327) · 0% (0) · 2.41% (30) +71.38% (888) · 26.21% (326) · 0% (0) · 2.41% (30) - - + + @@ -321,19 +321,19 @@ void __cdecl Sound_UpdateEffects(void); int16_t __cdecl DoBloodSplat(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE direction, int16_t room_num); void __cdecl DoLotsOfBlood(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE direction, int16_t room_num, int32_t num); -void __cdecl ControlBlood1(int16_t fx_num); -void __cdecl ControlExplosion1(int16_t fx_num); +void __cdecl Blood_Control(int16_t fx_num); +void __cdecl Explosion_Control(int16_t fx_num); void __cdecl Richochet(GAME_VECTOR *pos); -void __cdecl ControlRichochet1(int16_t fx_num); +void __cdecl Richochet_Control(int16_t fx_num); void __cdecl CreateBubble(XYZ_32 *pos, int16_t room_num); void __cdecl LaraBubbles(ITEM *item); -void __cdecl ControlBubble1(int16_t fx_num); +void __cdecl Bubbles_Control(int16_t fx_num); void __cdecl Splash(ITEM *item); -void __cdecl ControlSplash1(int16_t fx_num); -void __cdecl ControlWaterSprite(int16_t fx_num); -void __cdecl ControlSnowSprite(int16_t fx_num); -void __cdecl ControlHotLiquid(int16_t fx_num); -void __cdecl WaterFall(int16_t fx_num); +void __cdecl Splash_Control(int16_t fx_num); +void __cdecl WaterSprite_Control(int16_t fx_num); +void __cdecl SnowSprite_Control(int16_t fx_num); +void __cdecl HotLiquid_Control(int16_t fx_num); +void __cdecl Waterfall_Control(int16_t fx_num); void __cdecl finish_level_effect(ITEM *item); void __cdecl turn180_effect(ITEM *item); void __cdecl floor_shake_effect(ITEM *item); @@ -347,15 +347,15 @@ void __cdecl CurtainFX(ITEM *item); void __cdecl StatueFX(ITEM *item); void __cdecl SetChangeFX(ITEM *item); -void __cdecl ControlDingDong(int16_t item_num); -void __cdecl ControlLaraAlarm(int16_t item_num); -void __cdecl ControlAlarmSound(int16_t item_num); -void __cdecl ControlBirdTweeter(int16_t item_num); +void __cdecl DingDong_Control(int16_t item_num); +void __cdecl LaraAlarm_Control(int16_t item_num); +void __cdecl AlarmSound_Control(int16_t item_num); +void __cdecl BirdTweeter_Control(int16_t item_num); void __cdecl DoChimeSound(ITEM *item); -void __cdecl ControlClockChimes(int16_t item_num); -void __cdecl SphereOfDoomCollision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll); -void __cdecl SphereOfDoom(int16_t item_num); -void __cdecl DrawSphereOfDoom(ITEM *item); +void __cdecl ClockChimes_Control(int16_t item_num); +void __cdecl SphereOfDoom_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll); +void __cdecl SphereOfDoom_Control(int16_t item_num); +void __cdecl SphereOfDoom_Draw(const ITEM *item); void __cdecl lara_hands_free(ITEM *item); void __cdecl flip_map_effect(ITEM *item); void __cdecl draw_right_gun(ITEM *item); @@ -626,7 +626,7 @@ GAME_OBJECT_ID Gun_GetWeaponAnim(const LARA_GUN_TYPE gun_type); int32_t __cdecl Flare_DoLight(XYZ_32 *pos, int32_t flare_age); void __cdecl Flare_DoInHand(int32_t flare_age); -void __cdecl Flare_DrawInAir(ITEM *item); +void __cdecl Flare_DrawInAir(const ITEM *item); void __cdecl Flare_Create(int32_t thrown); void __cdecl Flare_SetArm(int32_t frame); void __cdecl Flare_Draw(void); @@ -678,7 +678,7 @@ void __cdecl LOT_InitialiseSlot(int16_t item_num, int32_t slot); void __cdecl LOT_CreateZone(ITEM *item); void __cdecl LOT_ClearLOT(LOT_INFO *lot); -void __cdecl ControlMissile(int16_t fx_num); +void __cdecl Missile_Control(int16_t fx_num); void __cdecl ShootAtLara(FX *fx); int32_t __cdecl Effect_ExplodingDeath(int16_t item_num, int32_t mesh_bits, int16_t damage); void __cdecl BodyPart_Control(int16_t fx_num); @@ -691,8 +691,8 @@ void __cdecl Room_AlterFloorHeight(ITEM *item, int32_t height); void __cdecl MovableBlock_Draw(const ITEM *item); void __cdecl Object_DrawUnclippedItem(const ITEM *item); -void __cdecl EarthQuake(int16_t item_num); -void __cdecl ControlCutShotgun(int16_t item_num); +void __cdecl Earthquake_Control(int16_t item_num); +void __cdecl FinalCutscene_Control(int16_t item_num); void __cdecl InitialiseFinalLevel(void); void __cdecl FinalLevelCounter_Control(int16_t item_num); void __cdecl MiniCopterControl(int16_t item_num); @@ -701,12 +701,12 @@ void __cdecl GongBonger_Control(int16_t item_num); void __cdecl Zipline_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll); void __cdecl Zipline_Control(int16_t item_num); -void __cdecl BigBowlControl(int16_t item_num); -void __cdecl BellControl(int16_t item_num); -void __cdecl InitialiseWindow(int16_t item_num); +void __cdecl BigBowl_Control(int16_t item_num); +void __cdecl Bell_Control(int16_t item_num); +void __cdecl Window_Initialise(int16_t item_num); void __cdecl SmashWindow(int16_t item_num); -void __cdecl WindowControl(int16_t item_num); -void __cdecl SmashIceControl(int16_t item_num); +void __cdecl Window_Control(int16_t item_num); +void __cdecl SmashIce_Control(int16_t item_num); void __cdecl Door_Shut(DOORPOS_DATA *d); void __cdecl Door_Open(DOORPOS_DATA *d); void __cdecl Door_Initialise(int16_t item_num); @@ -731,8 +731,8 @@ void __cdecl GeneralControl(int16_t item_num); void __cdecl Detonator_Control(int16_t item_num); bool __cdecl Creature_CanTargetEnemy(const ITEM *item, const AI_INFO *info); -void __cdecl ControlGlow(int16_t fx_num); -void __cdecl ControlGunShot(int16_t fx_num); +void __cdecl Glow_Control(int16_t fx_num); +void __cdecl GunFlash_Control(int16_t fx_num); int16_t __cdecl GunShot(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE yrot, int16_t room_num); int16_t __cdecl GunHit(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE yrot, int16_t room_num); int16_t __cdecl GunMiss(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE yrot, int16_t room_num); @@ -756,7 +756,7 @@ int32_t __cdecl Switch_Trigger(int16_t item_num, int16_t timer); int32_t __cdecl Keyhole_Trigger(int16_t item_num); int32_t __cdecl Pickup_Trigger(int16_t item_num); -void __cdecl SecretControl(int16_t item_num); +void __cdecl Secret_Control(int16_t item_num); void __cdecl Mouse_Control(int16_t item_num); void __cdecl InitialiseStartInfo(void); void __cdecl ModifyStartInfo(int32_t level_num); @@ -771,7 +771,7 @@ void __cdecl InitialiseLevelFlags(void); void __cdecl Object_SetupBaddyObjects(void); void __cdecl Object_SetupTrapObjects(void); -void __cdecl Object_SetupGeneralObjects(void); +void __cdecl Object_SetupGeneralObjects(void); void __cdecl Object_SetupAllObjects(void); void __cdecl GetCarriedItems(void); void __cdecl Jelly_Control(int16_t item_num); @@ -1324,10 +1324,10 @@ Tomb2.exe progress according to the function sizes: -75% · 24.68% · 0% · 0.33% +75.92% · 23.75% · 0% · 0.33% - - + + @@ -1337,7 +1337,7 @@ void __cdecl Output_GTMapPersp32FP(int32_t y1, int32_t y2, uint8_t *tex_page); void __cdecl Lara_Draw(const ITEM *item); void __cdecl GF_ModifyInventory(int32_t level, int32_t type); -void __cdecl Object_SetupGeneralObjects(void); +void __cdecl Object_SetupGeneralObjects(void); void __cdecl Lara_Draw_I(const ITEM *item, const FRAME_INFO *frame1, const FRAME_INFO *frame2, int32_t frac, int32_t rate); bool __cdecl Input_Update(void); const int16_t *__cdecl Output_InsertObjectGT4(const int16_t *obj_ptr, int32_t num, SORT_TYPE sort_type); @@ -1449,7 +1449,7 @@ void __cdecl Skidoo_Draw(const ITEM *item); const int16_t *__cdecl Output_InsertObjectG3_ZBuffered(const int16_t *obj_ptr, int32_t num, SORT_TYPE sort_type); int32_t __cdecl Output_XYClipper(int32_t vtx_count, VERTEX_INFO *vtx); -void __cdecl ControlMissile(int16_t fx_num); +void __cdecl Missile_Control(int16_t fx_num); BOOL __cdecl Shell_Main(void); void __cdecl Lara_Animate(ITEM *item); void __cdecl GiantYeti_Control(int16_t item_num); @@ -1626,7 +1626,7 @@ void __cdecl Inv_Ring_DoMotions(RING_INFO *ring); void __cdecl DartEmitterControl(int16_t item_num); void __cdecl Output_InsertTransQuad_Sorted(int32_t x, int32_t y, int32_t width, int32_t height, int32_t z); -void __cdecl WaterFall(int16_t fx_num); +void __cdecl Waterfall_Control(int16_t fx_num); void __cdecl RestoreLostBuffers(void); void __cdecl Item_AlignPosition(XYZ_32 *vec, ITEM *src_item, ITEM *dst_item); void __cdecl CreateScreenBuffers(void); @@ -1644,10 +1644,10 @@ void __cdecl Inv_DoInventoryBackground(void); int32_t __cdecl Creature_Vault(int16_t item_num, int16_t angle, int32_t vault, int32_t shift); int32_t __cdecl Lara_TestSlide(ITEM *item, COLL_INFO *coll); -void __cdecl DrawSphereOfDoom(ITEM *item); +void __cdecl SphereOfDoom_Draw(const ITEM *item); void __cdecl Output_InsertLine_Sorted(int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t z, uint8_t color_idx); void __cdecl Inv_InsertItem(INVENTORY_ITEM *inv_item); -void __cdecl SphereOfDoomCollision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll); +void __cdecl SphereOfDoom_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll); int32_t __cdecl Collide_TestCollision(ITEM *item, const ITEM *lara_item); void __cdecl HWR_InitState(void); void __cdecl Lara_Col_Hang(ITEM *item, COLL_INFO *coll); @@ -1699,19 +1699,19 @@ BOOL __cdecl DecompPCX(const uint8_t *pcx, size_t pcx_size, LPBYTE pic, RGB_888 *pal); int32_t __cdecl Boat_TestWaterHeight(ITEM *item, int32_t z_off, int32_t x_off, XYZ_32 *pos); int32_t __cdecl Creature_CheckBaddieOverlap(int16_t item_num); -void __cdecl Flare_DrawInAir(ITEM *item); +void __cdecl Flare_DrawInAir(const ITEM *item); void __cdecl Skidoo_Collision(int16_t item_num, ITEM *litem, COLL_INFO *coll); void __cdecl Output_DrawPoly_Gouraud(int32_t vtx_count, int32_t red, int32_t green, int32_t blue); int32_t __cdecl Lara_TestHangOnClimbWall(ITEM *item, COLL_INFO *coll); void __cdecl Gun_Rifle_Control(LARA_GUN_TYPE weapon_type); int32_t __cdecl AddTexturePage8(int32_t width, int32_t height, const uint8_t *page_buf, int32_t pal_idx); void __cdecl Output_InsertPolygons(const int16_t *obj_ptr, int32_t clip); -void __cdecl ControlBubble1(int16_t fx_num); +void __cdecl Bubbles_Control(int16_t fx_num); void __cdecl Lara_SurfaceCollision(ITEM *item, COLL_INFO *coll); DWORD __cdecl WinInReadJoystick(int32_t *x, int32_t *y); int32_t __cdecl Box_StalkBox(const ITEM *item, const ITEM *enemy, int16_t box_num); void __cdecl Gun_Rifle_FireShotgun(void); -void __cdecl SphereOfDoom(int16_t item_num); +void __cdecl SphereOfDoom_Control(int16_t item_num); void __cdecl Gun_Rifle_FireGrenade(void); void __cdecl Lara_DoClimbLeftRight(ITEM *item, COLL_INFO *coll, int32_t result, int32_t shift); void __cdecl Camera_Chase(const ITEM *item); @@ -1728,7 +1728,7 @@ bool __cdecl DInputJoystickCreate(void); void __cdecl S_InitialisePolyList(BOOL clear_back_buffer); void __cdecl Effect_Kill(int16_t fx_num); -void __cdecl BigBowlControl(int16_t item_num); +void __cdecl BigBowl_Control(int16_t item_num); void __cdecl Lara_SlideSlope(ITEM *item, COLL_INFO *coll); bool __cdecl WinVidSpinMessageLoop(bool needWait); BOOL __stdcall S_Audio_Sample_DSoundEnumCallback(LPGUID guid, LPCTSTR description, LPCTSTR module, LPVOID context); @@ -1736,12 +1736,12 @@ int32_t __cdecl Skidoo_CheckGetOn(int16_t item_num, COLL_INFO *coll); void __cdecl FallingCeiling(int16_t item_num); BOOL __cdecl SelectDrive(void); -void __cdecl ControlHotLiquid(int16_t fx_num); +void __cdecl HotLiquid_Control(int16_t fx_num); void __cdecl CutscenePlayer_Control(int16_t item_num); -void __cdecl SmashIceControl(int16_t item_num); +void __cdecl SmashIce_Control(int16_t item_num); void __cdecl DrawQuad(float sx, float sy, float width, float height, D3DCOLOR color); INT_PTR __stdcall SE_AdvancedDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); -void __cdecl EarthQuake(int16_t item_num); +void __cdecl Earthquake_Control(int16_t item_num); void __cdecl ModifyStartInfo(int32_t level_num); void __cdecl SpringBoardControl(int16_t item_num); void __cdecl S_LoadSettings(void); @@ -1825,7 +1825,7 @@ void __cdecl S_AnimateTextures(int32_t ticks); void __cdecl Camera_Initialise(void); bool __cdecl WinVidGetDisplayAdapters(void); -void __cdecl ControlWaterSprite(int16_t fx_num); +void __cdecl WaterSprite_Control(int16_t fx_num); DWORD __cdecl CompPCX(BYTE *bitmap, DWORD width, DWORD height, RGB_888 *palette, BYTE **pcx_data); void __cdecl SyncSurfacePalettes(void *src_data, int32_t width, int32_t height, int32_t src_pitch, RGB_888 *src_palette, void *dst_data, int32_t dst_pitch, RGB_888 *dst_palette, bool preserve_sys_palette); int32_t __cdecl Lara_TestEdgeCatch(ITEM *item, COLL_INFO *coll, int32_t *edge); @@ -1890,7 +1890,7 @@ void __cdecl Lara_State_Zipline(ITEM *item, COLL_INFO *coll); void __cdecl Lara_Col_Compress( ITEM *item, COLL_INFO *coll ); void __cdecl Gun_HitTarget(ITEM *item, GAME_VECTOR *hitpos, int32_t damage); -void __cdecl WindowControl(int16_t item_num); +void __cdecl Window_Control(int16_t item_num); int32_t __cdecl S_LoadGame(void *save_data, uint32_t save_size, int32_t slot_num); void __cdecl Option_Controls_UpdateText(void); void __cdecl Output_SetNearZ(int32_t near_z); @@ -1917,7 +1917,7 @@ void __cdecl Detonator_Control(int16_t item_num); const int16_t *__cdecl Output_InsertObjectGT4_Sorted(const int16_t *obj_ptr, int32_t num, SORT_TYPE sort_type); int32_t __cdecl Lara_IsNearItem(PHD_3DPOS *pos, int32_t distance); -void __cdecl ControlSnowSprite(int16_t fx_num); +void __cdecl SnowSprite_Control(int16_t fx_num); void __cdecl Text_AddBackground(TEXTSTRING *string, int16_t x_size, int16_t y_size, int16_t x_off, int16_t y_off, int16_t z_off, int16_t color, uint16_t *gour_ptr, uint16_t flags); sub_444B20 bool __cdecl WinVidGetDisplayMode(DISPLAY_MODE *disp_mode); @@ -1948,7 +1948,7 @@ bool __cdecl Music_PlaySynced(int32_t track_id); void __cdecl Object_DrawSpriteItem(const ITEM *item); void __cdecl Lara_Col_Fallback(ITEM *item, COLL_INFO *coll); -void __cdecl ControlBlood1(int16_t fx_num); +void __cdecl Blood_Control(int16_t fx_num); void __cdecl Requester_Init(REQUEST_INFO *req); void __cdecl HWR_EnableZBuffer(bool z_write_enable, bool z_enable); int32_t __cdecl Inv_AnimateInventoryItem(INVENTORY_ITEM *inv_item); @@ -1958,13 +1958,13 @@ void __cdecl Lara_Col_Roll(ITEM *item, COLL_INFO *coll); void __cdecl SkidooArmed_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll); int32_t __cdecl Room_FindByPos(int32_t x, int32_t y, int32_t z); -void __cdecl ControlExplosion1(int16_t fx_num); +void __cdecl Explosion_Control(int16_t fx_num); int32_t __cdecl Lara_DeflectEdge(ITEM *item, COLL_INFO *coll); void __cdecl SkidooDriver_Initialise(int16_t item_num); bool __cdecl WinInputInit(void); void __cdecl Random_Seed(void); void __cdecl Option_DoInventory(INVENTORY_ITEM *item); -void __cdecl BellControl(int16_t item_num); +void __cdecl Bell_Control(int16_t item_num); void __cdecl Option_Controls_FlashConflicts(void); void __cdecl S_SyncPictureBufferPalette(void); void __cdecl S_SaveSettings(void); @@ -1995,14 +1995,14 @@ bool __cdecl GetRegistryBoolValue(LPCTSTR lpValueName, bool *pValue, bool defaultValue); int16_t __cdecl Lara_FloorFront(ITEM *item, PHD_ANGLE ang, int32_t dist); void __cdecl Lara_State_ClimbStance(ITEM *item, COLL_INFO *coll); -void __cdecl InitialiseWindow(int16_t item_num); +void __cdecl Window_Initialise(int16_t item_num); void __cdecl InitialiseHair(void); void __cdecl Lara_Col_Jumper(ITEM *item, COLL_INFO *coll); void __cdecl GameWindowCalculateSizeFromClient(int32_t *width, int32_t *height); void __cdecl Matrix_LookAt(int32_t xsrc, int32_t ysrc, int32_t zsrc, int32_t xtar, int32_t ytar, int32_t ztar, int16_t roll); void __cdecl Richochet(GAME_VECTOR *pos); void __cdecl Lara_LookLeftRight(void); -void __cdecl ControlSplash1(int16_t fx_num); +void __cdecl Splash_Control(int16_t fx_num); void __thiscall WinVidGetColorBitMasks(COLOR_BIT_MASKS *bm, LPDDPIXELFORMAT pixel_format); BOOL __cdecl Level_LoadPalettes(HANDLE handle); bool __cdecl GetRegistryBinaryValue(LPCTSTR lpValueName, LPBYTE value, DWORD valueSize, LPBYTE defaultValue); @@ -2028,14 +2028,14 @@ int32_t __cdecl CreateTexturePage(int32_t width, int32_t height, bool alpha); void __cdecl Lara_Col_SwanDive(ITEM *item, COLL_INFO *coll); void __cdecl Sound_UpdateEffects(void); -void __cdecl ControlClockChimes(int16_t item_num); +void __cdecl ClockChimes_Control(int16_t item_num); void __cdecl Lara_Col_Death(ITEM *item, COLL_INFO *coll); void __cdecl Object_SetupAllObjects(void); sub_4470F0 sub_447AC0 void __cdecl SE_ControlsDlgUpdate(HWND hwndDlg); void __cdecl Object_Collision_Trap(int16_t item_num, ITEM *lara_item, COLL_INFO *coll); -void __cdecl ControlAlarmSound(int16_t item_num); +void __cdecl AlarmSound_Control(int16_t item_num); int32_t __cdecl Lara_HitCeiling(ITEM *item, COLL_INFO *coll); void __cdecl UpdateGameResolution(void); int32_t __cdecl GF_DoLevelSequence(int32_t level, GAMEFLOW_LEVEL_TYPE type); @@ -2069,7 +2069,7 @@ void __cdecl Sound_StopEffect(int32_t sample_id); bool __cdecl GetRegistryDwordValue(LPCTSTR lpValueName, DWORD *pValue, DWORD defaultValue); void __cdecl Item_UpdateRoom(ITEM *item, int32_t height); -void __cdecl ControlBirdTweeter(int16_t item_num); +void __cdecl BirdTweeter_Control(int16_t item_num); void __cdecl Inv_Ring_MotionItemSelect(RING_INFO *ring, INVENTORY_ITEM *inv_item); void __cdecl Lara_Col_ClimbLeft(ITEM *item, COLL_INFO *coll); void __cdecl BaddieBiteEffect(ITEM *item, BITE *bite); @@ -2129,7 +2129,7 @@ int16_t __cdecl Room_GetDoor(const SECTOR *sector); void __cdecl Gun_Pistols_DrawMeshes(LARA_GUN_TYPE weapon_type); int32_t __cdecl MovableBlock_TestDestination(ITEM *item, int32_t block_height); -void __cdecl ControlGunShot(int16_t fx_num); +void __cdecl GunFlash_Control(int16_t fx_num); JOYSTICK_NODE *__cdecl GetJoystick(GUID *lpGuid); bool __cdecl OpenGameRegistryKey(LPCTSTR key); double __cdecl UT_Microseconds(void); @@ -2195,7 +2195,7 @@ bool __cdecl WinVidInit(void); void __cdecl Option_Controls_DefaultConflict(void); void __cdecl UpdateTicks(void); -void __cdecl ControlDingDong(int16_t item_num); +void __cdecl DingDong_Control(int16_t item_num); void __cdecl Trapdoor_Ceiling(const ITEM *item, int32_t x, int32_t y, int32_t z, int32_t *out_height); void __cdecl Flare_Ready(void); void __cdecl FallingBlockFloor(const ITEM *item, int32_t x, int32_t y, int32_t z, int32_t *out_height); @@ -2210,7 +2210,7 @@ void __cdecl Output_DrawPolyGTMap(const int16_t *obj_ptr); void __cdecl Output_DrawPolyWGTMap(const int16_t *obj_ptr); void __cdecl Boat_Initialise(int16_t item_num); -void __cdecl ControlCutShotgun(int16_t item_num); +void __cdecl FinalCutscene_Control(int16_t item_num); void __cdecl InitialiseBlade(int16_t item_num); void __cdecl InitialiseRollingBall(int16_t item_num); int32_t __cdecl RenderErrorBox(int32_t error_code); @@ -2220,7 +2220,7 @@ GAME_OBJECT_ID Gun_GetWeaponAnim(const LARA_GUN_TYPE gun_type); void __cdecl Drawbridge_Ceiling(const ITEM *item, int32_t x, int32_t y, int32_t z, int32_t *out_height); int32_t __cdecl Bridge_GetOffset(const ITEM *item, int32_t x, int32_t z); -void __cdecl ControlGlow(int16_t fx_num); +void __cdecl Glow_Control(int16_t fx_num); void __cdecl WaitPrimaryBufferFlip(void); void __cdecl S_RemoveCtrlText(void); void __cdecl TexturePageReleaseVidMemSurface(TEXPAGE_DESC *page); @@ -2246,7 +2246,7 @@ void __cdecl Item_ShiftCol(ITEM *item, COLL_INFO *coll); int32_t __cdecl Game_DrawCinematic(void); int32_t __cdecl Game_Draw(void); -void __cdecl ControlLaraAlarm(int16_t item_num); +void __cdecl LaraAlarm_Control(int16_t item_num); void __cdecl Text_ChangeText(TEXTSTRING *string, const char *text); uint32_t __cdecl Text_GetScaleH(uint32_t value); bool __cdecl D3DIsSupported(LPD3DDEVICEDESC desc); @@ -2308,7 +2308,7 @@ int32_t __cdecl Music_GetRealTrack(int32_t track); void __cdecl S_Audio_Sample_AdjustTrackPitch(int32_t track_id, int32_t pitch); void __cdecl S_CalculateStaticLight(int16_t adder); -void __cdecl ControlRichochet1(int16_t fx_num); +void __cdecl Richochet_Control(int16_t fx_num); void __cdecl Effect_InitialiseArray(void); void __cdecl Lara_State_PushBlock(ITEM *item, COLL_INFO *coll); void __cdecl Lara_State_Pickup(ITEM *item, COLL_INFO *coll); @@ -2390,7 +2390,7 @@ void __cdecl Lara_Col_SurfBack(ITEM *item, COLL_INFO *coll); void __cdecl Lara_Col_SurfLeft(ITEM *item, COLL_INFO *coll); void __cdecl Lara_Col_SurfRight(ITEM *item, COLL_INFO *coll); -void __cdecl SecretControl(int16_t item_num); +void __cdecl Secret_Control(int16_t item_num); uint16_t __cdecl S_COLOR(int32_t red, int32_t green, int32_t blue); void __cdecl FreePalette(int32_t palette_idx); void __cdecl Matrix_Pop_I(void); diff --git a/docs/tr2/progress.txt b/docs/tr2/progress.txt index a16ff329f..53fbad5c9 100644 --- a/docs/tr2/progress.txt +++ b/docs/tr2/progress.txt @@ -3157,19 +3157,19 @@ typedef enum { 0x0041C560 0x0068 + void __cdecl Sound_UpdateEffects(void); 0x0041C5D0 0x0059 -R int16_t __cdecl DoBloodSplat(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE direction, int16_t room_num); 0x0041C630 0x00A4 -R void __cdecl DoLotsOfBlood(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE direction, int16_t room_num, int32_t num); -0x0041C6E0 0x0082 -R void __cdecl ControlBlood1(int16_t fx_num); -0x0041C770 0x007F -R void __cdecl ControlExplosion1(int16_t fx_num); +0x0041C6E0 0x0082 -R void __cdecl Blood_Control(int16_t fx_num); +0x0041C770 0x007F -R void __cdecl Explosion_Control(int16_t fx_num); 0x0041C7F0 0x0072 -R void __cdecl Richochet(GAME_VECTOR *pos); -0x0041C870 0x0030 -R void __cdecl ControlRichochet1(int16_t fx_num); +0x0041C870 0x0030 -R void __cdecl Richochet_Control(int16_t fx_num); 0x0041C8A0 0x0064 -R void __cdecl CreateBubble(XYZ_32 *pos, int16_t room_num); 0x0041C910 0x0078 -R void __cdecl LaraBubbles(ITEM *item); -0x0041C990 0x00F3 -R void __cdecl ControlBubble1(int16_t fx_num); +0x0041C990 0x00F3 -R void __cdecl Bubbles_Control(int16_t fx_num); 0x0041CA90 0x00C2 -R void __cdecl Splash(ITEM *item); -0x0041CB60 0x0071 -R void __cdecl ControlSplash1(int16_t fx_num); -0x0041CBE0 0x00AE -R void __cdecl ControlWaterSprite(int16_t fx_num); -0x0041CC90 0x008C -R void __cdecl ControlSnowSprite(int16_t fx_num); -0x0041CD20 0x00DE -R void __cdecl ControlHotLiquid(int16_t fx_num); -0x0041CE00 0x013D -R void __cdecl WaterFall(int16_t fx_num); +0x0041CB60 0x0071 -R void __cdecl Splash_Control(int16_t fx_num); +0x0041CBE0 0x00AE -R void __cdecl WaterSprite_Control(int16_t fx_num); +0x0041CC90 0x008C -R void __cdecl SnowSprite_Control(int16_t fx_num); +0x0041CD20 0x00DE -R void __cdecl HotLiquid_Control(int16_t fx_num); +0x0041CE00 0x013D -R void __cdecl Waterfall_Control(int16_t fx_num); 0x0041CF40 0x000B -R void __cdecl finish_level_effect(ITEM *item); 0x0041CF50 0x0016 -R void __cdecl turn180_effect(ITEM *item); 0x0041CF70 0x0096 -R void __cdecl floor_shake_effect(ITEM *item); @@ -3183,15 +3183,15 @@ typedef enum { 0x0041D1B0 0x001C -R void __cdecl CurtainFX(ITEM *item); 0x0041D1D0 0x001C -R void __cdecl StatueFX(ITEM *item); 0x0041D1F0 0x001C -R void __cdecl SetChangeFX(ITEM *item); -0x0041D210 0x003F -R void __cdecl ControlDingDong(int16_t item_num); -0x0041D250 0x0037 -R void __cdecl ControlLaraAlarm(int16_t item_num); -0x0041D290 0x0067 -R void __cdecl ControlAlarmSound(int16_t item_num); -0x0041D300 0x005D -R void __cdecl ControlBirdTweeter(int16_t item_num); +0x0041D210 0x003F - void __cdecl DingDong_Control(int16_t item_num); +0x0041D250 0x0037 - void __cdecl LaraAlarm_Control(int16_t item_num); +0x0041D290 0x0067 - void __cdecl AlarmSound_Control(int16_t item_num); +0x0041D300 0x005D - void __cdecl BirdTweeter_Control(int16_t item_num); 0x0041D360 0x0059 -R void __cdecl DoChimeSound(ITEM *item); -0x0041D3C0 0x0068 -R void __cdecl ControlClockChimes(int16_t item_num); -0x0041D430 0x0128 -R void __cdecl SphereOfDoomCollision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll); -0x0041D560 0x00F0 -R void __cdecl SphereOfDoom(int16_t item_num); -0x0041D650 0x012D -R void __cdecl DrawSphereOfDoom(ITEM *item); +0x0041D3C0 0x0068 - void __cdecl ClockChimes_Control(int16_t item_num); +0x0041D430 0x0128 - void __cdecl SphereOfDoom_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll); +0x0041D560 0x00F0 - void __cdecl SphereOfDoom_Control(int16_t item_num); +0x0041D650 0x012D - void __cdecl SphereOfDoom_Draw(const ITEM *item); 0x0041D780 0x000A -R void __cdecl lara_hands_free(ITEM *item); 0x0041D790 0x0005 -R void __cdecl flip_map_effect(ITEM *item); 0x0041D7A0 0x0043 -R void __cdecl draw_right_gun(ITEM *item); @@ -3490,7 +3490,7 @@ typedef enum { # game/laraflare.c 0x0042F7A0 0x009D - int32_t __cdecl Flare_DoLight(XYZ_32 *pos, int32_t flare_age); 0x0042F840 0x00D3 - void __cdecl Flare_DoInHand(int32_t flare_age); -0x0042F920 0x00F8 - void __cdecl Flare_DrawInAir(ITEM *item); +0x0042F920 0x00F8 - void __cdecl Flare_DrawInAir(const ITEM *item); 0x0042FA20 0x01D7 - void __cdecl Flare_Create(int32_t thrown); 0x0042FC00 0x004B - void __cdecl Flare_SetArm(int32_t frame); 0x0042FC50 0x0169 - void __cdecl Flare_Draw(void); @@ -3552,7 +3552,7 @@ typedef enum { 0x00432F90 0x0049 + void __cdecl LOT_ClearLOT(LOT_INFO *lot); # game/missile.c -0x00432FE0 0x02D0 -R void __cdecl ControlMissile(int16_t fx_num); +0x00432FE0 0x02D0 -R void __cdecl Missile_Control(int16_t fx_num); 0x004332B0 0x00A7 -R void __cdecl ShootAtLara(FX *fx); 0x00433360 0x0386 +R int32_t __cdecl Effect_ExplodingDeath(int16_t item_num, int32_t mesh_bits, int16_t damage); 0x004336F0 0x0200 -R void __cdecl BodyPart_Control(int16_t fx_num); @@ -3569,8 +3569,8 @@ typedef enum { 0x004341A0 0x006B - void __cdecl Object_DrawUnclippedItem(const ITEM *item); # game/objects.c -0x00434210 0x00DB -R void __cdecl EarthQuake(int16_t item_num); -0x004342F0 0x003C -R void __cdecl ControlCutShotgun(int16_t item_num); +0x00434210 0x00DB - void __cdecl Earthquake_Control(int16_t item_num); +0x004342F0 0x003C - void __cdecl FinalCutscene_Control(int16_t item_num); 0x00434330 0x009D -R void __cdecl InitialiseFinalLevel(void); 0x00434400 0x020F + void __cdecl FinalLevelCounter_Control(int16_t item_num); 0x00434610 0x00D9 -R void __cdecl MiniCopterControl(int16_t item_num); @@ -3579,12 +3579,12 @@ typedef enum { 0x00434800 0x00BD + void __cdecl GongBonger_Control(int16_t item_num); 0x004348C0 0x00BF + void __cdecl Zipline_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll); 0x00434980 0x028F + void __cdecl Zipline_Control(int16_t item_num); -0x00434C10 0x00E3 -R void __cdecl BigBowlControl(int16_t item_num); -0x00434D00 0x007E -R void __cdecl BellControl(int16_t item_num); -0x00434D80 0x0075 -R void __cdecl InitialiseWindow(int16_t item_num); +0x00434C10 0x00E3 - void __cdecl BigBowl_Control(int16_t item_num); +0x00434D00 0x007E - void __cdecl Bell_Control(int16_t item_num); +0x00434D80 0x0075 - void __cdecl Window_Initialise(int16_t item_num); 0x00434E00 0x00C4 -R void __cdecl SmashWindow(int16_t item_num); -0x00434ED0 0x0096 -R void __cdecl WindowControl(int16_t item_num); -0x00434F70 0x00DC -R void __cdecl SmashIceControl(int16_t item_num); +0x00434ED0 0x0096 - void __cdecl Window_Control(int16_t item_num); +0x00434F70 0x00DC -R void __cdecl SmashIce_Control(int16_t item_num); 0x00435050 0x0042 + void __cdecl Door_Shut(DOORPOS_DATA *d); 0x004350A0 0x0032 + void __cdecl Door_Open(DOORPOS_DATA *d); 0x004350E0 0x03DC + void __cdecl Door_Initialise(int16_t item_num); @@ -3611,8 +3611,8 @@ typedef enum { # game/people.c 0x00435E00 0x0085 + bool __cdecl Creature_CanTargetEnemy(const ITEM *item, const AI_INFO *info); -0x00435E90 0x003B -R void __cdecl ControlGlow(int16_t fx_num); -0x00435ED0 0x004E -R void __cdecl ControlGunShot(int16_t fx_num); +0x00435E90 0x003B -R void __cdecl Glow_Control(int16_t fx_num); +0x00435ED0 0x004E -R void __cdecl GunFlash_Control(int16_t fx_num); 0x00435F20 0x0066 -R int16_t __cdecl GunShot(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE yrot, int16_t room_num); 0x00435F90 0x00B9 -R int16_t __cdecl GunHit(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE yrot, int16_t room_num); 0x00436050 0x00A7 -R int16_t __cdecl GunMiss(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE yrot, int16_t room_num); @@ -3638,7 +3638,7 @@ typedef enum { 0x00438D80 0x00BD + int32_t __cdecl Switch_Trigger(int16_t item_num, int16_t timer); 0x00438E40 0x003D + int32_t __cdecl Keyhole_Trigger(int16_t item_num); 0x00438E80 0x0033 + int32_t __cdecl Pickup_Trigger(int16_t item_num); -0x00438EC0 0x0023 -R void __cdecl SecretControl(int16_t item_num); +0x00438EC0 0x0023 -R void __cdecl Secret_Control(int16_t item_num); # game/rat.c 0x00438EF0 0x01DC - void __cdecl Mouse_Control(int16_t item_num); @@ -3659,7 +3659,7 @@ typedef enum { 0x0043A450 0x0027 -R void __cdecl InitialiseLevelFlags(void); 0x0043A480 0x103B + void __cdecl Object_SetupBaddyObjects(void); 0x0043B4C0 0x05FD - void __cdecl Object_SetupTrapObjects(void); -0x0043BAC0 0x0C4C - void __cdecl Object_SetupGeneralObjects(void); +0x0043BAC0 0x0C4C + void __cdecl Object_SetupGeneralObjects(void); 0x0043C710 0x0068 + void __cdecl Object_SetupAllObjects(void); 0x0043C780 0x00CE -R void __cdecl GetCarriedItems(void); diff --git a/src/tr2/game/objects/effects/blood.c b/src/tr2/game/objects/effects/blood.c new file mode 100644 index 000000000..34bb3d58e --- /dev/null +++ b/src/tr2/game/objects/effects/blood.c @@ -0,0 +1,10 @@ +#include "game/objects/effects/blood.h" + +#include "global/funcs.h" + +void Blood_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_BLOOD); + obj->control = Blood_Control; + obj->semi_transparent = 1; +} diff --git a/src/tr2/game/objects/effects/blood.h b/src/tr2/game/objects/effects/blood.h new file mode 100644 index 000000000..f2a0f9ec7 --- /dev/null +++ b/src/tr2/game/objects/effects/blood.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void Blood_Setup(void); diff --git a/src/tr2/game/objects/effects/body_part.c b/src/tr2/game/objects/effects/body_part.c new file mode 100644 index 000000000..0f721f6b4 --- /dev/null +++ b/src/tr2/game/objects/effects/body_part.c @@ -0,0 +1,11 @@ +#include "game/objects/effects/body_part.h" + +#include "global/funcs.h" + +void BodyPart_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_BODY_PART); + obj->control = BodyPart_Control; + obj->loaded = 1; + obj->mesh_count = 0; +} diff --git a/src/tr2/game/objects/effects/body_part.h b/src/tr2/game/objects/effects/body_part.h new file mode 100644 index 000000000..2e1e4104a --- /dev/null +++ b/src/tr2/game/objects/effects/body_part.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void BodyPart_Setup(void); diff --git a/src/tr2/game/objects/effects/bubbles.c b/src/tr2/game/objects/effects/bubbles.c new file mode 100644 index 000000000..bbad8c53f --- /dev/null +++ b/src/tr2/game/objects/effects/bubbles.c @@ -0,0 +1,9 @@ +#include "game/objects/effects/bubbles.h" + +#include "global/funcs.h" + +void Bubbles_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_BUBBLES); + obj->control = Bubbles_Control; +} diff --git a/src/tr2/game/objects/effects/bubbles.h b/src/tr2/game/objects/effects/bubbles.h new file mode 100644 index 000000000..8e9f23032 --- /dev/null +++ b/src/tr2/game/objects/effects/bubbles.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void Bubbles_Setup(void); diff --git a/src/tr2/game/objects/effects/explosion.c b/src/tr2/game/objects/effects/explosion.c new file mode 100644 index 000000000..401aca58c --- /dev/null +++ b/src/tr2/game/objects/effects/explosion.c @@ -0,0 +1,10 @@ +#include "game/objects/effects/explosion.h" + +#include "global/funcs.h" + +void Explosion_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_EXPLOSION); + obj->control = Explosion_Control; + obj->semi_transparent = 1; +} diff --git a/src/tr2/game/objects/effects/explosion.h b/src/tr2/game/objects/effects/explosion.h new file mode 100644 index 000000000..9ab2b9a8e --- /dev/null +++ b/src/tr2/game/objects/effects/explosion.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void Explosion_Setup(void); diff --git a/src/tr2/game/objects/effects/glow.c b/src/tr2/game/objects/effects/glow.c new file mode 100644 index 000000000..7373d8584 --- /dev/null +++ b/src/tr2/game/objects/effects/glow.c @@ -0,0 +1,9 @@ +#include "game/objects/effects/glow.h" + +#include "global/funcs.h" + +void Glow_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_GLOW); + obj->control = Glow_Control; +} diff --git a/src/tr2/game/objects/effects/glow.h b/src/tr2/game/objects/effects/glow.h new file mode 100644 index 000000000..281ccf917 --- /dev/null +++ b/src/tr2/game/objects/effects/glow.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void Glow_Setup(void); diff --git a/src/tr2/game/objects/effects/gun_flash.c b/src/tr2/game/objects/effects/gun_flash.c new file mode 100644 index 000000000..d292edb95 --- /dev/null +++ b/src/tr2/game/objects/effects/gun_flash.c @@ -0,0 +1,9 @@ +#include "game/objects/effects/gun_flash.h" + +#include "global/funcs.h" + +void GunFlash_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_GUN_FLASH); + obj->control = GunFlash_Control; +} diff --git a/src/tr2/game/objects/effects/gun_flash.h b/src/tr2/game/objects/effects/gun_flash.h new file mode 100644 index 000000000..534d05acc --- /dev/null +++ b/src/tr2/game/objects/effects/gun_flash.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void GunFlash_Setup(void); diff --git a/src/tr2/game/objects/effects/missile_flame.c b/src/tr2/game/objects/effects/missile_flame.c new file mode 100644 index 000000000..3614090a6 --- /dev/null +++ b/src/tr2/game/objects/effects/missile_flame.c @@ -0,0 +1,10 @@ +#include "game/objects/effects/missile_flame.h" + +#include "global/funcs.h" + +void MissileFlame_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_MISSILE_FLAME); + obj->control = Missile_Control; + obj->semi_transparent = 1; +} diff --git a/src/tr2/game/objects/effects/missile_flame.h b/src/tr2/game/objects/effects/missile_flame.h new file mode 100644 index 000000000..43781b034 --- /dev/null +++ b/src/tr2/game/objects/effects/missile_flame.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void MissileFlame_Setup(void); diff --git a/src/tr2/game/objects/effects/missile_harpoon.c b/src/tr2/game/objects/effects/missile_harpoon.c new file mode 100644 index 000000000..19a4bbc2f --- /dev/null +++ b/src/tr2/game/objects/effects/missile_harpoon.c @@ -0,0 +1,10 @@ +#include "game/objects/effects/missile_harpoon.h" + +#include "global/funcs.h" + +void MissileHarpoon_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_MISSILE_HARPOON); + obj->control = Missile_Control; + obj->save_position = 1; +} diff --git a/src/tr2/game/objects/effects/missile_harpoon.h b/src/tr2/game/objects/effects/missile_harpoon.h new file mode 100644 index 000000000..fef5bf195 --- /dev/null +++ b/src/tr2/game/objects/effects/missile_harpoon.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void MissileHarpoon_Setup(void); diff --git a/src/tr2/game/objects/effects/missile_knife.c b/src/tr2/game/objects/effects/missile_knife.c new file mode 100644 index 000000000..55bbc2630 --- /dev/null +++ b/src/tr2/game/objects/effects/missile_knife.c @@ -0,0 +1,10 @@ +#include "game/objects/effects/missile_knife.h" + +#include "global/funcs.h" + +void MissileKnife_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_MISSILE_KNIFE); + obj->control = Missile_Control; + obj->save_position = 1; +} diff --git a/src/tr2/game/objects/effects/missile_knife.h b/src/tr2/game/objects/effects/missile_knife.h new file mode 100644 index 000000000..4d393760d --- /dev/null +++ b/src/tr2/game/objects/effects/missile_knife.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void MissileKnife_Setup(void); diff --git a/src/tr2/game/objects/effects/ricochet.c b/src/tr2/game/objects/effects/ricochet.c new file mode 100644 index 000000000..d5bd454f7 --- /dev/null +++ b/src/tr2/game/objects/effects/ricochet.c @@ -0,0 +1,9 @@ +#include "game/objects/effects/ricochet.h" + +#include "global/funcs.h" + +void Ricochet_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_RICOCHET); + obj->control = Richochet_Control; +} diff --git a/src/tr2/game/objects/effects/ricochet.h b/src/tr2/game/objects/effects/ricochet.h new file mode 100644 index 000000000..47a6ddad9 --- /dev/null +++ b/src/tr2/game/objects/effects/ricochet.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void Ricochet_Setup(void); diff --git a/src/tr2/game/objects/effects/snow_sprite.c b/src/tr2/game/objects/effects/snow_sprite.c new file mode 100644 index 000000000..788762173 --- /dev/null +++ b/src/tr2/game/objects/effects/snow_sprite.c @@ -0,0 +1,9 @@ +#include "game/objects/effects/snow_sprite.h" + +#include "global/funcs.h" + +void SnowSprite_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_SNOW_SPRITE); + obj->control = SnowSprite_Control; +} diff --git a/src/tr2/game/objects/effects/snow_sprite.h b/src/tr2/game/objects/effects/snow_sprite.h new file mode 100644 index 000000000..d5f965f24 --- /dev/null +++ b/src/tr2/game/objects/effects/snow_sprite.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void SnowSprite_Setup(void); diff --git a/src/tr2/game/objects/effects/splash.c b/src/tr2/game/objects/effects/splash.c new file mode 100644 index 000000000..9cd933c36 --- /dev/null +++ b/src/tr2/game/objects/effects/splash.c @@ -0,0 +1,10 @@ +#include "game/objects/effects/splash.h" + +#include "global/funcs.h" + +void Splash_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_SPLASH); + obj->control = Splash_Control; + obj->semi_transparent = 1; +} diff --git a/src/tr2/game/objects/effects/splash.h b/src/tr2/game/objects/effects/splash.h new file mode 100644 index 000000000..ab051aabd --- /dev/null +++ b/src/tr2/game/objects/effects/splash.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void Splash_Setup(void); diff --git a/src/tr2/game/objects/effects/twinkle.c b/src/tr2/game/objects/effects/twinkle.c index bf33031d7..e104dabd7 100644 --- a/src/tr2/game/objects/effects/twinkle.c +++ b/src/tr2/game/objects/effects/twinkle.c @@ -44,6 +44,12 @@ static bool M_ShouldDisappear( return dx < DISAPPEAR_RANGE && dy < DISAPPEAR_RANGE && dz < DISAPPEAR_RANGE; } +void Twinkle_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_TWINKLE); + obj->control = Twinkle_Control; +} + void __cdecl Twinkle_Control(const int16_t fx_num) { FX *const fx = &g_Effects[fx_num]; diff --git a/src/tr2/game/objects/effects/twinkle.h b/src/tr2/game/objects/effects/twinkle.h index 72c0b2445..9c3a5a301 100644 --- a/src/tr2/game/objects/effects/twinkle.h +++ b/src/tr2/game/objects/effects/twinkle.h @@ -2,4 +2,6 @@ #include +void Twinkle_Setup(void); + void __cdecl Twinkle_Control(int16_t fx_num); diff --git a/src/tr2/game/objects/effects/water_sprite.c b/src/tr2/game/objects/effects/water_sprite.c new file mode 100644 index 000000000..7c75efeb7 --- /dev/null +++ b/src/tr2/game/objects/effects/water_sprite.c @@ -0,0 +1,10 @@ +#include "game/objects/effects/water_sprite.h" + +#include "global/funcs.h" + +void WaterSprite_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_WATER_SPRITE); + obj->control = WaterSprite_Control; + obj->semi_transparent = 1; +} diff --git a/src/tr2/game/objects/effects/water_sprite.h b/src/tr2/game/objects/effects/water_sprite.h new file mode 100644 index 000000000..48823bce2 --- /dev/null +++ b/src/tr2/game/objects/effects/water_sprite.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void WaterSprite_Setup(void); diff --git a/src/tr2/game/objects/effects/waterfall.c b/src/tr2/game/objects/effects/waterfall.c new file mode 100644 index 000000000..df6862529 --- /dev/null +++ b/src/tr2/game/objects/effects/waterfall.c @@ -0,0 +1,11 @@ +#include "game/objects/effects/waterfall.h" + +#include "game/objects/common.h" +#include "global/funcs.h" + +void Waterfall_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_WATERFALL); + obj->control = Waterfall_Control; + obj->draw_routine = Object_DrawDummyItem; +} diff --git a/src/tr2/game/objects/effects/waterfall.h b/src/tr2/game/objects/effects/waterfall.h new file mode 100644 index 000000000..f81f2869a --- /dev/null +++ b/src/tr2/game/objects/effects/waterfall.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void Waterfall_Setup(void); diff --git a/src/tr2/game/objects/general/alarm_sound.c b/src/tr2/game/objects/general/alarm_sound.c new file mode 100644 index 000000000..48c5678ce --- /dev/null +++ b/src/tr2/game/objects/general/alarm_sound.c @@ -0,0 +1,10 @@ +#include "game/objects/general/alarm_sound.h" + +#include "global/funcs.h" + +void AlarmSound_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_ALARM_SOUND); + obj->control = AlarmSound_Control; + obj->save_flags = 1; +} diff --git a/src/tr2/game/objects/general/alarm_sound.h b/src/tr2/game/objects/general/alarm_sound.h new file mode 100644 index 000000000..7ddd3655c --- /dev/null +++ b/src/tr2/game/objects/general/alarm_sound.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void AlarmSound_Setup(void); diff --git a/src/tr2/game/objects/general/bell.c b/src/tr2/game/objects/general/bell.c new file mode 100644 index 000000000..9d42081e0 --- /dev/null +++ b/src/tr2/game/objects/general/bell.c @@ -0,0 +1,13 @@ +#include "game/objects/general/bell.h" + +#include "game/objects/common.h" +#include "global/funcs.h" + +void Bell_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_BELL); + obj->control = Bell_Control; + obj->collision = Object_Collision; + obj->save_flags = 1; + obj->save_anim = 1; +} diff --git a/src/tr2/game/objects/general/bell.h b/src/tr2/game/objects/general/bell.h new file mode 100644 index 000000000..0237685da --- /dev/null +++ b/src/tr2/game/objects/general/bell.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void Bell_Setup(void); diff --git a/src/tr2/game/objects/general/big_bowl.c b/src/tr2/game/objects/general/big_bowl.c new file mode 100644 index 000000000..198d831de --- /dev/null +++ b/src/tr2/game/objects/general/big_bowl.c @@ -0,0 +1,11 @@ +#include "game/objects/general/big_bowl.h" + +#include "global/funcs.h" + +void BigBowl_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_BIG_BOWL); + obj->control = BigBowl_Control; + obj->save_flags = 1; + obj->save_anim = 1; +} diff --git a/src/tr2/game/objects/general/big_bowl.h b/src/tr2/game/objects/general/big_bowl.h new file mode 100644 index 000000000..51ee1bd00 --- /dev/null +++ b/src/tr2/game/objects/general/big_bowl.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void BigBowl_Setup(void); diff --git a/src/tr2/game/objects/general/bird_tweeter.c b/src/tr2/game/objects/general/bird_tweeter.c new file mode 100644 index 000000000..3af140ffb --- /dev/null +++ b/src/tr2/game/objects/general/bird_tweeter.c @@ -0,0 +1,10 @@ +#include "game/objects/general/bird_tweeter.h" + +#include "game/objects/common.h" +#include "global/funcs.h" + +void BirdTweeter_Setup(OBJECT *const obj) +{ + obj->control = BirdTweeter_Control; + obj->draw_routine = Object_DrawDummyItem; +} diff --git a/src/tr2/game/objects/general/bird_tweeter.h b/src/tr2/game/objects/general/bird_tweeter.h new file mode 100644 index 000000000..0eaedaca6 --- /dev/null +++ b/src/tr2/game/objects/general/bird_tweeter.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void BirdTweeter_Setup(OBJECT *obj); diff --git a/src/tr2/game/objects/general/bridge_flat.c b/src/tr2/game/objects/general/bridge_flat.c index 29f9d91b4..160eb420c 100644 --- a/src/tr2/game/objects/general/bridge_flat.c +++ b/src/tr2/game/objects/general/bridge_flat.c @@ -1,5 +1,12 @@ #include "game/objects/general/bridge_flat.h" +void BridgeFlat_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_BRIDGE_FLAT); + obj->ceiling = BridgeFlat_Ceiling; + obj->floor = BridgeFlat_Floor; +} + void __cdecl BridgeFlat_Floor( const ITEM *const item, const int32_t x, const int32_t y, const int32_t z, int32_t *const out_height) diff --git a/src/tr2/game/objects/general/bridge_flat.h b/src/tr2/game/objects/general/bridge_flat.h index 6d3db9cb1..b5be5f333 100644 --- a/src/tr2/game/objects/general/bridge_flat.h +++ b/src/tr2/game/objects/general/bridge_flat.h @@ -2,6 +2,8 @@ #include "global/types.h" +void BridgeFlat_Setup(void); + void __cdecl BridgeFlat_Floor( const ITEM *item, int32_t x, int32_t y, int32_t z, int32_t *out_height); diff --git a/src/tr2/game/objects/general/bridge_tilt_1.c b/src/tr2/game/objects/general/bridge_tilt_1.c index 8e3bbfc2d..50b5aa044 100644 --- a/src/tr2/game/objects/general/bridge_tilt_1.c +++ b/src/tr2/game/objects/general/bridge_tilt_1.c @@ -2,6 +2,13 @@ #include "game/objects/general/bridge_common.h" +void BridgeTilt1_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_BRIDGE_TILT_1); + obj->ceiling = BridgeTilt1_Ceiling; + obj->floor = BridgeTilt1_Floor; +} + void __cdecl BridgeTilt1_Floor( const ITEM *const item, const int32_t x, const int32_t y, const int32_t z, int32_t *const out_height) diff --git a/src/tr2/game/objects/general/bridge_tilt_1.h b/src/tr2/game/objects/general/bridge_tilt_1.h index 1a5252a45..648b764df 100644 --- a/src/tr2/game/objects/general/bridge_tilt_1.h +++ b/src/tr2/game/objects/general/bridge_tilt_1.h @@ -2,6 +2,8 @@ #include "global/types.h" +void BridgeTilt1_Setup(void); + void __cdecl BridgeTilt1_Floor( const ITEM *item, int32_t x, int32_t y, int32_t z, int32_t *out_height); diff --git a/src/tr2/game/objects/general/bridge_tilt_2.c b/src/tr2/game/objects/general/bridge_tilt_2.c index d4a9b4e89..bb9fce52e 100644 --- a/src/tr2/game/objects/general/bridge_tilt_2.c +++ b/src/tr2/game/objects/general/bridge_tilt_2.c @@ -2,6 +2,13 @@ #include "game/objects/general/bridge_common.h" +void BridgeTilt2_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_BRIDGE_TILT_2); + obj->ceiling = BridgeTilt2_Ceiling; + obj->floor = BridgeTilt2_Floor; +} + void __cdecl BridgeTilt2_Floor( const ITEM *const item, const int32_t x, const int32_t y, const int32_t z, int32_t *const out_height) diff --git a/src/tr2/game/objects/general/bridge_tilt_2.h b/src/tr2/game/objects/general/bridge_tilt_2.h index 69b73912a..cf60665c9 100644 --- a/src/tr2/game/objects/general/bridge_tilt_2.h +++ b/src/tr2/game/objects/general/bridge_tilt_2.h @@ -2,6 +2,8 @@ #include "global/types.h" +void BridgeTilt2_Setup(void); + void __cdecl BridgeTilt2_Floor( const ITEM *item, int32_t x, int32_t y, int32_t z, int32_t *out_height); diff --git a/src/tr2/game/objects/general/camera_target.c b/src/tr2/game/objects/general/camera_target.c new file mode 100644 index 000000000..3d49d4a18 --- /dev/null +++ b/src/tr2/game/objects/general/camera_target.c @@ -0,0 +1,9 @@ +#include "game/objects/general/camera_target.h" + +#include "game/objects/common.h" + +void CameraTarget_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_CAMERA_TARGET); + obj->draw_routine = Object_DrawDummyItem; +} diff --git a/src/tr2/game/objects/general/camera_target.h b/src/tr2/game/objects/general/camera_target.h new file mode 100644 index 000000000..54d7bde65 --- /dev/null +++ b/src/tr2/game/objects/general/camera_target.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void CameraTarget_Setup(void); diff --git a/src/tr2/game/objects/general/clock_chimes.c b/src/tr2/game/objects/general/clock_chimes.c new file mode 100644 index 000000000..9870fad4f --- /dev/null +++ b/src/tr2/game/objects/general/clock_chimes.c @@ -0,0 +1,12 @@ +#include "game/objects/general/clock_chimes.h" + +#include "game/objects/common.h" +#include "global/funcs.h" + +void ClockChimes_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_CLOCK_CHIMES); + obj->control = ClockChimes_Control; + obj->draw_routine = Object_DrawDummyItem; + obj->save_flags = 1; +} diff --git a/src/tr2/game/objects/general/clock_chimes.h b/src/tr2/game/objects/general/clock_chimes.h new file mode 100644 index 000000000..515dc0175 --- /dev/null +++ b/src/tr2/game/objects/general/clock_chimes.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void ClockChimes_Setup(void); diff --git a/src/tr2/game/objects/general/cutscene_player.c b/src/tr2/game/objects/general/cutscene_player.c new file mode 100644 index 000000000..00778009f --- /dev/null +++ b/src/tr2/game/objects/general/cutscene_player.c @@ -0,0 +1,10 @@ +#include "game/objects/general/cutscene_player.h" + +#include "decomp/decomp.h" + +void CutscenePlayer_Setup(OBJECT *const obj) +{ + obj->initialise = CutscenePlayerGen_Initialise; + obj->control = CutscenePlayer_Control; + obj->hit_points = 1; +} diff --git a/src/tr2/game/objects/general/cutscene_player.h b/src/tr2/game/objects/general/cutscene_player.h new file mode 100644 index 000000000..b76189e37 --- /dev/null +++ b/src/tr2/game/objects/general/cutscene_player.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void CutscenePlayer_Setup(OBJECT *obj); diff --git a/src/tr2/game/objects/general/detonator.c b/src/tr2/game/objects/general/detonator.c index 26250edd8..b9d1c0984 100644 --- a/src/tr2/game/objects/general/detonator.c +++ b/src/tr2/game/objects/general/detonator.c @@ -34,6 +34,21 @@ static void M_CreateGongBonger(ITEM *const lara_item) item_gong_bonger->status = IS_ACTIVE; } +void Detonator1_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_DETONATOR_1); + obj->collision = Detonator_Collision; +} + +void Detonator2_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_DETONATOR_2); + obj->collision = Detonator_Collision; + obj->control = Detonator_Control; + obj->save_flags = 1; + obj->save_anim = 1; +} + void __cdecl Detonator_Control(const int16_t item_num) { ITEM *const item = Item_Get(item_num); diff --git a/src/tr2/game/objects/general/detonator.h b/src/tr2/game/objects/general/detonator.h index caa89aec2..44fef0cdd 100644 --- a/src/tr2/game/objects/general/detonator.h +++ b/src/tr2/game/objects/general/detonator.h @@ -2,6 +2,9 @@ #include "global/types.h" +void Detonator1_Setup(void); +void Detonator2_Setup(void); + void __cdecl Detonator_Control(int16_t item_num); void __cdecl Detonator_Collision( diff --git a/src/tr2/game/objects/general/ding_dong.c b/src/tr2/game/objects/general/ding_dong.c new file mode 100644 index 000000000..df3fcb74b --- /dev/null +++ b/src/tr2/game/objects/general/ding_dong.c @@ -0,0 +1,11 @@ +#include "game/objects/general/ding_dong.h" + +#include "game/objects/common.h" +#include "global/funcs.h" + +void DingDong_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_DING_DONG); + obj->control = DingDong_Control; + obj->draw_routine = Object_DrawDummyItem; +} diff --git a/src/tr2/game/objects/general/ding_dong.h b/src/tr2/game/objects/general/ding_dong.h new file mode 100644 index 000000000..5951cda40 --- /dev/null +++ b/src/tr2/game/objects/general/ding_dong.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void DingDong_Setup(void); diff --git a/src/tr2/game/objects/general/door.c b/src/tr2/game/objects/general/door.c index 77b7b91bb..312b054fa 100644 --- a/src/tr2/game/objects/general/door.c +++ b/src/tr2/game/objects/general/door.c @@ -89,6 +89,16 @@ void __cdecl Door_Open(DOORPOS_DATA *const d) } } +void Door_Setup(OBJECT *const obj) +{ + obj->initialise = Door_Initialise; + obj->control = Door_Control; + obj->draw_routine = Object_DrawUnclippedItem; + obj->collision = Door_Collision; + obj->save_flags = 1; + obj->save_anim = 1; +} + void __cdecl Door_Initialise(const int16_t item_num) { ITEM *const item = Item_Get(item_num); diff --git a/src/tr2/game/objects/general/door.h b/src/tr2/game/objects/general/door.h index 9b91f1d1f..e5c7eeb4e 100644 --- a/src/tr2/game/objects/general/door.h +++ b/src/tr2/game/objects/general/door.h @@ -10,6 +10,8 @@ typedef enum { void __cdecl Door_Shut(DOORPOS_DATA *d); void __cdecl Door_Open(DOORPOS_DATA *d); +void Door_Setup(OBJECT *obj); + void __cdecl Door_Initialise(int16_t item_num); void __cdecl Door_Control(int16_t item_num); void __cdecl Door_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll); diff --git a/src/tr2/game/objects/general/drawbridge.c b/src/tr2/game/objects/general/drawbridge.c index b49b6aca7..fd5c967cc 100644 --- a/src/tr2/game/objects/general/drawbridge.c +++ b/src/tr2/game/objects/general/drawbridge.c @@ -1,12 +1,27 @@ #include "game/objects/general/drawbridge.h" #include "game/objects/general/door.h" +#include "global/funcs.h" typedef enum { DRAWBRIDGE_STATE_CLOSED = DOOR_STATE_CLOSED, DRAWBRIDGE_STATE_OPEN = DOOR_STATE_OPEN, } DRAWBRIDGE_STATE; +void Drawbridge_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_DRAWBRIDGE); + if (!obj->loaded) { + return; + } + obj->control = GeneralControl; + obj->collision = Drawbridge_Collision; + obj->ceiling = Drawbridge_Ceiling; + obj->floor = Drawbridge_Floor; + obj->save_flags = 1; + obj->save_anim = 1; +} + int32_t __cdecl Drawbridge_IsItemOnTop( const ITEM *const item, const int32_t z, const int32_t x) { diff --git a/src/tr2/game/objects/general/drawbridge.h b/src/tr2/game/objects/general/drawbridge.h index ee711f1c9..16bfb2078 100644 --- a/src/tr2/game/objects/general/drawbridge.h +++ b/src/tr2/game/objects/general/drawbridge.h @@ -2,6 +2,8 @@ #include "global/types.h" +void Drawbridge_Setup(void); + int32_t __cdecl Drawbridge_IsItemOnTop(const ITEM *item, int32_t z, int32_t x); void __cdecl Drawbridge_Floor( diff --git a/src/tr2/game/objects/general/earthquake.c b/src/tr2/game/objects/general/earthquake.c new file mode 100644 index 000000000..33173d4fa --- /dev/null +++ b/src/tr2/game/objects/general/earthquake.c @@ -0,0 +1,12 @@ +#include "game/objects/general/earthquake.h" + +#include "game/objects/common.h" +#include "global/funcs.h" + +void Earthquake_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_EARTHQUAKE); + obj->control = Earthquake_Control; + obj->draw_routine = Object_DrawDummyItem; + obj->save_flags = 1; +} diff --git a/src/tr2/game/objects/general/earthquake.h b/src/tr2/game/objects/general/earthquake.h new file mode 100644 index 000000000..dcc64289c --- /dev/null +++ b/src/tr2/game/objects/general/earthquake.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void Earthquake_Setup(void); diff --git a/src/tr2/game/objects/general/final_cutscene.c b/src/tr2/game/objects/general/final_cutscene.c new file mode 100644 index 000000000..6385ab7c7 --- /dev/null +++ b/src/tr2/game/objects/general/final_cutscene.c @@ -0,0 +1,11 @@ +#include "game/objects/general/final_cutscene.h" + +#include "global/funcs.h" + +void FinalCutscene_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_CUT_SHOTGUN); + obj->control = FinalCutscene_Control; + obj->save_flags = 1; + obj->save_anim = 1; +} diff --git a/src/tr2/game/objects/general/final_cutscene.h b/src/tr2/game/objects/general/final_cutscene.h new file mode 100644 index 000000000..4d49abd44 --- /dev/null +++ b/src/tr2/game/objects/general/final_cutscene.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void FinalCutscene_Setup(void); diff --git a/src/tr2/game/objects/general/final_level_counter.c b/src/tr2/game/objects/general/final_level_counter.c index 118f68eb1..75d2321b6 100644 --- a/src/tr2/game/objects/general/final_level_counter.c +++ b/src/tr2/game/objects/general/final_level_counter.c @@ -4,6 +4,7 @@ #include "game/items.h" #include "game/los.h" #include "game/lot.h" +#include "game/objects/common.h" #include "global/vars.h" #include @@ -73,6 +74,14 @@ static void __cdecl M_PrepareCutscene(const int16_t item_num) g_CinePos.rot = item->rot; } +void FinalLevelCounter_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_FINAL_LEVEL_COUNTER); + obj->control = FinalLevelCounter_Control; + obj->draw_routine = Object_DrawDummyItem; + obj->save_flags = 1; +} + void __cdecl FinalLevelCounter_Control(const int16_t item_num) { if (g_SaveGame.statistics.kills == g_FinalLevelCount diff --git a/src/tr2/game/objects/general/final_level_counter.h b/src/tr2/game/objects/general/final_level_counter.h index f47b73df4..c0123e9a6 100644 --- a/src/tr2/game/objects/general/final_level_counter.h +++ b/src/tr2/game/objects/general/final_level_counter.h @@ -2,4 +2,6 @@ #include +void FinalLevelCounter_Setup(void); + void FinalLevelCounter_Control(int16_t item_num); diff --git a/src/tr2/game/objects/general/flare_item.c b/src/tr2/game/objects/general/flare_item.c new file mode 100644 index 000000000..9007020ee --- /dev/null +++ b/src/tr2/game/objects/general/flare_item.c @@ -0,0 +1,14 @@ +#include "game/objects/general/flare_item.h" + +#include "game/objects/general/pickup.h" +#include "global/funcs.h" + +void FlareItem_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_FLARE_ITEM); + obj->collision = Pickup_Collision; + obj->control = Flare_Control; + obj->draw_routine = Flare_DrawInAir; + obj->save_position = 1; + obj->save_flags = 1; +} diff --git a/src/tr2/game/objects/general/flare_item.h b/src/tr2/game/objects/general/flare_item.h new file mode 100644 index 000000000..1ecd45483 --- /dev/null +++ b/src/tr2/game/objects/general/flare_item.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void FlareItem_Setup(void); diff --git a/src/tr2/game/objects/general/gong_bonger.c b/src/tr2/game/objects/general/gong_bonger.c index e397b808b..ae599d112 100644 --- a/src/tr2/game/objects/general/gong_bonger.c +++ b/src/tr2/game/objects/general/gong_bonger.c @@ -18,6 +18,14 @@ static void M_ActivateHeavyTriggers(const int16_t item_num) Item_Kill(item_num); } +void GongBonger_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_GONG_BONGER); + obj->control = GongBonger_Control; + obj->save_flags = 1; + obj->save_anim = 1; +} + void __cdecl GongBonger_Control(const int16_t item_num) { ITEM *const item = Item_Get(item_num); diff --git a/src/tr2/game/objects/general/gong_bonger.h b/src/tr2/game/objects/general/gong_bonger.h index 36e3c223c..cefa558e2 100644 --- a/src/tr2/game/objects/general/gong_bonger.h +++ b/src/tr2/game/objects/general/gong_bonger.h @@ -2,4 +2,6 @@ #include "global/types.h" +void GongBonger_Setup(void); + void __cdecl GongBonger_Control(int16_t item_num); diff --git a/src/tr2/game/objects/general/grenade.c b/src/tr2/game/objects/general/grenade.c index 8ff83a2e3..b9771a5f2 100644 --- a/src/tr2/game/objects/general/grenade.c +++ b/src/tr2/game/objects/general/grenade.c @@ -32,6 +32,13 @@ static void M_Explode(int16_t grenade_item_num, const XYZ_32 pos) Item_Kill(grenade_item_num); } +void Grenade_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_GRENADE); + obj->control = Grenade_Control; + obj->save_position = 1; +} + void __cdecl Grenade_Control(int16_t item_num) { ITEM *const item = Item_Get(item_num); diff --git a/src/tr2/game/objects/general/grenade.h b/src/tr2/game/objects/general/grenade.h index e281f38fc..2a1b883dc 100644 --- a/src/tr2/game/objects/general/grenade.h +++ b/src/tr2/game/objects/general/grenade.h @@ -2,4 +2,6 @@ #include "global/types.h" +void Grenade_Setup(void); + void __cdecl Grenade_Control(int16_t item_num); diff --git a/src/tr2/game/objects/general/harpoon_bolt.c b/src/tr2/game/objects/general/harpoon_bolt.c index ad54bd624..bb906d533 100644 --- a/src/tr2/game/objects/general/harpoon_bolt.c +++ b/src/tr2/game/objects/general/harpoon_bolt.c @@ -7,6 +7,13 @@ #include "global/funcs.h" #include "global/vars.h" +void HarpoonBolt_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_HARPOON_BOLT); + obj->control = HarpoonBolt_Control; + obj->save_position = 1; +} + void __cdecl HarpoonBolt_Control(const int16_t item_num) { ITEM *const item = Item_Get(item_num); diff --git a/src/tr2/game/objects/general/harpoon_bolt.h b/src/tr2/game/objects/general/harpoon_bolt.h index 6a5c2b162..17ab15703 100644 --- a/src/tr2/game/objects/general/harpoon_bolt.h +++ b/src/tr2/game/objects/general/harpoon_bolt.h @@ -2,4 +2,5 @@ #include "global/types.h" +void HarpoonBolt_Setup(void); void __cdecl HarpoonBolt_Control(int16_t item_num); diff --git a/src/tr2/game/objects/general/hot_liquid.c b/src/tr2/game/objects/general/hot_liquid.c new file mode 100644 index 000000000..16e09bd16 --- /dev/null +++ b/src/tr2/game/objects/general/hot_liquid.c @@ -0,0 +1,10 @@ +#include "game/objects/general/hot_liquid.h" + +#include "global/funcs.h" + +void HotLiquid_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_HOT_LIQUID); + obj->control = HotLiquid_Control; + obj->semi_transparent = 1; +} diff --git a/src/tr2/game/objects/general/hot_liquid.h b/src/tr2/game/objects/general/hot_liquid.h new file mode 100644 index 000000000..bb97646d1 --- /dev/null +++ b/src/tr2/game/objects/general/hot_liquid.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void HotLiquid_Setup(void); diff --git a/src/tr2/game/objects/general/keyhole.c b/src/tr2/game/objects/general/keyhole.c index 94b500b82..4c19a1f28 100644 --- a/src/tr2/game/objects/general/keyhole.c +++ b/src/tr2/game/objects/general/keyhole.c @@ -42,6 +42,12 @@ static void M_Consume( g_InteractPosition = lara_item->pos; } +void Keyhole_Setup(OBJECT *const obj) +{ + obj->collision = Keyhole_Collision; + obj->save_flags = 1; +} + void __cdecl Keyhole_Collision( const int16_t item_num, ITEM *const lara_item, COLL_INFO *const coll) { diff --git a/src/tr2/game/objects/general/keyhole.h b/src/tr2/game/objects/general/keyhole.h index d289914b1..178d4cb70 100644 --- a/src/tr2/game/objects/general/keyhole.h +++ b/src/tr2/game/objects/general/keyhole.h @@ -2,6 +2,8 @@ #include "global/types.h" +void Keyhole_Setup(OBJECT *obj); + void __cdecl Keyhole_Collision( int16_t item_num, ITEM *lara_item, COLL_INFO *coll); diff --git a/src/tr2/game/objects/general/lara_alarm.c b/src/tr2/game/objects/general/lara_alarm.c new file mode 100644 index 000000000..ff69721e8 --- /dev/null +++ b/src/tr2/game/objects/general/lara_alarm.c @@ -0,0 +1,12 @@ +#include "game/objects/general/lara_alarm.h" + +#include "game/objects/common.h" +#include "global/funcs.h" + +void LaraAlarm_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_LARA_ALARM); + obj->control = LaraAlarm_Control; + obj->draw_routine = Object_DrawDummyItem; + obj->save_flags = 1; +} diff --git a/src/tr2/game/objects/general/lara_alarm.h b/src/tr2/game/objects/general/lara_alarm.h new file mode 100644 index 000000000..577bdc983 --- /dev/null +++ b/src/tr2/game/objects/general/lara_alarm.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void LaraAlarm_Setup(void); diff --git a/src/tr2/game/objects/general/lift.c b/src/tr2/game/objects/general/lift.c index a0aff0f1d..462f9a8e8 100644 --- a/src/tr2/game/objects/general/lift.c +++ b/src/tr2/game/objects/general/lift.c @@ -15,6 +15,18 @@ typedef enum { LIFT_STATE_DOOR_OPEN = 1, } LIFT_STATE; +void Lift_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_LIFT); + obj->initialise = Lift_Initialise; + obj->control = Lift_Control; + obj->ceiling = Lift_Ceiling; + obj->floor = Lift_Floor; + obj->save_position = 1; + obj->save_flags = 1; + obj->save_anim = 1; +} + void __cdecl Lift_Initialise(const int16_t item_num) { ITEM *const item = Item_Get(item_num); diff --git a/src/tr2/game/objects/general/lift.h b/src/tr2/game/objects/general/lift.h index 9856a2586..290d85e36 100644 --- a/src/tr2/game/objects/general/lift.h +++ b/src/tr2/game/objects/general/lift.h @@ -7,6 +7,7 @@ typedef struct __PACKING { int32_t wait_time; } LIFT_INFO; +void Lift_Setup(void); void __cdecl Lift_Initialise(int16_t item_num); void __cdecl Lift_Control(int16_t item_num); void __cdecl Lift_FloorCeiling( diff --git a/src/tr2/game/objects/general/pickup.c b/src/tr2/game/objects/general/pickup.c index b01df6acf..a52fc2287 100644 --- a/src/tr2/game/objects/general/pickup.c +++ b/src/tr2/game/objects/general/pickup.c @@ -174,6 +174,16 @@ static void M_DoUnderwater(const int16_t item_num, ITEM *const lara_item) item->rot = old_rot; } +void Pickup_Setup(OBJECT *const obj) +{ + // TODO: change this to Pickup_Collision after we decompile + // both comparisons in ExtractSaveGameInfo() and GetCarriedItems() + obj->collision = (void *)0x00437E70; + obj->draw_routine = Object_DrawSpriteItem; + obj->save_position = 1; + obj->save_flags = 1; +} + void __cdecl Pickup_Collision( const int16_t item_num, ITEM *const lara_item, COLL_INFO *const coll) { diff --git a/src/tr2/game/objects/general/pickup.h b/src/tr2/game/objects/general/pickup.h index b52472b38..0719c7f7b 100644 --- a/src/tr2/game/objects/general/pickup.h +++ b/src/tr2/game/objects/general/pickup.h @@ -2,6 +2,8 @@ #include "global/types.h" +void Pickup_Setup(OBJECT *obj); + void __cdecl Pickup_Collision( int16_t item_num, ITEM *lara_item, COLL_INFO *coll); diff --git a/src/tr2/game/objects/general/puzzle_hole.c b/src/tr2/game/objects/general/puzzle_hole.c index a05900f4c..f229bc4ea 100644 --- a/src/tr2/game/objects/general/puzzle_hole.c +++ b/src/tr2/game/objects/general/puzzle_hole.c @@ -52,6 +52,16 @@ static void M_MarkDone(ITEM *const puzzle_hole_item) } } +void PuzzleHole_Setup(OBJECT *const obj, const bool done) +{ + if (!done) { + // TODO: change this to PuzzleHole_Collision after we decompile + // the comparison in ExtractSaveGameInfo() + obj->collision = (void *)0x00438A80; + } + obj->save_flags = 1; +} + void __cdecl PuzzleHole_Collision( const int16_t item_num, ITEM *const lara_item, COLL_INFO *const coll) { diff --git a/src/tr2/game/objects/general/puzzle_hole.h b/src/tr2/game/objects/general/puzzle_hole.h index 5cc323406..53a43a58c 100644 --- a/src/tr2/game/objects/general/puzzle_hole.h +++ b/src/tr2/game/objects/general/puzzle_hole.h @@ -2,5 +2,7 @@ #include "global/types.h" +void PuzzleHole_Setup(OBJECT *obj, bool done); + void __cdecl PuzzleHole_Collision( int16_t item_num, ITEM *lara_item, COLL_INFO *coll); diff --git a/src/tr2/game/objects/general/secret.c b/src/tr2/game/objects/general/secret.c new file mode 100644 index 000000000..9ed5fdab8 --- /dev/null +++ b/src/tr2/game/objects/general/secret.c @@ -0,0 +1,13 @@ +#include "game/objects/general/secret.h" + +#include "game/objects/common.h" +#include "game/objects/general/pickup.h" +#include "global/funcs.h" + +void Secret2_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_SECRET_2); + Pickup_Setup(obj); + // TODO: why is it so special? + obj->control = Secret_Control; +} diff --git a/src/tr2/game/objects/general/secret.h b/src/tr2/game/objects/general/secret.h new file mode 100644 index 000000000..2fedb580f --- /dev/null +++ b/src/tr2/game/objects/general/secret.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void Secret2_Setup(void); diff --git a/src/tr2/game/objects/general/sphere_of_doom.c b/src/tr2/game/objects/general/sphere_of_doom.c new file mode 100644 index 000000000..8a736fb08 --- /dev/null +++ b/src/tr2/game/objects/general/sphere_of_doom.c @@ -0,0 +1,15 @@ +#include "game/objects/general/sphere_of_doom.h" + +#include "global/funcs.h" + +void SphereOfDoom_Setup(OBJECT *const obj, const bool transparent) +{ + obj->collision = SphereOfDoom_Collision; + obj->control = SphereOfDoom_Control; + obj->draw_routine = SphereOfDoom_Draw; + obj->save_position = 1; + obj->save_flags = 1; + if (transparent) { + obj->semi_transparent = 1; + } +} diff --git a/src/tr2/game/objects/general/sphere_of_doom.h b/src/tr2/game/objects/general/sphere_of_doom.h new file mode 100644 index 000000000..a414ec26c --- /dev/null +++ b/src/tr2/game/objects/general/sphere_of_doom.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void SphereOfDoom_Setup(OBJECT *obj, bool transparent); diff --git a/src/tr2/game/objects/general/switch.c b/src/tr2/game/objects/general/switch.c index e715512cf..811e528c7 100644 --- a/src/tr2/game/objects/general/switch.c +++ b/src/tr2/game/objects/general/switch.c @@ -86,6 +86,14 @@ static void M_SwitchOff(ITEM *const switch_item, ITEM *const lara_item) switch_item->goal_anim_state = SWITCH_STATE_ON; } +void Switch_Setup(OBJECT *const obj, const bool underwater) +{ + obj->control = Switch_Control; + obj->collision = underwater ? Switch_CollisionUW : Switch_Collision; + obj->save_flags = 1; + obj->save_anim = 1; +} + void __cdecl Switch_Collision( const int16_t item_num, ITEM *const lara_item, COLL_INFO *const coll) { diff --git a/src/tr2/game/objects/general/switch.h b/src/tr2/game/objects/general/switch.h index 71e238a51..02d6fd524 100644 --- a/src/tr2/game/objects/general/switch.h +++ b/src/tr2/game/objects/general/switch.h @@ -2,6 +2,8 @@ #include "global/types.h" +void Switch_Setup(OBJECT *obj, bool underwater); + void __cdecl Switch_Collision( int16_t item_num, ITEM *lara_item, COLL_INFO *coll); diff --git a/src/tr2/game/objects/general/trapdoor.c b/src/tr2/game/objects/general/trapdoor.c index 1fa4ca559..1e42c3a54 100644 --- a/src/tr2/game/objects/general/trapdoor.c +++ b/src/tr2/game/objects/general/trapdoor.c @@ -7,6 +7,15 @@ typedef enum { TRAPDOOR_STATE_OPEN, } TRAPDOOR_STATE; +void Trapdoor_Setup(OBJECT *const obj) +{ + obj->control = Trapdoor_Control; + obj->ceiling = Trapdoor_Ceiling; + obj->floor = Trapdoor_Floor; + obj->save_flags = 1; + obj->save_anim = 1; +} + int32_t __cdecl Trapdoor_IsItemOnTop( const ITEM *const item, const int32_t x, const int32_t z) { diff --git a/src/tr2/game/objects/general/trapdoor.h b/src/tr2/game/objects/general/trapdoor.h index 59fed84a1..36dfcf65a 100644 --- a/src/tr2/game/objects/general/trapdoor.h +++ b/src/tr2/game/objects/general/trapdoor.h @@ -4,6 +4,8 @@ int32_t __cdecl Trapdoor_IsItemOnTop(const ITEM *item, int32_t x, int32_t z); +void Trapdoor_Setup(OBJECT *obj); + void __cdecl Trapdoor_Floor( const ITEM *item, int32_t x, int32_t y, int32_t z, int32_t *out_height); void __cdecl Trapdoor_Ceiling( diff --git a/src/tr2/game/objects/general/window.c b/src/tr2/game/objects/general/window.c new file mode 100644 index 000000000..c9df714f5 --- /dev/null +++ b/src/tr2/game/objects/general/window.c @@ -0,0 +1,24 @@ +#include "game/objects/general/window.h" + +#include "game/objects/common.h" +#include "global/funcs.h" + +void Window1_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_WINDOW_1); + obj->initialise = Window_Initialise; + obj->collision = Object_Collision; + obj->control = Window_Control; + obj->save_flags = 1; + obj->save_anim = 1; +} + +void Window2_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_WINDOW_2); + obj->initialise = Window_Initialise; + obj->collision = Object_Collision; + obj->control = SmashIce_Control; + obj->save_flags = 1; + obj->save_anim = 1; +} diff --git a/src/tr2/game/objects/general/window.h b/src/tr2/game/objects/general/window.h new file mode 100644 index 000000000..2fb7c0d37 --- /dev/null +++ b/src/tr2/game/objects/general/window.h @@ -0,0 +1,7 @@ +#pragma once + +#include "global/types.h" + +void Window1_Setup(void); + +void Window2_Setup(void); diff --git a/src/tr2/game/objects/setup.c b/src/tr2/game/objects/setup.c index e293ca6ac..264ce5741 100644 --- a/src/tr2/game/objects/setup.c +++ b/src/tr2/game/objects/setup.c @@ -27,7 +27,56 @@ #include "game/objects/creatures/xian_knight.h" #include "game/objects/creatures/xian_spearman.h" #include "game/objects/creatures/yeti.h" +#include "game/objects/effects/blood.h" +#include "game/objects/effects/body_part.h" +#include "game/objects/effects/bubbles.h" +#include "game/objects/effects/explosion.h" +#include "game/objects/effects/glow.h" +#include "game/objects/effects/gun_flash.h" +#include "game/objects/effects/missile_flame.h" +#include "game/objects/effects/missile_harpoon.h" +#include "game/objects/effects/missile_knife.h" +#include "game/objects/effects/ricochet.h" +#include "game/objects/effects/snow_sprite.h" +#include "game/objects/effects/splash.h" +#include "game/objects/effects/twinkle.h" +#include "game/objects/effects/water_sprite.h" +#include "game/objects/effects/waterfall.h" +#include "game/objects/general/alarm_sound.h" +#include "game/objects/general/bell.h" +#include "game/objects/general/big_bowl.h" +#include "game/objects/general/bird_tweeter.h" +#include "game/objects/general/bridge_flat.h" +#include "game/objects/general/bridge_tilt_1.h" +#include "game/objects/general/bridge_tilt_2.h" +#include "game/objects/general/camera_target.h" +#include "game/objects/general/clock_chimes.h" +#include "game/objects/general/cutscene_player.h" +#include "game/objects/general/detonator.h" +#include "game/objects/general/ding_dong.h" +#include "game/objects/general/door.h" +#include "game/objects/general/drawbridge.h" +#include "game/objects/general/earthquake.h" +#include "game/objects/general/final_cutscene.h" +#include "game/objects/general/final_level_counter.h" +#include "game/objects/general/flare_item.h" +#include "game/objects/general/gong_bonger.h" +#include "game/objects/general/grenade.h" +#include "game/objects/general/harpoon_bolt.h" +#include "game/objects/general/hot_liquid.h" +#include "game/objects/general/keyhole.h" +#include "game/objects/general/lara_alarm.h" +#include "game/objects/general/lift.h" +#include "game/objects/general/pickup.h" +#include "game/objects/general/puzzle_hole.h" +#include "game/objects/general/secret.h" +#include "game/objects/general/sphere_of_doom.h" +#include "game/objects/general/switch.h" +#include "game/objects/general/trapdoor.h" +#include "game/objects/general/window.h" +#include "game/objects/vehicles/boat.h" #include "game/objects/vehicles/skidoo_armed.h" +#include "game/objects/vehicles/skidoo_fast.h" #include "global/funcs.h" #include "global/types.h" #include "global/vars.h" @@ -101,9 +150,145 @@ void __cdecl Object_SetupBaddyObjects(void) GiantYeti_Setup(); TRex_Setup(); Winston_Setup(); +} - // TODO: move this to Object_SetupGeneralObjects +void __cdecl Object_SetupGeneralObjects(void) +{ + Boat_Setup(); SkidooArmed_Setup(); + SkidooFast_Setup(); + + // misc interactive objects + Bell_Setup(); + BigBowl_Setup(); + Detonator1_Setup(); + Detonator2_Setup(); + FlareItem_Setup(); + Lift_Setup(); + + // misc non-interactive objects + AlarmSound_Setup(); + BirdTweeter_Setup(Object_GetObject(O_BIRD_TWEETER_1)); + BirdTweeter_Setup(Object_GetObject(O_BIRD_TWEETER_2)); + CameraTarget_Setup(); + ClockChimes_Setup(); + DingDong_Setup(); + Earthquake_Setup(); + FinalCutscene_Setup(); + FinalLevelCounter_Setup(); + GongBonger_Setup(); + HotLiquid_Setup(); + LaraAlarm_Setup(); + + // projectiles + Grenade_Setup(); + HarpoonBolt_Setup(); + MissileFlame_Setup(); + MissileHarpoon_Setup(); + MissileKnife_Setup(); + SphereOfDoom_Setup(Object_GetObject(O_SPHERE_OF_DOOM_1), true); + SphereOfDoom_Setup(Object_GetObject(O_SPHERE_OF_DOOM_2), true); + SphereOfDoom_Setup(Object_GetObject(O_SPHERE_OF_DOOM_3), false); + + // effects + Blood_Setup(); + BodyPart_Setup(); + Bubbles_Setup(); + Explosion_Setup(); + Glow_Setup(); + Splash_Setup(); + Twinkle_Setup(); + GunFlash_Setup(); + Ricochet_Setup(); + SnowSprite_Setup(); + WaterSprite_Setup(); + Waterfall_Setup(); + + // geometry objects + BridgeFlat_Setup(); + BridgeTilt1_Setup(); + BridgeTilt2_Setup(); + Drawbridge_Setup(); + Window1_Setup(); + Window2_Setup(); + + // doors + Door_Setup(Object_GetObject(O_DOOR_TYPE_1)); + Door_Setup(Object_GetObject(O_DOOR_TYPE_2)); + Door_Setup(Object_GetObject(O_DOOR_TYPE_3)); + Door_Setup(Object_GetObject(O_DOOR_TYPE_4)); + Door_Setup(Object_GetObject(O_DOOR_TYPE_5)); + Door_Setup(Object_GetObject(O_DOOR_TYPE_6)); + Door_Setup(Object_GetObject(O_DOOR_TYPE_7)); + Door_Setup(Object_GetObject(O_DOOR_TYPE_8)); + Trapdoor_Setup(Object_GetObject(O_TRAPDOOR_TYPE_1)); + Trapdoor_Setup(Object_GetObject(O_TRAPDOOR_TYPE_2)); + + // keys and puzzles + Keyhole_Setup(Object_GetObject(O_KEY_HOLE_1)); + Keyhole_Setup(Object_GetObject(O_KEY_HOLE_2)); + Keyhole_Setup(Object_GetObject(O_KEY_HOLE_3)); + Keyhole_Setup(Object_GetObject(O_KEY_HOLE_4)); + PuzzleHole_Setup(Object_GetObject(O_PUZZLE_DONE_1), true); + PuzzleHole_Setup(Object_GetObject(O_PUZZLE_DONE_2), true); + PuzzleHole_Setup(Object_GetObject(O_PUZZLE_DONE_3), true); + PuzzleHole_Setup(Object_GetObject(O_PUZZLE_DONE_4), true); + PuzzleHole_Setup(Object_GetObject(O_PUZZLE_HOLE_1), false); + PuzzleHole_Setup(Object_GetObject(O_PUZZLE_HOLE_2), false); + PuzzleHole_Setup(Object_GetObject(O_PUZZLE_HOLE_3), false); + PuzzleHole_Setup(Object_GetObject(O_PUZZLE_HOLE_4), false); + + // switches + Switch_Setup(Object_GetObject(O_SWITCH_TYPE_AIRLOCK), false); + Switch_Setup(Object_GetObject(O_SWITCH_TYPE_BUTTON), false); + Switch_Setup(Object_GetObject(O_SWITCH_TYPE_NORMAL), false); + Switch_Setup(Object_GetObject(O_SWITCH_TYPE_SMALL), false); + Switch_Setup(Object_GetObject(O_SWITCH_TYPE_UW), true); + + // cutscene players + CutscenePlayer_Setup(Object_GetObject(O_PLAYER_1)); + CutscenePlayer_Setup(Object_GetObject(O_PLAYER_2)); + CutscenePlayer_Setup(Object_GetObject(O_PLAYER_3)); + CutscenePlayer_Setup(Object_GetObject(O_PLAYER_4)); + CutscenePlayer_Setup(Object_GetObject(O_PLAYER_5)); + CutscenePlayer_Setup(Object_GetObject(O_PLAYER_6)); + CutscenePlayer_Setup(Object_GetObject(O_PLAYER_7)); + CutscenePlayer_Setup(Object_GetObject(O_PLAYER_8)); + CutscenePlayer_Setup(Object_GetObject(O_PLAYER_9)); + CutscenePlayer_Setup(Object_GetObject(O_PLAYER_10)); + + // pickups + Pickup_Setup(Object_GetObject(O_FLARES_ITEM)); + Pickup_Setup(Object_GetObject(O_GRENADE_AMMO_ITEM)); + Pickup_Setup(Object_GetObject(O_GRENADE_ITEM)); + Pickup_Setup(Object_GetObject(O_HARPOON_AMMO_ITEM)); + Pickup_Setup(Object_GetObject(O_HARPOON_ITEM)); + Pickup_Setup(Object_GetObject(O_KEY_ITEM_1)); + Pickup_Setup(Object_GetObject(O_KEY_ITEM_2)); + Pickup_Setup(Object_GetObject(O_KEY_ITEM_3)); + Pickup_Setup(Object_GetObject(O_KEY_ITEM_4)); + Pickup_Setup(Object_GetObject(O_LARGE_MEDIPACK_ITEM)); + Pickup_Setup(Object_GetObject(O_M16_AMMO_ITEM)); + Pickup_Setup(Object_GetObject(O_M16_ITEM)); + Pickup_Setup(Object_GetObject(O_MAGNUM_AMMO_ITEM)); + Pickup_Setup(Object_GetObject(O_MAGNUM_ITEM)); + Pickup_Setup(Object_GetObject(O_PICKUP_ITEM_1)); + Pickup_Setup(Object_GetObject(O_PICKUP_ITEM_2)); + Pickup_Setup(Object_GetObject(O_PISTOL_AMMO_ITEM)); + Pickup_Setup(Object_GetObject(O_PISTOL_ITEM)); + Pickup_Setup(Object_GetObject(O_PUZZLE_ITEM_1)); + Pickup_Setup(Object_GetObject(O_PUZZLE_ITEM_2)); + Pickup_Setup(Object_GetObject(O_PUZZLE_ITEM_3)); + Pickup_Setup(Object_GetObject(O_PUZZLE_ITEM_4)); + Pickup_Setup(Object_GetObject(O_SECRET_1)); + Pickup_Setup(Object_GetObject(O_SECRET_3)); + Pickup_Setup(Object_GetObject(O_SHOTGUN_AMMO_ITEM)); + Pickup_Setup(Object_GetObject(O_SHOTGUN_ITEM)); + Pickup_Setup(Object_GetObject(O_SMALL_MEDIPACK_ITEM)); + Pickup_Setup(Object_GetObject(O_UZI_AMMO_ITEM)); + Pickup_Setup(Object_GetObject(O_UZI_ITEM)); + + Secret2_Setup(); } void __cdecl Object_SetupAllObjects(void) diff --git a/src/tr2/game/objects/setup.h b/src/tr2/game/objects/setup.h index f7363247c..a0cefe88b 100644 --- a/src/tr2/game/objects/setup.h +++ b/src/tr2/game/objects/setup.h @@ -1,4 +1,5 @@ #pragma once void __cdecl Object_SetupAllObjects(void); +void __cdecl Object_SetupGeneralObjects(void); void __cdecl Object_SetupBaddyObjects(void); diff --git a/src/tr2/game/objects/vehicles/boat.c b/src/tr2/game/objects/vehicles/boat.c index 66504dcb6..994dc09e7 100644 --- a/src/tr2/game/objects/vehicles/boat.c +++ b/src/tr2/game/objects/vehicles/boat.c @@ -78,6 +78,17 @@ void __cdecl Boat_Initialise(const int16_t item_num) boat->data = boat_data; } +void Boat_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_BOAT); + obj->initialise = Boat_Initialise; + obj->control = Boat_Control; + obj->collision = Boat_Collision; + obj->save_position = 1; + obj->save_flags = 1; + obj->save_anim = 1; +} + int32_t __cdecl Boat_CheckGetOn( const int16_t item_num, const COLL_INFO *const coll) { diff --git a/src/tr2/game/objects/vehicles/boat.h b/src/tr2/game/objects/vehicles/boat.h index e2221e1f8..2cf02c388 100644 --- a/src/tr2/game/objects/vehicles/boat.h +++ b/src/tr2/game/objects/vehicles/boat.h @@ -5,6 +5,7 @@ #include void __cdecl Boat_Initialise(int16_t item_num); +void Boat_Setup(void); int32_t __cdecl Boat_CheckGetOn(int16_t item_num, const COLL_INFO *coll); void __cdecl Boat_Collision(int16_t item_num, ITEM *lara, COLL_INFO *coll); int32_t __cdecl Boat_TestWaterHeight( diff --git a/src/tr2/game/objects/vehicles/skidoo_fast.c b/src/tr2/game/objects/vehicles/skidoo_fast.c new file mode 100644 index 000000000..e31ce32a3 --- /dev/null +++ b/src/tr2/game/objects/vehicles/skidoo_fast.c @@ -0,0 +1,14 @@ +#include "game/objects/vehicles/skidoo_fast.h" + +#include "decomp/skidoo.h" + +void SkidooFast_Setup(void) +{ + OBJECT *const obj = Object_GetObject(O_SKIDOO_FAST); + obj->initialise = Skidoo_Initialise; + obj->draw_routine = Skidoo_Draw; + obj->collision = Skidoo_Collision; + obj->save_position = 1; + obj->save_flags = 1; + obj->save_anim = 1; +} diff --git a/src/tr2/game/objects/vehicles/skidoo_fast.h b/src/tr2/game/objects/vehicles/skidoo_fast.h new file mode 100644 index 000000000..4a61dfa47 --- /dev/null +++ b/src/tr2/game/objects/vehicles/skidoo_fast.h @@ -0,0 +1,5 @@ +#pragma once + +#include "global/types.h" + +void SkidooFast_Setup(void); diff --git a/src/tr2/global/funcs.h b/src/tr2/global/funcs.h index 62b7474be..00f48f4cf 100644 --- a/src/tr2/global/funcs.h +++ b/src/tr2/global/funcs.h @@ -18,19 +18,19 @@ #define Eel_Control ((void __cdecl (*)(int16_t item_num))0x0041C2E0) #define DoBloodSplat ((int16_t __cdecl (*)(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE direction, int16_t room_num))0x0041C5D0) #define DoLotsOfBlood ((void __cdecl (*)(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE direction, int16_t room_num, int32_t num))0x0041C630) -#define ControlBlood1 ((void __cdecl (*)(int16_t fx_num))0x0041C6E0) -#define ControlExplosion1 ((void __cdecl (*)(int16_t fx_num))0x0041C770) +#define Blood_Control ((void __cdecl (*)(int16_t fx_num))0x0041C6E0) +#define Explosion_Control ((void __cdecl (*)(int16_t fx_num))0x0041C770) #define Richochet ((void __cdecl (*)(GAME_VECTOR *pos))0x0041C7F0) -#define ControlRichochet1 ((void __cdecl (*)(int16_t fx_num))0x0041C870) +#define Richochet_Control ((void __cdecl (*)(int16_t fx_num))0x0041C870) #define CreateBubble ((void __cdecl (*)(XYZ_32 *pos, int16_t room_num))0x0041C8A0) #define LaraBubbles ((void __cdecl (*)(ITEM *item))0x0041C910) -#define ControlBubble1 ((void __cdecl (*)(int16_t fx_num))0x0041C990) +#define Bubbles_Control ((void __cdecl (*)(int16_t fx_num))0x0041C990) #define Splash ((void __cdecl (*)(ITEM *item))0x0041CA90) -#define ControlSplash1 ((void __cdecl (*)(int16_t fx_num))0x0041CB60) -#define ControlWaterSprite ((void __cdecl (*)(int16_t fx_num))0x0041CBE0) -#define ControlSnowSprite ((void __cdecl (*)(int16_t fx_num))0x0041CC90) -#define ControlHotLiquid ((void __cdecl (*)(int16_t fx_num))0x0041CD20) -#define WaterFall ((void __cdecl (*)(int16_t fx_num))0x0041CE00) +#define Splash_Control ((void __cdecl (*)(int16_t fx_num))0x0041CB60) +#define WaterSprite_Control ((void __cdecl (*)(int16_t fx_num))0x0041CBE0) +#define SnowSprite_Control ((void __cdecl (*)(int16_t fx_num))0x0041CC90) +#define HotLiquid_Control ((void __cdecl (*)(int16_t fx_num))0x0041CD20) +#define Waterfall_Control ((void __cdecl (*)(int16_t fx_num))0x0041CE00) #define finish_level_effect ((void __cdecl (*)(ITEM *item))0x0041CF40) #define turn180_effect ((void __cdecl (*)(ITEM *item))0x0041CF50) #define floor_shake_effect ((void __cdecl (*)(ITEM *item))0x0041CF70) @@ -44,15 +44,15 @@ #define CurtainFX ((void __cdecl (*)(ITEM *item))0x0041D1B0) #define StatueFX ((void __cdecl (*)(ITEM *item))0x0041D1D0) #define SetChangeFX ((void __cdecl (*)(ITEM *item))0x0041D1F0) -#define ControlDingDong ((void __cdecl (*)(int16_t item_num))0x0041D210) -#define ControlLaraAlarm ((void __cdecl (*)(int16_t item_num))0x0041D250) -#define ControlAlarmSound ((void __cdecl (*)(int16_t item_num))0x0041D290) -#define ControlBirdTweeter ((void __cdecl (*)(int16_t item_num))0x0041D300) +#define DingDong_Control ((void __cdecl (*)(int16_t item_num))0x0041D210) +#define LaraAlarm_Control ((void __cdecl (*)(int16_t item_num))0x0041D250) +#define AlarmSound_Control ((void __cdecl (*)(int16_t item_num))0x0041D290) +#define BirdTweeter_Control ((void __cdecl (*)(int16_t item_num))0x0041D300) #define DoChimeSound ((void __cdecl (*)(ITEM *item))0x0041D360) -#define ControlClockChimes ((void __cdecl (*)(int16_t item_num))0x0041D3C0) -#define SphereOfDoomCollision ((void __cdecl (*)(int16_t item_num, ITEM *lara_item, COLL_INFO *coll))0x0041D430) -#define SphereOfDoom ((void __cdecl (*)(int16_t item_num))0x0041D560) -#define DrawSphereOfDoom ((void __cdecl (*)(ITEM *item))0x0041D650) +#define ClockChimes_Control ((void __cdecl (*)(int16_t item_num))0x0041D3C0) +#define SphereOfDoom_Collision ((void __cdecl (*)(int16_t item_num, ITEM *lara_item, COLL_INFO *coll))0x0041D430) +#define SphereOfDoom_Control ((void __cdecl (*)(int16_t item_num))0x0041D560) +#define SphereOfDoom_Draw ((void __cdecl (*)(const ITEM *item))0x0041D650) #define lara_hands_free ((void __cdecl (*)(ITEM *item))0x0041D780) #define flip_map_effect ((void __cdecl (*)(ITEM *item))0x0041D790) #define draw_right_gun ((void __cdecl (*)(ITEM *item))0x0041D7A0) @@ -83,7 +83,7 @@ #define DrawHair ((void __cdecl (*)(void))0x00421920) #define Flare_DoLight ((int32_t __cdecl (*)(XYZ_32 *pos, int32_t flare_age))0x0042F7A0) #define Flare_DoInHand ((void __cdecl (*)(int32_t flare_age))0x0042F840) -#define Flare_DrawInAir ((void __cdecl (*)(ITEM *item))0x0042F920) +#define Flare_DrawInAir ((void __cdecl (*)(const ITEM *item))0x0042F920) #define Flare_Create ((void __cdecl (*)(int32_t thrown))0x0042FA20) #define Flare_SetArm ((void __cdecl (*)(int32_t frame))0x0042FC00) #define Flare_Draw ((void __cdecl (*)(void))0x0042FC50) @@ -92,26 +92,26 @@ #define Flare_UndrawMeshes ((void __cdecl (*)(void))0x00430010) #define Flare_Ready ((void __cdecl (*)(void))0x00430030) #define Flare_Control ((void __cdecl (*)(int16_t item_num))0x00430070) -#define ControlMissile ((void __cdecl (*)(int16_t fx_num))0x00432FE0) +#define Missile_Control ((void __cdecl (*)(int16_t fx_num))0x00432FE0) #define ShootAtLara ((void __cdecl (*)(FX *fx))0x004332B0) #define BodyPart_Control ((void __cdecl (*)(int16_t fx_num))0x004336F0) #define Object_DrawUnclippedItem ((void __cdecl (*)(const ITEM *item))0x004341A0) -#define EarthQuake ((void __cdecl (*)(int16_t item_num))0x00434210) -#define ControlCutShotgun ((void __cdecl (*)(int16_t item_num))0x004342F0) +#define Earthquake_Control ((void __cdecl (*)(int16_t item_num))0x00434210) +#define FinalCutscene_Control ((void __cdecl (*)(int16_t item_num))0x004342F0) #define InitialiseFinalLevel ((void __cdecl (*)(void))0x00434330) #define MiniCopterControl ((void __cdecl (*)(int16_t item_num))0x00434610) #define InitialiseDyingMonk ((void __cdecl (*)(int16_t item_num))0x004346F0) #define DyingMonk ((void __cdecl (*)(int16_t item_num))0x00434770) -#define BigBowlControl ((void __cdecl (*)(int16_t item_num))0x00434C10) -#define BellControl ((void __cdecl (*)(int16_t item_num))0x00434D00) -#define InitialiseWindow ((void __cdecl (*)(int16_t item_num))0x00434D80) +#define BigBowl_Control ((void __cdecl (*)(int16_t item_num))0x00434C10) +#define Bell_Control ((void __cdecl (*)(int16_t item_num))0x00434D00) +#define Window_Initialise ((void __cdecl (*)(int16_t item_num))0x00434D80) #define SmashWindow ((void __cdecl (*)(int16_t item_num))0x00434E00) -#define WindowControl ((void __cdecl (*)(int16_t item_num))0x00434ED0) -#define SmashIceControl ((void __cdecl (*)(int16_t item_num))0x00434F70) +#define Window_Control ((void __cdecl (*)(int16_t item_num))0x00434ED0) +#define SmashIce_Control ((void __cdecl (*)(int16_t item_num))0x00434F70) #define CopterControl ((void __cdecl (*)(int16_t item_num))0x00435B80) #define GeneralControl ((void __cdecl (*)(int16_t item_num))0x00435C90) -#define ControlGlow ((void __cdecl (*)(int16_t fx_num))0x00435E90) -#define ControlGunShot ((void __cdecl (*)(int16_t fx_num))0x00435ED0) +#define Glow_Control ((void __cdecl (*)(int16_t fx_num))0x00435E90) +#define GunFlash_Control ((void __cdecl (*)(int16_t fx_num))0x00435ED0) #define GunShot ((int16_t __cdecl (*)(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE yrot, int16_t room_num))0x00435F20) #define GunHit ((int16_t __cdecl (*)(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE yrot, int16_t room_num))0x00435F90) #define GunMiss ((int16_t __cdecl (*)(int32_t x, int32_t y, int32_t z, int16_t speed, PHD_ANGLE yrot, int16_t room_num))0x00436050) @@ -125,7 +125,7 @@ #define Bandit1_Control ((void __cdecl (*)(int16_t item_num))0x00437570) #define Bandit2_Control ((void __cdecl (*)(int16_t item_num))0x004378B0) #define Winston_Control ((void __cdecl (*)(int16_t item_num))0x00437CF0) -#define SecretControl ((void __cdecl (*)(int16_t item_num))0x00438EC0) +#define Secret_Control ((void __cdecl (*)(int16_t item_num))0x00438EC0) #define Mouse_Control ((void __cdecl (*)(int16_t item_num))0x00438EF0) #define InitialiseStartInfo ((void __cdecl (*)(void))0x004390E0) #define ModifyStartInfo ((void __cdecl (*)(int32_t level_num))0x00439150) @@ -138,7 +138,6 @@ #define InitialiseGameFlags ((void __cdecl (*)(void))0x0043A3E0) #define InitialiseLevelFlags ((void __cdecl (*)(void))0x0043A450) #define Object_SetupTrapObjects ((void __cdecl (*)(void))0x0043B4C0) -#define Object_SetupGeneralObjects ((void __cdecl (*)(void))0x0043BAC0) #define GetCarriedItems ((void __cdecl (*)(void))0x0043C780) #define Jelly_Control ((void __cdecl (*)(int16_t item_num))0x0043C850) #define Baracudda_Control ((void __cdecl (*)(int16_t item_num))0x0043C970) diff --git a/src/tr2/inject_exec.c b/src/tr2/inject_exec.c index 9bf673a74..bd2da95a4 100644 --- a/src/tr2/inject_exec.c +++ b/src/tr2/inject_exec.c @@ -1060,6 +1060,7 @@ static void M_Objects(const bool enable) INJECT(enable, 0x00438E40, Keyhole_Trigger); INJECT(enable, 0x00438E80, Pickup_Trigger); INJECT(enable, 0x0043A480, Object_SetupBaddyObjects); + INJECT(enable, 0x0043BAC0, Object_SetupGeneralObjects); INJECT(enable, 0x0043C710, Object_SetupAllObjects); INJECT(enable, 0x0043ED40, SkidooDriver_Initialise); INJECT(enable, 0x0043EDD0, SkidooDriver_Control); diff --git a/src/tr2/meson.build b/src/tr2/meson.build index 26a3ddc91..4a8cfc057 100644 --- a/src/tr2/meson.build +++ b/src/tr2/meson.build @@ -153,28 +153,58 @@ dll_sources = [ 'game/objects/creatures/xian_knight.c', 'game/objects/creatures/xian_spearman.c', 'game/objects/creatures/yeti.c', + 'game/objects/effects/blood.c', + 'game/objects/effects/body_part.c', + 'game/objects/effects/bubbles.c', 'game/objects/effects/ember.c', + 'game/objects/effects/explosion.c', 'game/objects/effects/flame.c', + 'game/objects/effects/glow.c', + 'game/objects/effects/gun_flash.c', + 'game/objects/effects/missile_flame.c', + 'game/objects/effects/missile_harpoon.c', + 'game/objects/effects/missile_knife.c', + 'game/objects/effects/ricochet.c', + 'game/objects/effects/snow_sprite.c', + 'game/objects/effects/splash.c', 'game/objects/effects/twinkle.c', + 'game/objects/effects/water_sprite.c', + 'game/objects/effects/waterfall.c', + 'game/objects/general/alarm_sound.c', + 'game/objects/general/bell.c', + 'game/objects/general/big_bowl.c', + 'game/objects/general/bird_tweeter.c', 'game/objects/general/body_part.c', 'game/objects/general/bridge_common.c', 'game/objects/general/bridge_flat.c', 'game/objects/general/bridge_tilt_1.c', 'game/objects/general/bridge_tilt_2.c', + 'game/objects/general/camera_target.c', + 'game/objects/general/clock_chimes.c', + 'game/objects/general/cutscene_player.c', 'game/objects/general/detonator.c', + 'game/objects/general/ding_dong.c', 'game/objects/general/door.c', 'game/objects/general/drawbridge.c', + 'game/objects/general/earthquake.c', + 'game/objects/general/final_cutscene.c', 'game/objects/general/final_level_counter.c', + 'game/objects/general/flare_item.c', 'game/objects/general/gong_bonger.c', 'game/objects/general/grenade.c', 'game/objects/general/harpoon_bolt.c', + 'game/objects/general/hot_liquid.c', 'game/objects/general/keyhole.c', + 'game/objects/general/lara_alarm.c', 'game/objects/general/lift.c', 'game/objects/general/movable_block.c', 'game/objects/general/pickup.c', 'game/objects/general/puzzle_hole.c', + 'game/objects/general/secret.c', + 'game/objects/general/sphere_of_doom.c', 'game/objects/general/switch.c', 'game/objects/general/trapdoor.c', + 'game/objects/general/window.c', 'game/objects/general/zipline.c', 'game/objects/setup.c', 'game/objects/traps/ember_emitter.c', @@ -182,6 +212,7 @@ dll_sources = [ 'game/objects/vars.c', 'game/objects/vehicles/boat.c', 'game/objects/vehicles/skidoo_armed.c', + 'game/objects/vehicles/skidoo_fast.c', 'game/option/option.c', 'game/option/option_compass.c', 'game/option/option_controls.c',