From 626970c02233c804fb00808022f695d13b744b11 Mon Sep 17 00:00:00 2001 From: Isaac0-dev <62234577+Isaac0-dev@users.noreply.github.com> Date: Tue, 14 May 2024 09:37:40 +1000 Subject: [PATCH] fixed scuttlebugs incorrect behavior (#41) scuttlebugs used to always target the closest mario in range, due to angleToPlayer being updated every frame, overwriting the angle if its set to the angle to the scuttlebug's home --- src/game/behaviors/scuttlebug.inc.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/game/behaviors/scuttlebug.inc.c b/src/game/behaviors/scuttlebug.inc.c index b5d0b912..35324c8c 100644 --- a/src/game/behaviors/scuttlebug.inc.c +++ b/src/game/behaviors/scuttlebug.inc.c @@ -39,7 +39,6 @@ void bhv_scuttlebug_loop(void) { } struct Object *player = nearest_player_to_object(o); - s32 angleToPlayer = player ? obj_angle_to_object(o, player) : 0; cur_obj_update_floor_and_walls(); if (o->oSubAction != 0 @@ -62,14 +61,14 @@ void bhv_scuttlebug_loop(void) { case 1: o->oForwardVel = 5.0f; if (player && cur_obj_lateral_dist_from_obj_to_home(player) > 1000.0f) { - angleToPlayer = cur_obj_angle_to_home(); + o->oAngleToMario = cur_obj_angle_to_home(); } else { if (o->oScuttlebugUnkF8 == 0) { o->oScuttlebugUnkFC = 0; if (player) { - angleToPlayer = obj_angle_to_object(o, player); + o->oAngleToMario = obj_angle_to_object(o, player); } - if (abs_angle_diff(angleToPlayer, o->oMoveAngleYaw) < 0x800) { + if (abs_angle_diff(o->oAngleToMario, o->oMoveAngleYaw) < 0x800) { o->oScuttlebugUnkF8 = 1; o->oVelY = 20.0f; cur_obj_play_sound_2(SOUND_OBJ2_SCUTTLEBUG_ALERT); @@ -81,17 +80,17 @@ void bhv_scuttlebug_loop(void) { o->oScuttlebugUnkF8 = 0; } } - if (update_angle_from_move_flags(&angleToPlayer)) + if (update_angle_from_move_flags(&o->oAngleToMario)) o->oSubAction = 2; - cur_obj_rotate_yaw_toward(angleToPlayer, 0x200); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x200); break; case 2: o->oForwardVel = 5.0f; - if ((s16) o->oMoveAngleYaw == (s16)angleToPlayer) + if ((s16) o->oMoveAngleYaw == (s16)o->oAngleToMario) o->oSubAction = 1; if (o->oPosY - o->oHomeY < -200.0f) obj_mark_for_deletion(o); - cur_obj_rotate_yaw_toward(angleToPlayer, 0x400); + cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x400); break; case 3: o->oFlags &= ~8;