diff --git a/include/m_player.h b/include/m_player.h index 7a5f62ff..90a2aead 100644 --- a/include/m_player.h +++ b/include/m_player.h @@ -811,12 +811,13 @@ typedef struct player_request_close_funriture_s { } mPlayer_request_close_furniture_c; typedef struct player_request_lie_bed_s { - int direct; + int direction; s16 angle; xyz_t wpos; - int ftr_name; + int flags; } mPlayer_request_lie_bed_c; + typedef struct player_request_door_s { s16 angle_y; xyz_t player_pos; @@ -976,6 +977,12 @@ typedef struct player_request_rotate_furniture_s { int rotate_type; } mPlayer_request_rotate_furniture_c; +typedef struct player_request_open_furniture_s { + s16 angle_y; + xyz_t player_pos; + int anim_idx; +} mPlayer_request_open_furniture_c; + typedef struct player_request_wait_open_furniture_s { int anim_idx; } mPlayer_request_wait_open_furniture_c; @@ -1288,6 +1295,7 @@ typedef union { mPlayer_request_push_c push; mPlayer_request_pull_c pull; mPlayer_request_rotate_furniture_c rotate_furniture; + mPlayer_request_open_furniture_c open_furniture; mPlayer_request_wait_open_furniture_c wait_open_furniture; mPlayer_request_wait_close_furniture_c wait_close_furniture; mPlayer_request_roll_bed_c roll_bed; @@ -1392,6 +1400,7 @@ typedef union { mPlayer_request_push_c push; mPlayer_request_pull_c pull; mPlayer_request_rotate_furniture_c rotate_furniture; + mPlayer_request_open_furniture_c open_furniture; mPlayer_request_wait_open_furniture_c wait_open_furniture; mPlayer_request_wait_close_furniture_c wait_close_furniture; mPlayer_request_roll_bed_c roll_bed; @@ -1468,6 +1477,49 @@ typedef struct player_main_door_s { u32 label; } mPlayer_main_door_c; +typedef struct player_main_outdoor_s { + int is_demo; +} mPlayer_main_outdoor_c; + +typedef struct player_main_hold_s { + int ftr_no; + s16 angle_y; + xyz_t player_pos; + int flags; +} mPlayer_main_hold_c; + +typedef struct player_main_push_s { + int ftr_no; +} mPlayer_main_push_c; + +typedef struct player_main_pull_s { + int ftr_no; + xyz_t start_pos; + xyz_t ofs; + f32 timer; +} mPlayer_main_pull_c; + +typedef struct player_main_rotate_furniture_s { + int ftr_no; + xyz_t pos; + int _10; + int rotate_type; +} mPlayer_main_rotate_furniture_c; + +typedef struct player_main_open_furniture_s { + s16 angle_y; + xyz_t player_pos; + int anim_idx; +} mPlayer_main_open_furniture_c; + +typedef struct player_main_lie_bed_s { + int flags; +} mPlayer_main_lie_bed_c; + +typedef struct player_main_wait_bed_s { + int flags; +} mPlayer_main_wait_bed_c; + typedef struct player_main_wade_s { int dir; xyz_t start_pos; @@ -1739,6 +1791,14 @@ typedef union { mPlayer_main_return_outdoor2_c return_outdoor2; mPlayer_main_wait_c wait; mPlayer_main_door_c door; + mPlayer_main_outdoor_c outdoor; + mPlayer_main_hold_c hold; + mPlayer_main_push_c push; + mPlayer_main_pull_c pull; + mPlayer_main_rotate_furniture_c rotate_furniture; + mPlayer_main_open_furniture_c open_furniture; + mPlayer_main_lie_bed_c lie_bed; + mPlayer_main_wait_bed_c wait_bed; mPlayer_main_wade_c wade; mPlayer_main_pickup_c pickup; mPlayer_main_pickup_jump_c pickup_jump; diff --git a/src/m_player.c b/src/m_player.c index ce2df543..08c6527b 100644 --- a/src/m_player.c +++ b/src/m_player.c @@ -33,7 +33,7 @@ static int Player_actor_Movement_Base_Braking_common(ACTOR* actorx, f32 brake_am static int Player_actor_Movement_Base_Braking(ACTOR* actorx); static void Player_actor_Movement_Base_Stop(ACTOR* actorx, int use_position_speed_y); static int Player_actor_CulcAnimation_Base2(ACTOR* actorx, f32* last_anim0_current_frame_p); -static int Player_actor_Check_AnimationFrame_PerfectEquel(ACTOR* actorx, GAME* game, f32 frame); +static int Player_actor_Check_AnimationFrame_PerfectEquel(ACTOR* actorx, f32 frame); static int Player_actor_Check_AnimationFrame(cKF_FrameControl_c* fc_p, f32 target_frame); static void Player_actor_set_eye_pattern(ACTOR* actorx, int idx); static void Player_actor_set_eye_pattern_normal(ACTOR* actorx); diff --git a/src/m_player_common.c_inc b/src/m_player_common.c_inc index a9858861..24e4b710 100644 --- a/src/m_player_common.c_inc +++ b/src/m_player_common.c_inc @@ -2299,7 +2299,7 @@ static void Player_actor_putin_furniture(GAME* game, int slot, mActor_name_t ite } } -static int Player_actor_Check_AnimationFrame_PerfectEquel(ACTOR* actorx, GAME* game, f32 frame) { +static int Player_actor_Check_AnimationFrame_PerfectEquel(ACTOR* actorx, f32 frame) { PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; cKF_FrameControl_c* fc_p = &kf0_p->frame_control; diff --git a/src/m_player_main_dash.c_inc b/src/m_player_main_dash.c_inc index 746f0a54..263f11bf 100644 --- a/src/m_player_main_dash.c_inc +++ b/src/m_player_main_dash.c_inc @@ -90,7 +90,7 @@ static void Player_actor_SetEffect_Dash(ACTOR* actor, GAME* game, f32 left_targe } static void Player_actor_SearchAnimation_Dash(ACTOR* actor, GAME* game, f32 frame) { - if (!Player_actor_Check_AnimationFrame_PerfectEquel(actor, game, frame)) { + if (!Player_actor_Check_AnimationFrame_PerfectEquel(actor, frame)) { Player_actor_Set_FootMark_Base1(actor, game, FALSE, FALSE); Player_actor_SetEffect_Dash(actor, game, 1.0f, 9.0f); } diff --git a/src/m_player_main_putin_item.c_inc b/src/m_player_main_putin_item.c_inc index 647b6100..e2f6fba7 100644 --- a/src/m_player_main_putin_item.c_inc +++ b/src/m_player_main_putin_item.c_inc @@ -89,7 +89,7 @@ static void Player_actor_SetItemScale_Putin_item(ACTOR* actorx) { } static void Player_actor_SearchAnimation_Putin_item(ACTOR* actorx, GAME* game, f32 frame) { - if (Player_actor_Check_AnimationFrame_PerfectEquel(actorx, game, frame) == FALSE) { + if (Player_actor_Check_AnimationFrame_PerfectEquel(actorx, frame) == FALSE) { Player_actor_Set_FootMark_Base1(actorx, game, FALSE, FALSE); } } diff --git a/src/m_player_main_return_outdoor.c_inc b/src/m_player_main_return_outdoor.c_inc index f6dcc439..b997613f 100644 --- a/src/m_player_main_return_outdoor.c_inc +++ b/src/m_player_main_return_outdoor.c_inc @@ -1,13 +1,13 @@ -static int Player_actor_request_main_return_outdoor_all(GAME* game, int prev_index, int now_index, f32 time, f32 arg5) { +static int Player_actor_request_main_return_outdoor_all(GAME* game, int prev_index, int priority, f32 time, f32 arg5) { - if (Player_actor_check_request_main_able(game, mPlayer_INDEX_RETURN_OUTDOOR, now_index)) { + if (Player_actor_check_request_main_able(game, mPlayer_INDEX_RETURN_OUTDOOR, priority)) { PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); player->requested_main_index_data.return_outdoor.prev_main_index = prev_index; player->requested_main_index_data.return_outdoor.time = time; player->requested_main_index_data.return_outdoor._08 = arg5; - Player_actor_request_main_index(game, mPlayer_INDEX_RETURN_OUTDOOR, now_index); + Player_actor_request_main_index(game, mPlayer_INDEX_RETURN_OUTDOOR, priority); return TRUE; } else { return FALSE; diff --git a/src/m_player_main_run.c_inc b/src/m_player_main_run.c_inc index ca652cc8..2ba4580a 100644 --- a/src/m_player_main_run.c_inc +++ b/src/m_player_main_run.c_inc @@ -47,7 +47,7 @@ static void Player_actor_SetEffect_Run(ACTOR* actor, GAME* game, f32 left_target } static void Player_actor_SearchAnimation_Run(ACTOR* actor, GAME* game, f32 frame) { - if (!Player_actor_Check_AnimationFrame_PerfectEquel(actor, game, frame)) { + if (!Player_actor_Check_AnimationFrame_PerfectEquel(actor, frame)) { Player_actor_Set_FootMark_Base1(actor, game, FALSE, FALSE); Player_actor_SetEffect_Walk(actor, game, 1.0f, 9.0f); } diff --git a/src/m_player_main_takeout_item.c_inc b/src/m_player_main_takeout_item.c_inc index bc74782c..e0cad276 100644 --- a/src/m_player_main_takeout_item.c_inc +++ b/src/m_player_main_takeout_item.c_inc @@ -63,7 +63,7 @@ static void Player_actor_ObjCheck_Takeout_item(ACTOR* actorx, GAME* game) { } static void Player_actor_SearchAnimation_Takeout_item(ACTOR* actorx, GAME* game, f32 frame) { - if (Player_actor_Check_AnimationFrame_PerfectEquel(actorx, game, frame) == FALSE) { + if (Player_actor_Check_AnimationFrame_PerfectEquel(actorx, frame) == FALSE) { Player_actor_Set_FootMark_Base1(actorx, game, FALSE, FALSE); } } diff --git a/src/m_player_main_tumble.c_inc b/src/m_player_main_tumble.c_inc index f61126f0..321aa830 100644 --- a/src/m_player_main_tumble.c_inc +++ b/src/m_player_main_tumble.c_inc @@ -114,7 +114,7 @@ static void Player_actor_SetEffect_Tumble(ACTOR* actor, GAME* game, int base) { } static void Player_actor_SearchAnimation_Tumble(ACTOR* actor, GAME* game, f32 frame, int base) { - if (!Player_actor_Check_AnimationFrame_PerfectEquel(actor, game, frame)) { + if (!Player_actor_Check_AnimationFrame_PerfectEquel(actor, frame)) { Player_actor_SetEffect_Tumble(actor, game, base); } } diff --git a/src/m_player_main_wade_snowball.c_inc b/src/m_player_main_wade_snowball.c_inc index e69de29b..51c99e2f 100644 --- a/src/m_player_main_wade_snowball.c_inc +++ b/src/m_player_main_wade_snowball.c_inc @@ -0,0 +1,143 @@ +static int Player_actor_request_main_wade_snowball_all(GAME* game, int dir, xyz_t snowball_dist, int priority) { + if (GET_PLAYER_ACTOR_GAME(game)->now_main_index == mPlayer_INDEX_PUSH_SNOWBALL) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); + if (Player_actor_check_request_main_able(game, mPlayer_INDEX_WADE_SNOWBALL, priority)) { + player->requested_main_index_data.wade_snowball.dir = dir; + player->requested_main_index_data.wade_snowball.snowball_dist = snowball_dist; + player->requested_main_index_data.wade_snowball.label = player->main_data.push_snowball.label; + + Player_actor_request_main_index(game, mPlayer_INDEX_WADE_SNOWBALL, priority); + + return TRUE; + } + } + + return FALSE; +} + +static void Player_actor_setup_main_Wade_snowball(ACTOR* actor, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; + GAME_PLAY* play = (GAME_PLAY*)game; + xyz_t* world_pos; + xyz_t camera_pos; + int dir; + f32 t; + xyz_t* end_pos; + + Player_actor_setup_main_Wade_snowball_other_func1(actor, game); + dir = player->requested_main_index_data.wade_snowball.dir; + + player->main_data.wade_snowball.dir = dir; + world_pos = &actor->world.position; + end_pos = &player->main_data.wade_snowball.end_pos; + + player->main_data.wade_snowball.start_pos = *world_pos; + player->main_data.wade_snowball.start_pos = *world_pos; + + Player_actor_Culc_wade_end_pos(world_pos, end_pos, dir, 18.0f); + + player->main_data.wade_snowball.timer = 0.0f; + + player->main_data.wade_snowball.snowball_dist = player->requested_main_index_data.wade_snowball.snowball_dist; + player->main_data.wade_snowball.snowball_label = player->requested_main_index_data.wade_snowball.label; + + Player_actor_setup_main_Base(actor, game); + camera_pos = player->main_data.wade_snowball.end_pos; + + camera_pos.y += actor->eye.position.y - world_pos->y; + + Camera2_request_main_wade(play, &camera_pos, 9, 36.0f); + + Player_actor_setup_main_Wade_snowball_other_func2(actor, game); +} + +static void Player_actor_settle_main_Wade_snowball(ACTOR* actor, GAME* game) { + mDemo_End(actor); +} + +static void Player_actor_ChangeAnimation_Wade_snowball(ACTOR* actor, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; + + if (player->animation0_idx != mPlayer_ANIM_WAIT1 && player->crash_snowball_for_wade != FALSE) { + int anim_idx; + int part_table_idx; + Player_actor_SetupItem_Base1(actor, mPlayer_ANIM_WAIT1, -5.0f, &anim_idx, &part_table_idx); + Player_actor_InitAnimation_Base1(actor, game, mPlayer_ANIM_WAIT1, anim_idx, 1.0f, 1.0f, 0.5f, -5.0f, + part_table_idx); + } +} + +static int Player_actor_CulcAnimation_Wade_snowball(ACTOR* actor) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; + + if (player->animation0_idx == mPlayer_ANIM_WAIT1) { + f32 calc_frame; + return Player_actor_CulcAnimation_Base2(actor, &calc_frame); + } else { + return 0; + } +} + +static void Player_actor_Movement_Wade_snowball(ACTOR* actor) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; + mPlayer_main_wade_snowball_c* main_wade_snowball_p = &player->main_data.wade_snowball; + xyz_t* start_pos; + xyz_t* end_pos; + f32 brake; + + start_pos = &main_wade_snowball_p->start_pos; + end_pos = &main_wade_snowball_p->end_pos; + + brake = get_percent_forAccelBrake(player->main_data.wade_snowball.timer, 0.0f, 36.0f, 1.20f, 34.8f); + actor->world.position.x = start_pos->x + (brake * (end_pos->x - start_pos->x)); + actor->world.position.y = start_pos->y + (brake * (end_pos->y - start_pos->y)); + actor->world.position.z = start_pos->z + (brake * (end_pos->z - start_pos->z)); + + Player_actor_Movement_Base_Stop(actor, FALSE); +} + +static void Player_actor_BGcheck_Wade_snowball(ACTOR* actor) { + Player_actor_BGcheck_common_type2(actor); +} + +static int Player_actor_able_request_proc_index_fromWade_snowball_common(ACTOR* actor) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; + + if (player->main_data.wade_snowball.timer > 36.0f) { + return TRUE; + } else { + player->main_data.wade_snowball.timer += 1.0f; + return FALSE; + } +} + +static void Player_actor_request_proc_index_fromWade_snowball(ACTOR* actor, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; + + if (Player_actor_able_request_proc_index_fromWade_snowball_common(actor)) { + int anim_idx = player->animation0_idx; + Player_actor_SettleRequestMainIndexPriority(actor); + + if (anim_idx != mPlayer_ANIM_WAIT1 && player->crash_snowball_for_wade == FALSE) { + Player_actor_request_main_push_snowball_all(game, player->main_data.wade_snowball.snowball_label, 1, + mPlayer_REQUEST_PRIORITY_2); + } else { + Player_actor_request_main_walk_all(game, &player->main_data.wade_snowball.end_pos, -5.0f, 6, 1); + } + } +} + +static void Player_actor_main_Wade_snowball(ACTOR* actor, GAME* game) { + if (Player_actor_Request_Wade(actor) != FALSE) { + Player_actor_main_Wade_snowball_other_func1(actor, game); + Player_actor_Movement_Wade_snowball(actor); + Player_actor_Reinput_force_position_angle(actor, game); + Player_actor_ChangeAnimation_Wade_snowball(actor, game); + Player_actor_CulcAnimation_Wade_snowball(actor); + Player_actor_recover_lean_angle(actor); + Player_actor_set_eye_pattern_normal(actor); + Player_actor_BGcheck_Wade_snowball(actor); + Player_actor_Item_main(actor, game); + Player_actor_request_proc_index_fromWade_snowball(actor, game); + } +} diff --git a/src/m_player_main_walk.c_inc b/src/m_player_main_walk.c_inc index 97f90140..84a3e578 100644 --- a/src/m_player_main_walk.c_inc +++ b/src/m_player_main_walk.c_inc @@ -122,7 +122,7 @@ static void Player_actor_SetEffect_Walk(ACTOR* actor, GAME* game, f32 left_targe } static void Player_actor_SearchAnimation_Walk(ACTOR* actor, GAME* game, f32 frame) { - if (!Player_actor_Check_AnimationFrame_PerfectEquel(actor, game, frame)) { + if (!Player_actor_Check_AnimationFrame_PerfectEquel(actor, frame)) { Player_actor_Set_FootMark_Base1(actor, game, FALSE, FALSE); Player_actor_SetEffect_Walk(actor, game, 1.0f, 9.0f); }