mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
fix item_common
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user