King Bobomb improvements

This commit is contained in:
Arceveti
2021-10-03 10:35:10 -07:00
parent 83e3e21eb8
commit 52dfb8ccb7
2 changed files with 84 additions and 85 deletions

View File

@@ -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);
}

View File

@@ -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) {