From 52dfb8ccb7e52eb23adccdfef87fd560dff1fbf2 Mon Sep 17 00:00:00 2001 From: Arceveti <73617174+Arceveti@users.noreply.github.com> Date: Sun, 3 Oct 2021 10:35:10 -0700 Subject: [PATCH] King Bobomb improvements --- src/game/behaviors/king_bobomb.inc.c | 157 ++++++++++++++------------- src/game/behaviors/unagi.inc.c | 12 +- 2 files changed, 84 insertions(+), 85 deletions(-) diff --git a/src/game/behaviors/king_bobomb.inc.c b/src/game/behaviors/king_bobomb.inc.c index ba64de33a..f641e1946 100644 --- a/src/game/behaviors/king_bobomb.inc.c +++ b/src/game/behaviors/king_bobomb.inc.c @@ -21,44 +21,44 @@ void bhv_bobomb_anchor_mario_loop(void) { void king_bobomb_act_0(void) { o->oForwardVel = 0.0f; o->oVelY = 0.0f; - if (o->oSubAction == 0) { + if (o->oSubAction == KING_BOBOMB_SUB_ACT_INACTIVE_INIT) { cur_obj_become_intangible(); gSecondCameraFocus = o; - cur_obj_init_animation_with_sound(5); + cur_obj_init_animation_with_sound(KING_BOBOMB_ANIM_IDLE); cur_obj_set_pos_to_home(); o->oHealth = 3; if (cur_obj_can_mario_activate_textbox_2(500.0f, 100.0f)) { - o->oSubAction++; + o->oSubAction = KING_BOBOMB_SUB_ACT_INACTIVE_DIALOG; seq_player_lower_volume(SEQ_PLAYER_LEVEL, 60, 40); } } else if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TURN_TO_MARIO, CUTSCENE_DIALOG, DIALOG_017)) { - o->oAction = 2; + o->oAction = KING_BOBOMB_ACT_ACTIVE; o->oFlags |= OBJ_FLAG_HOLDABLE; } } s32 mario_is_far_below_object(f32 min) { - return (min < o->oPosY - gMarioObject->oPosY); + return (min < (o->oPosY - gMarioObject->oPosY)); } void king_bobomb_act_2(void) { cur_obj_become_tangible(); if (o->oPosY - o->oHomeY < -100.0f) { // Thrown off hill - o->oAction = 5; + o->oAction = KING_BOBOMB_ACT_RETURN_HOME; cur_obj_become_intangible(); } if (o->oKingBobombShouldStomp == 0) { if (cur_obj_check_anim_frame(15)) cur_obj_shake_screen(SHAKE_POS_SMALL); - if (cur_obj_init_animation_and_check_if_near_end(4)) + if (cur_obj_init_animation_and_check_if_near_end(KING_BOBOMB_ANIM_STOMP)) o->oKingBobombShouldStomp++; } else { if (o->oKingBobombShouldStomp == 1) { - cur_obj_init_animation_and_anim_frame(11, 7); + cur_obj_init_animation_and_anim_frame(KING_BOBOMB_ANIM_WALKING, 7); o->oKingBobombShouldStomp = 2; } else - cur_obj_init_animation_with_sound(11); + cur_obj_init_animation_with_sound(KING_BOBOMB_ANIM_WALKING); if (o->oKingBobombPlayerGrabEscapeCooldown == 0) { o->oForwardVel = 3.0f; cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x100); @@ -68,16 +68,16 @@ void king_bobomb_act_2(void) { } } if (cur_obj_check_grabbed_mario()) - o->oAction = 3; + o->oAction = KING_BOBOMB_ACT_GRABBED_MARIO; if (mario_is_far_below_object(1200.0f)) { - o->oAction = 0; + o->oAction = KING_BOBOMB_ACT_INACTIVE; stop_background_music(SEQUENCE_ARGS(4, SEQ_EVENT_BOSS)); } } void king_bobomb_act_3(void) { if (o->oSubAction == 0) { - o->oForwardVel = 0; + o->oForwardVel = 0.0f; o->oKingBobombStationaryTimer = 0; o->oKingBobombPlayerGrabEscapeActions = 0; if (o->oTimer == 0) @@ -87,13 +87,13 @@ void king_bobomb_act_3(void) { cur_obj_init_animation_and_anim_frame(1, 0); } } else { - if (o->oSubAction == 1) { - cur_obj_init_animation_with_sound(1); + if (o->oSubAction == KING_BOBOMB_SUB_ACT_GRABBED_MARIO_HOLDING) { + cur_obj_init_animation_with_sound(KING_BOBOMB_ANIM_HOLDING_MARIO); o->oKingBobombPlayerGrabEscapeActions += player_performed_grab_escape_action(); print_debug_bottom_up("%d", o->oKingBobombPlayerGrabEscapeActions); if (o->oKingBobombPlayerGrabEscapeActions > 10) { - o->oKingBobombHoldingMarioState = 3; - o->oAction = 2; + o->oKingBobombHoldingMarioState = HELD_DROPPED; + o->oAction = KING_BOBOMB_ACT_ACTIVE; o->oKingBobombPlayerGrabEscapeCooldown = 35; o->oInteractStatus &= ~(INT_STATUS_GRABBED_MARIO); } else { @@ -107,10 +107,10 @@ void king_bobomb_act_3(void) { } else { cur_obj_init_animation_with_sound(9); if (cur_obj_check_anim_frame(31)) { - o->oKingBobombHoldingMarioState = 2; + o->oKingBobombHoldingMarioState = HELD_THROWN; cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN4); } else if (cur_obj_check_if_near_animation_end()) { - o->oAction = 1; + o->oAction = KING_BOBOMB_ACT_ACTIVATE; o->oInteractStatus &= ~(INT_STATUS_GRABBED_MARIO); } } @@ -118,61 +118,62 @@ void king_bobomb_act_3(void) { } void king_bobomb_act_1(void) { - o->oForwardVel = 0; + o->oForwardVel = 0.0f; o->oVelY = 0; cur_obj_init_animation_with_sound(11); o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oAngleToMario, 512); if (o->oDistanceToMario < 2500.0f) - o->oAction = 2; + o->oAction = KING_BOBOMB_ACT_ACTIVE; if (mario_is_far_below_object(1200.0f)) { - o->oAction = 0; + o->oAction = KING_BOBOMB_ACT_INACTIVE; stop_background_music(SEQUENCE_ARGS(4, SEQ_EVENT_BOSS)); } } void king_bobomb_act_6(void) { - if (o->oSubAction == 0) { + if (o->oSubAction == KING_BOBOMB_SUB_ACT_HIT_GROUND_HIT) { if (o->oTimer == 0) { o->oKingBobombStationaryTimer = 0; cur_obj_play_sound_2(SOUND_OBJ_KING_BOBOMB); cur_obj_play_sound_2(SOUND_OBJ2_KING_BOBOMB_DAMAGE); cur_obj_shake_screen(SHAKE_POS_SMALL); spawn_mist_particles_variable(0, 0, 100.0f); - o->oInteractType = 8; + o->oInteractType = INTERACT_DAMAGE; cur_obj_become_tangible(); } - if (cur_obj_init_animation_and_check_if_near_end(2)) + if (cur_obj_init_animation_and_check_if_near_end(KING_BOBOMB_ANIM_HIT_GROUND)) o->oKingBobombStationaryTimer++; if (o->oKingBobombStationaryTimer > 3) { - o->oSubAction++; + o->oSubAction = KING_BOBOMB_SUB_ACT_HIT_GROUND_STAND_UP; } } else { - if (o->oSubAction == 1) { - if (cur_obj_init_animation_and_check_if_near_end(10)) { - o->oSubAction++; - o->oInteractType = 2; + if (o->oSubAction == KING_BOBOMB_SUB_ACT_HIT_GROUND_STAND_UP) { + if (cur_obj_init_animation_and_check_if_near_end(KING_BOBOMB_ANIM_STAND_UP)) { + o->oSubAction = KING_BOBOMB_SUB_ACT_HIT_GROUND_START_WALKING; + o->oInteractType = INTERACT_GRABBABLE; cur_obj_become_intangible(); } } else { cur_obj_init_animation_with_sound(11); - if (cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x800) == 1) - o->oAction = 2; + if (cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x800)) { + o->oAction = KING_BOBOMB_ACT_ACTIVE; + } } } } void king_bobomb_act_7(void) { - cur_obj_init_animation_with_sound(2); + cur_obj_init_animation_with_sound(KING_BOBOMB_ANIM_HIT_GROUND); if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TEXT_DEFAULT, CUTSCENE_DIALOG, DIALOG_116)) { create_sound_spawner(SOUND_OBJ_KING_WHOMP_DEATH); cur_obj_hide(); cur_obj_become_intangible(); spawn_mist_particles_variable(0, 0, 200.0f); - spawn_triangle_break_particles(20, MODEL_DIRT_ANIMATION, 3.0f, 4); + spawn_triangle_break_particles(20, MODEL_DIRT_ANIMATION, 3.0f, TINY_DIRT_PARTICLE_ANIM_STATE_YELLOW); cur_obj_shake_screen(SHAKE_POS_SMALL); cur_obj_spawn_star_at_y_offset(2000.0f, 4500.0f, -4500.0f, 200.0f); - o->oAction = 8; + o->oAction = KING_BOBOMB_ACT_STOP_MUSIC; } } @@ -185,75 +186,72 @@ void king_bobomb_act_4(void) { // bobomb been thrown if (o->oPosY - o->oHomeY > -100.0f) { // not thrown off hill if (o->oMoveFlags & OBJ_MOVE_LANDED) { o->oHealth--; - o->oForwardVel = 0; + o->oForwardVel = 0.0f; o->oVelY = 0; cur_obj_play_sound_2(SOUND_OBJ_KING_BOBOMB); - if (o->oHealth) - o->oAction = 6; - else - o->oAction = 7; + o->oAction = (o->oHealth ? KING_BOBOMB_ACT_HIT_GROUND : KING_BOBOMB_ACT_DEATH); } - } else { - if (o->oSubAction == 0) { + } else { // thrown off hill + if (o->oSubAction == KING_BOBOMB_SUB_ACT_THROWN_FALL) { if (o->oMoveFlags & OBJ_MOVE_ON_GROUND) { - o->oForwardVel = 0; - o->oVelY = 0; - o->oSubAction++; + o->oForwardVel = 0.0f; + o->oVelY = 0.0f; + o->oSubAction = KING_BOBOMB_SUB_ACT_THROWN_STAND_UP; } else if (o->oMoveFlags & OBJ_MOVE_LANDED) cur_obj_play_sound_2(SOUND_OBJ_KING_BOBOMB); } else { if (cur_obj_init_animation_and_check_if_near_end(10)) - o->oAction = 5; // Go back to top of hill - o->oSubAction++; + o->oAction = KING_BOBOMB_ACT_RETURN_HOME; // Go back to top of hill + o->oSubAction = KING_BOBOMB_SUB_ACT_THROWN_END; } } } void king_bobomb_act_5(void) { // bobomb returns home switch (o->oSubAction) { - case 0: + case KING_BOBOMB_SUB_ACT_RETURN_HOME_JUMP: if (o->oTimer == 0) cur_obj_play_sound_2(SOUND_OBJ_KING_BOBOMB_JUMP); - o->oKingBobombIsJumping = 1; - cur_obj_init_animation_and_extend_if_at_end(8); + o->oKingBobombIsJumping = TRUE; + cur_obj_init_animation_and_extend_if_at_end(KING_BOBOMB_ANIM_JUMP); o->oMoveAngleYaw = cur_obj_angle_to_home(); - if (o->oPosY < o->oHomeY) + if (o->oPosY < o->oHomeY) { o->oVelY = 100.0f; - else { + } else { arc_to_goal_pos(&o->oHomeX, &o->oPosVec, 100.0f, -4.0f); - o->oSubAction++; + o->oSubAction = KING_BOBOMB_SUB_ACT_RETURN_HOME_LANDING; } break; - case 1: - cur_obj_init_animation_and_extend_if_at_end(8); + case KING_BOBOMB_SUB_ACT_RETURN_HOME_LANDING: + cur_obj_init_animation_and_extend_if_at_end(KING_BOBOMB_ANIM_JUMP); if (o->oVelY < 0 && o->oPosY < o->oHomeY) { o->oPosY = o->oHomeY; o->oVelY = 0; o->oForwardVel = 0; o->oGravity = -4.0f; - o->oKingBobombIsJumping = 0; - cur_obj_init_animation_with_sound(7); + o->oKingBobombIsJumping = FALSE; + cur_obj_init_animation_with_sound(KING_BOBOMB_ANIM_T_POSE); cur_obj_play_sound_2(SOUND_OBJ_KING_BOBOMB); cur_obj_shake_screen(SHAKE_POS_SMALL); o->oSubAction++; } break; - case 2: - if (cur_obj_init_animation_and_check_if_near_end(7)) - o->oSubAction++; + case KING_BOBOMB_SUB_ACT_RETURN_HOME_LANDING_END: + if (cur_obj_init_animation_and_check_if_near_end(KING_BOBOMB_ANIM_T_POSE)) + o->oSubAction = KING_BOBOMB_SUB_ACT_RETURN_HOME_WAIT_FOR_DIALOG; break; - case 3: + case KING_BOBOMB_SUB_ACT_RETURN_HOME_WAIT_FOR_DIALOG: if (mario_is_far_below_object(1200.0f)) { - o->oAction = 0; + o->oAction = KING_BOBOMB_ACT_INACTIVE; stop_background_music(SEQUENCE_ARGS(4, SEQ_EVENT_BOSS)); } if (cur_obj_can_mario_activate_textbox_2(500.0f, 100.0f)) - o->oSubAction++; + o->oSubAction = KING_BOBOMB_SUB_ACT_RETURN_HOME_DIALOG; break; - case 4: + case KING_BOBOMB_SUB_ACT_RETURN_HOME_DIALOG: if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TURN_TO_MARIO, CUTSCENE_DIALOG, DIALOG_128)) - o->oAction = 2; + o->oAction = KING_BOBOMB_ACT_ACTIVE; break; } } @@ -263,32 +261,34 @@ void (*sKingBobombActions[])(void) = { king_bobomb_act_5, king_bobomb_act_6, king_bobomb_act_7, king_bobomb_act_8, }; struct SoundState sKingBobombSoundStates[] = { - { 0, 0, 0, NO_SOUND }, - { 1, 1, 20, SOUND_OBJ_POUNDING1_HIGHPRIO }, - { 0, 0, 0, NO_SOUND }, - { 0, 0, 0, NO_SOUND }, + { 0, 0, 0, NO_SOUND }, + { 1, 1, 20, SOUND_OBJ_POUNDING1_HIGHPRIO }, + { 0, 0, 0, NO_SOUND }, + { 0, 0, 0, NO_SOUND }, { 1, 15, -1, SOUND_OBJ_POUNDING1_HIGHPRIO }, - { 0, 0, 0, NO_SOUND }, - { 0, 0, 0, NO_SOUND }, - { 0, 0, 0, NO_SOUND }, - { 0, 0, 0, NO_SOUND }, + { 0, 0, 0, NO_SOUND }, + { 0, 0, 0, NO_SOUND }, + { 0, 0, 0, NO_SOUND }, + { 0, 0, 0, NO_SOUND }, { 1, 33, -1, SOUND_OBJ_POUNDING1_HIGHPRIO }, - { 0, 0, 0, NO_SOUND }, - { 1, 1, 15, SOUND_OBJ_POUNDING1_HIGHPRIO }, + { 0, 0, 0, NO_SOUND }, + { 1, 1, 15, SOUND_OBJ_POUNDING1_HIGHPRIO }, }; void king_bobomb_move(void) { cur_obj_update_floor_and_walls(); - if (o->oKingBobombIsJumping == 0) + if (!o->oKingBobombIsJumping) { cur_obj_move_standard(-78); - else + } else { cur_obj_move_using_fvel_and_gravity(); + } cur_obj_call_action_function(sKingBobombActions); exec_anim_sound_state(sKingBobombSoundStates); - if (o->oDistanceToMario < 5000.0f) + if (o->oDistanceToMario < 5000.0f) { //! oDrawingDistance? cur_obj_enable_rendering(); - else + } else { cur_obj_disable_rendering(); + } } void bhv_king_bobomb_loop(void) { @@ -308,4 +308,5 @@ void bhv_king_bobomb_loop(void) { break; } o->oInteractStatus = INT_STATUS_NONE; + curr_obj_random_blink(&o->oKingBobombBlinkTimer); } diff --git a/src/game/behaviors/unagi.inc.c b/src/game/behaviors/unagi.inc.c index 889a19bbb..2a75aa788 100644 --- a/src/game/behaviors/unagi.inc.c +++ b/src/game/behaviors/unagi.inc.c @@ -176,19 +176,17 @@ void bhv_unagi_loop(void) { } void bhv_unagi_subobject_loop(void) { - f32 offset; - if (!o->parentObj->oUnagiHasStar) { obj_mark_for_deletion(o); } else { - offset = 300.0f * o->oBehParams2ndByte; + f32 offset = (300.0f * o->oBehParams2ndByte); - o->oPosY = o->parentObj->oPosY - offset * sins(o->parentObj->oFaceAnglePitch) * 1.13f; + o->oPosY = (o->parentObj->oPosY - (offset * sins(o->parentObj->oFaceAnglePitch) * 1.13f)); - offset = coss(o->parentObj->oFaceAnglePitch / 2) * offset; + offset = (coss(o->parentObj->oFaceAnglePitch / 2) * offset); - o->oPosX = o->parentObj->oPosX + offset * sins(o->parentObj->oFaceAngleYaw); - o->oPosZ = o->parentObj->oPosZ + offset * coss(o->parentObj->oFaceAngleYaw); + o->oPosX = (o->parentObj->oPosX + (offset * sins(o->parentObj->oFaceAngleYaw))); + o->oPosZ = (o->parentObj->oPosZ + (offset * coss(o->parentObj->oFaceAngleYaw))); if (o->oBehParams2ndByte == UNAGI_PART_BP_BACK) { if (o->parentObj->oAnimState != UNAGI_ANIM_STATE_NO_STAR && o->oDistanceToMario < 150.0f) {