match almost all fish functions

This commit is contained in:
roeming
2025-01-07 23:50:14 -05:00
parent db08f0ce13
commit 463faea2b8
9 changed files with 369 additions and 66 deletions
+3 -3
View File
@@ -262,7 +262,7 @@ BOOL mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int jo
void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4);
void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor);
void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_koi_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
void mfish_koi_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
@@ -393,7 +393,7 @@ BOOL mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint
void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_unagi_get_next_rail_type();
s16 mfish_unagi_get_next_rail_type();
void mfish_unagi_aim_wind_angle_calc();
void mfish_unagi_rail_move_init();
void mfish_unagi_rail_move();
@@ -404,7 +404,7 @@ void mfish_unagi_rail_move_reverse();
void mfish_unagi_reverse_to_normal_init();
void mfish_unagi_reverse_to_normal();
void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
BOOL mfish_unagi_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_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
+2 -2
View File
@@ -95,7 +95,7 @@ void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) {
mfish_afish_dummy_process_init(actor);
} else if (actor->_5E8 > 0.01f && actor->_62E & 0x1e) {
} else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) {
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f);
} else {
@@ -178,7 +178,7 @@ void mfish_afish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
add_calc0(&actor->_5EC, 0.5f, 0.01f);
actor->_5D0.x = actor->_5E8 * cos_s(actor->_60C.x) * sin_s(actor->_60C.y);
actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.x) * cos_s(actor->_60C.y);
add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.001f);
add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f);
add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y);
mfish_move_smooth(actor, gamex);
mfish_get_flow_vec(&p, actor, gamex);
+3 -3
View File
@@ -85,12 +85,12 @@ void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
DEG2SHORT_ANGLE(0.25f));
if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) {
if (fqrand() < 0.01f) {
if (fqrand() < 0.8f) {
mfish_aroana_long_move_process_init(actor);
} else {
mfish_aroana_dummy_process_init(actor);
}
} else if (actor->_5E8 > 0.01f && actor->_62E & 0x1e) {
} else if (actor->_5E8 > 1.f && actor->_62E & 0x1e) {
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f);
} else {
@@ -133,7 +133,7 @@ void mfish_aroana_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
actor->_5EC = 0.0f;
actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.2f;
actor->_34 = mfish_afish_turn_process;
actor->_34 = mfish_aroana_turn_process;
}
void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
+5 -2
View File
@@ -62,6 +62,7 @@ void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
}
void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
//! NOTE: wrong floats in this file, based on objdiff
f32 ra;
f32 t;
f32 temp;
@@ -132,6 +133,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
}
void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
//! NOTE: wrong floats in this file, based on objdiff
if (((actor->_62E & 0x200) != 0 && actor->_632 > DEG2SHORT_ANGLE(20)) || actor->_640 > 0) {
f32 v = (actor->_5AC.y * 0.03f + 0.02f);
add_calc2(&actor->_5EC,
@@ -281,6 +283,7 @@ void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
}
void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
//! NOTE: wrong floats in this file, based on objdiff
mfish_onefish_mv(actor, gamex);
if (actor->_5F8 > actor->init_data._08 * 20.0f) {
@@ -297,7 +300,7 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
mfish_bass_turn_process_init(actor);
} else {
mfish_bass_tail_anim_set(actor, 0);
mfish_bass_turn_process_init(actor);
mfish_bass_normal_process_init(actor);
}
} else if (actor->_34 == &mfish_bass_normal_process) {
if (((actor->_62E & 0x1e) && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) ||
@@ -359,7 +362,7 @@ void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0);
Matrix_RotateY(actor->_60C.y, 1);
Matrix_translate(0, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1);
Matrix_translate(0, 0.25f * actor->init_data._04, 1.5f * actor->init_data._24, 1);
Matrix_RotateX(actor->_60C.x, 1);
Matrix_RotateZ(MY_CLAMP(-(actor->_618.z >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1);
Matrix_translate(0, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1);
+5 -4
View File
@@ -22,9 +22,10 @@ void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
Museum_Fish_BGCheck(actor, gamex);
}
void mfish_kaseki_normal_init() {
// NOT BAD
return;
void mfish_kaseki_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E);
actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
actor->_34 = mfish_kaseki_normal;
}
void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
@@ -184,6 +185,6 @@ void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
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_aroana_before_disp, NULL, actor);
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_kaseki_before_disp, NULL, actor);
CLOSE_DISP(gamex->graph);
}
+20 -17
View File
@@ -18,7 +18,7 @@ void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) {
}
}
void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor) {
void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
s16 vv;
s16 v = 0;
s16* o;
@@ -157,11 +157,12 @@ void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
actor->_62E &= ~0xC0;
actor->_5EC = 0.0f;
actor->_34 = mfish_aroana_normal_process;
actor->_34 = mfish_koi_normal_process;
}
void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
s16 temp;
//! NOTE: wrong float somewhere in this file, just based on objdiffs colors changing
if (ABS(actor->_632) > DEG2SHORT_ANGLE(20) || actor->_640 > 0) {
add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.002f + 0.03f, 0.25f,
0.02f);
@@ -178,9 +179,9 @@ void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) {
if (fqrand() < 0.01f) {
mfish_aroana_long_move_process_init(actor);
mfish_koi_long_move_process_init(actor);
} else {
mfish_aroana_dummy_process_init(actor);
mfish_koi_dummy_process_init(actor);
}
} else if (actor->_5E8 > 0.01f && actor->_62E & 0x1e) {
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
@@ -245,16 +246,16 @@ void mfish_koi_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
if (actor->_63E > 0 && ABS(actor->_618.z) < DEG2SHORT_ANGLE(2)) {
if (mfish_WallCheck(actor)) {
mfish_koi_tail_anim_set(actor, 1);
mfish_aroana_turn_process_init(actor);
mfish_koi_turn_process_init(actor);
} else {
mfish_aroana_normal_process_init(actor);
mfish_koi_normal_process_init(actor);
}
actor->_63E--;
} else {
if (RANDOM_F(1.0f) < 0.8f) {
mfish_aroana_long_move_process_init(actor);
mfish_koi_long_move_process_init(actor);
} else {
mfish_aroana_dummy_process_init(actor);
mfish_koi_dummy_process_init(actor);
}
}
}
@@ -352,8 +353,9 @@ void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
}
void mfish_koi_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
// NOT BAD
return;
actor->_5F0 = MAX(MIN(actor->_5E8, 0.5f), 0.05f);
actor->_5EC = 0.0f;
actor->_34 = mfish_koi_long_move_process;
}
void mfish_koi_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
@@ -368,7 +370,7 @@ void mfish_koi_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
xyz_t p;
if ((actor->_34 != mfish_aroana_turn_process && actor->_34 != mfish_aroana_long_move_process) ||
if ((actor->_34 != mfish_koi_turn_process && actor->_34 != mfish_koi_long_move_process) ||
actor->_640 > DEG2SHORT_ANGLE(0)) {
add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, GETREG(TAKREG, 0x13) * 0.001f + 0.01f);
} else {
@@ -380,7 +382,7 @@ void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y) * cos_s(actor->_60C.x);
add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f);
add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y);
mfish_move_smooth(actor, game);
mfish_koi_move_smooth(actor, game);
mfish_get_flow_vec(&p, actor, game);
actor->_5A0.x += actor->_5D0.x + actor->_5DC.x;
actor->_5A0.z += actor->_5D0.z + actor->_5DC.z;
@@ -389,6 +391,7 @@ void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
}
void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
//! NOTE: wrong floats in this file, based on objdiff
if (actor->_5F8 > actor->init_data._08 * 20.f) {
actor->_5F8 = 0.0f;
actor->_626 = 0;
@@ -407,9 +410,9 @@ void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
mfish_koi_turn_process_init(actor);
} else {
mfish_koi_tail_anim_set(actor, 0);
mfish_aroana_normal_process_init(actor);
mfish_koi_normal_process_init(actor);
}
} else if (actor->_34 == mfish_aroana_normal_process) {
} else if (actor->_34 == mfish_koi_normal_process) {
if ((actor->_62E & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) ||
(actor->_62E & 0x20 &&
ABS((s16)(DEG2SHORT_ANGLE(180) + actor->_62A - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) {
@@ -429,7 +432,7 @@ void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.1f), DEG2SHORT_ANGLE(1.5f),
DEG2SHORT_ANGLE(0.05f));
add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.05f));
mfish_aroana_base_FishMove(actor, gamex);
mfish_koi_base_FishMove(actor, gamex);
}
void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
@@ -503,11 +506,11 @@ void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0);
Matrix_RotateY(actor->_60C.y, 1);
Matrix_translate(0.0f, actor->init_data._04 * 0.25f, actor->init_data._24 * 1.5f, 1);
Matrix_RotateY(actor->_60C.x, 1);
Matrix_RotateX(actor->_60C.x, 1);
Matrix_RotateZ(MY_CLAMP(-(actor->_618.z >> 2), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1);
Matrix_translate(0.0f, -actor->init_data._04 * 0.25f, -actor->init_data._24 * 0.5f, 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_aroana_before_disp, NULL, actor);
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_koi_before_disp, NULL, actor);
CLOSE_DISP(gamex->graph);
}
+7 -3
View File
@@ -22,9 +22,12 @@ void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
mfish_seafish_normal_init(actor, game);
}
void mfish_seafish_normal_init() {
// NOT BAD
return;
void mfish_seafish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E);
actor->_628 = actor->_626;
actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
actor->_5EC = Rnd_EX_f(0.15f) + 0.15f;
actor->_34 = mfish_seafish_normal;
}
void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
@@ -175,6 +178,7 @@ void mfish_seafish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
}
void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
//! NOTE: wrong floats in this file, based on objdiff
xyz_t p;
actor->_34(actor, gamex);
actor->_618.x += DEG2SHORT_ANGLE(actor->_5E8 * RANDOM_F(3.0f));
+1 -1
View File
@@ -270,6 +270,6 @@ void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
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_zarigani_before_disp, NULL, actor);
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_tai_before_disp, NULL, actor);
CLOSE_DISP(gamex->graph);
}
+323 -31
View File
@@ -1,64 +1,356 @@
void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
GAME_PLAY* game = (GAME_PLAY*)gamex;
return;
mfish_onefish_ct(actor, gamex);
actor->_624 = 8;
actor->_5A0.x = 225.0f;
actor->_5A0.y = 55.0f;
actor->_5A0.z = 185.0f;
actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E);
actor->_640 = 0;
actor->_642 = 1;
actor->_5AC = ZeroVec;
actor->_612.x = DEG2SHORT_ANGLE2(25.0f + GETREG(TAKREG, 0x46));
actor->_612.z = DEG2SHORT_ANGLE(-3);
actor->_646 = 0;
actor->_5AC.y = 0.1f;
actor->_5E8 = 0.05f;
actor->_60C.y = DEG2SHORT_ANGLE(50);
mfish_unagi_rail_move_init(actor, gamex);
}
void mfish_unagi_get_next_rail_type() {
// NOT BAD
return;
s16 mfish_unagi_get_next_rail_type(MUSEUM_FISH_PRIVATE_DATA* actor) {
s16 s = actor->_646;
s16 s2 = (s16)RANDOM_F(3.0f);
if (s2 == s) {
if (s2 < 2) {
s2++;
} else {
s2 = 0;
}
}
return s2;
}
void mfish_unagi_aim_wind_angle_calc() {
return;
void mfish_unagi_aim_wind_angle_calc(MUSEUM_FISH_PRIVATE_DATA* actor) {
s16 s;
if (actor->_34 == mfish_unagi_normal_to_reverse) {
s = 12;
} else if (actor->_34 == mfish_unagi_reverse_to_normal) {
s = 19;
} else {
s = unagi_rail_num_tbl[actor->_646];
}
if (actor->_640 > s - 5 || actor->_640 < 3) {
add_calc_short_angle2(&actor->_612.x, (s16)DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x32) + 25.0f), CALC_EASE(0.1f),
DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0));
} else {
add_calc_short_angle2(&actor->_612.x, (s16)DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x33) + 30.0f), CALC_EASE(0.05f),
DEG2SHORT_ANGLE(0.25f), DEG2SHORT_ANGLE(0));
}
add_calc_short_angle2(&actor->_612.z, (s16)DEG2SHORT_ANGLE2(-(GETREG(TAKREG, 0x34) * 0.1f + 3.0f)),
CALC_EASE(0.05f), DEG2SHORT_ANGLE(0.025f), DEG2SHORT_ANGLE(0));
}
void mfish_unagi_rail_move_init() {
return;
void mfish_unagi_rail_move_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
s16 target = search_position_angleY(&actor->_5A0, &unagi_rail_tbl[actor->_646][actor->_642]);
actor->_640 = 0;
actor->_642 = 1;
add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(GETREG(TAKREG, 0x24) * 0.01f + 0.5f),
DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f));
actor->_34 = mfish_unagi_rail_move;
}
void mfish_unagi_rail_move() {
return;
void mfish_unagi_rail_move(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
xyz_t* pp = unagi_rail_tbl[actor->_646];
f32 v = cos_s(actor->_618.z);
f32 v2 = actor->_5E8;
f32 v3;
s16 s;
if (v < 0.0f) {
v = 0.0f;
}
v3 = search_position_distance(&actor->_5A0, &pp[actor->_642]);
if ((f32)(__fabs(chase_xyz_t(&actor->_5A0, &pp[actor->_642], v2))) < 0.008f) {
if (actor->_640 < unagi_rail_num_tbl[actor->_646] - 1) {
actor->_640++;
} else {
actor->_640 = 0;
if (RANDOM_F(1.0f) > 0.5f) {
mfish_unagi_normal_to_reverse_init(actor, gamex);
return;
}
actor->_646 = mfish_unagi_get_next_rail_type(actor);
}
if (actor->_642 < unagi_rail_num_tbl[actor->_646] - 1) {
actor->_642++;
} else {
actor->_642 = 0;
}
v2 -= v3;
if (v2 > 0.0f) {
chase_xyz_t(&actor->_5A0, &pp[actor->_642], v2);
}
}
mfish_unagi_aim_wind_angle_calc(actor);
s = search_position_angleY(&actor->_5A0, &pp[actor->_642]);
add_calc_short_angle2(&actor->_612.y, s, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
add_calc_short_angle2(&actor->_632, actor->_612.x * v, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0));
add_calc_short_angle2(&actor->_644, actor->_612.z * v, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0));
}
void mfish_unagi_normal_to_reverse_init() {
return;
void mfish_unagi_normal_to_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
s16 target = search_position_angleY(&actor->_5A0, &unagi_normal_to_reverse_rail_pos[actor->_642]);
actor->_640 = 0;
actor->_642 = 1;
add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(GETREG(TAKREG, 0x24) * 0.01f + 0.5f),
DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, 0x2d);
actor->_34 = mfish_unagi_normal_to_reverse;
}
void mfish_unagi_normal_to_reverse() {
return;
void mfish_unagi_normal_to_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
f32 v1;
s16 s2;
xyz_t* p = unagi_normal_to_reverse_rail_pos;
f32 c = cos_s(actor->_618.z);
f32 v0 = actor->_5E8;
if (c < 0.0f) {
c = 0.0f;
}
v1 = search_position_distance(&actor->_5A0, &p[actor->_642]);
if ((f32)__fabs(chase_xyz_t(&actor->_5A0, &p[actor->_642], v0)) < 0.008f) {
if (actor->_640 < 11) {
actor->_640++;
} else {
actor->_640 = 0;
actor->_646 = mfish_unagi_get_next_rail_type(actor);
mfish_unagi_rail_move_reverse_init(actor, gamex);
return;
}
if (actor->_642 < 11) {
actor->_642++;
} else {
actor->_642 = 0;
}
v0 -= v1;
if (v0 > 0.0f) {
chase_xyz_t(&actor->_5A0, &p[actor->_642], v0);
}
}
mfish_unagi_aim_wind_angle_calc(actor);
s2 = search_position_angleY(&actor->_5A0, &p[actor->_642]);
add_calc_short_angle2(&actor->_612.y, s2, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
add_calc_short_angle2(&actor->_632, actor->_612.x * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0));
add_calc_short_angle2(&actor->_644, actor->_612.z * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0));
}
void mfish_unagi_rail_move_reverse_init() {
return;
void mfish_unagi_rail_move_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
xyz_t* p = unagi_rail_tbl[actor->_646];
s16 target;
actor->_640 = 0;
actor->_642 = unagi_rail_num_tbl[actor->_646] - 1;
target = search_position_angleY(&actor->_5A0, &p[actor->_642]);
add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(0.5f + 0.01f * GETREG(TAKREG, 0x24)),
DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f));
actor->_34 = mfish_unagi_rail_move_reverse;
}
void mfish_unagi_rail_move_reverse() {
return;
void mfish_unagi_rail_move_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
f32 v1;
s16 s2;
xyz_t* p = unagi_rail_tbl[actor->_646];
f32 c = cos_s(actor->_618.z);
f32 v0 = actor->_5E8;
if (c < 0.0f) {
c = 0.0f;
}
v1 = search_position_distance(&actor->_5A0, &p[actor->_642]);
if ((f32)__fabs(chase_xyz_t(&actor->_5A0, &p[actor->_642], v0)) < 0.008f) {
if (actor->_640 > 1) {
actor->_640--;
} else if (actor->_640 == 1) {
actor->_640 = 0;
if (RANDOM_F(1.0f) > 0.5f) {
mfish_unagi_reverse_to_normal_init(actor, gamex);
return;
}
actor->_646 = mfish_unagi_get_next_rail_type(actor);
} else {
actor->_640 = unagi_rail_num_tbl[actor->_646] + -1;
}
if (actor->_642 > 0) {
actor->_642--;
} else {
actor->_642 = unagi_rail_num_tbl[actor->_646] + -1;
}
v0 -= v1;
if (v0 > 0.0f) {
chase_xyz_t(&actor->_5A0, &p[actor->_642], v0);
}
}
mfish_unagi_aim_wind_angle_calc(actor);
s2 = search_position_angleY(&actor->_5A0, &p[actor->_642]);
add_calc_short_angle2(&actor->_612.y, s2, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
add_calc_short_angle2(&actor->_632, actor->_612.x * c, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0));
add_calc_short_angle2(&actor->_644, actor->_612.z * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0));
}
void mfish_unagi_reverse_to_normal_init() {
return;
void mfish_unagi_reverse_to_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
s16 target;
actor->_640 = 0;
actor->_642 = 0x12;
target = search_position_angleY(&actor->_5A0, &unagi_reverse_to_normal_rail_pos[actor->_642]);
add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(0.5f + 0.01f * GETREG(TAKREG, 0x24)),
DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f));
actor->_34 = mfish_unagi_rail_move_reverse;
}
void mfish_unagi_reverse_to_normal() {
return;
void mfish_unagi_reverse_to_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
f32 v1;
s16 s2;
xyz_t* p = unagi_reverse_to_normal_rail_pos;
f32 c = cos_s(actor->_618.z);
f32 v0 = actor->_5E8;
if (c < 0.0f) {
c = 0.0f;
}
v1 = search_position_distance(&actor->_5A0, &p[actor->_642]);
if ((f32)__fabs(chase_xyz_t(&actor->_5A0, &p[actor->_642], v0)) < 0.008f) {
if (actor->_640 > 1) {
actor->_640--;
} else if (actor->_640 == 1) {
actor->_640 = 0;
actor->_646 = mfish_unagi_get_next_rail_type(actor);
mfish_unagi_rail_move_init(actor, gamex);
return;
} else {
actor->_640 = 0x12;
}
if (actor->_642 > 0) {
actor->_642--;
} else {
actor->_642 = 0x12;
}
v0 -= v1;
if (v0 > 0.0f) {
chase_xyz_t(&actor->_5A0, &p[actor->_642], v0);
}
}
mfish_unagi_aim_wind_angle_calc(actor);
s2 = search_position_angleY(&actor->_5A0, &p[actor->_642]);
add_calc_short_angle2(&actor->_612.y, s2, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
add_calc_short_angle2(&actor->_632, actor->_612.x * c, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0));
add_calc_short_angle2(&actor->_644, actor->_612.z * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0));
}
void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
xyz_t p1, p2, p3;
p1 = ZeroVec;
p2 = ZeroVec;
mfish_onefish_mv(actor, gamex);
if (actor->_626-- < 0) {
f32 v;
actor->_5F0 = Rnd_EX_f(actor->init_data._14) + actor->init_data._10;
actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E);
actor->_628 = actor->_626;
v = (actor->_5F0 / (actor->init_data._14 + actor->init_data._10));
actor->_612.x = DEG2SHORT_ANGLE((GETREG(TAKREG, 0x35) + 75.0f) * v);
actor->_612.z = DEG2SHORT_ANGLE(-(GETREG(TAKREG, 0x36) * 0.1f + 9.0f) * v);
actor->_5AC.y = (GETREG(TAKREG, 0x11) * 0.01f + 0.05f) + RANDOM_F(GETREG(TAKREG, 0x12) * 0.01f + 0.1f);
}
GAME_PLAY* game = (GAME_PLAY*)gamex;
return;
if (actor->_626 > actor->_628 - 40) {
actor->_5EC = cos_s(actor->_622) * 0.1f;
add_calc2(&actor->_5E8, actor->_5F0, 0.15f, actor->_5EC);
} else {
if (ABS(actor->_618.z) > ABS(actor->_622)) {
actor->_5EC = cos_s(actor->_622) * 0.05f;
add_calc2(&actor->_5E8, actor->_5AC.y * MAX(0.0f, cos_s(actor->_622)), 0.025f, actor->_5EC);
}
}
add_calc0(&actor->_5AC.x, 0.25f, 0.5f);
add_calc0(&actor->_5AC.z, 0.25f, 0.5f);
p1.x = sin_s(actor->_612.y) * actor->_5E8;
p1.z = cos_s(actor->_612.y) * actor->_5E8;
p2.x = sin_s(actor->_60C.y) * actor->_5E8;
p2.z = cos_s(actor->_60C.y) * actor->_5E8;
xyz_t_sub(&p2, &p1, &p3);
actor->_5AC.x += p3.x;
actor->_5AC.z += p3.z;
actor->_636 += actor->_644;
actor->_622 =
add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(GETREG(TAKREG, 0x26) * 0.01f + 0.2f),
(s16)(DEG2SHORT_ANGLE((GETREG(TAKREG, 0x27) + 10.0f) +
(GETREG(TAKREG, 0x28) + 50.0f) * MAX(actor->_5E8, 0.01f)) >>
1) >>
1,
DEG2SHORT_ANGLE(0.25f));
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f),
DEG2SHORT_ANGLE(0.125f));
add_calc_short_angle2(&actor->_38._538.x, actor->_618.z, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f),
DEG2SHORT_ANGLE(0.125f));
add_calc_short_angle2(&actor->_38._538.y, actor->_38._538.x, CALC_EASE2(0.15f), DEG2SHORT_ANGLE(1.25f),
DEG2SHORT_ANGLE(0.125f));
actor->_34(actor, gamex);
add_calc2(&actor->_5F4, actor->_632 * (GETREG(TAKREG, 0x47) * 0.001f + 0.04f), 0.25f, 91.0f);
Museum_Fish_objchk_pos_set(actor, gamex);
}
void mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
BOOL mfish_unagi_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 i = (s16)(actor->_632 * 0.5f * sin_s(actor->_636));
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
trans->z += actor->_5F4 * sin_s(actor->_636 + DEG2SHORT_ANGLE(90));
} else if (joint_num == 2) {
int i;
i = (int)((1.0f + 0.01f * GETREG(TAKREG, 0x38)) * actor->_618.z);
i -= DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3c));
i += (s16)(actor->_632 * 0.75f * sin_s(actor->_636 + DEG2SHORT_ANGLE(90)));
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
} else if (joint_num == 3) {
int i;
i = (int)((1.1f + 0.01f * GETREG(TAKREG, 0x39)) * actor->_38._538.x);
i -= DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3d));
i += (s16)(actor->_632 * sin_s(actor->_636 + DEG2SHORT_ANGLE(180)));
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
} else if (joint_num == 4) {
int i;
i = (int)((1.2f + 0.01f * GETREG(TAKREG, 0x3a)) * actor->_38._538.y);
i -= DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3e));
i += (s16)(actor->_632 * 0.75f * sin_s(actor->_636 + DEG2SHORT_ANGLE(270)));
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
} else if (joint_num == 5) {
int i;
i = (int)((1.3f + 0.01f * GETREG(TAKREG, 0x3b)) * actor->_38._538.z);
i -= DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3f));
i += (s16)(actor->_632 * 0.5f * sin_s(actor->_636));
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
}
return TRUE;
}
void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
// NOT BAD
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->_5AC.x, actor->_5A0.y, actor->_5A0.z + actor->_5AC.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_zarigani_before_disp, NULL, actor);
CLOSE_DISP(gamex->graph);
}