mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
Add BOY_part_data, cleanup c_keyframe
This commit is contained in:
@@ -1405,6 +1405,8 @@ data/npc/model/tex/brd_9.c:
|
||||
.data: [0x8077D980, 0x8077E6A0]
|
||||
data/npc/model/tex/brd_10.c:
|
||||
.data: [0x8077E6A0, 0x8077F3C0]
|
||||
data/player/BOY_part_data.c:
|
||||
.data: [0x807D5F60, 0x807D5FE8]
|
||||
data/npc/model/mdl/fox_1.c:
|
||||
.data: [0x807D5FE8, 0x807D8098]
|
||||
data/npc/model/tex/fox_1.c:
|
||||
|
||||
+12
-12
@@ -382,10 +382,10 @@ extern void cKF_SkeletonInfo_R_combine_work_set(cKF_SkeletonInfo_R_combine_work_
|
||||
* @param joint Pointer to the joint data.
|
||||
* @param flag Pointer to the current joint flag.
|
||||
* @param combine Pointer to the combine work set structure.
|
||||
* @param cwork_num Pointer to the current work layer number.
|
||||
* @param part_table Pointer to the current part table.
|
||||
*/
|
||||
extern void cKF_SkeletonInfo_R_combine_translation(s16** joint, int* flag, cKF_SkeletonInfo_R_combine_work_c* combine,
|
||||
s8* cwork_num);
|
||||
s8* part_table);
|
||||
|
||||
/**
|
||||
* Combines rotation data from multiple animation layers for a joint, modifying it based on animation flags.
|
||||
@@ -393,34 +393,34 @@ extern void cKF_SkeletonInfo_R_combine_translation(s16** joint, int* flag, cKF_S
|
||||
* @param joint Pointer to the current joint's rotation data.
|
||||
* @param flag Pointer to the animation flag affecting the current joint.
|
||||
* @param combine Pointer to the combine work set structure containing animation layer data.
|
||||
* @param cwork_num Pointer to the layer number being processed.
|
||||
* @param part_table Pointer to the current part table.
|
||||
*/
|
||||
extern void cKF_SkeletonInfo_R_combine_rotation(s16** joint, int* flag, cKF_SkeletonInfo_R_combine_work_c* combine,
|
||||
s8* cwork_num);
|
||||
s8* part_table);
|
||||
|
||||
/**
|
||||
* Combines and plays two sets of animation data, applying translations and rotations from both.
|
||||
*
|
||||
* @param info1 First skeleton info structure to combine.
|
||||
* @param info2 Second skeleton info structure to combine.
|
||||
* @param flag Pointer to a flag determining the combination behavior.
|
||||
* @param part_table Pointer to the part table determining the combination behavior.
|
||||
* @return Status of the combination and play operation.
|
||||
*/
|
||||
extern int cKF_SkeletonInfo_R_combine_play(cKF_SkeletonInfo_R_c* info1, cKF_SkeletonInfo_R_c* info2, s8* flag);
|
||||
extern int cKF_SkeletonInfo_R_combine_play(cKF_SkeletonInfo_R_c* info1, cKF_SkeletonInfo_R_c* info2, s8* part_table);
|
||||
|
||||
/**
|
||||
* Combines and plays three sets of animation data, applying translations and rotations, and updates playback state.
|
||||
*
|
||||
* @param arg1 Result of playing first animation.
|
||||
* @param arg2 Result of playing second animation.
|
||||
* @param arg3 Result of playing third animation.
|
||||
* @param state1 Result of playing first animation.
|
||||
* @param state2 Result of playing second animation.
|
||||
* @param state3 Result of playing third animation.
|
||||
* @param info1 First skeleton info structure to combine.
|
||||
* @param info2 Second skeleton info structure to combine.
|
||||
* @param info3 Third skeleton info structure to combine.
|
||||
* @param flag Pointer to a flag determining the combination behavior.
|
||||
* @param part_table Pointer to the part table determining the combination behavior.
|
||||
*/
|
||||
extern void cKF_SkeletonInfo_R_T_combine_play(int* arg1, int* arg2, int* arg3, cKF_SkeletonInfo_R_c* info1,
|
||||
cKF_SkeletonInfo_R_c* info2, cKF_SkeletonInfo_R_c* info3, s8* flag);
|
||||
extern void cKF_SkeletonInfo_R_T_combine_play(int* state1, int* state2, int* state3, cKF_SkeletonInfo_R_c* info1,
|
||||
cKF_SkeletonInfo_R_c* info2, cKF_SkeletonInfo_R_c* info3, s8* part_table);
|
||||
|
||||
/**
|
||||
* Sets base shape translation and rotation for a skeleton info structure.
|
||||
|
||||
+84
-93
@@ -74,7 +74,7 @@ static int cKF_FrameControl_passCheck(cKF_FrameControl_c* fc, f32 current, f32*
|
||||
*out = 0.0f;
|
||||
cur = fc->current_frame;
|
||||
if (cur == current) {
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
speed = (fc->start_frame < fc->end_frame) ? fc->speed : -fc->speed;
|
||||
@@ -83,24 +83,24 @@ static int cKF_FrameControl_passCheck(cKF_FrameControl_c* fc, f32 current, f32*
|
||||
if ((speed >= 0.0f && cur < current && cur + speed >= current) ||
|
||||
(speed < 0.0f && cur > current && cur + speed <= current)) {
|
||||
*out = cur + speed - current; // Calculate overshoot
|
||||
return 1;
|
||||
return TRUE;
|
||||
}
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
extern int cKF_FrameControl_passCheck_now(cKF_FrameControl_c* fc, f32 current) {
|
||||
f32 cur = fc->current_frame;
|
||||
f32 speed;
|
||||
int ret = 0;
|
||||
int ret = FALSE;
|
||||
|
||||
if (cur != current) {
|
||||
speed = (fc->start_frame < fc->end_frame) ? fc->speed : -fc->speed;
|
||||
if ((speed >= 0.0f && cur >= current && cur - speed < current) ||
|
||||
(speed < 0.0f && cur <= current && cur - speed > current)) {
|
||||
ret = 1;
|
||||
ret = TRUE;
|
||||
}
|
||||
} else {
|
||||
ret = 1;
|
||||
ret = TRUE;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -743,13 +743,13 @@ extern void cKF_SkeletonInfo_R_combine_work_set(cKF_SkeletonInfo_R_combine_work_
|
||||
}
|
||||
|
||||
extern void cKF_SkeletonInfo_R_combine_translation(s16** joint, int* flag, cKF_SkeletonInfo_R_combine_work_c* combine,
|
||||
s8* cwork_num) {
|
||||
int i = 0;
|
||||
s8* part_table) {
|
||||
int i;
|
||||
|
||||
for (i; i < 3; i++) {
|
||||
switch (*cwork_num) {
|
||||
for (i = 0; i < 3; i++) {
|
||||
/* Determine which animation we should pull from for the joint */
|
||||
switch (*part_table) {
|
||||
case 0:
|
||||
|
||||
if (*combine[0].anm_check_bit_tbl & *flag) {
|
||||
(**joint) =
|
||||
cKF_KeyCalc(combine[0].anm_data_src_idx, combine[0].anm_key_num[combine[0].anm_key_num_idx],
|
||||
@@ -760,7 +760,6 @@ extern void cKF_SkeletonInfo_R_combine_translation(s16** joint, int* flag, cKF_S
|
||||
|
||||
break;
|
||||
case 1:
|
||||
|
||||
if (*combine[1].anm_check_bit_tbl & *flag) {
|
||||
(**joint) =
|
||||
cKF_KeyCalc(combine[1].anm_data_src_idx, combine[1].anm_key_num[combine[1].anm_key_num_idx],
|
||||
@@ -771,7 +770,6 @@ extern void cKF_SkeletonInfo_R_combine_translation(s16** joint, int* flag, cKF_S
|
||||
|
||||
break;
|
||||
case 2:
|
||||
|
||||
if (*combine[2].anm_check_bit_tbl & *flag) {
|
||||
(**joint) =
|
||||
cKF_KeyCalc(combine[2].anm_data_src_idx, combine[2].anm_key_num[combine[2].anm_key_num_idx],
|
||||
@@ -789,12 +787,14 @@ extern void cKF_SkeletonInfo_R_combine_translation(s16** joint, int* flag, cKF_S
|
||||
} else {
|
||||
combine[0].anm_const_val_tbl_idx++;
|
||||
}
|
||||
|
||||
if (*combine[1].anm_check_bit_tbl & *flag) {
|
||||
combine[1].anm_data_src_idx += combine[1].anm_key_num[combine[1].anm_key_num_idx];
|
||||
combine[1].anm_key_num_idx++;
|
||||
} else {
|
||||
combine[1].anm_const_val_tbl_idx++;
|
||||
}
|
||||
|
||||
if (*combine[2].anm_check_bit_tbl & *flag) {
|
||||
combine[2].anm_data_src_idx += combine[2].anm_key_num[combine[2].anm_key_num_idx];
|
||||
combine[2].anm_key_num_idx++;
|
||||
@@ -808,17 +808,17 @@ extern void cKF_SkeletonInfo_R_combine_translation(s16** joint, int* flag, cKF_S
|
||||
}
|
||||
|
||||
extern void cKF_SkeletonInfo_R_combine_rotation(s16** joint, int* flag, cKF_SkeletonInfo_R_combine_work_c* combine,
|
||||
s8* cwork_num) {
|
||||
int i = 0;
|
||||
s8* part_table) {
|
||||
int i;
|
||||
int j;
|
||||
s16* temp;
|
||||
f32 calc_joint;
|
||||
|
||||
for (i; i < combine->keyframe->skeleton->num_joints; i++) {
|
||||
for (i = 0; i < combine->keyframe->skeleton->num_joints; i++) {
|
||||
*flag = 4;
|
||||
|
||||
for (j = 0; j < 3; j++) {
|
||||
switch (cwork_num[i + 1]) {
|
||||
/* Determine which animation we should pull from for the joint */
|
||||
switch (part_table[i + 1]) {
|
||||
case 0:
|
||||
if (*flag & combine[0].anm_check_bit_tbl[i]) {
|
||||
(**joint) =
|
||||
@@ -868,54 +868,54 @@ extern void cKF_SkeletonInfo_R_combine_rotation(s16** joint, int* flag, cKF_Skel
|
||||
combine[2].anm_const_val_tbl_idx++;
|
||||
}
|
||||
|
||||
temp = *joint;
|
||||
calc_joint = 0.1f * (*temp);
|
||||
**joint = (s16)(int)((calc_joint - ((f32)(int)(calc_joint * 0.0027777778f) * 360.0f)) * 182.04445f);
|
||||
/*
|
||||
* At this point, rotation values in joint are encoded in [degree.x] format.
|
||||
* This gives one decimal of rotational precision. We then convert from degrees to
|
||||
* s16 binangle.
|
||||
*/
|
||||
|
||||
/* s16 degree -> float degree with 1 decimal place precision */
|
||||
calc_joint = 0.1f * (**joint);
|
||||
/* degree (unbound) -> [0.0f, 360.0f) -> binangle [-32768, 32767] */
|
||||
**joint = (s16)DEG2SHORT_ANGLE2(MOD_F(calc_joint, 360.0f));
|
||||
*flag = (u32)*flag >> 1;
|
||||
*joint += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern int cKF_SkeletonInfo_R_combine_play(cKF_SkeletonInfo_R_c* info1, cKF_SkeletonInfo_R_c* info2, s8* flag) {
|
||||
extern int cKF_SkeletonInfo_R_combine_play(cKF_SkeletonInfo_R_c* info1, cKF_SkeletonInfo_R_c* info2, s8* part_table) {
|
||||
int combinet;
|
||||
s16* joint;
|
||||
|
||||
cKF_SkeletonInfo_R_combine_work_c combine1;
|
||||
cKF_SkeletonInfo_R_combine_work_c combine2;
|
||||
cKF_SkeletonInfo_R_combine_work_c combine3;
|
||||
|
||||
cKF_SkeletonInfo_R_combine_work_c combine[3];
|
||||
int i;
|
||||
int j;
|
||||
|
||||
s_xyz* joint2;
|
||||
s_xyz* applyjoint;
|
||||
|
||||
if ((info1 == NULL) || (info2 == NULL) || (flag == NULL)) {
|
||||
if ((info1 == NULL) || (info2 == NULL) || (part_table == NULL)) {
|
||||
return cKF_STATE_NONE;
|
||||
}
|
||||
joint = (F32_IS_ZERO(info1->morph_counter)) ? &info1->current_joint->x : &info1->target_joint->x;
|
||||
|
||||
if (info1 != NULL) {
|
||||
cKF_SkeletonInfo_R_combine_work_set(&combine3, info1);
|
||||
cKF_SkeletonInfo_R_combine_work_set(&combine[0], info1);
|
||||
}
|
||||
if (info2 != NULL) {
|
||||
cKF_SkeletonInfo_R_combine_work_set(&combine2, info2);
|
||||
cKF_SkeletonInfo_R_combine_work_set(&combine1, info2);
|
||||
cKF_SkeletonInfo_R_combine_work_set(&combine[1], info2);
|
||||
cKF_SkeletonInfo_R_combine_work_set(&combine[2], info2);
|
||||
}
|
||||
combinet = 0x20;
|
||||
cKF_SkeletonInfo_R_combine_translation(&joint, &combinet, &combine3, flag);
|
||||
cKF_SkeletonInfo_R_combine_rotation(&joint, &combinet, &combine3, flag);
|
||||
cKF_SkeletonInfo_R_combine_translation(&joint, &combinet, &combine[0], part_table);
|
||||
cKF_SkeletonInfo_R_combine_rotation(&joint, &combinet, &combine[0], part_table);
|
||||
|
||||
if (info1->rotation_diff_table != NULL) {
|
||||
applyjoint = (F32_IS_ZERO(info1->morph_counter)) ? info1->current_joint : info1->target_joint;
|
||||
|
||||
applyjoint += 1;
|
||||
for (i = 0, j = 0; i < info1->skeleton->num_joints; i++, j++) {
|
||||
applyjoint->x += info1->rotation_diff_table[j].x;
|
||||
applyjoint->y += info1->rotation_diff_table[j].y;
|
||||
applyjoint->z += info1->rotation_diff_table[j].z;
|
||||
for (i = 0; i < info1->skeleton->num_joints; i++) {
|
||||
applyjoint->x += info1->rotation_diff_table[i].x;
|
||||
applyjoint->y += info1->rotation_diff_table[i].y;
|
||||
applyjoint->z += info1->rotation_diff_table[i].z;
|
||||
|
||||
applyjoint++;
|
||||
}
|
||||
@@ -923,95 +923,89 @@ extern int cKF_SkeletonInfo_R_combine_play(cKF_SkeletonInfo_R_c* info1, cKF_Skel
|
||||
if (F32_IS_ZERO(info1->morph_counter)) {
|
||||
cKF_FrameControl_play(&info2->frame_control);
|
||||
return cKF_FrameControl_play(&info1->frame_control);
|
||||
}
|
||||
if (info1->morph_counter > 0.0f) {
|
||||
} else if (info1->morph_counter > 0.0f) {
|
||||
cKF_SkeletonInfo_R_morphJoint(info1);
|
||||
info1->morph_counter -= 0.5f;
|
||||
if (info1->morph_counter <= 0.0f) {
|
||||
info1->morph_counter = 0.0f;
|
||||
}
|
||||
return cKF_STATE_NONE;
|
||||
} else {
|
||||
cKF_SkeletonInfo_R_morphJoint(info1);
|
||||
info1->morph_counter += 0.5f;
|
||||
if (info1->morph_counter >= 0.0f) {
|
||||
info1->morph_counter = 0.0f;
|
||||
}
|
||||
cKF_FrameControl_play(&info2->frame_control);
|
||||
return cKF_FrameControl_play(&info1->frame_control);
|
||||
}
|
||||
cKF_SkeletonInfo_R_morphJoint(info1);
|
||||
info1->morph_counter += 0.5f;
|
||||
if (info1->morph_counter >= 0.0f) {
|
||||
info1->morph_counter = 0.0f;
|
||||
}
|
||||
cKF_FrameControl_play(&info2->frame_control);
|
||||
return cKF_FrameControl_play(&info1->frame_control);
|
||||
}
|
||||
|
||||
extern void cKF_SkeletonInfo_R_T_combine_play(int* arg1, int* arg2, int* arg3, cKF_SkeletonInfo_R_c* info1,
|
||||
cKF_SkeletonInfo_R_c* info2, cKF_SkeletonInfo_R_c* info3, s8* flag) {
|
||||
extern void cKF_SkeletonInfo_R_T_combine_play(int* state1, int* state2, int* state3, cKF_SkeletonInfo_R_c* info1,
|
||||
cKF_SkeletonInfo_R_c* info2, cKF_SkeletonInfo_R_c* info3,
|
||||
s8* part_table) {
|
||||
int combinet;
|
||||
s16* joint;
|
||||
|
||||
cKF_SkeletonInfo_R_combine_work_c combine1;
|
||||
cKF_SkeletonInfo_R_combine_work_c combine2;
|
||||
cKF_SkeletonInfo_R_combine_work_c combine3;
|
||||
cKF_SkeletonInfo_R_combine_work_c combine[3];
|
||||
int i;
|
||||
int j;
|
||||
|
||||
s_xyz* joint2;
|
||||
s_xyz* applyjoint;
|
||||
|
||||
if ((info1 == NULL) || (info2 == NULL) || (info3 == NULL) || (flag == NULL)) {
|
||||
if ((info1 == NULL) || (info2 == NULL) || (info3 == NULL) || (part_table == NULL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
joint = (F32_IS_ZERO(info1->morph_counter)) ? &info1->current_joint->x : &info1->target_joint->x;
|
||||
|
||||
if (info1 != NULL) {
|
||||
cKF_SkeletonInfo_R_combine_work_set(&combine3, info1);
|
||||
cKF_SkeletonInfo_R_combine_work_set(&combine[0], info1);
|
||||
}
|
||||
if (info2 != NULL) {
|
||||
cKF_SkeletonInfo_R_combine_work_set(&combine2, info2);
|
||||
cKF_SkeletonInfo_R_combine_work_set(&combine[1], info2);
|
||||
}
|
||||
if (info3 != NULL) {
|
||||
cKF_SkeletonInfo_R_combine_work_set(&combine1, info3);
|
||||
cKF_SkeletonInfo_R_combine_work_set(&combine[2], info3);
|
||||
}
|
||||
|
||||
combinet = 0x20;
|
||||
cKF_SkeletonInfo_R_combine_translation(&joint, &combinet, &combine3, flag);
|
||||
cKF_SkeletonInfo_R_combine_rotation(&joint, &combinet, &combine3, flag);
|
||||
cKF_SkeletonInfo_R_combine_translation(&joint, &combinet, &combine[0], part_table);
|
||||
cKF_SkeletonInfo_R_combine_rotation(&joint, &combinet, &combine[0], part_table);
|
||||
|
||||
if (info1->rotation_diff_table != NULL) {
|
||||
applyjoint = (F32_IS_ZERO(info1->morph_counter)) ? info1->current_joint : info1->target_joint;
|
||||
|
||||
applyjoint += 1;
|
||||
for (i = 0, j = 0; i < info1->skeleton->num_joints; i++, j++) {
|
||||
applyjoint->x += info1->rotation_diff_table[j].x;
|
||||
applyjoint->y += info1->rotation_diff_table[j].y;
|
||||
applyjoint->z += info1->rotation_diff_table[j].z;
|
||||
for (i = 0; i < info1->skeleton->num_joints; i++) {
|
||||
applyjoint->x += info1->rotation_diff_table[i].x;
|
||||
applyjoint->y += info1->rotation_diff_table[i].y;
|
||||
applyjoint->z += info1->rotation_diff_table[i].z;
|
||||
|
||||
applyjoint++;
|
||||
}
|
||||
}
|
||||
if (F32_IS_ZERO(info1->morph_counter)) {
|
||||
*arg1 = cKF_FrameControl_play(&info1->frame_control);
|
||||
*arg2 = cKF_FrameControl_play(&info2->frame_control);
|
||||
*arg3 = cKF_FrameControl_play(&info3->frame_control);
|
||||
return;
|
||||
}
|
||||
if (info1->morph_counter > 0.0f) {
|
||||
*state1 = cKF_FrameControl_play(&info1->frame_control);
|
||||
*state2 = cKF_FrameControl_play(&info2->frame_control);
|
||||
*state3 = cKF_FrameControl_play(&info3->frame_control);
|
||||
} else if (info1->morph_counter > 0.0f) {
|
||||
cKF_SkeletonInfo_R_morphJoint(info1);
|
||||
info1->morph_counter -= 0.5f;
|
||||
if (info1->morph_counter <= 0.0f) {
|
||||
info1->morph_counter = 0.0f;
|
||||
}
|
||||
*arg1 = 0;
|
||||
*arg2 = 0;
|
||||
*arg3 = 0;
|
||||
return;
|
||||
*state1 = cKF_STATE_NONE;
|
||||
*state2 = cKF_STATE_NONE;
|
||||
*state3 = cKF_STATE_NONE;
|
||||
} else {
|
||||
cKF_SkeletonInfo_R_morphJoint(info1);
|
||||
info1->morph_counter += 0.5f;
|
||||
if (info1->morph_counter >= 0.0f) {
|
||||
info1->morph_counter = 0.0f;
|
||||
}
|
||||
*state1 = cKF_FrameControl_play(&info1->frame_control);
|
||||
*state2 = cKF_FrameControl_play(&info2->frame_control);
|
||||
*state3 = cKF_FrameControl_play(&info3->frame_control);
|
||||
}
|
||||
cKF_SkeletonInfo_R_morphJoint(info1);
|
||||
info1->morph_counter += 0.5f;
|
||||
if (info1->morph_counter >= 0.0f) {
|
||||
info1->morph_counter = 0.0f;
|
||||
}
|
||||
*arg1 = cKF_FrameControl_play(&info1->frame_control);
|
||||
*arg2 = cKF_FrameControl_play(&info2->frame_control);
|
||||
*arg3 = cKF_FrameControl_play(&info3->frame_control);
|
||||
}
|
||||
|
||||
extern void cKF_SkeletonInfo_R_Animation_Set_base_shape_trs(cKF_SkeletonInfo_R_c* keyframe, f32 transx, f32 transy,
|
||||
@@ -1032,12 +1026,8 @@ extern void cKF_SkeletonInfo_R_Animation_Set_base_shape_trs(cKF_SkeletonInfo_R_c
|
||||
|
||||
extern void cKF_SkeletonInfo_R_AnimationMove_ct_base(xyz_t* basepos, xyz_t* correctpos, s16 ybase, s16 yidle,
|
||||
f32 counter, cKF_SkeletonInfo_R_c* keyframe, int an_flag) {
|
||||
int sub;
|
||||
|
||||
keyframe->animation_enabled = an_flag;
|
||||
|
||||
keyframe->fixed_counter = (counter >= 0.0f) ? counter : -counter;
|
||||
|
||||
keyframe->base_world_position = ZeroVec;
|
||||
keyframe->model_world_position_correction = ZeroVec;
|
||||
|
||||
@@ -1060,11 +1050,12 @@ extern void cKF_SkeletonInfo_R_AnimationMove_ct_base(xyz_t* basepos, xyz_t* corr
|
||||
keyframe->model_angle_correction = 0;
|
||||
|
||||
if (an_flag & cKF_ANIMATION_ROT_Y) {
|
||||
sub = ybase - yidle;
|
||||
if (sub > 0x8000) {
|
||||
sub = -(0x10000 - sub);
|
||||
} else if (sub < -0x8000) {
|
||||
sub += 0x10000;
|
||||
int sub = ybase - yidle;
|
||||
|
||||
if (sub > DEG2SHORT_ANGLE2(180.0f)) {
|
||||
sub = -(DEG2SHORT_ANGLE2(360.0f) - sub);
|
||||
} else if (sub < DEG2SHORT_ANGLE2(-180.0f)) {
|
||||
sub += DEG2SHORT_ANGLE2(360.0f);
|
||||
}
|
||||
keyframe->base_angle_y = yidle;
|
||||
keyframe->model_angle_correction = sub;
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
#include "types.h"
|
||||
#include "m_player.h"
|
||||
|
||||
/*
|
||||
* These tables dictate which animation will play for a given joint.
|
||||
* The player has two main animation states. 0 uses PLAYER_ACTOR::keyframe0,
|
||||
* and 1 uses PLAYER_ACTOR::keyframe1. This is essentially a barebones
|
||||
* animation overlay system.
|
||||
*/
|
||||
|
||||
// clang-format off
|
||||
s8 BOY_part_data[][mPlayer_JOINT_NUM + 1] = {
|
||||
/* Normal */
|
||||
{
|
||||
0, /* Base translation */
|
||||
0, /* mPlayer_JOINT_ROOT */
|
||||
0, /* mPlayer_JOINT_BASE */
|
||||
0, /* mPlayer_JOINT_LFOOT_BASE */
|
||||
0, /* mPlayer_JOINT_LFOOT1 */
|
||||
0, /* mPlayer_JOINT_LFOOT2 */
|
||||
0, /* mPlayer_JOINT_LFOOT3 */
|
||||
0, /* mPlayer_JOINT_RFOOT_BASE */
|
||||
0, /* mPlayer_JOINT_RFOOT1 */
|
||||
0, /* mPlayer_JOINT_RFOOT2 */
|
||||
0, /* mPlayer_JOINT_RFOOT3 */
|
||||
0, /* mPlayer_JOINT_TAIL_BASE */
|
||||
0, /* mPlayer_JOINT_TAIL1 */
|
||||
0, /* mPlayer_JOINT_TAIL2 */
|
||||
0, /* mPlayer_JOINT_CHEST */
|
||||
0, /* mPlayer_JOINT_LARM_BASE */
|
||||
0, /* mPlayer_JOINT_LARM1 */
|
||||
0, /* mPlayer_JOINT_LARM2 */
|
||||
0, /* mPlayer_JOINT_RARM_BASE */
|
||||
0, /* mPlayer_JOINT_RARM1 */
|
||||
0, /* mPlayer_JOINT_RARM2 */
|
||||
0, /* mPlayer_JOINT_HAND */
|
||||
0, /* mPlayer_JOINT_HEAD_BASE */
|
||||
0, /* mPlayer_JOINT_MOUTH_BASE */
|
||||
0, /* mPlayer_JOINT_MOUTH */
|
||||
0, /* mPlayer_JOINT_HEAD */
|
||||
0, /* mPlayer_JOINT_FEEL */
|
||||
},
|
||||
/* Axe */
|
||||
{
|
||||
0, /* Base translation */
|
||||
0, /* mPlayer_JOINT_ROOT */
|
||||
0, /* mPlayer_JOINT_BASE */
|
||||
0, /* mPlayer_JOINT_LFOOT_BASE */
|
||||
0, /* mPlayer_JOINT_LFOOT1 */
|
||||
0, /* mPlayer_JOINT_LFOOT2 */
|
||||
0, /* mPlayer_JOINT_LFOOT3 */
|
||||
0, /* mPlayer_JOINT_RFOOT_BASE */
|
||||
0, /* mPlayer_JOINT_RFOOT1 */
|
||||
0, /* mPlayer_JOINT_RFOOT2 */
|
||||
0, /* mPlayer_JOINT_RFOOT3 */
|
||||
0, /* mPlayer_JOINT_TAIL_BASE */
|
||||
0, /* mPlayer_JOINT_TAIL1 */
|
||||
0, /* mPlayer_JOINT_TAIL2 */
|
||||
0, /* mPlayer_JOINT_CHEST */
|
||||
1, /* mPlayer_JOINT_LARM_BASE */
|
||||
1, /* mPlayer_JOINT_LARM1 */
|
||||
1, /* mPlayer_JOINT_LARM2 */
|
||||
1, /* mPlayer_JOINT_RARM_BASE */
|
||||
1, /* mPlayer_JOINT_RARM1 */
|
||||
1, /* mPlayer_JOINT_RARM2 */
|
||||
1, /* mPlayer_JOINT_HAND */
|
||||
0, /* mPlayer_JOINT_HEAD_BASE */
|
||||
0, /* mPlayer_JOINT_MOUTH_BASE */
|
||||
0, /* mPlayer_JOINT_MOUTH */
|
||||
0, /* mPlayer_JOINT_HEAD */
|
||||
0, /* mPlayer_JOINT_FEEL */
|
||||
},
|
||||
/* Pickup */
|
||||
{
|
||||
0, /* Base translation */
|
||||
0, /* mPlayer_JOINT_ROOT */
|
||||
0, /* mPlayer_JOINT_BASE */
|
||||
0, /* mPlayer_JOINT_LFOOT_BASE */
|
||||
0, /* mPlayer_JOINT_LFOOT1 */
|
||||
0, /* mPlayer_JOINT_LFOOT2 */
|
||||
0, /* mPlayer_JOINT_LFOOT3 */
|
||||
0, /* mPlayer_JOINT_RFOOT_BASE */
|
||||
0, /* mPlayer_JOINT_RFOOT1 */
|
||||
0, /* mPlayer_JOINT_RFOOT2 */
|
||||
0, /* mPlayer_JOINT_RFOOT3 */
|
||||
0, /* mPlayer_JOINT_TAIL_BASE */
|
||||
0, /* mPlayer_JOINT_TAIL1 */
|
||||
0, /* mPlayer_JOINT_TAIL2 */
|
||||
0, /* mPlayer_JOINT_CHEST */
|
||||
0, /* mPlayer_JOINT_LARM_BASE */
|
||||
0, /* mPlayer_JOINT_LARM1 */
|
||||
0, /* mPlayer_JOINT_LARM2 */
|
||||
1, /* mPlayer_JOINT_RARM_BASE */
|
||||
1, /* mPlayer_JOINT_RARM1 */
|
||||
1, /* mPlayer_JOINT_RARM2 */
|
||||
1, /* mPlayer_JOINT_HAND */
|
||||
0, /* mPlayer_JOINT_HEAD_BASE */
|
||||
0, /* mPlayer_JOINT_MOUTH_BASE */
|
||||
0, /* mPlayer_JOINT_MOUTH */
|
||||
0, /* mPlayer_JOINT_HEAD */
|
||||
0, /* mPlayer_JOINT_FEEL */
|
||||
},
|
||||
/* Net */
|
||||
{
|
||||
0, /* Base translation */
|
||||
0, /* mPlayer_JOINT_ROOT */
|
||||
0, /* mPlayer_JOINT_BASE */
|
||||
0, /* mPlayer_JOINT_LFOOT_BASE */
|
||||
0, /* mPlayer_JOINT_LFOOT1 */
|
||||
0, /* mPlayer_JOINT_LFOOT2 */
|
||||
0, /* mPlayer_JOINT_LFOOT3 */
|
||||
0, /* mPlayer_JOINT_RFOOT_BASE */
|
||||
0, /* mPlayer_JOINT_RFOOT1 */
|
||||
0, /* mPlayer_JOINT_RFOOT2 */
|
||||
0, /* mPlayer_JOINT_RFOOT3 */
|
||||
0, /* mPlayer_JOINT_TAIL_BASE */
|
||||
0, /* mPlayer_JOINT_TAIL1 */
|
||||
0, /* mPlayer_JOINT_TAIL2 */
|
||||
0, /* mPlayer_JOINT_CHEST */
|
||||
0, /* mPlayer_JOINT_LARM_BASE */
|
||||
0, /* mPlayer_JOINT_LARM1 */
|
||||
0, /* mPlayer_JOINT_LARM2 */
|
||||
1, /* mPlayer_JOINT_RARM_BASE */
|
||||
1, /* mPlayer_JOINT_RARM1 */
|
||||
1, /* mPlayer_JOINT_RARM2 */
|
||||
1, /* mPlayer_JOINT_HAND */
|
||||
0, /* mPlayer_JOINT_HEAD_BASE */
|
||||
0, /* mPlayer_JOINT_MOUTH_BASE */
|
||||
0, /* mPlayer_JOINT_MOUTH */
|
||||
0, /* mPlayer_JOINT_HEAD */
|
||||
0, /* mPlayer_JOINT_FEEL */
|
||||
},
|
||||
/* Fan */
|
||||
{
|
||||
1, /* Base translation */
|
||||
1, /* mPlayer_JOINT_ROOT */
|
||||
1, /* mPlayer_JOINT_BASE */
|
||||
1, /* mPlayer_JOINT_LFOOT_BASE */
|
||||
1, /* mPlayer_JOINT_LFOOT1 */
|
||||
1, /* mPlayer_JOINT_LFOOT2 */
|
||||
1, /* mPlayer_JOINT_LFOOT3 */
|
||||
1, /* mPlayer_JOINT_RFOOT_BASE */
|
||||
1, /* mPlayer_JOINT_RFOOT1 */
|
||||
1, /* mPlayer_JOINT_RFOOT2 */
|
||||
1, /* mPlayer_JOINT_RFOOT3 */
|
||||
1, /* mPlayer_JOINT_TAIL_BASE */
|
||||
1, /* mPlayer_JOINT_TAIL1 */
|
||||
1, /* mPlayer_JOINT_TAIL2 */
|
||||
1, /* mPlayer_JOINT_CHEST */
|
||||
1, /* mPlayer_JOINT_LARM_BASE */
|
||||
1, /* mPlayer_JOINT_LARM1 */
|
||||
1, /* mPlayer_JOINT_LARM2 */
|
||||
0, /* mPlayer_JOINT_RARM_BASE */
|
||||
0, /* mPlayer_JOINT_RARM1 */
|
||||
0, /* mPlayer_JOINT_RARM2 */
|
||||
0, /* mPlayer_JOINT_HAND */
|
||||
0, /* mPlayer_JOINT_HEAD_BASE */
|
||||
1, /* mPlayer_JOINT_MOUTH_BASE */
|
||||
1, /* mPlayer_JOINT_MOUTH */
|
||||
1, /* mPlayer_JOINT_HEAD */
|
||||
1, /* mPlayer_JOINT_FEEL */
|
||||
},
|
||||
};
|
||||
// clang-format on
|
||||
Reference in New Issue
Block a user