match sfish

This commit is contained in:
roeming
2024-12-27 22:11:49 -05:00
parent 0567b62237
commit e69cf9f847
5 changed files with 183 additions and 23 deletions
+1 -1
View File
@@ -327,7 +327,7 @@ void mfish_sfish_normal();
void mfish_sfish_turn_init();
void mfish_sfish_turn();
void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
BOOL mfish_sfish_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_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
+1 -1
View File
@@ -170,7 +170,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
s16 a;
s16 b;
b = a = DEG2SHORT_ANGLE(90) + DEG2SHORT_ANGLE(RANDOM_F(75));
b = a = DEG2SHORT_ANGLE(45) + DEG2SHORT_ANGLE(RANDOM_F(75));
actor->_618.y =
DEG2SHORT_ANGLE((actor->_5AC.y * 4.0f + 4.0f) * (SHORT2DEG_ANGLE2(a) / 120.0f) + 2.0f + actor->_5AC.y);
if (actor->_62E & 0x1e) {
+1 -1
View File
@@ -29,7 +29,7 @@ void mfish_kaseki_normal_init() {
void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
s16 s = ABS(actor->_622) * (actor->init_data._30 * (GETREG(TAKREG, 0x1d) * 0.001f + 0.5f) / 32749.0f);
s = MIN(actor->_634, MAX(s, DEG2SHORT_ANGLE(5)));
s = MIN(actor->_634, MAX(s, DEG2SHORT_ANGLE2(5)));
add_calc_short_angle2(&actor->_632, 0, CALC_EASE(0.5), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f));
actor->_636 += 455;
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
+179 -19
View File
@@ -1,40 +1,200 @@
void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
GAME_PLAY* game = (GAME_PLAY*)gamex;
return;
s16 s = qrand();
mfish_onefish_ct(actor, gamex);
actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
actor->_5F0 = actor->_5E8;
actor->_60C.y = s;
actor->_612.y = actor->_60C.y;
actor->_60C.x = DEG2SHORT_ANGLE(RANDOM_F(actor->init_data._30 * 2.0f));
actor->_612.x = actor->_60C.x;
actor->_5F4 = 110.0f;
actor->_5D0.y = 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->_624 = 6;
mfish_sfish_normal_init(actor, gamex);
}
void mfish_sfish_normal_init() {
// NOT BAD
return;
void mfish_sfish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
if (actor->_630 == 2) {
if (actor->_626 < 0) {
actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14);
}
} else {
actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
}
actor->_34 = mfish_sfish_normal;
}
void mfish_sfish_normal() {
return;
void mfish_sfish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 35.0f);
actor->_636 += DEG2SHORT_ANGLE(7.5f);
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f),
DEG2SHORT_ANGLE(0.25f));
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f));
if (actor->_62E & 0x1e) {
mfish_sfish_turn_init(actor, gamex);
} else if (actor->_62E & 0x20) {
add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f),
DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f));
} else if (actor->_626 < 0) {
f32 v = RANDOM_F(1.0f);
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);
if (actor->_630 == 2 && actor->_5F0 < actor->init_data._10 + actor->init_data._14 * 0.5f) {
actor->_612.y = atans_table(-actor->_5DC.z, -actor->_5DC.x);
actor->_626 *= 5;
}
if (RANDOM_F(1.0f) < 0.5f) {
actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f);
} else {
actor->_612.y -= DEG2SHORT_ANGLE((v - 0.3f) * 90.f);
}
if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(50)) {
actor->_612.x = RANDOM2_F(actor->init_data._30 * 2.0f * (v - 0.3f));
}
} else if (actor->_5F8 > actor->init_data._08 * 30.f) {
s16 s;
//! BUG: unused?
fqrand();
s = search_position_angleY(&suisou_pos[actor->_630], &actor->_5A0);
actor->_5F8 = 0.0f;
actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90.0));
actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E);
actor->_626 >>= 1;
actor->_628 = actor->_626;
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
}
}
void mfish_sfish_turn_init() {
return;
void mfish_sfish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(115);
} else {
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115);
}
if (actor->_630 == 2) {
if (actor->_5F0 < 0.0f) {
actor->_5F0 = actor->init_data._10 + MAX(-actor->init_data._10, RANDOM_F(actor->init_data._14));
}
} else {
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
}
actor->_34 = mfish_sfish_turn;
}
void mfish_sfish_turn() {
// NOT BAD
return;
void mfish_sfish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 15.0f);
actor->_636 += DEG2SHORT_ANGLE(7.5f);
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632),
CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f),
DEG2SHORT_ANGLE(0.25f));
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f));
if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) {
mfish_sfish_normal_init(actor, gamex);
}
}
void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
f32 v;
xyz_t p;
int s;
actor->_34(actor, gamex);
actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f),
DEG2SHORT_ANGLE(0.25f));
add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f),
DEG2SHORT_ANGLE(0.25f));
if (actor->_5E8 > actor->_5F0) {
add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.05f);
} else {
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f);
}
GAME_PLAY* game = (GAME_PLAY*)gamex;
return;
if (actor->_5F0 < 0.0f) {
add_calc0(&actor->_5F0, 0.1f, 0.05f);
add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0.5f));
} else {
if (ABS(actor->_60C.x) > DEG2SHORT_ANGLE(50)) {
add_calc2(&actor->_5F0, actor->init_data._14 + actor->init_data._10, 0.2f, 0.1f);
}
}
v = cos_s(actor->_60C.x) * actor->_5E8;
actor->_5D0.x = v * sin_s(actor->_60C.y);
actor->_5D0.z = v * cos_s(actor->_60C.y);
actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x);
mfish_get_flow_vec(&p, actor, gamex);
actor->_5A0.x += actor->_5D0.x + p.x;
actor->_5A0.y += actor->_5D0.y + p.y;
actor->_5A0.z += actor->_5D0.z + p.z;
mfish_onefish_mv(actor, gamex);
if (actor->_630 == 2) {
actor->_38._00.frame_control.speed = actor->_5E8 * 2.0f + 1.0f;
} else {
add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f);
}
actor->_5B8 = actor->_5A0;
Museum_Fish_BGCheck(actor, gamex);
if (actor->_5A0.y < 55.0f + actor->init_data._08) {
actor->_5A0.y = 55.0f + actor->init_data._08;
if (actor->_612.x > 0) {
actor->_612.x = DEG2SHORT_ANGLE(-30);
}
} else if (actor->_5A0.y > 115.0f - actor->init_data._08) {
actor->_5A0.y = 115.0f - actor->init_data._08;
mfish_hamon_make(actor, gamex);
actor->_612.x = DEG2SHORT_ANGLE(30);
} else {
actor->_626--;
}
actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x));
}
void mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
BOOL mfish_sfish_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 + actor->_618.z;
joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
s = joint1->y + actor->_618.z;
joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
} else if (joint_num == 2) {
int s = joint1->y - actor->_618.z * 3;
joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(60), DEG2SHORT_ANGLE(60));
s = joint1->x - (actor->_618.z >> 1);
joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
}
return TRUE;
}
void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
GAME_PLAY* game = (GAME_PLAY*)gamex;
return;
YET_SKELETON* skele = &actor->_38;
Mtx* mtxp;
s16 v;
if (gamex->frame_counter & 1) {
mtxp = &skele->_70;
} else {
mtxp = &skele->_2b0;
}
v = actor->_60C.x * 0.7f;
OPEN_DISP(gamex->graph);
Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0);
Matrix_RotateY(actor->_60C.y, 1);
Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1);
Matrix_RotateX(v, 1);
Matrix_translate(0.0f, 0.0f, -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_zarigani_before_disp, NULL, actor);
CLOSE_DISP(gamex->graph);
}
+1 -1
View File
@@ -33,7 +33,7 @@ void mfish_tai_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
void mfish_tai_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
s16 ss = (ABS(actor->_622) * ((0.75f * actor->init_data._30) / 32749.0f));
// extra extsh here
int s = (s16)MIN(DEG2SHORT_ANGLE2(25), MAX(ss, DEG2SHORT_ANGLE2(5)));
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632),