mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-06-03 10:01:10 -04:00
assorted mfish progress
This commit is contained in:
+54
-26
@@ -17,16 +17,10 @@ typedef struct _FISH_PRIVATE_DATA;
|
||||
typedef void (*PRIV_FISH_CONSTRUCTOR)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
typedef void (*PRIV_FISH_MOVE)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
typedef void (*PRIV_FISH_DRAW)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
typedef void (*PRIV_FISH_PROCESS)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
|
||||
// unsure temp structs
|
||||
|
||||
typedef struct _YET_SKELETON {
|
||||
cKF_SkeletonInfo_R_c _00;
|
||||
Mtx _70;
|
||||
u8 padding[0x200];
|
||||
Mtx _2b0;
|
||||
} YET_SKELETON;
|
||||
|
||||
typedef struct _MUSEUM_FISH_INIT_DATA {
|
||||
f32 _00;
|
||||
f32 _04;
|
||||
@@ -44,18 +38,41 @@ typedef struct _MUSEUM_FISH_INIT_DATA {
|
||||
s16 _30;
|
||||
} MUSEUM_FISH_INIT_DATA; // size: 0x34
|
||||
|
||||
#define artificial_padding(currentOffset, lastOffset, 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);
|
||||
Mtx _2b0;
|
||||
artificial_padding(0x46C, 0x2b0, Mtx);
|
||||
void* _46C;
|
||||
|
||||
artificial_padding(0x4F0, 0x46C, void*);
|
||||
s_xyz _4F0;
|
||||
artificial_padding(0x514, 0x4F0, s_xyz);
|
||||
s_xyz _514;
|
||||
artificial_padding(0x54C, 0x514, s_xyz);
|
||||
void* _54C;
|
||||
void* _550;
|
||||
} YET_SKELETON;
|
||||
|
||||
typedef struct _FISH_PRIVATE_DATA {
|
||||
MUSEUM_FISH_INIT_DATA init_data;
|
||||
void* _34; // function pointer to dummy_process function
|
||||
PRIV_FISH_PROCESS _34; // size:4
|
||||
YET_SKELETON _38;
|
||||
void* _4A4;
|
||||
void* _584;
|
||||
void* _588;
|
||||
|
||||
void* _590;
|
||||
s32 _594;
|
||||
s32 _598;
|
||||
s32 _59C; // fish num
|
||||
xyz_t _5A0;
|
||||
xyz_t _5AC;
|
||||
xyz_t _5B8;
|
||||
artificial_padding(0x5D0, 0x5B8, xyz_t);
|
||||
f32 _5D0;
|
||||
f32 _5D4;
|
||||
f32 _5D8;
|
||||
@@ -64,10 +81,18 @@ typedef struct _FISH_PRIVATE_DATA {
|
||||
f32 _5EC;
|
||||
f32 _5F0;
|
||||
f32 _5F4;
|
||||
s_xz _60C;
|
||||
s_xz _612;
|
||||
f32 _5F8;
|
||||
f32 _5FC;
|
||||
f32 _600;
|
||||
f32 _604;
|
||||
f32 _608;
|
||||
s_xyz _60C;
|
||||
s_xyz _612;
|
||||
artificial_padding(0x61A, 0x612, s_xyz);
|
||||
s16 _61A;
|
||||
s16 _61C;
|
||||
s16 _61E;
|
||||
s16 _620;
|
||||
s16 _622;
|
||||
s16 _624;
|
||||
s16 _626;
|
||||
@@ -79,6 +104,9 @@ typedef struct _FISH_PRIVATE_DATA {
|
||||
s16 _632;
|
||||
s16 _634;
|
||||
s16 _636;
|
||||
s16 _638;
|
||||
s16 _63A;
|
||||
s16 _63C;
|
||||
s16 _63E;
|
||||
s16 _640;
|
||||
} MUSEUM_FISH_PRIVATE_DATA;
|
||||
@@ -155,14 +183,14 @@ BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* priv);
|
||||
s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv);
|
||||
void mfish_dummy_process_init();
|
||||
void mfish_dummy_process();
|
||||
void mfish_normal_process_init();
|
||||
void mfish_normal_process();
|
||||
void mfish_turn_process_init();
|
||||
void mfish_turn_process();
|
||||
void mfish_peck_process_init();
|
||||
void mfish_peck_process();
|
||||
void mfish_ground_peck_process_init();
|
||||
void mfish_ground_peck_process();
|
||||
void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ground_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ground_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
@@ -173,17 +201,17 @@ void mfish_ani_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_BigFishObjCheck();
|
||||
void Museum_Fish_ObjBGCheck();
|
||||
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_BGCheck();
|
||||
void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_Kusa_Check();
|
||||
void Museum_Fish_Object_Check();
|
||||
void mfish_body_wind_anime_play();
|
||||
void mfish_get_player_angle();
|
||||
void mfish_peck_check();
|
||||
void mfish_peck_wall_check();
|
||||
void mfish_ground_peck_before_check();
|
||||
BOOL mfish_peck_check();
|
||||
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();
|
||||
|
||||
+17
-13
@@ -12,6 +12,7 @@
|
||||
#include "m_debug_mode.h"
|
||||
#include "libforest/gbi_extensions.h"
|
||||
#include "m_rcp.h"
|
||||
#include "ac_gyoei.h"
|
||||
|
||||
// found useful macros
|
||||
#define MY_MAX(a, b) (((a) >= (b)) ? (a) : (b))
|
||||
@@ -21,6 +22,10 @@
|
||||
#define CALC_EASE(x) (1 - sqrtf(1 - (x)))
|
||||
#define CALC_EASE2(x) CALC_EASE(CALC_EASE(x))
|
||||
#define SHORT2DEG_ANGLE2(x) ((x) * (360.0f / 65536.0f))
|
||||
#define RANDOMF_RANGE(min, max) ((f32)(min) + (f32)RANDOM_F((f32)(max) - (f32)(min)))
|
||||
#define RANDOM2F_RANGE(min, max) ((f32)(min) + (f32)RANDOM2_F((f32)(max) - (f32)(min)))
|
||||
#define RANDOM_RANGE(min, max) ((int)(min) + (int)RANDOM((int)(max) - (int)(min)))
|
||||
#define RANDOM2_RANGE(min, max) ((int)(min) + (int)RANDOM2((int)(max) - (int)(min)))
|
||||
|
||||
// delete this stuff later
|
||||
typedef Mtx;
|
||||
@@ -678,10 +683,10 @@ void Museum_Fish_Prv_data_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, int
|
||||
actor->_5A0 = ZeroVec;
|
||||
}
|
||||
|
||||
actor->_5A0.y = mfish_init_data[fishNum]._0C + fqrand2() * 10.0f;
|
||||
actor->_5A0.y = mfish_init_data[fishNum]._0C + RANDOM2_F(10);
|
||||
if (r6 == 1) {
|
||||
actor->_5A0.x += fqrand2() * 90.0f;
|
||||
actor->_5A0.z += fqrand2() * 90.0f;
|
||||
actor->_5A0.x += RANDOM2_F(90);
|
||||
actor->_5A0.z += RANDOM2_F(90);
|
||||
}
|
||||
actor->_34 = &mfish_normal_process;
|
||||
mfish_ct[fishNum](actor, game);
|
||||
@@ -721,16 +726,16 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) {
|
||||
for (i = 0; i < 40; i++, prv++) {
|
||||
prv->_62E &= ~1;
|
||||
if (mMmd_FishInfo(i)) {
|
||||
prv->_584 = mfish_model_tbl[i];
|
||||
prv->_588 = mfish_anime_init_tbl[i];
|
||||
prv->_38._550 = mfish_model_tbl[i];
|
||||
prv->_38._550 = mfish_anime_init_tbl[i];
|
||||
prv->_62E |= 1;
|
||||
Museum_Fish_Prv_data_init(prv, gamex, i, 1);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 20; i++) {
|
||||
actor->_14d50[i] = 40.0f + 80.0f * fqrand();
|
||||
actor->_14d78[i] = 2.0f + 3.0f * fqrand();
|
||||
actor->_14d50[i] = RANDOMF_RANGE(80, 120);
|
||||
actor->_14d78[i] = RANDOMF_RANGE(2, 5);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -915,7 +920,7 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) {
|
||||
for (i = 0; i < 40; i++, prv++) {
|
||||
f32 v = search_position_distanceXZ(&p, &prv->_5A0);
|
||||
if (actor->_14db4 == prv->_630 && v < 60.0f) {
|
||||
prv->_626 = fqrand() * 60.0f;
|
||||
prv->_626 = RANDOM_F(60);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -947,11 +952,10 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) {
|
||||
suisou_awa_group[i], 0);
|
||||
if (actor->_14d78[i] > 0) {
|
||||
actor->_14d78[i]--;
|
||||
|
||||
actor->_14d50[i] = fqrand() * 8 + 2;
|
||||
actor->_14d50[i] = RANDOMF_RANGE(2, 10);
|
||||
} else {
|
||||
actor->_14d50[i] = fqrand() * 160 + 80;
|
||||
actor->_14d78[i] = fqrand() * 3 + 2;
|
||||
actor->_14d50[i] = RANDOMF_RANGE(160, 240);
|
||||
actor->_14d78[i] = RANDOMF_RANGE(2, 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -971,7 +975,7 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) {
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
if (i == 2) {
|
||||
actor->_14d78[i] += (s16)DEG2SHORT_ANGLE2((float)GETREG(TAKREG, 20) * 0.1f + 0.5f + fqrand());
|
||||
actor->_14d78[i] += (s16)DEG2SHORT_ANGLE2((float)GETREG(TAKREG, 20) * 0.1f + 0.5f + RANDOM_F(1));
|
||||
} else {
|
||||
actor->_14d78[i] += 8;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
// NOT BAD
|
||||
}
|
||||
|
||||
void mfish_afish_dummy_process_init() {
|
||||
@@ -39,11 +39,12 @@ void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
void mfish_afish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
void mfish_afish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
// NOT BAD
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
|
||||
void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
// NOT BAD
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
|
||||
void mfish_aroana_dummy_process_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -29,6 +31,7 @@ void mfish_aroana_turn_process() {
|
||||
}
|
||||
|
||||
void mfish_aroana_long_move_process_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -41,7 +44,7 @@ void mfish_aroana_base_FishMove() {
|
||||
}
|
||||
|
||||
void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
// NOT BAD
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
@@ -58,7 +61,7 @@ void mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int jo
|
||||
}
|
||||
|
||||
void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
// NOT BAD
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
f32 Rnd_EX_f(f32 v) {
|
||||
f32 rand1 = 2 * fqrand2();
|
||||
f32 rand2 = fqrand();
|
||||
f32 rand1 = RANDOM2_F(2);
|
||||
f32 rand2 = RANDOM_F(1);
|
||||
if (rand2 > (rand1 * rand1)) {
|
||||
if (rand1 > 0) {
|
||||
rand1 = sqrtf(rand2);
|
||||
@@ -12,9 +12,9 @@ f32 Rnd_EX_f(f32 v) {
|
||||
return v * rand1;
|
||||
}
|
||||
|
||||
f32 Rnd_EX_fx(f32 v1) {
|
||||
f32 rand1 = 2 * fqrand2();
|
||||
f32 rand2 = fqrand();
|
||||
f32 Rnd_EX_fx(f32 v) {
|
||||
f32 rand1 = RANDOM2_F(2);
|
||||
f32 rand2 = RANDOM_F(1);
|
||||
if (rand2 > (rand1 * rand1)) {
|
||||
if (rand1 > 0) {
|
||||
rand1 = sqrtf(rand2);
|
||||
@@ -23,7 +23,7 @@ f32 Rnd_EX_fx(f32 v1) {
|
||||
}
|
||||
}
|
||||
rand1 = rand1 / 2;
|
||||
return v1 * rand1;
|
||||
return v * rand1;
|
||||
}
|
||||
|
||||
void mfish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
@@ -36,16 +36,16 @@ void mfish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, 0.025f);
|
||||
}
|
||||
|
||||
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);
|
||||
add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4);
|
||||
|
||||
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));
|
||||
}
|
||||
@@ -87,8 +87,8 @@ BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* prv) {
|
||||
|
||||
p = prv->_5A0;
|
||||
|
||||
p.x += sin_s(prv->_60C.x) * (GETREG(TAKREG, 70) + 30.0f);
|
||||
p.z += cos_s(prv->_60C.x) * (GETREG(TAKREG, 70) + 30.0f);
|
||||
p.x += sin_s(prv->_60C.y) * (GETREG(TAKREG, 70) + 30.0f);
|
||||
p.z += cos_s(prv->_60C.y) * (GETREG(TAKREG, 70) + 30.0f);
|
||||
|
||||
p1 = p;
|
||||
|
||||
@@ -96,18 +96,18 @@ BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* prv) {
|
||||
}
|
||||
|
||||
s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv) {
|
||||
s16 v = priv->_60C.z;
|
||||
if (v > 0 || (priv->_630 == 2 && fqrand() < 0.8f)) {
|
||||
s16 v = priv->_60C.y;
|
||||
if (v > 0 || (priv->_630 == 2 && RANDOM_F(1) < 0.8f)) {
|
||||
if (v > DEG2SHORT_ANGLE(90)) {
|
||||
v = DEG2SHORT_ANGLE(90) + DEG2SHORT_ANGLE(45 * fqrand());
|
||||
v = DEG2SHORT_ANGLE(90) + DEG2SHORT_ANGLE(RANDOM_F(45));
|
||||
} else {
|
||||
v = DEG2SHORT_ANGLE(90) - DEG2SHORT_ANGLE(45 * fqrand());
|
||||
v = DEG2SHORT_ANGLE(90) - DEG2SHORT_ANGLE(RANDOM_F(45));
|
||||
}
|
||||
} else {
|
||||
if (v > DEG2SHORT_ANGLE(-90)) {
|
||||
v = DEG2SHORT_ANGLE(-90) + DEG2SHORT_ANGLE(45 * fqrand());
|
||||
v = DEG2SHORT_ANGLE(-90) + DEG2SHORT_ANGLE(RANDOM_F(45));
|
||||
} else {
|
||||
v = DEG2SHORT_ANGLE(-90) - DEG2SHORT_ANGLE(45 * fqrand());
|
||||
v = DEG2SHORT_ANGLE(-90) - DEG2SHORT_ANGLE(RANDOM_F(45));
|
||||
}
|
||||
}
|
||||
return v;
|
||||
@@ -115,20 +115,20 @@ s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv) {
|
||||
|
||||
void mfish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* prv) {
|
||||
prv->_634 = mfish_get_hide_camera_angle(prv);
|
||||
if (prv->_630 == 2 && prv->_60C.z < 0 && prv->_634 > 0) {
|
||||
if (prv->_630 == 2 && prv->_60C.y < 0 && prv->_634 > 0) {
|
||||
prv->_5F0 = MAX(prv->init_data._10, GETREG(TAKREG, 80) * 0.1f + 1.2f);
|
||||
}
|
||||
prv->_34 = mfish_dummy_process;
|
||||
}
|
||||
|
||||
void mfish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
void mfish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
// no clue what's going on here
|
||||
add_calc_short_angle2(&actor->_612.z, actor->_634, CALC_EASE2(0.0f), DEG2SHORT_ANGLE(3.75f), 0x2d);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.z, actor->_612.z, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d);
|
||||
add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.0f), DEG2SHORT_ANGLE(3.75f), 0x2d);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d);
|
||||
add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d);
|
||||
|
||||
if (actor->_630 == 2) {
|
||||
if (actor->_612.z < 0) {
|
||||
if (actor->_612.y < 0) {
|
||||
actor->_626--;
|
||||
} else {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.05f);
|
||||
@@ -142,7 +142,7 @@ void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
|
||||
f32 t;
|
||||
f32 temp;
|
||||
|
||||
ra = fqrand() * fishActor->init_data._14 + fishActor->init_data._10;
|
||||
ra = RANDOM_F(fishActor->init_data._14) + fishActor->init_data._10;
|
||||
t = (ra) / MAX(fishActor->init_data._14 + fishActor->init_data._10, 1);
|
||||
|
||||
if (ra > fishActor->_5E8) {
|
||||
@@ -155,30 +155,30 @@ void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
|
||||
atans_table(fishActor->_5E8, fishActor->_5F4 + fishActor->init_data._0C - fishActor->_5A0.y) >> 4;
|
||||
fishActor->_5D4 = 0;
|
||||
|
||||
if (fqrand() > fishActor->init_data._1C) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 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);
|
||||
}
|
||||
|
||||
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);
|
||||
@@ -188,7 +188,7 @@ void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
|
||||
fishActor->_34 = mfish_normal_process;
|
||||
}
|
||||
|
||||
void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_632 > DEG2SHORT_ANGLE(20)) {
|
||||
add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.2f),
|
||||
(((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.04f + 0.1f) * 0.5f, 0.05f);
|
||||
@@ -197,70 +197,327 @@ void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
}
|
||||
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f));
|
||||
actor->_636 += DEG2SHORT_ANGLE(10.0f);
|
||||
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(0.5f), DEG2SHORT_ANGLE(6.25f), 45);
|
||||
add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(3.75f), 45);
|
||||
|
||||
if (actor->_5E8 < 0.01f || actor->_630 == 2 && actor->_5E8 < 0.05f) {
|
||||
mfish_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;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_turn_process_init() {
|
||||
return;
|
||||
void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
s16 v = DEG2SHORT_ANGLE(RANDOM_F(75.0f)) + DEG2SHORT_ANGLE(45);
|
||||
actor->_61A =
|
||||
DEG2SHORT_ANGLE(((actor->_5E8 + 0.5f) / (actor->init_data._10 + actor->init_data._14 + 0.5f)) * 7.5f + 7.5f);
|
||||
|
||||
if (actor->_62E & 0xC0) {
|
||||
if (actor->_62E & 0x40) {
|
||||
v = ABS(v);
|
||||
} else {
|
||||
v = -ABS(v);
|
||||
}
|
||||
} else if (actor->_62E & 0x1e) {
|
||||
if ((s16)(actor->_62C - actor->_60C.y) < 0) {
|
||||
v = -v;
|
||||
} else {
|
||||
v = v;
|
||||
}
|
||||
} else if (actor->_62E & 0x20) {
|
||||
if ((s16)(actor->_62A - actor->_60C.y) < 0) {
|
||||
v = -v;
|
||||
} else {
|
||||
v = v;
|
||||
}
|
||||
}
|
||||
|
||||
if (v > 0) {
|
||||
actor->_62E |= 0x40;
|
||||
} else {
|
||||
actor->_62E |= 0x80;
|
||||
}
|
||||
|
||||
actor->_612.y += v;
|
||||
|
||||
if (actor->_630 == 2) {
|
||||
s16 tmp = actor->_612.y + DEG2SHORT_ANGLE(90);
|
||||
if (tmp > DEG2SHORT_ANGLE(135)) {
|
||||
actor->_612.y = DEG2SHORT_ANGLE(-45);
|
||||
} else if (tmp > DEG2SHORT_ANGLE(-135)) {
|
||||
actor->_612.y = DEG2SHORT_ANGLE(-135);
|
||||
}
|
||||
}
|
||||
|
||||
actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.7f;
|
||||
|
||||
if (fqrand() < 0.2f) {
|
||||
actor->_63E = fqrand() * 3.0f + 1.0f;
|
||||
} else {
|
||||
actor->_63E = 0;
|
||||
}
|
||||
actor->_34 = mfish_turn_process;
|
||||
}
|
||||
|
||||
void mfish_turn_process() {
|
||||
return;
|
||||
void mfish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (ABS(actor->_622) > DEG2SHORT_ANGLE(20)) {
|
||||
add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), (GETREG(TAKREG, 0x4e) * 0.01f + 0.5f) * 0.5f, 0.05f);
|
||||
}
|
||||
add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), 0.5f, 0.2f);
|
||||
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
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 (actor->_63E > 0) {
|
||||
if (mfish_WallCheck(actor)) {
|
||||
mfish_turn_process_init(actor);
|
||||
} else {
|
||||
mfish_normal_process_init(actor);
|
||||
}
|
||||
actor->_63E--;
|
||||
} else {
|
||||
mfish_dummy_process_init(actor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_peck_process_init() {
|
||||
return;
|
||||
void mfish_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
f32 fVar8;
|
||||
f32 fVar9;
|
||||
int t;
|
||||
s16 atanx;
|
||||
s16 atany;
|
||||
f32 dist;
|
||||
|
||||
actor->_5D4 = 0.0f;
|
||||
mfish_get_player_angle(actor, game, &atanx, &atany, &dist);
|
||||
fVar9 = (actor->init_data)._14 + (actor->init_data)._10;
|
||||
|
||||
if (dist < 20.0f) {
|
||||
fVar9 *= 0.75f;
|
||||
actor->_5F0 = MAX(fVar9, 0.5f);
|
||||
}
|
||||
|
||||
if (fVar9 > actor->_5E8) {
|
||||
actor->_5F0 = fVar9;
|
||||
}
|
||||
|
||||
fVar8 = (fVar9 / 8.0f);
|
||||
|
||||
if (ABS((s16)(atanx - actor->_60C.y)) < actor->init_data._30) {
|
||||
actor->_612.y = atanx;
|
||||
} else if ((s16)(atanx - actor->_60C.y) > 0) {
|
||||
actor->_612.y = actor->_60C.y + actor->init_data._30;
|
||||
} else {
|
||||
actor->_612.y = actor->_60C.y - actor->init_data._30;
|
||||
}
|
||||
|
||||
if (atany < 0) {
|
||||
actor->_5F4 = actor->_5F4 + fqrand() * 2.5f;
|
||||
actor->_5F4 = MAX(MIN(10, actor->_5F4), -10);
|
||||
|
||||
} else {
|
||||
actor->_5F4 = actor->_5F4 - fqrand() * 2.5f;
|
||||
actor->_5F4 = MAX(MIN(10, actor->_5F4), -10);
|
||||
}
|
||||
|
||||
actor->_632 = DEG2SHORT_ANGLE((fVar8 * 30.0f) + 20.0f);
|
||||
|
||||
if (qrand() & 0x8000) {
|
||||
actor->_636 = 0x4000;
|
||||
} else {
|
||||
actor->_636 = -0x4000;
|
||||
}
|
||||
|
||||
actor->_62E &= ~0xC0;
|
||||
actor->_34 = mfish_peck_process;
|
||||
}
|
||||
|
||||
void mfish_peck_process() {
|
||||
return;
|
||||
void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 atanx;
|
||||
s16 atany;
|
||||
f32 dist;
|
||||
|
||||
mfish_get_player_angle(actor, gamex, &atanx, &atany, &dist);
|
||||
|
||||
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);
|
||||
} 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) {
|
||||
add_calc2(&actor->_5E8, MAX(actor->_5E8, 0.4f), 0.25f, 0.05f);
|
||||
}
|
||||
|
||||
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f));
|
||||
actor->_636 += DEG2SHORT_ANGLE(10);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632),
|
||||
CALC_EASE2(0.5f), DEG2SHORT_ANGLE(6.25f), DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f));
|
||||
|
||||
if (mfish_peck_wall_check(actor, gamex)) {
|
||||
if (fqrand() < 0.9f) {
|
||||
actor->_5E8 = -0.3f - fqrand() * 0.3f;
|
||||
actor->_626 = 10;
|
||||
} else {
|
||||
actor->_5E8 = -0.5f;
|
||||
actor->_626 = actor->init_data._2C + (s16)(fqrand() * actor->init_data._2E);
|
||||
actor->_626 >>= 3;
|
||||
}
|
||||
actor->_628 = actor->_626;
|
||||
actor->_5F0 = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_ground_peck_process_init() {
|
||||
return;
|
||||
void mfish_ground_peck_process_init(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 + 65.0f) - MAX(ABS(p.x), ABS(p.z)) * 0.15f) - actor->init_data._0C;
|
||||
actor->_612.x = DEG2SHORT_ANGLE(60);
|
||||
actor->_626 = (int)(Rnd_EX_f(30.0f) + 15.0f) << 1;
|
||||
|
||||
if (actor->_34 != mfish_ground_peck_process) {
|
||||
actor->_63E = fqrand() * 2.0f + 3.0f;
|
||||
} else {
|
||||
actor->_63E--;
|
||||
}
|
||||
|
||||
actor->_5F0 = 0.5f;
|
||||
actor->_34 = mfish_ground_peck_process;
|
||||
}
|
||||
|
||||
void mfish_ground_peck_process() {
|
||||
return;
|
||||
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;
|
||||
xyz_t_mult_v(&actor->_5DC, 0.1f);
|
||||
|
||||
if (actor->_5A0.y > actor->_5F4 + actor->init_data._0C + 4.0f) {
|
||||
if (actor->_612.x < DEG2SHORT_ANGLE(40)) {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(40);
|
||||
}
|
||||
actor->_626++;
|
||||
add_calc2(&actor->_5F0, 0.5f, 0.6f, 0.5f);
|
||||
} else if ((s16)(actor->_612.x - actor->_60C.x) > 0) {
|
||||
add_calc2(&actor->_5F0, 0.2f, 0.5f, 0.4f);
|
||||
} else {
|
||||
if (actor->_5E8 > 0) {
|
||||
actor->_5E8 = -0.2f;
|
||||
} else {
|
||||
add_calc0(&actor->_5F0, 0.2f, 0.1f);
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_612.x < DEG2SHORT_ANGLE(15)) {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(15);
|
||||
}
|
||||
|
||||
add_calc(&actor->_5E8, actor->_5F0 * cos_s(actor->_60C.x), CALC_EASE(0.5f), 0.25f, 0.05f);
|
||||
|
||||
mfish_dummy_process(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
GAME_PLAY* play = (GAME_PLAY*)gamex;
|
||||
f32 f = fqrand() * 2;
|
||||
f32 s;
|
||||
s16 q = qrand();
|
||||
actor->_5E8 = f;
|
||||
actor->_5D0 = cos_s(q) * f;
|
||||
actor->_5D8 = sin_s(q) * f;
|
||||
actor->_60C.y = q;
|
||||
actor->_612.y = actor->_60C.y;
|
||||
if (actor->_59C == 4 || actor->_59C == 9) {
|
||||
actor->_5F4 = 0.0f;
|
||||
} else if (actor->_59C == 0x1b) {
|
||||
actor->_5F4 = fqrand() * 5.0f;
|
||||
} else {
|
||||
actor->_5F4 = fqrand2() * 10.0f;
|
||||
}
|
||||
actor->_5D4 = 0.0;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_63E = qrand();
|
||||
actor->_622 = actor->_60C.y;
|
||||
}
|
||||
|
||||
void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
|
||||
if (actor->_5F8 > actor->init_data._08 * 20.0f) {
|
||||
actor->_5F8 = 0.0f;
|
||||
actor->_626 = 0;
|
||||
}
|
||||
|
||||
if (actor->_626-- <= 0) {
|
||||
actor->_626 = actor->init_data._2C + (s16)(fqrand() * actor->init_data._2E);
|
||||
actor->_628 = actor->_626;
|
||||
if (mfish_peck_check(actor, gamex)) {
|
||||
actor->_626 >>= 2;
|
||||
actor->_628 = actor->_626;
|
||||
mfish_peck_process_init(actor, gamex);
|
||||
} else if (mfish_WallCheck(actor)) {
|
||||
mfish_turn_process_init(actor);
|
||||
} else if (mfish_ground_peck_before_check(actor, gamex)) {
|
||||
mfish_ground_peck_process_init(actor, gamex);
|
||||
} else {
|
||||
mfish_normal_process_init(actor);
|
||||
}
|
||||
} else if (actor->_34 == mfish_normal_process) {
|
||||
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.y)) < DEG2SHORT_ANGLE(30))) {
|
||||
actor->_626 = actor->init_data._2C + (s16)(fqrand() * actor->init_data._2E);
|
||||
actor->_628 = actor->_626;
|
||||
mfish_turn_process_init(actor);
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_624 == 10) {
|
||||
actor->_5AC.y = 0;
|
||||
actor->_5A0.y = actor->init_data._0C;
|
||||
} else if (actor->_630 == 2) {
|
||||
actor->_5AC.y = sin_s(actor->_638) * 0.2f;
|
||||
} else {
|
||||
actor->_5AC.y = 0;
|
||||
}
|
||||
|
||||
actor->_638 += DEG2SHORT_ANGLE(10);
|
||||
actor->_34(actor, gamex);
|
||||
|
||||
if (ABS(actor->_61C) > ABS(actor->_622)) {
|
||||
add_calc2(&actor->_5E8, MIN(GETREG(TAKREG, 19) * 0.1f + 0.2f, actor->_5E8), 0.2f, 0.5f);
|
||||
}
|
||||
|
||||
add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.1f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f));
|
||||
add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.1f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.5f));
|
||||
mfish_base_FishMove(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
YET_SKELETON* huh = &actor->_38;
|
||||
// looks like it loads from 0x38, which i labeled as the skeleton,
|
||||
// but then it adds like 0x514 to it, so this must be huge
|
||||
|
||||
// cKF_SkeletonInfo_R_ct(&huh->_00, huh->_00); //TODO
|
||||
YET_SKELETON* s = &actor->_38;
|
||||
cKF_SkeletonInfo_R_ct(&s->_00, s->_54C, s->_550, &s->_4F0, &s->_514);
|
||||
cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&s->_00, s->_550, NULL, 1.875f, 0.0f);
|
||||
actor->_626 = actor->init_data._2C + (s16)(actor->init_data._2E * fqrand());
|
||||
actor->_628 = actor->_626;
|
||||
actor->_60C.x = DEG2SHORT_ANGLE(0);
|
||||
actor->_60C.y = DEG2SHORT_ANGLE(-90);
|
||||
actor->_60C.z = DEG2SHORT_ANGLE(0);
|
||||
actor->_5DC = ZeroVec;
|
||||
return;
|
||||
}
|
||||
|
||||
void mfish_onefish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
cKF_SkeletonInfo_R_play(&actor->_38._00);
|
||||
return;
|
||||
}
|
||||
|
||||
int mfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg,
|
||||
@@ -292,8 +549,8 @@ void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
YET_SKELETON* skele;
|
||||
Mtx* mtx;
|
||||
GAME_PLAY* play;
|
||||
GRAPH* graph;
|
||||
GAME_PLAY* play;
|
||||
|
||||
play = (GAME_PLAY*)gamex;
|
||||
skele = &actor->_38;
|
||||
@@ -307,9 +564,9 @@ void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
graph = play->game.graph;
|
||||
|
||||
Matrix_translate(actor->_5A0.x, actor->_5A0.y + actor->_5AC.y, actor->_5A0.z, 0);
|
||||
Matrix_RotateY(actor->_60C.z, 1);
|
||||
Matrix_RotateY(actor->_60C.y, 1);
|
||||
|
||||
Matrix_translate(0.0f, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1);
|
||||
Matrix_translate(0.0f, 0.25f * actor->init_data._04, 1.5f * actor->init_data._24, 1);
|
||||
Matrix_RotateX(actor->_60C.x, 1);
|
||||
Matrix_RotateZ(MY_CLAMP(-(actor->_61C >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1);
|
||||
Matrix_translate(0.0f, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1);
|
||||
@@ -328,32 +585,289 @@ void mfish_ani_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
GAME_PLAY* play = (GAME_PLAY*)gamex;
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
mfish_base_mv(actor, gamex);
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
|
||||
if (actor->_630 == 2) {
|
||||
actor->_38._00.frame_control.speed =
|
||||
(actor->_5E8 * 3.0f) / (actor->init_data._10 + actor->init_data._14) + 1.0f;
|
||||
} else if (actor->_59C == 0xe || actor->_59C == 0x1 || actor->_59C == 0) {
|
||||
if (actor->_5F0 - 0.1f > actor->_5E8 && actor->_34 == mfish_normal_process && actor->_626 > actor->_628 - 10) {
|
||||
actor->_38._00.frame_control.speed =
|
||||
((actor->_5F0 - actor->_5E8) * 3.0f) / (actor->init_data._10 + actor->init_data._14) + 1.5f;
|
||||
} else {
|
||||
add_calc2(&actor->_38._00.frame_control.speed, 2.0f * actor->_5E8 + 0.5f, 0.2f, 0.1f);
|
||||
}
|
||||
} else {
|
||||
if (actor->_626 > actor->_628 - 10 && actor->_5F0 > 0) {
|
||||
actor->_38._00.frame_control.speed =
|
||||
(actor->_5E8 * 4.0f) / (actor->init_data._10 + actor->init_data._14) + 1.25f;
|
||||
} else {
|
||||
add_calc2(&actor->_38._00.frame_control.speed, 2.0f * actor->_5E8 + 0.5f, 0.2f, 0.1f);
|
||||
}
|
||||
}
|
||||
|
||||
mfish_body_wind_anime_play(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
// NOT BAD
|
||||
}
|
||||
|
||||
void Museum_Fish_BigFishObjCheck() {
|
||||
return;
|
||||
void Museum_Fish_BigFishObjCheck(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
int i;
|
||||
MUSEUM_FISH_PRIVATE_DATA* fish[2];
|
||||
f32 max[2] = { 430.0f, 530.0f };
|
||||
fish[0] = &MF_Control_Actor->prvFish[aGYO_TYPE_ARAPAIMA];
|
||||
fish[1] = &MF_Control_Actor->prvFish[aGYO_TYPE_GIANT_SNAKEHEAD];
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
f32 v;
|
||||
xyz_t ip = fish[i]->_5B8;
|
||||
xyz_t op;
|
||||
f32 f27 = actor->init_data._08 * (sin_s(actor->_60C.y) * 0.3f + 0.7f) + fish[i]->init_data._08;
|
||||
f32 f26 = 10.f + (actor->init_data._08 * (0.7f + 0.3f * cos_s(actor->_60C.y)));
|
||||
f32 f25 = actor->init_data._04 + fish[i]->init_data._04;
|
||||
xyz_t_sub(&actor->_5B8, &ip, &op);
|
||||
if (ABS(op.z) < f26 && ABS(op.y) < f25 && ABS(op.x) < f27) {
|
||||
f27 -= ABS(op.x);
|
||||
f26 -= ABS(op.z);
|
||||
f25 -= ABS(op.y);
|
||||
if (f25 < MIN(f27, f26)) {
|
||||
if (op.y < 0) {
|
||||
actor->_5A0.y -= MIN(f25, 0.25f);
|
||||
fish[i]->_5A0.y += MIN(f25, 0.05f);
|
||||
} else {
|
||||
actor->_5A0.y += MIN(f25, 0.25f);
|
||||
fish[i]->_5A0.y -= MIN(f25, 0.05f);
|
||||
}
|
||||
} else if (f26 < f27) {
|
||||
v = ABS(cos_s(actor->_60C.y) * actor->_5E8);
|
||||
if (op.z < 0) {
|
||||
actor->_5A0.z -= MIN(f26, MAX(0.5f, v));
|
||||
if (fish[i]->_5B8.z < max[i] + 10.0f) {
|
||||
fish[i]->_5A0.z += MIN(f26, 0.05f);
|
||||
}
|
||||
} else {
|
||||
actor->_5A0.z += MIN(f26, MAX(0.5f, v));
|
||||
if (fish[i]->_5B8.z > max[i] - 10.0f) {
|
||||
fish[i]->_5A0.z -= MIN(f26, 0.05f);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
v = ABS(sin_s(actor->_60C.y) * actor->_5E8);
|
||||
if (op.x < 0) {
|
||||
actor->_5A0.x -= MIN(f27, MAX(0.5f, v));
|
||||
fish[i]->_5A0.x += MIN(f27, 0.05f);
|
||||
} else {
|
||||
actor->_5A0.x += MIN(f27, MAX(0.5f, v));
|
||||
fish[i]->_5A0.x -= MIN(f27, 0.05f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Museum_Fish_ObjBGCheck() {
|
||||
return;
|
||||
void Museum_Fish_ObjBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex, f32 f1, f32 f2) {
|
||||
xyz_t p = suisou_pos[actor->_630];
|
||||
f32 a, b, c, d, e;
|
||||
|
||||
switch (actor->_630) {
|
||||
case 0:
|
||||
e = 85.0f;
|
||||
a = -20.0f + p.x;
|
||||
b = 1000.0f + p.x;
|
||||
c = -25.0f + p.z;
|
||||
d = -1000.0f + p.z;
|
||||
break;
|
||||
case 1:
|
||||
a = -5.0f + p.x;
|
||||
c = -10.0f + p.z;
|
||||
b = 1000.0f + p.x;
|
||||
d = -1000.0f + p.z;
|
||||
// needs cast, temp doesn't work
|
||||
e = 75.0f - cos_s((int)DEG2SHORT_ANGLE(180.0f * (actor->_5B8.x - a) / 70.0f)) * 5.0f;
|
||||
break;
|
||||
case 2:
|
||||
e = 80.0f;
|
||||
a = -1000.0f + p.x;
|
||||
b = -5.0f + p.x;
|
||||
c = -20.0f + p.z;
|
||||
d = -1000.0f + p.z;
|
||||
break;
|
||||
case 3:
|
||||
e = 75.0f;
|
||||
a = -20.0f + p.x;
|
||||
b = 1000.0f + p.x;
|
||||
c = -5.0f + p.z;
|
||||
d = -1000.0f + p.z;
|
||||
break;
|
||||
case 4:
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
e -= actor->_5A0.y;
|
||||
if (e > 0.0f) {
|
||||
f32 v1, v2;
|
||||
b -= (actor->_5A0.x + (actor->init_data._28 * f1));
|
||||
a -= (actor->_5A0.x - (actor->init_data._28 * f1));
|
||||
c -= (actor->_5A0.z + (actor->init_data._28 * f2));
|
||||
d -= (actor->_5A0.z - (actor->init_data._28 * f2));
|
||||
if (b > 0.0f && c > 0.0f && a < 0.0f && d < 0.0f) {
|
||||
if (b > -a) {
|
||||
if ((actor->_62E & 2) == 0) {
|
||||
actor->_62E |= 4;
|
||||
}
|
||||
v1 = a;
|
||||
} else {
|
||||
if ((actor->_62E & 4) == 0) {
|
||||
actor->_62E |= 2;
|
||||
}
|
||||
v1 = b;
|
||||
}
|
||||
|
||||
if (c > -d) {
|
||||
if ((actor->_62E & 8) == 0) {
|
||||
actor->_62E |= 0x10;
|
||||
}
|
||||
v2 = d;
|
||||
} else {
|
||||
if ((actor->_62E & 0x10) == 0) {
|
||||
actor->_62E |= 8;
|
||||
}
|
||||
v2 = c;
|
||||
}
|
||||
|
||||
if (e < MIN(ABS(v2), ABS(v1)) && actor->_624 != 10) {
|
||||
actor->_5A0.y += e;
|
||||
if (actor->_624 == 3) {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(45);
|
||||
} else if (actor->_59C == 15) {
|
||||
if (actor->_612.x > DEG2SHORT_ANGLE(30)) {
|
||||
actor->_612.x -= DEG2SHORT_ANGLE(2);
|
||||
} else if (actor->_612.x < DEG2SHORT_ANGLE(-30)) {
|
||||
actor->_612.x += DEG2SHORT_ANGLE(2);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (ABS(v2) < ABS(v1)) {
|
||||
actor->_5A0.z += v2;
|
||||
} else {
|
||||
actor->_5A0.x += v1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Museum_Fish_DonkoBGCheck() {
|
||||
return;
|
||||
void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 a, b, c, d;
|
||||
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;
|
||||
actor->_62E &= ~0x1e;
|
||||
actor->_62C = 0;
|
||||
Museum_Fish_objchk_pos_set(actor, gamex);
|
||||
// asm 17C
|
||||
a = (+00.0f + p.x);
|
||||
b = (-45.5f + p.x);
|
||||
c = (+45.0f + p.z);
|
||||
d = (-17.5f + 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));
|
||||
|
||||
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);
|
||||
d -= (actor->_5A0.z - actor->init_data._28 * v2);
|
||||
|
||||
/*
|
||||
f31 = a
|
||||
f30 = b
|
||||
f28 = c
|
||||
f29 = d
|
||||
*/
|
||||
|
||||
actor->_5FC = -a;
|
||||
actor->_600 = b;
|
||||
actor->_604 = -c;
|
||||
actor->_608 = d;
|
||||
|
||||
// asm 2E8
|
||||
f27 -= actor->_5A0.y;
|
||||
f26 -= actor->_5A0.y;
|
||||
if (a > 0.0f) {
|
||||
actor->_5FC = 0.0f;
|
||||
actor->_5A0.x += a;
|
||||
actor->_62E |= 2;
|
||||
} else if (b < 0.0f) {
|
||||
actor->_600 = 0.0f;
|
||||
actor->_5A0.x += b;
|
||||
actor->_62E |= 4;
|
||||
}
|
||||
|
||||
if (c > 0.0f) {
|
||||
actor->_604 = 0.0f;
|
||||
actor->_5A0.z += c;
|
||||
actor->_62E |= 0x8;
|
||||
} else if (d < 0.0f) {
|
||||
actor->_608 = 0.0f;
|
||||
actor->_5A0.z += d;
|
||||
actor->_62E |= 0x10;
|
||||
}
|
||||
|
||||
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);
|
||||
} else {
|
||||
actor->_62C = DEG2SHORT_ANGLE(-180);
|
||||
}
|
||||
} else if (actor->_62E & 0x10) {
|
||||
if (actor->_62E & 6) {
|
||||
actor->_62C = (actor->_62C >> 1);
|
||||
} else {
|
||||
actor->_62C = 0;
|
||||
}
|
||||
}
|
||||
|
||||
f25 = MIN(MIN(actor->_608, actor->_604), MIN(actor->_5FC, actor->_600));
|
||||
if (f25 < 5.0f) {
|
||||
f27 -= 0.5f * (5.0f - f25);
|
||||
}
|
||||
|
||||
f25 = MIN(MIN(actor->_608 - cos_s(actor->_60C.y), actor->_604 + cos_s(actor->_60C.y)),
|
||||
MIN(actor->_600 - sin_s(actor->_60C.y), actor->_5FC + sin_s(actor->_60C.y)));
|
||||
// asm 5D8
|
||||
if (f25 < 5.0f) {
|
||||
f26 -= 0.5f * (5.0f - f25);
|
||||
}
|
||||
f26 -= f27;
|
||||
actor->_612.x = atans_table(1.0f, -f26);
|
||||
if (f27 > 0.0f) {
|
||||
actor->_5A0.y += f27;
|
||||
actor->_5D4 *= 0.95f;
|
||||
}
|
||||
}
|
||||
|
||||
void Museum_Fish_objchk_pos_set() {
|
||||
return;
|
||||
// NOT BAD
|
||||
}
|
||||
|
||||
void Museum_Fish_BGCheck() {
|
||||
void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -369,19 +883,36 @@ void mfish_body_wind_anime_play() {
|
||||
return;
|
||||
}
|
||||
|
||||
void mfish_get_player_angle() {
|
||||
void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* atanx, s16* atany, f32* distance) {
|
||||
PLAYER_ACTOR* playerActor = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
xyz_t p;
|
||||
xyz_t p1;
|
||||
f32 v;
|
||||
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 = sqrtf(v);
|
||||
if (atanx) {
|
||||
*atanx = atans_table(p1.z, p1.x);
|
||||
}
|
||||
if (atany) {
|
||||
*atany = atans_table(v, -p1.y);
|
||||
}
|
||||
if (distance) {
|
||||
*distance = v;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL mfish_peck_check() {
|
||||
return;
|
||||
}
|
||||
|
||||
void mfish_peck_check() {
|
||||
return;
|
||||
BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
// NOT BAD
|
||||
}
|
||||
|
||||
void mfish_peck_wall_check() {
|
||||
return;
|
||||
}
|
||||
|
||||
void mfish_ground_peck_before_check() {
|
||||
BOOL mfish_ground_peck_before_check() {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -63,10 +63,10 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
|
||||
f32 t;
|
||||
f32 temp;
|
||||
|
||||
ra = fqrand() * fishActor->init_data._14 + fishActor->init_data._10;
|
||||
ra = RANDOM_F(fishActor->init_data._14) + fishActor->init_data._10;
|
||||
t = (ra) / MAX(fishActor->init_data._14 + fishActor->init_data._10, 1);
|
||||
|
||||
if (fqrand() > 0.25f && !(fishActor->_62E & 0x200)) {
|
||||
if (RANDOM_F(1) > 0.25f && !(fishActor->_62E & 0x200)) {
|
||||
fishActor->_62E |= 0x200;
|
||||
} else {
|
||||
fishActor->_62E &= ~0x200;
|
||||
@@ -86,7 +86,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
|
||||
fishActor->_612.x = CLAMP(fishActor->_612.x, DEG2SHORT_ANGLE(-50), DEG2SHORT_ANGLE(50));
|
||||
fishActor->_5D4 = 0;
|
||||
|
||||
if (fqrand() > fishActor->init_data._1C) {
|
||||
if (RANDOM_F(1) > fishActor->init_data._1C) {
|
||||
int diff;
|
||||
|
||||
fishActor->_612.z += (s16)Rnd_EX_fx(fishActor->init_data._30 * 2.0f);
|
||||
@@ -128,7 +128,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
|
||||
fishActor->_34 = mfish_bass_normal_process;
|
||||
}
|
||||
|
||||
void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
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,
|
||||
@@ -167,7 +167,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
s16 a;
|
||||
s16 b;
|
||||
|
||||
b = a = 0x2000 + DEG2SHORT_ANGLE(fqrand() * 75.0f);
|
||||
b = a = 0x2000 + DEG2SHORT_ANGLE(RANDOM_F(75));
|
||||
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) {
|
||||
@@ -194,7 +194,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
|
||||
actor->_612.z += b;
|
||||
|
||||
if ((fqrand() < 0.25f) && (actor->_62E & 0x200) == 0) {
|
||||
if ((RANDOM_F(1) < 0.25f) && (actor->_62E & 0x200) == 0) {
|
||||
actor->_62E |= 0x200;
|
||||
} else {
|
||||
actor->_62E &= ~0x200;
|
||||
@@ -208,8 +208,8 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
actor->_5AC.x = Rnd_EX_fx(0.1f) + 0.15f;
|
||||
}
|
||||
|
||||
if (fqrand() < 0.2f) {
|
||||
actor->_63E = (s16)(fqrand() * 3.0f + 1.0f);
|
||||
if (RANDOM_F(1) < 0.2f) {
|
||||
actor->_63E = RANDOMF_RANGE(1, 4);
|
||||
} else {
|
||||
actor->_63E = 0;
|
||||
}
|
||||
@@ -220,7 +220,40 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
|
||||
void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
int a;
|
||||
if (ABS(actor->_622) > DEG2SHORT_ANGLE(20)) {}
|
||||
f32 v0, v1, v2, v3, v4;
|
||||
v0 = actor->_5AC.y * 0.2f + 0.05f;
|
||||
v1 = actor->_5AC.y * 0.04f + 0.01f;
|
||||
v2 = actor->_5AC.y * 0.04f + 0.01f;
|
||||
v3 = actor->_5AC.y * 0.15f + 0.1f;
|
||||
v4 = actor->_5AC.y * 0.15f + 0.05f;
|
||||
|
||||
if (ABS(actor->_622) > DEG2SHORT_ANGLE(20)) {
|
||||
add_calc2(&actor->_5E8, 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),
|
||||
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 (actor->_63E > 0) {
|
||||
if (mfish_WallCheck(actor)) {
|
||||
mfish_bass_tail_anim_set(actor, 1);
|
||||
mfish_bass_turn_process_init(actor);
|
||||
|
||||
} else {
|
||||
mfish_bass_normal_process_init(actor);
|
||||
}
|
||||
actor->_63E--;
|
||||
} else {
|
||||
mfish_bass_dummy_process_init(actor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
@@ -245,9 +278,59 @@ void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
if (actor->_5F8 > actor->init_data._08 * 20.0f) {
|
||||
actor->_5F8 = 0.0f;
|
||||
actor->_626 = 0;
|
||||
}
|
||||
|
||||
if (actor->_626-- <= 0) {
|
||||
actor->_626 = actor->init_data._2C + (s16)(RANDOM_F(actor->init_data._2E));
|
||||
actor->_628 = actor->_626;
|
||||
|
||||
if (mfish_WallCheck(actor)) {
|
||||
mfish_bass_tail_anim_set(actor, 1);
|
||||
mfish_bass_turn_process_init(actor);
|
||||
} else {
|
||||
mfish_bass_tail_anim_set(actor, 0);
|
||||
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)) ||
|
||||
((actor->_62E & 0x20) &&
|
||||
ABS((s16)((actor->_62A - DEG2SHORT_ANGLE(-180)) - actor->_60C.z)) < 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);
|
||||
mfish_bass_turn_process_init(actor);
|
||||
}
|
||||
}
|
||||
actor->_638 += DEG2SHORT_ANGLE(10);
|
||||
actor->_34(actor, gamex);
|
||||
|
||||
if (ABS(actor->_622) > ABS(actor->_61C)) {
|
||||
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);
|
||||
}
|
||||
|
||||
add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.05f), DEG2SHORT_ANGLE(actor->_5AC.y + 3.0f) >> 1,
|
||||
9);
|
||||
add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.05f), DEG2SHORT_ANGLE(actor->_5AC.y * 0.5f + 2.0f) >> 1, 9);
|
||||
|
||||
mfish_bass_base_FishMove(actor, gamex);
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
if (actor->_640 > 0) {
|
||||
f32 tmp, num, denom;
|
||||
denom = (actor->init_data._14 + actor->init_data._10);
|
||||
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);
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
@@ -16,6 +16,7 @@ void mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi
|
||||
}
|
||||
|
||||
void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
// NOT BAD
|
||||
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
|
||||
@@ -5,6 +5,7 @@ void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_dojou_normal_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -13,6 +14,7 @@ void mfish_dojou_normal() {
|
||||
}
|
||||
|
||||
void mfish_dojou_turn_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
void mfish_donko_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) {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
|
||||
void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
// NOT BAD
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
|
||||
void mfish_gupi_normal_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -13,6 +15,7 @@ void mfish_gupi_normal() {
|
||||
}
|
||||
|
||||
void mfish_gupi_turn_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -35,4 +38,4 @@ void mfish_gupi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ void mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint
|
||||
|
||||
void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
// NOT BAD
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_kaseki_normal_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -31,4 +32,4 @@ void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_kingyo_normal_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -13,6 +14,7 @@ void mfish_kingyo_normal() {
|
||||
}
|
||||
|
||||
void mfish_kingyo_turn_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -21,6 +23,7 @@ void mfish_kingyo_turn() {
|
||||
}
|
||||
|
||||
void mfish_kingyo_peck_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -43,4 +46,4 @@ void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,28 +1,21 @@
|
||||
|
||||
void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) {
|
||||
f32 temp;
|
||||
f32 temp2;
|
||||
f32 temp3;
|
||||
if (r4 == 0) {
|
||||
actor->_640 = (int)(6.0f * fqrand()) + 25;
|
||||
//! BUG: fqrand2 called without being used
|
||||
// Maybe some kind of min-max macro, where we're multiplying fqrand2 by 0 (temp - temp),
|
||||
// but including fqrand2() directly in the equation below generates extra fmuls instr for some reason.
|
||||
// The only way around it we found was to call it like this.
|
||||
fqrand2();
|
||||
temp = 6.5f;
|
||||
actor->_5AC.x = temp + (f32)(temp - temp);
|
||||
actor->_640 = RANDOM_RANGE(25, 31);
|
||||
actor->_5AC.x = RANDOM2F_RANGE(6.5f, 6.5f);
|
||||
} else if (r4 == 1) {
|
||||
if (actor->_640 == 0) {
|
||||
actor->_640 = (int)(4.0f * fqrand()) + 20;
|
||||
//! BUG: fqrand2 called without being used (see context above)
|
||||
fqrand2();
|
||||
temp = 5.0f;
|
||||
actor->_5AC.x = temp + (f32)(temp - temp);
|
||||
actor->_640 = RANDOM_RANGE(20, 24);
|
||||
actor->_5AC.x = RANDOM2F_RANGE(5.0f, 5.0f);
|
||||
}
|
||||
} else {
|
||||
if (actor->_640 == 0) {
|
||||
actor->_640 = RANDOM_RANGE(45, 51);
|
||||
actor->_5AC.x = RANDOM2F_RANGE(1.0f, 1.0f);
|
||||
}
|
||||
} else if (actor->_640 == 0) {
|
||||
actor->_640 = (int)(6.0f * fqrand()) + 45;
|
||||
//! BUG: fqrand2 called without being used (see context above)
|
||||
fqrand2();
|
||||
temp = 1.0f;
|
||||
actor->_5AC.x = temp + (f32)(temp - temp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +67,7 @@ void mfish_koi_peck_process() {
|
||||
return;
|
||||
}
|
||||
|
||||
void mfish_koi_long_move_process_init() {
|
||||
void mfish_koi_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -107,4 +100,4 @@ void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_medaka_normal_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -13,6 +14,7 @@ void mfish_medaka_normal() {
|
||||
}
|
||||
|
||||
void mfish_medaka_turn_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -35,4 +37,4 @@ void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_seafish_normal_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -35,4 +36,4 @@ void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_sfish_normal_init() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -17,6 +18,7 @@ void mfish_sfish_turn_init() {
|
||||
}
|
||||
|
||||
void mfish_sfish_turn() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -35,4 +37,4 @@ void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@ void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_tai_normal_init() {
|
||||
// NOT BAD
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -13,6 +15,8 @@ void mfish_tai_normal() {
|
||||
}
|
||||
|
||||
void mfish_tai_turn_init() {
|
||||
// NOT BAD
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -33,6 +37,7 @@ void mfish_tai_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint
|
||||
|
||||
void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
// NOT BAD
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_unagi_get_next_rail_type() {
|
||||
// NOT BAD
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -56,7 +57,8 @@ void mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi
|
||||
}
|
||||
|
||||
void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
// NOT BAD
|
||||
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user