From 8f513ece25220395a711ba3c2117d81b68065b19 Mon Sep 17 00:00:00 2001 From: Prakxo Date: Wed, 11 Sep 2024 20:14:52 +0200 Subject: [PATCH] match m_player_main_ready_rod --- include/m_player.h | 24 ++++- src/m_player_common.c_inc | 1 + src/m_player_main_putaway_net.c_inc | 4 +- src/m_player_main_ready_rod.c_inc | 135 ++++++++++++++++++++++++++++ 4 files changed, 162 insertions(+), 2 deletions(-) diff --git a/include/m_player.h b/include/m_player.h index 38a0fa23..e5aca1a5 100644 --- a/include/m_player.h +++ b/include/m_player.h @@ -1105,7 +1105,7 @@ typedef struct player_request_notice_rod_s { typedef struct player_request_putaway_rod_s { s16 angle_y; - int _04; + int exchange_flag; } mPlayer_request_putaway_rod_c; typedef struct player_request_dig_scoop_s { @@ -1778,6 +1778,25 @@ typedef struct player_main_putaway_net_s { int exchange_flag; } mPlayer_main_putaway_net_c; +typedef struct player_main_cast_rod_s { + xyz_t bobber_target_pos; +} mPlayer_main_cast_rod_c; + +typedef struct player_main_notice_rod_s { + f32 _00; + int state; + int not_full_pocket; + int exchange_flag; + int already_collected; + int end_effect_flag; +} mPlayer_main_notice_rod_c; + +typedef struct player_main_putaway_rod_s { + f32 timer; + s16 angle_y; + int exchange_flag; +} mPlayer_main_putaway_rod_c; + typedef struct player_main_demo_wade_s { int dir; xyz_t start_pos; @@ -1955,7 +1974,10 @@ typedef union { mPlayer_main_notice_net_c notice_net; mPlayer_main_putaway_net_c putaway_net; mPlayer_main_slip_net_c slip_net; + mPlayer_main_cast_rod_c cast_rod; mPlayer_main_relax_rod_c relax_rod; + mPlayer_main_notice_rod_c notice_rod; + mPlayer_main_putaway_rod_c putaway_rod; mPlayer_main_dig_scoop_c dig_scoop; mPlayer_main_fill_scoop_c fill_scoop; mPlayer_main_reflect_scoop_c reflect_scoop; diff --git a/src/m_player_common.c_inc b/src/m_player_common.c_inc index ede96aeb..fdf983ea 100644 --- a/src/m_player_common.c_inc +++ b/src/m_player_common.c_inc @@ -3911,6 +3911,7 @@ static void Player_actor_SetupItem_Base1(ACTOR* actorx, int anim1_idx, f32 item_ } } +// Usage in the calls seem wrong (fairly random indexes), for anim_idx and item_main_index static void Player_actor_SetupItem_Base2(ACTOR* actorx, int item_kind, int anim_idx, int item_main_index, f32 morph_speed, f32 start_frame, int mode) { PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; diff --git a/src/m_player_main_putaway_net.c_inc b/src/m_player_main_putaway_net.c_inc index c56576ed..48e3d84d 100644 --- a/src/m_player_main_putaway_net.c_inc +++ b/src/m_player_main_putaway_net.c_inc @@ -68,7 +68,9 @@ static void Player_actor_ObjCheck_Putaway_net(ACTOR* actor, GAME* game) { Player_actor_Excute_Corect_forStand(actor, game); } -static void Player_actor_BGcheck_Putaway_net(ACTOR* actor) { Player_actor_BGcheck_common_type1(actor); } +static void Player_actor_BGcheck_Putaway_net(ACTOR* actor) { + Player_actor_BGcheck_common_type1(actor); +} static void Player_actor_request_proc_index_fromPutaway_net(ACTOR* actor, GAME* game, int end_flag) { PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; diff --git a/src/m_player_main_ready_rod.c_inc b/src/m_player_main_ready_rod.c_inc index e69de29b..5ca8fea3 100644 --- a/src/m_player_main_ready_rod.c_inc +++ b/src/m_player_main_ready_rod.c_inc @@ -0,0 +1,135 @@ +static int Player_actor_request_main_ready_rod(GAME* game, int priority) { + if (Player_actor_check_request_main_able(game, mPlayer_INDEX_READY_ROD, priority)) { + Player_actor_request_main_index(game, mPlayer_INDEX_READY_ROD, priority); + + return TRUE; + } + + return FALSE; +} + +static void Player_actor_setup_main_Ready_rod(ACTOR* actor, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; + int kind = Player_actor_Get_ItemKind_from_submenu(); + + Player_actor_SetupItem_Base2(actor, kind, mPlayer_ANIM_UMBRELLA1, mPlayer_INDEX_TUMBLE_GETUP, -5.0f, -1.0f, 0); + Player_actor_InitAnimation_Base2(actor, game, mPlayer_ANIM_SAO_SWING1, mPlayer_ANIM_SAO_SWING1, 1.0f, 1.0f, 0.5f, + -5.0f, 0, 0); + Player_actor_setup_main_Base(actor, game); + + player->item_rod_angle_z = 0; +} + +static void Player_actor_Movement_Ready_rod(ACTOR* actor) { + Player_actor_Movement_Base_Braking_common(actor, 0.32625f); +} + +static void Player_actor_CulcAnimation_Ready_rod(ACTOR* actor, f32* frame_calc) { + Player_actor_CulcAnimation_Base2(actor, frame_calc); +} + +static void Player_actor_ObjCheck_Ready_rod(ACTOR* actor, GAME* game) { + Player_actor_Excute_Corect_forStand(actor, game); +} + +static void Player_actor_BGcheck_Ready_rod(ACTOR* actor) { + Player_actor_BGcheck_common_type1(actor); +} + +static void Player_actor_SearchAnimation_Ready_rod(ACTOR* actor, GAME* game, f32 frame) { + if (!Player_actor_Check_AnimationFrame_PerfectEquel(actor, frame)) { + Player_actor_Set_FootMark_Base1(actor, game, 0, 0); + } +} + +static void Player_actor_request_proc_index_fromReady_rod(ACTOR* actor, GAME* game) { + static const f32 array_addX[] = { + 0.0f, -10.0f, 10.0f, -10.0f, 10.0f, + }; + + static const f32 array_addZ[] = { + 0.0f, -10.0f, -10.0f, 10.0f, 10.0f, + }; + + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; + + xyz_t pos; + + if (player->keyframe0.frame_control.current_frame >= 10.0f) { + s16 rot; + int ready; + int i; + int attr; + f32 sin; + f32 arg; + f32 cos; + f32 y; + + rot = actor->shape_info.rotation.y; + + sin = sin_s(rot) * 100.0f; + cos = cos_s(rot) * 100.0f; + + y = actor->world.position.y; + + pos.x = actor->world.position.x + sin; + pos.z = actor->world.position.z + (cos); + pos.y = 0.0f; + + ready = TRUE; + + for (i = 0; i < 5; i++) { + xyz_t wpos = pos; + f32 height; + + wpos.x += array_addX[i]; + wpos.y = 0.0f; + + wpos.z += array_addZ[i]; + + attr = mCoBG_Wpos2BgAttribute_Original(wpos); + + if (mCoBG_GetMoveBgHeight(&arg, &wpos) != -1) { + ready = FALSE; + break; + + } else if (!mCoBG_CheckWaterAttribute(attr)) { + ready = FALSE; + break; + } + height = mCoBG_GetWaterHeight_File(wpos, "m_player_main_ready_rod.c_inc", 165); + wpos.y = height; + + if ((wpos.y - y) >= 60.0f) { + ready = FALSE; + break; + } + } + + if (ready) { + f32 height = mCoBG_GetWaterHeight_File(pos, "m_player_main_ready_rod.c_inc", 177); + pos.y = height; + + if ((pos.y - y) < 60.0f) { + Player_actor_request_main_cast_rod(game, &pos, mPlayer_REQUEST_PRIORITY_21); + return; + } + } + Player_actor_request_main_air_rod(game, mPlayer_REQUEST_PRIORITY_21); + } +} + +static void Player_actor_main_Ready_rod(ACTOR* actor, GAME* game) { + f32 frame_calc; + + Player_actor_Movement_Ready_rod(actor); + Player_actor_CulcAnimation_Ready_rod(actor, &frame_calc); + Player_actor_Reinput_force_position_angle(actor, game); + Player_actor_SearchAnimation_Ready_rod(actor, game, frame_calc); + Player_actor_recover_lean_angle(actor); + Player_actor_set_eye_pattern_normal(actor); + Player_actor_ObjCheck_Ready_rod(actor, game); + Player_actor_BGcheck_Ready_rod(actor); + Player_actor_Item_main(actor, game); + Player_actor_request_proc_index_fromReady_rod(actor, game); +}