From 2f8d66db554c970c295835132e51c839d5148195 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 28 May 2020 20:21:16 +1000 Subject: [PATCH] Discover and document AI commands if_target_nearly_in_sight and if_nearly_in_targets_sight and attempt to decompile func0002f308 --- src/files/setup/setupark.c | 6 ++-- src/files/setup/setupate.c | 2 +- src/files/setup/setupazt.c | 4 +-- src/files/setup/setupcave.c | 18 +++++------ src/files/setup/setuppam.c | 6 ++-- src/files/setup/setuppete.c | 6 ++-- src/files/setup/setupsev.c | 10 +++--- src/game/chr/chraction.c | 12 ++++---- src/game/chr/chrai.c | 4 +-- src/game/chr/chraicommands.c | 12 ++++---- src/game/data/ailists.c | 24 +++++++-------- src/include/commands.h | 19 +++++++++--- src/include/game/chr/chraction.h | 4 +-- src/include/game/chr/chraicommands.h | 4 +-- src/include/lib/lib_233c0.h | 6 ++-- src/lib/lib_233c0.c | 46 ++++++++++++++++++++++++++-- 16 files changed, 117 insertions(+), 66 deletions(-) diff --git a/src/files/setup/setupark.c b/src/files/setup/setupark.c index d4046fc86..c73aab11d 100644 --- a/src/files/setup/setupark.c +++ b/src/files/setup/setupark.c @@ -2066,7 +2066,7 @@ u8 func040d_cass[] = { label(0x00) set_stage_flag(STAGEFLAG_TOP_GUARDS_ATTACKING) - // Wait until Jo not in top room + // Wait until Cass not in top room beginloop(0x2c) if_chr_in_room(CHR_SELF, 0x00, 0x003a, /*goto*/ 0x20) if_chr_in_room(CHR_SELF, 0x00, 0x003b, /*goto*/ 0x20) @@ -2079,9 +2079,9 @@ u8 func040d_cass[] = { label(0x00) chr_toggle_p1p2(CHR_SELF) set_target_chr(CHR_P1P2) - if_within_units_of_sight(30, /*goto*/ 0x20) + if_nearly_in_targets_sight(30, /*goto*/ 0x20) set_target_chr(CHR_ANTI) - if_within_units_of_sight(30, /*goto*/ 0x20) + if_nearly_in_targets_sight(30, /*goto*/ 0x20) goto_next(0x2d) label(0x20) diff --git a/src/files/setup/setupate.c b/src/files/setup/setupate.c index f1d3dee5e..c1aefd319 100644 --- a/src/files/setup/setupate.c +++ b/src/files/setup/setupate.c @@ -452,7 +452,7 @@ u8 func0403_jon_combat[] = { beginloop(0x04) if_timer_gt(240, /*goto*/ 0x58) - if_within_units_of_sight(30, /*goto*/ 0x58) + if_nearly_in_targets_sight(30, /*goto*/ 0x58) endloop(0x04) label(0x58) diff --git a/src/files/setup/setupazt.c b/src/files/setup/setupazt.c index bb74dca12..a50fcad11 100644 --- a/src/files/setup/setupazt.c +++ b/src/files/setup/setupazt.c @@ -1804,9 +1804,9 @@ u8 func0420_trent_running[] = { if_chr_stopped(/*goto*/ 0x08) goto_first(0x0a) - // Player not in sight + // Player not in sight, or Trent has reached his destination label(0x08) - if_within_units_of_sight(30, /*goto*/ 0x31) + if_nearly_in_targets_sight(30, /*goto*/ 0x31) goto_next(0x08) label(0x31) diff --git a/src/files/setup/setupcave.c b/src/files/setup/setupcave.c index 93901f826..948a167f3 100644 --- a/src/files/setup/setupcave.c +++ b/src/files/setup/setupcave.c @@ -3087,15 +3087,15 @@ u8 func0427_init_posttakeover_guard[] = { u8 func0428_posttakeover_guard[] = { beginloop(0x00) set_target_chr(CHR_BOND) - if_within_units_of_sight(30, /*goto*/ 0x31) + if_nearly_in_targets_sight(30, /*goto*/ 0x31) if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x02) set_target_chr(CHR_COOP) - if_within_units_of_sight(30, /*goto*/ 0x31) + if_nearly_in_targets_sight(30, /*goto*/ 0x31) label(0x02) if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x02) set_target_chr(CHR_ANTI) - if_within_units_of_sight(30, /*goto*/ 0x31) + if_nearly_in_targets_sight(30, /*goto*/ 0x31) label(0x02) unset_self_chrflag(CHRCFLAG_HIDDEN) @@ -4035,14 +4035,14 @@ u8 func0417_remove_or_unalert[] = { label(0x00) yield set_target_chr(CHR_BOND) - if_within_units_of_sight(30, /*goto*/ 0x02) + if_nearly_in_targets_sight(30, /*goto*/ 0x02) if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x31) set_target_chr(CHR_COOP) - if_within_units_of_sight(30, /*goto*/ 0x02) + if_nearly_in_targets_sight(30, /*goto*/ 0x02) label(0x31) if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x04) set_target_chr(CHR_ANTI) - if_within_units_of_sight(30, /*goto*/ 0x02) + if_nearly_in_targets_sight(30, /*goto*/ 0x02) label(0x04) yield chr_drop_weapon(CHR_SELF) @@ -4060,14 +4060,14 @@ u8 func0418_remove_or_cower[] = { label(0x00) yield set_target_chr(CHR_BOND) - if_within_units_of_sight(30, /*goto*/ 0x02) + if_nearly_in_targets_sight(30, /*goto*/ 0x02) if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x31) set_target_chr(CHR_COOP) - if_within_units_of_sight(30, /*goto*/ 0x02) + if_nearly_in_targets_sight(30, /*goto*/ 0x02) label(0x31) if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x04) set_target_chr(CHR_ANTI) - if_within_units_of_sight(30, /*goto*/ 0x02) + if_nearly_in_targets_sight(30, /*goto*/ 0x02) label(0x04) yield remove_chr(CHR_SELF) diff --git a/src/files/setup/setuppam.c b/src/files/setup/setuppam.c index 5d254f1f3..d52f8cb3f 100644 --- a/src/files/setup/setuppam.c +++ b/src/files/setup/setuppam.c @@ -922,11 +922,11 @@ u8 func0402_elvis_follow_and_reactive_teleportals[] = { u8 func0433_unused[] = { beginloop(0x04) set_target_chr(CHR_BOND) - if_within_units_of_sight(30, /*goto*/ 0x06) + if_nearly_in_targets_sight(30, /*goto*/ 0x06) set_target_chr(CHR_COOP) - if_within_units_of_sight(30, /*goto*/ 0x06) + if_nearly_in_targets_sight(30, /*goto*/ 0x06) set_target_chr(CHR_ANTI) - if_within_units_of_sight(30, /*goto*/ 0x06) + if_nearly_in_targets_sight(30, /*goto*/ 0x06) goto_next(0x2e) label(0x06) diff --git a/src/files/setup/setuppete.c b/src/files/setup/setuppete.c index b03d579f2..fad5cc54d 100644 --- a/src/files/setup/setuppete.c +++ b/src/files/setup/setuppete.c @@ -1685,10 +1685,10 @@ u8 func0413_bugspotter[] = { label(0x03) chr_toggle_p1p2(CHR_SELF) set_target_chr(CHR_P1P2) - if_within_units_of_sight(30, /*goto*/ 0x03) + if_nearly_in_targets_sight(30, /*goto*/ 0x03) chr_toggle_p1p2(CHR_SELF) set_target_chr(CHR_P1P2) - if_within_units_of_sight(30, /*goto*/ 0x03) + if_nearly_in_targets_sight(30, /*goto*/ 0x03) goto_next(0x04) label(0x03) goto_first(0x07) @@ -1703,7 +1703,7 @@ u8 func0413_bugspotter[] = { label(0x03) chr_toggle_p1p2(CHR_SELF) set_target_chr(CHR_P1P2) - if_within_units_of_sight(30, /*goto*/ 0x03) + if_nearly_in_targets_sight(30, /*goto*/ 0x03) goto_next(0x04) label(0x03) goto_first(0x07) diff --git a/src/files/setup/setupsev.c b/src/files/setup/setupsev.c index e95af4805..df0d554d4 100644 --- a/src/files/setup/setupsev.c +++ b/src/files/setup/setupsev.c @@ -1157,7 +1157,7 @@ u8 func1004_check_saucer_destroyed[] = { endlist }; -u8 func1005_check_experiemnt_destroyed_pointless[] = { +u8 func1005_check_experiment_destroyed_pointless[] = { // This is a pointless function beginloop(0x04) if_object_in_good_condition(OBJ_EXPERIMENT, /*goto*/ 0x2c) @@ -1887,14 +1887,14 @@ u8 func0414_unload[] = { label(0x2c) yield set_target_chr(CHR_BOND) - if_within_units_of_sight(30, /*goto*/ 0x06) + if_nearly_in_targets_sight(30, /*goto*/ 0x06) if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2c) set_target_chr(CHR_COOP) - if_within_units_of_sight(30, /*goto*/ 0x06) + if_nearly_in_targets_sight(30, /*goto*/ 0x06) label(0x2c) if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x08) set_target_chr(CHR_ANTI) - if_within_units_of_sight(30, /*goto*/ 0x06) + if_nearly_in_targets_sight(30, /*goto*/ 0x06) label(0x08) yield chr_drop_weapon(CHR_SELF) @@ -1912,7 +1912,7 @@ struct ailist ailists[] = { { func1002_intro, 0x1002 }, { func1003_check_experiment_destroyed, 0x1003 }, { func1004_check_saucer_destroyed, 0x1004 }, - { func1005_check_experiemnt_destroyed_pointless, 0x1005 }, + { func1005_check_experiment_destroyed_pointless, 0x1005 }, { func1006_activate_alarm, 0x1006 }, { func1007_disable_pods, 0x1007 }, { func1008_check_console, 0x1008 }, diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index aa8b20dd8..89b4a2420 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -30597,18 +30597,18 @@ s32 chrGetDistanceLostToTargetInLastSecond(struct chrdata *chr) return curdist - olddist; } -bool func0f04c6b4(struct chrdata *chr, u32 distance) +bool chrIsTargetNearlyInSight(struct chrdata *chr, u32 distance) { - struct prop *prop = chrGetTargetProp(chr); + struct prop *target = chrGetTargetProp(chr); - return func0002f450(&chr->prop->pos, &chr->prop->rooms[0], &prop->pos, distance, 32); + return func0002f450(&chr->prop->pos, &chr->prop->rooms[0], &target->pos, distance, 32); } -bool func0f04c71c(struct chrdata *chr, u32 distance) +bool chrIsNearlyInTargetsSight(struct chrdata *chr, u32 distance) { - struct prop *prop = chrGetTargetProp(chr); + struct prop *target = chrGetTargetProp(chr); - return func0002f450(&prop->pos, &prop->rooms[0], &chr->prop->pos, distance, 32); + return func0002f450(&target->pos, &target->rooms[0], &chr->prop->pos, distance, 32); } GLOBAL_ASM( diff --git a/src/game/chr/chrai.c b/src/game/chr/chrai.c index eec38a203..68284fae5 100644 --- a/src/game/chr/chrai.c +++ b/src/game/chr/chrai.c @@ -82,8 +82,8 @@ bool (*g_CommandPointers[])(void) = { /*0x003d*/ aiIfSawInjury, /*0x003e*/ aiIfSawDeath, /*0x003f*/ aiIfSeesPlayer, - /*0x0040*/ ai0040, - /*0x0041*/ ai0041, + /*0x0040*/ aiIfTargetNearlyInSight, + /*0x0041*/ aiIfNearlyInTargetsSight, /*0x0042*/ aiIfInLoadedRoom, /*0x0043*/ aiIfSawTargetRecently, /*0x0044*/ aiIfHeardTargetRecently, diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index f74b86dec..9a3943004 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -1377,12 +1377,12 @@ bool ai017a(void) /** * @cmd 0040 */ -bool ai0040(void) +bool aiIfTargetNearlyInSight(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; - u32 flags = (cmd[3] << 16) | (cmd[4] << 8) | cmd[5] | (cmd[2] << 24); + u32 distance = (cmd[3] << 16) | (cmd[4] << 8) | cmd[5] | (cmd[2] << 24); - if (func0f04c6b4(g_Vars.chrdata, flags)) { + if (chrIsTargetNearlyInSight(g_Vars.chrdata, distance)) { cmd = g_Vars.ailist + g_Vars.aioffset; g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[6]); } else { @@ -1395,12 +1395,12 @@ bool ai0040(void) /** * @cmd 0041 */ -bool ai0041(void) +bool aiIfNearlyInTargetsSight(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; - u32 value = (cmd[3] << 16) | (cmd[4] << 8) | cmd[5] | (cmd[2] << 24); + u32 distance = (cmd[3] << 16) | (cmd[4] << 8) | cmd[5] | (cmd[2] << 24); - if (func0f04c71c(g_Vars.chrdata, value)) { + if (chrIsNearlyInTargetsSight(g_Vars.chrdata, distance)) { cmd = g_Vars.ailist + g_Vars.aioffset; g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[6]); } else { diff --git a/src/game/data/ailists.c b/src/game/data/ailists.c index 188511611..1d45f014b 100644 --- a/src/game/data/ailists.c +++ b/src/game/data/ailists.c @@ -484,7 +484,7 @@ u8 func0006_unalerted[] = { increase_self_alertness(100) say_quip(CHR_BOND, QUIP_SHOTUNALERT, 0xff, 0x03, 0x00, BANK_0, 0x00, 0x00) set_target_chr(CHR_BOND) - if_within_units_of_sight(30, /*goto*/ 0x13) + if_nearly_in_targets_sight(30, /*goto*/ 0x13) goto_next(0x16) label(0x13) @@ -498,7 +498,7 @@ u8 func0006_unalerted[] = { label(0x16) if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x16) set_target_chr(CHR_COOP) - if_within_units_of_sight(30, /*goto*/ 0x13) + if_nearly_in_targets_sight(30, /*goto*/ 0x13) goto_next(0x16) label(0x13) @@ -592,7 +592,7 @@ u8 func0006_unalerted[] = { label(0x7d) dprint 'E','X','A','M',' ','B','O','D','Y','D','O','N','E','\n',0, set_target_chr(CHR_BOND) - if_within_units_of_sight(30, /*goto*/ 0x13) + if_nearly_in_targets_sight(30, /*goto*/ 0x13) goto_next(0x16) label(0x13) @@ -604,7 +604,7 @@ u8 func0006_unalerted[] = { label(0x16) if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x16) set_target_chr(CHR_COOP) - if_within_units_of_sight(30, /*goto*/ 0x13) + if_nearly_in_targets_sight(30, /*goto*/ 0x13) goto_next(0x16) label(0x13) @@ -1431,9 +1431,9 @@ u8 func0007_alerted[] = { if_rand_gt(100, /*goto*/ 0x13) if_player_looking_at_something_maybe(0x1e, 0x01, 0x00, /*goto*/ 0x16) label(0x13) - if_within_units_of_sight(30, /*goto*/ 0x5f) + if_nearly_in_targets_sight(30, /*goto*/ 0x5f) label(0x16) - if_within_units_of_sight(30, /*goto*/ 0x16) + if_nearly_in_targets_sight(30, /*goto*/ 0x16) if_player_using_cmp150_or_ar34(/*goto*/ 0x69) if_distance_to_target_gt(2000, /*goto*/ 0x61) goto_next(0x16) @@ -1443,7 +1443,7 @@ u8 func0007_alerted[] = { label(0x16) dprint 'O','K','F','O','R','C','O','V','E','R','\n',0, if_in_disarm_range(/*goto*/ 0x5b) - if_within_units_of_sight(30, /*goto*/ 0x5b) + if_nearly_in_targets_sight(30, /*goto*/ 0x5b) if_chr_in_view(/*goto*/ 0x5b) goto_next(0x56) @@ -1531,7 +1531,7 @@ u8 func0007_alerted[] = { if_dangerous_object_nearby(3, /*goto*/ LABEL_FLEE_GRENADE) chr_toggle_p1p2(CHR_SELF) set_target_chr(CHR_P1P2) - if_within_units_of_sight(30, /*goto*/ 0x5f) + if_nearly_in_targets_sight(30, /*goto*/ 0x5f) if_timer_gt(240, /*goto*/ 0x61) if_self_flag_bankx_eq(CHRFLAG0_CAN_FLANK, FALSE, BANK_0, /*goto*/ 0x93) if_has_orders(/*goto*/ 0x84) @@ -1877,7 +1877,7 @@ u8 func0007_alerted[] = { try_face_entity(ENTITYTYPE_TARGET, 0, /*goto*/ 0x4b) beginloop(0x4b) - if_within_units_of_sight(30, /*goto*/ 0x42) + if_nearly_in_targets_sight(30, /*goto*/ 0x42) if_chr_in_view(/*goto*/ 0x42) if_chr_target_eq(CHR_SELF, CHR_P1P2, FALSE, /*goto*/ 0xee) goto_next(0xef) @@ -1886,7 +1886,7 @@ u8 func0007_alerted[] = { chr_toggle_p1p2(CHR_SELF) if_chr_target_eq(CHR_SELF, CHR_P1P2, FALSE, /*goto*/ 0xee) set_target_chr(CHR_P1P2) - if_within_units_of_sight(30, /*goto*/ 0x42) + if_nearly_in_targets_sight(30, /*goto*/ 0x42) if_chr_in_view(/*goto*/ 0x42) label(0xee) chr_toggle_p1p2(CHR_SELF) @@ -1915,14 +1915,14 @@ u8 func0007_alerted[] = { if_self_flag_bankx_eq(CHRFLAG0_CAN_FLANK, FALSE, BANK_0, /*goto*/ 0x93) if_has_orders(/*goto*/ 0x84) label(0x93) - if_within_units_of_sight(30, /*goto*/ 0x42) + if_nearly_in_targets_sight(30, /*goto*/ 0x42) if_chr_target_eq(CHR_SELF, CHR_P1P2, FALSE, /*goto*/ 0xee) goto_next(0xef) label(0xee) chr_toggle_p1p2(CHR_SELF) if_chr_target_eq(CHR_SELF, CHR_P1P2, FALSE, /*goto*/ 0xee) set_target_chr(CHR_P1P2) - if_within_units_of_sight(30, /*goto*/ 0x42) + if_nearly_in_targets_sight(30, /*goto*/ 0x42) label(0xee) chr_toggle_p1p2(CHR_SELF) set_target_chr(CHR_P1P2) diff --git a/src/include/commands.h b/src/include/commands.h index 22ae52efc..c20588f27 100644 --- a/src/include/commands.h +++ b/src/include/commands.h @@ -592,15 +592,24 @@ mkshort(0x003f), \ label, -#define cmd0040(flags, label) \ +/** + * Checks if the current chr's target is in sight of the current chr, or would + * be in sight if the target were to move units left or right in a + * circle around the current chr. + */ +#define if_target_nearly_in_sight(distance, label) \ mkshort(0x0040), \ - mkword(flags), \ + mkword(distance), \ label, -// Not sure about this. -#define if_within_units_of_sight(value, label) \ +/** + * Checks if the current chr is in sight of their target, or would be in sight + * if the current chr were to move units left or right in a circle + * around their target. + */ +#define if_nearly_in_targets_sight(distance, label) \ mkshort(0x0041), \ - mkword(value), \ + mkword(distance), \ label, /** diff --git a/src/include/game/chr/chraction.h b/src/include/game/chr/chraction.h index 7e575174f..3f0758309 100644 --- a/src/include/game/chr/chraction.h +++ b/src/include/game/chr/chraction.h @@ -317,8 +317,8 @@ struct prop *chrSpawnAtChr(struct chrdata *basechr, s32 body, s32 head, u32 chrn s16 chrGoToCover(struct chrdata *chr, u8 speed); void chrAddTargetToBdlist(struct chrdata *chr); s32 chrGetDistanceLostToTargetInLastSecond(struct chrdata *chr); -bool func0f04c6b4(struct chrdata *chr, u32 distance); -bool func0f04c71c(struct chrdata *chr, u32 distance); +bool chrIsTargetNearlyInSight(struct chrdata *chr, u32 distance); +bool chrIsNearlyInTargetsSight(struct chrdata *chr, u32 distance); s16 *teamGetChrIds(s32 team_id); s16 *squadronGetChrIds(s32 squadron_id); void audioMarkAsRecentlyPlayed(s16 audioid); diff --git a/src/include/game/chr/chraicommands.h b/src/include/game/chr/chraicommands.h index 4622c23f5..0cd6f47b8 100644 --- a/src/include/game/chr/chraicommands.h +++ b/src/include/game/chr/chraicommands.h @@ -67,8 +67,8 @@ /*0x003d*/ bool aiIfSawInjury(void); /*0x003e*/ bool aiIfSawDeath(void); /*0x003f*/ bool aiIfSeesPlayer(void); -/*0x0040*/ bool ai0040(void); -/*0x0041*/ bool ai0041(void); +/*0x0040*/ bool aiIfTargetNearlyInSight(void); +/*0x0041*/ bool aiIfNearlyInTargetsSight(void); /*0x0042*/ bool aiIfInLoadedRoom(void); /*0x0043*/ bool aiIfSawTargetRecently(void); /*0x0044*/ bool aiIfHeardTargetRecently(void); diff --git a/src/include/lib/lib_233c0.h b/src/include/lib/lib_233c0.h index d5f2c2be9..623c0a603 100644 --- a/src/include/lib/lib_233c0.h +++ b/src/include/lib/lib_233c0.h @@ -108,7 +108,7 @@ u32 func0002d8b8(void); u32 func0002d95c(void); u32 func0002da50(void); u32 func0002dac8(void); -u32 func0002db98(void); +bool func0002db98(struct coord *viewpos, s16 *rooms, struct coord *targetpos, s32 arg3, u32 arg4); u32 func0002dc18(struct coord *coord, s16 *room, struct coord *coord2, s32 arg3); bool hasLineOfSight(struct coord *coord, s16 *room, struct coord *coord2, s16 *room2, s32 arg4, s32 arg5); u32 func0002dcd0(void); @@ -127,7 +127,7 @@ u32 func0002e9d8(void); u32 func0002eb84(void); u32 func0002ed30(void); u32 func0002f02c(void); -bool func0002f308(struct coord *pos, s16 *rooms, struct coord *pos2, f32 distance, s32 arg4, s32 arg5); -bool func0002f450(struct coord *pos, s16 *rooms, struct coord *pos2, f32 distance, s32 arg4); +bool func0002f308(struct coord *viewpos, s16 *rooms, struct coord *targetpos, f32 distance, s32 arg4, u16 arg5); +bool func0002f450(struct coord *viewpos, s16 *rooms, struct coord *targetpos, f32 distance, s32 arg4); #endif diff --git a/src/lib/lib_233c0.c b/src/lib/lib_233c0.c index eed62c957..47a49b113 100644 --- a/src/lib/lib_233c0.c +++ b/src/lib/lib_233c0.c @@ -13498,7 +13498,49 @@ glabel func0002f308 /* 2f44c: 27bd0048 */ addiu $sp,$sp,0x48 ); -bool func0002f450(struct coord *pos, s16 *rooms, struct coord *pos2, f32 distance, s32 arg4) +//bool func0002f308(struct coord *viewpos, s16 *rooms, struct coord *targetpos, f32 distance, s32 arg4, u16 arg5) +//{ +// struct coord diff; // sp60 +// f32 x; // sp56 +// f32 z; // sp52 +// struct coord vector; // sp40 +// +// if (func0002db98(viewpos, rooms, targetpos, arg4, arg5)) { +// return true; +// } +// +// vector.x = targetpos->x - viewpos->x; +// vector.y = 0; +// vector.z = targetpos->z - viewpos->z; +// +// // 378 +// scaleTo1(&vector.x, &vector.y, &vector.z); +// +// x = vector.x * distance; +// z = vector.z * distance; +// +// diff.x = targetpos->x - z; +// diff.y = targetpos->y; +// diff.z = targetpos->z + x; +// +// // 3d0 +// if (func0002db98(viewpos, rooms, &diff, arg4, arg5)) { +// return true; +// } +// +// diff.x = targetpos->x + z; +// diff.y = targetpos->y; +// diff.z = targetpos->z - x; +// +// // 420 +// if (func0002db98(viewpos, rooms, &diff, arg4, arg5)) { +// return true; +// } +// +// return false; +//} + +bool func0002f450(struct coord *viewpos, s16 *rooms, struct coord *targetpos, f32 distance, s32 arg4) { - return func0002f308(pos, rooms, pos2, distance, arg4, 8); + return func0002f308(viewpos, rooms, targetpos, distance, arg4, 8); }