match seafish

This commit is contained in:
roeming
2024-12-15 13:29:00 -05:00
parent 86ec057ed1
commit 8c72d85c72
3 changed files with 231 additions and 23 deletions
+6 -5
View File
@@ -96,7 +96,7 @@ typedef struct _FISH_PRIVATE_DATA {
f32 _608;
s_xyz _60C;
s_xyz _612;
artificial_padding(0x612, 0x61A, s_xyz);
s16 _618;
s16 _61A;
s16 _61C;
s16 _61E;
@@ -292,13 +292,14 @@ void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_seafish_normal_init();
void mfish_seafish_normal();
void mfish_seafish_turn_init();
void mfish_seafish_turn();
void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_seafish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_seafish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
BOOL mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
void* arg, s_xyz* joint1, xyz_t* trans);
void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_tai_normal_init();
void mfish_tai_normal();
+1 -1
View File
@@ -467,7 +467,7 @@ void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
BOOL mfish_koi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
void* arg, s_xyz* joint1, xyz_t* trans) {
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)actor;
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
if (joint_num == 0) {
trans->x *= actor->_5AC.z;
trans->y *= actor->_5AC.z;
+224 -17
View File
@@ -1,7 +1,25 @@
void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
GAME_PLAY* game = (GAME_PLAY*)gamex;
return;
void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
s16 s = qrand();
mfish_onefish_ct(actor, game);
actor->_5E8 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
actor->_5F0 = actor->_5E8;
actor->_60C.y = s;
actor->_612.y = actor->_60C.y;
actor->_5F4 = 0.0f;
actor->_5D4 = 0.0f;
actor->_5AC = ZeroVec;
actor->_638 = qrand();
actor->_622 = 0;
actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E);
actor->_628 = actor->_626;
actor->_624 = 2;
actor->_594 = NULL;
actor->_598 = NULL;
actor->_5EC = 0.08f;
actor->_5AC.x = 15.0f;
actor->_5AC.z = 15.0f;
mfish_seafish_normal_init(actor, game);
}
void mfish_seafish_normal_init() {
@@ -9,31 +27,220 @@ void mfish_seafish_normal_init() {
return;
}
void mfish_seafish_normal() {
return;
void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
f32 a = MAX(actor->_5E8 / (actor->init_data._14 + actor->init_data._10), 0.4f) * 5461.0f;
s16 s = (s16)MY_MAX((s16)(int)a, DEG2SHORT_ANGLE(20));
f32 o_5a0_z;
f32 o_5a0_y;
f32 sum_i_8;
f32 abs_diff_sum;
f32 t;
f32 r;
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), (s16)(s >> 1) >> 1,
(s16)DEG2SHORT_ANGLE(0.25f));
add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
if (actor->_598 != NULL) {
o_5a0_z = actor->_598->_5A0.z;
o_5a0_y = actor->_598->_5A0.y;
sum_i_8 = (actor->_598->init_data._08 + actor->init_data._08);
abs_diff_sum = MAX(sum_i_8 - ABS(actor->_598->_5A0.z - actor->_5A0.z), 0.f);
abs_diff_sum /= sum_i_8;
if (actor->_598->_59C != 0x23) {
f32 this_5a0_y = actor->_5A0.y;
if (o_5a0_y < actor->_5A0.y) {
t = o_5a0_y + (actor->_598->init_data._04 + actor->init_data._04);
if (this_5a0_y < t) {
add_calc2(&actor->_5A0.y, t + 2.0f, 0.2f, abs_diff_sum * 0.1f);
}
} else {
t = o_5a0_y - (actor->_598->init_data._04 + actor->init_data._04);
if (this_5a0_y > t) {
add_calc2(&actor->_5A0.y, t - 2.0f, 0.2f, abs_diff_sum * 0.1f);
}
}
}
if (actor->_598->_5A0.z < actor->_5A0.z) {
// swap here
o_5a0_z += sum_i_8;
add_calc2(&actor->_5A0.z, o_5a0_z, 0.1f, abs_diff_sum * 0.1f);
} else {
// swap here
o_5a0_z -= sum_i_8;
add_calc2(&actor->_5A0.z, o_5a0_z, 0.1f, abs_diff_sum * 0.1f);
}
}
if (actor->_5FC < actor->_5AC.x - 0.5f * actor->init_data._28) {
if (actor->_612.y < 0) {
s16 ss;
if (actor->_604 > actor->_608) {
ss = actor->_60C.y - DEG2SHORT_ANGLE(90);
} else {
ss = actor->_60C.y + DEG2SHORT_ANGLE(90);
}
actor->_612.y = ss;
actor->_5AC.z = RANDOM_F(60.0f) + 15.0f;
} else {
add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(90), CALC_EASE(0.5f), DEG2SHORT_ANGLE(7.5f),
DEG2SHORT_ANGLE(0.5f));
}
} else if (actor->_600 < actor->_5AC.z - 0.5f * actor->init_data._28) {
if (actor->_612.y > 0) {
s16 ss;
if (actor->_604 > actor->_608) {
ss = (s16)actor->_60C.y + DEG2SHORT_ANGLE(90);
} else {
ss = (s16)actor->_60C.y - DEG2SHORT_ANGLE(90);
}
actor->_612.y = ss;
actor->_5AC.x = RANDOM_F(60.0f) + 15.0f;
} else {
add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(-90), CALC_EASE(0.5f), DEG2SHORT_ANGLE(7.5f),
DEG2SHORT_ANGLE(0.5f));
}
} else if (actor->_62E & 0x100) {
actor->_5A0.z += 0.05f;
if (ABS((s16)(actor->_612.y - DEG2SHORT_ANGLE(180))) < DEG2SHORT_ANGLE(110)) {
if (actor->_612.y > 0) {
actor->_612.y -= DEG2SHORT_ANGLE(1.5f);
} else {
actor->_612.y += DEG2SHORT_ANGLE(1.5f);
}
}
} else if (actor->_62E & 0x1e) {
mfish_seafish_turn_init(actor, gamex);
} else if (actor->_62E & 0x20 && actor->_5F8 > actor->init_data._08 * 0.5f) {
if (actor->init_data._20 > actor->_594->init_data._20) {
s16 escAngle = mfish_get_escape_angle(actor, gamex);
add_calc_short_angle2(&actor->_612.y, escAngle, CALC_EASE(0.25f), DEG2SHORT_ANGLE(2.5f),
DEG2SHORT_ANGLE(0));
}
} else if (actor->_626 < 0) {
// r in wrong register here
r = fqrand();
actor->_612.y = actor->_60C.y;
if ((actor->_608 - actor->_604) * cos_s(actor->_60C.y) < 0.0f) {
actor->_612.y += (s16)(r * actor->init_data._30);
} else {
actor->_612.y -= (s16)(r * actor->init_data._30);
}
actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E);
actor->_628 = actor->_626;
actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14);
}
}
void mfish_seafish_turn_init() {
return;
void mfish_seafish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
s16 s = (s16)actor->_62C;
if (ABS(actor->_622) > DEG2SHORT_ANGLE(45)) {
return;
}
if (ABS(actor->_612.y - actor->_62C) > DEG2SHORT_ANGLE(90)) {
return;
}
if ((s16)(actor->_60C.y - s) > 0) {
if (actor->_62E & 6) {
s = s + DEG2SHORT_ANGLE(170);
} else {
s = s + DEG2SHORT_ANGLE(95);
}
} else {
if (actor->_62E & 6) {
s = s - DEG2SHORT_ANGLE(170);
} else {
s = s - DEG2SHORT_ANGLE(95);
}
}
if (ABS((s16)(s - actor->_612.y)) > DEG2SHORT_ANGLE(45)) {
actor->_34 = mfish_seafish_turn;
}
actor->_612.y = s;
}
void mfish_seafish_turn() {
return;
void mfish_seafish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.25f),
DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.125f));
add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f));
if (ABS(actor->_622) < DEG2SHORT_ANGLE(3)) {
mfish_seafish_normal_init(actor, game);
}
}
void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
GAME_PLAY* game = (GAME_PLAY*)gamex;
return;
xyz_t p;
actor->_34(actor, gamex);
actor->_618 += DEG2SHORT_ANGLE(actor->_5E8 * RANDOM_F(3.0f));
actor->_5F4 = sin_s(actor->_618) * 5.0f;
if (actor->_62E & 0x20) {
add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.02f, 0.05f);
} else {
add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, 0.1f);
}
add_calc0(&actor->_5F8, 0.2f, 0.05f);
actor->_5F8 = MIN(1.0f, actor->_5F8);
if (ABS(actor->_61C) > DEG2SHORT_ANGLE(15) && ABS(actor->_622) - ABS(actor->_61C) < 0) {
add_calc2(&actor->_5E8, MAX(actor->_5F0, 0.8f), 0.5f, 0.25f);
} else if (actor->_626 < actor->_628 - 80) {
add_calc2(&actor->_5E8, actor->_5EC, 1.0f - actor->init_data._18, 0.0025f);
} else if (actor->_5E8 > actor->_5F0) {
add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.02f);
} else {
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.01f);
}
actor->_38._00.frame_control.speed =
(GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * 0.5f + (GETREG(TAKREG, 0x15) * 0.01f + 1.2f) * actor->_5E8;
actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.y);
actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.y);
mfish_get_flow_vec(&p, actor, gamex);
actor->_5A0.x += actor->_5D0 + p.x;
actor->_5A0.z += actor->_5D8 + p.z;
mfish_onefish_mv(actor, gamex);
mfish_body_wind_anime_play(actor, gamex);
Museum_Fish_BGCheck(actor, gamex);
if (actor->_5A0.y < GETREG(TAKREG, 0x47) + 55.0f - actor->init_data._04) {
actor->_5A0.y = GETREG(TAKREG, 0x47) + 55.0f - actor->init_data._04;
}
actor->_626--;
}
void mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
BOOL mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
void* arg, s_xyz* joint1, xyz_t* trans) {
return;
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
if (joint_num == 1) {
int s = joint1->x + (int)(actor->_61C * (GETREG(TAKREG, 0x37) * 0.01f + 0.5f));
joint1->x = MIN(MAX(s, DEG2SHORT_ANGLE(-15)), DEG2SHORT_ANGLE(15));
Matrix_scale(1.0f, (GETREG(TAKREG, 0x36) * 0.001f + 0.035f) * sin_s(actor->_63A + actor->_63C) + 1.0f,
(GETREG(TAKREG, 0x36) * 0.001f + 0.035f) * sin_s(actor->_63A) + 1.0f, 1);
} else if (joint_num == 2) {
int v = joint1->y - (actor->_61C << 1);
joint1->y = MIN(MAX(v, DEG2SHORT_ANGLE(-80)), DEG2SHORT_ANGLE(80));
Matrix_scale(1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) * 0.07f + 1.0f,
sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) * 0.07f + 1.0f, 1);
}
return TRUE;
}
void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
GAME_PLAY* game = (GAME_PLAY*)gamex;
return;
YET_SKELETON* skele = &actor->_38;
Mtx* mtxp;
if (gamex->frame_counter & 1) {
mtxp = &skele->_70;
} else {
mtxp = &skele->_2b0;
}
OPEN_DISP(gamex->graph);
Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0);
Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1);
Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1);
Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1);
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_seafish_before_disp, NULL, actor);
CLOSE_DISP(gamex->graph);
}