diff --git a/include/m_player.h b/include/m_player.h index 11be4170..eb3e39fd 100644 --- a/include/m_player.h +++ b/include/m_player.h @@ -547,6 +547,8 @@ enum { mPlayer_ITEM_DATA_NUM }; +#define mPlayer_ITEM_DATA_VALID(type) ((type) >= 0 && type < mPlayer_ITEM_DATA_NUM) + enum { mPlayer_ITEM_DATA_TYPE_GFX, mPlayer_ITEM_DATA_TYPE_SKELETON, @@ -1350,6 +1352,14 @@ typedef struct player_main_demo_getoff_boat_standup_s { s16 angle_z; } mPlayer_main_demo_getoff_boat_standup_c; +typedef struct player_main_uki_s { + xyz_t cast_goal_point; +} mPlayer_main_uki_c; + +typedef struct player_main_putaway_uki_s { + f32 unk0; +} mPlayer_main_putaway_uki_c; + typedef union { mPlayer_main_intro_c intro; mPlayer_main_return_demo_c return_demo; @@ -1363,6 +1373,8 @@ typedef union { mPlayer_main_wash_car_c wash_car; mPlayer_main_demo_geton_boat_sitdown_c demo_geton_boat_sitdown; mPlayer_main_demo_getoff_boat_standup_c demo_getoff_boat_standup; + mPlayer_main_uki_c uki; + mPlayer_main_putaway_uki_c putaway_uki; u8 force_size[72]; // TEMP } mPlayer_main_data; diff --git a/src/m_player_item_common.c_inc b/src/m_player_item_common.c_inc index d5b8d821..75b16f6b 100644 --- a/src/m_player_item_common.c_inc +++ b/src/m_player_item_common.c_inc @@ -321,370 +321,6 @@ void Player_actor_LoadOrDestruct_Item(ACTOR* actor, int kind, int anim_idx, int } -void Player_actor_CorrectSomething_net(ACTOR* actor, xyz_t* pos) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - TOOLS_ACTOR* label = (TOOLS_ACTOR*)player->item_net_catch_label; - - if (label != NULL && player->item_net_catch_type == 0) { - Matrix_push(); - Matrix_translate(pos->x, pos->y, pos->z, FALSE); - Matrix_get(&label->matrix_work); - Matrix_pull(); - label->init_matrix = TRUE; - } -} - -int Player_actor_Check_ItemAnimationToItemKind(int kind, int anim) { - int res; - - if (mPlayer_ITEM_IS_AXE(kind) != FALSE) { - res = anim < 0; - } else if (mPlayer_ITEM_IS_NET(kind) != FALSE) { - res = mPlib_Get_Item_DataPointerType(anim) == mPlayer_ITEM_DATA_TYPE_NET_ANIMATION; - } else if (mPlayer_ITEM_IS_UMBRELLA(kind) != FALSE) { - res = anim < 0; - } else if (mPlayer_ITEM_IS_ROD(kind) != FALSE) { - res = mPlib_Get_Item_DataPointerType(anim) == mPlayer_ITEM_DATA_TYPE_ROD_ANIMATION; - } else if (mPlayer_ITEM_IS_SHOVEL(kind) != FALSE) { - res = anim < 0; - } else if (mPlayer_ITEM_IS_BALLOON(kind) != FALSE) { - res = anim < 0; - } else if (mPlayer_ITEM_IS_WINDMILL(kind) != FALSE) { - res = anim < 0; - } else { - res = FALSE; - } - - return res; -}samalv@debpc:~/ac-decomp/ac-decomp$ clang-format-14 ./src/m_player_item_common.c_inc > ./src/m_player_item_common.c_inc -samalv@debpc:~/ac-decomp/ac-decomp$ clang-format-14 ./src/m_player_item_common.c_inc | ./src/m_player_item_common.c_inc -bash: ./src/m_player_item_common.c_inc: Permission denied -samalv@debpc:~/ac-decomp/ac-decomp$ clang-format-14 ./src/m_player_item_common.c_inc -samalv@debpc:~/ac-decomp/ac-decomp$ clang-format-14 ./src/m_player_item_common.c_inc - -void Player_actor_Set_ItemNoSubmenu(mActor_name_t item) { - if (mEv_CheckTitleDemo() <= 0) { - Common_Get(now_private)->equipment = item; - } -} - -mActor_name_t Player_actor_Get_ItemNoSubmenu() { - if (mEv_CheckTitleDemo() > 0) { - return mPlib_Get_controller_data_for_title_demo_p()->equiped_item; - } else { - return Common_Get(now_private)->equipment; - } -} - -s8 Player_actor_Get_ItemKind_from_submenu() { - return mPlib_Get_ItemNoToItemKind(Player_actor_Get_ItemNoSubmenu()); -} - -s8 Player_actor_Get_ItemKind_fromScene() { - if (Player_actor_CheckScene_AbleOutItem(Save_Get(scene_no)) != 0) { - return Player_actor_Get_ItemKind_from_submenu(); - } - return -1; -} - - -s8 Player_actor_Get_ItemKind(ACTOR* actor, int kind) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - int able = Player_actor_CheckPlayer_AbleLoadItem(kind); - s8 scene_kind = Player_actor_Get_ItemKind_fromScene(); - - if (player->unable_hand_item_in_demo != FALSE) { - return -1; - } else if (player->able_hand_all_item_in_demo != FALSE) { - return scene_kind; - } else { - if (able == 0) { - return scene_kind; - } else if (able == 1) { - int holdable = mPlayer_ITEM_IS_UMBRELLA(scene_kind) || mPlayer_ITEM_IS_BALLOON(scene_kind) || - mPlayer_ITEM_IS_WINDMILL(scene_kind) || mPlayer_ITEM_IS_FAN(scene_kind) - - ? TRUE - : FALSE; - - if (holdable) { - return scene_kind; - } - } - } - return -1; -} - -int Player_actor_Get_BasicItemMainIndex_fromItemKind(int kind) { - static s8 data[] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 20, - 20, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, - }; - - if (mPlayer_ITEM_KIND_VALID(kind)) { - return data[kind]; - } else { - return 0; - } -} - - -void Player_actor_birth_umbrella(ACTOR* actor, GAME* game) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - int is_umbrella; - aTOL_Clip_c* tools; - s8 kind; - - if (player->umbrella_actor == NULL) { - tools = Common_Get(clip).tools_clip; - if (tools != NULL && - (player->umbrella_state == 1 || player->umbrella_state == 4 || player->umbrella_state == 2)) { - is_umbrella = FALSE; - kind = player->item_kind; - if (mPlayer_ITEM_IS_UMBRELLA(kind)) { - is_umbrella = TRUE; - } - - if (is_umbrella) { - player->umbrella_actor = tools->aTOL_birth_proc(kind - mPlayer_ITEM_KIND_UMBRELLA00, - player->umbrella_state, actor, game, -1, 0); - - if (player->umbrella_actor != NULL) { - player->umbrella_actor->world.position = actor->world.position; - player->umbrella_actor->skip_drawing = TRUE; - } - } - } - } -} - -ACTOR* Player_actor_Get_umbrella_p(ACTOR* actor, GAME* game) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - ACTOR* umbrella; - Player_actor_birth_umbrella(actor, game); - - umbrella = player->umbrella_actor; - if (umbrella != NULL) { - umbrella->skip_drawing = FALSE; - return umbrella; - } - - return NULL; -} - -int Player_actor_Item_CulcAnimation_Base(ACTOR* actor) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - - return cKF_SkeletonInfo_R_play(&player->item_keyframe); -} - -int Player_actor_Item_CulcAnimation_Base2(ACTOR* actor) { - return Player_actor_Item_CulcAnimation_Base(actor) == 1; -} - -void Player_actor_Item_SetAnimation_Base(ACTOR* actor, f32 frame) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - cKF_SkeletonInfo_R_c* keyf = &player->item_keyframe; - - keyf->frame_control.current_frame = frame; - cKF_SkeletonInfo_R_play(keyf); - keyf->frame_control.current_frame = frame; -} - -void Player_actor_Item_DMA_Data(ACTOR* actor, int skl_idx, int anim_idx, int mode, f32 speed, f32 morph_speed, - f32 frame) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - int change_bank = Player_actor_Change_ItemBank(); - - if ((skl_idx >= 0) && (mPlib_Get_Item_DataPointerType(skl_idx) != 0)) { - cKF_Skeleton_R_c* skeleton; - cKF_SkeletonInfo_R_c* keyf; - s_xyz* joint_work; - s_xyz* morph_work; - cKF_SkeletonInfo_R_c* key2; - - keyf = &player->item_keyframe; - joint_work = player->item_joint_data; - morph_work = player->item_morph_data; - skeleton = mPlib_Get_Item_DataPointer(skl_idx); - - if (frame >= 0.0f) { - cKF_SkeletonInfo_R_ct(keyf, skeleton, NULL, joint_work, morph_work); - keyf->frame_control.current_frame = frame; - } else if (change_bank != 0) { - keyf->skeleton = skeleton; - keyf->animation = NULL; - } else { - cKF_SkeletonInfo_R_ct(keyf, skeleton, NULL, joint_work, morph_work); - } - key2 = &player->item_keyframe; - cKF_SkeletonInfo_R_init_standard_setframeandspeedandmorphandmode(key2, mPlib_Get_Item_DataPointer(anim_idx), - NULL, key2->frame_control.current_frame, speed, - morph_speed, mode); - } -} - - -void Player_actor_Item_Set_Command_forUki(ACTOR* actor, int command) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - UKI_ACTOR* rod = (UKI_ACTOR*)player->fishing_rod_actor_p; - - if (rod != NULL) { - rod->command = command; - } -} - - -void Player_actor_Item_Set_RightHandPos_forUki(ACTOR* actor, int arg0) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - UKI_ACTOR* rod = (UKI_ACTOR*)player->fishing_rod_actor_p; - - if (rod != NULL) { - s16 rot; - xyz_t pos; - f32 sin; - f32 cos; - switch (arg0) { - case 0x35: - case 0x36: - case 0x37: - pos = actor->world.position; - rot = actor->shape_info.rotation.y; - - cos = cos_s(rot); - sin = sin_s(rot); - - pos.z += (-2.0f * cos) - (12.0f * sin); - pos.x += (12.0f * cos) + (-2.0f * sin); - pos.y += 17.5f; - - rod->right_hand_pos = pos; - break; - default: - rod->right_hand_pos = player->right_hand_pos; - break; - } - } -} - - -void Player_actor_Item_Set_LeftHandPos_forUki(ACTOR* actor, int arg0) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - UKI_ACTOR* rod = (UKI_ACTOR*)player->fishing_rod_actor_p; - - if (rod != NULL) { - s16 rot; - xyz_t pos; - f32 sin; - f32 cos; - switch (arg0) { - case 0x35: - case 0x36: - case 0x37: - pos = actor->world.position; - rot = actor->shape_info.rotation.y; - - cos = cos_s(rot); - sin = sin_s(rot); - - pos.z += (-2.0f * cos) - (12.0f * sin); - pos.x += (12.0f * cos) + (-2.0f * sin); - pos.y += 17.5f; - - rod->left_hand_pos = pos; - break; - default: - rod->left_hand_pos = player->left_hand_pos; - break; - } - } -} - - -void Player_actor_Item_Set_PosSpeed_forUki(ACTOR* actor) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - UKI_ACTOR* rod = (UKI_ACTOR*)player->fishing_rod_actor_p; - - if (rod != NULL) { - rod->position_speed = actor->position_speed; - } -} - -void Player_actor_Item_Set_AngleSpeedY_forUki(ACTOR* actor) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - UKI_ACTOR* rod = (UKI_ACTOR*)player->fishing_rod_actor_p; - - if (rod != NULL) { - int y = player->shape_angle_delta.y; - - if (y > 0) { - if (y > 0x8000) { - y = -(0x10000 - y); - } - } else if (y < -0x8000) { - y += 0x10000; - } - - rod->angle_speed_y = y; - } -} - -void Player_actor_Item_Set_RodTopPos_forUki(ACTOR* actor) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - UKI_ACTOR* rod = (UKI_ACTOR*)player->fishing_rod_actor_p; - - if (rod != NULL) { - Player_actor_Get_ItemRodTopInitPos(actor, &rod->rod_top_position); - } -} - - -void Player_actor_LoadOrDestruct_Item(ACTOR* actor, int kind, int anim_idx, int mode, f32 speed, f32 morph_speed, - f32 frame) { - PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - int umbrella; - int rod; - - if (kind >= 0) { - Player_actor_Item_DMA_Data(actor, mPlib_Get_BasicItemShapeIndex_fromItemKind(kind), anim_idx, mode, speed, - morph_speed, frame); - } - umbrella = FALSE; - if (mPlayer_ITEM_IS_UMBRELLA(kind)) { - umbrella = TRUE; - } - - if (!umbrella) { - if (player->umbrella_actor != NULL && Common_Get(clip).tools_clip != NULL) { - Common_Get(clip).tools_clip->aTOL_chg_request_mode_proc(actor, player->umbrella_actor, 3); - player->umbrella_actor = NULL; - } - - player->umbrella_state = 4; - } else { - TOOLS_ACTOR* tool = (TOOLS_ACTOR*)player->umbrella_actor; - if (tool != NULL && (kind - mPlayer_ITEM_KIND_UMBRELLA00) != tool->tool_name) { - if (Common_Get(clip).tools_clip != NULL) { - Common_Get(clip).tools_clip->aTOL_chg_request_mode_proc(actor, player->umbrella_actor, 3); - player->umbrella_actor = NULL; - } - - player->umbrella_state = 4; - } - } - - rod = FALSE; - if (mPlayer_ITEM_IS_ROD(kind)) { - rod = TRUE; - } - - if (!rod) { - Player_actor_Item_Set_Command_forUki(actor, 0); - } -} - - void Player_actor_CorrectSomething_net(ACTOR* actor, xyz_t* pos) { PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; TOOLS_ACTOR* label = (TOOLS_ACTOR*)player->item_net_catch_label;