Match mFish parent file and _base

This commit is contained in:
roeming
2024-12-12 14:31:02 -05:00
parent 4576a7245b
commit 83bb546c37
4 changed files with 723 additions and 169 deletions
+47 -44
View File
@@ -38,27 +38,35 @@ typedef struct _MUSEUM_FISH_INIT_DATA {
s16 _30;
} MUSEUM_FISH_INIT_DATA; // size: 0x34
#define artificial_padding(currentOffset, lastOffset, typeOfLastMember) \
#define artificial_padding(lastOffset, currentOffset, typeOfLastMember) \
u8 __##currentOffset##padding[currentOffset - lastOffset - sizeof(typeOfLastMember)]
#define offsetof(structName, memberName) ((size_t) & (((structName*)0)->memberName))
typedef struct _YET_SKELETON {
cKF_SkeletonInfo_R_c _00;
Mtx _70; // offset A8
artificial_padding(0x2b0, 0x70, Mtx);
cKF_SkeletonInfo_R_c _00; // offset 0, size 0x70
Mtx _70; // offset 70, size
artificial_padding(0x70, 0x2b0, Mtx);
Mtx _2b0;
artificial_padding(0x46C, 0x2b0, Mtx);
artificial_padding(0x2b0, 0x46C, Mtx);
void* _46C;
artificial_padding(0x4F0, 0x46C, void*);
artificial_padding(0x46C, 0x4F0, void*);
s_xyz _4F0;
artificial_padding(0x514, 0x4F0, s_xyz);
artificial_padding(0x4F0, 0x514, s_xyz);
s_xyz _514;
artificial_padding(0x54C, 0x514, s_xyz);
void* _54C;
void* _550;
} YET_SKELETON;
artificial_padding(0x514, 0x538, s_xyz);
s_xyz _538;
xyz_t _540;
cKF_Skeleton_R_c* _54C;
cKF_Animation_R_c* _550;
void* _554;
} YET_SKELETON; // size 558
typedef struct _FISH_PRIVATE_DATA {
MUSEUM_FISH_INIT_DATA init_data;
@@ -66,13 +74,13 @@ typedef struct _FISH_PRIVATE_DATA {
YET_SKELETON _38;
void* _590;
s32 _594;
s32 _598;
struct _FISH_PRIVATE_DATA* _594;
struct _FISH_PRIVATE_DATA* _598;
s32 _59C; // fish num
xyz_t _5A0;
xyz_t _5AC;
xyz_t _5B8;
artificial_padding(0x5D0, 0x5B8, xyz_t);
artificial_padding(0x5B8, 0x5D0, xyz_t);
f32 _5D0;
f32 _5D4;
f32 _5D8;
@@ -88,7 +96,7 @@ typedef struct _FISH_PRIVATE_DATA {
f32 _608;
s_xyz _60C;
s_xyz _612;
artificial_padding(0x61A, 0x612, s_xyz);
artificial_padding(0x612, 0x61A, s_xyz);
s16 _61A;
s16 _61C;
s16 _61E;
@@ -109,20 +117,11 @@ typedef struct _FISH_PRIVATE_DATA {
s16 _63C;
s16 _63E;
s16 _640;
} MUSEUM_FISH_PRIVATE_DATA;
s16 _642;
} MUSEUM_FISH_PRIVATE_DATA; // size 644
// Holds data for the underwater grass
typedef struct _MUSEUM_FISH_KUSA_DATA {
YET_SKELETON _00;
s_xyz _4F0;
s_xyz _514;
s16 _538;
s16 _53A;
s16 _53C;
float _540;
float _548;
void* _54C;
} MUSEUM_FISH_KUSA_DATA; // size 558
typedef YET_SKELETON MUSEUM_FISH_KUSA_DATA;
typedef struct _FISH_DISPLAY_MSG_INFO {
s16 fishName;
@@ -134,26 +133,30 @@ typedef struct _MUSEUM_FISH_ACTOR {
int _174;
MUSEUM_FISH_PRIVATE_DATA prvFish[40]; // offset: 0x178 size: 0xFB48
MUSEUM_FISH_KUSA_DATA prvKusa[14]; // offset: 0xFCB8 size: 0x4AD0
s16 _101f0;
s16 _101f4;
void* _14788;
void* _14788; // offset: 0x14788 size: 4
artificial_padding(0x14788, 0x14d08, void*);
xyz_t _14d08[2];
int numFishDisplayed; // offset: 0x14d20, size: 4
int fishDisplayMsgIter; // offset: 0x14d24, size: 4
FISH_DISPLAY_MSG_INFO fishDisplayMsgInfo[10]; // offset: 0x14d28, size: 4*10
s16 _14d50[0x10];
s16 _14d78[0x10];
s16 _14d50[20];
s16 _14d78[20];
artificial_padding(0x14d78, 0x14daa, s16[20]);
s16 _14daa[5];
s16 _14db4;
s16 _14db6; // offset: 0x14db6, size: 2
s16 _14db8; // offset: 0x14db8, size: 2
s16 _14dba; // offset: 0x14dba, size: 2
s16 _14dbc[2]; // offset: 0x14dbc, size: 4
s16 _14dc0; // offset: 0x14dc0, size: 2
s16 _14dc2; // offset: 0x14dc2, size: 2
s16 _14dc4; // offset: 0x14dc4, size: 2
s16 _14dc8; // offset: 0x14dc8, size: 2
} MUSEUM_FISH_ACTOR;
s16 _14db6; // offset: 0x14db6, size: 2
s16 _14db8; // offset: 0x14db8, size: 2
s16 _14dba; // offset: 0x14dba, size: 2
s16 _14dbc[2]; // offset: 0x14dbc, size: 4
s16 _14dc0; // offset: 0x14dc0, size: 2
s16 _14dc2; // offset: 0x14dc2, size: 2
s16 _14dc4; // offset: 0x14dc4, size: 2
s16 _14dc8; // offset: 0x14dc8, size: 2
} MUSEUM_FISH_ACTOR; // size 14DCA
void Museum_Fish_Prv_data_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, int fishNum, int r6);
void Museum_Fish_Actor_ct(ACTOR* actor, GAME* game);
@@ -172,7 +175,7 @@ BOOL mfish_cull_check(GAME* game, xyz_t* worldPos, f32 x, f32 y, f32 _y);
void mfish_point_ligh_pos_get(ACTOR* actorx, GAME* game, int r5);
void mfish_point_light_ct(ACTOR* actor, GAME* game);
void mfish_point_light_dt(ACTOR* r30, GAME* r31);
void mfish_point_light_mv(ACTOR* actor, GAME* game);
void mfish_point_light_mv(MUSEUM_FISH_ACTOR* actor, GAME* game);
void mfish_normal_light_set();
f32 Rnd_EX_f(f32 v1);
@@ -203,7 +206,7 @@ void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void Museum_Fish_BigFishObjCheck();
void Museum_Fish_ObjBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex, f32 f1, f32 f2);
void Museum_Fish_DonkoBGCheck();
void Museum_Fish_objchk_pos_set();
void Museum_Fish_objchk_pos_set(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void Museum_Fish_Kusa_Check();
void Museum_Fish_Object_Check();
@@ -214,7 +217,7 @@ BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
BOOL mfish_ground_peck_before_check();
void mfish_get_player_area();
void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_get_escape_angle();
s16 mfish_get_escape_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
void mfish_move_smooth();
void mfish_hamon_make();
void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
+51 -50
View File
@@ -1,13 +1,10 @@
#include "ac_museum_fish.h"
#include "m_kankyo.h"
#include "m_play.h"
#include "m_demo.h"
#include "m_name_table.h"
#include "m_item_name.h"
#include "m_msg.h"
#include "m_common_data.h"
#include "sys_matrix.h"
#include "m_lib.h"
#include "m_player_lib.h"
#include "m_debug_mode.h"
#include "libforest/gbi_extensions.h"
@@ -707,26 +704,27 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) {
// 0x1338 : kusa_anime
// 0x1370 : kusa_start_frame
actor->prvKusa[i]._54C = kusa_model[i];
cKF_SkeletonInfo_R_ct(&actor->prvKusa[i]._00._00, kusa_model[i], kusa_anime[i], &actor->prvKusa[i]._4F0,
cKF_SkeletonInfo_R_ct(&actor->prvKusa[i]._00, kusa_model[i], kusa_anime[i], &actor->prvKusa[i]._4F0,
&actor->prvKusa[i]._514);
cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->prvKusa[i]._00._00, kusa_anime[i], NULL,
cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->prvKusa[i]._00, kusa_anime[i], NULL,
kusa_group_tbl[i] == 2 ? 1.5f : 0.5f, 0.0f);
actor->prvKusa[i]._00._00.frame_control.current_frame = kusa_start_frame[i];
actor->_101f0 = qrand();
actor->_101f4 = qrand();
actor->prvKusa[i]._00.frame_control.current_frame = kusa_start_frame[i];
actor->prvKusa[i]._538.x = qrand();
actor->prvKusa[i]._538.z = qrand();
// actor->_101f0[i * 2 + 2] = qrand();
}
if (mMmd_FishInfo(0x21)) {
actor->prvFish[0x21]._590 = &actor->_14788;
} else {
mfish_hasu_ct(&actor->prvFish[0x21], gamex);
mfish_hasu_ct((MUSEUM_FISH_PRIVATE_DATA*)&actor->_14788, gamex);
}
prv = actor->prvFish;
for (i = 0; i < 40; i++, prv++) {
prv->_62E &= ~1;
if (mMmd_FishInfo(i)) {
prv->_38._550 = mfish_model_tbl[i];
prv->_38._54C = mfish_model_tbl[i];
prv->_38._550 = mfish_anime_init_tbl[i];
prv->_62E |= 1;
Museum_Fish_Prv_data_init(prv, gamex, i, 1);
@@ -890,14 +888,15 @@ void Museum_Fish_Talk_process(ACTOR* actorx, GAME* game) {
}
void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) {
s16 old_14db4;
int i;
f32 v;
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
GAME_PLAY* play = (GAME_PLAY*)game;
int j;
MUSEUM_FISH_PRIVATE_DATA* prv;
s16 old_14db4;
f32 v;
GAME_PLAY* play = (GAME_PLAY*)game;
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
mfish_point_light_mv(actorx, &play->game);
mfish_point_light_mv(actor, &play->game);
old_14db4 = actor->_14db4;
mfish_get_player_area(actor, &play->game);
@@ -925,21 +924,21 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) {
}
}
for (i = 0; i < 0xe; i++) {
cKF_SkeletonInfo_R_play(&actor->prvKusa[i]._00._00);
if (kusa_group_tbl[i] == 2) {
add_calc2(&actor->prvKusa[i]._540, -2.25f, 1.75f, 1.75f);
add_calc_short_angle2(&actor->prvKusa[i]._53A, DEG2SHORT_ANGLE(3.5f), CALC_EASE2(0.1f), 20, 4);
for (j = 0; j < 14; j++) {
cKF_SkeletonInfo_R_play(&actor->prvKusa[j]._00);
if (kusa_group_tbl[j] == 2) {
add_calc2(&actor->prvKusa[j]._540.x, -2.25f, 1.75f, 1.75f);
add_calc_short_angle2(&actor->prvKusa[j]._538.y, DEG2SHORT_ANGLE(3.5f), CALC_EASE2(0.1f), 22, 4);
} else {
actor->prvKusa[i]._540 *= 0.9f;
add_calc_short_angle2(&actor->prvKusa[i]._53A, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4);
actor->prvKusa[j]._540.x *= 0.9f;
add_calc_short_angle2(&actor->prvKusa[j]._538.y, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4);
}
actor->prvKusa[i]._548 *= 0.98f;
actor->prvKusa[j]._540.z *= 0.98f;
actor->prvKusa[i]._538 += actor->prvKusa[i]._53A;
actor->prvKusa[i]._53C += actor->prvKusa[i]._53A >> 1;
actor->prvKusa[j]._538.x += actor->prvKusa[j]._538.y;
actor->prvKusa[j]._538.z += actor->prvKusa[j]._538.y >> 1;
add_calc_short_angle2(&actor->prvKusa[i]._53A, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4);
add_calc_short_angle2(&actor->prvKusa[j]._538.y, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4);
}
Museum_Fish_Kusa_Check(actor, &play->game);
@@ -960,24 +959,27 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) {
}
}
// TODO: check if this is broken after we changed this above
Museum_Fish_Talk_process(actorx, game);
prv = actor->prvFish;
for (i = 0; i < 40; i++, prv++) {
if (prv->_62E & 1) {
mfish_mv[i](prv, game);
{
// needs a new variable
MUSEUM_FISH_PRIVATE_DATA* prv = actor->prvFish;
for (i = 0; i < 40; i++, prv++) {
if (prv->_62E & 1) {
mfish_mv[i](prv, game);
}
}
}
if ((actor->prvFish[0x21]._62E & 1) == 0) {
mfish_hasu_mv(&actor->prvFish[0x21], game);
mfish_hasu_mv((MUSEUM_FISH_PRIVATE_DATA*)&actor->_14788, game);
}
for (i = 0; i < 5; i++) {
if (i == 2) {
actor->_14d78[i] += (s16)DEG2SHORT_ANGLE2((float)GETREG(TAKREG, 20) * 0.1f + 0.5f + RANDOM_F(1));
actor->_14daa[i] += (s16)DEG2SHORT_ANGLE2((float)GETREG(TAKREG, 31) * 0.1f + 0.5f + RANDOM_F(1));
} else {
actor->_14d78[i] += 8;
actor->_14daa[i] += 8;
}
}
}
@@ -1007,13 +1009,13 @@ void Museum_Fish_Suisou_draw(ACTOR* actorx, GAME* game, int r5) {
Setpos_HiliteReflect_xlu_init(&suisou_pos[r5], play);
gSPDisplayList(NEXT_POLY_XLU_DISP, obj_suisou1_model);
gSPDisplayList(NEXT_POLY_OPA_DISP, obj_suisou1_model);
gSPDisplayList(NEXT_POLY_XLU_DISP, obj_suisou1_modelT);
CLOSE_DISP(graph);
if ((actor->prvFish[0x21]._62E & 1) == 0) {
mfish_hasu_dw(&actor->prvFish[0x21], game);
mfish_hasu_dw((MUSEUM_FISH_PRIVATE_DATA*)&actor->_14788, game);
}
}
} else if (mfish_cull_check(game, &suisou_pos[4], 215.0f, 25.0f, 0.0f)) {
@@ -1044,11 +1046,11 @@ int kusa_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num,
if (joint_num > 0) {
f32 v = (actor->_54C == &cKF_bs_r_obj_museum5_kusa3) ? 35.0f : 20.f;
joint1->y += (s16)(sin_s(actor->_538 + (joint_num * DEG2SHORT_ANGLE(90))) * 1274.0f);
joint1->x += (s16)(sin_s(actor->_53C + (joint_num * DEG2SHORT_ANGLE(90))) * 4369.0f);
joint1->y += (s16)(sin_s(actor->_538.x + (joint_num * DEG2SHORT_ANGLE(90))) * 1274.0f);
joint1->x += (s16)(sin_s(actor->_538.z + (joint_num * DEG2SHORT_ANGLE(90))) * 4369.0f);
trans->y -= actor->_548 * (v * joint_num);
trans->z += actor->_540 * (v * joint_num);
trans->y -= actor->_540.x * (v * joint_num);
trans->z += actor->_540.z * (v * joint_num);
}
return 1;
}
@@ -1059,16 +1061,16 @@ void Museum_Fish_Kusa_Draw(ACTOR* actorx, GAME* game, int r5) {
if (mfish_cull_check(game, &kusa_pos[r5], 0.0f, 0.0f, 120.0f)) {
Mtx* mtx;
if (play->game.frame_counter % 2 != 0) {
mtx = &actor->prvKusa[r5]._00._70;
mtx = &actor->prvKusa[r5]._70;
} else {
mtx = &actor->prvKusa[r5]._00._2b0;
mtx = &actor->prvKusa[r5]._2b0;
}
OPEN_DISP(game->graph);
Matrix_translate(kusa_pos[r5].x, 0, kusa_pos[r5].z, 0);
Matrix_scale(0.01f, 0.01f, 0.01f, 1);
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
CLOSE_DISP(game->graph);
cKF_Si3_draw_R_SV(game, &actor->prvKusa[r5]._00._00, mtx, kusa_before_disp, NULL, &actor->prvKusa[r5]);
cKF_Si3_draw_R_SV(game, &actor->prvKusa[r5]._00, mtx, kusa_before_disp, NULL, &actor->prvKusa[r5]);
}
}
@@ -1119,7 +1121,7 @@ void Museum_Fish_Actor_draw(ACTOR* actorx, GAME* game) {
mfish_dw[0x21](&actor->prvFish[0x21], game);
}
if (GETREG(TAKREG, 92) == 1) {
if (GETREG(TAKREG, 82) == 1) {
mfish_normal_light_set(actorx, game);
}
}
@@ -1224,8 +1226,8 @@ void mfish_point_ligh_pos_get(ACTOR* actorx, GAME* game, int r5) {
void mfish_point_light_ct(ACTOR* actorx, GAME* game) {
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
GAME_PLAY* play = (GAME_PLAY*)game;
mfish_point_ligh_pos_get(actorx, game, 0);
mfish_point_ligh_pos_get(actorx, game, 1);
mfish_point_ligh_pos_get(&actor->actor, game, 0);
mfish_point_ligh_pos_get(&actor->actor, game, 1);
actor->_14db8 = mEnv_ReservePointLight(play, &actor->_14d08[0], 0, 0x96, 0xff, (u8)actor->_14dbc[0]);
actor->_14dba = mEnv_ReservePointLight(play, &actor->_14d08[1], 0, 0x96, 0xff, (u8)actor->_14dbc[1]);
actor->_14dc0 = 0;
@@ -1244,12 +1246,11 @@ void mfish_point_light_dt(ACTOR* actorx, GAME* game) {
}
}
void mfish_point_light_mv(ACTOR* actorx, GAME* game) {
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
void mfish_point_light_mv(MUSEUM_FISH_ACTOR* actor, GAME* game) {
GAME_PLAY* play = (GAME_PLAY*)game;
mfish_point_ligh_pos_get(actorx, game, 0);
mfish_point_ligh_pos_get(actorx, game, 1);
mfish_point_ligh_pos_get(&actor->actor, game, 0);
mfish_point_ligh_pos_get(&actor->actor, game, 1);
mEnv_OperateReservedPointLight(actor->_14db8, &actor->_14d08[0], 0, 0x96, 0xff, (u8)actor->_14dbc[0]);
mEnv_OperateReservedPointLight(actor->_14dba, &actor->_14d08[1], 0, 0x96, 0xff, (u8)actor->_14dbc[1]);
+588 -40
View File
@@ -225,7 +225,7 @@ void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
v = -ABS(v);
}
} else if (actor->_62E & 0x1e) {
if ((s16)(actor->_62C - actor->_60C.y) < 0) {
if ((s16)(actor->_60C.y - actor->_62C) < 0) {
v = -v;
} else {
v = v;
@@ -275,7 +275,7 @@ void mfish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
CALC_EASE(0.2f), actor->_61A >> 1, DEG2SHORT_ANGLE(0.25f));
add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f));
if (ABS((s16)(actor->_612.y - actor->_61C)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) {
if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) {
if (actor->_63E > 0) {
if (mfish_WallCheck(actor)) {
mfish_turn_process_init(actor);
@@ -350,7 +350,7 @@ void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
if (actor->_632 > DEG2SHORT_ANGLE(15)) {
add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.25f),
(((actor->_632 - DEG2SHORT_ANGLE(15)) / DEG2SHORT_ANGLE(2)) * 0.04f + 0.01f) * 0.5f, 0.05f);
(((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.04f + 0.01f) * 0.5f, 0.05f);
} else if (actor->_626 > actor->_628 - 16) {
add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), 0.5f, 0.05f);
} else if (dist > 20) {
@@ -398,7 +398,7 @@ void mfish_ground_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex
void mfish_ground_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
xyz_t p = suisou_pos[actor->_630];
xyz_t_sub(&p, &actor->_5A0, &p);
actor->_5F4 = ((actor->init_data._08 * 0.3f + 64.0f) - (MAX(ABS(p.x), ABS(p.y)) * 0.15f)) - actor->init_data._0C;
actor->_5F4 = ((actor->init_data._08 * 0.3f + 64.0f) - (MAX(ABS(p.x), ABS(p.z)) * 0.15f)) - actor->init_data._0C;
xyz_t_mult_v(&actor->_5DC, 0.1f);
if (actor->_5A0.y > actor->_5F4 + actor->init_data._0C + 4.0f) {
@@ -445,7 +445,7 @@ void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
}
actor->_5D4 = 0.0;
actor->_5AC = ZeroVec;
actor->_63E = qrand();
actor->_638 = qrand();
actor->_622 = actor->_60C.y;
}
@@ -613,11 +613,10 @@ void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
}
void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
GAME_PLAY* game = (GAME_PLAY*)gamex;
// NOT BAD
mfish_onefish_dw(actor, gamex);
}
void Museum_Fish_BigFishObjCheck(MUSEUM_FISH_PRIVATE_DATA* actor) {
void Museum_Fish_BigFishObjCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
int i;
MUSEUM_FISH_PRIVATE_DATA* fish[2];
f32 max[2] = { 430.0f, 530.0f };
@@ -765,11 +764,11 @@ void Museum_Fish_ObjBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex, f32 f1
}
void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
f32 a, b, c, d;
f32 a, b, d, c;
f32 f27;
f32 f24;
f32 f25;
f32 f26;
f32 f24;
f32 f27;
xyz_t p = suisou_pos[actor->_630];
f32 v = (sin_s(actor->_60C.y) * 0.7f) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f) + 0.3f;
f32 v2 = (cos_s(actor->_60C.y) * 0.7f) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f) + 0.3f;
@@ -779,14 +778,15 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
// asm 17C
a = (+00.0f + p.x);
b = (-45.5f + p.x);
c = (+45.0f + p.z);
d = (-17.5f + p.z);
c = (+45.0f + p.z);
f27 = 76.0f - 6.0f * cos_s(DEG2SHORT_ANGLE2(180.0f * (actor->_5B8.x - p.x) / 55.0f));
f26 = 76.0f - 6.0f * cos_s(DEG2SHORT_ANGLE2((actor->_5B8.x + sin_s(actor->_60C.z) - p.x) * 180.0f / 55.0f));
f26 = 76.0f - 6.0f * cos_s(DEG2SHORT_ANGLE2((actor->_5B8.x + sin_s(actor->_60C.y) - p.x) * 180.0f / 55.0f));
a -= (actor->_5A0.x + actor->init_data._28 * v);
c -= (actor->_5A0.x - actor->init_data._28 * v);
b -= (actor->_5A0.z + actor->init_data._28 * v2);
b -= (actor->_5A0.x - actor->init_data._28 * v);
c -= (actor->_5A0.z + actor->init_data._28 * v2);
d -= (actor->_5A0.z - actor->init_data._28 * v2);
/*
@@ -844,7 +844,7 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
}
}
f25 = MIN(MIN(actor->_608, actor->_604), MIN(actor->_5FC, actor->_600));
f25 = MIN(MIN(actor->_608, actor->_604), MIN(actor->_600, actor->_5FC));
if (f25 < 5.0f) {
f27 -= 0.5f * (5.0f - f25);
}
@@ -863,24 +863,330 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
}
}
void Museum_Fish_objchk_pos_set() {
// NOT BAD
void Museum_Fish_objchk_pos_set(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
actor->_5B8 = actor->_5A0;
actor->_5B8.x += (actor->init_data._24 * sin_s(actor->_60C.y));
actor->_5B8.z += (actor->init_data._24 * cos_s(actor->_60C.y));
}
void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
return;
xyz_t p = suisou_pos[actor->_630];
f32 f29, f30, f28, f27, f31, f26, f25;
s32 r31 = 0;
if ((actor->_624 == 0 || actor->_624 == 0xb || actor->_624 == 0x1 || actor->_624 == 0x2) &&
actor->init_data._28 < 0) {
f26 =
GETREG(TAKREG, 0x52) * 0.01f + 0.3f +
(0.7f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(sin_s(actor->_60C.y)) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f);
f25 =
GETREG(TAKREG, 0x52) * 0.01f + 0.3f +
(0.7f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(cos_s(actor->_60C.y)) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f);
} else if (actor->_624 == 10 || actor->_624 == 7 || actor->_624 == 9) {
f26 =
GETREG(TAKREG, 0x52) * 0.01f + 0.6f +
(0.4f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(sin_s(actor->_60C.y)) * (ABS(cos_s(actor->_61C)) * 0.4f + 0.6f);
f25 =
GETREG(TAKREG, 0x52) * 0.01f + 0.6f +
(0.4f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(cos_s(actor->_60C.y)) * (ABS(cos_s(actor->_61C)) * 0.4f + 0.6f);
} else {
f26 = 1.0f;
f25 = 1.0f;
}
if (actor->_630 < 4) {
f30 = 54.0f + actor->init_data._28 * f26;
f29 = 54.0f + actor->init_data._28 * f26;
f28 = 54.0f + actor->init_data._28 * f25;
f27 = 54.0f + actor->init_data._28 * f25;
} else {
f30 = actor->init_data._28 * f26 + 189.0f;
f29 = actor->init_data._28 * f26 + 189.0f;
f28 = actor->init_data._28 * f25 + 14.0f;
f27 = actor->init_data._28 * f25 + 25.0f;
f31 = actor->_5B8.x - p.x;
f27 += cos_s(f31 * 32768.0f / 180.0f) * 9.0f;
f27 += 21.0f;
r31 = DEG2SHORT_ANGLE(sin_s(f31 * 32768.0f / 180.0f) * -10.0f);
}
actor->_62E &= ~0x1e;
actor->_62C = 0;
Museum_Fish_objchk_pos_set(actor, game);
if (actor->_5B8.x > (p.x + f30)) {
actor->_5A0.x += (p.x + f30) - actor->_5B8.x;
actor->_62E |= 0x4;
} else if (actor->_5B8.x < p.x - f29) {
actor->_5A0.x += (p.x - f29) - actor->_5B8.x;
actor->_62E |= 0x2;
}
if (actor->_5B8.z > (p.z + f28)) {
actor->_5A0.z += (p.z + f28) - actor->_5B8.z;
actor->_62E |= 0x10;
} else if (actor->_5B8.z < (p.z - f27)) {
actor->_5A0.z += (p.z - f27) - actor->_5B8.z;
actor->_62E |= 0x8;
}
// asm 468
Museum_Fish_objchk_pos_set(actor, game);
actor->_5FC = actor->_5B8.x - (p.x - f29);
actor->_600 = (p.x + f30) - actor->_5B8.x;
actor->_604 = actor->_5B8.z - (p.z - f27);
actor->_608 = (p.z + f28) - actor->_5B8.z;
if (actor->_630 < 4 && actor->_59C != 26) {
Museum_Fish_ObjBGCheck(actor, game, f26, f25);
}
if (actor->_62E & 2) {
actor->_62C = DEG2SHORT_ANGLE(-90);
} else if (actor->_62E & 4) {
actor->_62C = DEG2SHORT_ANGLE(90);
}
if (actor->_62E & 8) {
if (actor->_62E & 6) {
actor->_62C = (DEG2SHORT_ANGLE(180) - (actor->_62C >> 1) + ((s16)r31 >> 1));
} else {
actor->_62C = r31 + DEG2SHORT_ANGLE(180);
}
} else if (actor->_62E & 0x10) {
if (actor->_62E & 6) {
actor->_62C >>= 1;
} else {
actor->_62C = DEG2SHORT_ANGLE(0);
}
}
}
void Museum_Fish_Kusa_Check() {
void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) {
static int kusa_group_tbl[14] = { 0, 2, 1, 3, 3, 4, 4, 4, 4, 4, 0, 2, 1, 3 };
MUSEUM_FISH_KUSA_DATA* k;
MUSEUM_FISH_PRIVATE_DATA* f = &actor->prvFish[0];
int i;
int j;
f32 sq;
f32 f30 = 0.0f;
f32 f29 = 0.0f;
f32 f28 = 0.0f;
for (i = 0; i < 40; i++, f++) {
f->_62E &= ~0x100;
// this if statement salso works as a continue statement
if (f->_59C != 0x1a && f->_59C != 0x1f && f->_59C != 0x21) {
for (j = 0; j < 14; j++) {
f32 f1 = (j < 5) ? 90.0f : (j < 10) ? 115.0f : 80.0f;
if (kusa_group_tbl[j] == f->_630 && f->_5B8.y < f1) {
f32 z;
f32 x;
f32 d;
f32 dSQ;
f32 dx;
f32 dy;
if (kusa_group_tbl[j] == 4) {
if (f->_59C == 0x1f) {
d = 5.0f + f->init_data._08;
} else {
d = 10.0f + f->init_data._08;
}
dSQ = d * d;
} else {
d = 5.0f + f->init_data._08;
dSQ = d * d;
}
x = f->_5B8.x - (kusa_pos[j].x + actor->prvKusa[j]._540.x);
z = f->_5B8.z - (kusa_pos[j].z + actor->prvKusa[j]._540.z);
sq = SQ(x) + SQ(z);
if (sq < dSQ) {
f32 t;
s16 v = atans_table(z, x);
d -= sqrtf(sq);
d *= 0.1f;
f30 += sin_s(v) * d;
if (kusa_group_tbl[j] == 4) {
f29 += MAX(cos_s(v), 0.2f) * d;
} else {
f29 += cos_s(v) * d;
}
f28 += 1;
actor->prvKusa[j]._540.x -= (f->init_data._20 * 1.5f) * d * sin_s(v);
if (kusa_group_tbl[j] == 4) {
actor->prvKusa[j]._540.z -= (f->init_data._20 * 1.5f) * d * MAX(cos_s(v), 0.1f);
} else {
actor->prvKusa[j]._540.z -= (f->init_data._20 * 1.5f) * d * cos_s(v);
}
t = SQ(actor->prvKusa[j]._540.x) + SQ(actor->prvKusa[j]._540.z);
t = sqrtf(t);
if (t > 4.0f) {
xyz_t_mult_v(&actor->prvKusa[j]._540, 4.0f / t);
}
actor->prvKusa[j]._538.y = 0x27d;
}
}
// asm 3fc-410
}
// asm 414
if (f28 > 0.0f) {
f->_62E |= 0x100;
f->_5A0.x += (f30 / f28);
f->_5A0.z += (f29 / f28);
}
f28 = 0.0f;
f29 = 0.0f;
f30 = 0.0f;
// asm 460
}
}
}
void Museum_Fish_Object_Check() {
return;
void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) {
int i;
MUSEUM_FISH_PRIVATE_DATA* fj; // r31
MUSEUM_FISH_PRIVATE_DATA* f; // r29
int j;
f32 f31;
f32 f30;
f32 f29;
xyz_t test;
f32 f28 = 0.0f;
f32 f27 = 0.0f;
f32 f26 = 0.0f;
f32 f25 = 0.0f;
f32 f24 = 0.0f;
f32 f23 = FLT_MAX;
f32 f22;
f32 sq_xz;
f32 sq_xzy;
fj = f = &actor->prvFish[0];
for (i = 0; i < 40; i++, f++) {
f->_62E &= ~0x20;
}
f = &actor->prvFish[0];
for (i = 0; i < 40; i++, f++) {
// asm b8
if (i != 0x21 && i != 0x20 && i != 0x1a && i != 0x27 && i != 0xa && f->_62E & 1) {
for (j = 0; j < 40; j++, fj++) {
if (f->_630 == fj->_630 && i != j && j != 0x21 && j != 0x1a && j != 0x27 && j != 10 &&
fj->_62E & 1 != 0) {
test.x = f->_5B8.x - fj->_5B8.x; // f31
test.y = f->_5B8.y - fj->_5B8.y; // f29
test.z = f->_5B8.z - fj->_5B8.z; // f30
sq_xz = SQ(test.x) + SQ(test.z);
sq_xzy = sq_xz + SQ(test.y);
if (sqrtf(sq_xzy) < f23) {
f23 = sqrtf(sq_xzy);
f->_598 = fj;
}
if (ABS(test.y) < (f->init_data._04 + fj->init_data._04)) {
f32 additive = f->init_data._08 + fj->init_data._08;
if (sq_xz < SQ(additive)) {
f22 = additive - sqrtf(SQ(test.x) + SQ(test.z));
// bug?
if (test.y > atans_table(sqrtf(SQ(test.x) + SQ(test.z)), test.y) * 0.0f) {
test.y = -test.y + (f->init_data._04 + fj->init_data._04);
} else {
test.y = -test.y - (f->init_data._04 + fj->init_data._04);
}
test.y *= 0.2f + (GETREG(TAKREG, 0x11)) * 0.001f;
f22 *= 0.2f + (GETREG(TAKREG, 0x12)) * 0.001f;
f->_62A = atans_table(test.z, test.x);
f->_62E |= 0x20;
fj->_62A = f->_62A + DEG2SHORT_ANGLE(180);
f->_62E |= 0x20;
f->_594 = fj;
if ((fj->_62E & 0x1e) == 0 || ABS((s16)(fj->_62C - f->_62A)) >= DEG2SHORT_ANGLE(90)) {
f32 v = (fj->init_data._20 / (f->init_data._20 + fj->init_data._20));
v *= (1.0f - f->init_data._20);
f22 *= v;
test.y *= v;
} else {
f32 v = (2.0f * fj->init_data._20 / (f->init_data._20 + 2.0f * fj->init_data._20));
v *= (1.0f - f->init_data._20);
f22 *= v;
test.y *= v;
}
if (f22 < ABS(test.y) || f->_624 == 0xa || f->_59C == 0x1f) {
f28 += sin_s(f->_62A) * f22;
f27 += cos_s(f->_62A) * f22;
f25 += 1.0f;
} else {
f26 += test.y;
f24 += 1;
}
if (fj->init_data._20 > f->init_data._20 && f->_5F8 <= f->init_data._08 * 10.0f) {
f->_5F8 += f22;
}
}
}
}
// asm 5ec - 5f8
}
if (f25 > 0.0f) {
f->_5A0.x += f28 / f25;
f->_5A0.z += f27 / f25;
}
if (f24 > 0) {
f->_5A0.y += MAX(MIN(f26 / f24, 0.5f), -0.5f);
if (f->_624 == 0 || f->_624 == 0xb) {
f->_5F4 += f26 / f24;
}
}
if (f24 > 0 && f25 > 0) {
xyz_t r;
xyz_t_sub(&f->_594->_5A0, &f->_5A0, &r);
f->_62A = atans_table(r.z, r.x);
}
f25 = 0.0f;
f24 = 0.0f;
f27 = 0.0f;
f28 = 0.0f;
f26 = 0.0f;
f23 = FLT_MAX;
fj = &actor->prvFish[0];
}
if (f->_630 == 3 && f->_624 != 7) {
Museum_Fish_BigFishObjCheck(f, game);
}
// asm 728
}
}
void mfish_body_wind_anime_play() {
return;
void mfish_body_wind_anime_play(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
int a;
// needs int temp to generate extsh
a = DEG2SHORT_ANGLE(GETREG(TAKREG, 0x32) * 0.1f + 1.5f + RANDOM_F(1.0f));
actor->_63A += a;
a = DEG2SHORT_ANGLE(GETREG(TAKREG, 0x31) * 0.1f + 0.5f + RANDOM_F(0.5f));
actor->_63C += a;
}
void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* atanx, s16* atany, f32* distance) {
@@ -891,7 +1197,7 @@ void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* at
p = playerActor->actor_class.world.position;
p.y += 40.0f;
xyz_t_sub(&p, &actor->_5A0, &p1);
v = p1.x * p1.x + p1.z * p1.z;
v = SQ(p1.x) + SQ(p1.z);
v = sqrtf(v);
if (atanx) {
*atanx = atans_table(p1.z, p1.x);
@@ -904,34 +1210,276 @@ void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* at
}
}
BOOL mfish_peck_check() {
return;
BOOL mfish_peck_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
Private_c* commonData_prv = common_data.now_private;
if (MF_Control_Actor->_14db4 == actor->_630) {
if (actor->_59C == 0x18) {
return TRUE;
} else if (mPr_GetPossessionItemIdx(commonData_prv, 0x2806) != -1) {
if (actor->_59C == 2 || actor->_59C == 3) {
return TRUE;
}
} else if (mPr_GetPossessionItemIdxItem1Category(commonData_prv, 8) != -1 &&
(actor->_59C == 0x17 || actor->_59C == 0x1e)) {
return TRUE;
}
}
return FALSE;
}
BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
// NOT BAD
BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
s16 temp = (actor->_60C.y - actor->_62C);
if (actor->_62E & 0x1E && ABS(temp) < DEG2SHORT_ANGLE(45)) {
PLAYER_ACTOR* playerActor = get_player_actor_withoutCheck((GAME_PLAY*)gamex);
xyz_t target = playerActor->actor_class.world.position;
return search_position_distance(&actor->_5A0, &target) < 60.0f;
}
return FALSE;
}
BOOL mfish_ground_peck_before_check() {
return;
BOOL mfish_ground_peck_before_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
xyz_t p, p2;
f32 v;
p2 = p = suisou_pos[actor->_630];
xyz_t_sub(&p2, &actor->_5A0, &p2);
v = MAX(ABS(p2.x), ABS(p2.z));
if (actor->_34 == mfish_ground_peck_process) {
return actor->_63E > 0;
} else if ((actor->_630 == 2) && (actor->_5A0.x < p.x + 20.0f) && (actor->_5A0.z > p.z - 10.0f) &&
(actor->_5A0.y < (actor->init_data._08 * 0.5f + 75.0f) - (v * 0.15f)) && (fqrand() > 0.2f)) {
return TRUE;
}
return FALSE;
}
void mfish_get_player_area() {
return;
void mfish_get_player_area(MUSEUM_FISH_ACTOR* actor, GAME* gamex) {
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)gamex);
xyz_t p = player->actor_class.world.position;
if (actor->_14db6-- < 0) {
actor->_14db6 = 0x1e;
} else {
return;
}
if (p.z < 80.0f) {
actor->_14db4 = 4;
return;
}
if (p.z > 120.0f && p.z < 320.0f) {
if (p.x < 320.0f) {
actor->_14db4 = 0;
} else {
actor->_14db4 = 1;
}
return;
}
if (p.z > 360.0f && p.z < 560.0f) {
if (p.x < 320.0f && p.x > 120.0f) {
actor->_14db4 = 2;
} else {
actor->_14db4 = 3;
}
return;
}
actor->_14db4 = -1;
}
void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
return;
f32 v;
xyz_t p2;
xyz_t p = suisou_pos[actor->_630];
xyz_t t;
xyz_t p3;
f32 xy;
f32 s;
s16 s2;
f32 d;
f32 dSQ;
if (actor->_630 == 0) {
v = 0.05f;
} else if (actor->_630 == 1) {
v = 0.06f;
} else if (actor->_630 == 2) {
v = 0.2f;
} else if (actor->_630 == 3) {
v = 0.05f;
} else if (actor->_630 == 4) {
v = 0.08f;
}
xyz_t_sub(&actor->_5A0, &p, &t);
xy = SQ(t.x) + SQ(t.z);
s = (sin_s(DEG2SHORT_ANGLE2(360.0f * sqrtf(xy) / 720.0f)) * 0.1f + 0.2f);
p2.x = s * cos_s(DEG2SHORT_ANGLE2(360.0f * t.x / 60.0f));
p2.z = s * cos_s(DEG2SHORT_ANGLE2(360.0f * t.z / 60.0f));
p2.y = (s * 0.5f) * cos_s(DEG2SHORT_ANGLE2(180.0f * t.y / 70.0f));
s2 = atans_table(t.z, t.x);
s2 += MF_Control_Actor->_14daa[actor->_630];
if (actor->_630 == 2) {
p2.x += (GETREG(TAKREG, 0xc) * 0.01f + 2.0f) * cos_s(s2);
p2.z += (GETREG(TAKREG, 0xc) * 0.01f + 2.0f) * sin_s(s2);
} else {
p2.x += (GETREG(TAKREG, 0xc) * 0.01f + 1.5f) * cos_s(s2);
p2.z += (GETREG(TAKREG, 0xc) * 0.01f + 1.5f) * sin_s(s2);
}
p2.x *= ABS(cos_s(actor->_60C.y) * cos_s(actor->_60C.x));
p2.z *= ABS(sin_s(actor->_60C.y) * cos_s(actor->_60C.x));
if (actor->_624 != 3) {
p2.x *= cos_s(actor->_61C);
p2.z *= cos_s(actor->_61C);
}
if (actor->_630 == 4) {
p2.z += (GETREG(TAKREG, 0xb) * 0.01f + 0.5f) * cos_s(actor->_60C.y + DEG2SHORT_ANGLE(90));
} else if (actor->_630 == 2) {
p2.x -= ABS(cos_s(actor->_60C.y)) * 0.02f;
if (ABS((s16)(actor->_60C.y - DEG2SHORT_ANGLE(270))) < DEG2SHORT_ANGLE(100)) {
p2.x = MIN(-1.0f + GETREG(TAKREG, 0x48) * 0.001f, p2.x);
}
}
if (actor->_598 != NULL) {
if (actor->_630 == 4) {
s = actor->_598->init_data._08 * 10.0f + actor->init_data._08 * 2.0f;
} else {
s = actor->_598->init_data._08 * 5.0f + actor->init_data._08 * 2.0f;
}
xyz_t_sub(&actor->_5A0, &actor->_598->_5A0, &p3);
dSQ = SQ(p3.x) + SQ(p3.y) + SQ(p3.z);
d = sqrtf(dSQ);
if (d < s) {
f32 x = (1.0f / SQ(s)) * (d - s) * (d - s);
x *= actor->_598->init_data._20;
p2.x += (x * p3.x) / d;
p2.y += (x * p3.y) / d;
p2.z += (x * p3.z) / d;
}
}
if (actor->_630 == 2 && p2.x < 0.0f) {
p2.x *= 1.1f;
}
xyz_t_mult_v(&p2, v);
add_calc2(&actor->_5DC.x, p2.x, 0.5f, 0.1f);
add_calc2(&actor->_5DC.y, p2.y, 0.5f, 0.1f);
add_calc2(&actor->_5DC.z, p2.z, 0.5f, 0.1f);
*pos = actor->_5DC;
}
void mfish_get_escape_angle() {
return;
s16 mfish_get_escape_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
// int ret;
s16 v1 = atans_table(actor->_594->_5A0.z - actor->_5A0.z, actor->_594->_5A0.x - actor->_5A0.x);
s16 v = actor->_60C.y - v1;
if (ABS(v) < DEG2SHORT_ANGLE(90)) {
if (actor->_624 == 1 || actor->_624 == 2) {
if (ABS((s16)(actor->_594->_60C.y - actor->_60C.y)) > DEG2SHORT_ANGLE(90)) {
add_calc2(&actor->_5F0, actor->init_data._14 + actor->init_data._10, 0.1f, 0.3f);
} else {
add_calc2(&actor->_5F0, actor->init_data._10, 0.05f, 0.3f);
}
} else if (actor->_624 == 6) {
if (actor->_5E8 > 0.0f) {
add_calc2(&actor->_5E8, actor->init_data._14 + actor->init_data._10, 0.25f, 0.1f);
} else {
actor->_5E8 *= 0.95f;
}
}
if (v > 0) {
v1 += DEG2SHORT_ANGLE(90);
} else {
v1 -= DEG2SHORT_ANGLE(90);
}
return v1;
} else {
return actor->_62A;
}
}
void mfish_move_smooth() {
return;
void mfish_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
s16 vv;
s16 v = 0;
s16* o;
if (actor->_608 < 20.0f || actor->_600 < 20.0f || actor->_604 < 20.0f || actor->_5FC < 20.0f) {
if (actor->_600 < 20.0f) {
v = DEG2SHORT_ANGLE(90);
} else if (actor->_5FC < 20.0f) {
v = DEG2SHORT_ANGLE(-90);
}
if (actor->_608 < 20.0f) {
if (v == 0) {
v = 0;
} else {
v >>= 1;
}
} else if (actor->_604 < 20.0f) {
if (v == 0) {
v = DEG2SHORT_ANGLE(-180);
} else {
v = DEG2SHORT_ANGLE(180) - (v >> 1);
}
}
if ((actor->_5E8 > 0.0f || actor->_608 < 5.0f || actor->_604 < 5.0f || actor->_600 < 5.0f ||
actor->_5FC < 5.0f) &&
(actor->_34 != mfish_peck_process && actor->_34 != mfish_koi_peck_process)) {
vv = actor->_60C.y - (s16)v;
if (ABS(vv) < DEG2SHORT_ANGLE(45)) {
add_calc0(&actor->_5E8, 0.1f * cos_s(vv << 1), 0.02f);
}
if ((actor->_630 == 0 || actor->_624 == 10 || actor->_624 == 11 || actor->_59C == 25) &&
ABS(vv) < DEG2SHORT_ANGLE(90) && ABS(actor->_622) < DEG2SHORT_ANGLE(10)) {
if (actor->_34 == mfish_afish_dummy_process) {
o = &actor->_634;
} else {
o = &actor->_612.y;
}
if (vv > 0) {
add_calc_short_angle2(
o, (s16)v + DEG2SHORT_ANGLE(90), CALC_EASE(GETREG(TAKREG, 0x2d) * 0.01f + 0.25f),
DEG2SHORT_ANGLE(actor->_5E8 * ((GETREG(TAKREG, 0x2e) + 12.0f) * cos_s(vv)) + 1.5f) >> 1,
DEG2SHORT_ANGLE(0.5f));
} else {
add_calc_short_angle2(
o, (s16)v - DEG2SHORT_ANGLE(90), CALC_EASE(GETREG(TAKREG, 0x2d) * 0.01f + 0.25f),
DEG2SHORT_ANGLE(actor->_5E8 * ((GETREG(TAKREG, 0x2e) + 5.0f) * cos_s(vv)) + 1.5f) >> 1,
DEG2SHORT_ANGLE(0.5f));
}
}
}
}
}
void mfish_hamon_make() {
return;
void mfish_hamon_make(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
GAME_PLAY* play = (GAME_PLAY*)game;
if ((play->game_frame & 7) == 0 &&
((actor->_62E & 0x1e) == 0 || ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(80))) {
xyz_t p = actor->_5A0;
p.y = 115.0f;
Common_Get(clip.effect_clip)
->effect_make_proc(0x45, p, 2, DEG2SHORT_ANGLE(180) + actor->_60C.y, game, -1, 7, 0);
}
}
+37 -35
View File
@@ -14,8 +14,8 @@ void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
f32 t;
xyz_t pos;
add_calc2(&actor->_5E8, actor->_5AC.x, 1 - actor->init_data._18, 0.01f + 0.001f * GETREG(TAKREG, 20));
actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.z);
actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.z);
actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.y);
actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.y);
add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f);
t = add_calc(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4, 0);
@@ -25,8 +25,8 @@ void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
}
mfish_move_smooth(actor, game);
mfish_get_flow_vec(&pos, actor, game);
actor->_5A0.y += actor->_5D0 + actor->_5DC.x;
actor->_5A0.z += actor->_5D0 + actor->_5DC.x;
actor->_5A0.x += actor->_5D0 + actor->_5DC.x;
actor->_5A0.z += actor->_5D8 + actor->_5DC.z;
actor->_5A0.y = actor->_5A0.y + actor->_5DC.y;
actor->_5A0.y = MAX(60, MIN(110, actor->_5A0.y));
}
@@ -36,13 +36,13 @@ void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
if ((actor->_62E & 0x1E) != 0) {
// works with temp instead of cast
if ((s16)(actor->_612.z - actor->_62C) > 0) {
if ((s16)(actor->_612.y - actor->_62C) > 0) {
actor->_634 = actor->_62C + DEG2SHORT_ANGLE(90);
} else {
actor->_634 = actor->_62C - DEG2SHORT_ANGLE(90);
}
} else {
add_calc_short_angle2(&actor->_634, actor->_612.z, CALC_EASE(0.5f), DEG2SHORT_ANGLE(22.5), 0x5b);
add_calc_short_angle2(&actor->_634, actor->_612.y, CALC_EASE(0.5f), DEG2SHORT_ANGLE(22.5), 0x5b);
}
actor->_5EC = 0.0f;
@@ -53,8 +53,8 @@ void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
// no clue what's going on here
add_calc_short_angle2(&actor->_612.z, actor->_634, CALC_EASE2(0.0f), 0x1c7, 0x2d);
actor->_622 = add_calc_short_angle2(&actor->_60C.z, actor->_612.z, CALC_EASE2(0.25f), 0xe3, 0x2d);
add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.0f), 0x1c7, 0x2d);
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), 0xe3, 0x2d);
add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.25f), 0xe3, 0x2d);
}
@@ -89,13 +89,13 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
if (RANDOM_F(1) > fishActor->init_data._1C) {
int diff;
fishActor->_612.z += (s16)Rnd_EX_fx(fishActor->init_data._30 * 2.0f);
diff = fishActor->_612.z - fishActor->_60C.z;
fishActor->_612.y += (s16)Rnd_EX_fx(fishActor->init_data._30 * 2.0f);
diff = fishActor->_612.y - fishActor->_60C.y;
if (ABS((s16)diff) < DEG2SHORT_ANGLE(20)) {
if ((s16)diff > 0) {
fishActor->_612.z += DEG2SHORT_ANGLE(20);
fishActor->_612.y += DEG2SHORT_ANGLE(20);
} else {
fishActor->_612.z += DEG2SHORT_ANGLE(-20);
fishActor->_612.y += DEG2SHORT_ANGLE(-20);
}
}
@@ -105,10 +105,10 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
fishActor->_632 = DEG2SHORT_ANGLE(t * 30 + 20);
}
} else {
if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) {
fishActor->_612.z += DEG2SHORT_ANGLE(15);
if ((s16)(fishActor->_612.y - fishActor->_60C.y) > 0) {
fishActor->_612.y += DEG2SHORT_ANGLE(15);
} else {
fishActor->_612.z += DEG2SHORT_ANGLE(-15);
fishActor->_612.y += DEG2SHORT_ANGLE(-15);
}
if ((fishActor->_62E & 0x200) == 0) {
@@ -117,7 +117,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
fishActor->_632 = DEG2SHORT_ANGLE((GETREG(TAKREG, 42) + 40.0f) * t + 30);
}
}
if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) {
if ((s16)(fishActor->_60C.y - fishActor->_612.y) > 0) {
fishActor->_636 = DEG2SHORT_ANGLE(0);
} else {
fishActor->_636 = DEG2SHORT_ANGLE(-180);
@@ -138,14 +138,14 @@ void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
}
if (actor->_62E & 0x200) {
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(GETREG(TAKREG, 73) * 0.1f + 4.0f),
(s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 73) * 0.1f + 4.0f) >> 1) >> 1, 45);
(s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 74) * 0.1f + 4.0f) >> 1) >> 1, 45);
actor->_636 = actor->_636 + (s16)DEG2SHORT_ANGLE2(
(3.0f * actor->_5E8) / (actor->init_data._14 + actor->init_data._10) + 9.0f);
} else {
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), 227, 45);
actor->_636 += DEG2SHORT_ANGLE(10);
}
actor->_622 = add_calc_short_angle2(&actor->_60C.z, actor->_612.z + (s16)(actor->_632 * sin_s(actor->_636)),
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
CALC_EASE2(actor->_5AC.y * 0.25f + 0.25f),
(s16)(DEG2SHORT_ANGLE(actor->_5AC.y * 15.0f + 10.0f) >> 1) >> 1, 22);
add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(actor->_5AC.y * 0.25f + 0.25f),
@@ -154,10 +154,10 @@ void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
if (actor->_5E8 < 0.01f) {
mfish_bass_dummy_process_init(actor);
} else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) {
if ((s16)(actor->_60C.z - actor->_62C) > 0) {
actor->_612.z = actor->_62C + DEG2SHORT_ANGLE(112.5f);
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f);
} else {
actor->_612.z = actor->_62C - DEG2SHORT_ANGLE(112.5f);
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f);
}
actor->_632 = 0;
}
@@ -171,7 +171,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
actor->_61A =
DEG2SHORT_ANGLE((actor->_5AC.y * 4.0f + 4.0f) * (SHORT2DEG_ANGLE2(a) / 120.0f) + 2.0f + actor->_5AC.y);
if (actor->_62E & 0x1e) {
if ((s16)(actor->_60C.x - actor->_62C) < 0) {
if ((s16)(actor->_60C.y - actor->_62C) < 0) {
b = -a;
}
} else if (actor->_62E & 0xC0) {
@@ -181,7 +181,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
b = -ABS(a);
}
} else if (actor->_62E & 0x20) {
if ((s16)(actor->_62A - actor->_60C.x) < 0) {
if ((s16)(actor->_62A - actor->_60C.y) < 0) {
b = -a;
}
}
@@ -192,7 +192,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
actor->_62E |= 0x80;
}
actor->_612.z += b;
actor->_612.y += b;
if ((RANDOM_F(1) < 0.25f) && (actor->_62E & 0x200) == 0) {
actor->_62E |= 0x200;
@@ -228,19 +228,19 @@ void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
v4 = actor->_5AC.y * 0.15f + 0.05f;
if (ABS(actor->_622) > DEG2SHORT_ANGLE(20)) {
add_calc2(&actor->_5E8, v0, v1, v2);
add_calc2(&actor->_5EC, v0, v1, v2);
add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), actor->_5EC * 0.5f, 0.05f);
}
add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), v3, v4);
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), 45);
actor->_622 = add_calc_short_angle2(&actor->_60C.z, ((s16)(sin_s(actor->_636) * actor->_632) + actor->_612.z),
actor->_622 = add_calc_short_angle2(&actor->_60C.y, ((s16)(sin_s(actor->_636) * actor->_632) + actor->_612.y),
CALC_EASE(0.2f), actor->_61A >> 1, 45);
add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(2.5f), 22);
if (ABS((s16)(actor->_60C.z - actor->_612.z)) < DEG2SHORT_ANGLE(2.0f) && actor->_5E8 < 0.1f) {
if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2.0f) && actor->_5E8 < 0.1f) {
if (actor->_63E > 0) {
if (mfish_WallCheck(actor)) {
mfish_bass_tail_anim_set(actor, 1);
@@ -297,9 +297,9 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
mfish_bass_turn_process_init(actor);
}
} else if (actor->_34 == &mfish_bass_normal_process) {
if (((actor->_62E & 0x1e) && ABS((s16)(actor->_60C.z - actor->_62C)) < DEG2SHORT_ANGLE(30)) ||
if (((actor->_62E & 0x1e) && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) ||
((actor->_62E & 0x20) &&
ABS((s16)((actor->_62A - DEG2SHORT_ANGLE(-180)) - actor->_60C.z)) < DEG2SHORT_ANGLE(30))) {
ABS((s16)((actor->_62A - DEG2SHORT_ANGLE(-180)) - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) {
actor->_626 = actor->init_data._2C + (s16)(actor->init_data._2E * fqrand());
actor->_628 = actor->_626;
mfish_bass_tail_anim_set(actor, 1);
@@ -309,7 +309,7 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
actor->_638 += DEG2SHORT_ANGLE(10);
actor->_34(actor, gamex);
if (ABS(actor->_622) > ABS(actor->_61C)) {
if (ABS(actor->_61C) > ABS(actor->_622)) {
add_calc2(&actor->_5E8, MIN(GETREG(TAKREG, 19) * 0.01f + 1.0f, actor->_5E8), GETREG(TAKREG, 18) * 0.01f + 0.2f,
GETREG(TAKREG, 17) * 0.01f + 0.5f);
}
@@ -322,11 +322,13 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
Museum_Fish_BGCheck(actor, gamex);
if (actor->_640 > 0) {
f32 tmp, num, denom;
denom = (actor->init_data._14 + actor->init_data._10);
// needed tmp before the decrement for some reason
tmp = (0.4f + (0.7f * actor->_5AC.y));
actor->_640--;
num = (actor->_5AC.z * (actor->_5F0 - actor->_5E8));
tmp = (actor->_5AC.y * 0.7f + 0.4f);
add_calc2(&actor->_38._00.frame_control.speed, tmp * (1.75f + num / denom), 0.5f, 0.5f);
add_calc2(&actor->_38._00.frame_control.speed,
tmp * (1.75f +
actor->_5AC.z * (actor->_5F0 - actor->_5E8) / ((actor->init_data._14) + actor->init_data._10)),
0.5f, 0.5f);
} else {
add_calc2(&actor->_38._00.frame_control.speed, (actor->_5E8 * 2.0f + 0.5f) * (actor->_5AC.y * 0.8f + 0.6f),
0.2f, 0.1f);
@@ -352,7 +354,7 @@ void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
graph = play->game.graph;
Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0);
Matrix_RotateY(actor->_60C.z, 1);
Matrix_RotateY(actor->_60C.y, 1);
Matrix_translate(0, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1);
Matrix_RotateX(actor->_60C.x, 1);