diff --git a/include/audio.h b/include/audio.h index aa417578..34c4afba 100644 --- a/include/audio.h +++ b/include/audio.h @@ -25,6 +25,12 @@ typedef struct audio_staffroll_info_s { /* 0x12 */ s8 beat; } StaffRollInfo_c; +typedef struct radio_s { + /* 0x000 */ s8 unk0; + /* 0x004 */ f32 unk4; + /* 0x008 */ u16 tempo; +} Radio_c; + enum { STAFFROLL_PART_START, STAFFROLL_PART_INTRO, @@ -112,7 +118,7 @@ extern void sAdos_KishaStatusTrg(u8 state); extern void sAdos_KishaStatusLevel(f32 speed, u32 ongenNum1, u16 angle1, f32 distance1, u32 ongenNum2, u16 angle2, f32 distance2); -extern void sAdos_GetRadioCounter(void* p); +extern int sAdos_GetRadioCounter(Radio_c* radio); extern void sAdos_GetKappaCounter(void* p); extern void sAdos_GetStaffRollInfo(StaffRollInfo_c* info); @@ -141,7 +147,7 @@ extern void sAdo_FurnitureInstPos(u32 id, const xyz_t* pos); extern void sAdo_Set_ongenpos_refuse_fg(int state); extern int sAdo_GameframeEnd_Check(); -extern int sAdo_GetSoundFrameCounter(); +extern u32 sAdo_GetSoundFrameCounter(); extern int sAdo_CheckOnPlussBridge(const xyz_t* pos, u32 atr); extern void sAdo_RegistPlussBridge(const xyz_t* pos); diff --git a/include/jaudio_NES/audiostruct.h b/include/jaudio_NES/audiostruct.h index 96000601..feb2e5da 100644 --- a/include/jaudio_NES/audiostruct.h +++ b/include/jaudio_NES/audiostruct.h @@ -537,7 +537,7 @@ struct group_ { /* 0x010 */ u16 delay; /* 0x012 */ u16 fade_timer; /* 0x014 */ u16 stored_fade_timer; - /* 0x016 */ u16 unk016; + /* 0x016 */ u16 counter; /* 0x018 */ u8* seq_data; /* 0x01C */ f32 fade_volume; /* 0x020 */ f32 fade_velocity; diff --git a/include/jaudio_NES/radio.h b/include/jaudio_NES/radio.h index 05c15392..0599d9c8 100644 --- a/include/jaudio_NES/radio.h +++ b/include/jaudio_NES/radio.h @@ -2,22 +2,16 @@ #define RADIO_H #include "types.h" - -typedef struct radio_ { - /* 0x000 */ s8 unk0; - /* 0x004 */ f32 unk4; - /* 0x008 */ u16 tempo; -} radio; +#include "audio.h" #ifdef __cplusplus extern "C" { #endif -extern s16 Na_GetRadioCounter(radio* radio); +extern int Na_GetRadioCounter(Radio_c* radio); #ifdef __cplusplus } #endif - -#endif \ No newline at end of file +#endif diff --git a/include/m_player.h b/include/m_player.h index 3e6fafae..969f7f58 100644 --- a/include/m_player.h +++ b/include/m_player.h @@ -23,7 +23,7 @@ extern "C" { #define mPlayer_SUNBURN_MAX_RANK 8 -#define mPlayer_RADIO_EXCERCISE_COMMAND_RING_BUFFER_SIZE 8 +#define mPlayer_RADIO_EXERCISE_COMMAND_RING_BUFFER_SIZE 8 typedef struct player_actor_s PLAYER_ACTOR; @@ -743,6 +743,38 @@ enum { mPlayer_AXE_BREAK_FROM_NUM }; +enum { + mPlayer_RADIO_EXERCISE_CMD0, + mPlayer_RADIO_EXERCISE_CMD1, + mPlayer_RADIO_EXERCISE_CMD2, + mPlayer_RADIO_EXERCISE_CMD3, + mPlayer_RADIO_EXERCISE_CMD4, + mPlayer_RADIO_EXERCISE_CMD5, + mPlayer_RADIO_EXERCISE_CMD6, + mPlayer_RADIO_EXERCISE_CMD7, + mPlayer_RADIO_EXERCISE_CMD8, + mPlayer_RADIO_EXERCISE_CMD9, + mPlayer_RADIO_EXERCISE_CMD10, + mPlayer_RADIO_EXERCISE_CMD11, + mPlayer_RADIO_EXERCISE_CMD12, + mPlayer_RADIO_EXERCISE_CMD13, + mPlayer_RADIO_EXERCISE_CMD14, + mPlayer_RADIO_EXERCISE_CMD15, + mPlayer_RADIO_EXERCISE_CMD16, + mPlayer_RADIO_EXERCISE_CMD17, + + mPlayer_RADIO_EXERCISE_CMD_NUM +}; + +enum { + mPlayer_GOLDEN_ITEM_TYPE_AXE, + mPlayer_GOLDEN_ITEM_TYPE_NET, + mPlayer_GOLDEN_ITEM_TYPE_ROD, + mPlayer_GOLDEN_ITEM_TYPE_SHOVEL, + + mPlayer_GOLDEN_ITEM_TYPE_NUM +}; + #define mPlayer_SETUP_TEXTURE_ANIMATION_NONE (0 << 0) /* Where is (1 << 0)? */ #define mPlayer_SETUP_TEXTURE_ANIMATION_EYE (1 << 1) @@ -921,7 +953,7 @@ typedef struct player_request_demo_getoff_boat_standup_s { } mPlayer_request_demo_getoff_boat_standup_c; typedef struct player_request_demo_get_golden_item_s { - u32 label; + int type; } mPlayer_request_demo_get_golden_item_c; typedef struct player_request_walk_s { @@ -1200,8 +1232,8 @@ typedef struct player_request_swing_fan_s { } mPlayer_request_swing_fan_c; typedef struct player_request_radio_exercise_s { - int anim_idx; - f32 morph_speed; + int cmd; + f32 speed; } mPlayer_request_radio_exercise_c; typedef struct player_request_demo_geton_boat_wade_s { @@ -1575,10 +1607,14 @@ typedef struct player_main_pickup_exchange_s { int submenu_flag; } mPlayer_main_pickup_exchange_c; -typedef struct player_main_swing_axe_s { +typedef struct player_main_axe_common_s { /* 0x00 */ xyz_t target_pos; /* 0x0C */ mActor_name_t item; /* 0x0E */ u16 axe_damage_no; +} mPlayer_main_axe_common_c; + +typedef struct player_main_swing_axe_s { + /* 0x00 */ mPlayer_main_axe_common_c axe_common; /* 0x10 */ int tree_ut_x; /* 0x14 */ int tree_ut_z; /* 0x18 */ int bee_flag; @@ -1587,17 +1623,17 @@ typedef struct player_main_swing_axe_s { } mPlayer_main_swing_axe_c; typedef struct player_main_reflect_axe_s { - xyz_t target_pos; - mActor_name_t item; - u16 axe_damage_no; - ACTOR* reflect_actor_p; + /* 0x00 */ mPlayer_main_axe_common_c axe_common; + /* 0x10 */ ACTOR* reflect_actor_p; } mPlayer_main_reflect_axe_c; +typedef union player_main_axe_u { + mPlayer_main_swing_axe_c swing_axe; + mPlayer_main_reflect_axe_c reflect_axe; +} mPlayer_main_axe_u; + typedef struct player_main_broken_axe_s { - union { - mPlayer_main_swing_axe_c swing_axe; - mPlayer_main_reflect_axe_c reflect_axe; - } axe; + mPlayer_main_axe_u axe; int break_type; /* mPlayer_AXE_BREAK_FROM_* */ f32 _28; int _2C; @@ -1809,6 +1845,13 @@ typedef struct player_main_notice_mosquito_s { int msg_mode; } mPlayer_main_notice_mosquito_c; +typedef struct player_main_radio_exercise_s { + int cmd; + int _04; + int _08; + int _0C; +} mPlayer_main_radio_exercise_c; + typedef struct player_main_wade_snowball_s { int dir; xyz_t start_pos; @@ -1835,6 +1878,16 @@ typedef struct player_main_demo_getoff_boat_standup_s { s16 angle_z; } mPlayer_main_demo_getoff_boat_standup_c; +typedef struct player_main_demo_get_golden_item_s { + f32 timer; + int msg_mode; + int type; +} mPlayer_main_demo_get_golden_item_c; + +typedef struct player_main_demo_get_golden_axe_wait_s { + f32 timer; +} mPlayer_main_demo_get_golden_axe_wait_c; + typedef struct player_main_uki_s { xyz_t cast_goal_point; } mPlayer_main_uki_c; @@ -1914,10 +1967,13 @@ typedef union { mPlayer_main_fail_emu_c fail_emu; mPlayer_main_stung_mosquito_c stung_mosquito; mPlayer_main_notice_mosquito_c notice_mosquito; + mPlayer_main_radio_exercise_c radio_exercise; mPlayer_main_wade_snowball_c wade_snowball; mPlayer_main_demo_geton_boat_wade_c demo_geton_boat_wade; mPlayer_main_demo_geton_boat_sitdown_c demo_geton_boat_sitdown; mPlayer_main_demo_getoff_boat_standup_c demo_getoff_boat_standup; + mPlayer_main_demo_get_golden_item_c demo_get_golden_item; + mPlayer_main_demo_get_golden_axe_wait_c demo_get_golden_axe_wait; mPlayer_main_uki_c uki; mPlayer_main_putaway_uki_c putaway_uki; mPlayer_main_balloon_c balloon; @@ -2080,12 +2136,12 @@ struct player_actor_s { /* 0x1220 */ u32 able_force_speak_label; /* 0x1224 */ int player_sunburn_rankup; /* 0x1228 */ int player_sunburn_rankdown; - /* 0x122C */ s8 radio_exercise_command_ring_buffer[mPlayer_RADIO_EXCERCISE_COMMAND_RING_BUFFER_SIZE]; + /* 0x122C */ s8 radio_exercise_command_ring_buffer[mPlayer_RADIO_EXERCISE_COMMAND_RING_BUFFER_SIZE]; /* 0x1234 */ s8 radio_exercise_ring_buffer_cmd_timer; /* 0x1238 */ int radio_exercise_command_ring_buffer_index; /* 0x123C */ int radio_exercise_continue_cmd_idx; /* 0x1240 */ f32 radio_exercise_cmd_timer; - /* 0x1244 */ int old_sound_frame_counter; + /* 0x1244 */ u32 old_sound_frame_counter; /* 0x1248 */ s16 boat_angleZ; /* 0x124C */ int change_color_request; /* 0x1250 */ int change_color_flag; diff --git a/include/m_player_lib.h b/include/m_player_lib.h index eba95f2e..5140f70d 100644 --- a/include/m_player_lib.h +++ b/include/m_player_lib.h @@ -113,6 +113,7 @@ extern int mPlib_strength_request_main_wade_snowball_priority(GAME* game); extern void mPlib_change_player_face(GAME* game); extern void mPlib_change_player_cloth_info(mPr_cloth_c* cloth_p, mActor_name_t cloth_item); extern int mPlib_Get_status_for_bee(void); +extern int mPlib_request_main_demo_get_golden_item2_type1(GAME* game, int golden_item_type); extern mPlayer_change_data_from_submenu_c* mPlib_Get_change_data_from_submenu_p(); diff --git a/include/m_private_h.h b/include/m_private_h.h index cb355552..5a48a930 100644 --- a/include/m_private_h.h +++ b/include/m_private_h.h @@ -2,6 +2,7 @@ #define M_PRIVATE_H_H #include "types.h" +#include "m_actor_type.h" #ifdef __cplusplus extern "C" { diff --git a/src/audio.c b/src/audio.c index 07d1a928..615f901c 100644 --- a/src/audio.c +++ b/src/audio.c @@ -297,8 +297,8 @@ extern void sAdos_KishaStatusLevel(f32 speed, u32 ongenNum1, u16 angle1, f32 dis Na_KishaStatusLevel(speed, ongenNum1, angle1, distance1, ongenNum2, angle2, distance2); } -extern void sAdos_GetRadioCounter(void* p) { - Na_GetRadioCounter(p); +extern int sAdos_GetRadioCounter(Radio_c* radio) { + return Na_GetRadioCounter(radio); } extern void sAdos_GetKappaCounter(void* p) { @@ -470,7 +470,7 @@ extern int sAdo_GameframeEnd_Check() { return S_ongenpos_refuse_fg; } -extern int sAdo_GetSoundFrameCounter() { +extern u32 sAdo_GetSoundFrameCounter() { return Na_GetSoundFrameCounter(); } diff --git a/src/m_player.c b/src/m_player.c index 37ee6be8..63358d2e 100644 --- a/src/m_player.c +++ b/src/m_player.c @@ -15,6 +15,9 @@ #include "ac_sign.h" #include "m_msg.h" #include "m_choice.h" +#include "ac_ball.h" +#include "ac_snowman.h" +#include "ac_boat_demo.h" /* Static function declarations, add as needed for intellisense */ static int Player_actor_check_request_main_able(GAME* game, int request_main_index, int priority); @@ -337,7 +340,7 @@ static int Player_actor_request_main_shock_all(GAME*, f32, s16, s8, int, int); static int Player_actor_request_main_change_cloth_forNPC(GAME*, mActor_name_t, u16, int); static int Player_actor_request_main_push_snowball_all(GAME*, u32, int, int); static int Player_actor_request_main_stung_mosquito_all(GAME*, u32, int); -static int Player_actor_request_main_switch_on_lighthouse_all(GAME*, const xyz_t*, int, int); +static int Player_actor_request_main_switch_on_lighthouse_all(GAME*, const xyz_t*, s16, int); static int Player_actor_request_main_demo_geton_boat_all(GAME*, const xyz_t*, s16, int); static int Player_actor_request_main_demo_getoff_boat_standup_all(GAME*, const xyz_t*, s16, int); static int Player_actor_request_main_demo_get_golden_item2_all(GAME*, int, int); diff --git a/src/m_player_common.c_inc b/src/m_player_common.c_inc index 0769ec05..ede96aeb 100644 --- a/src/m_player_common.c_inc +++ b/src/m_player_common.c_inc @@ -4566,9 +4566,9 @@ static int Player_actor_Check_HitAxe(ACTOR* actorx, xyz_t* axe_pos_p) { } if (swing_axe_p != NULL) { - pos_p = &swing_axe_p->target_pos; + pos_p = &swing_axe_p->axe_common.target_pos; } else { - pos_p = &reflect_axe_p->target_pos; + pos_p = &reflect_axe_p->axe_common.target_pos; } if (pos_p != NULL && Player_actor_Check_AnimationFrame(&player->keyframe0.frame_control, 15.0f) != FALSE) { diff --git a/src/m_player_main_broken_axe.c_inc b/src/m_player_main_broken_axe.c_inc index d023c061..4adfd26f 100644 --- a/src/m_player_main_broken_axe.c_inc +++ b/src/m_player_main_broken_axe.c_inc @@ -56,7 +56,7 @@ static void Player_actor_setup_main_Broken_axe(ACTOR* actor, GAME* game) { Player_actor_setup_main_Base(actor, game); } -static void Player_actor_settle_main_Broken_axe(ACTOR* actor) { +static void Player_actor_settle_main_Broken_axe(ACTOR* actor, GAME* game) { mBGMPsComp_delete_ps_demo(125, 0x168); actor->speed = 0.0f; } @@ -67,21 +67,19 @@ static void Player_actor_Movement_Broken_axe(ACTOR* actor) { if (player->animation0_idx == mPlayer_ANIM_AXE_BREAK1 && cur < 15.0f) { mPlayer_main_broken_axe_c* main_axe = &player->main_data.broken_axe; - void* main_ref; + mPlayer_main_axe_common_c* axe_data_p; switch (main_axe->break_type) { default: - main_ref = &main_axe->axe.reflect_axe; + axe_data_p = &main_axe->axe.reflect_axe.axe_common; break; case mPlayer_AXE_BREAK_FROM_SWING: - main_ref = &main_axe->axe.swing_axe; + axe_data_p = &main_axe->axe.swing_axe.axe_common; break; } - Player_actor_Movement_Reflect_axe_common(actor, main_ref, 1); - + Player_actor_Movement_Reflect_axe_common(actor, axe_data_p, mPlayer_REQUEST_PRIORITY_1); } else { add_calc_short_angle2(&actor->shape_info.rotation.y, 0, 1.0f - sqrtf(0.5), 2500, 50); - actor->world.angle.y = actor->shape_info.rotation.y; } } @@ -130,8 +128,8 @@ static void Player_actor_ObjCheck_Broken_axe(ACTOR* actor, GAME* game) { Player_actor_Excute_Corect_forStand(actor, game); } -static void Player_actor_BGcheck_Broken_axe(ACTOR* actor) { - Player_actor_BGcheck_common_type1(actor); +static void Player_actor_BGcheck_Broken_axe(ACTOR* actor) { + Player_actor_BGcheck_common_type1(actor); } static void Player_actor_Broken_axe_demo_ct(ACTOR* actor) { diff --git a/src/m_player_main_demo_get_golden_axe_wait.c_inc b/src/m_player_main_demo_get_golden_axe_wait.c_inc index e69de29b..13d2fa4b 100644 --- a/src/m_player_main_demo_get_golden_axe_wait.c_inc +++ b/src/m_player_main_demo_get_golden_axe_wait.c_inc @@ -0,0 +1,61 @@ +static int Player_actor_request_main_demo_get_golden_axe_wait_all(GAME* game, int prio) { + if (Player_actor_check_request_main_able(game, mPlayer_INDEX_DEMO_GET_GOLDEN_AXE_WAIT, prio)) { + Player_actor_request_main_index(game, mPlayer_INDEX_DEMO_GET_GOLDEN_AXE_WAIT, prio); + return TRUE; + } + + return FALSE; +} + +static void Player_actor_setup_main_Demo_get_golden_axe_wait(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + mPlayer_main_demo_get_golden_axe_wait_c* demo_get_golden_axe_wait_p; + int anim1_idx; + int part_table_idx; + + demo_get_golden_axe_wait_p = &player->main_data.demo_get_golden_axe_wait; + demo_get_golden_axe_wait_p->timer = 0.0f; + + Player_actor_SetupItem_Base1(actorx, mPlayer_ANIM_WAIT1, -5.0f, &anim1_idx, &part_table_idx); + Player_actor_InitAnimation_Base1(actorx, game, mPlayer_ANIM_WAIT1, anim1_idx, 1.0f, 1.0f, 0.5f, -5.0f, + part_table_idx); + Player_actor_setup_main_Base(actorx, game); +} + +static int Player_actor_CulcAnimation_Demo_get_golden_axe_wait(ACTOR* actorx) { + return Player_actor_CulcAnimation_Base(actorx); +} + +static void Player_actor_ObjCheck_Demo_get_golden_axe_wait(ACTOR* actorx, GAME* game) { + Player_actor_Excute_Corect_forStand(actorx, game); +} + +static void Player_actor_BGcheck_Demo_get_golden_axe_wait(ACTOR* actorx) { + Player_actor_BGcheck_common_type1(actorx); +} + +static void Player_actor_request_proc_index_fromDemo_get_golden_axe_wait(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + mPlayer_main_demo_get_golden_axe_wait_c* demo_get_golden_axe_wait_p; + f32* timer_p; + + demo_get_golden_axe_wait_p = &player->main_data.demo_get_golden_axe_wait; + timer_p = &demo_get_golden_axe_wait_p->timer; + + if (*timer_p < 320.0f) { + (*timer_p) += 1.0f; + } else { + mPlib_request_main_demo_get_golden_item2_type1(game, mPlayer_GOLDEN_ITEM_TYPE_AXE); + } +} + +static void Player_actor_main_Demo_get_golden_axe_wait(ACTOR* actorx, GAME* game) { + Player_actor_Reinput_force_position_angle(actorx, game); + Player_actor_CulcAnimation_Demo_get_golden_axe_wait(actorx); + Player_actor_recover_lean_angle(actorx); + Player_actor_set_eye_pattern_normal(actorx); + Player_actor_ObjCheck_Demo_get_golden_axe_wait(actorx, game); + Player_actor_BGcheck_Demo_get_golden_axe_wait(actorx); + Player_actor_Item_main(actorx, game); + Player_actor_request_proc_index_fromDemo_get_golden_axe_wait(actorx, game); +} diff --git a/src/m_player_main_demo_get_golden_item.c_inc b/src/m_player_main_demo_get_golden_item.c_inc index e69de29b..e2748e8b 100644 --- a/src/m_player_main_demo_get_golden_item.c_inc +++ b/src/m_player_main_demo_get_golden_item.c_inc @@ -0,0 +1,203 @@ +static int Player_actor_request_main_demo_get_golden_item_common(GAME* game, int main_index, int type, int prio) { + if (Player_actor_check_request_main_able(game, main_index, prio)) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); + mPlayer_request_demo_get_golden_item_c* req_demo_get_golden_item_p = + &player->requested_main_index_data.demo_get_golden_item; + + Player_actor_request_main_index(game, main_index, prio); + req_demo_get_golden_item_p->type = type; + return TRUE; + } + + return FALSE; +} + +static int Player_actor_request_main_demo_get_golden_item_all(GAME* game, int type, int prio) { + return Player_actor_request_main_demo_get_golden_item_common(game, mPlayer_INDEX_DEMO_GET_GOLDEN_ITEM, type, prio); +} + +static int Player_actor_request_main_demo_get_golden_item_from_submenu(ACTOR* actorx, GAME* game) { + return Player_actor_request_main_demo_get_golden_item_all(game, mPlayer_GOLDEN_ITEM_TYPE_SHOVEL, + mPlayer_REQUEST_PRIORITY_31); +} + +static void Player_actor_setup_main_Demo_get_golden_item(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + mPlayer_request_demo_get_golden_item_c* req_demo_get_golden_item_p; + mPlayer_main_demo_get_golden_item_c* demo_get_golden_item_p; + s16 item_kind; + int anim0_idx; + int anim1_idx; + int part_table_idx; + int dummy; + int type; + + item_kind = Player_actor_Get_ItemKind(actorx, player->requested_main_index); + anim0_idx = mPlayer_ANIM_YATTA1; + part_table_idx = mPlayer_PART_TABLE_NET; + req_demo_get_golden_item_p = &player->requested_main_index_data.demo_get_golden_item; + demo_get_golden_item_p = &player->main_data.demo_get_golden_item; + type = player->requested_main_index_data.demo_get_golden_item.type; + + demo_get_golden_item_p->timer = 0.0f; + demo_get_golden_item_p->msg_mode = 0; + demo_get_golden_item_p->type = type; + Player_actor_SetupItem_Base1(actorx, mPlayer_ANIM_YATTA1, -5.0f, &anim1_idx, &dummy); + + if (mPlayer_ITEM_IS_BALLOON(item_kind) != FALSE) { + anim0_idx = mPlayer_ANIM_YATTA3; + anim1_idx = mPlayer_ANIM_YATTA3; + part_table_idx = mPlayer_PART_TABLE_NORMAL; + } + + Player_actor_InitAnimation_Base2(actorx, game, anim0_idx, anim1_idx, 1.0f, 1.0f, 0.5f, -5.0f, cKF_FRAMECONTROL_STOP, + part_table_idx); + Player_actor_setup_main_Base(actorx, game); + + if (type >= 0 && type < mPlayer_GOLDEN_ITEM_TYPE_NUM) { + u8 bgm_num = Player_actor_sound_Get_bgm_num_forDemoGetGoldenItem(type); + + mBGMPsComp_make_ps_fanfare(bgm_num, 0x168); + } +} + +static void Player_actor_settle_main_Demo_get_golden_item(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + mPlayer_main_demo_get_golden_item_c* demo_get_golden_item_p = &player->main_data.demo_get_golden_item; + int type = demo_get_golden_item_p->type; + + if (type >= 0 && type < mPlayer_GOLDEN_ITEM_TYPE_NUM) { + static u8 data[] = { (1 << 0), (1 << 1), (1 << 2), (1 << 3) }; + u8 bgm_num = Player_actor_sound_Get_bgm_num_forDemoGetGoldenItem(type); + + mBGMPsComp_delete_ps_fanfare(bgm_num, 0x168); + Now_Private->golden_items_collected |= data[type]; + } +} + +static int Player_actor_CulcAnimation_Demo_get_golden_item(ACTOR* actorx) { + f32 dummy; + + return Player_actor_CulcAnimation_Base2(actorx, &dummy); +} + +static void Player_actor_Movement_Demo_get_golden_item(ACTOR* actorx) { + add_calc_short_angle2(&actorx->shape_info.rotation.y, 0, 1.0f - sqrtf(0.5f), 2500, 50); + actorx->world.angle.y = actorx->shape_info.rotation.y; + Player_actor_Movement_Base_Braking_common(actorx, 0.32625f); +} + +static void Player_actor_set_eye_pattern_Demo_get_golden_item(ACTOR* actorx, int end_flag) { + if (end_flag) { + Player_actor_set_eye_pattern_normal(actorx); + } else { + Player_actor_set_tex_anime_pattern(actorx); + } +} + +static void Player_actor_ObjCheck_Demo_get_golden_item(ACTOR* actorx, GAME* game) { + Player_actor_Excute_Corect_forStand(actorx, game); +} + +static void Player_actor_BGcheck_Demo_get_golden_item(ACTOR* actorx) { + Player_actor_BGcheck_common_type2(actorx); +} + +static void Player_actor_Demo_get_golden_item_demo_ct(ACTOR* actorx) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + mPlayer_main_demo_get_golden_item_c* demo_get_golden_item_p = &player->main_data.demo_get_golden_item; + int type = demo_get_golden_item_p->type; + mMsg_Window_c* msg_p = mMsg_Get_base_window_p(); + rgba_t window_color; + int msg_no; + + switch (type) { + case mPlayer_GOLDEN_ITEM_TYPE_AXE: + msg_no = 0x306F; + break; + case mPlayer_GOLDEN_ITEM_TYPE_NET: + msg_no = 0x306D; + break; + case mPlayer_GOLDEN_ITEM_TYPE_ROD: + msg_no = 0x306E; + break; + default: + msg_no = 0x3070; + break; + } + + mDemo_Set_msg_num(msg_no); + mDemo_Set_talk_display_name(FALSE); + mDemo_Set_camera(CAMERA2_PROCESS_ITEM); + mDemo_Set_ListenAble(); + mMsg_Set_LockContinue(msg_p); + + window_color.r = 185; + window_color.g = 245; + window_color.b = 80; + window_color.a = 255; + mDemo_Set_talk_window_color(&window_color); + mChoice_CLEAR_CHOSENUM(); +} + +static int Player_actor_MessageControl_Demo_get_golden_item(ACTOR* actorx, int end_flag) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + mPlayer_main_demo_get_golden_item_c* demo_get_golden_item_p = &player->main_data.demo_get_golden_item; + f32* timer_p = &demo_get_golden_item_p->timer; + int* msg_mode_p = &demo_get_golden_item_p->msg_mode; + mMsg_Window_c* msg_p = mMsg_Get_base_window_p(); + + if (*timer_p < 42.0f) { + (*timer_p) += 1.0f; + return FALSE; + } + + switch (*msg_mode_p) { + case 0: { + if (mDemo_Check(mDemo_TYPE_REPORT, actorx) == FALSE) { + mDemo_Request(mDemo_TYPE_REPORT, actorx, &Player_actor_Demo_get_golden_item_demo_ct); + } else { + *msg_mode_p = 1; + } + return FALSE; + } + case 1: { + if (end_flag) { + mMsg_Unset_LockContinue(msg_p); + *msg_mode_p = 2; + } + return FALSE; + } + case 2: { + if (mDemo_Check(mDemo_TYPE_REPORT, actorx) == FALSE) { + *msg_mode_p = 3; + } + return FALSE; + } + default: + return TRUE; + } +} + +static void Player_actor_request_proc_index_fromDemo_get_golden_item(ACTOR* actorx, GAME* game, int end_flag) { + if (end_flag) { + Player_actor_SettleRequestMainIndexPriority(actorx); + Player_actor_request_main_wait_all(game, -5.0f, 0.0f, 0, mPlayer_REQUEST_PRIORITY_1); + } +} + +static void Player_actor_main_Demo_get_golden_item(ACTOR* actorx, GAME* game) { + int anim_end_flag; + int msg_end_flag; + + anim_end_flag = Player_actor_CulcAnimation_Demo_get_golden_item(actorx); + Player_actor_Movement_Demo_get_golden_item(actorx); + Player_actor_Reinput_force_position_angle(actorx, game); + Player_actor_recover_lean_angle(actorx); + Player_actor_set_eye_pattern_Demo_get_golden_item(actorx, anim_end_flag); + Player_actor_ObjCheck_Demo_get_golden_item(actorx, game); + Player_actor_BGcheck_Demo_get_golden_item(actorx); + Player_actor_Item_main(actorx, game); + msg_end_flag = Player_actor_MessageControl_Demo_get_golden_item(actorx, anim_end_flag); + Player_actor_request_proc_index_fromDemo_get_golden_item(actorx, game, msg_end_flag); +} diff --git a/src/m_player_main_demo_get_golden_item2.c_inc b/src/m_player_main_demo_get_golden_item2.c_inc index e69de29b..60912dfa 100644 --- a/src/m_player_main_demo_get_golden_item2.c_inc +++ b/src/m_player_main_demo_get_golden_item2.c_inc @@ -0,0 +1,15 @@ +static int Player_actor_request_main_demo_get_golden_item2_all(GAME* game, int type, int prio) { + return Player_actor_request_main_demo_get_golden_item_common(game, mPlayer_INDEX_DEMO_GET_GOLDEN_ITEM2, type, prio); +} + +static void Player_actor_setup_main_Demo_get_golden_item2(ACTOR* actorx, GAME* game) { + Player_actor_setup_main_Demo_get_golden_item(actorx, game); +} + +static void Player_actor_settle_main_Demo_get_golden_item2(ACTOR* actorx, GAME* game) { + Player_actor_settle_main_Demo_get_golden_item(actorx, game); +} + +static void Player_actor_main_Demo_get_golden_item2(ACTOR* actorx, GAME* game) { + Player_actor_main_Demo_get_golden_item(actorx, game); +} diff --git a/src/m_player_main_demo_getoff_boat.c_inc b/src/m_player_main_demo_getoff_boat.c_inc index e69de29b..f7c04404 100644 --- a/src/m_player_main_demo_getoff_boat.c_inc +++ b/src/m_player_main_demo_getoff_boat.c_inc @@ -0,0 +1,127 @@ +static int Player_actor_request_main_demo_getoff_boat_all(GAME* game, const xyz_t* pos_p, s16 angle_y, int prio) { + if (Player_actor_check_request_main_able(game, mPlayer_INDEX_DEMO_GETOFF_BOAT, prio)) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); + mPlayer_request_demo_getoff_boat_c* req_demo_getoff_boat_p = + &player->requested_main_index_data.demo_getoff_boat; + + req_demo_getoff_boat_p->pos = *pos_p; + req_demo_getoff_boat_p->angle_y = angle_y; + Player_actor_request_main_index(game, mPlayer_INDEX_DEMO_GETOFF_BOAT, prio); + return TRUE; + } + + return FALSE; +} + +static void Player_actor_setup_main_Demo_getoff_boat(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + mPlayer_request_demo_getoff_boat_c* req_demo_getoff_boat_p = &player->requested_main_index_data.demo_getoff_boat; + int anim1_idx; + int part_table_idx; + xyz_t pos; + s16 angle_y; + f32 cos; + f32 sin; + f32 cos_x; + f32 cos_z; + f32 sin_x; + f32 sin_z; + + Player_actor_SetupItem_Base1(actorx, mPlayer_ANIM_GETOFF2, -5.0f, &anim1_idx, &part_table_idx); + + pos = req_demo_getoff_boat_p->pos; + angle_y = req_demo_getoff_boat_p->angle_y; + cos = cos_s(angle_y); + cos_x = cos; + cos_z = cos; + sin = sin_s(angle_y); + sin_x = sin; + sin_z = sin; + + /* @hack - TODO: look for a better way to match these float operations */ + pos.x -= (sin_x *= 45.0f) + (cos_x *= -2.0f); + pos.y -= 18.0f; + pos.z -= (cos_z *= 45.0f) - (sin_z *= -2.0f); + + cKF_SkeletonInfo_R_Animation_Set_base_shape_trs(kf0_p, 0.0f, 1000.0f, 0.0f, 0, 0, DEG2SHORT_ANGLE2(90.0f)); + cKF_SkeletonInfo_R_AnimationMove_ct_base(&actorx->world.position, &pos, actorx->shape_info.rotation.y, + actorx->world.angle.y, 5.0f, kf0_p, + cKF_ANIMATION_TRANS_XZ | cKF_ANIMATION_TRANS_Y | cKF_ANIMATION_ROT_Y); + + Player_actor_InitAnimation_Base2(actorx, game, mPlayer_ANIM_GETOFF2, anim1_idx, 1.0f, 1.0f, 0.5f, -5.0f, + cKF_FRAMECONTROL_STOP, part_table_idx); + Player_actor_setup_main_Base(actorx, game); + Player_actor_sound_JUMP(actorx); +} + +static void Player_actor_settle_main_Demo_getoff_boat(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + + cKF_SkeletonInfo_R_AnimationMove_dt(kf0_p); + actorx->world.angle.y = actorx->shape_info.rotation.y; + actorx->shape_info.shadow_size_change_rate = 1.0f; + actorx->shape_info.shadow_alpha_change_rate = 1.0f; +} + +static int Player_actor_CulcAnimation_Demo_getoff_boat(ACTOR* actorx, f32* last_anim0_cur_frame_p) { + return Player_actor_CulcAnimation_Base2(actorx, last_anim0_cur_frame_p); +} + +static void Player_actor_SetSound_Demo_getoff_boat(ACTOR* actorx) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + cKF_FrameControl_c* fc0_p = &kf0_p->frame_control; + + if (Player_actor_Check_AnimationFrame(fc0_p, 15.0f)) { + Player_actor_sound_LANDING(actorx); + } +} + +static void Player_actor_ControlShadow_Demo_getoff_boat(ACTOR* actorx) { + Player_actor_AppearShadow_fromAnimationFrame(actorx, 8.0f, 16.0f); +} + +static void Player_actor_SearchAnimation_Demo_getoff_boat(ACTOR* actorx, f32 frame) { + if (Player_actor_Check_AnimationFrame_PerfectEquel(actorx, frame) == FALSE) { + Player_actor_SetSound_Demo_getoff_boat(actorx); + } + + Player_actor_ControlShadow_Demo_getoff_boat(actorx); +} + +static void Player_actor_Movement_Demo_getoff_boat(ACTOR* actorx) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + + cKF_SkeletonInfo_R_AnimationMove_base(&actorx->world.position, &actorx->shape_info.rotation.y, &actorx->scale, + actorx->world.angle.y, kf0_p); + Player_actor_Movement_Base_Stop(actorx, FALSE); +} + +static void Player_actor_ObjCheck_Demo_getoff_boat(ACTOR* actorx, GAME* game) { + Player_actor_Excute_Corect_forStand(actorx, game); +} + +static void Player_actor_request_proc_index_fromDemo_getoff_boat(ACTOR* actorx, GAME* game, int end_flag) { + if (end_flag) { + Player_actor_SettleRequestMainIndexPriority(actorx); + Player_actor_request_main_demo_wait_all(game, FALSE, 0, mPlayer_REQUEST_PRIORITY_19); + } +} + +static void Player_actor_main_Demo_getoff_boat(ACTOR* actorx, GAME* game) { + f32 last_anim0_cur_frame; + int end_flag; + + end_flag = Player_actor_CulcAnimation_Demo_getoff_boat(actorx, &last_anim0_cur_frame); + Player_actor_SearchAnimation_Demo_getoff_boat(actorx, last_anim0_cur_frame); + Player_actor_Movement_Demo_getoff_boat(actorx); + Player_actor_Reset_force_position_angle(actorx); + Player_actor_recover_lean_angle(actorx); + Player_actor_set_eye_pattern_normal(actorx); + Player_actor_ObjCheck_Demo_getoff_boat(actorx, game); + Player_actor_Item_main(actorx, game); + Player_actor_request_proc_index_fromDemo_getoff_boat(actorx, game, end_flag); +} diff --git a/src/m_player_main_demo_getoff_boat_standup.c_inc b/src/m_player_main_demo_getoff_boat_standup.c_inc index e69de29b..741f68af 100644 --- a/src/m_player_main_demo_getoff_boat_standup.c_inc +++ b/src/m_player_main_demo_getoff_boat_standup.c_inc @@ -0,0 +1,118 @@ +static int Player_actor_request_main_demo_getoff_boat_standup_all(GAME* game, const xyz_t* pos_p, s16 angle_y, + int prio) { + if (Player_actor_check_request_main_able(game, mPlayer_INDEX_DEMO_GETOFF_BOAT_STANDUP, prio)) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); + mPlayer_request_demo_getoff_boat_standup_c* req_demo_getoff_boat_standup_p = + &player->requested_main_index_data.demo_getoff_boat_standup; + + req_demo_getoff_boat_standup_p->pos = *pos_p; + req_demo_getoff_boat_standup_p->angle_y = angle_y; + Player_actor_request_main_index(game, mPlayer_INDEX_DEMO_GETOFF_BOAT_STANDUP, prio); + return TRUE; + } + + return FALSE; +} + +static void Player_actor_setup_main_Demo_getoff_boat_standup(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + xyz_t pos = actorx->world.position; + mPlayer_request_demo_getoff_boat_standup_c* req_demo_getoff_boat_standup_p = + &player->requested_main_index_data.demo_getoff_boat_standup; + mPlayer_main_demo_getoff_boat_standup_c* demo_getoff_boat_standup_p = &player->main_data.demo_getoff_boat_standup; + int anim1_idx; + int part_table_idx; + + Player_actor_SetupItem_Base1(actorx, mPlayer_ANIM_GETOFF1, -18.0f, &anim1_idx, &part_table_idx); + demo_getoff_boat_standup_p->pos = req_demo_getoff_boat_standup_p->pos; + demo_getoff_boat_standup_p->angle_y = req_demo_getoff_boat_standup_p->angle_y; + demo_getoff_boat_standup_p->angle_z = player->boat_angleZ; + + pos.y = 23.0f; + cKF_SkeletonInfo_R_Animation_Set_base_shape_trs(kf0_p, 0.0f, 1000.0f, 0.0f, 0, 0, DEG2SHORT_ANGLE2(90.0f)); + cKF_SkeletonInfo_R_AnimationMove_ct_base(&actorx->world.position, &pos, actorx->shape_info.rotation.y, + actorx->world.angle.y, 18.0f, kf0_p, + cKF_ANIMATION_TRANS_XZ | cKF_ANIMATION_TRANS_Y | cKF_ANIMATION_ROT_Y); + Player_actor_InitAnimation_Base2(actorx, game, mPlayer_ANIM_GETOFF1, anim1_idx, 1.0f, 1.0f, 0.5f, -18.0f, + cKF_FRAMECONTROL_STOP, part_table_idx); + Player_actor_setup_main_Base(actorx, game); +} + +static void Player_actor_settle_main_Demo_getoff_boat_standup(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + + cKF_SkeletonInfo_R_AnimationMove_dt(kf0_p); + actorx->world.angle.y = actorx->shape_info.rotation.y; +} + +static int Player_actor_CulcAnimation_Demo_getoff_boat_standup(ACTOR* actorx, f32* last_anim0_cur_frame_p) { + return Player_actor_CulcAnimation_Base2(actorx, last_anim0_cur_frame_p); +} + +static void Player_actor_SetSound_Demo_getoff_boat_standup(ACTOR* actorx) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + cKF_FrameControl_c* fc0_p = &kf0_p->frame_control; + + if (Player_actor_Check_AnimationFrame(fc0_p, 6.0f)) { + Player_actor_sound_STANDUP(actorx, -1); + } else if (Player_actor_Check_AnimationFrame(fc0_p, 21.0f)) { + Player_actor_sound_LANDING(actorx); + } +} + +static void Player_actor_SearchAnimation_Demo_getoff_boat_standup(ACTOR* actorx, f32 frame) { + if (Player_actor_Check_AnimationFrame_PerfectEquel(actorx, frame) == FALSE) { + Player_actor_SetSound_Demo_getoff_boat_standup(actorx); + } +} + +static void Player_actor_Movement_Demo_getoff_boat_standup(ACTOR* actorx) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + + cKF_SkeletonInfo_R_AnimationMove_base(&actorx->world.position, &actorx->shape_info.rotation.y, &actorx->scale, + actorx->world.angle.y, kf0_p); + Player_actor_Movement_Base_Stop(actorx, FALSE); + + { + mPlayer_main_demo_getoff_boat_standup_c* demo_getoff_boat_standup_p = + &player->main_data.demo_getoff_boat_standup; + s16* angle_z_p = &demo_getoff_boat_standup_p->angle_z; + + add_calc_short_angle2(angle_z_p, 0, 1.0f - sqrtf(0.2f), 150, 100); + } +} + +static void Player_actor_ObjCheck_Demo_getoff_boat_standup(ACTOR* actorx, GAME* game) { + Player_actor_Excute_Corect_forStand(actorx, game); +} + +static void Player_actor_request_proc_index_fromDemo_getoff_boat_standup(ACTOR* actorx, GAME* game, int end_flag) { + if (end_flag) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + mPlayer_main_demo_getoff_boat_standup_c* demo_getoff_boat_standup_p = + &player->main_data.demo_getoff_boat_standup; + + Player_actor_SettleRequestMainIndexPriority(actorx); + Player_actor_request_main_demo_getoff_boat_all( + game, &demo_getoff_boat_standup_p->pos, demo_getoff_boat_standup_p->angle_y, mPlayer_REQUEST_PRIORITY_19); + } +} + +static void Player_actor_main_Demo_getoff_boat_standup(ACTOR* actorx, GAME* game) { + f32 last_anim0_cur_frame; + int end_flag; + + end_flag = Player_actor_CulcAnimation_Demo_getoff_boat_standup(actorx, &last_anim0_cur_frame); + Player_actor_SearchAnimation_Demo_getoff_boat_standup(actorx, last_anim0_cur_frame); + Player_actor_Movement_Demo_getoff_boat_standup(actorx); + Player_actor_Reset_force_position_angle(actorx); + Player_actor_recover_lean_angle(actorx); + Player_actor_set_eye_pattern_normal(actorx); + Player_actor_ObjCheck_Demo_getoff_boat_standup(actorx, game); + Player_actor_Item_main(actorx, game); + Player_actor_request_proc_index_fromDemo_getoff_boat_standup(actorx, game, end_flag); +} diff --git a/src/m_player_main_demo_geton_boat_sitdown.c_inc b/src/m_player_main_demo_geton_boat_sitdown.c_inc index e69de29b..b16e2680 100644 --- a/src/m_player_main_demo_geton_boat_sitdown.c_inc +++ b/src/m_player_main_demo_geton_boat_sitdown.c_inc @@ -0,0 +1,89 @@ +static int Player_actor_request_main_demo_geton_boat_sitdown_all(GAME* game, int prio) { + if (Player_actor_check_request_main_able(game, mPlayer_INDEX_DEMO_GETON_BOAT_SITDOWN, prio)) { + Player_actor_request_main_index(game, mPlayer_INDEX_DEMO_GETON_BOAT_SITDOWN, prio); + return TRUE; + } + + return FALSE; +} + +static void Player_actor_setup_main_Demo_geton_boat_sitdown(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + mPlayer_main_demo_geton_boat_sitdown_c* demo_geton_boat_sitdown_p = &player->main_data.demo_geton_boat_sitdown; + int anim1_idx; + int part_table_idx; + + Player_actor_SetupItem_Base1(actorx, mPlayer_ANIM_RIDE2, -5.0f, &anim1_idx, &part_table_idx); + demo_geton_boat_sitdown_p->angle_z = 0; + Player_actor_InitAnimation_Base2(actorx, game, mPlayer_ANIM_RIDE2, anim1_idx, 1.0f, 1.0f, 0.5f, 0.0f, + cKF_FRAMECONTROL_STOP, part_table_idx); + Player_actor_setup_main_Base(actorx, game); +} + +static void Player_actor_Movement_Demo_geton_boat_sitdown(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + + if ((player->force_position_angle_flag & mPlayer_FORCE_POSITION_ANGLE_POSX) && + (player->force_position_angle_flag & mPlayer_FORCE_POSITION_ANGLE_POSY) && + (player->force_position_angle_flag & mPlayer_FORCE_POSITION_ANGLE_POSZ)) { + xyz_t* pos_p = &actorx->world.position; + + add_calc(&pos_p->x, player->force_position.x, 1.0f - sqrtf(0.2f), 0.2f, 0.15f); + add_calc(&pos_p->y, player->force_position.y, 1.0f - sqrtf(0.2f), 0.2f, 0.15f); + add_calc(&pos_p->z, player->force_position.z, 1.0f - sqrtf(0.2f), 0.2f, 0.15f); + + Player_actor_Get_force_position_angle(game, NULL, &actorx->world.angle); + Player_actor_Get_force_position_angle(game, NULL, &actorx->shape_info.rotation); + } + + { + mPlayer_main_demo_geton_boat_sitdown_c* demo_geton_boat_sitdown_p = &player->main_data.demo_geton_boat_sitdown; + s16 boat_angle_z = player->boat_angleZ; + s16* angle_z_p = &demo_geton_boat_sitdown_p->angle_z; + + add_calc_short_angle2(angle_z_p, boat_angle_z, 1.0f - sqrtf(0.2f), 150, 100); + } +} + +static int Player_actor_CulcAnimation_Demo_geton_boat_sitdown(ACTOR* actorx, f32* last_anim0_cur_frame_p) { + return Player_actor_CulcAnimation_Base2(actorx, last_anim0_cur_frame_p); +} + +static void Player_actor_SetSound_Demo_geton_boat_sitdown(ACTOR* actorx) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + cKF_FrameControl_c* fc0_p = &kf0_p->frame_control; + + if (Player_actor_Check_AnimationFrame(fc0_p, 15.0f)) { + Player_actor_sound_JUMP(actorx); + } else if (Player_actor_Check_AnimationFrame(fc0_p, 28.0f)) { + Player_actor_sound_SIT(actorx, -1); + } +} + +static void Player_actor_SearchAnimation_Demo_geton_boat_sitdown(ACTOR* actorx, f32 frame) { + if (Player_actor_Check_AnimationFrame_PerfectEquel(actorx, frame) == FALSE) { + Player_actor_SetSound_Demo_geton_boat_sitdown(actorx); + } +} + +static void Player_actor_request_proc_index_fromDemo_geton_boat_sitdown(ACTOR* actorx, GAME* game, int end_flag) { + if (end_flag) { + Player_actor_SettleRequestMainIndexPriority(actorx); + Player_actor_request_main_demo_geton_boat_wait_all(game, mPlayer_REQUEST_PRIORITY_19); + } +} + +static void Player_actor_main_Demo_geton_boat_sitdown(ACTOR* actorx, GAME* game) { + f32 last_anim0_cur_frame; + int end_flag; + + Player_actor_Movement_Demo_geton_boat_sitdown(actorx, game); + Player_actor_Reset_force_position_angle(actorx); + end_flag = Player_actor_CulcAnimation_Demo_geton_boat_sitdown(actorx, &last_anim0_cur_frame); + Player_actor_SearchAnimation_Demo_geton_boat_sitdown(actorx, last_anim0_cur_frame); + Player_actor_recover_lean_angle(actorx); + Player_actor_set_eye_pattern_normal(actorx); + Player_actor_Item_main(actorx, game); + Player_actor_request_proc_index_fromDemo_geton_boat_sitdown(actorx, game, end_flag); +} diff --git a/src/m_player_main_demo_geton_boat_wade.c_inc b/src/m_player_main_demo_geton_boat_wade.c_inc index e69de29b..2839e1e6 100644 --- a/src/m_player_main_demo_geton_boat_wade.c_inc +++ b/src/m_player_main_demo_geton_boat_wade.c_inc @@ -0,0 +1,87 @@ +static int Player_actor_request_main_demo_geton_boat_wade_all(GAME* game, int dir, f32 border_ofs, int prio) { + if (Player_actor_check_request_main_able(game, mPlayer_INDEX_DEMO_GETON_BOAT_WADE, prio)) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); + mPlayer_request_demo_geton_boat_wade_c* req_demo_geton_boat_wade_p = + &player->requested_main_index_data.demo_geton_boat_wade; + + req_demo_geton_boat_wade_p->dir = dir; + req_demo_geton_boat_wade_p->border_ofs = border_ofs; + Player_actor_request_main_index(game, mPlayer_INDEX_DEMO_GETON_BOAT_WADE, prio); + return TRUE; + } + + return FALSE; +} + +static void Player_actor_setup_main_Demo_geton_boat_wade(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + GAME_PLAY* play = (GAME_PLAY*)game; + mPlayer_request_demo_geton_boat_wade_c* req_demo_geton_boat_wade_p = + &player->requested_main_index_data.demo_geton_boat_wade; + mPlayer_main_demo_geton_boat_wade_c* demo_geton_boat_wade_p = &player->main_data.demo_geton_boat_wade; + xyz_t* pos_p = &actorx->world.position; + int dir = req_demo_geton_boat_wade_p->dir; + f32 border_ofs = req_demo_geton_boat_wade_p->border_ofs; + int anim1_idx; + int part_table_idx; + + Player_actor_SetupItem_Base1(actorx, mPlayer_ANIM_RIDEWAIT, -5.0f, &anim1_idx, &part_table_idx); + Player_actor_InitAnimation_Base1(actorx, game, mPlayer_ANIM_RIDEWAIT, anim1_idx, 1.0f, 1.0f, 0.5f, -5.0f, + part_table_idx); + demo_geton_boat_wade_p->dir = dir; + demo_geton_boat_wade_p->start_pos = *pos_p; + Player_actor_Culc_wade_end_pos(pos_p, &demo_geton_boat_wade_p->end_pos, dir, border_ofs); + demo_geton_boat_wade_p->timer = 0.0f; + Player_actor_setup_main_Base(actorx, game); + + { + xyz_t camera_pos = demo_geton_boat_wade_p->end_pos; + + camera_pos.y += actorx->eye.position.y - pos_p->y; + Camera2_request_main_wade(play, &camera_pos, 9, 36.0f); + } + + Player_actor_setup_main_Demo_geton_boat_wade_other_func2(actorx, game); +} + +static void Player_actor_settle_main_Demo_geton_boat_wade(ACTOR* actorx, GAME* game) { + mDemo_End(actorx); +} + +static void Player_actor_Movement_Demo_geton_boat_wade(ACTOR* actorx) { + Player_actor_Movement_Demo_geton_boat_wait(actorx); +} + +static int Player_actor_CulcAnimation_Demo_geton_boat_wade(ACTOR* actorx) { + return Player_actor_CulcAnimation_Demo_geton_boat_wait(actorx); +} + +static int Player_actor_able_request_proc_index_fromDemo_geton_boat_wade_common(ACTOR* actorx) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + mPlayer_main_demo_geton_boat_wade_c* demo_geton_boat_wade_p = &player->main_data.demo_geton_boat_wade; + + if (demo_geton_boat_wade_p->timer > 36.0f) { + return TRUE; + } + + demo_geton_boat_wade_p->timer += 1.0f; + return FALSE; +} + +static void Player_actor_request_proc_index_fromDemo_geton_boat_wade(ACTOR* actorx, GAME* game) { + if (Player_actor_able_request_proc_index_fromDemo_geton_boat_wade_common(actorx)) { + Player_actor_SettleRequestMainIndexPriority(actorx); + Player_actor_request_main_demo_geton_boat_wait_all(game, mPlayer_REQUEST_PRIORITY_19); + } +} + +static void Player_actor_main_Demo_geton_boat_wade(ACTOR* actorx, GAME* game) { + Player_actor_main_Demo_geton_boat_wade_other_func1(actorx, game); + Player_actor_Movement_Demo_geton_boat_wade(actorx); + Player_actor_Reinput_force_position_angle(actorx, game); + Player_actor_CulcAnimation_Demo_geton_boat_wade(actorx); + Player_actor_recover_lean_angle(actorx); + Player_actor_set_eye_pattern_normal(actorx); + Player_actor_Item_main(actorx, game); + Player_actor_request_proc_index_fromDemo_geton_boat_wade(actorx, game); +} diff --git a/src/m_player_main_demo_geton_boat_wait.c_inc b/src/m_player_main_demo_geton_boat_wait.c_inc index e69de29b..7631a7d0 100644 --- a/src/m_player_main_demo_geton_boat_wait.c_inc +++ b/src/m_player_main_demo_geton_boat_wait.c_inc @@ -0,0 +1,55 @@ +static int Player_actor_request_main_demo_geton_boat_wait_all(GAME* game, int prio) { + if (Player_actor_check_request_main_able(game, mPlayer_INDEX_DEMO_GETON_BOAT_WAIT, prio)) { + Player_actor_request_main_index(game, mPlayer_INDEX_DEMO_GETON_BOAT_WAIT, prio); + return TRUE; + } + + return FALSE; +} + +static void Player_actor_setup_main_Demo_geton_boat_wait(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + int anim1_idx; + int part_table_idx; + + Player_actor_SetupItem_Base1(actorx, mPlayer_ANIM_RIDEWAIT, -5.0f, &anim1_idx, &part_table_idx); + Player_actor_InitAnimation_Base1(actorx, game, mPlayer_ANIM_RIDEWAIT, anim1_idx, 1.0f, 1.0f, 0.5f, -5.0f, + part_table_idx); + Player_actor_setup_main_Base(actorx, game); +} + +static void Player_actor_Movement_Demo_geton_boat_wait(ACTOR* actorx) { + // nothing +} + +static int Player_actor_CulcAnimation_Demo_geton_boat_wait(ACTOR* actorx) { + f32 dummy; + + return Player_actor_CulcAnimation_Base2(actorx, &dummy); +} + +static void Player_actor_request_proc_index_fromDemo_geton_boat_wait(ACTOR* actorx) { + s16 angle_y = actorx->shape_info.rotation.y; + f32 speed; + + if (Common_Get(clip).demo_clip2 != NULL && Common_Get(clip).demo_clip2->type == mDemo_CLIP_TYPE_BOAT_DEMO) { + BOAT_DEMO_ACTOR* boat_demo = (BOAT_DEMO_ACTOR*)Common_Get(clip).demo_clip2->demo_class; + + speed = boat_demo->boat_speed; + } else { + speed = 0.625f; + } + + Player_actor_Set_ScrollDemo_forDemo_geton_boat_wade(actorx, angle_y + DEG2SHORT_ANGLE2(180.0f), + ((speed * 0.5f) * 36.0f) * 0.05f); +} + +static void Player_actor_main_Demo_geton_boat_wait(ACTOR* actorx, GAME* game) { + Player_actor_Movement_Demo_geton_boat_wait(actorx); + Player_actor_Reinput_force_position_angle(actorx, game); + Player_actor_CulcAnimation_Demo_geton_boat_wait(actorx); + Player_actor_recover_lean_angle(actorx); + Player_actor_set_eye_pattern_normal(actorx); + Player_actor_Item_main(actorx, game); + Player_actor_request_proc_index_fromDemo_geton_boat_wait(actorx); +} diff --git a/src/m_player_main_radio_exercise.c_inc b/src/m_player_main_radio_exercise.c_inc index e69de29b..a7e95d7c 100644 --- a/src/m_player_main_radio_exercise.c_inc +++ b/src/m_player_main_radio_exercise.c_inc @@ -0,0 +1,209 @@ +static int Player_actor_request_main_radio_exercise_all(GAME* game, int cmd, f32 speed, int prio) { + if (Player_actor_check_request_main_able(game, mPlayer_INDEX_RADIO_EXERCISE, prio)) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); + mPlayer_request_radio_exercise_c* req_radio_exercise_p = &player->requested_main_index_data.radio_exercise; + + req_radio_exercise_p->cmd = cmd; + req_radio_exercise_p->speed = speed; + Player_actor_request_main_index(game, mPlayer_INDEX_RADIO_EXERCISE, prio); + return TRUE; + } + + return FALSE; +} + +static void Player_actor_setup_main_Radio_exercise(ACTOR* actorx, GAME* game) { + // clang-format off + static const u8 anime_index_data[mPlayer_RADIO_EXERCISE_CMD_NUM] = { + mPlayer_ANIM_TAISOU1, + mPlayer_ANIM_TAISOU2_1, + mPlayer_ANIM_TAISOU2_2, + mPlayer_ANIM_TAISOU3, + mPlayer_ANIM_TAISOU4_1, + mPlayer_ANIM_TAISOU4_1, + mPlayer_ANIM_TAISOU4_2, + mPlayer_ANIM_TAISOU4_2, + mPlayer_ANIM_TAISOU5_1, + mPlayer_ANIM_TAISOU5_1, + mPlayer_ANIM_TAISOU5_2, + mPlayer_ANIM_TAISOU5_2, + mPlayer_ANIM_TAISOU6_1, + mPlayer_ANIM_TAISOU6_1, + mPlayer_ANIM_TAISOU6_2, + mPlayer_ANIM_TAISOU6_2, + mPlayer_ANIM_TAISOU7_1, + mPlayer_ANIM_TAISOU7_2, + }; + // clang-format on + + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + cKF_SkeletonInfo_R_c* kf1_p = &player->keyframe1; + mPlayer_request_radio_exercise_c* req_radio_exercise_p = &player->requested_main_index_data.radio_exercise; + mPlayer_main_radio_exercise_c* radio_exercise_p = &player->main_data.radio_exercise; + int cmd = req_radio_exercise_p->cmd; + int anim_idx; + + if (cmd < 0 || cmd >= mPlayer_RADIO_EXERCISE_CMD_NUM) { + cmd = mPlayer_RADIO_EXERCISE_CMD0; + } + + radio_exercise_p->cmd = cmd; + radio_exercise_p->_04 = TRUE; + radio_exercise_p->_08 = 0; + radio_exercise_p->_0C = 0; + + player->radio_exercise_continue_cmd_idx = -1; + player->radio_exercise_cmd_timer = 0.0f; + + anim_idx = anime_index_data[cmd]; + Player_actor_InitAnimation_Base2(actorx, game, anim_idx, anim_idx, 1.0f, 1.0f, 0.0f, -5.0f, cKF_FRAMECONTROL_STOP, + mPlayer_PART_TABLE_NORMAL); + kf0_p->frame_control.speed = req_radio_exercise_p->speed; + kf1_p->frame_control.speed = req_radio_exercise_p->speed; + Player_actor_setup_main_Base(actorx, game); +} + +static void Player_actor_settle_main_Radio_exercise(ACTOR* actorx, GAME* game) { + // nothing +} + +static void Player_actor_Set_RadioExerciseCommand_Radio_exercise(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + mPlayer_main_radio_exercise_c* radio_exercise_p = &player->main_data.radio_exercise; + + Player_actor_Set_RadioExerciseCommand(actorx, game, radio_exercise_p->_04); + radio_exercise_p->_04 = FALSE; +} + +static void Player_actor_Movement_Radio_exercise(ACTOR* actorx) { + Player_actor_Movement_Base_Braking_common(actorx, 0.32625f); +} + +static int Player_actor_CulcAnimation_Radio_exercise(ACTOR* actorx) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + Radio_c radio; + f32 target_speed = 0.0f; + u32 old_sound_frame_counter = player->old_sound_frame_counter; + u32 now_sound_frame_counter = sAdo_GetSoundFrameCounter(); + int radio_counter = sAdos_GetRadioCounter(&radio); + f32 dummy; + + if (radio_counter == 0) { + target_speed = (int)radio.tempo * 0.012f; + } + + if (target_speed <= 0.0f) { + target_speed = 0.5f; + } + + if (now_sound_frame_counter != old_sound_frame_counter) { + u32 d_sound_frame_counter; + + if (now_sound_frame_counter > old_sound_frame_counter) { + d_sound_frame_counter = 0; + d_sound_frame_counter += now_sound_frame_counter; + d_sound_frame_counter -= old_sound_frame_counter; + } else { + d_sound_frame_counter = -1; + d_sound_frame_counter -= old_sound_frame_counter; + d_sound_frame_counter = now_sound_frame_counter + d_sound_frame_counter; + } + + if (d_sound_frame_counter > 5) { + d_sound_frame_counter = 5; + } + + target_speed *= (int)d_sound_frame_counter; + } + + { + // clang-format off + static f32 data[mPlayer_RADIO_EXERCISE_CMD_NUM] = { + 0.5f, + 0.5f, + 0.5f, + 0.5f, + 0.5f, + 0.5f, + 0.5f, + 0.5f, + 0.25f, + 0.25f, + 0.25f, + 0.25f, + 0.5f, + 0.5f, + 0.5f, + 0.5f, + 0.5f, + 0.5f, + }; + // clang-format on + + f32* speed_p = &player->keyframe0.frame_control.speed; + + target_speed *= data[player->main_data.radio_exercise.cmd]; + add_calc2(speed_p, target_speed, 0.3f, 0.5f); + player->keyframe1.frame_control.speed = *speed_p; + } + + return Player_actor_CulcAnimation_Base3(actorx, &dummy); +} + +static void Player_actor_ObjCheck_Radio_exercise(ACTOR* actorx, GAME* game) { + Player_actor_Excute_Corect_forStand(actorx, game); +} + +static void Player_actor_BGCheck_Radio_exercise(ACTOR* actorx) { + Player_actor_BGcheck_common_type1(actorx); +} + +static void Player_actor_request_proc_index_fromRadio_exercise(ACTOR* actorx, GAME* game, int end_flag) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + mPlayer_main_radio_exercise_c* radio_exercise_p = &player->main_data.radio_exercise; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + cKF_FrameControl_c* fc0_p = &kf0_p->frame_control; + f32 cur_frame = fc0_p->current_frame; + + if (radio_exercise_p->_0C == FALSE) { + if (cur_frame >= fc0_p->end_frame - 24.0f) { + radio_exercise_p->_0C = TRUE; + } + } else { + Player_actor_CheckAndRequest_main_radio_exercise_all(game, TRUE); + } + + if (radio_exercise_p->_08 == FALSE) { + if (cur_frame >= fc0_p->end_frame - 0.5f) { + Player_actor_SettleRequestMainIndexPriority(actorx); + Player_actor_Set_status_for_bee(actorx, TRUE); + radio_exercise_p->_08 = TRUE; + } + } else if (end_flag) { + int next_radio_cmd = player->radio_exercise_continue_cmd_idx; + f32 exercise_cmd_timer = player->radio_exercise_cmd_timer; + + if (next_radio_cmd >= 0 && next_radio_cmd < mPlayer_RADIO_EXERCISE_CMD_NUM && exercise_cmd_timer <= 0.0f) { + Player_actor_request_main_radio_exercise_all(game, next_radio_cmd, fc0_p->speed, + mPlayer_REQUEST_PRIORITY_4); + } else { + Player_actor_request_main_wait_all(game, -5.0f, 0.0f, 4, mPlayer_REQUEST_PRIORITY_1); + } + } +} + +static void Player_actor_main_Radio_exercise(ACTOR* actorx, GAME* game) { + int end_flag; + + Player_actor_Set_RadioExerciseCommand_Radio_exercise(actorx, game); + Player_actor_Movement_Radio_exercise(actorx); + Player_actor_Reinput_force_position_angle(actorx, game); + end_flag = Player_actor_CulcAnimation_Radio_exercise(actorx); + Player_actor_recover_lean_angle(actorx); + Player_actor_set_eye_pattern_normal(actorx); + Player_actor_ObjCheck_Radio_exercise(actorx, game); + Player_actor_BGcheck_Radio_exercise(actorx); + Player_actor_Item_main(actorx, game); + Player_actor_request_proc_index_fromRadio_exercise(actorx, game, end_flag); +} diff --git a/src/m_player_main_reflect_axe.c_inc b/src/m_player_main_reflect_axe.c_inc index 2eb34bad..3784efd3 100644 --- a/src/m_player_main_reflect_axe.c_inc +++ b/src/m_player_main_reflect_axe.c_inc @@ -23,10 +23,10 @@ static int Player_actor_request_main_reflect_axe_all(GAME* game, const xyz_t* po static void Player_actor_setup_main_Reflect_axe_common(mPlayer_request_reflect_axe_c* req_axe, mPlayer_main_reflect_axe_c* main_axe) { - main_axe->target_pos = req_axe->goal_pos; + main_axe->axe_common.target_pos = req_axe->goal_pos; main_axe->reflect_actor_p = req_axe->hit_actor; - main_axe->item = req_axe->hit_item; - main_axe->axe_damage_no = req_axe->axe_damage_no; + main_axe->axe_common.item = req_axe->hit_item; + main_axe->axe_common.axe_damage_no = req_axe->axe_damage_no; } static void Player_actor_setup_main_Reflect_axe(ACTOR* actor, GAME* game) { @@ -41,17 +41,17 @@ static void Player_actor_setup_main_Reflect_axe(ACTOR* actor, GAME* game) { Player_actor_setup_main_Base(actor, game); } -static void Player_actor_settle_main_Reflect_axe(ACTOR* actor) { +static void Player_actor_settle_main_Reflect_axe(ACTOR* actor, GAME* game) { actor->speed = 0.0f; actor->world.angle.y = actor->shape_info.rotation.y; } -static int Player_actor_Movement_Reflect_axe_common(ACTOR* actor, mPlayer_main_reflect_axe_c* main_axe, int) { +static int Player_actor_Movement_Reflect_axe_common(ACTOR* actor, mPlayer_main_axe_common_c* axe_common_p, + int priority) { PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - f32 cur; - cur = player->keyframe0.frame_control.current_frame; + f32 cur = player->keyframe0.frame_control.current_frame; - Player_actor_Movement_axe_common(actor, &main_axe->target_pos); + Player_actor_Movement_axe_common(actor, &axe_common_p->target_pos); if (cur < 15.0f) { actor->world.angle.y = actor->shape_info.rotation.y; @@ -59,7 +59,7 @@ static int Player_actor_Movement_Reflect_axe_common(ACTOR* actor, mPlayer_main_r } static void Player_actor_Movement_Reflect_axe(ACTOR* actor, mPlayer_main_reflect_axe_c* main_axe, int flag) { - Player_actor_Movement_Reflect_axe_common(actor, main_axe, flag); + Player_actor_Movement_Reflect_axe_common(actor, &main_axe->axe_common, flag); } static int Player_actor_CulcAnimation_Reflect_axe(ACTOR* actor, f32* frame_calc, int) { @@ -89,7 +89,7 @@ static void Player_actor_SetOrderNPC_Reflect_axe(ACTOR* actor, mPlayer_main_refl int rock; if (Player_actor_Check_AnimationFrame(&player->keyframe0.frame_control, 15.0f)) { ACTOR* reflect_actor = main_axe->reflect_actor_p; - mActor_name_t item = main_axe->item; + mActor_name_t item = main_axe->axe_common.item; if (reflect_actor != NULL) { switch (reflect_actor->id) { @@ -115,7 +115,7 @@ static void Player_actor_SetOrderNPC_Reflect_axe(ACTOR* actor, mPlayer_main_refl } if (rock) { - if (Player_actor_Search_STONE_TC(actor, &main_axe->target_pos)) { + if (Player_actor_Search_STONE_TC(actor, &main_axe->axe_common.target_pos)) { return; }; } @@ -140,14 +140,14 @@ static void Player_actor_SetSound_Reflect_axe(ACTOR* actor, mPlayer_main_reflect break; } } else { - Player_actor_sound_AXE_HIT(actor, &main_axe->target_pos); + Player_actor_sound_AXE_HIT(actor, &main_axe->axe_common.target_pos); Player_actor_set_viblation_Axe_hard(); } } } static void Player_actor_ChangeItemNo_Reflect_axe(ACTOR* actor, mPlayer_main_reflect_axe_c* main_axe, int) { - Player_actor_ChangeItemNo_axe_common(actor, main_axe->axe_damage_no); + Player_actor_ChangeItemNo_axe_common(actor, main_axe->axe_common.axe_damage_no); } static void Player_actor_informed_insects_Reflect_axe(ACTOR* actor, mPlayer_main_reflect_axe_c* main_axe, int) { @@ -158,7 +158,7 @@ static void Player_actor_informed_insects_Reflect_axe(ACTOR* actor, mPlayer_main int ut_x; int ut_z; - mFI_Wpos2UtNum(&ut_x, &ut_z, main_axe->target_pos); + mFI_Wpos2UtNum(&ut_x, &ut_z, main_axe->axe_common.target_pos); Common_Get(clip).insect_clip->set_pl_act_tim_proc(1, ut_x, ut_z); } } @@ -181,8 +181,8 @@ static void Player_actor_ObjCheck_Reflect_axe(ACTOR* actor, GAME* game, int) { Player_actor_Excute_Corect_forStand(actor, game); } -static void Player_actor_BGcheck_Reflect_axe(ACTOR* actor, int) { - Player_actor_BGcheck_common_type1(actor); +static void Player_actor_BGcheck_Reflect_axe(ACTOR* actor, int) { + Player_actor_BGcheck_common_type1(actor); } static void Player_actor_request_proc_index_fromReflect_axe(ACTOR* actor, GAME* game, int arg, int arg2) { @@ -201,7 +201,8 @@ static void Player_actor_request_proc_index_fromReflect_axe(ACTOR* actor, GAME* Player_actor_SettleRequestMainIndexPriority(actor); Player_actor_Set_status_for_bee(actor, 1); - } else if ((fc->current_frame >= 31.0f) && (!Player_actor_CheckAndRequest_main_axe_all(game, mPlayer_REQUEST_PRIORITY_4)) && + } else if ((fc->current_frame >= 31.0f) && + (!Player_actor_CheckAndRequest_main_axe_all(game, mPlayer_REQUEST_PRIORITY_4)) && ((Player_actor_GetController_move_percentX()) || (Player_actor_GetController_move_percentY()))) { Player_actor_request_main_walk_all(game, NULL, -5.0f, 0, mPlayer_REQUEST_PRIORITY_1); } diff --git a/src/m_player_main_swing_axe.c_inc b/src/m_player_main_swing_axe.c_inc index 3d3da91c..09816234 100644 --- a/src/m_player_main_swing_axe.c_inc +++ b/src/m_player_main_swing_axe.c_inc @@ -25,11 +25,11 @@ static int Player_actor_request_main_swing_axe_all(GAME* game, const xyz_t* pos, static void Player_actor_setup_main_Swing_axe_common(mPlayer_request_swing_axe_c* req_axe, mPlayer_main_swing_axe_c* main_axe) { - main_axe->target_pos = req_axe->goal_pos; - main_axe->item = req_axe->hit_item; + main_axe->axe_common.target_pos = req_axe->goal_pos; + main_axe->axe_common.item = req_axe->hit_item; main_axe->tree_ut_x = req_axe->hit_ut_x; main_axe->tree_ut_z = req_axe->hit_ut_z; - main_axe->axe_damage_no = req_axe->axe_damage_no; + main_axe->axe_common.axe_damage_no = req_axe->axe_damage_no; main_axe->bee_flag = FALSE; main_axe->bee_angle_y = 0; main_axe->bee_counter = 0; @@ -63,7 +63,7 @@ static void Player_actor_Movement_axe_common(ACTOR* actor, xyz_t* axe_pos) { } static void Player_actor_Movement_Swing_axe(ACTOR* actor, mPlayer_main_swing_axe_c* main_axe, int) { - Player_actor_Movement_axe_common(actor, &main_axe->target_pos); + Player_actor_Movement_axe_common(actor, &main_axe->axe_common.target_pos); actor->world.angle.y = actor->shape_info.rotation.y; } @@ -73,7 +73,7 @@ static int Player_actor_CulcAnimation_Swing_axe(ACTOR* actor, f32* frame_calc, i } static void Player_actor_SetEffectHit_axe_common(ACTOR* actor, GAME* game, s16 arg2) { - static xyz_t offset = {-7.0f, 20.0f, 24.0f}; + static xyz_t offset = { -7.0f, 20.0f, 24.0f }; PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; xyz_t pos; @@ -96,7 +96,7 @@ static void Player_actor_SetEffectHit_Swing_axe(ACTOR* actor, GAME* game, s16 ar } static void Player_actor_SetEffectStart_Swing_axe(ACTOR* actor, GAME* game, int arg2) { - Player_actor_SetEffectStart_axe_common(actor, game, arg2); + Player_actor_SetEffectStart_axe_common(actor, game); } static void Player_actor_SetEffect_Swing_axe(ACTOR* actor, GAME* game, int arg2) { @@ -145,9 +145,9 @@ static void Player_actor_CutTree_Swing_axe(ACTOR* actor, GAME* game, mPlayer_mai if (Player_actor_Check_AnimationFrame(&player->keyframe0.frame_control, 15.0f)) { int ut_x; int ut_z; - mActor_name_t item = main_axe->item; + mActor_name_t item = main_axe->axe_common.item; - if (mFI_Wpos2UtNum(&ut_x, &ut_z, main_axe->target_pos)) { + if (mFI_Wpos2UtNum(&ut_x, &ut_z, main_axe->axe_common.target_pos)) { mActor_name_t tree = Player_actor_Get_TreeNoToStumpNo(actor, game, item, ut_x, ut_z, main_axe, flag); int check = FALSE; @@ -158,11 +158,11 @@ static void Player_actor_CutTree_Swing_axe(ACTOR* actor, GAME* game, mPlayer_mai if (check != FALSE) { mNT_offset_table_c* ofs_tbl = obj_hight_table_item0_nogrow(tree); - mCoBG_SetPlussOffset(main_axe->target_pos, ofs_tbl->table.centerRight_offset, + mCoBG_SetPlussOffset(main_axe->axe_common.target_pos, ofs_tbl->table.centerRight_offset, ofs_tbl->table.unit_attribute); - mFI_SetFG_common(tree, main_axe->target_pos, TRUE); + mFI_SetFG_common(tree, main_axe->axe_common.target_pos, TRUE); - if (main_axe->target_pos.x > actor->world.position.x) { + if (main_axe->axe_common.target_pos.x > actor->world.position.x) { flag = 1; } else { flag = 2; @@ -232,7 +232,7 @@ static void Player_actor_ChangeItemNo_axe_common(ACTOR* actor, mActor_name_t ite } static void Player_actor_ChangeItemNo_Swing_axe(ACTOR* actor, mPlayer_main_swing_axe_c* main, int flag) { - Player_actor_ChangeItemNo_axe_common(actor, main->axe_damage_no); + Player_actor_ChangeItemNo_axe_common(actor, main->axe_common.axe_damage_no); } static void Player_actor_SearchAnimation_Swing_axe(ACTOR* actor, GAME* game, mPlayer_main_swing_axe_c* main_axe, @@ -240,7 +240,7 @@ static void Player_actor_SearchAnimation_Swing_axe(ACTOR* actor, GAME* game, mPl if (!Player_actor_Check_AnimationFrame_PerfectEquel(actor, frame)) { Player_actor_SetEffect_Swing_axe(actor, game, flag); Player_actor_CutTree_Swing_axe(actor, game, main_axe, flag); - Player_actor_SetSound_Swing_axe(actor, &main_axe->target_pos, flag); + Player_actor_SetSound_Swing_axe(actor, &main_axe->axe_common.target_pos, flag); Player_actor_ChangeItemNo_Swing_axe(actor, main_axe, flag); Player_actor_Set_FootMark_Base1(actor, game, 0, 0); } @@ -248,8 +248,8 @@ static void Player_actor_SearchAnimation_Swing_axe(ACTOR* actor, GAME* game, mPl static void Player_actor_Check_BirthBee_Swing_axe(ACTOR* actor, mPlayer_main_swing_axe_c* main_axe, int arg) { if (arg == 0 && main_axe->bee_counter > 0) { - if (Player_actor_Check_BirthBee_common(actor, main_axe->item, main_axe->tree_ut_x, main_axe->tree_ut_z, - &main_axe->bee_angle_y)) { + if (Player_actor_Check_BirthBee_common(actor, main_axe->axe_common.item, main_axe->tree_ut_x, + main_axe->tree_ut_z, &main_axe->bee_angle_y)) { main_axe->bee_counter = 0; main_axe->bee_flag = 1; } else { @@ -262,8 +262,8 @@ static void Player_actor_ObjCheck_Swing_axe(ACTOR* actor, GAME* game, int) { Player_actor_Excute_Corect_forStand(actor, game); } -static void Player_actor_BGcheck_Swing_axe(ACTOR* actor, int) { - Player_actor_BGcheck_common_type1(actor); +static void Player_actor_BGcheck_Swing_axe(ACTOR* actor, int) { + Player_actor_BGcheck_common_type1(actor); } static void Player_actor_request_proc_index_fromSwing_axe(ACTOR* actor, GAME* game, int arg, int arg2) { diff --git a/src/m_player_main_switch_on_lighthouse.c_inc b/src/m_player_main_switch_on_lighthouse.c_inc index e69de29b..1c5d2542 100644 --- a/src/m_player_main_switch_on_lighthouse.c_inc +++ b/src/m_player_main_switch_on_lighthouse.c_inc @@ -0,0 +1,80 @@ +static int Player_actor_request_main_switch_on_lighthouse_all(GAME* game, const xyz_t* pos_p, s16 angle_y, int prio) { + if (Player_actor_check_request_main_able(game, mPlayer_INDEX_SWITCH_ON_LIGHTHOUSE, prio)) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); + mPlayer_request_switch_on_lighthouse_c* req_switch_on_lighthouse_p = + &player->requested_main_index_data.switch_on_lighthouse; + + req_switch_on_lighthouse_p->pos = *pos_p; + req_switch_on_lighthouse_p->pos.y = player->actor_class.world.position.y; + req_switch_on_lighthouse_p->angle_y = angle_y; + Player_actor_request_main_index(game, mPlayer_INDEX_SWITCH_ON_LIGHTHOUSE, prio); + return TRUE; + } + + return FALSE; +} + +static void Player_actor_settle_main_Switch_on_lighthouse(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + + cKF_SkeletonInfo_R_AnimationMove_dt(kf0_p); + actorx->world.angle.y = actorx->shape_info.rotation.y; +} + +static void Player_actor_setup_main_Switch_on_lighthouse(ACTOR* actorx, GAME* game) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + mPlayer_request_switch_on_lighthouse_c* req_switch_on_lighthouse_p = + &player->requested_main_index_data.switch_on_lighthouse; + + actorx->world.angle.y = req_switch_on_lighthouse_p->angle_y; + + cKF_SkeletonInfo_R_Animation_Set_base_shape_trs(kf0_p, 0.0f, 1000.0f, 0.0f, 0, 0, DEG2SHORT_ANGLE2(90.0f)); + cKF_SkeletonInfo_R_AnimationMove_ct_base(&actorx->world.position, &req_switch_on_lighthouse_p->pos, + actorx->shape_info.rotation.y, req_switch_on_lighthouse_p->angle_y, 9.0f, + kf0_p, cKF_ANIMATION_TRANS_XZ | cKF_ANIMATION_ROT_Y); + + Player_actor_InitAnimation_Base2(actorx, game, mPlayer_ANIM_LIGHT_ON1, mPlayer_ANIM_LIGHT_ON1, 1.0f, 1.0f, 0.5f, + 9.0f, cKF_FRAMECONTROL_STOP, mPlayer_PART_TABLE_NORMAL); + Player_actor_setup_main_Base(actorx, game); +} + +static int Player_actor_CulcAnimation_Switch_on_lighthouse(ACTOR* actorx) { + f32 dummy; + + return Player_actor_CulcAnimation_Base2(actorx, &dummy); +} + +static void Player_actor_Movement_Switch_on_lighthouse(ACTOR* actorx) { + PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; + cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; + + cKF_SkeletonInfo_R_AnimationMove_base(&actorx->world.position, &actorx->shape_info.rotation.y, &actorx->scale, + actorx->world.angle.y, kf0_p); + Player_actor_Movement_Base_Stop(actorx, FALSE); +} + +static void Player_actor_ObjCheck_Switch_on_lighthouse(ACTOR* actorx, GAME* game) { + Player_actor_Excute_Corect_forStand(actorx, game); +} + +static void Player_actor_request_proc_index_fromSwitch_on_lighthouse(ACTOR* actorx, GAME* game, int end_flag) { + if (end_flag) { + Player_actor_SettleRequestMainIndexPriority(actorx); + Player_actor_request_main_wait_all(game, -5.0f, 0.0f, 0, mPlayer_REQUEST_PRIORITY_1); + } +} + +static void Player_actor_main_Switch_on_lighthouse(ACTOR* actorx, GAME* game) { + int end_flag; + + end_flag = Player_actor_CulcAnimation_Switch_on_lighthouse(actorx); + Player_actor_Movement_Switch_on_lighthouse(actorx); + Player_actor_Reinput_force_position_angle(actorx, game); + Player_actor_recover_lean_angle(actorx); + Player_actor_set_eye_pattern_normal(actorx); + Player_actor_ObjCheck_Switch_on_lighthouse(actorx, game); + Player_actor_Item_main(actorx, game); + Player_actor_request_proc_index_fromSwitch_on_lighthouse(actorx, game, end_flag); +} diff --git a/src/m_player_main_wade_snowball.c_inc b/src/m_player_main_wade_snowball.c_inc index 51c99e2f..a0f104e5 100644 --- a/src/m_player_main_wade_snowball.c_inc +++ b/src/m_player_main_wade_snowball.c_inc @@ -1,9 +1,10 @@ -static int Player_actor_request_main_wade_snowball_all(GAME* game, int dir, xyz_t snowball_dist, int priority) { +static int Player_actor_request_main_wade_snowball_all(GAME* game, int dir, const xyz_t* snowball_dist_p, + 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.snowball_dist = *snowball_dist_p; 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); @@ -51,8 +52,8 @@ static void Player_actor_setup_main_Wade_snowball(ACTOR* actor, GAME* game) { 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_settle_main_Wade_snowball(ACTOR* actor, GAME* game) { + mDemo_End(actor); } static void Player_actor_ChangeAnimation_Wade_snowball(ACTOR* actor, GAME* game) { @@ -96,8 +97,8 @@ static void Player_actor_Movement_Wade_snowball(ACTOR* actor) { Player_actor_Movement_Base_Stop(actor, FALSE); } -static void Player_actor_BGcheck_Wade_snowball(ACTOR* actor) { - Player_actor_BGcheck_common_type2(actor); +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) { diff --git a/src/static/jaudio_NES/game/kappa.c b/src/static/jaudio_NES/game/kappa.c index 22fcaca5..d6e0ead0 100644 --- a/src/static/jaudio_NES/game/kappa.c +++ b/src/static/jaudio_NES/game/kappa.c @@ -5,10 +5,10 @@ int kappa_seq_handle = 0; int Na_GetKappaCounter(kappa* kappa) { - int unk16; + int counter; group* group = nullptr; int temp = 0; - + if (AG.groups[kappa_seq_handle].flags.enabled != 0) { group = &(AG.groups)[kappa_seq_handle]; @@ -18,15 +18,15 @@ int Na_GetKappaCounter(kappa* kappa) { (void)temp; - unk16 = group->unk016; + counter = group->counter; + + kappa->unk0 = counter / 192; + counter -= (kappa->unk0 * 0xC0); + kappa->unk4 = counter / 192.0f; - kappa->unk0 = unk16 / 192; - unk16 -= (kappa->unk0 * 0xC0); - kappa->unk4 = unk16 / 192.0f; - return 0; } - + void Na_SetKappaSeqHandle(int flag) { kappa_seq_handle = flag; } diff --git a/src/static/jaudio_NES/game/radio.c b/src/static/jaudio_NES/game/radio.c index d171c5a4..caad18a5 100644 --- a/src/static/jaudio_NES/game/radio.c +++ b/src/static/jaudio_NES/game/radio.c @@ -2,14 +2,12 @@ #include "jaudio_NES/game64.h" #include "jaudio_NES/audiowork.h" - -s16 Na_GetRadioCounter(radio* radio) { - int unk16; +int Na_GetRadioCounter(Radio_c* radio) { + int counter; u16 tempo = 0; - + group* group = nullptr; int unused = 0; - if (AG.groups[sou_now_bgm_handle].flags.enabled != 0 && AG.groups[sou_now_bgm_handle].seq_id == 0xDA) { group = &(AG.groups)[sou_now_bgm_handle]; @@ -18,26 +16,26 @@ s16 Na_GetRadioCounter(radio* radio) { return -1; } - unk16 = group->unk016; + counter = group->counter; (void)unused; - if (unk16 < 0x2E8) { + if (counter < 744) { radio->unk0 = 0; } else { - unk16 -= 0x2E8; - radio->unk0 = (s8)(unk16 / 0x300); - unk16 = unk16 - (radio->unk0 * 0x300); + counter -= 744; + radio->unk0 = (s8)(counter / 768); + counter = counter - (radio->unk0 * 768); radio->unk0++; } if (radio->unk0 == 9) { - radio->unk4 = unk16 / 216.0f; + radio->unk4 = counter / 216.0f; } else { - radio->unk4 = unk16 / 768.0f; + radio->unk4 = counter / 768.0f; } radio->tempo = AG.groups[sou_now_bgm_handle].tempo / 48; tempo = radio->tempo; return 0; -} \ No newline at end of file +} diff --git a/src/static/jaudio_NES/game/staff.c b/src/static/jaudio_NES/game/staff.c index 0d15122e..11310561 100644 --- a/src/static/jaudio_NES/game/staff.c +++ b/src/static/jaudio_NES/game/staff.c @@ -31,7 +31,7 @@ extern void Na_GetStaffRollInfo(StaffRollInfo_c* info) { s32 temp; s32 mouth_type = 0; s32 blink; - s32 group_unk16; + s32 counter; s32 i; if (AG.groups[sou_now_bgm_handle].flags.enabled) { @@ -195,7 +195,7 @@ extern void Na_GetStaffRollInfo(StaffRollInfo_c* info) { } info->blink_flag = blink; - group_unk16 = group->unk016; + counter = group->counter; switch (seq_num) { case 1: @@ -218,7 +218,7 @@ extern void Na_GetStaffRollInfo(StaffRollInfo_c* info) { } temp = info->beat * 48; - info->_01 = group_unk16 / temp; - group_unk16 -= info->_01 * temp; - info->percent = (f32)group_unk16 / temp; + info->_01 = counter / temp; + counter -= info->_01 * temp; + info->percent = (f32)counter / temp; } diff --git a/src/static/jaudio_NES/internal/track.c b/src/static/jaudio_NES/internal/track.c index ab3afac0..30a95b81 100644 --- a/src/static/jaudio_NES/internal/track.c +++ b/src/static/jaudio_NES/internal/track.c @@ -1823,7 +1823,7 @@ static void Nas_GroupSeq(group* grp) { } grp->tempo_acceleration -= (u16)AG.max_tempo; - grp->unk016++; + grp->counter++; if (grp->flags.stop_seq_script == TRUE) { return; @@ -1998,8 +1998,8 @@ static void Nas_GroupSeq(group* grp) { case 0xC6: // stop script grp->flags.stop_seq_script = TRUE; return; - case 0xC5: // - grp->unk016 = Nas_ReadWordData(m); + case 0xC5: // update counter + grp->counter = Nas_ReadWordData(m); break; case 0xEF: // Nas_ReadWordData(m); @@ -2154,7 +2154,7 @@ extern void Nas_InitMySeq(group* grp) { grp->short_note_velocity_tbl = DEFAULT_VTABLE; grp->short_note_gate_time_tbl = DEFAULT_GTABLE; grp->script_counter = 0; - grp->unk016 = 0; + grp->counter = 0; for (i = 0; i < AUDIO_SUBTRACK_NUM; i++) { Nas_InitSubTrack(grp->subtracks[i]);