diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 25250ac1..85d67549 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -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); diff --git a/src/actor/ac_museum_fish_afish.c_inc b/src/actor/ac_museum_fish_afish.c_inc index bccb3dad..e8240b0f 100644 --- a/src/actor/ac_museum_fish_afish.c_inc +++ b/src/actor/ac_museum_fish_afish.c_inc @@ -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); diff --git a/src/actor/ac_museum_fish_aroana.c_inc b/src/actor/ac_museum_fish_aroana.c_inc index 9e7a0de0..3098fa90 100644 --- a/src/actor/ac_museum_fish_aroana.c_inc +++ b/src/actor/ac_museum_fish_aroana.c_inc @@ -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) { diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc index 1a2ef329..407e14b4 100644 --- a/src/actor/ac_museum_fish_bass.c_inc +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -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); diff --git a/src/actor/ac_museum_fish_kaseki.c_inc b/src/actor/ac_museum_fish_kaseki.c_inc index 87198941..3d2184c3 100644 --- a/src/actor/ac_museum_fish_kaseki.c_inc +++ b/src/actor/ac_museum_fish_kaseki.c_inc @@ -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); } diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index 6eabc9c9..fb19fde2 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -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); } diff --git a/src/actor/ac_museum_fish_seafish.c_inc b/src/actor/ac_museum_fish_seafish.c_inc index 8e81d40c..9252973b 100644 --- a/src/actor/ac_museum_fish_seafish.c_inc +++ b/src/actor/ac_museum_fish_seafish.c_inc @@ -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)); diff --git a/src/actor/ac_museum_fish_tai.c_inc b/src/actor/ac_museum_fish_tai.c_inc index 246f7870..e5a8206d 100644 --- a/src/actor/ac_museum_fish_tai.c_inc +++ b/src/actor/ac_museum_fish_tai.c_inc @@ -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); } diff --git a/src/actor/ac_museum_fish_unagi.c_inc b/src/actor/ac_museum_fish_unagi.c_inc index 14ff9f68..82d6e876 100644 --- a/src/actor/ac_museum_fish_unagi.c_inc +++ b/src/actor/ac_museum_fish_unagi.c_inc @@ -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); }