From ff808840f425790c2549e26a8ee9bca95ff314d5 Mon Sep 17 00:00:00 2001 From: roeming Date: Fri, 7 Feb 2025 09:53:17 -0500 Subject: [PATCH 01/26] moving common data out to new header, renamed disp function names --- include/ac_museum_fish.h | 474 -------------------- include/ac_museum_fish_priv.h | 521 ++++++++++++++++++++++ src/actor/ac_museum_fish.c | 184 +------- src/actor/ac_museum_fish_afish.c_inc | 1 + src/actor/ac_museum_fish_aroana.c_inc | 21 +- src/actor/ac_museum_fish_base.c_inc | 51 +-- src/actor/ac_museum_fish_bass.c_inc | 5 +- src/actor/ac_museum_fish_big_fish.c_inc | 35 +- src/actor/ac_museum_fish_dojou.c_inc | 25 +- src/actor/ac_museum_fish_donko.c_inc | 21 +- src/actor/ac_museum_fish_gupi.c_inc | 29 +- src/actor/ac_museum_fish_hasu.c_inc | 24 +- src/actor/ac_museum_fish_ito.c_inc | 27 +- src/actor/ac_museum_fish_kaseki.c_inc | 31 +- src/actor/ac_museum_fish_kingyo.c_inc | 29 +- src/actor/ac_museum_fish_koi.c_inc | 35 +- src/actor/ac_museum_fish_kurage.c_inc | 2 +- src/actor/ac_museum_fish_medaka.c_inc | 25 +- src/actor/ac_museum_fish_namazu.c_inc | 40 +- src/actor/ac_museum_fish_seafish.c_inc | 21 +- src/actor/ac_museum_fish_small_fish.c_inc | 25 +- src/actor/ac_museum_fish_tai.c_inc | 17 +- src/actor/ac_museum_fish_unagi.c_inc | 78 +++- src/actor/ac_museum_fish_zarigani.c_inc | 39 +- 24 files changed, 840 insertions(+), 920 deletions(-) create mode 100644 include/ac_museum_fish_priv.h diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 76ee92bb..a5bc8a62 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -1,11 +1,7 @@ #ifndef AC_MUSEUM_FISH_H #define AC_MUSEUM_FISH_H -#include "types.h" #include "m_actor.h" -#include "c_keyframe.h" -#include "libu64/u64types.h" -#include "ac_gyoei.h" #ifdef __cplusplus extern "C" { @@ -13,476 +9,6 @@ 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 diff --git a/include/ac_museum_fish_priv.h b/include/ac_museum_fish_priv.h new file mode 100644 index 00000000..a2cb98a7 --- /dev/null +++ b/include/ac_museum_fish_priv.h @@ -0,0 +1,521 @@ +#ifndef AC_MUSEUM_FISH_PRIV_H +#define AC_MUSEUM_FISH_PRIV_H + +#include "ac_museum_fish.h" +#include "m_msg.h" +#include "m_common_data.h" +#include "sys_matrix.h" +#include "m_player_lib.h" +#include "m_debug_mode.h" +#include "m_rcp.h" +#include "ac_gyoei.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// found useful macros +#define MY_MAX(a, b) (((a) >= (b)) ? (a) : (b)) +#define MY_CLAMP(v, l, h) MIN(MY_MAX((l), (v)), (h)) +#define ARRAY_LEN(a) (sizeof(a) / sizeof(*a)) + +#define CALC_EASE(x) (1.0f - sqrtf(1.0f - (x))) +#define CALC_EASE2(x) CALC_EASE(CALC_EASE(x)) +#define SHORT2DEG_ANGLE2(x) ((x) * (360.0f / 65536.0f)) +#define RANDOMF_RANGE(min, max) ((f32)(min) + (f32)RANDOM_F((f32)(max) - (f32)(min))) +#define RANDOM2F_RANGE(min, max) ((f32)(min) + (f32)RANDOM2_F((f32)(max) - (f32)(min))) +#define RANDOM_RANGE(min, max) ((int)(min) + (int)RANDOM((int)(max) - (int)(min))) +#define RANDOM2_RANGE(min, max) ((int)(min) + (int)RANDOM2((int)(max) - (int)(min))) + +#define artificial_padding(lastOffset, currentOffset, typeOfLastMember) \ + u8 __##currentOffset##padding[currentOffset - lastOffset - sizeof(typeOfLastMember)] + +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*); + +// struct decls +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 + +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 + +// data +extern ACTOR_PROFILE Museum_Fish_Profile; +// technically static, but this helps with vscode includes +extern xyz_t suisou_pos[5]; +extern int kusa_group_tbl[14]; +extern xyz_t kusa_pos[14]; +extern xyz_t hasu_pos; +extern xyz_t suisou_awa_pos[20]; +extern s16 suisou_awa_group[20]; +extern cKF_Skeleton_R_c* mfish_model_tbl[40]; +extern cKF_Animation_R_c* mfish_anime_init_tbl[40]; +extern MUSEUM_FISH_INIT_DATA mfish_init_data[40]; +extern s16 mfish_group_tbl[40]; +extern PRIV_FISH_CONSTRUCTOR mfish_ct[40]; +extern PRIV_FISH_MOVE mfish_mv[40]; +extern PRIV_FISH_DRAW mfish_dw[40]; +extern float kusa_start_frame[14]; + +// functions + +// 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); +BOOL kusa_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags, + void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags, + void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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); +void mfish_namazu_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor); +void mfish_namazu_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_namazu_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor); +void mfish_namazu_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_namazu_ground_sweep_process_init(MUSEUM_FISH_PRIVATE_DATA* actor); +void mfish_namazu_ground_sweep_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +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_idx, Gfx** joint_shape, u8* joint_flags, + void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +BOOL hasu_after_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags, + void* arg, s_xyz* joint_rot, xyz_t* joint_pos); +void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex); + +#ifdef __cplusplus +} +#endif + +#endif // !AC_MUSEUM_FISH_PRIV_H diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index 291b99b3..f8d9ebb0 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -1,24 +1,4 @@ -#include "ac_museum_fish.h" -#include "m_msg.h" -#include "m_common_data.h" -#include "sys_matrix.h" -#include "m_player_lib.h" -#include "m_debug_mode.h" -#include "m_rcp.h" -#include "ac_gyoei.h" - -// found useful macros -#define MY_MAX(a, b) (((a) >= (b)) ? (a) : (b)) -#define MY_CLAMP(v, l, h) MIN(MY_MAX((l), (v)), (h)) -#define ARRAY_LEN(a) (sizeof(a) / sizeof(*a)) - -#define CALC_EASE(x) (1.0f - sqrtf(1.0f - (x))) -#define CALC_EASE2(x) CALC_EASE(CALC_EASE(x)) -#define SHORT2DEG_ANGLE2(x) ((x) * (360.0f / 65536.0f)) -#define RANDOMF_RANGE(min, max) ((f32)(min) + (f32)RANDOM_F((f32)(max) - (f32)(min))) -#define RANDOM2F_RANGE(min, max) ((f32)(min) + (f32)RANDOM2_F((f32)(max) - (f32)(min))) -#define RANDOM_RANGE(min, max) ((int)(min) + (int)RANDOM((int)(max) - (int)(min))) -#define RANDOM2_RANGE(min, max) ((int)(min) + (int)RANDOM2((int)(max) - (int)(min))) +#include "ac_museum_fish_priv.h" // extern data // clang-format off @@ -115,7 +95,6 @@ extern cKF_Animation_R_c cKF_ba_r_obj_museum5_kusa3; // data - MUSEUM_FISH_ACTOR* MF_Control_Actor; /* Init stuff */ @@ -494,134 +473,6 @@ PRIV_FISH_DRAW mfish_dw[40] = { /* ARAPAIMA */ mfish_big_fish_dw }; -xyz_t unagi_rail_pos[25] = { - { 228.0f, 57.0f, 192.0f }, - { 231.0f, 57.0f, 203.0f }, - { 237.0f, 57.0f, 215.0f }, - { 245.0f, 58.0f, 225.0f }, - { 252.0f, 59.0f, 233.0f }, - { 254.0f, 60.0f, 245.0f }, - { 248.0f, 60.0f, 255.0f }, - { 238.0f, 60.0f, 256.0f }, - { 231.0f, 60.0f, 247.0f }, - { 222.0f, 60.0f, 240.0f }, - { 212.0f, 60.0f, 243.0f }, - { 203.0f, 60.0f, 249.0f }, - { 196.0f, 60.0f, 248.0f }, - { 191.0f, 60.0f, 241.0f }, - { 191.0f, 60.0f, 234.0f }, - { 187.0f, 60.0f, 223.0f }, - { 183.0f, 60.0f, 212.0f }, - { 181.0f, 60.0f, 203.0f }, - { 182.0f, 57.0f, 191.0f }, - { 187.0f, 56.0f, 183.0f }, - { 193.0f, 56.0f, 176.0f }, - { 201.0f, 56.0f, 172.0f }, - { 209.0f, 56.0f, 173.0f }, - { 216.0f, 56.0f, 176.0f }, - { 221.0f, 56.0f, 182.0f } -}; - -xyz_t unagi_rail_pos2[20] = { - { 228.0f, 57.0f, 192.0f }, - { 236.0f, 57.0f, 201.0f }, - { 244.0f, 57.0f, 204.0f }, - { 250.0f, 58.0f, 213.0f }, - { 254.0f, 59.0f, 225.0f }, - { 250.0f, 60.0f, 238.0f }, - { 243.0f, 60.0f, 242.0f }, - { 235.0f, 60.0f, 238.0f }, - { 226.0f, 60.0f, 233.0f }, - { 215.0f, 60.0f, 229.0f }, - { 205.0f, 60.0f, 228.0f }, - { 198.0f, 60.0f, 229.0f }, - { 191.0f, 60.0f, 227.0f }, - { 186.0f, 60.0f, 222.0f }, - { 181.0f, 60.0f, 216.0f }, - { 181.0f, 60.0f, 207.0f }, - { 184.0f, 60.0f, 196.0f }, - { 191.0f, 60.0f, 186.0f }, - { 201.0f, 57.0f, 177.0f }, - { 213.0f, 56.0f, 178.0f } -}; - -xyz_t unagi_rail_pos3[25] = { - { 228.0f, 57.0f, 192.0f }, - { 231.0f, 57.0f, 203.0f }, - { 229.0f, 57.0f, 213.0f }, - { 222.0f, 58.0f, 225.0f }, - { 212.0f, 59.0f, 226.0f }, - { 204.0f, 60.0f, 227.0f }, - { 197.0f, 60.0f, 230.0f }, - { 193.0f, 60.0f, 236.0f }, - { 195.0f, 60.0f, 246.0f }, - { 201.0f, 60.0f, 253.0f }, - { 212.0f, 60.0f, 256.0f }, - { 222.0f, 60.0f, 255.0f }, - { 237.0f, 60.0f, 254.0f }, - { 243.0f, 60.0f, 246.0f }, - { 240.0f, 60.0f, 232.0f }, - { 232.0f, 60.0f, 227.0f }, - { 223.0f, 60.0f, 225.0f }, - { 209.0f, 60.0f, 225.0f }, - { 198.0f, 60.0f, 220.0f }, - { 190.0f, 60.0f, 209.0f }, - { 187.0f, 60.0f, 196.0f }, - { 191.0f, 60.0f, 184.0f }, - { 197.0f, 60.0f, 178.0f }, - { 207.0f, 59.0f, 173.0f }, - { 221.0f, 57.0f, 180.0f } -}; - -xyz_t unagi_normal_to_reverse_rail_pos[12] = { - { 228.0f, 57.0f, 192.0f }, - { 236.0f, 57.0f, 201.0f }, - { 244.0f, 57.0f, 204.0f }, - { 250.0f, 58.0f, 213.0f }, - { 254.0f, 59.0f, 225.0f }, - { 250.0f, 60.0f, 238.0f }, - { 243.0f, 60.0f, 242.0f }, - { 235.0f, 60.0f, 236.0f }, - { 226.0f, 60.0f, 228.0f }, - { 225.0f, 60.0f, 219.0f }, - { 228.0f, 58.0f, 208.0f }, - { 228.0f, 57.0f, 192.0f } -}; - -xyz_t unagi_reverse_to_normal_rail_pos[19] = { - { 228.0f, 57.0f, 192.0f }, - { 218.0f, 56.0f, 178.0f }, - { 204.0f, 57.0f, 176.0f }, - { 191.0f, 58.0f, 186.0f }, - { 184.0f, 59.0f, 196.0f }, - { 189.0f, 60.0f, 208.0f }, - { 198.0f, 60.0f, 215.0f }, - { 205.0f, 60.0f, 224.0f }, - { 204.0f, 60.0f, 235.0f }, - { 196.0f, 60.0f, 242.0f }, - { 188.0f, 60.0f, 241.0f }, - { 183.0f, 60.0f, 233.0f }, - { 180.0f, 60.0f, 219.0f }, - { 181.0f, 60.0f, 207.0f }, - { 184.0f, 60.0f, 196.0f }, - { 191.0f, 59.0f, 186.0f }, - { 204.0f, 57.0f, 176.0f }, - { 218.0f, 56.0f, 178.0f }, - { 228.0f, 57.0f, 192.0f } -}; - -xyz_t *unagi_rail_tbl[3] = { - unagi_rail_pos, - unagi_rail_pos2, - unagi_rail_pos3 -}; - -int unagi_rail_num_tbl[3] = { - ARRAY_LEN(unagi_rail_pos), - ARRAY_LEN(unagi_rail_pos2), - ARRAY_LEN(unagi_rail_pos3), -}; - #include "../src/actor/ac_museum_fish_base.c_inc" // clang-format on @@ -695,10 +546,6 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) { mfish_point_light_ct(actorx, gamex); for (i = 0; i < 14; i++) { - // 0x0060 : kusa_group_tbl - // 0x1300 : kusa_model - // 0x1338 : kusa_anime - // 0x1370 : kusa_start_frame actor->prvKusa[i]._54C = kusa_model[i]; cKF_SkeletonInfo_R_ct(&actor->prvKusa[i]._00, kusa_model[i], kusa_anime[i], &actor->prvKusa[i]._4F0, &actor->prvKusa[i]._514); @@ -707,7 +554,6 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) { actor->prvKusa[i]._00.frame_control.current_frame = kusa_start_frame[i]; actor->prvKusa[i]._538.x = qrand(); actor->prvKusa[i]._538.z = qrand(); - // actor->_101f0[i * 2 + 2] = qrand(); } if (mMmd_FishInfo(aGYO_TYPE_FROG)) { @@ -886,7 +732,7 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { f32 v; GAME_PLAY* play = (GAME_PLAY*)game; MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; - + MUSEUM_FISH_PRIVATE_DATA* prv2; mfish_point_light_mv(actor, &play->game); old_14db4 = actor->_14db4; mfish_get_player_area(actor, &play->game); @@ -951,14 +797,10 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { } Museum_Fish_Talk_process(actorx, game); - - { - // needs a new variable - MUSEUM_FISH_PRIVATE_DATA* prv = actor->prvFish; - for (i = 0; i < aGYO_TYPE_NUM; i++, prv++) { - if (prv->_62E_flags & 1) { - mfish_mv[i](prv, game); - } + prv2 = actor->prvFish; + for (i = 0; i < aGYO_TYPE_NUM; i++, prv2++) { + if (prv2->_62E_flags & 1) { + mfish_mv[i](prv2, game); } } @@ -1031,17 +873,17 @@ void Museum_Fish_Suisou_draw(ACTOR* actorx, GAME* game, int r5) { } } -BOOL kusa_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** mjoint_m, u8* joint_f, void* arg, - s_xyz* joint1, xyz_t* trans) { +BOOL kusa_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags, + void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { MUSEUM_FISH_KUSA_DATA* actor = (MUSEUM_FISH_KUSA_DATA*)arg; - if (joint_num > 0) { + if (joint_idx > 0) { f32 v = (actor->_54C == &cKF_bs_r_obj_museum5_kusa3) ? 35.0f : 20.f; - joint1->y += (s16)(sin_s(actor->_538.x + (joint_num * DEG2SHORT_ANGLE(90))) * 1274.0f); - joint1->x += (s16)(sin_s(actor->_538.z + (joint_num * DEG2SHORT_ANGLE(90))) * 4369.0f); + joint_rot->y += (s16)(sin_s(actor->_538.x + (joint_idx * DEG2SHORT_ANGLE(90))) * 1274.0f); + joint_rot->x += (s16)(sin_s(actor->_538.z + (joint_idx * DEG2SHORT_ANGLE(90))) * 4369.0f); - trans->y -= actor->_540.x * (v * joint_num); - trans->z += actor->_540.z * (v * joint_num); + joint_pos->y -= actor->_540.x * (v * joint_idx); + joint_pos->z += actor->_540.z * (v * joint_idx); } return TRUE; } diff --git a/src/actor/ac_museum_fish_afish.c_inc b/src/actor/ac_museum_fish_afish.c_inc index 2ed81fb0..e09ed9e1 100644 --- a/src/actor/ac_museum_fish_afish.c_inc +++ b/src/actor/ac_museum_fish_afish.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_onefish_ct(actor, gamex); diff --git a/src/actor/ac_museum_fish_aroana.c_inc b/src/actor/ac_museum_fish_aroana.c_inc index f29391f0..ba181b64 100644 --- a/src/actor/ac_museum_fish_aroana.c_inc +++ b/src/actor/ac_museum_fish_aroana.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_onefish_ct(actor, gamex); @@ -21,8 +22,6 @@ void mfish_aroana_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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; @@ -151,10 +150,8 @@ void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { 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--; @@ -253,18 +250,18 @@ void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* 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) { +BOOL mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; int v; - if (joint_num == 1) { + if (joint_idx == 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)); + } else if (joint_idx == 2) { + v = joint_rot->y - (actor->_618.z << 1); + joint_rot->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)); + v = joint_rot->x - (actor->_618.z >> 2); + joint_rot->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); diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index b94e2791..0ebe63d9 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -1,3 +1,5 @@ +#include "ac_museum_fish_priv.h" + f32 Rnd_EX_f(f32 v) { f32 rand1 = RANDOM2_F(2); f32 rand2 = RANDOM_F(1); @@ -121,7 +123,6 @@ void mfish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* prv) { } void mfish_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.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.0f), @@ -526,10 +527,10 @@ void mfish_onefish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { cKF_SkeletonInfo_R_play(&actor->_38._00); } -int mfish_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) { +int mfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags, + void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; - if (joint_num == 2) { + if (joint_idx == 2) { int v, t; if (actor->group != 4) { @@ -542,10 +543,10 @@ int mfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, v = 3; } - t = joint1->y - (actor->_618.z * v); - joint1->y = MY_CLAMP(t, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); - t = joint1->x - (actor->_618.z >> 1); - joint1->x = MY_CLAMP(t, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25)); + t = joint_rot->y - (actor->_618.z * v); + joint_rot->y = MY_CLAMP(t, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); + t = joint_rot->x - (actor->_618.z >> 1); + joint_rot->x = MY_CLAMP(t, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25)); } return 1; } @@ -643,6 +644,7 @@ void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { #include "../src/actor/ac_museum_fish_zarigani.c_inc" #include "../src/actor/ac_museum_fish_kurage.c_inc" #include "../src/actor/ac_museum_fish_hasu.c_inc" + void Museum_Fish_BigFishObjCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { int i; MUSEUM_FISH_PRIVATE_DATA* fish[2]; @@ -802,7 +804,7 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_62E_flags &= ~0x1e; actor->_62C = 0; Museum_Fish_objchk_pos_set(actor, gamex); - // asm 17C + a = (+00.0f + p.x); b = (+45.0f + p.x); d = (-17.5f + p.z); @@ -816,19 +818,11 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { c -= (actor->position.z + actor->init_data._28 * v2); d -= (actor->position.z - actor->init_data._28 * v2); - /* - f31 = a - f30 = b - f28 = c - f29 = d - */ - actor->_5FC = -a; actor->_600 = b; actor->_604 = -c; actor->_608 = d; - // asm 2E8 f27 -= actor->position.y; f26 -= actor->position.y; if (a > 0.0f) { @@ -878,7 +872,6 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f25 = MIN(MIN(actor->_608 - cos_s(actor->_60C.y), actor->_604 + cos_s(actor->_60C.y)), MIN(actor->_600 - sin_s(actor->_60C.y), actor->_5FC + sin_s(actor->_60C.y))); - // asm 5D8 if (f25 < 5.0f) { f26 -= 0.5f * (5.0f - f25); } @@ -896,7 +889,7 @@ void Museum_Fish_objchk_pos_set(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_5B8.z += (actor->init_data._24 * cos_s(actor->_60C.y)); } -void Museum_Fish_old_chk_pos_set() { +void Museum_Fish_old_chk_pos_set(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { // UNUSED/STRIPPED } @@ -961,7 +954,6 @@ void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_62E_flags |= 0x8; } - // asm 468 Museum_Fish_objchk_pos_set(actor, game); actor->_5FC = actor->_5B8.x - (p.x - f29); actor->_600 = (p.x + f30) - actor->_5B8.x; @@ -1068,9 +1060,7 @@ void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { actor->prvKusa[j]._538.y = DEG2SHORT_ANGLE(3.5f); } } - // asm 3fc-410 } - // asm 414 if (f28 > 0.0f) { f->_62E_flags |= 0x100; f->position.x += (f30 / f28); @@ -1079,15 +1069,14 @@ void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { f28 = 0.0f; f29 = 0.0f; f30 = 0.0f; - // asm 460 } } } void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { int i; - MUSEUM_FISH_PRIVATE_DATA* fj; // r31 - MUSEUM_FISH_PRIVATE_DATA* f; // r29 + MUSEUM_FISH_PRIVATE_DATA* fj; + MUSEUM_FISH_PRIVATE_DATA* f; int j; f32 f31; f32 f30; @@ -1111,15 +1100,14 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { f = actor->prvFish; for (i = 0; i < aGYO_TYPE_NUM; i++, f++) { - // asm b8 if (i != 0x21 && i != 0x20 && i != 0x1a && i != 0x27 && i != 0xa && f->_62E_flags & 1) { for (j = 0; j < aGYO_TYPE_NUM; j++, fj++) { if (f->group == fj->group && i != j && j != 0x21 && j != 0x1a && j != 0x27 && j != 10 && fj->_62E_flags & 1 != 0) { - test.x = f->_5B8.x - fj->_5B8.x; // f31 - test.y = f->_5B8.y - fj->_5B8.y; // f29 - test.z = f->_5B8.z - fj->_5B8.z; // f30 + test.x = f->_5B8.x - fj->_5B8.x; + test.y = f->_5B8.y - fj->_5B8.y; + test.z = f->_5B8.z - fj->_5B8.z; sq_xz = SQ(test.x) + SQ(test.z); sq_xzy = sq_xz + SQ(test.y); if (sqrtf(sq_xzy) < f23) { @@ -1133,7 +1121,7 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { if (sq_xz < SQ(additive)) { f22 = additive - sqrtf(SQ(test.x) + SQ(test.z)); - // bug? + //! BUG: multiplying by zero? if (test.y > atans_table(sqrtf(SQ(test.x) + SQ(test.z)), test.y) * 0.0f) { test.y = -test.y + (f->init_data._04 + fj->init_data._04); } else { @@ -1174,8 +1162,6 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { } } } - - // asm 5ec - 5f8 } if (f25 > 0.0f) { @@ -1208,7 +1194,6 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { if (f->group == 3 && f->_624 != 7) { Museum_Fish_BigFishObjCheck(f, game); } - // asm 728 } } diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc index 706fc44d..e7a6e5dd 100644 --- a/src/actor/ac_museum_fish_bass.c_inc +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_bass_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) { if (r4 == 0) { @@ -53,7 +54,6 @@ void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { } 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)); @@ -62,7 +62,6 @@ void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { - //! NOTE: wrong floats in this file, based on objdiff f32 ra; f32 t; f32 temp; @@ -133,7 +132,6 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { } void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { - //! NOTE: wrong floats in this file, based on objdiff if (((actor->_62E_flags & 0x200) != 0 && actor->_632 > DEG2SHORT_ANGLE(20)) || actor->_640 > 0) { f32 v = (actor->_5AC.y * 0.03f + 0.02f); add_calc2(&actor->_5EC, @@ -283,7 +281,6 @@ void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - //! NOTE: wrong floats in this file, based on objdiff mfish_onefish_mv(actor, gamex); if (actor->_5F8 > actor->init_data._08 * 20.0f) { diff --git a/src/actor/ac_museum_fish_big_fish.c_inc b/src/actor/ac_museum_fish_big_fish.c_inc index 6fe49ea9..087e7307 100644 --- a/src/actor/ac_museum_fish_big_fish.c_inc +++ b/src/actor/ac_museum_fish_big_fish.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { qrand(); @@ -35,7 +36,6 @@ void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } 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); @@ -146,12 +146,11 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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 +BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; - if (joint_num == 1) { + if (joint_idx == 1) { f32 v; int i; if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) { @@ -159,13 +158,13 @@ BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi } 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)); + i = joint_rot->x + (actor->_618.z >> 1); + joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); + i = joint_rot->y + (int)(actor->_644 * (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * sin_s(actor->_646)); + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + joint_pos->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) { + } else if (joint_idx == 2) { f32 v; int i; if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) { @@ -173,19 +172,19 @@ BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi } else { v = 0.035f; } - i = joint1->y - (actor->_618.z * 2) + + i = joint_rot->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)); + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40)); + i = joint_rot->x - (actor->_618.z >> 1); + joint_rot->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 + + } else if (joint_idx == 3 && actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) { + int i = joint_rot->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)); + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); } return TRUE; diff --git a/src/actor/ac_museum_fish_dojou.c_inc b/src/actor/ac_museum_fish_dojou.c_inc index 271307dc..1b24db38 100644 --- a/src/actor/ac_museum_fish_dojou.c_inc +++ b/src/actor/ac_museum_fish_dojou.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 s = qrand(); @@ -165,24 +166,24 @@ void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { +BOOL mfish_dojou_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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); + if (joint_idx == 1) { + int i = joint_rot->x + actor->_618.z; + joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-45), DEG2SHORT_ANGLE(40)); + i = joint_rot->y + actor->_618.z; + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40)); + } else if (joint_idx == 2) { + int i = (s16)(joint_rot->z - actor->_618.x); f32 z; f32 t; - joint1->z = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40)); + joint_rot->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); + t = joint_rot->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)); + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80)); } return TRUE; } diff --git a/src/actor/ac_museum_fish_donko.c_inc b/src/actor/ac_museum_fish_donko.c_inc index 86cedac4..488fe0ec 100644 --- a/src/actor/ac_museum_fish_donko.c_inc +++ b/src/actor/ac_museum_fish_donko.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { //! BUG: ? @@ -94,17 +95,17 @@ void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { +BOOL mfish_donko_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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)); + if (joint_idx == 1) { + int i = joint_rot->x + (actor->_618.z >> 1); + joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); + } else if (joint_idx == 2) { + int i = joint_rot->y - (actor->_618.z << 1); + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); + i = joint_rot->x - (actor->_618.z >> 1); + joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); } return TRUE; diff --git a/src/actor/ac_museum_fish_gupi.c_inc b/src/actor/ac_museum_fish_gupi.c_inc index 5924cb5e..742704e8 100644 --- a/src/actor/ac_museum_fish_gupi.c_inc +++ b/src/actor/ac_museum_fish_gupi.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 s = qrand(); @@ -167,24 +168,24 @@ void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { +BOOL mfish_gupi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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) { + if (joint_idx == 1) { + int s = joint_rot->x + actor->_618.z; + joint_rot->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); + s = joint_rot->y + actor->_618.z; + joint_rot->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); + } else if (joint_idx == 2) { int s; if (actor->_5F0 - 0.001f > actor->_5E8) { - joint1->y += (int)(2.0f * (actor->_5F0 - actor->_5E8) * joint1->y); + joint_rot->y += (int)(joint_rot->y * (2.0f * (actor->_5F0 - actor->_5E8))); } - 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)); + s = joint_rot->y - actor->_618.z * 3; + joint_rot->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(60), DEG2SHORT_ANGLE(60)); + s = joint_rot->x - (actor->_618.z >> 1); + joint_rot->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); + joint_rot->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); } diff --git a/src/actor/ac_museum_fish_hasu.c_inc b/src/actor/ac_museum_fish_hasu.c_inc index 65a9a8de..e76be43a 100644 --- a/src/actor/ac_museum_fish_hasu.c_inc +++ b/src/actor/ac_museum_fish_hasu.c_inc @@ -1,4 +1,4 @@ -// Pretty sure all the floats in this file are correct +#include "ac_museum_fish_priv.h" extern cKF_Skeleton_R_c cKF_bs_r_obj_museum5_hasu; extern cKF_Animation_R_c cKF_ba_r_obj_museum5_hasu; @@ -159,25 +159,25 @@ 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_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags, + void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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); + if (joint_idx == 7) { + joint_pos->z += v2->_55C * sin_s(v2->_568); + } else if (joint_idx == 4) { + joint_pos->z += v2->_560 * sin_s(v2->_56A); + } else if (joint_idx == 9) { + joint_pos->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) { +BOOL hasu_after_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags, + void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; YET_SKELETON_2* skele = actor->_590; - if (joint_num == 9) { + if (joint_idx == 9) { Matrix_Position_Zero(&actor->position); actor->position.y = skele->_564 * actor->init_data.renderScale * sin_s(skele->_56C) + 116.0f; } diff --git a/src/actor/ac_museum_fish_ito.c_inc b/src/actor/ac_museum_fish_ito.c_inc index 93deec89..05f94f15 100644 --- a/src/actor/ac_museum_fish_ito.c_inc +++ b/src/actor/ac_museum_fish_ito.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { //! BUG: unused @@ -81,26 +82,26 @@ void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { +BOOL mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; - if (joint_num == 1) { + if (joint_idx == 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)); + int i = joint_rot->x + (actor->_618.z >> 1); + joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); + i = joint_rot->y + (int)(actor->_644 * (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * sin_s(actor->_646)); + joint_rot->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; + joint_pos->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) { + } else if (joint_idx == 2) { int i; - i = joint1->y - 2 * actor->_618.z + + i = joint_rot->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)); + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40)); + i = joint_rot->x - (actor->_618.z >> 1); + joint_rot->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); } diff --git a/src/actor/ac_museum_fish_kaseki.c_inc b/src/actor/ac_museum_fish_kaseki.c_inc index 410d1dc3..522025de 100644 --- a/src/actor/ac_museum_fish_kaseki.c_inc +++ b/src/actor/ac_museum_fish_kaseki.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_onefish_ct(actor, gamex); @@ -147,27 +148,27 @@ void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { 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) { +BOOL mfish_kaseki_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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)); + if (joint_idx == 1) { + i = joint_rot->x + (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.01f + 0.5f)); + joint_rot->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)); + } else if (joint_idx == 2) { + i = joint_rot->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x46) * 0.01f + 1.25f)); + joint_rot->y = MIN(MAX(i, DEG2SHORT_ANGLE(-50)), DEG2SHORT_ANGLE(50)); + i = joint_rot->x - (int)(actor->_618.z * (GETREG(TAKREG, 0x48) * 0.01f + 0.25f)); + joint_rot->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)); + } else if (joint_idx == 3) { + i = joint_rot->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.01f + 1.25f)); + joint_rot->y = MIN(MAX(i, DEG2SHORT_ANGLE(-50)), DEG2SHORT_ANGLE(50)); + i = joint_rot->x + DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x2d) * sin_s(actor->_63A)); + joint_rot->x = MIN(MAX(i, DEG2SHORT_ANGLE(-40)), DEG2SHORT_ANGLE(40)); } return TRUE; } diff --git a/src/actor/ac_museum_fish_kingyo.c_inc b/src/actor/ac_museum_fish_kingyo.c_inc index 96143ebd..557a8724 100644 --- a/src/actor/ac_museum_fish_kingyo.c_inc +++ b/src/actor/ac_museum_fish_kingyo.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 s = qrand(); @@ -215,24 +216,24 @@ void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { +BOOL mfish_kingyo_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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) { + if (joint_idx == 1) { + int i = joint_rot->x + actor->_618.z; + joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + i = joint_rot->y + actor->_618.z; + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + } else if (joint_idx == 2) { int i; if (actor->_5F0 - 0.001f > actor->_5E8) { - joint1->y += (int)((actor->_5F0 - actor->_5E8) * 2.0f * joint1->y); + joint_rot->y += (int)((actor->_5F0 - actor->_5E8) * 2.0f * joint_rot->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))); + i = joint_rot->y - actor->_618.z * 3; + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80)); + i = joint_rot->x - (actor->_618.z >> 1); + joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + joint_rot->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); diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index 09b68c13..21cf9af8 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -1,3 +1,5 @@ +#include "ac_museum_fish_priv.h" + void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) { f32 temp; f32 temp2; @@ -162,7 +164,6 @@ void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { 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); @@ -319,8 +320,6 @@ void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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); @@ -343,10 +342,8 @@ void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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; } } @@ -389,7 +386,6 @@ void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - //! NOTE: wrong floats in this file, based on objdiff if (actor->_5F8 > actor->init_data._08 * 20.f) { actor->_5F8 = 0.0f; actor->activityFrameCount = 0; @@ -423,7 +419,6 @@ void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } } - // 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)) { @@ -472,23 +467,23 @@ 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) { +BOOL mfish_koi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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) { + if (joint_idx == 0) { + joint_pos->x *= actor->_5AC.z; + joint_pos->y *= actor->_5AC.z; + joint_pos->z = (joint_pos->z - 1400.0f) * actor->_5AC.z + 1400.0f; + } else if (joint_idx == 1) { + joint_rot->y *= actor->_5AC.z; + } else if (joint_idx == 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 = joint_rot->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.1f + 2.0f)); + joint_rot->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)); + i = joint_rot->x - (actor->_618.z >> 3); + joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25)); } return TRUE; diff --git a/src/actor/ac_museum_fish_kurage.c_inc b/src/actor/ac_museum_fish_kurage.c_inc index eec6471d..7852a592 100644 --- a/src/actor/ac_museum_fish_kurage.c_inc +++ b/src/actor/ac_museum_fish_kurage.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 s = qrand(); @@ -102,7 +103,6 @@ void mfish_kurage_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } 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; diff --git a/src/actor/ac_museum_fish_medaka.c_inc b/src/actor/ac_museum_fish_medaka.c_inc index 3789e73c..600357a8 100644 --- a/src/actor/ac_museum_fish_medaka.c_inc +++ b/src/actor/ac_museum_fish_medaka.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 s = qrand(); @@ -137,19 +138,19 @@ void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { +BOOL mfish_medaka_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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)); + if (joint_idx == 1) { + int i = joint_rot->x + actor->_618.z; + joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + i = joint_rot->y + actor->_618.z; + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + } else if (joint_idx == 2) { + int i = joint_rot->y - (actor->_618.z * 3); + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); + i = joint_rot->x - (actor->_618.z >> 1); + joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); } return TRUE; } diff --git a/src/actor/ac_museum_fish_namazu.c_inc b/src/actor/ac_museum_fish_namazu.c_inc index e9728e0d..089698af 100644 --- a/src/actor/ac_museum_fish_namazu.c_inc +++ b/src/actor/ac_museum_fish_namazu.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_onefish_ct(actor, gamex); @@ -16,7 +17,6 @@ void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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; @@ -101,7 +101,7 @@ void mfish_namazu_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->currentProcess = mfish_namazu_dummy_process; } -void mfish_namazu_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) { +void mfish_namazu_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { 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)); @@ -143,7 +143,7 @@ void mfish_namazu_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->currentProcess = mfish_namazu_turn_process; } -void mfish_namazu_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor) { +void mfish_namazu_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { 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)); @@ -184,7 +184,7 @@ void mfish_namazu_ground_sweep_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->currentProcess = mfish_namazu_ground_sweep_process; } -void mfish_namazu_ground_sweep_process(MUSEUM_FISH_PRIVATE_DATA* actor) { +void mfish_namazu_ground_sweep_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { 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); @@ -282,25 +282,25 @@ void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { +BOOL mfish_namazu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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)); + if (joint_idx == 0) { + joint_pos->y = -(actor->_5AC.y * MIN(sin_s(actor->_640), 0.5f)); + } else if (joint_idx == 1) { + s = joint_rot->z + actor->_640; + joint_rot->z = MY_CLAMP(s, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + s = joint_rot->x + (actor->_618.z >> 2); + joint_rot->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)); + } else if (joint_idx == 2) { + s = joint_rot->y - (actor->_618.z << 1); + joint_rot->y = MY_CLAMP(s, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); + s = joint_rot->x - (actor->_618.z >> 2); + joint_rot->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); + s = joint_rot->z - (s16)(actor->_640 * (0.6f + GETREG(TAKREG, 0x4E) * 0.01f)); + joint_rot->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); } diff --git a/src/actor/ac_museum_fish_seafish.c_inc b/src/actor/ac_museum_fish_seafish.c_inc index 2ac49a41..d3f1a763 100644 --- a/src/actor/ac_museum_fish_seafish.c_inc +++ b/src/actor/ac_museum_fish_seafish.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { s16 s = qrand(); @@ -67,11 +68,9 @@ void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } 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); } @@ -123,7 +122,6 @@ void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { @@ -179,7 +177,6 @@ void mfish_seafish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - //! NOTE: wrong floats in this file, based on objdiff xyz_t p; actor->currentProcess(actor, gamex); actor->_618.x += DEG2SHORT_ANGLE(actor->_5E8 * RANDOM_F(3.0f)); @@ -216,17 +213,17 @@ void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { +BOOL mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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)); + if (joint_idx == 1) { + int s = joint_rot->x + (int)(actor->_618.z * (GETREG(TAKREG, 0x37) * 0.01f + 0.5f)); + joint_rot->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)); + } else if (joint_idx == 2) { + int v = joint_rot->y - (actor->_618.z << 1); + joint_rot->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); } diff --git a/src/actor/ac_museum_fish_small_fish.c_inc b/src/actor/ac_museum_fish_small_fish.c_inc index 9c9b77eb..f8686e15 100644 --- a/src/actor/ac_museum_fish_small_fish.c_inc +++ b/src/actor/ac_museum_fish_small_fish.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 s = qrand(); @@ -162,19 +163,19 @@ void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { +BOOL mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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)); + if (joint_idx == 1) { + int s = joint_rot->x + actor->_618.z; + joint_rot->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); + s = joint_rot->y + actor->_618.z; + joint_rot->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); + } else if (joint_idx == 2) { + int s = joint_rot->y - actor->_618.z * 3; + joint_rot->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(60), DEG2SHORT_ANGLE(60)); + s = joint_rot->x - (actor->_618.z >> 1); + joint_rot->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); } return TRUE; } diff --git a/src/actor/ac_museum_fish_tai.c_inc b/src/actor/ac_museum_fish_tai.c_inc index 40573d63..353b1b5a 100644 --- a/src/actor/ac_museum_fish_tai.c_inc +++ b/src/actor/ac_museum_fish_tai.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 s = qrand(); @@ -245,15 +246,15 @@ void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { +BOOL mfish_tai_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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)); + if (joint_idx == 1) { + int s = (joint_rot->x + actor->_618.z) >> 3; + joint_rot->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-15), DEG2SHORT_ANGLE(15)); + } else if (joint_idx == 2) { + int s = joint_rot->y - (int)(actor->_618.z * (0.01f * GETREG(TAKREG, 0x4b) + 1.5f)); + joint_rot->y = MY_CLAMP(s, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); } return TRUE; } diff --git a/src/actor/ac_museum_fish_unagi.c_inc b/src/actor/ac_museum_fish_unagi.c_inc index e0847f91..b92d74ea 100644 --- a/src/actor/ac_museum_fish_unagi.c_inc +++ b/src/actor/ac_museum_fish_unagi.c_inc @@ -1,3 +1,54 @@ +#include "ac_museum_fish_priv.h" + +xyz_t unagi_rail_pos[25] = { { 228.0f, 57.0f, 192.0f }, { 231.0f, 57.0f, 203.0f }, { 237.0f, 57.0f, 215.0f }, + { 245.0f, 58.0f, 225.0f }, { 252.0f, 59.0f, 233.0f }, { 254.0f, 60.0f, 245.0f }, + { 248.0f, 60.0f, 255.0f }, { 238.0f, 60.0f, 256.0f }, { 231.0f, 60.0f, 247.0f }, + { 222.0f, 60.0f, 240.0f }, { 212.0f, 60.0f, 243.0f }, { 203.0f, 60.0f, 249.0f }, + { 196.0f, 60.0f, 248.0f }, { 191.0f, 60.0f, 241.0f }, { 191.0f, 60.0f, 234.0f }, + { 187.0f, 60.0f, 223.0f }, { 183.0f, 60.0f, 212.0f }, { 181.0f, 60.0f, 203.0f }, + { 182.0f, 57.0f, 191.0f }, { 187.0f, 56.0f, 183.0f }, { 193.0f, 56.0f, 176.0f }, + { 201.0f, 56.0f, 172.0f }, { 209.0f, 56.0f, 173.0f }, { 216.0f, 56.0f, 176.0f }, + { 221.0f, 56.0f, 182.0f } }; + +xyz_t unagi_rail_pos2[20] = { { 228.0f, 57.0f, 192.0f }, { 236.0f, 57.0f, 201.0f }, { 244.0f, 57.0f, 204.0f }, + { 250.0f, 58.0f, 213.0f }, { 254.0f, 59.0f, 225.0f }, { 250.0f, 60.0f, 238.0f }, + { 243.0f, 60.0f, 242.0f }, { 235.0f, 60.0f, 238.0f }, { 226.0f, 60.0f, 233.0f }, + { 215.0f, 60.0f, 229.0f }, { 205.0f, 60.0f, 228.0f }, { 198.0f, 60.0f, 229.0f }, + { 191.0f, 60.0f, 227.0f }, { 186.0f, 60.0f, 222.0f }, { 181.0f, 60.0f, 216.0f }, + { 181.0f, 60.0f, 207.0f }, { 184.0f, 60.0f, 196.0f }, { 191.0f, 60.0f, 186.0f }, + { 201.0f, 57.0f, 177.0f }, { 213.0f, 56.0f, 178.0f } }; + +xyz_t unagi_rail_pos3[25] = { { 228.0f, 57.0f, 192.0f }, { 231.0f, 57.0f, 203.0f }, { 229.0f, 57.0f, 213.0f }, + { 222.0f, 58.0f, 225.0f }, { 212.0f, 59.0f, 226.0f }, { 204.0f, 60.0f, 227.0f }, + { 197.0f, 60.0f, 230.0f }, { 193.0f, 60.0f, 236.0f }, { 195.0f, 60.0f, 246.0f }, + { 201.0f, 60.0f, 253.0f }, { 212.0f, 60.0f, 256.0f }, { 222.0f, 60.0f, 255.0f }, + { 237.0f, 60.0f, 254.0f }, { 243.0f, 60.0f, 246.0f }, { 240.0f, 60.0f, 232.0f }, + { 232.0f, 60.0f, 227.0f }, { 223.0f, 60.0f, 225.0f }, { 209.0f, 60.0f, 225.0f }, + { 198.0f, 60.0f, 220.0f }, { 190.0f, 60.0f, 209.0f }, { 187.0f, 60.0f, 196.0f }, + { 191.0f, 60.0f, 184.0f }, { 197.0f, 60.0f, 178.0f }, { 207.0f, 59.0f, 173.0f }, + { 221.0f, 57.0f, 180.0f } }; + +xyz_t unagi_normal_to_reverse_rail_pos[12] = { + { 228.0f, 57.0f, 192.0f }, { 236.0f, 57.0f, 201.0f }, { 244.0f, 57.0f, 204.0f }, { 250.0f, 58.0f, 213.0f }, + { 254.0f, 59.0f, 225.0f }, { 250.0f, 60.0f, 238.0f }, { 243.0f, 60.0f, 242.0f }, { 235.0f, 60.0f, 236.0f }, + { 226.0f, 60.0f, 228.0f }, { 225.0f, 60.0f, 219.0f }, { 228.0f, 58.0f, 208.0f }, { 228.0f, 57.0f, 192.0f } +}; + +xyz_t unagi_reverse_to_normal_rail_pos[19] = { + { 228.0f, 57.0f, 192.0f }, { 218.0f, 56.0f, 178.0f }, { 204.0f, 57.0f, 176.0f }, { 191.0f, 58.0f, 186.0f }, + { 184.0f, 59.0f, 196.0f }, { 189.0f, 60.0f, 208.0f }, { 198.0f, 60.0f, 215.0f }, { 205.0f, 60.0f, 224.0f }, + { 204.0f, 60.0f, 235.0f }, { 196.0f, 60.0f, 242.0f }, { 188.0f, 60.0f, 241.0f }, { 183.0f, 60.0f, 233.0f }, + { 180.0f, 60.0f, 219.0f }, { 181.0f, 60.0f, 207.0f }, { 184.0f, 60.0f, 196.0f }, { 191.0f, 59.0f, 186.0f }, + { 204.0f, 57.0f, 176.0f }, { 218.0f, 56.0f, 178.0f }, { 228.0f, 57.0f, 192.0f } +}; + +xyz_t* unagi_rail_tbl[3] = { unagi_rail_pos, unagi_rail_pos2, unagi_rail_pos3 }; + +int unagi_rail_num_tbl[3] = { + ARRAY_LEN(unagi_rail_pos), + ARRAY_LEN(unagi_rail_pos2), + ARRAY_LEN(unagi_rail_pos3), +}; void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_onefish_ct(actor, gamex); @@ -247,7 +298,6 @@ void mfish_unagi_reverse_to_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) } 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; @@ -303,35 +353,35 @@ void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { +BOOL mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; - if (joint_num == 1) { + if (joint_idx == 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) { + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); + joint_pos->z += actor->_5F4 * sin_s(actor->_636 + DEG2SHORT_ANGLE(90)); + } else if (joint_idx == 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) { + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE2(-90), DEG2SHORT_ANGLE2(90)); + } else if (joint_idx == 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) { + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); + } else if (joint_idx == 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) { + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); + } else if (joint_idx == 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)); + joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); } return TRUE; } diff --git a/src/actor/ac_museum_fish_zarigani.c_inc b/src/actor/ac_museum_fish_zarigani.c_inc index 74f03a37..f0ea7d6e 100644 --- a/src/actor/ac_museum_fish_zarigani.c_inc +++ b/src/actor/ac_museum_fish_zarigani.c_inc @@ -1,3 +1,4 @@ +#include "ac_museum_fish_priv.h" void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { YET_SKELETON* skele = &actor->_38; @@ -181,28 +182,28 @@ void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } } -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) { +BOOL mfish_zarigani_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, + u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { 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 (joint_idx == 2) { + joint_rot->x += (s16)(actor->_60C.x >> 3); + } else if (joint_idx == 3) { + joint_rot->z += (s16)((joint_rot->z + DEG2SHORT_ANGLE2(-90.65f) + GETREG(TAKREG, 0x2a)) * + (1.5f + GETREG(TAKREG, 0x29) * 0.1f)); + } else if (joint_idx == 5) { + joint_rot->x += (s16)DEG2SHORT_ANGLE2(3.0f * sin_s(actor->_638)); + joint_rot->z -= (s16)DEG2SHORT_ANGLE2(5.0f * cos_s(actor->_638)); + joint_rot->z += (s16)(actor->_618.z * (0.4f + cos_s(actor->_638) * 0.4f)); + } else if (joint_idx == 7) { + joint_rot->x += (s16)DEG2SHORT_ANGLE2(3.0f * sin_s(actor->_638)); + joint_rot->z -= (s16)DEG2SHORT_ANGLE2(5.0f * cos_s(actor->_638)); + joint_rot->z += (s16)(actor->_618.z * (0.4f + cos_s(actor->_638) * 0.4f)); + } else if (joint_idx == 8) { + joint_rot->z >>= 2; if (actor->_60C.x < 0) { - joint1->z += actor->_60C.x; + joint_rot->z += actor->_60C.x; } else { - joint1->z += (s16)(actor->_60C.x * (GETREG(TAKREG, 0x20) * 0.1f + 3.0f)); + joint_rot->z += (s16)(actor->_60C.x * (GETREG(TAKREG, 0x20) * 0.1f + 3.0f)); } } return TRUE; From 87d2a22822fee2e527df88368019101c3593d812 Mon Sep 17 00:00:00 2001 From: roeming Date: Fri, 7 Feb 2025 16:13:56 -0500 Subject: [PATCH 02/26] inital museum insect progress, match ac_museum_insect.c --- configure.py | 9 +- include/ac_museum_insect.h | 2 - include/ac_museum_insect_priv.h | 297 ++++++++++++++++++++++ src/actor/ac_museum_insect.c | 203 +++++++++++++++ src/actor/ac_museum_insect_base.c_inc | 17 ++ src/actor/ac_museum_insect_batta.c_inc | 1 + src/actor/ac_museum_insect_chou.c_inc | 1 + src/actor/ac_museum_insect_dango.c_inc | 1 + src/actor/ac_museum_insect_genji.c_inc | 1 + src/actor/ac_museum_insect_goki.c_inc | 1 + src/actor/ac_museum_insect_hachi.c_inc | 1 + src/actor/ac_museum_insect_ka.c_inc | 1 + src/actor/ac_museum_insect_kabuto.c_inc | 1 + src/actor/ac_museum_insect_kumo.c_inc | 1 + src/actor/ac_museum_insect_kuwagata.c_inc | 1 + src/actor/ac_museum_insect_mino.c_inc | 1 + src/actor/ac_museum_insect_okera.c_inc | 1 + src/actor/ac_museum_insect_semi.c_inc | 1 + src/actor/ac_museum_insect_tentou.c_inc | 1 + src/actor/ac_museum_insect_tonbo.c_inc | 1 + 20 files changed, 538 insertions(+), 5 deletions(-) create mode 100644 include/ac_museum_insect_priv.h create mode 100644 src/actor/ac_museum_insect.c create mode 100644 src/actor/ac_museum_insect_base.c_inc create mode 100644 src/actor/ac_museum_insect_batta.c_inc create mode 100644 src/actor/ac_museum_insect_chou.c_inc create mode 100644 src/actor/ac_museum_insect_dango.c_inc create mode 100644 src/actor/ac_museum_insect_genji.c_inc create mode 100644 src/actor/ac_museum_insect_goki.c_inc create mode 100644 src/actor/ac_museum_insect_hachi.c_inc create mode 100644 src/actor/ac_museum_insect_ka.c_inc create mode 100644 src/actor/ac_museum_insect_kabuto.c_inc create mode 100644 src/actor/ac_museum_insect_kumo.c_inc create mode 100644 src/actor/ac_museum_insect_kuwagata.c_inc create mode 100644 src/actor/ac_museum_insect_mino.c_inc create mode 100644 src/actor/ac_museum_insect_okera.c_inc create mode 100644 src/actor/ac_museum_insect_semi.c_inc create mode 100644 src/actor/ac_museum_insect_tentou.c_inc create mode 100644 src/actor/ac_museum_insect_tonbo.c_inc diff --git a/configure.py b/configure.py index 0a856f0d..e5541cfc 100644 --- a/configure.py +++ b/configure.py @@ -172,7 +172,8 @@ config.asflags = [ "-I include/libc", "-I src/static/dolphin", f"-I build/{config.version}/include", - f"-I build/{config.version}/bin/assets", # needed for JUTResFONT_Ascfont_fix12 + # needed for JUTResFONT_Ascfont_fix12 + f"-I build/{config.version}/bin/assets", f"--defsym version={version_num}", ] config.ldflags = [ @@ -2720,7 +2721,8 @@ for url in N64_SDK_urls: os.makedirs(os.path.dirname(file_path), exist_ok=True) print(f"Fetching {file_path} from {url}") - req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) + req = urllib.request.Request( + url, headers={"User-Agent": "Mozilla/5.0"}) with urllib.request.urlopen(req) as response: if response.getcode() == 200: content = response.read() @@ -2744,7 +2746,8 @@ config.progress_categories = [ ProgressCategory("game", "Game Code"), ProgressCategory("sdk", "SDK Code"), ProgressCategory("jsystem", "JSystem Code"), - ProgressCategory("library", "Library Code"), # catch-all for the rest of static + # catch-all for the rest of static + ProgressCategory("library", "Library Code"), ] config.progress_each_module = args.verbose diff --git a/include/ac_museum_insect.h b/include/ac_museum_insect.h index fdb9dcdd..1915bcce 100644 --- a/include/ac_museum_insect.h +++ b/include/ac_museum_insect.h @@ -1,7 +1,6 @@ #ifndef AC_MUSEUM_INSECT_H #define AC_MUSEUM_INSECT_H -#include "types.h" #include "m_actor.h" #ifdef __cplusplus @@ -15,4 +14,3 @@ extern ACTOR_PROFILE Museum_Insect_Profile; #endif #endif - diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h new file mode 100644 index 00000000..cf41c420 --- /dev/null +++ b/include/ac_museum_insect_priv.h @@ -0,0 +1,297 @@ +#ifndef AC_MUSEUM_INSECT_PRIV_H +#define AC_MUSEUM_INSECT_PRIV_H + +#include "ac_museum_insect.h" +#include "m_msg.h" +#include "m_common_data.h" +#include "sys_matrix.h" +#include "m_player_lib.h" +#include "m_debug_mode.h" +#include "m_rcp.h" +#include "ac_insect_h.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define artificial_padding(lastOffset, currentOffset, typeOfLastMember) \ + u8 __##currentOffset##padding[currentOffset - lastOffset - sizeof(typeOfLastMember)] + +struct _MUSEUM_INSECT_PRIVATE_DATA; + +typedef void (*PRIV_INSECT_PROCESS)(struct _MUSEUM_INSECT_PRIVATE_DATA*, GAME*); + +typedef struct _MUSEUM_INSECT_PRIVATE_DATA { + int _00; + artificial_padding(0, 0x14, int); + f32 _14; // scale + artificial_padding(0x14, 0x8c, f32); + s16 _8C; + s16 _8E; + s16 _90; + s16 _92; +} MUSEUM_INSECT_PRIVATE_DATA; + +typedef struct _INSECT_DISPLAY_MSG_INFO { + s16 insectName; + s16 insectInfo; +} INSECT_DISPLAY_MSG_INFO; + +typedef struct _MUSEUM_INSECT_ACTOR { + ACTOR actor; // offset: 0x0 + MUSEUM_INSECT_PRIVATE_DATA privInsects[aINS_INSECT_TYPE_NUM]; + artificial_padding(0x174, 0x2F78, MUSEUM_INSECT_PRIVATE_DATA[aINS_INSECT_TYPE_NUM]); + int _2F78; // offset: 0x2F78 + int _2F7C; // offset: 0x2F7C + INSECT_DISPLAY_MSG_INFO _2F80[7]; // offset: 0x2F82 + s16 _2F9C[5]; // offset: 0x2F9C +} MUSEUM_INSECT_ACTOR; + +extern PRIV_INSECT_PROCESS minsect_ct[aINS_INSECT_TYPE_NUM]; +extern PRIV_INSECT_PROCESS minsect_mv[aINS_INSECT_TYPE_NUM]; +extern PRIV_INSECT_PROCESS minsect_dw[aINS_INSECT_TYPE_NUM]; +extern f32 minsect_scale_tbl[aINS_INSECT_TYPE_NUM]; +extern f32 minsect_scale_tbl[aINS_INSECT_TYPE_NUM]; +extern rgba_t window_color; + +// ac_museum_insect.c +int Museum_Insect_GetMsgNo(ACTOR* actorx); +int Museum_Insect_Check_Talk_Distance(GAME* game, int i); +void Museum_Insect_Set_MsgInsectInfo(ACTOR* actor, int i); +void Museum_Insect_set_talk_info(ACTOR* actor); +void Museum_Insect_Talk_process(ACTOR* actor, GAME* game); +void Museum_Insect_Actor_ct(ACTOR* actor, GAME* game); +void Museum_Insect_Actor_dt(ACTOR* actor, GAME* game); +void Museum_Insect_Actor_move(ACTOR* actor, GAME* game); +void Museum_Insect_Actor_draw(ACTOR* actor, GAME* game); + +// ac_museum_insect_base.c_inc +void mID_insect_moveF(void); +void minsect_amenbo_ct(void); +void minsect_amenbo_mv(void); +void minsect_amenbo_dw(void); +void ari_alone_ct(void); +void ari_alone_make(void); +void ari_alone_dt(void); +void ari_alone_move(void); +void ari_alone_draw(void); +void minsect_ari_ct(void); +void minsect_ari_mv(void); +void minsect_ari_dw(void); +void minsect_draw_shadow(void); +void minsect_fly_BGCheck(void); +void minsect_garden_BGCheck(void); +void minsect_flower_BGCheck(void); +void minsect_goki_BGCheck(void); +void minsect_kanban_BGCheck(void); +void minsect_tree_ObjCheck(void); +void minsect_rock_ObjCheck(void); +void minsect_batta_ObjCheck(void); +void get_now_mind_flag(void); +void set_relax_active_time(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); + +// ac_museum_insect_chou.c_inc +void minsect_chou_ct(void); +void minsect_chou_normal_process_init(void); +void minsect_chou_normal_process(void); +void minsect_chou_aim_flower_process_init(void); +void minsect_chou_aim_flower_process(void); +void minsect_chou_flower_process_init(void); +void minsect_chou_flower_process(void); +void minsect_chou_fly_process_init(void); +void minsect_chou_fly_process(void); +void minsect_chou_mv(void); +void minsect_chou_dw(void); + +// ac_museum_insect_semi.c_inc +void minsect_semi_ct(void); +void mi_semi_hane_anime(void); +void mi_semi_check_player(void); +void minsect_semi_mv(void); +void minsect_semi_dw(void); + +// ac_museum_insect_tonbo.c_inc +void minsect_tonbo_ct(void); +void mi_tonbo_check_player(void); +void minsect_tonbo_bg_check(void); +void minsect_tonbo_near_target_set(void); +void minsect_tonbo_rock_target_set(void); +void minsect_tonbo_suprised_rest_player(void); +void minsect_tonbo_acc_change(void); +void minsect_tonbo_max_speed_set(void); +void minsect_tonbo_aim_distance_set(void); +void minsect_tonbo_aim_angle_check(void); +void minsect_tonbo_normal_process_init(void); +void minsect_tonbo_normal_process(void); +void minsect_tonbo_aim_rock_process_init(void); +void minsect_tonbo_aim_rock_process(void); +void minsect_tonbo_rock_process_init(void); +void minsect_tonbo_rock_process(void); +void minsect_tonbo_rock_wait_process_init(void); +void minsect_tonbo_rock_wait_process(void); +void minsect_tonbo_fly_process_init(void); +void minsect_tonbo_fly_process(void); +void minsect_tonbo_mv(void); +void minsect_tonbo_dw(void); +void minsect_tonbo_MoveF(void); + +// ac_museum_insect_batta.c_inc +void mi_batta_check_player(void); +void mi_batta_suzumushi_hane_anime(void); +void mi_batta_hane_anime(void); +void minsect_batta_ct(void); +void minsect_batta_normal_process_init(void); +void minsect_batta_normal_process(void); +void minsect_batta_silent_process_init(void); +void minsect_batta_silent_process(void); +void minsect_batta_jump_wait_process_init(void); +void minsect_batta_jump_wait_process(void); +void minsect_batta_jump_process_init(void); +void minsect_batta_jump_process(void); +void minsect_batta_mv(void); +void minsect_batta_dw(void); + +// ac_museum_insect_tentou.c_inc +void mi_tentou_check_player(void); +void mi_tentou_kama_anime(void); +void mi_tentou_wait_init(void); +void mi_tentou_wait(void); +void mi_tentou_move_init(void); +void mi_tentou_move(void); +void mi_tentou_menace_init(void); +void mi_tentou_menace(void); +void mi_tentou_setupAction(void); +void minsect_tentou_ct(void); +void minsect_tentou_mv(void); +void minsect_tentou_dw(void); + +// ac_museum_insect_hachi.c_inc +void mi_hachi_hane_anime(void); +void mi_hachi_mitu_init(void); +void mi_hachi_mitu(void); +void mi_hachi_wait_init(void); +void mi_hachi_wait(void); +void mi_hachi_move_init(void); +void mi_hachi_move(void); +void mi_hachi_setupAction(void); +void minsect_hachi_ct(void); +void minsect_hachi_mv(void); +void minsect_hachi_dw(void); + +// ac_museum_insect_kabuto.c_inc +void minsect_kabuto_ct(void); +void minsect_kabuto_mv(void); +void minsect_kabuto_dw(void); + +// ac_museum_insect_kuwagata.c_inc +void mi_kuwagata_rensa_init(void); +void mi_kuwagata_rensa(void); +void mi_kuwagata_wait_init(void); +void mi_kuwagata_wait(void); +void mi_kuwagata_move_init(void); +void mi_kuwagata_move(void); +void mi_kuwagata_battle_init(void); +void mi_kuwagata_battle(void); +void mi_kuwagata_menace_init(void); +void mi_kuwagata_menace(void); +void mi_kuwagata_attack_init(void); +void mi_kuwagata_attack(void); +void mi_kuwagata_setupAction(void); +void minsect_kuwagata_ct(void); +void minsect_kuwagata_mv(void); +void minsect_kuwagata_dw(void); + +// ac_museum_insect_mino.c_inc +void minsect_mino_up_init(void); +void minsect_mino_up(void); +void minsect_mino_down_init(void); +void minsect_mino_down(void); +void minsect_mino_move_init(void); +void minsect_mino_move(void); +void minsect_mino_check_dush_player(void); +void minsect_mino_furiko(void); +void minsect_mino_wait_init(void); +void minsect_mino_wait(void); +void minsect_mino_hineri(void); +void minsect_mino_setupAction(void); +void minsect_mino_ct(void); +void minsect_mino_mv(void); +void minsect_mino_dw(void); + +// ac_museum_insect_kumo.c_inc +void minsect_kumo_hide_init(void); +void minsect_kumo_hide(void); +void minsect_kumo_up_init(void); +void minsect_kumo_up(void); +void minsect_kumo_down_init(void); +void minsect_kumo_down(void); +void minsect_kumo_move_init(void); +void minsect_kumo_move(void); +void minsect_kumo_check_player(void); +void minsect_kumo_furiko(void); +void minsect_kumo_wait_init(void); +void minsect_kumo_wait(void); +void minsect_kumo_hineri(void); +void minsect_kumo_setupAction(void); +void minsect_kumo_ct(void); +void minsect_kumo_mv(void); +void minsect_kumo_dw(void); + +// ac_museum_insect_goki.c_inc +void minsect_goki_ct(void); +void goki_player_check(void); +void goki_wall_hit_angle_corect_sub(void); +void goki_wall_hit_angle_corect(void); +void goki_set_talk_info_init(void); +void goki_talk_process(void); +void goki_talk_process_init(void); +void minsect_goki_mv(void); +void minsect_goki_dw(void); + +// ac_museum_insect_genji.c_inc +void mi_genji_check_player(void); +void genji_light_ct(void); +void genji_light_make(void); +void genji_light_anime(void); +void genji_light_move(void); +void genji_light_draw(void); +void minsect_genji_ct(void); +void minsect_genji_mv(void); +void minsect_genji_dw(void); + +// ac_museum_insect_dango.c_inc +void mi_dango_defence_anime(void); +void mi_dango_check_player(void); +void mi_dango_move_init(void); +void mi_dango_move(void); +void mi_dango_defence_init(void); +void mi_dango_defence(void); +void mi_dango_setupAction(void); +void minsect_dango_ct(void); +void minsect_dango_mv(void); +void minsect_dango_dw(void); + +// ac_museum_insect_okera.c_inc +void mi_okera_check_player(void); +void minsect_okera_ct(void); +void okera_dig_up_process_init(void); +void okera_dig_up_process(void); +void okera_normal_process_init(void); +void okera_normal_process(void); +void okera_dig_down_process_init(void); +void okera_dig_down_process(void); +void okera_dig_wait_process_init(void); +void okera_dig_wait_process(void); +void minsect_okera_mv(void); +void minsect_okera_dw(void); + +// ac_museum_insect_ka.c_inc +void minsect_ka_ct(void); +void minsect_ka_mv(void); +void minsect_ka_dw(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/actor/ac_museum_insect.c b/src/actor/ac_museum_insect.c new file mode 100644 index 00000000..b2b39516 --- /dev/null +++ b/src/actor/ac_museum_insect.c @@ -0,0 +1,203 @@ +#include "ac_museum_insect_priv.h" + +ACTOR_PROFILE Museum_Insect_Profile = { + mAc_PROFILE_MUSEUM_INSECT, + ACTOR_PART_BG, + ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES | ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED, + EMPTY_NO, + ACTOR_OBJ_BANK_408, + sizeof(MUSEUM_INSECT_ACTOR), + Museum_Insect_Actor_ct, + Museum_Insect_Actor_dt, + Museum_Insect_Actor_move, + Museum_Insect_Actor_draw, + NULL, +}; + +MUSEUM_INSECT_ACTOR* MI_Control_Actor; + +int Museum_Insect_GetMsgNo(ACTOR* actorx) { + static u8 item_name[mIN_ITEM_NAME_LEN]; + MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx; + int insect_caught_by = actor->_2F80[actor->_2F7C].insectInfo; + s16 insect_no = ITM_INSECT_START + actor->_2F80[actor->_2F7C].insectName; + int msgNo; + mIN_copy_name_str(item_name, insect_no); + mMsg_Set_item_str_art(mMsg_Get_base_window_p(), mMsg_ITEM_STR0, item_name, ARRAY_COUNT(item_name), + mIN_get_item_article(insect_no)); + + if (insect_caught_by >= 1 && insect_caught_by <= 4) { + mMsg_Set_free_str(mMsg_Get_base_window_p(), mMsg_FREE_STR0, + common_data.save.save.private_data[insect_caught_by - 1].player_ID.player_name, 8); + } + + if (actor->_2F7C < actor->_2F78 - 1) { + if (insect_caught_by >= 1 && insect_caught_by <= 4) { + msgNo = 0x2fa2; + } else { + msgNo = 0x2fa3; + } + } else { + if (insect_caught_by >= 1 && insect_caught_by <= 4) { + msgNo = 0x2f9f; + } else { + msgNo = 0x2fa0; + } + } + + return msgNo; +} + +int Museum_Insect_Check_Talk_Distance(GAME* game, int i) { + static xyz_t kanban_pos[6] = { { 140.f, 40.f, 60.f }, { 420.f, 40.f, 60.f }, { 220.f, 40.f, 300.f }, + { 380.f, 40.f, 300.f }, { 180.f, 40.f, 540.f }, { 340.f, 40.f, 540.f } }; + GAME_PLAY* play = (GAME_PLAY*)game; + xyz_t p; + PLAYER_ACTOR* player_actor = get_player_actor_withoutCheck(play); + s16 newAngle = player_actor->actor_class.world.angle.y + DEG2SHORT_ANGLE(-180); + xyz_t_sub(&player_actor->actor_class.world.position, &kanban_pos[i], &p); + + if (ABS(p.x) < 20.f && ABS(p.z) < 20.f && ABS(newAngle) < DEG2SHORT_ANGLE(67.5f)) { + return TRUE; + } + return FALSE; +} + +void Museum_Insect_Set_MsgInsectInfo(ACTOR* actorx, int groupNum) { + MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx; + int i; + static int group_max_num[6] = { 7, 6, 6, 6, 7, 7 }; + static int group_1_insect_name[7] = { 22, 4, 21, 29, 38, 20, 7 }; + static int group_2_insect_name[6] = { 31, 30, 19, 5, 23, 6 }; + static int group_3_insect_name[6] = { 0, 25, 26, 1, 27, 2 }; + static int group_4_insect_name[6] = { 32, 34, 37, 3, 24, 39 }; + static int group_5_insect_name[7] = { 35, 8, 33, 9, 10, 11, 12 }; + static int group_6_insect_name[7] = { 15, 16, 18, 17, 13, 14, 36 }; + static int* group_insect_name[6] = { group_1_insect_name, group_2_insect_name, group_3_insect_name, + group_4_insect_name, group_5_insect_name, group_6_insect_name }; + actor->_2F78 = 0; + actor->_2F7C = 0; + for (i = 0; i < group_max_num[groupNum]; i++) { + s16 insectName = group_insect_name[groupNum][i]; + s16 s = mMmd_InsectInfo(insectName); + if (s) { + actor->_2F80[actor->_2F78].insectName = insectName; + actor->_2F80[actor->_2F78].insectInfo = s; + actor->_2F78++; + } + } +} + +void Museum_Insect_set_talk_info(ACTOR* actorx) { + MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx; + int x; + if (actor->_2F78 > 0) { + x = Museum_Insect_GetMsgNo(actorx); + actor->_2F7C++; + } else { + x = 0x2fa1; + } + mDemo_Set_talk_window_color(&window_color); + mDemo_Set_msg_num(x); + mDemo_Set_talk_display_name(FALSE); + mDemo_Set_ListenAble(); + mDemo_Set_camera(CAMERA2_PROCESS_NORMAL); + mDemo_Set_use_zoom_sound(TRUE); +} + +void Museum_Insect_Talk_process(ACTOR* actorx, GAME* game) { + MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx; + if (mDemo_Check(mDemo_TYPE_SPEAK, actorx)) { + s_xyz rot = get_player_actor_withoutCheck((GAME_PLAY*)game)->actor_class.shape_info.rotation; + add_calc_short_angle2(&rot.y, DEG2SHORT_ANGLE(-180), 0.3f, DEG2SHORT_ANGLE(22.5), DEG2SHORT_ANGLE(0)); + get_player_actor_withoutCheck((GAME_PLAY*)gamePT) + ->Set_force_position_angle_proc(gamePT, NULL, &rot, mPlayer_FORCE_POSITION_ANGLE_ROTY); + if (mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p())) { + int choice = mChoice_Get_ChoseNum(mChoice_Get_base_window_p()); + if (choice != -1) { + if (choice == 0) { + int msgNum = Museum_Insect_GetMsgNo(actorx); + actor->_2F7C++; + mMsg_Set_continue_msg_num(mMsg_Get_base_window_p(), msgNum); + mMsg_Unset_LockContinue(mMsg_Get_base_window_p()); + } else { + mMsg_Set_CancelNormalContinue(mMsg_Get_base_window_p()); + mMsg_Unset_LockContinue(mMsg_Get_base_window_p()); + } + } + } + } else if (chkTrigger(BUTTON_A) && !mDemo_Get_talk_actor()) { + int i; + for (i = 0; i < 6; i++) { + if (Museum_Insect_Check_Talk_Distance(game, i)) { + Museum_Insect_Set_MsgInsectInfo(actorx, i); + mDemo_Request(mDemo_TYPE_SPEAK, actorx, Museum_Insect_set_talk_info); + } + } + } +} + +void Museum_Insect_Actor_ct(ACTOR* actorx, GAME* game) { + int i; + MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx; + MI_Control_Actor = actor; + for (i = 0; i < 5; i++) { + actor->_2F9C[i] = 0; + } + for (i = 0; i < aINS_INSECT_TYPE_NUM; i++) { + if (mMmd_InsectInfo(i)) { + actor->privInsects[i]._8C |= 1; + actor->privInsects[i]._00 = i; + actor->privInsects[i]._14 = minsect_scale_tbl[i]; + set_relax_active_time(&actor->privInsects[i], game); + minsect_ct[i](&actor->privInsects[i], game); + } + } +} + +void Museum_Insect_Actor_dt(ACTOR* actor, GAME* game) { + return; +} + +void Museum_Insect_Actor_move(ACTOR* actorx, GAME* game) { + MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx; + int i; + actor->actor.world.position.y = 4000.f; + Museum_Insect_Talk_process(actorx, game); + for (i = 0; i < aINS_INSECT_TYPE_NUM; i++) { + if (actor->privInsects[i]._8C & 1) { + minsect_mv[i](&actor->privInsects[i], game); + } + } +} + +extern EVW_ANIME_DATA obj_museum4_water_evw_anime; +extern Gfx obj_museum4_water_modelT[]; + +void Museum_Insect_Actor_draw(ACTOR* actorx, GAME* game) { + MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx; + GRAPH* graph; + int i; + _texture_z_light_fog_prim_xlu(game->graph); + Evw_Anime_Set((GAME_PLAY*)game, &obj_museum4_water_evw_anime); + graph = game->graph; + Matrix_translate(100.0f, 0.0f, 0.0f, FALSE); + Matrix_scale(0.01f, 0.01f, 0.01f, TRUE); + OPEN_DISP(graph); + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_museum4_water_modelT); + CLOSE_DISP(graph); + for (i = 0; i < aINS_INSECT_TYPE_NUM; i++) { + if (actor->privInsects[i]._8C & 1) { + if (GETREG(TAKREG, 0) == i + 1) { + actor->privInsects[i]._14 = (GETREG(TAKREG, 1) * 0.0001f) + minsect_scale_tbl[i]; + } + minsect_dw[i](&actor->privInsects[i], game); + if (GETREG(TAKREG, 0) == i + 1) { + actor->privInsects[i]._14 = minsect_scale_tbl[i]; + } + } + } +} + +#include "../src/actor/ac_museum_insect_base.c_inc" diff --git a/src/actor/ac_museum_insect_base.c_inc b/src/actor/ac_museum_insect_base.c_inc new file mode 100644 index 00000000..ecdf8923 --- /dev/null +++ b/src/actor/ac_museum_insect_base.c_inc @@ -0,0 +1,17 @@ +#include "ac_museum_insect_priv.h" + +#include "../src/actor/ac_museum_insect_chou.c_inc" +#include "../src/actor/ac_museum_insect_semi.c_inc" +#include "../src/actor/ac_museum_insect_tonbo.c_inc" +#include "../src/actor/ac_museum_insect_batta.c_inc" +#include "../src/actor/ac_museum_insect_tentou.c_inc" +#include "../src/actor/ac_museum_insect_hachi.c_inc" +#include "../src/actor/ac_museum_insect_kabuto.c_inc" +#include "../src/actor/ac_museum_insect_kuwagata.c_inc" +#include "../src/actor/ac_museum_insect_mino.c_inc" +#include "../src/actor/ac_museum_insect_kumo.c_inc" +#include "../src/actor/ac_museum_insect_goki.c_inc" +#include "../src/actor/ac_museum_insect_genji.c_inc" +#include "../src/actor/ac_museum_insect_dango.c_inc" +#include "../src/actor/ac_museum_insect_okera.c_inc" +#include "../src/actor/ac_museum_insect_ka.c_inc" diff --git a/src/actor/ac_museum_insect_batta.c_inc b/src/actor/ac_museum_insect_batta.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_batta.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_chou.c_inc b/src/actor/ac_museum_insect_chou.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_chou.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_dango.c_inc b/src/actor/ac_museum_insect_dango.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_dango.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_genji.c_inc b/src/actor/ac_museum_insect_genji.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_genji.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_goki.c_inc b/src/actor/ac_museum_insect_goki.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_goki.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_hachi.c_inc b/src/actor/ac_museum_insect_hachi.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_hachi.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_ka.c_inc b/src/actor/ac_museum_insect_ka.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_ka.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_kabuto.c_inc b/src/actor/ac_museum_insect_kabuto.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_kabuto.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_kumo.c_inc b/src/actor/ac_museum_insect_kumo.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_kumo.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_kuwagata.c_inc b/src/actor/ac_museum_insect_kuwagata.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_kuwagata.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_mino.c_inc b/src/actor/ac_museum_insect_mino.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_mino.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_okera.c_inc b/src/actor/ac_museum_insect_okera.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_okera.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_semi.c_inc b/src/actor/ac_museum_insect_semi.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_semi.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_tentou.c_inc b/src/actor/ac_museum_insect_tentou.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_tentou.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" diff --git a/src/actor/ac_museum_insect_tonbo.c_inc b/src/actor/ac_museum_insect_tonbo.c_inc new file mode 100644 index 00000000..356389bc --- /dev/null +++ b/src/actor/ac_museum_insect_tonbo.c_inc @@ -0,0 +1 @@ +#include "ac_museum_insect_priv.h" From d8d6b92dfdf5cd69999c16e3ea61df5965dd39d3 Mon Sep 17 00:00:00 2001 From: roeming Date: Fri, 7 Feb 2025 20:47:35 -0500 Subject: [PATCH 03/26] match museum_insect_chou --- include/ac_museum_insect_priv.h | 66 +++++-- src/actor/ac_museum_insect.c | 4 +- src/actor/ac_museum_insect_base.c_inc | 102 +++++++++++ src/actor/ac_museum_insect_chou.c_inc | 249 ++++++++++++++++++++++++++ 4 files changed, 400 insertions(+), 21 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index cf41c420..31cdc24e 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -16,6 +16,8 @@ extern "C" { #define artificial_padding(lastOffset, currentOffset, typeOfLastMember) \ u8 __##currentOffset##padding[currentOffset - lastOffset - sizeof(typeOfLastMember)] +#define CALC_EASE(x) (1.0f - sqrtf(1.0f - (x))) +#define CALC_EASE2(x) CALC_EASE(CALC_EASE(x)) struct _MUSEUM_INSECT_PRIVATE_DATA; @@ -23,9 +25,28 @@ typedef void (*PRIV_INSECT_PROCESS)(struct _MUSEUM_INSECT_PRIVATE_DATA*, GAME*); typedef struct _MUSEUM_INSECT_PRIVATE_DATA { int _00; - artificial_padding(0, 0x14, int); + PRIV_INSECT_PROCESS _04; + artificial_padding(4, 0xc, PRIV_INSECT_PROCESS); + f32 _0C; + f32 _10; f32 _14; // scale - artificial_padding(0x14, 0x8c, f32); + f32 _18; + xyz_t _1C; + xyz_t _28; + xyz_t _34; + f32 _40; + xyz_t _44; + int _50; + int _54; + f32 _58; + artificial_padding(0x58, 0x68, int); + s_xyz _68; + s16 _6E; + s16 _70; + s16 _72; + s16 _74; + s16 _76; + artificial_padding(0x76, 0x8c, s16); s16 _8C; s16 _8E; s16 _90; @@ -52,7 +73,14 @@ extern PRIV_INSECT_PROCESS minsect_mv[aINS_INSECT_TYPE_NUM]; extern PRIV_INSECT_PROCESS minsect_dw[aINS_INSECT_TYPE_NUM]; extern f32 minsect_scale_tbl[aINS_INSECT_TYPE_NUM]; extern f32 minsect_scale_tbl[aINS_INSECT_TYPE_NUM]; +extern int active_time_tbl[40]; +extern int relax_time_tbl[40]; extern rgba_t window_color; +extern f32 base_high_tbl[4]; +extern xyz_t flower_pos[4]; +extern xyz_t ohmurasaki_tree_pos; +extern s16 aim_angle_tbl[6]; +extern Gfx** minsect_mdl[40]; // ac_museum_insect.c int Museum_Insect_GetMsgNo(ACTOR* actorx); @@ -66,7 +94,7 @@ void Museum_Insect_Actor_move(ACTOR* actor, GAME* game); void Museum_Insect_Actor_draw(ACTOR* actor, GAME* game); // ac_museum_insect_base.c_inc -void mID_insect_moveF(void); +void mID_insect_moveF(MUSEUM_INSECT_PRIVATE_DATA* actor); void minsect_amenbo_ct(void); void minsect_amenbo_mv(void); void minsect_amenbo_dw(void); @@ -78,30 +106,30 @@ void ari_alone_draw(void); void minsect_ari_ct(void); void minsect_ari_mv(void); void minsect_ari_dw(void); -void minsect_draw_shadow(void); -void minsect_fly_BGCheck(void); +void minsect_draw_shadow(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_fly_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2); void minsect_garden_BGCheck(void); void minsect_flower_BGCheck(void); void minsect_goki_BGCheck(void); void minsect_kanban_BGCheck(void); -void minsect_tree_ObjCheck(void); +void minsect_tree_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); void minsect_rock_ObjCheck(void); -void minsect_batta_ObjCheck(void); -void get_now_mind_flag(void); +void minsect_batta_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); +BOOL get_now_mind_flag(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void set_relax_active_time(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_chou.c_inc -void minsect_chou_ct(void); -void minsect_chou_normal_process_init(void); -void minsect_chou_normal_process(void); -void minsect_chou_aim_flower_process_init(void); -void minsect_chou_aim_flower_process(void); -void minsect_chou_flower_process_init(void); -void minsect_chou_flower_process(void); -void minsect_chou_fly_process_init(void); -void minsect_chou_fly_process(void); -void minsect_chou_mv(void); -void minsect_chou_dw(void); +void minsect_chou_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_chou_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_chou_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_chou_aim_flower_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_chou_aim_flower_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_chou_flower_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_chou_flower_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_chou_fly_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_chou_fly_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_chou_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_chou_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_semi.c_inc void minsect_semi_ct(void); diff --git a/src/actor/ac_museum_insect.c b/src/actor/ac_museum_insect.c index b2b39516..05711d1b 100644 --- a/src/actor/ac_museum_insect.c +++ b/src/actor/ac_museum_insect.c @@ -14,8 +14,6 @@ ACTOR_PROFILE Museum_Insect_Profile = { NULL, }; -MUSEUM_INSECT_ACTOR* MI_Control_Actor; - int Museum_Insect_GetMsgNo(ACTOR* actorx) { static u8 item_name[mIN_ITEM_NAME_LEN]; MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx; @@ -48,6 +46,8 @@ int Museum_Insect_GetMsgNo(ACTOR* actorx) { return msgNo; } +MUSEUM_INSECT_ACTOR* MI_Control_Actor = NULL; + int Museum_Insect_Check_Talk_Distance(GAME* game, int i) { static xyz_t kanban_pos[6] = { { 140.f, 40.f, 60.f }, { 420.f, 40.f, 60.f }, { 220.f, 40.f, 300.f }, { 380.f, 40.f, 300.f }, { 180.f, 40.f, 540.f }, { 340.f, 40.f, 540.f } }; diff --git a/src/actor/ac_museum_insect_base.c_inc b/src/actor/ac_museum_insect_base.c_inc index ecdf8923..6a34c143 100644 --- a/src/actor/ac_museum_insect_base.c_inc +++ b/src/actor/ac_museum_insect_base.c_inc @@ -15,3 +15,105 @@ #include "../src/actor/ac_museum_insect_dango.c_inc" #include "../src/actor/ac_museum_insect_okera.c_inc" #include "../src/actor/ac_museum_insect_ka.c_inc" + +void mID_insect_moveF(MUSEUM_INSECT_PRIVATE_DATA* actor) { +} +void minsect_amenbo_ct(void) { +} +void minsect_amenbo_mv(void) { +} +void minsect_amenbo_dw(void) { +} +void ari_alone_ct(void) { +} +void ari_alone_make(void) { +} +void ari_alone_dt(void) { +} +void ari_alone_move(void) { +} +void ari_alone_draw(void) { +} +void minsect_ari_ct(void) { +} +void minsect_ari_mv(void) { +} +void minsect_ari_dw(void) { +} +void minsect_draw_shadow(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { +} +void minsect_fly_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2) { +} +void minsect_garden_BGCheck(void) { +} +void minsect_flower_BGCheck(void) { +} +void minsect_goki_BGCheck(void) { +} +void minsect_kanban_BGCheck(void) { +} +void minsect_tree_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { +} +void minsect_rock_ObjCheck(void) { +} + +void minsect_batta_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { +} + +BOOL get_now_mind_flag(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + int now_sec = Common_Get(time.now_sec); + BOOL b; + + if (actor->_50 == 0 && actor->_54 == 0) { + return TRUE; + } + + if (actor->_54 > actor->_50) { + if (now_sec < actor->_50) { + b = FALSE; + } else if (now_sec < actor->_54) { + b = TRUE; + } else { + b = FALSE; + } + } else { + if (now_sec < actor->_54) { + b = TRUE; + } else if (now_sec < actor->_50) { + b = FALSE; + } else { + b = TRUE; + } + } + return b; +} + +void set_relax_active_time(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_00 == 6) { + int now_sec = Common_Get(time.now_sec); + if (now_sec < (14280)) { + actor->_50 = 14400; + actor->_54 = 28800; + } else if (now_sec < (28680)) { + actor->_50 = 57600; + actor->_54 = 28800; + } else if (now_sec < (57480)) { + actor->_50 = 57600; + actor->_54 = 68400; + } else if (now_sec < (68280)) { + actor->_50 = 14400; + actor->_54 = 68400; + } else { + actor->_50 = 14400; + actor->_54 = 28800; + } + } else { + actor->_54 = relax_time_tbl[actor->_00]; + actor->_50 = active_time_tbl[actor->_00]; + } + if (actor->_54 && actor->_50) { + actor->_54 += (int)RANDOM2_F(240.f); + actor->_50 += (int)RANDOM2_F(240.f); + } + actor->_8E = get_now_mind_flag(actor, game); +} diff --git a/src/actor/ac_museum_insect_chou.c_inc b/src/actor/ac_museum_insect_chou.c_inc index 356389bc..c921e8dc 100644 --- a/src/actor/ac_museum_insect_chou.c_inc +++ b/src/actor/ac_museum_insect_chou.c_inc @@ -1 +1,250 @@ #include "ac_museum_insect_priv.h" + +void minsect_chou_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_58 = base_high_tbl[actor->_00]; + actor->_34 = ZeroVec; + actor->_0C = 0.0f; + actor->_10 = 0.25f; + actor->_70 = RANDOM_F(5.0f); + actor->_44 = ZeroVec; + actor->_44.y = -0.075f; + if (actor->_8E == 1) { + static const xyz_t init_center_pos = { 280.f, 100.f, 180.f }; + actor->_1C = init_center_pos; + actor->_1C.x += RANDOM2_F(460.f); + actor->_1C.z += RANDOM2_F(200.f); + + actor->_68 = ZeroSVec; + actor->_68.y = qrand(); + actor->_1C.y = actor->_58 + RANDOM_F(5.f); + actor->_40 = 0.75f; + minsect_chou_normal_process_init(actor, game); + } else { + if (actor->_00 <= 2) { + actor->_1C = flower_pos[actor->_00]; + actor->_68 = ZeroSVec; + actor->_68.y = qrand(); + actor->_74 = actor->_00; + MI_Control_Actor->_2F9C[0] |= 1 << actor->_74; + } else { + actor->_1C = ohmurasaki_tree_pos; + actor->_68 = ZeroSVec; + actor->_68.y = DEG2SHORT_ANGLE(-180); + } + actor->_40 = 0.0f; + minsect_chou_flower_process_init(actor, game); + actor->_76 = DEG2SHORT_ANGLE(-180); + } +} + +void minsect_chou_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_04 = minsect_chou_normal_process; +} + +void minsect_chou_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if ((actor->_6E-- <= 0) || (actor->_70 != 0 && actor->_70 != 3 && actor->_8C & 8) || + ((actor->_70 == 0) || (actor->_70 == 3)) && actor->_8C & 0x10) { + actor->_6E = (s16)(RANDOM_F(20.f) + 40.f); + if (actor->_70 < 5) { + actor->_70++; + } else { + if (RANDOM_F(1.0f) > 0.8f) { + actor->_70 = 0; + minsect_chou_aim_flower_process_init(actor, game); + return; + } + actor->_70 = 0; + } + actor->_72 = aim_angle_tbl[actor->_70]; + actor->_72 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(20.f)); + if (actor->_70 % 3 == 0) { + actor->_6E += (s16)(actor->_6E + 10); + } + } + + if (actor->_1C.y < actor->_58) { + actor->_34.y = (RANDOM_F(1.0f) + 2.0f) * 0.5f; + } + + add_calc(&actor->_40, 0.75f, CALC_EASE(0.2f), 0.05f, 0.05f); +} + +void minsect_chou_aim_flower_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_00 != 3) { + actor->_74 = RANDOM_F(8.0f); + while (MI_Control_Actor->_2F9C[0] & (1 << actor->_74)) { + if (actor->_74 < 7) { + actor->_74++; + } else { + actor->_74 = 0; + } + } + MI_Control_Actor->_2F9C[0] |= (1 << actor->_74); + actor->_72 = search_position_angleY(&actor->_1C, &flower_pos[actor->_74]); + } else { + actor->_72 = search_position_angleY(&actor->_1C, &ohmurasaki_tree_pos); + } + actor->_6E = RANDOM_F(20.f) + 40.f; + actor->_04 = minsect_chou_aim_flower_process; +} + +void minsect_chou_aim_flower_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + xyz_t* target; + f32 dist; + f32 diff; + if (actor->_00 != 3) { + target = &flower_pos[actor->_74]; + } else { + target = &ohmurasaki_tree_pos; + } + dist = search_position_distanceXZ(&actor->_1C, target); + diff = actor->_1C.y - target->y; + if (actor->_6E-- < 0) { + actor->_72 = search_position_angleY(&actor->_1C, target); + actor->_72 += DEG2SHORT_ANGLE(RANDOM2_F(90.f)); + actor->_6E = RANDOM_F(20.f) + 40.f; + if (actor->_00 == 3 && + ((actor->_72 < DEG2SHORT_ANGLE(90) && actor->_72 > DEG2SHORT_ANGLE(-90)) || actor->_1C.z < target->z)) { + if ((s16)actor->_72 > 0) { + actor->_72 += DEG2SHORT_ANGLE(30); + } else { + actor->_72 -= DEG2SHORT_ANGLE(30); + } + actor->_6E += 10; + } + } + if (actor->_1C.y < actor->_58) { + actor->_34.y = (RANDOM_F(1.0f) + 2.0f) * 0.5f; + } + if ((dist < 30.f) || (actor->_00 == 3 && dist < 50.f && actor->_1C.z > target->z)) { + add_calc(&actor->_40, 0.2f, CALC_EASE(0.1f), 0.05f, 0.005f); + add_calc(&actor->_58, target->y, CALC_EASE(0.5f), 0.5f, 0.05f); + if (ABS(diff) < 10 && dist < (GETREG(TAKREG, 0x27) + 10.f)) { + minsect_chou_flower_process_init(actor, game); + } + } +} + +void minsect_chou_flower_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_44.y = 0.0f; + actor->_34.x = actor->_34.y = actor->_34.z = 0.0f; + actor->_04 = minsect_chou_flower_process; + actor->_10 = 0.25f; + actor->_0C = 0.0f; + actor->_6E = 0x10; + actor->_28 = actor->_1C; + actor->_76 = 0; +} + +void minsect_chou_flower_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + xyz_t* target; + f32 dist; + f32 diff; + if (actor->_00 != 3) { + target = &flower_pos[actor->_74]; + } else { + target = &ohmurasaki_tree_pos; + } + actor->_6E--; + actor->_1C.x = actor->_28.x + (target->x - actor->_28.x) * (ABS(actor->_76) / 32768.0f); + if (actor->_00 != 3) { + actor->_1C.z = actor->_28.z + (target->z - actor->_28.z) * (ABS(actor->_76) / 32768.0f); + } else { + actor->_1C.z = actor->_28.z + (target->z - actor->_28.z - 20.f) * (ABS(actor->_76) / 32768.0f); + } + + actor->_1C.y = actor->_28.y + (target->y - actor->_28.y) * (0.5f * (1.0f - cos_s(actor->_76))); + + if ((int)actor->_76 >= 0) { + actor->_76 += GETREG(TAKREG, 0x29) + DEG2SHORT_ANGLE(5.625f); + } + + if (actor->_10 > 0.0f) { + if ((int)actor->_0C == 1 && actor->_6E < 0) { + actor->_10 = 0.0f; + actor->_6E = RANDOM_F(540.f) + 60.f; + if (actor->_8E == 0) { + actor->_6E *= 5; + } + } + } else if (actor->_6E < 0) { + if (actor->_8E == 1 && RANDOM_F(1.0f) > 0.75f) { + minsect_chou_fly_process_init(actor, game); + } else { + actor->_10 = 0.25f; + actor->_6E = 0x10; + } + } + + if (actor->_00 == 3) { + add_calc_short_angle2(&actor->_72, DEG2SHORT_ANGLE(-180), CALC_EASE2(GETREG(TAKREG, 0x2a) * 0.01f + 0.3f), + (s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 0x2c) + 10.f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_68.x, DEG2SHORT_ANGLE(-90), CALC_EASE2(GETREG(TAKREG, 0x2b) * 0.01f + 0.3f), + (s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 0x2d) + 10.f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); + } +} + +void minsect_chou_fly_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_58 = base_high_tbl[actor->_00]; + if (actor->_00 != 3) { + MI_Control_Actor->_2F9C[0] &= ~(1 << actor->_74); + } + actor->_10 = 0.25f; + actor->_04 = minsect_chou_fly_process; + actor->_40 = 0.75f; + actor->_34.y = (RANDOM_F(1.0f) + 2.0f) * 0.5f; + actor->_44.y = -0.075f; + if (actor->_00 == 3) { + actor->_1C.z += 2.0f; + } +} + +void minsect_chou_fly_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_00 == 3) { + add_calc_short_angle2(&actor->_68.y, DEG2SHORT_ANGLE(90), CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_68.x, DEG2SHORT_ANGLE(0), CALC_EASE2(0.5f), DEG2SHORT_ANGLE(3.75f), + DEG2SHORT_ANGLE(0.5f)); + } + + if (actor->_1C.y > actor->_58 && actor->_68.x == 0) { + minsect_chou_normal_process_init(actor, game); + } else if (actor->_34.y < 0.0f) { + actor->_34.y = (RANDOM_F(1.0f) + 2.0f) * 0.5f; + } +} + +void minsect_chou_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_8E = get_now_mind_flag(actor, game); + actor->_04(actor, game); + add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); + mID_insect_moveF(actor); + + actor->_34.y += actor->_44.y; + actor->_0C += actor->_10; + + if (!minsect_mdl[actor->_00][(int)actor->_0C]) { + actor->_0C = 0.0f; + } + + if (actor->_04 != minsect_chou_flower_process) { + minsect_tree_ObjCheck(actor); + } + + minsect_fly_BGCheck(actor, 360.0, 40.0); +} + +void minsect_chou_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim(game->graph); + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + Matrix_scale(GETREG(NMREG, 0) * 0.01f + 1.0f, GETREG(NMREG, 1) * 0.01f + 1.0f, GETREG(NMREG, 2) * 0.01f + 1.0f, + TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][(int)actor->_0C]); + minsect_draw_shadow(actor, game); + CLOSE_DISP(game->graph); +} From 4ebb210f1d0e348fbe2b42e457b80684147cd00f Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 8 Feb 2025 14:28:03 -0500 Subject: [PATCH 04/26] Match ac_museum_insect_semi+tonbo.c_inc --- include/ac_museum_insect_priv.h | 69 +-- src/actor/ac_museum_insect_semi.c_inc | 114 +++++ src/actor/ac_museum_insect_tonbo.c_inc | 606 +++++++++++++++++++++++++ 3 files changed, 759 insertions(+), 30 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index 31cdc24e..682ebe8e 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -39,14 +39,21 @@ typedef struct _MUSEUM_INSECT_PRIVATE_DATA { int _50; int _54; f32 _58; - artificial_padding(0x58, 0x68, int); + f32 _5C; + artificial_padding(0x5C, 0x68, int); s_xyz _68; s16 _6E; s16 _70; s16 _72; s16 _74; s16 _76; - artificial_padding(0x76, 0x8c, s16); + s16 _78; + s16 _7A; + s16 _7C; + s16 _7E; + s16 _80; + s16 _82; + artificial_padding(0x82, 0x8C, s16); s16 _8C; s16 _8E; s16 _90; @@ -68,6 +75,7 @@ typedef struct _MUSEUM_INSECT_ACTOR { s16 _2F9C[5]; // offset: 0x2F9C } MUSEUM_INSECT_ACTOR; +extern MUSEUM_INSECT_ACTOR* MI_Control_Actor; extern PRIV_INSECT_PROCESS minsect_ct[aINS_INSECT_TYPE_NUM]; extern PRIV_INSECT_PROCESS minsect_mv[aINS_INSECT_TYPE_NUM]; extern PRIV_INSECT_PROCESS minsect_dw[aINS_INSECT_TYPE_NUM]; @@ -81,6 +89,7 @@ extern xyz_t flower_pos[4]; extern xyz_t ohmurasaki_tree_pos; extern s16 aim_angle_tbl[6]; extern Gfx** minsect_mdl[40]; +extern xyz_t tonbo_rock_pos[1]; // ac_museum_insect.c int Museum_Insect_GetMsgNo(ACTOR* actorx); @@ -132,36 +141,36 @@ void minsect_chou_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_chou_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_semi.c_inc -void minsect_semi_ct(void); -void mi_semi_hane_anime(void); -void mi_semi_check_player(void); -void minsect_semi_mv(void); -void minsect_semi_dw(void); +void minsect_semi_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_semi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor); +void mi_semi_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_semi_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_semi_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_tonbo.c_inc -void minsect_tonbo_ct(void); -void mi_tonbo_check_player(void); -void minsect_tonbo_bg_check(void); -void minsect_tonbo_near_target_set(void); -void minsect_tonbo_rock_target_set(void); -void minsect_tonbo_suprised_rest_player(void); -void minsect_tonbo_acc_change(void); -void minsect_tonbo_max_speed_set(void); -void minsect_tonbo_aim_distance_set(void); -void minsect_tonbo_aim_angle_check(void); -void minsect_tonbo_normal_process_init(void); -void minsect_tonbo_normal_process(void); -void minsect_tonbo_aim_rock_process_init(void); -void minsect_tonbo_aim_rock_process(void); -void minsect_tonbo_rock_process_init(void); -void minsect_tonbo_rock_process(void); -void minsect_tonbo_rock_wait_process_init(void); -void minsect_tonbo_rock_wait_process(void); -void minsect_tonbo_fly_process_init(void); -void minsect_tonbo_fly_process(void); -void minsect_tonbo_mv(void); -void minsect_tonbo_dw(void); -void minsect_tonbo_MoveF(void); +void minsect_tonbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_tonbo_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +BOOL minsect_tonbo_bg_check(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_near_target_set(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_rock_target_set(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game, xyz_t* p); +BOOL minsect_tonbo_suprised_rest_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +f32 minsect_tonbo_acc_change(MUSEUM_INSECT_PRIVATE_DATA* actor); +void minsect_tonbo_max_speed_set(MUSEUM_INSECT_PRIVATE_DATA* actor); +f32 minsect_tonbo_aim_distance_set(MUSEUM_INSECT_PRIVATE_DATA* actor); +void minsect_tonbo_aim_angle_check(MUSEUM_INSECT_PRIVATE_DATA* actor); +void minsect_tonbo_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_aim_rock_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_aim_rock_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_rock_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_rock_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_rock_wait_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_rock_wait_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_fly_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_fly_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tonbo_MoveF(MUSEUM_INSECT_PRIVATE_DATA* actor); // ac_museum_insect_batta.c_inc void mi_batta_check_player(void); diff --git a/src/actor/ac_museum_insect_semi.c_inc b/src/actor/ac_museum_insect_semi.c_inc index 356389bc..adeae11f 100644 --- a/src/actor/ac_museum_insect_semi.c_inc +++ b/src/actor/ac_museum_insect_semi.c_inc @@ -1 +1,115 @@ #include "ac_museum_insect_priv.h" + +void minsect_semi_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + const static xyz_t init_pos[1] = { 0, 0, 0 }; + int s; + actor->_58 = 1.0f; + actor->_70 = 0; + actor->_76 = 0; + actor->_74 = 0; + actor->_78 = 0; + s = (actor->_00 - 4); + actor->_1C = init_pos[s]; + actor->_68 = ZeroSVec; + actor->_68.x = DEG2SHORT_ANGLE(-70); + actor->_68.y = DEG2SHORT_ANGLE(-180); + + actor->_44 = actor->_34 = ZeroVec; +} + +void mi_semi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { + static float scaleX_table[1]; + if (actor->_70 < 7) { + if (chase_f(&actor->_58, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_70], 0.23f) == TRUE) { + actor->_70--; + if (actor->_70 < 0) { + actor->_70 = 0; + } + } + } else { + actor->_70--; + } +} + +void mi_semi_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position); + if (dist < 120.f) { + if (player->actor_class.speed > 1.4f) { + actor->_76 += (s16)((dist / 120.f) * 8.0f); + } else if (player->actor_class.speed > 5.0f) { + actor->_76 += (s16)((dist / 120.f) * 20.0f); + } + } +} + +void minsect_semi_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + int id = actor->_00 - 4; + get_now_mind_flag(actor, game); + if (actor->_8E) { + mi_semi_hane_anime(actor); + add_calc_short_angle2(&actor->_72, actor->_74, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), + DEG2SHORT_ANGLE(0.25f)); + mi_semi_check_player(actor, game); + actor->_76--; + if (actor->_76 < 0) { + actor->_76 = 0; + } + if (actor->_76 > 900) { + actor->_76 = 900; + } + if (actor->_76 > 500) { + actor->_74 = 0; + } else { + if (actor->_78 != 0) { + actor->_74 = DEG2SHORT_ANGLE(-10); + } + actor->_6E--; + if (actor->_6E < 0) { + if (actor->_78 != 0) { + actor->_78 = 0; + actor->_74 = 0; + actor->_6E = (s16)RANDOM_F(360.f) + 360; + } else { + actor->_78 = 1; + actor->_74 = DEG2SHORT_ANGLE(-10); + actor->_6E = (s16)RANDOM_F(6000.f) + 12000; + } + } + if (actor->_78 == 1 && actor->_72 == actor->_74) { + static const u8 semi_sound_data[4] = { 0x9b, 0x9a, 0x98, 0x97 }; + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + if (search_position_distance(&actor->_1C, &player->actor_class.world.position) < 200.f) { + sAdo_OngenPos((u32)actor, semi_sound_data[id], &actor->_1C); + } + if (actor->_70 <= 0) { + actor->_70 = 7; + } + } + } + } +} + +void minsect_semi_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim(game->graph); + + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE); + Matrix_rotateXYZ(actor->_72, 0, 0, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + CLOSE_DISP(game->graph); + + _texture_z_light_fog_prim_xlu(game->graph); + + OPEN_POLY_XLU_DISP(game->graph); + gDPSetEnvColor(POLY_XLU_DISP++, 0xff, 0xff, 0xff, 0xff); + Matrix_scale(actor->_58 + (GETREG(NMREG, 1) * 0.01f), GETREG(NMREG, 2) * 0.01f + 1.0f, + GETREG(NMREG, 3) * 0.01f + 1.0f, TRUE); + gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][1]); + CLOSE_POLY_XLU_DISP(game->graph); +} diff --git a/src/actor/ac_museum_insect_tonbo.c_inc b/src/actor/ac_museum_insect_tonbo.c_inc index 356389bc..a6280cc0 100644 --- a/src/actor/ac_museum_insect_tonbo.c_inc +++ b/src/actor/ac_museum_insect_tonbo.c_inc @@ -1 +1,607 @@ #include "ac_museum_insect_priv.h" + +void minsect_tonbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_34 = ZeroVec; + actor->_68 = ZeroSVec; + actor->_68.y = qrand(); + actor->_70 = qrand(); + actor->_72 = 0; + if (actor->_8E == 1) { + static const xyz_t init_center_pos = { 280.f, 100.f, 440.f }; + actor->_1C = init_center_pos; + actor->_1C.x += RANDOM2_F(460.f); + actor->_1C.y = RANDOM_F(30.f) + 100.f; + actor->_1C.z += RANDOM2_F(280.f); + actor->_44 = actor->_1C; + actor->_10 = 0.5f; + actor->_0C = 1.0f; + actor->_74 = 0; + actor->_76 = qrand(); + minsect_tonbo_normal_process_init(actor, game); + } else { + static xyz_t tonbo_rock_pos[1]; + actor->_74 = actor->_00 - 9; + MI_Control_Actor->_2F9C[2] |= (1 << actor->_74); + actor->_44 = actor->_1C = tonbo_rock_pos[actor->_74]; + minsect_tonbo_rock_wait_process_init(actor, game); + } +} + +void mi_tonbo_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position); + if (dist < 80.f) { + if (player->actor_class.speed > 1.4f) { + actor->_82 += (s16)((dist / 80.f) * 8.0f); + } else if (player->actor_class.speed > 5.0f) { + actor->_82 += (s16)((dist / 80.f) * 20.0f); + } + } +} + +BOOL minsect_tonbo_bg_check(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_8C & 0x9e) { + if (actor->_72 & 0x80) { + if (RANDOM_F(1.0f) >= 0.5f) { + actor->_70 += (s16)(DEG2SHORT_ANGLE2(RANDOM_F(90)) + DEG2SHORT_ANGLE(90)); + } else { + actor->_70 -= (s16)(DEG2SHORT_ANGLE(RANDOM_F(90)) + DEG2SHORT_ANGLE(90)); + } + actor->_72 = 0; + actor->_40 = 0.0f; + return TRUE; + } + if ((actor->_8C & 8) == 0 || (actor->_8C & 6)) { + if (actor->_72 & 2) { + actor->_70 = DEG2SHORT_ANGLE(90); + actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90)); + } else if (actor->_72 & 4) { + actor->_70 = DEG2SHORT_ANGLE(-90); + actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90)); + } else if (actor->_72 & 0x10) { + actor->_70 = DEG2SHORT_ANGLE(-180); + actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90)); + } else if (actor->_72 & 8) { + actor->_70 = (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90)); + } else { + actor->_70 += DEG2SHORT_ANGLE2(RANDOM2_F(90)); + } + actor->_72 = 0; + actor->_40 = 0.0f; + return TRUE; + } + } + return FALSE; +} + +void minsect_tonbo_near_target_set(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + int i; + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + for (i = 0; i <= 6; i++) { + f32 dist; + if (i >= 6) { + dist = search_position_distance(&actor->_1C, &player->actor_class.world.position); + } else { + dist = search_position_distance(&actor->_1C, &tonbo_rock_pos[i]); + } + if (dist < 80.f && (MI_Control_Actor->_2F9C[2] & (1 << actor->_74)) == 0) { + minsect_tonbo_aim_rock_process_init(actor, game); + } + } +} + +void minsect_tonbo_rock_target_set(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game, xyz_t* p) { + xyz_t arr[2] = { { 0.f, 22.f, 0.f }, { 0.f, 27.f, 0.f } }; + float g_f[2] = { 1.f, -12.f }; + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + if (actor->_74 >= 6) { + int gender = Common_Get(now_private)->gender; + search_position_distance(&actor->_1C, &actor->_44); + *p = player->head_pos; + if (GETREG(NMREG, 0x11)) { + arr[gender].y = GETREG(NMREG, 0x11) * 0.01f; + } + + arr[gender].x += sin_s(player->actor_class.shape_info.rotation.y) * g_f[gender]; + arr[gender].z += cos_s(player->actor_class.shape_info.rotation.y) * g_f[gender]; + + p->x += arr[gender].x; + p->y += arr[gender].y; + p->z += arr[gender].z; + if (actor->_04 == minsect_tonbo_rock_wait_process && actor->_74 >= 6) { + xyz_t pp; + xyz_t_sub(&player->feel_pos, &player->head_pos, &pp); + actor->_7E = atans_table(pp.y, pp.z); + actor->_80 = atans_table(pp.y, -pp.x); + } else if (actor->_04 != minsect_tonbo_rock_process || actor->_74 < 6) { + actor->_7E = 0; + actor->_80 = 0; + } + } else { + *p = tonbo_rock_pos[(int)actor->_74]; + } +} + +BOOL minsect_tonbo_suprised_rest_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_74 >= 6) { + actor->_7A = 1; + minsect_tonbo_fly_process_init(actor, game); + return TRUE; + } + return FALSE; +} + +f32 minsect_tonbo_acc_change(MUSEUM_INSECT_PRIVATE_DATA* actor) { + f32 v; + if (GETREG(NMREG, 5)) { + return GETREG(NMREG, 5); + } + + if (GETREG(NMREG, 4)) { + v = GETREG(NMREG, 4); + } else { + v = 55.f; + } + if (actor->_00 != 10) { + if (actor->_00 == 9) { + v *= 0.9f; + } else if (actor->_00 == 11) { + v *= 1.5f; + } else if (actor->_00 == 12) { + v *= 1.7f; + } + } + return v; +} + +void minsect_tonbo_max_speed_set(MUSEUM_INSECT_PRIVATE_DATA* actor) { + if (actor->_00 == 10) { + actor->_5C = RANDOM_F(1.0f) + 1.75f; + actor->_6E = 0; + } else if (actor->_00 == 9) { + actor->_5C = (RANDOM_F(1.0f) + 1.75f) * 0.9f; + actor->_6E = 0; + } else if (actor->_00 == 11) { + actor->_5C = (RANDOM_F(1.0f) + 1.75f) * 1.5f; + actor->_6E = 0; + } else if (actor->_00 == 12) { + actor->_5C = (RANDOM_F(1.0f) + 1.75f) * 1.7f; + actor->_6E = 0; + } +} + +f32 minsect_tonbo_aim_distance_set(MUSEUM_INSECT_PRIVATE_DATA* actor) { + f32 v; + if (GETREG(NMREG, 2)) { + v = (GETREG(NMREG, 2) + RANDOM_F(GETREG(NMREG, 3))) * 4.0f; + } else if (actor->_00 == 12) { + v = (RANDOM_F(5.0f) + 41.25f) * 4.0f; + } else { + v = (RANDOM_F(5.0f) + 27.5f) * 4.0f; + } + if (actor->_00 != 10) { + if (actor->_00 == 9) { + v *= 0.9f; + } else if (actor->_00 == 11) { + v *= 1.1f; + } else if (actor->_00 == 12) { + v *= 1.7f; + } + } + return v; +} + +void minsect_tonbo_aim_angle_check(MUSEUM_INSECT_PRIVATE_DATA* actor) { + f32 v; + xyz_t b; + if (GETREG(NMREG, 1)) { + v = GETREG(NMREG, 1); + } else { + v = 30.f; + } + b = actor->_1C; + b.x += sin_s(actor->_70) * v; + b.z += cos_s(actor->_70) * v; + if (b.x < 80.f) { + actor->_70 = DEG2SHORT_ANGLE(90); + } else if (b.x > 480.f) { + actor->_70 = DEG2SHORT_ANGLE(-90); + actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90)); + } else if (b.z > 560.f) { + actor->_70 = DEG2SHORT_ANGLE(-180); + actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90)); + } else if (b.z < 80.f) { + actor->_70 = (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90)); + } +} + +void minsect_tonbo_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + minsect_tonbo_max_speed_set(actor); + actor->_40 = 0.0f; + if (actor->_7A) { + actor->_5C *= 1.5f; + actor->_40 = actor->_5C / 3.0f; + } + actor->_7A = 0; + actor->_78 = 0; + actor->_04 = minsect_tonbo_normal_process; +} + +void minsect_tonbo_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_78 != 2 && minsect_tonbo_bg_check(actor, game)) { + if (RANDOM_F(1.0f) > 0.9f) { + minsect_tonbo_aim_rock_process_init(actor, game); + return; + } + actor->_78 = 2; + if (RANDOM_F(1.0f) > 0.9f) { + minsect_tonbo_near_target_set(actor, game); + return; + } + actor->_6E = 0; + } + + switch (actor->_78) { + case 0: { + f32 acc; + add_calc(&actor->_40, actor->_5C, CALC_EASE(0.5f), 0.3f, 0.05f); + acc = minsect_tonbo_acc_change(actor); + if (ABS(actor->_1C.x - actor->_44.x) <= acc && ABS(actor->_1C.z - actor->_44.z) <= acc) { + actor->_78 = 1; + } + } break; + case 1: { + if (!add_calc(&actor->_40, 0.0f, CALC_EASE(0.1f), 0.25f, 0.05f)) { + actor->_78 = 2; + if (actor->_8C & 8) { + actor->_70 = DEG2SHORT_ANGLE(RANDOM2_F(90.f)); + } else { + actor->_70 += DEG2SHORT_ANGLE(RANDOM2_F(90.f)); + } + minsect_tonbo_aim_angle_check(actor); + if (actor->_7C) { + if (RANDOM_F(1.0f) > 0.9f) { + minsect_tonbo_aim_rock_process_init(actor, game); + } else if (RANDOM_F(1.0f) > 0.9f) { + minsect_tonbo_near_target_set(actor, game); + } + } + actor->_72 = 0; + } + } break; + case 2: { + if (!add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE2(0.6f), DEG2SHORT_ANGLE(15), + DEG2SHORT_ANGLE(0.25f))) { + actor->_6E--; + if (actor->_6E < 0) { + f32 v; + minsect_tonbo_max_speed_set(actor); + v = minsect_tonbo_aim_distance_set(actor); + actor->_44 = actor->_1C; + actor->_44.y += RANDOM2_F(30.f) + 5.0f; + actor->_44.y = MAX(100.f, MIN(125.f, actor->_44.y)); + actor->_44.x += v * sin_s(actor->_68.y); + actor->_44.z += v * cos_s(actor->_68.y); + actor->_7C = 1; + actor->_78 = 0; + } + } + } break; + } // end switch + + minsect_tonbo_MoveF(actor); +} + +void minsect_tonbo_aim_rock_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_74 = RANDOM_F(16.0f); + if (actor->_74 >= 6) { + actor->_74 = 6; + } + while (MI_Control_Actor->_2F9C[2] & (1 << actor->_74)) { + if (actor->_74 < 6) { + actor->_74++; + } else { + actor->_74 = 0; + } + } + MI_Control_Actor->_2F9C[2] |= (1 << actor->_74); + if (actor->_00 == 12) { + actor->_5C = (RANDOM_F(1.f) + 1.75f) * 1.7f; + actor->_6E = 0; + } else { + actor->_5C = (RANDOM_F(1.f) + 1.75f); + actor->_6E = 0; + } + actor->_40 = 0.0f; + actor->_78 = 0; + actor->_04 = minsect_tonbo_aim_rock_process; +} + +void minsect_tonbo_aim_rock_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + xyz_t p; + minsect_tonbo_rock_target_set(actor, game, &p); + if (actor->_78 != 2 && minsect_tonbo_bg_check(actor, game)) { + actor->_78 = 2; + actor->_6E = 0; + } + switch (actor->_78) { + case 0: { + f32 acc; + add_calc(&actor->_40, actor->_5C, CALC_EASE(0.5f), 0.3f, 0.05f); + acc = minsect_tonbo_acc_change(actor); + if (ABS(actor->_1C.x - actor->_44.x) <= acc && ABS(actor->_1C.z - actor->_44.z) <= acc) { + actor->_78 = 1; + } + } break; + case 1: { + if (!add_calc(&actor->_40, 0.0f, CALC_EASE(0.1f), 0.25f, 0.05f)) { + actor->_78 = 2; + if (actor->_8C & 8) { + actor->_70 = DEG2SHORT_ANGLE(RANDOM2_F(90.f)); + minsect_tonbo_aim_angle_check(actor); + } else if (RANDOM_F(1.0f) > 0.8f) { + MI_Control_Actor->_2F9C[2] &= ~(1 << actor->_74); + minsect_tonbo_normal_process_init(actor, game); + return; + } else { + actor->_70 = search_position_angleY(&actor->_1C, &p); + actor->_70 += DEG2SHORT_ANGLE2(RANDOM2_F(45.f)); + } + actor->_72 = 0; + } + } break; + case 2: { + if (!add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE2(0.6f), DEG2SHORT_ANGLE(15), + DEG2SHORT_ANGLE(0.025f))) { + actor->_6E--; + if (actor->_6E < 0) { + f32 v, s; + v = search_position_distanceXZ(&actor->_1C, &p); + s = (actor->_1C.y - p.y) * sin_s(DEG2SHORT_ANGLE(30)); + if (v < 50.f && v > s) { + minsect_tonbo_rock_process_init(actor, game); + } else { + minsect_tonbo_max_speed_set(actor); + v = minsect_tonbo_aim_distance_set(actor); + actor->_44 = actor->_1C; + actor->_44.y += RANDOM2_F(30.f) + 5.0f; + actor->_44.y = MAX(100.f, MIN(125.f, actor->_44.y)); + actor->_44.x += v * sin_s(actor->_68.y); + actor->_44.z += v * cos_s(actor->_68.y); + actor->_78 = 0; + } + } + } + } break; + } // end switch + + minsect_tonbo_MoveF(actor); +} + +void minsect_tonbo_rock_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + xyz_t p; + minsect_tonbo_rock_target_set(actor, game, &p); + actor->_44 = p; + actor->_70 = search_position_angleY(&actor->_1C, &p); + actor->_40 = 2.0f; + actor->_04 = minsect_tonbo_rock_process; +} + +void minsect_tonbo_rock_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + xyz_t p; + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + minsect_tonbo_rock_target_set(actor, game, &p); + actor->_44 = p; + if ((!player->actor_class.speed || (!minsect_tonbo_suprised_rest_player(actor, game))) && + !(player->actor_class.world.position.x > 500.f && actor->_74 >= 6 && + minsect_tonbo_suprised_rest_player(actor, game)) && + !add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE2(0.6f), DEG2SHORT_ANGLE(15), + DEG2SHORT_ANGLE(0.025f))) { + chase_xyz_t(&actor->_1C, &actor->_44, actor->_40); + add_calc(&actor->_40, 0.25f, CALC_EASE(0.1f), 0.25f, 0.05f); + add_calc_short_angle2(&actor->_76, DEG2SHORT_ANGLE(0), CALC_EASE2(0.3f), DEG2SHORT_ANGLE(15), + DEG2SHORT_ANGLE(0.025f)); + if (actor->_74 >= 6) { + f32 v = 6.0f; + f32 dist = search_position_distance(&actor->_1C, &actor->_44); + if (GETREG(NMREG, 0x10)) { + v = GETREG(NMREG, 0x10) * 0.01f; + } + if (dist < v) { + s16 s; + xyz_t p2; + v = 0.6f; + xyz_t_sub(&player->feel_pos, &player->head_pos, &p2); + if (GETREG(NMREG, 0x12)) { + v = GETREG(NMREG, 0x12) * 0.01f; + } + if (chase_s(&actor->_7E, atans_table(p2.y, p2.z), (s16)DEG2SHORT_ANGLE2(v)) && + chase_s(&actor->_80, atans_table(p2.y, -p2.x), (s16)DEG2SHORT_ANGLE2(v)) && + (f32)__fabs(actor->_1C.x - p.x) < 0.008f && (f32)__fabs(actor->_1C.y - p.y) < 0.008f && + (f32)__fabs(actor->_1C.z - p.z) < 0.008f) { + minsect_tonbo_rock_wait_process_init(actor, game); + } + } + } else if ((f32)__fabs(actor->_1C.x - p.x) < 0.008f && (f32)__fabs(actor->_1C.y - p.y) < 0.008f && + (f32)__fabs(actor->_1C.z - p.z) < 0.008f) { + minsect_tonbo_rock_wait_process_init(actor, game); + } + } +} + +void minsect_tonbo_rock_wait_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_04 = minsect_tonbo_rock_wait_process; + actor->_10 = 0.0f; + actor->_6E = (s16)RANDOM_F(540.f) + 60; +} + +void minsect_tonbo_rock_wait_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + xyz_t p; + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + minsect_tonbo_rock_target_set(actor, game, &p); + actor->_6E--; + if (actor->_10 > 0.0f) { + if ((int)actor->_0C == 1 && actor->_6E < 0) { + actor->_10 = 0.0f; + actor->_6E = (s16)RANDOM_F(540.f) + 60; + if (actor->_8E == 0) { + actor->_6E *= 5; + } + } + } else if (actor->_6E < 0) { + if (actor->_8E == 1 && RANDOM_F(1.0f) > 0.75f) { + minsect_tonbo_fly_process_init(actor, game); + } else { + actor->_10 = 0.5f; + actor->_6E = 0x10; + } + } + + mi_tonbo_check_player(actor, game); + actor->_82--; + if (actor->_82 < 0) { + actor->_82 = 0; + } + if (actor->_82 > 1600) { + actor->_82 = 1600; + } + if (actor->_8E) { + if (actor->_82 > 150) { + minsect_tonbo_fly_process_init(actor, game); + actor->_82 = 0; + } + } else { + if (actor->_82 > 1500) { + minsect_tonbo_fly_process_init(actor, game); + actor->_82 = 0; + } + } + if (!(player->actor_class.speed > 1.9f && minsect_tonbo_suprised_rest_player(actor, game)) && + !(player->actor_class.world.position.x > 500.f && minsect_tonbo_suprised_rest_player(actor, game))) { + if (actor->_74 >= 6) { + actor->_68.y += player->actor_class.shape_info.rotation.y - (player->old_shape_angle.y); + } + actor->_1C = p; + } +} + +void minsect_tonbo_fly_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + f32 v; + MI_Control_Actor->_2F9C[2] &= ~(1 << actor->_74); + actor->_5C = RANDOM_F(1.0f) + 1.75f; + v = minsect_tonbo_aim_distance_set(actor); + v *= 0.3f; + minsect_tonbo_max_speed_set(actor); + actor->_5C *= 0.7f; + actor->_44 = actor->_1C; + actor->_44.y += RANDOM_F(10.f) + 10.f; + actor->_44.y = MAX(100.f, MIN(125.f, actor->_44.y)); + actor->_44.x += v * sin_s(actor->_68.y); + actor->_44.z += v * cos_s(actor->_68.y); + actor->_04 = minsect_tonbo_fly_process; + actor->_6E = 0; + actor->_40 = 0.0f; + actor->_10 = 0.5f; + actor->_7A = 0; + actor->_7C = 0; +} + +void minsect_tonbo_fly_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (minsect_tonbo_bg_check(actor, game)) { + actor->_44.y = MAX(100.f, MIN(125.f, actor->_44.y)); + minsect_tonbo_normal_process_init(actor, game); + } else { + f32 v; + minsect_tonbo_MoveF(actor); + add_calc(&actor->_40, actor->_5C, CALC_EASE(0.7f), 0.5f, 0.5f); + v = minsect_tonbo_acc_change(actor); + if (ABS(actor->_1C.y - actor->_44.y) <= 10.f && ABS(actor->_1C.x - actor->_44.x) <= v && + ABS(actor->_1C.z - actor->_44.z) <= v) { + minsect_tonbo_normal_process_init(actor, game); + actor->_78 = 1; + } + } +} + +void minsect_tonbo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_8E = get_now_mind_flag(actor, game); + actor->_04(actor, game); + if (actor->_04 != minsect_tonbo_rock_process && actor->_04 != minsect_tonbo_rock_wait_process && + actor->_04 != minsect_tonbo_fly_process) { + actor->_76 += 910; + actor->_58 = 4.0f * sin_s(actor->_76); + } else { + add_calc0(&actor->_58, 0.1f, 0.1f); + actor->_76 = 0; + } + minsect_tree_ObjCheck(actor); + minsect_fly_BGCheck(actor, 600.0f, 280.0f); + if (actor->_8C & 0x10) { + actor->_1C.z = 600.f; + } + if (actor->_8C & 0x9e) { + actor->_72 = actor->_8C; + } + actor->_0C += actor->_10; + if (!minsect_mdl[actor->_00][(int)actor->_0C]) { + actor->_0C = 1.0f; + } +} + +void minsect_tonbo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + xyz_t arr[2] = { { 0.f, 22.f, 0.f }, { 0.f, 27.f, 0.f } }; + float g_f[2] = { 1.f, -12.f }; + search_position_distance(&actor->_1C, &actor->_44); + _texture_z_light_fog_prim_xlu(game->graph); + _texture_z_light_fog_prim(game->graph); + if (((actor->_04 == minsect_tonbo_rock_wait_process) && (actor->_74 >= 6)) || + ((actor->_04 == minsect_tonbo_rock_process && (actor->_74 >= 6))) || GETREG(NMREG, 0x13)) { + int gender = Common_Get(now_private)->gender; + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + if (GETREG(NMREG, 0x11)) { + arr[gender].y = GETREG(NMREG, 0x11) * 0.01f; + } + arr[gender].x += g_f[gender] * sin_s(player->actor_class.shape_info.rotation.y); + arr[gender].z += g_f[gender] * cos_s(player->actor_class.shape_info.rotation.y); + Matrix_translate(actor->_1C.x - arr[gender].x, actor->_58 + (actor->_1C.y - arr[gender].y), + actor->_1C.z - arr[gender].z, FALSE); + Matrix_rotateXYZ(actor->_7E, 0, actor->_80, TRUE); + Matrix_translate(arr[gender].x, arr[gender].y, arr[gender].z, TRUE); + } else { + Matrix_translate(actor->_1C.x, actor->_1C.y + actor->_58, actor->_1C.z, FALSE); + } + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + + OPEN_POLY_XLU_DISP(game->graph); + gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][(int)actor->_0C]); + CLOSE_POLY_XLU_DISP(game->graph); + + OPEN_DISP(game->graph); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + CLOSE_DISP(game->graph); + minsect_draw_shadow(actor, game); +} + +void minsect_tonbo_MoveF(MUSEUM_INSECT_PRIVATE_DATA* actor) { + xyz_t p = actor->_44; + f32 v = search_position_distance(&actor->_1C, &actor->_44); + if (actor->_00 == 12) { + if (actor->_8C & 0x1e && !(actor->_8C & 8)) { + v = 0.0f; + } else { + v = -v * 0.01f; + } + p.y += v; + } else { + if (actor->_8C & 0x1e && !(actor->_8C & 8)) { + v = 0.0f; + } else { + v = -v * 0.15f; + } + p.y += v; + } + chase_xyz_t(&actor->_1C, &p, actor->_40); +} From 105a19676ea7a8ae5dba6f8c0ba4d868db43abe9 Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 8 Feb 2025 19:55:30 -0500 Subject: [PATCH 05/26] match museum_insect_batta.c_inc --- include/ac_museum_insect_priv.h | 34 ++-- src/actor/ac_museum_insect_base.c_inc | 6 +- src/actor/ac_museum_insect_batta.c_inc | 253 +++++++++++++++++++++++++ 3 files changed, 273 insertions(+), 20 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index 682ebe8e..eb4e47d0 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -117,12 +117,12 @@ void minsect_ari_mv(void); void minsect_ari_dw(void); void minsect_draw_shadow(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_fly_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2); -void minsect_garden_BGCheck(void); +void minsect_garden_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2); void minsect_flower_BGCheck(void); void minsect_goki_BGCheck(void); -void minsect_kanban_BGCheck(void); +void minsect_kanban_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); void minsect_tree_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); -void minsect_rock_ObjCheck(void); +void minsect_rock_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); void minsect_batta_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); BOOL get_now_mind_flag(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void set_relax_active_time(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); @@ -173,20 +173,20 @@ void minsect_tonbo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_tonbo_MoveF(MUSEUM_INSECT_PRIVATE_DATA* actor); // ac_museum_insect_batta.c_inc -void mi_batta_check_player(void); -void mi_batta_suzumushi_hane_anime(void); -void mi_batta_hane_anime(void); -void minsect_batta_ct(void); -void minsect_batta_normal_process_init(void); -void minsect_batta_normal_process(void); -void minsect_batta_silent_process_init(void); -void minsect_batta_silent_process(void); -void minsect_batta_jump_wait_process_init(void); -void minsect_batta_jump_wait_process(void); -void minsect_batta_jump_process_init(void); -void minsect_batta_jump_process(void); -void minsect_batta_mv(void); -void minsect_batta_dw(void); +void mi_batta_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_batta_suzumushi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor); +void mi_batta_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor); +void minsect_batta_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_batta_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_batta_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_batta_silent_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_batta_silent_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_batta_jump_wait_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_batta_jump_wait_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_batta_jump_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_batta_jump_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_batta_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_batta_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_tentou.c_inc void mi_tentou_check_player(void); diff --git a/src/actor/ac_museum_insect_base.c_inc b/src/actor/ac_museum_insect_base.c_inc index 6a34c143..745031cd 100644 --- a/src/actor/ac_museum_insect_base.c_inc +++ b/src/actor/ac_museum_insect_base.c_inc @@ -44,17 +44,17 @@ void minsect_draw_shadow(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } void minsect_fly_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2) { } -void minsect_garden_BGCheck(void) { +void minsect_garden_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2) { } void minsect_flower_BGCheck(void) { } void minsect_goki_BGCheck(void) { } -void minsect_kanban_BGCheck(void) { +void minsect_kanban_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { } void minsect_tree_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { } -void minsect_rock_ObjCheck(void) { +void minsect_rock_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { } void minsect_batta_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { diff --git a/src/actor/ac_museum_insect_batta.c_inc b/src/actor/ac_museum_insect_batta.c_inc index 356389bc..66e27312 100644 --- a/src/actor/ac_museum_insect_batta.c_inc +++ b/src/actor/ac_museum_insect_batta.c_inc @@ -1 +1,254 @@ #include "ac_museum_insect_priv.h" + +void mi_batta_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + f32 v = search_position_distance(&actor->_1C, &player->actor_class.world.position); + if (v < 60.f) { + if (player->actor_class.speed > 1.4f) { + actor->_7E += (s16)((v / 60.f) * 8.f); + } else if (player->actor_class.speed > 5.0f) { + actor->_7E += (s16)((v / 60.f) * 20.f); + } + } +} + +void mi_batta_suzumushi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { + static f32 scaleX_table[7]; + if (actor->_82 < 7) { + if (chase_f(&actor->_58, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_82], 0.23f) == 1) { + actor->_82--; + if (actor->_82 < 0) { + actor->_82 = 0; + } + } + } else { + actor->_82--; + } +} + +void mi_batta_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { + static f32 scaleX_table[7]; + if (actor->_7C < 7) { + if (chase_f(&actor->_58, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_7C], 0.23f) == 1) { + actor->_7C--; + if (actor->_7C < 0) { + actor->_7C = 0; + } + } + } else { + actor->_7C--; + } +} + +void minsect_batta_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + static const xyz_t batta_init_pos = { 280.f, 45.f, 440.f }; + actor->_1C = batta_init_pos; + actor->_1C.x += RANDOM2_F(300.f); + actor->_1C.z += RANDOM2_F(140.f); + actor->_68 = ZeroSVec; + actor->_34 = ZeroVec; + actor->_44 = ZeroVec; + actor->_44.y = -0.05f; + actor->_68.y = qrand(); + actor->_70 = qrand(); + actor->_72 = 0; + actor->_74 = 0; + actor->_7A = 0; + actor->_58 = 1.0f; + actor->_7C = 0; + actor->_82 = 0; + minsect_batta_normal_process_init(actor, game); +} + +void minsect_batta_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + s16 s = qrand(); + xyz_t p = actor->_1C; + p.x += 30.f * sin_s(s); + p.z += 30.f * cos_s(s); + actor->_04 = minsect_batta_normal_process; + if (p.x < 130.f) { + actor->_70 = DEG2SHORT_ANGLE(90); + } else if (p.x > 430.f) { + actor->_70 = DEG2SHORT_ANGLE(-90); + actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90)); + } else if (p.z > 510.f) { + actor->_70 = DEG2SHORT_ANGLE(-180); + actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90)); + } else if (p.z < 370.f) { + actor->_70 = DEG2SHORT_ANGLE(RANDOM2_F(90)); + } else { + actor->_70 = s; + } + actor->_78 = DEG2SHORT_ANGLE(-7); + actor->_7A = 0; +} + +void minsect_batta_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_76 == DEG2SHORT_ANGLE(-7) && actor->_78) { + actor->_78 = 0; + } + if (!add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE2(0.5), DEG2SHORT_ANGLE(15), + DEG2SHORT_ANGLE(0.25f))) { + if (actor->_74 == 0 && RANDOM_F(1.0f) > 0.3f) { + actor->_74 = 1; + if (RANDOM_F(1.0f) >= 0.5f) { + actor->_70 += (s16)(DEG2SHORT_ANGLE(RANDOM_F(30)) + DEG2SHORT_ANGLE(20)); + } else { + actor->_70 -= (s16)(DEG2SHORT_ANGLE(RANDOM_F(30)) + DEG2SHORT_ANGLE(20)); + } + actor->_78 = DEG2SHORT_ANGLE(-7); + } else { + if (RANDOM_F(1.0f) > 0.8f || GETREG(NMREG, 2)) { + minsect_batta_silent_process_init(actor, game); + } else { + minsect_batta_jump_wait_process_init(actor, game); + } + } + } +} + +void minsect_batta_silent_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E = (s16)((s16)RANDOM_F(360) + 120) * 5; + if (actor->_8E == 0) { + actor->_6E = (s16)((s16)RANDOM_F(360.f) + 120) * 2; + } + actor->_04 = minsect_batta_silent_process; + return; +} + +void minsect_batta_silent_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_6E-- < 0) { + if (RANDOM_F(1.0f) > 0.6f) { + minsect_batta_jump_process_init(actor, game); + } else { + minsect_batta_normal_process_init(actor, game); + } + } +} + +void minsect_batta_jump_wait_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_74 = 0; + actor->_6E = (s16)RANDOM_F(360.f) + 120; + if (actor->_8E == 0) { + actor->_6E *= 5; + } + actor->_04 = minsect_batta_jump_wait_process; + actor->_78 = 0; +} + +void minsect_batta_jump_wait_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_6E-- < 0) { + minsect_batta_jump_process_init(actor, game); + } +} + +void minsect_batta_jump_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_40 = RANDOM_F(1.0f) + 1.0f; + actor->_34.y = 0.75f; + actor->_04 = minsect_batta_jump_process; + if (RANDOM_F(1.0f) > 0.6f || GETREG(NMREG, 2)) { + actor->_7A = 1; + actor->_7C = 7; + } +} + +void minsect_batta_jump_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_68.x = -atans_table(actor->_40, actor->_34.y); + if (actor->_34.y < 0.0f && actor->_8C & 0x20) { + actor->_40 = 0.f; + actor->_68.x = 0; + minsect_batta_normal_process_init(actor, game); + } + mi_batta_hane_anime(actor); + if (actor->_7C <= 0) { + actor->_7C = 7; + } +} + +void minsect_batta_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + static u8 batta_sound_data[4] = { 0x9f, 0x9e, 0xa0, 0x9d }; + actor->_8E = get_now_mind_flag(actor, game); + mi_batta_check_player(actor, game); + actor->_7E--; + if (actor->_7E < 0) { + actor->_7E = 0; + } + if (actor->_7E > 1600) { + actor->_7E = 1600; + } + + if (actor->_8E) { + if (actor->_7E > 150 && actor->_04 != minsect_batta_jump_process) { + minsect_batta_jump_process_init(actor, game); + actor->_7E = 0; + } + } else { + if (actor->_7E > 1000 && actor->_04 != minsect_batta_jump_process) { + minsect_batta_jump_process_init(actor, game); + actor->_7E = 0; + } + } + + if (actor->_00 >= 15 && actor->_04 != minsect_batta_jump_process) { + int id = actor->_00 - 15; + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + xyz_t p = player->actor_class.world.position; + f32 dist = search_position_distanceXZ(&actor->_1C, &p); + if (actor->_04 != minsect_batta_silent_process && actor->_8E) { + if (actor->_00 == 17) { + mi_batta_suzumushi_hane_anime(actor); + if (actor->_82 <= 0) { + actor->_82 = 7; + } + } + if (dist < 200.f) { + sAdo_OngenPos((u32)actor, batta_sound_data[id], &actor->_1C); + } + } else if (actor->_04 == minsect_batta_silent_process && actor->_8E == 0) { + if (actor->_00 == 17) { + mi_batta_suzumushi_hane_anime(actor); + if (actor->_82 <= 0) { + actor->_82 = 7; + } + } + if (dist < 200.f) { + sAdo_OngenPos((u32)actor, batta_sound_data[id], &actor->_1C); + } + } + } + + actor->_04(actor, game); + mID_insect_moveF(actor); + actor->_34.y += actor->_44.y; + minsect_batta_ObjCheck(actor); + minsect_tree_ObjCheck(actor); + minsect_rock_ObjCheck(actor); + minsect_kanban_BGCheck(actor); + minsect_garden_BGCheck(actor, 510.0, 370.0); + add_calc_short_angle2(&actor->_76, actor->_78, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f)); +} + +void minsect_batta_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim(game->graph); + + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + Matrix_rotateXYZ(actor->_76, 0, 0, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + CLOSE_DISP(game->graph); + + if (actor->_7A || actor->_00 == 17) { + _texture_z_light_fog_prim_xlu(game->graph); + OPEN_POLY_XLU_DISP(game->graph); + gDPSetEnvColor(POLY_XLU_DISP++, 0xff, 0xff, 0xff, 0xff); + Matrix_scale(actor->_58, 1.0f, 1.0f, TRUE); + gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][1]); + CLOSE_POLY_XLU_DISP(game->graph); + } + + minsect_draw_shadow(actor, game); +} From 79904507e80b4ae0c39d1ab95bcf4b23a8d951d5 Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 8 Feb 2025 22:52:57 -0500 Subject: [PATCH 06/26] match tentou --- include/ac_museum_insect_priv.h | 30 +-- src/actor/ac_museum_insect_base.c_inc | 2 +- src/actor/ac_museum_insect_tentou.c_inc | 250 ++++++++++++++++++++++++ 3 files changed, 267 insertions(+), 15 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index eb4e47d0..794c8692 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -40,7 +40,8 @@ typedef struct _MUSEUM_INSECT_PRIVATE_DATA { int _54; f32 _58; f32 _5C; - artificial_padding(0x5C, 0x68, int); + f32 _60; + artificial_padding(0x60, 0x68, int); s_xyz _68; s16 _6E; s16 _70; @@ -90,6 +91,7 @@ extern xyz_t ohmurasaki_tree_pos; extern s16 aim_angle_tbl[6]; extern Gfx** minsect_mdl[40]; extern xyz_t tonbo_rock_pos[1]; +extern xyz_t tentou_flower_pos[1]; // ac_museum_insect.c int Museum_Insect_GetMsgNo(ACTOR* actorx); @@ -118,7 +120,7 @@ void minsect_ari_dw(void); void minsect_draw_shadow(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_fly_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2); void minsect_garden_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2); -void minsect_flower_BGCheck(void); +void minsect_flower_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, const xyz_t* p); void minsect_goki_BGCheck(void); void minsect_kanban_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); void minsect_tree_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); @@ -189,18 +191,18 @@ void minsect_batta_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_batta_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_tentou.c_inc -void mi_tentou_check_player(void); -void mi_tentou_kama_anime(void); -void mi_tentou_wait_init(void); -void mi_tentou_wait(void); -void mi_tentou_move_init(void); -void mi_tentou_move(void); -void mi_tentou_menace_init(void); -void mi_tentou_menace(void); -void mi_tentou_setupAction(void); -void minsect_tentou_ct(void); -void minsect_tentou_mv(void); -void minsect_tentou_dw(void); +void mi_tentou_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_tentou_kama_anime(MUSEUM_INSECT_PRIVATE_DATA* actor); +void mi_tentou_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_tentou_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_tentou_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_tentou_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_tentou_menace_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_tentou_menace(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_tentou_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game); +void minsect_tentou_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tentou_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_tentou_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_hachi.c_inc void mi_hachi_hane_anime(void); diff --git a/src/actor/ac_museum_insect_base.c_inc b/src/actor/ac_museum_insect_base.c_inc index 745031cd..1de02a44 100644 --- a/src/actor/ac_museum_insect_base.c_inc +++ b/src/actor/ac_museum_insect_base.c_inc @@ -46,7 +46,7 @@ void minsect_fly_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2) { } void minsect_garden_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2) { } -void minsect_flower_BGCheck(void) { +void minsect_flower_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, const xyz_t* p) { } void minsect_goki_BGCheck(void) { } diff --git a/src/actor/ac_museum_insect_tentou.c_inc b/src/actor/ac_museum_insect_tentou.c_inc index 356389bc..ad9593dd 100644 --- a/src/actor/ac_museum_insect_tentou.c_inc +++ b/src/actor/ac_museum_insect_tentou.c_inc @@ -1 +1,251 @@ #include "ac_museum_insect_priv.h" + +void mi_tentou_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position); + if (dist < 80.f) { + if (player->actor_class.speed > 1.4f) { + actor->_80 += (s16)((dist / 80.f) * 8.f); + } else if (player->actor_class.speed > 5.f) { + actor->_80 += (s16)((dist / 80.f) * 20.f); + } + } +} + +void mi_tentou_kama_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { + const static f32 scaleX_table[1]; + if (actor->_7E < 7) { + if (chase_f(&actor->_5C, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_7E], 0.115f) == 1) { + actor->_7E--; + if (actor->_7E < 0) { + actor->_7E = (s16)(RANDOM_F(2.0F) * 60.0f) + 67; + } + } + } else { + actor->_7E--; + } +} + +void mi_tentou_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E = (int)(RANDOM_F(300.f)) + 100.f; + actor->_7C = (int)(RANDOM_F(20.f)) + 5.f; + if (actor->_8E == 0 && actor->_00 != 32) { + actor->_6E *= 10; + } +} + +void mi_tentou_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + actor->_7C--; + if (actor->_7C < 0) { + if (actor->_76 != 0) { + actor->_76 = 0; + actor->_7C = (int)RANDOM_F(20.f) + 5.f; + } else { + actor->_76 = 910; + actor->_72 = qrand(); + } + } + if (actor->_6E < 0 && actor->_74 == 0) { + mi_tentou_setupAction(actor, 1, game); + } + add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(0.25f), DEG2SHORT_ANGLE(0.125f)); + if (actor->_00 != 32) { + add_calc_short_angle2(&actor->_74, actor->_76, CALC_EASE2(0.8f), DEG2SHORT_ANGLE(1.f), DEG2SHORT_ANGLE(0.25f)); + } else { + add_calc_short_angle2(&actor->_74, actor->_76, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.25f)); + } +} + +void mi_tentou_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E = (int)RANDOM_F(300.f) + 30.f; +} + +void mi_tentou_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + xyz_t* tentou_pos = &tentou_flower_pos[actor->_70]; + if (actor->_6E-- > 0 && actor->_40 > 0.0f) { + if (actor->_74 == actor->_76) { + if (actor->_76 != 0) { + actor->_76 = 0; + } else { + actor->_76 = 910; + } + } + if (actor->_8C & 2) { + xyz_t p; + s16 ang; + xyz_t_sub(tentou_pos, &actor->_1C, &p); + ang = atans_table(p.z, p.x); + if ((s16)(ang - actor->_68.y) > 0) { + actor->_72 = ang - DEG2SHORT_ANGLE2(90); + } else { + actor->_72 = ang + DEG2SHORT_ANGLE2(90); + } + } else { + if (ABS((s16)(actor->_68.y - actor->_72)) < 3640) { + actor->_72 = qrand(); + } + } + if (actor->_00 != 32) { + add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(0.25), + DEG2SHORT_ANGLE(0.125)); + } else { + add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(0.25), + DEG2SHORT_ANGLE(0.125)); + } + } else { + if (actor->_40 > 0.0f) { + actor->_40 = 0.0f; + actor->_6E = (int)RANDOM_F(300.f) + 100.f; + if (actor->_8E == 0 && actor->_00 != 32) { + actor->_6E <<= 1; + } + } + if (actor->_6E-- < 0) { + if (RANDOM_F(1.0f) > 0.9f) { + mi_tentou_setupAction(actor, 0, game); + return; + } + actor->_40 = actor->_58; + actor->_6E = (int)RANDOM_F(300.f) + 30.f; + if (actor->_00 == 32) { + actor->_6E <<= 1; + } + } + } + mID_insect_moveF(actor); + actor->_34.y += actor->_44.y; + minsect_flower_BGCheck(actor, tentou_pos); + if (actor->_00 != 32) { + add_calc_short_angle2(&actor->_74, actor->_76, CALC_EASE2(0.8f), DEG2SHORT_ANGLE(1.0f), DEG2SHORT_ANGLE(0.25f)); + } else { + add_calc_short_angle2(&actor->_74, actor->_76, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.25f)); + } +} + +void mi_tentou_menace_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E = (int)RANDOM_F(600.f) + 200.f; + actor->_76 = DEG2SHORT_ANGLE(-40); + actor->_7C = (int)RANDOM_F(20.f) + 5.f; + actor->_7E = (int)(RANDOM_F(2.f) * 60.f) + 67; +} + +void mi_tentou_menace(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + s16 target = search_position_angleY(&actor->_1C, &player->actor_class.world.position); + mi_tentou_kama_anime(actor); + actor->_6E--; + actor->_7C--; + if (actor->_7C < 0) { + actor->_7C = (int)RANDOM_F(20.f) + 5.f; + if (actor->_7A) { + actor->_7A = 0; + } else { + actor->_7A = 1274; + } + } + if (actor->_76) { + add_calc(&actor->_60, GETREG(NMREG, 0xf) * 0.01f + 5.0f, CALC_EASE(0.1f), 0.25f, 0.05f); + } else { + add_calc(&actor->_60, 0.0f, CALC_EASE(0.1f), 0.25f, 0.05f); + } + if (actor->_6E < 0) { + actor->_76 = 0; + if (actor->_74 == 0) { + mi_tentou_setupAction(actor, 1, game); + return; + } + } + if ((int)((actor->_68.y * (180.f / 0x8000)) - (target * (180.f / 0x8000))) % 5 == 0) { + if (actor->_7A) { + actor->_7A = 0; + } else { + actor->_7A = 1274; + } + } + add_calc_short_angle2(&actor->_78, actor->_7A, CALC_EASE2(GETREG(NMREG, 0x5c) * 0.01f + 0.8f), + (s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 0x5b) * 0.01f + 4.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_68.y, target, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f)); + add_calc_short_angle2(&actor->_74, actor->_76, CALC_EASE2(GETREG(NMREG, 0x5e) * 0.01f + 0.8f), + (s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 0x5f) * 0.01f + 8.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); +} + +void mi_tentou_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) { + static PRIV_INSECT_PROCESS move_proc[1]; + static PRIV_INSECT_PROCESS init_proc[1]; + actor->_04 = move_proc[r4]; + init_proc[r4](actor, game); +} + +void minsect_tentou_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + switch (actor->_00) { + case 0x18: { + actor->_70 = 0; + actor->_1C = tentou_flower_pos[actor->_70]; + } break; + case 0x19: { + actor->_70 = 1; + actor->_1C = tentou_flower_pos[actor->_70]; + } break; + case 0x1a: { + actor->_70 = 2; + actor->_1C = tentou_flower_pos[actor->_70]; + } break; + default: + case 0x20: { + actor->_70 = 3; + actor->_1C = tentou_flower_pos[actor->_70]; + } break; + } + actor->_80 = 0; + actor->_74 = 0; + actor->_76 = 0; + actor->_68 = ZeroSVec; + actor->_34 = ZeroVec; + actor->_44 = ZeroVec; + actor->_44.y = -0.125f; + actor->_68 = ZeroSVec; + actor->_68.y = qrand(); + actor->_40 = 0.0f; + mi_tentou_setupAction(actor, 1, game); + if (actor->_00 != 32) { + actor->_58 = 0.125f; + } else { + actor->_58 = 0.025f; + } + actor->_78 = 0; + actor->_7A = 0; + actor->_5C = 1.0f; + actor->_6E = (s16)(RANDOM_F(100.f) + 20.f); +} + +void minsect_tentou_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_00 == 0x1a) { + mi_tentou_check_player(actor, game); + actor->_80--; + if (actor->_80 < 0) { + actor->_80 = 0; + } + if (actor->_80 > 900) { + actor->_80 = 900; + } + if (actor->_80 > 500) { + mi_tentou_setupAction(actor, 2, game); + } + } + actor->_04(actor, game); +} + +void minsect_tentou_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim(game->graph); + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y + actor->_60, actor->_1C.z, FALSE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + Matrix_rotateXYZ(actor->_74 + actor->_78, 0, 0, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + Matrix_scale(actor->_5C, 1.0f, 1.0f, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + CLOSE_DISP(game->graph); +} From 644a9bfc141e227a4c46621bfe2badad3e374a7b Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 9 Feb 2025 12:26:31 -0500 Subject: [PATCH 07/26] match hachi --- include/ac_museum_insect_priv.h | 23 +-- src/actor/ac_museum_insect_hachi.c_inc | 197 +++++++++++++++++++++++++ 2 files changed, 209 insertions(+), 11 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index 794c8692..db89820b 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -92,6 +92,7 @@ extern s16 aim_angle_tbl[6]; extern Gfx** minsect_mdl[40]; extern xyz_t tonbo_rock_pos[1]; extern xyz_t tentou_flower_pos[1]; +extern xyz_t hachi_base_pos; // ac_museum_insect.c int Museum_Insect_GetMsgNo(ACTOR* actorx); @@ -205,17 +206,17 @@ void minsect_tentou_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_tentou_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_hachi.c_inc -void mi_hachi_hane_anime(void); -void mi_hachi_mitu_init(void); -void mi_hachi_mitu(void); -void mi_hachi_wait_init(void); -void mi_hachi_wait(void); -void mi_hachi_move_init(void); -void mi_hachi_move(void); -void mi_hachi_setupAction(void); -void minsect_hachi_ct(void); -void minsect_hachi_mv(void); -void minsect_hachi_dw(void); +void mi_hachi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor); +void mi_hachi_mitu_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_hachi_mitu(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_hachi_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_hachi_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_hachi_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_hachi_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_hachi_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game); +void minsect_hachi_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_hachi_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_hachi_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_kabuto.c_inc void minsect_kabuto_ct(void); diff --git a/src/actor/ac_museum_insect_hachi.c_inc b/src/actor/ac_museum_insect_hachi.c_inc index 356389bc..00f57d76 100644 --- a/src/actor/ac_museum_insect_hachi.c_inc +++ b/src/actor/ac_museum_insect_hachi.c_inc @@ -1 +1,198 @@ #include "ac_museum_insect_priv.h" + +void mi_hachi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { + static f32 scaleX_table[7]; + if (actor->_78 < 7) { + if (chase_f(&actor->_5C, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_78], 0.115f) == 1) { + actor->_78--; + if (actor->_78 < 0) { + actor->_78 = (s16)(RANDOM_F(3.0f) * 60.f) + 187; + } + } + } else { + actor->_78--; + } +} + +void mi_hachi_mitu_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E = 0; + actor->_7A = 0; +} + +void mi_hachi_mitu(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + if (actor->_6E < 0) { + if (actor->_7A > (s16)(((s16)RANDOM_F(10.f) << 1) + 0x10)) { + mi_hachi_setupAction(actor, 0, game); + return; + } + actor->_72 = -1820; + actor->_58 = GETREG(NMREG, 8) * 0.01f; + actor->_6E = 10; + actor->_7A++; + } + if (actor->_70 == actor->_72) { + actor->_72 = 0; + actor->_58 = 0.0f; + } + if (GETREG(NMREG, 4)) { + actor->_74 = DEG2SHORT_ANGLE(GETREG(NMREG, 4) * 0.01f); + } + if (GETREG(NMREG, 5)) { + actor->_76 = DEG2SHORT_ANGLE(GETREG(NMREG, 5) * 0.01f); + } + if (GETREG(NMREG, 6)) { + actor->_44.y = GETREG(NMREG, 6) * 0.01f; + } +} + +void mi_hachi_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E = (s16)RANDOM_F(120.f) + 40; + if (actor->_8E == 0) { + actor->_6E *= 10; + } +} + +void mi_hachi_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + if (actor->_6E < 0) { + if (RANDOM_F(1.0f) > 0.9f || GETREG(NMREG, 0)) { + if (RANDOM_F(1.0f) > 0.5f) { + mi_hachi_setupAction(actor, 1, game); + } else { + mi_hachi_setupAction(actor, 2, game); + } + return; + } + actor->_72 = -1820; + actor->_74 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(30.f)); + actor->_58 = GETREG(NMREG, 8) * 0.01f; + actor->_6E = (s16)RANDOM_F(120.f) + 40; + if (actor->_8E == 0) { + actor->_6E *= 10; + } + } + if (actor->_70 == actor->_72) { + actor->_72 = 0; + actor->_58 = 0.0f; + } + if (GETREG(NMREG, 4)) { + actor->_74 = DEG2SHORT_ANGLE(GETREG(NMREG, 4) * 0.01f); + } + if (GETREG(NMREG, 5)) { + actor->_76 = DEG2SHORT_ANGLE(GETREG(NMREG, 5) * 0.01f); + } + if (GETREG(NMREG, 6)) { + actor->_44.y = GETREG(NMREG, 6) * 0.01f; + } +} + +void mi_hachi_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E = (s16)RANDOM_F(720.f) + 360; +} + +void mi_hachi_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + if (actor->_6E < 0) { + if (RANDOM_F(1.0f) > 0.2f || GETREG(NMREG, 1)) { + if (RANDOM_F(1.0f) > 0.5f) { + mi_hachi_setupAction(actor, 0, game); + return; + } else { + mi_hachi_setupAction(actor, 2, game); + return; + } + } + actor->_6E = (s16)RANDOM_F(720.f) + 360; + } + + if (!actor->_70) { + f32 v; + actor->_72 = -1820; + if (RANDOM_F(1.0f) > 0.5f) { + actor->_74 += (s16)DEG2SHORT_ANGLE2(RANDOM_F(30.f) + 10.f); + } else { + actor->_74 -= (s16)DEG2SHORT_ANGLE2(RANDOM_F(30.f) + 10.f); + } + actor->_58 = GETREG(NMREG, 8) * 0.01f + 1.0f; + v = -0.5f * sin_s(actor->_74); + actor->_76 += RAD2SHORT_ANGLE(v / 15.f); + actor->_44.y += cos_s(actor->_74) * 0.5f; + if (actor->_44.y > 10.f) { + actor->_74 = DEG2SHORT_ANGLE(RANDOM2_F(60.f)) + DEG2SHORT_ANGLE(180); + actor->_44.y = 10.f; + } else if (actor->_44.y < -10.f) { + actor->_74 = DEG2SHORT_ANGLE(RANDOM2_F(60.f)); + actor->_44.y = -10.f; + } + if (actor->_76 > DEG2SHORT_ANGLE(30)) { + actor->_74 = DEG2SHORT_ANGLE(RANDOM2_F(60.f)) + DEG2SHORT_ANGLE(90); + actor->_76 = DEG2SHORT_ANGLE(30); + } else if (actor->_76 < DEG2SHORT_ANGLE(-30)) { + actor->_74 = DEG2SHORT_ANGLE(RANDOM2_F(60.f)) - DEG2SHORT_ANGLE(90); + actor->_76 = DEG2SHORT_ANGLE(-30); + } + } else if (actor->_70 == actor->_72) { + actor->_72 = 0; + actor->_58 = 0.0f; + } +} + +void mi_hachi_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) { + static PRIV_INSECT_PROCESS init_proc[1]; + static PRIV_INSECT_PROCESS move_proc[1]; + actor->_04 = move_proc[r4]; + init_proc[r4](actor, game); +} + +void minsect_hachi_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_1C = ZeroVec; + actor->_68 = ZeroSVec; + actor->_44 = actor->_1C; + actor->_76 = 0; + actor->_5C = 1.0f; + actor->_78 = (s16)(RANDOM_F(5.0f) * 60.f) + 307; + mi_hachi_setupAction(actor, 0, game); +} + +void minsect_hachi_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_8E = get_now_mind_flag(actor, game); + mi_hachi_hane_anime(actor); + actor->_04(actor, game); + add_calc_short_angle2(&actor->_70, actor->_72, CALC_EASE2(GETREG(NMREG, 0x5e) * 0.01f + 0.8f), + (s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 0x5F) * 0.01f + 4.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_68.z, actor->_74, CALC_EASE2(0.4f), + (s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 3) * 0.01f + 5.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_68.y, actor->_76, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f)); + add_calc(&actor->_40, actor->_58, CALC_EASE(0.1f), 0.25f, 0.05f); + chase_xyz_t(&actor->_1C, &actor->_44, actor->_40); +} + +void minsect_hachi_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim(game->graph); + OPEN_DISP(game->graph); + Matrix_translate(hachi_base_pos.x, hachi_base_pos.y, hachi_base_pos.z, FALSE); + Matrix_rotateXYZ(DEG2SHORT_ANGLE(-20), 0, 0, TRUE); + Matrix_translate(0.0f, actor->_1C.y, 0.0f, TRUE); + Matrix_translate(-GETREG(NMREG, 0x10) * 0.01f, -GETREG(NMREG, 0x11) * 0.01f, -15.f - GETREG(NMREG, 0xe) * 0.01f, + TRUE); + Matrix_rotateXYZ(0, actor->_68.y, 0, TRUE); + Matrix_translate(GETREG(NMREG, 0x10) * 0.01f, GETREG(NMREG, 0x11) * 0.01f, 15.f + GETREG(NMREG, 0xe) * 0.01f, TRUE); + Matrix_rotateXYZ(0, 0, actor->_68.z, TRUE); + Matrix_rotateXYZ(actor->_70, 0, 0, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + Matrix_rotateXYZ(DEG2SHORT_ANGLE(90), 0, DEG2SHORT_ANGLE(-180), TRUE); + + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + CLOSE_DISP(game->graph); + + _texture_z_light_fog_prim_xlu(game->graph); + OPEN_POLY_XLU_DISP(game->graph); + gDPSetEnvColor(POLY_XLU_DISP++, 0xff, 0xff, 0xff, 0xff); + Matrix_scale(actor->_5C, 1.0f, 1.0f, TRUE); + gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][1]); + CLOSE_POLY_XLU_DISP(game->graph); +} From 8a59c301e4faddd52b51ee4313f517118469695e Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 9 Feb 2025 15:36:05 -0500 Subject: [PATCH 08/26] match kabuto --- include/ac_museum_insect_priv.h | 7 +- src/actor/ac_museum_insect_kabuto.c_inc | 134 ++++++++++++++++++++++++ 2 files changed, 138 insertions(+), 3 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index db89820b..ef69f446 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -93,6 +93,7 @@ extern Gfx** minsect_mdl[40]; extern xyz_t tonbo_rock_pos[1]; extern xyz_t tentou_flower_pos[1]; extern xyz_t hachi_base_pos; +extern xyz_t kabuto_base_pos[1]; // ac_museum_insect.c int Museum_Insect_GetMsgNo(ACTOR* actorx); @@ -219,9 +220,9 @@ void minsect_hachi_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_hachi_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_kabuto.c_inc -void minsect_kabuto_ct(void); -void minsect_kabuto_mv(void); -void minsect_kabuto_dw(void); +void minsect_kabuto_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kabuto_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kabuto_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_kuwagata.c_inc void mi_kuwagata_rensa_init(void); diff --git a/src/actor/ac_museum_insect_kabuto.c_inc b/src/actor/ac_museum_insect_kabuto.c_inc index 356389bc..64356adb 100644 --- a/src/actor/ac_museum_insect_kabuto.c_inc +++ b/src/actor/ac_museum_insect_kabuto.c_inc @@ -1 +1,135 @@ #include "ac_museum_insect_priv.h" + +void minsect_kabuto_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + switch (actor->_00) { + case 8: + actor->_70 = 0; + break; + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + actor->_70 = actor->_00 - 0x12; + break; + case 0x1e: + case 0x1f: + default: + actor->_70 = actor->_00 - 0x17; + break; + } + actor->_1C = kabuto_base_pos[actor->_70]; + actor->_44 = actor->_1C; + actor->_34 = ZeroVec; + actor->_40 = 0.05f; + actor->_68 = ZeroSVec; + actor->_72 = qrand(); + actor->_6E = (s16)RANDOM_F(120) + 60; + actor->_78 = (s16)RANDOM_F(60) + 60; + actor->_7A = 0; +} + +void minsect_kabuto_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_8E = get_now_mind_flag(actor, game); + actor->_6E--; + if (actor->_8C & 2) { + actor->_1C.y += actor->_40 * (cos_s(actor->_72) * 0.5f + 0.5f); + actor->_72 += ((s16)DEG2SHORT_ANGLE(GETREG(TAKREG, 0x14) + 30.0f) >> 1); + actor->_68.z = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x15) * 0.1f + 2.0f) * sin_s(actor->_72); + if (sin_s(actor->_72) <= 0.1 && sin_s(actor->_72) >= -0.1) { + if (actor->_76) { + actor->_76 = 0; + } else { + actor->_76 = DEG2SHORT_ANGLE(-7); + } + } + if (actor->_6E < 0) { + actor->_40 = 0.0f; + actor->_8C &= ~2; + actor->_76 = DEG2SHORT_ANGLE(-7); + actor->_6E = (s16)RANDOM_F(300.f) + 60; + if (actor->_8E == 0) { + actor->_6E *= 10; + } + } + + if (actor->_1C.y > actor->_44.y + 2.0f) { + actor->_1C.y = actor->_44.y + 2.0f; + actor->_8C &= ~2; + actor->_8C |= 8; + actor->_76 = DEG2SHORT_ANGLE(-7); + actor->_6E = (s16)RANDOM_F(300.f) + 60; + if (actor->_8E == 0) { + actor->_6E *= 10; + } + } else if (actor->_1C.y < actor->_44.y - 2.0f) { + actor->_1C.y = actor->_44.y - 2.0f; + actor->_8C &= ~2; + actor->_8C |= 4; + actor->_76 = DEG2SHORT_ANGLE(-7); + actor->_6E = (s16)RANDOM_F(300.f) + 60; + if (actor->_8E == 0) { + actor->_6E *= 10; + } + } + } else { + if (actor->_6E < 0) { + if (actor->_8C & 4) { + actor->_40 = 0.05f; + } else if (actor->_8C & 8 || RANDOM_F(1.0f) > 0.5f) { + actor->_40 = -0.05f; + } else { + actor->_40 = 0.05f; + } + actor->_8C &= ~0xc; + actor->_76 = DEG2SHORT_ANGLE(-7); + actor->_6E = (s16)RANDOM_F(120.f) + 60; + actor->_8C |= 2; + } + actor->_78--; + if (actor->_78 < 0) { + actor->_7A++; + actor->_76 = DEG2SHORT_ANGLE(-7); + actor->_78 = (s16)RANDOM_F(60.f) + 60; + actor->_7C = DEG2SHORT_ANGLE(RANDOM2_F(30.f)); + if (actor->_7A > (s16)(1.0f + RANDOM_F(3.0f))) { + actor->_7A = 0; + actor->_78 = (s16)((s16)RANDOM_F(60.0f) + 60) * 5; + if (actor->_8E == 0) { + actor->_78 *= 2; + } + actor->_7C = 0; + } + } + if (actor->_74 == actor->_76) { + actor->_76 = 0; + } + add_calc_short_angle2(&actor->_68.z, actor->_7C, CALC_EASE2(0.4f), + (s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 3) * 0.01f + 5.0f) >> 1) >> 1, + DEG2SHORT_ANGLE(0.25f)); + } + add_calc_short_angle2(&actor->_74, actor->_76, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f)); +} + +void minsect_kabuto_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim(game->graph); + + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE); + Matrix_rotateXYZ(0, 0, actor->_68.z, TRUE); + Matrix_rotateXYZ(actor->_74, 0, 0, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + Matrix_rotateXYZ(DEG2SHORT_ANGLE(90), 0, DEG2SHORT_ANGLE2(180), TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + CLOSE_DISP(game->graph); + + if (actor->_00 == 8) { + OPEN_POLY_XLU_DISP(game->graph); + gDPSetEnvColor(POLY_XLU_DISP++, 0xff, 0xff, 0xff, 0xff); + gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][1]); + CLOSE_POLY_XLU_DISP(game->graph); + } +} From dc5645a9aa3658ee6cf94788197c9a33d99774dd Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 9 Feb 2025 18:41:17 -0500 Subject: [PATCH 09/26] match data --- include/ac_museum_insect_priv.h | 154 ++-- src/actor/ac_museum_insect.c | 837 ++++++++++++++++++++++ src/actor/ac_museum_insect_base.c_inc | 14 +- src/actor/ac_museum_insect_batta.c_inc | 4 +- src/actor/ac_museum_insect_hachi.c_inc | 6 +- src/actor/ac_museum_insect_kuwagata.c_inc | 89 +++ src/actor/ac_museum_insect_semi.c_inc | 6 +- src/actor/ac_museum_insect_tentou.c_inc | 10 +- src/actor/ac_museum_insect_tonbo.c_inc | 1 - 9 files changed, 1042 insertions(+), 79 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index ef69f446..b40096d2 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -23,10 +23,16 @@ struct _MUSEUM_INSECT_PRIVATE_DATA; typedef void (*PRIV_INSECT_PROCESS)(struct _MUSEUM_INSECT_PRIVATE_DATA*, GAME*); +typedef struct _MUSEUM_INSECT_SKELETON { + cKF_SkeletonInfo_R_c _00; + artificial_padding(0, 0x2ac, cKF_SkeletonInfo_R_c); + cKF_Animation_R_c* _2AC; +} MUSEUM_INSECT_SKELETON; + typedef struct _MUSEUM_INSECT_PRIVATE_DATA { int _00; PRIV_INSECT_PROCESS _04; - artificial_padding(4, 0xc, PRIV_INSECT_PROCESS); + MUSEUM_INSECT_SKELETON* _08; f32 _0C; f32 _10; f32 _14; // scale @@ -76,24 +82,54 @@ typedef struct _MUSEUM_INSECT_ACTOR { s16 _2F9C[5]; // offset: 0x2F9C } MUSEUM_INSECT_ACTOR; +// bss extern MUSEUM_INSECT_ACTOR* MI_Control_Actor; + +// data +extern rgba_t window_color; +extern Gfx *m_monshiro_disp_tbl[], *m_monki_disp_tbl[], *m_ageha_disp_tbl[], *m_ohmurasaki_disp_tbl[], + *m_minmin_disp_tbl[], *m_tukutuku_disp_tbl[], *m_higurashi_disp_tbl[], *m_abura_disp_tbl[], *m_shiokara_disp_tbl[], + *m_akiakane_disp_tbl[], *m_ginyanma_disp_tbl[], *m_oniyanma_disp_tbl[], *m_syouryou_disp_tbl[], + *m_tonosama_disp_tbl[], *m_koorogi_disp_tbl[], *m_kirigirisu_disp_tbl[], *m_suzumushi_disp_tbl[], + *m_matumushi_disp_tbl[], *m_tentou_disp_tbl[], *m_nanahoshi_disp_tbl[], *m_kamakiri_disp_tbl[], + *m_maimai_disp_tbl[], *m_hachi_disp_tbl[], *m_kanabun_disp_tbl[], *m_kabuto_disp_tbl[], *m_hirata_disp_tbl[], + *m_tamamushi_disp_tbl[], *m_gomadara_disp_tbl[], *m_nokogiri_disp_tbl[], *m_miyama_disp_tbl[], *m_okuwa_disp_tbl[], + *m_amenbo_disp_tbl[], *m_mino_disp_tbl[], *m_kumo_disp_tbl[], *m_goki_disp_tbl[], *m_genji_disp_tbl[], + *m_dango_disp_tbl[], *m_ari_disp_tbl[], *m_okera_disp_tbl[], *m_ka_disp_tbl[]; +extern Gfx** minsect_mdl[aINS_INSECT_TYPE_NUM]; extern PRIV_INSECT_PROCESS minsect_ct[aINS_INSECT_TYPE_NUM]; extern PRIV_INSECT_PROCESS minsect_mv[aINS_INSECT_TYPE_NUM]; extern PRIV_INSECT_PROCESS minsect_dw[aINS_INSECT_TYPE_NUM]; -extern f32 minsect_scale_tbl[aINS_INSECT_TYPE_NUM]; -extern f32 minsect_scale_tbl[aINS_INSECT_TYPE_NUM]; -extern int active_time_tbl[40]; -extern int relax_time_tbl[40]; -extern rgba_t window_color; -extern f32 base_high_tbl[4]; -extern xyz_t flower_pos[4]; -extern xyz_t ohmurasaki_tree_pos; -extern s16 aim_angle_tbl[6]; -extern Gfx** minsect_mdl[40]; -extern xyz_t tonbo_rock_pos[1]; -extern xyz_t tentou_flower_pos[1]; +extern f32 minsect_shadow_scale_tbl[aINS_INSECT_TYPE_NUM]; +extern int active_time_tbl[aINS_INSECT_TYPE_NUM]; +extern int relax_time_tbl[aINS_INSECT_TYPE_NUM]; +extern xyz_t flower_pos[8]; +extern xyz_t tree_pos[8]; +extern xyz_t rock_pos[2]; +extern xyz_t tonbo_rock_pos[6]; +extern xyz_t tentou_flower_pos[4]; extern xyz_t hachi_base_pos; -extern xyz_t kabuto_base_pos[1]; +extern xyz_t kabuto_base_pos[9]; +extern cKF_Skeleton_R_c* kuwagata_model_tbl[4]; +extern cKF_Animation_R_c* kuwagata_anim_tbl[4]; +extern xyz_t kuwagata_base_pos[4]; +extern xyz_t amenbo_center_pos; +extern xyz_t rail_pos[6]; +extern xyz_t ari_rail_pos[3]; +extern f32 minsect_scale_tbl[aINS_INSECT_TYPE_NUM]; + +// rodata +extern const f32 base_high_tbl[4]; +extern const s16 aim_angle_tbl[6]; +extern const xyz_t mino_base_pos; +extern const xyz_t mino_top_pos; +extern const xyz_t mino_bottom_pos; +extern const xyz_t kumo_base_pos; +extern const xyz_t kumo_top_pos; +extern const xyz_t kumo_bottom_pos; +extern const xyz_t base_genji_pos; +extern const xyz_t genji_mizu_pos; +extern const xyz_t okera_base_pos; // ac_museum_insect.c int Museum_Insect_GetMsgNo(ACTOR* actorx); @@ -108,17 +144,17 @@ void Museum_Insect_Actor_draw(ACTOR* actor, GAME* game); // ac_museum_insect_base.c_inc void mID_insect_moveF(MUSEUM_INSECT_PRIVATE_DATA* actor); -void minsect_amenbo_ct(void); -void minsect_amenbo_mv(void); -void minsect_amenbo_dw(void); -void ari_alone_ct(void); +void minsect_amenbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_amenbo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_amenbo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void ari_alone_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void ari_alone_make(void); void ari_alone_dt(void); void ari_alone_move(void); void ari_alone_draw(void); -void minsect_ari_ct(void); -void minsect_ari_mv(void); -void minsect_ari_dw(void); +void minsect_ari_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_ari_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_ari_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_draw_shadow(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_fly_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2); void minsect_garden_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2); @@ -225,22 +261,22 @@ void minsect_kabuto_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_kabuto_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_kuwagata.c_inc -void mi_kuwagata_rensa_init(void); -void mi_kuwagata_rensa(void); -void mi_kuwagata_wait_init(void); -void mi_kuwagata_wait(void); -void mi_kuwagata_move_init(void); -void mi_kuwagata_move(void); -void mi_kuwagata_battle_init(void); -void mi_kuwagata_battle(void); -void mi_kuwagata_menace_init(void); -void mi_kuwagata_menace(void); -void mi_kuwagata_attack_init(void); -void mi_kuwagata_attack(void); -void mi_kuwagata_setupAction(void); -void minsect_kuwagata_ct(void); -void minsect_kuwagata_mv(void); -void minsect_kuwagata_dw(void); +void mi_kuwagata_rensa_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_kuwagata_rensa(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_kuwagata_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_kuwagata_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_kuwagata_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_kuwagata_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_kuwagata_battle_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_kuwagata_battle(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_kuwagata_menace_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_kuwagata_menace(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_kuwagata_attack_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_kuwagata_attack(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_kuwagata_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game); +void minsect_kuwagata_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kuwagata_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kuwagata_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_mino.c_inc void minsect_mino_up_init(void); @@ -255,9 +291,9 @@ void minsect_mino_wait_init(void); void minsect_mino_wait(void); void minsect_mino_hineri(void); void minsect_mino_setupAction(void); -void minsect_mino_ct(void); -void minsect_mino_mv(void); -void minsect_mino_dw(void); +void minsect_mino_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_kumo.c_inc void minsect_kumo_hide_init(void); @@ -274,31 +310,31 @@ void minsect_kumo_wait_init(void); void minsect_kumo_wait(void); void minsect_kumo_hineri(void); void minsect_kumo_setupAction(void); -void minsect_kumo_ct(void); -void minsect_kumo_mv(void); -void minsect_kumo_dw(void); +void minsect_kumo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_goki.c_inc -void minsect_goki_ct(void); +void minsect_goki_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void goki_player_check(void); void goki_wall_hit_angle_corect_sub(void); void goki_wall_hit_angle_corect(void); void goki_set_talk_info_init(void); void goki_talk_process(void); void goki_talk_process_init(void); -void minsect_goki_mv(void); -void minsect_goki_dw(void); +void minsect_goki_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_goki_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_genji.c_inc void mi_genji_check_player(void); -void genji_light_ct(void); +void genji_light_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void genji_light_make(void); void genji_light_anime(void); void genji_light_move(void); void genji_light_draw(void); -void minsect_genji_ct(void); -void minsect_genji_mv(void); -void minsect_genji_dw(void); +void minsect_genji_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_genji_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_genji_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_dango.c_inc void mi_dango_defence_anime(void); @@ -308,13 +344,13 @@ void mi_dango_move(void); void mi_dango_defence_init(void); void mi_dango_defence(void); void mi_dango_setupAction(void); -void minsect_dango_ct(void); -void minsect_dango_mv(void); -void minsect_dango_dw(void); +void minsect_dango_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_dango_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_dango_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_okera.c_inc void mi_okera_check_player(void); -void minsect_okera_ct(void); +void minsect_okera_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void okera_dig_up_process_init(void); void okera_dig_up_process(void); void okera_normal_process_init(void); @@ -323,13 +359,13 @@ void okera_dig_down_process_init(void); void okera_dig_down_process(void); void okera_dig_wait_process_init(void); void okera_dig_wait_process(void); -void minsect_okera_mv(void); -void minsect_okera_dw(void); +void minsect_okera_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_okera_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_ka.c_inc -void minsect_ka_ct(void); -void minsect_ka_mv(void); -void minsect_ka_dw(void); +void minsect_ka_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_ka_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_ka_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); #ifdef __cplusplus } diff --git a/src/actor/ac_museum_insect.c b/src/actor/ac_museum_insect.c index 05711d1b..1d6b8fa8 100644 --- a/src/actor/ac_museum_insect.c +++ b/src/actor/ac_museum_insect.c @@ -1,4 +1,87 @@ #include "ac_museum_insect_priv.h" +// clang-format off +extern Gfx + act_m_mu_monshiro1T_model, + act_m_mu_monshiro2T_model, + act_m_mu_monki1T_model, + act_m_mu_monki2T_model, + act_m_mu_kiageha1T_model, + act_m_mu_kiageha2T_model, + act_m_mu_ohmurasaki1T_model, + act_m_mu_ohmurasaki2T_model, + act_m_mu_minmin1_1T_model, + act_m_mu_minmin1_2T_model, + act_m_mu_tukutuku1_1T_model, + act_m_mu_tukutuku1_2T_model, + act_m_mu_higurashi1_1T_model, + act_m_mu_higurashi1_2T_model, + act_m_mu_abura1_1T_model, + act_m_mu_abura1_2T_model, + act_m_mu_shiokara1_1T_model, + act_m_mu_shiokara1_2T_model, + act_m_mu_shiokara2_2T_model, + act_m_mu_akiakane1_1T_model, + act_m_mu_akiakane1_2T_model, + act_m_mu_akiakane2_2T_model, + act_m_mu_ginyanma1_1T_model, + act_m_mu_ginyanma1_2T_model, + act_m_mu_ginyanma2_2T_model, + act_m_mu_oniyanma1_1T_model, + act_m_mu_oniyanma1_2T_model, + act_m_mu_oniyanma2_2T_model, + act_m_mu_syouryou1T_model, + act_m_mu_syouryou2_2T_model, + act_m_mu_tonosama1T_model, + act_m_mu_tonosama2_2T_model, + act_m_mu_koorogi1T_model, + act_m_mu_koorogi2_2T_model, + act_m_mu_kirigirisu1T_model, + act_m_mu_kirigirisu2_2T_model, + act_m_mu_suzumushi1T_model, + act_m_mu_suzumushi2_2T_model, + act_m_mu_matumushi1T_model, + act_m_mu_matumushi2_2T_model, + act_m_mu_tentou1T_model, + act_m_mu_tentou2T_model, + act_m_mu_nanahoshi1T_model, + act_m_mu_nanahoshi2T_model, + act_m_mu_kamakiri1T_model, + act_m_mu_kamakiri2_2T_model, + act_m_mu_maimaiT_model, + act_m_mu_hachi1_1T_model, + act_m_mu_hachi1_2T_model, + act_m_mu_hachi2_2T_model, + act_m_mu_kanabun1T_model, + act_m_mu_kabuto1T_model, + act_m_mu_hirata1T_model, + act_m_mu_tamamushi1T_model, + act_m_mu_gomadara1T_model, + act_m_mu_nokogiri1T_model, + act_m_mu_miyama1T_model, + act_m_mu_okuwa1T_model, + act_m_mu_amenbo1T_model, + act_m_mu_amenbo2T_model, + act_m_mu_mino1_1T_model, + act_m_mu_mino1_2T_model, + act_m_mu_mino2T_model, + act_m_mu_kumo1_1T_mode, + act_m_mu_kumo1_2T_mode, + act_m_mu_kumo2T_model, + act_m_mu_kumo1_1T_model, + act_m_mu_kumo1_2T_model, + act_m_mu_danna1T_model, + act_m_mu_danna2T_model, + act_m_mu_genji2_a_model, + act_m_mu_genji2_b_model, + act_m_mu_genji2_c_model, + act_m_mu_genji2_d_model, + act_m_mu_dango1T_model, + act_m_mu_dango2T_model, + act_m_mu_ariT_model, + act_m_mu_keraT_model, + act_m_mu_ka1T_model, + act_m_mu_ka2_1T_model, + act_m_mu_ka2_2T_model; ACTOR_PROFILE Museum_Insect_Profile = { mAc_PROFILE_MUSEUM_INSECT, @@ -14,6 +97,760 @@ ACTOR_PROFILE Museum_Insect_Profile = { NULL, }; +rgba_t window_color = { + 0xff, 0xff, 0xcd, 0xff +}; + +Gfx *m_monshiro_disp_tbl[] = { + &act_m_mu_monshiro1T_model, + &act_m_mu_monshiro2T_model, + NULL +}; + +Gfx *m_monki_disp_tbl[] = { + &act_m_mu_monki1T_model, + &act_m_mu_monki2T_model, + NULL +}; + +Gfx *m_ageha_disp_tbl[] = { + &act_m_mu_kiageha1T_model, + &act_m_mu_kiageha2T_model, + NULL +}; + +Gfx *m_ohmurasaki_disp_tbl[] = { + &act_m_mu_ohmurasaki1T_model, + &act_m_mu_ohmurasaki2T_model, + NULL +}; + +Gfx *m_minmin_disp_tbl[] = { + &act_m_mu_minmin1_1T_model, + &act_m_mu_minmin1_2T_model, + NULL +}; + +Gfx *m_tukutuku_disp_tbl[] = { + &act_m_mu_tukutuku1_1T_model, + &act_m_mu_tukutuku1_2T_model, + NULL +}; + +Gfx *m_higurashi_disp_tbl[] = { + &act_m_mu_higurashi1_1T_model, + &act_m_mu_higurashi1_2T_model, + NULL +}; + +Gfx *m_abura_disp_tbl[] = { + &act_m_mu_abura1_1T_model, + &act_m_mu_abura1_2T_model, + NULL +}; + +Gfx *m_shiokara_disp_tbl[] = { + &act_m_mu_shiokara1_1T_model, + &act_m_mu_shiokara1_2T_model, + &act_m_mu_shiokara2_2T_model, + NULL +}; + +Gfx *m_akiakane_disp_tbl[] = { + &act_m_mu_akiakane1_1T_model, + &act_m_mu_akiakane1_2T_model, + &act_m_mu_akiakane2_2T_model, + NULL +}; + +Gfx *m_ginyanma_disp_tbl[] = { + &act_m_mu_ginyanma1_1T_model, + &act_m_mu_ginyanma1_2T_model, + &act_m_mu_ginyanma2_2T_model, + NULL +}; + +Gfx *m_oniyanma_disp_tbl[] = { + &act_m_mu_oniyanma1_1T_model, + &act_m_mu_oniyanma1_2T_model, + &act_m_mu_oniyanma2_2T_model, + NULL +}; + +Gfx *m_syouryou_disp_tbl[] = { + &act_m_mu_syouryou1T_model, + &act_m_mu_syouryou2_2T_model, + NULL +}; + +Gfx *m_tonosama_disp_tbl[] = { + &act_m_mu_tonosama1T_model, + &act_m_mu_tonosama2_2T_model, + NULL +}; + +Gfx *m_koorogi_disp_tbl[] = { + &act_m_mu_koorogi1T_model, + &act_m_mu_koorogi2_2T_model, + NULL +}; + +Gfx *m_kirigirisu_disp_tbl[] = { + &act_m_mu_kirigirisu1T_model, + &act_m_mu_kirigirisu2_2T_model, + NULL +}; + +Gfx *m_suzumushi_disp_tbl[] = { + &act_m_mu_suzumushi1T_model, + &act_m_mu_suzumushi2_2T_model, + NULL +}; + +Gfx *m_matumushi_disp_tbl[] = { + &act_m_mu_matumushi1T_model, + &act_m_mu_matumushi2_2T_model, + NULL +}; + +Gfx *m_tentou_disp_tbl[] = { + &act_m_mu_tentou1T_model, + &act_m_mu_tentou2T_model, + NULL +}; + +Gfx *m_nanahoshi_disp_tbl[] = { + &act_m_mu_nanahoshi1T_model, + &act_m_mu_nanahoshi2T_model, + NULL +}; + +Gfx *m_kamakiri_disp_tbl[] = { + &act_m_mu_kamakiri1T_model, + &act_m_mu_kamakiri2_2T_model, + NULL +}; + +Gfx *m_maimai_disp_tbl[] = { + &act_m_mu_maimaiT_model, + NULL +}; + +Gfx *m_hachi_disp_tbl[] = { + &act_m_mu_hachi1_1T_model, + &act_m_mu_hachi1_2T_model, + &act_m_mu_hachi2_2T_model, + NULL +}; + +Gfx *m_kanabun_disp_tbl[] = { + &act_m_mu_kanabun1T_model, + NULL +}; + +Gfx *m_kabuto_disp_tbl[] = { + &act_m_mu_kabuto1T_model, + NULL +}; + +Gfx *m_hirata_disp_tbl[] = { + &act_m_mu_hirata1T_model, + NULL +}; + +Gfx *m_tamamushi_disp_tbl[] = { + &act_m_mu_tamamushi1T_model, + NULL +}; + +Gfx *m_gomadara_disp_tbl[] = { + &act_m_mu_gomadara1T_model, + NULL +}; + +Gfx *m_nokogiri_disp_tbl[] = { + &act_m_mu_nokogiri1T_model, + NULL +}; + +Gfx *m_miyama_disp_tbl[] = { + &act_m_mu_miyama1T_model, + NULL +}; + +Gfx *m_okuwa_disp_tbl[] = { + &act_m_mu_okuwa1T_model, + NULL +}; + +Gfx *m_amenbo_disp_tbl[] = { + &act_m_mu_amenbo1T_model, + &act_m_mu_amenbo2T_model, + NULL +}; + +Gfx *m_mino_disp_tbl[] = { + &act_m_mu_mino1_1T_model, + &act_m_mu_mino1_2T_model, + &act_m_mu_mino2T_model, + NULL +}; + +Gfx *m_kumo_disp_tbl[] = { + &act_m_mu_kumo1_1T_model, + &act_m_mu_kumo1_2T_model, + &act_m_mu_kumo2T_model, + NULL +}; + +Gfx *m_goki_disp_tbl[] = { + &act_m_mu_danna1T_model, + &act_m_mu_danna2T_model, + NULL +}; + +Gfx *m_genji_disp_tbl[] = { + &act_m_mu_genji2_a_model, + &act_m_mu_genji2_b_model, + &act_m_mu_genji2_c_model, + &act_m_mu_genji2_d_model, + NULL +}; + +Gfx *m_dango_disp_tbl[] = { + &act_m_mu_dango1T_model, + &act_m_mu_dango2T_model, + NULL +}; + +Gfx *m_ari_disp_tbl[] = { + &act_m_mu_ariT_model, + NULL +}; + +Gfx *m_okera_disp_tbl[] = { + &act_m_mu_keraT_model, + NULL +}; + +Gfx *m_ka_disp_tbl[] = { + &act_m_mu_ka1T_model, + &act_m_mu_ka2_1T_model, + &act_m_mu_ka2_2T_model, + NULL +}; + +Gfx **minsect_mdl[] = { + m_monshiro_disp_tbl, + m_monki_disp_tbl, + m_ageha_disp_tbl, + m_ohmurasaki_disp_tbl, + m_minmin_disp_tbl, + m_tukutuku_disp_tbl, + m_higurashi_disp_tbl, + m_abura_disp_tbl, + m_hachi_disp_tbl, + m_shiokara_disp_tbl, + m_akiakane_disp_tbl, + m_ginyanma_disp_tbl, + m_oniyanma_disp_tbl, + m_syouryou_disp_tbl, + m_tonosama_disp_tbl, + m_koorogi_disp_tbl, + m_kirigirisu_disp_tbl, + m_suzumushi_disp_tbl, + m_matumushi_disp_tbl, + m_kanabun_disp_tbl, + m_kabuto_disp_tbl, + m_hirata_disp_tbl, + m_tamamushi_disp_tbl, + m_gomadara_disp_tbl, + m_tentou_disp_tbl, + m_nanahoshi_disp_tbl, + m_kamakiri_disp_tbl, + m_genji_disp_tbl, + m_goki_disp_tbl, + m_nokogiri_disp_tbl, + m_miyama_disp_tbl, + m_okuwa_disp_tbl, + m_maimai_disp_tbl, + m_okera_disp_tbl, + m_amenbo_disp_tbl, + m_mino_disp_tbl, + m_dango_disp_tbl, + m_kumo_disp_tbl, + m_ari_disp_tbl, + m_ka_disp_tbl +}; + +PRIV_INSECT_PROCESS minsect_ct[] = { + minsect_chou_ct, + minsect_chou_ct, + minsect_chou_ct, + minsect_chou_ct, + minsect_semi_ct, + minsect_semi_ct, + minsect_semi_ct, + minsect_semi_ct, + minsect_hachi_ct, + minsect_tonbo_ct, + minsect_tonbo_ct, + minsect_tonbo_ct, + minsect_tonbo_ct, + minsect_batta_ct, + minsect_batta_ct, + minsect_batta_ct, + minsect_batta_ct, + minsect_batta_ct, + minsect_batta_ct, + minsect_kabuto_ct, + minsect_kabuto_ct, + minsect_kuwagata_ct, + minsect_kabuto_ct, + minsect_kabuto_ct, + minsect_tentou_ct, + minsect_tentou_ct, + minsect_tentou_ct, + minsect_genji_ct, + minsect_goki_ct, + minsect_kuwagata_ct, + minsect_kuwagata_ct, + minsect_kuwagata_ct, + minsect_tentou_ct, + minsect_okera_ct, + minsect_amenbo_ct, + minsect_mino_ct, + minsect_dango_ct, + minsect_kumo_ct, + minsect_ari_ct, + minsect_ka_ct +}; + +PRIV_INSECT_PROCESS minsect_mv[] = { + minsect_chou_mv, + minsect_chou_mv, + minsect_chou_mv, + minsect_chou_mv, + minsect_semi_mv, + minsect_semi_mv, + minsect_semi_mv, + minsect_semi_mv, + minsect_hachi_mv, + minsect_tonbo_mv, + minsect_tonbo_mv, + minsect_tonbo_mv, + minsect_tonbo_mv, + minsect_batta_mv, + minsect_batta_mv, + minsect_batta_mv, + minsect_batta_mv, + minsect_batta_mv, + minsect_batta_mv, + minsect_kabuto_mv, + minsect_kabuto_mv, + minsect_kuwagata_mv, + minsect_kabuto_mv, + minsect_kabuto_mv, + minsect_tentou_mv, + minsect_tentou_mv, + minsect_tentou_mv, + minsect_genji_mv, + minsect_goki_mv, + minsect_kuwagata_mv, + minsect_kuwagata_mv, + minsect_kuwagata_mv, + minsect_tentou_mv, + minsect_okera_mv, + minsect_amenbo_mv, + minsect_mino_mv, + minsect_dango_mv, + minsect_kumo_mv, + minsect_ari_mv, + minsect_ka_mv +}; + +PRIV_INSECT_PROCESS minsect_dw[] = { + minsect_chou_dw, + minsect_chou_dw, + minsect_chou_dw, + minsect_chou_dw, + minsect_semi_dw, + minsect_semi_dw, + minsect_semi_dw, + minsect_semi_dw, + minsect_hachi_dw, + minsect_tonbo_dw, + minsect_tonbo_dw, + minsect_tonbo_dw, + minsect_tonbo_dw, + minsect_batta_dw, + minsect_batta_dw, + minsect_batta_dw, + minsect_batta_dw, + minsect_batta_dw, + minsect_batta_dw, + minsect_kabuto_dw, + minsect_kabuto_dw, + minsect_kuwagata_dw, + minsect_kabuto_dw, + minsect_kabuto_dw, + minsect_tentou_dw, + minsect_tentou_dw, + minsect_tentou_dw, + minsect_genji_dw, + minsect_goki_dw, + minsect_kuwagata_dw, + minsect_kuwagata_dw, + minsect_kuwagata_dw, + minsect_tentou_dw, + minsect_okera_dw, + minsect_amenbo_dw, + minsect_mino_dw, + minsect_dango_dw, + minsect_kumo_dw, + minsect_ari_dw, + minsect_ka_dw +}; + +f32 minsect_shadow_scale_tbl[] = { + 1.0f, + 1.0f, + 1.5f, + 1.5f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 1.0f, + 1.0f, + 1.5f, + 1.5f, + 1.8f, + 1.0f, + 1.5f, + 1.0f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 1.0f, + 0.6f, + 0.7f, + 0.0f, + 0.0f +}; + +int active_time_tbl[] = { + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 4, 0, 0), + mTM_TIME2SEC( 4, 0, 0), + mTM_TIME2SEC( 4, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC(16, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC(16, 0, 0), + mTM_TIME2SEC(16, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC(19, 0, 0), + mTM_TIME2SEC(19, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC(19, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC(19, 0, 0), + mTM_TIME2SEC(19, 0, 0), + mTM_TIME2SEC(19, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 0, 0, 0) +}; + +int relax_time_tbl[] = { + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC(16, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC(16, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(17, 0, 0), + mTM_TIME2SEC(4, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 8, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC(19, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 0, 0, 0), + mTM_TIME2SEC( 0, 0, 0) +}; + +xyz_t flower_pos[8] = { + { 147.0f, 66.f, 169.f }, + { 238.0f, 66.f, 201.f }, + { 264.0f, 66.f, 164.f }, + { 165.0f, 66.f, 219.f }, + { 181.0f, 66.f, 235.f }, + { 199.0f, 66.f, 188.f }, + { 327.5f, 66.f, 154.f }, + { 410.0f, 66.f, 190.f } +}; + +xyz_t ohmurasaki_tree_pos = { + 360.f, 85.f, 265.f +}; + +xyz_t tree_pos[8] = { + { 92.f, 0.f, -15.f }, + { 168.f, 0.f, 5.f }, + { 244.f, 0.f, -15.f }, + { 316.f, 0.f, 5.f }, + { 392.f, 0.f, -15.f }, + { 468.f, 0.f, 5.f }, + { 360.f, 0.f, 245.f }, + { 165.f, 0.f, 485.f } +}; + +xyz_t rock_pos[] = { + { 225.f, 0.f, 388.5f }, + { 385.f, 0.f, 485.0f } +}; + +xyz_t tonbo_rock_pos[6] = { + { 215.f, 68.f, 403.f }, + { 232.f, 60.f, 381.f }, + { 372.f, 65.f, 482.f }, + { 390.f, 68.f, 469.f }, + { 328.f, 72.f, 501.f }, + { 351.f, 72.f, 501.f } +}; + +xyz_t tentou_flower_pos[4] = { + { 410.0f, 65.f, 240.0f }, + { 213.5f, 65.f, 155.0f }, + { 233.0f, 65.f, 233.5f }, + { 294.0f, 65.f, 170.5f }, +}; + +xyz_t hachi_base_pos = { + 165.5f, 78.5f, 482.5f +}; + +xyz_t kabuto_base_pos[9] = { + { 165.5f, 78.5f, 482.5f }, + { 389.5f, 66.5f, -14.5f }, + { 241.5f, 67.0f, -15.5f }, + { 165.0f, 81.5f, 0.5f }, + { 89.0f, 64.0f, -15.5f }, + { 466.0f, 84.0f, 1.5f }, + { 171.0f, 64.5f, 5.5f }, + { 319.0f, 81.0f, 1.0f }, + { 313.0f, 63.0f, 5.5f } +}; + +extern cKF_Skeleton_R_c + cKF_bs_r_act_m_hirata_b, + cKF_bs_r_act_m_nokogiri_b, + cKF_bs_r_act_m_miyama_b, + cKF_bs_r_act_m_okuwa_b; + +cKF_Skeleton_R_c *kuwagata_model_tbl[] = { + &cKF_bs_r_act_m_hirata_b, + &cKF_bs_r_act_m_nokogiri_b, + &cKF_bs_r_act_m_miyama_b, + &cKF_bs_r_act_m_okuwa_b +}; + +extern cKF_Animation_R_c + cKF_ba_r_act_m_hirata_b, + cKF_ba_r_act_m_nokogiri_b, + cKF_ba_r_act_m_miyama_b, + cKF_ba_r_act_m_okuwa_b; + +cKF_Animation_R_c *kuwagata_anim_tbl[] = { + &cKF_ba_r_act_m_hirata_b, + &cKF_ba_r_act_m_nokogiri_b, + &cKF_ba_r_act_m_miyama_b, + &cKF_ba_r_act_m_okuwa_b +}; + +xyz_t kuwagata_base_pos[4] = { + { 166.f, 80.5f, 0.5f }, + { 169.f, 66.5f, 5.0f }, + { 318.f, 80.0f, 1.0f }, + { 315.f, 65.0f, 5.5f } +}; + +xyz_t amenbo_center_pos = { + 289.f, 25.f, 218.f +}; + +xyz_t rail_pos[6] = { + { 368.f, 45.f, 467.f }, + { 363.f, 45.f, 482.f }, + { 374.f, 45.f, 499.f }, + { 393.f, 45.f, 502.f }, + { 407.f, 45.f, 488.f }, + { 407.f, 45.f, 469.f } +}; + +xyz_t ari_rail_pos[3] = { + { 177.f, 45.f, -14.f }, + { 242.f, 45.f, 10.f }, + { 307.f, 45.f, -14.f } +}; + +f32 minsect_scale_tbl[40] = { + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.008f, + 0.008f, + 0.008f, + 0.008f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.009f, + 0.009f, + 0.009f, + 0.009f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.007f, + 0.01f, + 0.01f, + 0.01f, + 0.01f, + 0.01f +}; + +// rodata +const s16 aim_angle_tbl[6] = { + DEG2SHORT_ANGLE(45 + 0), + DEG2SHORT_ANGLE(45 + 90), + DEG2SHORT_ANGLE(45 + 180), + DEG2SHORT_ANGLE(45 + 270), + DEG2SHORT_ANGLE(45 + 180), + DEG2SHORT_ANGLE(45 + 90) +}; + +const f32 base_high_tbl[4] = { + 85.f, 95.f, 90.f, 90.f +}; + +const xyz_t mino_base_pos = { + 135.f, 64.f, 474.f +}; + +const xyz_t mino_top_pos = { + 135.f, 90.f, 474.f +}; + +const xyz_t mino_bottom_pos = { + 135.f, 54.f, 474.f +}; + +const xyz_t kumo_base_pos = { + 330.f, 64.5f, 229.f +}; + +const xyz_t kumo_top_pos = { + 330.f, 90.f, 229.f +}; + +const xyz_t kumo_bottom_pos = { + 330.f, 54.f, 229.f +}; + +const xyz_t base_genji_pos = { + 258.f, 62.f, 258.5f +}; + +const xyz_t genji_mizu_pos = { + 289.f, 25.f, 218.f +}; + +const xyz_t okera_base_pos = { + 235.f, 45.f, 445.f +}; + +// clang-format on + int Museum_Insect_GetMsgNo(ACTOR* actorx) { static u8 item_name[mIN_ITEM_NAME_LEN]; MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx; diff --git a/src/actor/ac_museum_insect_base.c_inc b/src/actor/ac_museum_insect_base.c_inc index 1de02a44..ceeded51 100644 --- a/src/actor/ac_museum_insect_base.c_inc +++ b/src/actor/ac_museum_insect_base.c_inc @@ -18,13 +18,13 @@ void mID_insect_moveF(MUSEUM_INSECT_PRIVATE_DATA* actor) { } -void minsect_amenbo_ct(void) { +void minsect_amenbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } -void minsect_amenbo_mv(void) { +void minsect_amenbo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } -void minsect_amenbo_dw(void) { +void minsect_amenbo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } -void ari_alone_ct(void) { +void ari_alone_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } void ari_alone_make(void) { } @@ -34,11 +34,11 @@ void ari_alone_move(void) { } void ari_alone_draw(void) { } -void minsect_ari_ct(void) { +void minsect_ari_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } -void minsect_ari_mv(void) { +void minsect_ari_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } -void minsect_ari_dw(void) { +void minsect_ari_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } void minsect_draw_shadow(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } diff --git a/src/actor/ac_museum_insect_batta.c_inc b/src/actor/ac_museum_insect_batta.c_inc index 66e27312..e5a4c019 100644 --- a/src/actor/ac_museum_insect_batta.c_inc +++ b/src/actor/ac_museum_insect_batta.c_inc @@ -13,7 +13,7 @@ void mi_batta_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } void mi_batta_suzumushi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { - static f32 scaleX_table[7]; + static f32 scaleX_table[7] = { 1.15f, 0.9f, 1.15f, 0.9f, 1.15f, 0.9f, 1.15f }; if (actor->_82 < 7) { if (chase_f(&actor->_58, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_82], 0.23f) == 1) { actor->_82--; @@ -27,7 +27,7 @@ void mi_batta_suzumushi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { } void mi_batta_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { - static f32 scaleX_table[7]; + static f32 scaleX_table[7] = { 1.15f, 0.5f, 1.15f, 0.5f, 1.15f, 0.5f, 1.15f }; if (actor->_7C < 7) { if (chase_f(&actor->_58, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_7C], 0.23f) == 1) { actor->_7C--; diff --git a/src/actor/ac_museum_insect_hachi.c_inc b/src/actor/ac_museum_insect_hachi.c_inc index 00f57d76..09ca5304 100644 --- a/src/actor/ac_museum_insect_hachi.c_inc +++ b/src/actor/ac_museum_insect_hachi.c_inc @@ -1,7 +1,7 @@ #include "ac_museum_insect_priv.h" void mi_hachi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { - static f32 scaleX_table[7]; + static f32 scaleX_table[7] = { 1.f, 0.85f, 1.15f, 0.85f, 1.15f, 0.85f, 1.15f }; if (actor->_78 < 7) { if (chase_f(&actor->_5C, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_78], 0.115f) == 1) { actor->_78--; @@ -139,8 +139,8 @@ void mi_hachi_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } void mi_hachi_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) { - static PRIV_INSECT_PROCESS init_proc[1]; - static PRIV_INSECT_PROCESS move_proc[1]; + static PRIV_INSECT_PROCESS init_proc[3] = { mi_hachi_wait_init, mi_hachi_move_init, mi_hachi_mitu_init }; + static PRIV_INSECT_PROCESS move_proc[3] = { mi_hachi_wait, mi_hachi_move, mi_hachi_mitu }; actor->_04 = move_proc[r4]; init_proc[r4](actor, game); } diff --git a/src/actor/ac_museum_insect_kuwagata.c_inc b/src/actor/ac_museum_insect_kuwagata.c_inc index 356389bc..9bef25dc 100644 --- a/src/actor/ac_museum_insect_kuwagata.c_inc +++ b/src/actor/ac_museum_insect_kuwagata.c_inc @@ -1 +1,90 @@ #include "ac_museum_insect_priv.h" + +void mi_kuwagata_rensa_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_7A = 0; +} +void mi_kuwagata_rensa(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + add_calc_short_angle2(&actor->_78, actor->_7A, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f)); +} + +void mi_kuwagata_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E = (s16)RANDOM_F(200.f) + 40; + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->_08->_00, actor->_08->_2AC, NULL, 0.5f, 0.0f); +} + +void mi_kuwagata_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + if (actor->_6E < 0) { + actor->_7A = DEG2SHORT_ANGLE(-7); + actor->_6E = (s16)RANDOM_F(200.F) + 40; + if (RANDOM_F(1.0f) > 0.7f || GETREG(NMREG, 1)) { + mi_kuwagata_setupAction(actor, 3, game); + return; + } else if (RANDOM_F(1.0f) > 0.7f || GETREG(NMREG, 0)) { + mi_kuwagata_setupAction(actor, 2, game); + return; + } + } + + if (actor->_78 == actor->_7A) { + actor->_7A = 0; + } + actor->_76--; + if (actor->_76 < 0) { + cKF_SkeletonInfo_R_play(&actor->_08->_00); + if ((int)actor->_08->_00.frame_control.current_frame == 14) { + actor->_76 = (s16)RANDOM_F(356.F) + 4; + if (actor->_8E == 0) { + actor->_76 *= 10; + } + } else if ((int)actor->_08->_00.frame_control.current_frame == 1) { + actor->_76 = (s16)RANDOM_F(1760.f) + 40; + if (actor->_8E == 0) { + actor->_76 *= 10; + } + } + } + add_calc_short_angle2(&actor->_78, actor->_7A, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f)); +} + +void mi_kuwagata_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + return; +} + +void mi_kuwagata_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + return; +} + +void mi_kuwagata_battle_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_8C & 4) { + actor->_40 = 0.05f; + } else if (actor->_8C & 8) { + actor->_40 = -0.05f; + } + actor->_6E = (s16)RANDOM_F(120.f) + 60; + actor->_7C = 0x10; +} + +void mi_kuwagata_battle(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { +} +void mi_kuwagata_menace_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { +} +void mi_kuwagata_menace(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { +} + +void mi_kuwagata_attack_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + return; +} + +void mi_kuwagata_attack(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + return; +} + +void mi_kuwagata_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) { +} +void minsect_kuwagata_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { +} +void minsect_kuwagata_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { +} +void minsect_kuwagata_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { +} diff --git a/src/actor/ac_museum_insect_semi.c_inc b/src/actor/ac_museum_insect_semi.c_inc index adeae11f..0a7890e2 100644 --- a/src/actor/ac_museum_insect_semi.c_inc +++ b/src/actor/ac_museum_insect_semi.c_inc @@ -1,7 +1,9 @@ #include "ac_museum_insect_priv.h" void minsect_semi_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { - const static xyz_t init_pos[1] = { 0, 0, 0 }; + const static xyz_t init_pos[4] = { + { 97.f, 85.f, -18.5f }, { 396.f, 85.5f, -20.f }, { 471.5f, 65.5f, 4.5f }, { 248.f, 88.f, -21.f } + }; int s; actor->_58 = 1.0f; actor->_70 = 0; @@ -18,7 +20,7 @@ void minsect_semi_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } void mi_semi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { - static float scaleX_table[1]; + static float scaleX_table[7] = { 1.15f, 1.f, 1.15f, 1.f, 1.15f, 1.f, 1.15f }; if (actor->_70 < 7) { if (chase_f(&actor->_58, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_70], 0.23f) == TRUE) { actor->_70--; diff --git a/src/actor/ac_museum_insect_tentou.c_inc b/src/actor/ac_museum_insect_tentou.c_inc index ad9593dd..459fc8f6 100644 --- a/src/actor/ac_museum_insect_tentou.c_inc +++ b/src/actor/ac_museum_insect_tentou.c_inc @@ -13,7 +13,7 @@ void mi_tentou_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } void mi_tentou_kama_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { - const static f32 scaleX_table[1]; + static f32 scaleX_table[7] = { 1.f, 0.95f, 1.15f, 0.95f, 1.15f, 0.95f, 1.15f }; if (actor->_7E < 7) { if (chase_f(&actor->_5C, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_7E], 0.115f) == 1) { actor->_7E--; @@ -87,8 +87,8 @@ void mi_tentou_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } } if (actor->_00 != 32) { - add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(0.25), - DEG2SHORT_ANGLE(0.125)); + add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.125), + DEG2SHORT_ANGLE(0.25)); } else { add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(0.25), DEG2SHORT_ANGLE(0.125)); @@ -171,8 +171,8 @@ void mi_tentou_menace(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } void mi_tentou_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) { - static PRIV_INSECT_PROCESS move_proc[1]; - static PRIV_INSECT_PROCESS init_proc[1]; + static PRIV_INSECT_PROCESS move_proc[3] = { mi_tentou_wait_init, mi_tentou_move_init, mi_tentou_menace_init }; + static PRIV_INSECT_PROCESS init_proc[3] = { mi_tentou_wait, mi_tentou_move, mi_tentou_menace }; actor->_04 = move_proc[r4]; init_proc[r4](actor, game); } diff --git a/src/actor/ac_museum_insect_tonbo.c_inc b/src/actor/ac_museum_insect_tonbo.c_inc index a6280cc0..d337ba8b 100644 --- a/src/actor/ac_museum_insect_tonbo.c_inc +++ b/src/actor/ac_museum_insect_tonbo.c_inc @@ -19,7 +19,6 @@ void minsect_tonbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { actor->_76 = qrand(); minsect_tonbo_normal_process_init(actor, game); } else { - static xyz_t tonbo_rock_pos[1]; actor->_74 = actor->_00 - 9; MI_Control_Actor->_2F9C[2] |= (1 << actor->_74); actor->_44 = actor->_1C = tonbo_rock_pos[actor->_74]; From ed0f5bdd23a40c21c86850c1ca884772792b06f8 Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 9 Feb 2025 20:32:21 -0500 Subject: [PATCH 10/26] match kuwagata --- include/ac_museum_insect_priv.h | 17 +- src/actor/ac_museum_insect_kuwagata.c_inc | 208 ++++++++++++++++++++++ 2 files changed, 221 insertions(+), 4 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index b40096d2..ed03bee0 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -25,7 +25,15 @@ typedef void (*PRIV_INSECT_PROCESS)(struct _MUSEUM_INSECT_PRIVATE_DATA*, GAME*); typedef struct _MUSEUM_INSECT_SKELETON { cKF_SkeletonInfo_R_c _00; - artificial_padding(0, 0x2ac, cKF_SkeletonInfo_R_c); + Mtx _70; + artificial_padding(0x70, 0x170, Mtx); + Mtx _170; + artificial_padding(0x170, 0x270, Mtx); + s_xyz _270; + artificial_padding(0x270, 0x288, s_xyz); + s_xyz _288; + artificial_padding(0x288, 0x2A8, s_xyz); + cKF_Skeleton_R_c* _2A8; cKF_Animation_R_c* _2AC; } MUSEUM_INSECT_SKELETON; @@ -73,9 +81,10 @@ typedef struct _INSECT_DISPLAY_MSG_INFO { } INSECT_DISPLAY_MSG_INFO; typedef struct _MUSEUM_INSECT_ACTOR { - ACTOR actor; // offset: 0x0 - MUSEUM_INSECT_PRIVATE_DATA privInsects[aINS_INSECT_TYPE_NUM]; - artificial_padding(0x174, 0x2F78, MUSEUM_INSECT_PRIVATE_DATA[aINS_INSECT_TYPE_NUM]); + ACTOR actor; // offset: 0x0 + MUSEUM_INSECT_PRIVATE_DATA privInsects[aINS_INSECT_TYPE_NUM]; // offset 0x174 + artificial_padding(0x174, 0x24b8, MUSEUM_INSECT_PRIVATE_DATA[aINS_INSECT_TYPE_NUM]); + MUSEUM_INSECT_SKELETON _24B8[4]; int _2F78; // offset: 0x2F78 int _2F7C; // offset: 0x2F7C INSECT_DISPLAY_MSG_INFO _2F80[7]; // offset: 0x2F82 diff --git a/src/actor/ac_museum_insect_kuwagata.c_inc b/src/actor/ac_museum_insect_kuwagata.c_inc index 9bef25dc..15d50cd1 100644 --- a/src/actor/ac_museum_insect_kuwagata.c_inc +++ b/src/actor/ac_museum_insect_kuwagata.c_inc @@ -66,10 +66,130 @@ void mi_kuwagata_battle_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } void mi_kuwagata_battle(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + MUSEUM_INSECT_PRIVATE_DATA* priv; + f32 v; + switch (actor->_00) { + case 0x15: + priv = &MI_Control_Actor->privInsects[0x1d]; + break; + case 0x1d: + priv = &MI_Control_Actor->privInsects[0x15]; + break; + case 0x1e: + priv = &MI_Control_Actor->privInsects[0x1f]; + break; + case 0x1f: + priv = &MI_Control_Actor->privInsects[0x1e]; + break; + } + if (actor->_7C == 0) { + actor->_7C = -1; + priv->_8C &= ~0xc; + if (actor->_40 >= 0.0f) { + priv->_8C |= 4; + } else if (actor->_40 < 0.0f) { + priv->_8C |= 8; + } + + if (priv->_04 != mi_kuwagata_battle) { + mi_kuwagata_setupAction(priv, 3, game); + } + } + actor->_6E--; + actor->_7C--; + actor->_72 += DEG2SHORT_ANGLE(GETREG(TAKREG, 0x14) + 30.f) >> 1; + actor->_68.z = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x15) * 0.1f + 2.0f) * sin_s(actor->_72); + v = actor->_1C.y - kuwagata_base_pos[actor->_70].y; + if (sin_s(actor->_72) <= 0.1 && sin_s(actor->_72) >= -0.1) { + if (actor->_7A) { + actor->_7A = 0; + } else { + actor->_7A = DEG2SHORT_ANGLE(-7); + } + } + actor->_1C.y += actor->_40 * (cos_s(actor->_72) * 0.5f + 0.5f); + actor->_1C.x = kuwagata_base_pos[actor->_70].x + (v * sin_s(actor->_74)); + if (actor->_1C.y > actor->_44.y + 2.0f) { + actor->_1C.y = actor->_44.y + 2.0f; + actor->_8C &= ~0xc; + actor->_8C |= 0x8; + mi_kuwagata_setupAction(actor, 0, game); + priv->_6E = 0x10; + } + + if (actor->_1C.y < actor->_44.y - 2.0f) { + actor->_1C.y = actor->_44.y - 2.0f; + actor->_8C &= ~0xc; + actor->_8C |= 0x4; + mi_kuwagata_setupAction(actor, 0, game); + priv->_6E = 0x10; + } + if (actor->_6E < 0) { + mi_kuwagata_setupAction(actor, 0, game); + priv->_6E = 0x10; + } else { + actor->_76--; + if (actor->_76 < 0) { + cKF_SkeletonInfo_R_play(&actor->_08->_00); + if ((int)actor->_08->_00.frame_control.current_frame == 14) { + actor->_76 = (s16)RANDOM_F(356.f) + 4; + if (actor->_8E == 0) { + actor->_76 *= 10; + } + } else if ((int)actor->_08->_00.frame_control.current_frame == 1) { + actor->_76 = (s16)RANDOM_F(1760.f) + 40; + if (actor->_8E == 0) { + actor->_76 *= 10; + } + } + } + add_calc_short_angle2(&actor->_78, actor->_7A, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), + DEG2SHORT_ANGLE(0.25F)); + } } + void mi_kuwagata_menace_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_7A = 3640 - DEG2SHORT_ANGLE(GETREG(NMREG, 0) * 0.01f); + actor->_6E = (s16)((s16)RANDOM_F(200.f) + 40) * 5; + actor->_76 = 10; + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->_08->_00, actor->_08->_2AC, NULL, 0.75f, 0.0f); } + void mi_kuwagata_menace(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + if (actor->_7A) { + add_calc(&actor->_1C.z, actor->_44.z + 3.f + GETREG(NMREG, 0xf) * 0.01f, CALC_EASE(0.3f), 0.75f, 0.05f); + } else { + add_calc(&actor->_1C.z, actor->_44.z, CALC_EASE(0.3f), 0.75f, 0.05f); + } + + if (actor->_6E < 0) { + actor->_7A = 0; + if (actor->_78 == 0) { + if (RANDOM_F(1.f) > 0.7f || GETREG(NMREG, 1)) { + mi_kuwagata_setupAction(actor, 3, game); + return; + } else { + mi_kuwagata_setupAction(actor, 0, game); + return; + } + } + } + + actor->_76--; + if (actor->_76 < 0) { + cKF_SkeletonInfo_R_play(&actor->_08->_00); + if ((int)actor->_08->_00.frame_control.current_frame == 1) { + cKF_Animation_R_c* anim = actor->_08->_2AC; + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->_08->_00, anim, NULL, + (RANDOM_F(1.f) + 1.5f) * 0.5f, 0.f); + if (RANDOM_F(1.f) > 0.9f) { + actor->_76 = (s16)RANDOM_F(1760.f) + 40; + } + } + } + add_calc_short_angle2(&actor->_78, actor->_7A, CALC_EASE2(GETREG(NMREG, 0x5e) * 0.01f + 0.8f), + (s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 0x5f) * 0.01f + 4.f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); } void mi_kuwagata_attack_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { @@ -81,10 +201,98 @@ void mi_kuwagata_attack(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } void mi_kuwagata_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) { + static PRIV_INSECT_PROCESS init_proc[] = { + mi_kuwagata_wait_init, mi_kuwagata_move_init, mi_kuwagata_menace_init, + mi_kuwagata_battle_init, mi_kuwagata_attack_init, mi_kuwagata_rensa_init, + }; + static PRIV_INSECT_PROCESS move_proc[] = { + mi_kuwagata_wait, mi_kuwagata_move, mi_kuwagata_menace, + mi_kuwagata_battle, mi_kuwagata_attack, mi_kuwagata_rensa, + }; + actor->_04 = move_proc[r4]; + init_proc[r4](actor, game); } + void minsect_kuwagata_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + switch (actor->_00) { + case 0x15: + actor->_70 = 0; + break; + case 0x1d: + case 0x1e: + default: + actor->_70 = actor->_00 - 0x1c; + break; + } + if (actor->_00 == 0x1e) { + if (mMmd_InsectInfo(0x1f)) { + actor->_8C |= 0x10; + } + } else if (actor->_00 == 0x15) { + if (mMmd_InsectInfo(0x1d)) { + actor->_8C |= 0x10; + } + } else if (actor->_00 == 0x1f) { + if (mMmd_InsectInfo(0x1e)) { + actor->_8C |= 0x10; + } + } else if (actor->_00 == 0x1d) { + if (mMmd_InsectInfo(0x15)) { + actor->_8C |= 0x10; + } + } + + if (actor->_8C & 0x10) { + if (actor->_00 == 0x1e || actor->_00 == 0x15) { + xyz_t p; + xyz_t_sub(&kuwagata_base_pos[actor->_70 + 1], &kuwagata_base_pos[actor->_70], &p); + actor->_74 = atans_table(p.y, -p.x); + } else { + xyz_t p; + xyz_t_sub(&kuwagata_base_pos[actor->_70 - 1], &kuwagata_base_pos[actor->_70], &p); + actor->_74 = atans_table(p.y, -p.x); + } + } + actor->_08 = &MI_Control_Actor->_24B8[actor->_70]; + actor->_08->_2A8 = kuwagata_model_tbl[actor->_70]; + actor->_08->_2AC = kuwagata_anim_tbl[actor->_70]; + cKF_SkeletonInfo_R_ct(&actor->_08->_00, actor->_08->_2A8, actor->_08->_2AC, &actor->_08->_270, &actor->_08->_288); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->_08->_00, actor->_08->_2AC, NULL, 0.5f, 0.0f); + cKF_SkeletonInfo_R_play(&actor->_08->_00); + actor->_76 = (s16)RANDOM_F(1760.f) + 40; + actor->_1C = kuwagata_base_pos[actor->_70]; + actor->_44 = actor->_1C; + actor->_34 = ZeroVec; + actor->_40 = 0.05f; + actor->_68 = ZeroSVec; + actor->_72 = qrand(); + actor->_6E = (s16)RANDOM_F(120.f) + 60; + mi_kuwagata_setupAction(actor, 0, game); } + void minsect_kuwagata_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_04(actor, game); } + void minsect_kuwagata_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + Mtx* mtx; + _texture_z_light_fog_prim(game->graph); + if (game->frame_counter & 1) { + mtx = &actor->_08->_70; + } else { + mtx = &actor->_08->_170; + } + + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z + 1.5f + GETREG(NMREG, 0xe) * 0.01f, FALSE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + Matrix_rotateXYZ(-0xe38, 0, 0, TRUE); + Matrix_rotateXYZ(0, 0, actor->_74, TRUE); + Matrix_rotateXYZ(actor->_78, 0, 0, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + Matrix_rotateXYZ(DEG2SHORT_ANGLE(90), 0, DEG2SHORT_ANGLE2(180), TRUE); + + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(game, &actor->_08->_00, mtx, NULL, NULL, actor); + CLOSE_DISP(game->graph); } From 7e341daa71fd73633ebe491d6482e3b8f5854320 Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 13 Feb 2025 10:25:48 -0500 Subject: [PATCH 11/26] match insect mino --- include/ac_museum_insect_priv.h | 24 +- src/actor/ac_museum_insect_mino.c_inc | 310 ++++++++++++++++++++++++++ 2 files changed, 322 insertions(+), 12 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index ed03bee0..6f019efd 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -288,18 +288,18 @@ void minsect_kuwagata_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_kuwagata_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_mino.c_inc -void minsect_mino_up_init(void); -void minsect_mino_up(void); -void minsect_mino_down_init(void); -void minsect_mino_down(void); -void minsect_mino_move_init(void); -void minsect_mino_move(void); -void minsect_mino_check_dush_player(void); -void minsect_mino_furiko(void); -void minsect_mino_wait_init(void); -void minsect_mino_wait(void); -void minsect_mino_hineri(void); -void minsect_mino_setupAction(void); +void minsect_mino_up_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_up(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_down_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_down(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_check_dush_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_furiko(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_hineri(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_mino_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game); void minsect_mino_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_mino_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_mino_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); diff --git a/src/actor/ac_museum_insect_mino.c_inc b/src/actor/ac_museum_insect_mino.c_inc index 356389bc..d5ce26cd 100644 --- a/src/actor/ac_museum_insect_mino.c_inc +++ b/src/actor/ac_museum_insect_mino.c_inc @@ -1 +1,311 @@ #include "ac_museum_insect_priv.h" + +void minsect_mino_up_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_40 = 0.165f; + actor->_6E = (s16)RANDOM_F(20.f) + 50; + actor->_44.x = 30.f; + actor->_7E = actor->_78; +} + +void minsect_mino_up(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + actor->_1C.y += actor->_40; + if (actor->_1C.y > mino_top_pos.y - 10.f) { + actor->_1C.y = mino_top_pos.y - 10.f; + if (RANDOM_F(1.f) > 0.5f) { + minsect_mino_setupAction(actor, 0, game); + + } else { + minsect_mino_setupAction(actor, 3, game); + } + } else if (actor->_6E < 0) { + if (actor->_40) { + actor->_6E = 10; + actor->_40 = 0.f; + } else { + actor->_40 = 0.165f; + actor->_6E = (s16)RANDOM_F(20.f) + 50; + } + actor->_44.x = 30.f; + actor->_7E = actor->_78; + } +} + +void minsect_mino_down_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_7E = actor->_78; + if (GETREG(NMREG, 0x14)) { + actor->_60 = GETREG(NMREG, 0x14) * 0.01f; + } else { + actor->_60 = 1.8f; + } + actor->_40 = GETREG(NMREG, 0x13) * 0.01f + 4.0f; + actor->_82 = 0; +} + +void minsect_mino_down(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (add_calc(&actor->_40, 0.0f, CALC_EASE(GETREG(NMREG, 0x15) * 0.01f + 0.25f), + (GETREG(NMREG, 0x16) * 0.01f + 3.0f) * 0.5f, 0.05f) < GETREG(NMREG, 0x1a) * 0.01f + 0.1f) { + if (!add_calc(&actor->_60, 0.0f, CALC_EASE(GETREG(NMREG, 0x17) * 0.01f + 0.5f), + (GETREG(NMREG, 0x18) * 0.01f + 0.08f) * 0.5f, 0.005f)) { + actor->_44.x = 30.f; + minsect_mino_setupAction(actor, 0, game); + return; + } + actor->_44.x = 0.0f; + actor->_5C = 0.0f; + actor->_1C.y -= actor->_40; + actor->_82 += (s16)DEG2SHORT_ANGLE2(GETREG(NMREG, 0x1b) * 0.01f + 25.f); + } + actor->_1C.y += actor->_60 * sin_s(actor->_82); + if (actor->_1C.y < mino_bottom_pos.y) { + actor->_1C.y = mino_bottom_pos.y; + } else if (actor->_1C.y > mino_top_pos.y - 10.f) { + actor->_1C.y = mino_top_pos.y - 10.f; + } +} + +void minsect_mino_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + return; +} + +void minsect_mino_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + if (actor->_8C & 2) { + if (actor->_40 < 0.f) { + actor->_1C.y += actor->_40; + if (actor->_1C.y < mino_bottom_pos.y + 10.f) { + actor->_8C |= 8; + actor->_8C &= ~2; + actor->_6E = (s16)RANDOM_F(360.f) + 40; + } + } else if (actor->_8C & 0x10) { + actor->_1C.y += actor->_40; + if (actor->_1C.y > mino_top_pos.y - 10.f) { + actor->_1C.y = mino_top_pos.y - 10.f; + actor->_8C |= 4; + actor->_8C &= ~2; + actor->_6E = (s16)RANDOM_F(360.F) + 40; + } + if (actor->_6E % 12 == 0) { + actor->_8C &= ~0x10; + } + } else if (actor->_6E % 12 == 0) { + actor->_8C |= 0x10; + } + if (actor->_6E < 0) { + actor->_8C &= ~2; + actor->_6E = (s16)RANDOM_F(360.f) + 40; + } + } else if (actor->_6E < 0) { + if (actor->_8C & 4) { + if (RANDOM_F(1.f) > 0.5f) { + minsect_mino_setupAction(actor, 3, game); + return; + } + actor->_6E = (s16)RANDOM_F(20.f) + 40; + actor->_40 = -0.45f; + } else if (actor->_8C & 8 || RANDOM_F(1.f) > 0.5f) { + if (RANDOM_F(1.f) > 0.6f) { + minsect_mino_setupAction(actor, 2, game); + return; + } + actor->_6E = (s16)RANDOM_F(20.f) + 50; + actor->_40 = 0.165f; + actor->_8C |= 0x10; + actor->_44.x += 40.f; + actor->_7E = actor->_78; + } else if (RANDOM_F(1.f) > 0.7f) { + minsect_mino_setupAction(actor, 0, game); + } else { + actor->_6E = (s16)RANDOM_F(20.f) + 40; + actor->_40 = -0.45f; + } + + actor->_8C &= ~0xc; + actor->_8C |= 2; + } +} + +void minsect_mino_check_dush_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + if (search_position_distance(&actor->_1C, &player->actor_class.world.position) < 75.f && + player->actor_class.speed > 6.0f) { + if (RANDOM_F(1.f) > 0.2f && actor->_6E < 0x1e) { + minsect_mino_setupAction(actor, 2, game); + } else { + minsect_mino_setupAction(actor, 0, game); + } + } +} + +void minsect_mino_furiko(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + f32 v, v2, v3; + if (actor->_44.x) { + add_calc(&actor->_5C, actor->_44.x, CALC_EASE(0.7f), 0.75f, 0.05f); + } else { + add_calc(&actor->_5C, actor->_44.x, CALC_EASE(0.3f), 0.25f, 0.05f); + } + + if (actor->_5C == actor->_44.x) { + actor->_44.x = 0.0f; + } + + add_calc_short_angle2(&actor->_7C, actor->_7E, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(1.25), DEG2SHORT_ANGLE(0.25f)); + + if (GETREG(NMREG, 0x10)) { + v = GETREG(NMREG, 0x10) * 0.01f; + } else { + v = 0.2f; + } + + if (GETREG(NMREG, 0x11)) { + v2 = GETREG(NMREG, 0x11) * 0.01f; + } else { + v2 = 1.f; + } + + actor->_58 = MAX(1.f, mino_top_pos.y - actor->_1C.y); + actor->_70 += (s16)DEG2SHORT_ANGLE2(((v2 * actor->_5C + 35.f) / actor->_58) * 1.8f * 0.5f); + actor->_68.x = DEG2SHORT_ANGLE2(v * actor->_5C) * sin_s(actor->_70); +} + +void minsect_mino_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E = (s16)RANDOM_F(360.f) + 40; +} + +void minsect_mino_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + if (actor->_6E < 0) { + if (actor->_1C.y >= mino_top_pos.y - 2.f && (RANDOM_F(1.f) > 0.2f || GETREG(NMREG, 0x14))) { + minsect_mino_setupAction(actor, 3, game); + } else if (RANDOM_F(1.f) > 0.5f) { + minsect_mino_setupAction(actor, 1, game); + } else { + actor->_6E = (s16)RANDOM_F(360.f) + 40; + } + } +} + +void minsect_mino_hineri(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_58 = MAX(1.f, mino_top_pos.y - actor->_1C.y); + actor->_72 += (s16)DEG2SHORT_ANGLE2((35.f / actor->_58) * 1.2f * 0.5f); + actor->_78 = 5461.f * sin_s(actor->_72); + actor->_7A--; + if (actor->_7A < 0) { + actor->_7A = (s16)RANDOM_F(360.f) + 40; + } else if (actor->_76 < 7) { + static float scaleX_table[] = { 0.01f, 0.00875f, 0.01125f, 0.00875f, 0.01125f, 0.00875f, 0.01125f }; + static float scaleY_table[] = { 0.01f, 0.01125f, 0.00875f, 0.01125f, 0.00875f, 0.01125f, 0.00875f }; + int index = actor->_76; + f32 temp = 2.f; + BOOL a = chase_f(&actor->_34.x, (temp / 2.f) * scaleX_table[index], 0.001125f); + BOOL b = chase_f(&actor->_34.y, (temp / 2.f) * scaleY_table[index], 0.001125f); + if ((a & b) == TRUE) { + if (actor->_76 == 3) { + if (actor->_80 == 0 && RANDOM_F(1.f) > 0.4f) { + actor->_80 = 1; + } else if (actor->_80 != 0 && RANDOM_F(1.f) > 0.2f) { + actor->_80 = 0; + } + } + actor->_76--; + if (actor->_76 < 0) { + actor->_44.x += 25.f; + actor->_7E = actor->_78; + actor->_76 = (s16)(RANDOM_F(5.f) * 60.f) + 307; + } + } + } else { + actor->_76--; + } +} + +void minsect_mino_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) { + static PRIV_INSECT_PROCESS init_proc[] = { minsect_mino_wait_init, minsect_mino_move_init, minsect_mino_up_init, + minsect_mino_down_init }; + static PRIV_INSECT_PROCESS move_proc[] = { minsect_mino_wait, minsect_mino_move, minsect_mino_up, + minsect_mino_down }; + actor->_04 = move_proc[r4]; + init_proc[r4](actor, game); +} + +void minsect_mino_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_1C = mino_base_pos; + actor->_34.x = 0.01f; + actor->_34.y = 0.01f; + actor->_34.z = 0.01f; + actor->_5C = 0.0f; + actor->_44.x = 0.0f; + actor->_68 = ZeroSVec; + actor->_6E = (s16)RANDOM_F(360.f) + 40; + actor->_72 = qrand(); + actor->_76 = (s16)(RANDOM_F(5.f) * 60.f) + 307; + actor->_7A = (s16)RANDOM_F(360.f) + 40; + minsect_mino_setupAction(actor, 0, game); +} + +void minsect_mino_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + if (actor->_04 != minsect_mino_down && actor->_04 != minsect_mino_up) { + minsect_mino_check_dush_player(actor, game); + } + minsect_mino_furiko(actor, game); + minsect_mino_hineri(actor, game); + if (GETREG(NMREG, 1) && (play->game_frame & 7) == 0) { + xyz_t p = actor->_1C; + p = actor->_1C; + p.y += GETREG(NMREG, 5) * 0.01f; + Common_Get(clip.effect_clip)->effect_make_proc(101, p, 1, 0, game, 0x5843, 2, 0); + Common_Get(clip.effect_clip)->effect_make_proc(101, actor->_1C, 1, 0, game, 0x5843, 1, 0); + Common_Get(clip.effect_clip)->effect_make_proc(101, mino_base_pos, 1, 0, game, 0x5843, 3, 0); + Common_Get(clip.effect_clip)->effect_make_proc(101, mino_top_pos, 1, 0, game, 0x5843, 1, 0); + } + actor->_04(actor, game); +} + +void minsect_mino_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim(game->graph); + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y + actor->_58, actor->_1C.z, FALSE); + Matrix_rotateXYZ(0, actor->_7C, 0, TRUE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + Matrix_rotateXYZ(0, -actor->_7C, 0, TRUE); + Matrix_translate(0.f, -actor->_58, 0.f, TRUE); + Matrix_rotateXYZ(0, actor->_78, 0, TRUE); + Matrix_translate(0.f, 0.f, -2.5f, TRUE); + Matrix_rotateXYZ(DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE2(180), 0, TRUE); + Matrix_scale(actor->_34.x, actor->_34.y, actor->_34.z, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff); + if (actor->_80) { + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][1]); + } else { + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + } + Matrix_translate(actor->_1C.x, actor->_1C.y + actor->_58, actor->_1C.z, FALSE); + Matrix_rotateXYZ(0, actor->_7C, 0, TRUE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + Matrix_rotateXYZ(0, -actor->_7C, 0, TRUE); + Matrix_translate(0.0f, -actor->_58, 0.0f, TRUE); + Matrix_rotateXYZ(0, actor->_78, 0, TRUE); + if (GETREG(NMREG, 5)) { + Matrix_translate(GETREG(NMREG, 4) * 0.001f, GETREG(NMREG, 5) * 0.01f, GETREG(NMREG, 6) * 0.01f, TRUE); + } else if (actor->_80) { + Matrix_translate(0.0f, 7.5f, 0.f, TRUE); + } else { + Matrix_translate(0.0f, 5.f, 0.f, TRUE); + } + if (GETREG(NMREG, 7)) { + Matrix_scale(1.5f, actor->_58 / ((mino_top_pos.y - mino_base_pos.y) - (GETREG(NMREG, 7) * 0.01f)), 1.f, TRUE); + } else { + Matrix_scale(1.5f, actor->_58 / ((mino_top_pos.y - mino_base_pos.y) - 10.f), 1.f, TRUE); + } + Matrix_translate(0.31f, -8.7f, -2.5f, TRUE); + Matrix_rotateXYZ(DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE2(180), 0, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][2]); + CLOSE_DISP(game->graph); + minsect_draw_shadow(actor, game); +} From 2ce12ebbb2a11c7e43dfd6ff0b3d4fcd8d1332ab Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 13 Feb 2025 14:40:52 -0500 Subject: [PATCH 12/26] match insect_kumo --- include/ac_museum_insect_priv.h | 28 +-- src/actor/ac_museum_insect_kumo.c_inc | 276 ++++++++++++++++++++++++++ 2 files changed, 290 insertions(+), 14 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index 6f019efd..e328cc5c 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -305,20 +305,20 @@ void minsect_mino_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_mino_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_kumo.c_inc -void minsect_kumo_hide_init(void); -void minsect_kumo_hide(void); -void minsect_kumo_up_init(void); -void minsect_kumo_up(void); -void minsect_kumo_down_init(void); -void minsect_kumo_down(void); -void minsect_kumo_move_init(void); -void minsect_kumo_move(void); -void minsect_kumo_check_player(void); -void minsect_kumo_furiko(void); -void minsect_kumo_wait_init(void); -void minsect_kumo_wait(void); -void minsect_kumo_hineri(void); -void minsect_kumo_setupAction(void); +void minsect_kumo_hide_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_hide(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_up_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_up(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_down_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_down(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_furiko(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_hineri(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void minsect_kumo_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game); void minsect_kumo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_kumo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_kumo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); diff --git a/src/actor/ac_museum_insect_kumo.c_inc b/src/actor/ac_museum_insect_kumo.c_inc index 356389bc..adbfc2cb 100644 --- a/src/actor/ac_museum_insect_kumo.c_inc +++ b/src/actor/ac_museum_insect_kumo.c_inc @@ -1 +1,277 @@ #include "ac_museum_insect_priv.h" + +void minsect_kumo_hide_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_40 = 0.165f; +} + +void minsect_kumo_hide(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_1C.y += actor->_40; + if (actor->_1C.y > kumo_top_pos.y + 10.f) { + actor->_1C.y = kumo_top_pos.y + 10.f; + } +} + +void minsect_kumo_up_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_40 = 0.165f; + actor->_6E = (s16)RANDOM_F(20.f) + 50; + actor->_44.x = 10.f; + actor->_7E = actor->_78; +} + +void minsect_kumo_up(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + actor->_1C.y += actor->_40; + if (actor->_1C.y > kumo_top_pos.y - 10.f) { + actor->_1C.y = kumo_top_pos.y - 10.f; + minsect_kumo_setupAction(actor, 0, game); + } else if (actor->_6E < 0) { + actor->_6E = (s16)RANDOM_F(20.f) + 50; + actor->_40 = 0.165f; + actor->_7E = actor->_78; + } +} + +void minsect_kumo_down_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_44.x = 60.f; + actor->_7E = DEG2SHORT_ANGLE(90); + if (GETREG(NMREG, 0x14)) { + actor->_60 = GETREG(NMREG, 0x14) * 0.01f; + } else { + actor->_60 = 1.8f; + } + actor->_40 = GETREG(NMREG, 0x13) * 0.01f + 4.0f; + actor->_82 = 0; +} + +void minsect_kumo_down(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (add_calc(&actor->_40, 0.f, CALC_EASE(GETREG(NMREG, 0x15) * 0.01f + 0.25f), + (GETREG(NMREG, 0x16) * 0.01f + 3.0f) * 0.5f, 0.05f) < (GETREG(NMREG, 0x1a) * 0.01f + 0.1f)) { + if (!add_calc(&actor->_60, 0.f, CALC_EASE(GETREG(NMREG, 0x17) * 0.01f + 0.5f), + (GETREG(NMREG, 0x18) * 0.01f + 0.08f) * 0.5f, 0.005f)) { + actor->_44.x = 40.f; + minsect_kumo_setupAction(actor, 0, game); + return; + } + actor->_1C.y -= actor->_40; + } + if (actor->_1C.y < kumo_bottom_pos.y) { + actor->_1C.y = kumo_bottom_pos.y; + } else if (actor->_1C.y > kumo_top_pos.y - 10.f) { + actor->_1C.y = kumo_top_pos.y - 10.f; + } +} + +void minsect_kumo_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + return; +} + +void minsect_kumo_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + if (actor->_8C & 2) { + if (actor->_40 < 0.f) { + actor->_1C.y += actor->_40; + if (actor->_1C.y < kumo_bottom_pos.y + 10.f) { + actor->_8C |= 8; + actor->_8C &= ~2; + actor->_6E = (s16)RANDOM_F(360.f) + 40; + } + } else if (actor->_8C & 0x10) { + actor->_1C.y += actor->_40; + if (actor->_1C.y > kumo_top_pos.y - 10.f) { + actor->_1C.y = kumo_top_pos.y - 10.f; + actor->_8C |= 4; + actor->_8C &= ~2; + actor->_6E = (s16)RANDOM_F(360.f) + 40; + } + if (actor->_6E % 12 == 0) { + actor->_8C &= ~0x10; + } + } else if (actor->_6E % 12 == 0) { + actor->_8C |= 0x10; + } + if (actor->_6E < 0) { + actor->_8C &= ~2; + actor->_6E = (s16)RANDOM_F(360.f) + 40; + } + } else if (actor->_6E < 0) { + if (actor->_8C & 4) { + if (RANDOM_F(1.f) > 0.5f) { + minsect_kumo_setupAction(actor, 3, game); + return; + } + actor->_6E = (s16)RANDOM_F(20.f) + 40; + actor->_40 = -0.45f; + } else if (actor->_8C & 8 || RANDOM_F(1.f) > 0.5f) { + if (RANDOM_F(1.f) > 0.9f) { + minsect_kumo_setupAction(actor, 2, game); + return; + } + actor->_6E = (s16)RANDOM_F(20.f) + 50; + actor->_40 = 0.165f; + actor->_8C |= 0x10; + actor->_44.x += 5.f; + actor->_7E = actor->_78; + } else { + if (RANDOM_F(1.f) > 0.7f) { + minsect_kumo_setupAction(actor, 0, game); + } else { + actor->_6E = (s16)RANDOM_F(20.f) + 40; + actor->_40 = -0.45f; + } + } + actor->_8C &= ~0xc; + actor->_8C |= 2; + } +} + +void minsect_kumo_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position); + if (dist > 200.f) { + minsect_kumo_setupAction(actor, 4, game); + } else if (dist < 100.f && actor->_04 == minsect_kumo_hide) { + minsect_kumo_setupAction(actor, 3, game); + } +} + +void minsect_kumo_furiko(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + f32 v, v2; + if (actor->_44.x) { + add_calc(&actor->_5C, actor->_44.x, CALC_EASE(0.7f), 0.75f, 0.05f); + } else { + add_calc(&actor->_5C, actor->_44.x, CALC_EASE(0.3f), 0.25f, 0.05f); + } + if (actor->_5C == actor->_44.x) { + actor->_44.x = 0.f; + } + + add_calc_short_angle2(&actor->_7C, actor->_7E, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); + if (GETREG(NMREG, 0x10)) { + v = GETREG(NMREG, 0x10) * 0.01f; + } else { + v = 0.2f; + } + if (GETREG(NMREG, 0x11)) { + v2 = GETREG(NMREG, 0x11) * 0.01f; + } else { + v2 = 1.f; + } + actor->_58 = MAX(1.f, kumo_top_pos.y - actor->_1C.y); + actor->_70 += (s16)DEG2SHORT_ANGLE2(((v2 * actor->_5C + 35.f) / actor->_58) * 1.8f * 0.5f); + actor->_68.x = sin_s(actor->_70) * DEG2SHORT_ANGLE2(v * actor->_5C); +} + +void minsect_kumo_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E = (s16)RANDOM_F(360.f) + 40; +} + +void minsect_kumo_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + if (actor->_6E < 0) { + if (actor->_1C.y >= kumo_top_pos.y - 2.f && (RANDOM_F(1.f) > 0.2f || GETREG(NMREG, 0x14))) { + minsect_kumo_setupAction(actor, 3, game); + } else if (RANDOM_F(1.f) > 0.5f) { + minsect_kumo_setupAction(actor, 1, game); + } else { + actor->_6E = (s16)RANDOM_F(360.f) + 40; + } + } +} + +void minsect_kumo_hineri(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_58 = MAX(1.f, kumo_top_pos.y - actor->_1C.y); + actor->_72 += (s16)DEG2SHORT_ANGLE2(35.f / actor->_58 * 1.2f * 0.5f); + actor->_78 = 5461.f * sin_s(actor->_72); +} + +void minsect_kumo_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) { + static PRIV_INSECT_PROCESS init_proc[] = { minsect_kumo_wait_init, minsect_kumo_move_init, minsect_kumo_up_init, + minsect_kumo_down_init }; + static PRIV_INSECT_PROCESS move_proc[] = { minsect_kumo_wait, minsect_kumo_move, minsect_kumo_up, + minsect_kumo_down }; + actor->_04 = move_proc[r4]; + init_proc[r4](actor, game); +} + +void minsect_kumo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_1C = kumo_base_pos; + actor->_34.x = 0.01f; + actor->_34.y = 0.01f; + actor->_34.z = 0.01f; + actor->_5C = 0.f; + actor->_44.x = 0.f; + actor->_68 = ZeroSVec; + actor->_6E = (s16)RANDOM_F(360.f) + 40; + actor->_72 = qrand(); + actor->_76 = (s16)(RANDOM_F(5.f) * 60.f) + 307; + actor->_7A = (s16)RANDOM_F(360.f) + 40; + minsect_kumo_setupAction(actor, 4, game); +} + +void minsect_kumo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + minsect_kumo_check_player(actor, game); + minsect_kumo_furiko(actor, game); + if (actor->_04 != minsect_kumo_hide) { + minsect_kumo_hineri(actor, game); + } + if (GETREG(NMREG, 1) && (play->game_frame & 7) == 0) { + xyz_t p = actor->_1C; + p = actor->_1C; + p.y += GETREG(NMREG, 5) * 0.01f; + Common_Get(clip.effect_clip)->effect_make_proc(101, p, 1, 0, game, 0x5843, 2, 0); + Common_Get(clip.effect_clip)->effect_make_proc(101, actor->_1C, 1, 0, game, 0x5843, 1, 0); + Common_Get(clip.effect_clip)->effect_make_proc(101, kumo_base_pos, 1, 0, game, 0x5843, 3, 0); + Common_Get(clip.effect_clip)->effect_make_proc(101, kumo_top_pos, 1, 0, game, 0x5843, 1, 0); + } + actor->_04(actor, game); +} + +void minsect_kumo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim(game->graph); + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y + actor->_58, actor->_1C.z, FALSE); + Matrix_rotateXYZ(0, actor->_7C, 0, TRUE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + Matrix_rotateXYZ(0, -actor->_7C, 0, TRUE); + Matrix_translate(0.f, -actor->_58, 0.f, TRUE); + Matrix_rotateXYZ(0, actor->_78, 0, TRUE); + Matrix_translate(0.f, 0.f, -2.5f, TRUE); + Matrix_rotateXYZ(DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE2(180), 0, TRUE); + Matrix_scale(actor->_34.x, actor->_34.y, actor->_34.z, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff); + if (actor->_80) { + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + } else { + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][1]); + } + CLOSE_DISP(game->graph); + + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y + actor->_58, actor->_1C.z + (GETREG(NMREG, 0x5F)) * 0.01f, FALSE); + Matrix_rotateXYZ(0, actor->_7C, 0, TRUE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + Matrix_rotateXYZ(0, -actor->_7C, 0, TRUE); + Matrix_translate(0.0f, -actor->_58, 0.0f, TRUE); + Matrix_rotateXYZ(0, actor->_78, 0, TRUE); + if (GETREG(NMREG, 5)) { + Matrix_translate(GETREG(NMREG, 4) * 0.001f, GETREG(NMREG, 5) * 0.01f, GETREG(NMREG, 6) * 0.01f, TRUE); + } else { + Matrix_translate(0.0f, 6.5f, 0.f, TRUE); + } + + if (GETREG(NMREG, 7)) { + Matrix_scale(1.5f, actor->_58 / ((kumo_top_pos.y - kumo_base_pos.y) - (GETREG(NMREG, 7) * 0.01f)), 1.f, TRUE); + } else { + Matrix_scale(2.f, actor->_58 / ((kumo_top_pos.y - kumo_base_pos.y) - 10.f), 1.f, TRUE); + } + Matrix_translate(0.f, -8.7f + GETREG(NMREG, 0x5d) * 0.01f, 1.f + GETREG(NMREG, 0x5e) * 0.01f, TRUE); + Matrix_rotateXYZ(DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE2(180), 0, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][2]); + minsect_draw_shadow(actor, game); + CLOSE_DISP(game->graph); +} From 893f3401dedac1fc55e73645734c3d64c33ab558 Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 13 Feb 2025 18:51:54 -0500 Subject: [PATCH 13/26] match insect_goki --- include/ac_museum_insect_priv.h | 14 +- src/actor/ac_museum_insect_base.c_inc | 2 +- src/actor/ac_museum_insect_goki.c_inc | 212 ++++++++++++++++++++++++++ 3 files changed, 220 insertions(+), 8 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index e328cc5c..b8b27829 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -168,7 +168,7 @@ void minsect_draw_shadow(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_fly_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2); void minsect_garden_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2); void minsect_flower_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, const xyz_t* p); -void minsect_goki_BGCheck(void); +void minsect_goki_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); void minsect_kanban_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); void minsect_tree_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); void minsect_rock_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); @@ -325,12 +325,12 @@ void minsect_kumo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_goki.c_inc void minsect_goki_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); -void goki_player_check(void); -void goki_wall_hit_angle_corect_sub(void); -void goki_wall_hit_angle_corect(void); -void goki_set_talk_info_init(void); -void goki_talk_process(void); -void goki_talk_process_init(void); +BOOL goki_player_check(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void goki_wall_hit_angle_corect_sub(MUSEUM_INSECT_PRIVATE_DATA* actor, int angle); +void goki_wall_hit_angle_corect(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void goki_set_talk_info_init(ACTOR* actor); +void goki_talk_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void goki_talk_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_goki_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_goki_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); diff --git a/src/actor/ac_museum_insect_base.c_inc b/src/actor/ac_museum_insect_base.c_inc index ceeded51..17f61dd7 100644 --- a/src/actor/ac_museum_insect_base.c_inc +++ b/src/actor/ac_museum_insect_base.c_inc @@ -48,7 +48,7 @@ void minsect_garden_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2) { } void minsect_flower_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, const xyz_t* p) { } -void minsect_goki_BGCheck(void) { +void minsect_goki_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { } void minsect_kanban_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { } diff --git a/src/actor/ac_museum_insect_goki.c_inc b/src/actor/ac_museum_insect_goki.c_inc index 356389bc..cbe3babf 100644 --- a/src/actor/ac_museum_insect_goki.c_inc +++ b/src/actor/ac_museum_insect_goki.c_inc @@ -1 +1,213 @@ #include "ac_museum_insect_priv.h" + +void minsect_goki_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_1C.x = 280.f; + actor->_1C.y = 40.f; + actor->_1C.z = 320.f; + actor->_34 = ZeroVec; + actor->_40 = 0.f; + actor->_44 = ZeroVec; + actor->_68 = ZeroSVec; + actor->_68.y = (int)RANDOM_F(16.f) * (0x10000 / 16); + actor->_6E = (s16)RANDOM_F(420.f) + 180; + actor->_44.y = -0.225; + actor->_58 = 1.f; + actor->_74 = 0; + actor->_72 = 0; + actor->_78 = 0; +} + +BOOL goki_player_check(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + BOOL ret; + if (player->actor_class.speed > 0 && + search_position_distanceXZ(&player->actor_class.world.position, &actor->_1C) < 40.f) { + actor->_68.y = search_position_angleY(&player->actor_class.world.position, &actor->_1C); + actor->_68.y += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(180.f)); + //! NOTE: huh? + actor->_68.y &= 0xf000; + return TRUE; + } else { + return FALSE; + } +} + +void goki_wall_hit_angle_corect_sub(MUSEUM_INSECT_PRIVATE_DATA* actor, int _angle) { + f32 r = RANDOM_F(1.f); + s16 angle = _angle; + if (actor->_68.y == (s16)(angle + DEG2SHORT_ANGLE2(180))) { + if (r < 0.5f) { + if (r < 0.25f) { + actor->_68.y = angle - DEG2SHORT_ANGLE(90); + } else { + actor->_68.y = angle + DEG2SHORT_ANGLE(90); + } + } else { + actor->_68.y = _angle; + actor->_68.y += (s16)((int)RANDOM2_F(8.f) * 4096); + } + } else if (actor->_68.y - angle > 0) { + if (r < 0.5f) { + actor->_68.y = angle + DEG2SHORT_ANGLE(90); + } else { + actor->_68.y = angle - DEG2SHORT_ANGLE(90); + actor->_68.y += (s16)((int)RANDOM_F(8.f) * 4096); + } + } else { + if (r < 0.5f) { + actor->_68.y = angle - DEG2SHORT_ANGLE(90); + } else { + actor->_68.y = angle + DEG2SHORT_ANGLE(90); + actor->_68.y += (s16)((int)-RANDOM_F(8.f) * 4096); + } + } +} + +void goki_wall_hit_angle_corect(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_8C & 2) { + goki_wall_hit_angle_corect_sub(actor, DEG2SHORT_ANGLE(90)); + } else if (actor->_8C & 4) { + goki_wall_hit_angle_corect_sub(actor, DEG2SHORT_ANGLE(-90)); + } else if (actor->_8C & 8) { + goki_wall_hit_angle_corect_sub(actor, DEG2SHORT_ANGLE(0)); + } else if (actor->_8C & 0x10) { + goki_wall_hit_angle_corect_sub(actor, (s16)DEG2SHORT_ANGLE2(180)); + } +} + +void goki_set_talk_info_init(ACTOR* actor) { + int info = mMmd_InsectInfo(0x1c); + int i; + if (info < 1 || info > 4) { + i = 0x2fa5; + } else { + if (info >= 1 && info <= 4) { + mMsg_Set_free_str(mMsg_Get_base_window_p(), mMsg_FREE_STR0, + common_data.save.save.private_data[info - 1].player_ID.player_name, 8); + } + i = 0x2fa4; + } + mDemo_Set_talk_window_color(&window_color); + mDemo_Set_talk_display_name(0); + mDemo_Set_msg_num(i); + mDemo_Set_use_zoom_sound(TRUE); + mDemo_Set_talk_turn(0); +} + +void goki_talk_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (mDemo_Check(8, &MI_Control_Actor->actor) == TRUE) { + if (mDemo_Check_ListenAble() == FALSE) { + mDemo_Set_ListenAble(); + mDemo_Set_camera(CAMERA2_PROCESS_NORMAL); + mPlib_Set_able_hand_all_item_in_demo(FALSE); + } + } else { + actor->_04 = NULL; + } +} + +void goki_talk_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + mDemo_Request(8, &MI_Control_Actor->actor, goki_set_talk_info_init); + actor->_04 = goki_talk_process; +} + +void minsect_goki_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + xyz_t* target = &player->actor_class.world.position; + if (actor->_04) { + actor->_04(actor, game); + } + + if (actor->_72 == 0) { + if (search_position_distanceXZ(&actor->_1C, target) < 20.f && player->actor_class.speed > 7.f && + RANDOM_F(1.f) > 0.4f) { + actor->_72 = 1; + actor->_40 = RANDOM_F(1.f) + 2.f + GETREG(NMREG, 3) * 0.01f; + actor->_34.y = GETREG(NMREG, 2) * 0.01f + 3.25f; + actor->_74 = 1; + sAdo_OngenTrgStart(0x132, &actor->_1C); + return; + } + + if (search_position_distanceXZ(&actor->_1C, target) < 15.f && player->actor_class.speed > 1.f) { + if (RANDOM_F(1.f) > 0.9f) { + actor->_72 = 1; + actor->_40 = RANDOM_F(1.f) + 2.f + GETREG(NMREG, 3) * 0.01f; + actor->_34.y = GETREG(NMREG, 2) * 0.01f + 3.25f; + actor->_74 = 1; + sAdo_OngenTrgStart(0x132, &actor->_1C); + return; + } + + if (player->actor_class.speed > 0.f && actor->_78 != 1) { + goki_talk_process_init(actor, game); + actor->_78 = 1; + } + } + + if (actor->_40 > 0.f) { + goki_wall_hit_angle_corect(actor, game); + mID_insect_moveF(actor); + sAdo_OngenPos((u32)actor, 0xa8, &actor->_1C); + if (actor->_6E-- < 0) { + if (RANDOM_F(1.f) > 0.2f) { + actor->_6E = (s16)RANDOM_F(420.f) + 180; + actor->_40 = 0.f; + } else if (goki_player_check(actor, game)) { + actor->_6E = (s16)RANDOM_F(120.f) + 40; + } else { + actor->_6E = (s16)RANDOM_F(120.f) + 40; + actor->_68.y = qrand() & 0xf000; + } + } + } else { + if (actor->_6E-- < 0) { + actor->_6E = (s16)RANDOM_F(120.f) + 40; + actor->_40 = 3.5f; + actor->_68.y = qrand() & 0xf000; + } else if (goki_player_check(actor, game)) { + actor->_6E = (s16)RANDOM_F(120.f) + 40; + actor->_40 = 3.5f; + } + } + } else { + actor->_68.x = -atans_table(actor->_40, actor->_34.y); + if (actor->_34.y < 0.f && actor->_8C & 0x20) { + actor->_68.x = 0; + actor->_72 = 0; + actor->_6E = (s16)RANDOM_F(120.f) + 40; + actor->_40 = 3.5f; + actor->_74 = 0; + return; + } + + mID_insect_moveF(actor); + actor->_34.y += actor->_44.y; + mi_batta_hane_anime(actor); + + if (actor->_76 <= 0) { + actor->_76 = 7; + } + } + minsect_goki_BGCheck(actor); +} + +void minsect_goki_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim(game->graph); + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + CLOSE_DISP(game->graph); + if (actor->_74) { + _texture_z_light_fog_prim_xlu(game->graph); + OPEN_POLY_XLU_DISP(game->graph); + Matrix_scale(actor->_58, 1.0f, 1.0f, TRUE); + gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][1]); + CLOSE_POLY_XLU_DISP(game->graph); + } + minsect_draw_shadow(actor, game); +} From 3db245e481c9eca49f6f91ca91a22e7d96421386 Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 13 Feb 2025 21:22:37 -0500 Subject: [PATCH 14/26] match insect_genji --- include/ac_museum_insect_priv.h | 26 ++- src/actor/ac_museum_insect_genji.c_inc | 289 +++++++++++++++++++++++++ 2 files changed, 305 insertions(+), 10 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index b8b27829..d1150ee1 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -53,7 +53,13 @@ typedef struct _MUSEUM_INSECT_PRIVATE_DATA { int _50; int _54; f32 _58; - f32 _5C; + union { + f32 _5C; + struct { + s16 _5C_s16; + s16 _5E_s16; + }; + }; f32 _60; artificial_padding(0x60, 0x68, int); s_xyz _68; @@ -71,8 +77,7 @@ typedef struct _MUSEUM_INSECT_PRIVATE_DATA { artificial_padding(0x82, 0x8C, s16); s16 _8C; s16 _8E; - s16 _90; - s16 _92; + int _90; } MUSEUM_INSECT_PRIVATE_DATA; typedef struct _INSECT_DISPLAY_MSG_INFO { @@ -83,7 +88,8 @@ typedef struct _INSECT_DISPLAY_MSG_INFO { typedef struct _MUSEUM_INSECT_ACTOR { ACTOR actor; // offset: 0x0 MUSEUM_INSECT_PRIVATE_DATA privInsects[aINS_INSECT_TYPE_NUM]; // offset 0x174 - artificial_padding(0x174, 0x24b8, MUSEUM_INSECT_PRIVATE_DATA[aINS_INSECT_TYPE_NUM]); + MUSEUM_INSECT_PRIVATE_DATA _1894[7]; // offset 0x1894 + artificial_padding(0x1894, 0x24b8, MUSEUM_INSECT_PRIVATE_DATA[7]); MUSEUM_INSECT_SKELETON _24B8[4]; int _2F78; // offset: 0x2F78 int _2F7C; // offset: 0x2F7C @@ -335,12 +341,12 @@ void minsect_goki_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_goki_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_genji.c_inc -void mi_genji_check_player(void); -void genji_light_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); -void genji_light_make(void); -void genji_light_anime(void); -void genji_light_move(void); -void genji_light_draw(void); +void mi_genji_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void genji_light_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game, s16 r5); +void genji_light_make(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game, s16 i); +void genji_light_anime(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void genji_light_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void genji_light_draw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_genji_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_genji_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_genji_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); diff --git a/src/actor/ac_museum_insect_genji.c_inc b/src/actor/ac_museum_insect_genji.c_inc index 356389bc..fb7555f5 100644 --- a/src/actor/ac_museum_insect_genji.c_inc +++ b/src/actor/ac_museum_insect_genji.c_inc @@ -1 +1,290 @@ #include "ac_museum_insect_priv.h" + +void mi_genji_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position); + if (dist > 160.f && actor->_90 != -1 && actor->_7A == 0) { + actor->_7C = 0; + mEnv_CancelReservedPointLight(actor->_90, (GAME_PLAY*)game); + actor->_90 = -1; + } else if (dist > 160.f && actor->_90 != -1 && actor->_7C != 0) { + actor->_7C = 0; + } else if (dist <= 160.f) { + actor->_7C = 150; + if (actor->_90 == -1) { + xyz_t p = actor->_1C; + p.z += 10.f; + actor->_90 = mEnv_ReservePointLight((GAME_PLAY*)game, &p, 0x78, 0xff, 0xb4, actor->_7A); + } + } +} + +void genji_light_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game, s16 r5) { + actor->_8C |= 1; + actor->_1C = genji_mizu_pos; + actor->_58 = actor->_1C.y; + actor->_10 = RANDOM_F(50.f) + 100.f; + actor->_0C = 1.f; + actor->_70 = (s16)RANDOM_F(180.f); + actor->_5C_s16 = qrand(); + actor->_68.y = qrand(); + if (r5) { + actor->_5E_s16 = qrand(); + } else { + actor->_5E_s16 = DEG2SHORT_ANGLE(20); + } + + actor->_34 = ZeroVec; + actor->_44 = ZeroVec; + actor->_40 = 0.75f; + actor->_6E = (s16)RANDOM_F(120.f) + 60; + actor->_78 = r5; +} + +void genji_light_make(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game, s16 i) { + actor->_8C |= 1; + actor->_1C = genji_mizu_pos; + actor->_1C.x += RANDOM2_F(50.f); + actor->_1C.z += RANDOM2_F(36.f); + actor->_1C.y += 5.f; + actor->_58 = actor->_1C.y; + actor->_10 = RANDOM_F(50.f) + 100.f; + actor->_0C = 0.f; + actor->_70 = RANDOM_F(180.f); + actor->_5C_s16 = qrand(); + actor->_68.y = qrand(); + actor->_5E_s16 = qrand(); + actor->_34 = ZeroVec; + actor->_44 = ZeroVec; + actor->_40 = 0.75f; + actor->_6E = (s16)RANDOM_F(120.f) + 60; + actor->_78 = i; +} + +void genji_light_anime(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_70 < 30) { + actor->_72 = 0; + actor->_74 = 1; + actor->_76 = 255.f - 255 * (actor->_70 / 30.f); + } else if (actor->_70 < 60) { + actor->_72 = 1; + actor->_74 = 2; + actor->_76 = 255.f - 255 * ((actor->_70 - 30.f) / 30.f); + } else if (actor->_70 < 90) { + actor->_72 = 2; + actor->_74 = 3; + actor->_76 = 255.f - 255 * ((actor->_70 - 60.f) / 30.f); + } else if (actor->_70 < 120) { + actor->_72 = 2; + actor->_74 = 3; + actor->_76 = 255 * ((actor->_70 - 90.f) / 30.f); + } else if (actor->_70 < 150) { + actor->_72 = 1; + actor->_74 = 2; + actor->_76 = 255 * ((actor->_70 - 120.f) / 30.f); + } else if (actor->_70 < 180) { + actor->_72 = 0; + actor->_74 = 1; + actor->_76 = 255 * ((actor->_70 - 150.f) / 30.f); + } else { + actor->_70 = 0; + } + actor->_70++; + if (actor->_7C) { + actor->_7A += 3; + if (actor->_7A > actor->_7C) { + actor->_7A = actor->_7C; + } + } else { + actor->_7A -= 3; + if (actor->_7A < 0) { + actor->_7A = 0; + } + } + mEnv_OperateReservedPointLight_Power(actor->_90, actor->_7A); +} + +void genji_light_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + s16 ang; + f32 v; + mEnv_OperateReservedPointLight_Position(actor->_90, &actor->_1C); + actor->_6E--; + if (actor->_8C & 0x100) { + actor->_0C -= 0.0125f; + if (actor->_0C < 0.0125f) { + actor->_8C = 0; + return; + } + } else { + actor->_0C += 0.0125f; + if (actor->_0C > 1.f) { + actor->_0C = 1.f; + } + } + mID_insect_moveF(actor); + ang = add_calc_short_angle2(&actor->_68.y, actor->_5E_s16, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.5f), + DEG2SHORT_ANGLE(0.25f)); + if (actor->_6E < 0) { + actor->_5E_s16 = qrand(); + actor->_6E = (s16)RANDOM_F(120.f) + 60; + } else if (actor->_8C & 8) { + actor->_5E_s16 = DEG2SHORT_ANGLE2(RANDOM2_F(60.f)); + actor->_6E = (s16)RANDOM_F(120.f) + 60; + } else if (actor->_8C & 0x10) { + actor->_6E = (s16)RANDOM_F(120.f) + 60; + actor->_5E_s16 = DEG2SHORT_ANGLE2(-180.f + RANDOM2_F(60.f)); + } else if (actor->_8C & 2) { + actor->_6E = (s16)RANDOM_F(120.f) + 60; + actor->_5E_s16 = DEG2SHORT_ANGLE2(90.f + RANDOM2_F(90.f)); + } else if (actor->_8C & 4) { + actor->_6E = (s16)RANDOM_F(120.f) + 60; + actor->_5E_s16 = DEG2SHORT_ANGLE2(-90.f + RANDOM2_F(90.f)); + } + actor->_5C_s16 += (s16)DEG2SHORT_ANGLE2(RANDOM_F(5.f) + 1.5f); + add_calc(&actor->_58, actor->_10, CALC_EASE(0.3f), 0.75f, 0.25f); + actor->_1C.y = actor->_58 + 10.f * sin_s(actor->_5C_s16); + minsect_tree_ObjCheck(actor); + minsect_fly_BGCheck(actor, 360.0, 40.0); + genji_light_anime(actor, game); +} + +void genji_light_draw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + xyz_t p = actor->_1C; + u8 a, b; + if ((f32)__fabs(actor->_0C) < 0.008f) { + return; + } + + if (actor->_78 == 0) { + p.x += -3.f * sin_s(-actor->_68.z); + p.y += -3.f * cos_s(-actor->_68.z); + p.z += 6.f + cos_s(actor->_7E); + } + a = actor->_76; + b = (255 - actor->_76); + a -= (u8)(a * (1.f - actor->_0C)); + b -= (u8)(b * (1.f - actor->_0C)); + _texture_z_light_fog_prim_xlu(game->graph); + OPEN_POLY_XLU_DISP(game->graph); + Matrix_translate(p.x, p.y, p.z, FALSE); + Matrix_mult(&((GAME_PLAY*)game)->billboard_matrix, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(POLY_XLU_DISP++, 0, 0xff, 0x9b, a); + gSPDisplayList(POLY_XLU_DISP++, m_genji_disp_tbl[actor->_72]); + gDPSetEnvColor(POLY_XLU_DISP++, 0, 0xff, 0x9b, b); + gSPDisplayList(POLY_XLU_DISP++, m_genji_disp_tbl[actor->_74]); + CLOSE_POLY_XLU_DISP(game->graph); + minsect_draw_shadow(actor, game); +} + +void minsect_genji_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + genji_light_ct(actor, game, 0); + actor->_1C = base_genji_pos; + actor->_68.z = DEG2SHORT_ANGLE(-25); + actor->_82 = (s16)RANDOM_F(60.f) + 600; +} + +void minsect_genji_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + MUSEUM_INSECT_PRIVATE_DATA* priv; + BOOL found; + s16 i; + found = FALSE; + priv = &MI_Control_Actor->_1894[0]; + mi_genji_check_player(actor, game); + mEnv_OperateReservedPointLight_Position(actor->_90, &actor->_1C); + actor->_8E = get_now_mind_flag(actor, game); + genji_light_anime(actor, game); + if (actor->_8E == 0) { + actor->_0C -= 0.04f; + if (actor->_0C < 0.04f) { + actor->_0C = 0.f; + if (actor->_90 != -1) { + mEnv_CancelReservedPointLight(actor->_90, (GAME_PLAY*)game); + actor->_90 = -1; + } + } + } else { + actor->_0C += 0.04f; + if (actor->_0C > 1.0f) { + actor->_0C = 1.0f; + } + } + actor->_82--; + if (actor->_82 < 0) { + actor->_80 = DEG2SHORT_ANGLE(-7); + actor->_82 = (int)RANDOM_F(60.f) + 600; + if (RANDOM_F(1.f) > 0.5f) { + actor->_5E_s16 = DEG2SHORT_ANGLE(RANDOM2_F(40.f)); + } else { + actor->_5E_s16 = DEG2SHORT_ANGLE(20); + } + } + if (actor->_7E == actor->_80) { + actor->_80 = 0; + } + add_calc_short_angle2(&actor->_68.z, actor->_5E_s16, CALC_EASE2(0.4f), + (s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 3) * 0.01f + 5.f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_7E, actor->_80, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f)); + for (i = 1; i < 7; i++, priv++) { + if (priv->_8C & 1) { + if ((GETREG(NMREG, 0xF) || (RANDOM_F(1.f) > 0.9f && actor->_6E < 0)) && (priv->_8C & 0x100) == 0) { + + if (priv->_90 != -1) { + mEnv_CancelReservedPointLight(priv->_90, (GAME_PLAY*)game); + priv->_90 = -1; + } + priv->_8C |= 0x100; + actor->_6E = RANDOM_F(1500.f); + found = TRUE; + } else if (actor->_8E == 0) { + if (actor->_6E < 0 && (priv->_8C & 0x100) == 0) { + if (priv->_90 != -1) { + mEnv_CancelReservedPointLight(priv->_90, (GAME_PLAY*)game); + priv->_90 = -1; + } + priv->_8C |= 0x100; + actor->_6E = RANDOM_F(1500.f); + } + found = TRUE; + } + mi_genji_check_player(priv, game); + genji_light_move(priv, game); + priv->_14 = actor->_14; + } else if (actor->_8E == 1) { + if (actor->_6E < 0) { + genji_light_make(priv, game, i); + actor->_6E = RANDOM_F(300.f); + } + found = TRUE; + } + } + + if (found == TRUE) { + actor->_6E--; + } +} + +extern Gfx act_m_mu_genji_modelT; + +void minsect_genji_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + MUSEUM_INSECT_PRIVATE_DATA* priv = &MI_Control_Actor->_1894[0]; + int i; + for (i = 0; i < 6; i++, priv++) { + if (priv->_8C & 1) { + genji_light_draw(priv, game); + } + } + _texture_z_light_fog_prim(game->graph); + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x + GETREG(NMREG, 0x10) * 0.01f, actor->_1C.y + GETREG(NMREG, 0x11) * 0.01f, + actor->_1C.z + GETREG(NMREG, 0x12) * 0.01f, FALSE); + Matrix_rotateXYZ(0, 0, actor->_68.z, TRUE); + Matrix_rotateXYZ(actor->_7E, 0, 0, TRUE); + Matrix_rotateXYZ(DEG2SHORT_ANGLE(110), 0, DEG2SHORT_ANGLE2(180), TRUE); + Matrix_scale(0.01f, 0.01f, 0.01f, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(NEXT_POLY_OPA_DISP, &act_m_mu_genji_modelT); + CLOSE_DISP(game->graph); + genji_light_draw(actor, game); +} From 88bb9b6bced3b92bbcf315ad7d8cfcf540bcfee8 Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 13 Feb 2025 22:16:01 -0500 Subject: [PATCH 15/26] match insect_dango --- include/ac_museum_insect_priv.h | 14 +- src/actor/ac_museum_insect_dango.c_inc | 201 +++++++++++++++++++++++++ 2 files changed, 208 insertions(+), 7 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index d1150ee1..324a8c02 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -352,13 +352,13 @@ void minsect_genji_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_genji_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_dango.c_inc -void mi_dango_defence_anime(void); -void mi_dango_check_player(void); -void mi_dango_move_init(void); -void mi_dango_move(void); -void mi_dango_defence_init(void); -void mi_dango_defence(void); -void mi_dango_setupAction(void); +void mi_dango_defence_anime(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_dango_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_dango_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_dango_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_dango_defence_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_dango_defence(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void mi_dango_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game); void minsect_dango_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_dango_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_dango_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); diff --git a/src/actor/ac_museum_insect_dango.c_inc b/src/actor/ac_museum_insect_dango.c_inc index 356389bc..e09726c6 100644 --- a/src/actor/ac_museum_insect_dango.c_inc +++ b/src/actor/ac_museum_insect_dango.c_inc @@ -1 +1,202 @@ #include "ac_museum_insect_priv.h" + +void mi_dango_defence_anime(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + static f32 scale_table[] = { 1.f, 0.85f, 1.15f, 0.75f, 1.05f, 0.65f, 0.95f }; + if (actor->_7E < 7 && actor->_7E >= 0) { + if (chase_f(&actor->_58, scale_table[actor->_7E], 0.115f) == TRUE) { + actor->_7E--; + } + } else { + actor->_7E--; + } + if (actor->_7E < 0) { + actor->_7E = -1; + } +} + +void mi_dango_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position); + if (dist < 80.f) { + if (player->actor_class.speed > 1.4f) { + actor->_7A += (s16)((dist / 80.f) * 8.f); + } else if (player->actor_class.speed > 5.f) { + actor->_7A += (s16)((dist / 80.f) * 20.f); + } + } +} + +void mi_dango_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E = (s16)RANDOM_F(560.f) + 40; +} + +void mi_dango_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_7C = 0; + actor->_6E--; + if ((f32)__fabs(actor->_40) < 0.008f) { + if (actor->_6E < 0) { + actor->_40 = RANDOM_F(0.1f) + 0.065f; + actor->_6E = (s16)RANDOM_F(560.f) + 40; + } + } else { + if (actor->_6E < 0) { + actor->_6E = (s16)RANDOM_F(260.f) + 40; + actor->_40 = 0.f; + } + chase_angle2(&actor->_68.y, actor->_74, actor->_78); + if (actor->_8C & 2) { + xyz_t p; + xyz_t_sub(&rail_pos[actor->_72], &actor->_1C, &p); + actor->_74 = atans_table(p.z, p.x); + if (ABS((s16)(actor->_68.y - actor->_74)) < DEG2SHORT_ANGLE(1)) { + actor->_8C &= ~2; + } else { + mID_insect_moveF(actor); + } + } else { + xyz_t p; + xyz_t_sub(&rail_pos[actor->_72], &actor->_1C, &p); + actor->_74 = atans_table(p.z, p.x); + if (!chase_xyz_t(&actor->_1C, &rail_pos[actor->_72], actor->_40)) { + if (actor->_8C & 4) { + actor->_72 += actor->_76; + actor->_70 += actor->_76; + actor->_8C &= ~4; + } else if (((actor->_76 < 0 && RANDOM_F(1.f) > 0.85f) || (actor->_76 > 0 && RANDOM_F(1.f) > 0.15f)) && + (actor->_72 < 5) || + actor->_72 == 0) { + xyz_t p2; + if (actor->_76 < 0) { + actor->_8C |= 2; + actor->_8C |= 4; + } + actor->_76 = 1; + actor->_78 = DEG2SHORT_ANGLE(2.5f); + actor->_72 += actor->_76; + actor->_70 += actor->_76; + xyz_t_sub(&rail_pos[actor->_72], &actor->_1C, &p2); + actor->_74 = atans_table(p2.z, p2.x); + } else { + xyz_t p; + if (actor->_76 > 0) { + actor->_8C |= 2; + actor->_8C |= 4; + } + actor->_76 = -1; + actor->_78 = DEG2SHORT_ANGLE(-2.5f); + actor->_72 += actor->_76; + actor->_70 += actor->_76; + xyz_t_sub(&rail_pos[actor->_72], &actor->_1C, &p); + actor->_74 = atans_table(p.z, p.x); + } + } + } + } +} + +void mi_dango_defence_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_7E < 0) { + actor->_7E = 10; + actor->_80 = 1; + } + actor->_6E = (s16)RANDOM_F(260.f) + 500; +} + +void mi_dango_defence(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_6E--; + if (actor->_6E > 0 && actor->_7E < 0) { + actor->_7C = 1; + actor->_80 = 0; + } + if (actor->_6E < 0 && actor->_7C == 1 && actor->_7E < 0) { + if (actor->_80 == 0) { + actor->_80 = 1; + actor->_7E = 10; + } else { + actor->_80 = 0; + actor->_7C = 0; + actor->_7A = 0; + mi_dango_setupAction(actor, 0, game); + } + } +} + +void mi_dango_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) { + static PRIV_INSECT_PROCESS init_proc[] = { mi_dango_move_init, mi_dango_defence_init }; + static PRIV_INSECT_PROCESS move_proc[] = { mi_dango_move, mi_dango_defence }; + actor->_04 = move_proc[r4]; + init_proc[r4](actor, game); +} + +void minsect_dango_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + xyz_t p; + actor->_70 = RANDOM_F(5.f); + if (RANDOM2_F(1.f) > 0.f && actor->_70 < 5 || actor->_70 == 0) { + actor->_76 = 1; + actor->_78 = DEG2SHORT_ANGLE(2.5f); + } else { + actor->_76 = -1; + actor->_78 = DEG2SHORT_ANGLE(-2.5f); + } + actor->_72 = actor->_70 + actor->_76; + actor->_1C = rail_pos[actor->_70]; + xyz_t_sub(&rail_pos[actor->_72], &actor->_1C, &p); + actor->_68.y = actor->_74 = atans_table(p.z, p.x); + actor->_40 = RANDOM_F(0.1f) + 0.065f; + actor->_6E = RANDOM_F(280.f) + 20.f; + actor->_44 = ZeroVec; + actor->_34 = ZeroVec; + actor->_58 = 1.0f; + actor->_7C = 0; + mi_dango_setupAction(actor, 0, game); + actor->_7E = -1; +} + +void minsect_dango_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + mi_dango_defence_anime(actor, game); + mi_dango_check_player(actor, game); + actor->_7A--; + if (actor->_7A < 0) { + actor->_7A = 0; + } + if (actor->_7A > 900) { + actor->_7A = 900; + } + if (actor->_7A > 200) { + if (actor->_7C == 0 && actor->_80 == 0) { + mi_dango_setupAction(actor, 1, game); + } else if (actor->_6E < 10) { + actor->_6E++; + } + } + if (GETREG(NMREG, 1)) { + mi_dango_setupAction(actor, 1, game); + } + actor->_04(actor, game); +} + +void minsect_dango_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim(game->graph); + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE); + if (actor->_7C) { + Matrix_rotateXYZ(DEG2SHORT_ANGLE2(GETREG(NMREG, 5) + 20.f), DEG2SHORT_ANGLE2(GETREG(NMREG, 6)), + DEG2SHORT_ANGLE2(GETREG(NMREG, 7)), TRUE); + } + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + if (actor->_7C) { + Matrix_scale(GETREG(NMREG, 2) * 0.01f + 1.2f, GETREG(NMREG, 3) * 0.01f + 1.2f, GETREG(NMREG, 4) * 0.01f + 1.2f, + TRUE); + } + Matrix_scale(1.f, 1.f, actor->_58, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + if (actor->_7C) { + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][1]); + + } else { + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + } + minsect_draw_shadow(actor, game); + CLOSE_DISP(game->graph); +} From 091e453ed24aee5be6d7893a83ef8fb9b616e3a4 Mon Sep 17 00:00:00 2001 From: roeming Date: Fri, 14 Feb 2025 09:30:44 -0500 Subject: [PATCH 16/26] match insect_okera --- include/ac_museum_insect_priv.h | 18 +-- src/actor/ac_museum_insect_okera.c_inc | 214 +++++++++++++++++++++++++ 2 files changed, 223 insertions(+), 9 deletions(-) diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index 324a8c02..39efe071 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -364,16 +364,16 @@ void minsect_dango_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_dango_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); // ac_museum_insect_okera.c_inc -void mi_okera_check_player(void); +void mi_okera_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_okera_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); -void okera_dig_up_process_init(void); -void okera_dig_up_process(void); -void okera_normal_process_init(void); -void okera_normal_process(void); -void okera_dig_down_process_init(void); -void okera_dig_down_process(void); -void okera_dig_wait_process_init(void); -void okera_dig_wait_process(void); +void okera_dig_up_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void okera_dig_up_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void okera_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void okera_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void okera_dig_down_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void okera_dig_down_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void okera_dig_wait_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void okera_dig_wait_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_okera_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_okera_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); diff --git a/src/actor/ac_museum_insect_okera.c_inc b/src/actor/ac_museum_insect_okera.c_inc index 356389bc..8b8c3eee 100644 --- a/src/actor/ac_museum_insect_okera.c_inc +++ b/src/actor/ac_museum_insect_okera.c_inc @@ -1 +1,215 @@ #include "ac_museum_insect_priv.h" + +void mi_okera_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position); + if (dist < 60.f) { + if (player->actor_class.speed > 1.4f) { + actor->_7C += (s16)((dist / 60.f) * 8.f); + } else if (player->actor_class.speed > 5.f) { + actor->_7C += (s16)((dist / 60.f) * 20.f); + } + } +} + +void minsect_okera_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + okera_dig_wait_process_init(actor, game); +} + +void okera_dig_up_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + s16 s = qrand(); + f32 v = RANDOM_F(25.f); + actor->_1C = okera_base_pos; + actor->_1C.x += sin_s(s) * v; + actor->_1C.y -= 2.f; + actor->_1C.z += sin_s(s) * v; + actor->_34 = ZeroVec; + actor->_44 = ZeroVec; + actor->_34.y = 0.75f; + actor->_44.y = -0.05f; + actor->_40 = 0.625; + actor->_68 = ZeroSVec; + if (actor->_1C.z >= okera_base_pos.z) { + actor->_68.y = qrand(); + } else { + actor->_68.y = DEG2SHORT_ANGLE(RANDOM2_F(180)); + } + actor->_70 = actor->_68.y; + actor->_76 = 0; + actor->_04 = okera_dig_up_process; +} + +void okera_dig_up_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_8C & 0x20 && actor->_34.y < 0.f) { + actor->_68.x = 0; + okera_normal_process_init(actor, game); + } else { + mID_insect_moveF(actor); + actor->_34.y += actor->_44.y; + actor->_68.x = -atans_table(actor->_40, actor->_34.y); + } +} + +void okera_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_40 = 0.65f; + actor->_6E = (s16)RANDOM_F(68.f) + 24; + actor->_74 = (s16)(RANDOM_F(1500.f) + 300.f); + actor->_04 = okera_normal_process; +} + +void okera_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + mi_okera_check_player(actor, game); + actor->_7C--; + if (actor->_7C < 0) { + actor->_7C = 0; + } + if (actor->_7C > 900) { + actor->_7C = 900; + } + if (actor->_7C > 150 && actor->_40 == 0.f) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + s16 s = player->actor_class.shape_info.rotation.y; + actor->_7C = 0; + actor->_6E = (s16)RANDOM_F(68.f) + 24; + actor->_40 = 1.615f; + actor->_70 = s + DEG2SHORT_ANGLE(RANDOM2_F(30.f)); + } else { + actor->_6E--; + if (actor->_74 > 0) { + actor->_74--; + } + if (actor->_40 > 0.f) { + if (actor->_78 == actor->_7A) { + if (actor->_7A) { + actor->_7A = 0; + } else { + actor->_7A = DEG2SHORT_ANGLE(-10); + } + } + if (!add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5), + DEG2SHORT_ANGLE(0.25f))) { + actor->_76 += DEG2SHORT_ANGLE(15); + mID_insect_moveF(actor); + actor->_34.y += actor->_44.y; + if (actor->_6E < 0) { + actor->_40 = 0.f; + actor->_6E = (s16)RANDOM_F(76.f) + 4; + } else if (actor->_8C & 0x5e) { + actor->_40 = 0.f; + actor->_72 = actor->_8C; + } + //! BUG: unused + sin_s(actor->_76) <= 0.1 ? sin_s(actor->_76) : 0.1; + } + } else if (actor->_6E < 0) { + actor->_40 = 0.95f; + actor->_6E = (s16)RANDOM_F(68.f) + 24; + if (GETREG(NMREG, 4)) { + okera_dig_down_process_init(actor, game); + } + if (actor->_72 & 0x5e) { + if (actor->_72 & 0x40) { + actor->_70 = qrand(); + } else if (actor->_72 & 6) { + actor->_70 = -actor->_70; + } else { + actor->_70 = DEG2SHORT_ANGLE2(180) - actor->_70; + } + actor->_72 &= ~0x5e; + } else { + if (actor->_74 == 0 && search_position_distanceXZ(&okera_base_pos, &actor->_1C) < 35.f) { + okera_dig_down_process_init(actor, game); + } else { + actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(120.f)); + } + } + } + add_calc_short_angle2(&actor->_78, actor->_7A, CALC_EASE2(0.7f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); + } +} + +void okera_dig_down_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_7A = 0; + actor->_04 = okera_dig_down_process; + actor->_6E = 10; +} + +void okera_dig_down_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_6E-- < 0) { + xyz_t p = actor->_1C; + int v = (int)(RANDOM_F(3.f) + 3.f) | 0x4000; + p.y = 45.f; + Common_Get(clip.effect_clip)->effect_make_proc(84, p, 2, actor->_68.y, game, -1, 0, v); + actor->_6E = 6; + } + if (!add_calc_short_angle2(&actor->_68.x, DEG2SHORT_ANGLE(90), CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5), + DEG2SHORT_ANGLE(1.25f))) { + actor->_1C.y -= 0.2f; + actor->_76 += DEG2SHORT_ANGLE(12.5f); + if (actor->_1C.y < 40.f) { + okera_dig_wait_process_init(actor, game); + } + } +} + +void okera_dig_wait_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_1C = okera_base_pos; + actor->_6E = (s16)RANDOM_F(600.f) + 300; + actor->_04 = okera_dig_wait_process; +} + +void okera_dig_wait_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (GETREG(NMREG, 5)) { + okera_dig_up_process_init(actor, game); + } + if (actor->_6E-- < 0) { + int i; + okera_dig_up_process_init(actor, game); + for (i = 3; i < 6; i++) { + Common_Get(clip.effect_clip)->effect_make_proc(84, actor->_1C, 2, actor->_68.y, game, -1, 0, i | 0x4000); + } + } +} + +void minsect_okera_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position); + actor->_04(actor, game); + if (actor->_04 == okera_dig_wait_process && dist < 200.f) { + sAdo_OngenPos((u32)actor, 68, &actor->_1C); + } + if (actor->_04 == okera_dig_up_process && dist < 200.f) { + sAdo_OngenPos((u32)actor, 69, &actor->_1C); + } + + //! NOTE: has to be written this way to match + if (actor->_04 == okera_dig_wait_process || actor->_04 == okera_dig_down_process) { + return; + } + minsect_tree_ObjCheck(actor); + minsect_rock_ObjCheck(actor); + minsect_kanban_BGCheck(actor); + minsect_batta_ObjCheck(actor); + minsect_garden_BGCheck(actor, 510.f, 370.f); +} + +void minsect_okera_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + if (actor->_04 == okera_dig_wait_process) { + return; + } + _texture_z_light_fog_prim(game->graph); + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y + (s16)(DEG2SHORT_ANGLE2(GETREG(TAKREG, 4) + 5.f) * sin_s(actor->_76)), + actor->_68.z, TRUE); + Matrix_rotateXYZ(actor->_78, 0, 0, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + CLOSE_DISP(game->graph); + if (actor->_04 != okera_dig_down_process) { + minsect_draw_shadow(actor, game); + } +} From 2469800e246130594e4adf733e0f3e28e72d1542 Mon Sep 17 00:00:00 2001 From: roeming Date: Fri, 14 Feb 2025 11:08:13 -0500 Subject: [PATCH 17/26] match insect_ka --- src/actor/ac_museum_insect_ka.c_inc | 109 ++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/src/actor/ac_museum_insect_ka.c_inc b/src/actor/ac_museum_insect_ka.c_inc index 356389bc..4eada15d 100644 --- a/src/actor/ac_museum_insect_ka.c_inc +++ b/src/actor/ac_museum_insect_ka.c_inc @@ -1 +1,110 @@ #include "ac_museum_insect_priv.h" + +void minsect_ka_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + static xyz_t init_pos = { 280.f, 40.f, 320.f }; + actor->_72 = qrand(); + actor->_58 = 80.f; + actor->_1C = init_pos; + actor->_1C.x += RANDOM2_F(280.f); + actor->_1C.y = actor->_58 + sin_s(actor->_72) * 10.f; + actor->_1C.z += RANDOM2_F(240.f); + actor->_34 = ZeroVec; + actor->_40 = 0.7f; + actor->_0C = 1.f; + actor->_10 = 0.5f; + actor->_70 = qrand(); + actor->_68.y = qrand(); + actor->_44 = ZeroVec; + actor->_74 = 0; + actor->_6E = (s16)RANDOM_F(1200.f) + 600; +} + +void minsect_ka_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); + xyz_t p = player->actor_class.world.position; + MUSEUM_INSECT_ACTOR* priv; + f32 dist = search_position_distanceXZ(&actor->_1C, &p); + actor->_6E--; + add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.25f)); + if (actor->_1C.z > 540.f) { + actor->_70 = search_position_angleY(&actor->_1C, &p); + } else if (actor->_1C.z < 60.f) { + actor->_70 = search_position_angleY(&actor->_1C, &p); + } else if (actor->_1C.x > 340.f) { + actor->_70 = search_position_angleY(&actor->_1C, &p); + } else if (actor->_1C.x < 60.f) { + actor->_70 = search_position_angleY(&actor->_1C, &p); + } + + if (actor->_74 == 0) { + if (actor->_6E < 0) { + if (dist < 60.f) { + actor->_70 = search_position_angleY(&actor->_1C, &p); + actor->_6E = (s16)RANDOM_F(1200.f) + 600; + actor->_74 = 1; + } else { + actor->_70 = qrand(); + actor->_6E = (s16)RANDOM_F(1200.f) + 600; + } + } + } else if (actor->_74 == 1) { + priv = MI_Control_Actor; + actor->_70 = search_position_angleY(&actor->_1C, &p); + if (dist < 20.f) { + if (mPlib_Check_stung_mosquito(MI_Control_Actor)) { + actor->_74 = 2; + } else if (mDemo_Check(8, &priv->actor) == 0) { + sAdo_OngenTrgStart(0x6a, &actor->_1C); + mPlib_request_main_stung_mosquito_type1(MI_Control_Actor); + } + } else if (actor->_6E < 0) { + if (dist > 60.f) { + actor->_6E = (s16)RANDOM_F(1200.f) + 600; + } else { + actor->_70 = qrand(); + actor->_74 = 0; + } + } + if (actor->_6E < 0) { + actor->_6E = (s16)RANDOM_F(1200.f) + 600; + } + } else if (actor->_74 == 2 && actor->_6E < 0) { + actor->_70 = qrand(); + actor->_6E = (s16)RANDOM_F(1200.f) + 600; + } + if (dist < 300.f) { + sAdo_OngenPos((u32)actor, 0xcf, &actor->_1C); + } + mID_insect_moveF(actor); + actor->_0C += actor->_10; + if (minsect_mdl[actor->_00][(int)actor->_0C] == 0) { + actor->_0C = 1.f; + } + actor->_72 += DEG2SHORT_ANGLE(2.5f); + actor->_1C.y = actor->_58 + sin_s(actor->_72) * 10.f; + minsect_tree_ObjCheck(actor); + minsect_fly_BGCheck(actor, 600.0, 40.0); + if (actor->_8C & 0x10) { + actor->_1C.z = 600.f; + } else if (actor->_8C & 8) { + actor->_70 = DEG2SHORT_ANGLE(RANDOM2_F(90.f)); + } +} + +void minsect_ka_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim(game->graph); + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + CLOSE_DISP(game->graph); + + _texture_z_light_fog_prim_xlu(game->graph); + OPEN_POLY_XLU_DISP(game->graph); + gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][(int)actor->_0C]); + CLOSE_POLY_XLU_DISP(game->graph); + minsect_draw_shadow(actor, game); +} From 1b3a966feac44993fbd1964118c97554be9d21d8 Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 15 Feb 2025 14:29:58 -0500 Subject: [PATCH 18/26] Match all but the last function in ac_museum_insect_base.c_inc --- config/GAFE01_00/foresta/splits.txt | 18 +- include/ac_museum_insect_priv.h | 28 +- src/actor/ac_museum_insect.c | 50 +-- src/actor/ac_museum_insect_base.c_inc | 402 +++++++++++++++++++++++- src/actor/ac_museum_insect_genji.c_inc | 2 +- src/actor/ac_museum_insect_kumo.c_inc | 7 +- src/actor/ac_museum_insect_tentou.c_inc | 4 +- 7 files changed, 425 insertions(+), 86 deletions(-) diff --git a/config/GAFE01_00/foresta/splits.txt b/config/GAFE01_00/foresta/splits.txt index e050362e..1fe6cf7b 100644 --- a/config/GAFE01_00/foresta/splits.txt +++ b/config/GAFE01_00/foresta/splits.txt @@ -854,23 +854,7 @@ actor/ac_museum_indoor.c: .data start:0x00038F08 end:0x00038F48 actor/ac_museum_insect.c: - .text start:0x000EA278 end:0x000EAA24 - .text start:0x000EAA24 end:0x000EC6CC - .text start:0x000EC6CC end:0x000EDE80 - .text start:0x000EDE80 end:0x000EE5C4 - .text start:0x000EE5C4 end:0x000F11E4 - .text start:0x000F11E4 end:0x000F21F8 - .text start:0x000F21F8 end:0x000F3E48 - .text start:0x000F3E48 end:0x000F5244 - .text start:0x000F5244 end:0x000F5C90 - .text start:0x000F5C90 end:0x000F7220 - .text start:0x000F7220 end:0x000F8CF4 - .text start:0x000F8CF4 end:0x000FA5FC - .text start:0x000FA5FC end:0x000FB188 - .text start:0x000FB188 end:0x000FC81C - .text start:0x000FC81C end:0x000FD418 - .text start:0x000FD418 end:0x000FE3D4 - .text start:0x000FE3D4 end:0x000FEB90 + .text start:0x000EA278 end:0x000FEB90 .rodata start:0x00003420 end:0x00003828 .data start:0x00038F48 end:0x00039BF0 .bss start:0x000A16D8 end:0x000A16F0 diff --git a/include/ac_museum_insect_priv.h b/include/ac_museum_insect_priv.h index 39efe071..0e5b4304 100644 --- a/include/ac_museum_insect_priv.h +++ b/include/ac_museum_insect_priv.h @@ -61,7 +61,7 @@ typedef struct _MUSEUM_INSECT_PRIVATE_DATA { }; }; f32 _60; - artificial_padding(0x60, 0x68, int); + artificial_padding(0x60, 0x68, f32); s_xyz _68; s16 _6E; s16 _70; @@ -87,14 +87,14 @@ typedef struct _INSECT_DISPLAY_MSG_INFO { typedef struct _MUSEUM_INSECT_ACTOR { ACTOR actor; // offset: 0x0 - MUSEUM_INSECT_PRIVATE_DATA privInsects[aINS_INSECT_TYPE_NUM]; // offset 0x174 - MUSEUM_INSECT_PRIVATE_DATA _1894[7]; // offset 0x1894 - artificial_padding(0x1894, 0x24b8, MUSEUM_INSECT_PRIVATE_DATA[7]); - MUSEUM_INSECT_SKELETON _24B8[4]; - int _2F78; // offset: 0x2F78 - int _2F7C; // offset: 0x2F7C - INSECT_DISPLAY_MSG_INFO _2F80[7]; // offset: 0x2F82 - s16 _2F9C[5]; // offset: 0x2F9C + MUSEUM_INSECT_PRIVATE_DATA privInsects[aINS_INSECT_TYPE_NUM]; // offset: 0x174 + MUSEUM_INSECT_PRIVATE_DATA _1894[6]; // offset: 0x1894 + MUSEUM_INSECT_PRIVATE_DATA _1CA0[15]; // offset: 0x1CA0 + MUSEUM_INSECT_SKELETON _24B8[4]; // offset: 0x24B8 + int _2F78; // offset: 0x2F78 + int _2F7C; // offset: 0x2F7C + INSECT_DISPLAY_MSG_INFO _2F80[7]; // offset: 0x2F82 + s16 _2F9C[5]; // offset: 0x2F9C } MUSEUM_INSECT_ACTOR; // bss @@ -163,17 +163,17 @@ void minsect_amenbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_amenbo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_amenbo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void ari_alone_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); -void ari_alone_make(void); -void ari_alone_dt(void); -void ari_alone_move(void); -void ari_alone_draw(void); +void ari_alone_make(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void ari_alone_dt(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void ari_alone_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); +void ari_alone_draw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_ari_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_ari_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_ari_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_draw_shadow(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game); void minsect_fly_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2); void minsect_garden_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2); -void minsect_flower_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, const xyz_t* p); +void minsect_flower_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, xyz_t* p); void minsect_goki_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); void minsect_kanban_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); void minsect_tree_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor); diff --git a/src/actor/ac_museum_insect.c b/src/actor/ac_museum_insect.c index 1d6b8fa8..183f50d4 100644 --- a/src/actor/ac_museum_insect.c +++ b/src/actor/ac_museum_insect.c @@ -756,48 +756,6 @@ xyz_t ari_rail_pos[3] = { { 307.f, 45.f, -14.f } }; -f32 minsect_scale_tbl[40] = { - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.008f, - 0.008f, - 0.008f, - 0.008f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.009f, - 0.009f, - 0.009f, - 0.009f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.007f, - 0.01f, - 0.01f, - 0.01f, - 0.01f, - 0.01f -}; // rodata const s16 aim_angle_tbl[6] = { @@ -885,6 +843,12 @@ int Museum_Insect_GetMsgNo(ACTOR* actorx) { MUSEUM_INSECT_ACTOR* MI_Control_Actor = NULL; +#include "../src/actor/ac_museum_insect_base.c_inc" +f32 minsect_scale_tbl[40] = { 0.01f, 0.01f, 0.01f, 0.01f, 0.008f, 0.008f, 0.008f, 0.008f, 0.01f, 0.01f, + 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, + 0.01f, 0.01f, 0.009f, 0.009f, 0.009f, 0.009f, 0.01f, 0.01f, 0.01f, 0.01f, + 0.01f, 0.01f, 0.01f, 0.01f, 0.007f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f }; + int Museum_Insect_Check_Talk_Distance(GAME* game, int i) { static xyz_t kanban_pos[6] = { { 140.f, 40.f, 60.f }, { 420.f, 40.f, 60.f }, { 220.f, 40.f, 300.f }, { 380.f, 40.f, 300.f }, { 180.f, 40.f, 540.f }, { 340.f, 40.f, 540.f } }; @@ -1036,5 +1000,3 @@ void Museum_Insect_Actor_draw(ACTOR* actorx, GAME* game) { } } } - -#include "../src/actor/ac_museum_insect_base.c_inc" diff --git a/src/actor/ac_museum_insect_base.c_inc b/src/actor/ac_museum_insect_base.c_inc index 17f61dd7..e9c1d1c6 100644 --- a/src/actor/ac_museum_insect_base.c_inc +++ b/src/actor/ac_museum_insect_base.c_inc @@ -17,47 +17,439 @@ #include "../src/actor/ac_museum_insect_ka.c_inc" void mID_insect_moveF(MUSEUM_INSECT_PRIVATE_DATA* actor) { + actor->_34.x = actor->_40 * sin_s(actor->_68.y); + actor->_34.z = actor->_40 * cos_s(actor->_68.y); + xyz_t_add(&actor->_1C, &actor->_34, &actor->_1C); } + void minsect_amenbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_1C = amenbo_center_pos; + actor->_34 = ZeroVec; + actor->_44 = ZeroVec; + actor->_68 = ZeroSVec; + actor->_68.y = qrand(); + actor->_70 = actor->_68.y; + actor->_6E = (s16)RANDOM_F(60.f); + actor->_40 = 0.f; } + void minsect_amenbo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_8E = get_now_mind_flag(actor, game); + actor->_6E--; + if (actor->_40 > 0.f) { + if (!add_calc(&actor->_40, 0.f, CALC_EASE(0.1), 0.05f, 0.005f)) { + actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(120.f)); + actor->_6E = RANDOM_F(60.f); + if (actor->_8E == 0) { + actor->_6E *= 10; + } + } + mID_insect_moveF(actor); + } else { + if (actor->_6E < 0) { + if (!add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE(0.5f), DEG2SHORT_ANGLE(5), + DEG2SHORT_ANGLE(0.5f))) { + actor->_40 = (RANDOM_F(1.19f) + 1.15f) * 0.5f; + Common_Get(clip.effect_clip)->effect_make_proc(69, actor->_1C, 1, actor->_68.y, game, 0, 1, 0); + } + } + } + + if (actor->_1C.x < amenbo_center_pos.x - 25.f) { + actor->_1C.x = amenbo_center_pos.x - 25.f; + actor->_6E = 0; + actor->_40 = 0.f; + actor->_70 = -actor->_68.y; + } else if (actor->_1C.x > amenbo_center_pos.x + 25.f) { + actor->_1C.x = amenbo_center_pos.x + 25.f; + actor->_6E = 0; + actor->_40 = 0.f; + actor->_70 = -actor->_68.y; + } + + if (actor->_1C.z < amenbo_center_pos.z - 18.f) { + actor->_1C.z = amenbo_center_pos.z - 18.f; + actor->_6E = 0; + actor->_40 = 0.f; + actor->_70 = (s16)DEG2SHORT_ANGLE2(180); + actor->_70 -= actor->_68.y; + } else if (actor->_1C.z > amenbo_center_pos.z + 18.f) { + actor->_1C.z = amenbo_center_pos.z + 18.f; + actor->_6E = 0; + actor->_40 = 0.f; + actor->_70 = (s16)DEG2SHORT_ANGLE2(180); + actor->_70 -= actor->_68.y; + } } + void minsect_amenbo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim_xlu(game->graph); + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y + (s16)DEG2SHORT_ANGLE2(180), actor->_68.z, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff); + gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]); + CLOSE_DISP(game->graph); } + void ari_alone_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_8C |= 1; + if (RANDOM_F(1.f) < (2.f / 3.f)) { + actor->_74 = 1; + actor->_1C = ari_rail_pos[0]; + } else { + actor->_1C = ari_rail_pos[2]; + actor->_74 = -1; + } + actor->_70 = 1; + actor->_40 = RANDOM_F(0.25f) + 0.05f; + actor->_6E = (s16)RANDOM_F(1160.f) + 40; + actor->_5C = RANDOM2_F(5.f); } -void ari_alone_make(void) { + +void ari_alone_make(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + int i = 0; + for (i = 0; i < 15; actor++, i++) { + if ((actor->_8C & 1) == 0) { + ari_alone_ct(actor, game); + break; + } + } } -void ari_alone_dt(void) { + +void ari_alone_dt(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + actor->_8C &= ~1; } -void ari_alone_move(void) { + +void ari_alone_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + xyz_t p = ari_rail_pos[actor->_70]; + xyz_t p2; + actor->_6E--; + if (actor->_40 > 0.f) { + f32 v; + s16 s; + if (actor->_74 > 0) { + v = 307.f - actor->_1C.x; + } else { + v = actor->_1C.x - 177.f; + } + s = DEG2SHORT_ANGLE2((v * 360.f) / 130.f); + if (actor->_70 == 1) { + actor->_58 = (-5.f - (GETREG(TAKREG, 0x32) * 0.1f)) * sin_s(s); + } else { + actor->_58 = (5.f + (GETREG(TAKREG, 0x32) * 0.1f)) * sin_s(s); + } + p.z += actor->_5C; + if (!chase_xyz_t(&actor->_1C, &p, actor->_40)) { + if (actor->_70 == 1) { + actor->_70 += actor->_74; + } else { + ari_alone_dt(actor, game); + } + } + xyz_t_sub(&p, &actor->_1C, &p2); + actor->_72 = atans_table(p2.z, p2.x); + add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); + if (actor->_6E < 0) { + actor->_40 = 0.f; + actor->_6E = (s16)RANDOM_F(260.f) + 40; + } + } else if (actor->_6E < 0) { + actor->_40 = RANDOM_F(0.25f) + 0.05f; + actor->_6E = (s16)RANDOM_F(1160.f) + 40; + } } -void ari_alone_draw(void) { + +extern Gfx act_m_mu_ariT_model; +void ari_alone_draw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + _texture_z_light_fog_prim_xlu(game->graph); + OPEN_DISP(game->graph); + Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z + actor->_58, FALSE); + Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE); + Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(NEXT_POLY_OPA_DISP, &act_m_mu_ariT_model); + CLOSE_DISP(game->graph); } + void minsect_ari_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + MUSEUM_INSECT_PRIVATE_DATA* priv = &MI_Control_Actor->_1CA0[0]; + int i; + actor->_6E = (s16)RANDOM_F(100.f) + 20; + for (i = 0; i < 15; priv++, i++) { + ari_alone_dt(priv, game); + } } + void minsect_ari_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + MUSEUM_INSECT_PRIVATE_DATA* priv = MI_Control_Actor->_1CA0; + int i; + if (actor->_6E-- < 0) { + actor->_6E = (s16)RANDOM_F(100.f) + 20; + ari_alone_make(priv, game); + } + for (i = 0; i < 15; priv++, i++) { + if (priv->_8C & 1) { + ari_alone_move(priv, game); + priv->_14 = actor->_14; + } + } } + void minsect_ari_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + MUSEUM_INSECT_PRIVATE_DATA* priv = MI_Control_Actor->_1CA0; + int i; + for (i = 0; i < 15; priv++, i++) { + if (priv->_8C & 1) { + ari_alone_draw(priv, game); + } + } } + +extern Gfx ef_shadow_insect_modelT; void minsect_draw_shadow(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + u8 shadow = play->kankyo.shadow_alpha; + f32 v; + f32 scale; + u8 alpha; + + f32 v0; + f32 v1; + + if (actor->_1C.z > -40.f && actor->_1C.z < 40.f) { + v = 46.f; + } else if (actor->_1C.x > 120.f && actor->_1C.x < 440.f && + (actor->_1C.z > 120.f && actor->_1C.z < 280.f || actor->_1C.z > 360.f && actor->_1C.z < 520.f)) { + v = 45.f; + } else { + v = 40.f; + } + + v0 = 100.f - (actor->_1C.y - v); + v1 = 1.f + (GETREG(TAKREG, 0x2b) * 0.1f); + alpha = (int)(v0 * v1 + 40.0f + GETREG(TAKREG, 0x2c)); + alpha = (alpha * shadow) >> 8; + + scale = (GETREG(TAKREG, 0x28) * 0.001f + 0.005f); + scale *= minsect_shadow_scale_tbl[(int)actor->_00]; + + Matrix_translate(actor->_1C.x, v, actor->_1C.z, FALSE); + Matrix_scale(scale, scale, scale, TRUE); + _texture_z_light_fog_prim_shadow(game->graph); + + OPEN_SHADOW_DISP(game->graph); + gDPSetPrimColor(SHADOW_DISP++, 0, 255, 0, 0, 0, alpha); + gSPMatrix(SHADOW_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(SHADOW_DISP++, &ef_shadow_insect_modelT); + CLOSE_SHADOW_DISP(game->graph); } + void minsect_fly_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2) { + const f32 min = 50.0f; + const f32 max = 510.0f; + + actor->_8C &= ~0x1e; + if (actor->_1C.x < min) { + actor->_1C.x = min; + actor->_8C |= 2; + } else if (actor->_1C.x > max) { + actor->_1C.x = max; + actor->_8C |= 4; + } + + if (actor->_1C.z < f2) { + actor->_8C |= 8; + } else if (actor->_1C.z > f1) { + actor->_8C |= 0x10; + } } + void minsect_garden_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2) { + const f32 v1 = 130.f, v2 = 430.f; + actor->_8C &= ~0x1e; + actor->_8C &= ~0x20; + if (actor->_1C.x < v1) { + actor->_1C.x = v1; + actor->_8C |= 2; + } else if (actor->_1C.x > v2) { + actor->_1C.x = v2; + actor->_8C |= 4; + } + + if (actor->_1C.z < f2) { + actor->_1C.z = f2; + actor->_8C |= 8; + } else if (actor->_1C.z > f1) { + actor->_1C.z = f1; + actor->_8C |= 0x10; + } + + if (actor->_1C.y < 45.f) { + actor->_1C.y = 45.f; + actor->_8C |= 0x20; + } } -void minsect_flower_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, const xyz_t* p) { + +void minsect_flower_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, xyz_t* p) { + xyz_t p2; + f32 dsq; + + xyz_t_sub(&actor->_1C, p, &p2); + dsq = SQ(p2.x) + SQ(p2.z); + actor->_8C &= ~2; + if (dsq > SQ(15)) { + f32 d = sqrtf(dsq); + + p2.x *= (14.9f) / d; + p2.z *= (14.9f) / d; + actor->_1C.x = p->x + p2.x; + actor->_1C.z = p->z + p2.z; + actor->_8C |= 2; + } + actor->_1C.y = (-p2.z * 5.f) / 20.f + 65.f; } + void minsect_goki_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { + f32 v1, v2; + v1 = actor->_1C.x - 115.f; + v2 = 445.f - actor->_1C.x; + actor->_8C &= ~0x1e; + actor->_8C &= ~0x20; + if (actor->_1C.x < 45.f) { + actor->_1C.x = 45.f; + actor->_8C |= 2; + } else if (actor->_1C.x > 515.f) { + actor->_1C.x = 515.f; + actor->_8C |= 4; + } + + if (actor->_1C.z < 45.f) { + actor->_1C.z = 45.f; + actor->_8C |= 8; + } else if (actor->_1C.z > 595.f) { + actor->_1C.z = 595.f; + actor->_8C |= 0x10; + } + + if (actor->_1C.y < 40.f) { + actor->_1C.y = 40.f; + actor->_8C |= 0x20; + } + + if (v1 > 0.f && v2 > 0.f) { + int i; + for (i = 0; i < 2; i++) { + static const float BG_ZB_tbl[2] = { 115.f, 355.f }; + static const float BG_ZF_tbl[2] = { 285.f, 525.f }; + f32 a1 = actor->_1C.z - BG_ZB_tbl[i]; + f32 a2 = BG_ZF_tbl[i] - actor->_1C.z; + if (a1 > 0.f && a2 > 0.f) { + // f32 v3 = -v1; + f32 m1 = v1 > v2 ? v2 : -v1; + f32 m2 = a1 > a2 ? a2 : -a1; + f32 bb = ABS(m2); + f32 cc = ABS(m1); + if (cc > bb) { + actor->_1C.x += m2; + if (m2 > 0.f) { + actor->_8C |= 4; + } else { + actor->_8C |= 2; + } + } else { + actor->_1C.z += m1; + if (m1 > 0.f) { + actor->_8C |= 0x10; + } else { + actor->_8C |= 8; + } + } + } + } + } } + void minsect_kanban_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { + static float KANBAN_XL_TBL[] = { 162.f, 325.f }; + static float KANBAN_XR_TBL[] = { 195.f, 358.f }; + int i; + for (i = 0; i < 2; i++) { + if (actor->_1C.x > KANBAN_XL_TBL[i] && actor->_1C.x < KANBAN_XR_TBL[i]) { + f32 v = actor->_1C.z - actor->_34.z; + const f32 vv = 508.f; + const f32 tt = 500.f; + if (v - vv >= 0.f && actor->_1C.z - vv < 0.f) { + actor->_1C.z = vv; + } else if (v - tt <= 0.f && actor->_1C.z - tt > 0.f) { + actor->_1C.z = tt; + } + } + } } + void minsect_tree_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { + int i = 0; + const f32 d = SQ(20.f); + actor->_8C &= ~0x80; + for (i = 0; i < 8; i++) { + f32 x = tree_pos[i].x - actor->_1C.x; + f32 z = tree_pos[i].z - actor->_1C.z; + f32 dsq = SQ(x) + SQ(z); + if (dsq < d) { + s16 ang = atans_table(z, x); + f32 dist = 20.1f - sqrtf(dsq); + actor->_1C.x -= dist * sin_s(ang); + actor->_1C.z -= dist * cos_s(ang); + actor->_8C |= 0x80; + } + } } + void minsect_rock_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { + int i = 0; + const f32 d = SQ(22.f); + actor->_8C &= ~0x40; + for (i = 0; i < 2; i++) { + f32 x = rock_pos[i].x - actor->_1C.x; + f32 z = rock_pos[i].z - actor->_1C.z; + f32 dsq = SQ(x) + SQ(z); + if (dsq < d) { + s16 ang = atans_table(z, x); + f32 dist = 22.f - sqrtf(dsq); + actor->_1C.x -= dist * sin_s(ang); + actor->_1C.z -= dist * cos_s(ang); + actor->_8C |= 0x40; + } + } } void minsect_batta_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { + int c = 6; + int i; + if (MI_Control_Actor->privInsects[0x21]._8C & 1 && + MI_Control_Actor->privInsects[0x21]._04 == okera_normal_process) { + c = 7; + } + for (i = 0; i < c; i++) { + static int idx_tbl[7] = { 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x21 }; + MUSEUM_INSECT_PRIVATE_DATA* priv = &MI_Control_Actor->privInsects[idx_tbl[i]]; + if (priv != actor && priv->_8C & 1) { + f32 x = priv->_1C.x - actor->_1C.x; + f32 z = priv->_1C.z - actor->_1C.z; + f32 dsq = SQ(x) + SQ(z); + const f32 d = SQ(GETREG(NMREG, 0x5a) + 10.f); + if (dsq < d) { + s16 ang = atans_table(z, x); + f32 dist = (GETREG(NMREG, 0x5a) + 10.f) - sqrtf(dsq); + actor->_1C.x -= dist * sin_s(ang); + actor->_1C.z -= dist * cos_s(ang); + } + } + } } BOOL get_now_mind_flag(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { diff --git a/src/actor/ac_museum_insect_genji.c_inc b/src/actor/ac_museum_insect_genji.c_inc index fb7555f5..569d8e0d 100644 --- a/src/actor/ac_museum_insect_genji.c_inc +++ b/src/actor/ac_museum_insect_genji.c_inc @@ -226,7 +226,7 @@ void minsect_genji_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { add_calc_short_angle2(&actor->_68.z, actor->_5E_s16, CALC_EASE2(0.4f), (s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 3) * 0.01f + 5.f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_7E, actor->_80, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f)); - for (i = 1; i < 7; i++, priv++) { + for (i = 0 + 1; i < 6 + 1; i++, priv++) { if (priv->_8C & 1) { if ((GETREG(NMREG, 0xF) || (RANDOM_F(1.f) > 0.9f && actor->_6E < 0)) && (priv->_8C & 0x100) == 0) { diff --git a/src/actor/ac_museum_insect_kumo.c_inc b/src/actor/ac_museum_insect_kumo.c_inc index adbfc2cb..b49af660 100644 --- a/src/actor/ac_museum_insect_kumo.c_inc +++ b/src/actor/ac_museum_insect_kumo.c_inc @@ -186,9 +186,10 @@ void minsect_kumo_hineri(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { void minsect_kumo_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) { static PRIV_INSECT_PROCESS init_proc[] = { minsect_kumo_wait_init, minsect_kumo_move_init, minsect_kumo_up_init, - minsect_kumo_down_init }; - static PRIV_INSECT_PROCESS move_proc[] = { minsect_kumo_wait, minsect_kumo_move, minsect_kumo_up, - minsect_kumo_down }; + minsect_kumo_down_init, minsect_kumo_hide_init }; + static PRIV_INSECT_PROCESS move_proc[] = { minsect_kumo_wait, minsect_kumo_move, minsect_kumo_up, minsect_kumo_down, + minsect_kumo_hide }; + static f32 scaleX_table[] = { 1.15, 0.5f, 1.15f, 0.5f, 1.15f, 0.5f, 1.15f }; actor->_04 = move_proc[r4]; init_proc[r4](actor, game); } diff --git a/src/actor/ac_museum_insect_tentou.c_inc b/src/actor/ac_museum_insect_tentou.c_inc index 459fc8f6..c80b5619 100644 --- a/src/actor/ac_museum_insect_tentou.c_inc +++ b/src/actor/ac_museum_insect_tentou.c_inc @@ -171,8 +171,8 @@ void mi_tentou_menace(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } void mi_tentou_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) { - static PRIV_INSECT_PROCESS move_proc[3] = { mi_tentou_wait_init, mi_tentou_move_init, mi_tentou_menace_init }; - static PRIV_INSECT_PROCESS init_proc[3] = { mi_tentou_wait, mi_tentou_move, mi_tentou_menace }; + static PRIV_INSECT_PROCESS init_proc[3] = { mi_tentou_wait_init, mi_tentou_move_init, mi_tentou_menace_init }; + static PRIV_INSECT_PROCESS move_proc[3] = { mi_tentou_wait, mi_tentou_move, mi_tentou_menace }; actor->_04 = move_proc[r4]; init_proc[r4](actor, game); } From 4dccad5ea971435b70c7e10dec0e0a75ba216b0b Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 15 Feb 2025 14:43:37 -0500 Subject: [PATCH 19/26] match data --- src/actor/ac_museum_insect.c | 85 ----------------------- src/actor/ac_museum_insect_dango.c_inc | 3 + src/actor/ac_museum_insect_hachi.c_inc | 1 + src/actor/ac_museum_insect_ka.c_inc | 2 + src/actor/ac_museum_insect_kabuto.c_inc | 4 ++ src/actor/ac_museum_insect_kuwagata.c_inc | 16 +++++ src/actor/ac_museum_insect_mino.c_inc | 1 + src/actor/ac_museum_insect_tentou.c_inc | 7 ++ src/actor/ac_museum_insect_tonbo.c_inc | 3 + 9 files changed, 37 insertions(+), 85 deletions(-) diff --git a/src/actor/ac_museum_insect.c b/src/actor/ac_museum_insect.c index 183f50d4..3c0c4597 100644 --- a/src/actor/ac_museum_insect.c +++ b/src/actor/ac_museum_insect.c @@ -672,91 +672,6 @@ xyz_t rock_pos[] = { { 385.f, 0.f, 485.0f } }; -xyz_t tonbo_rock_pos[6] = { - { 215.f, 68.f, 403.f }, - { 232.f, 60.f, 381.f }, - { 372.f, 65.f, 482.f }, - { 390.f, 68.f, 469.f }, - { 328.f, 72.f, 501.f }, - { 351.f, 72.f, 501.f } -}; - -xyz_t tentou_flower_pos[4] = { - { 410.0f, 65.f, 240.0f }, - { 213.5f, 65.f, 155.0f }, - { 233.0f, 65.f, 233.5f }, - { 294.0f, 65.f, 170.5f }, -}; - -xyz_t hachi_base_pos = { - 165.5f, 78.5f, 482.5f -}; - -xyz_t kabuto_base_pos[9] = { - { 165.5f, 78.5f, 482.5f }, - { 389.5f, 66.5f, -14.5f }, - { 241.5f, 67.0f, -15.5f }, - { 165.0f, 81.5f, 0.5f }, - { 89.0f, 64.0f, -15.5f }, - { 466.0f, 84.0f, 1.5f }, - { 171.0f, 64.5f, 5.5f }, - { 319.0f, 81.0f, 1.0f }, - { 313.0f, 63.0f, 5.5f } -}; - -extern cKF_Skeleton_R_c - cKF_bs_r_act_m_hirata_b, - cKF_bs_r_act_m_nokogiri_b, - cKF_bs_r_act_m_miyama_b, - cKF_bs_r_act_m_okuwa_b; - -cKF_Skeleton_R_c *kuwagata_model_tbl[] = { - &cKF_bs_r_act_m_hirata_b, - &cKF_bs_r_act_m_nokogiri_b, - &cKF_bs_r_act_m_miyama_b, - &cKF_bs_r_act_m_okuwa_b -}; - -extern cKF_Animation_R_c - cKF_ba_r_act_m_hirata_b, - cKF_ba_r_act_m_nokogiri_b, - cKF_ba_r_act_m_miyama_b, - cKF_ba_r_act_m_okuwa_b; - -cKF_Animation_R_c *kuwagata_anim_tbl[] = { - &cKF_ba_r_act_m_hirata_b, - &cKF_ba_r_act_m_nokogiri_b, - &cKF_ba_r_act_m_miyama_b, - &cKF_ba_r_act_m_okuwa_b -}; - -xyz_t kuwagata_base_pos[4] = { - { 166.f, 80.5f, 0.5f }, - { 169.f, 66.5f, 5.0f }, - { 318.f, 80.0f, 1.0f }, - { 315.f, 65.0f, 5.5f } -}; - -xyz_t amenbo_center_pos = { - 289.f, 25.f, 218.f -}; - -xyz_t rail_pos[6] = { - { 368.f, 45.f, 467.f }, - { 363.f, 45.f, 482.f }, - { 374.f, 45.f, 499.f }, - { 393.f, 45.f, 502.f }, - { 407.f, 45.f, 488.f }, - { 407.f, 45.f, 469.f } -}; - -xyz_t ari_rail_pos[3] = { - { 177.f, 45.f, -14.f }, - { 242.f, 45.f, 10.f }, - { 307.f, 45.f, -14.f } -}; - - // rodata const s16 aim_angle_tbl[6] = { DEG2SHORT_ANGLE(45 + 0), diff --git a/src/actor/ac_museum_insect_dango.c_inc b/src/actor/ac_museum_insect_dango.c_inc index e09726c6..b629bb1b 100644 --- a/src/actor/ac_museum_insect_dango.c_inc +++ b/src/actor/ac_museum_insect_dango.c_inc @@ -1,5 +1,8 @@ #include "ac_museum_insect_priv.h" +xyz_t rail_pos[6] = { { 368.f, 45.f, 467.f }, { 363.f, 45.f, 482.f }, { 374.f, 45.f, 499.f }, + { 393.f, 45.f, 502.f }, { 407.f, 45.f, 488.f }, { 407.f, 45.f, 469.f } }; + void mi_dango_defence_anime(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { static f32 scale_table[] = { 1.f, 0.85f, 1.15f, 0.75f, 1.05f, 0.65f, 0.95f }; if (actor->_7E < 7 && actor->_7E >= 0) { diff --git a/src/actor/ac_museum_insect_hachi.c_inc b/src/actor/ac_museum_insect_hachi.c_inc index 09ca5304..fcabe599 100644 --- a/src/actor/ac_museum_insect_hachi.c_inc +++ b/src/actor/ac_museum_insect_hachi.c_inc @@ -1,4 +1,5 @@ #include "ac_museum_insect_priv.h" +xyz_t hachi_base_pos = { 165.5f, 78.5f, 482.5f }; void mi_hachi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { static f32 scaleX_table[7] = { 1.f, 0.85f, 1.15f, 0.85f, 1.15f, 0.85f, 1.15f }; diff --git a/src/actor/ac_museum_insect_ka.c_inc b/src/actor/ac_museum_insect_ka.c_inc index 4eada15d..31bbcfae 100644 --- a/src/actor/ac_museum_insect_ka.c_inc +++ b/src/actor/ac_museum_insect_ka.c_inc @@ -1,5 +1,7 @@ #include "ac_museum_insect_priv.h" +xyz_t ari_rail_pos[3] = { { 177.f, 45.f, -14.f }, { 242.f, 45.f, 10.f }, { 307.f, 45.f, -14.f } }; + void minsect_ka_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { static xyz_t init_pos = { 280.f, 40.f, 320.f }; actor->_72 = qrand(); diff --git a/src/actor/ac_museum_insect_kabuto.c_inc b/src/actor/ac_museum_insect_kabuto.c_inc index 64356adb..6e64205c 100644 --- a/src/actor/ac_museum_insect_kabuto.c_inc +++ b/src/actor/ac_museum_insect_kabuto.c_inc @@ -133,3 +133,7 @@ void minsect_kabuto_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { CLOSE_POLY_XLU_DISP(game->graph); } } + +xyz_t kabuto_base_pos[9] = { { 165.5f, 78.5f, 482.5f }, { 389.5f, 66.5f, -14.5f }, { 241.5f, 67.0f, -15.5f }, + { 165.0f, 81.5f, 0.5f }, { 89.0f, 64.0f, -15.5f }, { 466.0f, 84.0f, 1.5f }, + { 171.0f, 64.5f, 5.5f }, { 319.0f, 81.0f, 1.0f }, { 313.0f, 63.0f, 5.5f } }; diff --git a/src/actor/ac_museum_insect_kuwagata.c_inc b/src/actor/ac_museum_insect_kuwagata.c_inc index 15d50cd1..6bca6e47 100644 --- a/src/actor/ac_museum_insect_kuwagata.c_inc +++ b/src/actor/ac_museum_insect_kuwagata.c_inc @@ -1,5 +1,21 @@ #include "ac_museum_insect_priv.h" +extern cKF_Skeleton_R_c cKF_bs_r_act_m_hirata_b, cKF_bs_r_act_m_nokogiri_b, cKF_bs_r_act_m_miyama_b, + cKF_bs_r_act_m_okuwa_b; + +cKF_Skeleton_R_c* kuwagata_model_tbl[] = { &cKF_bs_r_act_m_hirata_b, &cKF_bs_r_act_m_nokogiri_b, + &cKF_bs_r_act_m_miyama_b, &cKF_bs_r_act_m_okuwa_b }; + +extern cKF_Animation_R_c cKF_ba_r_act_m_hirata_b, cKF_ba_r_act_m_nokogiri_b, cKF_ba_r_act_m_miyama_b, + cKF_ba_r_act_m_okuwa_b; + +cKF_Animation_R_c* kuwagata_anim_tbl[] = { &cKF_ba_r_act_m_hirata_b, &cKF_ba_r_act_m_nokogiri_b, + &cKF_ba_r_act_m_miyama_b, &cKF_ba_r_act_m_okuwa_b }; + +xyz_t kuwagata_base_pos[4] = { + { 166.f, 80.5f, 0.5f }, { 169.f, 66.5f, 5.0f }, { 318.f, 80.0f, 1.0f }, { 315.f, 65.0f, 5.5f } +}; + void mi_kuwagata_rensa_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { actor->_7A = 0; } diff --git a/src/actor/ac_museum_insect_mino.c_inc b/src/actor/ac_museum_insect_mino.c_inc index d5ce26cd..b41b0d4c 100644 --- a/src/actor/ac_museum_insect_mino.c_inc +++ b/src/actor/ac_museum_insect_mino.c_inc @@ -1,4 +1,5 @@ #include "ac_museum_insect_priv.h" +xyz_t amenbo_center_pos = { 289.f, 25.f, 218.f }; void minsect_mino_up_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { actor->_40 = 0.165f; diff --git a/src/actor/ac_museum_insect_tentou.c_inc b/src/actor/ac_museum_insect_tentou.c_inc index c80b5619..7cf999a6 100644 --- a/src/actor/ac_museum_insect_tentou.c_inc +++ b/src/actor/ac_museum_insect_tentou.c_inc @@ -12,6 +12,13 @@ void mi_tentou_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } } +xyz_t tentou_flower_pos[4] = { + { 410.0f, 65.f, 240.0f }, + { 213.5f, 65.f, 155.0f }, + { 233.0f, 65.f, 233.5f }, + { 294.0f, 65.f, 170.5f }, +}; + void mi_tentou_kama_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) { static f32 scaleX_table[7] = { 1.f, 0.95f, 1.15f, 0.95f, 1.15f, 0.95f, 1.15f }; if (actor->_7E < 7) { diff --git a/src/actor/ac_museum_insect_tonbo.c_inc b/src/actor/ac_museum_insect_tonbo.c_inc index d337ba8b..b0ab912c 100644 --- a/src/actor/ac_museum_insect_tonbo.c_inc +++ b/src/actor/ac_museum_insect_tonbo.c_inc @@ -1,5 +1,8 @@ #include "ac_museum_insect_priv.h" +xyz_t tonbo_rock_pos[6] = { { 215.f, 68.f, 403.f }, { 232.f, 60.f, 381.f }, { 372.f, 65.f, 482.f }, + { 390.f, 68.f, 469.f }, { 328.f, 72.f, 501.f }, { 351.f, 72.f, 501.f } }; + void minsect_tonbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { actor->_34 = ZeroVec; actor->_68 = ZeroSVec; From 4627392ed6fdecb2443ec15ce30b5acf405ec8a5 Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 15 Feb 2025 14:48:44 -0500 Subject: [PATCH 20/26] fix most of rodata --- src/actor/ac_museum_insect.c | 36 -------------------------- src/actor/ac_museum_insect_genji.c_inc | 4 +++ src/actor/ac_museum_insect_kumo.c_inc | 6 +++++ src/actor/ac_museum_insect_mino.c_inc | 6 +++++ src/actor/ac_museum_insect_okera.c_inc | 2 ++ 5 files changed, 18 insertions(+), 36 deletions(-) diff --git a/src/actor/ac_museum_insect.c b/src/actor/ac_museum_insect.c index 3c0c4597..c8652ab6 100644 --- a/src/actor/ac_museum_insect.c +++ b/src/actor/ac_museum_insect.c @@ -686,42 +686,6 @@ const f32 base_high_tbl[4] = { 85.f, 95.f, 90.f, 90.f }; -const xyz_t mino_base_pos = { - 135.f, 64.f, 474.f -}; - -const xyz_t mino_top_pos = { - 135.f, 90.f, 474.f -}; - -const xyz_t mino_bottom_pos = { - 135.f, 54.f, 474.f -}; - -const xyz_t kumo_base_pos = { - 330.f, 64.5f, 229.f -}; - -const xyz_t kumo_top_pos = { - 330.f, 90.f, 229.f -}; - -const xyz_t kumo_bottom_pos = { - 330.f, 54.f, 229.f -}; - -const xyz_t base_genji_pos = { - 258.f, 62.f, 258.5f -}; - -const xyz_t genji_mizu_pos = { - 289.f, 25.f, 218.f -}; - -const xyz_t okera_base_pos = { - 235.f, 45.f, 445.f -}; - // clang-format on int Museum_Insect_GetMsgNo(ACTOR* actorx) { diff --git a/src/actor/ac_museum_insect_genji.c_inc b/src/actor/ac_museum_insect_genji.c_inc index 569d8e0d..e9c1e50b 100644 --- a/src/actor/ac_museum_insect_genji.c_inc +++ b/src/actor/ac_museum_insect_genji.c_inc @@ -1,5 +1,9 @@ #include "ac_museum_insect_priv.h" +const xyz_t base_genji_pos = { 258.f, 62.f, 258.5f }; + +const xyz_t genji_mizu_pos = { 289.f, 25.f, 218.f }; + void mi_genji_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position); diff --git a/src/actor/ac_museum_insect_kumo.c_inc b/src/actor/ac_museum_insect_kumo.c_inc index b49af660..319c7ad1 100644 --- a/src/actor/ac_museum_insect_kumo.c_inc +++ b/src/actor/ac_museum_insect_kumo.c_inc @@ -1,5 +1,11 @@ #include "ac_museum_insect_priv.h" +const xyz_t kumo_base_pos = { 330.f, 64.5f, 229.f }; + +const xyz_t kumo_top_pos = { 330.f, 90.f, 229.f }; + +const xyz_t kumo_bottom_pos = { 330.f, 54.f, 229.f }; + void minsect_kumo_hide_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { actor->_40 = 0.165f; } diff --git a/src/actor/ac_museum_insect_mino.c_inc b/src/actor/ac_museum_insect_mino.c_inc index b41b0d4c..d5466ecd 100644 --- a/src/actor/ac_museum_insect_mino.c_inc +++ b/src/actor/ac_museum_insect_mino.c_inc @@ -1,6 +1,12 @@ #include "ac_museum_insect_priv.h" xyz_t amenbo_center_pos = { 289.f, 25.f, 218.f }; +const xyz_t mino_base_pos = { 135.f, 64.f, 474.f }; + +const xyz_t mino_top_pos = { 135.f, 90.f, 474.f }; + +const xyz_t mino_bottom_pos = { 135.f, 54.f, 474.f }; + void minsect_mino_up_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { actor->_40 = 0.165f; actor->_6E = (s16)RANDOM_F(20.f) + 50; diff --git a/src/actor/ac_museum_insect_okera.c_inc b/src/actor/ac_museum_insect_okera.c_inc index 8b8c3eee..48fe06f2 100644 --- a/src/actor/ac_museum_insect_okera.c_inc +++ b/src/actor/ac_museum_insect_okera.c_inc @@ -1,5 +1,7 @@ #include "ac_museum_insect_priv.h" +const xyz_t okera_base_pos = { 235.f, 45.f, 445.f }; + void mi_okera_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game); f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position); From e638c8913345e33d3183f2b39191d9e019e38644 Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 15 Feb 2025 15:00:08 -0500 Subject: [PATCH 21/26] match last function --- src/actor/ac_museum_insect_base.c_inc | 42 ++++++++++++++++++--------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/actor/ac_museum_insect_base.c_inc b/src/actor/ac_museum_insect_base.c_inc index e9c1d1c6..7af99eb0 100644 --- a/src/actor/ac_museum_insect_base.c_inc +++ b/src/actor/ac_museum_insect_base.c_inc @@ -314,7 +314,15 @@ void minsect_flower_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, xyz_t* p) { } void minsect_goki_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { - f32 v1, v2; + f32 v1; + f32 v2; + f32 a1; + f32 a2; + f32 m1; + f32 m2; + f32 am1; + f32 am2; + v1 = actor->_1C.x - 115.f; v2 = 445.f - actor->_1C.x; actor->_8C &= ~0x1e; @@ -345,24 +353,32 @@ void minsect_goki_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) { for (i = 0; i < 2; i++) { static const float BG_ZB_tbl[2] = { 115.f, 355.f }; static const float BG_ZF_tbl[2] = { 285.f, 525.f }; - f32 a1 = actor->_1C.z - BG_ZB_tbl[i]; - f32 a2 = BG_ZF_tbl[i] - actor->_1C.z; + a1 = actor->_1C.z - BG_ZB_tbl[i]; + a2 = BG_ZF_tbl[i] - actor->_1C.z; if (a1 > 0.f && a2 > 0.f) { - // f32 v3 = -v1; - f32 m1 = v1 > v2 ? v2 : -v1; - f32 m2 = a1 > a2 ? a2 : -a1; - f32 bb = ABS(m2); - f32 cc = ABS(m1); - if (cc > bb) { - actor->_1C.x += m2; - if (m2 > 0.f) { + // float regswaps here + if (v1 > v2) { + m1 = v2; + } else { + m1 = -v1; + } + if (a1 > a2) { + m2 = a2; + } else { + m2 = -a1; + } + am1 = ABS(m1); + am2 = ABS(m2); + if (am2 > am1) { + actor->_1C.x += m1; + if (m1 > 0.f) { actor->_8C |= 4; } else { actor->_8C |= 2; } } else { - actor->_1C.z += m1; - if (m1 > 0.f) { + actor->_1C.z += m2; + if (m2 > 0.f) { actor->_8C |= 0x10; } else { actor->_8C |= 8; From e1d75f813dac4a24bf6d633ca50985b38aa3cd9e Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 15 Feb 2025 15:01:07 -0500 Subject: [PATCH 22/26] fix splits --- config/GAFE01_00/foresta/splits.txt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/config/GAFE01_00/foresta/splits.txt b/config/GAFE01_00/foresta/splits.txt index 1fe6cf7b..e050362e 100644 --- a/config/GAFE01_00/foresta/splits.txt +++ b/config/GAFE01_00/foresta/splits.txt @@ -854,7 +854,23 @@ actor/ac_museum_indoor.c: .data start:0x00038F08 end:0x00038F48 actor/ac_museum_insect.c: - .text start:0x000EA278 end:0x000FEB90 + .text start:0x000EA278 end:0x000EAA24 + .text start:0x000EAA24 end:0x000EC6CC + .text start:0x000EC6CC end:0x000EDE80 + .text start:0x000EDE80 end:0x000EE5C4 + .text start:0x000EE5C4 end:0x000F11E4 + .text start:0x000F11E4 end:0x000F21F8 + .text start:0x000F21F8 end:0x000F3E48 + .text start:0x000F3E48 end:0x000F5244 + .text start:0x000F5244 end:0x000F5C90 + .text start:0x000F5C90 end:0x000F7220 + .text start:0x000F7220 end:0x000F8CF4 + .text start:0x000F8CF4 end:0x000FA5FC + .text start:0x000FA5FC end:0x000FB188 + .text start:0x000FB188 end:0x000FC81C + .text start:0x000FC81C end:0x000FD418 + .text start:0x000FD418 end:0x000FE3D4 + .text start:0x000FE3D4 end:0x000FEB90 .rodata start:0x00003420 end:0x00003828 .data start:0x00038F48 end:0x00039BF0 .bss start:0x000A16D8 end:0x000A16F0 From f97bffefe368dca7c3e46bb2f7bd88259372ecb2 Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 15 Feb 2025 15:05:59 -0500 Subject: [PATCH 23/26] fix bss --- src/actor/ac_museum_insect.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/actor/ac_museum_insect.c b/src/actor/ac_museum_insect.c index c8652ab6..45257381 100644 --- a/src/actor/ac_museum_insect.c +++ b/src/actor/ac_museum_insect.c @@ -687,6 +687,9 @@ const f32 base_high_tbl[4] = { }; // clang-format on +MUSEUM_INSECT_ACTOR* MI_Control_Actor = NULL; + +#include "../src/actor/ac_museum_insect_base.c_inc" int Museum_Insect_GetMsgNo(ACTOR* actorx) { static u8 item_name[mIN_ITEM_NAME_LEN]; @@ -720,9 +723,6 @@ int Museum_Insect_GetMsgNo(ACTOR* actorx) { return msgNo; } -MUSEUM_INSECT_ACTOR* MI_Control_Actor = NULL; - -#include "../src/actor/ac_museum_insect_base.c_inc" f32 minsect_scale_tbl[40] = { 0.01f, 0.01f, 0.01f, 0.01f, 0.008f, 0.008f, 0.008f, 0.008f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.009f, 0.009f, 0.009f, 0.009f, 0.01f, 0.01f, 0.01f, 0.01f, From ed18661f3036648be1f5d8557de8bd4a3b34c00a Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 15 Feb 2025 15:19:17 -0500 Subject: [PATCH 24/26] adding comment on unused static data from pooling --- src/actor/ac_museum_insect_kumo.c_inc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/actor/ac_museum_insect_kumo.c_inc b/src/actor/ac_museum_insect_kumo.c_inc index 319c7ad1..9140399c 100644 --- a/src/actor/ac_museum_insect_kumo.c_inc +++ b/src/actor/ac_museum_insect_kumo.c_inc @@ -195,6 +195,7 @@ void minsect_kumo_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* g minsect_kumo_down_init, minsect_kumo_hide_init }; static PRIV_INSECT_PROCESS move_proc[] = { minsect_kumo_wait, minsect_kumo_move, minsect_kumo_up, minsect_kumo_down, minsect_kumo_hide }; + // unused, but has to be here because of data pooling static f32 scaleX_table[] = { 1.15, 0.5f, 1.15f, 0.5f, 1.15f, 0.5f, 1.15f }; actor->_04 = move_proc[r4]; init_proc[r4](actor, game); From ada49f06a8dda918c3721f7a5cefa9a85a5b5d7a Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 16 Feb 2025 10:17:07 -0500 Subject: [PATCH 25/26] fix rodata --- src/actor/ac_museum_insect_base.c_inc | 28 ++++++++++++----------- src/actor/ac_museum_insect_goki.c_inc | 4 ++++ src/actor/ac_museum_insect_kuwagata.c_inc | 8 +++++++ src/actor/ac_museum_insect_tonbo.c_inc | 8 +++++++ 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/actor/ac_museum_insect_base.c_inc b/src/actor/ac_museum_insect_base.c_inc index 7af99eb0..46726502 100644 --- a/src/actor/ac_museum_insect_base.c_inc +++ b/src/actor/ac_museum_insect_base.c_inc @@ -1,5 +1,11 @@ #include "ac_museum_insect_priv.h" +void mID_insect_moveF(MUSEUM_INSECT_PRIVATE_DATA* actor) { + actor->_34.x = actor->_40 * sin_s(actor->_68.y); + actor->_34.z = actor->_40 * cos_s(actor->_68.y); + xyz_t_add(&actor->_1C, &actor->_34, &actor->_1C); +} + #include "../src/actor/ac_museum_insect_chou.c_inc" #include "../src/actor/ac_museum_insect_semi.c_inc" #include "../src/actor/ac_museum_insect_tonbo.c_inc" @@ -8,19 +14,6 @@ #include "../src/actor/ac_museum_insect_hachi.c_inc" #include "../src/actor/ac_museum_insect_kabuto.c_inc" #include "../src/actor/ac_museum_insect_kuwagata.c_inc" -#include "../src/actor/ac_museum_insect_mino.c_inc" -#include "../src/actor/ac_museum_insect_kumo.c_inc" -#include "../src/actor/ac_museum_insect_goki.c_inc" -#include "../src/actor/ac_museum_insect_genji.c_inc" -#include "../src/actor/ac_museum_insect_dango.c_inc" -#include "../src/actor/ac_museum_insect_okera.c_inc" -#include "../src/actor/ac_museum_insect_ka.c_inc" - -void mID_insect_moveF(MUSEUM_INSECT_PRIVATE_DATA* actor) { - actor->_34.x = actor->_40 * sin_s(actor->_68.y); - actor->_34.z = actor->_40 * cos_s(actor->_68.y); - xyz_t_add(&actor->_1C, &actor->_34, &actor->_1C); -} void minsect_amenbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { actor->_1C = amenbo_center_pos; @@ -94,6 +87,12 @@ void minsect_amenbo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { CLOSE_DISP(game->graph); } +#include "../src/actor/ac_museum_insect_mino.c_inc" +#include "../src/actor/ac_museum_insect_kumo.c_inc" +#include "../src/actor/ac_museum_insect_goki.c_inc" +#include "../src/actor/ac_museum_insect_genji.c_inc" +#include "../src/actor/ac_museum_insect_dango.c_inc" + void ari_alone_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { actor->_8C |= 1; if (RANDOM_F(1.f) < (2.f / 3.f)) { @@ -163,6 +162,9 @@ void ari_alone_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { } } +#include "../src/actor/ac_museum_insect_okera.c_inc" +#include "../src/actor/ac_museum_insect_ka.c_inc" + extern Gfx act_m_mu_ariT_model; void ari_alone_draw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { _texture_z_light_fog_prim_xlu(game->graph); diff --git a/src/actor/ac_museum_insect_goki.c_inc b/src/actor/ac_museum_insect_goki.c_inc index cbe3babf..94144938 100644 --- a/src/actor/ac_museum_insect_goki.c_inc +++ b/src/actor/ac_museum_insect_goki.c_inc @@ -1,5 +1,9 @@ #include "ac_museum_insect_priv.h" +// UNUSED +void mi_goki_hane_anime() { +} + void minsect_goki_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { actor->_1C.x = 280.f; actor->_1C.y = 40.f; diff --git a/src/actor/ac_museum_insect_kuwagata.c_inc b/src/actor/ac_museum_insect_kuwagata.c_inc index 6bca6e47..488ab3cc 100644 --- a/src/actor/ac_museum_insect_kuwagata.c_inc +++ b/src/actor/ac_museum_insect_kuwagata.c_inc @@ -286,6 +286,14 @@ void minsect_kuwagata_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { mi_kuwagata_setupAction(actor, 0, game); } +// UNUSED +void minsect_kuwagata_normal_process() { +} + +// UNUSED +void minsect_kuwagata_battle_process() { +} + void minsect_kuwagata_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { actor->_04(actor, game); } diff --git a/src/actor/ac_museum_insect_tonbo.c_inc b/src/actor/ac_museum_insect_tonbo.c_inc index b0ab912c..8b4abf35 100644 --- a/src/actor/ac_museum_insect_tonbo.c_inc +++ b/src/actor/ac_museum_insect_tonbo.c_inc @@ -124,6 +124,14 @@ void minsect_tonbo_rock_target_set(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game } } +// UNUSED +void minsect_tonbo_suprised_near_player() { + extern _strip(f32); + _strip(75.f); + _strip(6.f); + _strip(55.f); +} + BOOL minsect_tonbo_suprised_rest_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) { if (actor->_74 >= 6) { actor->_7A = 1; From 5355e2d27daba7354673e29bafc2f8e949888e54 Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 16 Feb 2025 10:18:58 -0500 Subject: [PATCH 26/26] Link ac_museum_insect.c --- configure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.py b/configure.py index e5541cfc..f1dad6c7 100644 --- a/configure.py +++ b/configure.py @@ -1024,7 +1024,7 @@ config.libs = [ 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"), + Object(Matching, "actor/ac_museum_insect.c"), Object(Matching, "actor/ac_museum_picture.c"), Object(Matching, "actor/ac_my_house.c"), Object(Matching, "actor/ac_my_indoor.c"),