mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-07-08 12:16:19 -04:00
+1
-1
@@ -1013,7 +1013,7 @@ config.libs = [
|
||||
Object(Matching, "actor/ac_mscore_control.c"),
|
||||
Object(Matching, "actor/ac_mural.c"),
|
||||
Object(Matching, "actor/ac_museum.c"),
|
||||
Object(NonMatching, "actor/ac_museum_fish.c"),
|
||||
Object(Matching, "actor/ac_museum_fish.c"),
|
||||
Object(Matching, "actor/ac_museum_fossil.c"),
|
||||
Object(NonMatching, "actor/ac_museum_indoor.c"),
|
||||
Object(NonMatching, "actor/ac_museum_insect.c"),
|
||||
|
||||
+473
-1
@@ -3,6 +3,9 @@
|
||||
|
||||
#include "types.h"
|
||||
#include "m_actor.h"
|
||||
#include "c_keyframe.h"
|
||||
#include "libu64/u64types.h"
|
||||
#include "ac_gyoei.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -10,9 +13,478 @@ extern "C" {
|
||||
|
||||
extern ACTOR_PROFILE Museum_Fish_Profile;
|
||||
|
||||
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*);
|
||||
typedef void (*PRIV_FISH_PROCESS)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
|
||||
// unsure temp structs
|
||||
|
||||
typedef struct _MUSEUM_FISH_INIT_DATA {
|
||||
f32 renderScale;
|
||||
f32 _04;
|
||||
f32 _08;
|
||||
f32 _0C;
|
||||
f32 _10;
|
||||
f32 _14;
|
||||
f32 _18;
|
||||
f32 _1C;
|
||||
f32 _20;
|
||||
f32 _24;
|
||||
f32 _28;
|
||||
s16 activeFramesMin;
|
||||
s16 activeFramesRange;
|
||||
s16 _30;
|
||||
} MUSEUM_FISH_INIT_DATA; // size: 0x34
|
||||
|
||||
#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; // offset 0, size 0x70
|
||||
Mtx _70; // offset 70, size
|
||||
artificial_padding(0x70, 0x2b0, Mtx);
|
||||
Mtx _2b0;
|
||||
artificial_padding(0x2b0, 0x46C, Mtx);
|
||||
|
||||
void* _46C;
|
||||
|
||||
artificial_padding(0x46C, 0x4F0, void*);
|
||||
|
||||
s_xyz _4F0;
|
||||
|
||||
artificial_padding(0x4F0, 0x514, s_xyz);
|
||||
|
||||
s_xyz _514;
|
||||
artificial_padding(0x514, 0x526, s_xyz);
|
||||
s_xyz _526;
|
||||
artificial_padding(0x526, 0x538, s_xyz);
|
||||
s_xyz _538;
|
||||
// unused 2 byte padding here
|
||||
xyz_t _540;
|
||||
cKF_Skeleton_R_c* _54C;
|
||||
cKF_Animation_R_c* _550[2];
|
||||
} YET_SKELETON; // size 558
|
||||
|
||||
typedef struct _YET_SKELETON_2 {
|
||||
YET_SKELETON _00;
|
||||
f32 _558;
|
||||
f32 _55C;
|
||||
f32 _560;
|
||||
f32 _564;
|
||||
s16 _568;
|
||||
s16 _56A;
|
||||
s16 _56C;
|
||||
} YET_SKELETON_2;
|
||||
|
||||
typedef enum fish_type MUSEUM_FISH_TYPE;
|
||||
|
||||
typedef struct _FISH_PRIVATE_DATA {
|
||||
MUSEUM_FISH_INIT_DATA init_data;
|
||||
PRIV_FISH_PROCESS currentProcess; // size:4
|
||||
YET_SKELETON _38;
|
||||
|
||||
YET_SKELETON_2* _590;
|
||||
struct _FISH_PRIVATE_DATA* _594;
|
||||
struct _FISH_PRIVATE_DATA* _598;
|
||||
|
||||
MUSEUM_FISH_TYPE fishIDEnum;
|
||||
xyz_t position;
|
||||
xyz_t _5AC;
|
||||
xyz_t _5B8;
|
||||
artificial_padding(0x5B8, 0x5D0, xyz_t);
|
||||
xyz_t _5D0;
|
||||
xyz_t _5DC;
|
||||
f32 _5E8;
|
||||
f32 _5EC;
|
||||
f32 _5F0;
|
||||
f32 _5F4;
|
||||
f32 _5F8;
|
||||
f32 _5FC;
|
||||
f32 _600;
|
||||
f32 _604;
|
||||
f32 _608;
|
||||
s_xyz _60C;
|
||||
s_xyz _612;
|
||||
s_xyz _618;
|
||||
s16 _61E;
|
||||
s16 _620;
|
||||
s16 _622;
|
||||
s16 _624;
|
||||
s16 activityFrameCount;
|
||||
s16 savedActivityFrameCount;
|
||||
s16 _62A;
|
||||
s16 _62C;
|
||||
s16 _62E_flags;
|
||||
s16 group;
|
||||
s16 _632;
|
||||
s16 _634;
|
||||
s16 _636;
|
||||
s16 _638;
|
||||
s16 _63A;
|
||||
s16 _63C;
|
||||
s16 _63E;
|
||||
s16 _640;
|
||||
s16 _642;
|
||||
s16 _644;
|
||||
s16 _646;
|
||||
} MUSEUM_FISH_PRIVATE_DATA; // size 648
|
||||
|
||||
// Holds data for the underwater grass
|
||||
typedef YET_SKELETON MUSEUM_FISH_KUSA_DATA;
|
||||
|
||||
typedef struct _FISH_DISPLAY_MSG_INFO {
|
||||
s16 fishName;
|
||||
s16 fishInfo;
|
||||
} FISH_DISPLAY_MSG_INFO;
|
||||
|
||||
typedef struct _MUSEUM_FISH_ACTOR {
|
||||
ACTOR actor; // offset: 0, size: 0x174
|
||||
int _174;
|
||||
MUSEUM_FISH_PRIVATE_DATA prvFish[aGYO_TYPE_NUM]; // offset: 0x178 size: 0xFB48
|
||||
MUSEUM_FISH_KUSA_DATA prvKusa[14]; // offset: 0xFCB8 size: 0x4AD0
|
||||
YET_SKELETON_2 _14788; // offset: 0x14788 size: 0x570
|
||||
|
||||
u8 _14cf8[16]; // temp
|
||||
|
||||
xyz_t lightPosition[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[20];
|
||||
s16 _14d78[20];
|
||||
artificial_padding(0x14d78, 0x14daa, s16[20]);
|
||||
|
||||
s16 _14daa[5];
|
||||
s16 _14db4;
|
||||
s16 _14db6; // offset: 0x14db6, size: 2
|
||||
s16 lightID1; // offset: 0x14db8, size: 2
|
||||
s16 lightID2; // offset: 0x14dba, size: 2
|
||||
s16 lightPower[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
|
||||
|
||||
// ac_museum_fish.c_inc
|
||||
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);
|
||||
void Museum_Fish_Actor_dt(ACTOR* actor, GAME* game);
|
||||
int Museum_Fish_GetMsgNo(ACTOR* actor);
|
||||
BOOL Museum_Fish_Check_Talk_Distance(GAME* gamex, int index);
|
||||
void Museum_Fish_Set_MsgFishInfo(ACTOR* actor, int param2);
|
||||
void Museum_Fish_set_talk_info(ACTOR* actor);
|
||||
void Museum_Fish_Talk_process(ACTOR* actor, GAME* game);
|
||||
void Museum_Fish_Actor_move(ACTOR* actor, GAME* game);
|
||||
void Museum_Fish_Suisou_draw(ACTOR* actor, GAME* game, int r5);
|
||||
int kusa_before_disp(GAME* r3, cKF_SkeletonInfo_R_c* r4, int r5, Gfx** r6, u8* r7, void* arg, s_xyz* r9, xyz_t* r10);
|
||||
void Museum_Fish_Kusa_Draw(ACTOR* actor, GAME* game, int r5);
|
||||
void Museum_Fish_Actor_draw(ACTOR* actor, GAME* game);
|
||||
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(MUSEUM_FISH_ACTOR* actor, GAME* game);
|
||||
void mfish_normal_light_set(ACTOR* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_base.c_inc
|
||||
f32 Rnd_EX_f(f32 v1);
|
||||
f32 Rnd_EX_fx(f32 v1);
|
||||
void mfish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
int mfish_PosWallCheck(MUSEUM_FISH_PRIVATE_DATA* priv, xyz_t* pos);
|
||||
BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* priv);
|
||||
s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv);
|
||||
void mfish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
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);
|
||||
void mfish_onefish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_before_disp(GAME*, cKF_SkeletonInfo_R_c*, int, Gfx**, u8*, void*, s_xyz*, xyz_t*);
|
||||
void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
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(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_ObjBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex, f32 f1, f32 f2);
|
||||
void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
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(MUSEUM_FISH_ACTOR* actor, GAME* game);
|
||||
void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game);
|
||||
void mfish_body_wind_anime_play(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* atanx, s16* atany, f32* distance);
|
||||
BOOL mfish_peck_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_ground_peck_before_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_get_player_area(MUSEUM_FISH_ACTOR* actor, GAME* game);
|
||||
void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
s16 mfish_get_escape_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_hamon_make(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_afish.c_inc
|
||||
void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_afish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_afish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_aroana.c_inc
|
||||
void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_aroana_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_aroana_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_aroana_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_koi.c_inc
|
||||
void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4);
|
||||
void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_koi_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_koi_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_koi_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_koi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_kaseki.c_inc
|
||||
void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kaseki_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_kaseki_move_wall_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_kaseki_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_bass.c_inc
|
||||
void mfish_bass_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4);
|
||||
void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_seafish.c_inc
|
||||
void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_tai.c_inc
|
||||
void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_tai_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_sfish.c_inc
|
||||
void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_sfish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_sfish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_sfish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_sfish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_gupi.c_inc
|
||||
void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_gupi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_gupi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_medaka.c_inc
|
||||
void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_medaka_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_kingyo.c_inc
|
||||
void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_peck_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_peck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_kingyo_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_dojou.c_inc
|
||||
void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_dojou_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_donko.c_inc
|
||||
void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL 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);
|
||||
void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_big_fish.c_inc
|
||||
void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_ito.c_inc
|
||||
void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_unagi.c_inc
|
||||
void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
s16 mfish_unagi_get_next_rail_type(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_unagi_aim_wind_angle_calc(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_unagi_rail_move_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_rail_move(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_normal_to_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_normal_to_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_rail_move_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_rail_move_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_reverse_to_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_reverse_to_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_namazu.c_inc
|
||||
void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_body_wind_anime_play(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_namazu_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
//! TODO: these should take (actor, game) because they're assigned to _34, but are statically called with just (actor)
|
||||
void mfish_namazu_dummy_process_init();
|
||||
void mfish_namazu_dummy_process();
|
||||
void mfish_namazu_turn_process_init();
|
||||
void mfish_namazu_turn_process();
|
||||
void mfish_namazu_ground_sweep_process_init();
|
||||
void mfish_namazu_ground_sweep_process();
|
||||
void mfish_namazu_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_namazu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_namazu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_zarigani.c_inc
|
||||
void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_wait_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_wait_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_stand_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_stand_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_jump_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_jump_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_zarigani_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_zarigani_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_kurage.c_inc
|
||||
void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_hasu.c_inc
|
||||
void mfish_hasu_ct(YET_SKELETON_2* actor, GAME* game);
|
||||
void mfish_hasu_mv(YET_SKELETON_2* actor, GAME* game);
|
||||
void mfish_hasu_dw(YET_SKELETON_2* actor, GAME* game);
|
||||
void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
BOOL hasu_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);
|
||||
BOOL hasu_after_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg,
|
||||
s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,246 @@
|
||||
|
||||
void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
mfish_base_ct(actor, gamex);
|
||||
actor->_5EC = 0.0f;
|
||||
actor->_5E8 = actor->init_data._10;
|
||||
actor->currentProcess = mfish_afish_normal_process;
|
||||
actor->_624 = 0;
|
||||
}
|
||||
|
||||
void mfish_afish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
f32 v;
|
||||
actor->_634 = mfish_get_hide_camera_angle(actor);
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
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.y, CALC_EASE(0.4f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
|
||||
actor->_5F0 = MIN(MAX(actor->init_data._10, 0.1f), actor->_5E8);
|
||||
actor->_5EC = 0.0f;
|
||||
actor->currentProcess = mfish_afish_dummy_process;
|
||||
}
|
||||
|
||||
void mfish_afish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(3.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
|
||||
void mfish_afish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
f32 v = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
|
||||
f32 v2 = v / MAX(actor->init_data._14 + actor->init_data._10, 1.0f);
|
||||
if (v > actor->_5E8) {
|
||||
actor->_5F0 = v;
|
||||
}
|
||||
actor->_5F4 = Rnd_EX_fx(10.0f) * v2;
|
||||
actor->_612.x = DEG2SHORT_ANGLE((actor->_5F4 + actor->init_data._0C - actor->position.y) * -12.0f);
|
||||
actor->_612.x = CLAMP(actor->_612.x, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60));
|
||||
actor->_5D0.y = 0.0f;
|
||||
|
||||
if (RANDOM_F(1.0f) > actor->init_data._1C) {
|
||||
actor->_612.y += (s16)Rnd_EX_fx(actor->init_data._30 * 2.0f);
|
||||
|
||||
if (ABS((s16)(actor->_612.y - actor->_60C.y)) < DEG2SHORT_ANGLE(20)) {
|
||||
if ((s16)(actor->_612.y - actor->_60C.y) > 0) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(20);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(20);
|
||||
}
|
||||
}
|
||||
actor->_632 = DEG2SHORT_ANGLE(v2 * 30.0f + 20.0f);
|
||||
} else {
|
||||
if ((s16)(actor->_612.y - actor->_60C.y) > 0) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(20);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(20);
|
||||
}
|
||||
actor->_632 = DEG2SHORT_ANGLE(v2 * 40.0f + 30.0f);
|
||||
}
|
||||
|
||||
if ((s16)(actor->_60C.y - actor->_612.y) > 0) {
|
||||
actor->_636 = 0;
|
||||
} else {
|
||||
actor->_636 = DEG2SHORT_ANGLE(-180);
|
||||
}
|
||||
|
||||
actor->_62E_flags &= ~0xC0;
|
||||
actor->_5EC = 0.0f;
|
||||
actor->currentProcess = mfish_afish_normal_process;
|
||||
}
|
||||
|
||||
void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 temp;
|
||||
if (actor->_632 > DEG2SHORT_ANGLE(20)) {
|
||||
add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.003f + 0.03f, 0.25f,
|
||||
0.02f);
|
||||
add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.2f), actor->_5EC * 0.5f);
|
||||
}
|
||||
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f));
|
||||
temp = DEG2SHORT_ANGLE2(6.0f + (actor->_5E8 * 4.0f) / (actor->init_data._14 + actor->init_data._10));
|
||||
actor->_636 += temp;
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
CALC_EASE2(0.2f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(3.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
|
||||
if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) {
|
||||
mfish_afish_dummy_process_init(actor);
|
||||
} else if (actor->_5E8 > 1.0f && actor->_62E_flags & 0x1e) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f);
|
||||
}
|
||||
actor->_632 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_afish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(75.0f)) + DEG2SHORT_ANGLE(45.0f);
|
||||
actor->_618.y = ABS(DEG2SHORT_ANGLE2((SHORT2DEG_ANGLE2(s3) / 120.0f) * 4.0f + 2.5f));
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) < 0) {
|
||||
s3 = -s3;
|
||||
}
|
||||
} else if (actor->_62E_flags & 0xC0) {
|
||||
if (actor->_62E_flags & 0x40) {
|
||||
s3 = ABS(s3);
|
||||
} else {
|
||||
s3 = -ABS(s3);
|
||||
}
|
||||
} else if (actor->_62E_flags & 0x20 && (actor->_62A - actor->_60C.y) < 0) {
|
||||
s3 = -s3;
|
||||
}
|
||||
|
||||
if (s3 > 0) {
|
||||
actor->_62E_flags |= 0x40;
|
||||
} else {
|
||||
actor->_62E_flags |= 0x80;
|
||||
}
|
||||
|
||||
actor->_612.y += s3;
|
||||
|
||||
if (RANDOM_F(1.0f) < 0.2f) {
|
||||
actor->_63E = RANDOM_F(3.0f) + 1.0f;
|
||||
} else {
|
||||
actor->_63E = 0;
|
||||
}
|
||||
|
||||
actor->_5EC = 0.0f;
|
||||
actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.5f;
|
||||
actor->currentProcess = mfish_afish_turn_process;
|
||||
}
|
||||
|
||||
void mfish_afish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if (ABS(actor->_622) > DEG2SHORT_ANGLE(30)) {
|
||||
add_calc2(&actor->_5EC, 0.15f, 0.15f, 0.1f);
|
||||
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), 0.15f, 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->_618.y >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) {
|
||||
if (actor->_63E > 0) {
|
||||
if (mfish_WallCheck(actor)) {
|
||||
actor->_640 = 10;
|
||||
mfish_afish_turn_process_init(actor);
|
||||
} else {
|
||||
actor->_640 = 10;
|
||||
mfish_afish_normal_process_init(actor);
|
||||
}
|
||||
actor->_63E--;
|
||||
} else {
|
||||
mfish_afish_dummy_process_init(actor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_afish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
xyz_t p;
|
||||
if (actor->currentProcess != mfish_afish_turn_process && actor->_622 < DEG2SHORT_ANGLE(20)) {
|
||||
add_calc2(&actor->_5E8, 0.08f, 1.0f - actor->init_data._18, 0.005f);
|
||||
} else {
|
||||
add_calc2(&actor->_5E8, 0.05f, 1.0f - actor->init_data._18, 0.001f);
|
||||
}
|
||||
add_calc0(&actor->_5EC, 0.5f, 0.01f);
|
||||
actor->_5D0.x = actor->_5E8 * cos_s(actor->_60C.x) * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.x) * cos_s(actor->_60C.y);
|
||||
add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f);
|
||||
add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y);
|
||||
mfish_move_smooth(actor, gamex);
|
||||
mfish_get_flow_vec(&p, actor, gamex);
|
||||
actor->position.x += actor->_5D0.x + actor->_5DC.x;
|
||||
actor->position.z += actor->_5D0.z + actor->_5DC.z;
|
||||
actor->position.y += actor->_5DC.y;
|
||||
actor->position.y = MAX(60.f, MIN(110.f, actor->position.y));
|
||||
}
|
||||
|
||||
void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if (actor->_5F8 > actor->init_data._08 * 20.f) {
|
||||
actor->_5F8 = 0.0f;
|
||||
actor->activityFrameCount = 0;
|
||||
}
|
||||
|
||||
if (actor->activityFrameCount-- <= 0) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
if (mfish_WallCheck(actor)) {
|
||||
actor->_640 = 10;
|
||||
mfish_afish_turn_process_init(actor);
|
||||
} else {
|
||||
actor->_640 = 10;
|
||||
mfish_afish_normal_process_init(actor);
|
||||
}
|
||||
} else if (actor->currentProcess == mfish_afish_normal_process) {
|
||||
if ((actor->_62E_flags & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) ||
|
||||
(actor->_62E_flags & 0x20 &&
|
||||
ABS((s16)(DEG2SHORT_ANGLE(180) + actor->_62A - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_640 = 10;
|
||||
mfish_afish_turn_process_init(actor);
|
||||
}
|
||||
}
|
||||
|
||||
actor->_5AC.y = 0.0f;
|
||||
actor->_638 += DEG2SHORT_ANGLE(10);
|
||||
actor->currentProcess(actor, gamex);
|
||||
if (ABS(actor->_618.z) > ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) {
|
||||
add_calc2(&actor->_5E8, MIN(0.2f, actor->_5E8), 0.2f, 0.5f);
|
||||
}
|
||||
add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.1f), DEG2SHORT_ANGLE(2.5), DEG2SHORT_ANGLE(0.5));
|
||||
add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.1f), DEG2SHORT_ANGLE(1), DEG2SHORT_ANGLE(0.5));
|
||||
mfish_afish_base_FishMove(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_afish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
mfish_afish_base_mv(actor, gamex);
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
if (actor->_640 > 0) {
|
||||
actor->_640--;
|
||||
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, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_afish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_dw(actor, gamex);
|
||||
}
|
||||
@@ -0,0 +1,291 @@
|
||||
|
||||
void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
mfish_base_ct(actor, gamex);
|
||||
actor->currentProcess = mfish_aroana_normal_process;
|
||||
actor->_624 = 0;
|
||||
}
|
||||
|
||||
void mfish_aroana_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
actor->_5F0 = actor->_5E8;
|
||||
actor->_5EC = 0.0f;
|
||||
actor->currentProcess = mfish_aroana_dummy_process;
|
||||
}
|
||||
|
||||
void mfish_aroana_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.0f), DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f);
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC);
|
||||
add_calc0(&actor->_5F0, 0.01f, 0.001f);
|
||||
}
|
||||
|
||||
// close copy of mfish_afish_normal_process_init
|
||||
|
||||
void mfish_aroana_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
f32 v = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
|
||||
f32 v2 = v / MAX(actor->init_data._14 + actor->init_data._10, 1.0f);
|
||||
if (v > actor->_5E8) {
|
||||
actor->_5F0 = v;
|
||||
}
|
||||
actor->_5F4 = Rnd_EX_fx(10.0f) * v2;
|
||||
actor->_612.x = atans_table(actor->_5E8, actor->_5F4 + actor->init_data._0C - actor->position.y) >> 4;
|
||||
actor->_5D0.y = 0.0f;
|
||||
|
||||
if (RANDOM_F(1.0f) > actor->init_data._1C) {
|
||||
actor->_612.y += (s16)Rnd_EX_fx(actor->init_data._30 * 2.0f);
|
||||
|
||||
if (ABS((s16)(actor->_612.y - actor->_60C.y)) < DEG2SHORT_ANGLE(20)) {
|
||||
if ((s16)(actor->_612.y - actor->_60C.y) > 0) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(20);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(20);
|
||||
}
|
||||
}
|
||||
actor->_632 = DEG2SHORT_ANGLE(v2 * 20.0f + 10.0f);
|
||||
} else {
|
||||
if ((s16)(actor->_612.y - actor->_60C.y) > 0) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(20);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(20);
|
||||
}
|
||||
actor->_632 = DEG2SHORT_ANGLE(v2 * 30.0f + 20.0f);
|
||||
}
|
||||
|
||||
if ((s16)(actor->_60C.y - actor->_612.y) > 0) {
|
||||
actor->_636 = 0;
|
||||
} else {
|
||||
actor->_636 = DEG2SHORT_ANGLE(-180);
|
||||
}
|
||||
|
||||
actor->_62E_flags &= ~0xC0;
|
||||
actor->_5EC = 0.0f;
|
||||
actor->currentProcess = mfish_aroana_normal_process;
|
||||
}
|
||||
|
||||
void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
s16 temp;
|
||||
if (actor->_632 > DEG2SHORT_ANGLE(20)) {
|
||||
add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.002f + 0.03f, 0.25f,
|
||||
0.02f);
|
||||
add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.2f), actor->_5EC * 0.5f);
|
||||
} else if (actor->activityFrameCount > actor->savedActivityFrameCount - 10) {
|
||||
add_calc2(&actor->_5EC, 0.25f, 0.2f, 0.5f);
|
||||
add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.05f), actor->_5EC * 0.5f);
|
||||
}
|
||||
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.05f), DEG2SHORT_ANGLE(0.375), DEG2SHORT_ANGLE(0.125));
|
||||
temp = DEG2SHORT_ANGLE2((actor->_5E8 * 4.0f) / (actor->init_data._14 + actor->init_data._10) + 6.0f);
|
||||
actor->_636 += temp;
|
||||
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
CALC_EASE2(0.2f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(3.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
|
||||
if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) {
|
||||
if (RANDOM_F(1.0f) < 0.8f) {
|
||||
mfish_aroana_long_move_process_init(actor);
|
||||
} else {
|
||||
mfish_aroana_dummy_process_init(actor);
|
||||
}
|
||||
} else if (actor->_5E8 > 1.f && actor->_62E_flags & 0x1e) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f);
|
||||
}
|
||||
actor->_632 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_aroana_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(55.0f)) + DEG2SHORT_ANGLE(45.0f);
|
||||
actor->_618.y = ABS(DEG2SHORT_ANGLE2((SHORT2DEG_ANGLE2(s3) / 120.0f) * 2.5f + 2.0f));
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) < 0) {
|
||||
s3 = -s3;
|
||||
}
|
||||
} else if (actor->_62E_flags & 0xC0) {
|
||||
if (actor->_62E_flags & 0x40) {
|
||||
s3 = ABS(s3);
|
||||
} else {
|
||||
s3 = -ABS(s3);
|
||||
}
|
||||
} else if (actor->_62E_flags & 0x20 && (actor->_62A - actor->_60C.y) < 0) {
|
||||
s3 = -s3;
|
||||
}
|
||||
|
||||
if (s3 > 0) {
|
||||
actor->_62E_flags |= 0x40;
|
||||
} else {
|
||||
actor->_62E_flags |= 0x80;
|
||||
}
|
||||
|
||||
actor->_612.y += s3;
|
||||
|
||||
if (RANDOM_F(1.0f) < 0.2f) {
|
||||
actor->_63E = RANDOM_F(2.0f) + 1.0f;
|
||||
} else {
|
||||
actor->_63E = 0;
|
||||
}
|
||||
|
||||
actor->_5EC = 0.0f;
|
||||
actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.2f;
|
||||
actor->currentProcess = mfish_aroana_turn_process;
|
||||
}
|
||||
|
||||
void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (ABS(actor->_622) > DEG2SHORT_ANGLE(25)) {
|
||||
add_calc2(&actor->_5EC, 0.1f, 0.15f, 0.1f);
|
||||
add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), actor->_5EC * 0.5f);
|
||||
}
|
||||
|
||||
add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), 0.15f, 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->_618.y >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) {
|
||||
if (actor->_63E > 0) {
|
||||
if (mfish_WallCheck(actor)) {
|
||||
// actor->_640 = 10;
|
||||
mfish_aroana_turn_process_init(actor);
|
||||
} else {
|
||||
// actor->_640 = 10;
|
||||
mfish_aroana_normal_process_init(actor);
|
||||
}
|
||||
actor->_63E--;
|
||||
} else {
|
||||
if (RANDOM_F(1.0f) < 0.8f) {
|
||||
mfish_aroana_long_move_process_init(actor);
|
||||
} else {
|
||||
mfish_aroana_dummy_process_init(actor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_aroana_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
actor->_5F0 = MAX(actor->_5E8, 0.2f);
|
||||
actor->_5EC = 0.0f;
|
||||
actor->currentProcess = mfish_aroana_long_move_process;
|
||||
}
|
||||
|
||||
void mfish_aroana_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f);
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC);
|
||||
if ((play->game_frame & 0x3f) == 0 && RANDOM_F(1.0f) > 0.25f) {
|
||||
mfish_aroana_dummy_process_init(actor);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_aroana_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t p;
|
||||
if (actor->currentProcess != mfish_aroana_turn_process && actor->currentProcess != mfish_aroana_long_move_process &&
|
||||
actor->_622 < DEG2SHORT_ANGLE(20)) {
|
||||
add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, GETREG(TAKREG, 0x13) * 0.001f + 0.02f);
|
||||
} else {
|
||||
add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, GETREG(TAKREG, 0x14) * 0.001f + 0.001f);
|
||||
}
|
||||
add_calc0(&actor->_5EC, 0.5f, 0.01f);
|
||||
|
||||
actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y);
|
||||
add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f);
|
||||
add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y);
|
||||
mfish_move_smooth(actor, game);
|
||||
mfish_get_flow_vec(&p, actor, game);
|
||||
actor->position.x += actor->_5D0.x + actor->_5DC.x;
|
||||
actor->position.z += actor->_5D0.z + actor->_5DC.z;
|
||||
actor->position.y += actor->_5DC.y;
|
||||
actor->position.y = MAX(60.f, MIN(110.f, actor->position.y));
|
||||
}
|
||||
|
||||
void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if (actor->_5F8 > actor->init_data._08 * 20.f) {
|
||||
actor->_5F8 = 0.0f;
|
||||
actor->activityFrameCount = 0;
|
||||
}
|
||||
|
||||
if (actor->activityFrameCount-- <= 0) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
if (mfish_WallCheck(actor)) {
|
||||
mfish_aroana_turn_process_init(actor);
|
||||
} else {
|
||||
mfish_aroana_normal_process_init(actor);
|
||||
}
|
||||
} else if (actor->currentProcess == mfish_aroana_normal_process) {
|
||||
if ((actor->_62E_flags & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) ||
|
||||
(actor->_62E_flags & 0x20 &&
|
||||
ABS((s16)(DEG2SHORT_ANGLE(180) + actor->_62A - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
mfish_aroana_turn_process_init(actor);
|
||||
}
|
||||
}
|
||||
|
||||
actor->_5AC.y = 0.0f;
|
||||
actor->_638 += DEG2SHORT_ANGLE(5);
|
||||
actor->currentProcess(actor, gamex);
|
||||
if (ABS(actor->_618.z) > ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) {
|
||||
add_calc2(&actor->_5E8, MIN(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_aroana_base_FishMove(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
mfish_aroana_base_mv(actor, gamex);
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
actor->_38._00.frame_control.speed = (actor->_5E8 * 2.0f) / (actor->init_data._10 + actor->init_data._14) + 0.5f;
|
||||
}
|
||||
|
||||
BOOL mfish_aroana_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
int v;
|
||||
if (joint_num == 1) {
|
||||
Matrix_scale(1.0, sin_s(actor->_63A + actor->_63C) * 0.025f + 1.0f, sin_s(actor->_63A) * 0.025f + 1.0f, 1);
|
||||
} else if (joint_num == 2) {
|
||||
v = joint1->y - (actor->_618.z << 1);
|
||||
joint1->y = MIN(MAX(v, DEG2SHORT_ANGLE(-40)), DEG2SHORT_ANGLE(40));
|
||||
|
||||
v = joint1->x - (actor->_618.z >> 2);
|
||||
joint1->x = MIN(MAX(v, DEG2SHORT_ANGLE(-20)), DEG2SHORT_ANGLE(20));
|
||||
|
||||
Matrix_scale(1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) * 0.05f + 1.0f,
|
||||
sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) * 0.05f + 1.0f, 1);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y + actor->_5AC.y, actor->position.z, 0);
|
||||
Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_aroana_before_disp, NULL, actor);
|
||||
CLOSE_DISP(play->game.graph);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,379 @@
|
||||
|
||||
void mfish_bass_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) {
|
||||
if (r4 == 0) {
|
||||
actor->_640 = 0xf;
|
||||
actor->_5AC.z = 4;
|
||||
} else if (r4 == 1 && actor->_640 == 0) {
|
||||
actor->_640 = 0x14;
|
||||
actor->_5AC.z = 3;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
GAME_PLAY* play = (GAME_PLAY*)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.x = actor->_5E8 * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y);
|
||||
|
||||
add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f);
|
||||
t = add_calc(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y, 0);
|
||||
if (fabsf(t) < 0.008f) {
|
||||
add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.03f), DEG2SHORT_ANGLE(1.0f + (0.5f * actor->_5AC.y)) >> 1,
|
||||
9);
|
||||
}
|
||||
mfish_move_smooth(actor, game);
|
||||
mfish_get_flow_vec(&pos, actor, game);
|
||||
actor->position.x += actor->_5D0.x + actor->_5DC.x;
|
||||
actor->position.z += actor->_5D0.z + actor->_5DC.z;
|
||||
actor->position.y = actor->position.y + actor->_5DC.y;
|
||||
actor->position.y = MAX(60, MIN(110, actor->position.y));
|
||||
}
|
||||
|
||||
void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
actor->_634 = mfish_get_hide_camera_angle(actor);
|
||||
|
||||
if ((actor->_62E_flags & 0x1E) != 0) {
|
||||
// works with temp instead of cast
|
||||
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.y, CALC_EASE(0.5f), DEG2SHORT_ANGLE(22.5),
|
||||
DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
|
||||
actor->_5EC = 0.0f;
|
||||
actor->currentProcess = &mfish_bass_dummy_process;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
// no clue what's going on here
|
||||
add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
|
||||
void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
f32 ra;
|
||||
f32 t;
|
||||
f32 temp;
|
||||
|
||||
ra = RANDOM_F(fishActor->init_data._14) + fishActor->init_data._10;
|
||||
t = (ra) / MAX(fishActor->init_data._14 + fishActor->init_data._10, 1);
|
||||
|
||||
if (RANDOM_F(1.0f) > 0.25f && (fishActor->_62E_flags & 0x200) == 0) {
|
||||
fishActor->_62E_flags |= 0x200;
|
||||
} else {
|
||||
fishActor->_62E_flags &= ~0x200;
|
||||
}
|
||||
|
||||
if (ra > fishActor->_5E8) {
|
||||
f32 v2;
|
||||
fishActor->_5F0 = ra;
|
||||
fishActor->_5AC.x = 0.15f + Rnd_EX_fx(0.1f);
|
||||
mfish_bass_tail_anim_set(fishActor, 0);
|
||||
}
|
||||
|
||||
fishActor->_5F4 = t * Rnd_EX_fx(10);
|
||||
temp = (fishActor->_5F4 + fishActor->init_data._0C - fishActor->position.y);
|
||||
fishActor->_612.x = DEG2SHORT_ANGLE2(temp * -(2 * fishActor->_5AC.y + 10));
|
||||
|
||||
fishActor->_612.x = CLAMP(fishActor->_612.x, DEG2SHORT_ANGLE(-50), DEG2SHORT_ANGLE(50));
|
||||
fishActor->_5D0.y = 0;
|
||||
|
||||
if (RANDOM_F(1) > fishActor->init_data._1C) {
|
||||
int diff;
|
||||
|
||||
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.y += DEG2SHORT_ANGLE(20);
|
||||
} else {
|
||||
fishActor->_612.y += DEG2SHORT_ANGLE(-20);
|
||||
}
|
||||
}
|
||||
|
||||
if ((fishActor->_62E_flags & 0x200) == 0) {
|
||||
fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 20);
|
||||
} else {
|
||||
fishActor->_632 = DEG2SHORT_ANGLE(t * 30 + 20);
|
||||
}
|
||||
} else {
|
||||
if ((s16)(fishActor->_612.y - fishActor->_60C.y) > 0) {
|
||||
fishActor->_612.y += DEG2SHORT_ANGLE(15);
|
||||
} else {
|
||||
fishActor->_612.y += DEG2SHORT_ANGLE(-15);
|
||||
}
|
||||
|
||||
if ((fishActor->_62E_flags & 0x200) == 0) {
|
||||
fishActor->_632 = DEG2SHORT_ANGLE(t * 10 + 30);
|
||||
} else {
|
||||
fishActor->_632 = DEG2SHORT_ANGLE((GETREG(TAKREG, 42) + 40.0f) * t + 30);
|
||||
}
|
||||
}
|
||||
if ((s16)(fishActor->_60C.y - fishActor->_612.y) > 0) {
|
||||
fishActor->_636 = DEG2SHORT_ANGLE(0);
|
||||
} else {
|
||||
fishActor->_636 = DEG2SHORT_ANGLE(-180);
|
||||
}
|
||||
|
||||
fishActor->_62E_flags &= ~0xC0;
|
||||
fishActor->_5EC = 0;
|
||||
fishActor->currentProcess = mfish_bass_normal_process;
|
||||
}
|
||||
|
||||
void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
if (((actor->_62E_flags & 0x200) != 0 && actor->_632 > DEG2SHORT_ANGLE(20)) || actor->_640 > 0) {
|
||||
f32 v = (actor->_5AC.y * 0.03f + 0.02f);
|
||||
add_calc2(&actor->_5EC,
|
||||
v + (actor->_5AC.y * 0.02f + 0.03f) * (float)((actor->_632 - DEG2SHORT_ANGLE(20)) / 364),
|
||||
actor->_5AC.y * 0.04f + 0.01f, actor->_5AC.y * 0.02f + 0.01f);
|
||||
add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(v), actor->_5EC * 0.5f, 0.025f);
|
||||
}
|
||||
if (actor->_62E_flags & 0x200) {
|
||||
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(GETREG(TAKREG, 73) * 0.01f + 0.5f),
|
||||
(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.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->_618.z, actor->_622, CALC_EASE2(actor->_5AC.y * 0.25f + 0.25f),
|
||||
(s16)(DEG2SHORT_ANGLE(actor->_5AC.y * 8.0f + 7.0f) >> 1) >> 1, 22);
|
||||
|
||||
if (actor->_5E8 < 0.01f) {
|
||||
mfish_bass_dummy_process_init(actor);
|
||||
} else if (actor->_5E8 > 1.0f && actor->_62E_flags & 0x1e) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f);
|
||||
}
|
||||
actor->_632 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
s16 a;
|
||||
s16 b;
|
||||
|
||||
b = a = DEG2SHORT_ANGLE(45) + DEG2SHORT_ANGLE(RANDOM_F(75));
|
||||
actor->_618.y =
|
||||
DEG2SHORT_ANGLE((actor->_5AC.y * 4.0f + 4.0f) * (SHORT2DEG_ANGLE2(a) / 120.0f) + 2.0f + actor->_5AC.y);
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) < 0) {
|
||||
b = -a;
|
||||
}
|
||||
} else if (actor->_62E_flags & 0xC0) {
|
||||
if (actor->_62E_flags & 0x40) {
|
||||
b = ABS(a);
|
||||
} else {
|
||||
b = -ABS(a);
|
||||
}
|
||||
} else if (actor->_62E_flags & 0x20) {
|
||||
if ((s16)(actor->_62A - actor->_60C.y) < 0) {
|
||||
b = -a;
|
||||
}
|
||||
}
|
||||
|
||||
if (b > 0) {
|
||||
actor->_62E_flags |= 0x40;
|
||||
} else {
|
||||
actor->_62E_flags |= 0x80;
|
||||
}
|
||||
|
||||
actor->_612.y += b;
|
||||
|
||||
if ((RANDOM_F(1) < 0.25f) && (actor->_62E_flags & 0x200) == 0) {
|
||||
actor->_62E_flags |= 0x200;
|
||||
} else {
|
||||
actor->_62E_flags &= ~0x200;
|
||||
}
|
||||
|
||||
if ((actor->_62E_flags & 0x200) == 0) {
|
||||
actor->_5F0 = 1.75f;
|
||||
actor->_5AC.x = Rnd_EX_fx(0.1f) + 0.15f;
|
||||
} else {
|
||||
actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.7f;
|
||||
actor->_5AC.x = Rnd_EX_fx(0.1f) + 0.15f;
|
||||
}
|
||||
|
||||
if (RANDOM_F(1) < 0.2f) {
|
||||
actor->_63E = RANDOMF_RANGE(1, 4);
|
||||
} else {
|
||||
actor->_63E = 0;
|
||||
}
|
||||
|
||||
actor->_5EC = 0.0f;
|
||||
actor->currentProcess = mfish_bass_turn_process;
|
||||
}
|
||||
|
||||
void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
int a;
|
||||
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->_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.y, ((s16)(sin_s(actor->_636) * actor->_632) + actor->_612.y),
|
||||
CALC_EASE(0.2f), actor->_618.y >> 1, 45);
|
||||
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(2.5f), 22);
|
||||
|
||||
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);
|
||||
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) {
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
mfish_base_ct(actor, gamex);
|
||||
|
||||
actor->currentProcess = mfish_bass_normal_process;
|
||||
|
||||
if (actor->fishIDEnum == aGYO_TYPE_LARGE_BASS) {
|
||||
actor->_5AC.y = 0;
|
||||
} else if (actor->fishIDEnum == aGYO_TYPE_BASS) {
|
||||
actor->_5AC.y = 0.5f;
|
||||
} else {
|
||||
actor->_5AC.y = 1;
|
||||
}
|
||||
|
||||
actor->_624 = 0xb;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
|
||||
if (actor->_5F8 > actor->init_data._08 * 20.0f) {
|
||||
actor->_5F8 = 0.0f;
|
||||
actor->activityFrameCount = 0;
|
||||
}
|
||||
|
||||
if (actor->activityFrameCount-- <= 0) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)(RANDOM_F(actor->init_data.activeFramesRange));
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
|
||||
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_normal_process_init(actor);
|
||||
}
|
||||
} else if (actor->currentProcess == &mfish_bass_normal_process) {
|
||||
if (((actor->_62E_flags & 0x1e) && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) ||
|
||||
((actor->_62E_flags & 0x20) &&
|
||||
ABS((s16)((actor->_62A - DEG2SHORT_ANGLE(-180)) - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
mfish_bass_tail_anim_set(actor, 1);
|
||||
mfish_bass_turn_process_init(actor);
|
||||
}
|
||||
}
|
||||
actor->_638 += DEG2SHORT_ANGLE(10);
|
||||
actor->currentProcess(actor, gamex);
|
||||
|
||||
if (ABS(actor->_618.z) > ABS(actor->_622)) {
|
||||
add_calc2(&actor->_5E8, MIN(GETREG(TAKREG, 19) * 0.1f + 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;
|
||||
// needed tmp before the decrement for some reason
|
||||
tmp = (0.4f + (0.7f * actor->_5AC.y));
|
||||
actor->_640--;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele;
|
||||
Mtx* mtx;
|
||||
GRAPH* graph;
|
||||
GAME_PLAY* play;
|
||||
|
||||
play = (GAME_PLAY*)gamex;
|
||||
|
||||
skele = &actor->_38;
|
||||
|
||||
if (play->game.frame_counter % 2 != 0) {
|
||||
mtx = &skele->_70;
|
||||
} else {
|
||||
mtx = &skele->_2b0;
|
||||
}
|
||||
|
||||
graph = play->game.graph;
|
||||
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_RotateY(actor->_60C.y, 1);
|
||||
|
||||
Matrix_translate(0, 0.25f * actor->init_data._04, 1.5f * actor->init_data._24, 1);
|
||||
Matrix_RotateX(actor->_60C.x, 1);
|
||||
Matrix_RotateZ(MY_CLAMP(-(actor->_618.z >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1);
|
||||
Matrix_translate(0, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
|
||||
OPEN_DISP(graph);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
CLOSE_DISP(graph);
|
||||
|
||||
cKF_Si3_draw_R_SV(&play->game, &skele->_00, mtx, &mfish_before_disp, 0, actor);
|
||||
return;
|
||||
}
|
||||
@@ -0,0 +1,210 @@
|
||||
|
||||
void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
qrand();
|
||||
actor->position.y = actor->init_data._0C;
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
actor->_5E8 = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_5F0 = actor->_5E8;
|
||||
actor->_60C.y = DEG2SHORT_ANGLE(90);
|
||||
if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) {
|
||||
actor->_60C.y = -actor->_60C.y;
|
||||
actor->position.z = 430.0f;
|
||||
actor->position.x += 40.0f;
|
||||
actor->_640 = 0;
|
||||
} else if (actor->fishIDEnum == aGYO_TYPE_GIANT_SNAKEHEAD) {
|
||||
actor->position.z = 530.0f;
|
||||
actor->position.x -= 40.0f;
|
||||
}
|
||||
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_5F4 = 0.0f;
|
||||
actor->_5D0.y = 0.0f;
|
||||
actor->_622 = 0;
|
||||
actor->_624 = 7;
|
||||
actor->_63A = qrand();
|
||||
actor->_63C = qrand();
|
||||
actor->_640 = 0;
|
||||
actor->_634 = 0;
|
||||
actor->_632 = 0;
|
||||
actor->_644 = 0;
|
||||
actor->_5AC.x = 0.0f;
|
||||
actor->_5AC.z = 0.0f;
|
||||
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
}
|
||||
|
||||
void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! NOTE: wrong floats in this function, based on objdiff
|
||||
xyz_t p;
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
mfish_body_wind_anime_play(actor, gamex);
|
||||
if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) {
|
||||
actor->_38._00.frame_control.speed = (sin_s(actor->_63A) * 0.2f + 1.0f) * 0.5f;
|
||||
} else {
|
||||
actor->_38._00.frame_control.speed =
|
||||
((GETREG(TAKREG, 0x37) * 0.01f) + 0.5f + sin_s(actor->_63A) * (GETREG(TAKREG, 0x38) * 0.01f + 0.1f)) * 0.5f;
|
||||
}
|
||||
actor->_5AC.y = 0.0f;
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f);
|
||||
actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y);
|
||||
if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) {
|
||||
if (actor->_600 > 35.0f) {
|
||||
if (actor->_632 > DEG2SHORT_ANGLE(10)) {
|
||||
add_calc0(&actor->_5F0, 1.0f - actor->init_data._18, 0.005f);
|
||||
} else {
|
||||
add_calc2(&actor->_5F0, -0.025f, CALC_EASE(0.05f), 0.005f);
|
||||
}
|
||||
} else if (actor->_600 < 5.0f) {
|
||||
add_calc2(&actor->_5F0, 0.025f, CALC_EASE(0.05f), 0.005f);
|
||||
} else if (actor->_644 > DEG2SHORT_ANGLE(10)) {
|
||||
add_calc2(&actor->_5F0, (SHORT2DEG_ANGLE2(actor->_644) * 0.1f) / 180.f, CALC_EASE(0.05f), 0.005f);
|
||||
}
|
||||
} else if (actor->_5FC > 35.0f) {
|
||||
if (actor->_632 > DEG2SHORT_ANGLE(10)) {
|
||||
add_calc0(&actor->_5F0, 1.0f - actor->init_data._18, 0.005f);
|
||||
} else {
|
||||
add_calc2(&actor->_5F0, -0.025f, CALC_EASE(0.05f), 0.005f);
|
||||
}
|
||||
} else if (actor->_5FC < 5.0f) {
|
||||
add_calc2(&actor->_5F0, 0.04f, CALC_EASE(0.05f), 0.005f);
|
||||
} else if (actor->_644 > DEG2SHORT_ANGLE(10)) {
|
||||
add_calc2(&actor->_5F0, (SHORT2DEG_ANGLE2(actor->_644) * 0.1f) / 180.f, CALC_EASE(0.05f), 0.005f);
|
||||
}
|
||||
|
||||
mfish_get_flow_vec(&p, actor, gamex);
|
||||
actor->position.x += actor->_5D0.x + p.x * 0.1f;
|
||||
actor->position.z += actor->_5D0.z + p.z * 0.1f;
|
||||
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + actor->_632 * sin_s(actor->_636),
|
||||
CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.875f), DEG2SHORT_ANGLE(0.05f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.025f));
|
||||
add_calc_short_angle2(&actor->_632, DEG2SHORT_ANGLE(0), CALC_EASE(0.05f), DEG2SHORT_ANGLE(0.5f),
|
||||
DEG2SHORT_ANGLE(0.05f));
|
||||
actor->_636 += DEG2SHORT_ANGLE(GETREG(TAKREG, 0x47) * 0.1f + 3.0f);
|
||||
add_calc(&actor->position.y, actor->init_data._0C + actor->_5F4, CALC_EASE(0.05f), 0.15f, 0.05f);
|
||||
if (actor->group == 2) {
|
||||
actor->_636 += DEG2SHORT_ANGLE(10);
|
||||
} else {
|
||||
actor->_646 += actor->_642;
|
||||
}
|
||||
add_calc_short_angle2(&actor->_634, actor->_640, CALC_EASE2(0.1f),
|
||||
(s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 0x3d) * 0.1f + 0.8f) >> 1) >> 1,
|
||||
DEG2SHORT_ANGLE(0.025f));
|
||||
if (actor->_5E8 > 0.0f) {
|
||||
add_calc_short_angle2(&actor->_644, actor->_634, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.625f),
|
||||
DEG2SHORT_ANGLE(0.025f));
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_644, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.625f),
|
||||
DEG2SHORT_ANGLE(0.025f));
|
||||
}
|
||||
add_calc2(&actor->_5AC.x, actor->_5AC.z, 0.25f, 0.02f);
|
||||
if (actor->activityFrameCount-- < 0) {
|
||||
if ((actor->fishIDEnum == aGYO_TYPE_ARAPAIMA && actor->_600 < 10.0f) ||
|
||||
(actor->fishIDEnum == aGYO_TYPE_GIANT_SNAKEHEAD && actor->_5FC < 10.0f)) {
|
||||
if (actor->_60C.y > 0) {
|
||||
actor->_612.y = DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
actor->_612.y = DEG2SHORT_ANGLE(-90);
|
||||
}
|
||||
|
||||
actor->_5F0 = actor->init_data._10 + MAX(-actor->init_data._10, RANDOM_F(actor->init_data._14));
|
||||
|
||||
if (RANDOM_F(1.0f) < GETREG(TAKREG, 0x46) * 0.01f + 0.5f) {
|
||||
actor->_642 = DEG2SHORT_ANGLE(RANDOM2_F(2.0f) + 3.0f);
|
||||
if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA || GETREG(TAKREG, 0x39) == 1) {
|
||||
actor->_634 = DEG2SHORT_ANGLE(RANDOM_F(10.f) + 20.f);
|
||||
actor->_640 = DEG2SHORT_ANGLE(RANDOM_F(10.f));
|
||||
actor->_5AC.z = Rnd_EX_f(1.0f);
|
||||
} else {
|
||||
actor->_634 = DEG2SHORT_ANGLE(RANDOM_F(5.0f) + 15.0f);
|
||||
actor->_640 = DEG2SHORT_ANGLE(RANDOM_F(10.f));
|
||||
actor->_5AC.z = Rnd_EX_f(0.5f);
|
||||
}
|
||||
} else {
|
||||
actor->_642 = DEG2SHORT_ANGLE(RANDOM2_F(2.0f) + 3.0f);
|
||||
actor->_634 = 0;
|
||||
actor->_640 = 0;
|
||||
actor->_5AC.z = 0.0f;
|
||||
actor->_632 = DEG2SHORT_ANGLE(GETREG(TAKREG, 0x48) + 45.0f);
|
||||
actor->_636 = 0;
|
||||
}
|
||||
|
||||
} else {
|
||||
actor->_5F0 = -0.01f;
|
||||
actor->_5F4 = RANDOM2_F(5.0f);
|
||||
actor->_642 = 0;
|
||||
actor->_634 = 0;
|
||||
actor->_640 = 0;
|
||||
actor->_5AC.z = 0.0f;
|
||||
}
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
}
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
}
|
||||
|
||||
BOOL mfish_bfish_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) {
|
||||
//! NOTE: wrong floats in this function, based on objdiff
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
|
||||
if (joint_num == 1) {
|
||||
f32 v;
|
||||
int i;
|
||||
if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) {
|
||||
v = 0.015f;
|
||||
} else {
|
||||
v = 0.02f;
|
||||
}
|
||||
i = joint1->x + (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
i = joint1->y + (int)(actor->_644 * (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * sin_s(actor->_646));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
trans->z += actor->_5AC.x * 0.06f * actor->_644 * sin_s(actor->_646 - DEG2SHORT_ANGLE(90));
|
||||
Matrix_scale(1.0f, 1.0f + v * sin_s(actor->_63A + actor->_63C), 1.0f + v * sin_s(actor->_63A), 1);
|
||||
} else if (joint_num == 2) {
|
||||
f32 v;
|
||||
int i;
|
||||
if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) {
|
||||
v = 0.025f;
|
||||
} else {
|
||||
v = 0.035f;
|
||||
}
|
||||
i = joint1->y - (actor->_618.z * 2) +
|
||||
(int)(actor->_644 * (GETREG(TAKREG, 0x15) * 0.01f + 0.75f) *
|
||||
sin_s(actor->_646 + DEG2SHORT_ANGLE(-90.f + GETREG(TAKREG, 0x17))));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40));
|
||||
i = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
Matrix_scale(1.0f, 1.0f + v * sin_s(actor->_63A + DEG2SHORT_ANGLE(270)),
|
||||
1.0f + v * sin_s(actor->_63A + DEG2SHORT_ANGLE(90)), 1);
|
||||
} else if (joint_num == 3 && actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) {
|
||||
int i = joint1->y - actor->_618.z +
|
||||
(int)(actor->_644 * (1.0f + 0.01f * GETREG(TAKREG, 0x16)) *
|
||||
sin_s(actor->_646 + DEG2SHORT_ANGLE(-180.f + GETREG(TAKREG, 0x18))));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_bfish_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,210 @@
|
||||
|
||||
void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
actor->_5F0 = actor->_5E8;
|
||||
actor->_60C.y = s;
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_60C.x = DEG2SHORT_ANGLE2(RANDOM2_F(actor->init_data._30 * 2.0f));
|
||||
actor->_612.x = actor->_60C.x;
|
||||
actor->_5F4 = 110.0f;
|
||||
actor->_5D0.y = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_638 = qrand();
|
||||
actor->_622 = 0;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->_624 = 6;
|
||||
actor->_5AC.x = 0.0f;
|
||||
mfish_dojou_normal_init(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_dojou_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
actor->currentProcess = mfish_dojou_normal;
|
||||
}
|
||||
|
||||
void mfish_dojou_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 30.f);
|
||||
actor->_636 += DEG2SHORT_ANGLE(10);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y,
|
||||
actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636) * cos_s(actor->_60C.x)),
|
||||
CALC_EASE2(0.3f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(2.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
mfish_dojou_turn_init(actor, gamex);
|
||||
} else if (actor->_62E_flags & 0x20) {
|
||||
add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f),
|
||||
DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f));
|
||||
} else if (actor->activityFrameCount < 0) {
|
||||
f32 v = RANDOM_F(1.0f);
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14);
|
||||
if (RANDOM_F(1.0f) < 0.5f) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE((v - 0.3f) * 90.f);
|
||||
}
|
||||
if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(50)) {
|
||||
actor->_612.x = RANDOM2_F(actor->init_data._30 * 2.0f * (v - 0.3f));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_dojou_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(115);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115);
|
||||
}
|
||||
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
|
||||
actor->currentProcess = mfish_dojou_turn;
|
||||
}
|
||||
|
||||
void mfish_dojou_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 15.0f);
|
||||
actor->_636 += DEG2SHORT_ANGLE(10);
|
||||
actor->_622 = add_calc_short_angle2(
|
||||
&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636) * cos_s(actor->_60C.x)),
|
||||
CALC_EASE2(0.3f), (s16)(DEG2SHORT_ANGLE(ABS(cos_s(actor->_60C.x)) * 15.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f),
|
||||
(s16)(DEG2SHORT_ANGLE(ABS(cos_s(actor->_60C.x)) * 10.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
|
||||
if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) {
|
||||
mfish_dojou_normal_init(actor, gamex);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 v;
|
||||
xyz_t p;
|
||||
actor->currentProcess(actor, gamex);
|
||||
actor->_61E = add_calc_short_angle2(&actor->_60C.x,
|
||||
actor->_612.x + (s16)(actor->_632 * sin_s(actor->_636) * sin_s(actor->_60C.x)),
|
||||
CALC_EASE(0.1f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f));
|
||||
add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE(0.1f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f));
|
||||
|
||||
if (actor->_5E8 > actor->_5F0) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.05f);
|
||||
} else {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f);
|
||||
}
|
||||
|
||||
if (actor->_5F0 < 0.0f) {
|
||||
add_calc0(&actor->_5F0, 0.1f, 0.05f);
|
||||
add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0.5f));
|
||||
} else {
|
||||
if (ABS(actor->_60C.x) > DEG2SHORT_ANGLE(50)) {
|
||||
add_calc2(&actor->_5F0, (actor->init_data._14 + actor->init_data._10) * 2.0f, 0.2f, 0.1f);
|
||||
}
|
||||
}
|
||||
|
||||
v = cos_s(actor->_60C.x) * actor->_5E8;
|
||||
actor->_5D0.x = v * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = v * cos_s(actor->_60C.y);
|
||||
actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x);
|
||||
mfish_get_flow_vec(&p, actor, gamex);
|
||||
actor->position.x += actor->_5D0.x + p.x;
|
||||
actor->position.y += actor->_5D0.y + p.y;
|
||||
actor->position.z += actor->_5D0.z + p.z;
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(15)) {
|
||||
add_calc2(&actor->_38._00.frame_control.speed,
|
||||
(GETREG(TAKREG, 0x1a) * 0.1f + 3.0f) * 0.5f + (GETREG(TAKREG, 0x1b) * 0.1f + 3.0f) * actor->_5E8,
|
||||
0.2f, 0.1f);
|
||||
add_calc2(&actor->_5AC.x, 1.0f, 0.1f, 0.02f);
|
||||
} else {
|
||||
add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 1.5f + 0.5f, 0.2f, 0.1f);
|
||||
add_calc0(&actor->_5AC.x, 0.1f, 0.02f);
|
||||
}
|
||||
actor->_5B8 = actor->position;
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
if (actor->position.y < actor->init_data._08 + 50.f) {
|
||||
actor->position.y = actor->init_data._08 + 50.f;
|
||||
if (actor->_612.x > 0) {
|
||||
if ((RANDOM_F(1.0f) < 0.5f && actor->_63E < 0) || actor->_63E > 0) {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(-80);
|
||||
actor->_5F4 = 110.0f;
|
||||
if (actor->_63E <= 0) {
|
||||
actor->_63E = 1;
|
||||
} else {
|
||||
actor->_63E--;
|
||||
}
|
||||
} else {
|
||||
if (actor->_63E == 0) {
|
||||
actor->_63E--;
|
||||
}
|
||||
actor->_612.x = DEG2SHORT_ANGLE(-10);
|
||||
actor->_5F4 = 75.0f;
|
||||
}
|
||||
}
|
||||
} else if (actor->position.y > actor->_5F4 - actor->init_data._08) {
|
||||
actor->position.y = actor->_5F4 - actor->init_data._08;
|
||||
if (actor->_5F4 > 100.0f) {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(80);
|
||||
mfish_hamon_make(actor, gamex);
|
||||
} else {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(10);
|
||||
}
|
||||
} else {
|
||||
if (actor->_63E > 0) {
|
||||
if (actor->_612.x > 0) {
|
||||
add_calc_short_angle2(&actor->_612.x, DEG2SHORT_ANGLE(75), CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.25f),
|
||||
DEG2SHORT_ANGLE(0.0f));
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_612.x, DEG2SHORT_ANGLE(-75), CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.25f),
|
||||
DEG2SHORT_ANGLE(0.0f));
|
||||
}
|
||||
}
|
||||
actor->activityFrameCount--;
|
||||
}
|
||||
actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x));
|
||||
}
|
||||
|
||||
BOOL mfish_dojou_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int i = joint1->x + actor->_618.z;
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-45), DEG2SHORT_ANGLE(40));
|
||||
i = joint1->y + actor->_618.z;
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40));
|
||||
} else if (joint_num == 2) {
|
||||
int i = (s16)(joint1->z - actor->_618.x);
|
||||
f32 z;
|
||||
f32 t;
|
||||
joint1->z = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40));
|
||||
z = actor->_618.z;
|
||||
t = joint1->y * ((GETREG(TAKREG, 0x19) * 0.1f + 0.8f) * actor->_5AC.x + 1.0f);
|
||||
i = (int)t - (int)z;
|
||||
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
s16 s;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
s = actor->_60C.x;
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_RotateY(actor->_60C.y, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24 * (0.5f * cos_s(s) + ABS(cos_s(s))), 1);
|
||||
Matrix_RotateX(s, 1);
|
||||
Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f * cos_s(s), 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_dojou_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
|
||||
void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! BUG: ?
|
||||
qrand();
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
actor->position.x = GETREG(TAKREG, 0x32) + 450.f;
|
||||
actor->position.y = GETREG(TAKREG, 0x33) + 60.f;
|
||||
actor->position.z = GETREG(TAKREG, 0x34) + 180.f;
|
||||
actor->_5E8 = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_5F0 = actor->_5E8;
|
||||
actor->_60C.y = DEG2SHORT_ANGLE(-90);
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_5F4 = 0.0f;
|
||||
actor->_5D0.y = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_622 = 0;
|
||||
actor->_624 = 0;
|
||||
actor->_63A = qrand();
|
||||
actor->_63C = qrand();
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
}
|
||||
|
||||
void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
xyz_t p;
|
||||
f32 x, z;
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
mfish_body_wind_anime_play(actor, gamex);
|
||||
|
||||
if (actor->activityFrameCount > actor->savedActivityFrameCount - 10) {
|
||||
actor->_38._00.frame_control.speed = (actor->_5E8 * 3.0f + 1.0f) * 0.5f;
|
||||
} else {
|
||||
add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.125f, 0.2f, 0.1f);
|
||||
}
|
||||
|
||||
actor->_5AC.y = 0.0f;
|
||||
actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y);
|
||||
x = (actor->position.x - (suisou_pos[actor->group].x + 22.5f));
|
||||
z = (actor->position.z - (suisou_pos[actor->group].z - 31.25f));
|
||||
actor->_5D0.x -= x * 0.002f;
|
||||
actor->_5D0.z -= z * 0.002f;
|
||||
|
||||
actor->_5D0.y -= 0.05f;
|
||||
actor->_5D0.y *= 0.95f;
|
||||
mfish_get_flow_vec(&p, actor, gamex);
|
||||
mfish_move_smooth(actor, gamex);
|
||||
actor->position.x += actor->_5D0.x + actor->_5DC.x * 0.1f;
|
||||
actor->position.z += actor->_5D0.z + actor->_5DC.z * 0.1f;
|
||||
actor->position.y += actor->_5D0.y;
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(3.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_60C.x, actor->_612.x >> 1, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(3.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
|
||||
if (actor->activityFrameCount-- < 0) {
|
||||
s16 s = RANDOM_F(actor->init_data._30);
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_60C.y + s;
|
||||
} else {
|
||||
actor->_612.y = actor->_60C.y - s;
|
||||
}
|
||||
} else {
|
||||
if (RANDOM_F(1.0f) > 0.5f) {
|
||||
actor->_612.y = actor->_60C.y + s;
|
||||
} else {
|
||||
actor->_612.y = actor->_60C.y - s;
|
||||
}
|
||||
}
|
||||
actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
} else if (actor->activityFrameCount > actor->savedActivityFrameCount - 20) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.025f);
|
||||
} else {
|
||||
actor->_5E8 *= actor->init_data._18;
|
||||
}
|
||||
|
||||
if (actor->_62E_flags & 0x1e && actor->_5E8 > 0.05f) {
|
||||
s16 s = actor->_62C;
|
||||
if ((s16)(actor->_612.y - actor->_62C) > DEG2SHORT_ANGLE(-1) &&
|
||||
ABS((s16)(actor->_612.y - actor->_62C)) < DEG2SHORT_ANGLE(95)) {
|
||||
s += DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
s -= DEG2SHORT_ANGLE(90);
|
||||
}
|
||||
|
||||
add_calc_short_angle2(&actor->_612.y, s, CALC_EASE(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
|
||||
Museum_Fish_DonkoBGCheck(actor, gamex);
|
||||
}
|
||||
|
||||
BOOL 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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int i = joint1->x + (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
} else if (joint_num == 2) {
|
||||
int i = joint1->y - (actor->_618.z << 1);
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60));
|
||||
i = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_RotateY(actor->_60C.y, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1);
|
||||
Matrix_RotateX(actor->_60C.x, 1);
|
||||
Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_donko_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,214 @@
|
||||
|
||||
void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
actor->_5F0 = actor->_5E8;
|
||||
actor->_60C.y = s;
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_60C.x = DEG2SHORT_ANGLE(RANDOM2_F(actor->init_data._30 * 2.0f));
|
||||
actor->_612.x = actor->_60C.x;
|
||||
actor->_5F4 = 115.f;
|
||||
actor->_5D0.y = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_638 = qrand();
|
||||
actor->_622 = 0;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->_624 = 6;
|
||||
mfish_gupi_normal_init(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_gupi_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
actor->currentProcess = mfish_gupi_normal;
|
||||
}
|
||||
|
||||
void mfish_gupi_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 35.f);
|
||||
actor->_636 += DEG2SHORT_ANGLE(7.5f);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632),
|
||||
CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
mfish_gupi_turn_init(actor, gamex);
|
||||
} else if (actor->_62E_flags & 0x20) {
|
||||
add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f),
|
||||
DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f));
|
||||
} else if (actor->activityFrameCount < 0) {
|
||||
f32 v = RANDOM_F(1.0f);
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14);
|
||||
|
||||
if (RANDOM_F(1.0f) < 0.5f) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE((v - 0.3f) * 90.f);
|
||||
}
|
||||
|
||||
if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(20)) {
|
||||
actor->_612.x = RANDOM2_F(actor->init_data._30 * 2.0f * (v - 0.3f));
|
||||
if (actor->_612.x > 0) {
|
||||
actor->_612.x = MAX(actor->_612.x, DEG2SHORT_ANGLE(5));
|
||||
} else {
|
||||
actor->_612.x = MIN(actor->_612.x, DEG2SHORT_ANGLE(-5));
|
||||
}
|
||||
}
|
||||
|
||||
} else if (actor->_5F8 > actor->init_data._08 * 30.f) {
|
||||
s16 s;
|
||||
//! BUG: unused?
|
||||
RANDOM_F(1.0f);
|
||||
s = search_position_angleY(&suisou_pos[actor->group], &actor->position);
|
||||
actor->_5F8 = 0.0f;
|
||||
actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90.0));
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->activityFrameCount >>= 1;
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_gupi_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(115);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115);
|
||||
}
|
||||
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
|
||||
actor->currentProcess = mfish_gupi_turn;
|
||||
}
|
||||
|
||||
void mfish_gupi_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 15.0f);
|
||||
actor->_636 += DEG2SHORT_ANGLE(7.5f);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632),
|
||||
CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f));
|
||||
if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) {
|
||||
mfish_gupi_normal_init(actor, gamex);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 v;
|
||||
xyz_t p;
|
||||
int s;
|
||||
actor->currentProcess(actor, gamex);
|
||||
actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->_5E8 > actor->_5F0) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.05f);
|
||||
} else {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f);
|
||||
}
|
||||
|
||||
if (actor->_5F0 < 0.0f) {
|
||||
add_calc0(&actor->_5F0, 0.1f, 0.05f);
|
||||
add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0.5f));
|
||||
} else {
|
||||
if (ABS(actor->_60C.x) > DEG2SHORT_ANGLE(50)) {
|
||||
add_calc2(&actor->_5F0, actor->init_data._14 + actor->init_data._10, 0.2f, 0.1f);
|
||||
}
|
||||
}
|
||||
v = cos_s(actor->_60C.x) * actor->_5E8;
|
||||
actor->_5D0.x = v * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = v * cos_s(actor->_60C.y);
|
||||
actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x);
|
||||
mfish_get_flow_vec(&p, actor, gamex);
|
||||
actor->position.x += actor->_5D0.x + p.x;
|
||||
actor->position.y += actor->_5D0.y + p.y;
|
||||
actor->position.z += actor->_5D0.z + p.z;
|
||||
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
if (actor->_5F0 - 0.01f > actor->_5E8 && actor->_5F0 > 0.1f) {
|
||||
actor->_38._00.frame_control.speed =
|
||||
(1.0f + GETREG(TAKREG, 0x28) * 0.1f) * 0.5f + (3.0f + GETREG(TAKREG, 0x29) * 0.1f) * actor->_5E8;
|
||||
} else {
|
||||
add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f);
|
||||
}
|
||||
actor->_63A += (s16)DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x47) + 3.0f);
|
||||
actor->_5B8 = actor->position;
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
|
||||
if (actor->position.y < (actor->_5F4 - 30.f) + actor->init_data._08) {
|
||||
actor->position.y = (actor->_5F4 - 30.f) + actor->init_data._08;
|
||||
if (actor->_612.x > 0) {
|
||||
if (RANDOM_F(1.0f) < 0.1f) {
|
||||
actor->_5F4 -= RANDOM_F(10.f) + 5.0f;
|
||||
actor->_5F4 = CLAMP(actor->_5F4, 85.0f, 115.0f);
|
||||
} else {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(-30);
|
||||
}
|
||||
}
|
||||
} else if (actor->position.y > actor->_5F4 - actor->init_data._08) {
|
||||
actor->position.y = actor->_5F4 - actor->init_data._08;
|
||||
if (actor->_612.x <= 0) {
|
||||
if (RANDOM_F(1.0f) < 0.1f) {
|
||||
actor->_5F4 += RANDOM_F(10.f) + 5.0f;
|
||||
actor->_5F4 = CLAMP(actor->_5F4, 85.0f, 115.0f);
|
||||
} else {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(30);
|
||||
}
|
||||
}
|
||||
if (actor->_5F4 > 110.f || actor->position.y >= 114.5f - actor->init_data._08) {
|
||||
mfish_hamon_make(actor, gamex);
|
||||
}
|
||||
} else {
|
||||
actor->activityFrameCount--;
|
||||
}
|
||||
|
||||
actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x));
|
||||
}
|
||||
|
||||
BOOL mfish_gupi_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int s = joint1->x + actor->_618.z;
|
||||
joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
s = joint1->y + actor->_618.z;
|
||||
joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_num == 2) {
|
||||
int s;
|
||||
if (actor->_5F0 - 0.001f > actor->_5E8) {
|
||||
joint1->y += (int)(2.0f * (actor->_5F0 - actor->_5E8) * joint1->y);
|
||||
}
|
||||
s = joint1->y - actor->_618.z * 3;
|
||||
joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(60), DEG2SHORT_ANGLE(60));
|
||||
s = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
joint1->z += (s16)(actor->_618.x * (-1.3f + GETREG(TAKREG, 0x4e) * 0.1f));
|
||||
Matrix_scale((GETREG(TAKREG, 0x4b) * 0.01f) * cos_s(actor->_63A) + 0.05f + 1.0f,
|
||||
(GETREG(TAKREG, 0x4c) * 0.01f) * sin_s(actor->_63A) + 0.1f + 1.0f, 1.0f, 1);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_gupi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
s16 v;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
v = actor->_60C.x * 0.7f;
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_RotateY(actor->_60C.y, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1);
|
||||
Matrix_RotateX(v, 1);
|
||||
Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_gupi_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
// Pretty sure all the floats in this file are correct
|
||||
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_museum5_hasu;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_museum5_hasu;
|
||||
|
||||
void mfish_hasu_ct(YET_SKELETON_2* actor, GAME* gamex) {
|
||||
cKF_SkeletonInfo_R_ct(&actor->_00._00, &cKF_bs_r_obj_museum5_hasu, &cKF_ba_r_obj_museum5_hasu, &actor->_00._4F0,
|
||||
&actor->_00._526);
|
||||
cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->_00._00, &cKF_ba_r_obj_museum5_hasu, NULL, 0.5f,
|
||||
0.0f);
|
||||
}
|
||||
|
||||
void mfish_hasu_mv(YET_SKELETON_2* actor, GAME* gamex) {
|
||||
cKF_SkeletonInfo_R_play(&actor->_00._00);
|
||||
}
|
||||
|
||||
void mfish_hasu_dw(YET_SKELETON_2* actor, GAME* gamex) {
|
||||
Mtx* mtxp;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &actor->_00._70;
|
||||
} else {
|
||||
mtxp = &actor->_00._2b0;
|
||||
}
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(hasu_pos.x + GETREG(TAKREG, 0x42) * 0.1f, hasu_pos.y, hasu_pos.z + GETREG(TAKREG, 0x43) * 0.1f, 0);
|
||||
Matrix_RotateY(DEG2SHORT_ANGLE(-180), 1);
|
||||
Matrix_scale(0.01f, 0.01f, 0.01f, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &actor->_00._00, mtxp, NULL, NULL, NULL);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
|
||||
extern cKF_Animation_R_c cKF_ba_r_act_mus_kaeru_a1_big;
|
||||
void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
YET_SKELETON_2* keyframe = actor->_590;
|
||||
skele->_550[1] = &cKF_ba_r_act_mus_kaeru_a1_big;
|
||||
cKF_SkeletonInfo_R_ct(&skele->_00, skele->_54C, skele->_550[0], &skele->_4F0, &skele->_514);
|
||||
cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&skele->_00, skele->_550[0], NULL, 0.5f, 0.0f);
|
||||
cKF_SkeletonInfo_R_ct(&keyframe->_00._00, &cKF_bs_r_obj_museum5_hasu, &cKF_ba_r_obj_museum5_hasu,
|
||||
&keyframe->_00._4F0, &keyframe->_00._526);
|
||||
cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&keyframe->_00._00, &cKF_ba_r_obj_museum5_hasu, NULL, 0.5f,
|
||||
0.0f);
|
||||
actor->position.x = 453.9f;
|
||||
actor->position.y = 116.0f;
|
||||
actor->position.z = 250.4f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->activityFrameCount = 0;
|
||||
actor->_612.x = 0;
|
||||
actor->_612.y = 0;
|
||||
actor->_612.z = 0;
|
||||
actor->_60C = ZeroSVec;
|
||||
actor->_5AC.x = -1.5f;
|
||||
actor->_5AC.z = -2.0f;
|
||||
actor->_60C.y = DEG2SHORT_ANGLE(135);
|
||||
actor->_60C.y = DEG2SHORT_ANGLE(135);
|
||||
actor->_640 = 0;
|
||||
actor->_63E = RANDOM_F(8.0f) + 1.0f;
|
||||
actor->_624 = 4;
|
||||
}
|
||||
|
||||
void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
YET_SKELETON* skele1 = &actor->_38;
|
||||
YET_SKELETON_2* skele2 = actor->_590;
|
||||
cKF_SkeletonInfo_R_play(&skele1->_00);
|
||||
cKF_SkeletonInfo_R_play(&skele2->_00._00);
|
||||
skele2->_568 += DEG2SHORT_ANGLE(GETREG(TAKREG, 0xb) + 5.0f);
|
||||
skele2->_56A += DEG2SHORT_ANGLE(GETREG(TAKREG, 0xb) + 5.0f);
|
||||
skele2->_56C += DEG2SHORT_ANGLE(GETREG(TAKREG, 0xb) + 5.0f);
|
||||
add_calc0(&skele2->_55C, 0.2f, GETREG(TAKREG, 0xc) * 0.1f + 0.5f);
|
||||
add_calc0(&skele2->_560, 0.2f, GETREG(TAKREG, 0xc) * 0.1f + 0.5f);
|
||||
add_calc0(&skele2->_564, 0.2f, GETREG(TAKREG, 0xc) * 0.1f + 0.5f);
|
||||
// some other macro?
|
||||
if ((float)__fabs(skele1->_00.frame_control.current_frame - skele1->_00.frame_control.start_frame) < 0.008f) {
|
||||
actor->_63E--;
|
||||
if (actor->_63E <= 0) {
|
||||
if (actor->_640 == 1) {
|
||||
actor->_640 = 0;
|
||||
} else {
|
||||
actor->_640 = 1;
|
||||
}
|
||||
actor->_63E = RANDOM_F(8.0f) + 1.0f;
|
||||
cKF_SkeletonInfo_R_init_standard_repeat_morph(&skele1->_00, skele1->_550[actor->_640], NULL, 0.f);
|
||||
}
|
||||
if (actor->_640 == 1) {
|
||||
sAdo_OngenTrgStart(0x77, &actor->position);
|
||||
actor->_612.x = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_612.x > 0) {
|
||||
actor->_612.x++;
|
||||
if (actor->_612.x == GETREG(TAKREG, 0x31) + 0xf || actor->_612.x == (GETREG(TAKREG, 0x32) + 0x19)) {
|
||||
s16 v = GETREG(TAKREG, 0x4d) + 0x3c;
|
||||
xyz_t v1 = hasu_pos;
|
||||
v1.x += (-32.6f + GETREG(TAKREG, 0x49) * 0.1f);
|
||||
v1.y += 116.f;
|
||||
v1.z += (-26.6f + GETREG(TAKREG, 0x4a) * 0.1f);
|
||||
if (actor->_612.x == GETREG(TAKREG, 0x31) + 0xf) {
|
||||
skele2->_564 = GETREG(TAKREG, 10) + 30.0f;
|
||||
skele2->_56C = DEG2SHORT_ANGLE(-180);
|
||||
if (RANDOM_F(1.0f) < GETREG(TAKREG, 0x2b) * 0.01f + 0.6f) {
|
||||
actor->_612.z = 1;
|
||||
}
|
||||
} else {
|
||||
actor->_612.x = 0;
|
||||
}
|
||||
v1.x += -1.0f;
|
||||
v1.y += -1.0f;
|
||||
v1.z += -4.0f;
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(0x45, v1, 2, DEG2SHORT_ANGLE(0), gamex, -1, 6, v);
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_612.y > 0) {
|
||||
actor->_612.y++;
|
||||
if (actor->_612.y == GETREG(TAKREG, 0x33) + 0xd || actor->_612.y == GETREG(TAKREG, 0x34) + 0x17) {
|
||||
xyz_t v1 = hasu_pos;
|
||||
s16 v = GETREG(TAKREG, 0x4c) + 0x23;
|
||||
v1.x += (-2.3f + GETREG(TAKREG, 0x47) * 0.1f);
|
||||
v1.y += 116.f;
|
||||
v1.z += (-13.7f + GETREG(TAKREG, 0x48) * 0.1f);
|
||||
if (actor->_612.y == GETREG(TAKREG, 0x33) + 0xd) {
|
||||
skele2->_560 = GETREG(TAKREG, 10) + 30.0f;
|
||||
skele2->_56A = DEG2SHORT_ANGLE(-180);
|
||||
} else {
|
||||
actor->_612.y = 0;
|
||||
}
|
||||
v1.x += -1.f;
|
||||
v1.y += -1.f;
|
||||
v1.z += -4.f;
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(0x45, v1, 2, DEG2SHORT_ANGLE(0), gamex, -1, 6, v);
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_612.z > 0) {
|
||||
actor->_612.z++;
|
||||
if (actor->_612.z == GETREG(TAKREG, 0x35) + 0x17 || actor->_612.z == GETREG(TAKREG, 0x36) + 0x21) {
|
||||
xyz_t v1 = hasu_pos;
|
||||
s16 v = GETREG(TAKREG, 0x4b) + 10;
|
||||
v1.x += (-7.7f + GETREG(TAKREG, 0x45) * 0.1f);
|
||||
v1.y += 116.0f;
|
||||
v1.z += (-32.3f + GETREG(TAKREG, 0x46) * 0.1f);
|
||||
if (actor->_612.z == GETREG(TAKREG, 0x35) + 0x17) {
|
||||
skele2->_55C = GETREG(TAKREG, 10) + 30.0f;
|
||||
skele2->_568 = DEG2SHORT_ANGLE(-180);
|
||||
if (RANDOM_F(1.0f) < GETREG(TAKREG, 0x2c) * 0.01f + 0.6f) {
|
||||
actor->_612.y = 1;
|
||||
}
|
||||
} else {
|
||||
actor->_612.z = 0;
|
||||
}
|
||||
v1.x += -1.0f;
|
||||
v1.y += -1.0f;
|
||||
v1.z += -4.0f;
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(0x45, v1, 2, DEG2SHORT_ANGLE(0), gamex, -1, 6, v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOL hasu_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
YET_SKELETON_2* v2 = actor->_590;
|
||||
if (joint_num == 7) {
|
||||
trans->z += v2->_55C * sin_s(v2->_568);
|
||||
} else if (joint_num == 4) {
|
||||
trans->z += v2->_560 * sin_s(v2->_56A);
|
||||
} else if (joint_num == 9) {
|
||||
trans->z += v2->_564 * sin_s(v2->_56C);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL hasu_after_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
YET_SKELETON_2* skele = actor->_590;
|
||||
if (joint_num == 9) {
|
||||
Matrix_Position_Zero(&actor->position);
|
||||
actor->position.y = skele->_564 * actor->init_data.renderScale * sin_s(skele->_56C) + 116.0f;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
YET_SKELETON_2* keyframe = actor->_590;
|
||||
Mtx *mtxp, *mtxp2;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
mtxp2 = &keyframe->_00._70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
mtxp2 = &keyframe->_00._2b0;
|
||||
}
|
||||
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(hasu_pos.x + GETREG(TAKREG, 0x42) * 0.1f, hasu_pos.y, hasu_pos.z + GETREG(TAKREG, 0x43) * 0.1f, 0);
|
||||
Matrix_RotateY(DEG2SHORT_ANGLE(-180), 1);
|
||||
Matrix_scale(0.01f, 0.01f, 0.01f, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &keyframe->_00._00, mtxp2, hasu_before_disp, hasu_after_disp, actor);
|
||||
|
||||
Matrix_translate(actor->position.x + actor->_5AC.x, actor->position.y, actor->position.z + actor->_5AC.z, 0);
|
||||
Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, NULL, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
|
||||
void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! BUG: unused
|
||||
s16 s = qrand();
|
||||
actor->position.y = actor->init_data._0C;
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
actor->_5E8 = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_5F0 = actor->_5E8;
|
||||
actor->_60C.y = DEG2SHORT_ANGLE(90);
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_5F4 = 0.0f;
|
||||
actor->_5D0.y = 0.0f;
|
||||
actor->_622 = 0;
|
||||
actor->_624 = 7;
|
||||
actor->_63A = qrand();
|
||||
actor->_63C = qrand();
|
||||
actor->_640 = 0;
|
||||
actor->_634 = 0;
|
||||
actor->_632 = 0;
|
||||
actor->_644 = 0;
|
||||
actor->_5AC.x = 0.0f;
|
||||
actor->_5AC.z = 0.0f;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
}
|
||||
|
||||
void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
xyz_t p;
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
mfish_body_wind_anime_play(actor, gamex);
|
||||
actor->_38._00.frame_control.speed = (sin_s(actor->_63A) * 0.6f + 3.0f) * 0.5f;
|
||||
actor->_5AC.y = sin_s(actor->_63A) * 0.2f;
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f);
|
||||
actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y);
|
||||
if (ABS(actor->_600 - actor->_5FC) > 60.f) {
|
||||
if (actor->_600 > actor->_5FC) {
|
||||
add_calc2(&actor->_5F0, 0.1f, CALC_EASE(0.05f), 0.005f);
|
||||
} else {
|
||||
add_calc2(&actor->_5F0, -0.1f, CALC_EASE(0.05f), 0.005f);
|
||||
}
|
||||
}
|
||||
mfish_get_flow_vec(&p, actor, gamex);
|
||||
actor->position.x += actor->_5D0.x + p.x * 0.1f;
|
||||
actor->position.z += actor->_5D0.z + p.z * 0.1f;
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.875f),
|
||||
DEG2SHORT_ANGLE(0.05f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.025f));
|
||||
add_calc(&actor->position.y, actor->init_data._0C + actor->_5F4, CALC_EASE(0.05f), 0.15f, 0.05f);
|
||||
actor->_646 += DEG2SHORT_ANGLE(10);
|
||||
add_calc_short_angle2(&actor->_634, actor->_640, CALC_EASE2(0.1f),
|
||||
(s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 0x3d) * 0.1f + 0.8f) >> 1) >> 1,
|
||||
DEG2SHORT_ANGLE(0.025f));
|
||||
add_calc_short_angle2(&actor->_644, actor->_634, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.625f),
|
||||
DEG2SHORT_ANGLE(0.025f));
|
||||
add_calc2(&actor->_5AC.x, actor->_5AC.z, 0.25f, 0.001f);
|
||||
if (actor->activityFrameCount-- < 0) {
|
||||
if (RANDOM_F(1.0f) > 0.5f && actor->_600 > 5.0f) {
|
||||
if (actor->_60C.y > 0) {
|
||||
actor->_612.y = DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
actor->_612.y = DEG2SHORT_ANGLE(-90);
|
||||
}
|
||||
actor->_5F0 = actor->init_data._10 + MAX(-actor->init_data._10, RANDOM_F(actor->init_data._14));
|
||||
actor->_642 = DEG2SHORT_ANGLE(RANDOM2_F(2.0f) + 3.0f);
|
||||
actor->_634 = DEG2SHORT_ANGLE(RANDOM_F(10.0f) + 20.0f);
|
||||
actor->_640 = DEG2SHORT_ANGLE(RANDOM_F(10.0f));
|
||||
actor->_5AC.z = Rnd_EX_f(0.06f);
|
||||
} else {
|
||||
actor->_5F0 = -0.1f;
|
||||
actor->_5F4 = RANDOM2_F(5.0f);
|
||||
actor->_642 = 0;
|
||||
actor->_634 = 0;
|
||||
actor->_640 = 0;
|
||||
actor->_5AC.z = 0.0f;
|
||||
}
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
}
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
}
|
||||
|
||||
BOOL mfish_ito_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
f32 v;
|
||||
int i = joint1->x + (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
i = joint1->y + (int)(actor->_644 * (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * sin_s(actor->_646));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
v = actor->_5AC.x * actor->_644 * sin_s(actor->_646 - DEG2SHORT_ANGLE(90));
|
||||
trans->z += v;
|
||||
Matrix_scale(1.0f, sin_s(actor->_63A + actor->_63C) * 0.025f + 1.0f, sin_s(actor->_63A) * 0.025f + 1.0f, 1);
|
||||
} else if (joint_num == 2) {
|
||||
int i;
|
||||
i = joint1->y - 2 * actor->_618.z +
|
||||
(int)(actor->_644 * (GETREG(TAKREG, 0x15) * 0.01f + 0.75f) *
|
||||
sin_s(actor->_646 + DEG2SHORT_ANGLE(-90.f + GETREG(TAKREG, 0x17))));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40));
|
||||
i = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
Matrix_scale(1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) * 0.05f + 1.0f,
|
||||
sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) * 0.05f + 1.0f, 1);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y + actor->_5AC.y, actor->position.z, 0);
|
||||
Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_ito_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
|
||||
void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
actor->_5F0 = actor->_5E8;
|
||||
if (RANDOM_F(1.0f) > 0.5f) {
|
||||
actor->_60C.y = DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
actor->_60C.y = DEG2SHORT_ANGLE(-90);
|
||||
}
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_5D0.y = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_638 = qrand();
|
||||
actor->_622 = 0;
|
||||
actor->_634 = 0;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->_624 = 1;
|
||||
actor->_594 = NULL;
|
||||
actor->_598 = NULL;
|
||||
mfish_kaseki_normal_init(actor, gamex);
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_kaseki_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
|
||||
actor->currentProcess = mfish_kaseki_normal;
|
||||
}
|
||||
|
||||
void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = ABS(actor->_622) * (actor->init_data._30 * (GETREG(TAKREG, 0x1d) * 0.001f + 0.5f) / 32749.0f);
|
||||
s = MIN(actor->_634, MAX(s, DEG2SHORT_ANGLE2(5)));
|
||||
add_calc_short_angle2(&actor->_632, 0, CALC_EASE(0.5), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f));
|
||||
actor->_636 += 455;
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
CALC_EASE2(GETREG(TAKREG, 0x1e) * 0.01f + 0.15f), (s16)(s >> 1) >> 1,
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(GETREG(TAKREG, 0x1f) * 0.01f + 0.1f),
|
||||
(s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 0x20) * 0.1f + 4.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->_5FC < 10.0f - actor->init_data._28 * 0.5f) {
|
||||
if (actor->_612.y < 0) {
|
||||
s16 v;
|
||||
if (actor->_604 > actor->_608) {
|
||||
v = actor->_60C.y - DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
v = actor->_60C.y + DEG2SHORT_ANGLE(90);
|
||||
}
|
||||
actor->_612.y = v;
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(90), CALC_EASE(GETREG(TAKREG, 0x21) * 0.01f + 0.25f),
|
||||
DEG2SHORT_ANGLE(GETREG(TAKREG, 0x22) + 25.0f) >> 1, DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
} else if (actor->_600 < 10.0 - actor->init_data._28 * 0.5) {
|
||||
if (actor->_612.y > 0) {
|
||||
s16 v;
|
||||
if (actor->_604 > actor->_608) {
|
||||
v = actor->_60C.y + DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
v = actor->_60C.y - DEG2SHORT_ANGLE(90);
|
||||
}
|
||||
actor->_612.y = v;
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(-90), CALC_EASE(GETREG(TAKREG, 0x21) * 0.01f + 0.25f),
|
||||
DEG2SHORT_ANGLE(GETREG(TAKREG, 0x22) + 25.0f) >> 1, DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
} else if (actor->_62E_flags & 0x1e) {
|
||||
mfish_kaseki_move_wall_smooth(actor, gamex);
|
||||
} else if (actor->activityFrameCount < 0) {
|
||||
f32 r = RANDOM_F(1.0f);
|
||||
actor->_612.y = actor->_60C.y;
|
||||
if ((actor->_608 - actor->_604) * cos_s(actor->_60C.y) < 0) {
|
||||
actor->_612.y += (s16)(r * actor->init_data._30);
|
||||
} else {
|
||||
actor->_612.y -= (s16)(r * actor->init_data._30);
|
||||
}
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)(RANDOM_F(actor->init_data.activeFramesRange));
|
||||
actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_kaseki_move_wall_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
int n = (s16)actor->_62C;
|
||||
s16 s;
|
||||
s16 a, b;
|
||||
s16 diff;
|
||||
if (MIN(actor->_5FC, actor->_600) < 40.0f && ABS(actor->_618.z) > DEG2SHORT_ANGLE(5)) {
|
||||
return;
|
||||
}
|
||||
|
||||
diff = actor->_60C.y - (s16)n;
|
||||
if (diff > 0) {
|
||||
s = ((s16)n + DEG2SHORT_ANGLE(90.0f));
|
||||
} else {
|
||||
s = ((s16)n - DEG2SHORT_ANGLE(90.0f));
|
||||
}
|
||||
|
||||
a = (actor->_612.y - actor->_60C.y);
|
||||
b = s - actor->_60C.y;
|
||||
if (a * b > DEG2SHORT_ANGLE(-5)) {
|
||||
add_calc_short_angle2(&actor->_612.y, s, CALC_EASE(0.25f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0));
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
f32 v;
|
||||
actor->currentProcess(actor, game);
|
||||
add_calc2(&actor->position.y, actor->init_data._0C, 0.5f, 0.1f);
|
||||
if (ABS(actor->_622) > DEG2SHORT_ANGLE(10)) {
|
||||
add_calc_short_angle2(&actor->_634, DEG2SHORT_ANGLE(20), CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.25f),
|
||||
DEG2SHORT_ANGLE(0));
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_634, DEG2SHORT_ANGLE(1), CALC_EASE(0.25f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0));
|
||||
}
|
||||
|
||||
if (MIN(actor->_5FC, actor->_600) < 20.0f) {
|
||||
if (ABS(actor->_618.z) > ABS(actor->_622) &&
|
||||
ABS(actor->_618.z) < DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x36) + 20.0f)) {
|
||||
add_calc2(&actor->_5E8, GETREG(TAKREG, 0x30) * 0.01f + 0.8f, GETREG(TAKREG, 0x31) * 0.01f + 0.25f,
|
||||
GETREG(TAKREG, 0x32) * 0.01f + 0.1f);
|
||||
} else {
|
||||
add_calc2(&actor->_5E8, GETREG(TAKREG, 0x33) * 0.01f + 0.35f, GETREG(TAKREG, 0x34) * 0.01f + 0.05f,
|
||||
GETREG(TAKREG, 0x35) * 0.01f + 0.05f);
|
||||
}
|
||||
} else {
|
||||
if (actor->_5E8 > actor->_5F0) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.01f);
|
||||
} else {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.3f, 0.02f);
|
||||
}
|
||||
}
|
||||
v = actor->_5E8 * (1.0f - ((sin_s(actor->_63A) * 0.2f + 0.2f) * MAX(cos_s(actor->_618.z), 0.5f)));
|
||||
actor->_5D0.x = v * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = v * cos_s(actor->_60C.y);
|
||||
actor->position.x += actor->_5D0.x;
|
||||
actor->position.z += actor->_5D0.z;
|
||||
mfish_onefish_mv(actor, game);
|
||||
actor->_38._00.frame_control.speed = actor->_5E8 * 0.75f + 0.25f;
|
||||
mfish_body_wind_anime_play(actor, game);
|
||||
Museum_Fish_BGCheck(actor, game);
|
||||
if (actor->position.y < 55.0f - actor->init_data._04) {
|
||||
actor->position.y = 55.0f - actor->init_data._04;
|
||||
}
|
||||
actor->activityFrameCount--;
|
||||
}
|
||||
|
||||
BOOL mfish_kaseki_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
int i;
|
||||
if (joint_num == 1) {
|
||||
i = joint1->x + (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.01f + 0.5f));
|
||||
joint1->x = MIN(MAX(i, DEG2SHORT_ANGLE(-10)), DEG2SHORT_ANGLE(10));
|
||||
Matrix_scale(1.0f, (GETREG(TAKREG, 0x36) * 0.001f + 0.02f) * sin_s(actor->_63A + actor->_63C) + 1.0f,
|
||||
(GETREG(TAKREG, 0x36) * 0.001f + 0.02f) * sin_s(actor->_63A) + 1.0f, 1);
|
||||
} else if (joint_num == 2) {
|
||||
i = joint1->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x46) * 0.01f + 1.25f));
|
||||
joint1->y = MIN(MAX(i, DEG2SHORT_ANGLE(-50)), DEG2SHORT_ANGLE(50));
|
||||
i = joint1->x - (int)(actor->_618.z * (GETREG(TAKREG, 0x48) * 0.01f + 0.25f));
|
||||
joint1->x = MIN(MAX(i, DEG2SHORT_ANGLE(-10)), DEG2SHORT_ANGLE(10));
|
||||
Matrix_scale(1.0f, (GETREG(TAKREG, 0x37) * 0.001f + 0.045f) * sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) + 1.0f,
|
||||
(GETREG(TAKREG, 0x37) * 0.001f + 0.045f) * sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) + 1.0f, 1);
|
||||
} else if (joint_num == 3) {
|
||||
i = joint1->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.01f + 1.25f));
|
||||
joint1->y = MIN(MAX(i, DEG2SHORT_ANGLE(-50)), DEG2SHORT_ANGLE(50));
|
||||
i = joint1->x + DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x2d) * sin_s(actor->_63A));
|
||||
joint1->x = MIN(MAX(i, DEG2SHORT_ANGLE(-40)), DEG2SHORT_ANGLE(40));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_kaseki_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,263 @@
|
||||
|
||||
void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
actor->_5F0 = actor->_5E8;
|
||||
actor->_60C.y = s;
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_60C.x = DEG2SHORT_ANGLE2(RANDOM2_F(actor->init_data._30 * 2.0f));
|
||||
actor->_612.x = actor->_60C.x;
|
||||
actor->_5F4 = 110.0f;
|
||||
actor->_5D0.y = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_622 = 0;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_640 = RANDOM_F(130.f);
|
||||
actor->_624 = 6;
|
||||
mfish_kingyo_normal_init(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_kingyo_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
actor->currentProcess = mfish_kingyo_normal;
|
||||
}
|
||||
|
||||
void mfish_kingyo_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_632 = 0;
|
||||
actor->_636 = 0;
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f));
|
||||
|
||||
if (mfish_peck_check(actor, gamex)) {
|
||||
mfish_kingyo_peck_init(actor, gamex);
|
||||
} else if (actor->_62E_flags & 0x1e) {
|
||||
mfish_kingyo_turn_init(actor, gamex);
|
||||
} else if (actor->_62E_flags & 0x20) {
|
||||
add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f),
|
||||
DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f));
|
||||
} else if (actor->activityFrameCount < 0) {
|
||||
f32 v = RANDOM_F(1.0f);
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_640 = RANDOM_F(130.f);
|
||||
actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14);
|
||||
if (RANDOM_F(1.0f) < 0.5f) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE((v - 0.3f) * 90.f);
|
||||
}
|
||||
if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(50)) {
|
||||
actor->_612.x = RANDOM2_F(actor->init_data._30 * 2.0f * (v - 0.3f));
|
||||
}
|
||||
} else if (actor->_5F8 > actor->init_data._08 * 30.f) {
|
||||
f32 v = RANDOM_F(1.0f);
|
||||
s16 s = search_position_angleY(&suisou_pos[actor->group], &actor->position);
|
||||
actor->_5F8 = 0.0f;
|
||||
actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90));
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->activityFrameCount >>= 1;
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_640 = RANDOM_F(130.f);
|
||||
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_kingyo_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(115);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115);
|
||||
}
|
||||
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
|
||||
actor->currentProcess = mfish_kingyo_turn;
|
||||
}
|
||||
|
||||
void mfish_kingyo_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_632 = 0;
|
||||
actor->_636 = 0;
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f));
|
||||
if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) {
|
||||
mfish_kingyo_normal_init(actor, gamex);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_kingyo_peck_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 dist;
|
||||
mfish_get_player_angle(actor, gamex, &actor->_612.y, &actor->_612.x, &dist);
|
||||
actor->activityFrameCount = 120;
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_640 = RANDOM_F(130.f);
|
||||
actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
actor->currentProcess = mfish_kingyo_peck;
|
||||
}
|
||||
|
||||
void mfish_kingyo_peck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 30.f);
|
||||
actor->_636 += DEG2SHORT_ANGLE(7.5f);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(10),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->activityFrameCount < 0) {
|
||||
f32 dist;
|
||||
mfish_get_player_angle(actor, gamex, &actor->_612.y, &actor->_612.x, &dist);
|
||||
if (ABS(actor->_612.y) < DEG2SHORT_ANGLE(15)) {
|
||||
if (actor->_612.y > 0) {
|
||||
actor->_612.y = DEG2SHORT_ANGLE(15);
|
||||
} else {
|
||||
actor->_612.y = DEG2SHORT_ANGLE(-15);
|
||||
}
|
||||
} else if (ABS(actor->_612.y) > DEG2SHORT_ANGLE(165)) {
|
||||
if (actor->_612.y > 0) {
|
||||
actor->_612.y = DEG2SHORT_ANGLE(165);
|
||||
} else {
|
||||
actor->_612.y = DEG2SHORT_ANGLE(-165);
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_62E_flags & 0x20 && dist > 40.f) {
|
||||
if ((s16)(actor->_612.y - actor->_62A) > 0) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(90);
|
||||
}
|
||||
}
|
||||
actor->_612.x += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(20.0f));
|
||||
actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
if (actor->_5F0 < 0.1f) {
|
||||
actor->_5F0 = 0.1f;
|
||||
}
|
||||
if (dist > 40.0f) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_640 = RANDOM_F(130.f);
|
||||
} else {
|
||||
actor->activityFrameCount = 60;
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_640 = RANDOM_F(130.f);
|
||||
}
|
||||
} else if (MF_Control_Actor->_14db4 != actor->group) {
|
||||
mfish_kingyo_turn_init(actor, gamex);
|
||||
} else if (mfish_peck_wall_check(actor, gamex)) {
|
||||
actor->_5F0 = 0.0f;
|
||||
actor->_5E8 = -0.2f;
|
||||
} else if (fabsf(actor->_5E8) < 0.008f) {
|
||||
actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 v;
|
||||
xyz_t p;
|
||||
actor->currentProcess(actor, gamex);
|
||||
actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
|
||||
if (actor->_5E8 > actor->_5F0) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.05f);
|
||||
} else {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, GETREG(TAKREG, 0x35) * 0.01f + 0.25f,
|
||||
GETREG(TAKREG, 0x36) * 0.01f + 0.05f);
|
||||
}
|
||||
if (actor->_5F0 < 0.0f) {
|
||||
add_calc0(&actor->_5F0, 0.1f, 0.05f);
|
||||
add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0.5f));
|
||||
} else if (ABS(actor->_60C.x) > DEG2SHORT_ANGLE(50)) {
|
||||
add_calc2(&actor->_5F0, actor->init_data._14 + actor->init_data._10, 0.2f, 0.1f);
|
||||
}
|
||||
v = actor->_5E8 * cos_s(actor->_60C.x);
|
||||
actor->_5D0.x = v * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = v * cos_s(actor->_60C.y);
|
||||
actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x);
|
||||
mfish_get_flow_vec(&p, actor, gamex);
|
||||
actor->position.x += actor->_5D0.x + p.x;
|
||||
actor->position.y += actor->_5D0.y + p.y;
|
||||
actor->position.z += actor->_5D0.z + p.z;
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
if ((((actor->_5F0 - 0.01f) > actor->_5E8) ||
|
||||
(actor->activityFrameCount > (s16)(actor->savedActivityFrameCount - actor->_640))) &&
|
||||
actor->_5F0 > 0.1f) {
|
||||
actor->_38._00.frame_control.speed =
|
||||
(5.0f + GETREG(TAKREG, 0x28) * 0.1f) * 0.5f + (4.0f + GETREG(TAKREG, 0x29) * 0.1f) * actor->_5E8;
|
||||
} else {
|
||||
add_calc2(&actor->_5F0, GETREG(TAKREG, 0x31) * 0.001f + 0.05f, GETREG(TAKREG, 0x32) * 0.001f + 0.01f,
|
||||
GETREG(TAKREG, 0x33) * 0.001f + 0.002f);
|
||||
add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f);
|
||||
}
|
||||
actor->_63A += (s16)DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x47) + 3.0f);
|
||||
actor->_5B8 = actor->position;
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
if (actor->position.y < 60.f + actor->init_data._08) {
|
||||
actor->position.y = 60.f + actor->init_data._08;
|
||||
if (actor->_612.x > 0) {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(-30);
|
||||
}
|
||||
} else if (actor->position.y > 115.f - actor->init_data._08) {
|
||||
actor->position.y = 115.f - actor->init_data._08;
|
||||
actor->_612.x = DEG2SHORT_ANGLE(30);
|
||||
mfish_hamon_make(actor, gamex);
|
||||
} else {
|
||||
actor->activityFrameCount--;
|
||||
}
|
||||
|
||||
actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x));
|
||||
}
|
||||
|
||||
BOOL mfish_kingyo_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int i = joint1->x + actor->_618.z;
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
i = joint1->y + actor->_618.z;
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_num == 2) {
|
||||
int i;
|
||||
if (actor->_5F0 - 0.001f > actor->_5E8) {
|
||||
joint1->y += (int)((actor->_5F0 - actor->_5E8) * 2.0f * joint1->y);
|
||||
}
|
||||
i = joint1->y - actor->_618.z * 3;
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80));
|
||||
i = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
joint1->z += (int)(actor->_618.x * (-1.3f + 0.1f * GETREG(TAKREG, 0x4e)));
|
||||
Matrix_scale(GETREG(TAKREG, 0x4b) * 0.01f * cos_s(actor->_63A) + 0.05f + 1.0f,
|
||||
GETREG(TAKREG, 0x4c) * 0.01f * sin_s(actor->_63A) + 0.1f + 1.0f,
|
||||
GETREG(TAKREG, 0x4d) * 0.01f * cos_s(actor->_63A) + 0.1f + 1.0f, 1);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
s16 s;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
s = actor->_60C.x * (GETREG(TAKREG, 0x41) * 0.01f + 0.75f);
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_RotateY(actor->_60C.y, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1);
|
||||
Matrix_RotateX(s, 1);
|
||||
Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_kingyo_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,516 @@
|
||||
void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) {
|
||||
f32 temp;
|
||||
f32 temp2;
|
||||
f32 temp3;
|
||||
if (r4 == 0) {
|
||||
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 = 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_koi_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 < 10.0f || actor->_604 < 10.0f || actor->_600 < 10.0f ||
|
||||
actor->_5FC < 10.0f) &&
|
||||
(actor->currentProcess != mfish_koi_peck_process)) {
|
||||
vv = actor->_60C.y - (s16)v;
|
||||
if (ABS(vv) < DEG2SHORT_ANGLE(45)) {
|
||||
add_calc0(&actor->_5E8, 0.05f * cos_s(vv << 1), 0.0025f);
|
||||
}
|
||||
|
||||
if (ABS(vv) < DEG2SHORT_ANGLE(90) && ABS(actor->_622) < DEG2SHORT_ANGLE(15)) {
|
||||
if (actor->currentProcess == mfish_koi_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.15f),
|
||||
DEG2SHORT_ANGLE(actor->_5E8 * ((GETREG(TAKREG, 0x2e) + 5.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.15f),
|
||||
DEG2SHORT_ANGLE(actor->_5E8 * ((GETREG(TAKREG, 0x2e) + 5.0f) * cos_s(vv)) + 1.5f) >> 1,
|
||||
DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
GAME_PLAY* game = (GAME_PLAY*)gamex;
|
||||
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
mfish_base_ct(actor, gamex);
|
||||
|
||||
actor->currentProcess = mfish_koi_normal_process;
|
||||
actor->_5E8 = actor->init_data._10;
|
||||
actor->_5AC.z = 1.0f;
|
||||
actor->_624 = 9;
|
||||
}
|
||||
|
||||
void mfish_koi_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
actor->_634 = mfish_get_hide_camera_angle(actor);
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
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.y, CALC_EASE(0.4), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
actor->_5F0 = MIN(MAX(actor->init_data._10, 0.1f), actor->_5E8);
|
||||
actor->_5EC = 0.0f;
|
||||
actor->currentProcess = mfish_koi_dummy_process;
|
||||
}
|
||||
|
||||
void mfish_koi_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(3.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(3.75f),
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f),
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f);
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC);
|
||||
add_calc0(&actor->_5F0, 0.02f, 0.01f);
|
||||
}
|
||||
|
||||
void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
f32 v = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
|
||||
f32 v2 = v / MAX(actor->init_data._14 + actor->init_data._10, 1.0f);
|
||||
if (v > actor->_5E8) {
|
||||
mfish_koi_tail_anim_set(actor, 0);
|
||||
actor->_5F0 = v;
|
||||
}
|
||||
actor->_5F4 = Rnd_EX_fx(10.0f) * v2;
|
||||
actor->_612.x = DEG2SHORT_ANGLE(-10 * (actor->_5F4 + actor->init_data._0C - actor->position.y));
|
||||
actor->_612.x = CLAMP(actor->_612.x, DEG2SHORT_ANGLE(-50), DEG2SHORT_ANGLE(50));
|
||||
|
||||
actor->_5D0.y = 0.0f;
|
||||
|
||||
if (RANDOM_F(1.0f) > actor->init_data._1C) {
|
||||
actor->_612.y += (s16)Rnd_EX_fx(actor->init_data._30 * 2.0f);
|
||||
|
||||
if (ABS((s16)(actor->_612.y - actor->_60C.y)) < DEG2SHORT_ANGLE(20)) {
|
||||
if ((s16)(actor->_612.y - actor->_60C.y) > 0) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(20);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(20);
|
||||
}
|
||||
}
|
||||
actor->_632 = DEG2SHORT_ANGLE(v2 * 30.0f + 20.0f);
|
||||
} else {
|
||||
if ((s16)(actor->_612.y - actor->_60C.y) > 0) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(20);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(20);
|
||||
}
|
||||
actor->_632 = DEG2SHORT_ANGLE(v2 * 40.0f + 30.0f);
|
||||
}
|
||||
|
||||
if ((s16)(actor->_60C.y - actor->_612.y) > 0) {
|
||||
actor->_636 = DEG2SHORT_ANGLE(-180);
|
||||
} else {
|
||||
actor->_636 = 0;
|
||||
}
|
||||
|
||||
actor->_62E_flags &= ~0xC0;
|
||||
actor->_5EC = 0.0f;
|
||||
actor->currentProcess = mfish_koi_normal_process;
|
||||
}
|
||||
|
||||
void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
s16 temp;
|
||||
//! NOTE: wrong float somewhere in this file, just based on objdiffs colors changing
|
||||
if (ABS(actor->_632) > DEG2SHORT_ANGLE(20) || actor->_640 > 0) {
|
||||
add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.0035f + 0.03f, 0.35f,
|
||||
0.05f);
|
||||
add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.4f), actor->_5EC * 0.5f);
|
||||
}
|
||||
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.05f), DEG2SHORT_ANGLE(0.375), DEG2SHORT_ANGLE(0.125));
|
||||
temp = DEG2SHORT_ANGLE2((actor->_5E8 * 2.0f) / (actor->init_data._14 + actor->init_data._10) + 3.0f);
|
||||
actor->_636 += temp;
|
||||
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.0f),
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
|
||||
if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) {
|
||||
if (RANDOM_F(1.0f) < 0.8f) {
|
||||
mfish_koi_long_move_process_init(actor);
|
||||
} else {
|
||||
mfish_koi_dummy_process_init(actor);
|
||||
}
|
||||
} else if (actor->_5E8 > 1.0f && actor->_62E_flags & 0x1e) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f);
|
||||
}
|
||||
actor->_632 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_koi_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(30.0f)) + DEG2SHORT_ANGLE(60.0f);
|
||||
actor->_618.y = ABS(DEG2SHORT_ANGLE2((SHORT2DEG_ANGLE2(s3) / 120.0f) * 3.0f + 2.0f));
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) < 0) {
|
||||
s3 = -s3;
|
||||
}
|
||||
} else if (actor->_62E_flags & 0xC0) {
|
||||
if (actor->_62E_flags & 0x40) {
|
||||
s3 = ABS(s3);
|
||||
} else {
|
||||
s3 = -ABS(s3);
|
||||
}
|
||||
actor->_62E_flags &= ~0xC0;
|
||||
} else if (actor->_62E_flags & 0x20 && (actor->_62A - actor->_60C.y) < 0) {
|
||||
s3 = -s3;
|
||||
}
|
||||
|
||||
if (s3 > 0) {
|
||||
actor->_62E_flags |= 0x40;
|
||||
} else {
|
||||
actor->_62E_flags |= 0x80;
|
||||
}
|
||||
|
||||
actor->_612.y += s3;
|
||||
|
||||
if (RANDOM_F(1.0f) < 0.2f) {
|
||||
actor->_63E = RANDOM_F(2.0f) + 1.0f;
|
||||
} else {
|
||||
actor->_63E = 0;
|
||||
}
|
||||
|
||||
actor->_5EC = 0.0f;
|
||||
actor->_5F0 = actor->init_data._10;
|
||||
actor->currentProcess = mfish_koi_turn_process;
|
||||
}
|
||||
|
||||
void mfish_koi_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (ABS(actor->_622) > DEG2SHORT_ANGLE(35) || actor->_640 > 0) {
|
||||
add_calc2(&actor->_5EC, 0.08f, 0.2f, 0.1f);
|
||||
add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), actor->_5EC * 0.5f);
|
||||
}
|
||||
|
||||
add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), 0.15f, 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->_618.y >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
if (ABS(actor->_622) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) {
|
||||
if (actor->_63E > 0 && ABS(actor->_618.z) < DEG2SHORT_ANGLE(2)) {
|
||||
if (mfish_WallCheck(actor)) {
|
||||
mfish_koi_tail_anim_set(actor, 1);
|
||||
mfish_koi_turn_process_init(actor);
|
||||
} else {
|
||||
mfish_koi_normal_process_init(actor);
|
||||
}
|
||||
actor->_63E--;
|
||||
} else {
|
||||
if (RANDOM_F(1.0f) < 0.8f) {
|
||||
mfish_koi_long_move_process_init(actor);
|
||||
} else {
|
||||
mfish_koi_dummy_process_init(actor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_koi_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
f32 fVar8;
|
||||
f32 fVar9;
|
||||
int t;
|
||||
s16 atanx;
|
||||
s16 atany;
|
||||
f32 dist;
|
||||
|
||||
actor->_5D0.y = 0.0f;
|
||||
mfish_get_player_angle(actor, game, &atanx, &atany, &dist);
|
||||
fVar9 = (actor->init_data)._10 + RANDOM_F(actor->init_data._14);
|
||||
|
||||
if (dist < 60.0f) {
|
||||
fVar9 *= 0.75f;
|
||||
actor->_5F0 = MIN(fVar9, 0.75f);
|
||||
}
|
||||
|
||||
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 + RANDOM_F(2.5f);
|
||||
actor->_5F4 = MAX(MIN(10, actor->_5F4), -10);
|
||||
|
||||
} else {
|
||||
actor->_5F4 = actor->_5F4 - RANDOM_F(2.5f);
|
||||
actor->_5F4 = MAX(MIN(10, actor->_5F4), -10);
|
||||
}
|
||||
|
||||
actor->_632 = DEG2SHORT_ANGLE((fVar8 * 40.0f) + 30.0f);
|
||||
|
||||
if (qrand() & 0x8000) {
|
||||
actor->_636 = DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
actor->_636 = DEG2SHORT_ANGLE(-90);
|
||||
}
|
||||
|
||||
actor->_62E_flags &= ~0xC0;
|
||||
actor->_5EC = 0.0f;
|
||||
actor->currentProcess = mfish_koi_peck_process;
|
||||
}
|
||||
|
||||
void mfish_koi_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 (ABS(actor->_632) > DEG2SHORT_ANGLE(20) || actor->_640 > 0) {
|
||||
add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.0035f + 0.04f, 0.4f,
|
||||
0.1f);
|
||||
add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.4f), actor->_5EC * 0.5f);
|
||||
}
|
||||
|
||||
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.05f), DEG2SHORT_ANGLE(0.375f), DEG2SHORT_ANGLE(0.125f));
|
||||
actor->_636 += DEG2SHORT_ANGLE(3.f);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632),
|
||||
CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.f), DEG2SHORT_ANGLE(0.125f));
|
||||
|
||||
if (mfish_peck_wall_check(actor, gamex)) {
|
||||
if (RANDOM_F(1.0f) < 0.8f) {
|
||||
actor->_5E8 = -0.05f - RANDOM_F(0.1f);
|
||||
actor->_5F0 = 0.05f;
|
||||
actor->activityFrameCount = DEG2SHORT_ANGLE(0.33f);
|
||||
} else {
|
||||
actor->_5E8 = -0.1f - RANDOM_F(0.05f);
|
||||
actor->_5F0 = 0.05f;
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
// actor->_626 >>= 3;
|
||||
}
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
// actor->_5F0 = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_koi_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
actor->_5F0 = MAX(MIN(actor->_5E8, 0.5f), 0.05f);
|
||||
actor->_5EC = 0.0f;
|
||||
actor->currentProcess = mfish_koi_long_move_process;
|
||||
}
|
||||
|
||||
void mfish_koi_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.15f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f);
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC);
|
||||
}
|
||||
|
||||
void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t p;
|
||||
if ((actor->currentProcess != mfish_koi_turn_process && actor->currentProcess != mfish_koi_long_move_process) ||
|
||||
actor->_640 > DEG2SHORT_ANGLE(0)) {
|
||||
add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, GETREG(TAKREG, 0x13) * 0.001f + 0.01f);
|
||||
} else {
|
||||
add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, GETREG(TAKREG, 0x14) * 0.0001f + 0.0005f);
|
||||
}
|
||||
add_calc0(&actor->_5EC, 0.5f, 0.01f);
|
||||
|
||||
actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y) * cos_s(actor->_60C.x);
|
||||
actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y) * cos_s(actor->_60C.x);
|
||||
add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f);
|
||||
add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y);
|
||||
mfish_koi_move_smooth(actor, game);
|
||||
mfish_get_flow_vec(&p, actor, game);
|
||||
actor->position.x += actor->_5D0.x + actor->_5DC.x;
|
||||
actor->position.z += actor->_5D0.z + actor->_5DC.z;
|
||||
actor->position.y += actor->_5DC.y * 0.05f;
|
||||
actor->position.y = MAX(60.f, MIN(110.f, actor->position.y));
|
||||
}
|
||||
|
||||
void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
if (actor->_5F8 > actor->init_data._08 * 20.f) {
|
||||
actor->_5F8 = 0.0f;
|
||||
actor->activityFrameCount = 0;
|
||||
}
|
||||
|
||||
if (actor->activityFrameCount-- <= 0) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
if (mfish_peck_check(actor, gamex)) {
|
||||
actor->activityFrameCount >>= 1;
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
mfish_koi_tail_anim_set(actor, 0);
|
||||
mfish_koi_peck_process_init(actor, gamex);
|
||||
} else if (mfish_WallCheck(actor)) {
|
||||
mfish_koi_tail_anim_set(actor, 1);
|
||||
mfish_koi_turn_process_init(actor);
|
||||
} else {
|
||||
mfish_koi_tail_anim_set(actor, 0);
|
||||
mfish_koi_normal_process_init(actor);
|
||||
}
|
||||
} else if (actor->currentProcess == mfish_koi_normal_process) {
|
||||
if ((actor->_62E_flags & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) ||
|
||||
(actor->_62E_flags & 0x20 &&
|
||||
ABS((s16)(DEG2SHORT_ANGLE(180) + actor->_62A - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
mfish_koi_tail_anim_set(actor, 1);
|
||||
mfish_koi_turn_process_init(actor);
|
||||
}
|
||||
}
|
||||
|
||||
// actor->_5AC.y = 0.0f;
|
||||
actor->_638 += DEG2SHORT_ANGLE(10);
|
||||
actor->currentProcess(actor, gamex);
|
||||
if (ABS(actor->_618.z) < ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) {
|
||||
add_calc2(&actor->_5E8, MAX(0.1f, actor->_5E8), 0.2f, 0.25f);
|
||||
}
|
||||
add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.05f), DEG2SHORT_ANGLE(1.5f),
|
||||
DEG2SHORT_ANGLE(0.05f));
|
||||
add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.05f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.05f));
|
||||
mfish_koi_base_FishMove(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
mfish_onefish_mv(actor, game);
|
||||
mfish_koi_base_mv(actor, game);
|
||||
Museum_Fish_BGCheck(actor, game);
|
||||
if ((actor->currentProcess == mfish_koi_dummy_process || actor->currentProcess == mfish_koi_long_move_process) &&
|
||||
(play->game_frame & 0xff) == 0 && RANDOM_F(1) < 0.3f) {
|
||||
mfish_koi_tail_anim_set(actor, 2);
|
||||
}
|
||||
if (actor->_640 > 0) {
|
||||
actor->_640--;
|
||||
if (actor->currentProcess == mfish_koi_dummy_process || actor->currentProcess == mfish_koi_long_move_process) {
|
||||
add_calc2(&actor->_38._00.frame_control.speed,
|
||||
(actor->_5AC.x * MAX(actor->_5F0 - actor->_5E8, 0.0f)) /
|
||||
(actor->init_data._10 + actor->init_data._14) +
|
||||
0.15f,
|
||||
0.5f, 0.5f);
|
||||
} else {
|
||||
add_calc2(&actor->_38._00.frame_control.speed,
|
||||
(actor->_5AC.x * MAX(actor->_5F0 - actor->_5E8, 0.0f)) /
|
||||
(actor->init_data._10 + actor->init_data._14) +
|
||||
0.15f,
|
||||
0.5f, 0.5f);
|
||||
}
|
||||
add_calc2(&actor->_5AC.z,
|
||||
(GETREG(TAKREG, 0x46) * 0.01f) + 0.2f +
|
||||
((0.8f - (GETREG(TAKREG, 0x46) * 0.01f)) *
|
||||
(actor->init_data._14 + actor->init_data._10 - actor->_5F0)) /
|
||||
(actor->init_data._14 + actor->init_data._10),
|
||||
0.5f, 0.1f);
|
||||
} else {
|
||||
add_calc2(&actor->_38._00.frame_control.speed,
|
||||
(actor->_5E8 * 2.0f) / (actor->init_data._10 + actor->init_data._14) + 0.3f, 0.2f, 0.1f);
|
||||
add_calc2(&actor->_5AC.z, 1.0f, 0.1f, 0.025f);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL mfish_koi_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 0) {
|
||||
trans->x *= actor->_5AC.z;
|
||||
trans->y *= actor->_5AC.z;
|
||||
trans->z = (trans->z - 1400.0f) * actor->_5AC.z + 1400.0f;
|
||||
} else if (joint_num == 1) {
|
||||
joint1->y = joint1->y * actor->_5AC.z;
|
||||
} else if (joint_num == 2) {
|
||||
int i;
|
||||
|
||||
i = joint1->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.1f + 2.0f));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80));
|
||||
|
||||
i = joint1->x - (actor->_618.z >> 3);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_RotateY(actor->_60C.y, 1);
|
||||
Matrix_translate(0.0f, actor->init_data._04 * 0.25f, actor->init_data._24 * 1.5f, 1);
|
||||
Matrix_RotateX(actor->_60C.x, 1);
|
||||
Matrix_RotateZ(MY_CLAMP(-(actor->_618.z >> 2), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1);
|
||||
Matrix_translate(0.0f, -actor->init_data._04 * 0.25f, -actor->init_data._24 * 0.5f, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_koi_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,222 @@
|
||||
|
||||
void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
actor->_5E8 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
|
||||
actor->_5F0 = actor->_5E8;
|
||||
actor->_60C.y = s;
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_60C.x = DEG2SHORT_ANGLE2(RANDOM2_F(100.0f));
|
||||
actor->_612.x = actor->_60C.x;
|
||||
actor->_5F4 = 0.05f;
|
||||
actor->_5D0 = ZeroVec;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_5AC.y = actor->_5E8;
|
||||
actor->_638 = qrand();
|
||||
actor->_618 = ZeroSVec;
|
||||
actor->_622 = 0;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_594 = NULL;
|
||||
actor->_598 = NULL;
|
||||
actor->_624 = 3;
|
||||
mfish_kurage_normal_init(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_kurage_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
|
||||
actor->currentProcess = mfish_kurage_normal;
|
||||
}
|
||||
|
||||
void mfish_kurage_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
mfish_kurage_turn_init(actor, gamex);
|
||||
} else if (actor->activityFrameCount < 0) {
|
||||
actor->_612.y = qrand();
|
||||
actor->_612.x = qrand();
|
||||
|
||||
if (actor->_612.x > 0) {
|
||||
actor->_612.x = MIN(DEG2SHORT_ANGLE(120), actor->_612.x);
|
||||
} else {
|
||||
actor->_612.x = MAX(DEG2SHORT_ANGLE(-120), actor->_612.x);
|
||||
}
|
||||
|
||||
if (actor->_60C.x > DEG2SHORT_ANGLE(90) && actor->_612.x < (s16)(actor->_60C.x + DEG2SHORT_ANGLE(180))) {
|
||||
//! BUG: should this be 179 degrees?
|
||||
actor->_612.x = actor->_60C.x + (DEG2SHORT_ANGLE(180) - 1);
|
||||
} else if (actor->_60C.x < DEG2SHORT_ANGLE(-90) &&
|
||||
actor->_612.x > (s16)(actor->_60C.x + DEG2SHORT_ANGLE(180))) {
|
||||
actor->_612.x = actor->_60C.x - (DEG2SHORT_ANGLE(180) - 1);
|
||||
}
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
|
||||
} else if (actor->_5F8 > actor->init_data._08 * 10.0f) {
|
||||
f32 v = RANDOM_F(0.5f) + 0.5f;
|
||||
actor->_5F8 = 0.0f;
|
||||
if (RANDOM_F(1.0f) < 0.5) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(v * 90.f);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(v * 90.f);
|
||||
}
|
||||
|
||||
if (actor->_612.x > 0) {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(90.0f + RANDOM2_F(60.0f));
|
||||
} else {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(-90.0f + RANDOM2_F(60.0f));
|
||||
}
|
||||
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->activityFrameCount >>= 1;
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_kurage_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! BUG: cast needed to match? maybe i've been making assumptions about what these functions have taken as args
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor2 = (MUSEUM_FISH_PRIVATE_DATA*)actor;
|
||||
if (actor->_60C.x * (s16)(actor2->_60C.y - actor2->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(135);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(-135);
|
||||
}
|
||||
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->currentProcess = mfish_kurage_turn;
|
||||
}
|
||||
|
||||
void mfish_kurage_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if ((s16)(actor->_612.x - actor->_60C.x) == 0 && (s16)(actor->_612.y - actor->_60C.y) == 0) {
|
||||
mfish_kurage_normal_init(actor, gamex);
|
||||
} else if (actor->activityFrameCount < 0) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
f32 v;
|
||||
xyz_t p;
|
||||
f32 t;
|
||||
|
||||
actor->currentProcess(actor, gamex);
|
||||
actor->_5F4 = GETREG(TAKREG, 0x55) * 0.001f + 0.035f;
|
||||
actor->_632 += actor->_63A;
|
||||
actor->_63C += actor->_618.y;
|
||||
if (actor->_62E_flags & 0x20) {
|
||||
add_calc_short_angle2(&actor->_618.y, DEG2SHORT_ANGLE(8), CALC_EASE(0.5f), DEG2SHORT_ANGLE(0.5f),
|
||||
DEG2SHORT_ANGLE(0.05f));
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_618.y, DEG2SHORT_ANGLE(2), CALC_EASE(0.5f), DEG2SHORT_ANGLE(0.5f),
|
||||
DEG2SHORT_ANGLE(0.05f));
|
||||
}
|
||||
actor->_622 = DEG2SHORT_ANGLE(actor->_5E8 * 12.0f + 0.2f + GETREG(TAKREG, 0x1a) * 0.1f);
|
||||
if (actor->activityFrameCount > actor->savedActivityFrameCount - 20) {
|
||||
add_calc2(&actor->_5EC, 0.1f, 0.5f, 0.02f);
|
||||
}
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC);
|
||||
add_calc2(&actor->_5AC.y, actor->_5F0, 0.1f, 0.25f);
|
||||
add_calc2(&actor->_5F0, 0.05f, 0.05f, 0.01f);
|
||||
add_calc_short_angle2(&actor->_63A, (s16)DEG2SHORT_ANGLE2((GETREG(TAKREG, 0x56) + 13.0f) * 0.5f), CALC_EASE2(0.1f),
|
||||
DEG2SHORT_ANGLE(0.25f), DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_60C.x, (s16)actor->_612.x, CALC_EASE2(GETREG(TAKREG, 0x18) * 0.01f + 0.1f),
|
||||
(s16)(actor->_622 >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_60C.y, (s16)actor->_612.y, CALC_EASE2(GETREG(TAKREG, 0x18) * 0.01f + 0.1f),
|
||||
(s16)(actor->_622 >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
v = actor->_5E8 * sin_s(actor->_60C.x) * (sin_s(actor->_63A) * 0.1f + 0.9f);
|
||||
actor->_5D0.x = sin_s(actor->_60C.y) * v;
|
||||
actor->_5D0.z = cos_s(actor->_60C.y) * v;
|
||||
actor->_5D0.y = actor->_5E8 * cos_s(actor->_60C.x) * (sin_s(actor->_63A) * 0.1f + 0.9f);
|
||||
mfish_get_flow_vec(&p, actor, gamex);
|
||||
|
||||
if (actor->_5FC < 120.f) {
|
||||
add_calc2(&actor->_5DC.x, (120.f - actor->_5FC) * (GETREG(TAKREG, 0x3c) * 0.0001f + 0.01f),
|
||||
GETREG(TAKREG, 0x3d) * 0.01f + 0.25f, GETREG(TAKREG, 0x3e) * 0.01f + 0.2f);
|
||||
|
||||
} else if (actor->_600 < 120.f) {
|
||||
add_calc2(&actor->_5DC.x, -(120.f - actor->_600) * (GETREG(TAKREG, 0x3c) * 0.0001f + 0.01f),
|
||||
GETREG(TAKREG, 0x3d) * 0.01f + 0.25f, GETREG(TAKREG, 0x3e) * 0.01f + 0.2f);
|
||||
}
|
||||
|
||||
if (actor->_604 < 20.f) {
|
||||
add_calc2(&actor->_5DC.z, (20.f - actor->_604) * (GETREG(TAKREG, 0x3c) * 0.0001f + 0.01f),
|
||||
GETREG(TAKREG, 0x3d) * 0.01f + 0.25f, GETREG(TAKREG, 0x3e) * 0.01f + 0.2f);
|
||||
|
||||
} else if (actor->_608 < 20.f) {
|
||||
add_calc2(&actor->_5DC.z, -(20.f - actor->_608) * (GETREG(TAKREG, 0x3c) * 0.0001f + 0.01f),
|
||||
GETREG(TAKREG, 0x3d) * 0.01f + 0.25f, GETREG(TAKREG, 0x3e) * 0.01f + 0.2f);
|
||||
}
|
||||
|
||||
if (actor->position.y < (55.0f + actor->init_data._08) + 10.0f) {
|
||||
t = (10.f - (actor->position.y - (55.0f + actor->init_data._08)));
|
||||
t *= (GETREG(TAKREG, 0x3C) * 0.0001f + 0.01f);
|
||||
|
||||
add_calc2(&actor->_5DC.y, t, GETREG(TAKREG, 0x3D) * 0.01f + 0.25f, GETREG(TAKREG, 0x3E) * 0.01f + 0.2f);
|
||||
} else if (actor->position.y > (110.0f - actor->init_data._08) - 10.0f) {
|
||||
t = -(10.f - ((110.0f - actor->init_data._08) - actor->position.y));
|
||||
t *= (GETREG(TAKREG, 0x3C) * 0.0001f + 0.01f);
|
||||
|
||||
add_calc2(&actor->_5DC.y, t, GETREG(TAKREG, 0x3D) * 0.01f + 0.25f, GETREG(TAKREG, 0x3E) * 0.01f + 0.2f);
|
||||
}
|
||||
|
||||
actor->position.x += actor->_5D0.x + actor->_5DC.x;
|
||||
actor->position.y += actor->_5D0.y + actor->_5DC.y;
|
||||
actor->position.z += actor->_5D0.z + actor->_5DC.z;
|
||||
|
||||
actor->_5B8 = actor->position;
|
||||
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
if (actor->position.y < 55.0f + actor->init_data._08) {
|
||||
actor->position.y = 55.0f + actor->init_data._08;
|
||||
actor->_612.x = DEG2SHORT_ANGLE(-30);
|
||||
} else if (actor->position.y > 110.f - actor->init_data._08 - actor->_608 * 0.2f) {
|
||||
actor->position.y = 110.f - actor->init_data._08 - actor->_608 * 0.2f;
|
||||
if (actor->_612.x > 0) {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(120);
|
||||
} else {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(-120);
|
||||
}
|
||||
}
|
||||
actor->activityFrameCount--;
|
||||
}
|
||||
|
||||
extern Gfx act_mus_kurage_sakana_body_model[];
|
||||
extern Gfx act_mus_kurage_sakana_foot_model[];
|
||||
|
||||
void mfish_kurage_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 a = (actor->_5E8 - 0.1f) * (-0.3f + GETREG(TAKREG, 0x1b) * 0.01f);
|
||||
a += (actor->_5F4 * sin_s(actor->_632) + 1.0f);
|
||||
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1);
|
||||
Matrix_scale(actor->init_data.renderScale * a, actor->init_data.renderScale * (1.0f / SQ(a)),
|
||||
actor->init_data.renderScale * a, 1);
|
||||
Matrix_push();
|
||||
|
||||
Matrix_RotateY(actor->_63C, 1);
|
||||
Matrix_scale((GETREG(TAKREG, 0x4b) * 0.01f + 0.1f) * sin_s(actor->_63C) + 1.0f, 1.0f,
|
||||
(GETREG(TAKREG, 0x4b) * 0.01f + 0.1f) * cos_s(actor->_63C) + 1.0f, 1);
|
||||
Matrix_RotateY(-actor->_63C, 1);
|
||||
gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(NEXT_POLY_XLU_DISP, act_mus_kurage_sakana_body_model);
|
||||
|
||||
Matrix_pull();
|
||||
|
||||
Matrix_RotateY(actor->_63C, 1);
|
||||
Matrix_scale((GETREG(TAKREG, 0x4b) * 0.01f + 0.1f) * sin_s(actor->_63C) + 1.0f, 1.0f,
|
||||
(GETREG(TAKREG, 0x4b) * 0.01f + 0.1f) * cos_s(actor->_63C) + 1.0f, 1);
|
||||
Matrix_RotateY(-actor->_63C, 1);
|
||||
gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(NEXT_POLY_XLU_DISP, act_mus_kurage_sakana_foot_model);
|
||||
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,177 @@
|
||||
|
||||
void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
actor->_5F0 = actor->_5E8;
|
||||
actor->_60C.y = s;
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_60C.x = DEG2SHORT_ANGLE(RANDOM2_F(actor->init_data._30 * 2.0f));
|
||||
actor->_612.x = actor->_60C.x;
|
||||
actor->_5F4 = 110.0f;
|
||||
actor->_5D0.y = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_638 = qrand();
|
||||
actor->_622 = 0;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->_624 = 6;
|
||||
mfish_medaka_normal_init(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_medaka_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if (actor->group == 2) {
|
||||
if (actor->activityFrameCount < 0) {
|
||||
actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14);
|
||||
}
|
||||
} else {
|
||||
actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
}
|
||||
actor->currentProcess = mfish_medaka_normal;
|
||||
}
|
||||
|
||||
void mfish_medaka_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 35.0f);
|
||||
actor->_636 += DEG2SHORT_ANGLE(7.5f);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
mfish_medaka_turn_init(actor, gamex);
|
||||
} else if (actor->_62E_flags & 0x20) {
|
||||
add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f),
|
||||
DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f));
|
||||
} else if (actor->activityFrameCount < 0) {
|
||||
f32 v = RANDOM_F(1.0f);
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14);
|
||||
if (RANDOM_F(1.0f) < 0.5f) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE((v - 0.3f) * 90.f);
|
||||
}
|
||||
if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(20)) {
|
||||
actor->_612.x = RANDOM2_F(actor->init_data._30 * 2.0f * (v - 0.3f));
|
||||
}
|
||||
} else if (actor->_5F8 > actor->init_data._08 * 30.f) {
|
||||
f32 v = RANDOM_F(1.0f);
|
||||
s16 s = search_position_angleY(&suisou_pos[actor->group], &actor->position);
|
||||
actor->_5F8 = 0.0f;
|
||||
actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90));
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->activityFrameCount >>= 1;
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_medaka_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(115);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115);
|
||||
}
|
||||
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
|
||||
actor->currentProcess = mfish_medaka_turn;
|
||||
}
|
||||
|
||||
void mfish_medaka_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 15.0f);
|
||||
actor->_636 += DEG2SHORT_ANGLE(7.5f);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f));
|
||||
if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) {
|
||||
mfish_medaka_normal_init(actor, gamex);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 v;
|
||||
xyz_t p;
|
||||
|
||||
actor->currentProcess(actor, gamex);
|
||||
actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
|
||||
if (actor->_5E8 > actor->_5F0) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.05f);
|
||||
} else {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f);
|
||||
}
|
||||
|
||||
if (ABS(actor->_60C.x) > DEG2SHORT_ANGLE(50)) {
|
||||
add_calc2(&actor->_5F0, actor->init_data._14 + actor->init_data._10, 0.2f, 0.1f);
|
||||
}
|
||||
|
||||
v = actor->_5E8 * cos_s(actor->_60C.x);
|
||||
actor->_5D0.x = v * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = v * cos_s(actor->_60C.y);
|
||||
actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x);
|
||||
mfish_get_flow_vec(&p, actor, gamex);
|
||||
actor->position.x += actor->_5D0.x + p.x;
|
||||
actor->position.y += actor->_5D0.y + p.y;
|
||||
actor->position.z += actor->_5D0.z + p.z;
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f);
|
||||
actor->_5B8 = actor->position;
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
if (actor->position.y < 70.f + actor->init_data._08) {
|
||||
actor->position.y = 70.f + actor->init_data._08;
|
||||
if (actor->_612.x > 0) {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(-30);
|
||||
}
|
||||
} else if (actor->position.y > 100.f - actor->init_data._08) {
|
||||
actor->position.y = 100.f - actor->init_data._08;
|
||||
actor->_612.x = DEG2SHORT_ANGLE(30);
|
||||
} else {
|
||||
actor->activityFrameCount--;
|
||||
}
|
||||
|
||||
actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x));
|
||||
}
|
||||
|
||||
BOOL mfish_medaka_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int i = joint1->x + actor->_618.z;
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
i = joint1->y + actor->_618.z;
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_num == 2) {
|
||||
int i = joint1->y - (actor->_618.z * 3);
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60));
|
||||
i = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
s16 s;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
s = actor->_60C.x * (GETREG(TAKREG, 0x41) * 0.01f + 0.75f);
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_RotateY(actor->_60C.y, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1);
|
||||
Matrix_RotateX(s, 1);
|
||||
Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_medaka_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,326 @@
|
||||
|
||||
void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
actor->_5E8 = 0.0f;
|
||||
actor->_5D0 = ZeroVec;
|
||||
actor->_60C.y = qrand();
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_5F4 = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
if (actor->fishIDEnum == aGYO_TYPE_CATFISH) {
|
||||
actor->_5AC.y = 1500.f;
|
||||
} else {
|
||||
actor->_5AC.y = 1700.f;
|
||||
}
|
||||
actor->_638 = qrand();
|
||||
actor->_622 = actor->_60C.y;
|
||||
actor->position.z += 40.0f;
|
||||
actor->_624 = 10;
|
||||
// maybe s_xyz? but because we're not assigning a ZeroSVec, i'm thinking not?
|
||||
actor->_640 = 0;
|
||||
actor->_642 = 0;
|
||||
actor->_644 = 0;
|
||||
mfish_namazu_normal_process_init(actor);
|
||||
}
|
||||
|
||||
void mfish_namazu_body_wind_anime_play(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_63A += (s16)DEG2SHORT_ANGLE2(2.0f + RANDOM_F(1.0f));
|
||||
actor->_63C += (s16)DEG2SHORT_ANGLE2(1.0f + RANDOM_F(0.5f));
|
||||
}
|
||||
|
||||
void mfish_namazu_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
f32 s;
|
||||
f32 p;
|
||||
f32 f;
|
||||
|
||||
p = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
s = MAX(actor->init_data._14 + actor->init_data._10, 1.0f);
|
||||
f = p / s;
|
||||
if (p > actor->_5E8) {
|
||||
actor->_5F0 = p;
|
||||
}
|
||||
actor->_5F4 = 0.0f;
|
||||
actor->_5D0.y = 0.0f;
|
||||
if (RANDOM_F(1.0f) > actor->init_data._1C) {
|
||||
actor->_612.y += (s16)Rnd_EX_fx(actor->init_data._30 * 2.0f);
|
||||
if (ABS((s16)(actor->_612.y - actor->_60C.y)) < DEG2SHORT_ANGLE(20)) {
|
||||
if ((s16)(actor->_612.y - actor->_60C.y) > 0) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(20);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(20);
|
||||
}
|
||||
}
|
||||
actor->_632 = DEG2SHORT_ANGLE(30.0f + f * 40.0f);
|
||||
} else {
|
||||
if ((s16)(actor->_612.y - actor->_60C.y) > 0) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(15);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(15);
|
||||
}
|
||||
actor->_632 = DEG2SHORT_ANGLE(40.0f + f * 50.0f);
|
||||
}
|
||||
|
||||
if ((s16)(actor->_60C.y - actor->_612.y) > 0) {
|
||||
actor->_636 = DEG2SHORT_ANGLE(0);
|
||||
} else {
|
||||
actor->_636 = DEG2SHORT_ANGLE(-180);
|
||||
}
|
||||
|
||||
actor->_62E_flags &= ~0xC0;
|
||||
actor->currentProcess = mfish_namazu_normal_process;
|
||||
}
|
||||
|
||||
void mfish_namazu_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if (actor->_632 > DEG2SHORT_ANGLE(20)) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.075f),
|
||||
(0.4f + ((DEG2SHORT_ANGLE(-20) + actor->_632) / DEG2SHORT_ANGLE(2)) * 0.02f) * 0.5f);
|
||||
}
|
||||
add_calc_short_angle2(&actor->_632, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.25f),
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
actor->_636 += DEG2SHORT_ANGLE(1.25f);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
CALC_EASE2(0.1f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.065f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.105f), DEG2SHORT_ANGLE(0.8125f),
|
||||
DEG2SHORT_ANGLE(0.0625f));
|
||||
|
||||
if (actor->_5E8 < 0.01f) {
|
||||
mfish_namazu_dummy_process_init(actor);
|
||||
} else if (actor->_5E8 > 1.0f && actor->_62E_flags & 0x1e) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f);
|
||||
}
|
||||
actor->_632 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_namazu_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
actor->_634 = mfish_get_hide_camera_angle(actor);
|
||||
add_calc_short_angle2(&actor->_634, actor->_612.y, CALC_EASE(0.5f), DEG2SHORT_ANGLE(10), DEG2SHORT_ANGLE(0.5f));
|
||||
actor->currentProcess = mfish_namazu_dummy_process;
|
||||
}
|
||||
|
||||
void mfish_namazu_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
if (actor->_5E8 < 0.5f) {
|
||||
add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
}
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.05f), DEG2SHORT_ANGLE(0.8125f),
|
||||
DEG2SHORT_ANGLE(0.065f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.055f), DEG2SHORT_ANGLE(0.5f),
|
||||
DEG2SHORT_ANGLE(0.0625f));
|
||||
}
|
||||
|
||||
void mfish_namazu_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
s16 angle = DEG2SHORT_ANGLE(RANDOM_F(60.0f)) + DEG2SHORT_ANGLE(30);
|
||||
actor->_618.y = DEG2SHORT_ANGLE(0.5f + SHORT2DEG_ANGLE2(angle) / 90.f);
|
||||
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) < 0) {
|
||||
angle = -angle;
|
||||
}
|
||||
} else if (actor->_62E_flags & 0xc0) {
|
||||
if (actor->_62E_flags & 0x40) {
|
||||
angle = ABS(angle);
|
||||
} else {
|
||||
angle = -ABS(angle);
|
||||
}
|
||||
} else if (actor->_62E_flags & 0x20) {
|
||||
if ((s16)(actor->_62A - actor->_60C.y) < 0) {
|
||||
angle = -angle;
|
||||
}
|
||||
}
|
||||
|
||||
if (angle > 0) {
|
||||
actor->_62E_flags |= 0x40;
|
||||
} else {
|
||||
actor->_62E_flags |= 0x80;
|
||||
}
|
||||
|
||||
actor->_612.y += angle;
|
||||
actor->_5F0 = 0.06f;
|
||||
actor->currentProcess = mfish_namazu_turn_process;
|
||||
}
|
||||
|
||||
void mfish_namazu_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.05f), 0.0625f);
|
||||
add_calc2(&actor->_5F0, 0.05f, CALC_EASE(0.1f), 0.0025f);
|
||||
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.29f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.125f));
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE(0.035f), (s16)(actor->_618.y >> 1),
|
||||
DEG2SHORT_ANGLE(0.05f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE(0.025f), DEG2SHORT_ANGLE(0.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->_60C.y == actor->_612.y) {
|
||||
mfish_namazu_dummy_process_init(actor);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_namazu_ground_sweep_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
f32 s;
|
||||
f32 p;
|
||||
f32 f;
|
||||
|
||||
p = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
s = MAX(actor->init_data._14 + actor->init_data._10, 1.0f);
|
||||
f = p / s;
|
||||
if (p > actor->_5E8) {
|
||||
actor->_5F0 = p;
|
||||
}
|
||||
actor->_5F4 = 0.0f;
|
||||
actor->_5D0.y = 0.0f;
|
||||
if ((s16)(actor->_612.y - actor->_60C.y) > 0) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(15);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(15);
|
||||
}
|
||||
actor->_632 = DEG2SHORT_ANGLE(30.f + f * 60.f);
|
||||
if ((s16)(actor->_60C.y - actor->_612.y) > 0) {
|
||||
actor->_636 = DEG2SHORT_ANGLE(0);
|
||||
} else {
|
||||
actor->_636 = DEG2SHORT_ANGLE(-180);
|
||||
}
|
||||
actor->_62E_flags &= ~0xc0;
|
||||
actor->currentProcess = mfish_namazu_ground_sweep_process;
|
||||
}
|
||||
|
||||
void mfish_namazu_ground_sweep_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
if (actor->_632 > DEG2SHORT_ANGLE(20)) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.075f),
|
||||
(0.4f + 0.02f * ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2))) * 0.5f);
|
||||
}
|
||||
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.0625f), DEG2SHORT_ANGLE(0.025f));
|
||||
actor->_636 += DEG2SHORT_ANGLE(3);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
CALC_EASE2(0.25f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f));
|
||||
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.875f),
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
|
||||
if (actor->_5E8 < 0.01f) {
|
||||
mfish_namazu_dummy_process_init(actor);
|
||||
} else if (actor->_5E8 > 1.0f && actor->_62E_flags & 0x1e) {
|
||||
if ((s16)(actor->_612.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_namazu_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
add_calc2(&actor->_5E8, 0.05f, 1.0f - actor->init_data._18, 0.025f);
|
||||
actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y);
|
||||
add_calc(&actor->_5D0.y, MAX(ABS(sin_s(actor->_60C.x) * actor->_5E8), 0.1f), 0.1f, 0.1f, 0.005f);
|
||||
add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y);
|
||||
mfish_move_smooth(actor, gamex);
|
||||
actor->position.x += actor->_5D0.x;
|
||||
actor->position.z += actor->_5D0.z;
|
||||
actor->position.y = MAX(60.f, MIN(110.f, actor->position.y));
|
||||
}
|
||||
|
||||
void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
xyz_t p = suisou_pos[actor->group];
|
||||
f32 v;
|
||||
int s;
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
if (actor->_5F8 > actor->init_data._08 * 10.0f) {
|
||||
actor->_5F8 = 0.0f;
|
||||
actor->activityFrameCount = 0;
|
||||
}
|
||||
if (actor->activityFrameCount-- <= 0) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
if (actor->_644 <= 0 && RANDOM_F(1.0f) < 0.2f) {
|
||||
actor->_644 = (s16)RANDOM_F(300.f) + 300;
|
||||
mfish_namazu_ground_sweep_process_init(actor);
|
||||
} else if (mfish_WallCheck(actor)) {
|
||||
mfish_namazu_turn_process_init(actor);
|
||||
} else {
|
||||
mfish_namazu_normal_process_init(actor);
|
||||
}
|
||||
} else if (actor->currentProcess == mfish_namazu_normal_process) {
|
||||
if ((actor->_62E_flags & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(45)) ||
|
||||
(actor->_62E_flags & 0x20 &&
|
||||
ABS((s16)(actor->_62A + DEG2SHORT_ANGLE(180) - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
mfish_namazu_turn_process_init(actor);
|
||||
}
|
||||
}
|
||||
|
||||
actor->_638 += DEG2SHORT_ANGLE(10);
|
||||
actor->currentProcess(actor, gamex);
|
||||
if (ABS(actor->_618.z) > DEG2SHORT_ANGLE(20) && ABS(actor->_622 - actor->_618.z) < DEG2SHORT_ANGLE(30)) {
|
||||
add_calc2(&actor->_5E8, 0.2f + 0.01f * GETREG(TAKREG, 0x2d), 0.25f + 0.01f * GETREG(TAKREG, 0x2e),
|
||||
0.05f + 0.01f * GETREG(TAKREG, 0x2f));
|
||||
}
|
||||
|
||||
s = GETREG(TAKREG, 0x4c);
|
||||
if (s == 1) {
|
||||
actor->_644 = (s16)RANDOM_F(300.f) + 300;
|
||||
} else if (s == -1) {
|
||||
actor->_644 = 0;
|
||||
}
|
||||
|
||||
if (actor->_644 > 0) {
|
||||
actor->_644--;
|
||||
actor->_642 = DEG2SHORT_ANGLE(GETREG(TAKREG, 0x4d) + 35.0f);
|
||||
} else {
|
||||
actor->_642 = 0;
|
||||
}
|
||||
add_calc_short_angle2(&actor->_640, actor->_642, CALC_EASE(0.2f), DEG2SHORT_ANGLE(0.25f), DEG2SHORT_ANGLE(0.05f));
|
||||
actor->_38._00.frame_control.speed = (actor->_5E8 * 0.75f) / (actor->init_data._10 + actor->init_data._14) + 0.125f;
|
||||
mfish_namazu_base_FishMove(actor, gamex);
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
xyz_t_sub(&p, &actor->position, &p);
|
||||
v = 60.f + MAX(ABS(p.x), ABS(p.z)) * -0.15f;
|
||||
actor->position.y = v + actor->init_data._04;
|
||||
mfish_namazu_body_wind_anime_play(actor, gamex);
|
||||
}
|
||||
|
||||
BOOL mfish_namazu_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
int s;
|
||||
if (joint_num == 0) {
|
||||
trans->y = -(actor->_5AC.y * MIN(sin_s(actor->_640), 0.5f));
|
||||
} else if (joint_num == 1) {
|
||||
s = joint1->z + actor->_640;
|
||||
joint1->z = MY_CLAMP(s, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
s = joint1->x + (actor->_618.z >> 2);
|
||||
joint1->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
Matrix_scale(1.0f, 1.0f + 0.01f * sin_s(actor->_63A + actor->_63C), 1.0f + 0.01f * sin_s(actor->_63A), 1);
|
||||
} else if (joint_num == 2) {
|
||||
s = joint1->y - (actor->_618.z << 1);
|
||||
joint1->y = MY_CLAMP(s, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60));
|
||||
s = joint1->x - (actor->_618.z >> 2);
|
||||
joint1->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
s = joint1->z - (s16)(actor->_640 * (0.6f + GETREG(TAKREG, 0x4E) * 0.01f));
|
||||
joint1->z = MY_CLAMP(s, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
Matrix_scale(1.0f, 1.0f + 0.005f * sin_s(actor->_63A + DEG2SHORT_ANGLE(270)),
|
||||
1.0f + 0.005f * sin_s(actor->_63A + DEG2SHORT_ANGLE(90)), 1);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_namazu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_namazu_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,252 @@
|
||||
|
||||
void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
s16 s = qrand();
|
||||
mfish_onefish_ct(actor, game);
|
||||
actor->_5E8 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
|
||||
actor->_5F0 = actor->_5E8;
|
||||
actor->_60C.y = s;
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_5F4 = 0.0f;
|
||||
actor->_5D0.y = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_638 = qrand();
|
||||
actor->_622 = 0;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_624 = 2;
|
||||
actor->_594 = NULL;
|
||||
actor->_598 = NULL;
|
||||
actor->_5EC = 0.08f;
|
||||
actor->_5AC.x = 15.0f;
|
||||
actor->_5AC.z = 15.0f;
|
||||
mfish_seafish_normal_init(actor, game);
|
||||
}
|
||||
|
||||
void mfish_seafish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
|
||||
actor->_5EC = Rnd_EX_f(0.15f) + 0.15f;
|
||||
actor->currentProcess = mfish_seafish_normal;
|
||||
}
|
||||
|
||||
void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 a = MAX(actor->_5E8 / (actor->init_data._14 + actor->init_data._10), 0.4f) * 5461.0f;
|
||||
s16 s = (s16)MY_MAX((s16)(int)a, DEG2SHORT_ANGLE(20));
|
||||
f32 o_5a0_z;
|
||||
f32 o_5a0_y;
|
||||
f32 sum_i_8;
|
||||
f32 abs_diff_sum;
|
||||
f32 t;
|
||||
f32 r;
|
||||
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), (s16)(s >> 1) >> 1,
|
||||
(s16)DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->_598 != NULL) {
|
||||
o_5a0_z = actor->_598->position.z;
|
||||
o_5a0_y = actor->_598->position.y;
|
||||
sum_i_8 = (actor->_598->init_data._08 + actor->init_data._08);
|
||||
abs_diff_sum = MAX(sum_i_8 - ABS(actor->_598->position.z - actor->position.z), 0.f);
|
||||
|
||||
abs_diff_sum /= sum_i_8;
|
||||
|
||||
if (actor->_598->fishIDEnum != aGYO_TYPE_JELLYFISH) {
|
||||
f32 this_5a0_y = actor->position.y;
|
||||
if (o_5a0_y < actor->position.y) {
|
||||
t = o_5a0_y + (actor->_598->init_data._04 + actor->init_data._04);
|
||||
if (this_5a0_y < t) {
|
||||
add_calc2(&actor->position.y, t + 2.0f, 0.2f, abs_diff_sum * 0.1f);
|
||||
}
|
||||
} else {
|
||||
t = o_5a0_y - (actor->_598->init_data._04 + actor->init_data._04);
|
||||
if (this_5a0_y > t) {
|
||||
add_calc2(&actor->position.y, t - 2.0f, 0.2f, abs_diff_sum * 0.1f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_598->position.z < actor->position.z) {
|
||||
// swap here
|
||||
o_5a0_z += sum_i_8;
|
||||
add_calc2(&actor->position.z, o_5a0_z, 0.1f, abs_diff_sum * 0.1f);
|
||||
} else {
|
||||
// swap here
|
||||
o_5a0_z -= sum_i_8;
|
||||
add_calc2(&actor->position.z, o_5a0_z, 0.1f, abs_diff_sum * 0.1f);
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_5FC < actor->_5AC.x - 0.5f * actor->init_data._28) {
|
||||
if (actor->_612.y < 0) {
|
||||
s16 ss;
|
||||
if (actor->_604 > actor->_608) {
|
||||
ss = actor->_60C.y - DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
ss = actor->_60C.y + DEG2SHORT_ANGLE(90);
|
||||
}
|
||||
actor->_612.y = ss;
|
||||
actor->_5AC.z = RANDOM_F(60.0f) + 15.0f;
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(90), CALC_EASE(0.5f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
} else if (actor->_600 < actor->_5AC.z - 0.5f * actor->init_data._28) {
|
||||
if (actor->_612.y > 0) {
|
||||
s16 ss;
|
||||
if (actor->_604 > actor->_608) {
|
||||
ss = (s16)actor->_60C.y + DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
ss = (s16)actor->_60C.y - DEG2SHORT_ANGLE(90);
|
||||
}
|
||||
actor->_612.y = ss;
|
||||
actor->_5AC.x = RANDOM_F(60.0f) + 15.0f;
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(-90), CALC_EASE(0.5f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
} else if (actor->_62E_flags & 0x100) {
|
||||
actor->position.z += 0.05f;
|
||||
if (ABS((s16)(actor->_612.y - DEG2SHORT_ANGLE(180))) < DEG2SHORT_ANGLE(110)) {
|
||||
if (actor->_612.y > 0) {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(1.5f);
|
||||
} else {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(1.5f);
|
||||
}
|
||||
}
|
||||
} else if (actor->_62E_flags & 0x1e) {
|
||||
mfish_seafish_turn_init(actor, gamex);
|
||||
} else if (actor->_62E_flags & 0x20 && actor->_5F8 > actor->init_data._08 * 0.5f) {
|
||||
if (actor->init_data._20 > actor->_594->init_data._20) {
|
||||
s16 escAngle = mfish_get_escape_angle(actor, gamex);
|
||||
add_calc_short_angle2(&actor->_612.y, escAngle, CALC_EASE(0.25f), DEG2SHORT_ANGLE(2.5f),
|
||||
DEG2SHORT_ANGLE(0));
|
||||
}
|
||||
} else if (actor->activityFrameCount < 0) {
|
||||
// r in wrong register here
|
||||
r = RANDOM_F(1.0f);
|
||||
actor->_612.y = actor->_60C.y;
|
||||
if ((actor->_608 - actor->_604) * cos_s(actor->_60C.y) < 0.0f) {
|
||||
actor->_612.y += (s16)(r * actor->init_data._30);
|
||||
} else {
|
||||
actor->_612.y -= (s16)(r * actor->init_data._30);
|
||||
}
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_seafish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
s16 s = (s16)actor->_62C;
|
||||
|
||||
if (ABS(actor->_622) > DEG2SHORT_ANGLE(45)) {
|
||||
return;
|
||||
}
|
||||
if (ABS(actor->_612.y - actor->_62C) > DEG2SHORT_ANGLE(90)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((s16)(actor->_60C.y - s) > 0) {
|
||||
if (actor->_62E_flags & 6) {
|
||||
s = s + DEG2SHORT_ANGLE(170);
|
||||
} else {
|
||||
s = s + DEG2SHORT_ANGLE(95);
|
||||
}
|
||||
} else {
|
||||
if (actor->_62E_flags & 6) {
|
||||
s = s - DEG2SHORT_ANGLE(170);
|
||||
} else {
|
||||
s = s - DEG2SHORT_ANGLE(95);
|
||||
}
|
||||
}
|
||||
|
||||
if (ABS((s16)(s - actor->_612.y)) > DEG2SHORT_ANGLE(45)) {
|
||||
actor->currentProcess = mfish_seafish_turn;
|
||||
}
|
||||
actor->_612.y = s;
|
||||
}
|
||||
|
||||
void mfish_seafish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.25f),
|
||||
DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.125f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
if (ABS(actor->_622) < DEG2SHORT_ANGLE(3)) {
|
||||
mfish_seafish_normal_init(actor, game);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
xyz_t p;
|
||||
actor->currentProcess(actor, gamex);
|
||||
actor->_618.x += DEG2SHORT_ANGLE(actor->_5E8 * RANDOM_F(3.0f));
|
||||
actor->_5F4 = sin_s(actor->_618.x) * 5.0f;
|
||||
if (actor->_62E_flags & 0x20) {
|
||||
add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.02f, 0.05f);
|
||||
} else {
|
||||
add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, 0.1f);
|
||||
}
|
||||
add_calc0(&actor->_5F8, 0.25f, 0.05f);
|
||||
actor->_5F8 = MIN(1.0f, actor->_5F8);
|
||||
if (ABS(actor->_618.z) > DEG2SHORT_ANGLE(15) && ABS(actor->_622) - ABS(actor->_618.z) < 0) {
|
||||
add_calc2(&actor->_5E8, MAX(actor->_5F0, 0.8f), 0.5f, 0.25f);
|
||||
} else if (actor->activityFrameCount < actor->savedActivityFrameCount - 80) {
|
||||
add_calc2(&actor->_5E8, actor->_5EC, 1.0f - actor->init_data._18, 0.0025f);
|
||||
} else if (actor->_5E8 > actor->_5F0) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.01f);
|
||||
} else {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.02f);
|
||||
}
|
||||
actor->_38._00.frame_control.speed =
|
||||
(GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * 0.5f + (GETREG(TAKREG, 0x15) * 0.01f + 1.2f) * actor->_5E8;
|
||||
actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y);
|
||||
mfish_get_flow_vec(&p, actor, gamex);
|
||||
actor->position.x += actor->_5D0.x + p.x;
|
||||
actor->position.z += actor->_5D0.z + p.z;
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
mfish_body_wind_anime_play(actor, gamex);
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
if (actor->position.y < GETREG(TAKREG, 0x47) + 55.0f - actor->init_data._04) {
|
||||
actor->position.y = GETREG(TAKREG, 0x47) + 55.0f - actor->init_data._04;
|
||||
}
|
||||
actor->activityFrameCount--;
|
||||
}
|
||||
|
||||
BOOL mfish_seafish_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int s = joint1->x + (int)(actor->_618.z * (GETREG(TAKREG, 0x37) * 0.01f + 0.5f));
|
||||
joint1->x = MIN(MAX(s, DEG2SHORT_ANGLE(-15)), DEG2SHORT_ANGLE(15));
|
||||
Matrix_scale(1.0f, (GETREG(TAKREG, 0x36) * 0.001f + 0.035f) * sin_s(actor->_63A + actor->_63C) + 1.0f,
|
||||
(GETREG(TAKREG, 0x36) * 0.001f + 0.035f) * sin_s(actor->_63A) + 1.0f, 1);
|
||||
} else if (joint_num == 2) {
|
||||
int v = joint1->y - (actor->_618.z << 1);
|
||||
joint1->y = MIN(MAX(v, DEG2SHORT_ANGLE(-80)), DEG2SHORT_ANGLE(80));
|
||||
Matrix_scale(1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) * 0.07f + 1.0f,
|
||||
sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) * 0.07f + 1.0f, 1);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_seafish_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
|
||||
void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
actor->_5F0 = actor->_5E8;
|
||||
actor->_60C.y = s;
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_60C.x = DEG2SHORT_ANGLE(RANDOM2_F(actor->init_data._30 * 2.0f));
|
||||
actor->_612.x = actor->_60C.x;
|
||||
actor->_5F4 = 110.0f;
|
||||
actor->_5D0.y = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_638 = qrand();
|
||||
actor->_622 = 0;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->_624 = 6;
|
||||
mfish_sfish_normal_init(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_sfish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if (actor->group == 2) {
|
||||
if (actor->activityFrameCount < 0) {
|
||||
actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14);
|
||||
}
|
||||
} else {
|
||||
actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
}
|
||||
actor->currentProcess = mfish_sfish_normal;
|
||||
}
|
||||
|
||||
void mfish_sfish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 35.0f);
|
||||
actor->_636 += DEG2SHORT_ANGLE(7.5f);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)),
|
||||
CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
mfish_sfish_turn_init(actor, gamex);
|
||||
} else if (actor->_62E_flags & 0x20) {
|
||||
add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f),
|
||||
DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f));
|
||||
} else if (actor->activityFrameCount < 0) {
|
||||
f32 v = RANDOM_F(1.0f);
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14);
|
||||
if (actor->group == 2 && actor->_5F0 < actor->init_data._10 + actor->init_data._14 * 0.5f) {
|
||||
actor->_612.y = atans_table(-actor->_5DC.z, -actor->_5DC.x);
|
||||
actor->activityFrameCount *= 5;
|
||||
}
|
||||
|
||||
if (RANDOM_F(1.0f) < 0.5f) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f);
|
||||
} else {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE((v - 0.3f) * 90.f);
|
||||
}
|
||||
|
||||
if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(50)) {
|
||||
actor->_612.x = RANDOM2_F(actor->init_data._30 * 2.0f * (v - 0.3f));
|
||||
}
|
||||
} else if (actor->_5F8 > actor->init_data._08 * 30.f) {
|
||||
s16 s;
|
||||
//! BUG: unused?
|
||||
RANDOM_F(1.0f);
|
||||
s = search_position_angleY(&suisou_pos[actor->group], &actor->position);
|
||||
actor->_5F8 = 0.0f;
|
||||
actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90.0));
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->activityFrameCount >>= 1;
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_sfish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if ((s16)(actor->_60C.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(115);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115);
|
||||
}
|
||||
|
||||
if (actor->group == 2) {
|
||||
if (actor->_5F0 < 0.0f) {
|
||||
actor->_5F0 = actor->init_data._10 + MAX(-actor->init_data._10, RANDOM_F(actor->init_data._14));
|
||||
}
|
||||
} else {
|
||||
actor->_5F0 = actor->init_data._14 + actor->init_data._10;
|
||||
}
|
||||
actor->currentProcess = mfish_sfish_turn;
|
||||
}
|
||||
|
||||
void mfish_sfish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 15.0f);
|
||||
actor->_636 += DEG2SHORT_ANGLE(7.5f);
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632),
|
||||
CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f));
|
||||
if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) {
|
||||
mfish_sfish_normal_init(actor, gamex);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 v;
|
||||
xyz_t p;
|
||||
int s;
|
||||
actor->currentProcess(actor, gamex);
|
||||
actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->_5E8 > actor->_5F0) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.05f);
|
||||
} else {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f);
|
||||
}
|
||||
|
||||
if (actor->_5F0 < 0.0f) {
|
||||
add_calc0(&actor->_5F0, 0.1f, 0.05f);
|
||||
add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0.5f));
|
||||
} else {
|
||||
if (ABS(actor->_60C.x) > DEG2SHORT_ANGLE(50)) {
|
||||
add_calc2(&actor->_5F0, actor->init_data._14 + actor->init_data._10, 0.2f, 0.1f);
|
||||
}
|
||||
}
|
||||
v = cos_s(actor->_60C.x) * actor->_5E8;
|
||||
actor->_5D0.x = v * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = v * cos_s(actor->_60C.y);
|
||||
actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x);
|
||||
mfish_get_flow_vec(&p, actor, gamex);
|
||||
actor->position.x += actor->_5D0.x + p.x;
|
||||
actor->position.y += actor->_5D0.y + p.y;
|
||||
actor->position.z += actor->_5D0.z + p.z;
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
if (actor->group == 2) {
|
||||
actor->_38._00.frame_control.speed = actor->_5E8 * 2.0f + 1.0f;
|
||||
} else {
|
||||
add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f);
|
||||
}
|
||||
|
||||
actor->_5B8 = actor->position;
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
|
||||
if (actor->position.y < 55.0f + actor->init_data._08) {
|
||||
actor->position.y = 55.0f + actor->init_data._08;
|
||||
if (actor->_612.x > 0) {
|
||||
actor->_612.x = DEG2SHORT_ANGLE(-30);
|
||||
}
|
||||
} else if (actor->position.y > 115.0f - actor->init_data._08) {
|
||||
actor->position.y = 115.0f - actor->init_data._08;
|
||||
mfish_hamon_make(actor, gamex);
|
||||
actor->_612.x = DEG2SHORT_ANGLE(30);
|
||||
} else {
|
||||
actor->activityFrameCount--;
|
||||
}
|
||||
|
||||
actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x));
|
||||
}
|
||||
|
||||
BOOL mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int s = joint1->x + actor->_618.z;
|
||||
joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
s = joint1->y + actor->_618.z;
|
||||
joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_num == 2) {
|
||||
int s = joint1->y - actor->_618.z * 3;
|
||||
joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(60), DEG2SHORT_ANGLE(60));
|
||||
s = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
s16 v;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
v = actor->_60C.x * 0.7f;
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_RotateY(actor->_60C.y, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1);
|
||||
Matrix_RotateX(v, 1);
|
||||
Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_sfish_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,277 @@
|
||||
|
||||
void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
actor->_5F0 = actor->_5E8;
|
||||
actor->_60C.y = s;
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->_5F4 = 0.0f;
|
||||
actor->_5D0.y = 0.0f;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_638 = qrand();
|
||||
actor->_622 = 0;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_624 = 2;
|
||||
actor->_594 = NULL;
|
||||
actor->_598 = NULL;
|
||||
actor->_5AC.x = 30.f;
|
||||
actor->_5AC.x = 30.f;
|
||||
mfish_tai_normal_init(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_tai_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
if (actor->currentProcess == mfish_tai_turn) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
}
|
||||
actor->currentProcess = mfish_tai_normal;
|
||||
}
|
||||
|
||||
void mfish_tai_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
s16 ss = (ABS(actor->_622) * ((0.75f * actor->init_data._30) / 32749.0f));
|
||||
|
||||
int s = (s16)MIN(DEG2SHORT_ANGLE2(25), MAX(ss, DEG2SHORT_ANGLE2(5)));
|
||||
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632),
|
||||
CALC_EASE2(0.3f), (s16)(s >> 1) >> 1, DEG2SHORT_ANGLE(0.125f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.15f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
|
||||
if (actor->_598) {
|
||||
f32 d = (actor->_598->init_data._08 + actor->init_data._08);
|
||||
f32 o_y = actor->_598->position.y;
|
||||
f32 o_z = actor->_598->position.z;
|
||||
f32 v = MAX(d - ABS(actor->_598->position.z - actor->position.z), 0.0f);
|
||||
v = v / d;
|
||||
if (actor->_598->fishIDEnum != aGYO_TYPE_JELLYFISH) {
|
||||
if (actor->_598->position.y < actor->position.y) {
|
||||
if (actor->position.y < (o_y + (actor->_598->init_data._04 + actor->init_data._04))) {
|
||||
add_calc2(&actor->position.y, (o_y + (actor->_598->init_data._04 + actor->init_data._04)) + 2.0f,
|
||||
0.2f, v * 0.1f);
|
||||
}
|
||||
} else {
|
||||
if (actor->position.y > o_y - (actor->_598->init_data._04 + actor->init_data._04)) {
|
||||
add_calc2(&actor->position.y, (o_y - (actor->_598->init_data._04 + actor->init_data._04)) - 2.0f,
|
||||
0.2f, v * 0.1f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_598->position.z < actor->position.z) {
|
||||
add_calc2(&actor->position.z, o_z + d, 0.05f, v * 0.1f);
|
||||
} else {
|
||||
add_calc2(&actor->position.z, o_z - d, 0.05f, v * 0.1f);
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_5FC < actor->_5AC.x - actor->init_data._28 * 0.5f) {
|
||||
if (actor->_612.y < 0) {
|
||||
s16 s;
|
||||
if (actor->_604 > actor->_608) {
|
||||
s = actor->_60C.y - DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
s = actor->_60C.y + DEG2SHORT_ANGLE(90);
|
||||
}
|
||||
actor->_612.y = s;
|
||||
actor->_5AC.x = RANDOM_F(80.f) + 30.f;
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(90), CALC_EASE(0.5f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
} else if (actor->_600 < actor->_5AC.x - actor->init_data._28 * 0.5f) {
|
||||
if (actor->_612.y > 0) {
|
||||
s16 s;
|
||||
if (actor->_604 > actor->_608) {
|
||||
s = actor->_60C.y + DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
s = actor->_60C.y - DEG2SHORT_ANGLE(90);
|
||||
}
|
||||
actor->_612.y = s;
|
||||
actor->_5AC.x = RANDOM_F(80.f) + 30.f;
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(-90), CALC_EASE(0.5f), DEG2SHORT_ANGLE(7.5f),
|
||||
DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
} else if (actor->_62E_flags & 0x100) {
|
||||
actor->position.z += 0.05f;
|
||||
if (ABS((s16)(actor->_612.y - DEG2SHORT_ANGLE(180))) < DEG2SHORT_ANGLE(110)) {
|
||||
if (actor->_612.y > DEG2SHORT_ANGLE(0)) {
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(1.5f);
|
||||
} else {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(1.5f);
|
||||
}
|
||||
}
|
||||
} else if (actor->_62E_flags & 0x1e) {
|
||||
mfish_tai_turn_init(actor, gamex);
|
||||
} else if (actor->_62E_flags & 0x20 && actor->_5F8 > actor->init_data._08 * 0.5f) {
|
||||
if (actor->init_data._20 < actor->_594->init_data._20) {
|
||||
s16 escAngle = mfish_get_escape_angle(actor, gamex);
|
||||
add_calc_short_angle2(&actor->_612.y, escAngle, CALC_EASE(0.25f), DEG2SHORT_ANGLE(2.5f),
|
||||
DEG2SHORT_ANGLE(0));
|
||||
}
|
||||
} else if (actor->activityFrameCount < 0) {
|
||||
f32 f = RANDOM_F(1.0f);
|
||||
actor->_612.y = actor->_60C.y;
|
||||
if (RANDOM_F(1.0f) < GETREG(TAKREG, 0x1c) * 0.1f + 0.1f) {
|
||||
if (actor->_612.y < 0) {
|
||||
if (actor->_604 > actor->_608) {
|
||||
actor->_612.y = actor->_60C.y - DEG2SHORT_ANGLE(157.5f);
|
||||
} else {
|
||||
actor->_612.y = actor->_60C.y + DEG2SHORT_ANGLE(157.5f);
|
||||
}
|
||||
} else {
|
||||
if (actor->_604 > actor->_608) {
|
||||
actor->_612.y = actor->_60C.y + DEG2SHORT_ANGLE(157.5f);
|
||||
} else {
|
||||
actor->_612.y = actor->_60C.y - DEG2SHORT_ANGLE(157.5f);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ((actor->_608 - actor->_604) * cos_s(actor->_60C.y) < 0.0f) {
|
||||
actor->_612.y += (s16)(f * actor->init_data._30);
|
||||
} else {
|
||||
actor->_612.y -= (s16)(f * actor->init_data._30);
|
||||
}
|
||||
}
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_tai_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 b = (s16)actor->_62C;
|
||||
|
||||
if (ABS(actor->_622) > DEG2SHORT_ANGLE(45)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((s16)(actor->_60C.y - b) > 0) {
|
||||
if (actor->_62E_flags & 6) {
|
||||
b = b + DEG2SHORT_ANGLE(170);
|
||||
} else {
|
||||
b = b + DEG2SHORT_ANGLE(95);
|
||||
}
|
||||
} else {
|
||||
if (actor->_62E_flags & 6) {
|
||||
b = b - DEG2SHORT_ANGLE(170);
|
||||
} else {
|
||||
b = b - DEG2SHORT_ANGLE(95);
|
||||
}
|
||||
}
|
||||
|
||||
if (ABS((s16)(b - actor->_612.y)) > DEG2SHORT_ANGLE(45)) {
|
||||
actor->currentProcess = mfish_tai_turn;
|
||||
}
|
||||
|
||||
actor->_612.y = b;
|
||||
}
|
||||
|
||||
void mfish_tai_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f + GETREG(TAKREG, 0x17) * 0.01f),
|
||||
(s16)(DEG2SHORT_ANGLE2(15.0f + 0.1f * GETREG(TAKREG, 0x18)) >> 1) >> 1,
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f + GETREG(TAKREG, 0x19) * 0.01f),
|
||||
(s16)(DEG2SHORT_ANGLE(5.0f + 0.1f * GETREG(TAKREG, 0x1a)) >> 1) >> 1,
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
|
||||
if (ABS((s16)actor->_622) < DEG2SHORT_ANGLE(3)) {
|
||||
mfish_tai_normal_init(actor, gamex);
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
xyz_t p;
|
||||
f32 v;
|
||||
|
||||
actor->currentProcess(actor, gamex);
|
||||
actor->_618.x += DEG2SHORT_ANGLE(RANDOM_F(3.0f) * actor->_5E8 + 0.1f);
|
||||
actor->_5F4 = sin_s(actor->_618.x) * 5.0f;
|
||||
if (actor->_62E_flags & 0x20) {
|
||||
add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.02f, 0.05f);
|
||||
} else {
|
||||
add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, 0.125f);
|
||||
}
|
||||
|
||||
if (ABS(actor->_622) > DEG2SHORT_ANGLE(20)) {
|
||||
add_calc_short_angle2(&actor->_632, MAX(DEG2SHORT_ANGLE2((GETREG(TAKREG, 0x27) + 5.0f) * actor->_5E8), 0),
|
||||
CALC_EASE(0.25f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.5f));
|
||||
} else if ((actor->_62E_flags & 0x20) == 0) {
|
||||
add_calc_short_angle2(&actor->_632, MAX(DEG2SHORT_ANGLE2((GETREG(TAKREG, 0x28) + 30.0f) * actor->_5E8), 0),
|
||||
CALC_EASE(0.25f), DEG2SHORT_ANGLE(5.0f), DEG2SHORT_ANGLE(0.5f));
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_632, DEG2SHORT_ANGLE(5), CALC_EASE(0.1f), DEG2SHORT_ANGLE(2.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
|
||||
actor->_636 += (s16)DEG2SHORT_ANGLE2((GETREG(TAKREG, 0x29) + 10.0f) * 0.5f);
|
||||
|
||||
if (ABS(actor->_622) > DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x37) + 60.f) ||
|
||||
(s16)(ABS(actor->_622) - ABS(actor->_618.z)) < DEG2SHORT_ANGLE(5)) {
|
||||
add_calc2(&actor->_5EC, 0.05f, 0.1f, 0.005f);
|
||||
add_calc2(&actor->_5E8, MAX(actor->_5F0, actor->init_data._10), 0.05f, actor->_5EC);
|
||||
} else {
|
||||
add_calc0(&actor->_5EC, 0.1f, 0.002f);
|
||||
add_calc2(&actor->_5E8, 0.16f, 1.0f - actor->init_data._18, 0.001f);
|
||||
}
|
||||
|
||||
actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y);
|
||||
actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y);
|
||||
|
||||
mfish_get_flow_vec(&p, actor, gamex);
|
||||
|
||||
actor->position.x += actor->_5D0.x + p.x;
|
||||
actor->position.z += actor->_5D0.z + p.z;
|
||||
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
actor->_38._00.frame_control.speed =
|
||||
(0.1f + 0.01f * GETREG(TAKREG, 0x14)) * 0.5f + (1.5f + 0.01f * GETREG(TAKREG, 0x15)) * actor->_5E8;
|
||||
add_calc0(&actor->_5F8, 0.25f, 0.05f);
|
||||
actor->_5F8 = MIN(1.0f, actor->_5F8);
|
||||
mfish_body_wind_anime_play(actor, gamex);
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
|
||||
if (actor->position.y < (GETREG(TAKREG, 0x47) + 55.0f) - actor->init_data._04) {
|
||||
actor->position.y = (GETREG(TAKREG, 0x47) + 55.0f) - actor->init_data._04;
|
||||
}
|
||||
|
||||
actor->activityFrameCount--;
|
||||
}
|
||||
|
||||
BOOL mfish_tai_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int s = (joint1->x + actor->_618.z) >> 3;
|
||||
joint1->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-15), DEG2SHORT_ANGLE(15));
|
||||
} else if (joint_num == 2) {
|
||||
int s = joint1->y - (int)(actor->_618.z * (0.01f * GETREG(TAKREG, 0x4b) + 1.5f));
|
||||
joint1->y = MY_CLAMP(s, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0);
|
||||
Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_tai_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,355 @@
|
||||
|
||||
void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
actor->_624 = 8;
|
||||
actor->position.x = 225.0f;
|
||||
actor->position.y = 55.0f;
|
||||
actor->position.z = 185.0f;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->_640 = 0;
|
||||
actor->_642 = 1;
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_612.x = DEG2SHORT_ANGLE2(25.0f + GETREG(TAKREG, 0x46));
|
||||
actor->_612.z = DEG2SHORT_ANGLE(-3);
|
||||
actor->_646 = 0;
|
||||
actor->_5AC.y = 0.1f;
|
||||
actor->_5E8 = 0.05f;
|
||||
actor->_60C.y = DEG2SHORT_ANGLE(50);
|
||||
mfish_unagi_rail_move_init(actor, gamex);
|
||||
}
|
||||
|
||||
s16 mfish_unagi_get_next_rail_type(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
s16 s = actor->_646;
|
||||
s16 s2 = (s16)RANDOM_F(3.0f);
|
||||
if (s2 == s) {
|
||||
if (s2 < 2) {
|
||||
s2++;
|
||||
} else {
|
||||
s2 = 0;
|
||||
}
|
||||
}
|
||||
return s2;
|
||||
}
|
||||
|
||||
void mfish_unagi_aim_wind_angle_calc(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
s16 s;
|
||||
if (actor->currentProcess == mfish_unagi_normal_to_reverse) {
|
||||
s = 12;
|
||||
} else if (actor->currentProcess == mfish_unagi_reverse_to_normal) {
|
||||
s = 19;
|
||||
} else {
|
||||
s = unagi_rail_num_tbl[actor->_646];
|
||||
}
|
||||
if (actor->_640 > s - 5 || actor->_640 < 3) {
|
||||
add_calc_short_angle2(&actor->_612.x, (s16)DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x32) + 25.0f), CALC_EASE(0.1f),
|
||||
DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0));
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_612.x, (s16)DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x33) + 30.0f), CALC_EASE(0.05f),
|
||||
DEG2SHORT_ANGLE(0.25f), DEG2SHORT_ANGLE(0));
|
||||
}
|
||||
add_calc_short_angle2(&actor->_612.z, (s16)DEG2SHORT_ANGLE2(-(GETREG(TAKREG, 0x34) * 0.1f + 3.0f)),
|
||||
CALC_EASE(0.05f), DEG2SHORT_ANGLE(0.025f), DEG2SHORT_ANGLE(0));
|
||||
}
|
||||
|
||||
void mfish_unagi_rail_move_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 target = search_position_angleY(&actor->position, &unagi_rail_tbl[actor->_646][actor->_642]);
|
||||
actor->_640 = 0;
|
||||
actor->_642 = 1;
|
||||
add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(GETREG(TAKREG, 0x24) * 0.01f + 0.5f),
|
||||
DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
actor->currentProcess = mfish_unagi_rail_move;
|
||||
}
|
||||
|
||||
void mfish_unagi_rail_move(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
xyz_t* pp = unagi_rail_tbl[actor->_646];
|
||||
f32 v = cos_s(actor->_618.z);
|
||||
f32 v2 = actor->_5E8;
|
||||
f32 v3;
|
||||
s16 s;
|
||||
if (v < 0.0f) {
|
||||
v = 0.0f;
|
||||
}
|
||||
v3 = search_position_distance(&actor->position, &pp[actor->_642]);
|
||||
if ((f32)(__fabs(chase_xyz_t(&actor->position, &pp[actor->_642], v2))) < 0.008f) {
|
||||
if (actor->_640 < unagi_rail_num_tbl[actor->_646] - 1) {
|
||||
actor->_640++;
|
||||
} else {
|
||||
actor->_640 = 0;
|
||||
if (RANDOM_F(1.0f) > 0.5f) {
|
||||
mfish_unagi_normal_to_reverse_init(actor, gamex);
|
||||
return;
|
||||
}
|
||||
actor->_646 = mfish_unagi_get_next_rail_type(actor);
|
||||
}
|
||||
if (actor->_642 < unagi_rail_num_tbl[actor->_646] - 1) {
|
||||
actor->_642++;
|
||||
} else {
|
||||
actor->_642 = 0;
|
||||
}
|
||||
v2 -= v3;
|
||||
if (v2 > 0.0f) {
|
||||
chase_xyz_t(&actor->position, &pp[actor->_642], v2);
|
||||
}
|
||||
}
|
||||
|
||||
mfish_unagi_aim_wind_angle_calc(actor);
|
||||
s = search_position_angleY(&actor->position, &pp[actor->_642]);
|
||||
add_calc_short_angle2(&actor->_612.y, s, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_632, actor->_612.x * v, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0));
|
||||
add_calc_short_angle2(&actor->_644, actor->_612.z * v, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0));
|
||||
}
|
||||
|
||||
void mfish_unagi_normal_to_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 target = search_position_angleY(&actor->position, &unagi_normal_to_reverse_rail_pos[actor->_642]);
|
||||
actor->_640 = 0;
|
||||
actor->_642 = 1;
|
||||
add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(GETREG(TAKREG, 0x24) * 0.01f + 0.5f),
|
||||
DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, 0x2d);
|
||||
actor->currentProcess = mfish_unagi_normal_to_reverse;
|
||||
}
|
||||
|
||||
void mfish_unagi_normal_to_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 v1;
|
||||
s16 s2;
|
||||
xyz_t* p = unagi_normal_to_reverse_rail_pos;
|
||||
f32 c = cos_s(actor->_618.z);
|
||||
f32 v0 = actor->_5E8;
|
||||
if (c < 0.0f) {
|
||||
c = 0.0f;
|
||||
}
|
||||
|
||||
v1 = search_position_distance(&actor->position, &p[actor->_642]);
|
||||
if ((f32)__fabs(chase_xyz_t(&actor->position, &p[actor->_642], v0)) < 0.008f) {
|
||||
if (actor->_640 < 11) {
|
||||
actor->_640++;
|
||||
} else {
|
||||
actor->_640 = 0;
|
||||
actor->_646 = mfish_unagi_get_next_rail_type(actor);
|
||||
mfish_unagi_rail_move_reverse_init(actor, gamex);
|
||||
return;
|
||||
}
|
||||
if (actor->_642 < 11) {
|
||||
actor->_642++;
|
||||
} else {
|
||||
actor->_642 = 0;
|
||||
}
|
||||
v0 -= v1;
|
||||
if (v0 > 0.0f) {
|
||||
chase_xyz_t(&actor->position, &p[actor->_642], v0);
|
||||
}
|
||||
}
|
||||
mfish_unagi_aim_wind_angle_calc(actor);
|
||||
s2 = search_position_angleY(&actor->position, &p[actor->_642]);
|
||||
add_calc_short_angle2(&actor->_612.y, s2, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_632, actor->_612.x * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0));
|
||||
add_calc_short_angle2(&actor->_644, actor->_612.z * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0));
|
||||
}
|
||||
|
||||
void mfish_unagi_rail_move_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
xyz_t* p = unagi_rail_tbl[actor->_646];
|
||||
s16 target;
|
||||
actor->_640 = 0;
|
||||
actor->_642 = unagi_rail_num_tbl[actor->_646] - 1;
|
||||
target = search_position_angleY(&actor->position, &p[actor->_642]);
|
||||
add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(0.5f + 0.01f * GETREG(TAKREG, 0x24)),
|
||||
DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
actor->currentProcess = mfish_unagi_rail_move_reverse;
|
||||
}
|
||||
|
||||
void mfish_unagi_rail_move_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 v1;
|
||||
s16 s2;
|
||||
xyz_t* p = unagi_rail_tbl[actor->_646];
|
||||
f32 c = cos_s(actor->_618.z);
|
||||
f32 v0 = actor->_5E8;
|
||||
if (c < 0.0f) {
|
||||
c = 0.0f;
|
||||
}
|
||||
v1 = search_position_distance(&actor->position, &p[actor->_642]);
|
||||
if ((f32)__fabs(chase_xyz_t(&actor->position, &p[actor->_642], v0)) < 0.008f) {
|
||||
if (actor->_640 > 1) {
|
||||
actor->_640--;
|
||||
} else if (actor->_640 == 1) {
|
||||
actor->_640 = 0;
|
||||
if (RANDOM_F(1.0f) > 0.5f) {
|
||||
mfish_unagi_reverse_to_normal_init(actor, gamex);
|
||||
return;
|
||||
}
|
||||
actor->_646 = mfish_unagi_get_next_rail_type(actor);
|
||||
} else {
|
||||
actor->_640 = unagi_rail_num_tbl[actor->_646] + -1;
|
||||
}
|
||||
|
||||
if (actor->_642 > 0) {
|
||||
actor->_642--;
|
||||
} else {
|
||||
actor->_642 = unagi_rail_num_tbl[actor->_646] + -1;
|
||||
}
|
||||
v0 -= v1;
|
||||
if (v0 > 0.0f) {
|
||||
chase_xyz_t(&actor->position, &p[actor->_642], v0);
|
||||
}
|
||||
}
|
||||
mfish_unagi_aim_wind_angle_calc(actor);
|
||||
s2 = search_position_angleY(&actor->position, &p[actor->_642]);
|
||||
add_calc_short_angle2(&actor->_612.y, s2, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_632, actor->_612.x * c, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0));
|
||||
add_calc_short_angle2(&actor->_644, actor->_612.z * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0));
|
||||
}
|
||||
|
||||
void mfish_unagi_reverse_to_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 target;
|
||||
actor->_640 = 0;
|
||||
actor->_642 = 0x12;
|
||||
target = search_position_angleY(&actor->position, &unagi_reverse_to_normal_rail_pos[actor->_642]);
|
||||
add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(0.5f + 0.01f * GETREG(TAKREG, 0x24)),
|
||||
DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
actor->currentProcess = mfish_unagi_reverse_to_normal;
|
||||
}
|
||||
|
||||
void mfish_unagi_reverse_to_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 v1;
|
||||
s16 s2;
|
||||
xyz_t* p = unagi_reverse_to_normal_rail_pos;
|
||||
f32 c = cos_s(actor->_618.z);
|
||||
f32 v0 = actor->_5E8;
|
||||
if (c < 0.0f) {
|
||||
c = 0.0f;
|
||||
}
|
||||
v1 = search_position_distance(&actor->position, &p[actor->_642]);
|
||||
if ((f32)__fabs(chase_xyz_t(&actor->position, &p[actor->_642], v0)) < 0.008f) {
|
||||
if (actor->_640 > 1) {
|
||||
actor->_640--;
|
||||
} else if (actor->_640 == 1) {
|
||||
actor->_640 = 0;
|
||||
actor->_646 = mfish_unagi_get_next_rail_type(actor);
|
||||
mfish_unagi_rail_move_init(actor, gamex);
|
||||
return;
|
||||
} else {
|
||||
actor->_640 = 0x12;
|
||||
}
|
||||
|
||||
if (actor->_642 > 0) {
|
||||
actor->_642--;
|
||||
} else {
|
||||
actor->_642 = 0x12;
|
||||
}
|
||||
v0 -= v1;
|
||||
if (v0 > 0.0f) {
|
||||
chase_xyz_t(&actor->position, &p[actor->_642], v0);
|
||||
}
|
||||
}
|
||||
mfish_unagi_aim_wind_angle_calc(actor);
|
||||
s2 = search_position_angleY(&actor->position, &p[actor->_642]);
|
||||
add_calc_short_angle2(&actor->_612.y, s2, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_632, actor->_612.x * c, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0));
|
||||
add_calc_short_angle2(&actor->_644, actor->_612.z * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0));
|
||||
}
|
||||
|
||||
void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
xyz_t p1, p2, p3;
|
||||
p1 = ZeroVec;
|
||||
p2 = ZeroVec;
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
if (actor->activityFrameCount-- < 0) {
|
||||
f32 v;
|
||||
actor->_5F0 = Rnd_EX_f(actor->init_data._14) + actor->init_data._10;
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
v = (actor->_5F0 / (actor->init_data._14 + actor->init_data._10));
|
||||
actor->_612.x = DEG2SHORT_ANGLE((GETREG(TAKREG, 0x35) + 75.0f) * v);
|
||||
actor->_612.z = DEG2SHORT_ANGLE(-(GETREG(TAKREG, 0x36) * 0.1f + 9.0f) * v);
|
||||
actor->_5AC.y = (GETREG(TAKREG, 0x11) * 0.01f + 0.05f) + RANDOM_F(GETREG(TAKREG, 0x12) * 0.01f + 0.1f);
|
||||
}
|
||||
|
||||
if (actor->activityFrameCount > actor->savedActivityFrameCount - 40) {
|
||||
actor->_5EC = cos_s(actor->_622) * 0.1f;
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.15f, actor->_5EC);
|
||||
} else {
|
||||
if (ABS(actor->_618.z) > ABS(actor->_622)) {
|
||||
actor->_5EC = cos_s(actor->_622) * 0.05f;
|
||||
add_calc2(&actor->_5E8, actor->_5AC.y * MAX(0.0f, cos_s(actor->_622)), 0.025f, actor->_5EC);
|
||||
}
|
||||
}
|
||||
|
||||
add_calc0(&actor->_5AC.x, 0.025f, 0.5f);
|
||||
add_calc0(&actor->_5AC.z, 0.025f, 0.5f);
|
||||
p1.x = sin_s(actor->_612.y) * actor->_5E8;
|
||||
p1.z = cos_s(actor->_612.y) * actor->_5E8;
|
||||
p2.x = sin_s(actor->_60C.y) * actor->_5E8;
|
||||
p2.z = cos_s(actor->_60C.y) * actor->_5E8;
|
||||
xyz_t_sub(&p2, &p1, &p3);
|
||||
actor->_5AC.x += p3.x;
|
||||
actor->_5AC.z += p3.z;
|
||||
actor->_636 += actor->_644;
|
||||
|
||||
actor->_622 =
|
||||
add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(GETREG(TAKREG, 0x26) * 0.01f + 0.2f),
|
||||
(s16)(DEG2SHORT_ANGLE((GETREG(TAKREG, 0x27) + 10.0f) +
|
||||
(GETREG(TAKREG, 0x28) + 50.0f) * MAX(actor->_5E8, 0.01f)) >>
|
||||
1) >>
|
||||
1,
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
add_calc_short_angle2(&actor->_38._538.x, actor->_618.z, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
add_calc_short_angle2(&actor->_38._538.y, actor->_38._538.x, CALC_EASE2(0.15f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
actor->currentProcess(actor, gamex);
|
||||
add_calc2(&actor->_5F4, actor->_632 * (GETREG(TAKREG, 0x47) * 0.001f + 0.04f), 0.25f, 91.0f);
|
||||
Museum_Fish_objchk_pos_set(actor, gamex);
|
||||
}
|
||||
|
||||
BOOL mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int i = (s16)(actor->_632 * 0.5f * sin_s(actor->_636));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
trans->z += actor->_5F4 * sin_s(actor->_636 + DEG2SHORT_ANGLE(90));
|
||||
} else if (joint_num == 2) {
|
||||
int i;
|
||||
|
||||
i = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3c)) - (int)(actor->_618.z * (1.0f + 0.01f * GETREG(TAKREG, 0x38)));
|
||||
i += (s16)(actor->_632 * 0.75f * sin_s(actor->_636 + DEG2SHORT_ANGLE2(90)));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE2(-90), DEG2SHORT_ANGLE2(90));
|
||||
} else if (joint_num == 3) {
|
||||
int i;
|
||||
i = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3d)) - (int)(actor->_38._538.x * (1.1f + 0.01f * GETREG(TAKREG, 0x39)));
|
||||
i += (s16)(actor->_632 * sin_s(actor->_636 + DEG2SHORT_ANGLE(180)));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
} else if (joint_num == 4) {
|
||||
int i;
|
||||
i = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3e)) - (int)(actor->_38._538.y * (1.2f + 0.01f * GETREG(TAKREG, 0x3a)));
|
||||
i += (s16)(actor->_632 * 0.75f * sin_s(actor->_636 + DEG2SHORT_ANGLE(270)));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
} else if (joint_num == 5) {
|
||||
int i;
|
||||
i = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3f)) - (int)(actor->_38._538.z * (1.3f + 0.01f * GETREG(TAKREG, 0x3b)));
|
||||
i += (s16)(actor->_632 * 0.5f * sin_s(actor->_636 + DEG2SHORT_ANGLE(0)));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x + actor->_5AC.x, actor->position.y, actor->position.z + actor->_5AC.z, 0);
|
||||
Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_unagi_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
@@ -0,0 +1,229 @@
|
||||
|
||||
void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
cKF_SkeletonInfo_R_ct(&skele->_00, skele->_54C, skele->_550[0], &skele->_4F0, &skele->_514);
|
||||
cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&skele->_00, skele->_550[0], NULL, 0.5f, 0.0f);
|
||||
actor->position = suisou_pos[actor->group];
|
||||
actor->position.y = 53.0f;
|
||||
actor->_60C.y = qrand();
|
||||
actor->_612.y = actor->_60C.y;
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->_5E8 = 0.0f;
|
||||
actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->_624 = 5;
|
||||
mfish_zarigani_normal_process_init(actor, gamex);
|
||||
}
|
||||
|
||||
void mfish_zarigani_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->currentProcess = mfish_zarigani_normal_process;
|
||||
}
|
||||
|
||||
void mfish_zarigani_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->activityFrameCount--;
|
||||
cKF_SkeletonInfo_R_play(&actor->_38._00);
|
||||
if (actor->_5F0 > 0.0f) {
|
||||
add_calc_short_angle2(&actor->_644, (s16)DEG2SHORT_ANGLE2(actor->_5F0 * 30.0f + 1.0f), CALC_EASE(0.25f),
|
||||
DEG2SHORT_ANGLE(0.125f), DEG2SHORT_ANGLE(0.5f));
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_644, (s16)DEG2SHORT_ANGLE2(-3.0f + GETREG(TAKREG, 0x19)), CALC_EASE(0.25f),
|
||||
DEG2SHORT_ANGLE(0.125f), DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + DEG2SHORT_ANGLE(sin_s(actor->_638) * 3.0f),
|
||||
CALC_EASE(0.1f), DEG2SHORT_ANGLE(1.0f), DEG2SHORT_ANGLE(0.5f));
|
||||
add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE(0.25f), DEG2SHORT_ANGLE(1.0f), DEG2SHORT_ANGLE(0.5f));
|
||||
|
||||
add_calc_short_angle2(&actor->_60C.x, (s16)DEG2SHORT_ANGLE2(sin_s(actor->_638) * 2.5f + 2.5f), CALC_EASE(0.25f),
|
||||
DEG2SHORT_ANGLE(1.0f), DEG2SHORT_ANGLE(0.5f));
|
||||
|
||||
if (ABS((s16)(actor->_612.y - actor->_60C.y)) < DEG2SHORT_ANGLE(10) | actor->_638 > 0) {
|
||||
//! BUG: someone forgot a `|` ^
|
||||
f32 v = actor->_5E8 * (ABS(sin_s(actor->_638)) * 0.5f + 0.5f);
|
||||
actor->position.x += v * sin_s(actor->_60C.y);
|
||||
actor->position.z += v * cos_s(actor->_60C.y);
|
||||
}
|
||||
|
||||
if (actor->activityFrameCount < 0) {
|
||||
actor->_5F0 = 0.0f;
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
mfish_zarigani_wait_process_init(actor, gamex);
|
||||
}
|
||||
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
if (ABS((s16)(actor->_60C.y - actor->_62C)) < DEG2SHORT_ANGLE(90)) {
|
||||
if (ABS((s16)(actor->_612.y - actor->_62C)) < DEG2SHORT_ANGLE(35) && (actor->_62E_flags & 0x10) == 0) {
|
||||
mfish_zarigani_stand_process_init(actor, gamex);
|
||||
} else if ((s16)(actor->_612.y - actor->_62C) > 0) {
|
||||
actor->_612.y = actor->_62C;
|
||||
actor->_612.y += DEG2SHORT_ANGLE(95);
|
||||
} else {
|
||||
actor->_612.y = actor->_62C;
|
||||
actor->_612.y -= DEG2SHORT_ANGLE(95);
|
||||
}
|
||||
} else {
|
||||
actor->_5F0 = actor->init_data._10 + MAX(-actor->init_data._10, RANDOM_F(actor->init_data._14));
|
||||
actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(180);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_zarigani_wait_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->currentProcess = mfish_zarigani_wait_process;
|
||||
}
|
||||
|
||||
void mfish_zarigani_wait_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->activityFrameCount--;
|
||||
add_calc_short_angle2(&actor->_644, 0, CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.125f), DEG2SHORT_ANGLE(0.5f));
|
||||
if (actor->activityFrameCount < 0) {
|
||||
if (mfish_WallCheck(actor) && RANDOM_F(1) < 0.2f) {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
mfish_zarigani_jump_process_init(actor, gamex);
|
||||
} else {
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14);
|
||||
actor->_612.y += (s16)RANDOM2_F(actor->init_data._30 * 2.0f);
|
||||
mfish_zarigani_normal_process_init(actor, gamex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mfish_zarigani_stand_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->currentProcess = mfish_zarigani_stand_process;
|
||||
if (actor->_62E_flags & 0x1e) {
|
||||
actor->_612.y = actor->_62C;
|
||||
if ((s16)(actor->_60C.y - actor->_62C) != DEG2SHORT_ANGLE(0)) {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
actor->_612.y += DEG2SHORT_ANGLE(-90);
|
||||
}
|
||||
}
|
||||
actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
}
|
||||
|
||||
void mfish_zarigani_stand_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 v;
|
||||
|
||||
cKF_SkeletonInfo_R_play(&actor->_38._00);
|
||||
if (actor->activityFrameCount > 0) {
|
||||
actor->activityFrameCount--;
|
||||
if (add_calc_short_angle2(&actor->_60C.x, (s16)DEG2SHORT_ANGLE2(-45.0f + GETREG(TAKREG, 0x1a)), CALC_EASE(0.1),
|
||||
DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.05f)) == 0) {
|
||||
add_calc_short_angle2(&actor->_644, DEG2SHORT_ANGLE(0.5f), CALC_EASE(0.01f), DEG2SHORT_ANGLE(0.05f),
|
||||
DEG2SHORT_ANGLE(0));
|
||||
}
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE(0.25f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.05f));
|
||||
if (add_calc_short_angle2(&actor->_60C.x, DEG2SHORT_ANGLE(0), CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.75f),
|
||||
DEG2SHORT_ANGLE(0.05f)) == 0) {
|
||||
actor->_5AC = ZeroVec;
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
mfish_zarigani_wait_process_init(actor, gamex);
|
||||
}
|
||||
}
|
||||
|
||||
v = (-SHORT2DEG_ANGLE2(actor->_60C.x) / 90.0f);
|
||||
v *= (20.0f + GETREG(TAKREG, 0x1b) * 0.1f);
|
||||
actor->_5AC.x = sin_s(actor->_60C.y) * v;
|
||||
actor->_5AC.z = cos_s(actor->_60C.y) * v;
|
||||
}
|
||||
|
||||
void mfish_zarigani_jump_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_5F0 = -1.2f + GETREG(TAKREG, 0x1e) * 0.01f;
|
||||
actor->_5E8 = 0.0f;
|
||||
actor->_5D0.y = 0.25f + GETREG(TAKREG, 0x1d) * 0.01f;
|
||||
actor->_644 = 0;
|
||||
actor->currentProcess = mfish_zarigani_jump_process;
|
||||
}
|
||||
|
||||
void mfish_zarigani_jump_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_5D0.y -= 0.015f + GETREG(TAKREG, 0x1f) * 0.001f;
|
||||
actor->_5D0.y *= 0.99f;
|
||||
actor->_5F0 *= 0.95f;
|
||||
add_calc2(&actor->_5E8, actor->_5F0, 0.25f, 0.05f);
|
||||
actor->position.x += actor->_5E8 * sin_s(actor->_60C.y);
|
||||
actor->position.y += actor->_5D0.y * MAX(sin_s(actor->_60C.x), 0.1f);
|
||||
actor->position.z += actor->_5E8 * cos_s(actor->_60C.y);
|
||||
if (actor->_5D0.y > 0.0f) {
|
||||
add_calc_short_angle2(&actor->_60C.x, (s16)DEG2SHORT_ANGLE2(30.f + GETREG(TAKREG, 0x21)), CALC_EASE(0.5),
|
||||
DEG2SHORT_ANGLE(7.5f), DEG2SHORT_ANGLE(0));
|
||||
} else if ((add_calc_short_angle2(&actor->_60C.x, 0, CALC_EASE(0.1), DEG2SHORT_ANGLE(1.5f),
|
||||
DEG2SHORT_ANGLE(0.25f)) == 0) &&
|
||||
(actor->_62E_flags & 0x200)) {
|
||||
actor->_5AC.y = 0.0f;
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
mfish_zarigani_wait_process_init(actor, gamex);
|
||||
return;
|
||||
}
|
||||
actor->_5AC.y = SHORT2DEG_ANGLE2(actor->_60C.x) / 90.f;
|
||||
actor->_5AC.y *= 20.f + GETREG(TAKREG, 0x1c) * 0.1f;
|
||||
}
|
||||
|
||||
void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
f32 v;
|
||||
xyz_t p = suisou_pos[actor->group];
|
||||
add_calc(&actor->_5E8, actor->_5F0, 0.1f, 0.2f, 0.01f);
|
||||
actor->currentProcess(actor, gamex);
|
||||
actor->_638 += actor->_644;
|
||||
Museum_Fish_objchk_pos_set(actor, gamex);
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
xyz_t_sub(&p, &actor->position, &p);
|
||||
v = 58.0f + MAX(ABS(p.x), ABS(p.z)) * -0.15f;
|
||||
actor->_62E_flags &= ~0x200;
|
||||
if (actor->position.y < v || actor->currentProcess != mfish_zarigani_jump_process) {
|
||||
actor->_62E_flags |= 0x200;
|
||||
actor->position.y = v;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL mfish_zarigani_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) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 2) {
|
||||
joint1->x += (s16)(actor->_60C.x >> 3);
|
||||
} else if (joint_num == 3) {
|
||||
joint1->z += (s16)((joint1->z + DEG2SHORT_ANGLE2(-90.65f) + GETREG(TAKREG, 0x2a)) *
|
||||
(1.5f + GETREG(TAKREG, 0x29) * 0.1f));
|
||||
} else if (joint_num == 5) {
|
||||
joint1->x += (s16)DEG2SHORT_ANGLE2(3.0f * sin_s(actor->_638));
|
||||
joint1->z -= (s16)DEG2SHORT_ANGLE2(5.0f * cos_s(actor->_638));
|
||||
joint1->z += (s16)(actor->_618.z * (0.4f + cos_s(actor->_638) * 0.4f));
|
||||
} else if (joint_num == 7) {
|
||||
joint1->x += (s16)DEG2SHORT_ANGLE2(3.0f * sin_s(actor->_638));
|
||||
joint1->z -= (s16)DEG2SHORT_ANGLE2(5.0f * cos_s(actor->_638));
|
||||
joint1->z += (s16)(actor->_618.z * (0.4f + cos_s(actor->_638) * 0.4f));
|
||||
} else if (joint_num == 8) {
|
||||
joint1->z >>= 2;
|
||||
if (actor->_60C.x < 0) {
|
||||
joint1->z += actor->_60C.x;
|
||||
} else {
|
||||
joint1->z += (s16)(actor->_60C.x * (GETREG(TAKREG, 0x20) * 0.1f + 3.0f));
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void mfish_zarigani_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
Mtx* mtxp;
|
||||
if (gamex->frame_counter & 1) {
|
||||
mtxp = &skele->_70;
|
||||
} else {
|
||||
mtxp = &skele->_2b0;
|
||||
}
|
||||
OPEN_DISP(gamex->graph);
|
||||
Matrix_translate(actor->position.x + actor->_5AC.x, actor->position.y + actor->_5AC.y,
|
||||
actor->position.z + actor->_5AC.z, 0);
|
||||
Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1);
|
||||
Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1);
|
||||
Matrix_rotateXYZ(DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(-180), DEG2SHORT_ANGLE(0), 1);
|
||||
Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor);
|
||||
CLOSE_DISP(gamex->graph);
|
||||
}
|
||||
Reference in New Issue
Block a user