match m_player_main_dig_scoop

This commit is contained in:
Prakxo
2024-09-11 22:54:09 +02:00
parent 62eb04dc17
commit dfd6dae3be
3 changed files with 282 additions and 3 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ typedef void (*bIT_SHADOW_DRAW_PROC)(GAME*, bIT_ShadowData_c*, int);
typedef void (*bIT_SINGLE_DRAW_PROC)(GAME* game, mActor_name_t fg_no, xyz_t* pos, f32 scale_f, bIT_DRAW_BF_PROC draw_bf,
bIT_DRAW_AF_PROC draw_af, rgba_t* col);
typedef int (*bIT_TREE_CUTCOUNT_CHECK_PROC)(GAME* game, int ut_x, int ut_z);
typedef void (*bIT_DIG_HOLE_EFFECT_ENTRY_PROC)(mActor_name_t fg_item, xyz_t* pos, u16 frames, u16 wait_frames);
typedef int (*bIT_DIG_HOLE_EFFECT_ENTRY_PROC)(mActor_name_t fg_item, xyz_t* pos, u16 frames, u16 wait_frames);
typedef void (*bIT_BURY_HOLE_EFFECT_ENTRY_PROC)(mActor_name_t fg_item, xyz_t* pos, u16 frames);
typedef int (*bIT_PIT_FALL_PROC)(mActor_name_t pit_fg_item, int ut_x, int ut_z, mActor_name_t fg_item_in_pit);
typedef int (*bIT_PIT_FALL_STOP_PROC)(mActor_name_t pit_fg_item, int ut_x, int ut_z, mActor_name_t fg_item_in_pit);
+2 -2
View File
@@ -1115,7 +1115,7 @@ static void bg_item_tree_fruit_drop(mActor_name_t fg_item, int ut_x, int ut_z, x
}
}
static void bIT_actor_dig_hole_effect_entry(mActor_name_t fg_item, xyz_t* pos, u16 frames, u16 wait_frames) {
static int bIT_actor_dig_hole_effect_entry(mActor_name_t fg_item, xyz_t* pos, u16 frames, u16 wait_frames) {
int ut_x;
int ut_z;
@@ -1124,7 +1124,7 @@ static void bIT_actor_dig_hole_effect_entry(mActor_name_t fg_item, xyz_t* pos, u
mFI_UtNum2DepositOFF(ut_x, ut_z);
}
bIT_actor_hole_effect_entry(bIT_CLIP->bg_item_common_p->hole, fg_item, pos, frames, wait_frames, 1, 0);
return bIT_actor_hole_effect_entry(bIT_CLIP->bg_item_common_p->hole, fg_item, pos, frames, wait_frames, 1, 0);
}
static void bIT_actor_bury_hole_effect_entry(mActor_name_t fg_item, xyz_t* pos, u16 frames) {
+279
View File
@@ -0,0 +1,279 @@
static int Player_actor_request_main_dig_scoop_all(GAME* game, const xyz_t* pos, mActor_name_t name, int priority) {
if (Player_actor_check_request_main_able(game, mPlayer_INDEX_DIG_SCOOP, priority)) {
PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game);
player->requested_main_index_data.dig_scoop.dig_pos = *pos;
player->requested_main_index_data.dig_scoop.item = name;
Player_actor_request_main_index(game, mPlayer_INDEX_DIG_SCOOP, priority);
return TRUE;
}
return FALSE;
}
static void Player_actor_setup_main_Dig_scoop(ACTOR* actor, GAME* game) {
PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor;
mPlayer_main_dig_scoop_c* main_scoop = &player->main_data.dig_scoop;
mPlayer_request_dig_scoop_c* req_scoop = &player->requested_main_index_data.dig_scoop;
mActor_name_t item = req_scoop->item;
int stump = FALSE;
int anim_idx;
if (IS_ITEM_TREE_STUMP(item)) {
stump = TRUE;
}
anim_idx = mPlayer_ANIM_DIG1;
if (stump) {
anim_idx = mPlayer_ANIM_DIG_KABU1;
}
main_scoop->target_pos = req_scoop->dig_pos;
main_scoop->item = item;
Player_actor_InitAnimation_Base2(actor, game, anim_idx, anim_idx, 1.0f, 1.0f, 0.5f, -5.0f, 0, 0);
Player_actor_setup_main_Base(actor, game);
mISL_SetNowPlayerAction(mISL_PLAYER_ACTION_DIG_SCOOP);
}
static void Player_actor_Movement_Dig_scoop(ACTOR* actor) {
PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor;
mPlayer_main_swing_axe_c* main_axe = &player->main_data.swing_axe;
Player_actor_Movement_axe_common(actor, &main_axe->axe_common.target_pos);
actor->world.angle.y = actor->shape_info.rotation.y;
}
static int Player_actor_CulcAnimation_Dig_scoop(ACTOR* actor, f32* frame_calc) {
return Player_actor_CulcAnimation_Base2(actor, frame_calc);
}
static void Player_actor_SetEffectHit_Dig_scoop(ACTOR* actor, GAME* game, const xyz_t* pos, int main_index) {
PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor;
cKF_FrameControl_c* fc = &player->keyframe0.frame_control;
int effect_idx;
s16 arg;
if (player->animation0_idx == mPlayer_ANIM_DIG_KABU1) {
if (Player_actor_Check_AnimationFrame(fc, 17.0f)) {
effect_idx = eEC_EFFECT_DIG_SCOOP;
if (main_index != mPlayer_INDEX_GET_SCOOP) {
arg = 0;
} else {
arg = 3;
}
} else {
return;
}
} else {
if (Player_actor_Check_AnimationFrame(fc, 14.0f)) {
effect_idx = eEC_EFFECT_DIG_HOLE;
arg = 0;
} else if (Player_actor_Check_AnimationFrame(fc, 15.0f)) {
effect_idx = eEC_EFFECT_DIG_HOLE;
arg = 1;
} else if (Player_actor_Check_AnimationFrame(fc, 16.0f)) {
effect_idx = eEC_EFFECT_DIG_HOLE;
arg = 2;
} else if (Player_actor_Check_AnimationFrame(fc, 22.0f)) {
effect_idx = eEC_EFFECT_DIG_SCOOP;
if (main_index != mPlayer_INDEX_GET_SCOOP) {
arg = 0;
} else {
arg = 3;
}
} else {
return;
}
}
Common_Get(clip).effect_clip->effect_make_proc(effect_idx, *pos, 2, actor->shape_info.rotation.y, game, RSV_NO,
mCoBG_Wpos2Attribute(*pos, NULL), arg);
}
static void Player_actor_SetEffect_Dig_scoop(ACTOR* actor, GAME* game) {
PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor;
mPlayer_main_dig_scoop_c* main_scoop = &player->main_data.dig_scoop;
Player_actor_SetEffectHit_Dig_scoop(actor, game, &main_scoop->target_pos, player->now_main_index);
}
static void Player_actor_Put_Hole_Dig_scoop(ACTOR* actor) {
PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor;
f32 mod;
if (Common_Get(clip).bg_item_clip != NULL) {
cKF_FrameControl_c* fc = &player->keyframe0.frame_control;
if (player->animation0_idx == mPlayer_ANIM_DIG_KABU1) {
mod = 20.0f;
} else {
mod = 0.0f;
}
if (Player_actor_Check_AnimationFrame(fc, mod + 20.0f)) {
mPlayer_main_dig_scoop_c* main_scoop = &player->main_data.dig_scoop;
xyz_t* pos = &main_scoop->target_pos;
mActor_name_t item = main_scoop->item;
if (Common_Get(clip).bg_item_clip->dig_hole_effect_entry_proc(item, pos, 12, 0)) {
mCoBG_RegistDecalCircle(pos, 0.0f, 19.0f, 12);
if (item != EMPTY_NO) {
int spot = FALSE;
if (item != EMPTY_NO && item != SHINE_SPOT) {
spot = TRUE;
}
if (spot) {
Common_Get(clip).bg_item_clip->fly_entry_proc(item, pos, actor->shape_info.rotation.y);
}
}
}
}
}
}
static void Player_actor_SetSound_Dig_scoop(ACTOR* actor) {
PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor;
f32 mod;
int anim;
cKF_FrameControl_c* fc = &player->keyframe0.frame_control;
int anim_idx;
anim_idx = player->animation0_idx;
anim = anim_idx == mPlayer_ANIM_DIG_KABU1;
if (anim) {
mod = 20.0f;
} else {
mod = 0.0f;
}
if (Player_actor_Check_AnimationFrame(fc, (mod + 20.0f) - 5.0f)) {
if (anim) {
Player_actor_sound_kirikabu_out(actor);
} else {
Player_actor_sound_scoop1(actor);
Player_actor_set_viblation_Dig_scoop();
}
}
if (anim && Player_actor_Check_AnimationFrame(fc, 15.0f)) {
Player_actor_sound_kirikabu_scoop(actor);
Player_actor_set_viblation_Dig_scoop_stump();
}
if (anim_idx == mPlayer_ANIM_GET_D1 && Player_actor_Check_AnimationFrame(fc, 21.0f)) {
Player_actor_sound_ITEM_HORIDASHI(actor);
}
}
static void Player_actor_informed_insects_Dig_scoop(ACTOR* actor) {
PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor;
if (Player_actor_Check_AnimationFrame(&player->keyframe0.frame_control, 14.0f) &&
Common_Get(clip).insect_clip != NULL && Common_Get(clip).insect_clip->set_pl_act_tim_proc != NULL) {
int ut_x;
int ut_z;
mPlayer_main_dig_scoop_c* main_scoop = &player->main_data.dig_scoop;
xyz_t* pos = &main_scoop->target_pos;
mFI_Wpos2UtNum(&ut_x, &ut_z, *pos);
Common_Get(clip).insect_clip->set_pl_act_tim_proc(3, ut_x, ut_z);
}
}
static void Player_actor_SearchAnimation_Dig_scoop(ACTOR* actor, GAME* game, f32 frame) {
if (!Player_actor_Check_AnimationFrame_PerfectEquel(actor, frame)) {
Player_actor_SetEffect_Dig_scoop(actor, game);
Player_actor_Put_Hole_Dig_scoop(actor);
Player_actor_SetSound_Dig_scoop(actor);
Player_actor_Set_FootMark_Base1(actor, game, FALSE, FALSE);
Player_actor_informed_insects_Dig_scoop(actor);
}
}
static void Player_actor_ObjCheck_Dig_scoop(ACTOR* actor, GAME* game) {
Player_actor_Excute_Corect_forStand(actor, game);
}
static void Player_actor_BGcheck_Dig_scoop(ACTOR* actor) {
Player_actor_BGcheck_common_type1(actor);
}
static int Player_actor_lean_angle_scoop_common(ACTOR* actor, const xyz_t* pos, f32 frame) {
PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor;
s16 ang = 0;
if (player->keyframe0.frame_control.current_frame < frame) {
f32 x;
f32 y;
f32 z;
x = pos->x - actor->world.position.x;
y = pos->y - actor->world.position.y;
z = pos->z - actor->world.position.z;
if (x != 0.0f || z != 0.0f) {
ang = atans_table(Math3DVecLength2D(x, z), -y);
}
}
add_calc_short_angle2(&actor->shape_info.rotation.x, ang, 1.0f - sqrtf(0.5), 273, 0);
}
static void Player_actor_lean_angle_Dig_scoop(ACTOR* actor) {
PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor;
mPlayer_main_dig_scoop_c* main_scoop = &player->main_data.dig_scoop;
Player_actor_lean_angle_scoop_common(actor, &main_scoop->target_pos, 21.0f);
}
static void Player_actor_request_proc_index_fromDig_scoop(ACTOR* actor, GAME* game, int end_flag) {
PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor;
if (end_flag != 0) {
Player_actor_SettleRequestMainIndexPriority(actor);
Player_actor_request_main_wait_all(game, -5.0f, 0.0f, 0, mPlayer_REQUEST_PRIORITY_1);
} else {
f32 mod;
cKF_FrameControl_c* fc = &player->keyframe0.frame_control;
if (player->animation0_idx == mPlayer_ANIM_DIG_KABU1) {
mod = 20.0f;
} else {
mod = 0.0f;
}
if (Player_actor_Check_AnimationFrame(fc, 34.5f + mod)) {
Player_actor_SettleRequestMainIndexPriority(actor);
Player_actor_Set_status_for_bee(actor, TRUE);
} else {
f32 cur_frame = fc->current_frame;
if (cur_frame >= (35.0f + mod) && !Player_actor_CheckAndRequest_main_scoop_all(game, 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);
}
}
}
}
static void Player_actor_main_Dig_scoop(ACTOR* actor, GAME* game) {
f32 frame_calc;
int end_flag;
Player_actor_Movement_Dig_scoop(actor);
Player_actor_Reinput_force_position_angle(actor, game);
end_flag = Player_actor_CulcAnimation_Dig_scoop(actor, &frame_calc);
Player_actor_SearchAnimation_Dig_scoop(actor, game, frame_calc);
Player_actor_set_tex_anime_pattern(actor);
Player_actor_ObjCheck_Dig_scoop(actor, game);
Player_actor_BGcheck_Dig_scoop(actor);
Player_actor_lean_angle_Dig_scoop(actor);
Player_actor_Item_main(actor, game);
Player_actor_request_proc_index_fromDig_scoop(actor, game, end_flag);
}