You've already forked HackerSM64
mirror of
https://github.com/HackerN64/HackerSM64.git
synced 2026-01-21 10:35:32 -08:00
King Bobomb improvements
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user