From d5aaeaf5d8970902e330851a7a94ab00b52f76fd Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 6 Jun 2020 17:45:28 +1000 Subject: [PATCH] Attempt to decompile doorTick --- 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/chr/chraicommands.c | 2 +- src/game/data/data_00e460.c | 2 +- src/game/propobj.c | 167 +++++++++++++++++++++++----- src/include/constants.h | 10 +- src/include/game/data/data_00e460.h | 2 +- src/include/game/propobj.h | 8 +- src/include/types.h | 17 +-- 15 files changed, 253 insertions(+), 135 deletions(-) diff --git a/src/files/setup/setupcave.c b/src/files/setup/setupcave.c index efdffda02..499861934 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_40000000) + set_object_flag(OBJ_SAFEDOOR, OBJFLAG_DOORKEEPOPEN) 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 e37a7974f..4285b7a05 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_40000000) - set_object_flag(OBJ_LASER_1B, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_1C, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_1D, OBJFLAG_40000000) + 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) 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_40000000) - set_object_flag(OBJ_LASER_2B, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_2C, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_2D, OBJFLAG_40000000) + 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) 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_40000000) - set_object_flag(OBJ_LASER_3B, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_3C, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_3D, OBJFLAG_40000000) + 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) 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_40000000) - set_object_flag(OBJ_LASER_4B, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_4C, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_4D, OBJFLAG_40000000) + 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) 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_40000000) - set_object_flag(OBJ_LASER_2A, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_3A, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_4A, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_1B, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_2B, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_3B, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_4B, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_1C, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_2C, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_3C, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_4C, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_1D, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_2D, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_3D, OBJFLAG_40000000) - set_object_flag(OBJ_LASER_4D, OBJFLAG_40000000) + 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_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 edb004c82..eef89d2f5 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_40000000) \ + set_object_flag(door, OBJFLAG_DOORKEEPOPEN) \ 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_40000000) + set_object_flag(0x40, OBJFLAG_DOORKEEPOPEN) 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_40000000) + set_object_flag(0x37, OBJFLAG_DOORKEEPOPEN) restart_timer beginloop(0x08) diff --git a/src/files/setup/setupimp.c b/src/files/setup/setupimp.c index 594aeffd6..d8bd04112 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_40000000) + set_object_flag(0x51, OBJFLAG_DOORKEEPOPEN) 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 d6cd71108..00ff5d448 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_40000000) - set_object_flag(OBJ_HANGARDOOR2, OBJFLAG_40000000) - set_object_flag(OBJ_HANGARDOOR3, OBJFLAG_40000000) - set_object_flag(OBJ_HANGARDOOR4, OBJFLAG_40000000) + 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) restart_timer beginloop(0x09) @@ -1296,8 +1296,8 @@ u8 func1008_hangar_lifts[] = { // Deactivate lift and open door label(0x66) - set_object_flag(0x39, OBJFLAG_40000000) - set_object_flag(0x3a, OBJFLAG_40000000) + set_object_flag(0x39, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x3a, OBJFLAG_DOORKEEPOPEN) 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_40000000) - unset_object_flag(0x3a, OBJFLAG_40000000) + unset_object_flag(0x39, OBJFLAG_DOORKEEPOPEN) + unset_object_flag(0x3a, OBJFLAG_DOORKEEPOPEN) 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_40000000) - set_object_flag(OBJ_HANGARDOOR2, OBJFLAG_40000000) - set_object_flag(OBJ_HANGARDOOR3, OBJFLAG_40000000) - set_object_flag(OBJ_HANGARDOOR4, OBJFLAG_40000000) + 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) beginloop(0x08) if_camera_animating(/*goto*/ 0x2c) diff --git a/src/files/setup/setuplue.c b/src/files/setup/setuplue.c index f8b92f56c..6111e60ea 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_40000000) - set_object_flag(0x1f, OBJFLAG_40000000) - set_object_flag(0x20, OBJFLAG_40000000) - set_object_flag(0x21, OBJFLAG_40000000) - set_object_flag(0x22, OBJFLAG_40000000) - set_object_flag(0x23, OBJFLAG_40000000) - set_object_flag(0x24, OBJFLAG_40000000) + 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) 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_40000000) - set_object_flag(0x1f, OBJFLAG_40000000) - set_object_flag(0x20, OBJFLAG_40000000) - set_object_flag(0x21, OBJFLAG_40000000) - set_object_flag(0x22, OBJFLAG_40000000) - set_object_flag(0x23, OBJFLAG_40000000) - set_object_flag(0x24, OBJFLAG_40000000) + 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) 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 6ff02e4a6..5bb0bfd46 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_40000000) + set_object_flag(0x03, OBJFLAG_DOORKEEPOPEN) 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_40000000) + set_object_flag(0x04, OBJFLAG_DOORKEEPOPEN) 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_40000000) + set_object_flag(0x05, OBJFLAG_DOORKEEPOPEN) 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_40000000) + set_object_flag(0x0f, OBJFLAG_DOORKEEPOPEN) 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_40000000) + set_object_flag(0x03, OBJFLAG_DOORKEEPOPEN) open_door(0x04) - set_object_flag(0x04, OBJFLAG_40000000) + set_object_flag(0x04, OBJFLAG_DOORKEEPOPEN) open_door(0x05) - set_object_flag(0x05, OBJFLAG_40000000) + set_object_flag(0x05, OBJFLAG_DOORKEEPOPEN) label(0x2e) set_ailist(CHR_SELF, GAILIST_IDLE) endlist diff --git a/src/files/setup/setuptra.c b/src/files/setup/setuptra.c index a9a55bd91..8bebf3b69 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_40000000) - set_object_flag(0x2d, OBJFLAG_40000000) + set_object_flag(0x2c, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2d, OBJFLAG_DOORKEEPOPEN) 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_40000000) - set_object_flag(0x2f, OBJFLAG_40000000) + set_object_flag(0x2e, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2f, OBJFLAG_DOORKEEPOPEN) 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_40000000) - set_object_flag(0x2d, OBJFLAG_40000000) + set_object_flag(0x2c, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2d, OBJFLAG_DOORKEEPOPEN) reloop(0x04) // Terminal 2 @@ -2073,8 +2073,8 @@ u8 func100f_terminals[] = { label(0x32) open_door(0x2e) open_door(0x2f) - set_object_flag(0x2e, OBJFLAG_40000000) - set_object_flag(0x2f, OBJFLAG_40000000) + set_object_flag(0x2e, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2f, OBJFLAG_DOORKEEPOPEN) reloop(0x04) // Wait 2 seconds @@ -2240,7 +2240,7 @@ u8 func1012_hoverbike_auto_doors[] = { reloop(0x04) label(0x06) - set_object_flag(0x0a, OBJFLAG_40000000) + set_object_flag(0x0a, OBJFLAG_DOORKEEPOPEN) open_door(0x0a) reloop(0x04) @@ -2250,7 +2250,7 @@ u8 func1012_hoverbike_auto_doors[] = { reloop(0x04) label(0x06) - set_object_flag(0x0b, OBJFLAG_40000000) + set_object_flag(0x0b, OBJFLAG_DOORKEEPOPEN) open_door(0x0b) reloop(0x04) @@ -2260,8 +2260,8 @@ u8 func1012_hoverbike_auto_doors[] = { reloop(0x04) label(0x06) - set_object_flag(0x08, OBJFLAG_40000000) - set_object_flag(0x09, OBJFLAG_40000000) + set_object_flag(0x08, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x09, OBJFLAG_DOORKEEPOPEN) 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_40000000) + set_object_flag(0x0c, OBJFLAG_DOORKEEPOPEN) open_door(0x0c) reloop(0x04) @@ -2282,7 +2282,7 @@ u8 func1012_hoverbike_auto_doors[] = { reloop(0x04) label(0x06) - set_object_flag(0x05, OBJFLAG_40000000) + set_object_flag(0x05, OBJFLAG_DOORKEEPOPEN) 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_40000000) - set_object_flag(0x2d, OBJFLAG_40000000) + set_object_flag(0x2c, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2d, OBJFLAG_DOORKEEPOPEN) 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_40000000) - set_object_flag(0x2d, OBJFLAG_40000000) + set_object_flag(0x2c, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2d, OBJFLAG_DOORKEEPOPEN) 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_40000000) - set_object_flag(0x2f, OBJFLAG_40000000) + set_object_flag(0x2e, OBJFLAG_DOORKEEPOPEN) + set_object_flag(0x2f, OBJFLAG_DOORKEEPOPEN) endloop(0x04) // Terminal destroyed diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index edb6427e5..aa7d65563 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -2571,7 +2571,7 @@ bool aiIfDoorState(void) } else { pass = (cmd[3] & DOORSTATE_OPEN) != 0; } - } else if (door->mode == DOORMODE_OPENING || door->mode == DOORMODE_3) { + } else if (door->mode == DOORMODE_OPENING || door->mode == DOORMODE_WAITING) { pass = (cmd[3] & DOORSTATE_OPENING) != 0; } else if (door->mode == DOORMODE_CLOSING) { pass = (cmd[3] & DOORSTATE_CLOSING) != 0; diff --git a/src/game/data/data_00e460.c b/src/game/data/data_00e460.c index bf53681f3..8d98dc9bf 100644 --- a/src/game/data/data_00e460.c +++ b/src/game/data/data_00e460.c @@ -199,7 +199,7 @@ u32 var80069bc4 = 0x00000000; u32 var80069bc8 = 0x00000003; u32 var80069bcc = 0x00000014; u32 var80069bd0 = 0x00000078; -u32 var80069bd4 = 0x00000000; +u32 g_DebugDoor = 0; u32 var80069bd8 = 0x00000000; u32 var80069bdc = 0xc4bfff5c; u32 var80069be0 = 0xc3ff8000; diff --git a/src/game/propobj.c b/src/game/propobj.c index cc0737834..60d560308 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -97,13 +97,6 @@ const char var7f1a9fc4[] = "propobj.c"; const char var7f1a9fd0[] = "kkg"; const char var7f1a9fd4[] = "kkd"; const char var7f1a9fd8[] = "kkp"; -const char var7f1a9fdc[] = "debugdoor"; -const char var7f1a9fe8[] = "************** RWI : Door Stuck Mate -> Sort it out\n"; -const char var7f1aa020[] = "propobj.c"; -const char var7f1aa02c[] = "propobj.c"; -const char var7f1aa038[] = "propobj.c"; -const char var7f1aa044[] = "propobj.c"; -const char var7f1aa050[] = "HC: %x - visible\n"; GLOBAL_ASM( glabel func0f066310 @@ -19235,8 +19228,10 @@ glabel var7f1aa438 /* f076f2c: 27bd0608 */ addiu $sp,$sp,0x608 ); +const char var7f1a9fdc[] = "debugdoor"; + GLOBAL_ASM( -glabel func0f076f30 +glabel doorTick .late_rodata glabel var7f1aa43c .word 0x3e99999a @@ -19247,16 +19242,16 @@ glabel var7f1aa43c /* f076f3c: afa40078 */ sw $a0,0x78($sp) /* f076f40: 8c900004 */ lw $s0,0x4($a0) /* f076f44: 3c047f1b */ lui $a0,%hi(var7f1a9fdc) -/* f076f48: 3c058007 */ lui $a1,%hi(var80069bd4) +/* f076f48: 3c058007 */ lui $a1,%hi(g_DebugDoor) /* f076f4c: 8e0f0018 */ lw $t7,0x18($s0) -/* f076f50: 24a59bd4 */ addiu $a1,$a1,%lo(var80069bd4) +/* f076f50: 24a59bd4 */ addiu $a1,$a1,%lo(g_DebugDoor) /* f076f54: 24849fdc */ addiu $a0,$a0,%lo(var7f1a9fdc) /* f076f58: afaf0070 */ sw $t7,0x70($sp) /* f076f5c: c604007c */ lwc1 $f4,0x7c($s0) /* f076f60: 0c0036cc */ jal func0000db30 /* f076f64: e7a4006c */ swc1 $f4,0x6c($sp) -/* f076f68: 3c028007 */ lui $v0,%hi(var80069bd4) -/* f076f6c: 8c429bd4 */ lw $v0,%lo(var80069bd4)($v0) +/* f076f68: 3c028007 */ lui $v0,%hi(g_DebugDoor) +/* f076f6c: 8c429bd4 */ lw $v0,%lo(g_DebugDoor)($v0) /* f076f70: 24010001 */ addiu $at,$zero,0x1 /* f076f74: 50400013 */ beqzl $v0,.L0f076fc4 /* f076f78: 8e0200c0 */ lw $v0,0xc0($s0) @@ -19439,7 +19434,7 @@ glabel var7f1aa43c /* f0771f0: 55e00004 */ bnezl $t7,.L0f077204 /* f0771f4: 8fb90070 */ lw $t9,0x70($sp) .L0f0771f8: -/* f0771f8: 0fc23c47 */ jal func0f08f11c +/* f0771f8: 0fc23c47 */ jal doorDoCalc /* f0771fc: 02002025 */ or $a0,$s0,$zero /* f077200: 8fb90070 */ lw $t9,0x70($sp) .L0f077204: @@ -19518,6 +19513,128 @@ glabel var7f1aa43c /* f077318: 00000000 */ sll $zero,$zero,0x0 ); +// Mismatch because `g_DebugDoor == (u32)doorprop` is swapped, +// and regalloc near 004. +//void doorTick(struct prop *doorprop) +//{ +// struct doorobj *door = (struct doorobj *)doorprop->obj; +// struct model *model = door->base.model; +// f32 prevfrac = door->frac; +// +// func0000db30("debugdoor", &g_DebugDoor); +// +// // If g_DebugDoor is set to 1 or to the address of this door, +// // print the distance to the door to console +// if (g_DebugDoor) { +// if (g_DebugDoor == 1 || g_DebugDoor == (u32)doorprop) { +// f32 xdiff = doorprop->pos.x - g_Vars.players[0]->cam_pos.x; +// f32 zdiff = doorprop->pos.z - g_Vars.players[0]->cam_pos.z; +// +// sqrtf(xdiff * xdiff + zdiff * zdiff); +// } +// } +// +// // If door should autoclose this tick +// if (door->lastopen60 > 0 +// && door->mode == DOORMODE_IDLE +// && (door->base.flags & OBJFLAG_DOORKEEPOPEN) == 0 +// && door->lastopen60 < g_Vars.lvframe60 - door->autoclosetime) { +// // 004 +// // Check if any sibling has DOORFLAG_0010 +// struct doorobj *loopdoor = door->sibling; +// s32 hasflag = door->doorflags & DOORFLAG_0010; +// +// while (loopdoor && loopdoor != door && !hasflag) { +// hasflag = loopdoor->doorflags & DOORFLAG_0010; +// loopdoor = loopdoor->sibling; +// } +// +// if (hasflag == false) { +// doorActivate(door, DOORMODE_CLOSING); +// } else if (door->doorflags & DOORFLAG_0010) { +// // Check if any sibling has a false return value +// s32 pass = func0f08c040(door) == false; +// struct doorobj *loopdoor = door->sibling; +// +// while (loopdoor && loopdoor != door && !pass) { +// pass = func0f08c040(loopdoor) == false; +// loopdoor = loopdoor->sibling; +// } +// +// if (pass) { +// // One or all siblings is set to keep open? +// struct doorobj *loopdoor = door->sibling; +// door->lastopen60 = g_Vars.lvframe60; +// +// while (loopdoor && loopdoor != door) { +// loopdoor->lastopen60 = g_Vars.lvframe60; +// loopdoor = loopdoor->sibling; +// } +// } else { +// doorActivate(door, DOORMODE_CLOSING); +// } +// } +// } +// +// // If waiting for sibling to close, check for that +// if (door->mode == DOORMODE_WAITING) { +// s32 shouldopen = true; +// struct doorobj *loopdoor = door->sibling; +// +// while (loopdoor && loopdoor != door) { +// if (loopdoor->mode != DOORMODE_IDLE || loopdoor->frac > 0) { +// shouldopen = false; +// } +// +// loopdoor = loopdoor->sibling; +// } +// +// if (shouldopen) { +// doorSetMode(door, DOORMODE_OPENING); +// } +// } +// +// // DOORTYPE_8 is unused - not sure what this does +// if (door->doortype == DOORTYPE_8 +// && doorIsClosed(door) +// && func0f0665ac(door)) { +// doorActivateWrapper(doorprop, false); +// } +// +// // Update frac +// if (door->lastcalc60 < g_Vars.lvframe60 || g_Vars.lvupdate240 == 0) { +// doorDoCalc(door); +// } +// +// // Consider playing a sound effect +// if (model->unk08->unk04 == &stagethinglist_20ec8) { +// f32 soundpoint = door->maxfrac * 0.3f; +// +// if (door->frac > soundpoint) { +// if (prevfrac <= soundpoint) { +// // frac increased past the soundpoint +// // Sounds like a door closing? +// func0f0939f8(NULL, doorprop, 0x8014, -1, +// -1, 0, 0, 12, 0, -1, 0, -1, -1, -1, -1); +// } +// } else { +// if (prevfrac > soundpoint) { +// // frac decreased past the soundpoint +// // Also sounds like a door closing +// func0f0939f8(NULL, doorprop, 0x8015, -1, +// -1, 0, 0, 12, 0, -1, 0, -1, -1, -1, -1); +// } +// } +// } +//} + +const char var7f1a9fe8[] = "************** RWI : Door Stuck Mate -> Sort it out\n"; +const char var7f1aa020[] = "propobj.c"; +const char var7f1aa02c[] = "propobj.c"; +const char var7f1aa038[] = "propobj.c"; +const char var7f1aa044[] = "propobj.c"; +const char var7f1aa050[] = "HC: %x - visible\n"; + GLOBAL_ASM( glabel func0f07731c /* f07731c: 27bdffd0 */ addiu $sp,$sp,-48 @@ -28581,7 +28698,7 @@ glabel var7f1aa6ec /* f07f1dc: 24010001 */ addiu $at,$zero,0x1 /* f07f1e0: 54410006 */ bnel $v0,$at,.L0f07f1fc /* f07f1e4: 24010006 */ addiu $at,$zero,0x6 -/* f07f1e8: 0fc1dbcc */ jal func0f076f30 +/* f07f1e8: 0fc1dbcc */ jal doorTick /* f07f1ec: 02202025 */ or $a0,$s1,$zero /* f07f1f0: 10000067 */ beqz $zero,.L0f07f390 /* f07f1f4: 92020003 */ lbu $v0,0x3($s0) @@ -38557,7 +38674,7 @@ s32 weaponGetPickupAmmoQty(struct weaponobj *weapon) return 1; } - if (weapon->base.flags & OBJFLAG_40000000) { + if (weapon->base.flags & OBJFLAG_DOORKEEPOPEN) { return 0; } @@ -45126,7 +45243,7 @@ void func0f08df10(s32 soundtype, struct prop *prop) void func0f08e0c4(struct doorobj *door) { - door->base.flags &= ~OBJFLAG_40000000; + door->base.flags &= ~OBJFLAG_DOORKEEPOPEN; door->base.hidden |= OBJHFLAG_00000200; func0f08d784(door->soundtype, door->base.prop); @@ -45152,7 +45269,7 @@ void func0f08e0c4(struct doorobj *door) void func0f08e1a0(struct doorobj *door) { - door->base.flags &= ~OBJFLAG_40000000; + door->base.flags &= ~OBJFLAG_DOORKEEPOPEN; func0f08daa8(door->soundtype, door->base.prop); @@ -45232,7 +45349,7 @@ void func0f08e2ac(struct doorobj *door) void doorSetMode(struct doorobj *door, s32 newmode) { if (newmode == DOORMODE_OPENING) { - if (door->mode == DOORMODE_IDLE || door->mode == DOORMODE_3) { + if (door->mode == DOORMODE_IDLE || door->mode == DOORMODE_WAITING) { func0f08e0c4(door); } @@ -45242,9 +45359,9 @@ void doorSetMode(struct doorobj *door, s32 newmode) func0f08e1a0(door); } - if ((door->mode != DOORMODE_IDLE && door->mode != DOORMODE_3) || door->frac > 0) { + if ((door->mode != DOORMODE_IDLE && door->mode != DOORMODE_WAITING) || door->frac > 0) { door->mode = newmode; - } else if (door->mode == DOORMODE_3) { + } else if (door->mode == DOORMODE_WAITING) { door->mode = DOORMODE_IDLE; } } else { @@ -45262,7 +45379,7 @@ void doorActivate(struct doorobj *door, s32 newmode) siblingmode = DOORMODE_CLOSING; if (door->mode == DOORMODE_IDLE) { - newmode = DOORMODE_3; + newmode = DOORMODE_WAITING; } } @@ -45278,12 +45395,12 @@ void doorActivate(struct doorobj *door, s32 newmode) s32 doorIsClosed(struct doorobj *door) { - return (door->mode == DOORMODE_IDLE || door->mode == DOORMODE_3) && door->frac <= 0; + return (door->mode == DOORMODE_IDLE || door->mode == DOORMODE_WAITING) && door->frac <= 0; } s32 doorIsOpen(struct doorobj *door) { - return (door->mode == DOORMODE_IDLE || door->mode == DOORMODE_3) && door->frac >= door->maxfrac; + return (door->mode == DOORMODE_IDLE || door->mode == DOORMODE_WAITING) && door->frac >= door->maxfrac; } GLOBAL_ASM( @@ -46203,7 +46320,7 @@ glabel func0f08ed74 //} GLOBAL_ASM( -glabel func0f08f11c +glabel doorDoCalc /* f08f11c: 27bdffc8 */ addiu $sp,$sp,-56 /* f08f120: afb30028 */ sw $s3,0x28($sp) /* f08f124: afb20024 */ sw $s2,0x24($sp) @@ -47212,7 +47329,7 @@ void doorActivateWrapper(struct prop *doorprop, bool arg1) struct doorobj *door = doorprop->door; if (func0f066310(doorprop, arg1) == 0) { - if (door->mode == DOORMODE_OPENING || door->mode == DOORMODE_3) { + if (door->mode == DOORMODE_OPENING || door->mode == DOORMODE_WAITING) { doorActivate(door, DOORMODE_CLOSING); } else if (door->mode == DOORMODE_CLOSING) { doorActivate(door, DOORMODE_OPENING); diff --git a/src/include/constants.h b/src/include/constants.h index 828810408..08b3cdecf 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -516,10 +516,10 @@ #define DOORFLAG_0800 0x0800 // Non-CI lasers, and floor grates #define DOORFLAG_4000 0x4000 // Two Investigation vertical doors after lasers -#define DOORMODE_IDLE 0 -#define DOORMODE_OPENING 1 -#define DOORMODE_CLOSING 2 -#define DOORMODE_3 3 +#define DOORMODE_IDLE 0 +#define DOORMODE_OPENING 1 +#define DOORMODE_CLOSING 2 +#define DOORMODE_WAITING 3 // Waiting for sibling door to close. Eg. Dam gates in GE // For AI commands - bitwise ORable #define DOORSTATE_CLOSED 1 @@ -1902,7 +1902,7 @@ #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_40000000 0x40000000 // Editor: "Door open by default/Empty weapon" +#define OBJFLAG_DOORKEEPOPEN 0x40000000 // Editor: "Door open by default/Empty weapon" #define OBJFLAG_INTERCEPTOR_DISABLED 0x80000000 // Or lift disabled // obj->flags2 diff --git a/src/include/game/data/data_00e460.h b/src/include/game/data/data_00e460.h index ab29c656f..2c12f8e84 100644 --- a/src/include/game/data/data_00e460.h +++ b/src/include/game/data/data_00e460.h @@ -68,7 +68,7 @@ extern u32 var80069bbc; extern u32 var80069bc8; extern u32 var80069bcc; extern u32 var80069bd0; -extern u32 var80069bd4; +extern u32 g_DebugDoor; extern u32 var80069bd8; extern u32 var80069c48; extern u32 var80069cc4; diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index 7e1473bc8..248c9f8ab 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -15,7 +15,7 @@ void countdownTimerSetValue(f32 frames); void countdownTimerSetVisible(u32 flag, bool show); void countdownTimerTick(void); bool func0f066310(struct prop *doorprop, bool arg1); -u32 func0f0665ac(void); +bool func0f0665ac(struct doorobj *door); u32 func0f066640(void); u32 func0f0666cc(void); u32 func0f0667ac(void); @@ -147,7 +147,7 @@ u32 func0f0732d4(void); u32 func0f073478(void); u32 func0f073ae8(void); u32 func0f073c6c(void); -u32 func0f076f30(void); +void doorTick(struct prop *doorprop); u32 func0f07731c(void); u32 func0f077448(void); u32 func0f07766c(void); @@ -286,7 +286,7 @@ bool func0f08bd00(struct prop *playerprop, struct prop *doorprop); u32 func0f08bdd4(void); u32 func0f08be80(void); u32 func0f08bf78(void); -u32 func0f08c040(void); +s32 func0f08c040(struct doorobj *door); void func0f08c190(void); u32 func0f08c424(void); u32 func0f08c484(void); @@ -317,7 +317,7 @@ u32 func0f08e8ac(void); bool func0f08e9e4(struct coord *arg); void func0f08ea50(struct doorobj *door); bool func0f08ed74(struct doorobj *door); -u32 func0f08f11c(void); +void doorDoCalc(struct doorobj *door); u32 func0f08f538(void); u32 func0f08f604(void); u32 func0f08f968(void); diff --git a/src/include/types.h b/src/include/types.h index 286dfbe20..4b83d3b02 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -125,12 +125,19 @@ struct anim { /*0x88*/ u32 animscale; }; +struct stagethinglist { + u16 stage; + u16 numthings; + u16 *things; +}; + struct model08_00 { u16 unk00; }; struct model08 { struct model08_00 *unk00; + struct stagethinglist *unk04; }; struct model10 { @@ -887,7 +894,7 @@ struct doorobj { // objtype 0x01 /*0x70*/ u16 doorflags; /*0x72*/ u16 doortype; /*0x74*/ u32 keyflags; - /*0x78*/ u32 autoclosetime; + /*0x78*/ s32 autoclosetime; /*0x7c*/ f32 frac; /*0x80*/ f32 fracspeed; /*0x84*/ s8 mode; @@ -906,7 +913,7 @@ struct doorobj { // objtype 0x01 /*0xb4*/ u32 unkb4; /*0xb8*/ u32 unkb8; /*0xbc*/ struct doorobj *sibling; - /*0xc0*/ u32 lastopen60; + /*0xc0*/ s32 lastopen60; /*0xc4*/ s16 portal; /*0xc6*/ s8 soundtype; /*0xc7*/ s8 fadetime60; @@ -2970,12 +2977,6 @@ struct menu_dialog { struct menu_dialog *nextsibling; }; -struct stagethinglist { - u16 stage; - u16 numthings; - u16 *things; -}; - struct twowords { u32 unk00; u32 unk04;