From ce9c56ec7f4e84254e21a4e4590cc7a3d851fb16 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 27 Jun 2020 21:48:43 +1000 Subject: [PATCH] Attempt to decompile liftTick --- src/files/setup/setupcave.c | 2 +- src/files/setup/setupdepo.c | 64 +++++++------- src/files/setup/setupdish.c | 6 +- src/files/setup/setupimp.c | 2 +- src/files/setup/setuplee.c | 24 +++--- src/files/setup/setuplue.c | 28 +++--- src/files/setup/setuppam.c | 14 +-- src/files/setup/setuptra.c | 40 ++++----- src/game/propobj.c | 164 +++++++++++++++++++++++++++++++++--- src/include/constants.h | 65 +++++++------- src/include/game/propobj.h | 4 +- src/include/lib/lib_233c0.h | 2 +- src/include/types.h | 6 +- src/lib/lib_233c0.c | 2 +- 14 files changed, 284 insertions(+), 139 deletions(-) diff --git a/src/files/setup/setupcave.c b/src/files/setup/setupcave.c index 59b94ff8c..d35739f0b 100644 --- a/src/files/setup/setupcave.c +++ b/src/files/setup/setupcave.c @@ -3524,7 +3524,7 @@ u8 func1018_safe_switch[] = { yield open_door(OBJ_SAFEDOOR) yield - set_object_flag(OBJ_SAFEDOOR, OBJFLAG_DOORKEEPOPEN) + set_object_flag(OBJ_SAFEDOOR, OBJFLAG_DOOR_KEEPOPEN) unset_object_flag2(OBJ_FLIGHTPLANS, OBJFLAG2_INVISIBLE) unset_object_flag(OBJ_FLIGHTPLANS, OBJFLAG_UNCOLLECTABLE) diff --git a/src/files/setup/setupdepo.c b/src/files/setup/setupdepo.c index 2a20d044b..0f33449f5 100644 --- a/src/files/setup/setupdepo.c +++ b/src/files/setup/setupdepo.c @@ -618,10 +618,10 @@ u8 func1003_laser_switch_1[] = { open_door(OBJ_LASER_1C) open_door(OBJ_LASER_1D) yield - set_object_flag(OBJ_LASER_1A, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_1B, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_1C, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_1D, OBJFLAG_DOORKEEPOPEN) + set_object_flag(OBJ_LASER_1A, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_1B, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_1C, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_1D, OBJFLAG_DOOR_KEEPOPEN) assign_sound(0x043f, CHANNEL_7) play_sound_from_entity(CHANNEL_7, OBJ_LASERSWITCH1, 0x012c, 0x0190, 0x00) mute_channel(CHANNEL_0) @@ -685,10 +685,10 @@ u8 func1004_laser_switch_2[] = { open_door(OBJ_LASER_2C) open_door(OBJ_LASER_2D) yield - set_object_flag(OBJ_LASER_2A, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_2B, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_2C, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_2D, OBJFLAG_DOORKEEPOPEN) + set_object_flag(OBJ_LASER_2A, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_2B, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_2C, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_2D, OBJFLAG_DOOR_KEEPOPEN) assign_sound(0x043f, CHANNEL_7) play_sound_from_entity(CHANNEL_7, OBJ_LASERSWITCH2, 0x012c, 0x0190, 0x00) mute_channel(CHANNEL_1) @@ -751,10 +751,10 @@ u8 func1005_laser_switch_3[] = { open_door(OBJ_LASER_3C) open_door(OBJ_LASER_3D) yield - set_object_flag(OBJ_LASER_3A, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_3B, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_3C, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_3D, OBJFLAG_DOORKEEPOPEN) + set_object_flag(OBJ_LASER_3A, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_3B, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_3C, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_3D, OBJFLAG_DOOR_KEEPOPEN) assign_sound(0x043f, CHANNEL_7) play_sound_from_entity(CHANNEL_7, OBJ_LASERSWITCH3, 0x012c, 0x0190, 0x00) mute_channel(CHANNEL_2) @@ -817,10 +817,10 @@ u8 func1006_laser_switch_4[] = { open_door(OBJ_LASER_4C) open_door(OBJ_LASER_4D) yield - set_object_flag(OBJ_LASER_4A, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_4B, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_4C, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_4D, OBJFLAG_DOORKEEPOPEN) + set_object_flag(OBJ_LASER_4A, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_4B, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_4C, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_4D, OBJFLAG_DOOR_KEEPOPEN) assign_sound(0x043f, CHANNEL_7) play_sound_from_entity(CHANNEL_7, OBJ_LASERSWITCH4, 0x012c, 0x0190, 0x00) mute_channel(CHANNEL_3) @@ -921,22 +921,22 @@ u8 func1007_init_lasers[] = { open_door(OBJ_LASER_3D) open_door(OBJ_LASER_4D) yield - set_object_flag(OBJ_LASER_1A, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_2A, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_3A, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_4A, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_1B, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_2B, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_3B, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_4B, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_1C, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_2C, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_3C, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_4C, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_1D, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_2D, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_3D, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_LASER_4D, OBJFLAG_DOORKEEPOPEN) + set_object_flag(OBJ_LASER_1A, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_2A, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_3A, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_4A, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_1B, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_2B, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_3B, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_4B, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_1C, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_2C, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_3C, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_4C, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_1D, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_2D, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_3D, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_LASER_4D, OBJFLAG_DOOR_KEEPOPEN) set_stage_flag(STAGEFLAG_LASERSET1_DISABLED) set_stage_flag(STAGEFLAG_LASERSET2_DISABLED) set_stage_flag(STAGEFLAG_LASERSET3_DISABLED) diff --git a/src/files/setup/setupdish.c b/src/files/setup/setupdish.c index 15ecc9db1..8ec77db0f 100644 --- a/src/files/setup/setupdish.c +++ b/src/files/setup/setupdish.c @@ -2780,7 +2780,7 @@ u8 func100e_training_unlockables[] = { label(0x06) \ if_door_state(door, (DOORSTATE_OPEN | DOORSTATE_OPENING), /*goto*/ 0x2f) \ open_door(door) \ - set_object_flag(door, OBJFLAG_DOORKEEPOPEN) \ + set_object_flag(door, OBJFLAG_DOOR_KEEPOPEN) \ restart_timer \ \ beginloop(0x08) \ @@ -2832,7 +2832,7 @@ u8 func1012_cloak_doorproxy[] = { label(0x06) if_door_state(0x40, (DOORSTATE_OPEN | DOORSTATE_OPENING), /*goto*/ 0x2f) open_door(0x40) - set_object_flag(0x40, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x40, OBJFLAG_DOOR_KEEPOPEN) restart_timer beginloop(0x08) @@ -2860,7 +2860,7 @@ u8 func101b_ir_door[] = { label(0x06) if_door_state(0x37, (DOORSTATE_OPEN | DOORSTATE_OPENING), /*goto*/ 0x2f) open_door(0x37) - set_object_flag(0x37, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x37, OBJFLAG_DOOR_KEEPOPEN) restart_timer beginloop(0x08) diff --git a/src/files/setup/setupimp.c b/src/files/setup/setupimp.c index 1545476de..f01852517 100644 --- a/src/files/setup/setupimp.c +++ b/src/files/setup/setupimp.c @@ -903,7 +903,7 @@ u8 func0c01_outro[] = { open_door(0x51) restart_timer yield - set_object_flag(0x51, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x51, OBJFLAG_DOOR_KEEPOPEN) set_cutscene_weapon(CHR_P1P2, WEAPON_NONE, WEAPON_NONE) yield set_cutscene_weapon(CHR_P1P2, WEAPON_AR34, WEAPON_NONE) diff --git a/src/files/setup/setuplee.c b/src/files/setup/setuplee.c index 98d42e433..b757a91eb 100644 --- a/src/files/setup/setuplee.c +++ b/src/files/setup/setuplee.c @@ -633,10 +633,10 @@ u8 func1004_check_hangar_doors_opened[] = { open_door(OBJ_HANGARDOOR2) open_door(OBJ_HANGARDOOR3) open_door(OBJ_HANGARDOOR4) - set_object_flag(OBJ_HANGARDOOR1, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_HANGARDOOR2, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_HANGARDOOR3, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_HANGARDOOR4, OBJFLAG_DOORKEEPOPEN) + set_object_flag(OBJ_HANGARDOOR1, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_HANGARDOOR2, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_HANGARDOOR3, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_HANGARDOOR4, OBJFLAG_DOOR_KEEPOPEN) restart_timer beginloop(0x09) @@ -1296,8 +1296,8 @@ u8 func1008_hangar_lifts[] = { // Deactivate lift and open door label(0x66) - set_object_flag(0x39, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x3a, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x39, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x3a, OBJFLAG_DOOR_KEEPOPEN) unset_object_flag(OBJ_HANGARLIFT_JO, OBJFLAG_DEACTIVATED) open_door(0x39) open_door(0x3a) @@ -1329,8 +1329,8 @@ u8 func1008_hangar_lifts[] = { // hence the 5 second wait if entered as soon as the door opens. label(0x2c) set_chr_hiddenflag(CHR_BOND, CHRHFLAG_TRIGGER_BUDDY_WARP) - unset_object_flag(0x39, OBJFLAG_DOORKEEPOPEN) - unset_object_flag(0x3a, OBJFLAG_DOORKEEPOPEN) + unset_object_flag(0x39, OBJFLAG_DOOR_KEEPOPEN) + unset_object_flag(0x3a, OBJFLAG_DOOR_KEEPOPEN) unset_object_flag(OBJ_HANGARLIFT_JO, OBJFLAG_DEACTIVATED) // Wait until Y coordinate >= 400 @@ -2904,10 +2904,10 @@ u8 func0c01_outro[] = { open_door(OBJ_HANGARDOOR2) open_door(OBJ_HANGARDOOR3) open_door(OBJ_HANGARDOOR4) - set_object_flag(OBJ_HANGARDOOR1, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_HANGARDOOR2, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_HANGARDOOR3, OBJFLAG_DOORKEEPOPEN) - set_object_flag(OBJ_HANGARDOOR4, OBJFLAG_DOORKEEPOPEN) + set_object_flag(OBJ_HANGARDOOR1, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_HANGARDOOR2, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_HANGARDOOR3, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(OBJ_HANGARDOOR4, OBJFLAG_DOOR_KEEPOPEN) beginloop(0x08) if_camera_animating(/*goto*/ 0x2c) diff --git a/src/files/setup/setuplue.c b/src/files/setup/setuplue.c index 7e06ae6ce..c35b3ee36 100644 --- a/src/files/setup/setuplue.c +++ b/src/files/setup/setuplue.c @@ -2345,13 +2345,13 @@ u8 func1013_bunker_lasers[] = { // SA and PA label(0x03) - set_object_flag(0x1e, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x1f, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x20, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x21, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x22, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x23, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x24, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x1e, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x1f, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x20, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x21, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x22, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x23, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x24, OBJFLAG_DOOR_KEEPOPEN) open_door(0x1e) open_door(0x1f) open_door(0x20) @@ -2359,13 +2359,13 @@ u8 func1013_bunker_lasers[] = { open_door(0x22) open_door(0x23) open_door(0x24) - set_object_flag(0x1e, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x1f, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x20, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x21, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x22, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x23, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x24, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x1e, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x1f, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x20, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x21, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x22, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x23, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x24, OBJFLAG_DOOR_KEEPOPEN) beginloop(0x04) if_stage_flag_eq(STAGEFLAG_EXPLOSIVES_PLACED, TRUE, /*goto*/ 0x09) diff --git a/src/files/setup/setuppam.c b/src/files/setup/setuppam.c index 6b33aff12..1d6e09491 100644 --- a/src/files/setup/setuppam.c +++ b/src/files/setup/setuppam.c @@ -1437,7 +1437,7 @@ u8 func1003_powernode1[] = { set_object_health(OBJ_POWERNODE1, 0) set_object_flag(OBJ_POWERNODE1, OBJFLAG_INVINCIBLE) open_door(0x03) - set_object_flag(0x03, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x03, OBJFLAG_DOOR_KEEPOPEN) goto_first(0x04) label(0x2e) @@ -1457,7 +1457,7 @@ u8 func1004_powernode2[] = { set_object_health(OBJ_POWERNODE2, 0) set_object_flag(OBJ_POWERNODE2, OBJFLAG_INVINCIBLE) open_door(0x04) - set_object_flag(0x04, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x04, OBJFLAG_DOOR_KEEPOPEN) goto_first(0x04) label(0x2e) @@ -1477,7 +1477,7 @@ u8 func1005_powernode3[] = { set_object_flag(OBJ_POWERNODE3, OBJFLAG_INVINCIBLE) set_object_health(OBJ_POWERNODE3, 0) open_door(0x05) - set_object_flag(0x05, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x05, OBJFLAG_DOOR_KEEPOPEN) goto_first(0x04) label(0x2e) @@ -3973,7 +3973,7 @@ u8 func040a_check_pa_canisters_destroyed[] = { // Both canisters destroyed label(0x2e) - set_object_flag(0x0f, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x0f, OBJFLAG_DOOR_KEEPOPEN) set_lights_state(0x00bc, 0x03, 0xff, 0x0a, 0x78) beginloop(0x08) @@ -4562,11 +4562,11 @@ u8 func102e_open_powernode_doors_on_agent[] = { // Agent label(0x08) open_door(0x03) - set_object_flag(0x03, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x03, OBJFLAG_DOOR_KEEPOPEN) open_door(0x04) - set_object_flag(0x04, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x04, OBJFLAG_DOOR_KEEPOPEN) open_door(0x05) - set_object_flag(0x05, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x05, OBJFLAG_DOOR_KEEPOPEN) label(0x2e) set_ailist(CHR_SELF, GAILIST_IDLE) endlist diff --git a/src/files/setup/setuptra.c b/src/files/setup/setuptra.c index 41358114a..ddf22bbf4 100644 --- a/src/files/setup/setuptra.c +++ b/src/files/setup/setuptra.c @@ -1298,8 +1298,8 @@ u8 func0413_jonathan_hangar[] = { set_stage_flag(STAGEFLAG_INNER_DOOR_OPENING) open_door(0x2c) open_door(0x2d) - set_object_flag(0x2c, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x2d, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2c, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x2d, OBJFLAG_DOOR_KEEPOPEN) show_hudmsg(CHR_P1P2, L_TRA(39)) // "Inner hangar door is opening." label(0x32) @@ -1324,8 +1324,8 @@ u8 func0413_jonathan_hangar[] = { set_stage_flag(STAGEFLAG_OUTER_DOOR_OPENING) open_door(0x2e) open_door(0x2f) - set_object_flag(0x2e, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x2f, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2e, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x2f, OBJFLAG_DOOR_KEEPOPEN) show_hudmsg(CHR_P1P2, L_TRA(37)) // "Outer hangar door is opening." beginloop(0x20) @@ -2052,8 +2052,8 @@ u8 func100f_terminals[] = { label(0x32) open_door(0x2c) open_door(0x2d) - set_object_flag(0x2c, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x2d, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2c, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x2d, OBJFLAG_DOOR_KEEPOPEN) reloop(0x04) // Terminal 2 @@ -2073,8 +2073,8 @@ u8 func100f_terminals[] = { label(0x32) open_door(0x2e) open_door(0x2f) - set_object_flag(0x2e, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x2f, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2e, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x2f, OBJFLAG_DOOR_KEEPOPEN) reloop(0x04) // Wait 2 seconds @@ -2240,7 +2240,7 @@ u8 func1012_hoverbike_auto_doors[] = { reloop(0x04) label(0x06) - set_object_flag(0x0a, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x0a, OBJFLAG_DOOR_KEEPOPEN) open_door(0x0a) reloop(0x04) @@ -2250,7 +2250,7 @@ u8 func1012_hoverbike_auto_doors[] = { reloop(0x04) label(0x06) - set_object_flag(0x0b, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x0b, OBJFLAG_DOOR_KEEPOPEN) open_door(0x0b) reloop(0x04) @@ -2260,8 +2260,8 @@ u8 func1012_hoverbike_auto_doors[] = { reloop(0x04) label(0x06) - set_object_flag(0x08, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x09, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x08, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x09, OBJFLAG_DOOR_KEEPOPEN) open_door(0x08) open_door(0x09) reloop(0x04) @@ -2272,7 +2272,7 @@ u8 func1012_hoverbike_auto_doors[] = { reloop(0x04) label(0x06) - set_object_flag(0x0c, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x0c, OBJFLAG_DOOR_KEEPOPEN) open_door(0x0c) reloop(0x04) @@ -2282,7 +2282,7 @@ u8 func1012_hoverbike_auto_doors[] = { reloop(0x04) label(0x06) - set_object_flag(0x05, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x05, OBJFLAG_DOOR_KEEPOPEN) open_door(0x05) endloop(0x04) @@ -2996,8 +2996,8 @@ u8 func101b_gas_sound[] = { u8 func0c02_outro[] = { open_door(0x2c) open_door(0x2e) - set_object_flag(0x2c, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x2d, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2c, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x2d, OBJFLAG_DOOR_KEEPOPEN) label(0x32) set_chr_chrflag(CHR_BOND, CHRCFLAG_HIDDEN) set_chr_chrflag(CHR_COOP, CHRCFLAG_HIDDEN) @@ -3548,8 +3548,8 @@ u8 func102e_keep_hangar_doors_open[] = { label(0x32) open_door(0x2c) open_door(0x2d) - set_object_flag(0x2c, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x2d, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2c, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x2d, OBJFLAG_DOOR_KEEPOPEN) reloop(0x04) // Door 2 closing @@ -3560,8 +3560,8 @@ u8 func102e_keep_hangar_doors_open[] = { label(0x32) open_door(0x2e) open_door(0x2f) - set_object_flag(0x2e, OBJFLAG_DOORKEEPOPEN) - set_object_flag(0x2f, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2e, OBJFLAG_DOOR_KEEPOPEN) + set_object_flag(0x2f, OBJFLAG_DOOR_KEEPOPEN) endloop(0x04) // Terminal destroyed diff --git a/src/game/propobj.c b/src/game/propobj.c index 309629aec..584bafd6e 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -19798,7 +19798,7 @@ glabel var7f1aa43c // // If door should autoclose this tick // if (door->lastopen60 > 0 // && door->mode == DOORMODE_IDLE -// && (door->base.flags & OBJFLAG_DOORKEEPOPEN) == 0 +// && (door->base.flags & OBJFLAG_DOOR_KEEPOPEN) == 0 // && door->lastopen60 < g_Vars.lvframe60 - door->autoclosetime) { // // 004 // // Check if any sibling has DOORFLAG_0010 @@ -20138,7 +20138,7 @@ glabel var7f1aa44c ); GLOBAL_ASM( -glabel func0f07766c +glabel platformDisplaceProps .late_rodata glabel var7f1aa450 .word 0x3d3a5e30 @@ -20579,7 +20579,7 @@ glabel liftTick /* f077cd4: 24060100 */ addiu $a2,$zero,0x100 /* f077cd8: e7a40244 */ swc1 $f4,0x244($sp) /* f077cdc: c6260010 */ lwc1 $f6,0x10($s1) -/* f077ce0: 0c0099c7 */ jal func0002671c +/* f077ce0: 0c0099c7 */ jal platformGetRidingProps /* f077ce4: e7a60248 */ swc1 $f6,0x248($sp) /* f077ce8: 44807000 */ mtc1 $zero,$f14 /* f077cec: c6080074 */ lwc1 $f8,0x74($s0) @@ -20790,7 +20790,7 @@ glabel liftTick /* f077ffc: 02202025 */ or $a0,$s1,$zero /* f078000: 27a5003c */ addiu $a1,$sp,0x3c /* f078004: 27a60240 */ addiu $a2,$sp,0x240 -/* f078008: 0fc1dd9b */ jal func0f07766c +/* f078008: 0fc1dd9b */ jal platformDisplaceProps /* f07800c: 8fa70034 */ lw $a3,0x34($sp) /* f078010: 1000001c */ b .L0f078084 /* f078014: 8fbf0024 */ lw $ra,0x24($sp) @@ -20833,6 +20833,150 @@ glabel liftTick /* f078090: 27bd0340 */ addiu $sp,$sp,0x340 ); +// Mismatch because goal loads xdiff earlier for multiply with frac. +//void liftTick(struct prop *prop) +//{ +// struct liftobj *lift = (struct liftobj *)prop->obj; +// struct defaultobj *obj = prop->obj; +// struct doorobj *door; // sp820 +// struct pad padcur; // sp736 +// struct pad padaim; // sp652 +// f32 segdist; // sp648 +// f32 xdiff; // sp644 +// f32 ydiff; // sp640 +// f32 zdiff; // sp636 +// struct coord curcentre; // sp624 +// f32 frac; +// s32 move; // sp616 +// struct coord newpos; // sp604 +// s16 newrooms[8]; // sp588 +// struct coord prevpos; // sp576 +// f32 prevdist; // sp572 +// s16 propnums[256]; // sp60 +// s32 stop; +// +// lift->prevpos.x = prop->pos.x; +// lift->prevpos.y = prop->pos.y; +// lift->prevpos.z = prop->pos.z; +// +// // c50 +// if (lift->levelaim != lift->levelcur) { +// // c58 +// // Lift is not at the desired level. So try to move, but not if the lift +// // is disabled or if the door needs to be closed first. +// move = true; +// +// if (obj->flags & OBJFLAG_DEACTIVATED) { +// move = false; +// } else { +// // c84 +// if (lift->doors[lift->levelcur] && !doorIsClosed(lift->doors[lift->levelcur])) { +// doorActivate(lift->doors[lift->levelcur], DOORMODE_CLOSING); +// move = false; +// } +// } +// +// // cb8 +// if (move) { +// prevpos.x = prop->pos.x; +// prevpos.y = prop->pos.y; +// prevpos.z = prop->pos.z; +// +// platformGetRidingProps(prop, propnums, sizeof(propnums)); +// +// if (lift->dist == 0 && lift->speed == 0) { +// // d18 +// func0f08d784(lift->soundtype, lift->base.prop); +// +// if (obj->flags & OBJFLAG_LIFT_TRIGGERDISABLE) { +// obj->flags &= ~OBJFLAG_LIFT_TRIGGERDISABLE; +// obj->flags |= OBJFLAG_DEACTIVATED; +// } +// } +// +// padGetCentre(lift->pads[lift->levelcur], &curcentre); +// padUnpack(lift->pads[lift->levelcur], PADFIELD_POS, &padcur); +// padUnpack(lift->pads[lift->levelaim], PADFIELD_POS, &padaim); +// +// xdiff = padaim.pos.x - padcur.pos.x; +// ydiff = padaim.pos.y - padcur.pos.y; +// zdiff = padaim.pos.z - padcur.pos.z; +// +// segdist = sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff); +// +// prevdist = lift->dist; +// +// // e0c +// func0f06d90c(&lift->dist, segdist, &lift->speed, lift->accel, lift->accel, lift->maxspeed); +// +// // If arriving at the destination, set the distance explicitly +// if (lift->speed < 1 && lift->speed > -1) { +// if (prevdist < segdist && lift->dist >= segdist) { +// lift->dist = segdist; +// } else if (prevdist > 0 && lift->dist <= 0) { +// lift->dist = 0; +// } +// } +// +// // eb0 +// frac = segdist == 0 ? 0 : lift->dist / segdist; +// +// newpos.x = curcentre.x + xdiff * frac; +// newpos.y = curcentre.y + ydiff * frac; +// newpos.z = curcentre.z + zdiff * frac; +// +// if (segdist == lift->dist) { +// // f18 +// lift->dist = 0; +// lift->speed = 0; +// lift->levelcur = lift->levelaim; +// +// func0f08dd44(lift->soundtype, lift->base.prop); +// +// if (obj->flags & OBJFLAG_LIFT_TRIGGERDISABLE) { +// obj->flags &= ~OBJFLAG_LIFT_TRIGGERDISABLE; +// obj->flags |= OBJFLAG_DEACTIVATED; +// } +// +// door = lift->doors[lift->levelcur]; +// +// if (door && door->keyflags == 0) { +// doorActivate(door, DOORMODE_OPENING); +// } +// } +// +// func0f065e74(&prop->pos, prop->rooms, &newpos, newrooms); +// +// prop->pos.x = newpos.x; +// prop->pos.y = newpos.y; +// prop->pos.z = newpos.z; +// +// func0f065c44(prop); +// roomsCopy(newrooms, prop->rooms); +// func0f069c70(obj, true, true); +// func0f070f08(lift, lift->levelcur == lift->levelaim); +// platformDisplaceProps(prop, propnums, &prevpos, &prop->pos); +// } +// } else { +// // 018 +// // Lift is at the aim stop +// door = lift->doors[lift->levelcur]; +// +// if (!door || (doorIsClosed(door) && door->keyflags == 0)) { +// // Find next stop +// // 040 +// stop = lift->levelaim; +// +// do { +// // 048 +// stop = (stop + 1) % 4; +// } while (lift->pads[stop] < 0); +// +// liftGoToStop(lift, stop); +// } +// } +//} + GLOBAL_ASM( glabel escalatorTick /* f078094: 27bdfda0 */ addiu $sp,$sp,-608 @@ -20923,7 +21067,7 @@ glabel escalatorTick /* f0781d4: c6040010 */ lwc1 $f4,0x10($s0) /* f0781d8: afa90030 */ sw $t1,0x30($sp) /* f0781dc: afa7025c */ sw $a3,0x25c($sp) -/* f0781e0: 0c0099c7 */ jal func0002671c +/* f0781e0: 0c0099c7 */ jal platformGetRidingProps /* f0781e4: e7a4023c */ swc1 $f4,0x23c($sp) /* f0781e8: 8fa7025c */ lw $a3,0x25c($sp) /* f0781ec: c6080008 */ lwc1 $f8,0x8($s0) @@ -20970,7 +21114,7 @@ glabel escalatorTick /* f078284: 27a50034 */ addiu $a1,$sp,0x34 /* f078288: 15200003 */ bnez $t1,.L0f078298 /* f07828c: 27a60234 */ addiu $a2,$sp,0x234 -/* f078290: 0fc1dd9b */ jal func0f07766c +/* f078290: 0fc1dd9b */ jal platformDisplaceProps /* f078294: 26070008 */ addiu $a3,$s0,0x8 .L0f078298: /* f078298: 8fbf001c */ lw $ra,0x1c($sp) @@ -27584,7 +27728,7 @@ void hoverbikeTick(struct prop *prop, bool arg1) func0f0714b8(&obj->base, &obj->hov); } - if (obj->base.flags & OBJFLAG_DOORKEEPOPEN) { + if (obj->base.flags & OBJFLAG_DOOR_KEEPOPEN) { func0f072adc(obj, 0, 0, 0); } } @@ -38011,7 +38155,7 @@ s32 weaponGetPickupAmmoQty(struct weaponobj *weapon) return 1; } - if (weapon->base.flags & OBJFLAG_DOORKEEPOPEN) { + if (weapon->base.flags & OBJFLAG_DOOR_KEEPOPEN) { return 0; } @@ -44580,7 +44724,7 @@ void func0f08df10(s32 soundtype, struct prop *prop) void func0f08e0c4(struct doorobj *door) { - door->base.flags &= ~OBJFLAG_DOORKEEPOPEN; + door->base.flags &= ~OBJFLAG_DOOR_KEEPOPEN; door->base.hidden |= OBJHFLAG_00000200; func0f08d784(door->soundtype, door->base.prop); @@ -44606,7 +44750,7 @@ void func0f08e0c4(struct doorobj *door) void func0f08e1a0(struct doorobj *door) { - door->base.flags &= ~OBJFLAG_DOORKEEPOPEN; + door->base.flags &= ~OBJFLAG_DOOR_KEEPOPEN; func0f08daa8(door->soundtype, door->base.prop); diff --git a/src/include/constants.h b/src/include/constants.h index c95a2b9d6..1019a79a6 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -1909,38 +1909,39 @@ #define NUM_WEAPONS 94 // obj->flags -#define OBJFLAG_00000001 0x00000001 // Editor: "Fall to Ground" -#define OBJFLAG_00000002 0x00000002 // Editor: "In Air Rotated 90 Deg Upside-Down" -#define OBJFLAG_00000004 0x00000004 // Editor: "In Air Upside-Down" -#define OBJFLAG_00000008 0x00000008 // Editor: "In Air" -#define OBJFLAG_00000010 0x00000010 // Editor: "Scale to Pad Bounds" -#define OBJFLAG_00000020 0x00000020 // Editor: "X to Pad Bounds" -#define OBJFLAG_00000040 0x00000040 // Editor: "Y to Pad Bounds" -#define OBJFLAG_00000080 0x00000080 // Editor: "Z to Pad Bounds" -#define OBJFLAG_00000100 0x00000100 // G5 mines, Air Base brown door, AF1 grate and escape door, Defense shuttle, Ruins mines, MBR lift door. Editor suggests "Force Collisions" but this seems wrong -#define OBJFLAG_00000200 0x00000200 // Editor: "Special Environment Mapping" -#define OBJFLAG_ILLUMINATED 0x00000400 -#define OBJFLAG_00000800 0x00000800 // Editor: "Free Standing Glass" -#define OBJFLAG_00001000 0x00001000 // Editor: "Absolute Position" -#define OBJFLAG_00002000 0x00002000 // AF1 commhubs. Editor suggests "Weapon Not Dropped" -#define OBJFLAG_00004000 0x00004000 // Editor: "Assigned to Actor" -#define OBJFLAG_00008000 0x00008000 // Editor: "Embedded Object" -#define OBJFLAG_00010000 0x00010000 // Not used in scripts -#define OBJFLAG_INVINCIBLE 0x00020000 -#define OBJFLAG_COLLECTABLE 0x00040000 -#define OBJFLAG_00080000 0x00080000 // Thrown laptop? -#define OBJFLAG_UNCOLLECTABLE 0x00100000 -#define OBJFLAG_00200000 0x00200000 // Editor: "Bounce and Destroy If Shot" -#define OBJFLAG_00400000 0x00400000 // Not used in scripts -#define OBJFLAG_00800000 0x00800000 // Not used in scripts -#define OBJFLAG_01000000 0x01000000 // Editor: "Embedded Object" -#define OBJFLAG_CANNOT_ACTIVATE 0x02000000 // Makes it do nothing if player presses B on object. Used mostly for doors. -#define OBJFLAG_04000000 0x04000000 // Editor: "AI Sees Through Door/Object" -#define OBJFLAG_08000000 0x08000000 // Not used in scripts -#define OBJFLAG_DEACTIVATED 0x10000000 -#define OBJFLAG_20000000 0x20000000 // Editor: "Door Opens Backwards/Special Function/Conceal Weapon" -#define OBJFLAG_DOORKEEPOPEN 0x40000000 // Editor: "Door open by default/Empty weapon" -#define OBJFLAG_CHOPPER_INACTIVE 0x80000000 // Or lift disabled +#define OBJFLAG_00000001 0x00000001 // Editor: "Fall to Ground" +#define OBJFLAG_00000002 0x00000002 // Editor: "In Air Rotated 90 Deg Upside-Down" +#define OBJFLAG_00000004 0x00000004 // Editor: "In Air Upside-Down" +#define OBJFLAG_00000008 0x00000008 // Editor: "In Air" +#define OBJFLAG_00000010 0x00000010 // Editor: "Scale to Pad Bounds" +#define OBJFLAG_00000020 0x00000020 // Editor: "X to Pad Bounds" +#define OBJFLAG_00000040 0x00000040 // Editor: "Y to Pad Bounds" +#define OBJFLAG_00000080 0x00000080 // Editor: "Z to Pad Bounds" +#define OBJFLAG_00000100 0x00000100 // G5 mines, Air Base brown door, AF1 grate and escape door, Defense shuttle, Ruins mines, MBR lift door. Editor suggests "Force Collisions" but this seems wrong +#define OBJFLAG_00000200 0x00000200 // Editor: "Special Environment Mapping" +#define OBJFLAG_ILLUMINATED 0x00000400 +#define OBJFLAG_00000800 0x00000800 // Editor: "Free Standing Glass" +#define OBJFLAG_00001000 0x00001000 // Editor: "Absolute Position" +#define OBJFLAG_00002000 0x00002000 // AF1 commhubs. Editor suggests "Weapon Not Dropped" +#define OBJFLAG_00004000 0x00004000 // Editor: "Assigned to Actor" +#define OBJFLAG_00008000 0x00008000 // Editor: "Embedded Object" +#define OBJFLAG_00010000 0x00010000 // Not used in scripts +#define OBJFLAG_INVINCIBLE 0x00020000 +#define OBJFLAG_COLLECTABLE 0x00040000 +#define OBJFLAG_00080000 0x00080000 // Thrown laptop? +#define OBJFLAG_UNCOLLECTABLE 0x00100000 +#define OBJFLAG_00200000 0x00200000 // Editor: "Bounce and Destroy If Shot" +#define OBJFLAG_00400000 0x00400000 // Not used in scripts +#define OBJFLAG_00800000 0x00800000 // Not used in scripts +#define OBJFLAG_01000000 0x01000000 // Editor: "Embedded Object" +#define OBJFLAG_CANNOT_ACTIVATE 0x02000000 // Makes it do nothing if player presses B on object. Used mostly for doors. +#define OBJFLAG_04000000 0x04000000 // Editor: "AI Sees Through Door/Object" +#define OBJFLAG_08000000 0x08000000 // Not used in scripts +#define OBJFLAG_DEACTIVATED 0x10000000 +#define OBJFLAG_20000000 0x20000000 // Editor: "Door Opens Backwards/Special Function/Conceal Weapon" +#define OBJFLAG_DOOR_KEEPOPEN 0x40000000 // Editor: "Door open by default/Empty weapon" +#define OBJFLAG_LIFT_TRIGGERDISABLE 0x40000000 +#define OBJFLAG_CHOPPER_INACTIVE 0x80000000 // Or lift disabled // obj->flags2 #define OBJFLAG2_00000001 0x00000001 // Used only in CI Training diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index 3d622b80b..069f98c4c 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -129,7 +129,7 @@ u32 func0f070ca0(void); void liftActivate(struct prop *prop, u8 liftnum); struct prop *liftFindByPad(s16 padnum); u32 func0f070eac(void); -void func0f070f08(struct liftobj *lift, u32 arg0); +void func0f070f08(struct liftobj *lift, bool arg0); void liftGoToStop(struct liftobj *lift, s32 stopnum); u32 func0f071360(void); void func0f0713e4(struct defaultobj *obj, struct hov *hov, struct coord *coord, s16 *rooms, f32 *matrix); @@ -150,7 +150,7 @@ u32 func0f073c6c(struct defaultobj *obj, bool *arg1); void doorTick(struct prop *doorprop); void func0f07731c(struct prop *door, s32 playercount); u32 func0f077448(void); -u32 func0f07766c(void); +void platformDisplaceProps(struct prop *platform, s16 *propnums, struct coord *prevpos, struct coord *newpos); void liftTick(struct prop *lift); void escalatorTick(struct prop *escalator); void cameraTick(struct prop *camera); diff --git a/src/include/lib/lib_233c0.h b/src/include/lib/lib_233c0.h index ffac64538..ae6928318 100644 --- a/src/include/lib/lib_233c0.h +++ b/src/include/lib/lib_233c0.h @@ -57,7 +57,7 @@ u32 func000263e4(void); u32 func00026520(void); u32 func00026654(void); u32 func000266a4(void); -u32 func0002671c(void); +void platformGetRidingProps(struct prop *platform, s16 *propnums, u32 len); u32 func00026a04(void); u32 func00026e7c(void); u32 func0002709c(void); diff --git a/src/include/types.h b/src/include/types.h index 955d83ae7..69b03aa38 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -1196,9 +1196,9 @@ struct liftobj { // objtype 30 /*0x64*/ struct doorobj *doors[4]; /*0x74*/ f32 dist; /*0x78*/ f32 speed; - /*0x7c*/ u32 accel; - /*0x80*/ u32 maxspeed; - /*0x84*/ u8 soundtype; + /*0x7c*/ f32 accel; + /*0x80*/ f32 maxspeed; + /*0x84*/ s8 soundtype; /*0x85*/ s8 levelcur; /*0x86*/ s8 levelaim; /*0x88*/ struct coord prevpos; diff --git a/src/lib/lib_233c0.c b/src/lib/lib_233c0.c index 76d4aefdd..2dbc89a24 100644 --- a/src/lib/lib_233c0.c +++ b/src/lib/lib_233c0.c @@ -3698,7 +3698,7 @@ glabel func000266a4 ); GLOBAL_ASM( -glabel func0002671c +glabel platformGetRidingProps /* 2671c: 27bdfd88 */ addiu $sp,$sp,-632 /* 26720: afbf003c */ sw $ra,0x3c($sp) /* 26724: afa5027c */ sw $a1,0x27c($sp)