From 9397ef8ba17a51c4f8d81a6667d80a99d660e8c8 Mon Sep 17 00:00:00 2001 From: roeming Date: Wed, 13 Nov 2024 11:13:30 -0500 Subject: [PATCH 01/33] initial fish progress --- src/actor/ac_museum_fish.c | 114 +++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/actor/ac_museum_fish.c diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c new file mode 100644 index 00000000..7051f001 --- /dev/null +++ b/src/actor/ac_museum_fish.c @@ -0,0 +1,114 @@ +#include "ac_museum_fish.h" +#include "m_kankyo.h" +#include "m_play.h" +#include "m_demo.h" +#include "m_name_table.h" + +typedef struct { + s16 unk0; + s16 unk2; +} UNK_FISH_STRUCT_2S16; + +typedef struct { + ACTOR actor; + u8 _00_padding[0x14BAC]; + int unk_14d20; + int unk_14d24; + UNK_FISH_STRUCT_2S16 unk_14d28[1]; + + u8 _14d28_padding[0x8c]; + s16 unk_14db8; + s16 unk_14dba; +} UNK_FISH_STRUCT; + +void Museum_Fish_Prv_data_init(); +void Museum_Fish_Actor_ct(); +void Museum_Fish_Actor_dt(); +int Museum_Fish_GetMsgNo(UNK_FISH_STRUCT* r31); +void Museum_Fish_Check_Talk_Distance(); +void Museum_Fish_Set_MsgFishInfo(); +void Museum_Fish_set_talk_info(); +void Museum_Fish_Talk_process(); +void Museum_Fish_Actor_move(); +void Museum_Fish_Suisou_draw(); +void kusa_before_disp(); +void Museum_Fish_Kusa_Draw(); +void Museum_Fish_Actor_draw(); +void mfish_cull_check(); +void mfish_point_ligh_pos_get(); +void mfish_point_light_ct(); +void mfish_point_light_dt(UNK_FISH_STRUCT* r30, GAME_PLAY* r31); +void mfish_point_light_mv(); +void mfish_normal_light_set(); + +void Museum_Fish_Prv_data_init() { } +void Museum_Fish_Actor_ct() { } +void Museum_Fish_Actor_dt(UNK_FISH_STRUCT* r30, GAME_PLAY* r31) { + mfish_point_light_dt(r30, r31); +} +int Museum_Fish_GetMsgNo(UNK_FISH_STRUCT* r29) +{ + s16 temp = r29->unk_14d28[r29->unk_14d24].unk2; + mNT_FishIdx2FishItemNo(r29->unk_14d28[r29->unk_14d24].unk0); + mNT_FishIdx2FishItemNo(temp); + + // TODO: start here + +} +void Museum_Fish_Check_Talk_Distance() { } +void Museum_Fish_Set_MsgFishInfo() { } +void Museum_Fish_set_talk_info(UNK_FISH_STRUCT* r31) +{ + static rgba_t window_color = {255,255,0xcd,255}; + int r3; + if(r31->unk_14d20 > 0) { // maybe related to if there are fish in the tank + r3 = Museum_Fish_GetMsgNo(r31); + r31->unk_14d24 += 1; // maybe iterating through the fish donation record, given which fish are donated? + } else { + r3 = 0x2fa1; + } + + mDemo_Set_msg_num(r3); + mDemo_Set_talk_window_color(&window_color); + mDemo_Set_talk_display_name(0); + mDemo_Set_ListenAble(); + mDemo_Set_camera(CAMERA2_PROCESS_NORMAL); + mDemo_Set_use_zoom_sound(TRUE); +} +void Museum_Fish_Talk_process() { } +void Museum_Fish_Actor_move() { } +void Museum_Fish_Suisou_draw() { } +void kusa_before_disp() { } +void Museum_Fish_Kusa_Draw() { } +void Museum_Fish_Actor_draw() { } +void mfish_cull_check() { } +void mfish_point_ligh_pos_get() { } +void mfish_point_light_ct() { } + + +void mfish_point_light_dt(UNK_FISH_STRUCT* r30, GAME_PLAY* r31) +{ + if (r30->unk_14db8 != -1) { + mEnv_CancelReservedPointLight(r30->unk_14db8, r31); + } + + if (r30->unk_14dba != -1) { + mEnv_CancelReservedPointLight(r30->unk_14dba, r31); + } +} +void mfish_point_light_mv() { } + +void mfish_normal_light_set(UNK_FISH_STRUCT* r30, GAME_PLAY* r31) +{ + LightsN* lights; + + // TODO: figure out where these are actually coming from + xyz_t r5; + r5.x = 320; + r5.y = 0; + r5.z = 252; + + lights = Global_light_read(&r31->global_light, r31->game.graph); + LightsN_list_check(lights, r31->global_light.list, &r5); + LightsN_disp(lights, r31->game.graph); +} From 006a8d9476d4b26359109ce0be16a8868bcad9c4 Mon Sep 17 00:00:00 2001 From: roeming Date: Wed, 13 Nov 2024 12:07:03 -0500 Subject: [PATCH 02/33] Adding some comments --- src/actor/ac_museum_fish.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index 7051f001..5d42166d 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -4,6 +4,26 @@ #include "m_demo.h" #include "m_name_table.h" +// TODO: move function declarations and struct declarations into ac_museum_fish.h +// maybe we move all the different .text sections into .inc files + +/* + NEW KNOWLEDGE: +Cuyler — Today at 10:56 AM + yeah, the _move, _draw, _ct, _dt, and _save funcs all take ACTOR*, GAME* + thankfully the ZZZ_Profile data objects give us the class size, just re-type it to ACTOR_PROFILE +Roeming — Today at 10:55 AM + hmm, not sure I understand +Cuyler — Today at 10:55 AM + so AC is a weird pseudo-inheritance class system since it's C + all classes which inherit from ACTOR have an "actor profile" + which is basically like a weird C++ vtable + + There will be data with this C file `ACTOR_PROFILE Museum_Fish_Profile;` + and part of that data will be the size of our UNK_FISH_STRUCT, + `Museum_Fish_Profile->class_size;` +*/ + typedef struct { s16 unk0; s16 unk2; @@ -106,7 +126,7 @@ void mfish_normal_light_set(UNK_FISH_STRUCT* r30, GAME_PLAY* r31) xyz_t r5; r5.x = 320; r5.y = 0; - r5.z = 252; + r5.z = 240; lights = Global_light_read(&r31->global_light, r31->game.graph); LightsN_list_check(lights, r31->global_light.list, &r5); From 263a00d2e59c9b6aef7b4fbe2adf909775194861 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Wed, 13 Nov 2024 23:25:38 -0500 Subject: [PATCH 03/33] Museum_Fish_GetMsgNo --- include/ac_museum_fish.h | 38 ++++++++- src/actor/ac_museum_fish.c | 164 ++++++++++++++++++------------------- 2 files changed, 119 insertions(+), 83 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index b6f48bf2..2acc14dc 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -10,9 +10,45 @@ extern "C" { extern ACTOR_PROFILE Museum_Fish_Profile; +typedef struct { + s16 unk0; + s16 unk2; +} UNK_FISH_STRUCT_2S16; + +typedef struct { + ACTOR actor; + u8 _00_padding[0x14BAC]; + int unk_14d20; + int unk_14d24; + UNK_FISH_STRUCT_2S16 unk_14d28[1]; + + u8 _14d28_padding[0x8c]; + s16 unk_14db8; + s16 unk_14dba; +} MUSEUM_FISH_ACTOR; + +void Museum_Fish_Prv_data_init(); +void Museum_Fish_Actor_ct(ACTOR* actor, GAME* game); +void Museum_Fish_Actor_dt(ACTOR* actor, GAME* game); +int Museum_Fish_GetMsgNo(ACTOR* r31); +void Museum_Fish_Check_Talk_Distance(); +void Museum_Fish_Set_MsgFishInfo(); +void Museum_Fish_set_talk_info(); +void Museum_Fish_Talk_process(); +void Museum_Fish_Actor_move(ACTOR* actor, GAME* game); +void Museum_Fish_Suisou_draw(ACTOR* actor, GAME* game); +void kusa_before_disp(); +void Museum_Fish_Kusa_Draw(ACTOR* actor, GAME* game); +void Museum_Fish_Actor_draw(ACTOR* actor, GAME* game); +void mfish_cull_check(); +void mfish_point_ligh_pos_get(); +void mfish_point_light_ct(ACTOR* actor, GAME* game); +void mfish_point_light_dt(ACTOR* r30, GAME* r31); +void mfish_point_light_mv(ACTOR* actor, GAME* game); +void mfish_normal_light_set(); + #ifdef __cplusplus } #endif #endif - diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index 5d42166d..1da31cda 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -3,9 +3,9 @@ #include "m_play.h" #include "m_demo.h" #include "m_name_table.h" - -// TODO: move function declarations and struct declarations into ac_museum_fish.h -// maybe we move all the different .text sections into .inc files +#include "m_item_name.h" +#include "m_msg.h" +#include "m_common_data.h" /* NEW KNOWLEDGE: @@ -24,66 +24,57 @@ Cuyler — Today at 10:55 AM `Museum_Fish_Profile->class_size;` */ -typedef struct { - s16 unk0; - s16 unk2; -} UNK_FISH_STRUCT_2S16; - -typedef struct { - ACTOR actor; - u8 _00_padding[0x14BAC]; - int unk_14d20; - int unk_14d24; - UNK_FISH_STRUCT_2S16 unk_14d28[1]; - - u8 _14d28_padding[0x8c]; - s16 unk_14db8; - s16 unk_14dba; -} UNK_FISH_STRUCT; - -void Museum_Fish_Prv_data_init(); -void Museum_Fish_Actor_ct(); -void Museum_Fish_Actor_dt(); -int Museum_Fish_GetMsgNo(UNK_FISH_STRUCT* r31); -void Museum_Fish_Check_Talk_Distance(); -void Museum_Fish_Set_MsgFishInfo(); -void Museum_Fish_set_talk_info(); -void Museum_Fish_Talk_process(); -void Museum_Fish_Actor_move(); -void Museum_Fish_Suisou_draw(); -void kusa_before_disp(); -void Museum_Fish_Kusa_Draw(); -void Museum_Fish_Actor_draw(); -void mfish_cull_check(); -void mfish_point_ligh_pos_get(); -void mfish_point_light_ct(); -void mfish_point_light_dt(UNK_FISH_STRUCT* r30, GAME_PLAY* r31); -void mfish_point_light_mv(); -void mfish_normal_light_set(); - -void Museum_Fish_Prv_data_init() { } -void Museum_Fish_Actor_ct() { } -void Museum_Fish_Actor_dt(UNK_FISH_STRUCT* r30, GAME_PLAY* r31) { - mfish_point_light_dt(r30, r31); +void Museum_Fish_Prv_data_init() { } -int Museum_Fish_GetMsgNo(UNK_FISH_STRUCT* r29) -{ - s16 temp = r29->unk_14d28[r29->unk_14d24].unk2; - mNT_FishIdx2FishItemNo(r29->unk_14d28[r29->unk_14d24].unk0); - mNT_FishIdx2FishItemNo(temp); - - // TODO: start here - +void Museum_Fish_Actor_ct(ACTOR* actor, GAME* game) { } -void Museum_Fish_Check_Talk_Distance() { } -void Museum_Fish_Set_MsgFishInfo() { } -void Museum_Fish_set_talk_info(UNK_FISH_STRUCT* r31) -{ - static rgba_t window_color = {255,255,0xcd,255}; +void Museum_Fish_Actor_dt(ACTOR* actor, GAME* game) { + mfish_point_light_dt(actor, game); +} +int Museum_Fish_GetMsgNo(ACTOR* actorx) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; + + static u8 item_name[20]; + int itemArticle; + mMsg_Window_c* msg; + + // who donated the fish? + int playerNumber = actor->unk_14d28[actor->unk_14d24].unk2; + mActor_name_t actorName = mNT_FishIdx2FishItemNo(actor->unk_14d28[actor->unk_14d24].unk0); + mIN_copy_name_str(item_name, actorName); + mMsg_Set_item_str_art(mMsg_Get_base_window_p(), 0, item_name, 0x10, mIN_get_item_article(actorName)); + + if (playerNumber >= 1 && playerNumber <= 4) { + mMsg_Set_free_str(mMsg_Get_base_window_p(), 0, + common_data.save.save.private_data[playerNumber - 1].player_ID.player_name, 8); + } + + if (actor->unk_14d24 < actor->unk_14d20 - 1) { + if (playerNumber >= 1 && playerNumber <= 4) { + return 0x2fa2; + } else { + return 0x2fa3; + } + } + + if (playerNumber >= 1 && playerNumber <= 4) { + return 0x2f9f; + } else { + return 0x2fa0; + } +} +void Museum_Fish_Check_Talk_Distance() { +} +void Museum_Fish_Set_MsgFishInfo() { +} +void Museum_Fish_set_talk_info(ACTOR* actorx) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; + + static rgba_t window_color = { 255, 255, 0xcd, 255 }; int r3; - if(r31->unk_14d20 > 0) { // maybe related to if there are fish in the tank - r3 = Museum_Fish_GetMsgNo(r31); - r31->unk_14d24 += 1; // maybe iterating through the fish donation record, given which fish are donated? + if (actor->unk_14d20 > 0) { // maybe related to if there are fish in the tank + r3 = Museum_Fish_GetMsgNo(actorx); + actor->unk_14d24 += 1; // maybe iterating through the fish donation record, given which fish are donated? } else { r3 = 0x2fa1; } @@ -95,40 +86,49 @@ void Museum_Fish_set_talk_info(UNK_FISH_STRUCT* r31) mDemo_Set_camera(CAMERA2_PROCESS_NORMAL); mDemo_Set_use_zoom_sound(TRUE); } -void Museum_Fish_Talk_process() { } -void Museum_Fish_Actor_move() { } -void Museum_Fish_Suisou_draw() { } -void kusa_before_disp() { } -void Museum_Fish_Kusa_Draw() { } -void Museum_Fish_Actor_draw() { } -void mfish_cull_check() { } -void mfish_point_ligh_pos_get() { } -void mfish_point_light_ct() { } +void Museum_Fish_Talk_process() { +} +void Museum_Fish_Actor_move(ACTOR* actor, GAME* game) { +} +void Museum_Fish_Suisou_draw(ACTOR* actor, GAME* game) { +} +void kusa_before_disp() { +} +void Museum_Fish_Kusa_Draw(ACTOR* actor, GAME* game) { +} +void Museum_Fish_Actor_draw(ACTOR* actor, GAME* game) { +} +void mfish_cull_check() { +} +void mfish_point_ligh_pos_get() { +} +void mfish_point_light_ct(ACTOR* actor, GAME* game) { +} +void mfish_point_light_dt(ACTOR* actorx, GAME* game) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; -void mfish_point_light_dt(UNK_FISH_STRUCT* r30, GAME_PLAY* r31) -{ - if (r30->unk_14db8 != -1) { - mEnv_CancelReservedPointLight(r30->unk_14db8, r31); + if (actor->unk_14db8 != -1) { + mEnv_CancelReservedPointLight(actor->unk_14db8, (GAME_PLAY*)game); } - if (r30->unk_14dba != -1) { - mEnv_CancelReservedPointLight(r30->unk_14dba, r31); + if (actor->unk_14dba != -1) { + mEnv_CancelReservedPointLight(actor->unk_14dba, (GAME_PLAY*)game); } } -void mfish_point_light_mv() { } +void mfish_point_light_mv(ACTOR* actor, GAME* game) { +} -void mfish_normal_light_set(UNK_FISH_STRUCT* r30, GAME_PLAY* r31) -{ +void mfish_normal_light_set(ACTOR* actor, GAME* _game) { LightsN* lights; - + GAME_PLAY* game = (GAME_PLAY*)_game; // TODO: figure out where these are actually coming from xyz_t r5; r5.x = 320; r5.y = 0; r5.z = 240; - lights = Global_light_read(&r31->global_light, r31->game.graph); - LightsN_list_check(lights, r31->global_light.list, &r5); - LightsN_disp(lights, r31->game.graph); + lights = Global_light_read(&game->global_light, game->game.graph); + LightsN_list_check(lights, game->global_light.list, &r5); + LightsN_disp(lights, game->game.graph); } From 7df708e441f2b012497f4dc630dda6c1b058b983 Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 21 Nov 2024 15:04:54 -0500 Subject: [PATCH 04/33] Museum fish progress --- config/GAFE01_00/foresta/splits.txt | 23 +- include/ac_museum_fish.h | 362 ++++- src/actor/ac_museum_fish.c | 2318 ++++++++++++++++++++++++++- 3 files changed, 2617 insertions(+), 86 deletions(-) diff --git a/config/GAFE01_00/foresta/splits.txt b/config/GAFE01_00/foresta/splits.txt index b3c0fe23..ac029e1c 100644 --- a/config/GAFE01_00/foresta/splits.txt +++ b/config/GAFE01_00/foresta/splits.txt @@ -822,28 +822,7 @@ actor/ac_museum_picture.c: .bss start:0x000A16B0 end:0x000A16C0 actor/ac_museum_fish.c: - .text start:0x000BF554 end:0x000C1428 - .text start:0x000C1428 end:0x000C869C - .text start:0x000C869C end:0x000CA20C - .text start:0x000CA20C end:0x000CC160 - .text start:0x000CC160 end:0x000CF450 - .text start:0x000CF450 end:0x000D0D24 - .text start:0x000D0D24 end:0x000D3110 - .text start:0x000D3110 end:0x000D46C8 - .text start:0x000D46C8 end:0x000D6128 - .text start:0x000D6128 end:0x000D7650 - .text start:0x000D7650 end:0x000D8EAC - .text start:0x000D8EAC end:0x000DA238 - .text start:0x000DA238 end:0x000DC1B8 - .text start:0x000DC1B8 end:0x000DD860 - .text start:0x000DD860 end:0x000DE3AC - .text start:0x000DE3AC end:0x000DFE04 - .text start:0x000DFE04 end:0x000E0DF4 - .text start:0x000E0DF4 end:0x000E39E4 - .text start:0x000E39E4 end:0x000E5DD8 - .text start:0x000E5DD8 end:0x000E7788 - .text start:0x000E7788 end:0x000E8F9C - .text start:0x000E8F9C end:0x000E9F58 + .text start:0x000BF554 end:0x000E9F58 .rodata start:0x000030D0 end:0x00003410 .data start:0x00037A58 end:0x00038F08 .bss start:0x000A16C0 end:0x000A16D8 diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 2acc14dc..4743c8ef 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -3,6 +3,8 @@ #include "types.h" #include "m_actor.h" +#include "c_keyframe.h" +#include "libu64/u64types.h" #ifdef __cplusplus extern "C" { @@ -10,43 +12,367 @@ extern "C" { extern ACTOR_PROFILE Museum_Fish_Profile; -typedef struct { - s16 unk0; - s16 unk2; -} UNK_FISH_STRUCT_2S16; +typedef struct _FISH_PRIVATE_DATA; -typedef struct { - ACTOR actor; - u8 _00_padding[0x14BAC]; - int unk_14d20; - int unk_14d24; - UNK_FISH_STRUCT_2S16 unk_14d28[1]; +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*); - u8 _14d28_padding[0x8c]; - s16 unk_14db8; - s16 unk_14dba; +// unsure temp structs + +typedef struct _YET_SKELETON { + cKF_SkeletonInfo_R_c _00; + Mtx _70; + u8 padding[0x200]; + Mtx _2b0; +} YET_SKELETON; + +typedef struct _MUSEUM_FISH_INIT_DATA { + f32 _00; + f32 _04; + f32 _08; + f32 _0C; + f32 _10; + f32 _14; + f32 _18; + f32 _1C; + f32 _20; + f32 _24; + f32 _28; + s16 _2C; + s16 _2E; + s16 _30; +} MUSEUM_FISH_INIT_DATA; // size: 0x34 + +typedef struct _FISH_PRIVATE_DATA { + MUSEUM_FISH_INIT_DATA init_data; + void* _34; // function pointer to dummy_process function + YET_SKELETON _38; + void* _4A4; + void* _584; + void* _588; + void* _590; + s32 _59C; // fish num + xyz_t _5A0; + f32 _5AC; + f32 _5B0; + f32 _5B4; + f32 _5D0; + f32 _5D4; + f32 _5D8; + xyz_t _5DC; + f32 _5E8; + f32 _5EC; + f32 _5F0; + f32 _5F4; + s_xz _60C; + s_xz _612; + s16 _61C; + s16 _622; + s16 _624; + s16 _626; + s16 _62C; + s16 _62E; + s16 _630; + s16 _632; + s16 _634; + s16 _636; + s16 _640; +} MUSEUM_FISH_PRIVATE_DATA; + +typedef struct _MUSEUM_FISH_PRIVATE_DATA2 { + cKF_SkeletonInfo_R_c _00; + s_xyz _4F0; + s_xyz _514; + s16 _538; + s16 _53A; + s16 _53C; + float _540; + float _548; + void* _54C; +} MUSEUM_FISH_PRIVATE_DATA2; + +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 + MUSEUM_FISH_PRIVATE_DATA prvFish[40]; // offset: 0x264 size: 0x648 * 40 + MUSEUM_FISH_PRIVATE_DATA2 prvFish2[14]; + s16 _101f0; + s16 _101f4; + void* _14788; + xyz_t _14d08; + xyz_t _14d14; + int numFishDisplayed; // offset: 0x14d20, size: 4 + int fishDisplayMsgIter; // offset: 0x14d24, size: 4 + FISH_DISPLAY_MSG_INFO fishDisplayMsgInfo[10]; // offset: 0x14d28, size: 4*10 + + s16 _14d50[0x10]; + s16 _14d78[0x10]; + s16 _14db4; + s16 _14db6; // offset: 0x14db6, size: 2 + s16 _14db8; // offset: 0x14db8, size: 2 + s16 _14dba; // offset: 0x14dba, size: 2 + s16 _14dbc; // offset: 0x14dbc, size: 2 + s16 _14dbe; // offset: 0x14dbe, size: 2 + 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; -void Museum_Fish_Prv_data_init(); +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* r31); -void Museum_Fish_Check_Talk_Distance(); +int Museum_Fish_GetMsgNo(ACTOR* actor); +BOOL Museum_Fish_Check_Talk_Distance(GAME* gamex, int index); void Museum_Fish_Set_MsgFishInfo(); void Museum_Fish_set_talk_info(); void Museum_Fish_Talk_process(); void Museum_Fish_Actor_move(ACTOR* actor, GAME* game); -void Museum_Fish_Suisou_draw(ACTOR* actor, GAME* game); +void Museum_Fish_Suisou_draw(MUSEUM_FISH_ACTOR* actor, GAME* game, int r5); void kusa_before_disp(); void Museum_Fish_Kusa_Draw(ACTOR* actor, GAME* game); void Museum_Fish_Actor_draw(ACTOR* actor, GAME* game); -void mfish_cull_check(); +BOOL mfish_cull_check(GAME* game, xyz_t* worldPos, f32 x, f32 y, f32 _y); void mfish_point_ligh_pos_get(); void mfish_point_light_ct(ACTOR* actor, GAME* game); void mfish_point_light_dt(ACTOR* r30, GAME* r31); void mfish_point_light_mv(ACTOR* actor, GAME* game); void mfish_normal_light_set(); +f32 Rnd_EX_f(f32 v1); +f32 Rnd_EX_fx(f32 v1); +void mfish_base_FishMove(); +int mfish_PosWallCheck(MUSEUM_FISH_PRIVATE_DATA* priv, xyz_t* pos); +void mfish_WallCheck(); +s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv); +void mfish_dummy_process_init(); +void mfish_dummy_process(); +void mfish_normal_process_init(); +void mfish_normal_process(); +void mfish_turn_process_init(); +void mfish_turn_process(); +void mfish_peck_process_init(); +void mfish_peck_process(); +void mfish_ground_peck_process_init(); +void mfish_ground_peck_process(); +void mfish_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); +int 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(); +void Museum_Fish_ObjBGCheck(); +void Museum_Fish_DonkoBGCheck(); +void Museum_Fish_objchk_pos_set(); +void Museum_Fish_BGCheck(); +void Museum_Fish_Kusa_Check(); +void Museum_Fish_Object_Check(); +void mfish_body_wind_anime_play(); +void mfish_get_player_angle(); +void mfish_peck_check(); +void mfish_peck_wall_check(); +void mfish_ground_peck_before_check(); +void mfish_get_player_area(); +void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_get_escape_angle(); +void mfish_move_smooth(); +void mfish_hamon_make(); +void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_afish_dummy_process_init(); +void mfish_afish_dummy_process(); +void mfish_afish_normal_process_init(); +void mfish_afish_normal_process(); +void mfish_afish_turn_process_init(); +void mfish_afish_turn_process(); +void mfish_afish_base_FishMove(); +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); +void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_aroana_dummy_process_init(); +void mfish_aroana_dummy_process(); +void mfish_aroana_normal_process_init(); +void mfish_aroana_normal_process(); +void mfish_aroana_turn_process_init(); +void mfish_aroana_turn_process(); +void mfish_aroana_long_move_process_init(); +void mfish_aroana_long_move_process(); +void mfish_aroana_base_FishMove(); +void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_aroana_before_disp(); +void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_koi_tail_anim_set(); +void mfish_koi_move_smooth(); +void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_koi_dummy_process_init(); +void mfish_koi_dummy_process(); +void mfish_koi_normal_process_init(); +void mfish_koi_normal_process(); +void mfish_koi_turn_process_init(); +void mfish_koi_turn_process(); +void mfish_koi_peck_process_init(); +void mfish_koi_peck_process(); +void mfish_koi_long_move_process_init(); +void mfish_koi_long_move_process(); +void mfish_koi_base_FishMove(); +void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_koi_before_disp(); +void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_kaseki_normal_init(); +void mfish_kaseki_normal(); +void mfish_kaseki_move_wall_smooth(); +void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_kaseki_before_disp(); +void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_bass_tail_anim_set(); +void mfish_bass_base_FishMove(); +void mfish_bass_dummy_process_init(); +void mfish_bass_dummy_process(); +void mfish_bass_normal_process_init(); +void mfish_bass_normal_process(); +void mfish_bass_turn_process_init(); +void mfish_bass_turn_process(); +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); +void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_seafish_normal_init(); +void mfish_seafish_normal(); +void mfish_seafish_turn_init(); +void mfish_seafish_turn(); +void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_seafish_before_disp(); +void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_tai_normal_init(); +void mfish_tai_normal(); +void mfish_tai_turn_init(); +void mfish_tai_turn(); +void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_tai_before_disp(); +void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_sfish_normal_init(); +void mfish_sfish_normal(); +void mfish_sfish_turn_init(); +void mfish_sfish_turn(); +void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_sfish_before_disp(); +void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_gupi_normal_init(); +void mfish_gupi_normal(); +void mfish_gupi_turn_init(); +void mfish_gupi_turn(); +void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_gupi_before_disp(); +void mfish_gupi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_medaka_normal_init(); +void mfish_medaka_normal(); +void mfish_medaka_turn_init(); +void mfish_medaka_turn(); +void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_medaka_before_disp(); +void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_kingyo_normal_init(); +void mfish_kingyo_normal(); +void mfish_kingyo_turn_init(); +void mfish_kingyo_turn(); +void mfish_kingyo_peck_init(); +void mfish_kingyo_peck(); +void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_kingyo_before_disp(); +void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_dojou_normal_init(); +void mfish_dojou_normal(); +void mfish_dojou_turn_init(); +void mfish_dojou_turn(); +void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_dojou_before_disp(); +void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_donko_before_disp(); +void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_bfish_before_disp(); +void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_ito_before_disp(); +void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_unagi_get_next_rail_type(); +void mfish_unagi_aim_wind_angle_calc(); +void mfish_unagi_rail_move_init(); +void mfish_unagi_rail_move(); +void mfish_unagi_normal_to_reverse_init(); +void mfish_unagi_normal_to_reverse(); +void mfish_unagi_rail_move_reverse_init(); +void mfish_unagi_rail_move_reverse(); +void mfish_unagi_reverse_to_normal_init(); +void mfish_unagi_reverse_to_normal(); +void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_unagi_before_disp(); +void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_namazu_body_wind_anime_play(); +void mfish_namazu_normal_process_init(); +void mfish_namazu_normal_process(); +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(); +void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_namazu_before_disp(); +void mfish_namazu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_zarigani_normal_process_init(); +void mfish_zarigani_normal_process(); +void mfish_zarigani_wait_process_init(); +void mfish_zarigani_wait_process(); +void mfish_zarigani_stand_process_init(); +void mfish_zarigani_stand_process(); +void mfish_zarigani_jump_process_init(); +void mfish_zarigani_jump_process(); +void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_zarigani_before_disp(); +void mfish_zarigani_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_kurage_normal_init(); +void mfish_kurage_normal(); +void mfish_kurage_turn_init(); +void mfish_kurage_turn(); +void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_kurage_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_hasu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_hasu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_hasu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void hasu_before_disp(); +void hasu_after_disp(); +void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); + #ifdef __cplusplus } #endif diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index 1da31cda..9b5a7eca 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -6,75 +6,825 @@ #include "m_item_name.h" #include "m_msg.h" #include "m_common_data.h" +#include "sys_matrix.h" +#include "m_lib.h" +#include "m_player_lib.h" +#include "m_debug_mode.h" +#include "libforest/gbi_extensions.h" -/* - NEW KNOWLEDGE: -Cuyler — Today at 10:56 AM - yeah, the _move, _draw, _ct, _dt, and _save funcs all take ACTOR*, GAME* - thankfully the ZZZ_Profile data objects give us the class size, just re-type it to ACTOR_PROFILE -Roeming — Today at 10:55 AM - hmm, not sure I understand -Cuyler — Today at 10:55 AM - so AC is a weird pseudo-inheritance class system since it's C - all classes which inherit from ACTOR have an "actor profile" - which is basically like a weird C++ vtable +// 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)) - There will be data with this C file `ACTOR_PROFILE Museum_Fish_Profile;` - and part of that data will be the size of our UNK_FISH_STRUCT, - `Museum_Fish_Profile->class_size;` -*/ +// delete this stuff later +typedef Mtx; +typedef Gfx; -void Museum_Fish_Prv_data_init() { +// extern data +// clang-format off +extern cKF_Skeleton_R_c + cKF_bs_r_act_mus_funa_a1, + cKF_bs_r_act_mus_hera_a1, + cKF_bs_r_act_mus_koi_a1, + cKF_bs_r_act_mus_nisiki_a1, + cKF_bs_r_act_mus_namazu_a1, + cKF_bs_r_act_mus_bass_a1, + cKF_bs_r_act_mus_bassm_a1, + cKF_bs_r_act_mus_bassl_a1, + cKF_bs_r_act_mus_gill_a1, + cKF_bs_r_act_mus_onamazu_a1, + cKF_bs_r_act_mus_raigyo_a1, + cKF_bs_r_act_mus_nigoi_a1, + cKF_bs_r_act_mus_ugui_a1, + cKF_bs_r_act_mus_oikawa_a1, + cKF_bs_r_act_mus_tanago_a1, + cKF_bs_r_act_mus_dojyo_a1, + cKF_bs_r_act_mus_wakasa_a1, + cKF_bs_r_act_mus_ayu_a1, + cKF_bs_r_act_mus_yamame_a1, + cKF_bs_r_act_mus_iwana_a1, + cKF_bs_r_act_mus_niji_a1, + cKF_bs_r_act_mus_ito_a1, + cKF_bs_r_act_mus_sake_a1, + cKF_bs_r_act_mus_kingyo_a1, + cKF_bs_r_act_mus_pirania_a1, + cKF_bs_r_act_mus_aroana_a1, + cKF_bs_r_act_mus_unagi_a1, + cKF_bs_r_act_mus_donko_a1, + cKF_bs_r_act_mus_angel_a1, + cKF_bs_r_act_mus_gupi_a1, + cKF_bs_r_act_mus_demekin_a1, + cKF_bs_r_act_mus_kaseki_a1, + cKF_bs_r_act_mus_zari, + cKF_bs_r_act_mus_kaeru_a1, + cKF_bs_r_act_mus_medaka_a1, + cKF_bs_r_act_mus_suzuki_a1, + cKF_bs_r_act_mus_tai_a1, + cKF_bs_r_act_mus_isidai_a1, + cKF_bs_r_act_mus_pira_a1; + +extern cKF_Animation_R_c + cKF_ba_r_act_mus_funa_a1, + cKF_ba_r_act_mus_hera_a1, + cKF_ba_r_act_mus_koi_a1, + cKF_ba_r_act_mus_nisiki_a1, + cKF_ba_r_act_mus_namazu_a1, + cKF_ba_r_act_mus_bass_a1, + cKF_ba_r_act_mus_bassm_a1, + cKF_ba_r_act_mus_bassl_a1, + cKF_ba_r_act_mus_gill_a1, + cKF_ba_r_act_mus_onamazu_a1, + cKF_ba_r_act_mus_raigyo_a1, + cKF_ba_r_act_mus_nigoi_a1, + cKF_ba_r_act_mus_ugui_a1, + cKF_ba_r_act_mus_oikawa_a1, + cKF_ba_r_act_mus_tanago_a1, + cKF_ba_r_act_mus_dojyo_a1, + cKF_ba_r_act_mus_wakasa_a1, + cKF_ba_r_act_mus_ayu_a1, + cKF_ba_r_act_mus_yamame_a1, + cKF_ba_r_act_mus_iwana_a1, + cKF_ba_r_act_mus_niji_a1, + cKF_ba_r_act_mus_ito_a1, + cKF_ba_r_act_mus_sake_a1, + cKF_ba_r_act_mus_kingyo_a1, + cKF_ba_r_act_mus_pirania_a1, + cKF_ba_r_act_mus_aroana_a1, + cKF_ba_r_act_mus_unagi_a1, + cKF_ba_r_act_mus_donko_a1, + cKF_ba_r_act_mus_angel_a1, + cKF_ba_r_act_mus_gupi_a1, + cKF_ba_r_act_mus_demekin_a1, + cKF_ba_r_act_mus_kaseki_a1, + cKF_ba_r_act_mus_zari, + cKF_ba_r_act_mus_kaeru_a1, + cKF_ba_r_act_mus_medaka_a1, + cKF_ba_r_act_mus_suzuki_a1, + cKF_ba_r_act_mus_tai_a1, + cKF_ba_r_act_mus_isidai_a1, + cKF_ba_r_act_mus_pira_a1; + +extern cKF_Skeleton_R_c + cKF_bs_r_obj_museum5_kusa1, + cKF_bs_r_obj_museum5_kusa2, + cKF_bs_r_obj_museum5_kusa3; + +extern cKF_Animation_R_c + cKF_ba_r_obj_museum5_kusa1, + cKF_ba_r_obj_museum5_kusa2, + cKF_ba_r_obj_museum5_kusa3; + +// data + +MUSEUM_FISH_ACTOR* MF_Control_Actor; + +/* Init stuff */ +ACTOR_PROFILE Museum_Fish_Profile = { + mAc_PROFILE_MUSEUM_FISH, + 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_407, + sizeof(MUSEUM_FISH_ACTOR), + Museum_Fish_Actor_ct, + Museum_Fish_Actor_dt, + Museum_Fish_Actor_move, + Museum_Fish_Actor_draw, + NULL +}; + +xyz_t suisou_pos[5] = { + { 220.0f, 40.0f, 220.0f }, + { 420.0f, 40.0f, 220.0f }, + { 220.0f, 40.0f, 460.0f }, + { 420.0f, 40.0f, 460.0f }, + { 320.0f, 40.0f, 20.0f } +}; + +int kusa_group_tbl[14] = { 0, 2, 1, 3, 3, 4, 4, 4, 4, 4, 0, 2, 1, 3 }; + +xyz_t kusa_pos[14] = { + { 179.0f, 40.0f, 170.0f }, + { 253.0f, 40.0f, 495.0f }, + { 376.0f, 40.0f, 260.0f }, + { 397.0f, 40.0f, 412.0f }, + { 467.0f, 40.0f, 432.0f }, + { 141.0f, 40.0f, -18.0f }, + { 206.0f, 40.0f, -25.0f }, + { 346.0f, 40.0f, -38.0f }, + { 473.0f, 40.0f, -29.0f }, + { 495.0f, 40.0f, -21.0f }, + { 210.0f, 40.0f, 215.0f }, + { 266.0f, 40.0f, 507.0f }, + { 393.0f, 40.0f, 270.0f }, + { 415.0f, 40.0f, 415.0f } +}; + +xyz_t hasu_pos = { 420, 0, 220 }; + +xyz_t suisou_awa_pos[20] = { + { 150.0f, 60.0f, -12.0f }, + { 192.0f, 60.0f, -20.0f }, + { 216.0f, 60.0f, -4.0f }, + { 300.0f, 60.0f, -42.0f }, + { 332.0f, 60.0f, -28.0f }, + { 356.0f, 60.0f, -46.0f }, + { 416.0f, 60.0f, -28.0f }, + { 456.0f, 60.0f, 20.0f }, + { 190.0f, 60.0f, 173.0f }, + { 196.0f, 60.0f, 186.0f }, + { 232.0f, 60.0f, 178.0f }, + { 372.0f, 60.0f, 254.0f }, + { 388.0f, 60.0f, 270.0f }, + { 434.0f, 60.0f, 173.0f }, + { 180.0f, 60.0f, 408.0f }, + { 256.0f, 60.0f, 512.0f }, + { 270.0f, 60.0f, 500.0f }, + { 406.0f, 60.0f, 414.0f }, + { 458.0f, 60.0f, 424.0f }, + { 447.0f, 60.0f, 442.0f } +}; + +s16 suisou_awa_group[20] = { + 4, 4, 4, 4, 4, + 4, 4, 4, 0, 0, + 0, 1, 1, 1, 2, + 2, 2, 3, 3, 3 +}; + +cKF_Skeleton_R_c* mfish_model_tbl[40] = { +/* CRUCIAN_CARP */ &cKF_bs_r_act_mus_funa_a1, +/* BROOK_TROUT */ &cKF_bs_r_act_mus_hera_a1, +/* CARP */ &cKF_bs_r_act_mus_koi_a1, +/* KOI */ &cKF_bs_r_act_mus_nisiki_a1, +/* CATFISH */ &cKF_bs_r_act_mus_namazu_a1, +/* SMALL_BASS */ &cKF_bs_r_act_mus_bass_a1, +/* BASS */ &cKF_bs_r_act_mus_bassm_a1, +/* LARGE_BASS */ &cKF_bs_r_act_mus_bassl_a1, +/* BLUEGILL */ &cKF_bs_r_act_mus_gill_a1, +/* GIANT_CATFISH */ &cKF_bs_r_act_mus_onamazu_a1, +/* GIANT_SNAKEHEAD */ &cKF_bs_r_act_mus_raigyo_a1, +/* BARBEL_STEED */ &cKF_bs_r_act_mus_nigoi_a1, +/* DACE */ &cKF_bs_r_act_mus_ugui_a1, +/* PALE_CHUB */ &cKF_bs_r_act_mus_oikawa_a1, +/* BITTERLING */ &cKF_bs_r_act_mus_tanago_a1, +/* LOACH */ &cKF_bs_r_act_mus_dojyo_a1, +/* POND_SMELT */ &cKF_bs_r_act_mus_wakasa_a1, +/* SWEETFISH */ &cKF_bs_r_act_mus_ayu_a1, +/* CHERRY_SALMON */ &cKF_bs_r_act_mus_yamame_a1, +/* LARGE_CHAR */ &cKF_bs_r_act_mus_iwana_a1, +/* RAINBOW_TROUT */ &cKF_bs_r_act_mus_niji_a1, +/* STRINGFISH */ &cKF_bs_r_act_mus_ito_a1, +/* SALMON */ &cKF_bs_r_act_mus_sake_a1, +/* GOLDFISH */ &cKF_bs_r_act_mus_kingyo_a1, +/* PIRANHA */ &cKF_bs_r_act_mus_pirania_a1, +/* AROWANA */ &cKF_bs_r_act_mus_aroana_a1, +/* EEL */ &cKF_bs_r_act_mus_unagi_a1, +/* FRESHWATER_GOBY */ &cKF_bs_r_act_mus_donko_a1, +/* ANGELFISH */ &cKF_bs_r_act_mus_angel_a1, +/* GUPPY */ &cKF_bs_r_act_mus_gupi_a1, +/* POPEYED_GOLDFISH */ &cKF_bs_r_act_mus_demekin_a1, +/* COELACANTH */ &cKF_bs_r_act_mus_kaseki_a1, +/* CRAWFISH */ &cKF_bs_r_act_mus_zari, +/* FROG */ &cKF_bs_r_act_mus_kaeru_a1, +/* KILLIFISH */ &cKF_bs_r_act_mus_medaka_a1, +/* JELLYFISH */ NULL, +/* SEA_BASS */ &cKF_bs_r_act_mus_suzuki_a1, +/* RED_SNAPPER */ &cKF_bs_r_act_mus_tai_a1, +/* BARRED_KNIFEJAW */ &cKF_bs_r_act_mus_isidai_a1, +/* ARAPAIMA */ &cKF_bs_r_act_mus_pira_a1 +}; + +cKF_Animation_R_c* mfish_anime_init_tbl[40] = { +/* CRUCIAN_CARP */ &cKF_ba_r_act_mus_funa_a1, +/* BROOK_TROUT */ &cKF_ba_r_act_mus_hera_a1, +/* CARP */ &cKF_ba_r_act_mus_koi_a1, +/* KOI */ &cKF_ba_r_act_mus_nisiki_a1, +/* CATFISH */ &cKF_ba_r_act_mus_namazu_a1, +/* SMALL_BASS */ &cKF_ba_r_act_mus_bass_a1, +/* BASS */ &cKF_ba_r_act_mus_bassm_a1, +/* LARGE_BASS */ &cKF_ba_r_act_mus_bassl_a1, +/* BLUEGILL */ &cKF_ba_r_act_mus_gill_a1, +/* GIANT_CATFISH */ &cKF_ba_r_act_mus_onamazu_a1, +/* GIANT_SNAKEHEAD */ &cKF_ba_r_act_mus_raigyo_a1, +/* BARBEL_STEED */ &cKF_ba_r_act_mus_nigoi_a1, +/* DACE */ &cKF_ba_r_act_mus_ugui_a1, +/* PALE_CHUB */ &cKF_ba_r_act_mus_oikawa_a1, +/* BITTERLING */ &cKF_ba_r_act_mus_tanago_a1, +/* LOACH */ &cKF_ba_r_act_mus_dojyo_a1, +/* POND_SMELT */ &cKF_ba_r_act_mus_wakasa_a1, +/* SWEETFISH */ &cKF_ba_r_act_mus_ayu_a1, +/* CHERRY_SALMON */ &cKF_ba_r_act_mus_yamame_a1, +/* LARGE_CHAR */ &cKF_ba_r_act_mus_iwana_a1, +/* RAINBOW_TROUT */ &cKF_ba_r_act_mus_niji_a1, +/* STRINGFISH */ &cKF_ba_r_act_mus_ito_a1, +/* SALMON */ &cKF_ba_r_act_mus_sake_a1, +/* GOLDFISH */ &cKF_ba_r_act_mus_kingyo_a1, +/* PIRANHA */ &cKF_ba_r_act_mus_pirania_a1, +/* AROWANA */ &cKF_ba_r_act_mus_aroana_a1, +/* EEL */ &cKF_ba_r_act_mus_unagi_a1, +/* FRESHWATER_GOBY */ &cKF_ba_r_act_mus_donko_a1, +/* ANGELFISH */ &cKF_ba_r_act_mus_angel_a1, +/* GUPPY */ &cKF_ba_r_act_mus_gupi_a1, +/* POPEYED_GOLDFISH */ &cKF_ba_r_act_mus_demekin_a1, +/* COELACANTH */ &cKF_ba_r_act_mus_kaseki_a1, +/* CRAWFISH */ &cKF_ba_r_act_mus_zari, +/* FROG */ &cKF_ba_r_act_mus_kaeru_a1, +/* KILLIFISH */ &cKF_ba_r_act_mus_medaka_a1, +/* JELLYFISH */ NULL, +/* SEA_BASS */ &cKF_ba_r_act_mus_suzuki_a1, +/* RED_SNAPPER */ &cKF_ba_r_act_mus_tai_a1, +/* BARRED_KNIFEJAW */ &cKF_ba_r_act_mus_isidai_a1, +/* ARAPAIMA */ &cKF_ba_r_act_mus_pira_a1 +}; + +MUSEUM_FISH_INIT_DATA mfish_init_data[40] = { +/* CRUCIAN_CARP */ { 0.0100f, 3.8f, 7.5f, 74.0f, 0.400f, 0.450f, 0.98995f, 0.2f, 0.40f, -3.5f, -6.0f, 120, 120, DEG2SHORT_ANGLE(70) }, +/* BROOK_TROUT */ { 0.0100f, 4.6f, 7.0f, 78.0f, 0.400f, 0.600f, 0.98995f, 0.2f, 0.40f, -3.5f, -6.0f, 100, 160, DEG2SHORT_ANGLE(70) }, +/* CARP */ { 0.0100f, 6.0f, 10.6f, 80.0f, 0.350f, 0.300f, 0.98995f, 0.2f, 0.60f, -5.0f, -9.0f, 100, 150, DEG2SHORT_ANGLE(90) }, +/* KOI */ { 0.0100f, 6.0f, 10.7f, 85.0f, 0.350f, 0.300f, 0.98995f, 0.2f, 0.60f, -5.0f, -9.0f, 100, 120, DEG2SHORT_ANGLE(90) }, +/* CATFISH */ { 0.0110f, 6.0f, 13.6f, 63.0f, 0.050f, 0.075f, 0.995f, 0.4f, 0.85f, -2.5f, -10.0f, 600, 900, DEG2SHORT_ANGLE(60) }, +/* SMALL_BASS */ { 0.0110f, 3.0f, 8.0f, 85.0f, 0.700f, 0.500f, 0.97468f, 0.2f, 0.30f, -4.0f, -6.0f, 100, 100, DEG2SHORT_ANGLE(70) }, +/* BASS */ { 0.0110f, 4.7f, 9.8f, 92.0f, 0.700f, 0.500f, 0.97468f, 0.2f, 0.60f, -5.0f, -8.0f, 150, 110, DEG2SHORT_ANGLE(70) }, +/* LARGE_BASS */ { 0.0110f, 5.5f, 12.0f, 90.0f, 0.600f, 0.500f, 0.97468f, 0.2f, 0.80f, -5.5f, -10.0f, 160, 120, DEG2SHORT_ANGLE(70) }, +/* BLUEGILL */ { 0.0100f, 4.3f, 6.1f, 95.0f, 0.700f, 0.500f, 0.97468f, 0.2f, 0.30f, -3.5f, -5.0f, 80, 80, DEG2SHORT_ANGLE(70) }, +/* GIANT_CATFISH */ { 0.0120f, 7.6f, 19.4f, 65.0f, 0.075f, 0.150f, 0.995f, 0.4f, 0.95f, -6.0f, -18.0f, 720, 1000, DEG2SHORT_ANGLE(60) }, +/* GIANT_SNAKEHEAD */ { 0.0120f, 9.6f, 20.8f, 65.0f, 0.050f, 0.100f, 0.98488998f, 0.4f, 0.95f, -13.0f, -19.0f, 240, 480, DEG2SHORT_ANGLE(90) }, +/* BARBEL_STEED */ { 0.0100f, 4.8f, 10.5f, 102.0f, 0.350f, 0.300f, 0.98995f, 0.2f, 0.70f, -3.5f, -9.0f, 150, 120, DEG2SHORT_ANGLE(70) }, +/* DACE */ { 0.0100f, 3.0f, 10.6f, 75.0f, 0.750f, 1.500f, 0.94867998f, 0.2f, 0.60f, -4.5f, -8.0f, 480, 150, DEG2SHORT_ANGLE(45) }, +/* PALE_CHUB */ { 0.0100f, 2.5f, 7.0f, 90.0f, 0.050f, 0.475f, 0.94867998f, 0.4f, 0.30f, -3.5f, -6.0f, 240, 200, DEG2SHORT_ANGLE(50) }, +/* BITTERLING */ { 0.0100f, 3.5f, 6.0f, 76.0f, 0.350f, 0.400f, 0.98995f, 0.4f, 0.40f, -3.0f, -6.0f, 100, 120, DEG2SHORT_ANGLE(45) }, +/* LOACH */ { 0.0100f, 4.0f, 6.4f, 65.0f, 0.100f, 0.150f, 0.89442998f, 0.4f, 0.20f, -2.0f, -6.0f, 240, 240, DEG2SHORT_ANGLE(50) }, +/* POND_SMELT */ { 0.0100f, 2.0f, 6.0f, 96.0f, 0.100f, 0.450f, 0.92194998f, 0.2f, 0.10f, -3.5f, -6.0f, 300, 120, DEG2SHORT_ANGLE(50) }, +/* SWEETFISH */ { 0.0100f, 3.0f, 9.8f, 75.0f, 1.000f, 1.500f, 0.94867998f, 0.2f, 0.50f, -3.5f, -7.5f, 480, 120, DEG2SHORT_ANGLE(45) }, +/* CHERRY_SALMON */ { 0.0100f, 3.5f, 9.3f, 85.0f, 0.750f, 1.000f, 0.94867998f, 0.2f, 0.50f, -3.0f, -8.0f, 540, 120, DEG2SHORT_ANGLE(45) }, +/* LARGE_CHAR */ { 0.0100f, 2.5f, 10.6f, 80.0f, 0.750f, 1.000f, 0.94867998f, 0.2f, 0.70f, -3.0f, -9.0f, 600, 140, DEG2SHORT_ANGLE(70) }, +/* RAINBOW_TROUT */ { 0.0100f, 2.5f, 8.8f, 80.0f, 0.500f, 1.000f, 0.94867998f, 0.2f, 0.50f, -4.0f, -7.0f, 660, 160, DEG2SHORT_ANGLE(45) }, +/* STRINGFISH */ { 0.0120f, 6.1f, 19.8f, 75.0f, 0.050f, 0.100f, 0.98488998f, 0.4f, 0.95f, -14.0f, -19.0f, 360, 720, DEG2SHORT_ANGLE(90) }, +/* SALMON */ { 0.0140f, 6.2f, 15.0f, 80.0f, 0.300f, 1.000f, 0.995f, 0.1f, 0.70f, -6.0f, -10.0f, 120, 220, DEG2SHORT_ANGLE(40) }, +/* GOLDFISH */ { 0.0080f, 2.2f, 4.9f, 90.0f, 0.000f, 0.250f, 0.89442998f, 0.2f, 0.10f, -1.5f, -3.0f, 120, 240, DEG2SHORT_ANGLE(50) }, +/* PIRANHA */ { 0.0120f, 4.2f, 7.0f, 75.0f, 0.750f, 1.000f, 0.94867998f, 0.2f, 0.40f, -3.5f, -6.0f, 240, 240, DEG2SHORT_ANGLE(90) }, +/* AROWANA */ { 0.0130f, 5.0f, 13.4f, 70.0f, 0.500f, 0.750f, 0.98995f, 0.2f, 0.60f, -4.5f, -12.0f, 240, 300, DEG2SHORT_ANGLE(60) }, +/* EEL */ { 0.0095f, 3.4f, 15.0f, 55.0f, 0.200f, 0.250f, 0.98995f, 0.6f, 0.70f, -13.5f, -4.0f, 60, 1120, DEG2SHORT_ANGLE(70) }, +/* FRESHWATER_GOBY */ { 0.0120f, 3.3f, 8.0f, 75.0f, 0.300f, 0.600f, 0.97468f, 0.2f, 0.20f, -2.0f, -7.0f, 240, 240, DEG2SHORT_ANGLE(70) }, +/* ANGELFISH */ { 0.0100f, 5.1f, 6.0f, 85.0f, 0.200f, 0.200f, 0.94867998f, 0.5f, 0.20f, -3.0f, -4.0f, 120, 360, DEG2SHORT_ANGLE(50) }, +/* GUPPY */ { 0.0080f, 2.7f, 4.9f, 96.0f, 0.200f, 0.400f, 0.89442998f, 0.5f, 0.10f, -3.0f, -3.0f, 120, 360, DEG2SHORT_ANGLE(30) }, +/* POPEYED_GOLDFISH */ { 0.0080f, 2.5f, 4.9f, 102.0f, 0.000f, 0.250f, 0.89442998f, 0.2f, 0.10f, -2.0f, -3.0f, 120, 240, DEG2SHORT_ANGLE(50) }, +/* COELACANTH */ { 0.0160f, 7.1f, 22.8f, 65.0f, 0.100f, 0.300f, 0.98995f, 0.4f, 0.85f, -2.5f, -20.5f, 300, 420, DEG2SHORT_ANGLE(20) }, +/* CRAWFISH */ { 0.0165f, 5.8f, 10.4f, 70.0f, -0.050f, 0.150f, 0.94867998f, 0.2f, 0.40f, 5.0f, -14.0f, 120, 180, DEG2SHORT_ANGLE(70) }, +/* FROG */ { 0.0100f, 1.0f, 1.0f, 70.0f, 0.500f, 0.500f, 0.94867998f, 0.2f, 0.40f, -1.0f, -9.0f, 120, 180, DEG2SHORT_ANGLE(70) }, +/* KILLIFISH */ { 0.0080f, 1.5f, 3.9f, 102.0f, 0.150f, 0.400f, 0.89442998f, 0.1f, 0.40f, -1.0f, -3.0f, 120, 360, DEG2SHORT_ANGLE(30) }, +/* JELLYFISH */ { 0.0100f, 4.0f, 5.5f, 70.0f, 0.200f, 0.150f, 0.94867998f, 0.1f, 0.40f, -1.0f, -3.0f, 60, 120, DEG2SHORT_ANGLE(70) }, +/* SEA_BASS */ { 0.0100f, 4.0f, 9.5f, 80.0f, 0.300f, 0.800f, 0.995f, 0.1f, 0.75f, -3.5f, -5.0f, 160, 200, DEG2SHORT_ANGLE(25) }, +/* RED_SNAPPER */ { 0.0100f, 6.0f, 11.4f, 90.0f, 0.250f, 0.350f, 0.995f, 0.2f, 0.45f, -6.0f, -6.5f, 120, 240, DEG2SHORT_ANGLE(30) }, +/* BARRED_KNIFEJAW */ { 0.0100f, 5.0f, 10.9f, 95.0f, 0.250f, 0.450f, 0.995f, 0.2f, 0.40f, -5.0f, -6.0f, 120, 240, DEG2SHORT_ANGLE(30) }, +/* ARAPAIMA */ { 0.0120f, 9.3f, 31.5f, 75.0f, 0.050f, 0.100f, 0.97468f, 0.2f, 0.90f, -14.0f, -31.0f, 240, 480, DEG2SHORT_ANGLE(90) } +}; + +s16 mfish_group_tbl[40] = { +/* CRUCIAN_CARP */ 0, +/* BROOK_TROUT */ 0, +/* CARP */ 0, +/* KOI */ 0, +/* CATFISH */ 1, +/* SMALL_BASS */ 1, +/* BASS */ 1, +/* LARGE_BASS */ 1, +/* BLUEGILL */ 1, +/* GIANT_CATFISH */ 1, +/* GIANT_SNAKEHEAD */ 3, +/* BARBEL_STEED */ 0, +/* DACE */ 2, +/* PALE_CHUB */ 2, +/* BITTERLING */ 0, +/* LOACH */ 1, +/* POND_SMELT */ 2, +/* SWEETFISH */ 2, +/* CHERRY_SALMON */ 2, +/* LARGE_CHAR */ 2, +/* RAINBOW_TROUT */ 2, +/* STRINGFISH */ 2, +/* SALMON */ 4, +/* GOLDFISH */ 0, +/* PIRANHA */ 3, +/* AROWANA */ 3, +/* EEL */ 0, +/* FRESHWATER_GOBY */ 1, +/* ANGELFISH */ 3, +/* GUPPY */ 3, +/* POPEYED_GOLDFISH */ 0, +/* COELACANTH */ 4, +/* CRAWFISH */ 2, +/* FROG */ 1, +/* KILLIFISH */ 0, +/* JELLYFISH */ 4, +/* SEA_BASS */ 4, +/* RED_SNAPPER */ 4, +/* BARRED_KNIFEJAW */ 4, +/* ARAPAIMA */ 3 +}; + +PRIV_FISH_CONSTRUCTOR mfish_ct[40] = { +/* CRUCIAN_CARP */ mfish_afish_ct, +/* BROOK_TROUT */ mfish_afish_ct, +/* CARP */ mfish_koi_ct, +/* KOI */ mfish_koi_ct, +/* CATFISH */ mfish_namazu_ct, +/* SMALL_BASS */ mfish_bass_ct, +/* BASS */ mfish_bass_ct, +/* LARGE_BASS */ mfish_bass_ct, +/* BLUEGILL */ mfish_bass_ct, +/* GIANT_CATFISH */ mfish_namazu_ct, +/* GIANT_SNAKEHEAD */ mfish_big_fish_ct, +/* BARBEL_STEED */ mfish_koi_ct, +/* DACE */ mfish_ani_base_ct, +/* PALE_CHUB */ mfish_small_fish_ct, +/* BITTERLING */ mfish_afish_ct, +/* LOACH */ mfish_dojou_ct, +/* POND_SMELT */ mfish_small_fish_ct, +/* SWEETFISH */ mfish_ani_base_ct, +/* CHERRY_SALMON */ mfish_ani_base_ct, +/* LARGE_CHAR */ mfish_ani_base_ct, +/* RAINBOW_TROUT */ mfish_ani_base_ct, +/* STRINGFISH */ mfish_ito_ct, +/* SALMON */ mfish_seafish_ct, +/* GOLDFISH */ mfish_kingyo_ct, +/* PIRANHA */ mfish_ani_base_ct, +/* AROWANA */ mfish_aroana_ct, +/* EEL */ mfish_unagi_ct, +/* FRESHWATER_GOBY */ mfish_donko_ct, +/* ANGELFISH */ mfish_small_fish_ct, +/* GUPPY */ mfish_gupi_ct, +/* POPEYED_GOLDFISH */ mfish_kingyo_ct, +/* COELACANTH */ mfish_kaseki_ct, +/* CRAWFISH */ mfish_zarigani_ct, +/* FROG */ mfish_kaeru_ct, +/* KILLIFISH */ mfish_medaka_ct, +/* JELLYFISH */ mfish_kurage_ct, +/* SEA_BASS */ mfish_seafish_ct, +/* RED_SNAPPER */ mfish_tai_ct, +/* BARRED_KNIFEJAW */ mfish_tai_ct, +/* ARAPAIMA */ mfish_big_fish_ct +}; + +PRIV_FISH_MOVE mfish_mv[40] = { +/* CRUCIAN_CARP */ mfish_afish_mv, +/* BROOK_TROUT */ mfish_afish_mv, +/* CARP */ mfish_koi_mv, +/* KOI */ mfish_koi_mv, +/* CATFISH */ mfish_namazu_mv, +/* SMALL_BASS */ mfish_bass_mv, +/* BASS */ mfish_bass_mv, +/* LARGE_BASS */ mfish_bass_mv, +/* BLUEGILL */ mfish_bass_mv, +/* GIANT_CATFISH */ mfish_namazu_mv, +/* GIANT_SNAKEHEAD */ mfish_big_fish_mv, +/* BARBEL_STEED */ mfish_koi_mv, +/* DACE */ mfish_ani_base_mv, +/* PALE_CHUB */ mfish_small_fish_mv, +/* BITTERLING */ mfish_afish_mv, +/* LOACH */ mfish_dojou_mv, +/* POND_SMELT */ mfish_small_fish_mv, +/* SWEETFISH */ mfish_ani_base_mv, +/* CHERRY_SALMON */ mfish_ani_base_mv, +/* LARGE_CHAR */ mfish_ani_base_mv, +/* RAINBOW_TROUT */ mfish_ani_base_mv, +/* STRINGFISH */ mfish_ito_mv, +/* SALMON */ mfish_seafish_mv, +/* GOLDFISH */ mfish_kingyo_mv, +/* PIRANHA */ mfish_ani_base_mv, +/* AROWANA */ mfish_aroana_mv, +/* EEL */ mfish_unagi_mv, +/* FRESHWATER_GOBY */ mfish_donko_mv, +/* ANGELFISH */ mfish_small_fish_mv, +/* GUPPY */ mfish_gupi_mv, +/* POPEYED_GOLDFISH */ mfish_kingyo_mv, +/* COELACANTH */ mfish_kaseki_mv, +/* CRAWFISH */ mfish_zarigani_mv, +/* FROG */ mfish_kaeru_mv, +/* KILLIFISH */ mfish_medaka_mv, +/* JELLYFISH */ mfish_kurage_mv, +/* SEA_BASS */ mfish_seafish_mv, +/* RED_SNAPPER */ mfish_tai_mv, +/* BARRED_KNIFEJAW */ mfish_tai_mv, +/* ARAPAIMA */ mfish_big_fish_mv +}; + + +PRIV_FISH_DRAW mfish_dw[40] = { +/* CRUCIAN_CARP */ mfish_afish_dw, +/* BROOK_TROUT */ mfish_afish_dw, +/* CARP */ mfish_koi_dw, +/* KOI */ mfish_koi_dw, +/* CATFISH */ mfish_namazu_dw, +/* SMALL_BASS */ mfish_bass_dw, +/* BASS */ mfish_bass_dw, +/* LARGE_BASS */ mfish_bass_dw, +/* BLUEGILL */ mfish_bass_dw, +/* GIANT_CATFISH */ mfish_namazu_dw, +/* GIANT_SNAKEHEAD */ mfish_big_fish_dw, +/* BARBEL_STEED */ mfish_koi_dw, +/* DACE */ mfish_ani_base_dw, +/* PALE_CHUB */ mfish_small_fish_dw, +/* BITTERLING */ mfish_afish_dw, +/* LOACH */ mfish_dojou_dw, +/* POND_SMELT */ mfish_small_fish_dw, +/* SWEETFISH */ mfish_ani_base_dw, +/* CHERRY_SALMON */ mfish_ani_base_dw, +/* LARGE_CHAR */ mfish_ani_base_dw, +/* RAINBOW_TROUT */ mfish_ani_base_dw, +/* STRINGFISH */ mfish_ito_dw, +/* SALMON */ mfish_seafish_dw, +/* GOLDFISH */ mfish_kingyo_dw, +/* PIRANHA */ mfish_ani_base_dw, +/* AROWANA */ mfish_aroana_dw, +/* EEL */ mfish_unagi_dw, +/* FRESHWATER_GOBY */ mfish_donko_dw, +/* ANGELFISH */ mfish_small_fish_dw, +/* GUPPY */ mfish_gupi_dw, +/* POPEYED_GOLDFISH */ mfish_kingyo_dw, +/* COELACANTH */ mfish_kaseki_dw, +/* CRAWFISH */ mfish_zarigani_dw, +/* FROG */ mfish_kaeru_dw, +/* KILLIFISH */ mfish_medaka_dw, +/* JELLYFISH */ mfish_kurage_dw, +/* SEA_BASS */ mfish_seafish_dw, +/* RED_SNAPPER */ mfish_tai_dw, +/* BARRED_KNIFEJAW */ mfish_tai_dw, +/* 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), +}; + +cKF_Skeleton_R_c* kusa_model[14] = { + &cKF_bs_r_obj_museum5_kusa1, + &cKF_bs_r_obj_museum5_kusa1, + &cKF_bs_r_obj_museum5_kusa1, + &cKF_bs_r_obj_museum5_kusa1, + &cKF_bs_r_obj_museum5_kusa1, + &cKF_bs_r_obj_museum5_kusa2, + &cKF_bs_r_obj_museum5_kusa2, + &cKF_bs_r_obj_museum5_kusa2, + &cKF_bs_r_obj_museum5_kusa2, + &cKF_bs_r_obj_museum5_kusa2, + &cKF_bs_r_obj_museum5_kusa3, + &cKF_bs_r_obj_museum5_kusa3, + &cKF_bs_r_obj_museum5_kusa3, + &cKF_bs_r_obj_museum5_kusa3 +}; +cKF_Animation_R_c* kusa_anime[14]= { + &cKF_ba_r_obj_museum5_kusa1, + &cKF_ba_r_obj_museum5_kusa1, + &cKF_ba_r_obj_museum5_kusa1, + &cKF_ba_r_obj_museum5_kusa1, + &cKF_ba_r_obj_museum5_kusa1, + &cKF_ba_r_obj_museum5_kusa2, + &cKF_ba_r_obj_museum5_kusa2, + &cKF_ba_r_obj_museum5_kusa2, + &cKF_ba_r_obj_museum5_kusa2, + &cKF_ba_r_obj_museum5_kusa2, + &cKF_ba_r_obj_museum5_kusa3, + &cKF_ba_r_obj_museum5_kusa3, + &cKF_ba_r_obj_museum5_kusa3, + &cKF_ba_r_obj_museum5_kusa3 +}; + +float kusa_start_frame[14] = { + 25.0f, 0.0f, 25.0f, 0.0f, 50.0f, 0.0f, 20.0f, 60.0f, 80.0f, 0.0f, 0.0f, 25.0f, 0.0f, 75.0f +}; + +// clang-format on + +void Museum_Fish_Prv_data_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, int fishNum, int r6) { + actor->_59C = fishNum; + actor->init_data = mfish_init_data[fishNum]; + actor->_630 = mfish_group_tbl[fishNum]; + + if (actor->_630 >= 0) { + actor->_5A0 = suisou_pos[actor->_630]; + } else { + actor->_5A0 = ZeroVec; + } + + actor->_5A0.y = mfish_init_data[fishNum]._0C + fqrand2() * 10.0f; + if (r6 == 1) { + actor->_5A0.x += fqrand2() * 90.0f; + actor->_5A0.z += fqrand2() * 90.0f; + } + actor->_34 = &mfish_normal_process; + mfish_ct[fishNum](actor, game); } -void Museum_Fish_Actor_ct(ACTOR* actor, GAME* game) { + +void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; + int i; + MUSEUM_FISH_PRIVATE_DATA* prv; + MF_Control_Actor = actor; + actor->_14db6 = 0x1e; + + 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->prvFish2[i]._54C = kusa_model[i]; + cKF_SkeletonInfo_R_ct(&actor->prvFish2[i]._00, kusa_model[i], kusa_anime[i], &actor->prvFish2[i]._4F0, + &actor->prvFish2[i]._514); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->prvFish2[i]._00, kusa_anime[i], NULL, + kusa_group_tbl[i] == 2 ? 1.5f : 0.5f, 0.0f); + actor->prvFish2[i]._00.frame_control.current_frame = kusa_start_frame[i]; + actor->_101f0 = qrand(); + actor->_101f4 = qrand(); + } + + if (mMmd_FishInfo(0x21)) { + actor->prvFish[0x21]._590 = &actor->_14788; + } else { + mfish_hasu_ct(&actor->prvFish[0x21], gamex); + } + + prv = actor->prvFish; + for (i = 0; i < 40; i++, prv++) { + prv->_62E &= ~1; + if (mMmd_FishInfo(i)) { + prv->_584 = mfish_model_tbl[i]; + prv->_588 = mfish_anime_init_tbl[i]; + prv->_62E |= 1; + Museum_Fish_Prv_data_init(prv, gamex, i, 1); + } + } + + for (i = 0; i < 20; i++) { + actor->_14d50[i] = 40.0f + 80.0f * fqrand(); + actor->_14d78[i] = 2.0f + 3.0f * fqrand(); + } } + void Museum_Fish_Actor_dt(ACTOR* actor, GAME* game) { mfish_point_light_dt(actor, game); } + int Museum_Fish_GetMsgNo(ACTOR* actorx) { MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; - static u8 item_name[20]; + static u8 item_name[mIN_ITEM_NAME_LEN]; int itemArticle; mMsg_Window_c* msg; - // who donated the fish? - int playerNumber = actor->unk_14d28[actor->unk_14d24].unk2; - mActor_name_t actorName = mNT_FishIdx2FishItemNo(actor->unk_14d28[actor->unk_14d24].unk0); - mIN_copy_name_str(item_name, actorName); - mMsg_Set_item_str_art(mMsg_Get_base_window_p(), 0, item_name, 0x10, mIN_get_item_article(actorName)); + int fishInfo = actor->fishDisplayMsgInfo[actor->fishDisplayMsgIter].fishInfo; + mActor_name_t fishName = mNT_FishIdx2FishItemNo(actor->fishDisplayMsgInfo[actor->fishDisplayMsgIter].fishName); + mIN_copy_name_str(item_name, fishName); + mMsg_Set_item_str_art(mMsg_Get_base_window_p(), 0, item_name, 0x10, mIN_get_item_article(fishName)); - if (playerNumber >= 1 && playerNumber <= 4) { + if (fishInfo >= 1 && fishInfo <= 4) { mMsg_Set_free_str(mMsg_Get_base_window_p(), 0, - common_data.save.save.private_data[playerNumber - 1].player_ID.player_name, 8); + common_data.save.save.private_data[fishInfo - 1].player_ID.player_name, 8); } - if (actor->unk_14d24 < actor->unk_14d20 - 1) { - if (playerNumber >= 1 && playerNumber <= 4) { + if (actor->fishDisplayMsgIter < actor->numFishDisplayed - 1) { + if (fishInfo >= 1 && fishInfo <= 4) { return 0x2fa2; } else { return 0x2fa3; } } - if (playerNumber >= 1 && playerNumber <= 4) { + if (fishInfo >= 1 && fishInfo <= 4) { return 0x2f9f; } else { return 0x2fa0; } } -void Museum_Fish_Check_Talk_Distance() { + +BOOL Museum_Fish_Check_Talk_Distance(GAME* gamex, int index) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + s16 subAngle; + xyz_t pos; + PLAYER_ACTOR* actor; + + // fish tank locations? + static xyz_t kanban_pos[5] = { { 260.0f, 40.0f, 300.0f }, + { 460.0f, 40.0f, 300.0f }, + { 260.0f, 40.0f, 540.0f }, + { 460.0f, 40.0f, 540.0f }, + { 500.0f, 40.0f, 60.0f } }; + + actor = get_player_actor_withoutCheck(game); + subAngle = DEG2SHORT_ANGLE(-180) + actor->actor_class.world.angle.y; + xyz_t_sub(&actor->actor_class.world.position, &kanban_pos[index], &pos); + + if (ABS(pos.x) < 20.0f && ABS(pos.z) < 20.0f && ABS(subAngle) < 0x3000) { + return TRUE; + } + return FALSE; } -void Museum_Fish_Set_MsgFishInfo() { + +void Museum_Fish_Set_MsgFishInfo(ACTOR* actorx, int param2) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; + int i; + // defines how many fish are in each grouping of fish names + static int group_max_num[5] = { 10, 9, 9, 6, 6 }; + static int group_A_fish_name[10] = { 0, 1, 2, 3, 11, 14, 26, 23, 30, 34 }; + static int group_B_fish_name[9] = { 4, 9, 15, 8, 5, 6, 7, 27, 33 }; + static int group_C_fish_name[9] = { 12, 13, 16, 17, 18, 20, 19, 21, 32 }; + static int group_D_fish_name[6] = { 10, 29, 28, 24, 25, 39 }; + static int group_E_fish_name[6] = { 22, 31, 35, 36, 37, 38 }; + + static int* group_fish_name[5] = { group_A_fish_name, group_B_fish_name, group_C_fish_name, group_D_fish_name, + group_E_fish_name }; + + actor->numFishDisplayed = 0; + actor->fishDisplayMsgIter = 0; + for (i = 0; i < group_max_num[param2]; i++) { + s16 fishName = group_fish_name[param2][i]; + s16 fishInfo = mMmd_FishInfo(fishName); // is this fish on display? + if (fishInfo != 0) { + actor->fishDisplayMsgInfo[actor->numFishDisplayed].fishName = fishName; // add info to list + actor->fishDisplayMsgInfo[actor->numFishDisplayed].fishInfo = fishInfo; + actor->numFishDisplayed++; // incrememnt counter of fish on display + } + } + + return; } + void Museum_Fish_set_talk_info(ACTOR* actorx) { MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; static rgba_t window_color = { 255, 255, 0xcd, 255 }; int r3; - if (actor->unk_14d20 > 0) { // maybe related to if there are fish in the tank + if (actor->numFishDisplayed > 0) { // maybe related to if there are fish in the tank r3 = Museum_Fish_GetMsgNo(actorx); - actor->unk_14d24 += 1; // maybe iterating through the fish donation record, given which fish are donated? + actor->fishDisplayMsgIter++; // maybe iterating through the fish donation record, given which fish are donated? } else { r3 = 0x2fa1; } @@ -86,49 +836,1525 @@ void Museum_Fish_set_talk_info(ACTOR* actorx) { mDemo_Set_camera(CAMERA2_PROCESS_NORMAL); mDemo_Set_use_zoom_sound(TRUE); } + void Museum_Fish_Talk_process() { + // NOT BAD + return; } -void Museum_Fish_Actor_move(ACTOR* actor, GAME* game) { + +void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { + s16 old_14db4; + int i; + f32 v; + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; + GAME_PLAY* play = (GAME_PLAY*)game; + MUSEUM_FISH_PRIVATE_DATA* prv; + + mfish_point_light_mv(actorx, game); + old_14db4 = actor->_14db4; + mfish_get_player_area(actor, game); + + if (actor->_14db4 != old_14db4) { + PLAYER_ACTOR* player; + xyz_t p; + prv = actor->prvFish; + player = get_player_actor_withoutCheck(play); + p = player->actor_class.world.position; + + if (actor->_14db4 == 3) { + actor->prvFish[0x17]._626 = 0; + actor->prvFish[0x1e]._626 = 0; + actor->prvFish[0x18]._626 = 0; + } else if (actor->_14db4 == 0) { + actor->prvFish[2]._626 = 20; + actor->prvFish[3]._626 = 20; + } + + for (i = 0; i < 40; i++, prv++) { + f32 v = search_position_distanceXZ(&p, &prv->_5A0); + if (actor->_14db4 == prv->_630 && v < 60.0f) { + prv->_626 = fqrand() * 60.0f; + } + } + } + + for (i = 0; i < 0xe; i++) { + cKF_SkeletonInfo_R_play(&actor->prvFish2[i]._00); + if (kusa_group_tbl[i] == 2) { + add_calc2(&actor->prvFish2[i]._540, -2.25f, 1.75f, 1.75f); + add_calc_short_angle2(&actor->prvFish2[i]._53A, DEG2SHORT_ANGLE(3.5f), + 1.0f - sqrtf(1.0f - (1.0f - sqrtf(0.9f))), 20, 4); + } else { + actor->prvFish2[i]._540 *= 0.9f; + add_calc_short_angle2(&actor->prvFish2[i]._53A, DEG2SHORT_ANGLE(3.5f), + 1.0f - sqrtf(1.0f - (1.0f - sqrtf(0.9f))), 20, 4); + } + actor->prvFish2[i]._548 *= 0.98f; + + actor->prvFish2[i]._538 += actor->prvFish2[i]._53A; + actor->prvFish2[i]._53C += actor->prvFish2[i]._53A >> 1; + + add_calc_short_angle2(&actor->prvFish2[i]._53A, DEG2SHORT_ANGLE(0), 1.0f - sqrtf(1.0f - (1.0f - sqrtf(0.9f))), + 20, 4); + } + + Museum_Fish_Kusa_Check(actor, game); + Museum_Fish_Object_Check(actor, game); + + for (i = 0; i < 20; i++) { + actor->_14d50[i]--; + if (actor->_14d50[i] < 0) { + common_data.clip.effect_clip->effect_make_proc(0x6e, suisou_awa_pos[i], 2, 0, game, -1, suisou_awa_group[i], + 0); + if (actor->_14d78[i] > 0) { + actor->_14d78[i]--; + + actor->_14d50[i] = fqrand() * 8 + 2; + } else { + actor->_14d50[i] = fqrand() * 160 + 80; + actor->_14d78[i] = fqrand() * 3 + 2; + } + } + } + + Museum_Fish_Talk_process(actor, game); + prv = actor->prvFish; + for (i = 0; i < 40; i++, prv++) { + if (prv->_62E & 1) { + mfish_mv[i](prv, game); + } + } + + if ((actor->prvFish[0x21]._62E & 1) == 0) { + mfish_hasu_mv(&actor->prvFish[0x21], game); + } + + for (i = 0; i < 5; i++) { + if (i == 2) { + actor->_14d78[i] += (s16)DEG2SHORT_ANGLE2((float)GETREG(TAKREG, 20) * 0.1f + 0.5f + fqrand()); + } else { + actor->_14d78[i] += 8; + } + } } -void Museum_Fish_Suisou_draw(ACTOR* actor, GAME* game) { + +extern Gfx obj_suisou1_model[]; +extern Gfx obj_suisou1_modelT[]; + +extern Gfx obj_museum5_model[]; +extern Gfx obj_museum5_modelT[]; + +void Museum_Fish_Suisou_draw(MUSEUM_FISH_ACTOR* actor, GAME* game, int r5) { + GAME_PLAY* play = (GAME_PLAY*)game; + GRAPH* graph = play->game.graph; + if (r5 < 4) { + xyz_t* p = &suisou_pos[r5]; + if (mfish_cull_check(game, &suisou_pos[r5], 350.0f, 20.0f, 650.0f)) { + Matrix_translate(suisou_pos[r5].x, 0, suisou_pos[r5].z, 0); + Matrix_scale(0.1f, 0.1f, 0.1f, 1); + + OPEN_DISP(graph); + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(play->game.graph), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + Setpos_HiliteReflect_xlu_init(&suisou_pos[r5], play); + + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_suisou1_model); + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_suisou1_modelT); + + CLOSE_DISP(graph); + + if ((actor->prvFish[0x21]._62E & 1) == 0) { + mfish_hasu_dw(&actor->prvFish[0x21], game); + } + } + } else if (mfish_cull_check(game, &suisou_pos[4], 215.0f, 25.0f, 0.0f)) { + Matrix_scale(0.0625f, 0.0625f, 0.0625f, 0); + OPEN_DISP(graph); + + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(play->game.graph), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + Setpos_HiliteReflect_xlu_init(&suisou_pos[r5], play); + + gDPSetTextureAdjustMode(NEXT_POLY_OPA_DISP, G_TA_DOLPHIN); + gDPSetTextureAdjustMode(NEXT_POLY_XLU_DISP, G_TA_DOLPHIN); + gSPDisplayList(NEXT_POLY_OPA_DISP, obj_museum5_model); + gSPDisplayList(NEXT_POLY_XLU_DISP, obj_museum5_modelT); + gDPSetTextureAdjustMode(NEXT_POLY_OPA_DISP, G_TA_N64); + gDPSetTextureAdjustMode(NEXT_POLY_XLU_DISP, G_TA_N64); + CLOSE_DISP(graph); + } } + void kusa_before_disp() { + return; } + void Museum_Fish_Kusa_Draw(ACTOR* actor, GAME* game) { + return; } + void Museum_Fish_Actor_draw(ACTOR* actor, GAME* game) { + return; } -void mfish_cull_check() { + +BOOL mfish_cull_check(GAME* game, xyz_t* worldPos, f32 x, f32 y, f32 _y) { + xyz_t screenPos; + Game_play_Projection_Trans((GAME_PLAY*)game, worldPos, &screenPos); + if ((-x < screenPos.x) && (screenPos.x < x + 320) && (-y < screenPos.y) && (screenPos.y < _y + 240)) { + return TRUE; + } + return FALSE; } + void mfish_point_ligh_pos_get() { + return; } -void mfish_point_light_ct(ACTOR* actor, GAME* game) { + +void mfish_point_light_ct(ACTOR* actorx, GAME* gamex) { + MUSEUM_FISH_ACTOR* actor; + GAME_PLAY* game; + game = (GAME_PLAY*)gamex; + actor = (MUSEUM_FISH_ACTOR*)actorx; + mfish_point_ligh_pos_get(actor, game, 0); + mfish_point_ligh_pos_get(actor, game, 1); + actor->_14db8 = mEnv_ReservePointLight(game, &actor->_14d08, 0, 0x96, 0xff, (u8)actor->_14dbc); + actor->_14dba = mEnv_ReservePointLight(game, &actor->_14d14, 0, 0x96, 0xff, (u8)actor->_14dbe); + actor->_14dc0 = 0; } void mfish_point_light_dt(ACTOR* actorx, GAME* game) { MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; - if (actor->unk_14db8 != -1) { - mEnv_CancelReservedPointLight(actor->unk_14db8, (GAME_PLAY*)game); + if (actor->_14db8 != -1) { + mEnv_CancelReservedPointLight(actor->_14db8, (GAME_PLAY*)game); } - if (actor->unk_14dba != -1) { - mEnv_CancelReservedPointLight(actor->unk_14dba, (GAME_PLAY*)game); + if (actor->_14dba != -1) { + mEnv_CancelReservedPointLight(actor->_14dba, (GAME_PLAY*)game); } } + void mfish_point_light_mv(ACTOR* actor, GAME* game) { + return; } void mfish_normal_light_set(ACTOR* actor, GAME* _game) { LightsN* lights; GAME_PLAY* game = (GAME_PLAY*)_game; - // TODO: figure out where these are actually coming from - xyz_t r5; - r5.x = 320; - r5.y = 0; - r5.z = 240; + + xyz_t lightPos; + lightPos.x = 320; + lightPos.y = 0; + lightPos.z = 240; lights = Global_light_read(&game->global_light, game->game.graph); - LightsN_list_check(lights, game->global_light.list, &r5); + LightsN_list_check(lights, game->global_light.list, &lightPos); LightsN_disp(lights, game->game.graph); } + +f32 Rnd_EX_f(f32 v) { + f32 rand1 = 2 * fqrand2(); + f32 rand2 = fqrand(); + if (rand2 > (rand1 * rand1)) { + if (rand1 > 0) { + rand1 = sqrtf(rand2); + } else { + rand1 = -sqrtf(rand2); + } + } + rand1 = (1.0f + rand1) * 0.5f; + return v * rand1; +} + +f32 Rnd_EX_fx(f32 v1) { + f32 rand1 = 2 * fqrand2(); + f32 rand2 = fqrand(); + if (rand2 > (rand1 * rand1)) { + if (rand1 > 0) { + rand1 = sqrtf(rand2); + } else { + rand1 = -sqrtf(rand2); + } + } + rand1 = rand1 / 2; + return v1 * rand1; +} + +void mfish_base_FishMove() { + return; +} + +int mfish_PosWallCheck(MUSEUM_FISH_PRIVATE_DATA* priv, xyz_t* pos) { + u32 flag = 0; + xyz_t p = suisou_pos[priv->_630]; + f32 a, b, c, d; + + if (priv->_630 < 4) { + a = priv->init_data._28 + 45; + b = priv->init_data._28 + 45; + c = priv->init_data._28 + 45; + d = priv->init_data._28 + 45; + } else { + a = priv->init_data._28 + 180; + b = priv->init_data._28 + 180; + c = priv->init_data._28 + 5; + d = priv->init_data._28 + 45; + } + + if (pos->x > p.x + a) { + flag |= 4; + } else if (pos->x < p.x - b) { + flag |= 2; + } + + if (pos->z > p.z + c) { + flag |= 8; + } else if (pos->z < p.z - d) { + flag |= 0x10; + } + + return flag; +} + +void mfish_WallCheck() { + return; +} + +s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv) { + s16 v = priv->_60C.z; + if (v > 0 || (priv->_630 == 2 && fqrand() < 0.8f)) { + if (v > DEG2SHORT_ANGLE(90)) { + v = DEG2SHORT_ANGLE(90) + DEG2SHORT_ANGLE(45 * fqrand()); + } else { + v = DEG2SHORT_ANGLE(90) - DEG2SHORT_ANGLE(45 * fqrand()); + } + } else { + if (v > DEG2SHORT_ANGLE(-90)) { + v = DEG2SHORT_ANGLE(-90) + DEG2SHORT_ANGLE(45 * fqrand()); + } else { + v = DEG2SHORT_ANGLE(-90) - DEG2SHORT_ANGLE(45 * fqrand()); + } + } + return v; +} + +void mfish_dummy_process_init() { + mfish_get_hide_camera_angle(0); +} + +void mfish_dummy_process() { + return; +} + +void mfish_normal_process_init() { + return; +} + +void mfish_normal_process() { + return; +} + +void mfish_turn_process_init() { + return; +} + +void mfish_turn_process() { + return; +} + +void mfish_peck_process_init() { + return; +} + +void mfish_peck_process() { + return; +} + +void mfish_ground_peck_process_init() { + return; +} + +void mfish_ground_peck_process() { + return; +} + +void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + YET_SKELETON* huh = &actor->_38; + // looks like it loads from 0x38, which i labeled as the skeleton, + // but then it adds like 0x514 to it, so this must be huge + + // cKF_SkeletonInfo_R_ct(&huh->_00, huh->_00); //TODO + return; +} + +void mfish_onefish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + cKF_SkeletonInfo_R_play(&actor->_38._00); + return; +} + +int mfish_before_disp(GAME* r3, cKF_SkeletonInfo_R_c* r4, int r5, Gfx** r6, u8* r7, void* arg, s_xyz* r9, xyz_t* r10) { + + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (r5 == 2) { + int v, t; + if (actor->_630 != 4) { + v = 2; + } else if (actor->init_data._20 > 0.7f) { + v = 1; + } else if (actor->init_data._20 > 0.5f) { + v = 2; + } else { + v = 3; + } + t = r9->y - (actor->_61C * v); + r9->y = MY_CLAMP(t, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); + t = r9->x - (actor->_61C >> 1); + r9->x = MY_CLAMP(t, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25)); + } + return 1; +} + +void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + YET_SKELETON* skele; + Mtx* mtx; + GAME_PLAY* play; + GRAPH* graph; + + play = (GAME_PLAY*)gamex; + skele = &actor->_38; + + if (play->game.frame_counter % 2 != 0) { + mtx = &skele->_70; + } else { + mtx = &skele->_2b0; + } + + graph = play->game.graph; + + Matrix_translate(actor->_5A0.x, actor->_5A0.y + actor->_5B0, actor->_5A0.z, 0); + Matrix_RotateY(actor->_60C.z, 1); + + Matrix_translate(0, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1); + Matrix_RotateX(actor->_60C.x, 1); + Matrix_RotateZ(MY_CLAMP(-(actor->_61C >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); + Matrix_translate(0, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + + OPEN_DISP(graph); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + CLOSE_DISP(graph); + + cKF_Si3_draw_R_SV(&play->game, &skele->_00, mtx, &mfish_before_disp, 0, actor); +} + +void mfish_ani_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void Museum_Fish_BigFishObjCheck() { + return; +} + +void Museum_Fish_ObjBGCheck() { + return; +} + +void Museum_Fish_DonkoBGCheck() { + return; +} + +void Museum_Fish_objchk_pos_set() { + return; +} + +void Museum_Fish_BGCheck() { + return; +} + +void Museum_Fish_Kusa_Check() { + static int kusa_group_tbl[] = { 0, 2, 1, 3, 3, 4, 4, 4, 4, 4, 0, 2, 1, 3 }; +} + +void Museum_Fish_Object_Check() { + return; +} + +void mfish_body_wind_anime_play() { + return; +} + +void mfish_get_player_angle() { + return; +} + +void mfish_peck_check() { + return; +} + +void mfish_peck_wall_check() { + return; +} + +void mfish_ground_peck_before_check() { + return; +} + +void mfish_get_player_area() { + return; +} + +void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + return; +} + +void mfish_get_escape_angle() { + return; +} + +void mfish_move_smooth() { + return; +} + +void mfish_hamon_make() { + return; +} + +void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_afish_dummy_process_init() { + return; +} + +void mfish_afish_dummy_process() { + return; +} + +void mfish_afish_normal_process_init() { + return; +} + +void mfish_afish_normal_process() { + return; +} + +void mfish_afish_turn_process_init() { + return; +} + +void mfish_afish_turn_process() { + return; +} + +void mfish_afish_base_FishMove() { + return; +} + +void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_afish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_afish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_aroana_dummy_process_init() { + return; +} + +void mfish_aroana_dummy_process() { + return; +} + +void mfish_aroana_normal_process_init() { + return; +} + +void mfish_aroana_normal_process() { + return; +} + +void mfish_aroana_turn_process_init() { + return; +} + +void mfish_aroana_turn_process() { + return; +} + +void mfish_aroana_long_move_process_init() { + return; +} + +void mfish_aroana_long_move_process() { + return; +} + +void mfish_aroana_base_FishMove() { + return; +} + +void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_aroana_before_disp() { + return; +} + +void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_koi_tail_anim_set() { + return; +} + +void mfish_koi_move_smooth() { + return; +} + +void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_koi_dummy_process_init() { + return; +} + +void mfish_koi_dummy_process() { + return; +} + +void mfish_koi_normal_process_init() { + return; +} + +void mfish_koi_normal_process() { + return; +} + +void mfish_koi_turn_process_init() { + return; +} + +void mfish_koi_turn_process() { + return; +} + +void mfish_koi_peck_process_init() { + return; +} + +void mfish_koi_peck_process() { + return; +} + +void mfish_koi_long_move_process_init() { + return; +} + +void mfish_koi_long_move_process() { + return; +} + +void mfish_koi_base_FishMove() { + return; +} + +void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_koi_before_disp() { + return; +} + +void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kaseki_normal_init() { + return; +} + +void mfish_kaseki_normal() { + return; +} + +void mfish_kaseki_move_wall_smooth() { + return; +} + +void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kaseki_before_disp() { + return; +} + +void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_bass_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) { + if (r4 == 0) { + actor->_640 = 0xf; + actor->_5B4 = 4; + } else if (r4 == 1 && actor->_640 == 0) { + actor->_640 = 0x14; + actor->_5B4 = 3; + } +} + +void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + f32 t; + xyz_t pos; + add_calc2(&actor->_5E8, actor->_5AC, 1 - actor->init_data._18, 0.01f + 0.001f * GETREG(TAKREG, 20)); + actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.z); + actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.z); + + add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); + t = add_calc(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4, 0); + if (fabsf(t) < 0.08f) { + add_calc_short_angle2(&actor->_612.x, 0, 1.0f - sqrtf(0.97), DEG2SHORT_ANGLE(1.0f + (0.5f * actor->_5B0)) >> 1, + 9); + } + mfish_move_smooth(actor, game); + mfish_get_flow_vec(&pos, actor, game); + actor->_5A0.y += actor->_5D0 + actor->_5DC.x; + actor->_5A0.z += actor->_5D0 + actor->_5DC.x; + actor->_5A0.y = actor->_5A0.y + actor->_5DC.y; + actor->_5A0.y = MAX(60, MIN(110, actor->_5A0.y)); +} + +void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + actor->_634 = mfish_get_hide_camera_angle(actor); + + if ((actor->_62E & 0x1E) != 0) { + // works with temp instead of cast + if ((s16)(actor->_612.z - actor->_62C) > 0) { + actor->_634 = actor->_62C + DEG2SHORT_ANGLE(90); + } else { + actor->_634 = actor->_62C - DEG2SHORT_ANGLE(90); + } + } else { + add_calc_short_angle2(&actor->_634, actor->_612.z, 1.0f - sqrtf(0.5), DEG2SHORT_ANGLE(22.5), 0x5b); + } + + actor->_5EC = 0.0f; + actor->_34 = &mfish_bass_dummy_process; + + return; +} + +void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) { + // no clue what's going on here + add_calc_short_angle2(&actor->_612.z, actor->_634, 1.0f - sqrtf(1.0f - (1.0f - sqrtf(1.0f))), 0x1c7, 0x2d); + actor->_622 = + add_calc_short_angle2(&actor->_60C.z, actor->_612.z, 1.0f - sqrtf(1.0f - (1.0f - sqrtf(0.75))), 0xe3, 0x2d); + add_calc_short_angle2(&actor->_61C, actor->_622, 1.0f - sqrtf(1.0f - (1.0f - sqrtf(0.75))), 0xe3, 0x2d); +} + +void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { + f32 ra; + f32 t; + f32 temp; + + ra = fqrand() * fishActor->init_data._14 + fishActor->init_data._10; + t = (ra) / MAX(fishActor->init_data._14 + fishActor->init_data._10, 1); + + if (fqrand() > 0.25f && !(fishActor->_62E & 0x200)) { + fishActor->_62E |= 0x200; + } else { + fishActor->_62E &= ~0x200; + } + + if (ra > fishActor->_5E8) { + f32 v2; + fishActor->_5F0 = ra; + fishActor->_5AC = 0.15f + Rnd_EX_fx(0.1f); + mfish_bass_tail_anim_set(fishActor, 0); + } + + fishActor->_5F4 = t * Rnd_EX_fx(10); + temp = (fishActor->_5F4 + fishActor->init_data._0C - fishActor->_5A0.y); + fishActor->_612.x = DEG2SHORT_ANGLE2(temp * -(2 * fishActor->_5B0 + 10)); + + fishActor->_612.x = CLAMP(fishActor->_612.x, DEG2SHORT_ANGLE(-50), DEG2SHORT_ANGLE(50)); + fishActor->_5D4 = 0; + + if (fqrand() > fishActor->init_data._1C) { + int diff; + + fishActor->_612.z += (s16)Rnd_EX_fx(fishActor->init_data._30 * 2.0f); + diff = fishActor->_612.z - fishActor->_60C.z; + if (ABS((s16)diff) < DEG2SHORT_ANGLE(20)) { + if ((s16)diff > 0) { + fishActor->_612.z += DEG2SHORT_ANGLE(20); + } else { + fishActor->_612.z += DEG2SHORT_ANGLE(-20); + } + } + + if ((fishActor->_62E & 0x200) == 0) { + fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 20); + } else { + fishActor->_632 = DEG2SHORT_ANGLE(t * 30 + 20); + } + } else { + if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) { + fishActor->_612.z += DEG2SHORT_ANGLE(15); + } else { + fishActor->_612.z += DEG2SHORT_ANGLE(-15); + } + + if ((fishActor->_62E & 0x200) == 0) { + fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 20); + } else { + fishActor->_632 = DEG2SHORT_ANGLE((GETREG(TAKREG, 42) + 40.0f) * t + 30); + } + } + if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) { + fishActor->_636 = DEG2SHORT_ANGLE(0); + } else { + fishActor->_636 = DEG2SHORT_ANGLE(-180); + } + + fishActor->_62E &= ~0xC0; + fishActor->_5EC = 0; + fishActor->_34 = mfish_bass_normal_process; +} + +void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actorx) { + return; +} + +void mfish_bass_turn_process_init() { + return; +} + +void mfish_bass_turn_process() { + return; +} + +void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + + mfish_onefish_ct(actor, gamex); + mfish_base_ct(actor, gamex); + + actor->_34 = mfish_bass_normal_process; + + if (actor->_59C == 7) { + actor->_5B0 = 0; + } else if (actor->_59C == 6) { + actor->_5B0 = 0.5f; + } else { + actor->_5B0 = 1; + } + + actor->_624 = 0xb; + + return; +} + +void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + YET_SKELETON* skele; + Mtx* mtx; + GRAPH* graph; + GAME_PLAY* play; + + play = (GAME_PLAY*)gamex; + + skele = &actor->_38; + + if (play->game.frame_counter % 2 != 0) { + mtx = &skele->_70; + } else { + mtx = &skele->_2b0; + } + + graph = play->game.graph; + + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_RotateY(actor->_60C.z, 1); + + Matrix_translate(0, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1); + Matrix_RotateX(actor->_60C.x, 1); + Matrix_RotateZ(MY_CLAMP(-(actor->_61C >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); + Matrix_translate(0, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + + OPEN_DISP(graph); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + CLOSE_DISP(graph); + + cKF_Si3_draw_R_SV(&play->game, &skele->_00, mtx, &mfish_before_disp, 0, actor); + return; +} + +void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_seafish_normal_init() { + return; +} + +void mfish_seafish_normal() { + return; +} + +void mfish_seafish_turn_init() { + return; +} + +void mfish_seafish_turn() { + return; +} + +void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_seafish_before_disp() { + return; +} + +void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_tai_normal_init() { + return; +} + +void mfish_tai_normal() { + return; +} + +void mfish_tai_turn_init() { + return; +} + +void mfish_tai_turn() { + return; +} + +void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_tai_before_disp() { + return; +} + +void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_sfish_normal_init() { + return; +} + +void mfish_sfish_normal() { + return; +} + +void mfish_sfish_turn_init() { + return; +} + +void mfish_sfish_turn() { + return; +} + +void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_sfish_before_disp() { + return; +} + +void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_gupi_normal_init() { + return; +} + +void mfish_gupi_normal() { + return; +} + +void mfish_gupi_turn_init() { + return; +} + +void mfish_gupi_turn() { + return; +} + +void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_gupi_before_disp() { + return; +} + +void mfish_gupi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_medaka_normal_init() { + return; +} + +void mfish_medaka_normal() { + return; +} + +void mfish_medaka_turn_init() { + return; +} + +void mfish_medaka_turn() { + return; +} + +void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_medaka_before_disp() { + return; +} + +void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kingyo_normal_init() { + return; +} + +void mfish_kingyo_normal() { + return; +} + +void mfish_kingyo_turn_init() { + return; +} + +void mfish_kingyo_turn() { + return; +} + +void mfish_kingyo_peck_init() { + return; +} + +void mfish_kingyo_peck() { + return; +} + +void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kingyo_before_disp() { + return; +} + +void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_dojou_normal_init() { + return; +} + +void mfish_dojou_normal() { + return; +} + +void mfish_dojou_turn_init() { + return; +} + +void mfish_dojou_turn() { + return; +} + +void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_dojou_before_disp() { + return; +} + +void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_donko_before_disp() { + return; +} + +void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_bfish_before_disp() { + return; +} + +void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_ito_before_disp() { + return; +} + +void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_unagi_get_next_rail_type() { + return; +} + +void mfish_unagi_aim_wind_angle_calc() { + return; +} + +void mfish_unagi_rail_move_init() { + return; +} + +void mfish_unagi_rail_move() { + return; +} + +void mfish_unagi_normal_to_reverse_init() { + return; +} + +void mfish_unagi_normal_to_reverse() { + return; +} + +void mfish_unagi_rail_move_reverse_init() { + return; +} + +void mfish_unagi_rail_move_reverse() { + return; +} + +void mfish_unagi_reverse_to_normal_init() { + return; +} + +void mfish_unagi_reverse_to_normal() { + return; +} + +void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_unagi_before_disp() { + return; +} + +void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_namazu_body_wind_anime_play() { + return; +} + +void mfish_namazu_normal_process_init() { + return; +} + +void mfish_namazu_normal_process() { + return; +} + +void mfish_namazu_dummy_process_init() { + return; +} + +void mfish_namazu_dummy_process() { + return; +} + +void mfish_namazu_turn_process_init() { + return; +} + +void mfish_namazu_turn_process() { + return; +} + +void mfish_namazu_ground_sweep_process_init() { + return; +} + +void mfish_namazu_ground_sweep_process() { + return; +} + +void mfish_namazu_base_FishMove() { + return; +} + +void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_namazu_before_disp() { + return; +} + +void mfish_namazu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_zarigani_normal_process_init() { + return; +} + +void mfish_zarigani_normal_process() { + return; +} + +void mfish_zarigani_wait_process_init() { + return; +} + +void mfish_zarigani_wait_process() { + return; +} + +void mfish_zarigani_stand_process_init() { + return; +} + +void mfish_zarigani_stand_process() { + return; +} + +void mfish_zarigani_jump_process_init() { + return; +} + +void mfish_zarigani_jump_process() { + return; +} + +void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_zarigani_before_disp() { + return; +} + +void mfish_zarigani_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kurage_normal_init() { + return; +} + +void mfish_kurage_normal() { + return; +} + +void mfish_kurage_turn_init() { + return; +} + +void mfish_kurage_turn() { + return; +} + +void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kurage_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_hasu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_hasu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_hasu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void hasu_before_disp() { + return; +} + +void hasu_after_disp() { + return; +} + +void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} From 967d792c6b6cd8bcb28813a1c0f5eb16e3ea022a Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 24 Nov 2024 14:49:21 -0500 Subject: [PATCH 05/33] museum fish progress, splitting out files --- config/GAFE01_00/foresta/splits.txt | 23 +- include/ac_museum_fish.h | 104 +- src/actor/ac_museum_fish.c | 1623 ++++----------------- src/actor/ac_museum_fish_afish.c_inc | 49 + src/actor/ac_museum_fish_aroana.c_inc | 64 + src/actor/ac_museum_fish_base.c_inc | 406 ++++++ src/actor/ac_museum_fish_bass.c_inc | 286 ++++ src/actor/ac_museum_fish_big_fish.c_inc | 22 + src/actor/ac_museum_fish_dojou.c_inc | 38 + src/actor/ac_museum_fish_donko.c_inc | 22 + src/actor/ac_museum_fish_gupi.c_inc | 38 + src/actor/ac_museum_fish_hasu.c_inc | 44 + src/actor/ac_museum_fish_ito.c_inc | 22 + src/actor/ac_museum_fish_kaseki.c_inc | 34 + src/actor/ac_museum_fish_kingyo.c_inc | 46 + src/actor/ac_museum_fish_koi.c_inc | 80 + src/actor/ac_museum_fish_kurage.c_inc | 33 + src/actor/ac_museum_fish_medaka.c_inc | 38 + src/actor/ac_museum_fish_namazu.c_inc | 61 + src/actor/ac_museum_fish_seafish.c_inc | 38 + src/actor/ac_museum_fish_small_fish.c_inc | 38 + src/actor/ac_museum_fish_tai.c_inc | 38 + src/actor/ac_museum_fish_unagi.c_inc | 62 + src/actor/ac_museum_fish_zarigani.c_inc | 54 + 24 files changed, 1875 insertions(+), 1388 deletions(-) create mode 100644 src/actor/ac_museum_fish_afish.c_inc create mode 100644 src/actor/ac_museum_fish_aroana.c_inc create mode 100644 src/actor/ac_museum_fish_base.c_inc create mode 100644 src/actor/ac_museum_fish_bass.c_inc create mode 100644 src/actor/ac_museum_fish_big_fish.c_inc create mode 100644 src/actor/ac_museum_fish_dojou.c_inc create mode 100644 src/actor/ac_museum_fish_donko.c_inc create mode 100644 src/actor/ac_museum_fish_gupi.c_inc create mode 100644 src/actor/ac_museum_fish_hasu.c_inc create mode 100644 src/actor/ac_museum_fish_ito.c_inc create mode 100644 src/actor/ac_museum_fish_kaseki.c_inc create mode 100644 src/actor/ac_museum_fish_kingyo.c_inc create mode 100644 src/actor/ac_museum_fish_koi.c_inc create mode 100644 src/actor/ac_museum_fish_kurage.c_inc create mode 100644 src/actor/ac_museum_fish_medaka.c_inc create mode 100644 src/actor/ac_museum_fish_namazu.c_inc create mode 100644 src/actor/ac_museum_fish_seafish.c_inc create mode 100644 src/actor/ac_museum_fish_small_fish.c_inc create mode 100644 src/actor/ac_museum_fish_tai.c_inc create mode 100644 src/actor/ac_museum_fish_unagi.c_inc create mode 100644 src/actor/ac_museum_fish_zarigani.c_inc diff --git a/config/GAFE01_00/foresta/splits.txt b/config/GAFE01_00/foresta/splits.txt index ac029e1c..b3c0fe23 100644 --- a/config/GAFE01_00/foresta/splits.txt +++ b/config/GAFE01_00/foresta/splits.txt @@ -822,7 +822,28 @@ actor/ac_museum_picture.c: .bss start:0x000A16B0 end:0x000A16C0 actor/ac_museum_fish.c: - .text start:0x000BF554 end:0x000E9F58 + .text start:0x000BF554 end:0x000C1428 + .text start:0x000C1428 end:0x000C869C + .text start:0x000C869C end:0x000CA20C + .text start:0x000CA20C end:0x000CC160 + .text start:0x000CC160 end:0x000CF450 + .text start:0x000CF450 end:0x000D0D24 + .text start:0x000D0D24 end:0x000D3110 + .text start:0x000D3110 end:0x000D46C8 + .text start:0x000D46C8 end:0x000D6128 + .text start:0x000D6128 end:0x000D7650 + .text start:0x000D7650 end:0x000D8EAC + .text start:0x000D8EAC end:0x000DA238 + .text start:0x000DA238 end:0x000DC1B8 + .text start:0x000DC1B8 end:0x000DD860 + .text start:0x000DD860 end:0x000DE3AC + .text start:0x000DE3AC end:0x000DFE04 + .text start:0x000DFE04 end:0x000E0DF4 + .text start:0x000E0DF4 end:0x000E39E4 + .text start:0x000E39E4 end:0x000E5DD8 + .text start:0x000E5DD8 end:0x000E7788 + .text start:0x000E7788 end:0x000E8F9C + .text start:0x000E8F9C end:0x000E9F58 .rodata start:0x000030D0 end:0x00003410 .data start:0x00037A58 end:0x00038F08 .bss start:0x000A16C0 end:0x000A16D8 diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 4743c8ef..2a075235 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -54,9 +54,8 @@ typedef struct _FISH_PRIVATE_DATA { void* _590; s32 _59C; // fish num xyz_t _5A0; - f32 _5AC; - f32 _5B0; - f32 _5B4; + xyz_t _5AC; + xyz_t _5B8; f32 _5D0; f32 _5D4; f32 _5D8; @@ -67,21 +66,26 @@ typedef struct _FISH_PRIVATE_DATA { f32 _5F4; s_xz _60C; s_xz _612; + s16 _61A; s16 _61C; s16 _622; s16 _624; s16 _626; + s16 _628; + s16 _62A; s16 _62C; s16 _62E; s16 _630; s16 _632; s16 _634; s16 _636; + s16 _63E; s16 _640; } MUSEUM_FISH_PRIVATE_DATA; -typedef struct _MUSEUM_FISH_PRIVATE_DATA2 { - cKF_SkeletonInfo_R_c _00; +// Holds data for the underwater grass +typedef struct _MUSEUM_FISH_KUSA_DATA { + YET_SKELETON _00; s_xyz _4F0; s_xyz _514; s16 _538; @@ -90,7 +94,7 @@ typedef struct _MUSEUM_FISH_PRIVATE_DATA2 { float _540; float _548; void* _54C; -} MUSEUM_FISH_PRIVATE_DATA2; +} MUSEUM_FISH_KUSA_DATA; // size 558 typedef struct _FISH_DISPLAY_MSG_INFO { s16 fishName; @@ -98,14 +102,14 @@ typedef struct _FISH_DISPLAY_MSG_INFO { } FISH_DISPLAY_MSG_INFO; typedef struct _MUSEUM_FISH_ACTOR { - ACTOR actor; // offset: 0, size: 0x174 - MUSEUM_FISH_PRIVATE_DATA prvFish[40]; // offset: 0x264 size: 0x648 * 40 - MUSEUM_FISH_PRIVATE_DATA2 prvFish2[14]; + ACTOR actor; // offset: 0, size: 0x174 + int _174; + MUSEUM_FISH_PRIVATE_DATA prvFish[40]; // offset: 0x178 size: 0xFB48 + MUSEUM_FISH_KUSA_DATA prvKusa[14]; // offset: 0xFCB8 size: 0x4AD0 s16 _101f0; s16 _101f4; void* _14788; - xyz_t _14d08; - xyz_t _14d14; + xyz_t _14d08[2]; int numFishDisplayed; // offset: 0x14d20, size: 4 int fishDisplayMsgIter; // offset: 0x14d24, size: 4 FISH_DISPLAY_MSG_INFO fishDisplayMsgInfo[10]; // offset: 0x14d28, size: 4*10 @@ -113,15 +117,14 @@ typedef struct _MUSEUM_FISH_ACTOR { s16 _14d50[0x10]; s16 _14d78[0x10]; s16 _14db4; - s16 _14db6; // offset: 0x14db6, size: 2 - s16 _14db8; // offset: 0x14db8, size: 2 - s16 _14dba; // offset: 0x14dba, size: 2 - s16 _14dbc; // offset: 0x14dbc, size: 2 - s16 _14dbe; // offset: 0x14dbe, size: 2 - s16 _14dc0; // offset: 0x14dc0, size: 2 - s16 _14dc2; // offset: 0x14dc2, size: 2 - s16 _14dc4; // offset: 0x14dc4, size: 2 - s16 _14dc8; // offset: 0x14dc8, size: 2 + s16 _14db6; // offset: 0x14db6, size: 2 + s16 _14db8; // offset: 0x14db8, size: 2 + s16 _14dba; // offset: 0x14dba, size: 2 + s16 _14dbc[2]; // offset: 0x14dbc, size: 4 + s16 _14dc0; // offset: 0x14dc0, size: 2 + s16 _14dc2; // offset: 0x14dc2, size: 2 + s16 _14dc4; // offset: 0x14dc4, size: 2 + s16 _14dc8; // offset: 0x14dc8, size: 2 } MUSEUM_FISH_ACTOR; void Museum_Fish_Prv_data_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, int fishNum, int r6); @@ -133,12 +136,12 @@ void Museum_Fish_Set_MsgFishInfo(); void Museum_Fish_set_talk_info(); void Museum_Fish_Talk_process(); void Museum_Fish_Actor_move(ACTOR* actor, GAME* game); -void Museum_Fish_Suisou_draw(MUSEUM_FISH_ACTOR* actor, GAME* game, int r5); -void kusa_before_disp(); -void Museum_Fish_Kusa_Draw(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(); +void mfish_point_ligh_pos_get(ACTOR* actorx, GAME* game, int r5); void mfish_point_light_ct(ACTOR* actor, GAME* game); void mfish_point_light_dt(ACTOR* r30, GAME* r31); void mfish_point_light_mv(ACTOR* actor, GAME* game); @@ -148,7 +151,7 @@ f32 Rnd_EX_f(f32 v1); f32 Rnd_EX_fx(f32 v1); void mfish_base_FishMove(); int mfish_PosWallCheck(MUSEUM_FISH_PRIVATE_DATA* priv, xyz_t* pos); -void mfish_WallCheck(); +BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* priv); s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv); void mfish_dummy_process_init(); void mfish_dummy_process(); @@ -209,7 +212,8 @@ void mfish_aroana_long_move_process(); void mfish_aroana_base_FishMove(); void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_aroana_before_disp(); +void 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); void mfish_koi_tail_anim_set(); void mfish_koi_move_smooth(); @@ -227,14 +231,16 @@ void mfish_koi_long_move_process(); void mfish_koi_base_FishMove(); void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_koi_before_disp(); +void 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); void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_kaseki_normal_init(); void mfish_kaseki_normal(); void mfish_kaseki_move_wall_smooth(); void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_kaseki_before_disp(); +void 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); void mfish_bass_tail_anim_set(); void mfish_bass_base_FishMove(); @@ -253,7 +259,8 @@ void mfish_seafish_normal(); void mfish_seafish_turn_init(); void mfish_seafish_turn(); void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_seafish_before_disp(); +void 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); void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_tai_normal_init(); @@ -261,7 +268,8 @@ void mfish_tai_normal(); void mfish_tai_turn_init(); void mfish_tai_turn(); void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_tai_before_disp(); +void 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); void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_sfish_normal_init(); @@ -269,7 +277,8 @@ void mfish_sfish_normal(); void mfish_sfish_turn_init(); void mfish_sfish_turn(); void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_sfish_before_disp(); +void 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); void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_gupi_normal_init(); @@ -277,7 +286,8 @@ void mfish_gupi_normal(); void mfish_gupi_turn_init(); void mfish_gupi_turn(); void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_gupi_before_disp(); +void 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); void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_medaka_normal_init(); @@ -285,7 +295,8 @@ void mfish_medaka_normal(); void mfish_medaka_turn_init(); void mfish_medaka_turn(); void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_medaka_before_disp(); +void 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); void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_kingyo_normal_init(); @@ -295,7 +306,8 @@ void mfish_kingyo_turn(); void mfish_kingyo_peck_init(); void mfish_kingyo_peck(); void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_kingyo_before_disp(); +void 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); void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_dojou_normal_init(); @@ -303,19 +315,23 @@ void mfish_dojou_normal(); void mfish_dojou_turn_init(); void mfish_dojou_turn(); void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_dojou_before_disp(); +void 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); void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_donko_before_disp(); +void mfish_donko_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, + void* arg, s_xyz* joint1, xyz_t* trans); void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_bfish_before_disp(); +void 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); void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_ito_before_disp(); +void 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); void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_unagi_get_next_rail_type(); @@ -329,7 +345,8 @@ void mfish_unagi_rail_move_reverse(); void mfish_unagi_reverse_to_normal_init(); void mfish_unagi_reverse_to_normal(); void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_unagi_before_disp(); +void 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); void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_namazu_body_wind_anime_play(); @@ -343,7 +360,8 @@ void mfish_namazu_ground_sweep_process_init(); void mfish_namazu_ground_sweep_process(); void mfish_namazu_base_FishMove(); void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_namazu_before_disp(); +void 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); void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_zarigani_normal_process_init(); @@ -355,7 +373,8 @@ void mfish_zarigani_stand_process(); void mfish_zarigani_jump_process_init(); void mfish_zarigani_jump_process(); void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_zarigani_before_disp(); +void 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); void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_kurage_normal_init(); @@ -369,7 +388,8 @@ void mfish_hasu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_hasu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void hasu_before_disp(); +void 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); void hasu_after_disp(); void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index 9b5a7eca..da61f71e 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -11,12 +11,17 @@ #include "m_player_lib.h" #include "m_debug_mode.h" #include "libforest/gbi_extensions.h" +#include "m_rcp.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 - sqrtf(1 - (x))) +#define CALC_EASE2(x) CALC_EASE(CALC_EASE(x)) +#define SHORT2DEG_ANGLE2(x) ((x) * (360.0f / 65536.0f)) + // delete this stuff later typedef Mtx; typedef Gfx; @@ -134,7 +139,7 @@ ACTOR_PROFILE Museum_Fish_Profile = { NULL }; -xyz_t suisou_pos[5] = { +static xyz_t suisou_pos[5] = { { 220.0f, 40.0f, 220.0f }, { 420.0f, 40.0f, 220.0f }, { 220.0f, 40.0f, 460.0f }, @@ -696,12 +701,12 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) { // 0x1300 : kusa_model // 0x1338 : kusa_anime // 0x1370 : kusa_start_frame - actor->prvFish2[i]._54C = kusa_model[i]; - cKF_SkeletonInfo_R_ct(&actor->prvFish2[i]._00, kusa_model[i], kusa_anime[i], &actor->prvFish2[i]._4F0, - &actor->prvFish2[i]._514); - cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->prvFish2[i]._00, kusa_anime[i], NULL, + actor->prvKusa[i]._54C = kusa_model[i]; + cKF_SkeletonInfo_R_ct(&actor->prvKusa[i]._00._00, kusa_model[i], kusa_anime[i], &actor->prvKusa[i]._4F0, + &actor->prvKusa[i]._514); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->prvKusa[i]._00._00, kusa_anime[i], NULL, kusa_group_tbl[i] == 2 ? 1.5f : 0.5f, 0.0f); - actor->prvFish2[i]._00.frame_control.current_frame = kusa_start_frame[i]; + actor->prvKusa[i]._00._00.frame_control.current_frame = kusa_start_frame[i]; actor->_101f0 = qrand(); actor->_101f4 = qrand(); } @@ -837,8 +842,45 @@ void Museum_Fish_set_talk_info(ACTOR* actorx) { mDemo_Set_use_zoom_sound(TRUE); } -void Museum_Fish_Talk_process() { - // NOT BAD +void Museum_Fish_Talk_process(ACTOR* actorx, GAME* game) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; + + if (mDemo_Check(8, actorx) != 0) { + GAME_PLAY* _gamePT; + PLAYER_ACTOR* playerActor = get_player_actor_withoutCheck((GAME_PLAY*)game); + s_xyz rotation = playerActor->actor_class.shape_info.rotation; + add_calc_short_angle2(&rotation.y, DEG2SHORT_ANGLE(-180), 0.3f, DEG2SHORT_ANGLE(22.5f), 0); + + _gamePT = (GAME_PLAY*)gamePT; + get_player_actor_withoutCheck(_gamePT)->Set_force_position_angle_proc(&_gamePT->game, NULL, &rotation, 32); + if (mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p()) != 0) { + int choseNum = mChoice_Get_ChoseNum(mChoice_Get_base_window_p()); + if (choseNum != -1) { + if (choseNum == 0) { + mMsg_Window_c* windowC; + int msgNum = Museum_Fish_GetMsgNo(actorx); + actor->fishDisplayMsgIter += 1; + 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) != 0 && mDemo_Get_talk_actor() == 0) { + int i; + for (i = 0; i < 5; i++) { + if (Museum_Fish_Check_Talk_Distance(game, i)) { + Museum_Fish_Set_MsgFishInfo(actorx, i); + mDemo_Request(8, actorx, &Museum_Fish_set_talk_info); + } + } + } + } + // line 16C + return; } @@ -850,9 +892,9 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { GAME_PLAY* play = (GAME_PLAY*)game; MUSEUM_FISH_PRIVATE_DATA* prv; - mfish_point_light_mv(actorx, game); + mfish_point_light_mv(actorx, &play->game); old_14db4 = actor->_14db4; - mfish_get_player_area(actor, game); + mfish_get_player_area(actor, &play->game); if (actor->_14db4 != old_14db4) { PLAYER_ACTOR* player; @@ -879,33 +921,30 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { } for (i = 0; i < 0xe; i++) { - cKF_SkeletonInfo_R_play(&actor->prvFish2[i]._00); + cKF_SkeletonInfo_R_play(&actor->prvKusa[i]._00._00); if (kusa_group_tbl[i] == 2) { - add_calc2(&actor->prvFish2[i]._540, -2.25f, 1.75f, 1.75f); - add_calc_short_angle2(&actor->prvFish2[i]._53A, DEG2SHORT_ANGLE(3.5f), - 1.0f - sqrtf(1.0f - (1.0f - sqrtf(0.9f))), 20, 4); + add_calc2(&actor->prvKusa[i]._540, -2.25f, 1.75f, 1.75f); + add_calc_short_angle2(&actor->prvKusa[i]._53A, DEG2SHORT_ANGLE(3.5f), CALC_EASE2(0.1f), 20, 4); } else { - actor->prvFish2[i]._540 *= 0.9f; - add_calc_short_angle2(&actor->prvFish2[i]._53A, DEG2SHORT_ANGLE(3.5f), - 1.0f - sqrtf(1.0f - (1.0f - sqrtf(0.9f))), 20, 4); + actor->prvKusa[i]._540 *= 0.9f; + add_calc_short_angle2(&actor->prvKusa[i]._53A, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4); } - actor->prvFish2[i]._548 *= 0.98f; + actor->prvKusa[i]._548 *= 0.98f; - actor->prvFish2[i]._538 += actor->prvFish2[i]._53A; - actor->prvFish2[i]._53C += actor->prvFish2[i]._53A >> 1; + actor->prvKusa[i]._538 += actor->prvKusa[i]._53A; + actor->prvKusa[i]._53C += actor->prvKusa[i]._53A >> 1; - add_calc_short_angle2(&actor->prvFish2[i]._53A, DEG2SHORT_ANGLE(0), 1.0f - sqrtf(1.0f - (1.0f - sqrtf(0.9f))), - 20, 4); + add_calc_short_angle2(&actor->prvKusa[i]._53A, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4); } - Museum_Fish_Kusa_Check(actor, game); - Museum_Fish_Object_Check(actor, game); + Museum_Fish_Kusa_Check(actor, &play->game); + Museum_Fish_Object_Check(actor, &play->game); for (i = 0; i < 20; i++) { actor->_14d50[i]--; if (actor->_14d50[i] < 0) { - common_data.clip.effect_clip->effect_make_proc(0x6e, suisou_awa_pos[i], 2, 0, game, -1, suisou_awa_group[i], - 0); + common_data.clip.effect_clip->effect_make_proc(0x6e, suisou_awa_pos[i], 2, 0, &play->game, -1, + suisou_awa_group[i], 0); if (actor->_14d78[i] > 0) { actor->_14d78[i]--; @@ -917,7 +956,8 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { } } - Museum_Fish_Talk_process(actor, game); + // TODO: check if this is broken after we changed this above + Museum_Fish_Talk_process(actorx, game); prv = actor->prvFish; for (i = 0; i < 40; i++, prv++) { if (prv->_62E & 1) { @@ -944,7 +984,8 @@ extern Gfx obj_suisou1_modelT[]; extern Gfx obj_museum5_model[]; extern Gfx obj_museum5_modelT[]; -void Museum_Fish_Suisou_draw(MUSEUM_FISH_ACTOR* actor, GAME* game, int r5) { +void Museum_Fish_Suisou_draw(ACTOR* actorx, GAME* game, int r5) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; GAME_PLAY* play = (GAME_PLAY*)game; GRAPH* graph = play->game.graph; if (r5 < 4) { @@ -993,16 +1034,103 @@ void Museum_Fish_Suisou_draw(MUSEUM_FISH_ACTOR* actor, GAME* game, int r5) { } } -void kusa_before_disp() { - return; +int 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) { + MUSEUM_FISH_KUSA_DATA* actor = (MUSEUM_FISH_KUSA_DATA*)arg; + if (joint_num > 0) { + f32 v = (actor->_54C == &cKF_bs_r_obj_museum5_kusa3) ? 35.0f : 20.f; + + joint1->y += (s16)(sin_s(actor->_538 + (joint_num * DEG2SHORT_ANGLE(90))) * 1274.0f); + joint1->x += (s16)(sin_s(actor->_53C + (joint_num * DEG2SHORT_ANGLE(90))) * 4369.0f); + + trans->y -= actor->_548 * (v * joint_num); + trans->z += actor->_540 * (v * joint_num); + } + return 1; } -void Museum_Fish_Kusa_Draw(ACTOR* actor, GAME* game) { - return; +void Museum_Fish_Kusa_Draw(ACTOR* actorx, GAME* game, int r5) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; + GAME_PLAY* play = (GAME_PLAY*)game; + if (mfish_cull_check(game, &kusa_pos[r5], 0.0f, 0.0f, 120.0f)) { + Mtx* mtx; + if (play->game.frame_counter % 2 != 0) { + mtx = &actor->prvKusa[r5]._00._70; + } else { + mtx = &actor->prvKusa[r5]._00._2b0; + } + OPEN_DISP(game->graph); + Matrix_translate(kusa_pos[r5].x, 0, kusa_pos[r5].z, 0); + Matrix_scale(0.01f, 0.01f, 0.01f, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + CLOSE_DISP(game->graph); + cKF_Si3_draw_R_SV(game, &actor->prvKusa[r5]._00._00, mtx, kusa_before_disp, NULL, &actor->prvKusa[r5]); + } } -void Museum_Fish_Actor_draw(ACTOR* actor, GAME* game) { - return; +extern EVW_ANIME_DATA obj_suisou1_evw_anime, obj_museum5_evw_anime; +extern Gfx act_mus_fish_set_mode; +void Museum_Fish_Actor_draw(ACTOR* actorx, GAME* game) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; + GAME_PLAY* play = (GAME_PLAY*)game; + int i; + + _texture_z_light_fog_prim(game->graph); + _texture_z_light_fog_prim_xlu(game->graph); + + if (!GETREG(TAKREG, 90)) { + for (i = 0; i < 14; i++) { + Museum_Fish_Kusa_Draw(actorx, game, i); + } + } + + if (!GETREG(TAKREG, 92)) { + MUSEUM_FISH_PRIVATE_DATA* prv; + GRAPH* graph; + graph = play->game.graph; + OPEN_DISP(graph); + gSPDisplayList(NEXT_POLY_OPA_DISP, &act_mus_fish_set_mode); + CLOSE_DISP(graph); + + prv = actor->prvFish; + for (i = 0; i < 40; i++, prv++) { + if (prv->_62E & 1 && prv->_59C != 0x23 && prv->_59C != 0x21 && + mfish_cull_check(game, &prv->_5B8, prv->init_data._08 + 50.0f, prv->init_data._08 + 10.0f, + prv->init_data._08 + 10.0f)) { + mfish_dw[i](prv, game); + } + } + + if (actor->prvFish[0x23]._62E & 1 && + mfish_cull_check(game, &actor->prvFish[0x23]._5A0, actor->prvFish[0x23].init_data._08 + 10.0f, + actor->prvFish[0x23].init_data._04, actor->prvFish[0x23].init_data._04)) { + mfish_dw[0x23](&actor->prvFish[0x23], game); + } + + if (!GETREG(TAKREG, 82)) { + mfish_normal_light_set(actorx, game); + } + + if (actor->prvFish[0x21]._62E & 1) { + mfish_dw[0x21](&actor->prvFish[0x21], game); + } + + if (GETREG(TAKREG, 92) == 1) { + mfish_normal_light_set(actorx, game); + } + } + + if (!GETREG(TAKREG, 91)) { + if (!GETREG(TAKREG, 88)) { + Evw_Anime_Set(play, &obj_museum5_evw_anime); + Museum_Fish_Suisou_draw(actorx, game, 0x5); + } + + for (i = 0; i < 4; i++) { + Evw_Anime_Set(play, &obj_suisou1_evw_anime); + Museum_Fish_Suisou_draw(actorx, game, i); + } + } } BOOL mfish_cull_check(GAME* game, xyz_t* worldPos, f32 x, f32 y, f32 _y) { @@ -1014,24 +1142,94 @@ BOOL mfish_cull_check(GAME* game, xyz_t* worldPos, f32 x, f32 y, f32 _y) { return FALSE; } -void mfish_point_ligh_pos_get() { - return; +void mfish_point_ligh_pos_get(ACTOR* actorx, GAME* game, int r5) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; + GAME_PLAY* play = (GAME_PLAY*)game; + f32 a, b, c, d; + xyz_t _30; + xyz_t _24; + xyz_t _18; + xyz_t _0c; + + int r; + f32 v; + PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); + + _30 = player->actor_class.world.position; + + if (_30.z < 100.0f) { + r = 4; + } else if (_30.z > 100.0f && _30.z < 340.0f) { + if (r5 == 0) { + r = 0; + } else { + r = 1; + } + } else if (_30.z > 340.0f && _30.z < 580.0f) { + if (r5 == 0) { + r = 2; + } else { + r = 3; + } + } else { + return; + } + + if (r < 4) { + a = 60.0f; + b = 60.0f; + c = 60.0f; + d = 60.0f; + _0c = suisou_pos[r]; + _18 = _30; + } else { + a = 200.0f; + c = 35.0f; + d = 20.0f; + b = 200.0f; + _0c = suisou_pos[r]; + _18 = _30; + if (r5 == 0) { + _18.x -= d; + } else { + _18.x += d; + } + } + + if (_18.x > _0c.x + a) { + _18.x = _0c.x + a; + } else if (_18.x < _0c.x - b) { + _18.x = _0c.x - b; + } + + if (_18.z > _0c.z + c) { + _18.z = _0c.z + c; + } else if (_18.z < _0c.z - d) { + _18.z = _0c.z - d; + } + + actor->_14d08[r5] = _18; + + xyz_t_sub(&_18, &_30, &_24); + + v = sqrtf(_24.x * _24.x + _24.z * _24.z); + + actor->_14dbc[r5] = (u8)(((60.0f - CLAMP(v, 0.0f, 60.0f)) / 60.0f) * 55.0f); } -void mfish_point_light_ct(ACTOR* actorx, GAME* gamex) { - MUSEUM_FISH_ACTOR* actor; - GAME_PLAY* game; - game = (GAME_PLAY*)gamex; - actor = (MUSEUM_FISH_ACTOR*)actorx; - mfish_point_ligh_pos_get(actor, game, 0); - mfish_point_ligh_pos_get(actor, game, 1); - actor->_14db8 = mEnv_ReservePointLight(game, &actor->_14d08, 0, 0x96, 0xff, (u8)actor->_14dbc); - actor->_14dba = mEnv_ReservePointLight(game, &actor->_14d14, 0, 0x96, 0xff, (u8)actor->_14dbe); +void mfish_point_light_ct(ACTOR* actorx, GAME* game) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; + GAME_PLAY* play = (GAME_PLAY*)game; + mfish_point_ligh_pos_get(actorx, game, 0); + mfish_point_ligh_pos_get(actorx, game, 1); + actor->_14db8 = mEnv_ReservePointLight(play, &actor->_14d08[0], 0, 0x96, 0xff, (u8)actor->_14dbc[0]); + actor->_14dba = mEnv_ReservePointLight(play, &actor->_14d08[1], 0, 0x96, 0xff, (u8)actor->_14dbc[1]); actor->_14dc0 = 0; } void mfish_point_light_dt(ACTOR* actorx, GAME* game) { MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; + GAME_PLAY* play = (GAME_PLAY*)game; if (actor->_14db8 != -1) { mEnv_CancelReservedPointLight(actor->_14db8, (GAME_PLAY*)game); @@ -1042,8 +1240,20 @@ void mfish_point_light_dt(ACTOR* actorx, GAME* game) { } } -void mfish_point_light_mv(ACTOR* actor, GAME* game) { - return; +void mfish_point_light_mv(ACTOR* actorx, GAME* game) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; + GAME_PLAY* play = (GAME_PLAY*)game; + + mfish_point_ligh_pos_get(actorx, game, 0); + mfish_point_ligh_pos_get(actorx, game, 1); + + mEnv_OperateReservedPointLight(actor->_14db8, &actor->_14d08[0], 0, 0x96, 0xff, (u8)actor->_14dbc[0]); + mEnv_OperateReservedPointLight(actor->_14dba, &actor->_14d08[1], 0, 0x96, 0xff, (u8)actor->_14dbc[1]); + actor->actor.world.position = actor->_14d08[0]; + actor->actor.world.position.x = sin_s(actor->_14dc0) * 200.0f; + actor->actor.world.position.y = sin_s(actor->_14dc0 * 2) * 10.0f; + actor->actor.world.position.z = cos_s(actor->_14dc0) * 200.0f; + actor->_14dc0 += 0x111; } void mfish_normal_light_set(ACTOR* actor, GAME* _game) { @@ -1060,1301 +1270,24 @@ void mfish_normal_light_set(ACTOR* actor, GAME* _game) { LightsN_disp(lights, game->game.graph); } -f32 Rnd_EX_f(f32 v) { - f32 rand1 = 2 * fqrand2(); - f32 rand2 = fqrand(); - if (rand2 > (rand1 * rand1)) { - if (rand1 > 0) { - rand1 = sqrtf(rand2); - } else { - rand1 = -sqrtf(rand2); - } - } - rand1 = (1.0f + rand1) * 0.5f; - return v * rand1; -} - -f32 Rnd_EX_fx(f32 v1) { - f32 rand1 = 2 * fqrand2(); - f32 rand2 = fqrand(); - if (rand2 > (rand1 * rand1)) { - if (rand1 > 0) { - rand1 = sqrtf(rand2); - } else { - rand1 = -sqrtf(rand2); - } - } - rand1 = rand1 / 2; - return v1 * rand1; -} - -void mfish_base_FishMove() { - return; -} - -int mfish_PosWallCheck(MUSEUM_FISH_PRIVATE_DATA* priv, xyz_t* pos) { - u32 flag = 0; - xyz_t p = suisou_pos[priv->_630]; - f32 a, b, c, d; - - if (priv->_630 < 4) { - a = priv->init_data._28 + 45; - b = priv->init_data._28 + 45; - c = priv->init_data._28 + 45; - d = priv->init_data._28 + 45; - } else { - a = priv->init_data._28 + 180; - b = priv->init_data._28 + 180; - c = priv->init_data._28 + 5; - d = priv->init_data._28 + 45; - } - - if (pos->x > p.x + a) { - flag |= 4; - } else if (pos->x < p.x - b) { - flag |= 2; - } - - if (pos->z > p.z + c) { - flag |= 8; - } else if (pos->z < p.z - d) { - flag |= 0x10; - } - - return flag; -} - -void mfish_WallCheck() { - return; -} - -s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv) { - s16 v = priv->_60C.z; - if (v > 0 || (priv->_630 == 2 && fqrand() < 0.8f)) { - if (v > DEG2SHORT_ANGLE(90)) { - v = DEG2SHORT_ANGLE(90) + DEG2SHORT_ANGLE(45 * fqrand()); - } else { - v = DEG2SHORT_ANGLE(90) - DEG2SHORT_ANGLE(45 * fqrand()); - } - } else { - if (v > DEG2SHORT_ANGLE(-90)) { - v = DEG2SHORT_ANGLE(-90) + DEG2SHORT_ANGLE(45 * fqrand()); - } else { - v = DEG2SHORT_ANGLE(-90) - DEG2SHORT_ANGLE(45 * fqrand()); - } - } - return v; -} - -void mfish_dummy_process_init() { - mfish_get_hide_camera_angle(0); -} - -void mfish_dummy_process() { - return; -} - -void mfish_normal_process_init() { - return; -} - -void mfish_normal_process() { - return; -} - -void mfish_turn_process_init() { - return; -} - -void mfish_turn_process() { - return; -} - -void mfish_peck_process_init() { - return; -} - -void mfish_peck_process() { - return; -} - -void mfish_ground_peck_process_init() { - return; -} - -void mfish_ground_peck_process() { - return; -} - -void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - YET_SKELETON* huh = &actor->_38; - // looks like it loads from 0x38, which i labeled as the skeleton, - // but then it adds like 0x514 to it, so this must be huge - - // cKF_SkeletonInfo_R_ct(&huh->_00, huh->_00); //TODO - return; -} - -void mfish_onefish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - cKF_SkeletonInfo_R_play(&actor->_38._00); - return; -} - -int mfish_before_disp(GAME* r3, cKF_SkeletonInfo_R_c* r4, int r5, Gfx** r6, u8* r7, void* arg, s_xyz* r9, xyz_t* r10) { - - MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; - if (r5 == 2) { - int v, t; - if (actor->_630 != 4) { - v = 2; - } else if (actor->init_data._20 > 0.7f) { - v = 1; - } else if (actor->init_data._20 > 0.5f) { - v = 2; - } else { - v = 3; - } - t = r9->y - (actor->_61C * v); - r9->y = MY_CLAMP(t, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); - t = r9->x - (actor->_61C >> 1); - r9->x = MY_CLAMP(t, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25)); - } - return 1; -} - -void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - YET_SKELETON* skele; - Mtx* mtx; - GAME_PLAY* play; - GRAPH* graph; - - play = (GAME_PLAY*)gamex; - skele = &actor->_38; - - if (play->game.frame_counter % 2 != 0) { - mtx = &skele->_70; - } else { - mtx = &skele->_2b0; - } - - graph = play->game.graph; - - Matrix_translate(actor->_5A0.x, actor->_5A0.y + actor->_5B0, actor->_5A0.z, 0); - Matrix_RotateY(actor->_60C.z, 1); - - Matrix_translate(0, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1); - Matrix_RotateX(actor->_60C.x, 1); - Matrix_RotateZ(MY_CLAMP(-(actor->_61C >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); - Matrix_translate(0, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); - - OPEN_DISP(graph); - gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - CLOSE_DISP(graph); - - cKF_Si3_draw_R_SV(&play->game, &skele->_00, mtx, &mfish_before_disp, 0, actor); -} - -void mfish_ani_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void Museum_Fish_BigFishObjCheck() { - return; -} - -void Museum_Fish_ObjBGCheck() { - return; -} - -void Museum_Fish_DonkoBGCheck() { - return; -} - -void Museum_Fish_objchk_pos_set() { - return; -} - -void Museum_Fish_BGCheck() { - return; -} - -void Museum_Fish_Kusa_Check() { - static int kusa_group_tbl[] = { 0, 2, 1, 3, 3, 4, 4, 4, 4, 4, 0, 2, 1, 3 }; -} - -void Museum_Fish_Object_Check() { - return; -} - -void mfish_body_wind_anime_play() { - return; -} - -void mfish_get_player_angle() { - return; -} - -void mfish_peck_check() { - return; -} - -void mfish_peck_wall_check() { - return; -} - -void mfish_ground_peck_before_check() { - return; -} - -void mfish_get_player_area() { - return; -} - -void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { - return; -} - -void mfish_get_escape_angle() { - return; -} - -void mfish_move_smooth() { - return; -} - -void mfish_hamon_make() { - return; -} - -void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_afish_dummy_process_init() { - return; -} - -void mfish_afish_dummy_process() { - return; -} - -void mfish_afish_normal_process_init() { - return; -} - -void mfish_afish_normal_process() { - return; -} - -void mfish_afish_turn_process_init() { - return; -} - -void mfish_afish_turn_process() { - return; -} - -void mfish_afish_base_FishMove() { - return; -} - -void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_afish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_afish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_aroana_dummy_process_init() { - return; -} - -void mfish_aroana_dummy_process() { - return; -} - -void mfish_aroana_normal_process_init() { - return; -} - -void mfish_aroana_normal_process() { - return; -} - -void mfish_aroana_turn_process_init() { - return; -} - -void mfish_aroana_turn_process() { - return; -} - -void mfish_aroana_long_move_process_init() { - return; -} - -void mfish_aroana_long_move_process() { - return; -} - -void mfish_aroana_base_FishMove() { - return; -} - -void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_aroana_before_disp() { - return; -} - -void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_koi_tail_anim_set() { - return; -} - -void mfish_koi_move_smooth() { - return; -} - -void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_koi_dummy_process_init() { - return; -} - -void mfish_koi_dummy_process() { - return; -} - -void mfish_koi_normal_process_init() { - return; -} - -void mfish_koi_normal_process() { - return; -} - -void mfish_koi_turn_process_init() { - return; -} - -void mfish_koi_turn_process() { - return; -} - -void mfish_koi_peck_process_init() { - return; -} - -void mfish_koi_peck_process() { - return; -} - -void mfish_koi_long_move_process_init() { - return; -} - -void mfish_koi_long_move_process() { - return; -} - -void mfish_koi_base_FishMove() { - return; -} - -void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_koi_before_disp() { - return; -} - -void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_kaseki_normal_init() { - return; -} - -void mfish_kaseki_normal() { - return; -} - -void mfish_kaseki_move_wall_smooth() { - return; -} - -void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_kaseki_before_disp() { - return; -} - -void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_bass_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) { - if (r4 == 0) { - actor->_640 = 0xf; - actor->_5B4 = 4; - } else if (r4 == 1 && actor->_640 == 0) { - actor->_640 = 0x14; - actor->_5B4 = 3; - } -} - -void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { - GAME_PLAY* play = (GAME_PLAY*)game; - f32 t; - xyz_t pos; - add_calc2(&actor->_5E8, actor->_5AC, 1 - actor->init_data._18, 0.01f + 0.001f * GETREG(TAKREG, 20)); - actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.z); - actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.z); - - add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); - t = add_calc(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4, 0); - if (fabsf(t) < 0.08f) { - add_calc_short_angle2(&actor->_612.x, 0, 1.0f - sqrtf(0.97), DEG2SHORT_ANGLE(1.0f + (0.5f * actor->_5B0)) >> 1, - 9); - } - mfish_move_smooth(actor, game); - mfish_get_flow_vec(&pos, actor, game); - actor->_5A0.y += actor->_5D0 + actor->_5DC.x; - actor->_5A0.z += actor->_5D0 + actor->_5DC.x; - actor->_5A0.y = actor->_5A0.y + actor->_5DC.y; - actor->_5A0.y = MAX(60, MIN(110, actor->_5A0.y)); -} - -void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { - actor->_634 = mfish_get_hide_camera_angle(actor); - - if ((actor->_62E & 0x1E) != 0) { - // works with temp instead of cast - if ((s16)(actor->_612.z - actor->_62C) > 0) { - actor->_634 = actor->_62C + DEG2SHORT_ANGLE(90); - } else { - actor->_634 = actor->_62C - DEG2SHORT_ANGLE(90); - } - } else { - add_calc_short_angle2(&actor->_634, actor->_612.z, 1.0f - sqrtf(0.5), DEG2SHORT_ANGLE(22.5), 0x5b); - } - - actor->_5EC = 0.0f; - actor->_34 = &mfish_bass_dummy_process; - - return; -} - -void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) { - // no clue what's going on here - add_calc_short_angle2(&actor->_612.z, actor->_634, 1.0f - sqrtf(1.0f - (1.0f - sqrtf(1.0f))), 0x1c7, 0x2d); - actor->_622 = - add_calc_short_angle2(&actor->_60C.z, actor->_612.z, 1.0f - sqrtf(1.0f - (1.0f - sqrtf(0.75))), 0xe3, 0x2d); - add_calc_short_angle2(&actor->_61C, actor->_622, 1.0f - sqrtf(1.0f - (1.0f - sqrtf(0.75))), 0xe3, 0x2d); -} - -void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { - f32 ra; - f32 t; - f32 temp; - - ra = fqrand() * fishActor->init_data._14 + fishActor->init_data._10; - t = (ra) / MAX(fishActor->init_data._14 + fishActor->init_data._10, 1); - - if (fqrand() > 0.25f && !(fishActor->_62E & 0x200)) { - fishActor->_62E |= 0x200; - } else { - fishActor->_62E &= ~0x200; - } - - if (ra > fishActor->_5E8) { - f32 v2; - fishActor->_5F0 = ra; - fishActor->_5AC = 0.15f + Rnd_EX_fx(0.1f); - mfish_bass_tail_anim_set(fishActor, 0); - } - - fishActor->_5F4 = t * Rnd_EX_fx(10); - temp = (fishActor->_5F4 + fishActor->init_data._0C - fishActor->_5A0.y); - fishActor->_612.x = DEG2SHORT_ANGLE2(temp * -(2 * fishActor->_5B0 + 10)); - - fishActor->_612.x = CLAMP(fishActor->_612.x, DEG2SHORT_ANGLE(-50), DEG2SHORT_ANGLE(50)); - fishActor->_5D4 = 0; - - if (fqrand() > fishActor->init_data._1C) { - int diff; - - fishActor->_612.z += (s16)Rnd_EX_fx(fishActor->init_data._30 * 2.0f); - diff = fishActor->_612.z - fishActor->_60C.z; - if (ABS((s16)diff) < DEG2SHORT_ANGLE(20)) { - if ((s16)diff > 0) { - fishActor->_612.z += DEG2SHORT_ANGLE(20); - } else { - fishActor->_612.z += DEG2SHORT_ANGLE(-20); - } - } - - if ((fishActor->_62E & 0x200) == 0) { - fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 20); - } else { - fishActor->_632 = DEG2SHORT_ANGLE(t * 30 + 20); - } - } else { - if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) { - fishActor->_612.z += DEG2SHORT_ANGLE(15); - } else { - fishActor->_612.z += DEG2SHORT_ANGLE(-15); - } - - if ((fishActor->_62E & 0x200) == 0) { - fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 20); - } else { - fishActor->_632 = DEG2SHORT_ANGLE((GETREG(TAKREG, 42) + 40.0f) * t + 30); - } - } - if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) { - fishActor->_636 = DEG2SHORT_ANGLE(0); - } else { - fishActor->_636 = DEG2SHORT_ANGLE(-180); - } - - fishActor->_62E &= ~0xC0; - fishActor->_5EC = 0; - fishActor->_34 = mfish_bass_normal_process; -} - -void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actorx) { - return; -} - -void mfish_bass_turn_process_init() { - return; -} - -void mfish_bass_turn_process() { - return; -} - -void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - - mfish_onefish_ct(actor, gamex); - mfish_base_ct(actor, gamex); - - actor->_34 = mfish_bass_normal_process; - - if (actor->_59C == 7) { - actor->_5B0 = 0; - } else if (actor->_59C == 6) { - actor->_5B0 = 0.5f; - } else { - actor->_5B0 = 1; - } - - actor->_624 = 0xb; - - return; -} - -void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - YET_SKELETON* skele; - Mtx* mtx; - GRAPH* graph; - GAME_PLAY* play; - - play = (GAME_PLAY*)gamex; - - skele = &actor->_38; - - if (play->game.frame_counter % 2 != 0) { - mtx = &skele->_70; - } else { - mtx = &skele->_2b0; - } - - graph = play->game.graph; - - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); - Matrix_RotateY(actor->_60C.z, 1); - - Matrix_translate(0, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1); - Matrix_RotateX(actor->_60C.x, 1); - Matrix_RotateZ(MY_CLAMP(-(actor->_61C >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); - Matrix_translate(0, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); - - OPEN_DISP(graph); - gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - CLOSE_DISP(graph); - - cKF_Si3_draw_R_SV(&play->game, &skele->_00, mtx, &mfish_before_disp, 0, actor); - return; -} - -void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_seafish_normal_init() { - return; -} - -void mfish_seafish_normal() { - return; -} - -void mfish_seafish_turn_init() { - return; -} - -void mfish_seafish_turn() { - return; -} - -void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_seafish_before_disp() { - return; -} - -void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_tai_normal_init() { - return; -} - -void mfish_tai_normal() { - return; -} - -void mfish_tai_turn_init() { - return; -} - -void mfish_tai_turn() { - return; -} - -void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_tai_before_disp() { - return; -} - -void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_sfish_normal_init() { - return; -} - -void mfish_sfish_normal() { - return; -} - -void mfish_sfish_turn_init() { - return; -} - -void mfish_sfish_turn() { - return; -} - -void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_sfish_before_disp() { - return; -} - -void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_gupi_normal_init() { - return; -} - -void mfish_gupi_normal() { - return; -} - -void mfish_gupi_turn_init() { - return; -} - -void mfish_gupi_turn() { - return; -} - -void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_gupi_before_disp() { - return; -} - -void mfish_gupi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_medaka_normal_init() { - return; -} - -void mfish_medaka_normal() { - return; -} - -void mfish_medaka_turn_init() { - return; -} - -void mfish_medaka_turn() { - return; -} - -void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_medaka_before_disp() { - return; -} - -void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_kingyo_normal_init() { - return; -} - -void mfish_kingyo_normal() { - return; -} - -void mfish_kingyo_turn_init() { - return; -} - -void mfish_kingyo_turn() { - return; -} - -void mfish_kingyo_peck_init() { - return; -} - -void mfish_kingyo_peck() { - return; -} - -void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_kingyo_before_disp() { - return; -} - -void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_dojou_normal_init() { - return; -} - -void mfish_dojou_normal() { - return; -} - -void mfish_dojou_turn_init() { - return; -} - -void mfish_dojou_turn() { - return; -} - -void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_dojou_before_disp() { - return; -} - -void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_donko_before_disp() { - return; -} - -void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_bfish_before_disp() { - return; -} - -void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_ito_before_disp() { - return; -} - -void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_unagi_get_next_rail_type() { - return; -} - -void mfish_unagi_aim_wind_angle_calc() { - return; -} - -void mfish_unagi_rail_move_init() { - return; -} - -void mfish_unagi_rail_move() { - return; -} - -void mfish_unagi_normal_to_reverse_init() { - return; -} - -void mfish_unagi_normal_to_reverse() { - return; -} - -void mfish_unagi_rail_move_reverse_init() { - return; -} - -void mfish_unagi_rail_move_reverse() { - return; -} - -void mfish_unagi_reverse_to_normal_init() { - return; -} - -void mfish_unagi_reverse_to_normal() { - return; -} - -void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_unagi_before_disp() { - return; -} - -void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_namazu_body_wind_anime_play() { - return; -} - -void mfish_namazu_normal_process_init() { - return; -} - -void mfish_namazu_normal_process() { - return; -} - -void mfish_namazu_dummy_process_init() { - return; -} - -void mfish_namazu_dummy_process() { - return; -} - -void mfish_namazu_turn_process_init() { - return; -} - -void mfish_namazu_turn_process() { - return; -} - -void mfish_namazu_ground_sweep_process_init() { - return; -} - -void mfish_namazu_ground_sweep_process() { - return; -} - -void mfish_namazu_base_FishMove() { - return; -} - -void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_namazu_before_disp() { - return; -} - -void mfish_namazu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_zarigani_normal_process_init() { - return; -} - -void mfish_zarigani_normal_process() { - return; -} - -void mfish_zarigani_wait_process_init() { - return; -} - -void mfish_zarigani_wait_process() { - return; -} - -void mfish_zarigani_stand_process_init() { - return; -} - -void mfish_zarigani_stand_process() { - return; -} - -void mfish_zarigani_jump_process_init() { - return; -} - -void mfish_zarigani_jump_process() { - return; -} - -void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_zarigani_before_disp() { - return; -} - -void mfish_zarigani_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_kurage_normal_init() { - return; -} - -void mfish_kurage_normal() { - return; -} - -void mfish_kurage_turn_init() { - return; -} - -void mfish_kurage_turn() { - return; -} - -void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_kurage_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_hasu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_hasu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_hasu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void hasu_before_disp() { - return; -} - -void hasu_after_disp() { - return; -} - -void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} +#include "../src/actor/ac_museum_fish_base.c_inc" +#include "../src/actor/ac_museum_fish_afish.c_inc" +#include "../src/actor/ac_museum_fish_aroana.c_inc" +#include "../src/actor/ac_museum_fish_koi.c_inc" +#include "../src/actor/ac_museum_fish_kaseki.c_inc" +#include "../src/actor/ac_museum_fish_bass.c_inc" +#include "../src/actor/ac_museum_fish_seafish.c_inc" +#include "../src/actor/ac_museum_fish_tai.c_inc" +#include "../src/actor/ac_museum_fish_small_fish.c_inc" +#include "../src/actor/ac_museum_fish_gupi.c_inc" +#include "../src/actor/ac_museum_fish_medaka.c_inc" +#include "../src/actor/ac_museum_fish_kingyo.c_inc" +#include "../src/actor/ac_museum_fish_dojou.c_inc" +#include "../src/actor/ac_museum_fish_donko.c_inc" +#include "../src/actor/ac_museum_fish_big_fish.c_inc" +#include "../src/actor/ac_museum_fish_ito.c_inc" +#include "../src/actor/ac_museum_fish_unagi.c_inc" +#include "../src/actor/ac_museum_fish_namazu.c_inc" +#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" diff --git a/src/actor/ac_museum_fish_afish.c_inc b/src/actor/ac_museum_fish_afish.c_inc new file mode 100644 index 00000000..1598921a --- /dev/null +++ b/src/actor/ac_museum_fish_afish.c_inc @@ -0,0 +1,49 @@ + +void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_afish_dummy_process_init() { + return; +} + +void mfish_afish_dummy_process() { + return; +} + +void mfish_afish_normal_process_init() { + return; +} + +void mfish_afish_normal_process() { + return; +} + +void mfish_afish_turn_process_init() { + return; +} + +void mfish_afish_turn_process() { + return; +} + +void mfish_afish_base_FishMove() { + return; +} + +void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_afish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_afish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} \ No newline at end of file diff --git a/src/actor/ac_museum_fish_aroana.c_inc b/src/actor/ac_museum_fish_aroana.c_inc new file mode 100644 index 00000000..9a09f09f --- /dev/null +++ b/src/actor/ac_museum_fish_aroana.c_inc @@ -0,0 +1,64 @@ + +void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_aroana_dummy_process_init() { + return; +} + +void mfish_aroana_dummy_process() { + return; +} + +void mfish_aroana_normal_process_init() { + return; +} + +void mfish_aroana_normal_process() { + return; +} + +void mfish_aroana_turn_process_init() { + return; +} + +void mfish_aroana_turn_process() { + return; +} + +void mfish_aroana_long_move_process_init() { + return; +} + +void mfish_aroana_long_move_process() { + return; +} + +void mfish_aroana_base_FishMove() { + return; +} + +void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} \ No newline at end of file diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc new file mode 100644 index 00000000..68b1343b --- /dev/null +++ b/src/actor/ac_museum_fish_base.c_inc @@ -0,0 +1,406 @@ +f32 Rnd_EX_f(f32 v) { + f32 rand1 = 2 * fqrand2(); + f32 rand2 = fqrand(); + if (rand2 > (rand1 * rand1)) { + if (rand1 > 0) { + rand1 = sqrtf(rand2); + } else { + rand1 = -sqrtf(rand2); + } + } + rand1 = (1.0f + rand1) * 0.5f; + return v * rand1; +} + +f32 Rnd_EX_fx(f32 v1) { + f32 rand1 = 2 * fqrand2(); + f32 rand2 = fqrand(); + if (rand2 > (rand1 * rand1)) { + if (rand1 > 0) { + rand1 = sqrtf(rand2); + } else { + rand1 = -sqrtf(rand2); + } + } + rand1 = rand1 / 2; + return v1 * rand1; +} + +void mfish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + f32 t; + xyz_t pos; + if (actor->_59C == 0x18 && actor->_34 != mfish_peck_process) { + actor->_5E8 *= actor->init_data._18; + } else { + add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, 0.025f); + } + + actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.z); + actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.z); + + add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4); + + mfish_move_smooth(actor, game); + mfish_get_flow_vec(&pos, actor, game); + actor->_5A0.y += actor->_5D0 + actor->_5DC.x; + actor->_5A0.z += actor->_5D0 + actor->_5DC.x; + actor->_5A0.y = actor->_5A0.y + actor->_5DC.y; + actor->_5A0.y = MAX(60, MIN(110, actor->_5A0.y)); +} + +int mfish_PosWallCheck(MUSEUM_FISH_PRIVATE_DATA* priv, xyz_t* pos) { + u32 flag = 0; + xyz_t p = suisou_pos[priv->_630]; + f32 a, b, c, d; + + if (priv->_630 < 4) { + a = priv->init_data._28 + 45; + b = priv->init_data._28 + 45; + c = priv->init_data._28 + 45; + d = priv->init_data._28 + 45; + } else { + a = priv->init_data._28 + 180; + b = priv->init_data._28 + 180; + c = priv->init_data._28 + 5; + d = priv->init_data._28 + 45; + } + + if (pos->x > p.x + a) { + flag |= 4; + } else if (pos->x < p.x - b) { + flag |= 2; + } + + if (pos->z > p.z + c) { + flag |= 8; + } else if (pos->z < p.z - d) { + flag |= 0x10; + } + + return flag; +} + +BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* prv) { + xyz_t p, p1; + + p = prv->_5A0; + + p.x += sin_s(prv->_60C.x) * (GETREG(TAKREG, 70) + 30.0f); + p.z += cos_s(prv->_60C.x) * (GETREG(TAKREG, 70) + 30.0f); + + p1 = p; + + return mfish_PosWallCheck(prv, &p1) ? TRUE : FALSE; +} + +s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv) { + s16 v = priv->_60C.z; + if (v > 0 || (priv->_630 == 2 && fqrand() < 0.8f)) { + if (v > DEG2SHORT_ANGLE(90)) { + v = DEG2SHORT_ANGLE(90) + DEG2SHORT_ANGLE(45 * fqrand()); + } else { + v = DEG2SHORT_ANGLE(90) - DEG2SHORT_ANGLE(45 * fqrand()); + } + } else { + if (v > DEG2SHORT_ANGLE(-90)) { + v = DEG2SHORT_ANGLE(-90) + DEG2SHORT_ANGLE(45 * fqrand()); + } else { + v = DEG2SHORT_ANGLE(-90) - DEG2SHORT_ANGLE(45 * fqrand()); + } + } + return v; +} + +void mfish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* prv) { + prv->_634 = mfish_get_hide_camera_angle(prv); + if (prv->_630 == 2 && prv->_60C.z < 0 && prv->_634 > 0) { + prv->_5F0 = MAX(prv->init_data._10, GETREG(TAKREG, 80) * 0.1f + 1.2f); + } + prv->_34 = mfish_dummy_process; +} + +void mfish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) { + // no clue what's going on here + add_calc_short_angle2(&actor->_612.z, actor->_634, CALC_EASE2(0.0f), DEG2SHORT_ANGLE(3.75f), 0x2d); + actor->_622 = add_calc_short_angle2(&actor->_60C.z, actor->_612.z, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d); + + if (actor->_630 == 2) { + if (actor->_612.z < 0) { + actor->_626--; + } else { + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.05f); + add_calc0(&actor->_5F0, 0.05f, 0.1f); + } + } +} + +void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { + f32 ra; + f32 t; + f32 temp; + + ra = fqrand() * fishActor->init_data._14 + fishActor->init_data._10; + t = (ra) / MAX(fishActor->init_data._14 + fishActor->init_data._10, 1); + + if (ra > fishActor->_5E8) { + fishActor->_5F0 = ra; + } + + fishActor->_5F4 = Rnd_EX_fx(10.0f) * t; + + fishActor->_612.x = + atans_table(fishActor->_5E8, fishActor->_5F4 + fishActor->init_data._0C - fishActor->_5A0.y) >> 4; + fishActor->_5D4 = 0; + + if (fqrand() > fishActor->init_data._1C) { + int diff; + + fishActor->_612.z += (s16)Rnd_EX_fx(fishActor->init_data._30 * 2.0f); + diff = fishActor->_612.z - fishActor->_60C.z; + if (ABS((s16)diff) < DEG2SHORT_ANGLE(20)) { + if ((s16)diff > 0) { + fishActor->_612.z += DEG2SHORT_ANGLE(20); + } else { + fishActor->_612.z += DEG2SHORT_ANGLE(-20); + } + } + + fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 20); + } else { + if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) { + fishActor->_612.z += DEG2SHORT_ANGLE(15); + } else { + fishActor->_612.z += DEG2SHORT_ANGLE(-15); + } + + fishActor->_632 = DEG2SHORT_ANGLE((GETREG(TAKREG, 42) + 40.0f) * t + 30); + } + if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) { + fishActor->_636 = DEG2SHORT_ANGLE(0); + } else { + fishActor->_636 = DEG2SHORT_ANGLE(-180); + } + + fishActor->_62E &= ~0xC0; + fishActor->_34 = mfish_normal_process; +} + +void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor) { + if (actor->_632 > DEG2SHORT_ANGLE(20)) { + add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.2f), + (((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.04f + 0.1f) * 0.5f, 0.05f); + } else if (actor->_626 > actor->_628 - 10) { + add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.5f), 0.75f, 0.05f); + } + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); + actor->_636 += DEG2SHORT_ANGLE(10.0f); + actor->_622 = add_calc_short_angle2(&actor->_60C.z, actor->_612.z + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(0.5f), DEG2SHORT_ANGLE(6.25f), 45); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(3.75f), 45); + + if (actor->_5E8 < 0.01f || actor->_630 == 2 && actor->_5E8 < 0.05f) { + mfish_dummy_process_init(actor); + } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { + if ((s16)(actor->_60C.z - actor->_62C) > 0) { + actor->_612.z = actor->_62C + DEG2SHORT_ANGLE(112.5f); + } else { + actor->_612.z = actor->_62C - DEG2SHORT_ANGLE(112.5f); + } + actor->_632 = 0; + } +} + +void mfish_turn_process_init() { + return; +} + +void mfish_turn_process() { + return; +} + +void mfish_peck_process_init() { + return; +} + +void mfish_peck_process() { + return; +} + +void mfish_ground_peck_process_init() { + return; +} + +void mfish_ground_peck_process() { + return; +} + +void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + YET_SKELETON* huh = &actor->_38; + // looks like it loads from 0x38, which i labeled as the skeleton, + // but then it adds like 0x514 to it, so this must be huge + + // cKF_SkeletonInfo_R_ct(&huh->_00, huh->_00); //TODO + return; +} + +void mfish_onefish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + cKF_SkeletonInfo_R_play(&actor->_38._00); + return; +} + +int mfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg, + s_xyz* joint1, xyz_t* trans) { + + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (joint_num == 2) { + int v, t; + + if (actor->_630 != 4) { + v = 2; + } else if (actor->init_data._20 > 0.7f) { + v = 1; + } else if (actor->init_data._20 > 0.5f) { + v = 2; + } else { + v = 3; + } + + t = joint1->y - (actor->_61C * v); + joint1->y = MY_CLAMP(t, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); + t = joint1->x - (actor->_61C >> 1); + joint1->x = MY_CLAMP(t, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25)); + } + return 1; +} + +void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + YET_SKELETON* skele; + Mtx* mtx; + GAME_PLAY* play; + GRAPH* graph; + + play = (GAME_PLAY*)gamex; + skele = &actor->_38; + + if (play->game.frame_counter % 2 != 0) { + mtx = &skele->_70; + } else { + mtx = &skele->_2b0; + } + + graph = play->game.graph; + + Matrix_translate(actor->_5A0.x, actor->_5A0.y + actor->_5AC.y, actor->_5A0.z, 0); + Matrix_RotateY(actor->_60C.z, 1); + + Matrix_translate(0.0f, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1); + Matrix_RotateX(actor->_60C.x, 1); + Matrix_RotateZ(MY_CLAMP(-(actor->_61C >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); + Matrix_translate(0.0f, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + + OPEN_DISP(graph); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + CLOSE_DISP(graph); + + cKF_Si3_draw_R_SV(&play->game, &skele->_00, mtx, &mfish_before_disp, 0, actor); +} + +void mfish_ani_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void Museum_Fish_BigFishObjCheck() { + return; +} + +void Museum_Fish_ObjBGCheck() { + return; +} + +void Museum_Fish_DonkoBGCheck() { + return; +} + +void Museum_Fish_objchk_pos_set() { + return; +} + +void Museum_Fish_BGCheck() { + return; +} + +void Museum_Fish_Kusa_Check() { + static int kusa_group_tbl[14] = { 0, 2, 1, 3, 3, 4, 4, 4, 4, 4, 0, 2, 1, 3 }; +} + +void Museum_Fish_Object_Check() { + return; +} + +void mfish_body_wind_anime_play() { + return; +} + +void mfish_get_player_angle() { + return; +} + +void mfish_peck_check() { + return; +} + +void mfish_peck_wall_check() { + return; +} + +void mfish_ground_peck_before_check() { + return; +} + +void mfish_get_player_area() { + return; +} + +void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + return; +} + +void mfish_get_escape_angle() { + return; +} + +void mfish_move_smooth() { + return; +} + +void mfish_hamon_make() { + return; +} diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc new file mode 100644 index 00000000..20e44707 --- /dev/null +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -0,0 +1,286 @@ + +void mfish_bass_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) { + if (r4 == 0) { + actor->_640 = 0xf; + actor->_5AC.z = 4; + } else if (r4 == 1 && actor->_640 == 0) { + actor->_640 = 0x14; + actor->_5AC.z = 3; + } +} + +void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + f32 t; + xyz_t pos; + add_calc2(&actor->_5E8, actor->_5AC.x, 1 - actor->init_data._18, 0.01f + 0.001f * GETREG(TAKREG, 20)); + actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.z); + actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.z); + + add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); + t = add_calc(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4, 0); + if (fabsf(t) < 0.08f) { + add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.03f), DEG2SHORT_ANGLE(1.0f + (0.5f * actor->_5AC.y)) >> 1, + 9); + } + mfish_move_smooth(actor, game); + mfish_get_flow_vec(&pos, actor, game); + actor->_5A0.y += actor->_5D0 + actor->_5DC.x; + actor->_5A0.z += actor->_5D0 + actor->_5DC.x; + actor->_5A0.y = actor->_5A0.y + actor->_5DC.y; + actor->_5A0.y = MAX(60, MIN(110, actor->_5A0.y)); +} + +void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + actor->_634 = mfish_get_hide_camera_angle(actor); + + if ((actor->_62E & 0x1E) != 0) { + // works with temp instead of cast + if ((s16)(actor->_612.z - actor->_62C) > 0) { + actor->_634 = actor->_62C + DEG2SHORT_ANGLE(90); + } else { + actor->_634 = actor->_62C - DEG2SHORT_ANGLE(90); + } + } else { + add_calc_short_angle2(&actor->_634, actor->_612.z, CALC_EASE(0.5f), DEG2SHORT_ANGLE(22.5), 0x5b); + } + + actor->_5EC = 0.0f; + actor->_34 = &mfish_bass_dummy_process; + + return; +} + +void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) { + // no clue what's going on here + add_calc_short_angle2(&actor->_612.z, actor->_634, CALC_EASE2(0.0f), 0x1c7, 0x2d); + actor->_622 = add_calc_short_angle2(&actor->_60C.z, actor->_612.z, CALC_EASE2(0.25f), 0xe3, 0x2d); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.25f), 0xe3, 0x2d); +} + +void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { + f32 ra; + f32 t; + f32 temp; + + ra = fqrand() * fishActor->init_data._14 + fishActor->init_data._10; + t = (ra) / MAX(fishActor->init_data._14 + fishActor->init_data._10, 1); + + if (fqrand() > 0.25f && !(fishActor->_62E & 0x200)) { + fishActor->_62E |= 0x200; + } else { + fishActor->_62E &= ~0x200; + } + + if (ra > fishActor->_5E8) { + f32 v2; + fishActor->_5F0 = ra; + fishActor->_5AC.x = 0.15f + Rnd_EX_fx(0.1f); + mfish_bass_tail_anim_set(fishActor, 0); + } + + fishActor->_5F4 = t * Rnd_EX_fx(10); + temp = (fishActor->_5F4 + fishActor->init_data._0C - fishActor->_5A0.y); + fishActor->_612.x = DEG2SHORT_ANGLE2(temp * -(2 * fishActor->_5AC.y + 10)); + + fishActor->_612.x = CLAMP(fishActor->_612.x, DEG2SHORT_ANGLE(-50), DEG2SHORT_ANGLE(50)); + fishActor->_5D4 = 0; + + if (fqrand() > fishActor->init_data._1C) { + int diff; + + fishActor->_612.z += (s16)Rnd_EX_fx(fishActor->init_data._30 * 2.0f); + diff = fishActor->_612.z - fishActor->_60C.z; + if (ABS((s16)diff) < DEG2SHORT_ANGLE(20)) { + if ((s16)diff > 0) { + fishActor->_612.z += DEG2SHORT_ANGLE(20); + } else { + fishActor->_612.z += DEG2SHORT_ANGLE(-20); + } + } + + if ((fishActor->_62E & 0x200) == 0) { + fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 20); + } else { + fishActor->_632 = DEG2SHORT_ANGLE(t * 30 + 20); + } + } else { + if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) { + fishActor->_612.z += DEG2SHORT_ANGLE(15); + } else { + fishActor->_612.z += DEG2SHORT_ANGLE(-15); + } + + if ((fishActor->_62E & 0x200) == 0) { + fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 20); + } else { + fishActor->_632 = DEG2SHORT_ANGLE((GETREG(TAKREG, 42) + 40.0f) * t + 30); + } + } + if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) { + fishActor->_636 = DEG2SHORT_ANGLE(0); + } else { + fishActor->_636 = DEG2SHORT_ANGLE(-180); + } + + fishActor->_62E &= ~0xC0; + fishActor->_5EC = 0; + fishActor->_34 = mfish_bass_normal_process; +} + +void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor) { + if (((actor->_62E & 0x200) != 0 && actor->_632 > DEG2SHORT_ANGLE(20)) || actor->_640 > 0) { + f32 v = (actor->_5AC.y * 0.03f + 0.02f); + add_calc2(&actor->_5EC, + v + (actor->_5AC.y * 0.02f + 0.03f) * (float)((actor->_632 - DEG2SHORT_ANGLE(20)) / 364), + actor->_5AC.y * 0.04f + 0.01f, actor->_5AC.y * 0.02f + 0.01f); + add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(v), actor->_5EC * 0.5f, 0.02f); + } + if (actor->_62E & 0x200) { + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(GETREG(TAKREG, 73) * 0.1f + 4.0f), + (s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 73) * 0.1f + 4.0f) >> 1) >> 1, 45); + actor->_636 = actor->_636 + (s16)DEG2SHORT_ANGLE2( + (3.0f * actor->_5E8) / (actor->init_data._14 + actor->init_data._10) + 9.0f); + } else { + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), 227, 45); + actor->_636 += DEG2SHORT_ANGLE(10); + } + actor->_622 = add_calc_short_angle2(&actor->_60C.z, actor->_612.z + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(actor->_5AC.y * 0.25f + 0.25f), + (s16)(DEG2SHORT_ANGLE(actor->_5AC.y * 15.0f + 10.0f) >> 1) >> 1, 22); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(actor->_5AC.y * 0.25f + 0.25f), + (s16)(DEG2SHORT_ANGLE(actor->_5AC.y * 8.0f + 7.0f) >> 1) >> 1, 22); + + if (actor->_5E8 < 0.01f) { + mfish_bass_dummy_process_init(actor); + } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { + if ((s16)(actor->_60C.z - actor->_62C) > 0) { + actor->_612.z = actor->_62C + DEG2SHORT_ANGLE(112.5f); + } else { + actor->_612.z = actor->_62C - DEG2SHORT_ANGLE(112.5f); + } + actor->_632 = 0; + } +} + +void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + s16 a; + s16 b; + + b = a = 0x2000 + DEG2SHORT_ANGLE(fqrand() * 75.0f); + actor->_61A = + DEG2SHORT_ANGLE((actor->_5AC.y * 4.0f + 4.0f) * (SHORT2DEG_ANGLE2(a) / 120.0f) + 2.0f + actor->_5AC.y); + if (actor->_62E & 0x1e) { + if ((s16)(actor->_60C.x - actor->_62C) < 0) { + b = -a; + } + } else if (actor->_62E & 0xC0) { + if (actor->_62E & 0x40) { + b = ABS(a); + } else { + b = -ABS(a); + } + } else if (actor->_62E & 0x20) { + if ((s16)(actor->_62A - actor->_60C.x) < 0) { + b = -a; + } + } + + if (b > 0) { + actor->_62E |= 0x40; + } else { + actor->_62E |= 0x80; + } + + actor->_612.z += b; + + if ((fqrand() < 0.25f) && (actor->_62E & 0x200) == 0) { + actor->_62E |= 0x200; + } else { + actor->_62E &= ~0x200; + } + + if ((actor->_62E & 0x200) == 0) { + actor->_5F0 = 1.75f; + actor->_5AC.x = Rnd_EX_fx(0.1f) + 0.15f; + } else { + actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.7f; + actor->_5AC.x = Rnd_EX_fx(0.1f) + 0.15f; + } + + if (fqrand() < 0.2f) { + actor->_63E = (s16)(fqrand() * 3.0f + 1.0f); + } else { + actor->_63E = 0; + } + + actor->_5EC = 0.0f; + actor->_34 = mfish_bass_turn_process; +} + +void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor) { + int a; + if (ABS(actor->_622) > DEG2SHORT_ANGLE(20)) {} +} + +void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + + mfish_onefish_ct(actor, gamex); + mfish_base_ct(actor, gamex); + + actor->_34 = mfish_bass_normal_process; + + if (actor->_59C == 7) { + actor->_5AC.y = 0; + } else if (actor->_59C == 6) { + actor->_5AC.y = 0.5f; + } else { + actor->_5AC.y = 1; + } + + actor->_624 = 0xb; + + return; +} + +void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + YET_SKELETON* skele; + Mtx* mtx; + GRAPH* graph; + GAME_PLAY* play; + + play = (GAME_PLAY*)gamex; + + skele = &actor->_38; + + if (play->game.frame_counter % 2 != 0) { + mtx = &skele->_70; + } else { + mtx = &skele->_2b0; + } + + graph = play->game.graph; + + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_RotateY(actor->_60C.z, 1); + + Matrix_translate(0, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1); + Matrix_RotateX(actor->_60C.x, 1); + Matrix_RotateZ(MY_CLAMP(-(actor->_61C >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); + Matrix_translate(0, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + + OPEN_DISP(graph); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + CLOSE_DISP(graph); + + cKF_Si3_draw_R_SV(&play->game, &skele->_00, mtx, &mfish_before_disp, 0, actor); + return; +} diff --git a/src/actor/ac_museum_fish_big_fish.c_inc b/src/actor/ac_museum_fish_big_fish.c_inc new file mode 100644 index 00000000..748303c4 --- /dev/null +++ b/src/actor/ac_museum_fish_big_fish.c_inc @@ -0,0 +1,22 @@ + +void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} diff --git a/src/actor/ac_museum_fish_dojou.c_inc b/src/actor/ac_museum_fish_dojou.c_inc new file mode 100644 index 00000000..44047c30 --- /dev/null +++ b/src/actor/ac_museum_fish_dojou.c_inc @@ -0,0 +1,38 @@ + +void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_dojou_normal_init() { + return; +} + +void mfish_dojou_normal() { + return; +} + +void mfish_dojou_turn_init() { + return; +} + +void mfish_dojou_turn() { + return; +} + +void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} diff --git a/src/actor/ac_museum_fish_donko.c_inc b/src/actor/ac_museum_fish_donko.c_inc new file mode 100644 index 00000000..a03d40e2 --- /dev/null +++ b/src/actor/ac_museum_fish_donko.c_inc @@ -0,0 +1,22 @@ + +void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_donko_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, + void* arg, s_xyz* joint1, xyz_t* trans) { + return; +} + +void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} diff --git a/src/actor/ac_museum_fish_gupi.c_inc b/src/actor/ac_museum_fish_gupi.c_inc new file mode 100644 index 00000000..db34b40a --- /dev/null +++ b/src/actor/ac_museum_fish_gupi.c_inc @@ -0,0 +1,38 @@ + +void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_gupi_normal_init() { + return; +} + +void mfish_gupi_normal() { + return; +} + +void mfish_gupi_turn_init() { + return; +} + +void mfish_gupi_turn() { + return; +} + +void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_gupi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} \ No newline at end of file diff --git a/src/actor/ac_museum_fish_hasu.c_inc b/src/actor/ac_museum_fish_hasu.c_inc new file mode 100644 index 00000000..fb6f7350 --- /dev/null +++ b/src/actor/ac_museum_fish_hasu.c_inc @@ -0,0 +1,44 @@ + +void mfish_hasu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_hasu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_hasu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void hasu_after_disp() { + return; +} + +void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} diff --git a/src/actor/ac_museum_fish_ito.c_inc b/src/actor/ac_museum_fish_ito.c_inc new file mode 100644 index 00000000..d17cfb27 --- /dev/null +++ b/src/actor/ac_museum_fish_ito.c_inc @@ -0,0 +1,22 @@ + +void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} diff --git a/src/actor/ac_museum_fish_kaseki.c_inc b/src/actor/ac_museum_fish_kaseki.c_inc new file mode 100644 index 00000000..ff53dc1c --- /dev/null +++ b/src/actor/ac_museum_fish_kaseki.c_inc @@ -0,0 +1,34 @@ + +void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kaseki_normal_init() { + return; +} + +void mfish_kaseki_normal() { + return; +} + +void mfish_kaseki_move_wall_smooth() { + return; +} + +void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} \ No newline at end of file diff --git a/src/actor/ac_museum_fish_kingyo.c_inc b/src/actor/ac_museum_fish_kingyo.c_inc new file mode 100644 index 00000000..7021c6fa --- /dev/null +++ b/src/actor/ac_museum_fish_kingyo.c_inc @@ -0,0 +1,46 @@ + +void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kingyo_normal_init() { + return; +} + +void mfish_kingyo_normal() { + return; +} + +void mfish_kingyo_turn_init() { + return; +} + +void mfish_kingyo_turn() { + return; +} + +void mfish_kingyo_peck_init() { + return; +} + +void mfish_kingyo_peck() { + return; +} + +void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} \ No newline at end of file diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc new file mode 100644 index 00000000..1a2621a8 --- /dev/null +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -0,0 +1,80 @@ + +void mfish_koi_tail_anim_set() { + return; +} + +void mfish_koi_move_smooth() { + return; +} + +void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_koi_dummy_process_init() { + return; +} + +void mfish_koi_dummy_process() { + return; +} + +void mfish_koi_normal_process_init() { + return; +} + +void mfish_koi_normal_process() { + return; +} + +void mfish_koi_turn_process_init() { + return; +} + +void mfish_koi_turn_process() { + return; +} + +void mfish_koi_peck_process_init() { + return; +} + +void mfish_koi_peck_process() { + return; +} + +void mfish_koi_long_move_process_init() { + return; +} + +void mfish_koi_long_move_process() { + return; +} + +void mfish_koi_base_FishMove() { + return; +} + +void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} \ No newline at end of file diff --git a/src/actor/ac_museum_fish_kurage.c_inc b/src/actor/ac_museum_fish_kurage.c_inc new file mode 100644 index 00000000..4db0864f --- /dev/null +++ b/src/actor/ac_museum_fish_kurage.c_inc @@ -0,0 +1,33 @@ + +void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kurage_normal_init() { + return; +} + +void mfish_kurage_normal() { + return; +} + +void mfish_kurage_turn_init() { + return; +} + +void mfish_kurage_turn() { + return; +} + +void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_kurage_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} diff --git a/src/actor/ac_museum_fish_medaka.c_inc b/src/actor/ac_museum_fish_medaka.c_inc new file mode 100644 index 00000000..95c6756c --- /dev/null +++ b/src/actor/ac_museum_fish_medaka.c_inc @@ -0,0 +1,38 @@ + +void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_medaka_normal_init() { + return; +} + +void mfish_medaka_normal() { + return; +} + +void mfish_medaka_turn_init() { + return; +} + +void mfish_medaka_turn() { + return; +} + +void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} \ No newline at end of file diff --git a/src/actor/ac_museum_fish_namazu.c_inc b/src/actor/ac_museum_fish_namazu.c_inc new file mode 100644 index 00000000..2fe67e6a --- /dev/null +++ b/src/actor/ac_museum_fish_namazu.c_inc @@ -0,0 +1,61 @@ + +void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_namazu_body_wind_anime_play() { + return; +} + +void mfish_namazu_normal_process_init() { + return; +} + +void mfish_namazu_normal_process() { + return; +} + +void mfish_namazu_dummy_process_init() { + return; +} + +void mfish_namazu_dummy_process() { + return; +} + +void mfish_namazu_turn_process_init() { + return; +} + +void mfish_namazu_turn_process() { + return; +} + +void mfish_namazu_ground_sweep_process_init() { + return; +} + +void mfish_namazu_ground_sweep_process() { + return; +} + +void mfish_namazu_base_FishMove() { + return; +} + +void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_namazu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} diff --git a/src/actor/ac_museum_fish_seafish.c_inc b/src/actor/ac_museum_fish_seafish.c_inc new file mode 100644 index 00000000..c1f83683 --- /dev/null +++ b/src/actor/ac_museum_fish_seafish.c_inc @@ -0,0 +1,38 @@ + +void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_seafish_normal_init() { + return; +} + +void mfish_seafish_normal() { + return; +} + +void mfish_seafish_turn_init() { + return; +} + +void mfish_seafish_turn() { + return; +} + +void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} \ No newline at end of file diff --git a/src/actor/ac_museum_fish_small_fish.c_inc b/src/actor/ac_museum_fish_small_fish.c_inc new file mode 100644 index 00000000..82a8a8cf --- /dev/null +++ b/src/actor/ac_museum_fish_small_fish.c_inc @@ -0,0 +1,38 @@ + +void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_sfish_normal_init() { + return; +} + +void mfish_sfish_normal() { + return; +} + +void mfish_sfish_turn_init() { + return; +} + +void mfish_sfish_turn() { + return; +} + +void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, + void* arg, s_xyz* joint1, xyz_t* trans) { + return; +} + +void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} \ No newline at end of file diff --git a/src/actor/ac_museum_fish_tai.c_inc b/src/actor/ac_museum_fish_tai.c_inc new file mode 100644 index 00000000..f42625c2 --- /dev/null +++ b/src/actor/ac_museum_fish_tai.c_inc @@ -0,0 +1,38 @@ + +void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_tai_normal_init() { + return; +} + +void mfish_tai_normal() { + return; +} + +void mfish_tai_turn_init() { + return; +} + +void mfish_tai_turn() { + return; +} + +void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} \ No newline at end of file diff --git a/src/actor/ac_museum_fish_unagi.c_inc b/src/actor/ac_museum_fish_unagi.c_inc new file mode 100644 index 00000000..fa7e7ace --- /dev/null +++ b/src/actor/ac_museum_fish_unagi.c_inc @@ -0,0 +1,62 @@ + +void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_unagi_get_next_rail_type() { + return; +} + +void mfish_unagi_aim_wind_angle_calc() { + return; +} + +void mfish_unagi_rail_move_init() { + return; +} + +void mfish_unagi_rail_move() { + return; +} + +void mfish_unagi_normal_to_reverse_init() { + return; +} + +void mfish_unagi_normal_to_reverse() { + return; +} + +void mfish_unagi_rail_move_reverse_init() { + return; +} + +void mfish_unagi_rail_move_reverse() { + return; +} + +void mfish_unagi_reverse_to_normal_init() { + return; +} + +void mfish_unagi_reverse_to_normal() { + return; +} + +void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} \ No newline at end of file diff --git a/src/actor/ac_museum_fish_zarigani.c_inc b/src/actor/ac_museum_fish_zarigani.c_inc new file mode 100644 index 00000000..5c6ba6fd --- /dev/null +++ b/src/actor/ac_museum_fish_zarigani.c_inc @@ -0,0 +1,54 @@ + +void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void mfish_zarigani_normal_process_init() { + return; +} + +void mfish_zarigani_normal_process() { + return; +} + +void mfish_zarigani_wait_process_init() { + return; +} + +void mfish_zarigani_wait_process() { + return; +} + +void mfish_zarigani_stand_process_init() { + return; +} + +void mfish_zarigani_stand_process() { + return; +} + +void mfish_zarigani_jump_process_init() { + return; +} + +void mfish_zarigani_jump_process() { + return; +} + +void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} + +void 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) { + return; +} + +void mfish_zarigani_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + GAME_PLAY* game = (GAME_PLAY*)gamex; + return; +} \ No newline at end of file From 603b806191393ae0cc24b3a151438708e92571f6 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sun, 24 Nov 2024 18:31:24 -0500 Subject: [PATCH 06/33] koi progress --- src/actor/ac_museum_fish_koi.c_inc | 38 ++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index 1a2621a8..24b675d9 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -1,6 +1,29 @@ - -void mfish_koi_tail_anim_set() { - return; +void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) { + f32 temp; + if (r4 == 0) { + actor->_640 = (int)(6.0f * fqrand()) + 25; + //! BUG: fqrand2 called without being used + // Maybe some kind of min-max macro, where we're multiplying fqrand2 by 0 (temp - temp), + // but including fqrand2() directly in the equation below generates extra fmuls instr for some reason. + // The only way around it we found was to call it like this. + fqrand2(); + temp = 6.5f; + actor->_5AC.x = temp + (f32)(temp - temp); + } else if (r4 == 1) { + if (actor->_640 == 0) { + actor->_640 = (int)(4.0f * fqrand()) + 20; + //! BUG: fqrand2 called without being used (see context above) + fqrand2(); + temp = 5.0f; + actor->_5AC.x = temp + (f32)(temp - temp); + } + } else if (actor->_640 == 0) { + actor->_640 = (int)(6.0f * fqrand()) + 45; + //! BUG: fqrand2 called without being used (see context above) + fqrand2(); + temp = 1.0f; + actor->_5AC.x = temp + (f32)(temp - temp); + } } void mfish_koi_move_smooth() { @@ -9,7 +32,14 @@ void mfish_koi_move_smooth() { void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + + mfish_onefish_ct(actor, gamex); + mfish_base_ct(actor, gamex); + + actor->_34 = mfish_koi_normal_process; + actor->_5E8 = actor->init_data._10; + actor->_5AC.z = 1.0f; + actor->_624 = 9; } void mfish_koi_dummy_process_init() { From 4576a7245bf2ba666b9486d7d457cf209c9a094a Mon Sep 17 00:00:00 2001 From: roeming Date: Mon, 2 Dec 2024 18:50:28 -0500 Subject: [PATCH 07/33] assorted mfish progress --- include/ac_museum_fish.h | 80 ++- src/actor/ac_museum_fish.c | 30 +- src/actor/ac_museum_fish_afish.c_inc | 7 +- src/actor/ac_museum_fish_aroana.c_inc | 9 +- src/actor/ac_museum_fish_base.c_inc | 695 +++++++++++++++++++--- src/actor/ac_museum_fish_bass.c_inc | 105 +++- src/actor/ac_museum_fish_big_fish.c_inc | 1 + src/actor/ac_museum_fish_dojou.c_inc | 2 + src/actor/ac_museum_fish_donko.c_inc | 1 + src/actor/ac_museum_fish_gupi.c_inc | 5 +- src/actor/ac_museum_fish_ito.c_inc | 1 + src/actor/ac_museum_fish_kaseki.c_inc | 3 +- src/actor/ac_museum_fish_kingyo.c_inc | 5 +- src/actor/ac_museum_fish_koi.c_inc | 35 +- src/actor/ac_museum_fish_medaka.c_inc | 4 +- src/actor/ac_museum_fish_seafish.c_inc | 3 +- src/actor/ac_museum_fish_small_fish.c_inc | 4 +- src/actor/ac_museum_fish_tai.c_inc | 7 +- src/actor/ac_museum_fish_unagi.c_inc | 4 +- 19 files changed, 834 insertions(+), 167 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 2a075235..26651ded 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -17,16 +17,10 @@ typedef struct _FISH_PRIVATE_DATA; typedef void (*PRIV_FISH_CONSTRUCTOR)(struct _FISH_PRIVATE_DATA*, GAME*); typedef void (*PRIV_FISH_MOVE)(struct _FISH_PRIVATE_DATA*, GAME*); typedef void (*PRIV_FISH_DRAW)(struct _FISH_PRIVATE_DATA*, GAME*); +typedef void (*PRIV_FISH_PROCESS)(struct _FISH_PRIVATE_DATA*, GAME*); // unsure temp structs -typedef struct _YET_SKELETON { - cKF_SkeletonInfo_R_c _00; - Mtx _70; - u8 padding[0x200]; - Mtx _2b0; -} YET_SKELETON; - typedef struct _MUSEUM_FISH_INIT_DATA { f32 _00; f32 _04; @@ -44,18 +38,41 @@ typedef struct _MUSEUM_FISH_INIT_DATA { s16 _30; } MUSEUM_FISH_INIT_DATA; // size: 0x34 +#define artificial_padding(currentOffset, lastOffset, typeOfLastMember) \ + u8 __##currentOffset##padding[currentOffset - lastOffset - sizeof(typeOfLastMember)] + +#define offsetof(structName, memberName) ((size_t) & (((structName*)0)->memberName)) + +typedef struct _YET_SKELETON { + cKF_SkeletonInfo_R_c _00; + Mtx _70; // offset A8 + artificial_padding(0x2b0, 0x70, Mtx); + Mtx _2b0; + artificial_padding(0x46C, 0x2b0, Mtx); + void* _46C; + + artificial_padding(0x4F0, 0x46C, void*); + s_xyz _4F0; + artificial_padding(0x514, 0x4F0, s_xyz); + s_xyz _514; + artificial_padding(0x54C, 0x514, s_xyz); + void* _54C; + void* _550; +} YET_SKELETON; + typedef struct _FISH_PRIVATE_DATA { MUSEUM_FISH_INIT_DATA init_data; - void* _34; // function pointer to dummy_process function + PRIV_FISH_PROCESS _34; // size:4 YET_SKELETON _38; - void* _4A4; - void* _584; - void* _588; + void* _590; + s32 _594; + s32 _598; s32 _59C; // fish num xyz_t _5A0; xyz_t _5AC; xyz_t _5B8; + artificial_padding(0x5D0, 0x5B8, xyz_t); f32 _5D0; f32 _5D4; f32 _5D8; @@ -64,10 +81,18 @@ typedef struct _FISH_PRIVATE_DATA { f32 _5EC; f32 _5F0; f32 _5F4; - s_xz _60C; - s_xz _612; + f32 _5F8; + f32 _5FC; + f32 _600; + f32 _604; + f32 _608; + s_xyz _60C; + s_xyz _612; + artificial_padding(0x61A, 0x612, s_xyz); s16 _61A; s16 _61C; + s16 _61E; + s16 _620; s16 _622; s16 _624; s16 _626; @@ -79,6 +104,9 @@ typedef struct _FISH_PRIVATE_DATA { s16 _632; s16 _634; s16 _636; + s16 _638; + s16 _63A; + s16 _63C; s16 _63E; s16 _640; } MUSEUM_FISH_PRIVATE_DATA; @@ -155,14 +183,14 @@ BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* priv); s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv); void mfish_dummy_process_init(); void mfish_dummy_process(); -void mfish_normal_process_init(); -void mfish_normal_process(); -void mfish_turn_process_init(); -void mfish_turn_process(); -void mfish_peck_process_init(); -void mfish_peck_process(); -void mfish_ground_peck_process_init(); -void mfish_ground_peck_process(); +void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor); +void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor); +void mfish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_ground_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_ground_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); @@ -173,17 +201,17 @@ void mfish_ani_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void Museum_Fish_BigFishObjCheck(); -void Museum_Fish_ObjBGCheck(); +void Museum_Fish_ObjBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex, f32 f1, f32 f2); void Museum_Fish_DonkoBGCheck(); void Museum_Fish_objchk_pos_set(); -void Museum_Fish_BGCheck(); +void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void Museum_Fish_Kusa_Check(); void Museum_Fish_Object_Check(); void mfish_body_wind_anime_play(); void mfish_get_player_angle(); -void mfish_peck_check(); -void mfish_peck_wall_check(); -void mfish_ground_peck_before_check(); +BOOL mfish_peck_check(); +BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +BOOL mfish_ground_peck_before_check(); void mfish_get_player_area(); void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_get_escape_angle(); diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index da61f71e..01944472 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -12,6 +12,7 @@ #include "m_debug_mode.h" #include "libforest/gbi_extensions.h" #include "m_rcp.h" +#include "ac_gyoei.h" // found useful macros #define MY_MAX(a, b) (((a) >= (b)) ? (a) : (b)) @@ -21,6 +22,10 @@ #define CALC_EASE(x) (1 - sqrtf(1 - (x))) #define CALC_EASE2(x) CALC_EASE(CALC_EASE(x)) #define SHORT2DEG_ANGLE2(x) ((x) * (360.0f / 65536.0f)) +#define RANDOMF_RANGE(min, max) ((f32)(min) + (f32)RANDOM_F((f32)(max) - (f32)(min))) +#define RANDOM2F_RANGE(min, max) ((f32)(min) + (f32)RANDOM2_F((f32)(max) - (f32)(min))) +#define RANDOM_RANGE(min, max) ((int)(min) + (int)RANDOM((int)(max) - (int)(min))) +#define RANDOM2_RANGE(min, max) ((int)(min) + (int)RANDOM2((int)(max) - (int)(min))) // delete this stuff later typedef Mtx; @@ -678,10 +683,10 @@ void Museum_Fish_Prv_data_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, int actor->_5A0 = ZeroVec; } - actor->_5A0.y = mfish_init_data[fishNum]._0C + fqrand2() * 10.0f; + actor->_5A0.y = mfish_init_data[fishNum]._0C + RANDOM2_F(10); if (r6 == 1) { - actor->_5A0.x += fqrand2() * 90.0f; - actor->_5A0.z += fqrand2() * 90.0f; + actor->_5A0.x += RANDOM2_F(90); + actor->_5A0.z += RANDOM2_F(90); } actor->_34 = &mfish_normal_process; mfish_ct[fishNum](actor, game); @@ -721,16 +726,16 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) { for (i = 0; i < 40; i++, prv++) { prv->_62E &= ~1; if (mMmd_FishInfo(i)) { - prv->_584 = mfish_model_tbl[i]; - prv->_588 = mfish_anime_init_tbl[i]; + prv->_38._550 = mfish_model_tbl[i]; + prv->_38._550 = mfish_anime_init_tbl[i]; prv->_62E |= 1; Museum_Fish_Prv_data_init(prv, gamex, i, 1); } } for (i = 0; i < 20; i++) { - actor->_14d50[i] = 40.0f + 80.0f * fqrand(); - actor->_14d78[i] = 2.0f + 3.0f * fqrand(); + actor->_14d50[i] = RANDOMF_RANGE(80, 120); + actor->_14d78[i] = RANDOMF_RANGE(2, 5); } } @@ -915,7 +920,7 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { for (i = 0; i < 40; i++, prv++) { f32 v = search_position_distanceXZ(&p, &prv->_5A0); if (actor->_14db4 == prv->_630 && v < 60.0f) { - prv->_626 = fqrand() * 60.0f; + prv->_626 = RANDOM_F(60); } } } @@ -947,11 +952,10 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { suisou_awa_group[i], 0); if (actor->_14d78[i] > 0) { actor->_14d78[i]--; - - actor->_14d50[i] = fqrand() * 8 + 2; + actor->_14d50[i] = RANDOMF_RANGE(2, 10); } else { - actor->_14d50[i] = fqrand() * 160 + 80; - actor->_14d78[i] = fqrand() * 3 + 2; + actor->_14d50[i] = RANDOMF_RANGE(160, 240); + actor->_14d78[i] = RANDOMF_RANGE(2, 5); } } } @@ -971,7 +975,7 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { for (i = 0; i < 5; i++) { if (i == 2) { - actor->_14d78[i] += (s16)DEG2SHORT_ANGLE2((float)GETREG(TAKREG, 20) * 0.1f + 0.5f + fqrand()); + actor->_14d78[i] += (s16)DEG2SHORT_ANGLE2((float)GETREG(TAKREG, 20) * 0.1f + 0.5f + RANDOM_F(1)); } else { actor->_14d78[i] += 8; } diff --git a/src/actor/ac_museum_fish_afish.c_inc b/src/actor/ac_museum_fish_afish.c_inc index 1598921a..d509e25a 100644 --- a/src/actor/ac_museum_fish_afish.c_inc +++ b/src/actor/ac_museum_fish_afish.c_inc @@ -1,7 +1,7 @@ void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + // NOT BAD } void mfish_afish_dummy_process_init() { @@ -39,11 +39,12 @@ void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_afish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; + // NOT BAD return; } void mfish_afish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - + // NOT BAD GAME_PLAY* game = (GAME_PLAY*)gamex; return; -} \ No newline at end of file +} diff --git a/src/actor/ac_museum_fish_aroana.c_inc b/src/actor/ac_museum_fish_aroana.c_inc index 9a09f09f..8544a34d 100644 --- a/src/actor/ac_museum_fish_aroana.c_inc +++ b/src/actor/ac_museum_fish_aroana.c_inc @@ -1,10 +1,12 @@ void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + // NOT BAD GAME_PLAY* game = (GAME_PLAY*)gamex; return; } void mfish_aroana_dummy_process_init() { + // NOT BAD return; } @@ -29,6 +31,7 @@ void mfish_aroana_turn_process() { } void mfish_aroana_long_move_process_init() { + // NOT BAD return; } @@ -41,7 +44,7 @@ void mfish_aroana_base_FishMove() { } void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - + // NOT BAD GAME_PLAY* game = (GAME_PLAY*)gamex; return; } @@ -58,7 +61,7 @@ void mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int jo } void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - + // NOT BAD GAME_PLAY* game = (GAME_PLAY*)gamex; return; -} \ No newline at end of file +} diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index 68b1343b..16e835a8 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -1,6 +1,6 @@ f32 Rnd_EX_f(f32 v) { - f32 rand1 = 2 * fqrand2(); - f32 rand2 = fqrand(); + f32 rand1 = RANDOM2_F(2); + f32 rand2 = RANDOM_F(1); if (rand2 > (rand1 * rand1)) { if (rand1 > 0) { rand1 = sqrtf(rand2); @@ -12,9 +12,9 @@ f32 Rnd_EX_f(f32 v) { return v * rand1; } -f32 Rnd_EX_fx(f32 v1) { - f32 rand1 = 2 * fqrand2(); - f32 rand2 = fqrand(); +f32 Rnd_EX_fx(f32 v) { + f32 rand1 = RANDOM2_F(2); + f32 rand2 = RANDOM_F(1); if (rand2 > (rand1 * rand1)) { if (rand1 > 0) { rand1 = sqrtf(rand2); @@ -23,7 +23,7 @@ f32 Rnd_EX_fx(f32 v1) { } } rand1 = rand1 / 2; - return v1 * rand1; + return v * rand1; } void mfish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -36,16 +36,16 @@ void mfish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, 0.025f); } - actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.z); - actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.z); + actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.y); add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4); mfish_move_smooth(actor, game); mfish_get_flow_vec(&pos, actor, game); - actor->_5A0.y += actor->_5D0 + actor->_5DC.x; - actor->_5A0.z += actor->_5D0 + actor->_5DC.x; + actor->_5A0.x += actor->_5D0 + actor->_5DC.x; + actor->_5A0.z += actor->_5D8 + actor->_5DC.z; actor->_5A0.y = actor->_5A0.y + actor->_5DC.y; actor->_5A0.y = MAX(60, MIN(110, actor->_5A0.y)); } @@ -87,8 +87,8 @@ BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* prv) { p = prv->_5A0; - p.x += sin_s(prv->_60C.x) * (GETREG(TAKREG, 70) + 30.0f); - p.z += cos_s(prv->_60C.x) * (GETREG(TAKREG, 70) + 30.0f); + p.x += sin_s(prv->_60C.y) * (GETREG(TAKREG, 70) + 30.0f); + p.z += cos_s(prv->_60C.y) * (GETREG(TAKREG, 70) + 30.0f); p1 = p; @@ -96,18 +96,18 @@ BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* prv) { } s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv) { - s16 v = priv->_60C.z; - if (v > 0 || (priv->_630 == 2 && fqrand() < 0.8f)) { + s16 v = priv->_60C.y; + if (v > 0 || (priv->_630 == 2 && RANDOM_F(1) < 0.8f)) { if (v > DEG2SHORT_ANGLE(90)) { - v = DEG2SHORT_ANGLE(90) + DEG2SHORT_ANGLE(45 * fqrand()); + v = DEG2SHORT_ANGLE(90) + DEG2SHORT_ANGLE(RANDOM_F(45)); } else { - v = DEG2SHORT_ANGLE(90) - DEG2SHORT_ANGLE(45 * fqrand()); + v = DEG2SHORT_ANGLE(90) - DEG2SHORT_ANGLE(RANDOM_F(45)); } } else { if (v > DEG2SHORT_ANGLE(-90)) { - v = DEG2SHORT_ANGLE(-90) + DEG2SHORT_ANGLE(45 * fqrand()); + v = DEG2SHORT_ANGLE(-90) + DEG2SHORT_ANGLE(RANDOM_F(45)); } else { - v = DEG2SHORT_ANGLE(-90) - DEG2SHORT_ANGLE(45 * fqrand()); + v = DEG2SHORT_ANGLE(-90) - DEG2SHORT_ANGLE(RANDOM_F(45)); } } return v; @@ -115,20 +115,20 @@ s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv) { void mfish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* prv) { prv->_634 = mfish_get_hide_camera_angle(prv); - if (prv->_630 == 2 && prv->_60C.z < 0 && prv->_634 > 0) { + if (prv->_630 == 2 && prv->_60C.y < 0 && prv->_634 > 0) { prv->_5F0 = MAX(prv->init_data._10, GETREG(TAKREG, 80) * 0.1f + 1.2f); } prv->_34 = mfish_dummy_process; } -void mfish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) { +void mfish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { // no clue what's going on here - add_calc_short_angle2(&actor->_612.z, actor->_634, CALC_EASE2(0.0f), DEG2SHORT_ANGLE(3.75f), 0x2d); - actor->_622 = add_calc_short_angle2(&actor->_60C.z, actor->_612.z, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d); + add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.0f), DEG2SHORT_ANGLE(3.75f), 0x2d); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d); add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d); if (actor->_630 == 2) { - if (actor->_612.z < 0) { + if (actor->_612.y < 0) { actor->_626--; } else { add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.05f); @@ -142,7 +142,7 @@ void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { f32 t; f32 temp; - ra = fqrand() * fishActor->init_data._14 + fishActor->init_data._10; + ra = RANDOM_F(fishActor->init_data._14) + fishActor->init_data._10; t = (ra) / MAX(fishActor->init_data._14 + fishActor->init_data._10, 1); if (ra > fishActor->_5E8) { @@ -155,30 +155,30 @@ void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { atans_table(fishActor->_5E8, fishActor->_5F4 + fishActor->init_data._0C - fishActor->_5A0.y) >> 4; fishActor->_5D4 = 0; - if (fqrand() > fishActor->init_data._1C) { + if (RANDOM_F(1) > fishActor->init_data._1C) { int diff; - fishActor->_612.z += (s16)Rnd_EX_fx(fishActor->init_data._30 * 2.0f); - diff = fishActor->_612.z - fishActor->_60C.z; + fishActor->_612.y += (s16)Rnd_EX_fx(fishActor->init_data._30 * 2.0f); + diff = fishActor->_612.y - fishActor->_60C.y; if (ABS((s16)diff) < DEG2SHORT_ANGLE(20)) { if ((s16)diff > 0) { - fishActor->_612.z += DEG2SHORT_ANGLE(20); + fishActor->_612.y += DEG2SHORT_ANGLE(20); } else { - fishActor->_612.z += DEG2SHORT_ANGLE(-20); + fishActor->_612.y += DEG2SHORT_ANGLE(-20); } } fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 20); } else { - if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) { - fishActor->_612.z += DEG2SHORT_ANGLE(15); + if ((s16)(fishActor->_612.y - fishActor->_60C.y) > 0) { + fishActor->_612.y += DEG2SHORT_ANGLE(15); } else { - fishActor->_612.z += DEG2SHORT_ANGLE(-15); + fishActor->_612.y += DEG2SHORT_ANGLE(-15); } fishActor->_632 = DEG2SHORT_ANGLE((GETREG(TAKREG, 42) + 40.0f) * t + 30); } - if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) { + if ((s16)(fishActor->_60C.y - fishActor->_612.y) > 0) { fishActor->_636 = DEG2SHORT_ANGLE(0); } else { fishActor->_636 = DEG2SHORT_ANGLE(-180); @@ -188,7 +188,7 @@ void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { fishActor->_34 = mfish_normal_process; } -void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor) { +void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { if (actor->_632 > DEG2SHORT_ANGLE(20)) { add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.2f), (((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.04f + 0.1f) * 0.5f, 0.05f); @@ -197,70 +197,327 @@ void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor) { } add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); actor->_636 += DEG2SHORT_ANGLE(10.0f); - actor->_622 = add_calc_short_angle2(&actor->_60C.z, actor->_612.z + (s16)(actor->_632 * sin_s(actor->_636)), + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), CALC_EASE2(0.5f), DEG2SHORT_ANGLE(6.25f), 45); add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(3.75f), 45); if (actor->_5E8 < 0.01f || actor->_630 == 2 && actor->_5E8 < 0.05f) { mfish_dummy_process_init(actor); } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { - if ((s16)(actor->_60C.z - actor->_62C) > 0) { - actor->_612.z = actor->_62C + DEG2SHORT_ANGLE(112.5f); + if ((s16)(actor->_60C.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); } else { - actor->_612.z = actor->_62C - DEG2SHORT_ANGLE(112.5f); + actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f); } actor->_632 = 0; } } -void mfish_turn_process_init() { - return; +void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + s16 v = DEG2SHORT_ANGLE(RANDOM_F(75.0f)) + DEG2SHORT_ANGLE(45); + actor->_61A = + DEG2SHORT_ANGLE(((actor->_5E8 + 0.5f) / (actor->init_data._10 + actor->init_data._14 + 0.5f)) * 7.5f + 7.5f); + + if (actor->_62E & 0xC0) { + if (actor->_62E & 0x40) { + v = ABS(v); + } else { + v = -ABS(v); + } + } else if (actor->_62E & 0x1e) { + if ((s16)(actor->_62C - actor->_60C.y) < 0) { + v = -v; + } else { + v = v; + } + } else if (actor->_62E & 0x20) { + if ((s16)(actor->_62A - actor->_60C.y) < 0) { + v = -v; + } else { + v = v; + } + } + + if (v > 0) { + actor->_62E |= 0x40; + } else { + actor->_62E |= 0x80; + } + + actor->_612.y += v; + + if (actor->_630 == 2) { + s16 tmp = actor->_612.y + DEG2SHORT_ANGLE(90); + if (tmp > DEG2SHORT_ANGLE(135)) { + actor->_612.y = DEG2SHORT_ANGLE(-45); + } else if (tmp > DEG2SHORT_ANGLE(-135)) { + actor->_612.y = DEG2SHORT_ANGLE(-135); + } + } + + actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.7f; + + if (fqrand() < 0.2f) { + actor->_63E = fqrand() * 3.0f + 1.0f; + } else { + actor->_63E = 0; + } + actor->_34 = mfish_turn_process; } -void mfish_turn_process() { - return; +void mfish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + if (ABS(actor->_622) > DEG2SHORT_ANGLE(20)) { + add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), (GETREG(TAKREG, 0x4e) * 0.01f + 0.5f) * 0.5f, 0.05f); + } + add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), 0.5f, 0.2f); + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE(0.2f), actor->_61A >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); + + if (ABS((s16)(actor->_612.y - actor->_61C)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) { + if (actor->_63E > 0) { + if (mfish_WallCheck(actor)) { + mfish_turn_process_init(actor); + } else { + mfish_normal_process_init(actor); + } + actor->_63E--; + } else { + mfish_dummy_process_init(actor); + } + } } -void mfish_peck_process_init() { - return; +void mfish_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + f32 fVar8; + f32 fVar9; + int t; + s16 atanx; + s16 atany; + f32 dist; + + actor->_5D4 = 0.0f; + mfish_get_player_angle(actor, game, &atanx, &atany, &dist); + fVar9 = (actor->init_data)._14 + (actor->init_data)._10; + + if (dist < 20.0f) { + fVar9 *= 0.75f; + actor->_5F0 = MAX(fVar9, 0.5f); + } + + if (fVar9 > actor->_5E8) { + actor->_5F0 = fVar9; + } + + fVar8 = (fVar9 / 8.0f); + + if (ABS((s16)(atanx - actor->_60C.y)) < actor->init_data._30) { + actor->_612.y = atanx; + } else if ((s16)(atanx - actor->_60C.y) > 0) { + actor->_612.y = actor->_60C.y + actor->init_data._30; + } else { + actor->_612.y = actor->_60C.y - actor->init_data._30; + } + + if (atany < 0) { + actor->_5F4 = actor->_5F4 + fqrand() * 2.5f; + actor->_5F4 = MAX(MIN(10, actor->_5F4), -10); + + } else { + actor->_5F4 = actor->_5F4 - fqrand() * 2.5f; + actor->_5F4 = MAX(MIN(10, actor->_5F4), -10); + } + + actor->_632 = DEG2SHORT_ANGLE((fVar8 * 30.0f) + 20.0f); + + if (qrand() & 0x8000) { + actor->_636 = 0x4000; + } else { + actor->_636 = -0x4000; + } + + actor->_62E &= ~0xC0; + actor->_34 = mfish_peck_process; } -void mfish_peck_process() { - return; +void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + s16 atanx; + s16 atany; + f32 dist; + + mfish_get_player_angle(actor, gamex, &atanx, &atany, &dist); + + if (actor->_632 > DEG2SHORT_ANGLE(15)) { + add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.25f), + (((actor->_632 - DEG2SHORT_ANGLE(15)) / DEG2SHORT_ANGLE(2)) * 0.04f + 0.01f) * 0.5f, 0.05f); + } else if (actor->_626 > actor->_628 - 16) { + add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), 0.5f, 0.05f); + } else if (dist > 20) { + add_calc2(&actor->_5E8, MAX(actor->_5E8, 0.4f), 0.25f, 0.05f); + } + + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f)); + actor->_636 += DEG2SHORT_ANGLE(10); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632), + CALC_EASE2(0.5f), DEG2SHORT_ANGLE(6.25f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); + + if (mfish_peck_wall_check(actor, gamex)) { + if (fqrand() < 0.9f) { + actor->_5E8 = -0.3f - fqrand() * 0.3f; + actor->_626 = 10; + } else { + actor->_5E8 = -0.5f; + actor->_626 = actor->init_data._2C + (s16)(fqrand() * actor->init_data._2E); + actor->_626 >>= 3; + } + actor->_628 = actor->_626; + actor->_5F0 = 0.0f; + } } -void mfish_ground_peck_process_init() { - return; +void mfish_ground_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + xyz_t p = suisou_pos[actor->_630]; + xyz_t_sub(&p, &actor->_5A0, &p); + + actor->_5F4 = ((actor->init_data._08 * 0.3f + 65.0f) - MAX(ABS(p.x), ABS(p.z)) * 0.15f) - actor->init_data._0C; + actor->_612.x = DEG2SHORT_ANGLE(60); + actor->_626 = (int)(Rnd_EX_f(30.0f) + 15.0f) << 1; + + if (actor->_34 != mfish_ground_peck_process) { + actor->_63E = fqrand() * 2.0f + 3.0f; + } else { + actor->_63E--; + } + + actor->_5F0 = 0.5f; + actor->_34 = mfish_ground_peck_process; } -void mfish_ground_peck_process() { - return; +void mfish_ground_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + xyz_t p = suisou_pos[actor->_630]; + xyz_t_sub(&p, &actor->_5A0, &p); + actor->_5F4 = ((actor->init_data._08 * 0.3f + 64.0f) - (MAX(ABS(p.x), ABS(p.y)) * 0.15f)) - actor->init_data._0C; + xyz_t_mult_v(&actor->_5DC, 0.1f); + + if (actor->_5A0.y > actor->_5F4 + actor->init_data._0C + 4.0f) { + if (actor->_612.x < DEG2SHORT_ANGLE(40)) { + actor->_612.x = DEG2SHORT_ANGLE(40); + } + actor->_626++; + add_calc2(&actor->_5F0, 0.5f, 0.6f, 0.5f); + } else if ((s16)(actor->_612.x - actor->_60C.x) > 0) { + add_calc2(&actor->_5F0, 0.2f, 0.5f, 0.4f); + } else { + if (actor->_5E8 > 0) { + actor->_5E8 = -0.2f; + } else { + add_calc0(&actor->_5F0, 0.2f, 0.1f); + } + } + + if (actor->_612.x < DEG2SHORT_ANGLE(15)) { + actor->_612.x = DEG2SHORT_ANGLE(15); + } + + add_calc(&actor->_5E8, actor->_5F0 * cos_s(actor->_60C.x), CALC_EASE(0.5f), 0.25f, 0.05f); + + mfish_dummy_process(actor, gamex); } void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + GAME_PLAY* play = (GAME_PLAY*)gamex; + f32 f = fqrand() * 2; + f32 s; + s16 q = qrand(); + actor->_5E8 = f; + actor->_5D0 = cos_s(q) * f; + actor->_5D8 = sin_s(q) * f; + actor->_60C.y = q; + actor->_612.y = actor->_60C.y; + if (actor->_59C == 4 || actor->_59C == 9) { + actor->_5F4 = 0.0f; + } else if (actor->_59C == 0x1b) { + actor->_5F4 = fqrand() * 5.0f; + } else { + actor->_5F4 = fqrand2() * 10.0f; + } + actor->_5D4 = 0.0; + actor->_5AC = ZeroVec; + actor->_63E = qrand(); + actor->_622 = actor->_60C.y; } void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + + if (actor->_5F8 > actor->init_data._08 * 20.0f) { + actor->_5F8 = 0.0f; + actor->_626 = 0; + } + + if (actor->_626-- <= 0) { + actor->_626 = actor->init_data._2C + (s16)(fqrand() * actor->init_data._2E); + actor->_628 = actor->_626; + if (mfish_peck_check(actor, gamex)) { + actor->_626 >>= 2; + actor->_628 = actor->_626; + mfish_peck_process_init(actor, gamex); + } else if (mfish_WallCheck(actor)) { + mfish_turn_process_init(actor); + } else if (mfish_ground_peck_before_check(actor, gamex)) { + mfish_ground_peck_process_init(actor, gamex); + } else { + mfish_normal_process_init(actor); + } + } else if (actor->_34 == mfish_normal_process) { + if ((actor->_62E & 0x1E && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || + (actor->_62E & 0x20 && + ABS((s16)(actor->_62A + DEG2SHORT_ANGLE(180) - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { + actor->_626 = actor->init_data._2C + (s16)(fqrand() * actor->init_data._2E); + actor->_628 = actor->_626; + mfish_turn_process_init(actor); + } + } + + if (actor->_624 == 10) { + actor->_5AC.y = 0; + actor->_5A0.y = actor->init_data._0C; + } else if (actor->_630 == 2) { + actor->_5AC.y = sin_s(actor->_638) * 0.2f; + } else { + actor->_5AC.y = 0; + } + + actor->_638 += DEG2SHORT_ANGLE(10); + actor->_34(actor, gamex); + + if (ABS(actor->_61C) > ABS(actor->_622)) { + add_calc2(&actor->_5E8, MIN(GETREG(TAKREG, 19) * 0.1f + 0.2f, actor->_5E8), 0.2f, 0.5f); + } + + add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.1f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f)); + add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.1f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.5f)); + mfish_base_FishMove(actor, gamex); } void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; - YET_SKELETON* huh = &actor->_38; - // looks like it loads from 0x38, which i labeled as the skeleton, - // but then it adds like 0x514 to it, so this must be huge - - // cKF_SkeletonInfo_R_ct(&huh->_00, huh->_00); //TODO + YET_SKELETON* s = &actor->_38; + cKF_SkeletonInfo_R_ct(&s->_00, s->_54C, s->_550, &s->_4F0, &s->_514); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&s->_00, s->_550, NULL, 1.875f, 0.0f); + actor->_626 = actor->init_data._2C + (s16)(actor->init_data._2E * fqrand()); + actor->_628 = actor->_626; + actor->_60C.x = DEG2SHORT_ANGLE(0); + actor->_60C.y = DEG2SHORT_ANGLE(-90); + actor->_60C.z = DEG2SHORT_ANGLE(0); + actor->_5DC = ZeroVec; return; } void mfish_onefish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; cKF_SkeletonInfo_R_play(&actor->_38._00); - return; } int mfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg, @@ -292,8 +549,8 @@ void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { YET_SKELETON* skele; Mtx* mtx; - GAME_PLAY* play; GRAPH* graph; + GAME_PLAY* play; play = (GAME_PLAY*)gamex; skele = &actor->_38; @@ -307,9 +564,9 @@ void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { graph = play->game.graph; Matrix_translate(actor->_5A0.x, actor->_5A0.y + actor->_5AC.y, actor->_5A0.z, 0); - Matrix_RotateY(actor->_60C.z, 1); + Matrix_RotateY(actor->_60C.y, 1); - Matrix_translate(0.0f, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1); + Matrix_translate(0.0f, 0.25f * actor->init_data._04, 1.5f * actor->init_data._24, 1); Matrix_RotateX(actor->_60C.x, 1); Matrix_RotateZ(MY_CLAMP(-(actor->_61C >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); Matrix_translate(0.0f, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1); @@ -328,32 +585,289 @@ void mfish_ani_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + GAME_PLAY* play = (GAME_PLAY*)gamex; + mfish_onefish_mv(actor, gamex); + mfish_base_mv(actor, gamex); + Museum_Fish_BGCheck(actor, gamex); + + if (actor->_630 == 2) { + actor->_38._00.frame_control.speed = + (actor->_5E8 * 3.0f) / (actor->init_data._10 + actor->init_data._14) + 1.0f; + } else if (actor->_59C == 0xe || actor->_59C == 0x1 || actor->_59C == 0) { + if (actor->_5F0 - 0.1f > actor->_5E8 && actor->_34 == mfish_normal_process && actor->_626 > actor->_628 - 10) { + actor->_38._00.frame_control.speed = + ((actor->_5F0 - actor->_5E8) * 3.0f) / (actor->init_data._10 + actor->init_data._14) + 1.5f; + } else { + add_calc2(&actor->_38._00.frame_control.speed, 2.0f * actor->_5E8 + 0.5f, 0.2f, 0.1f); + } + } else { + if (actor->_626 > actor->_628 - 10 && actor->_5F0 > 0) { + actor->_38._00.frame_control.speed = + (actor->_5E8 * 4.0f) / (actor->init_data._10 + actor->init_data._14) + 1.25f; + } else { + add_calc2(&actor->_38._00.frame_control.speed, 2.0f * actor->_5E8 + 0.5f, 0.2f, 0.1f); + } + } + + mfish_body_wind_anime_play(actor, gamex); } void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + // NOT BAD } -void Museum_Fish_BigFishObjCheck() { - return; +void Museum_Fish_BigFishObjCheck(MUSEUM_FISH_PRIVATE_DATA* actor) { + int i; + MUSEUM_FISH_PRIVATE_DATA* fish[2]; + f32 max[2] = { 430.0f, 530.0f }; + fish[0] = &MF_Control_Actor->prvFish[aGYO_TYPE_ARAPAIMA]; + fish[1] = &MF_Control_Actor->prvFish[aGYO_TYPE_GIANT_SNAKEHEAD]; + + for (i = 0; i < 2; i++) { + f32 v; + xyz_t ip = fish[i]->_5B8; + xyz_t op; + f32 f27 = actor->init_data._08 * (sin_s(actor->_60C.y) * 0.3f + 0.7f) + fish[i]->init_data._08; + f32 f26 = 10.f + (actor->init_data._08 * (0.7f + 0.3f * cos_s(actor->_60C.y))); + f32 f25 = actor->init_data._04 + fish[i]->init_data._04; + xyz_t_sub(&actor->_5B8, &ip, &op); + if (ABS(op.z) < f26 && ABS(op.y) < f25 && ABS(op.x) < f27) { + f27 -= ABS(op.x); + f26 -= ABS(op.z); + f25 -= ABS(op.y); + if (f25 < MIN(f27, f26)) { + if (op.y < 0) { + actor->_5A0.y -= MIN(f25, 0.25f); + fish[i]->_5A0.y += MIN(f25, 0.05f); + } else { + actor->_5A0.y += MIN(f25, 0.25f); + fish[i]->_5A0.y -= MIN(f25, 0.05f); + } + } else if (f26 < f27) { + v = ABS(cos_s(actor->_60C.y) * actor->_5E8); + if (op.z < 0) { + actor->_5A0.z -= MIN(f26, MAX(0.5f, v)); + if (fish[i]->_5B8.z < max[i] + 10.0f) { + fish[i]->_5A0.z += MIN(f26, 0.05f); + } + } else { + actor->_5A0.z += MIN(f26, MAX(0.5f, v)); + if (fish[i]->_5B8.z > max[i] - 10.0f) { + fish[i]->_5A0.z -= MIN(f26, 0.05f); + } + } + } else { + v = ABS(sin_s(actor->_60C.y) * actor->_5E8); + if (op.x < 0) { + actor->_5A0.x -= MIN(f27, MAX(0.5f, v)); + fish[i]->_5A0.x += MIN(f27, 0.05f); + } else { + actor->_5A0.x += MIN(f27, MAX(0.5f, v)); + fish[i]->_5A0.x -= MIN(f27, 0.05f); + } + } + } + } } -void Museum_Fish_ObjBGCheck() { - return; +void Museum_Fish_ObjBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex, f32 f1, f32 f2) { + xyz_t p = suisou_pos[actor->_630]; + f32 a, b, c, d, e; + + switch (actor->_630) { + case 0: + e = 85.0f; + a = -20.0f + p.x; + b = 1000.0f + p.x; + c = -25.0f + p.z; + d = -1000.0f + p.z; + break; + case 1: + a = -5.0f + p.x; + c = -10.0f + p.z; + b = 1000.0f + p.x; + d = -1000.0f + p.z; + // needs cast, temp doesn't work + e = 75.0f - cos_s((int)DEG2SHORT_ANGLE(180.0f * (actor->_5B8.x - a) / 70.0f)) * 5.0f; + break; + case 2: + e = 80.0f; + a = -1000.0f + p.x; + b = -5.0f + p.x; + c = -20.0f + p.z; + d = -1000.0f + p.z; + break; + case 3: + e = 75.0f; + a = -20.0f + p.x; + b = 1000.0f + p.x; + c = -5.0f + p.z; + d = -1000.0f + p.z; + break; + case 4: + default: + return; + } + + e -= actor->_5A0.y; + if (e > 0.0f) { + f32 v1, v2; + b -= (actor->_5A0.x + (actor->init_data._28 * f1)); + a -= (actor->_5A0.x - (actor->init_data._28 * f1)); + c -= (actor->_5A0.z + (actor->init_data._28 * f2)); + d -= (actor->_5A0.z - (actor->init_data._28 * f2)); + if (b > 0.0f && c > 0.0f && a < 0.0f && d < 0.0f) { + if (b > -a) { + if ((actor->_62E & 2) == 0) { + actor->_62E |= 4; + } + v1 = a; + } else { + if ((actor->_62E & 4) == 0) { + actor->_62E |= 2; + } + v1 = b; + } + + if (c > -d) { + if ((actor->_62E & 8) == 0) { + actor->_62E |= 0x10; + } + v2 = d; + } else { + if ((actor->_62E & 0x10) == 0) { + actor->_62E |= 8; + } + v2 = c; + } + + if (e < MIN(ABS(v2), ABS(v1)) && actor->_624 != 10) { + actor->_5A0.y += e; + if (actor->_624 == 3) { + actor->_612.x = DEG2SHORT_ANGLE(45); + } else if (actor->_59C == 15) { + if (actor->_612.x > DEG2SHORT_ANGLE(30)) { + actor->_612.x -= DEG2SHORT_ANGLE(2); + } else if (actor->_612.x < DEG2SHORT_ANGLE(-30)) { + actor->_612.x += DEG2SHORT_ANGLE(2); + } + } + } else { + if (ABS(v2) < ABS(v1)) { + actor->_5A0.z += v2; + } else { + actor->_5A0.x += v1; + } + } + } + } } -void Museum_Fish_DonkoBGCheck() { - return; +void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 a, b, c, d; + f32 f25; + f32 f26; + f32 f24; + f32 f27; + xyz_t p = suisou_pos[actor->_630]; + f32 v = (sin_s(actor->_60C.y) * 0.7f) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f) + 0.3f; + f32 v2 = (cos_s(actor->_60C.y) * 0.7f) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f) + 0.3f; + actor->_62E &= ~0x1e; + actor->_62C = 0; + Museum_Fish_objchk_pos_set(actor, gamex); + // asm 17C + a = (+00.0f + p.x); + b = (-45.5f + p.x); + c = (+45.0f + p.z); + d = (-17.5f + p.z); + f27 = 76.0f - 6.0f * cos_s(DEG2SHORT_ANGLE2(180.0f * (actor->_5B8.x - p.x) / 55.0f)); + f26 = 76.0f - 6.0f * cos_s(DEG2SHORT_ANGLE2((actor->_5B8.x + sin_s(actor->_60C.z) - p.x) * 180.0f / 55.0f)); + + a -= (actor->_5A0.x + actor->init_data._28 * v); + c -= (actor->_5A0.x - actor->init_data._28 * v); + b -= (actor->_5A0.z + actor->init_data._28 * v2); + d -= (actor->_5A0.z - actor->init_data._28 * v2); + + /* + f31 = a + f30 = b + f28 = c + f29 = d + */ + + actor->_5FC = -a; + actor->_600 = b; + actor->_604 = -c; + actor->_608 = d; + + // asm 2E8 + f27 -= actor->_5A0.y; + f26 -= actor->_5A0.y; + if (a > 0.0f) { + actor->_5FC = 0.0f; + actor->_5A0.x += a; + actor->_62E |= 2; + } else if (b < 0.0f) { + actor->_600 = 0.0f; + actor->_5A0.x += b; + actor->_62E |= 4; + } + + if (c > 0.0f) { + actor->_604 = 0.0f; + actor->_5A0.z += c; + actor->_62E |= 0x8; + } else if (d < 0.0f) { + actor->_608 = 0.0f; + actor->_5A0.z += d; + actor->_62E |= 0x10; + } + + if (actor->_62E & 2) { + actor->_62C = DEG2SHORT_ANGLE(-90); + } else if (actor->_62E & 4) { + actor->_62C = DEG2SHORT_ANGLE(90); + } + + if (actor->_62E & 8) { + if (actor->_62E & 6) { + actor->_62C = DEG2SHORT_ANGLE(180) - (actor->_62C >> 1); + } else { + actor->_62C = DEG2SHORT_ANGLE(-180); + } + } else if (actor->_62E & 0x10) { + if (actor->_62E & 6) { + actor->_62C = (actor->_62C >> 1); + } else { + actor->_62C = 0; + } + } + + f25 = MIN(MIN(actor->_608, actor->_604), MIN(actor->_5FC, actor->_600)); + if (f25 < 5.0f) { + f27 -= 0.5f * (5.0f - f25); + } + + f25 = MIN(MIN(actor->_608 - cos_s(actor->_60C.y), actor->_604 + cos_s(actor->_60C.y)), + MIN(actor->_600 - sin_s(actor->_60C.y), actor->_5FC + sin_s(actor->_60C.y))); + // asm 5D8 + if (f25 < 5.0f) { + f26 -= 0.5f * (5.0f - f25); + } + f26 -= f27; + actor->_612.x = atans_table(1.0f, -f26); + if (f27 > 0.0f) { + actor->_5A0.y += f27; + actor->_5D4 *= 0.95f; + } } void Museum_Fish_objchk_pos_set() { - return; + // NOT BAD } -void Museum_Fish_BGCheck() { +void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { return; } @@ -369,19 +883,36 @@ void mfish_body_wind_anime_play() { return; } -void mfish_get_player_angle() { +void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* atanx, s16* atany, f32* distance) { + PLAYER_ACTOR* playerActor = get_player_actor_withoutCheck((GAME_PLAY*)game); + xyz_t p; + xyz_t p1; + f32 v; + p = playerActor->actor_class.world.position; + p.y += 40.0f; + xyz_t_sub(&p, &actor->_5A0, &p1); + v = p1.x * p1.x + p1.z * p1.z; + v = sqrtf(v); + if (atanx) { + *atanx = atans_table(p1.z, p1.x); + } + if (atany) { + *atany = atans_table(v, -p1.y); + } + if (distance) { + *distance = v; + } +} + +BOOL mfish_peck_check() { return; } -void mfish_peck_check() { - return; +BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + // NOT BAD } -void mfish_peck_wall_check() { - return; -} - -void mfish_ground_peck_before_check() { +BOOL mfish_ground_peck_before_check() { return; } diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc index 20e44707..ae18c8df 100644 --- a/src/actor/ac_museum_fish_bass.c_inc +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -63,10 +63,10 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { f32 t; f32 temp; - ra = fqrand() * fishActor->init_data._14 + fishActor->init_data._10; + ra = RANDOM_F(fishActor->init_data._14) + fishActor->init_data._10; t = (ra) / MAX(fishActor->init_data._14 + fishActor->init_data._10, 1); - if (fqrand() > 0.25f && !(fishActor->_62E & 0x200)) { + if (RANDOM_F(1) > 0.25f && !(fishActor->_62E & 0x200)) { fishActor->_62E |= 0x200; } else { fishActor->_62E &= ~0x200; @@ -86,7 +86,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { fishActor->_612.x = CLAMP(fishActor->_612.x, DEG2SHORT_ANGLE(-50), DEG2SHORT_ANGLE(50)); fishActor->_5D4 = 0; - if (fqrand() > fishActor->init_data._1C) { + if (RANDOM_F(1) > fishActor->init_data._1C) { int diff; fishActor->_612.z += (s16)Rnd_EX_fx(fishActor->init_data._30 * 2.0f); @@ -128,7 +128,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { fishActor->_34 = mfish_bass_normal_process; } -void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor) { +void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { if (((actor->_62E & 0x200) != 0 && actor->_632 > DEG2SHORT_ANGLE(20)) || actor->_640 > 0) { f32 v = (actor->_5AC.y * 0.03f + 0.02f); add_calc2(&actor->_5EC, @@ -167,7 +167,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 a; s16 b; - b = a = 0x2000 + DEG2SHORT_ANGLE(fqrand() * 75.0f); + b = a = 0x2000 + DEG2SHORT_ANGLE(RANDOM_F(75)); actor->_61A = DEG2SHORT_ANGLE((actor->_5AC.y * 4.0f + 4.0f) * (SHORT2DEG_ANGLE2(a) / 120.0f) + 2.0f + actor->_5AC.y); if (actor->_62E & 0x1e) { @@ -194,7 +194,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_612.z += b; - if ((fqrand() < 0.25f) && (actor->_62E & 0x200) == 0) { + if ((RANDOM_F(1) < 0.25f) && (actor->_62E & 0x200) == 0) { actor->_62E |= 0x200; } else { actor->_62E &= ~0x200; @@ -208,8 +208,8 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5AC.x = Rnd_EX_fx(0.1f) + 0.15f; } - if (fqrand() < 0.2f) { - actor->_63E = (s16)(fqrand() * 3.0f + 1.0f); + if (RANDOM_F(1) < 0.2f) { + actor->_63E = RANDOMF_RANGE(1, 4); } else { actor->_63E = 0; } @@ -220,7 +220,40 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor) { int a; - if (ABS(actor->_622) > DEG2SHORT_ANGLE(20)) {} + f32 v0, v1, v2, v3, v4; + v0 = actor->_5AC.y * 0.2f + 0.05f; + v1 = actor->_5AC.y * 0.04f + 0.01f; + v2 = actor->_5AC.y * 0.04f + 0.01f; + v3 = actor->_5AC.y * 0.15f + 0.1f; + v4 = actor->_5AC.y * 0.15f + 0.05f; + + if (ABS(actor->_622) > DEG2SHORT_ANGLE(20)) { + add_calc2(&actor->_5E8, v0, v1, v2); + add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), actor->_5EC * 0.5f, 0.05f); + } + + add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), v3, v4); + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), 45); + + actor->_622 = add_calc_short_angle2(&actor->_60C.z, ((s16)(sin_s(actor->_636) * actor->_632) + actor->_612.z), + CALC_EASE(0.2f), actor->_61A >> 1, 45); + + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(2.5f), 22); + + if (ABS((s16)(actor->_60C.z - actor->_612.z)) < DEG2SHORT_ANGLE(2.0f) && actor->_5E8 < 0.1f) { + if (actor->_63E > 0) { + if (mfish_WallCheck(actor)) { + mfish_bass_tail_anim_set(actor, 1); + mfish_bass_turn_process_init(actor); + + } else { + mfish_bass_normal_process_init(actor); + } + actor->_63E--; + } else { + mfish_bass_dummy_process_init(actor); + } + } } void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -245,9 +278,59 @@ void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + mfish_onefish_mv(actor, gamex); - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + if (actor->_5F8 > actor->init_data._08 * 20.0f) { + actor->_5F8 = 0.0f; + actor->_626 = 0; + } + + if (actor->_626-- <= 0) { + actor->_626 = actor->init_data._2C + (s16)(RANDOM_F(actor->init_data._2E)); + actor->_628 = actor->_626; + + if (mfish_WallCheck(actor)) { + mfish_bass_tail_anim_set(actor, 1); + mfish_bass_turn_process_init(actor); + } else { + mfish_bass_tail_anim_set(actor, 0); + mfish_bass_turn_process_init(actor); + } + } else if (actor->_34 == &mfish_bass_normal_process) { + if (((actor->_62E & 0x1e) && ABS((s16)(actor->_60C.z - actor->_62C)) < DEG2SHORT_ANGLE(30)) || + ((actor->_62E & 0x20) && + ABS((s16)((actor->_62A - DEG2SHORT_ANGLE(-180)) - actor->_60C.z)) < DEG2SHORT_ANGLE(30))) { + actor->_626 = actor->init_data._2C + (s16)(actor->init_data._2E * fqrand()); + actor->_628 = actor->_626; + mfish_bass_tail_anim_set(actor, 1); + mfish_bass_turn_process_init(actor); + } + } + actor->_638 += DEG2SHORT_ANGLE(10); + actor->_34(actor, gamex); + + if (ABS(actor->_622) > ABS(actor->_61C)) { + add_calc2(&actor->_5E8, MIN(GETREG(TAKREG, 19) * 0.01f + 1.0f, actor->_5E8), GETREG(TAKREG, 18) * 0.01f + 0.2f, + GETREG(TAKREG, 17) * 0.01f + 0.5f); + } + + add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.05f), DEG2SHORT_ANGLE(actor->_5AC.y + 3.0f) >> 1, + 9); + add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.05f), DEG2SHORT_ANGLE(actor->_5AC.y * 0.5f + 2.0f) >> 1, 9); + + mfish_bass_base_FishMove(actor, gamex); + Museum_Fish_BGCheck(actor, gamex); + if (actor->_640 > 0) { + f32 tmp, num, denom; + denom = (actor->init_data._14 + actor->init_data._10); + actor->_640--; + num = (actor->_5AC.z * (actor->_5F0 - actor->_5E8)); + tmp = (actor->_5AC.y * 0.7f + 0.4f); + add_calc2(&actor->_38._00.frame_control.speed, tmp * (1.75f + num / denom), 0.5f, 0.5f); + } else { + add_calc2(&actor->_38._00.frame_control.speed, (actor->_5E8 * 2.0f + 0.5f) * (actor->_5AC.y * 0.8f + 0.6f), + 0.2f, 0.1f); + } } void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { diff --git a/src/actor/ac_museum_fish_big_fish.c_inc b/src/actor/ac_museum_fish_big_fish.c_inc index 748303c4..e6943887 100644 --- a/src/actor/ac_museum_fish_big_fish.c_inc +++ b/src/actor/ac_museum_fish_big_fish.c_inc @@ -16,6 +16,7 @@ void mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi } void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + // NOT BAD GAME_PLAY* game = (GAME_PLAY*)gamex; return; diff --git a/src/actor/ac_museum_fish_dojou.c_inc b/src/actor/ac_museum_fish_dojou.c_inc index 44047c30..59c8f00a 100644 --- a/src/actor/ac_museum_fish_dojou.c_inc +++ b/src/actor/ac_museum_fish_dojou.c_inc @@ -5,6 +5,7 @@ void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_dojou_normal_init() { + // NOT BAD return; } @@ -13,6 +14,7 @@ void mfish_dojou_normal() { } void mfish_dojou_turn_init() { + // NOT BAD return; } diff --git a/src/actor/ac_museum_fish_donko.c_inc b/src/actor/ac_museum_fish_donko.c_inc index a03d40e2..ce87320a 100644 --- a/src/actor/ac_museum_fish_donko.c_inc +++ b/src/actor/ac_museum_fish_donko.c_inc @@ -12,6 +12,7 @@ void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_donko_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg, s_xyz* joint1, xyz_t* trans) { + // NOT BAD return; } diff --git a/src/actor/ac_museum_fish_gupi.c_inc b/src/actor/ac_museum_fish_gupi.c_inc index db34b40a..aaa5fddd 100644 --- a/src/actor/ac_museum_fish_gupi.c_inc +++ b/src/actor/ac_museum_fish_gupi.c_inc @@ -1,10 +1,12 @@ void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + // NOT BAD GAME_PLAY* game = (GAME_PLAY*)gamex; return; } void mfish_gupi_normal_init() { + // NOT BAD return; } @@ -13,6 +15,7 @@ void mfish_gupi_normal() { } void mfish_gupi_turn_init() { + // NOT BAD return; } @@ -35,4 +38,4 @@ void mfish_gupi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; return; -} \ No newline at end of file +} diff --git a/src/actor/ac_museum_fish_ito.c_inc b/src/actor/ac_museum_fish_ito.c_inc index d17cfb27..804288d7 100644 --- a/src/actor/ac_museum_fish_ito.c_inc +++ b/src/actor/ac_museum_fish_ito.c_inc @@ -17,6 +17,7 @@ void mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + // NOT BAD GAME_PLAY* game = (GAME_PLAY*)gamex; return; } diff --git a/src/actor/ac_museum_fish_kaseki.c_inc b/src/actor/ac_museum_fish_kaseki.c_inc index ff53dc1c..a83d92eb 100644 --- a/src/actor/ac_museum_fish_kaseki.c_inc +++ b/src/actor/ac_museum_fish_kaseki.c_inc @@ -5,6 +5,7 @@ void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_kaseki_normal_init() { + // NOT BAD return; } @@ -31,4 +32,4 @@ void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; return; -} \ No newline at end of file +} diff --git a/src/actor/ac_museum_fish_kingyo.c_inc b/src/actor/ac_museum_fish_kingyo.c_inc index 7021c6fa..030a4981 100644 --- a/src/actor/ac_museum_fish_kingyo.c_inc +++ b/src/actor/ac_museum_fish_kingyo.c_inc @@ -5,6 +5,7 @@ void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_kingyo_normal_init() { + // NOT BAD return; } @@ -13,6 +14,7 @@ void mfish_kingyo_normal() { } void mfish_kingyo_turn_init() { + // NOT BAD return; } @@ -21,6 +23,7 @@ void mfish_kingyo_turn() { } void mfish_kingyo_peck_init() { + // NOT BAD return; } @@ -43,4 +46,4 @@ void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; return; -} \ No newline at end of file +} diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index 24b675d9..7994696f 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -1,28 +1,21 @@ + void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) { f32 temp; + f32 temp2; + f32 temp3; if (r4 == 0) { - actor->_640 = (int)(6.0f * fqrand()) + 25; - //! BUG: fqrand2 called without being used - // Maybe some kind of min-max macro, where we're multiplying fqrand2 by 0 (temp - temp), - // but including fqrand2() directly in the equation below generates extra fmuls instr for some reason. - // The only way around it we found was to call it like this. - fqrand2(); - temp = 6.5f; - actor->_5AC.x = temp + (f32)(temp - temp); + actor->_640 = RANDOM_RANGE(25, 31); + actor->_5AC.x = RANDOM2F_RANGE(6.5f, 6.5f); } else if (r4 == 1) { if (actor->_640 == 0) { - actor->_640 = (int)(4.0f * fqrand()) + 20; - //! BUG: fqrand2 called without being used (see context above) - fqrand2(); - temp = 5.0f; - actor->_5AC.x = temp + (f32)(temp - temp); + actor->_640 = RANDOM_RANGE(20, 24); + actor->_5AC.x = RANDOM2F_RANGE(5.0f, 5.0f); + } + } else { + if (actor->_640 == 0) { + actor->_640 = RANDOM_RANGE(45, 51); + actor->_5AC.x = RANDOM2F_RANGE(1.0f, 1.0f); } - } else if (actor->_640 == 0) { - actor->_640 = (int)(6.0f * fqrand()) + 45; - //! BUG: fqrand2 called without being used (see context above) - fqrand2(); - temp = 1.0f; - actor->_5AC.x = temp + (f32)(temp - temp); } } @@ -74,7 +67,7 @@ void mfish_koi_peck_process() { return; } -void mfish_koi_long_move_process_init() { +void mfish_koi_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { return; } @@ -107,4 +100,4 @@ void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; return; -} \ No newline at end of file +} diff --git a/src/actor/ac_museum_fish_medaka.c_inc b/src/actor/ac_museum_fish_medaka.c_inc index 95c6756c..5eb3e92b 100644 --- a/src/actor/ac_museum_fish_medaka.c_inc +++ b/src/actor/ac_museum_fish_medaka.c_inc @@ -5,6 +5,7 @@ void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_medaka_normal_init() { + // NOT BAD return; } @@ -13,6 +14,7 @@ void mfish_medaka_normal() { } void mfish_medaka_turn_init() { + // NOT BAD return; } @@ -35,4 +37,4 @@ void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; return; -} \ No newline at end of file +} diff --git a/src/actor/ac_museum_fish_seafish.c_inc b/src/actor/ac_museum_fish_seafish.c_inc index c1f83683..458e7fa4 100644 --- a/src/actor/ac_museum_fish_seafish.c_inc +++ b/src/actor/ac_museum_fish_seafish.c_inc @@ -5,6 +5,7 @@ void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_seafish_normal_init() { + // NOT BAD return; } @@ -35,4 +36,4 @@ void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; return; -} \ No newline at end of file +} diff --git a/src/actor/ac_museum_fish_small_fish.c_inc b/src/actor/ac_museum_fish_small_fish.c_inc index 82a8a8cf..ea142ec6 100644 --- a/src/actor/ac_museum_fish_small_fish.c_inc +++ b/src/actor/ac_museum_fish_small_fish.c_inc @@ -5,6 +5,7 @@ void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_sfish_normal_init() { + // NOT BAD return; } @@ -17,6 +18,7 @@ void mfish_sfish_turn_init() { } void mfish_sfish_turn() { + // NOT BAD return; } @@ -35,4 +37,4 @@ void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; return; -} \ No newline at end of file +} diff --git a/src/actor/ac_museum_fish_tai.c_inc b/src/actor/ac_museum_fish_tai.c_inc index f42625c2..75424454 100644 --- a/src/actor/ac_museum_fish_tai.c_inc +++ b/src/actor/ac_museum_fish_tai.c_inc @@ -5,6 +5,8 @@ void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_tai_normal_init() { + // NOT BAD + return; } @@ -13,6 +15,8 @@ void mfish_tai_normal() { } void mfish_tai_turn_init() { + // NOT BAD + return; } @@ -33,6 +37,7 @@ void mfish_tai_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + // NOT BAD GAME_PLAY* game = (GAME_PLAY*)gamex; return; -} \ No newline at end of file +} diff --git a/src/actor/ac_museum_fish_unagi.c_inc b/src/actor/ac_museum_fish_unagi.c_inc index fa7e7ace..14ff9f68 100644 --- a/src/actor/ac_museum_fish_unagi.c_inc +++ b/src/actor/ac_museum_fish_unagi.c_inc @@ -5,6 +5,7 @@ void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_unagi_get_next_rail_type() { + // NOT BAD return; } @@ -56,7 +57,8 @@ void mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi } void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + // NOT BAD GAME_PLAY* game = (GAME_PLAY*)gamex; return; -} \ No newline at end of file +} From 83bb546c371686974fed15aca4c43aa83782924e Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 12 Dec 2024 14:31:02 -0500 Subject: [PATCH 08/33] Match mFish parent file and _base --- include/ac_museum_fish.h | 91 ++-- src/actor/ac_museum_fish.c | 101 ++--- src/actor/ac_museum_fish_base.c_inc | 628 ++++++++++++++++++++++++++-- src/actor/ac_museum_fish_bass.c_inc | 72 ++-- 4 files changed, 723 insertions(+), 169 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 26651ded..fbdd0c11 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -38,27 +38,35 @@ typedef struct _MUSEUM_FISH_INIT_DATA { s16 _30; } MUSEUM_FISH_INIT_DATA; // size: 0x34 -#define artificial_padding(currentOffset, lastOffset, typeOfLastMember) \ +#define artificial_padding(lastOffset, currentOffset, typeOfLastMember) \ u8 __##currentOffset##padding[currentOffset - lastOffset - sizeof(typeOfLastMember)] #define offsetof(structName, memberName) ((size_t) & (((structName*)0)->memberName)) typedef struct _YET_SKELETON { - cKF_SkeletonInfo_R_c _00; - Mtx _70; // offset A8 - artificial_padding(0x2b0, 0x70, Mtx); + cKF_SkeletonInfo_R_c _00; // offset 0, size 0x70 + Mtx _70; // offset 70, size + artificial_padding(0x70, 0x2b0, Mtx); Mtx _2b0; - artificial_padding(0x46C, 0x2b0, Mtx); + artificial_padding(0x2b0, 0x46C, Mtx); + void* _46C; - artificial_padding(0x4F0, 0x46C, void*); + artificial_padding(0x46C, 0x4F0, void*); + s_xyz _4F0; - artificial_padding(0x514, 0x4F0, s_xyz); + + artificial_padding(0x4F0, 0x514, s_xyz); + s_xyz _514; - artificial_padding(0x54C, 0x514, s_xyz); - void* _54C; - void* _550; -} YET_SKELETON; + + artificial_padding(0x514, 0x538, s_xyz); + s_xyz _538; + xyz_t _540; + cKF_Skeleton_R_c* _54C; + cKF_Animation_R_c* _550; + void* _554; +} YET_SKELETON; // size 558 typedef struct _FISH_PRIVATE_DATA { MUSEUM_FISH_INIT_DATA init_data; @@ -66,13 +74,13 @@ typedef struct _FISH_PRIVATE_DATA { YET_SKELETON _38; void* _590; - s32 _594; - s32 _598; + struct _FISH_PRIVATE_DATA* _594; + struct _FISH_PRIVATE_DATA* _598; s32 _59C; // fish num xyz_t _5A0; xyz_t _5AC; xyz_t _5B8; - artificial_padding(0x5D0, 0x5B8, xyz_t); + artificial_padding(0x5B8, 0x5D0, xyz_t); f32 _5D0; f32 _5D4; f32 _5D8; @@ -88,7 +96,7 @@ typedef struct _FISH_PRIVATE_DATA { f32 _608; s_xyz _60C; s_xyz _612; - artificial_padding(0x61A, 0x612, s_xyz); + artificial_padding(0x612, 0x61A, s_xyz); s16 _61A; s16 _61C; s16 _61E; @@ -109,20 +117,11 @@ typedef struct _FISH_PRIVATE_DATA { s16 _63C; s16 _63E; s16 _640; -} MUSEUM_FISH_PRIVATE_DATA; + s16 _642; +} MUSEUM_FISH_PRIVATE_DATA; // size 644 // Holds data for the underwater grass -typedef struct _MUSEUM_FISH_KUSA_DATA { - YET_SKELETON _00; - s_xyz _4F0; - s_xyz _514; - s16 _538; - s16 _53A; - s16 _53C; - float _540; - float _548; - void* _54C; -} MUSEUM_FISH_KUSA_DATA; // size 558 +typedef YET_SKELETON MUSEUM_FISH_KUSA_DATA; typedef struct _FISH_DISPLAY_MSG_INFO { s16 fishName; @@ -134,26 +133,30 @@ typedef struct _MUSEUM_FISH_ACTOR { int _174; MUSEUM_FISH_PRIVATE_DATA prvFish[40]; // offset: 0x178 size: 0xFB48 MUSEUM_FISH_KUSA_DATA prvKusa[14]; // offset: 0xFCB8 size: 0x4AD0 - s16 _101f0; - s16 _101f4; - void* _14788; + void* _14788; // offset: 0x14788 size: 4 + + artificial_padding(0x14788, 0x14d08, void*); + xyz_t _14d08[2]; int numFishDisplayed; // offset: 0x14d20, size: 4 int fishDisplayMsgIter; // offset: 0x14d24, size: 4 FISH_DISPLAY_MSG_INFO fishDisplayMsgInfo[10]; // offset: 0x14d28, size: 4*10 - s16 _14d50[0x10]; - s16 _14d78[0x10]; + s16 _14d50[20]; + s16 _14d78[20]; + artificial_padding(0x14d78, 0x14daa, s16[20]); + + s16 _14daa[5]; s16 _14db4; - s16 _14db6; // offset: 0x14db6, size: 2 - s16 _14db8; // offset: 0x14db8, size: 2 - s16 _14dba; // offset: 0x14dba, size: 2 - s16 _14dbc[2]; // offset: 0x14dbc, size: 4 - s16 _14dc0; // offset: 0x14dc0, size: 2 - s16 _14dc2; // offset: 0x14dc2, size: 2 - s16 _14dc4; // offset: 0x14dc4, size: 2 - s16 _14dc8; // offset: 0x14dc8, size: 2 -} MUSEUM_FISH_ACTOR; + s16 _14db6; // offset: 0x14db6, size: 2 + s16 _14db8; // offset: 0x14db8, size: 2 + s16 _14dba; // offset: 0x14dba, size: 2 + s16 _14dbc[2]; // offset: 0x14dbc, size: 4 + s16 _14dc0; // offset: 0x14dc0, size: 2 + s16 _14dc2; // offset: 0x14dc2, size: 2 + s16 _14dc4; // offset: 0x14dc4, size: 2 + s16 _14dc8; // offset: 0x14dc8, size: 2 +} MUSEUM_FISH_ACTOR; // size 14DCA void Museum_Fish_Prv_data_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, int fishNum, int r6); void Museum_Fish_Actor_ct(ACTOR* actor, GAME* game); @@ -172,7 +175,7 @@ BOOL mfish_cull_check(GAME* game, xyz_t* worldPos, f32 x, f32 y, f32 _y); void mfish_point_ligh_pos_get(ACTOR* actorx, GAME* game, int r5); void mfish_point_light_ct(ACTOR* actor, GAME* game); void mfish_point_light_dt(ACTOR* r30, GAME* r31); -void mfish_point_light_mv(ACTOR* actor, GAME* game); +void mfish_point_light_mv(MUSEUM_FISH_ACTOR* actor, GAME* game); void mfish_normal_light_set(); f32 Rnd_EX_f(f32 v1); @@ -203,7 +206,7 @@ void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void Museum_Fish_BigFishObjCheck(); void Museum_Fish_ObjBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex, f32 f1, f32 f2); void Museum_Fish_DonkoBGCheck(); -void Museum_Fish_objchk_pos_set(); +void Museum_Fish_objchk_pos_set(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void Museum_Fish_Kusa_Check(); void Museum_Fish_Object_Check(); @@ -214,7 +217,7 @@ BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); BOOL mfish_ground_peck_before_check(); void mfish_get_player_area(); void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_get_escape_angle(); +s16 mfish_get_escape_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_move_smooth(); void mfish_hamon_make(); void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index 01944472..c200a2bc 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -1,13 +1,10 @@ #include "ac_museum_fish.h" -#include "m_kankyo.h" -#include "m_play.h" #include "m_demo.h" #include "m_name_table.h" #include "m_item_name.h" #include "m_msg.h" #include "m_common_data.h" #include "sys_matrix.h" -#include "m_lib.h" #include "m_player_lib.h" #include "m_debug_mode.h" #include "libforest/gbi_extensions.h" @@ -707,26 +704,27 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) { // 0x1338 : kusa_anime // 0x1370 : kusa_start_frame actor->prvKusa[i]._54C = kusa_model[i]; - cKF_SkeletonInfo_R_ct(&actor->prvKusa[i]._00._00, kusa_model[i], kusa_anime[i], &actor->prvKusa[i]._4F0, + cKF_SkeletonInfo_R_ct(&actor->prvKusa[i]._00, kusa_model[i], kusa_anime[i], &actor->prvKusa[i]._4F0, &actor->prvKusa[i]._514); - cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->prvKusa[i]._00._00, kusa_anime[i], NULL, + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->prvKusa[i]._00, kusa_anime[i], NULL, kusa_group_tbl[i] == 2 ? 1.5f : 0.5f, 0.0f); - actor->prvKusa[i]._00._00.frame_control.current_frame = kusa_start_frame[i]; - actor->_101f0 = qrand(); - actor->_101f4 = qrand(); + actor->prvKusa[i]._00.frame_control.current_frame = kusa_start_frame[i]; + actor->prvKusa[i]._538.x = qrand(); + actor->prvKusa[i]._538.z = qrand(); + // actor->_101f0[i * 2 + 2] = qrand(); } if (mMmd_FishInfo(0x21)) { actor->prvFish[0x21]._590 = &actor->_14788; } else { - mfish_hasu_ct(&actor->prvFish[0x21], gamex); + mfish_hasu_ct((MUSEUM_FISH_PRIVATE_DATA*)&actor->_14788, gamex); } prv = actor->prvFish; for (i = 0; i < 40; i++, prv++) { prv->_62E &= ~1; if (mMmd_FishInfo(i)) { - prv->_38._550 = mfish_model_tbl[i]; + prv->_38._54C = mfish_model_tbl[i]; prv->_38._550 = mfish_anime_init_tbl[i]; prv->_62E |= 1; Museum_Fish_Prv_data_init(prv, gamex, i, 1); @@ -890,14 +888,15 @@ void Museum_Fish_Talk_process(ACTOR* actorx, GAME* game) { } void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { - s16 old_14db4; int i; - f32 v; - MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; - GAME_PLAY* play = (GAME_PLAY*)game; + int j; MUSEUM_FISH_PRIVATE_DATA* prv; + s16 old_14db4; + f32 v; + GAME_PLAY* play = (GAME_PLAY*)game; + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; - mfish_point_light_mv(actorx, &play->game); + mfish_point_light_mv(actor, &play->game); old_14db4 = actor->_14db4; mfish_get_player_area(actor, &play->game); @@ -925,21 +924,21 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { } } - for (i = 0; i < 0xe; i++) { - cKF_SkeletonInfo_R_play(&actor->prvKusa[i]._00._00); - if (kusa_group_tbl[i] == 2) { - add_calc2(&actor->prvKusa[i]._540, -2.25f, 1.75f, 1.75f); - add_calc_short_angle2(&actor->prvKusa[i]._53A, DEG2SHORT_ANGLE(3.5f), CALC_EASE2(0.1f), 20, 4); + for (j = 0; j < 14; j++) { + cKF_SkeletonInfo_R_play(&actor->prvKusa[j]._00); + if (kusa_group_tbl[j] == 2) { + add_calc2(&actor->prvKusa[j]._540.x, -2.25f, 1.75f, 1.75f); + add_calc_short_angle2(&actor->prvKusa[j]._538.y, DEG2SHORT_ANGLE(3.5f), CALC_EASE2(0.1f), 22, 4); } else { - actor->prvKusa[i]._540 *= 0.9f; - add_calc_short_angle2(&actor->prvKusa[i]._53A, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4); + actor->prvKusa[j]._540.x *= 0.9f; + add_calc_short_angle2(&actor->prvKusa[j]._538.y, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4); } - actor->prvKusa[i]._548 *= 0.98f; + actor->prvKusa[j]._540.z *= 0.98f; - actor->prvKusa[i]._538 += actor->prvKusa[i]._53A; - actor->prvKusa[i]._53C += actor->prvKusa[i]._53A >> 1; + actor->prvKusa[j]._538.x += actor->prvKusa[j]._538.y; + actor->prvKusa[j]._538.z += actor->prvKusa[j]._538.y >> 1; - add_calc_short_angle2(&actor->prvKusa[i]._53A, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4); + add_calc_short_angle2(&actor->prvKusa[j]._538.y, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4); } Museum_Fish_Kusa_Check(actor, &play->game); @@ -960,24 +959,27 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { } } - // TODO: check if this is broken after we changed this above Museum_Fish_Talk_process(actorx, game); - prv = actor->prvFish; - for (i = 0; i < 40; i++, prv++) { - if (prv->_62E & 1) { - mfish_mv[i](prv, game); + + { + // needs a new variable + MUSEUM_FISH_PRIVATE_DATA* prv = actor->prvFish; + for (i = 0; i < 40; i++, prv++) { + if (prv->_62E & 1) { + mfish_mv[i](prv, game); + } } } if ((actor->prvFish[0x21]._62E & 1) == 0) { - mfish_hasu_mv(&actor->prvFish[0x21], game); + mfish_hasu_mv((MUSEUM_FISH_PRIVATE_DATA*)&actor->_14788, game); } for (i = 0; i < 5; i++) { if (i == 2) { - actor->_14d78[i] += (s16)DEG2SHORT_ANGLE2((float)GETREG(TAKREG, 20) * 0.1f + 0.5f + RANDOM_F(1)); + actor->_14daa[i] += (s16)DEG2SHORT_ANGLE2((float)GETREG(TAKREG, 31) * 0.1f + 0.5f + RANDOM_F(1)); } else { - actor->_14d78[i] += 8; + actor->_14daa[i] += 8; } } } @@ -1007,13 +1009,13 @@ void Museum_Fish_Suisou_draw(ACTOR* actorx, GAME* game, int r5) { Setpos_HiliteReflect_xlu_init(&suisou_pos[r5], play); - gSPDisplayList(NEXT_POLY_XLU_DISP, obj_suisou1_model); + gSPDisplayList(NEXT_POLY_OPA_DISP, obj_suisou1_model); gSPDisplayList(NEXT_POLY_XLU_DISP, obj_suisou1_modelT); CLOSE_DISP(graph); if ((actor->prvFish[0x21]._62E & 1) == 0) { - mfish_hasu_dw(&actor->prvFish[0x21], game); + mfish_hasu_dw((MUSEUM_FISH_PRIVATE_DATA*)&actor->_14788, game); } } } else if (mfish_cull_check(game, &suisou_pos[4], 215.0f, 25.0f, 0.0f)) { @@ -1044,11 +1046,11 @@ int kusa_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, if (joint_num > 0) { f32 v = (actor->_54C == &cKF_bs_r_obj_museum5_kusa3) ? 35.0f : 20.f; - joint1->y += (s16)(sin_s(actor->_538 + (joint_num * DEG2SHORT_ANGLE(90))) * 1274.0f); - joint1->x += (s16)(sin_s(actor->_53C + (joint_num * DEG2SHORT_ANGLE(90))) * 4369.0f); + joint1->y += (s16)(sin_s(actor->_538.x + (joint_num * DEG2SHORT_ANGLE(90))) * 1274.0f); + joint1->x += (s16)(sin_s(actor->_538.z + (joint_num * DEG2SHORT_ANGLE(90))) * 4369.0f); - trans->y -= actor->_548 * (v * joint_num); - trans->z += actor->_540 * (v * joint_num); + trans->y -= actor->_540.x * (v * joint_num); + trans->z += actor->_540.z * (v * joint_num); } return 1; } @@ -1059,16 +1061,16 @@ void Museum_Fish_Kusa_Draw(ACTOR* actorx, GAME* game, int r5) { if (mfish_cull_check(game, &kusa_pos[r5], 0.0f, 0.0f, 120.0f)) { Mtx* mtx; if (play->game.frame_counter % 2 != 0) { - mtx = &actor->prvKusa[r5]._00._70; + mtx = &actor->prvKusa[r5]._70; } else { - mtx = &actor->prvKusa[r5]._00._2b0; + mtx = &actor->prvKusa[r5]._2b0; } OPEN_DISP(game->graph); Matrix_translate(kusa_pos[r5].x, 0, kusa_pos[r5].z, 0); Matrix_scale(0.01f, 0.01f, 0.01f, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); CLOSE_DISP(game->graph); - cKF_Si3_draw_R_SV(game, &actor->prvKusa[r5]._00._00, mtx, kusa_before_disp, NULL, &actor->prvKusa[r5]); + cKF_Si3_draw_R_SV(game, &actor->prvKusa[r5]._00, mtx, kusa_before_disp, NULL, &actor->prvKusa[r5]); } } @@ -1119,7 +1121,7 @@ void Museum_Fish_Actor_draw(ACTOR* actorx, GAME* game) { mfish_dw[0x21](&actor->prvFish[0x21], game); } - if (GETREG(TAKREG, 92) == 1) { + if (GETREG(TAKREG, 82) == 1) { mfish_normal_light_set(actorx, game); } } @@ -1224,8 +1226,8 @@ void mfish_point_ligh_pos_get(ACTOR* actorx, GAME* game, int r5) { void mfish_point_light_ct(ACTOR* actorx, GAME* game) { MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; GAME_PLAY* play = (GAME_PLAY*)game; - mfish_point_ligh_pos_get(actorx, game, 0); - mfish_point_ligh_pos_get(actorx, game, 1); + mfish_point_ligh_pos_get(&actor->actor, game, 0); + mfish_point_ligh_pos_get(&actor->actor, game, 1); actor->_14db8 = mEnv_ReservePointLight(play, &actor->_14d08[0], 0, 0x96, 0xff, (u8)actor->_14dbc[0]); actor->_14dba = mEnv_ReservePointLight(play, &actor->_14d08[1], 0, 0x96, 0xff, (u8)actor->_14dbc[1]); actor->_14dc0 = 0; @@ -1244,12 +1246,11 @@ void mfish_point_light_dt(ACTOR* actorx, GAME* game) { } } -void mfish_point_light_mv(ACTOR* actorx, GAME* game) { - MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; +void mfish_point_light_mv(MUSEUM_FISH_ACTOR* actor, GAME* game) { GAME_PLAY* play = (GAME_PLAY*)game; - mfish_point_ligh_pos_get(actorx, game, 0); - mfish_point_ligh_pos_get(actorx, game, 1); + mfish_point_ligh_pos_get(&actor->actor, game, 0); + mfish_point_ligh_pos_get(&actor->actor, game, 1); mEnv_OperateReservedPointLight(actor->_14db8, &actor->_14d08[0], 0, 0x96, 0xff, (u8)actor->_14dbc[0]); mEnv_OperateReservedPointLight(actor->_14dba, &actor->_14d08[1], 0, 0x96, 0xff, (u8)actor->_14dbc[1]); diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index 16e835a8..791b7aec 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -225,7 +225,7 @@ void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { v = -ABS(v); } } else if (actor->_62E & 0x1e) { - if ((s16)(actor->_62C - actor->_60C.y) < 0) { + if ((s16)(actor->_60C.y - actor->_62C) < 0) { v = -v; } else { v = v; @@ -275,7 +275,7 @@ void mfish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { CALC_EASE(0.2f), actor->_61A >> 1, DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); - if (ABS((s16)(actor->_612.y - actor->_61C)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) { + if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) { if (actor->_63E > 0) { if (mfish_WallCheck(actor)) { mfish_turn_process_init(actor); @@ -350,7 +350,7 @@ void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_632 > DEG2SHORT_ANGLE(15)) { add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.25f), - (((actor->_632 - DEG2SHORT_ANGLE(15)) / DEG2SHORT_ANGLE(2)) * 0.04f + 0.01f) * 0.5f, 0.05f); + (((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.04f + 0.01f) * 0.5f, 0.05f); } else if (actor->_626 > actor->_628 - 16) { add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), 0.5f, 0.05f); } else if (dist > 20) { @@ -398,7 +398,7 @@ void mfish_ground_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex void mfish_ground_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { xyz_t p = suisou_pos[actor->_630]; xyz_t_sub(&p, &actor->_5A0, &p); - actor->_5F4 = ((actor->init_data._08 * 0.3f + 64.0f) - (MAX(ABS(p.x), ABS(p.y)) * 0.15f)) - actor->init_data._0C; + actor->_5F4 = ((actor->init_data._08 * 0.3f + 64.0f) - (MAX(ABS(p.x), ABS(p.z)) * 0.15f)) - actor->init_data._0C; xyz_t_mult_v(&actor->_5DC, 0.1f); if (actor->_5A0.y > actor->_5F4 + actor->init_data._0C + 4.0f) { @@ -445,7 +445,7 @@ void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } actor->_5D4 = 0.0; actor->_5AC = ZeroVec; - actor->_63E = qrand(); + actor->_638 = qrand(); actor->_622 = actor->_60C.y; } @@ -613,11 +613,10 @@ void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - // NOT BAD + mfish_onefish_dw(actor, gamex); } -void Museum_Fish_BigFishObjCheck(MUSEUM_FISH_PRIVATE_DATA* actor) { +void Museum_Fish_BigFishObjCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { int i; MUSEUM_FISH_PRIVATE_DATA* fish[2]; f32 max[2] = { 430.0f, 530.0f }; @@ -765,11 +764,11 @@ void Museum_Fish_ObjBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex, f32 f1 } void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - f32 a, b, c, d; + f32 a, b, d, c; + f32 f27; + f32 f24; f32 f25; f32 f26; - f32 f24; - f32 f27; xyz_t p = suisou_pos[actor->_630]; f32 v = (sin_s(actor->_60C.y) * 0.7f) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f) + 0.3f; f32 v2 = (cos_s(actor->_60C.y) * 0.7f) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f) + 0.3f; @@ -779,14 +778,15 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { // asm 17C a = (+00.0f + p.x); b = (-45.5f + p.x); - c = (+45.0f + p.z); d = (-17.5f + p.z); + c = (+45.0f + p.z); + f27 = 76.0f - 6.0f * cos_s(DEG2SHORT_ANGLE2(180.0f * (actor->_5B8.x - p.x) / 55.0f)); - f26 = 76.0f - 6.0f * cos_s(DEG2SHORT_ANGLE2((actor->_5B8.x + sin_s(actor->_60C.z) - p.x) * 180.0f / 55.0f)); + f26 = 76.0f - 6.0f * cos_s(DEG2SHORT_ANGLE2((actor->_5B8.x + sin_s(actor->_60C.y) - p.x) * 180.0f / 55.0f)); a -= (actor->_5A0.x + actor->init_data._28 * v); - c -= (actor->_5A0.x - actor->init_data._28 * v); - b -= (actor->_5A0.z + actor->init_data._28 * v2); + b -= (actor->_5A0.x - actor->init_data._28 * v); + c -= (actor->_5A0.z + actor->init_data._28 * v2); d -= (actor->_5A0.z - actor->init_data._28 * v2); /* @@ -844,7 +844,7 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } } - f25 = MIN(MIN(actor->_608, actor->_604), MIN(actor->_5FC, actor->_600)); + f25 = MIN(MIN(actor->_608, actor->_604), MIN(actor->_600, actor->_5FC)); if (f25 < 5.0f) { f27 -= 0.5f * (5.0f - f25); } @@ -863,24 +863,330 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } } -void Museum_Fish_objchk_pos_set() { - // NOT BAD +void Museum_Fish_objchk_pos_set(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + actor->_5B8 = actor->_5A0; + actor->_5B8.x += (actor->init_data._24 * sin_s(actor->_60C.y)); + actor->_5B8.z += (actor->init_data._24 * cos_s(actor->_60C.y)); } void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { - return; + xyz_t p = suisou_pos[actor->_630]; + f32 f29, f30, f28, f27, f31, f26, f25; + s32 r31 = 0; + + if ((actor->_624 == 0 || actor->_624 == 0xb || actor->_624 == 0x1 || actor->_624 == 0x2) && + actor->init_data._28 < 0) { + f26 = + GETREG(TAKREG, 0x52) * 0.01f + 0.3f + + (0.7f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(sin_s(actor->_60C.y)) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f); + f25 = + GETREG(TAKREG, 0x52) * 0.01f + 0.3f + + (0.7f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(cos_s(actor->_60C.y)) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f); + } else if (actor->_624 == 10 || actor->_624 == 7 || actor->_624 == 9) { + f26 = + GETREG(TAKREG, 0x52) * 0.01f + 0.6f + + (0.4f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(sin_s(actor->_60C.y)) * (ABS(cos_s(actor->_61C)) * 0.4f + 0.6f); + f25 = + GETREG(TAKREG, 0x52) * 0.01f + 0.6f + + (0.4f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(cos_s(actor->_60C.y)) * (ABS(cos_s(actor->_61C)) * 0.4f + 0.6f); + } else { + f26 = 1.0f; + f25 = 1.0f; + } + + if (actor->_630 < 4) { + f30 = 54.0f + actor->init_data._28 * f26; + f29 = 54.0f + actor->init_data._28 * f26; + f28 = 54.0f + actor->init_data._28 * f25; + f27 = 54.0f + actor->init_data._28 * f25; + } else { + f30 = actor->init_data._28 * f26 + 189.0f; + f29 = actor->init_data._28 * f26 + 189.0f; + f28 = actor->init_data._28 * f25 + 14.0f; + f27 = actor->init_data._28 * f25 + 25.0f; + f31 = actor->_5B8.x - p.x; + f27 += cos_s(f31 * 32768.0f / 180.0f) * 9.0f; + f27 += 21.0f; + r31 = DEG2SHORT_ANGLE(sin_s(f31 * 32768.0f / 180.0f) * -10.0f); + } + + actor->_62E &= ~0x1e; + actor->_62C = 0; + Museum_Fish_objchk_pos_set(actor, game); + + if (actor->_5B8.x > (p.x + f30)) { + actor->_5A0.x += (p.x + f30) - actor->_5B8.x; + actor->_62E |= 0x4; + } else if (actor->_5B8.x < p.x - f29) { + actor->_5A0.x += (p.x - f29) - actor->_5B8.x; + actor->_62E |= 0x2; + } + + if (actor->_5B8.z > (p.z + f28)) { + actor->_5A0.z += (p.z + f28) - actor->_5B8.z; + actor->_62E |= 0x10; + } else if (actor->_5B8.z < (p.z - f27)) { + actor->_5A0.z += (p.z - f27) - actor->_5B8.z; + actor->_62E |= 0x8; + } + + // asm 468 + Museum_Fish_objchk_pos_set(actor, game); + actor->_5FC = actor->_5B8.x - (p.x - f29); + actor->_600 = (p.x + f30) - actor->_5B8.x; + actor->_604 = actor->_5B8.z - (p.z - f27); + actor->_608 = (p.z + f28) - actor->_5B8.z; + + if (actor->_630 < 4 && actor->_59C != 26) { + Museum_Fish_ObjBGCheck(actor, game, f26, f25); + } + + if (actor->_62E & 2) { + actor->_62C = DEG2SHORT_ANGLE(-90); + } else if (actor->_62E & 4) { + actor->_62C = DEG2SHORT_ANGLE(90); + } + + if (actor->_62E & 8) { + if (actor->_62E & 6) { + actor->_62C = (DEG2SHORT_ANGLE(180) - (actor->_62C >> 1) + ((s16)r31 >> 1)); + } else { + actor->_62C = r31 + DEG2SHORT_ANGLE(180); + } + } else if (actor->_62E & 0x10) { + if (actor->_62E & 6) { + actor->_62C >>= 1; + } else { + actor->_62C = DEG2SHORT_ANGLE(0); + } + } } -void Museum_Fish_Kusa_Check() { +void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { static int kusa_group_tbl[14] = { 0, 2, 1, 3, 3, 4, 4, 4, 4, 4, 0, 2, 1, 3 }; + MUSEUM_FISH_KUSA_DATA* k; + MUSEUM_FISH_PRIVATE_DATA* f = &actor->prvFish[0]; + int i; + int j; + f32 sq; + f32 f30 = 0.0f; + f32 f29 = 0.0f; + f32 f28 = 0.0f; + + for (i = 0; i < 40; i++, f++) { + f->_62E &= ~0x100; + + // this if statement salso works as a continue statement + if (f->_59C != 0x1a && f->_59C != 0x1f && f->_59C != 0x21) { + + for (j = 0; j < 14; j++) { + f32 f1 = (j < 5) ? 90.0f : (j < 10) ? 115.0f : 80.0f; + + if (kusa_group_tbl[j] == f->_630 && f->_5B8.y < f1) { + f32 z; + f32 x; + f32 d; + f32 dSQ; + f32 dx; + f32 dy; + + if (kusa_group_tbl[j] == 4) { + if (f->_59C == 0x1f) { + d = 5.0f + f->init_data._08; + } else { + d = 10.0f + f->init_data._08; + } + dSQ = d * d; + } else { + d = 5.0f + f->init_data._08; + dSQ = d * d; + } + + x = f->_5B8.x - (kusa_pos[j].x + actor->prvKusa[j]._540.x); + z = f->_5B8.z - (kusa_pos[j].z + actor->prvKusa[j]._540.z); + + sq = SQ(x) + SQ(z); + if (sq < dSQ) { + f32 t; + s16 v = atans_table(z, x); + + d -= sqrtf(sq); + d *= 0.1f; + f30 += sin_s(v) * d; + if (kusa_group_tbl[j] == 4) { + f29 += MAX(cos_s(v), 0.2f) * d; + } else { + f29 += cos_s(v) * d; + } + + f28 += 1; + + actor->prvKusa[j]._540.x -= (f->init_data._20 * 1.5f) * d * sin_s(v); + + if (kusa_group_tbl[j] == 4) { + actor->prvKusa[j]._540.z -= (f->init_data._20 * 1.5f) * d * MAX(cos_s(v), 0.1f); + } else { + actor->prvKusa[j]._540.z -= (f->init_data._20 * 1.5f) * d * cos_s(v); + } + t = SQ(actor->prvKusa[j]._540.x) + SQ(actor->prvKusa[j]._540.z); + t = sqrtf(t); + if (t > 4.0f) { + xyz_t_mult_v(&actor->prvKusa[j]._540, 4.0f / t); + } + actor->prvKusa[j]._538.y = 0x27d; + } + } + // asm 3fc-410 + } + // asm 414 + if (f28 > 0.0f) { + f->_62E |= 0x100; + f->_5A0.x += (f30 / f28); + f->_5A0.z += (f29 / f28); + } + f28 = 0.0f; + f29 = 0.0f; + f30 = 0.0f; + // asm 460 + } + } } -void Museum_Fish_Object_Check() { - return; +void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { + int i; + MUSEUM_FISH_PRIVATE_DATA* fj; // r31 + MUSEUM_FISH_PRIVATE_DATA* f; // r29 + int j; + f32 f31; + f32 f30; + f32 f29; + xyz_t test; + f32 f28 = 0.0f; + f32 f27 = 0.0f; + f32 f26 = 0.0f; + f32 f25 = 0.0f; + f32 f24 = 0.0f; + f32 f23 = FLT_MAX; + f32 f22; + f32 sq_xz; + f32 sq_xzy; + + fj = f = &actor->prvFish[0]; + + for (i = 0; i < 40; i++, f++) { + f->_62E &= ~0x20; + } + + f = &actor->prvFish[0]; + for (i = 0; i < 40; i++, f++) { + // asm b8 + if (i != 0x21 && i != 0x20 && i != 0x1a && i != 0x27 && i != 0xa && f->_62E & 1) { + for (j = 0; j < 40; j++, fj++) { + if (f->_630 == fj->_630 && i != j && j != 0x21 && j != 0x1a && j != 0x27 && j != 10 && + fj->_62E & 1 != 0) { + + test.x = f->_5B8.x - fj->_5B8.x; // f31 + test.y = f->_5B8.y - fj->_5B8.y; // f29 + test.z = f->_5B8.z - fj->_5B8.z; // f30 + sq_xz = SQ(test.x) + SQ(test.z); + sq_xzy = sq_xz + SQ(test.y); + if (sqrtf(sq_xzy) < f23) { + f23 = sqrtf(sq_xzy); + f->_598 = fj; + } + + if (ABS(test.y) < (f->init_data._04 + fj->init_data._04)) { + f32 additive = f->init_data._08 + fj->init_data._08; + + if (sq_xz < SQ(additive)) { + f22 = additive - sqrtf(SQ(test.x) + SQ(test.z)); + + // bug? + if (test.y > atans_table(sqrtf(SQ(test.x) + SQ(test.z)), test.y) * 0.0f) { + test.y = -test.y + (f->init_data._04 + fj->init_data._04); + } else { + test.y = -test.y - (f->init_data._04 + fj->init_data._04); + } + + test.y *= 0.2f + (GETREG(TAKREG, 0x11)) * 0.001f; + f22 *= 0.2f + (GETREG(TAKREG, 0x12)) * 0.001f; + f->_62A = atans_table(test.z, test.x); + f->_62E |= 0x20; + fj->_62A = f->_62A + DEG2SHORT_ANGLE(180); + f->_62E |= 0x20; + f->_594 = fj; + if ((fj->_62E & 0x1e) == 0 || ABS((s16)(fj->_62C - f->_62A)) >= DEG2SHORT_ANGLE(90)) { + f32 v = (fj->init_data._20 / (f->init_data._20 + fj->init_data._20)); + v *= (1.0f - f->init_data._20); + f22 *= v; + test.y *= v; + } else { + f32 v = (2.0f * fj->init_data._20 / (f->init_data._20 + 2.0f * fj->init_data._20)); + v *= (1.0f - f->init_data._20); + f22 *= v; + test.y *= v; + } + + if (f22 < ABS(test.y) || f->_624 == 0xa || f->_59C == 0x1f) { + f28 += sin_s(f->_62A) * f22; + f27 += cos_s(f->_62A) * f22; + f25 += 1.0f; + } else { + f26 += test.y; + f24 += 1; + } + + if (fj->init_data._20 > f->init_data._20 && f->_5F8 <= f->init_data._08 * 10.0f) { + f->_5F8 += f22; + } + } + } + } + + // asm 5ec - 5f8 + } + + if (f25 > 0.0f) { + f->_5A0.x += f28 / f25; + f->_5A0.z += f27 / f25; + } + + if (f24 > 0) { + f->_5A0.y += MAX(MIN(f26 / f24, 0.5f), -0.5f); + + if (f->_624 == 0 || f->_624 == 0xb) { + f->_5F4 += f26 / f24; + } + } + + if (f24 > 0 && f25 > 0) { + xyz_t r; + xyz_t_sub(&f->_594->_5A0, &f->_5A0, &r); + f->_62A = atans_table(r.z, r.x); + } + + f25 = 0.0f; + f24 = 0.0f; + f27 = 0.0f; + f28 = 0.0f; + f26 = 0.0f; + f23 = FLT_MAX; + fj = &actor->prvFish[0]; + } + if (f->_630 == 3 && f->_624 != 7) { + Museum_Fish_BigFishObjCheck(f, game); + } + // asm 728 + } } -void mfish_body_wind_anime_play() { - return; +void mfish_body_wind_anime_play(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + int a; + // needs int temp to generate extsh + a = DEG2SHORT_ANGLE(GETREG(TAKREG, 0x32) * 0.1f + 1.5f + RANDOM_F(1.0f)); + actor->_63A += a; + a = DEG2SHORT_ANGLE(GETREG(TAKREG, 0x31) * 0.1f + 0.5f + RANDOM_F(0.5f)); + actor->_63C += a; } void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* atanx, s16* atany, f32* distance) { @@ -891,7 +1197,7 @@ void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* at p = playerActor->actor_class.world.position; p.y += 40.0f; xyz_t_sub(&p, &actor->_5A0, &p1); - v = p1.x * p1.x + p1.z * p1.z; + v = SQ(p1.x) + SQ(p1.z); v = sqrtf(v); if (atanx) { *atanx = atans_table(p1.z, p1.x); @@ -904,34 +1210,276 @@ void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* at } } -BOOL mfish_peck_check() { - return; +BOOL mfish_peck_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + Private_c* commonData_prv = common_data.now_private; + + if (MF_Control_Actor->_14db4 == actor->_630) { + if (actor->_59C == 0x18) { + return TRUE; + } else if (mPr_GetPossessionItemIdx(commonData_prv, 0x2806) != -1) { + if (actor->_59C == 2 || actor->_59C == 3) { + return TRUE; + } + } else if (mPr_GetPossessionItemIdxItem1Category(commonData_prv, 8) != -1 && + (actor->_59C == 0x17 || actor->_59C == 0x1e)) { + return TRUE; + } + } + + return FALSE; } -BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { - // NOT BAD +BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + s16 temp = (actor->_60C.y - actor->_62C); + if (actor->_62E & 0x1E && ABS(temp) < DEG2SHORT_ANGLE(45)) { + PLAYER_ACTOR* playerActor = get_player_actor_withoutCheck((GAME_PLAY*)gamex); + xyz_t target = playerActor->actor_class.world.position; + return search_position_distance(&actor->_5A0, &target) < 60.0f; + } + return FALSE; } -BOOL mfish_ground_peck_before_check() { - return; +BOOL mfish_ground_peck_before_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + xyz_t p, p2; + f32 v; + + p2 = p = suisou_pos[actor->_630]; + + xyz_t_sub(&p2, &actor->_5A0, &p2); + + v = MAX(ABS(p2.x), ABS(p2.z)); + + if (actor->_34 == mfish_ground_peck_process) { + return actor->_63E > 0; + } else if ((actor->_630 == 2) && (actor->_5A0.x < p.x + 20.0f) && (actor->_5A0.z > p.z - 10.0f) && + (actor->_5A0.y < (actor->init_data._08 * 0.5f + 75.0f) - (v * 0.15f)) && (fqrand() > 0.2f)) { + return TRUE; + } + + return FALSE; } -void mfish_get_player_area() { - return; +void mfish_get_player_area(MUSEUM_FISH_ACTOR* actor, GAME* gamex) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)gamex); + xyz_t p = player->actor_class.world.position; + + if (actor->_14db6-- < 0) { + actor->_14db6 = 0x1e; + } else { + return; + } + + if (p.z < 80.0f) { + actor->_14db4 = 4; + return; + } + + if (p.z > 120.0f && p.z < 320.0f) { + if (p.x < 320.0f) { + actor->_14db4 = 0; + } else { + actor->_14db4 = 1; + } + return; + } + + if (p.z > 360.0f && p.z < 560.0f) { + if (p.x < 320.0f && p.x > 120.0f) { + actor->_14db4 = 2; + } else { + actor->_14db4 = 3; + } + return; + } + + actor->_14db4 = -1; } void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { - return; + f32 v; + xyz_t p2; + xyz_t p = suisou_pos[actor->_630]; + xyz_t t; + xyz_t p3; + + f32 xy; + f32 s; + s16 s2; + + f32 d; + f32 dSQ; + + if (actor->_630 == 0) { + v = 0.05f; + } else if (actor->_630 == 1) { + v = 0.06f; + } else if (actor->_630 == 2) { + v = 0.2f; + } else if (actor->_630 == 3) { + v = 0.05f; + } else if (actor->_630 == 4) { + v = 0.08f; + } + xyz_t_sub(&actor->_5A0, &p, &t); + xy = SQ(t.x) + SQ(t.z); + s = (sin_s(DEG2SHORT_ANGLE2(360.0f * sqrtf(xy) / 720.0f)) * 0.1f + 0.2f); + p2.x = s * cos_s(DEG2SHORT_ANGLE2(360.0f * t.x / 60.0f)); + p2.z = s * cos_s(DEG2SHORT_ANGLE2(360.0f * t.z / 60.0f)); + p2.y = (s * 0.5f) * cos_s(DEG2SHORT_ANGLE2(180.0f * t.y / 70.0f)); + + s2 = atans_table(t.z, t.x); + s2 += MF_Control_Actor->_14daa[actor->_630]; + + if (actor->_630 == 2) { + p2.x += (GETREG(TAKREG, 0xc) * 0.01f + 2.0f) * cos_s(s2); + p2.z += (GETREG(TAKREG, 0xc) * 0.01f + 2.0f) * sin_s(s2); + } else { + p2.x += (GETREG(TAKREG, 0xc) * 0.01f + 1.5f) * cos_s(s2); + p2.z += (GETREG(TAKREG, 0xc) * 0.01f + 1.5f) * sin_s(s2); + } + + p2.x *= ABS(cos_s(actor->_60C.y) * cos_s(actor->_60C.x)); + p2.z *= ABS(sin_s(actor->_60C.y) * cos_s(actor->_60C.x)); + + if (actor->_624 != 3) { + p2.x *= cos_s(actor->_61C); + p2.z *= cos_s(actor->_61C); + } + + if (actor->_630 == 4) { + p2.z += (GETREG(TAKREG, 0xb) * 0.01f + 0.5f) * cos_s(actor->_60C.y + DEG2SHORT_ANGLE(90)); + } else if (actor->_630 == 2) { + p2.x -= ABS(cos_s(actor->_60C.y)) * 0.02f; + if (ABS((s16)(actor->_60C.y - DEG2SHORT_ANGLE(270))) < DEG2SHORT_ANGLE(100)) { + p2.x = MIN(-1.0f + GETREG(TAKREG, 0x48) * 0.001f, p2.x); + } + } + + if (actor->_598 != NULL) { + if (actor->_630 == 4) { + s = actor->_598->init_data._08 * 10.0f + actor->init_data._08 * 2.0f; + } else { + s = actor->_598->init_data._08 * 5.0f + actor->init_data._08 * 2.0f; + } + xyz_t_sub(&actor->_5A0, &actor->_598->_5A0, &p3); + dSQ = SQ(p3.x) + SQ(p3.y) + SQ(p3.z); + d = sqrtf(dSQ); + + if (d < s) { + f32 x = (1.0f / SQ(s)) * (d - s) * (d - s); + x *= actor->_598->init_data._20; + p2.x += (x * p3.x) / d; + p2.y += (x * p3.y) / d; + p2.z += (x * p3.z) / d; + } + } + + if (actor->_630 == 2 && p2.x < 0.0f) { + p2.x *= 1.1f; + } + + xyz_t_mult_v(&p2, v); + add_calc2(&actor->_5DC.x, p2.x, 0.5f, 0.1f); + add_calc2(&actor->_5DC.y, p2.y, 0.5f, 0.1f); + add_calc2(&actor->_5DC.z, p2.z, 0.5f, 0.1f); + *pos = actor->_5DC; } -void mfish_get_escape_angle() { - return; +s16 mfish_get_escape_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + // int ret; + s16 v1 = atans_table(actor->_594->_5A0.z - actor->_5A0.z, actor->_594->_5A0.x - actor->_5A0.x); + s16 v = actor->_60C.y - v1; + if (ABS(v) < DEG2SHORT_ANGLE(90)) { + if (actor->_624 == 1 || actor->_624 == 2) { + if (ABS((s16)(actor->_594->_60C.y - actor->_60C.y)) > DEG2SHORT_ANGLE(90)) { + add_calc2(&actor->_5F0, actor->init_data._14 + actor->init_data._10, 0.1f, 0.3f); + } else { + add_calc2(&actor->_5F0, actor->init_data._10, 0.05f, 0.3f); + } + } else if (actor->_624 == 6) { + if (actor->_5E8 > 0.0f) { + add_calc2(&actor->_5E8, actor->init_data._14 + actor->init_data._10, 0.25f, 0.1f); + } else { + actor->_5E8 *= 0.95f; + } + } + + if (v > 0) { + v1 += DEG2SHORT_ANGLE(90); + } else { + v1 -= DEG2SHORT_ANGLE(90); + } + + return v1; + } else { + return actor->_62A; + } } -void mfish_move_smooth() { - return; +void mfish_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + s16 vv; + s16 v = 0; + s16* o; + if (actor->_608 < 20.0f || actor->_600 < 20.0f || actor->_604 < 20.0f || actor->_5FC < 20.0f) { + if (actor->_600 < 20.0f) { + v = DEG2SHORT_ANGLE(90); + } else if (actor->_5FC < 20.0f) { + v = DEG2SHORT_ANGLE(-90); + } + + if (actor->_608 < 20.0f) { + if (v == 0) { + v = 0; + } else { + v >>= 1; + } + } else if (actor->_604 < 20.0f) { + if (v == 0) { + v = DEG2SHORT_ANGLE(-180); + } else { + v = DEG2SHORT_ANGLE(180) - (v >> 1); + } + } + + if ((actor->_5E8 > 0.0f || actor->_608 < 5.0f || actor->_604 < 5.0f || actor->_600 < 5.0f || + actor->_5FC < 5.0f) && + (actor->_34 != mfish_peck_process && actor->_34 != mfish_koi_peck_process)) { + vv = actor->_60C.y - (s16)v; + if (ABS(vv) < DEG2SHORT_ANGLE(45)) { + add_calc0(&actor->_5E8, 0.1f * cos_s(vv << 1), 0.02f); + } + + if ((actor->_630 == 0 || actor->_624 == 10 || actor->_624 == 11 || actor->_59C == 25) && + ABS(vv) < DEG2SHORT_ANGLE(90) && ABS(actor->_622) < DEG2SHORT_ANGLE(10)) { + if (actor->_34 == mfish_afish_dummy_process) { + o = &actor->_634; + } else { + o = &actor->_612.y; + } + + if (vv > 0) { + add_calc_short_angle2( + o, (s16)v + DEG2SHORT_ANGLE(90), CALC_EASE(GETREG(TAKREG, 0x2d) * 0.01f + 0.25f), + DEG2SHORT_ANGLE(actor->_5E8 * ((GETREG(TAKREG, 0x2e) + 12.0f) * cos_s(vv)) + 1.5f) >> 1, + DEG2SHORT_ANGLE(0.5f)); + } else { + add_calc_short_angle2( + o, (s16)v - DEG2SHORT_ANGLE(90), CALC_EASE(GETREG(TAKREG, 0x2d) * 0.01f + 0.25f), + DEG2SHORT_ANGLE(actor->_5E8 * ((GETREG(TAKREG, 0x2e) + 5.0f) * cos_s(vv)) + 1.5f) >> 1, + DEG2SHORT_ANGLE(0.5f)); + } + } + } + } } -void mfish_hamon_make() { - return; +void mfish_hamon_make(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + if ((play->game_frame & 7) == 0 && + ((actor->_62E & 0x1e) == 0 || ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(80))) { + xyz_t p = actor->_5A0; + p.y = 115.0f; + Common_Get(clip.effect_clip) + ->effect_make_proc(0x45, p, 2, DEG2SHORT_ANGLE(180) + actor->_60C.y, game, -1, 7, 0); + } } diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc index ae18c8df..62585e40 100644 --- a/src/actor/ac_museum_fish_bass.c_inc +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -14,8 +14,8 @@ void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { f32 t; xyz_t pos; add_calc2(&actor->_5E8, actor->_5AC.x, 1 - actor->init_data._18, 0.01f + 0.001f * GETREG(TAKREG, 20)); - actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.z); - actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.z); + actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.y); add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); t = add_calc(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4, 0); @@ -25,8 +25,8 @@ void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } mfish_move_smooth(actor, game); mfish_get_flow_vec(&pos, actor, game); - actor->_5A0.y += actor->_5D0 + actor->_5DC.x; - actor->_5A0.z += actor->_5D0 + actor->_5DC.x; + actor->_5A0.x += actor->_5D0 + actor->_5DC.x; + actor->_5A0.z += actor->_5D8 + actor->_5DC.z; actor->_5A0.y = actor->_5A0.y + actor->_5DC.y; actor->_5A0.y = MAX(60, MIN(110, actor->_5A0.y)); } @@ -36,13 +36,13 @@ void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { if ((actor->_62E & 0x1E) != 0) { // works with temp instead of cast - if ((s16)(actor->_612.z - actor->_62C) > 0) { + if ((s16)(actor->_612.y - actor->_62C) > 0) { actor->_634 = actor->_62C + DEG2SHORT_ANGLE(90); } else { actor->_634 = actor->_62C - DEG2SHORT_ANGLE(90); } } else { - add_calc_short_angle2(&actor->_634, actor->_612.z, CALC_EASE(0.5f), DEG2SHORT_ANGLE(22.5), 0x5b); + add_calc_short_angle2(&actor->_634, actor->_612.y, CALC_EASE(0.5f), DEG2SHORT_ANGLE(22.5), 0x5b); } actor->_5EC = 0.0f; @@ -53,8 +53,8 @@ void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) { // no clue what's going on here - add_calc_short_angle2(&actor->_612.z, actor->_634, CALC_EASE2(0.0f), 0x1c7, 0x2d); - actor->_622 = add_calc_short_angle2(&actor->_60C.z, actor->_612.z, CALC_EASE2(0.25f), 0xe3, 0x2d); + add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.0f), 0x1c7, 0x2d); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), 0xe3, 0x2d); add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.25f), 0xe3, 0x2d); } @@ -89,13 +89,13 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { if (RANDOM_F(1) > fishActor->init_data._1C) { int diff; - fishActor->_612.z += (s16)Rnd_EX_fx(fishActor->init_data._30 * 2.0f); - diff = fishActor->_612.z - fishActor->_60C.z; + fishActor->_612.y += (s16)Rnd_EX_fx(fishActor->init_data._30 * 2.0f); + diff = fishActor->_612.y - fishActor->_60C.y; if (ABS((s16)diff) < DEG2SHORT_ANGLE(20)) { if ((s16)diff > 0) { - fishActor->_612.z += DEG2SHORT_ANGLE(20); + fishActor->_612.y += DEG2SHORT_ANGLE(20); } else { - fishActor->_612.z += DEG2SHORT_ANGLE(-20); + fishActor->_612.y += DEG2SHORT_ANGLE(-20); } } @@ -105,10 +105,10 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { fishActor->_632 = DEG2SHORT_ANGLE(t * 30 + 20); } } else { - if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) { - fishActor->_612.z += DEG2SHORT_ANGLE(15); + if ((s16)(fishActor->_612.y - fishActor->_60C.y) > 0) { + fishActor->_612.y += DEG2SHORT_ANGLE(15); } else { - fishActor->_612.z += DEG2SHORT_ANGLE(-15); + fishActor->_612.y += DEG2SHORT_ANGLE(-15); } if ((fishActor->_62E & 0x200) == 0) { @@ -117,7 +117,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { fishActor->_632 = DEG2SHORT_ANGLE((GETREG(TAKREG, 42) + 40.0f) * t + 30); } } - if ((s16)(fishActor->_612.z - fishActor->_60C.z) > 0) { + if ((s16)(fishActor->_60C.y - fishActor->_612.y) > 0) { fishActor->_636 = DEG2SHORT_ANGLE(0); } else { fishActor->_636 = DEG2SHORT_ANGLE(-180); @@ -138,14 +138,14 @@ void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } if (actor->_62E & 0x200) { add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(GETREG(TAKREG, 73) * 0.1f + 4.0f), - (s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 73) * 0.1f + 4.0f) >> 1) >> 1, 45); + (s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 74) * 0.1f + 4.0f) >> 1) >> 1, 45); actor->_636 = actor->_636 + (s16)DEG2SHORT_ANGLE2( (3.0f * actor->_5E8) / (actor->init_data._14 + actor->init_data._10) + 9.0f); } else { add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), 227, 45); actor->_636 += DEG2SHORT_ANGLE(10); } - actor->_622 = add_calc_short_angle2(&actor->_60C.z, actor->_612.z + (s16)(actor->_632 * sin_s(actor->_636)), + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), CALC_EASE2(actor->_5AC.y * 0.25f + 0.25f), (s16)(DEG2SHORT_ANGLE(actor->_5AC.y * 15.0f + 10.0f) >> 1) >> 1, 22); add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(actor->_5AC.y * 0.25f + 0.25f), @@ -154,10 +154,10 @@ void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { if (actor->_5E8 < 0.01f) { mfish_bass_dummy_process_init(actor); } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { - if ((s16)(actor->_60C.z - actor->_62C) > 0) { - actor->_612.z = actor->_62C + DEG2SHORT_ANGLE(112.5f); + if ((s16)(actor->_60C.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); } else { - actor->_612.z = actor->_62C - DEG2SHORT_ANGLE(112.5f); + actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f); } actor->_632 = 0; } @@ -171,7 +171,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_61A = DEG2SHORT_ANGLE((actor->_5AC.y * 4.0f + 4.0f) * (SHORT2DEG_ANGLE2(a) / 120.0f) + 2.0f + actor->_5AC.y); if (actor->_62E & 0x1e) { - if ((s16)(actor->_60C.x - actor->_62C) < 0) { + if ((s16)(actor->_60C.y - actor->_62C) < 0) { b = -a; } } else if (actor->_62E & 0xC0) { @@ -181,7 +181,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { b = -ABS(a); } } else if (actor->_62E & 0x20) { - if ((s16)(actor->_62A - actor->_60C.x) < 0) { + if ((s16)(actor->_62A - actor->_60C.y) < 0) { b = -a; } } @@ -192,7 +192,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_62E |= 0x80; } - actor->_612.z += b; + actor->_612.y += b; if ((RANDOM_F(1) < 0.25f) && (actor->_62E & 0x200) == 0) { actor->_62E |= 0x200; @@ -228,19 +228,19 @@ void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor) { v4 = actor->_5AC.y * 0.15f + 0.05f; if (ABS(actor->_622) > DEG2SHORT_ANGLE(20)) { - add_calc2(&actor->_5E8, v0, v1, v2); + add_calc2(&actor->_5EC, v0, v1, v2); add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), actor->_5EC * 0.5f, 0.05f); } add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), v3, v4); add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), 45); - actor->_622 = add_calc_short_angle2(&actor->_60C.z, ((s16)(sin_s(actor->_636) * actor->_632) + actor->_612.z), + actor->_622 = add_calc_short_angle2(&actor->_60C.y, ((s16)(sin_s(actor->_636) * actor->_632) + actor->_612.y), CALC_EASE(0.2f), actor->_61A >> 1, 45); add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(2.5f), 22); - if (ABS((s16)(actor->_60C.z - actor->_612.z)) < DEG2SHORT_ANGLE(2.0f) && actor->_5E8 < 0.1f) { + if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2.0f) && actor->_5E8 < 0.1f) { if (actor->_63E > 0) { if (mfish_WallCheck(actor)) { mfish_bass_tail_anim_set(actor, 1); @@ -297,9 +297,9 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_bass_turn_process_init(actor); } } else if (actor->_34 == &mfish_bass_normal_process) { - if (((actor->_62E & 0x1e) && ABS((s16)(actor->_60C.z - actor->_62C)) < DEG2SHORT_ANGLE(30)) || + if (((actor->_62E & 0x1e) && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || ((actor->_62E & 0x20) && - ABS((s16)((actor->_62A - DEG2SHORT_ANGLE(-180)) - actor->_60C.z)) < DEG2SHORT_ANGLE(30))) { + ABS((s16)((actor->_62A - DEG2SHORT_ANGLE(-180)) - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { actor->_626 = actor->init_data._2C + (s16)(actor->init_data._2E * fqrand()); actor->_628 = actor->_626; mfish_bass_tail_anim_set(actor, 1); @@ -309,7 +309,7 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_638 += DEG2SHORT_ANGLE(10); actor->_34(actor, gamex); - if (ABS(actor->_622) > ABS(actor->_61C)) { + if (ABS(actor->_61C) > ABS(actor->_622)) { add_calc2(&actor->_5E8, MIN(GETREG(TAKREG, 19) * 0.01f + 1.0f, actor->_5E8), GETREG(TAKREG, 18) * 0.01f + 0.2f, GETREG(TAKREG, 17) * 0.01f + 0.5f); } @@ -322,11 +322,13 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Museum_Fish_BGCheck(actor, gamex); if (actor->_640 > 0) { f32 tmp, num, denom; - denom = (actor->init_data._14 + actor->init_data._10); + // needed tmp before the decrement for some reason + tmp = (0.4f + (0.7f * actor->_5AC.y)); actor->_640--; - num = (actor->_5AC.z * (actor->_5F0 - actor->_5E8)); - tmp = (actor->_5AC.y * 0.7f + 0.4f); - add_calc2(&actor->_38._00.frame_control.speed, tmp * (1.75f + num / denom), 0.5f, 0.5f); + add_calc2(&actor->_38._00.frame_control.speed, + tmp * (1.75f + + actor->_5AC.z * (actor->_5F0 - actor->_5E8) / ((actor->init_data._14) + actor->init_data._10)), + 0.5f, 0.5f); } else { add_calc2(&actor->_38._00.frame_control.speed, (actor->_5E8 * 2.0f + 0.5f) * (actor->_5AC.y * 0.8f + 0.6f), 0.2f, 0.1f); @@ -352,7 +354,7 @@ void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { graph = play->game.graph; Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); - Matrix_RotateY(actor->_60C.z, 1); + Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1); Matrix_RotateX(actor->_60C.x, 1); From e8c7a59d8707118b9322ad5605856de885cf8021 Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 14 Dec 2024 18:09:58 -0500 Subject: [PATCH 09/33] Match koi+aroana+kaseki --- include/ac_museum_fish.h | 63 ++-- src/actor/ac_museum_fish.c | 4 +- src/actor/ac_museum_fish_afish.c_inc | 216 +++++++++++- src/actor/ac_museum_fish_aroana.c_inc | 271 +++++++++++++-- src/actor/ac_museum_fish_base.c_inc | 3 - src/actor/ac_museum_fish_kaseki.c_inc | 181 +++++++++- src/actor/ac_museum_fish_koi.c_inc | 474 ++++++++++++++++++++++++-- 7 files changed, 1085 insertions(+), 127 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index fbdd0c11..944ebd63 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -163,9 +163,9 @@ 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(); -void Museum_Fish_set_talk_info(); -void Museum_Fish_Talk_process(); +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); @@ -176,16 +176,16 @@ 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(); +void mfish_normal_light_set(ACTOR* actor, GAME* game); f32 Rnd_EX_f(f32 v1); f32 Rnd_EX_fx(f32 v1); -void mfish_base_FishMove(); +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(); -void mfish_dummy_process(); +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); @@ -198,39 +198,41 @@ 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); -int mfish_before_disp(GAME*, cKF_SkeletonInfo_R_c*, int, Gfx**, u8*, void*, s_xyz*, xyz_t*); +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(); +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(); +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(); -void Museum_Fish_Object_Check(); -void mfish_body_wind_anime_play(); -void mfish_get_player_angle(); -BOOL mfish_peck_check(); +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(); -void mfish_get_player_area(); +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(); -void mfish_hamon_make(); +void mfish_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +void mfish_hamon_make(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); + void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_afish_dummy_process_init(); -void mfish_afish_dummy_process(); -void mfish_afish_normal_process_init(); -void mfish_afish_normal_process(); -void mfish_afish_turn_process_init(); -void mfish_afish_turn_process(); -void mfish_afish_base_FishMove(); +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); + void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_aroana_dummy_process_init(); void mfish_aroana_dummy_process(); @@ -243,14 +245,14 @@ void mfish_aroana_long_move_process(); void mfish_aroana_base_FishMove(); void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); void mfish_koi_tail_anim_set(); void mfish_koi_move_smooth(); void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_koi_dummy_process_init(); -void mfish_koi_dummy_process(); +void mfish_koi_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_koi_normal_process_init(); void mfish_koi_normal_process(); void mfish_koi_turn_process_init(); @@ -262,15 +264,16 @@ void mfish_koi_long_move_process(); void mfish_koi_base_FishMove(); void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_koi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); + void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_kaseki_normal_init(); void mfish_kaseki_normal(); void mfish_kaseki_move_wall_smooth(); void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_kaseki_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); void mfish_bass_tail_anim_set(); diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index c200a2bc..5ab288b7 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -1040,8 +1040,8 @@ void Museum_Fish_Suisou_draw(ACTOR* actorx, GAME* game, int r5) { } } -int 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_num, Gfx** mjoint_m, u8* joint_f, void* arg, + s_xyz* joint1, xyz_t* trans) { MUSEUM_FISH_KUSA_DATA* actor = (MUSEUM_FISH_KUSA_DATA*)arg; if (joint_num > 0) { f32 v = (actor->_54C == &cKF_bs_r_obj_museum5_kusa3) ? 35.0f : 20.f; diff --git a/src/actor/ac_museum_fish_afish.c_inc b/src/actor/ac_museum_fish_afish.c_inc index d509e25a..1554d374 100644 --- a/src/actor/ac_museum_fish_afish.c_inc +++ b/src/actor/ac_museum_fish_afish.c_inc @@ -4,37 +4,221 @@ void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { // NOT BAD } -void mfish_afish_dummy_process_init() { - return; +void mfish_afish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + f32 v; + actor->_634 = mfish_get_hide_camera_angle(actor); + if (actor->_62E & 0x1e) { + if ((s16)(actor->_612.y - actor->_62C) > 0) { + actor->_634 = actor->_62C + DEG2SHORT_ANGLE(90); + } else { + actor->_634 = actor->_62C - DEG2SHORT_ANGLE(90); + } + } else { + add_calc_short_angle2(&actor->_634, actor->_612.y, CALC_EASE(0.4f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.5f)); + } + + actor->_5F0 = MIN(MAX(actor->init_data._10, 0.1f), actor->_5E8); + actor->_5EC = 0.0f; + actor->_34 = mfish_afish_dummy_process; } -void mfish_afish_dummy_process() { - return; +void mfish_afish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(3.75f), + DEG2SHORT_ANGLE(0.25f)); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); } -void mfish_afish_normal_process_init() { - return; +void mfish_afish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + f32 v = RANDOM_F(actor->init_data._14) + actor->init_data._10; + + f32 v2 = v / MAX(actor->init_data._14 + actor->init_data._10, 1.0f); + if (v > actor->_5E8) { + actor->_5F0 = v; + } + actor->_5F4 = Rnd_EX_fx(10.0f) * v2; + actor->_612.x = DEG2SHORT_ANGLE((actor->_5F4 + actor->init_data._0C - actor->_5A0.y) * -12.0f); + actor->_612.x = CLAMP(actor->_612.x, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); + actor->_5D4 = 0.0f; + + if (RANDOM_F(1.0f) > actor->init_data._1C) { + actor->_612.y += (s16)Rnd_EX_fx(actor->init_data._30 * 2.0f); + + if (ABS((s16)(actor->_612.y - actor->_60C.y)) < DEG2SHORT_ANGLE(20)) { + if ((s16)(actor->_612.y - actor->_60C.y) > 0) { + actor->_612.y += DEG2SHORT_ANGLE(20); + } else { + actor->_612.y -= DEG2SHORT_ANGLE(20); + } + } + actor->_632 = DEG2SHORT_ANGLE(v2 * 30.0f + 20.0f); + } else { + if ((s16)(actor->_612.y - actor->_60C.y) > 0) { + actor->_612.y += DEG2SHORT_ANGLE(20); + } else { + actor->_612.y -= DEG2SHORT_ANGLE(20); + } + actor->_632 = DEG2SHORT_ANGLE(v2 * 40.0f + 30.0f); + } + + if ((s16)(actor->_60C.y - actor->_612.y) > 0) { + actor->_636 = 0; + } else { + actor->_636 = DEG2SHORT_ANGLE(-180); + } + + actor->_62E &= ~0xC0; + actor->_5EC = 0.0f; + actor->_34 = mfish_afish_normal_process; } -void mfish_afish_normal_process() { - return; +void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + s16 temp; + if (actor->_632 > DEG2SHORT_ANGLE(20)) { + add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.003f + 0.03f, 0.25f, + 0.02f); + add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.2f), actor->_5EC * 0.5f); + } + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f)); + temp = DEG2SHORT_ANGLE2(6.0f + (actor->_5E8 * 4.0f) / (actor->init_data._14 + actor->init_data._10)); + actor->_636 += temp; + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(0.2f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); + + if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { + mfish_afish_dummy_process_init(actor); + } else if (actor->_5E8 > 0.01f && actor->_62E & 0x1e) { + if ((s16)(actor->_60C.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); + } else { + actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f); + } + actor->_632 = 0; + } } -void mfish_afish_turn_process_init() { - return; +void mfish_afish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(75.0f)) + DEG2SHORT_ANGLE(45.0f); + actor->_61A = ABS(DEG2SHORT_ANGLE2(((s3 * (360.0f / 0x10000)) / 120.0f) * 4.0f + 2.5f)); + if (actor->_62E & 0x1e) { + if ((s16)(actor->_60C.y - actor->_62C) < 0) { + s3 = -s3; + } + } else if (actor->_62E & 0xC0) { + if (actor->_62E & 0x40) { + s3 = ABS(s3); + } else { + s3 = -ABS(s3); + } + } else if (actor->_62E & 0x20 && (actor->_62A - actor->_60C.y) < 0) { + s3 = -s3; + } + + if (s3 > 0) { + actor->_62E |= 0x40; + } else { + actor->_62E |= 0x80; + } + + actor->_612.y += s3; + + if (RANDOM_F(1.0f) < 0.2f) { + actor->_63E = RANDOM_F(3.0f) + 1.0f; + } else { + actor->_63E = 0; + } + + actor->_5EC = 0.0f; + actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.5f; + actor->_34 = mfish_afish_turn_process; } -void mfish_afish_turn_process() { - return; +void mfish_afish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if (ABS(actor->_622) > DEG2SHORT_ANGLE(30)) { + add_calc2(&actor->_5EC, 0.15f, 0.15f, 0.1f); + add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), actor->_5EC * 0.5f, 0.05f); + } + + add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), 0.15f, 0.2f); + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE(0.2f), actor->_61A >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) { + if (actor->_63E > 0) { + if (mfish_WallCheck(actor)) { + actor->_640 = 10; + mfish_afish_turn_process_init(actor); + } else { + actor->_640 = 10; + mfish_afish_normal_process_init(actor); + } + actor->_63E--; + } else { + mfish_afish_dummy_process_init(actor); + } + } } -void mfish_afish_base_FishMove() { - return; +void mfish_afish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + xyz_t p; + if (actor->_34 != mfish_afish_turn_process && actor->_622 < DEG2SHORT_ANGLE(20)) { + add_calc2(&actor->_5E8, 0.08f, 1.0f - actor->init_data._18, 0.005f); + } else { + add_calc2(&actor->_5E8, 0.05f, 1.0f - actor->init_data._18, 0.001f); + } + add_calc0(&actor->_5EC, 0.5f, 0.01f); + actor->_5D0 = actor->_5E8 * cos_s(actor->_60C.x) * sin_s(actor->_60C.y); + actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.x) * cos_s(actor->_60C.y); + add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.001f); + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4); + mfish_move_smooth(actor, gamex); + mfish_get_flow_vec(&p, actor, gamex); + actor->_5A0.x += actor->_5D0 + actor->_5DC.x; + actor->_5A0.z += actor->_5D8 + actor->_5DC.z; + actor->_5A0.y += actor->_5DC.y; + actor->_5A0.y = MAX(110.f, MIN(60.f, actor->_5A0.y)); } void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + if (actor->_5F8 > actor->init_data._08 * 20.f) { + actor->_5F8 = 0.0f; + actor->_626 = 0; + } + + if (actor->_626-- <= 0) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + if (mfish_WallCheck(actor)) { + actor->_640 = 10; + mfish_afish_turn_process_init(actor); + } else { + actor->_640 = 10; + mfish_afish_normal_process_init(actor); + } + } else if (actor->_34 == mfish_afish_normal_process) { + if ((actor->_62E & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || + (actor->_62E & 0x20 && + ABS((s16)(DEG2SHORT_ANGLE(180) + actor->_62A - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_640 = 10; + mfish_afish_turn_process_init(actor); + } + } + + actor->_5AC.y = 0.0f; + actor->_638 += DEG2SHORT_ANGLE(10); + actor->_34(actor, gamex); + if (ABS(actor->_61C) > ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { + add_calc2(&actor->_5E8, MIN(0.2f, actor->_5E8), 0.2f, 0.5f); + } + add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.1f), DEG2SHORT_ANGLE(2.5), DEG2SHORT_ANGLE(0.5)); + add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.1f), DEG2SHORT_ANGLE(1), DEG2SHORT_ANGLE(0.5)); + mfish_afish_base_FishMove(actor, gamex); } void mfish_afish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { diff --git a/src/actor/ac_museum_fish_aroana.c_inc b/src/actor/ac_museum_fish_aroana.c_inc index 8544a34d..a013377f 100644 --- a/src/actor/ac_museum_fish_aroana.c_inc +++ b/src/actor/ac_museum_fish_aroana.c_inc @@ -10,24 +10,158 @@ void mfish_aroana_dummy_process_init() { return; } -void mfish_aroana_dummy_process() { - return; +void mfish_aroana_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) { + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.0f), DEG2SHORT_ANGLE(0.25f)); + add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f); + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC); + add_calc0(&actor->_5F0, 0.01f, 0.001f); } -void mfish_aroana_normal_process_init() { - return; +// close copy of mfish_afish_normal_process_init + +void mfish_aroana_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + f32 v = RANDOM_F(actor->init_data._14) + actor->init_data._10; + + f32 v2 = v / MAX(actor->init_data._14 + actor->init_data._10, 1.0f); + if (v > actor->_5E8) { + actor->_5F0 = v; + } + actor->_5F4 = Rnd_EX_fx(10.0f) * v2; + actor->_612.x = atans_table(actor->_5E8, actor->_5F4 + actor->init_data._0C - actor->_5A0.y) >> 4; + actor->_5D4 = 0.0f; + + if (RANDOM_F(1.0f) > actor->init_data._1C) { + actor->_612.y += (s16)Rnd_EX_fx(actor->init_data._30 * 2.0f); + + if (ABS((s16)(actor->_612.y - actor->_60C.y)) < DEG2SHORT_ANGLE(20)) { + if ((s16)(actor->_612.y - actor->_60C.y) > 0) { + actor->_612.y += DEG2SHORT_ANGLE(20); + } else { + actor->_612.y -= DEG2SHORT_ANGLE(20); + } + } + actor->_632 = DEG2SHORT_ANGLE(v2 * 20.0f + 10.0f); + } else { + if ((s16)(actor->_612.y - actor->_60C.y) > 0) { + actor->_612.y += DEG2SHORT_ANGLE(20); + } else { + actor->_612.y -= DEG2SHORT_ANGLE(20); + } + actor->_632 = DEG2SHORT_ANGLE(v2 * 30.0f + 20.0f); + } + + if ((s16)(actor->_60C.y - actor->_612.y) > 0) { + actor->_636 = 0; + } else { + actor->_636 = DEG2SHORT_ANGLE(-180); + } + + actor->_62E &= ~0xC0; + actor->_5EC = 0.0f; + actor->_34 = mfish_aroana_normal_process; } -void mfish_aroana_normal_process() { - return; +void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + s16 temp; + if (actor->_632 > DEG2SHORT_ANGLE(20)) { + add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.002f + 0.03f, 0.25f, + 0.02f); + add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.2f), actor->_5EC * 0.5f); + } else if (actor->_626 > actor->_628 - 10) { + add_calc2(&actor->_5EC, 0.25f, 0.2f, 0.5f); + add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.05f), actor->_5EC * 0.5f); + } + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.05f), DEG2SHORT_ANGLE(0.375), DEG2SHORT_ANGLE(0.125)); + temp = DEG2SHORT_ANGLE2((actor->_5E8 * 4.0f) / (actor->init_data._14 + actor->init_data._10) + 6.0f); + actor->_636 += temp; + + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(0.2f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); + + if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { + if (fqrand() < 0.01f) { + mfish_aroana_long_move_process_init(actor); + } else { + mfish_aroana_dummy_process_init(actor); + } + } else if (actor->_5E8 > 0.01f && actor->_62E & 0x1e) { + if ((s16)(actor->_60C.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); + } else { + actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f); + } + actor->_632 = 0; + } } -void mfish_aroana_turn_process_init() { - return; +void mfish_aroana_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(55.0f)) + DEG2SHORT_ANGLE(45.0f); + actor->_61A = ABS(DEG2SHORT_ANGLE2(((s3 * (360.0f / 0x10000)) / 120.0f) * 2.5f + 2.0f)); + if (actor->_62E & 0x1e) { + if ((s16)(actor->_60C.y - actor->_62C) < 0) { + s3 = -s3; + } + } else if (actor->_62E & 0xC0) { + if (actor->_62E & 0x40) { + s3 = ABS(s3); + } else { + s3 = -ABS(s3); + } + } else if (actor->_62E & 0x20 && (actor->_62A - actor->_60C.y) < 0) { + s3 = -s3; + } + + if (s3 > 0) { + actor->_62E |= 0x40; + } else { + actor->_62E |= 0x80; + } + + actor->_612.y += s3; + + if (RANDOM_F(1.0f) < 0.2f) { + actor->_63E = RANDOM_F(2.0f) + 1.0f; + } else { + actor->_63E = 0; + } + + actor->_5EC = 0.0f; + actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.2f; + actor->_34 = mfish_afish_turn_process; } -void mfish_aroana_turn_process() { - return; +void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + if (ABS(actor->_622) > DEG2SHORT_ANGLE(25)) { + add_calc2(&actor->_5EC, 0.1f, 0.15f, 0.1f); + add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), actor->_5EC * 0.5f); + } + + add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), 0.15f, 0.2f); + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE(0.2f), actor->_61A >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.125f)); + if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) { + if (actor->_63E > 0) { + if (mfish_WallCheck(actor)) { + // actor->_640 = 10; + mfish_aroana_turn_process_init(actor); + } else { + // actor->_640 = 10; + mfish_aroana_normal_process_init(actor); + } + actor->_63E--; + } else { + if (RANDOM_F(1.0f) < 0.8f) { + mfish_aroana_long_move_process_init(actor); + } else { + mfish_aroana_dummy_process_init(actor); + } + } + } } void mfish_aroana_long_move_process_init() { @@ -35,33 +169,114 @@ void mfish_aroana_long_move_process_init() { return; } -void mfish_aroana_long_move_process() { - return; +void mfish_aroana_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); + add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f); + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC); + if ((play->game_frame & 0x3f) == 0 && RANDOM_F(1.0f) > 0.25f) { + mfish_aroana_dummy_process_init(actor); + } } -void mfish_aroana_base_FishMove() { - return; +void mfish_aroana_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + xyz_t p; + if (actor->_34 != mfish_aroana_turn_process && actor->_34 != mfish_aroana_long_move_process && + actor->_622 < DEG2SHORT_ANGLE(20)) { + add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, GETREG(TAKREG, 0x13) * 0.001f + 0.02f); + } else { + add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, GETREG(TAKREG, 0x14) * 0.001f + 0.001f); + } + add_calc0(&actor->_5EC, 0.5f, 0.01f); + + actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.y); + add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4); + mfish_move_smooth(actor, game); + mfish_get_flow_vec(&p, actor, game); + actor->_5A0.x += actor->_5D0 + actor->_5DC.x; + actor->_5A0.z += actor->_5D8 + actor->_5DC.z; + actor->_5A0.y += actor->_5DC.y; + actor->_5A0.y = MAX(110.f, MIN(60.f, actor->_5A0.y)); } void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - // NOT BAD - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + if (actor->_5F8 > actor->init_data._08 * 20.f) { + actor->_5F8 = 0.0f; + actor->_626 = 0; + } + + if (actor->_626-- <= 0) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + if (mfish_WallCheck(actor)) { + mfish_aroana_turn_process_init(actor); + } else { + mfish_aroana_normal_process_init(actor); + } + } else if (actor->_34 == mfish_aroana_normal_process) { + if ((actor->_62E & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || + (actor->_62E & 0x20 && + ABS((s16)(DEG2SHORT_ANGLE(180) + actor->_62A - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + mfish_aroana_turn_process_init(actor); + } + } + + actor->_5AC.y = 0.0f; + actor->_638 += DEG2SHORT_ANGLE(5); + actor->_34(actor, gamex); + if (ABS(actor->_61C) > ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { + add_calc2(&actor->_5E8, MIN(0.2f, actor->_5E8), 0.2f, 0.5f); + } + add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.1f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f)); + add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.1f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.5f)); + mfish_aroana_base_FishMove(actor, gamex); } void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} - -void 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) { - return; -} - -void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { // NOT BAD GAME_PLAY* game = (GAME_PLAY*)gamex; return; } + +BOOL mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, + void* arg, s_xyz* joint1, xyz_t* trans) { + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + int v; + if (joint_num == 1) { + Matrix_scale(1.0, sin_s(actor->_63A + actor->_63C) * 0.025f + 1.0f, sin_s(actor->_63A) * 0.025f + 1.0f, 1); + } else if (joint_num == 2) { + v = joint1->y - (actor->_61C << 1); + joint1->y = MIN(MAX(v, DEG2SHORT_ANGLE(-40)), DEG2SHORT_ANGLE(40)); + + v = joint1->x - (actor->_61C >> 2); + joint1->x = MIN(MAX(v, DEG2SHORT_ANGLE(-20)), DEG2SHORT_ANGLE(20)); + + Matrix_scale(1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) * 0.05f + 1.0f, + sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) * 0.05f + 1.0f, 1); + } + return 1; +} + +void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y + actor->_5AC.y, actor->_5A0.z, 0); + Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_aroana_before_disp, NULL, actor); + CLOSE_DISP(play->game.graph); +} diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index 791b7aec..05c642c7 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -27,7 +27,6 @@ f32 Rnd_EX_fx(f32 v) { } void mfish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { - GAME_PLAY* play = (GAME_PLAY*)game; f32 t; xyz_t pos; if (actor->_59C == 0x18 && actor->_34 != mfish_peck_process) { @@ -522,7 +521,6 @@ void mfish_onefish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { 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) { - MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; if (joint_num == 2) { int v, t; @@ -546,7 +544,6 @@ int mfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, } void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - YET_SKELETON* skele; Mtx* mtx; GRAPH* graph; diff --git a/src/actor/ac_museum_fish_kaseki.c_inc b/src/actor/ac_museum_fish_kaseki.c_inc index a83d92eb..c38fc2b7 100644 --- a/src/actor/ac_museum_fish_kaseki.c_inc +++ b/src/actor/ac_museum_fish_kaseki.c_inc @@ -1,7 +1,25 @@ void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + mfish_onefish_ct(actor, gamex); + actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + actor->_5F0 = actor->_5E8; + if (RANDOM_F(1.0f) > 0.5f) { + actor->_60C.y = DEG2SHORT_ANGLE(90); + } else { + actor->_60C.y = DEG2SHORT_ANGLE(-90); + } + actor->_612.y = actor->_60C.y; + actor->_5D4 = 0; + actor->_5AC = ZeroVec; + actor->_638 = qrand(); + actor->_622 = 0; + actor->_634 = 0; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_624 = 1; + actor->_594 = NULL; + actor->_598 = NULL; + mfish_kaseki_normal_init(actor, gamex); + Museum_Fish_BGCheck(actor, gamex); } void mfish_kaseki_normal_init() { @@ -9,27 +27,162 @@ void mfish_kaseki_normal_init() { return; } -void mfish_kaseki_normal() { - return; +void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + s16 s = ABS(actor->_622) * (actor->init_data._30 * (GETREG(TAKREG, 0x1d) * 0.001f + 0.5f) / 32749.0f); + s = MIN(actor->_634, MAX(s, 0x38E)); + add_calc_short_angle2(&actor->_632, 0, CALC_EASE(0.5), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f)); + actor->_636 += 455; + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(GETREG(TAKREG, 0x1e) * 0.01f + 0.15f), (s16)(s >> 1) >> 1, + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(GETREG(TAKREG, 0x1f) * 0.01f + 0.1f), + (s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 0x20) * 0.1f + 4.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); + if (actor->_5FC < 10.0f - actor->init_data._28 * 0.5f) { + if (actor->_612.y < 0) { + s16 v; + if (actor->_604 > actor->_608) { + v = actor->_60C.y - DEG2SHORT_ANGLE(90); + } else { + v = actor->_60C.y + DEG2SHORT_ANGLE(90); + } + actor->_612.y = v; + } else { + add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(90), CALC_EASE(GETREG(TAKREG, 0x21) * 0.01f + 0.25f), + DEG2SHORT_ANGLE(GETREG(TAKREG, 0x22) + 25.0f) >> 1, DEG2SHORT_ANGLE(0.5f)); + } + } else if (actor->_600 < 10.0 - actor->init_data._28 * 0.5) { + if (actor->_612.y > 0) { + s16 v; + if (actor->_604 > actor->_608) { + v = actor->_60C.y + DEG2SHORT_ANGLE(90); + } else { + v = actor->_60C.y - DEG2SHORT_ANGLE(90); + } + actor->_612.y = v; + } else { + add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(-90), CALC_EASE(GETREG(TAKREG, 0x21) * 0.01f + 0.25f), + DEG2SHORT_ANGLE(GETREG(TAKREG, 0x22) + 25.0f) >> 1, DEG2SHORT_ANGLE(0.5f)); + } + } else if (actor->_62E & 0x1e) { + mfish_kaseki_move_wall_smooth(actor, gamex); + } else if (actor->_626 < 0) { + f32 r = RANDOM_F(1.0f); + actor->_612.y = actor->_60C.y; + if ((actor->_608 - actor->_604) * cos_s(actor->_60C.y) < 0) { + actor->_612.y += (s16)(r * actor->init_data._30); + } else { + actor->_612.y -= (s16)(r * actor->init_data._30); + } + actor->_626 = actor->init_data._2C + (s16)(RANDOM_F(actor->init_data._2E)); + actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); + } } -void mfish_kaseki_move_wall_smooth() { - return; +void mfish_kaseki_move_wall_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + int n = (s16)actor->_62C; + s16 s; + s16 a, b; + s16 diff; + if (MIN(actor->_5FC, actor->_600) < 40.0f && ABS(actor->_61C) > DEG2SHORT_ANGLE(5)) { + return; + } + + diff = actor->_60C.y - (s16)n; + if (diff > 0) { + s = ((s16)n + DEG2SHORT_ANGLE(90.0f)); + } else { + s = ((s16)n - DEG2SHORT_ANGLE(90.0f)); + } + + a = (actor->_612.y - actor->_60C.y); + b = s - actor->_60C.y; + if (a * b > DEG2SHORT_ANGLE(-5)) { + add_calc_short_angle2(&actor->_612.y, s, CALC_EASE(0.25f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0)); + } } -void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { +void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + f32 v; + actor->_34(actor, game); + add_calc2(&actor->_5A0.y, actor->init_data._0C, 0.5f, 0.1f); + if (ABS(actor->_622) > DEG2SHORT_ANGLE(10)) { + add_calc_short_angle2(&actor->_634, DEG2SHORT_ANGLE(20), CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.25f), + DEG2SHORT_ANGLE(0)); + } else { + add_calc_short_angle2(&actor->_634, DEG2SHORT_ANGLE(1), CALC_EASE(0.25f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0)); + } - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + if (MIN(actor->_5FC, actor->_600) < 20.0f) { + if (ABS(actor->_61C) > ABS(actor->_622) && ABS(actor->_61C) < DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x36) + 20.0f)) { + add_calc2(&actor->_5E8, GETREG(TAKREG, 0x30) * 0.01f + 0.8f, GETREG(TAKREG, 0x31) * 0.01f + 0.25f, + GETREG(TAKREG, 0x32) * 0.01f + 0.1f); + } else { + add_calc2(&actor->_5E8, GETREG(TAKREG, 0x33) * 0.01f + 0.35f, GETREG(TAKREG, 0x34) * 0.01f + 0.05f, + GETREG(TAKREG, 0x35) * 0.01f + 0.05f); + } + } else { + if (actor->_5E8 > actor->_5F0) { + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.01f); + } else { + add_calc2(&actor->_5E8, actor->_5F0, 0.3f, 0.02f); + } + } + v = actor->_5E8 * (1.0f - ((sin_s(actor->_63A) * 0.2f + 0.2f) * MAX(cos_s(actor->_61C), 0.5f))); + actor->_5D0 = v * sin_s(actor->_60C.y); + actor->_5D8 = v * cos_s(actor->_60C.y); + actor->_5A0.x += actor->_5D0; + actor->_5A0.z += actor->_5D8; + mfish_onefish_mv(actor, game); + actor->_38._00.frame_control.speed = actor->_5E8 * 0.74f + 0.25f; + mfish_body_wind_anime_play(actor, game); + Museum_Fish_BGCheck(actor, game); + if (actor->_5A0.y < 55.0f - actor->init_data._04) { + actor->_5A0.y = 55.0f - actor->init_data._04; + } + actor->_626--; } -void mfish_kaseki_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + int i; + if (joint_num == 1) { + i = joint1->x + (int)(actor->_61C * (GETREG(TAKREG, 0x47) * 0.01f + 0.5f)); + joint1->x = MIN(MAX(i, DEG2SHORT_ANGLE(-10)), DEG2SHORT_ANGLE(10)); + Matrix_scale(1.0f, (GETREG(TAKREG, 0x36) * 0.001f + 0.02f) * sin_s(actor->_63A + actor->_63C) + 1.0f, + (GETREG(TAKREG, 0x36) * 0.001f + 0.02f) * sin_s(actor->_63A) + 1.0f, 1); + } else if (joint_num == 2) { + i = joint1->y - (int)(actor->_61C * (GETREG(TAKREG, 0x46) * 0.01f + 1.25f)); + joint1->y = MIN(MAX(i, DEG2SHORT_ANGLE(-50)), DEG2SHORT_ANGLE(50)); + i = joint1->x - (int)(actor->_61C * (GETREG(TAKREG, 0x48) * 0.01f + 0.25f)); + joint1->x = MIN(MAX(i, DEG2SHORT_ANGLE(-10)), DEG2SHORT_ANGLE(10)); + Matrix_scale(1.0f, (GETREG(TAKREG, 0x37) * 0.001f + 0.045f) * sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) + 1.0f, + (GETREG(TAKREG, 0x37) * 0.001f + 0.045f) * sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) + 1.0f, 1); + } else if (joint_num == 3) { + i = joint1->y - (int)(actor->_61C * (GETREG(TAKREG, 0x47) * 0.01f + 1.25f)); + joint1->y = MIN(MAX(i, DEG2SHORT_ANGLE(-50)), DEG2SHORT_ANGLE(50)); + i = joint1->x + DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x2d) * sin_s(actor->_63A)); + joint1->x = MIN(MAX(i, DEG2SHORT_ANGLE(-40)), DEG2SHORT_ANGLE(40)); + } + return TRUE; } void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_aroana_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index 7994696f..a3454b43 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -1,4 +1,3 @@ - void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) { f32 temp; f32 temp2; @@ -19,8 +18,60 @@ void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) { } } -void mfish_koi_move_smooth() { - return; +void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor) { + s16 vv; + s16 v = 0; + s16* o; + if (actor->_608 < 20.0f || actor->_600 < 20.0f || actor->_604 < 20.0f || actor->_5FC < 20.0f) { + if (actor->_600 < 20.0f) { + v = DEG2SHORT_ANGLE(90); + } else if (actor->_5FC < 20.0f) { + v = DEG2SHORT_ANGLE(-90); + } + + if (actor->_608 < 20.0f) { + if (v == 0) { + v = 0; + } else { + v >>= 1; + } + } else if (actor->_604 < 20.0f) { + if (v == 0) { + v = DEG2SHORT_ANGLE(-180); + } else { + v = DEG2SHORT_ANGLE(180) - (v >> 1); + } + } + + if ((actor->_5E8 > 0.0f || actor->_608 < 10.0f || actor->_604 < 10.0f || actor->_600 < 10.0f || + actor->_5FC < 10.0f) && + (actor->_34 != mfish_koi_peck_process)) { + vv = actor->_60C.y - (s16)v; + if (ABS(vv) < DEG2SHORT_ANGLE(45)) { + add_calc0(&actor->_5E8, 0.05f * cos_s(vv << 1), 0.0025f); + } + + if (ABS(vv) < DEG2SHORT_ANGLE(90) && ABS(actor->_622) < DEG2SHORT_ANGLE(15)) { + if (actor->_34 == mfish_koi_dummy_process) { + o = &actor->_634; + } else { + o = &actor->_612.y; + } + + if (vv > 0) { + add_calc_short_angle2( + o, (s16)v + DEG2SHORT_ANGLE(90), CALC_EASE(GETREG(TAKREG, 0x2d) * 0.01f + 0.15f), + DEG2SHORT_ANGLE(actor->_5E8 * ((GETREG(TAKREG, 0x2e) + 5.0f) * cos_s(vv)) + 1.5f) >> 1, + DEG2SHORT_ANGLE(0.5f)); + } else { + add_calc_short_angle2( + o, (s16)v - DEG2SHORT_ANGLE(90), CALC_EASE(GETREG(TAKREG, 0x2d) * 0.01f + 0.15f), + DEG2SHORT_ANGLE(actor->_5E8 * ((GETREG(TAKREG, 0x2e) + 5.0f) * cos_s(vv)) + 1.5f) >> 1, + DEG2SHORT_ANGLE(0.5f)); + } + } + } + } } void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -35,69 +86,424 @@ void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_624 = 9; } -void mfish_koi_dummy_process_init() { - return; +void mfish_koi_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + actor->_634 = mfish_get_hide_camera_angle(actor); + if (actor->_62E & 0x1e) { + if ((s16)(actor->_612.y - actor->_62C) > 0) { + actor->_634 = actor->_62C + DEG2SHORT_ANGLE(90); + } else { + actor->_634 = actor->_62C - DEG2SHORT_ANGLE(90); + } + } else { + add_calc_short_angle2(&actor->_634, actor->_612.y, CALC_EASE(0.4), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.5f)); + } + actor->_5F0 = MIN(MAX(actor->init_data._10, 0.1f), actor->_5E8); + actor->_5EC = 0.0f; + actor->_34 = mfish_koi_dummy_process; } -void mfish_koi_dummy_process() { - return; +void mfish_koi_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(3.75f), + DEG2SHORT_ANGLE(0.25f)); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(3.75f), + DEG2SHORT_ANGLE(0.125f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f)); + add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f); + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC); + add_calc0(&actor->_5F0, 0.02f, 0.01f); } -void mfish_koi_normal_process_init() { - return; +void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + f32 v = RANDOM_F(actor->init_data._14) + actor->init_data._10; + + f32 v2 = v / MAX(actor->init_data._14 + actor->init_data._10, 1.0f); + if (v > actor->_5E8) { + mfish_koi_tail_anim_set(actor, 0); + actor->_5F0 = v; + } + actor->_5F4 = Rnd_EX_fx(10.0f) * v2; + actor->_612.x = DEG2SHORT_ANGLE(-10 * (actor->_5F4 + actor->init_data._0C - actor->_5A0.y)); + actor->_612.x = CLAMP(actor->_612.x, DEG2SHORT_ANGLE(-50), DEG2SHORT_ANGLE(50)); + + actor->_5D4 = 0.0f; + + if (RANDOM_F(1.0f) > actor->init_data._1C) { + actor->_612.y += (s16)Rnd_EX_fx(actor->init_data._30 * 2.0f); + + if (ABS((s16)(actor->_612.y - actor->_60C.y)) < DEG2SHORT_ANGLE(20)) { + if ((s16)(actor->_612.y - actor->_60C.y) > 0) { + actor->_612.y += DEG2SHORT_ANGLE(20); + } else { + actor->_612.y -= DEG2SHORT_ANGLE(20); + } + } + actor->_632 = DEG2SHORT_ANGLE(v2 * 30.0f + 20.0f); + } else { + if ((s16)(actor->_612.y - actor->_60C.y) > 0) { + actor->_612.y += DEG2SHORT_ANGLE(20); + } else { + actor->_612.y -= DEG2SHORT_ANGLE(20); + } + actor->_632 = DEG2SHORT_ANGLE(v2 * 40.0f + 30.0f); + } + + if ((s16)(actor->_60C.y - actor->_612.y) > 0) { + actor->_636 = DEG2SHORT_ANGLE(-180); + } else { + actor->_636 = 0; + } + + actor->_62E &= ~0xC0; + actor->_5EC = 0.0f; + actor->_34 = mfish_aroana_normal_process; } -void mfish_koi_normal_process() { - return; +void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor) { + s16 temp; + if (ABS(actor->_632) > DEG2SHORT_ANGLE(20) || actor->_640 > 0) { + add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.002f + 0.03f, 0.25f, + 0.02f); + add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.2f), actor->_5EC * 0.5f); + } + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.05f), DEG2SHORT_ANGLE(0.375), DEG2SHORT_ANGLE(0.125)); + temp = DEG2SHORT_ANGLE2((actor->_5E8 * 4.0f) / (actor->init_data._14 + actor->init_data._10) + 6.0f); + actor->_636 += temp; + + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(2.0f), DEG2SHORT_ANGLE(0.125f)); + + if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { + if (fqrand() < 0.01f) { + mfish_aroana_long_move_process_init(actor); + } else { + mfish_aroana_dummy_process_init(actor); + } + } else if (actor->_5E8 > 0.01f && actor->_62E & 0x1e) { + if ((s16)(actor->_60C.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); + } else { + actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f); + } + actor->_632 = 0; + } } -void mfish_koi_turn_process_init() { - return; +void mfish_koi_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(55.0f)) + DEG2SHORT_ANGLE(60.0f); + actor->_61A = ABS(DEG2SHORT_ANGLE2(((s3 * (360.0f / 0x10000)) / 120.0f) * 2.5f + 2.0f)); + if (actor->_62E & 0x1e) { + if ((s16)(actor->_60C.y - actor->_62C) < 0) { + s3 = -s3; + } + } else if (actor->_62E & 0xC0) { + if (actor->_62E & 0x40) { + s3 = ABS(s3); + } else { + s3 = -ABS(s3); + } + actor->_62E &= ~0xC0; + } else if (actor->_62E & 0x20 && (actor->_62A - actor->_60C.y) < 0) { + s3 = -s3; + } + + if (s3 > 0) { + actor->_62E |= 0x40; + } else { + actor->_62E |= 0x80; + } + + actor->_612.y += s3; + + if (RANDOM_F(1.0f) < 0.2f) { + actor->_63E = RANDOM_F(2.0f) + 1.0f; + } else { + actor->_63E = 0; + } + + actor->_5EC = 0.0f; + actor->_5F0 = actor->init_data._10; + actor->_34 = mfish_koi_turn_process; } -void mfish_koi_turn_process() { - return; +void mfish_koi_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + if (ABS(actor->_622) > DEG2SHORT_ANGLE(35) || actor->_640 > 0) { + add_calc2(&actor->_5EC, 0.08f, 0.2f, 0.1f); + add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), actor->_5EC * 0.5f); + } + + add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), 0.15f, 0.2f); + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE(0.2f), actor->_61A >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); + if (ABS(actor->_622) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) { + if (actor->_63E > 0 && ABS(actor->_61C) < DEG2SHORT_ANGLE(2)) { + if (mfish_WallCheck(actor)) { + mfish_koi_tail_anim_set(actor, 1); + mfish_aroana_turn_process_init(actor); + } else { + mfish_aroana_normal_process_init(actor); + } + actor->_63E--; + } else { + if (RANDOM_F(1.0f) < 0.8f) { + mfish_aroana_long_move_process_init(actor); + } else { + mfish_aroana_dummy_process_init(actor); + } + } + } } -void mfish_koi_peck_process_init() { - return; +void mfish_koi_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + f32 fVar8; + f32 fVar9; + int t; + s16 atanx; + s16 atany; + f32 dist; + + actor->_5D4 = 0.0f; + mfish_get_player_angle(actor, game, &atanx, &atany, &dist); + fVar9 = (actor->init_data)._10 + RANDOM_F(actor->init_data._14); + + if (dist < 60.0f) { + fVar9 *= 0.75f; + actor->_5F0 = MIN(fVar9, 0.75f); + } + + if (fVar9 > actor->_5E8) { + actor->_5F0 = fVar9; + } + + fVar8 = (fVar9 / 8.0f); + + if (ABS((s16)(atanx - actor->_60C.y)) < actor->init_data._30) { + actor->_612.y = atanx; + } else if ((s16)(atanx - actor->_60C.y) > 0) { + actor->_612.y = actor->_60C.y + actor->init_data._30; + } else { + actor->_612.y = actor->_60C.y - actor->init_data._30; + } + + if (atany < 0) { + actor->_5F4 = actor->_5F4 + fqrand() * 2.5f; + actor->_5F4 = MAX(MIN(10, actor->_5F4), -10); + + } else { + actor->_5F4 = actor->_5F4 - fqrand() * 2.5f; + actor->_5F4 = MAX(MIN(10, actor->_5F4), -10); + } + + actor->_632 = DEG2SHORT_ANGLE((fVar8 * 30.0f) + 20.0f); + + if (qrand() & 0x8000) { + actor->_636 = 0x4000; + } else { + actor->_636 = -0x4000; + } + + actor->_62E &= ~0xC0; + actor->_5EC = 0.0f; + actor->_34 = mfish_koi_peck_process; } -void mfish_koi_peck_process() { - return; +void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + s16 atanx; + s16 atany; + f32 dist; + + // mfish_get_player_angle(actor, gamex, &atanx, &atany, &dist); + + if (ABS(actor->_632) > DEG2SHORT_ANGLE(20) || actor->_640 > 0) { + add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.0035f + 0.04f, 0.4f, + 0.1f); + add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.4f), actor->_5EC * 0.5f); + // add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), 0.5f, 0.05f); + // add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.25f), (((actor->_632 - DEG2SHORT_ANGLE(20)) / + // DEG2SHORT_ANGLE(2)) * 0.04f + 0.01f) * 0.5f, 0.05f); } else if (actor->_626 > actor->_628 - 16) { + } + + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(0.375f), DEG2SHORT_ANGLE(0.125f)); + actor->_636 += DEG2SHORT_ANGLE(3.f); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632), + CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.f), DEG2SHORT_ANGLE(0.125f)); + + if (mfish_peck_wall_check(actor, gamex)) { + if (fqrand() < 0.9f) { + actor->_5E8 = -0.3f - fqrand() * 0.3f; + actor->_5F0 = 0.05f; + actor->_626 = DEG2SHORT_ANGLE(0.33f); + } else { + actor->_5E8 = -1.0f - RANDOM_F(0.05f); + actor->_5F0 = 0.05f; + actor->_626 = actor->init_data._2C + (s16)(fqrand() * actor->init_data._2E); + // actor->_626 >>= 3; + } + actor->_628 = actor->_626; + // actor->_5F0 = 0.0f; + } } void mfish_koi_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + // NOT BAD return; } -void mfish_koi_long_move_process() { - return; +void mfish_koi_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(2.f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); + add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f); + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC); } -void mfish_koi_base_FishMove() { - return; +void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + xyz_t p; + if ((actor->_34 != mfish_aroana_turn_process && actor->_34 != mfish_aroana_long_move_process) || + actor->_640 > DEG2SHORT_ANGLE(0)) { + add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, GETREG(TAKREG, 0x13) * 0.001f + 0.01f); + } else { + add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, GETREG(TAKREG, 0x14) * 0.0001f + 0.0005f); + } + add_calc0(&actor->_5EC, 0.5f, 0.01f); + + actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.y) * cos_s(actor->_60C.x); + actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.y) * cos_s(actor->_60C.x); + add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4); + mfish_move_smooth(actor, game); + mfish_get_flow_vec(&p, actor, game); + actor->_5A0.x += actor->_5D0 + actor->_5DC.x; + actor->_5A0.z += actor->_5D8 + actor->_5DC.z; + actor->_5A0.y += actor->_5DC.y * 0.05f; + actor->_5A0.y = MAX(110.f, MIN(60.f, actor->_5A0.y)); } void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if (actor->_5F8 > actor->init_data._08 * 20.f) { + actor->_5F8 = 0.0f; + actor->_626 = 0; + } - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + if (actor->_626-- <= 0) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + if (mfish_peck_check(actor, gamex)) { + actor->_626 >>= 1; + actor->_628 = actor->_626; + mfish_koi_tail_anim_set(actor, 0); + mfish_koi_peck_process_init(actor, gamex); + } else if (mfish_WallCheck(actor)) { + mfish_koi_tail_anim_set(actor, 1); + mfish_koi_turn_process_init(actor); + } else { + mfish_koi_tail_anim_set(actor, 0); + mfish_aroana_normal_process_init(actor); + } + } else if (actor->_34 == mfish_aroana_normal_process) { + if ((actor->_62E & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || + (actor->_62E & 0x20 && + ABS((s16)(DEG2SHORT_ANGLE(180) + actor->_62A - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + mfish_koi_tail_anim_set(actor, 1); + mfish_koi_turn_process_init(actor); + } + } + + // actor->_5AC.y = 0.0f; + actor->_638 += DEG2SHORT_ANGLE(10); + actor->_34(actor, gamex); + if (ABS(actor->_61C) < ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { + add_calc2(&actor->_5E8, MAX(0.2f, actor->_5E8), 0.2f, 0.5f); + } + add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.1f), DEG2SHORT_ANGLE(1.5f), + DEG2SHORT_ANGLE(0.05f)); + add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.05f)); + mfish_aroana_base_FishMove(actor, gamex); } -void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; +void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + mfish_onefish_mv(actor, game); + mfish_koi_base_mv(actor, game); + Museum_Fish_BGCheck(actor, game); + if ((actor->_34 == mfish_koi_dummy_process || actor->_34 == mfish_koi_long_move_process) && + (play->game_frame & 0xff) == 0 && RANDOM_F(1) < 0.3f) { + mfish_koi_tail_anim_set(actor, 2); + } + if (actor->_640 > 0) { + actor->_640--; + if (actor->_34 == mfish_koi_dummy_process || actor->_34 == mfish_koi_long_move_process) { + add_calc2(&actor->_38._00.frame_control.speed, + (actor->_5AC.x * MAX(actor->_5F0 - actor->_5E8, 0.0f)) / + (actor->init_data._10 + actor->init_data._14) + + 0.15f, + 0.5f, 0.5f); + } else { + add_calc2(&actor->_38._00.frame_control.speed, + (actor->_5AC.x * MAX(actor->_5F0 - actor->_5E8, 0.0f)) / + (actor->init_data._10 + actor->init_data._14) + + 0.15f, + 0.5f, 0.5f); + } + add_calc2(&actor->_5AC.z, + (GETREG(TAKREG, 0x46) * 0.01f) + 0.2f + + ((0.8f - (GETREG(TAKREG, 0x46) * 0.01f)) * + (actor->init_data._14 + actor->init_data._10 - actor->_5F0)) / + (actor->init_data._14 + actor->init_data._10), + 0.5f, 0.1f); + } else { + add_calc2(&actor->_38._00.frame_control.speed, + (actor->_5E8 * 2.0f) / (actor->init_data._10 + actor->init_data._14) + 0.3f, 0.2f, 0.1f); + add_calc2(&actor->_5AC.z, 1.0f, 0.1f, 0.025f); + } } -void mfish_koi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)actor; + if (joint_num == 0) { + trans->x *= actor->_5AC.z; + trans->y *= actor->_5AC.z; + trans->z = (trans->z - 1400.0f) * actor->_5AC.z + 1400.0f; + } else if (joint_num == 1) { + joint1->y = joint1->y * actor->_5AC.z; + } else if (joint_num == 2) { + int i; + + i = joint1->y - (int)(actor->_61C * (GETREG(TAKREG, 0x47) * 0.1f + 2.0f)); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80)); + + i = joint1->x - (actor->_61C >> 3); + joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25)); + } + + return TRUE; } void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_RotateY(actor->_60C.y, 1); + Matrix_translate(0.0f, actor->init_data._04 * 0.25f, actor->init_data._24 * 1.5f, 1); + Matrix_RotateY(actor->_60C.x, 1); + Matrix_RotateZ(MY_CLAMP(-(actor->_61C >> 2), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); + Matrix_translate(0.0f, -actor->init_data._04 * 0.25f, -actor->init_data._24 * 0.5f, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_aroana_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } From 86ec057ed166e985e05ea0581a91811d4b7bda34 Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 14 Dec 2024 18:26:16 -0500 Subject: [PATCH 10/33] cleaning up types --- include/ac_museum_fish.h | 61 +++++++++++++++-------------- src/actor/ac_museum_fish.c | 2 +- src/actor/ac_museum_fish_bass.c_inc | 6 +-- src/actor/ac_museum_fish_koi.c_inc | 2 +- 4 files changed, 37 insertions(+), 34 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 944ebd63..01332a70 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -234,34 +234,35 @@ void mfish_afish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_afish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_aroana_dummy_process_init(); -void mfish_aroana_dummy_process(); -void mfish_aroana_normal_process_init(); -void mfish_aroana_normal_process(); -void mfish_aroana_turn_process_init(); -void mfish_aroana_turn_process(); -void mfish_aroana_long_move_process_init(); -void mfish_aroana_long_move_process(); -void mfish_aroana_base_FishMove(); +void mfish_aroana_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor); +void mfish_aroana_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor); +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); -void mfish_koi_tail_anim_set(); -void mfish_koi_move_smooth(); + +void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4); +void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor); void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_koi_dummy_process_init(); +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(); -void mfish_koi_normal_process(); -void mfish_koi_turn_process_init(); -void mfish_koi_turn_process(); -void mfish_koi_peck_process_init(); -void mfish_koi_peck_process(); -void mfish_koi_long_move_process_init(); -void mfish_koi_long_move_process(); -void mfish_koi_base_FishMove(); +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, @@ -276,17 +277,19 @@ 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); -void mfish_bass_tail_anim_set(); -void mfish_bass_base_FishMove(); -void mfish_bass_dummy_process_init(); -void mfish_bass_dummy_process(); -void mfish_bass_normal_process_init(); -void mfish_bass_normal_process(); -void mfish_bass_turn_process_init(); -void mfish_bass_turn_process(); + +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); + void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_seafish_normal_init(); void mfish_seafish_normal(); diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index 5ab288b7..b669eb4b 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -1052,7 +1052,7 @@ BOOL kusa_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, trans->y -= actor->_540.x * (v * joint_num); trans->z += actor->_540.z * (v * joint_num); } - return 1; + return TRUE; } void Museum_Fish_Kusa_Draw(ACTOR* actorx, GAME* game, int r5) { diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc index 62585e40..582b8a6b 100644 --- a/src/actor/ac_museum_fish_bass.c_inc +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -51,7 +51,7 @@ void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { return; } -void mfish_bass_dummy_process(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.0f), 0x1c7, 0x2d); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), 0xe3, 0x2d); @@ -66,7 +66,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { ra = RANDOM_F(fishActor->init_data._14) + fishActor->init_data._10; t = (ra) / MAX(fishActor->init_data._14 + fishActor->init_data._10, 1); - if (RANDOM_F(1) > 0.25f && !(fishActor->_62E & 0x200)) { + if (RANDOM_F(1) > 0.25f && (fishActor->_62E & 0x200) == 0) { fishActor->_62E |= 0x200; } else { fishActor->_62E &= ~0x200; @@ -218,7 +218,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_34 = mfish_bass_turn_process; } -void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor) { +void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { int a; f32 v0, v1, v2, v3, v4; v0 = actor->_5AC.y * 0.2f + 0.05f; diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index a3454b43..2dff7fe7 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -159,7 +159,7 @@ void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_34 = mfish_aroana_normal_process; } -void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor) { +void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { s16 temp; if (ABS(actor->_632) > DEG2SHORT_ANGLE(20) || actor->_640 > 0) { add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.002f + 0.03f, 0.25f, From 8c72d85c72a44010d6acba09446b73a490d8dfd9 Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 15 Dec 2024 13:29:00 -0500 Subject: [PATCH 11/33] match seafish --- include/ac_museum_fish.h | 11 +- src/actor/ac_museum_fish_koi.c_inc | 2 +- src/actor/ac_museum_fish_seafish.c_inc | 241 +++++++++++++++++++++++-- 3 files changed, 231 insertions(+), 23 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 01332a70..076d3847 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -96,7 +96,7 @@ typedef struct _FISH_PRIVATE_DATA { f32 _608; s_xyz _60C; s_xyz _612; - artificial_padding(0x612, 0x61A, s_xyz); + s16 _618; s16 _61A; s16 _61C; s16 _61E; @@ -292,13 +292,14 @@ void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_seafish_normal_init(); -void mfish_seafish_normal(); -void mfish_seafish_turn_init(); -void mfish_seafish_turn(); +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); -void mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); + void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_tai_normal_init(); void mfish_tai_normal(); diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index 2dff7fe7..bd99a55a 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -467,7 +467,7 @@ 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) { - MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)actor; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; if (joint_num == 0) { trans->x *= actor->_5AC.z; trans->y *= actor->_5AC.z; diff --git a/src/actor/ac_museum_fish_seafish.c_inc b/src/actor/ac_museum_fish_seafish.c_inc index 458e7fa4..8dd55eae 100644 --- a/src/actor/ac_museum_fish_seafish.c_inc +++ b/src/actor/ac_museum_fish_seafish.c_inc @@ -1,7 +1,25 @@ -void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; +void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + s16 s = qrand(); + mfish_onefish_ct(actor, game); + actor->_5E8 = actor->init_data._10 + RANDOM_F(actor->init_data._14); + actor->_5F0 = actor->_5E8; + actor->_60C.y = s; + actor->_612.y = actor->_60C.y; + actor->_5F4 = 0.0f; + actor->_5D4 = 0.0f; + actor->_5AC = ZeroVec; + actor->_638 = qrand(); + actor->_622 = 0; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_624 = 2; + actor->_594 = NULL; + actor->_598 = NULL; + actor->_5EC = 0.08f; + actor->_5AC.x = 15.0f; + actor->_5AC.z = 15.0f; + mfish_seafish_normal_init(actor, game); } void mfish_seafish_normal_init() { @@ -9,31 +27,220 @@ void mfish_seafish_normal_init() { return; } -void mfish_seafish_normal() { - return; +void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 a = MAX(actor->_5E8 / (actor->init_data._14 + actor->init_data._10), 0.4f) * 5461.0f; + s16 s = (s16)MY_MAX((s16)(int)a, DEG2SHORT_ANGLE(20)); + f32 o_5a0_z; + f32 o_5a0_y; + f32 sum_i_8; + f32 abs_diff_sum; + f32 t; + f32 r; + + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), (s16)(s >> 1) >> 1, + (s16)DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + if (actor->_598 != NULL) { + o_5a0_z = actor->_598->_5A0.z; + o_5a0_y = actor->_598->_5A0.y; + sum_i_8 = (actor->_598->init_data._08 + actor->init_data._08); + abs_diff_sum = MAX(sum_i_8 - ABS(actor->_598->_5A0.z - actor->_5A0.z), 0.f); + + abs_diff_sum /= sum_i_8; + + if (actor->_598->_59C != 0x23) { + f32 this_5a0_y = actor->_5A0.y; + if (o_5a0_y < actor->_5A0.y) { + t = o_5a0_y + (actor->_598->init_data._04 + actor->init_data._04); + if (this_5a0_y < t) { + add_calc2(&actor->_5A0.y, t + 2.0f, 0.2f, abs_diff_sum * 0.1f); + } + } else { + t = o_5a0_y - (actor->_598->init_data._04 + actor->init_data._04); + if (this_5a0_y > t) { + add_calc2(&actor->_5A0.y, t - 2.0f, 0.2f, abs_diff_sum * 0.1f); + } + } + } + + if (actor->_598->_5A0.z < actor->_5A0.z) { + // swap here + o_5a0_z += sum_i_8; + add_calc2(&actor->_5A0.z, o_5a0_z, 0.1f, abs_diff_sum * 0.1f); + } else { + // swap here + o_5a0_z -= sum_i_8; + add_calc2(&actor->_5A0.z, o_5a0_z, 0.1f, abs_diff_sum * 0.1f); + } + } + + if (actor->_5FC < actor->_5AC.x - 0.5f * actor->init_data._28) { + if (actor->_612.y < 0) { + s16 ss; + if (actor->_604 > actor->_608) { + ss = actor->_60C.y - DEG2SHORT_ANGLE(90); + } else { + ss = actor->_60C.y + DEG2SHORT_ANGLE(90); + } + actor->_612.y = ss; + actor->_5AC.z = RANDOM_F(60.0f) + 15.0f; + } else { + add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(90), CALC_EASE(0.5f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.5f)); + } + } else if (actor->_600 < actor->_5AC.z - 0.5f * actor->init_data._28) { + if (actor->_612.y > 0) { + s16 ss; + if (actor->_604 > actor->_608) { + ss = (s16)actor->_60C.y + DEG2SHORT_ANGLE(90); + } else { + ss = (s16)actor->_60C.y - DEG2SHORT_ANGLE(90); + } + actor->_612.y = ss; + actor->_5AC.x = RANDOM_F(60.0f) + 15.0f; + } else { + add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(-90), CALC_EASE(0.5f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.5f)); + } + } else if (actor->_62E & 0x100) { + actor->_5A0.z += 0.05f; + if (ABS((s16)(actor->_612.y - DEG2SHORT_ANGLE(180))) < DEG2SHORT_ANGLE(110)) { + if (actor->_612.y > 0) { + actor->_612.y -= DEG2SHORT_ANGLE(1.5f); + } else { + actor->_612.y += DEG2SHORT_ANGLE(1.5f); + } + } + } else if (actor->_62E & 0x1e) { + mfish_seafish_turn_init(actor, gamex); + } else if (actor->_62E & 0x20 && actor->_5F8 > actor->init_data._08 * 0.5f) { + if (actor->init_data._20 > actor->_594->init_data._20) { + s16 escAngle = mfish_get_escape_angle(actor, gamex); + add_calc_short_angle2(&actor->_612.y, escAngle, CALC_EASE(0.25f), DEG2SHORT_ANGLE(2.5f), + DEG2SHORT_ANGLE(0)); + } + } else if (actor->_626 < 0) { + // r in wrong register here + r = fqrand(); + actor->_612.y = actor->_60C.y; + if ((actor->_608 - actor->_604) * cos_s(actor->_60C.y) < 0.0f) { + actor->_612.y += (s16)(r * actor->init_data._30); + } else { + actor->_612.y -= (s16)(r * actor->init_data._30); + } + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); + } } -void mfish_seafish_turn_init() { - return; +void mfish_seafish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + s16 s = (s16)actor->_62C; + + if (ABS(actor->_622) > DEG2SHORT_ANGLE(45)) { + return; + } + if (ABS(actor->_612.y - actor->_62C) > DEG2SHORT_ANGLE(90)) { + return; + } + + if ((s16)(actor->_60C.y - s) > 0) { + if (actor->_62E & 6) { + s = s + DEG2SHORT_ANGLE(170); + } else { + s = s + DEG2SHORT_ANGLE(95); + } + } else { + if (actor->_62E & 6) { + s = s - DEG2SHORT_ANGLE(170); + } else { + s = s - DEG2SHORT_ANGLE(95); + } + } + + if (ABS((s16)(s - actor->_612.y)) > DEG2SHORT_ANGLE(45)) { + actor->_34 = mfish_seafish_turn; + } + actor->_612.y = s; } -void mfish_seafish_turn() { - return; +void mfish_seafish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.25f), + DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.125f)); + add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); + if (ABS(actor->_622) < DEG2SHORT_ANGLE(3)) { + mfish_seafish_normal_init(actor, game); + } } void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + xyz_t p; + actor->_34(actor, gamex); + actor->_618 += DEG2SHORT_ANGLE(actor->_5E8 * RANDOM_F(3.0f)); + actor->_5F4 = sin_s(actor->_618) * 5.0f; + if (actor->_62E & 0x20) { + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.02f, 0.05f); + } else { + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, 0.1f); + } + add_calc0(&actor->_5F8, 0.2f, 0.05f); + actor->_5F8 = MIN(1.0f, actor->_5F8); + if (ABS(actor->_61C) > DEG2SHORT_ANGLE(15) && ABS(actor->_622) - ABS(actor->_61C) < 0) { + add_calc2(&actor->_5E8, MAX(actor->_5F0, 0.8f), 0.5f, 0.25f); + } else if (actor->_626 < actor->_628 - 80) { + add_calc2(&actor->_5E8, actor->_5EC, 1.0f - actor->init_data._18, 0.0025f); + } else if (actor->_5E8 > actor->_5F0) { + add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.02f); + } else { + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.01f); + } + actor->_38._00.frame_control.speed = + (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * 0.5f + (GETREG(TAKREG, 0x15) * 0.01f + 1.2f) * actor->_5E8; + actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.y); + mfish_get_flow_vec(&p, actor, gamex); + actor->_5A0.x += actor->_5D0 + p.x; + actor->_5A0.z += actor->_5D8 + p.z; + mfish_onefish_mv(actor, gamex); + mfish_body_wind_anime_play(actor, gamex); + Museum_Fish_BGCheck(actor, gamex); + if (actor->_5A0.y < GETREG(TAKREG, 0x47) + 55.0f - actor->init_data._04) { + actor->_5A0.y = GETREG(TAKREG, 0x47) + 55.0f - actor->init_data._04; + } + actor->_626--; } -void mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (joint_num == 1) { + int s = joint1->x + (int)(actor->_61C * (GETREG(TAKREG, 0x37) * 0.01f + 0.5f)); + joint1->x = MIN(MAX(s, DEG2SHORT_ANGLE(-15)), DEG2SHORT_ANGLE(15)); + Matrix_scale(1.0f, (GETREG(TAKREG, 0x36) * 0.001f + 0.035f) * sin_s(actor->_63A + actor->_63C) + 1.0f, + (GETREG(TAKREG, 0x36) * 0.001f + 0.035f) * sin_s(actor->_63A) + 1.0f, 1); + } else if (joint_num == 2) { + int v = joint1->y - (actor->_61C << 1); + joint1->y = MIN(MAX(v, DEG2SHORT_ANGLE(-80)), DEG2SHORT_ANGLE(80)); + Matrix_scale(1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) * 0.07f + 1.0f, + sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) * 0.07f + 1.0f, 1); + } + return TRUE; } void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_seafish_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } From a7326c31f496e51ae081049826d574478ac723d5 Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 19 Dec 2024 21:38:30 -0500 Subject: [PATCH 12/33] match hasu --- include/ac_museum_fish.h | 57 ++++++-- src/actor/ac_museum_fish.c | 4 +- src/actor/ac_museum_fish_base.c_inc | 4 +- src/actor/ac_museum_fish_hasu.c_inc | 213 +++++++++++++++++++++++++--- 4 files changed, 238 insertions(+), 40 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 076d3847..fe1a255e 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -59,23 +59,36 @@ typedef struct _YET_SKELETON { artificial_padding(0x4F0, 0x514, s_xyz); s_xyz _514; - - artificial_padding(0x514, 0x538, s_xyz); + 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; - void* _554; + 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 struct _FISH_PRIVATE_DATA { MUSEUM_FISH_INIT_DATA init_data; PRIV_FISH_PROCESS _34; // size:4 YET_SKELETON _38; - void* _590; + YET_SKELETON_2* _590; struct _FISH_PRIVATE_DATA* _594; struct _FISH_PRIVATE_DATA* _598; + s32 _59C; // fish num xyz_t _5A0; xyz_t _5AC; @@ -133,9 +146,9 @@ typedef struct _MUSEUM_FISH_ACTOR { int _174; MUSEUM_FISH_PRIVATE_DATA prvFish[40]; // offset: 0x178 size: 0xFB48 MUSEUM_FISH_KUSA_DATA prvKusa[14]; // offset: 0xFCB8 size: 0x4AD0 - void* _14788; // offset: 0x14788 size: 4 + YET_SKELETON_2 _14788; // offset: 0x14788 size: 0x570 - artificial_padding(0x14788, 0x14d08, void*); + u8 _14cf8[16]; // temp xyz_t _14d08[2]; int numFishDisplayed; // offset: 0x14d20, size: 4 @@ -309,6 +322,7 @@ void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void 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); + void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_sfish_normal_init(); void mfish_sfish_normal(); @@ -318,6 +332,7 @@ void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg, s_xyz* joint1, xyz_t* trans); void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); + void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_gupi_normal_init(); void mfish_gupi_normal(); @@ -327,6 +342,7 @@ void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void 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); + void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_medaka_normal_init(); void mfish_medaka_normal(); @@ -336,6 +352,7 @@ void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void 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); + void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_kingyo_normal_init(); void mfish_kingyo_normal(); @@ -347,6 +364,7 @@ void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void 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); + void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_dojou_normal_init(); void mfish_dojou_normal(); @@ -356,21 +374,25 @@ void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void 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); + void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_donko_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg, s_xyz* joint1, xyz_t* trans); void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); + void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void 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); + void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void 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); + void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_unagi_get_next_rail_type(); void mfish_unagi_aim_wind_angle_calc(); @@ -386,6 +408,7 @@ void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void 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); + void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_namazu_body_wind_anime_play(); void mfish_namazu_normal_process_init(); @@ -401,6 +424,7 @@ void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void 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); + void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_zarigani_normal_process_init(); void mfish_zarigani_normal_process(); @@ -414,6 +438,7 @@ void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void 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); + void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_kurage_normal_init(); void mfish_kurage_normal(); @@ -421,15 +446,17 @@ void mfish_kurage_turn_init(); void mfish_kurage_turn(); void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_kurage_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_hasu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_hasu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_hasu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void hasu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg, + +void mfish_hasu_ct(YET_SKELETON_2* actor, GAME* game); +void mfish_hasu_mv(); +void mfish_hasu_dw(); +void mfish_kaeru_ct(); +void mfish_kaeru_mv(); +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); -void hasu_after_disp(); -void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); +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(); #ifdef __cplusplus } diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index b669eb4b..10489677 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -717,7 +717,7 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) { if (mMmd_FishInfo(0x21)) { actor->prvFish[0x21]._590 = &actor->_14788; } else { - mfish_hasu_ct((MUSEUM_FISH_PRIVATE_DATA*)&actor->_14788, gamex); + mfish_hasu_ct(&actor->_14788, gamex); } prv = actor->prvFish; @@ -725,7 +725,7 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) { prv->_62E &= ~1; if (mMmd_FishInfo(i)) { prv->_38._54C = mfish_model_tbl[i]; - prv->_38._550 = mfish_anime_init_tbl[i]; + prv->_38._550[0] = mfish_anime_init_tbl[i]; prv->_62E |= 1; Museum_Fish_Prv_data_init(prv, gamex, i, 1); } diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index 05c642c7..058a786c 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -504,8 +504,8 @@ void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; YET_SKELETON* s = &actor->_38; - cKF_SkeletonInfo_R_ct(&s->_00, s->_54C, s->_550, &s->_4F0, &s->_514); - cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&s->_00, s->_550, NULL, 1.875f, 0.0f); + cKF_SkeletonInfo_R_ct(&s->_00, s->_54C, s->_550[0], &s->_4F0, &s->_514); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&s->_00, s->_550[0], NULL, 1.875f, 0.0f); actor->_626 = actor->init_data._2C + (s16)(actor->init_data._2E * fqrand()); actor->_628 = actor->_626; actor->_60C.x = DEG2SHORT_ANGLE(0); diff --git a/src/actor/ac_museum_fish_hasu.c_inc b/src/actor/ac_museum_fish_hasu.c_inc index fb6f7350..27e19f02 100644 --- a/src/actor/ac_museum_fish_hasu.c_inc +++ b/src/actor/ac_museum_fish_hasu.c_inc @@ -1,44 +1,215 @@ +// Pretty sure all the floats in this file are correct -void mfish_hasu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { +extern cKF_Skeleton_R_c cKF_bs_r_obj_museum5_hasu; +extern cKF_Animation_R_c cKF_ba_r_obj_museum5_hasu; - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; +void mfish_hasu_ct(YET_SKELETON_2* actor, GAME* gamex) { + cKF_SkeletonInfo_R_ct(&actor->_00._00, &cKF_bs_r_obj_museum5_hasu, &cKF_ba_r_obj_museum5_hasu, &actor->_00._4F0, + &actor->_00._526); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->_00._00, &cKF_ba_r_obj_museum5_hasu, NULL, 1.75, + 0.0); } -void mfish_hasu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; +void mfish_hasu_mv(YET_SKELETON* actor, GAME* gamex) { + cKF_SkeletonInfo_R_play(&actor->_00); } -void mfish_hasu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; +void mfish_hasu_dw(YET_SKELETON* actor, GAME* gamex) { + Mtx* mtxp; + if (gamex->frame_counter & 1) { + mtxp = &actor->_70; + } else { + mtxp = &actor->_2b0; + } + OPEN_DISP(gamex->graph); + Matrix_translate(hasu_pos.x + GETREG(TAKREG, 0x42) * 0.1f, hasu_pos.y, hasu_pos.z + GETREG(TAKREG, 0x43) * 0.1f, 0); + Matrix_RotateY(DEG2SHORT_ANGLE(-180), 1); + Matrix_scale(0.01f, 0.01f, 0.01f, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &actor->_00, mtxp, NULL, NULL, NULL); + CLOSE_DISP(gamex->graph); } +extern cKF_Animation_R_c cKF_ba_r_act_mus_kaeru_a1_big; void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + //! TODO: grabbed keyframe from ghidra, probably a cast to a larger struct + + YET_SKELETON* skele = &actor->_38; + YET_SKELETON_2* keyframe = actor->_590; + skele->_550[1] = &cKF_ba_r_act_mus_kaeru_a1_big; + cKF_SkeletonInfo_R_ct(&skele->_00, skele->_54C, skele->_550[0], &skele->_4F0, &skele->_514); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&skele->_00, skele->_550[0], NULL, 1.75f, 0.0f); + cKF_SkeletonInfo_R_ct(&keyframe->_00._00, &cKF_bs_r_obj_museum5_hasu, &cKF_ba_r_obj_museum5_hasu, + &keyframe->_00._4F0, &keyframe->_00._526); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&keyframe->_00._00, &cKF_ba_r_obj_museum5_hasu, NULL, + 1.75f, 0.0f); + actor->_5A0.x = 453.9f; + actor->_5A0.y = 116.0f; + actor->_5A0.z = 250.4f; + actor->_5AC = ZeroVec; + actor->_626 = 0; + actor->_612.x = 0; + actor->_612.y = 0; + actor->_612.z = 0; + actor->_60C = ZeroSVec; + actor->_5AC.x = -1.5f; + actor->_5AC.z = -2.0f; + actor->_60C.y = DEG2SHORT_ANGLE(135); + actor->_60C.y = DEG2SHORT_ANGLE(135); + actor->_640 = 0; + actor->_63E = RANDOM_F(8.0f) + 1.0f; + actor->_624 = 4; } void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele1 = &actor->_38; + YET_SKELETON_2* skele2 = actor->_590; + cKF_SkeletonInfo_R_play(&skele1->_00); + cKF_SkeletonInfo_R_play(&skele2->_00._00); + skele2->_568 += DEG2SHORT_ANGLE(GETREG(TAKREG, 0xb) + 5.0f); + skele2->_56A += DEG2SHORT_ANGLE(GETREG(TAKREG, 0xb) + 5.0f); + skele2->_56C += DEG2SHORT_ANGLE(GETREG(TAKREG, 0xb) + 5.0f); + add_calc0(&skele2->_55C, 0.2f, GETREG(TAKREG, 0xc) * 0.1f + 0.5f); + add_calc0(&skele2->_560, 0.2f, GETREG(TAKREG, 0xc) * 0.1f + 0.5f); + add_calc0(&skele2->_564, 0.2f, GETREG(TAKREG, 0xc) * 0.1f + 0.5f); + // some other macro? + if ((float)__fabs(skele1->_00.frame_control.current_frame - skele1->_00.frame_control.start_frame) < 0.008f) { + actor->_63E--; + if (actor->_63E <= 0) { + if (actor->_640 == 1) { + actor->_640 = 0; + } else { + actor->_640 = 1; + } + actor->_63E = RANDOM_F(8.0f) + 1.0f; + cKF_SkeletonInfo_R_init_standard_repeat_morph(&skele1->_00, skele1->_550[actor->_640], NULL, 0.f); + } + if (actor->_640 == 1) { + sAdo_OngenTrgStart(0x77, &actor->_5A0); + actor->_612.x = 1; + } + } + + if (actor->_612.x > 0) { + actor->_612.x++; + if (actor->_612.x == GETREG(TAKREG, 0x31) + 0xf || actor->_612.x == (GETREG(TAKREG, 0x32) + 0x19)) { + s16 v = GETREG(TAKREG, 0x4d) + 0x3c; + xyz_t v1 = hasu_pos; + v1.x += (-32.6f + GETREG(TAKREG, 0x49) * 0.1f); + v1.y += 116.f; + v1.z += (-26.6f + GETREG(TAKREG, 0x4a) * 0.1f); + if (actor->_612.x == GETREG(TAKREG, 0x31) + 0xf) { + skele2->_564 = GETREG(TAKREG, 10) + 30.0f; + skele2->_56C = DEG2SHORT_ANGLE(-180); + if (RANDOM_F(1.0f) < GETREG(TAKREG, 0x2b) * 0.01f + 0.6f) { + actor->_612.z = 1; + } + } else { + actor->_612.x = 0; + } + v1.x += -1.0f; + v1.y += -1.0f; + v1.z += -4.0f; + Common_Get(clip.effect_clip)->effect_make_proc(0x45, v1, 2, DEG2SHORT_ANGLE(0), gamex, -1, 6, v); + } + } + + if (actor->_612.y > 0) { + actor->_612.y++; + if (actor->_612.y == GETREG(TAKREG, 0x33) + 0xd || actor->_612.y == GETREG(TAKREG, 0x34) + 0x17) { + xyz_t v1 = hasu_pos; + s16 v = GETREG(TAKREG, 0x4c) + 0x23; + v1.x += (-2.3f + GETREG(TAKREG, 0x47) * 0.1f); + v1.y += 116.f; + v1.z += (-13.7f + GETREG(TAKREG, 0x48) * 0.1f); + if (actor->_612.y == GETREG(TAKREG, 0x33) + 0xd) { + skele2->_560 = GETREG(TAKREG, 10) + 30.0f; + skele2->_56A = DEG2SHORT_ANGLE(-180); + } else { + actor->_612.y = 0; + } + v1.x += -1.f; + v1.y += -1.f; + v1.z += -4.f; + Common_Get(clip.effect_clip)->effect_make_proc(0x45, v1, 2, DEG2SHORT_ANGLE(0), gamex, -1, 6, v); + } + } + + if (actor->_612.z > 0) { + actor->_612.z++; + if (actor->_612.z == GETREG(TAKREG, 0x35) + 0x17 || actor->_612.z == GETREG(TAKREG, 0x36) + 0x21) { + xyz_t v1 = hasu_pos; + s16 v = GETREG(TAKREG, 0x4b) + 10; + v1.x += (-7.7f + GETREG(TAKREG, 0x45) * 0.1f); + v1.y += 116.0f; + v1.z += (-32.3f + GETREG(TAKREG, 0x46) * 0.1f); + if (actor->_612.z == GETREG(TAKREG, 0x35) + 0x17) { + skele2->_55C = GETREG(TAKREG, 10) + 30.0f; + skele2->_568 = DEG2SHORT_ANGLE(-180); + if (RANDOM_F(1.0f) < GETREG(TAKREG, 0x2c) * 0.01f + 0.6f) { + actor->_612.y = 1; + } + } else { + actor->_612.z = 0; + } + v1.x += -1.0f; + v1.y += -1.0f; + v1.z += -4.0f; + Common_Get(clip.effect_clip)->effect_make_proc(0x45, v1, 2, DEG2SHORT_ANGLE(0), gamex, -1, 6, v); + } + } } -void hasu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + YET_SKELETON_2* v2 = actor->_590; + if (joint_num == 7) { + trans->z += v2->_55C * sin_s(v2->_568); + } else if (joint_num == 4) { + trans->z += v2->_560 * sin_s(v2->_56A); + } else if (joint_num == 9) { + trans->z += v2->_564 * sin_s(v2->_56C); + } + return TRUE; } -void hasu_after_disp() { - return; +BOOL hasu_after_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg, + s_xyz* joint1, xyz_t* trans) { + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + YET_SKELETON_2* skele = actor->_590; + if (joint_num == 9) { + Matrix_Position_Zero(&actor->_5A0); + actor->_5A0.y = skele->_564 * actor->init_data._00 * sin_s(skele->_56C) + 116.0f; + } + return TRUE; } void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + YET_SKELETON* skele = &actor->_38; + YET_SKELETON_2* keyframe = actor->_590; + Mtx *mtxp, *mtxp2; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + mtxp2 = &keyframe->_00._70; + } else { + mtxp = &skele->_2b0; + mtxp2 = &keyframe->_00._2b0; + } - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + OPEN_DISP(gamex->graph); + Matrix_translate(hasu_pos.x + GETREG(TAKREG, 0x42) * 0.1f, hasu_pos.y, hasu_pos.z + GETREG(TAKREG, 0x43) * 0.1f, 0); + Matrix_RotateY(DEG2SHORT_ANGLE(-180), 1); + Matrix_scale(0.01f, 0.01f, 0.01f, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &keyframe->_00._00, mtxp2, hasu_before_disp, hasu_after_disp, actor); + + Matrix_translate(actor->_5A0.x + actor->_5AC.x, actor->_5A0.y, actor->_5A0.z + actor->_5AC.z, 0); + Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, NULL, NULL, actor); + CLOSE_DISP(gamex->graph); } From d8c49d5afb146829f3de86bb599bb9d67bf95679 Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 21 Dec 2024 20:09:44 -0500 Subject: [PATCH 13/33] match hasu, kaeru, add rodata comment --- src/actor/ac_museum_fish.c | 188 +++++++++++++++++++++++++- src/actor/ac_museum_fish_base.c_inc | 9 +- src/actor/ac_museum_fish_kaseki.c_inc | 2 +- 3 files changed, 193 insertions(+), 6 deletions(-) diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index 10489677..f514ac13 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -11,6 +11,192 @@ #include "m_rcp.h" #include "ac_gyoei.h" +/* + just some shorthand; D(v) == double, F(v) == float + NOTE: sometimes something is used as a double, but has + the truncated precision of a float. you'll see `D(0.71f)` + + @467 F(2.0f); + @468 F(0.0f); + @469 D(0.5); // sqrtf + @470 D(3.0); // sqrtf + @471 F(0.5f); + @472 F(1.0f); + @526 F(0.025f); + @527 F(0.1f); + @528 F(0.005f); + @529 F(110.0f); + @530 F(60.0f); + @555 F(45.0f); + @556 F(180.0f); + @557 F(5.0f); + @568 D(4294967296.0); // 0x1_00_00_00_00, number of ints? + @570 D(4503601774854144.0); + @587 F(0.8f); + @588 F(0x10000 / 360.f); // deg2short + @603 F(1.2f); + @665 D(0.8f); // double cut at float precision + @666 F(0.05f); + @697 F(10.0f); + @698 F(20.0f); + @699 F(40.0f); + @791 F(0.04f); + @792 F(0.75f); + @793 F(0.01f); + @836 F(75.0f); + @837 F(7.5f); + @838 F(0.7f); + @839 F(0.2f); + @840 F(3.0f); + @920 D(0.9f); // double cut at float precision + @921 D(0.6f); // double cut at float precision + @974 F(0.125f); + @975 F(2.5f); + @976 F(-10.0f); + @1066 D(0.75); + @1067 F(0.4f); + @1068 F(0.25f); + @1069 F(0.9f); + @1070 F(-0.3f); + @1071 F(0.3f); + @1072 F(-0.5f); + @1099 F(65.0f); + @1100 F(0.15f); + @1101 F(15.0f); + @1145 F(4.0f); + @1146 F(0.6f); + @1147 F(-0.2f); + @1315 F(1.5f); + @1344 F(1.25f); + @1475 F(-12.0f); + @1556 F(0.03f); + @1557 F(0.003f); + @1558 F(0.02f); + @1559 F(6.0f); + @1598 F(0.0054931640625f); + @1599 F(120.0f); + @1680 D(0.7f); // double cut at float precision + @1711 F(0.08f); + @1712 F(0.001f); + @1957 F(0.002f); + @1958 D(0.95f); // double cut at float precision + @1997 F(55.0f); + @2301 F(6.5f); + @2377 F(0.0025f); + @2593 F(0.0035f); + @2594 F(0.35f); + @2850 F(-0.05f); + @2851 F(-0.1f); + @2906 D(0.85f); // double cut at float precision + @2937 F(0.0005f); + @2938 F(0.0001f); + @3066 F(1400.0f); + @3228 F(32749.0f); + @3229 F(25.0f); + @3230 D(10.0); + @3391 F(0.045f); + @3475 F(0.008f); + @3476 D(0.97f); // double cut at float precision + @3706 F(9.0f); + @3707 F(7.0f); + @3708 F(8.0f); + @3752 F(1.75f); + @4106 F(5461.0f); + @4261 F(0.035f); + @4262 F(0.07f); + @4470 F(80.0f); + @4626 F(0.16f); + @4774 F(35.0f); + @4775 F(90.0f); + @4929 F(115.0f); + @5269 F(85.0f); + @5270 F(114.5f); + @5325 F(-1.3f); + @5573 F(70.0f); + @5574 F(100.0f); + @5655 F(130.0f); + @6315 F(50.0f); + @6403 F(450.0f); + @6505 F(31.25f); + @6506 F(22.5f); + @6507 F(0.95f); + @6583 F(430.0f); + @6584 F(530.0f); + @6800 F(-0.025f); + @6801 F(-0.01f); + @6874 F(0.015f); + @6875 F(0.06f); + @6876 F(-90.0f); + @6877 F(-180.0f); + @7119 F(225.0f); + @7120 F(185.0f); + @7531 F(91.0f); + @7611 F(1.1f); + @7612 F(1.3f); + @7652 F(1500.0f); + @7653 F(1700.0f); + @7768 D(0.925f); // double cut at float precision + @7769 D(0.895f); // double cut at float precision + @7841 D(0.945f); // double cut at float precision + @7929 F(0.0625f); + @7930 D(0.7100000381469727); + @7931 D(0.965f); // double cut at float precision + @7932 D(0.975f); // double cut at float precision + @8130 F(300.0f); + @8131 F(-0.15f); + @8234 F(53.0f); + @8327 F(-3.0f); + @8410 F(-45.0f); + @8411 D(0.99f); // double cut at float precision + @8418 F(-1.2f); + @8451 F(0.99f); + @8478 F(58.0f); + @8726 F(12.0f); + @8727 F(13.0f); + @8807 F(453.9f); + @8808 F(116.0f); + @8809 F(250.4f); + @8810 F(-1.5f); + @8811 F(-2.0f); + @8883 F(-32.6f); + @8884 F(-26.6f); + @8885 F(-1.0f); + @8886 F(-4.0f); + @8887 F(-2.3f); + @8888 F(-13.7f); + @8889 F(-7.7f); + @8890 F(-32.3f); + @8949 float arr[2] = { 430.0f, 530.f }; + @9156 F(-20.0f); + @9157 F(1000.0f); + @9158 F(-25.0f); + @9159 F(-1000.0f); + @9160 F(-5.0f); + @9247 F(-17.5f); + @9248 F(76.0f); + @9352 F(54.0f); + @9353 F(189.0f); + @9354 F(14.0f); + @9355 F(32768.0f); + @9356 F(21.0f); + @9567 F(3.4028234663852886e+38f); + @9693 F(320.0f); + @9694 F(360.0f); + @9695 F(560.0f); + @9785 F(720.0f); + @10190 F(0.9800000190734863f); + @10191 F(160.0f); + @10226 F(350.0f); + @10227 F(650.0f); + @10228 F(215.0f); + @10240 F(1274.0f); + @10241 F(4369.0f); + @10353 F(240.0f); + @10417 F(340.0f); + @10418 F(580.0f); + @10419 F(200.0f); +*/ + // found useful macros #define MY_MAX(a, b) (((a) >= (b)) ? (a) : (b)) #define MY_CLAMP(v, l, h) MIN(MY_MAX((l), (v)), (h)) @@ -927,7 +1113,7 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { for (j = 0; j < 14; j++) { cKF_SkeletonInfo_R_play(&actor->prvKusa[j]._00); if (kusa_group_tbl[j] == 2) { - add_calc2(&actor->prvKusa[j]._540.x, -2.25f, 1.75f, 1.75f); + add_calc2(&actor->prvKusa[j]._540.x, -4.0f, 0.5f, 0.5f); add_calc_short_angle2(&actor->prvKusa[j]._538.y, DEG2SHORT_ANGLE(3.5f), CALC_EASE2(0.1f), 22, 4); } else { actor->prvKusa[j]._540.x *= 0.9f; diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index 058a786c..7ba03e97 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -1,3 +1,5 @@ +// pretty sure all the floats in this file are correct + f32 Rnd_EX_f(f32 v) { f32 rand1 = RANDOM2_F(2); f32 rand2 = RANDOM_F(1); @@ -397,7 +399,7 @@ void mfish_ground_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex void mfish_ground_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { xyz_t p = suisou_pos[actor->_630]; xyz_t_sub(&p, &actor->_5A0, &p); - actor->_5F4 = ((actor->init_data._08 * 0.3f + 64.0f) - (MAX(ABS(p.x), ABS(p.z)) * 0.15f)) - actor->init_data._0C; + actor->_5F4 = ((actor->init_data._08 * 0.3f + 65.0f) - (MAX(ABS(p.x), ABS(p.z)) * 0.15f)) - actor->init_data._0C; xyz_t_mult_v(&actor->_5DC, 0.1f); if (actor->_5A0.y > actor->_5F4 + actor->init_data._0C + 4.0f) { @@ -505,7 +507,7 @@ void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* game = (GAME_PLAY*)gamex; YET_SKELETON* s = &actor->_38; cKF_SkeletonInfo_R_ct(&s->_00, s->_54C, s->_550[0], &s->_4F0, &s->_514); - cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&s->_00, s->_550[0], NULL, 1.875f, 0.0f); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&s->_00, s->_550[0], NULL, 1.0f, 0.0f); actor->_626 = actor->init_data._2C + (s16)(actor->init_data._2E * fqrand()); actor->_628 = actor->_626; actor->_60C.x = DEG2SHORT_ANGLE(0); @@ -774,7 +776,7 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Museum_Fish_objchk_pos_set(actor, gamex); // asm 17C a = (+00.0f + p.x); - b = (-45.5f + p.x); + b = (-45.0f + p.x); d = (-17.5f + p.z); c = (+45.0f + p.z); @@ -1383,7 +1385,6 @@ 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) { - // int ret; s16 v1 = atans_table(actor->_594->_5A0.z - actor->_5A0.z, actor->_594->_5A0.x - actor->_5A0.x); s16 v = actor->_60C.y - v1; if (ABS(v) < DEG2SHORT_ANGLE(90)) { diff --git a/src/actor/ac_museum_fish_kaseki.c_inc b/src/actor/ac_museum_fish_kaseki.c_inc index c38fc2b7..06d9a860 100644 --- a/src/actor/ac_museum_fish_kaseki.c_inc +++ b/src/actor/ac_museum_fish_kaseki.c_inc @@ -135,7 +135,7 @@ void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_5A0.x += actor->_5D0; actor->_5A0.z += actor->_5D8; mfish_onefish_mv(actor, game); - actor->_38._00.frame_control.speed = actor->_5E8 * 0.74f + 0.25f; + actor->_38._00.frame_control.speed = actor->_5E8 * 0.75f + 0.25f; mfish_body_wind_anime_play(actor, game); Museum_Fish_BGCheck(actor, game); if (actor->_5A0.y < 55.0f - actor->init_data._04) { From 5be815ad57fe33b3b785fc2150db44c26973d727 Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 22 Dec 2024 19:24:14 -0500 Subject: [PATCH 14/33] match kurage --- include/ac_museum_fish.h | 8 +- src/actor/ac_museum_fish.c | 2 +- src/actor/ac_museum_fish_afish.c_inc | 27 ++-- src/actor/ac_museum_fish_aroana.c_inc | 35 ++-- src/actor/ac_museum_fish_base.c_inc | 78 ++++----- src/actor/ac_museum_fish_bass.c_inc | 28 ++-- src/actor/ac_museum_fish_kaseki.c_inc | 27 ++-- src/actor/ac_museum_fish_koi.c_inc | 44 ++--- src/actor/ac_museum_fish_kurage.c_inc | 212 +++++++++++++++++++++++-- src/actor/ac_museum_fish_seafish.c_inc | 25 +-- 10 files changed, 339 insertions(+), 147 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index fe1a255e..c591a4a2 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -94,9 +94,7 @@ typedef struct _FISH_PRIVATE_DATA { xyz_t _5AC; xyz_t _5B8; artificial_padding(0x5B8, 0x5D0, xyz_t); - f32 _5D0; - f32 _5D4; - f32 _5D8; + xyz_t _5D0; xyz_t _5DC; f32 _5E8; f32 _5EC; @@ -109,9 +107,7 @@ typedef struct _FISH_PRIVATE_DATA { f32 _608; s_xyz _60C; s_xyz _612; - s16 _618; - s16 _61A; - s16 _61C; + s_xyz _618; s16 _61E; s16 _620; s16 _622; diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index f514ac13..b4642eb2 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -202,7 +202,7 @@ #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 - sqrtf(1 - (x))) +#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))) diff --git a/src/actor/ac_museum_fish_afish.c_inc b/src/actor/ac_museum_fish_afish.c_inc index 1554d374..1fb11029 100644 --- a/src/actor/ac_museum_fish_afish.c_inc +++ b/src/actor/ac_museum_fish_afish.c_inc @@ -28,7 +28,7 @@ void mfish_afish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { DEG2SHORT_ANGLE(0.25f)); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); } void mfish_afish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { @@ -41,7 +41,7 @@ void mfish_afish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5F4 = Rnd_EX_fx(10.0f) * v2; actor->_612.x = DEG2SHORT_ANGLE((actor->_5F4 + actor->init_data._0C - actor->_5A0.y) * -12.0f); actor->_612.x = CLAMP(actor->_612.x, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); - actor->_5D4 = 0.0f; + actor->_5D0.y = 0.0f; if (RANDOM_F(1.0f) > actor->init_data._1C) { actor->_612.y += (s16)Rnd_EX_fx(actor->init_data._30 * 2.0f); @@ -86,7 +86,8 @@ void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_636 += temp; actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), CALC_EASE2(0.2f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(3.75f), + DEG2SHORT_ANGLE(0.25f)); if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { mfish_afish_dummy_process_init(actor); @@ -102,7 +103,7 @@ void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_afish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(75.0f)) + DEG2SHORT_ANGLE(45.0f); - actor->_61A = ABS(DEG2SHORT_ANGLE2(((s3 * (360.0f / 0x10000)) / 120.0f) * 4.0f + 2.5f)); + actor->_618.y = ABS(DEG2SHORT_ANGLE2(((s3 * (360.0f / 0x10000)) / 120.0f) * 4.0f + 2.5f)); if (actor->_62E & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { s3 = -s3; @@ -145,8 +146,8 @@ void mfish_afish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), 0.15f, 0.2f); add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), - CALC_EASE(0.2f), actor->_61A >> 1, DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + CALC_EASE(0.2f), actor->_618.y >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) { if (actor->_63E > 0) { if (mfish_WallCheck(actor)) { @@ -171,14 +172,14 @@ void mfish_afish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc2(&actor->_5E8, 0.05f, 1.0f - actor->init_data._18, 0.001f); } add_calc0(&actor->_5EC, 0.5f, 0.01f); - actor->_5D0 = actor->_5E8 * cos_s(actor->_60C.x) * sin_s(actor->_60C.y); - actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.x) * cos_s(actor->_60C.y); - add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.001f); - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4); + actor->_5D0.x = actor->_5E8 * cos_s(actor->_60C.x) * sin_s(actor->_60C.y); + actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.x) * cos_s(actor->_60C.y); + add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.001f); + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); mfish_move_smooth(actor, gamex); mfish_get_flow_vec(&p, actor, gamex); - actor->_5A0.x += actor->_5D0 + actor->_5DC.x; - actor->_5A0.z += actor->_5D8 + actor->_5DC.z; + actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; + actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; actor->_5A0.y += actor->_5DC.y; actor->_5A0.y = MAX(110.f, MIN(60.f, actor->_5A0.y)); } @@ -213,7 +214,7 @@ void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5AC.y = 0.0f; actor->_638 += DEG2SHORT_ANGLE(10); actor->_34(actor, gamex); - if (ABS(actor->_61C) > ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { + if (ABS(actor->_618.z) > ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { add_calc2(&actor->_5E8, MIN(0.2f, actor->_5E8), 0.2f, 0.5f); } add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.1f), DEG2SHORT_ANGLE(2.5), DEG2SHORT_ANGLE(0.5)); diff --git a/src/actor/ac_museum_fish_aroana.c_inc b/src/actor/ac_museum_fish_aroana.c_inc index a013377f..aa873826 100644 --- a/src/actor/ac_museum_fish_aroana.c_inc +++ b/src/actor/ac_museum_fish_aroana.c_inc @@ -13,7 +13,7 @@ void mfish_aroana_dummy_process_init() { void mfish_aroana_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.0f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.0f), DEG2SHORT_ANGLE(0.25f)); add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f); add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC); add_calc0(&actor->_5F0, 0.01f, 0.001f); @@ -30,7 +30,7 @@ void mfish_aroana_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { } actor->_5F4 = Rnd_EX_fx(10.0f) * v2; actor->_612.x = atans_table(actor->_5E8, actor->_5F4 + actor->init_data._0C - actor->_5A0.y) >> 4; - actor->_5D4 = 0.0f; + actor->_5D0.y = 0.0f; if (RANDOM_F(1.0f) > actor->init_data._1C) { actor->_612.y += (s16)Rnd_EX_fx(actor->init_data._30 * 2.0f); @@ -79,7 +79,8 @@ void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), CALC_EASE2(0.2f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(3.75f), + DEG2SHORT_ANGLE(0.25f)); if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { if (fqrand() < 0.01f) { @@ -99,7 +100,7 @@ void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { void mfish_aroana_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(55.0f)) + DEG2SHORT_ANGLE(45.0f); - actor->_61A = ABS(DEG2SHORT_ANGLE2(((s3 * (360.0f / 0x10000)) / 120.0f) * 2.5f + 2.0f)); + actor->_618.y = ABS(DEG2SHORT_ANGLE2(((s3 * (360.0f / 0x10000)) / 120.0f) * 2.5f + 2.0f)); if (actor->_62E & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { s3 = -s3; @@ -142,8 +143,9 @@ void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), 0.15f, 0.2f); add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), - CALC_EASE(0.2f), actor->_61A >> 1, DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.125f)); + CALC_EASE(0.2f), actor->_618.y >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.125f)); if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) { if (actor->_63E > 0) { if (mfish_WallCheck(actor)) { @@ -173,7 +175,8 @@ void mfish_aroana_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) GAME_PLAY* play = (GAME_PLAY*)game; actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f); add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC); if ((play->game_frame & 0x3f) == 0 && RANDOM_F(1.0f) > 0.25f) { @@ -191,14 +194,14 @@ void mfish_aroana_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } add_calc0(&actor->_5EC, 0.5f, 0.01f); - actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.y); - actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.y); - add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4); + actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); + add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); mfish_move_smooth(actor, game); mfish_get_flow_vec(&p, actor, game); - actor->_5A0.x += actor->_5D0 + actor->_5DC.x; - actor->_5A0.z += actor->_5D8 + actor->_5DC.z; + actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; + actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; actor->_5A0.y += actor->_5DC.y; actor->_5A0.y = MAX(110.f, MIN(60.f, actor->_5A0.y)); } @@ -230,7 +233,7 @@ void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5AC.y = 0.0f; actor->_638 += DEG2SHORT_ANGLE(5); actor->_34(actor, gamex); - if (ABS(actor->_61C) > ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { + if (ABS(actor->_618.z) > ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { add_calc2(&actor->_5E8, MIN(0.2f, actor->_5E8), 0.2f, 0.5f); } add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.1f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f)); @@ -251,10 +254,10 @@ BOOL mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int jo if (joint_num == 1) { Matrix_scale(1.0, sin_s(actor->_63A + actor->_63C) * 0.025f + 1.0f, sin_s(actor->_63A) * 0.025f + 1.0f, 1); } else if (joint_num == 2) { - v = joint1->y - (actor->_61C << 1); + v = joint1->y - (actor->_618.z << 1); joint1->y = MIN(MAX(v, DEG2SHORT_ANGLE(-40)), DEG2SHORT_ANGLE(40)); - v = joint1->x - (actor->_61C >> 2); + v = joint1->x - (actor->_618.z >> 2); joint1->x = MIN(MAX(v, DEG2SHORT_ANGLE(-20)), DEG2SHORT_ANGLE(20)); Matrix_scale(1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) * 0.05f + 1.0f, diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index 7ba03e97..690af7ab 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -37,16 +37,16 @@ void mfish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, 0.025f); } - actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.y); - actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.y); + actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); - add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4); + add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); mfish_move_smooth(actor, game); mfish_get_flow_vec(&pos, actor, game); - actor->_5A0.x += actor->_5D0 + actor->_5DC.x; - actor->_5A0.z += actor->_5D8 + actor->_5DC.z; + actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; + actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; actor->_5A0.y = actor->_5A0.y + actor->_5DC.y; actor->_5A0.y = MAX(60, MIN(110, actor->_5A0.y)); } @@ -126,7 +126,7 @@ 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.0f), DEG2SHORT_ANGLE(3.75f), 0x2d); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d); if (actor->_630 == 2) { if (actor->_612.y < 0) { @@ -154,7 +154,7 @@ void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { fishActor->_612.x = atans_table(fishActor->_5E8, fishActor->_5F4 + fishActor->init_data._0C - fishActor->_5A0.y) >> 4; - fishActor->_5D4 = 0; + fishActor->_5D0.y = 0; if (RANDOM_F(1) > fishActor->init_data._1C) { int diff; @@ -200,7 +200,7 @@ void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_636 += DEG2SHORT_ANGLE(10.0f); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), CALC_EASE2(0.5f), DEG2SHORT_ANGLE(6.25f), 45); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(3.75f), 45); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(3.75f), 45); if (actor->_5E8 < 0.01f || actor->_630 == 2 && actor->_5E8 < 0.05f) { mfish_dummy_process_init(actor); @@ -216,7 +216,7 @@ void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 v = DEG2SHORT_ANGLE(RANDOM_F(75.0f)) + DEG2SHORT_ANGLE(45); - actor->_61A = + actor->_618.y = DEG2SHORT_ANGLE(((actor->_5E8 + 0.5f) / (actor->init_data._10 + actor->init_data._14 + 0.5f)) * 7.5f + 7.5f); if (actor->_62E & 0xC0) { @@ -273,8 +273,9 @@ void mfish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), 0.5f, 0.2f); add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), - CALC_EASE(0.2f), actor->_61A >> 1, DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); + CALC_EASE(0.2f), actor->_618.y >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(3.75f), + DEG2SHORT_ANGLE(0.25f)); if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) { if (actor->_63E > 0) { @@ -298,7 +299,7 @@ void mfish_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { s16 atany; f32 dist; - actor->_5D4 = 0.0f; + actor->_5D0.y = 0.0f; mfish_get_player_angle(actor, game, &atanx, &atany, &dist); fVar9 = (actor->init_data)._14 + (actor->init_data)._10; @@ -362,7 +363,8 @@ void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_636 += DEG2SHORT_ANGLE(10); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632), CALC_EASE2(0.5f), DEG2SHORT_ANGLE(6.25f), DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(3.75f), + DEG2SHORT_ANGLE(0.25f)); if (mfish_peck_wall_check(actor, gamex)) { if (fqrand() < 0.9f) { @@ -433,8 +435,8 @@ void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f32 s; s16 q = qrand(); actor->_5E8 = f; - actor->_5D0 = cos_s(q) * f; - actor->_5D8 = sin_s(q) * f; + actor->_5D0.x = cos_s(q) * f; + actor->_5D0.z = sin_s(q) * f; actor->_60C.y = q; actor->_612.y = actor->_60C.y; if (actor->_59C == 4 || actor->_59C == 9) { @@ -444,7 +446,7 @@ void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } else { actor->_5F4 = fqrand2() * 10.0f; } - actor->_5D4 = 0.0; + actor->_5D0.y = 0.0; actor->_5AC = ZeroVec; actor->_638 = qrand(); actor->_622 = actor->_60C.y; @@ -494,7 +496,7 @@ void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_638 += DEG2SHORT_ANGLE(10); actor->_34(actor, gamex); - if (ABS(actor->_61C) > ABS(actor->_622)) { + if (ABS(actor->_618.z) > ABS(actor->_622)) { add_calc2(&actor->_5E8, MIN(GETREG(TAKREG, 19) * 0.1f + 0.2f, actor->_5E8), 0.2f, 0.5f); } @@ -537,9 +539,9 @@ int mfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, v = 3; } - t = joint1->y - (actor->_61C * v); + t = joint1->y - (actor->_618.z * v); joint1->y = MY_CLAMP(t, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); - t = joint1->x - (actor->_61C >> 1); + t = joint1->x - (actor->_618.z >> 1); joint1->x = MY_CLAMP(t, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25)); } return 1; @@ -567,7 +569,7 @@ void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0.0f, 0.25f * actor->init_data._04, 1.5f * actor->init_data._24, 1); Matrix_RotateX(actor->_60C.x, 1); - Matrix_RotateZ(MY_CLAMP(-(actor->_61C >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); + Matrix_RotateZ(MY_CLAMP(-(actor->_618.z >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); Matrix_translate(0.0f, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); @@ -769,8 +771,8 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f32 f25; f32 f26; xyz_t p = suisou_pos[actor->_630]; - f32 v = (sin_s(actor->_60C.y) * 0.7f) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f) + 0.3f; - f32 v2 = (cos_s(actor->_60C.y) * 0.7f) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f) + 0.3f; + f32 v = (sin_s(actor->_60C.y) * 0.7f) * (ABS(cos_s(actor->_618.z)) * 0.5f + 0.5f) + 0.3f; + f32 v2 = (cos_s(actor->_60C.y) * 0.7f) * (ABS(cos_s(actor->_618.z)) * 0.5f + 0.5f) + 0.3f; actor->_62E &= ~0x1e; actor->_62C = 0; Museum_Fish_objchk_pos_set(actor, gamex); @@ -858,7 +860,7 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.x = atans_table(1.0f, -f26); if (f27 > 0.0f) { actor->_5A0.y += f27; - actor->_5D4 *= 0.95f; + actor->_5D0.y *= 0.95f; } } @@ -875,19 +877,19 @@ void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { if ((actor->_624 == 0 || actor->_624 == 0xb || actor->_624 == 0x1 || actor->_624 == 0x2) && actor->init_data._28 < 0) { - f26 = - GETREG(TAKREG, 0x52) * 0.01f + 0.3f + - (0.7f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(sin_s(actor->_60C.y)) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f); - f25 = - GETREG(TAKREG, 0x52) * 0.01f + 0.3f + - (0.7f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(cos_s(actor->_60C.y)) * (ABS(cos_s(actor->_61C)) * 0.5f + 0.5f); + f26 = GETREG(TAKREG, 0x52) * 0.01f + 0.3f + + (0.7f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(sin_s(actor->_60C.y)) * + (ABS(cos_s(actor->_618.z)) * 0.5f + 0.5f); + f25 = GETREG(TAKREG, 0x52) * 0.01f + 0.3f + + (0.7f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(cos_s(actor->_60C.y)) * + (ABS(cos_s(actor->_618.z)) * 0.5f + 0.5f); } else if (actor->_624 == 10 || actor->_624 == 7 || actor->_624 == 9) { - f26 = - GETREG(TAKREG, 0x52) * 0.01f + 0.6f + - (0.4f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(sin_s(actor->_60C.y)) * (ABS(cos_s(actor->_61C)) * 0.4f + 0.6f); - f25 = - GETREG(TAKREG, 0x52) * 0.01f + 0.6f + - (0.4f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(cos_s(actor->_60C.y)) * (ABS(cos_s(actor->_61C)) * 0.4f + 0.6f); + f26 = GETREG(TAKREG, 0x52) * 0.01f + 0.6f + + (0.4f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(sin_s(actor->_60C.y)) * + (ABS(cos_s(actor->_618.z)) * 0.4f + 0.6f); + f25 = GETREG(TAKREG, 0x52) * 0.01f + 0.6f + + (0.4f - GETREG(TAKREG, 0x52) * 0.01f) * ABS(cos_s(actor->_60C.y)) * + (ABS(cos_s(actor->_618.z)) * 0.4f + 0.6f); } else { f26 = 1.0f; f25 = 1.0f; @@ -1341,8 +1343,8 @@ void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) p2.z *= ABS(sin_s(actor->_60C.y) * cos_s(actor->_60C.x)); if (actor->_624 != 3) { - p2.x *= cos_s(actor->_61C); - p2.z *= cos_s(actor->_61C); + p2.x *= cos_s(actor->_618.z); + p2.z *= cos_s(actor->_618.z); } if (actor->_630 == 4) { diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc index 582b8a6b..dd379e18 100644 --- a/src/actor/ac_museum_fish_bass.c_inc +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -14,19 +14,19 @@ void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { f32 t; xyz_t pos; add_calc2(&actor->_5E8, actor->_5AC.x, 1 - actor->init_data._18, 0.01f + 0.001f * GETREG(TAKREG, 20)); - actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.y); - actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.y); + actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); - add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); - t = add_calc(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4, 0); + add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); + t = add_calc(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y, 0); if (fabsf(t) < 0.08f) { add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.03f), DEG2SHORT_ANGLE(1.0f + (0.5f * actor->_5AC.y)) >> 1, 9); } mfish_move_smooth(actor, game); mfish_get_flow_vec(&pos, actor, game); - actor->_5A0.x += actor->_5D0 + actor->_5DC.x; - actor->_5A0.z += actor->_5D8 + actor->_5DC.z; + actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; + actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; actor->_5A0.y = actor->_5A0.y + actor->_5DC.y; actor->_5A0.y = MAX(60, MIN(110, actor->_5A0.y)); } @@ -55,7 +55,7 @@ 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.0f), 0x1c7, 0x2d); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), 0xe3, 0x2d); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.25f), 0xe3, 0x2d); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), 0xe3, 0x2d); } void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { @@ -84,7 +84,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { fishActor->_612.x = DEG2SHORT_ANGLE2(temp * -(2 * fishActor->_5AC.y + 10)); fishActor->_612.x = CLAMP(fishActor->_612.x, DEG2SHORT_ANGLE(-50), DEG2SHORT_ANGLE(50)); - fishActor->_5D4 = 0; + fishActor->_5D0.y = 0; if (RANDOM_F(1) > fishActor->init_data._1C) { int diff; @@ -148,7 +148,7 @@ void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), CALC_EASE2(actor->_5AC.y * 0.25f + 0.25f), (s16)(DEG2SHORT_ANGLE(actor->_5AC.y * 15.0f + 10.0f) >> 1) >> 1, 22); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(actor->_5AC.y * 0.25f + 0.25f), + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(actor->_5AC.y * 0.25f + 0.25f), (s16)(DEG2SHORT_ANGLE(actor->_5AC.y * 8.0f + 7.0f) >> 1) >> 1, 22); if (actor->_5E8 < 0.01f) { @@ -168,7 +168,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 b; b = a = 0x2000 + DEG2SHORT_ANGLE(RANDOM_F(75)); - actor->_61A = + actor->_618.y = DEG2SHORT_ANGLE((actor->_5AC.y * 4.0f + 4.0f) * (SHORT2DEG_ANGLE2(a) / 120.0f) + 2.0f + actor->_5AC.y); if (actor->_62E & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { @@ -236,9 +236,9 @@ void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), 45); actor->_622 = add_calc_short_angle2(&actor->_60C.y, ((s16)(sin_s(actor->_636) * actor->_632) + actor->_612.y), - CALC_EASE(0.2f), actor->_61A >> 1, 45); + CALC_EASE(0.2f), actor->_618.y >> 1, 45); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(2.5f), 22); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(2.5f), 22); if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2.0f) && actor->_5E8 < 0.1f) { if (actor->_63E > 0) { @@ -309,7 +309,7 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_638 += DEG2SHORT_ANGLE(10); actor->_34(actor, gamex); - if (ABS(actor->_61C) > ABS(actor->_622)) { + if (ABS(actor->_618.z) > ABS(actor->_622)) { add_calc2(&actor->_5E8, MIN(GETREG(TAKREG, 19) * 0.01f + 1.0f, actor->_5E8), GETREG(TAKREG, 18) * 0.01f + 0.2f, GETREG(TAKREG, 17) * 0.01f + 0.5f); } @@ -358,7 +358,7 @@ void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1); Matrix_RotateX(actor->_60C.x, 1); - Matrix_RotateZ(MY_CLAMP(-(actor->_61C >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); + Matrix_RotateZ(MY_CLAMP(-(actor->_618.z >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); Matrix_translate(0, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); diff --git a/src/actor/ac_museum_fish_kaseki.c_inc b/src/actor/ac_museum_fish_kaseki.c_inc index 06d9a860..d611a08a 100644 --- a/src/actor/ac_museum_fish_kaseki.c_inc +++ b/src/actor/ac_museum_fish_kaseki.c_inc @@ -9,7 +9,7 @@ void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_60C.y = DEG2SHORT_ANGLE(-90); } actor->_612.y = actor->_60C.y; - actor->_5D4 = 0; + actor->_5D0.y = 0.0f; actor->_5AC = ZeroVec; actor->_638 = qrand(); actor->_622 = 0; @@ -35,7 +35,7 @@ void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), CALC_EASE2(GETREG(TAKREG, 0x1e) * 0.01f + 0.15f), (s16)(s >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(GETREG(TAKREG, 0x1f) * 0.01f + 0.1f), + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(GETREG(TAKREG, 0x1f) * 0.01f + 0.1f), (s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 0x20) * 0.1f + 4.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); if (actor->_5FC < 10.0f - actor->init_data._28 * 0.5f) { if (actor->_612.y < 0) { @@ -83,7 +83,7 @@ void mfish_kaseki_move_wall_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) s16 s; s16 a, b; s16 diff; - if (MIN(actor->_5FC, actor->_600) < 40.0f && ABS(actor->_61C) > DEG2SHORT_ANGLE(5)) { + if (MIN(actor->_5FC, actor->_600) < 40.0f && ABS(actor->_618.z) > DEG2SHORT_ANGLE(5)) { return; } @@ -115,7 +115,8 @@ void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } if (MIN(actor->_5FC, actor->_600) < 20.0f) { - if (ABS(actor->_61C) > ABS(actor->_622) && ABS(actor->_61C) < DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x36) + 20.0f)) { + if (ABS(actor->_618.z) > ABS(actor->_622) && + ABS(actor->_618.z) < DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x36) + 20.0f)) { add_calc2(&actor->_5E8, GETREG(TAKREG, 0x30) * 0.01f + 0.8f, GETREG(TAKREG, 0x31) * 0.01f + 0.25f, GETREG(TAKREG, 0x32) * 0.01f + 0.1f); } else { @@ -129,11 +130,11 @@ void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { add_calc2(&actor->_5E8, actor->_5F0, 0.3f, 0.02f); } } - v = actor->_5E8 * (1.0f - ((sin_s(actor->_63A) * 0.2f + 0.2f) * MAX(cos_s(actor->_61C), 0.5f))); - actor->_5D0 = v * sin_s(actor->_60C.y); - actor->_5D8 = v * cos_s(actor->_60C.y); - actor->_5A0.x += actor->_5D0; - actor->_5A0.z += actor->_5D8; + v = actor->_5E8 * (1.0f - ((sin_s(actor->_63A) * 0.2f + 0.2f) * MAX(cos_s(actor->_618.z), 0.5f))); + actor->_5D0.x = v * sin_s(actor->_60C.y); + actor->_5D0.z = v * cos_s(actor->_60C.y); + actor->_5A0.x += actor->_5D0.x; + actor->_5A0.z += actor->_5D0.z; mfish_onefish_mv(actor, game); actor->_38._00.frame_control.speed = actor->_5E8 * 0.75f + 0.25f; mfish_body_wind_anime_play(actor, game); @@ -149,19 +150,19 @@ BOOL mfish_kaseki_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int jo MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; int i; if (joint_num == 1) { - i = joint1->x + (int)(actor->_61C * (GETREG(TAKREG, 0x47) * 0.01f + 0.5f)); + i = joint1->x + (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.01f + 0.5f)); joint1->x = MIN(MAX(i, DEG2SHORT_ANGLE(-10)), DEG2SHORT_ANGLE(10)); Matrix_scale(1.0f, (GETREG(TAKREG, 0x36) * 0.001f + 0.02f) * sin_s(actor->_63A + actor->_63C) + 1.0f, (GETREG(TAKREG, 0x36) * 0.001f + 0.02f) * sin_s(actor->_63A) + 1.0f, 1); } else if (joint_num == 2) { - i = joint1->y - (int)(actor->_61C * (GETREG(TAKREG, 0x46) * 0.01f + 1.25f)); + 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->_61C * (GETREG(TAKREG, 0x48) * 0.01f + 0.25f)); + i = joint1->x - (int)(actor->_618.z * (GETREG(TAKREG, 0x48) * 0.01f + 0.25f)); joint1->x = MIN(MAX(i, DEG2SHORT_ANGLE(-10)), DEG2SHORT_ANGLE(10)); Matrix_scale(1.0f, (GETREG(TAKREG, 0x37) * 0.001f + 0.045f) * sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) + 1.0f, (GETREG(TAKREG, 0x37) * 0.001f + 0.045f) * sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) + 1.0f, 1); } else if (joint_num == 3) { - i = joint1->y - (int)(actor->_61C * (GETREG(TAKREG, 0x47) * 0.01f + 1.25f)); + 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)); diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index bd99a55a..9b43ca2a 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -108,7 +108,8 @@ void mfish_koi_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { DEG2SHORT_ANGLE(0.25f)); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.125f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), + DEG2SHORT_ANGLE(0.125f)); add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f); add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC); add_calc0(&actor->_5F0, 0.02f, 0.01f); @@ -126,7 +127,7 @@ void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_612.x = DEG2SHORT_ANGLE(-10 * (actor->_5F4 + actor->init_data._0C - actor->_5A0.y)); actor->_612.x = CLAMP(actor->_612.x, DEG2SHORT_ANGLE(-50), DEG2SHORT_ANGLE(50)); - actor->_5D4 = 0.0f; + actor->_5D0.y = 0.0f; if (RANDOM_F(1.0f) > actor->init_data._1C) { actor->_612.y += (s16)Rnd_EX_fx(actor->init_data._30 * 2.0f); @@ -172,7 +173,8 @@ void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(2.0f), DEG2SHORT_ANGLE(0.125f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(2.0f), + DEG2SHORT_ANGLE(0.125f)); if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { if (fqrand() < 0.01f) { @@ -192,7 +194,7 @@ void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { void mfish_koi_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(55.0f)) + DEG2SHORT_ANGLE(60.0f); - actor->_61A = ABS(DEG2SHORT_ANGLE2(((s3 * (360.0f / 0x10000)) / 120.0f) * 2.5f + 2.0f)); + actor->_618.y = ABS(DEG2SHORT_ANGLE2(((s3 * (360.0f / 0x10000)) / 120.0f) * 2.5f + 2.0f)); if (actor->_62E & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { s3 = -s3; @@ -236,10 +238,11 @@ void mfish_koi_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { add_calc2(&actor->_5F0, MAX(actor->init_data._10, 0.0f), 0.15f, 0.2f); add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), - CALC_EASE(0.2f), actor->_61A >> 1, DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); + CALC_EASE(0.2f), actor->_618.y >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); if (ABS(actor->_622) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) { - if (actor->_63E > 0 && ABS(actor->_61C) < DEG2SHORT_ANGLE(2)) { + if (actor->_63E > 0 && ABS(actor->_618.z) < DEG2SHORT_ANGLE(2)) { if (mfish_WallCheck(actor)) { mfish_koi_tail_anim_set(actor, 1); mfish_aroana_turn_process_init(actor); @@ -265,7 +268,7 @@ void mfish_koi_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { s16 atany; f32 dist; - actor->_5D4 = 0.0f; + actor->_5D0.y = 0.0f; mfish_get_player_angle(actor, game, &atanx, &atany, &dist); fVar9 = (actor->init_data)._10 + RANDOM_F(actor->init_data._14); @@ -330,7 +333,7 @@ void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_636 += DEG2SHORT_ANGLE(3.f); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632), CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.f), DEG2SHORT_ANGLE(0.125f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.f), DEG2SHORT_ANGLE(0.125f)); if (mfish_peck_wall_check(actor, gamex)) { if (fqrand() < 0.9f) { @@ -357,7 +360,8 @@ void mfish_koi_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { GAME_PLAY* play = (GAME_PLAY*)game; actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(2.f), DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f); add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC); } @@ -372,14 +376,14 @@ void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } add_calc0(&actor->_5EC, 0.5f, 0.01f); - actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.y) * cos_s(actor->_60C.x); - actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.y) * cos_s(actor->_60C.x); - add_calc(&actor->_5D4, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D4); + actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y) * cos_s(actor->_60C.x); + actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y) * cos_s(actor->_60C.x); + add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); mfish_move_smooth(actor, game); mfish_get_flow_vec(&p, actor, game); - actor->_5A0.x += actor->_5D0 + actor->_5DC.x; - actor->_5A0.z += actor->_5D8 + actor->_5DC.z; + actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; + actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; actor->_5A0.y += actor->_5DC.y * 0.05f; actor->_5A0.y = MAX(110.f, MIN(60.f, actor->_5A0.y)); } @@ -419,7 +423,7 @@ void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { // actor->_5AC.y = 0.0f; actor->_638 += DEG2SHORT_ANGLE(10); actor->_34(actor, gamex); - if (ABS(actor->_61C) < ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { + if (ABS(actor->_618.z) < ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { add_calc2(&actor->_5E8, MAX(0.2f, actor->_5E8), 0.2f, 0.5f); } add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.1f), DEG2SHORT_ANGLE(1.5f), @@ -477,10 +481,10 @@ BOOL mfish_koi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint } else if (joint_num == 2) { int i; - i = joint1->y - (int)(actor->_61C * (GETREG(TAKREG, 0x47) * 0.1f + 2.0f)); + i = joint1->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.1f + 2.0f)); joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80)); - i = joint1->x - (actor->_61C >> 3); + i = joint1->x - (actor->_618.z >> 3); joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25)); } @@ -500,7 +504,7 @@ void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0.0f, actor->init_data._04 * 0.25f, actor->init_data._24 * 1.5f, 1); Matrix_RotateY(actor->_60C.x, 1); - Matrix_RotateZ(MY_CLAMP(-(actor->_61C >> 2), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); + Matrix_RotateZ(MY_CLAMP(-(actor->_618.z >> 2), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); Matrix_translate(0.0f, -actor->init_data._04 * 0.25f, -actor->init_data._24 * 0.5f, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/actor/ac_museum_fish_kurage.c_inc b/src/actor/ac_museum_fish_kurage.c_inc index 4db0864f..294bbb0a 100644 --- a/src/actor/ac_museum_fish_kurage.c_inc +++ b/src/actor/ac_museum_fish_kurage.c_inc @@ -1,33 +1,217 @@ void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + s16 s = qrand(); + actor->_5E8 = actor->init_data._10 + RANDOM_F(actor->init_data._14); + actor->_5F0 = actor->_5E8; + actor->_60C.y = s; + actor->_612.y = actor->_60C.y; + actor->_60C.x = DEG2SHORT_ANGLE2(RANDOM2_F(100.0f)); + actor->_612.x = actor->_60C.x; + actor->_5F4 = 0.05f; + actor->_5D0 = ZeroVec; + actor->_5AC = ZeroVec; + actor->_5AC.y = actor->_5E8; + actor->_638 = qrand(); + actor->_618 = ZeroSVec; + actor->_622 = 0; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_594 = NULL; + actor->_598 = NULL; + actor->_624 = 3; + mfish_kurage_normal_init(actor, gamex); } -void mfish_kurage_normal_init() { - return; +void mfish_kurage_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); + actor->_34 = mfish_kurage_normal; } -void mfish_kurage_normal() { - return; +void mfish_kurage_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if (actor->_62E & 0x1e) { + mfish_kurage_turn_init(actor, gamex); + } else if (actor->_626 < 0) { + actor->_612.y = qrand(); + actor->_612.x = qrand(); + + if (actor->_612.x > 0) { + actor->_612.x = MIN(DEG2SHORT_ANGLE(120), actor->_612.x); + } else { + actor->_612.x = MAX(DEG2SHORT_ANGLE(-120), actor->_612.x); + } + + if (actor->_60C.x > DEG2SHORT_ANGLE(90) && actor->_612.x < (s16)(actor->_60C.x + DEG2SHORT_ANGLE(180))) { + //! BUG: should this be 179 degrees? + actor->_612.x = actor->_60C.x + (DEG2SHORT_ANGLE(180) - 1); + } else if (actor->_60C.x < DEG2SHORT_ANGLE(-90) && + actor->_612.x > (s16)(actor->_60C.x + DEG2SHORT_ANGLE(180))) { + actor->_612.x = actor->_60C.x - (DEG2SHORT_ANGLE(180) - 1); + } + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); + } else if (actor->_5F8 > actor->init_data._08 * 10.0f) { + f32 v = RANDOM_F(0.5f) + 0.5f; + actor->_5F8 = 0.0f; + if (RANDOM_F(1.0f) < 0.5) { + actor->_612.y += DEG2SHORT_ANGLE(v * 90.f); + } else { + actor->_612.y -= DEG2SHORT_ANGLE(v * 90.f); + } + + if (actor->_612.x > 0) { + actor->_612.x = DEG2SHORT_ANGLE(90.0f + RANDOM2_F(60.0f)); + } else { + actor->_612.x = DEG2SHORT_ANGLE(-90.0f + RANDOM2_F(60.0f)); + } + + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_626 >>= 1; + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); + } } -void mfish_kurage_turn_init() { - return; +void mfish_kurage_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + //! BUG: cast needed to match? maybe i've been making assumptions about what these functions have taken as args + MUSEUM_FISH_PRIVATE_DATA* actor2 = (MUSEUM_FISH_PRIVATE_DATA*)actor; + if (actor->_60C.x * (s16)(actor2->_60C.y - actor2->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(135); + } else { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(-135); + } + actor->_5F0 = actor->init_data._14 + actor->init_data._10; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_34 = mfish_kurage_turn; } -void mfish_kurage_turn() { - return; +void mfish_kurage_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if ((s16)(actor->_612.x - actor->_60C.x) == 0 && (s16)(actor->_612.y - actor->_60C.y) == 0) { + mfish_kurage_normal_init(actor, gamex); + } else if (actor->_626 < 0) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._14 + actor->init_data._10; + } } void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 v; + xyz_t p; + f32 t; - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + actor->_34(actor, gamex); + actor->_5F4 = GETREG(TAKREG, 0x55) * 0.001f + 0.035f; + actor->_632 += actor->_63A; + actor->_63C += actor->_618.y; + if (actor->_62E & 0x20) { + add_calc_short_angle2(&actor->_618.y, DEG2SHORT_ANGLE(8), CALC_EASE(0.5f), DEG2SHORT_ANGLE(0.5f), + DEG2SHORT_ANGLE(0.05f)); + } else { + add_calc_short_angle2(&actor->_618.y, DEG2SHORT_ANGLE(2), CALC_EASE(0.5f), DEG2SHORT_ANGLE(0.5f), + DEG2SHORT_ANGLE(0.05f)); + } + actor->_622 = DEG2SHORT_ANGLE(actor->_5E8 * 12.0f + 0.2f + GETREG(TAKREG, 0x1a) * 0.1f); + if (actor->_626 > actor->_628 - 20) { + add_calc2(&actor->_5EC, 0.1f, 0.5f, 0.02f); + } + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC); + add_calc2(&actor->_5AC.y, actor->_5F0, 0.1f, 0.25f); + add_calc2(&actor->_5F0, 0.1f, 0.1f, 0.01f); + add_calc_short_angle2(&actor->_63A, (s16)DEG2SHORT_ANGLE2((GETREG(TAKREG, 0x56) + 13.0f) * 0.5f), CALC_EASE2(0.1f), + DEG2SHORT_ANGLE(0.25f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_60C.x, (s16)actor->_612.x, CALC_EASE2(GETREG(TAKREG, 0x18) * 0.01f + 0.1f), + (s16)(actor->_622 >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_60C.y, (s16)actor->_612.y, CALC_EASE2(GETREG(TAKREG, 0x18) * 0.01f + 0.1f), + (s16)(actor->_622 >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); + v = actor->_5E8 * sin_s(actor->_60C.x) * (sin_s(actor->_63A) * 0.1f + 0.9f); + actor->_5D0.x = sin_s(actor->_60C.y) * v; + actor->_5D0.z = cos_s(actor->_60C.y) * v; + actor->_5D0.y = actor->_5E8 * cos_s(actor->_60C.x) * (sin_s(actor->_63A) * 0.1f + 0.9f); + mfish_get_flow_vec(&p, actor, gamex); + + if (actor->_5FC < 120.f) { + add_calc2(&actor->_5DC.x, (120.f - actor->_5FC) * (GETREG(TAKREG, 0x3c) * 0.0001f + 0.01f), + GETREG(TAKREG, 0x3d) * 0.01f + 0.25f, GETREG(TAKREG, 0x3e) * 0.01f + 0.2f); + + } else if (actor->_600 < 120.f) { + add_calc2(&actor->_5DC.x, -(120.f - actor->_600) * (GETREG(TAKREG, 0x3c) * 0.0001f + 0.01f), + GETREG(TAKREG, 0x3d) * 0.01f + 0.25f, GETREG(TAKREG, 0x3e) * 0.01f + 0.2f); + } + + if (actor->_604 < 20.f) { + add_calc2(&actor->_5DC.z, (20.f - actor->_604) * (GETREG(TAKREG, 0x3c) * 0.0001f + 0.01f), + GETREG(TAKREG, 0x3d) * 0.01f + 0.25f, GETREG(TAKREG, 0x3e) * 0.01f + 0.2f); + + } else if (actor->_608 < 20.f) { + add_calc2(&actor->_5DC.z, -(20.f - actor->_608) * (GETREG(TAKREG, 0x3c) * 0.0001f + 0.01f), + GETREG(TAKREG, 0x3d) * 0.01f + 0.25f, GETREG(TAKREG, 0x3e) * 0.01f + 0.2f); + } + + if (actor->_5A0.y < (55.0f + actor->init_data._08) + 10.0f) { + t = (10.f - (actor->_5A0.y - (55.0f + actor->init_data._08))); + t *= (GETREG(TAKREG, 0x3C) * 0.0001f + 0.01f); + + add_calc2(&actor->_5DC.y, t, GETREG(TAKREG, 0x3D) * 0.01f + 0.25f, GETREG(TAKREG, 0x3E) * 0.01f + 0.2f); + } else if (actor->_5A0.y > (110.0f - actor->init_data._08) - 10.0f) { + t = -(10.f - ((110.0f - actor->init_data._08) - actor->_5A0.y)); + t *= (GETREG(TAKREG, 0x3C) * 0.0001f + 0.01f); + + add_calc2(&actor->_5DC.y, t, GETREG(TAKREG, 0x3D) * 0.01f + 0.25f, GETREG(TAKREG, 0x3E) * 0.01f + 0.2f); + } + + actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; + actor->_5A0.y += actor->_5D0.y + actor->_5DC.y; + actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; + + actor->_5B8 = actor->_5A0; + + Museum_Fish_BGCheck(actor, gamex); + if (actor->_5A0.y < 55.0f + actor->init_data._08) { + actor->_5A0.y = 55.0f + actor->init_data._08; + actor->_612.x = DEG2SHORT_ANGLE(-30); + } else if (actor->_5A0.y > 110.f - actor->init_data._08 - actor->_608 * 0.2f) { + actor->_5A0.y = 110.f - actor->init_data._08 - actor->_608 * 0.2f; + if (actor->_612.x > 0) { + actor->_612.x = DEG2SHORT_ANGLE(120); + } else { + actor->_612.x = DEG2SHORT_ANGLE(-120); + } + } + actor->_626--; } +extern Gfx act_mus_kurage_sakana_body_model[]; +extern Gfx act_mus_kurage_sakana_foot_model[]; + void mfish_kurage_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 a = (actor->_5E8 - 0.1f) * (-0.3f + GETREG(TAKREG, 0x1b) * 0.01f); + a += (actor->_5F4 * sin_s(actor->_632) + 1.0f); - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); + Matrix_scale(actor->init_data._00 * a, actor->init_data._00 * (1.0f / SQ(a)), actor->init_data._00 * a, 1); + Matrix_push(); + + Matrix_RotateY(actor->_63C, 1); + Matrix_scale((GETREG(TAKREG, 0x4b) * 0.01f + 0.1f) * sin_s(actor->_63C) + 1.0f, 1.0f, + (GETREG(TAKREG, 0x4b) * 0.01f + 0.1f) * cos_s(actor->_63C) + 1.0f, 1); + Matrix_RotateY(-actor->_63C, 1); + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(NEXT_POLY_XLU_DISP, act_mus_kurage_sakana_body_model); + + Matrix_pull(); + + Matrix_RotateY(actor->_63C, 1); + Matrix_scale((GETREG(TAKREG, 0x4b) * 0.01f + 0.1f) * sin_s(actor->_63C) + 1.0f, 1.0f, + (GETREG(TAKREG, 0x4b) * 0.01f + 0.1f) * cos_s(actor->_63C) + 1.0f, 1); + Matrix_RotateY(-actor->_63C, 1); + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(NEXT_POLY_XLU_DISP, act_mus_kurage_sakana_foot_model); + + CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_seafish.c_inc b/src/actor/ac_museum_fish_seafish.c_inc index 8dd55eae..8e81d40c 100644 --- a/src/actor/ac_museum_fish_seafish.c_inc +++ b/src/actor/ac_museum_fish_seafish.c_inc @@ -7,7 +7,7 @@ void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_60C.y = s; actor->_612.y = actor->_60C.y; actor->_5F4 = 0.0f; - actor->_5D4 = 0.0f; + actor->_5D0.y = 0.0f; actor->_5AC = ZeroVec; actor->_638 = qrand(); actor->_622 = 0; @@ -39,7 +39,7 @@ void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), (s16)(s >> 1) >> 1, (s16)DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); if (actor->_598 != NULL) { o_5a0_z = actor->_598->_5A0.z; o_5a0_y = actor->_598->_5A0.y; @@ -167,7 +167,8 @@ void mfish_seafish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { void mfish_seafish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.25f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.125f)); - add_calc_short_angle2(&actor->_61C, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); if (ABS(actor->_622) < DEG2SHORT_ANGLE(3)) { mfish_seafish_normal_init(actor, game); } @@ -176,8 +177,8 @@ void mfish_seafish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { xyz_t p; actor->_34(actor, gamex); - actor->_618 += DEG2SHORT_ANGLE(actor->_5E8 * RANDOM_F(3.0f)); - actor->_5F4 = sin_s(actor->_618) * 5.0f; + actor->_618.x += DEG2SHORT_ANGLE(actor->_5E8 * RANDOM_F(3.0f)); + actor->_5F4 = sin_s(actor->_618.x) * 5.0f; if (actor->_62E & 0x20) { add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.02f, 0.05f); } else { @@ -185,7 +186,7 @@ void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } add_calc0(&actor->_5F8, 0.2f, 0.05f); actor->_5F8 = MIN(1.0f, actor->_5F8); - if (ABS(actor->_61C) > DEG2SHORT_ANGLE(15) && ABS(actor->_622) - ABS(actor->_61C) < 0) { + if (ABS(actor->_618.z) > DEG2SHORT_ANGLE(15) && ABS(actor->_622) - ABS(actor->_618.z) < 0) { add_calc2(&actor->_5E8, MAX(actor->_5F0, 0.8f), 0.5f, 0.25f); } else if (actor->_626 < actor->_628 - 80) { add_calc2(&actor->_5E8, actor->_5EC, 1.0f - actor->init_data._18, 0.0025f); @@ -196,11 +197,11 @@ void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } actor->_38._00.frame_control.speed = (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * 0.5f + (GETREG(TAKREG, 0x15) * 0.01f + 1.2f) * actor->_5E8; - actor->_5D0 = actor->_5E8 * sin_s(actor->_60C.y); - actor->_5D8 = actor->_5E8 * cos_s(actor->_60C.y); + actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); mfish_get_flow_vec(&p, actor, gamex); - actor->_5A0.x += actor->_5D0 + p.x; - actor->_5A0.z += actor->_5D8 + p.z; + actor->_5A0.x += actor->_5D0.x + p.x; + actor->_5A0.z += actor->_5D0.z + p.z; mfish_onefish_mv(actor, gamex); mfish_body_wind_anime_play(actor, gamex); Museum_Fish_BGCheck(actor, gamex); @@ -214,12 +215,12 @@ BOOL mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int j void* arg, s_xyz* joint1, xyz_t* trans) { MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; if (joint_num == 1) { - int s = joint1->x + (int)(actor->_61C * (GETREG(TAKREG, 0x37) * 0.01f + 0.5f)); + int s = joint1->x + (int)(actor->_618.z * (GETREG(TAKREG, 0x37) * 0.01f + 0.5f)); joint1->x = MIN(MAX(s, DEG2SHORT_ANGLE(-15)), DEG2SHORT_ANGLE(15)); Matrix_scale(1.0f, (GETREG(TAKREG, 0x36) * 0.001f + 0.035f) * sin_s(actor->_63A + actor->_63C) + 1.0f, (GETREG(TAKREG, 0x36) * 0.001f + 0.035f) * sin_s(actor->_63A) + 1.0f, 1); } else if (joint_num == 2) { - int v = joint1->y - (actor->_61C << 1); + int v = joint1->y - (actor->_618.z << 1); joint1->y = MIN(MAX(v, DEG2SHORT_ANGLE(-80)), DEG2SHORT_ANGLE(80)); Matrix_scale(1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) * 0.07f + 1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) * 0.07f + 1.0f, 1); From 9cbb27120b333754e3a7edb80df6202dc4fc2395 Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 26 Dec 2024 10:00:17 -0500 Subject: [PATCH 15/33] Match Zarigani --- include/ac_museum_fish.h | 5 +- src/actor/ac_museum_fish_zarigani.c_inc | 223 +++++++++++++++++++++--- 2 files changed, 199 insertions(+), 29 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index c591a4a2..27cb5dc3 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -127,7 +127,8 @@ typedef struct _FISH_PRIVATE_DATA { s16 _63E; s16 _640; s16 _642; -} MUSEUM_FISH_PRIVATE_DATA; // size 644 + s16 _644; +} MUSEUM_FISH_PRIVATE_DATA; // size 648 // Holds data for the underwater grass typedef YET_SKELETON MUSEUM_FISH_KUSA_DATA; @@ -431,7 +432,7 @@ void mfish_zarigani_stand_process(); void mfish_zarigani_jump_process_init(); void mfish_zarigani_jump_process(); void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_zarigani_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); diff --git a/src/actor/ac_museum_fish_zarigani.c_inc b/src/actor/ac_museum_fish_zarigani.c_inc index 5c6ba6fd..e468b399 100644 --- a/src/actor/ac_museum_fish_zarigani.c_inc +++ b/src/actor/ac_museum_fish_zarigani.c_inc @@ -1,54 +1,223 @@ void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + cKF_SkeletonInfo_R_ct(&skele->_00, skele->_54C, skele->_550[0], &skele->_4F0, &skele->_514); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&skele->_00, skele->_550[0], NULL, 0.5f, 0.0f); + actor->_5A0 = suisou_pos[actor->_630]; + actor->_5A0.y = 53.0f; + actor->_60C.y = qrand(); + actor->_612.y = actor->_60C.y; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_5E8 = 0.0f; + actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); + actor->_5AC = ZeroVec; + actor->_624 = 5; + mfish_zarigani_normal_process_init(actor, gamex); } -void mfish_zarigani_normal_process_init() { - return; +void mfish_zarigani_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_34 = mfish_zarigani_normal_process; } -void mfish_zarigani_normal_process() { - return; +void mfish_zarigani_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_626--; + cKF_SkeletonInfo_R_play(&actor->_38._00); + if (actor->_5F0 > 0.0f) { + add_calc_short_angle2(&actor->_644, (s16)DEG2SHORT_ANGLE2(actor->_5F0 * 30.0f + 1.0f), CALC_EASE(0.25f), + DEG2SHORT_ANGLE(0.125f), DEG2SHORT_ANGLE(0.5f)); + } else { + add_calc_short_angle2(&actor->_644, (s16)DEG2SHORT_ANGLE2(-3.0f + GETREG(TAKREG, 0x19)), CALC_EASE(0.25f), + DEG2SHORT_ANGLE(0.125f), DEG2SHORT_ANGLE(0.5f)); + } + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + DEG2SHORT_ANGLE(sin_s(actor->_638) * 3.0f), + CALC_EASE(0.1f), DEG2SHORT_ANGLE(1.0f), DEG2SHORT_ANGLE(0.5f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE(0.25f), DEG2SHORT_ANGLE(1.0f), DEG2SHORT_ANGLE(0.5f)); + + add_calc_short_angle2(&actor->_60C.x, (s16)DEG2SHORT_ANGLE2(sin_s(actor->_638) * 2.5f + 2.5f), CALC_EASE(0.25f), + DEG2SHORT_ANGLE(1.0f), DEG2SHORT_ANGLE(0.5f)); + + if (ABS((s16)(actor->_612.y - actor->_60C.y)) < DEG2SHORT_ANGLE(10) | actor->_638 > 0) { + //! BUG: someone forgot a `|` ^ + f32 v = actor->_5E8 * (ABS(sin_s(actor->_638)) * 0.5f + 0.5f); + actor->_5A0.x += v * sin_s(actor->_60C.y); + actor->_5A0.z += v * cos_s(actor->_60C.y); + } + + if (actor->_626 < 0) { + actor->_5F0 = 0.0f; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + mfish_zarigani_wait_process_init(actor, gamex); + } + + if (actor->_62E & 0x1e) { + if (ABS((s16)(actor->_60C.y - actor->_62C)) < DEG2SHORT_ANGLE(90)) { + if (ABS((s16)(actor->_612.y - actor->_62C)) < DEG2SHORT_ANGLE(35) && (actor->_62E & 0x10) == 0) { + mfish_zarigani_stand_process_init(actor, gamex); + } else if ((s16)(actor->_612.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C; + actor->_612.y += DEG2SHORT_ANGLE(95); + } else { + actor->_612.y = actor->_62C; + actor->_612.y -= DEG2SHORT_ANGLE(95); + } + } else { + actor->_5F0 = actor->init_data._10 + MAX(-actor->init_data._10, RANDOM_F(actor->init_data._14)); + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(180); + } + } } -void mfish_zarigani_wait_process_init() { - return; +void mfish_zarigani_wait_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_34 = mfish_zarigani_wait_process; } -void mfish_zarigani_wait_process() { - return; +void mfish_zarigani_wait_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_626--; + add_calc_short_angle2(&actor->_644, 0, CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.125f), DEG2SHORT_ANGLE(0.5f)); + if (actor->_626 < 0) { + if (mfish_WallCheck(actor) && RANDOM_F(1) < 0.2f) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + mfish_zarigani_jump_process_init(actor, gamex); + } else { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); + actor->_612.y += (s16)RANDOM2_F(actor->init_data._30 * 2.0f); + mfish_zarigani_normal_process_init(actor, gamex); + } + } } -void mfish_zarigani_stand_process_init() { - return; +void mfish_zarigani_stand_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_34 = mfish_zarigani_stand_process; + if (actor->_62E & 0x1e) { + actor->_612.y = actor->_62C; + if ((s16)(actor->_60C.y - actor->_62C) != DEG2SHORT_ANGLE(0)) { + actor->_612.y += DEG2SHORT_ANGLE(90); + } else { + actor->_612.y += DEG2SHORT_ANGLE(-90); + } + } + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); } -void mfish_zarigani_stand_process() { - return; +void mfish_zarigani_stand_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 v; + + cKF_SkeletonInfo_R_play(&actor->_38._00); + if (actor->_626 > 0) { + actor->_626--; + if (add_calc_short_angle2(&actor->_60C.x, (s16)DEG2SHORT_ANGLE2(-45.0f + GETREG(TAKREG, 0x1a)), CALC_EASE(0.1), + DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.05f)) == 0) { + add_calc_short_angle2(&actor->_644, DEG2SHORT_ANGLE(0.5f), CALC_EASE(0.01f), DEG2SHORT_ANGLE(0.05f), + DEG2SHORT_ANGLE(0)); + } + } else { + add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE(0.25f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.05f)); + if (add_calc_short_angle2(&actor->_60C.x, DEG2SHORT_ANGLE(0), CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.75f), + DEG2SHORT_ANGLE(0.05f)) == 0) { + actor->_5AC = ZeroVec; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + mfish_zarigani_wait_process_init(actor, gamex); + } + } + + v = (-(actor->_60C.x * (360.0f / 0x10000)) / 90.0f); + v *= (20.0f + GETREG(TAKREG, 0x1b) * 0.1f); + actor->_5AC.x = sin_s(actor->_60C.y) * v; + actor->_5AC.z = cos_s(actor->_60C.y) * v; } -void mfish_zarigani_jump_process_init() { - return; +void mfish_zarigani_jump_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_5F0 = -1.2f + GETREG(TAKREG, 0x1e) * 0.01f; + actor->_5E8 = 0.0f; + actor->_5D0.y = 0.25f + GETREG(TAKREG, 0x1d) * 0.01f; + actor->_644 = 0; + actor->_34 = mfish_zarigani_jump_process; } -void mfish_zarigani_jump_process() { - return; +void mfish_zarigani_jump_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_5D0.y -= 0.015f + GETREG(TAKREG, 0x1f) * 0.001f; + actor->_5D0.y *= 0.99f; + actor->_5F0 *= 0.95f; + add_calc2(&actor->_5E8, actor->_5F0, 0.25f, 0.05f); + actor->_5A0.x += actor->_5E8 * sin_s(actor->_60C.y); + actor->_5A0.y += actor->_5D0.y * MAX(sin_s(actor->_60C.x), 0.1f); + actor->_5A0.z += actor->_5E8 * cos_s(actor->_60C.y); + if (actor->_5D0.y > 0.0f) { + add_calc_short_angle2(&actor->_60C.x, (s16)DEG2SHORT_ANGLE2(30.f + GETREG(TAKREG, 0x21)), CALC_EASE(0.5), + DEG2SHORT_ANGLE(7.5f), DEG2SHORT_ANGLE(0)); + } else if ((add_calc_short_angle2(&actor->_60C.x, 0, CALC_EASE(0.1), DEG2SHORT_ANGLE(1.5f), + DEG2SHORT_ANGLE(0.25f)) == 0) && + (actor->_62E & 0x200)) { + actor->_5AC.y = 0.0f; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + mfish_zarigani_wait_process_init(actor, gamex); + return; + } + actor->_5AC.y = (actor->_60C.x * (360.f / 0x10000)) / 90.f; + actor->_5AC.y *= 20.f + GETREG(TAKREG, 0x1c) * 0.1f; } void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + f32 v; + xyz_t p = suisou_pos[actor->_630]; + add_calc(&actor->_5E8, actor->_5F0, 0.1f, 0.2f, 0.01f); + actor->_34(actor, gamex); + actor->_638 += actor->_644; + Museum_Fish_objchk_pos_set(actor, gamex); + Museum_Fish_BGCheck(actor, gamex); + xyz_t_sub(&p, &actor->_5A0, &p); + v = 58.0f + MAX(ABS(p.x), ABS(p.z)) * -0.15f; + actor->_62E &= ~0x200; + if (actor->_5A0.y < v || actor->_34 != mfish_zarigani_jump_process) { + actor->_62E |= 0x200; + actor->_5A0.y = v; + } } -void mfish_zarigani_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (joint_num == 2) { + joint1->x += (s16)(actor->_60C.x >> 3); + } else if (joint_num == 3) { + joint1->z += (s16)((joint1->z + DEG2SHORT_ANGLE2(-90.65f) + GETREG(TAKREG, 0x2a)) * + (1.5f + GETREG(TAKREG, 0x29) * 0.1f)); + } else if (joint_num == 5) { + joint1->x += (s16)DEG2SHORT_ANGLE2(3.0f * sin_s(actor->_638)); + joint1->z -= (s16)DEG2SHORT_ANGLE2(5.0f * cos_s(actor->_638)); + joint1->z += (s16)(actor->_618.z * (0.4f + cos_s(actor->_638) * 0.4f)); + } else if (joint_num == 7) { + joint1->x += (s16)DEG2SHORT_ANGLE2(3.0f * sin_s(actor->_638)); + joint1->z -= (s16)DEG2SHORT_ANGLE2(5.0f * cos_s(actor->_638)); + joint1->z += (s16)(actor->_618.z * (0.4f + cos_s(actor->_638) * 0.4f)); + } else if (joint_num == 8) { + joint1->z >>= 2; + if (actor->_60C.x < 0) { + joint1->z += actor->_60C.x; + } else { + joint1->z += (s16)(actor->_60C.x * (GETREG(TAKREG, 0x20) * 0.1f + 3.0f)); + } + } + return TRUE; } void mfish_zarigani_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; -} \ No newline at end of file + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x + actor->_5AC.x, actor->_5A0.y + actor->_5AC.y, actor->_5A0.z + actor->_5AC.z, 0); + Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); + Matrix_rotateXYZ(DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(-180), DEG2SHORT_ANGLE(0), 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); +} From 0567b622378d55fdc05e1e55144756c679eb476d Mon Sep 17 00:00:00 2001 From: roeming Date: Fri, 27 Dec 2024 20:01:46 -0500 Subject: [PATCH 16/33] match fish_tai --- include/ac_museum_fish.h | 5 +- src/actor/ac_museum_fish.c | 2 +- src/actor/ac_museum_fish_afish.c_inc | 2 +- src/actor/ac_museum_fish_aroana.c_inc | 2 +- src/actor/ac_museum_fish_base.c_inc | 14 +- src/actor/ac_museum_fish_bass.c_inc | 13 +- src/actor/ac_museum_fish_kaseki.c_inc | 2 +- src/actor/ac_museum_fish_koi.c_inc | 6 +- src/actor/ac_museum_fish_namazu.c_inc | 321 +++++++++++++++++++++--- src/actor/ac_museum_fish_tai.c_inc | 274 ++++++++++++++++++-- src/actor/ac_museum_fish_zarigani.c_inc | 4 +- 11 files changed, 573 insertions(+), 72 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 27cb5dc3..53ff5e16 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -17,6 +17,7 @@ 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 @@ -316,7 +317,7 @@ void mfish_tai_normal(); void mfish_tai_turn_init(); void mfish_tai_turn(); void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_tai_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); @@ -418,7 +419,7 @@ void mfish_namazu_ground_sweep_process_init(); void mfish_namazu_ground_sweep_process(); void mfish_namazu_base_FishMove(); void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_namazu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index b4642eb2..f5c5f4b0 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -1444,7 +1444,7 @@ void mfish_point_light_mv(MUSEUM_FISH_ACTOR* actor, GAME* game) { actor->actor.world.position.x = sin_s(actor->_14dc0) * 200.0f; actor->actor.world.position.y = sin_s(actor->_14dc0 * 2) * 10.0f; actor->actor.world.position.z = cos_s(actor->_14dc0) * 200.0f; - actor->_14dc0 += 0x111; + actor->_14dc0 += DEG2SHORT_ANGLE(1.5f); } void mfish_normal_light_set(ACTOR* actor, GAME* _game) { diff --git a/src/actor/ac_museum_fish_afish.c_inc b/src/actor/ac_museum_fish_afish.c_inc index 1fb11029..5c9523eb 100644 --- a/src/actor/ac_museum_fish_afish.c_inc +++ b/src/actor/ac_museum_fish_afish.c_inc @@ -103,7 +103,7 @@ void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_afish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(75.0f)) + DEG2SHORT_ANGLE(45.0f); - actor->_618.y = ABS(DEG2SHORT_ANGLE2(((s3 * (360.0f / 0x10000)) / 120.0f) * 4.0f + 2.5f)); + actor->_618.y = ABS(DEG2SHORT_ANGLE2((SHORT2DEG_ANGLE2(s3) / 120.0f) * 4.0f + 2.5f)); if (actor->_62E & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { s3 = -s3; diff --git a/src/actor/ac_museum_fish_aroana.c_inc b/src/actor/ac_museum_fish_aroana.c_inc index aa873826..5de55ff3 100644 --- a/src/actor/ac_museum_fish_aroana.c_inc +++ b/src/actor/ac_museum_fish_aroana.c_inc @@ -100,7 +100,7 @@ void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { void mfish_aroana_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(55.0f)) + DEG2SHORT_ANGLE(45.0f); - actor->_618.y = ABS(DEG2SHORT_ANGLE2(((s3 * (360.0f / 0x10000)) / 120.0f) * 2.5f + 2.0f)); + actor->_618.y = ABS(DEG2SHORT_ANGLE2((SHORT2DEG_ANGLE2(s3) / 120.0f) * 2.5f + 2.0f)); if (actor->_62E & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { s3 = -s3; diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index 690af7ab..8e648fa7 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -124,9 +124,11 @@ 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.0f), DEG2SHORT_ANGLE(3.75f), 0x2d); - actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d); - add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), 0x2d); + add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.0f), DEG2SHORT_ANGLE(3.75f), + DEG2SHORT_ANGLE(0.25f)); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), DEG2SHORT_ANGLE(0.25f)); if (actor->_630 == 2) { if (actor->_612.y < 0) { @@ -334,9 +336,9 @@ void mfish_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_632 = DEG2SHORT_ANGLE((fVar8 * 30.0f) + 20.0f); if (qrand() & 0x8000) { - actor->_636 = 0x4000; + actor->_636 = DEG2SHORT_ANGLE(90); } else { - actor->_636 = -0x4000; + actor->_636 = DEG2SHORT_ANGLE(-90); } actor->_62E &= ~0xC0; @@ -1034,7 +1036,7 @@ void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { if (t > 4.0f) { xyz_t_mult_v(&actor->prvKusa[j]._540, 4.0f / t); } - actor->prvKusa[j]._538.y = 0x27d; + actor->prvKusa[j]._538.y = DEG2SHORT_ANGLE(3.5f); } } // asm 3fc-410 diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc index dd379e18..5dfbcd60 100644 --- a/src/actor/ac_museum_fish_bass.c_inc +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -42,7 +42,8 @@ void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_634 = actor->_62C - DEG2SHORT_ANGLE(90); } } else { - add_calc_short_angle2(&actor->_634, actor->_612.y, CALC_EASE(0.5f), DEG2SHORT_ANGLE(22.5), 0x5b); + add_calc_short_angle2(&actor->_634, actor->_612.y, CALC_EASE(0.5f), DEG2SHORT_ANGLE(22.5), + DEG2SHORT_ANGLE(0.5f)); } actor->_5EC = 0.0f; @@ -53,9 +54,11 @@ 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.0f), 0x1c7, 0x2d); - actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), 0xe3, 0x2d); - add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), 0xe3, 0x2d); + add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.0f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); } void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { @@ -167,7 +170,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 a; s16 b; - b = a = 0x2000 + DEG2SHORT_ANGLE(RANDOM_F(75)); + b = a = DEG2SHORT_ANGLE(90) + DEG2SHORT_ANGLE(RANDOM_F(75)); actor->_618.y = DEG2SHORT_ANGLE((actor->_5AC.y * 4.0f + 4.0f) * (SHORT2DEG_ANGLE2(a) / 120.0f) + 2.0f + actor->_5AC.y); if (actor->_62E & 0x1e) { diff --git a/src/actor/ac_museum_fish_kaseki.c_inc b/src/actor/ac_museum_fish_kaseki.c_inc index d611a08a..66f3b448 100644 --- a/src/actor/ac_museum_fish_kaseki.c_inc +++ b/src/actor/ac_museum_fish_kaseki.c_inc @@ -29,7 +29,7 @@ void mfish_kaseki_normal_init() { void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 s = ABS(actor->_622) * (actor->init_data._30 * (GETREG(TAKREG, 0x1d) * 0.001f + 0.5f) / 32749.0f); - s = MIN(actor->_634, MAX(s, 0x38E)); + s = MIN(actor->_634, MAX(s, DEG2SHORT_ANGLE(5))); add_calc_short_angle2(&actor->_632, 0, CALC_EASE(0.5), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f)); actor->_636 += 455; actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index 9b43ca2a..6eabc9c9 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -194,7 +194,7 @@ void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { void mfish_koi_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(55.0f)) + DEG2SHORT_ANGLE(60.0f); - actor->_618.y = ABS(DEG2SHORT_ANGLE2(((s3 * (360.0f / 0x10000)) / 120.0f) * 2.5f + 2.0f)); + actor->_618.y = ABS(DEG2SHORT_ANGLE2((SHORT2DEG_ANGLE2(s3) / 120.0f) * 2.5f + 2.0f)); if (actor->_62E & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { s3 = -s3; @@ -303,9 +303,9 @@ void mfish_koi_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_632 = DEG2SHORT_ANGLE((fVar8 * 30.0f) + 20.0f); if (qrand() & 0x8000) { - actor->_636 = 0x4000; + actor->_636 = DEG2SHORT_ANGLE(90); } else { - actor->_636 = -0x4000; + actor->_636 = DEG2SHORT_ANGLE(-90); } actor->_62E &= ~0xC0; diff --git a/src/actor/ac_museum_fish_namazu.c_inc b/src/actor/ac_museum_fish_namazu.c_inc index 2fe67e6a..cf72b2ee 100644 --- a/src/actor/ac_museum_fish_namazu.c_inc +++ b/src/actor/ac_museum_fish_namazu.c_inc @@ -1,61 +1,324 @@ void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + mfish_onefish_ct(actor, gamex); + actor->_5E8 = 0.0f; + actor->_5D0 = ZeroVec; + actor->_60C.y = qrand(); + actor->_612.y = actor->_60C.y; + actor->_5F4 = 0.0f; + actor->_5AC = ZeroVec; + if (actor->_59C == 4) { + actor->_5AC.y = 1500.f; + } else { + actor->_5AC.y = 1700.f; + } + actor->_638 = qrand(); + actor->_622 = actor->_60C.y; + actor->_5A0.z += 40.0f; + actor->_624 = 10; + // maybe s_xyz? but because we're not assigning a ZeroSVec, i'm thinking not? + actor->_640 = 0; + actor->_642 = 0; + actor->_644 = 0; + mfish_namazu_normal_process_init(actor); } -void mfish_namazu_body_wind_anime_play() { - return; +void mfish_namazu_body_wind_anime_play(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_63A += (s16)DEG2SHORT_ANGLE2(2.0f + RANDOM_F(1.0f)); + actor->_63C += (s16)DEG2SHORT_ANGLE2(1.0f + RANDOM_F(0.5f)); } -void mfish_namazu_normal_process_init() { - return; +void mfish_namazu_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + f32 s; + f32 p; + f32 f; + + p = RANDOM_F(actor->init_data._14) + actor->init_data._10; + s = MAX(actor->init_data._14 + actor->init_data._10, 1.0f); + f = p / s; + if (p > actor->_5E8) { + actor->_5F0 = p; + } + actor->_5F4 = 0.0f; + actor->_5D0.y = 0.0f; + if (RANDOM_F(1.0f) > actor->init_data._1C) { + actor->_612.y += (s16)Rnd_EX_fx(actor->init_data._30 * 2.0f); + if (ABS((s16)(actor->_612.y - actor->_60C.y)) < DEG2SHORT_ANGLE(20)) { + if ((s16)(actor->_612.y - actor->_60C.y) > 0) { + actor->_612.y += DEG2SHORT_ANGLE(20); + } else { + actor->_612.y -= DEG2SHORT_ANGLE(20); + } + } + actor->_632 = DEG2SHORT_ANGLE(30.0f + f * 40.0f); + } else { + if ((s16)(actor->_612.y - actor->_60C.y) > 0) { + actor->_612.y += DEG2SHORT_ANGLE(15); + } else { + actor->_612.y -= DEG2SHORT_ANGLE(15); + } + actor->_632 = DEG2SHORT_ANGLE(40.0f + f * 50.0f); + } + + if ((s16)(actor->_60C.y - actor->_612.y) > 0) { + actor->_636 = DEG2SHORT_ANGLE(0); + } else { + actor->_636 = DEG2SHORT_ANGLE(-180); + } + + actor->_62E &= ~0xC0; + actor->_34 = mfish_namazu_normal_process; } -void mfish_namazu_normal_process() { - return; +void mfish_namazu_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if (actor->_632 > DEG2SHORT_ANGLE(20)) { + add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.75f), + (0.4f + ((DEG2SHORT_ANGLE(-20) + actor->_632) / DEG2SHORT_ANGLE(2)) * 0.02f) * 0.5f); + } + add_calc_short_angle2(&actor->_632, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.25f), + DEG2SHORT_ANGLE(0.125f)); + actor->_636 += DEG2SHORT_ANGLE(1.25f); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(0.1f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.065f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.105f), DEG2SHORT_ANGLE(0.8125f), + DEG2SHORT_ANGLE(0.0625f)); + + if (actor->_5E8 < 0.01f) { + mfish_namazu_dummy_process_init(actor); + } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { + if ((s16)(actor->_60C.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); + } else { + actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f); + } + actor->_632 = 0; + } } -void mfish_namazu_dummy_process_init() { - return; +void mfish_namazu_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + actor->_634 = mfish_get_hide_camera_angle(actor); + add_calc_short_angle2(&actor->_634, actor->_612.y, CALC_EASE(0.5f), DEG2SHORT_ANGLE(10), DEG2SHORT_ANGLE(0.5f)); + actor->_34 = mfish_namazu_dummy_process; } -void mfish_namazu_dummy_process() { - return; +void mfish_namazu_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) { + if (actor->_5E8 < 0.5f) { + add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.125f)); + } + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.05f), DEG2SHORT_ANGLE(0.8125f), + DEG2SHORT_ANGLE(0.065f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.055f), DEG2SHORT_ANGLE(0.5f), + DEG2SHORT_ANGLE(0.0625f)); } -void mfish_namazu_turn_process_init() { - return; +void mfish_namazu_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + s16 angle = DEG2SHORT_ANGLE(RANDOM_F(60.0f)) + DEG2SHORT_ANGLE(30); + actor->_618.y = DEG2SHORT_ANGLE(0.5f + SHORT2DEG_ANGLE2(angle) / 90.f); + + if (actor->_62E & 0x1e) { + if ((s16)(actor->_60C.y - actor->_62C) < 0) { + angle = -angle; + } + } else if (actor->_62E & 0xc0) { + if (actor->_62E & 0x40) { + angle = ABS(angle); + } else { + angle = -ABS(angle); + } + } else if (actor->_62E & 0x20) { + if ((s16)(actor->_62A - actor->_60C.y) < 0) { + angle = -angle; + } + } + + if (angle > 0) { + actor->_62E |= 0x40; + } else { + actor->_62E |= 0x80; + } + + actor->_612.y += angle; + actor->_5F0 = 0.06f; + actor->_34 = mfish_namazu_turn_process; } -void mfish_namazu_turn_process() { - return; +void mfish_namazu_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor) { + add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.05f), 0.0625f); + add_calc2(&actor->_5F0, 0.05f, CALC_EASE(0.1f), 0.0025f); + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.29f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.125f)); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE(0.035f), (s16)(actor->_618.y >> 1), + DEG2SHORT_ANGLE(0.05f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE(0.025f), DEG2SHORT_ANGLE(0.75f), + DEG2SHORT_ANGLE(0.25f)); + if (actor->_60C.y == actor->_612.y) { + mfish_namazu_dummy_process_init(actor); + } } -void mfish_namazu_ground_sweep_process_init() { - return; +void mfish_namazu_ground_sweep_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + f32 s; + f32 p; + f32 f; + + p = RANDOM_F(actor->init_data._14) + actor->init_data._10; + s = MAX(actor->init_data._14 + actor->init_data._10, 1.0f); + f = p / s; + if (p > actor->_5E8) { + actor->_5F0 = p; + } + actor->_5F4 = 0.0f; + actor->_5D0.y = 0.0f; + if ((s16)(actor->_612.y - actor->_60C.y) > 0) { + actor->_612.y += DEG2SHORT_ANGLE(15); + } else { + actor->_612.y -= DEG2SHORT_ANGLE(15); + } + actor->_632 = DEG2SHORT_ANGLE(30.f + f * 60.f); + if ((s16)(actor->_60C.y - actor->_612.y) > 0) { + actor->_636 = DEG2SHORT_ANGLE(0); + } else { + actor->_636 = DEG2SHORT_ANGLE(-180); + } + actor->_62E &= ~0xc0; + actor->_34 = mfish_namazu_ground_sweep_process; } -void mfish_namazu_ground_sweep_process() { - return; +void mfish_namazu_ground_sweep_process(MUSEUM_FISH_PRIVATE_DATA* actor) { + if (actor->_632 > DEG2SHORT_ANGLE(20)) { + add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.075f), + (0.4f + 0.02f * ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2))) * 0.5f); + } + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.0625f), DEG2SHORT_ANGLE(0.025f)); + actor->_636 += DEG2SHORT_ANGLE(3); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(0.25f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f)); + + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.875f), + DEG2SHORT_ANGLE(0.125f)); + + if (actor->_5E8 < 0.01f) { + mfish_namazu_dummy_process_init(actor); + } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { + if ((s16)(actor->_612.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); + } else { + actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(112.5f); + } + } } -void mfish_namazu_base_FishMove() { - return; +void mfish_namazu_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + add_calc2(&actor->_5E8, 0.05f, 1.0f - actor->init_data._18, 0.025f); + actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); + add_calc(&actor->_5D0.y, MAX(ABS(sin_s(actor->_60C.x) * actor->_5E8), 0.1f), 0.1f, 0.1f, 0.005f); + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); + mfish_move_smooth(actor, gamex); + actor->_5A0.x += actor->_5D0.x; + actor->_5A0.z += actor->_5D0.z; + actor->_5A0.y = MAX(60.f, MIN(110.f, actor->_5A0.y)); } void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + xyz_t p = suisou_pos[actor->_630]; + f32 v; + int s; + mfish_onefish_mv(actor, gamex); + if (actor->_5F8 > actor->init_data._08 * 10.0f) { + actor->_5F8 = 0.0f; + actor->_626 = 0; + } + if (actor->_626-- <= 0) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + if (actor->_644 <= 0 && RANDOM_F(1.0f) < 0.2f) { + actor->_644 = (s16)RANDOM_F(300.f) + 300; + mfish_namazu_ground_sweep_process_init(actor); + } else if (mfish_WallCheck(actor)) { + mfish_namazu_turn_process_init(actor); + } else { + mfish_namazu_normal_process_init(actor); + } + } else if (actor->_34 == mfish_namazu_normal_process) { + if ((actor->_62E & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(45)) || + (actor->_62E & 0x20 && + ABS((s16)(actor->_62A + DEG2SHORT_ANGLE(180) - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + mfish_namazu_turn_process_init(actor); + } + } + + actor->_638 += DEG2SHORT_ANGLE(10); + actor->_34(actor, gamex); + if (ABS(actor->_618.z) > DEG2SHORT_ANGLE(20) && ABS(actor->_622 - actor->_618.z) < DEG2SHORT_ANGLE(30)) { + add_calc2(&actor->_5E8, 0.2f + 0.01f * GETREG(TAKREG, 0x2d), 0.25f + 0.01f * GETREG(TAKREG, 0x2e), + 0.05f + 0.01f * GETREG(TAKREG, 0x2f)); + } + + s = GETREG(TAKREG, 0x4c); + if (s == 1) { + actor->_644 = (s16)RANDOM_F(300.f) + 300; + } else if (s == -1) { + actor->_644 = 0; + } + + if (actor->_644 > 0) { + actor->_644--; + actor->_642 = DEG2SHORT_ANGLE(GETREG(TAKREG, 0x4d) + 35.0f); + } else { + actor->_642 = 0; + } + add_calc_short_angle2(&actor->_640, actor->_642, CALC_EASE(0.2f), DEG2SHORT_ANGLE(0.25f), DEG2SHORT_ANGLE(0.05f)); + actor->_38._00.frame_control.speed = (actor->_5E8 * 0.75f) / (actor->init_data._10 + actor->init_data._14) + 0.125f; + mfish_namazu_base_FishMove(actor, gamex); + Museum_Fish_BGCheck(actor, gamex); + xyz_t_sub(&p, &actor->_5A0, &p); + v = 60.f + MAX(ABS(p.x), ABS(p.z)) * -0.15f; + actor->_5A0.y = v + actor->init_data._04; + mfish_namazu_body_wind_anime_play(actor, gamex); } -void mfish_namazu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + int s; + if (joint_num == 0) { + trans->y = -(actor->_5AC.y * MIN(sin_s(actor->_640), 0.5f)); + } else if (joint_num == 1) { + s = joint1->z + actor->_640; + joint1->z = MY_CLAMP(s, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + s = joint1->x + (actor->_618.z >> 2); + joint1->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); + Matrix_scale(1.0f, 1.0f + 0.01f * sin_s(actor->_63A + actor->_63C), 1.0f + 0.01f * sin_s(actor->_63A), 1); + } else if (joint_num == 2) { + s = joint1->y - (actor->_618.z << 1); + joint1->y = MY_CLAMP(s, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); + s = joint1->x - (actor->_618.z >> 2); + joint1->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); + s = joint1->z - (s16)(actor->_640 * (0.6f + GETREG(TAKREG, 0x4E) * 0.01f)); + joint1->z = MY_CLAMP(s, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + Matrix_scale(1.0f, 1.0f + 0.005f * sin_s(actor->_63A + DEG2SHORT_ANGLE(270)), + 1.0f + 0.005f * sin_s(actor->_63A + DEG2SHORT_ANGLE(90)), 1); + } + return TRUE; } void mfish_namazu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_tai.c_inc b/src/actor/ac_museum_fish_tai.c_inc index 75424454..8eb681ab 100644 --- a/src/actor/ac_museum_fish_tai.c_inc +++ b/src/actor/ac_museum_fish_tai.c_inc @@ -1,43 +1,275 @@ void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + s16 s = qrand(); + mfish_onefish_ct(actor, gamex); + actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + actor->_5F0 = actor->_5E8; + actor->_60C.y = s; + actor->_612.y = actor->_60C.y; + actor->_5F4 = 0.0f; + actor->_5D0.y = 0.0f; + actor->_5AC = ZeroVec; + actor->_638 = qrand(); + actor->_622 = 0; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_624 = 2; + actor->_594 = NULL; + actor->_598 = NULL; + actor->_5AC.x = 30.f; + actor->_5AC.x = 30.f; + mfish_tai_normal_init(actor, gamex); } -void mfish_tai_normal_init() { - // NOT BAD - - return; +void mfish_tai_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if (actor->_34 == mfish_tai_turn) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + } + actor->_34 = mfish_tai_normal; } -void mfish_tai_normal() { - return; +void mfish_tai_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + + s16 ss = (ABS(actor->_622) * ((0.75f * actor->init_data._30) / 32749.0f)); + // extra extsh here + int s = (s16)MIN(DEG2SHORT_ANGLE2(25), MAX(ss, DEG2SHORT_ANGLE2(5))); + + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632), + CALC_EASE2(0.3f), (s16)(s >> 1) >> 1, DEG2SHORT_ANGLE(0.125f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.15f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.125f)); + + if (actor->_598) { + f32 d = (actor->_598->init_data._08 + actor->init_data._08); + f32 o_y = actor->_598->_5A0.y; + f32 o_z = actor->_598->_5A0.z; + f32 v = MAX(d - ABS(actor->_598->_5A0.z - actor->_5A0.z), 0.0f); + v = v / d; + if (actor->_598->_59C != 0x23) { + if (actor->_598->_5A0.y < actor->_5A0.y) { + if (actor->_5A0.y < (o_y + (actor->_598->init_data._04 + actor->init_data._04))) { + add_calc2(&actor->_5A0.y, (o_y + (actor->_598->init_data._04 + actor->init_data._04)) + 2.0f, 0.2f, + v * 0.1f); + } + } else { + if (actor->_5A0.y > o_y - (actor->_598->init_data._04 + actor->init_data._04)) { + add_calc2(&actor->_5A0.y, (o_y - (actor->_598->init_data._04 + actor->init_data._04)) - 2.0f, 0.2f, + v * 0.1f); + } + } + } + + if (actor->_598->_5A0.z < actor->_5A0.z) { + add_calc2(&actor->_5A0.z, o_z + d, 0.05f, v * 0.1f); + } else { + add_calc2(&actor->_5A0.z, o_z - d, 0.05f, v * 0.1f); + } + } + + if (actor->_5FC < actor->_5AC.x - actor->init_data._28 * 0.5f) { + if (actor->_612.y < 0) { + s16 s; + if (actor->_604 > actor->_608) { + s = actor->_60C.y - DEG2SHORT_ANGLE(90); + } else { + s = actor->_60C.y + DEG2SHORT_ANGLE(90); + } + actor->_612.y = s; + actor->_5AC.x = RANDOM_F(80.f) + 30.f; + } else { + add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(90), CALC_EASE(0.5f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.5f)); + } + } else if (actor->_600 < actor->_5AC.x - actor->init_data._28 * 0.5f) { + if (actor->_612.y > 0) { + s16 s; + if (actor->_604 > actor->_608) { + s = actor->_60C.y + DEG2SHORT_ANGLE(90); + } else { + s = actor->_60C.y - DEG2SHORT_ANGLE(90); + } + actor->_612.y = s; + actor->_5AC.x = RANDOM_F(80.f) + 30.f; + } else { + add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(-90), CALC_EASE(0.5f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.5f)); + } + } else if (actor->_62E & 0x100) { + actor->_5A0.z += 0.05f; + if (ABS((s16)(actor->_612.y - DEG2SHORT_ANGLE(180))) < DEG2SHORT_ANGLE(110)) { + if (actor->_612.y > DEG2SHORT_ANGLE(0)) { + actor->_612.y -= DEG2SHORT_ANGLE(1.5f); + } else { + actor->_612.y += DEG2SHORT_ANGLE(1.5f); + } + } + } else if (actor->_62E & 0x1e) { + mfish_tai_turn_init(actor, gamex); + } else if (actor->_62E & 0x20 && actor->_5F8 > actor->init_data._08 * 0.5f) { + if (actor->init_data._20 < actor->_594->init_data._20) { + s16 escAngle = mfish_get_escape_angle(actor, gamex); + add_calc_short_angle2(&actor->_612.y, escAngle, CALC_EASE(0.25f), DEG2SHORT_ANGLE(2.5f), + DEG2SHORT_ANGLE(0)); + } + } else if (actor->_626 < 0) { + f32 f = RANDOM_F(1.0f); + actor->_612.y = actor->_60C.y; + if (RANDOM_F(1.0f) < GETREG(TAKREG, 0x1c) * 0.1f + 0.1f) { + if (actor->_612.y < 0) { + if (actor->_604 > actor->_608) { + actor->_612.y = actor->_60C.y - DEG2SHORT_ANGLE(157.5f); + } else { + actor->_612.y = actor->_60C.y + DEG2SHORT_ANGLE(157.5f); + } + } else { + if (actor->_604 > actor->_608) { + actor->_612.y = actor->_60C.y + DEG2SHORT_ANGLE(157.5f); + } else { + actor->_612.y = actor->_60C.y - DEG2SHORT_ANGLE(157.5f); + } + } + } else { + if ((actor->_608 - actor->_604) * cos_s(actor->_60C.y) < 0.0f) { + actor->_612.y += (s16)(f * actor->init_data._30); + } else { + actor->_612.y -= (s16)(f * actor->init_data._30); + } + } + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); + } } -void mfish_tai_turn_init() { - // NOT BAD +void mfish_tai_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + s16 b = (s16)actor->_62C; - return; + if (ABS(actor->_622) > DEG2SHORT_ANGLE(45)) { + return; + } + + if ((s16)(actor->_60C.y - b) > 0) { + if (actor->_62E & 6) { + b = b + DEG2SHORT_ANGLE(170); + } else { + b = b + DEG2SHORT_ANGLE(95); + } + } else { + if (actor->_62E & 6) { + b = b - DEG2SHORT_ANGLE(170); + } else { + b = b - DEG2SHORT_ANGLE(95); + } + } + + if (ABS((s16)(b - actor->_612.y)) > DEG2SHORT_ANGLE(45)) { + actor->_34 = mfish_tai_turn; + } + + actor->_612.y = b; } -void mfish_tai_turn() { - return; +void mfish_tai_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f + GETREG(TAKREG, 0x17) * 0.01f), + (s16)(DEG2SHORT_ANGLE2(15.0f + 0.1f * GETREG(TAKREG, 0x18)) >> 1) >> 1, + DEG2SHORT_ANGLE(0.125f)); + + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f + GETREG(TAKREG, 0x19) * 0.01f), + (s16)(DEG2SHORT_ANGLE(15.0f + 0.1f * GETREG(TAKREG, 0x1a)) >> 1) >> 1, + DEG2SHORT_ANGLE(0.125f)); + + if (ABS((s16)actor->_622) < DEG2SHORT_ANGLE(3)) { + mfish_tai_normal_init(actor, gamex); + } } void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + xyz_t p; + f32 v; - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + actor->_34(actor, gamex); + actor->_618.x += DEG2SHORT_ANGLE(RANDOM_F(3.0f) * actor->_5E8 + 0.1f); + actor->_5F4 = sin_s(actor->_618.x) * 5.0f; + if (actor->_62E & 0x20) { + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.02f, 0.05f); + } else { + add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, 0.125f); + } + + if (ABS(actor->_622) > DEG2SHORT_ANGLE(20)) { + add_calc_short_angle2(&actor->_632, MAX(DEG2SHORT_ANGLE2((GETREG(TAKREG, 0x27) + 5.0f) * actor->_5E8), 0), + CALC_EASE(0.25f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.5f)); + } else if ((actor->_62E & 0x20) == 0) { + add_calc_short_angle2(&actor->_632, MAX(DEG2SHORT_ANGLE2((GETREG(TAKREG, 0x28) + 30.0f) * actor->_5E8), 0), + CALC_EASE(0.25f), DEG2SHORT_ANGLE(5.0f), DEG2SHORT_ANGLE(0.5f)); + } else { + add_calc_short_angle2(&actor->_632, DEG2SHORT_ANGLE(5), CALC_EASE(0.1f), DEG2SHORT_ANGLE(2.5f), + DEG2SHORT_ANGLE(0.25f)); + } + + actor->_636 += (s16)DEG2SHORT_ANGLE2((GETREG(TAKREG, 0x29) + 10.0f) * 0.5f); + + if (ABS(actor->_622) > DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x37) + 60.f) || + (s16)(ABS(actor->_622) - ABS(actor->_618.z)) < DEG2SHORT_ANGLE(5)) { + add_calc2(&actor->_5EC, 0.05f, 0.1f, 0.005f); + add_calc2(&actor->_5E8, MAX(actor->_5F0, actor->init_data._10), 0.05f, actor->_5EC); + } else { + add_calc0(&actor->_5EC, 0.1f, 0.002f); + add_calc2(&actor->_5E8, 0.16f, 1.0f - actor->init_data._18, 0.001f); + } + + actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); + + mfish_get_flow_vec(&p, actor, gamex); + + actor->_5A0.x += actor->_5D0.x + p.x; + actor->_5A0.z += actor->_5D0.z + p.z; + + mfish_onefish_mv(actor, gamex); + actor->_38._00.frame_control.speed = + (0.1f + 0.01f * GETREG(TAKREG, 0x14)) * 0.5f + (1.5f + 0.01f * GETREG(TAKREG, 0x15)) * actor->_5E8; + add_calc0(&actor->_5F8, 0.25f, 0.05f); + actor->_5F8 = MIN(1.0f, actor->_5F8); + mfish_body_wind_anime_play(actor, gamex); + Museum_Fish_BGCheck(actor, gamex); + + if (actor->_5A0.y < (GETREG(TAKREG, 0x47) + 55.0f) - actor->init_data._04) { + actor->_5A0.y = (GETREG(TAKREG, 0x47) + 55.0f) - actor->init_data._04; + } + + actor->_626--; } -void mfish_tai_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (joint_num == 1) { + int s = (joint1->x + actor->_618.z) >> 3; + joint1->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-15), DEG2SHORT_ANGLE(15)); + } else if (joint_num == 2) { + int s = joint1->y - (int)(actor->_618.z * (0.01f * GETREG(TAKREG, 0x4b) + 1.5f)); + joint1->y = MY_CLAMP(s, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); + } + return TRUE; } void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - // NOT BAD - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_zarigani.c_inc b/src/actor/ac_museum_fish_zarigani.c_inc index e468b399..1845dd62 100644 --- a/src/actor/ac_museum_fish_zarigani.c_inc +++ b/src/actor/ac_museum_fish_zarigani.c_inc @@ -122,7 +122,7 @@ void mfish_zarigani_stand_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) } } - v = (-(actor->_60C.x * (360.0f / 0x10000)) / 90.0f); + v = (-SHORT2DEG_ANGLE2(actor->_60C.x) / 90.0f); v *= (20.0f + GETREG(TAKREG, 0x1b) * 0.1f); actor->_5AC.x = sin_s(actor->_60C.y) * v; actor->_5AC.z = cos_s(actor->_60C.y) * v; @@ -155,7 +155,7 @@ void mfish_zarigani_jump_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_zarigani_wait_process_init(actor, gamex); return; } - actor->_5AC.y = (actor->_60C.x * (360.f / 0x10000)) / 90.f; + actor->_5AC.y = SHORT2DEG_ANGLE2(actor->_60C.x) / 90.f; actor->_5AC.y *= 20.f + GETREG(TAKREG, 0x1c) * 0.1f; } From e69cf9f8470e3f2ed891b962ce63a8c6e8e09363 Mon Sep 17 00:00:00 2001 From: roeming Date: Fri, 27 Dec 2024 22:11:49 -0500 Subject: [PATCH 17/33] match sfish --- include/ac_museum_fish.h | 2 +- src/actor/ac_museum_fish_bass.c_inc | 2 +- src/actor/ac_museum_fish_kaseki.c_inc | 2 +- src/actor/ac_museum_fish_small_fish.c_inc | 198 +++++++++++++++++++--- src/actor/ac_museum_fish_tai.c_inc | 2 +- 5 files changed, 183 insertions(+), 23 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 53ff5e16..609b7dde 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -327,7 +327,7 @@ void mfish_sfish_normal(); void mfish_sfish_turn_init(); void mfish_sfish_turn(); void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +BOOL mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg, s_xyz* joint1, xyz_t* trans); void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc index 5dfbcd60..1a2ef329 100644 --- a/src/actor/ac_museum_fish_bass.c_inc +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -170,7 +170,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 a; s16 b; - b = a = DEG2SHORT_ANGLE(90) + DEG2SHORT_ANGLE(RANDOM_F(75)); + b = a = DEG2SHORT_ANGLE(45) + DEG2SHORT_ANGLE(RANDOM_F(75)); actor->_618.y = DEG2SHORT_ANGLE((actor->_5AC.y * 4.0f + 4.0f) * (SHORT2DEG_ANGLE2(a) / 120.0f) + 2.0f + actor->_5AC.y); if (actor->_62E & 0x1e) { diff --git a/src/actor/ac_museum_fish_kaseki.c_inc b/src/actor/ac_museum_fish_kaseki.c_inc index 66f3b448..87198941 100644 --- a/src/actor/ac_museum_fish_kaseki.c_inc +++ b/src/actor/ac_museum_fish_kaseki.c_inc @@ -29,7 +29,7 @@ void mfish_kaseki_normal_init() { void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 s = ABS(actor->_622) * (actor->init_data._30 * (GETREG(TAKREG, 0x1d) * 0.001f + 0.5f) / 32749.0f); - s = MIN(actor->_634, MAX(s, DEG2SHORT_ANGLE(5))); + s = MIN(actor->_634, MAX(s, DEG2SHORT_ANGLE2(5))); add_calc_short_angle2(&actor->_632, 0, CALC_EASE(0.5), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f)); actor->_636 += 455; actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), diff --git a/src/actor/ac_museum_fish_small_fish.c_inc b/src/actor/ac_museum_fish_small_fish.c_inc index ea142ec6..7cb301aa 100644 --- a/src/actor/ac_museum_fish_small_fish.c_inc +++ b/src/actor/ac_museum_fish_small_fish.c_inc @@ -1,40 +1,200 @@ void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + s16 s = qrand(); + mfish_onefish_ct(actor, gamex); + actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + actor->_5F0 = actor->_5E8; + actor->_60C.y = s; + actor->_612.y = actor->_60C.y; + actor->_60C.x = DEG2SHORT_ANGLE(RANDOM_F(actor->init_data._30 * 2.0f)); + actor->_612.x = actor->_60C.x; + actor->_5F4 = 110.0f; + actor->_5D0.y = 0.0f; + actor->_5AC = ZeroVec; + actor->_638 = qrand(); + actor->_622 = 0; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_624 = 6; + mfish_sfish_normal_init(actor, gamex); } -void mfish_sfish_normal_init() { - // NOT BAD - return; +void mfish_sfish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if (actor->_630 == 2) { + if (actor->_626 < 0) { + actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); + } + } else { + actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + } + actor->_34 = mfish_sfish_normal; } -void mfish_sfish_normal() { - return; +void mfish_sfish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 35.0f); + actor->_636 += DEG2SHORT_ANGLE(7.5f); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); + if (actor->_62E & 0x1e) { + mfish_sfish_turn_init(actor, gamex); + } else if (actor->_62E & 0x20) { + add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f), + DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f)); + } else if (actor->_626 < 0) { + f32 v = RANDOM_F(1.0f); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); + if (actor->_630 == 2 && actor->_5F0 < actor->init_data._10 + actor->init_data._14 * 0.5f) { + actor->_612.y = atans_table(-actor->_5DC.z, -actor->_5DC.x); + actor->_626 *= 5; + } + + if (RANDOM_F(1.0f) < 0.5f) { + actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f); + } else { + actor->_612.y -= DEG2SHORT_ANGLE((v - 0.3f) * 90.f); + } + + if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(50)) { + actor->_612.x = RANDOM2_F(actor->init_data._30 * 2.0f * (v - 0.3f)); + } + } else if (actor->_5F8 > actor->init_data._08 * 30.f) { + s16 s; + //! BUG: unused? + fqrand(); + s = search_position_angleY(&suisou_pos[actor->_630], &actor->_5A0); + actor->_5F8 = 0.0f; + actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90.0)); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_626 >>= 1; + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._14 + actor->init_data._10; + } } -void mfish_sfish_turn_init() { - return; +void mfish_sfish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if ((s16)(actor->_60C.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(115); + } else { + actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115); + } + + if (actor->_630 == 2) { + if (actor->_5F0 < 0.0f) { + actor->_5F0 = actor->init_data._10 + MAX(-actor->init_data._10, RANDOM_F(actor->init_data._14)); + } + } else { + actor->_5F0 = actor->init_data._14 + actor->init_data._10; + } + actor->_34 = mfish_sfish_turn; } -void mfish_sfish_turn() { - // NOT BAD - return; +void mfish_sfish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 15.0f); + actor->_636 += DEG2SHORT_ANGLE(7.5f); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632), + CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); + if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) { + mfish_sfish_normal_init(actor, gamex); + } } void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 v; + xyz_t p; + int s; + actor->_34(actor, gamex); + actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); + if (actor->_5E8 > actor->_5F0) { + add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.05f); + } else { + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f); + } - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + if (actor->_5F0 < 0.0f) { + add_calc0(&actor->_5F0, 0.1f, 0.05f); + add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0.5f)); + } else { + if (ABS(actor->_60C.x) > DEG2SHORT_ANGLE(50)) { + add_calc2(&actor->_5F0, actor->init_data._14 + actor->init_data._10, 0.2f, 0.1f); + } + } + v = cos_s(actor->_60C.x) * actor->_5E8; + actor->_5D0.x = v * sin_s(actor->_60C.y); + actor->_5D0.z = v * cos_s(actor->_60C.y); + actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x); + mfish_get_flow_vec(&p, actor, gamex); + actor->_5A0.x += actor->_5D0.x + p.x; + actor->_5A0.y += actor->_5D0.y + p.y; + actor->_5A0.z += actor->_5D0.z + p.z; + mfish_onefish_mv(actor, gamex); + if (actor->_630 == 2) { + actor->_38._00.frame_control.speed = actor->_5E8 * 2.0f + 1.0f; + } else { + add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f); + } + + actor->_5B8 = actor->_5A0; + Museum_Fish_BGCheck(actor, gamex); + + if (actor->_5A0.y < 55.0f + actor->init_data._08) { + actor->_5A0.y = 55.0f + actor->init_data._08; + if (actor->_612.x > 0) { + actor->_612.x = DEG2SHORT_ANGLE(-30); + } + } else if (actor->_5A0.y > 115.0f - actor->init_data._08) { + actor->_5A0.y = 115.0f - actor->init_data._08; + mfish_hamon_make(actor, gamex); + actor->_612.x = DEG2SHORT_ANGLE(30); + } else { + actor->_626--; + } + + actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x)); } -void mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +BOOL mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg, s_xyz* joint1, xyz_t* trans) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (joint_num == 1) { + int s = joint1->x + actor->_618.z; + joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); + s = joint1->y + actor->_618.z; + joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); + } else if (joint_num == 2) { + int s = joint1->y - actor->_618.z * 3; + joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(60), DEG2SHORT_ANGLE(60)); + s = joint1->x - (actor->_618.z >> 1); + joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); + } + return TRUE; } void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + s16 v; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + v = actor->_60C.x * 0.7f; + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_RotateY(actor->_60C.y, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1); + Matrix_RotateX(v, 1); + Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_tai.c_inc b/src/actor/ac_museum_fish_tai.c_inc index 8eb681ab..246f7870 100644 --- a/src/actor/ac_museum_fish_tai.c_inc +++ b/src/actor/ac_museum_fish_tai.c_inc @@ -33,7 +33,7 @@ void mfish_tai_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_tai_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 ss = (ABS(actor->_622) * ((0.75f * actor->init_data._30) / 32749.0f)); - // extra extsh here + int s = (s16)MIN(DEG2SHORT_ANGLE2(25), MAX(ss, DEG2SHORT_ANGLE2(5))); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632), From 00bb83f148224f51bbec91667cdc3f242aae3fd7 Mon Sep 17 00:00:00 2001 From: roeming Date: Fri, 27 Dec 2024 23:52:50 -0500 Subject: [PATCH 18/33] match gupi --- include/ac_museum_fish.h | 2 +- src/actor/ac_museum_fish_gupi.c_inc | 211 ++++++++++++++++++++-- src/actor/ac_museum_fish_small_fish.c_inc | 2 +- 3 files changed, 193 insertions(+), 22 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 609b7dde..a8c0965d 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -337,7 +337,7 @@ void mfish_gupi_normal(); void mfish_gupi_turn_init(); void mfish_gupi_turn(); void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_gupi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); diff --git a/src/actor/ac_museum_fish_gupi.c_inc b/src/actor/ac_museum_fish_gupi.c_inc index aaa5fddd..31a085fc 100644 --- a/src/actor/ac_museum_fish_gupi.c_inc +++ b/src/actor/ac_museum_fish_gupi.c_inc @@ -1,41 +1,212 @@ void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - // NOT BAD - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + s16 s = qrand(); + mfish_onefish_ct(actor, gamex); + actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + actor->_5F0 = actor->_5E8; + actor->_60C.y = s; + actor->_612.y = actor->_60C.y; + actor->_60C.x = DEG2SHORT_ANGLE(RANDOM_F(actor->init_data._30 * 2.0f)); + actor->_612.x = actor->_60C.x; + actor->_5F4 = 115.f; + actor->_5D0.y = 0.0f; + actor->_5AC = ZeroVec; + actor->_638 = qrand(); + actor->_622 = 0; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_624 = 6; + mfish_gupi_normal_init(actor, gamex); } -void mfish_gupi_normal_init() { - // NOT BAD - return; +void mfish_gupi_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + actor->_34 = mfish_gupi_normal; } -void mfish_gupi_normal() { - return; +void mfish_gupi_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 35.f); + actor->_636 += DEG2SHORT_ANGLE(7.5f); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632), + CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); + if (actor->_62E & 0x1e) { + mfish_gupi_turn_init(actor, gamex); + } else if (actor->_62E & 0x20) { + add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f), + DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f)); + } else if (actor->_626 < 0) { + f32 v = RANDOM_F(1.0f); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); + + if (RANDOM_F(1.0f) < 0.5f) { + actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f); + } else { + actor->_612.y -= DEG2SHORT_ANGLE((v - 0.3f) * 90.f); + } + + if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(20)) { + actor->_612.x = RANDOM2_F(actor->init_data._30 * 2.0f * (v - 0.3f)); + if (actor->_612.x > 0) { + actor->_612.x = MAX(actor->_612.x, DEG2SHORT_ANGLE(5)); + } else { + actor->_612.x = MIN(actor->_612.x, DEG2SHORT_ANGLE(-5)); + } + } + + } else if (actor->_5F8 > actor->init_data._08 * 30.f) { + s16 s; + //! BUG: unused? + fqrand(); + s = search_position_angleY(&suisou_pos[actor->_630], &actor->_5A0); + actor->_5F8 = 0.0f; + actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90.0)); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_626 >>= 1; + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._14 + actor->init_data._10; + } } -void mfish_gupi_turn_init() { - // NOT BAD - return; +void mfish_gupi_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if ((s16)(actor->_60C.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(115); + } else { + actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115); + } + actor->_5F0 = actor->init_data._14 + actor->init_data._10; + actor->_34 = mfish_gupi_turn; } -void mfish_gupi_turn() { - return; +void mfish_gupi_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 15.0f); + actor->_636 += DEG2SHORT_ANGLE(7.5f); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632), + CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); + if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) { + mfish_sfish_normal_init(actor, gamex); + } } void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 v; + xyz_t p; + int s; + actor->_34(actor, gamex); + actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); + if (actor->_5E8 > actor->_5F0) { + add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.05f); + } else { + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f); + } - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + if (actor->_5F0 < 0.0f) { + add_calc0(&actor->_5F0, 0.1f, 0.05f); + add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0.5f)); + } else { + if (ABS(actor->_60C.x) > DEG2SHORT_ANGLE(50)) { + add_calc2(&actor->_5F0, actor->init_data._14 + actor->init_data._10, 0.2f, 0.1f); + } + } + v = cos_s(actor->_60C.x) * actor->_5E8; + actor->_5D0.x = v * sin_s(actor->_60C.y); + actor->_5D0.z = v * cos_s(actor->_60C.y); + actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x); + mfish_get_flow_vec(&p, actor, gamex); + actor->_5A0.x += actor->_5D0.x + p.x; + actor->_5A0.y += actor->_5D0.y + p.y; + actor->_5A0.z += actor->_5D0.z + p.z; + + mfish_onefish_mv(actor, gamex); + if (actor->_5F0 - 0.01f > actor->_5E8 && actor->_5F0 > 0.1f) { + actor->_38._00.frame_control.speed = + (1.0f + GETREG(TAKREG, 0x28) * 0.1f) * 0.5f + (3.0f + GETREG(TAKREG, 0x29) * 0.1f) * actor->_5E8; + } else { + add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f); + } + actor->_63A += (s16)DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x47) + 3.0f); + actor->_5B8 = actor->_5A0; + Museum_Fish_BGCheck(actor, gamex); + + if (actor->_5A0.y < (actor->_5F4 - 30.f) + actor->init_data._08) { + actor->_5A0.y = (actor->_5F4 - 30.f) + actor->init_data._08; + if (actor->_612.x > 0) { + if (RANDOM_F(1.0f) < 0.1f) { + actor->_5F4 -= RANDOM_F(10.f) + 5.0f; + actor->_5F4 = CLAMP(actor->_5F4, 85.0f, 115.0f); + } else { + actor->_612.x = DEG2SHORT_ANGLE(-30); + } + } + } else if (actor->_5A0.y > actor->_5F4 - actor->init_data._08) { + actor->_5A0.y = actor->_5F4 - actor->init_data._08; + if (actor->_612.x <= 0) { + if (RANDOM_F(1.0f) < 0.1f) { + actor->_5F4 += RANDOM_F(10.f) + 5.0f; + actor->_5F4 = CLAMP(actor->_5F4, 85.0f, 115.0f); + } else { + actor->_612.x = DEG2SHORT_ANGLE(30); + } + } + if (actor->_5F4 > 110.f || actor->_5A0.y >= 114.5f - actor->init_data._08) { + mfish_hamon_make(actor, gamex); + } + } else { + actor->_626--; + } + + actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x)); } -void mfish_gupi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (joint_num == 1) { + int s = joint1->x + actor->_618.z; + joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); + s = joint1->y + actor->_618.z; + joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); + } else if (joint_num == 2) { + int s; + if (actor->_5F0 - 0.001f > actor->_5E8) { + joint1->y += (int)(2.0f * (actor->_5F0 - actor->_5E8) * joint1->y); + } + s = joint1->y - actor->_618.z * 3; + joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(60), DEG2SHORT_ANGLE(60)); + s = joint1->x - (actor->_618.z >> 1); + joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); + joint1->z += (s16)(actor->_618.x * (-1.3f + GETREG(TAKREG, 0x4e) * 0.1f)); + Matrix_scale((GETREG(TAKREG, 0x4b) * 0.01f) * sin_s(actor->_63A) + 0.5f + 1.0f, + (GETREG(TAKREG, 0x4c) * 0.01f) * cos_s(actor->_63A) + 0.1f + 1.0f, 1.0f, 1); + } + return TRUE; } void mfish_gupi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + s16 v; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + v = actor->_60C.x * 0.7f; + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_RotateY(actor->_60C.y, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1); + Matrix_RotateX(v, 1); + Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_gupi_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_small_fish.c_inc b/src/actor/ac_museum_fish_small_fish.c_inc index 7cb301aa..5552cdf8 100644 --- a/src/actor/ac_museum_fish_small_fish.c_inc +++ b/src/actor/ac_museum_fish_small_fish.c_inc @@ -195,6 +195,6 @@ void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_sfish_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); } From e49d25c7d50721381ca4c5d3f8e10019f92ebeff Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 2 Jan 2025 10:02:19 -0500 Subject: [PATCH 19/33] match fish_donko --- include/ac_museum_fish.h | 2 +- src/actor/ac_museum_fish_donko.c_inc | 127 ++++++++++++++++++++++++--- 2 files changed, 118 insertions(+), 11 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index a8c0965d..df32e756 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -375,7 +375,7 @@ void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_donko_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); diff --git a/src/actor/ac_museum_fish_donko.c_inc b/src/actor/ac_museum_fish_donko.c_inc index ce87320a..eff51ca3 100644 --- a/src/actor/ac_museum_fish_donko.c_inc +++ b/src/actor/ac_museum_fish_donko.c_inc @@ -1,23 +1,130 @@ void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + //! BUG: ? + qrand(); + mfish_onefish_ct(actor, gamex); + actor->_5A0.x = GETREG(TAKREG, 0x32) + 450.f; + actor->_5A0.y = GETREG(TAKREG, 0x33) + 60.f; + actor->_5A0.z = GETREG(TAKREG, 0x34) + 180.f; + actor->_5E8 = 0.0f; + actor->_5AC = ZeroVec; + actor->_5F0 = actor->_5E8; + actor->_60C.y = DEG2SHORT_ANGLE(-90); + actor->_612.y = actor->_60C.y; + actor->_5F4 = 0.0f; + actor->_5D0.y = 0.0f; + actor->_5AC = ZeroVec; + actor->_622 = 0; + actor->_624 = 0; + actor->_63A = qrand(); + actor->_63C = qrand(); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); } void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + xyz_t p; + f32 x, z; + mfish_onefish_mv(actor, gamex); + mfish_body_wind_anime_play(actor, gamex); - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + if (actor->_626 > actor->_628 - 10) { + actor->_38._00.frame_control.speed = (actor->_5E8 * 3.0f + 1.0f) * 0.5f; + } else { + add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.125f, 0.2f, 0.1f); + } + + actor->_5AC.y = 0.0f; + actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); + x = (actor->_5A0.x - (suisou_pos[actor->_630].x + 22.5f)); + z = (actor->_5A0.z - (suisou_pos[actor->_630].z - 31.25f)); + actor->_5D0.x -= x * 0.002f; + actor->_5D0.z -= z * 0.002f; + + actor->_5D0.y -= 0.05f; + actor->_5D0.y *= 0.95f; + mfish_get_flow_vec(&p, actor, gamex); + mfish_move_smooth(actor, gamex); + actor->_5A0.x += actor->_5D0.x + actor->_5DC.x * 0.1f; + actor->_5A0.z += actor->_5D0.z + actor->_5DC.z * 0.1f; + actor->_5A0.y += actor->_5D0.y; + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(3.75f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_60C.x, actor->_612.x >> 1, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(3.75f), + DEG2SHORT_ANGLE(0.25f)); + + if (actor->_626-- < 0) { + s16 s = RANDOM_F(actor->init_data._30); + if (actor->_62E & 0x1e) { + if ((s16)(actor->_60C.y - actor->_62C) > 0) { + actor->_612.y = actor->_60C.y + s; + } else { + actor->_612.y = actor->_60C.y - s; + } + } else { + if (RANDOM_F(1.0f) > 0.5f) { + actor->_612.y = actor->_60C.y + s; + } else { + actor->_612.y = actor->_60C.y - s; + } + } + actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + } else if (actor->_626 > actor->_628 - 20) { + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.025f); + } else { + actor->_5E8 *= actor->init_data._18; + } + + if (actor->_62E & 0x1e && actor->_5E8 > 0.05f) { + s16 s = actor->_62C; + if ((s16)(actor->_612.y - actor->_62C) > DEG2SHORT_ANGLE(-1) && + ABS((s16)(actor->_612.y - actor->_62C)) < DEG2SHORT_ANGLE(95)) { + s += DEG2SHORT_ANGLE(90); + } else { + s -= DEG2SHORT_ANGLE(90); + } + + add_calc_short_angle2(&actor->_612.y, s, CALC_EASE(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.5f)); + } + + Museum_Fish_DonkoBGCheck(actor, gamex); } -void mfish_donko_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - // NOT BAD - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (joint_num == 1) { + int i = joint1->x + (actor->_618.z >> 1); + joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); + } else if (joint_num == 2) { + int i = joint1->y - (actor->_618.z << 1); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); + i = joint1->x - (actor->_618.z >> 1); + joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); + } + + return TRUE; } void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_RotateY(actor->_60C.y, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1); + Matrix_RotateX(actor->_60C.x, 1); + Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_sfish_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } From aacb8e54f81c70304d1d0ddb07a06a8a803e0d0a Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 4 Jan 2025 20:09:47 -0500 Subject: [PATCH 20/33] Match big fish --- include/ac_museum_fish.h | 3 +- src/actor/ac_museum_fish_big_fish.c_inc | 203 ++++++++++++++++++++++-- 2 files changed, 195 insertions(+), 11 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index df32e756..6f397d01 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -129,6 +129,7 @@ typedef struct _FISH_PRIVATE_DATA { s16 _640; s16 _642; s16 _644; + s16 _646; } MUSEUM_FISH_PRIVATE_DATA; // size 648 // Holds data for the underwater grass @@ -381,7 +382,7 @@ void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); diff --git a/src/actor/ac_museum_fish_big_fish.c_inc b/src/actor/ac_museum_fish_big_fish.c_inc index e6943887..ae1be141 100644 --- a/src/actor/ac_museum_fish_big_fish.c_inc +++ b/src/actor/ac_museum_fish_big_fish.c_inc @@ -1,23 +1,206 @@ void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + qrand(); + actor->_5A0.y = actor->init_data._0C; + mfish_onefish_ct(actor, gamex); + actor->_5E8 = 0.0f; + actor->_5AC = ZeroVec; + actor->_5F0 = actor->_5E8; + actor->_60C.y = DEG2SHORT_ANGLE(90); + if (actor->_59C == 0x27) { + actor->_60C.y = -actor->_60C.y; + actor->_5A0.z = 430.0f; + actor->_5A0.x += 40.0f; + actor->_640 = 0; + } else if (actor->_59C == 10) { + actor->_5A0.z = 530.0f; + actor->_5A0.x -= 40.0f; + } + + actor->_612.y = actor->_60C.y; + actor->_5F4 = 0.0f; + actor->_5D0.y = 0.0f; + actor->_622 = 0; + actor->_624 = 7; + actor->_63A = qrand(); + actor->_63C = qrand(); + actor->_640 = 0; + actor->_634 = 0; + actor->_632 = 0; + actor->_644 = 0; + actor->_5AC.x = 0.0f; + actor->_5AC.z = 0.0f; + + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); } void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + xyz_t p; + mfish_onefish_mv(actor, gamex); + mfish_body_wind_anime_play(actor, gamex); + if (actor->_59C == 0x27) { + actor->_38._00.frame_control.speed = (sin_s(actor->_63A) * 0.2f + 1.0f) * 0.5f; + } else { + actor->_38._00.frame_control.speed = + ((GETREG(TAKREG, 0x37) * 0.01f) + 0.5f + sin_s(actor->_63A) * (GETREG(TAKREG, 0x38) * 0.01f + 0.1f)) * 0.5f; + } + actor->_5AC.y = 0.0f; + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f); + actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); + if (actor->_59C == 0x27) { + if (actor->_600 > 35.0f) { + if (actor->_632 > DEG2SHORT_ANGLE(10)) { + add_calc0(&actor->_5F0, 1.0f - actor->init_data._18, 0.005f); + } else { + add_calc2(&actor->_5F0, -0.25f, CALC_EASE(0.05f), 0.005f); + } + } else if (actor->_600 < 5.0f) { + add_calc2(&actor->_5F0, 0.025f, CALC_EASE(0.05f), 0.005f); + } else if (actor->_644 > DEG2SHORT_ANGLE(10)) { + add_calc2(&actor->_5F0, (SHORT2DEG_ANGLE2(actor->_644) * 0.1f) / 180.f, CALC_EASE(0.05f), 0.005f); + } + } else if (actor->_5FC > 35.0f) { + if (actor->_632 > DEG2SHORT_ANGLE(10)) { + add_calc0(&actor->_5F0, 1.0f - actor->init_data._18, 0.005f); + } else { + add_calc2(&actor->_5F0, -0.025f, CALC_EASE(0.05f), 0.005f); + } + } else if (actor->_5FC < 5.0f) { + add_calc2(&actor->_5F0, 0.04f, CALC_EASE(0.05f), 0.005f); + } else if (actor->_644 > DEG2SHORT_ANGLE(10)) { + add_calc2(&actor->_5F0, (SHORT2DEG_ANGLE2(actor->_644) * 0.1f) / 180.f, CALC_EASE(0.05f), 0.005f); + } - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + mfish_get_flow_vec(&p, actor, gamex); + actor->_5A0.x += actor->_5D0.x + p.x * 0.1f; + actor->_5A0.z += actor->_5D0.z + p.z * 0.1f; + + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + actor->_632 * sin_s(actor->_636), + CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.875f), DEG2SHORT_ANGLE(0.05f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.025f)); + add_calc_short_angle2(&actor->_632, DEG2SHORT_ANGLE(0), CALC_EASE(0.05f), DEG2SHORT_ANGLE(0.5f), + DEG2SHORT_ANGLE(0.05f)); + actor->_636 += DEG2SHORT_ANGLE(GETREG(TAKREG, 0x47) * 0.1f + 3.0f); + add_calc(&actor->_5A0.y, actor->init_data._0C + actor->_5F4, CALC_EASE(0.05f), 0.15f, 0.05f); + if (actor->_630 == 2) { + actor->_636 += DEG2SHORT_ANGLE(10); + } else { + actor->_646 += actor->_642; + } + add_calc_short_angle2(&actor->_634, actor->_640, CALC_EASE2(0.1f), + (s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 0x3d) * 0.1f + 0.8f) >> 1) >> 1, + DEG2SHORT_ANGLE(0.025f)); + if (actor->_5E8 > 0.0f) { + add_calc_short_angle2(&actor->_644, actor->_634, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.625f), + DEG2SHORT_ANGLE(0.025f)); + } else { + add_calc_short_angle2(&actor->_644, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.625f), + DEG2SHORT_ANGLE(0.025f)); + } + add_calc2(&actor->_5AC.x, actor->_5AC.z, 0.25f, 0.02f); + if (actor->_626-- < 0) { + if ((actor->_59C == 0x27 && actor->_600 < 10.0f) || (actor->_59C == 10 && actor->_5FC < 10.0f)) { + if (actor->_60C.y > 0) { + actor->_612.y = DEG2SHORT_ANGLE(90); + } else { + actor->_612.y = DEG2SHORT_ANGLE(-90); + } + + actor->_5F0 = actor->init_data._10 + MAX(-actor->init_data._10, RANDOM_F(actor->init_data._14)); + + if (RANDOM_F(1.0f) < GETREG(TAKREG, 0x46) * 0.01f + 0.5f) { + actor->_642 = DEG2SHORT_ANGLE(RANDOM_F(2.0f) + 3.0f); + if (actor->_59C == 0x27 || GETREG(TAKREG, 0x39) == 1) { + actor->_634 = DEG2SHORT_ANGLE(RANDOM_F(10.f) + 20.f); + actor->_640 = DEG2SHORT_ANGLE(RANDOM_F(10.f)); + actor->_5AC.z = Rnd_EX_f(1.0f); + } else { + actor->_634 = DEG2SHORT_ANGLE(RANDOM_F(2.0f) + 3.0f); + actor->_640 = DEG2SHORT_ANGLE(RANDOM_F(10.f)); + actor->_5AC.z = Rnd_EX_f(0.5f); + } + } else { + actor->_642 = DEG2SHORT_ANGLE(RANDOM2_F(2.0f) + 3.0f); + actor->_634 = 0; + actor->_640 = 0; + actor->_5AC.z = 0.0f; + actor->_632 = DEG2SHORT_ANGLE(GETREG(TAKREG, 0x48) + 45.0f); + actor->_636 = 0; + } + + } else { + actor->_5F0 = -0.01f; + actor->_5F4 = RANDOM_F(5.0f); + actor->_642 = 0; + actor->_634 = 0; + actor->_640 = 0; + actor->_5AC.z = 0.0f; + } + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + } + Museum_Fish_BGCheck(actor, gamex); } -void mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + + if (joint_num == 1) { + f32 v; + int i; + if (actor->_59C == 0x27) { + v = 0.015f; + } else { + v = 0.02f; + } + i = joint1->x + (actor->_618.z >> 1); + joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); + i = joint1->y + (int)(actor->_644 * (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * sin_s(actor->_646)); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + trans->z += actor->_5AC.x * 0.06f * actor->_644 * sin_s(actor->_646 - DEG2SHORT_ANGLE(90)); + Matrix_scale(1.0f, 1.0f + v * sin_s(actor->_63A + actor->_63C), 1.0f + v * sin_s(actor->_63A), 1); + } else if (joint_num == 2) { + f32 v; + int i; + if (actor->_59C == 0x27) { + v = 0.025f; + } else { + v = 0.035f; + } + i = joint1->y - (actor->_618.z * 2) + + (int)(actor->_644 * (GETREG(TAKREG, 0x15) * 0.1f + 0.75f) * + sin_s(actor->_646 + DEG2SHORT_ANGLE(-90.f + GETREG(TAKREG, 0x17)))); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40)); + i = joint1->x - (actor->_618.z >> 1); + joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); + Matrix_scale(1.0f, 1.0f + v * sin_s(actor->_63A + DEG2SHORT_ANGLE(270)), + 1.0f + v * sin_s(actor->_63A + DEG2SHORT_ANGLE(90)), 1); + } else if (joint_num == 3 && actor->_59C == 0x27) { + int i = joint1->y - actor->_618.z + + (int)(actor->_644 * (1.0f + 0.01f * GETREG(TAKREG, 0x16)) * + sin_s(actor->_646 + DEG2SHORT_ANGLE(-180.f + GETREG(TAKREG, 0x18)))); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + } + + return TRUE; } void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - // NOT BAD - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_sfish_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } From 6640028da8f4d6b6e43fde0f817260aa699aed20 Mon Sep 17 00:00:00 2001 From: roeming Date: Sat, 4 Jan 2025 22:16:13 -0500 Subject: [PATCH 21/33] Match medaka --- include/ac_museum_fish.h | 2 +- src/actor/ac_museum_fish_medaka.c_inc | 173 +++++++++++++++++++++++--- 2 files changed, 155 insertions(+), 20 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 6f397d01..199d2d84 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -348,7 +348,7 @@ void mfish_medaka_normal(); void mfish_medaka_turn_init(); void mfish_medaka_turn(); void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_medaka_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); diff --git a/src/actor/ac_museum_fish_medaka.c_inc b/src/actor/ac_museum_fish_medaka.c_inc index 5eb3e92b..fe0c6428 100644 --- a/src/actor/ac_museum_fish_medaka.c_inc +++ b/src/actor/ac_museum_fish_medaka.c_inc @@ -1,40 +1,175 @@ void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + s16 s = qrand(); + mfish_onefish_ct(actor, gamex); + actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + actor->_5F0 = actor->_5E8; + actor->_60C.y = s; + actor->_612.y = actor->_60C.y; + actor->_60C.x = DEG2SHORT_ANGLE(RANDOM2_F(actor->init_data._30 * 2.0f)); + actor->_612.x = actor->_60C.x; + actor->_5F4 = 110.0f; + actor->_5D0.y = 0.0f; + actor->_5AC = ZeroVec; + actor->_638 = qrand(); + actor->_622 = 0; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_624 = 6; + mfish_medaka_normal_init(actor, gamex); } -void mfish_medaka_normal_init() { - // NOT BAD - return; +void mfish_medaka_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if (actor->_630 == 2) { + if (actor->_626 < 0) { + actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); + } + } else { + actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + } + actor->_34 = mfish_medaka_normal; } -void mfish_medaka_normal() { - return; +void mfish_medaka_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 35.0f); + actor->_636 += DEG2SHORT_ANGLE(7.5f); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); + if (actor->_62E & 0x1e) { + mfish_medaka_turn_init(actor, gamex); + } else if (actor->_62E & 0x20) { + add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f), + DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f)); + } else if (actor->_626 < 0) { + f32 v = RANDOM_F(1.0f); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); + if (RANDOM_F(1.0f) < 0.5f) { + actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f); + } else { + actor->_612.y -= DEG2SHORT_ANGLE((v - 0.3f) * 90.f); + } + if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(20)) { + actor->_612.x = RANDOM2_F(actor->init_data._30 * 2.0f * (v - 0.3f)); + } + } else if (actor->_5F8 > actor->init_data._08 * 30.f) { + f32 v = RANDOM_F(1.0f); + s16 s = search_position_angleY(&suisou_pos[actor->_630], &actor->_5A0); + actor->_5F8 = 0.0f; + actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90)); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_626 >>= 1; + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._14 + actor->init_data._10; + } } -void mfish_medaka_turn_init() { - // NOT BAD - return; +void mfish_medaka_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if ((s16)(actor->_60C.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(115); + } else { + actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115); + } + actor->_5F0 = actor->init_data._14 + actor->init_data._10; + actor->_34 = mfish_medaka_turn; } -void mfish_medaka_turn() { - return; +void mfish_medaka_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 15.0f); + actor->_636 += DEG2SHORT_ANGLE(7.5f); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.05f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); + if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) { + mfish_medaka_normal_init(actor, gamex); + } } void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 v; + xyz_t p; - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + actor->_34(actor, gamex); + actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); + + if (actor->_5E8 > actor->_5F0) { + add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.05f); + } else { + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f); + } + + if (ABS(actor->_60C.x) > DEG2SHORT_ANGLE(50)) { + add_calc2(&actor->_5F0, actor->init_data._14 + actor->init_data._10, 0.2f, 0.1f); + } + + v = actor->_5E8 * cos_s(actor->_60C.x); + actor->_5D0.x = v * sin_s(actor->_60C.y); + actor->_5D0.z = v * cos_s(actor->_60C.y); + actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x); + mfish_get_flow_vec(&p, actor, gamex); + actor->_5A0.x += actor->_5D0.x + p.x; + actor->_5A0.y += actor->_5D0.y + p.y; + actor->_5A0.z += actor->_5D0.z + p.z; + mfish_onefish_mv(actor, gamex); + add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f); + actor->_5B8 = actor->_5A0; + Museum_Fish_BGCheck(actor, gamex); + if (actor->_5A0.y < 70.f + actor->init_data._08) { + actor->_5A0.y = 70.f + actor->init_data._08; + if (actor->_612.x > 0) { + actor->_612.x = DEG2SHORT_ANGLE(-30); + } + } else if (actor->_5A0.y > 100.f - actor->init_data._08) { + actor->_5A0.y = 100.f - actor->init_data._08; + actor->_612.x = DEG2SHORT_ANGLE(30); + } else { + actor->_626--; + } + + actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x)); } -void mfish_medaka_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (joint_num == 1) { + int i = joint1->x + actor->_618.z; + joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + i = joint1->y + actor->_618.z; + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + } else if (joint_num == 2) { + int i = joint1->y - (actor->_618.z * 3); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); + i = joint1->x - (actor->_618.z >> 1); + joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + } + return TRUE; } void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + s16 s; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + s = actor->_60C.x * (GETREG(TAKREG, 0x41) * 0.01f + 0.75f); + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_RotateY(actor->_60C.y, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1); + Matrix_RotateX(s, 1); + Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_gupi_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } From 693b3a035a51c86fbfc52793df73640d3a8a5903 Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 5 Jan 2025 12:04:14 -0500 Subject: [PATCH 22/33] match kingyo --- include/ac_museum_fish.h | 2 +- src/actor/ac_museum_fish_kingyo.c_inc | 258 +++++++++++++++++++++++--- 2 files changed, 235 insertions(+), 25 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 199d2d84..674b2821 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -360,7 +360,7 @@ void mfish_kingyo_turn(); void mfish_kingyo_peck_init(); void mfish_kingyo_peck(); void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_kingyo_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); diff --git a/src/actor/ac_museum_fish_kingyo.c_inc b/src/actor/ac_museum_fish_kingyo.c_inc index 030a4981..03355c1c 100644 --- a/src/actor/ac_museum_fish_kingyo.c_inc +++ b/src/actor/ac_museum_fish_kingyo.c_inc @@ -1,49 +1,259 @@ void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + s16 s = qrand(); + mfish_onefish_ct(actor, gamex); + actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + actor->_5F0 = actor->_5E8; + actor->_60C.y = s; + actor->_612.y = actor->_60C.y; + actor->_60C.x = DEG2SHORT_ANGLE2(RANDOM2_F(actor->init_data._30 * 2.0f)); + actor->_612.x = actor->_60C.x; + actor->_5F4 = 110.0f; + actor->_5D0.y = 0.0f; + actor->_5AC = ZeroVec; + actor->_622 = 0; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_640 = RANDOM_F(130.f); + actor->_624 = 6; + mfish_kingyo_normal_init(actor, gamex); } -void mfish_kingyo_normal_init() { - // NOT BAD - return; +void mfish_kingyo_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + actor->_34 = mfish_kingyo_normal; } -void mfish_kingyo_normal() { - return; +void mfish_kingyo_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_632 = 0; + actor->_636 = 0; + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); + + if (mfish_peck_check(actor, gamex)) { + mfish_kingyo_peck_init(actor, gamex); + } else if (actor->_62E & 0x1e) { + mfish_kingyo_turn_init(actor, gamex); + } else if (actor->_62E & 0x20) { + add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f), + DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f)); + } else if (actor->_626 < 0) { + f32 v = RANDOM_F(1.0f); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_640 = RANDOM_F(130.f); + actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); + if (RANDOM_F(1.0f) < 0.5f) { + actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f); + } else { + actor->_612.y -= DEG2SHORT_ANGLE((v - 0.3f) * 90.f); + } + if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(50)) { + actor->_612.x = RANDOM2_F(actor->init_data._30 * 2.0f * (v - 0.3f)); + } + } else if (actor->_5F8 > actor->init_data._08 * 30.f) { + f32 v = RANDOM_F(1.0f); + s16 s = search_position_angleY(&suisou_pos[actor->_630], &actor->_5A0); + actor->_5F8 = 0.0f; + actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90)); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_626 >>= 1; + actor->_628 = actor->_626; + actor->_640 = RANDOM_F(130.f); + actor->_5F0 = actor->init_data._14 + actor->init_data._10; + } } -void mfish_kingyo_turn_init() { - // NOT BAD - return; +void mfish_kingyo_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if ((s16)(actor->_60C.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(115); + } else { + actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115); + } + actor->_5F0 = actor->init_data._14 + actor->init_data._10; + actor->_34 = mfish_kingyo_turn; } -void mfish_kingyo_turn() { - return; +void mfish_kingyo_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_632 = 0; + actor->_636 = 0; + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); + if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) { + mfish_kingyo_normal_init(actor, gamex); + } } -void mfish_kingyo_peck_init() { - // NOT BAD - return; +void mfish_kingyo_peck_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 dist; + mfish_get_player_angle(actor, gamex, &actor->_612.y, &actor->_612.x, &dist); + actor->_626 = 120; + actor->_628 = actor->_626; + actor->_640 = RANDOM_F(130.f); + actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + actor->_34 = mfish_kingyo_peck; } -void mfish_kingyo_peck() { - return; +void mfish_kingyo_peck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 30.f); + actor->_636 += DEG2SHORT_ANGLE(7.5f); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), + CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(10), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); + if (actor->_626 < 0) { + f32 dist; + mfish_get_player_angle(actor, gamex, &actor->_612.y, &actor->_612.x, &dist); + if (ABS(actor->_612.y) < DEG2SHORT_ANGLE(15)) { + if (actor->_612.y > 0) { + actor->_612.y = DEG2SHORT_ANGLE(15); + } else { + actor->_612.y = DEG2SHORT_ANGLE(-15); + } + } else if (ABS(actor->_612.y) > DEG2SHORT_ANGLE(165)) { + if (actor->_612.y > 0) { + actor->_612.y = DEG2SHORT_ANGLE(165); + } else { + actor->_612.y = DEG2SHORT_ANGLE(-165); + } + } + + if (actor->_62E & 0x20 && dist > 40.f) { + if ((s16)(actor->_612.y - actor->_62A) > 0) { + actor->_612.y += DEG2SHORT_ANGLE(90); + } else { + actor->_612.y -= DEG2SHORT_ANGLE(90); + } + } + actor->_612.x += (s16)DEG2SHORT_ANGLE2(RANDOM_F(20.0f)); + actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + if (actor->_5F0 < 0.1f) { + actor->_5F0 = 0.1f; + } + if (dist > 40.0f) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_640 = RANDOM_F(130.f); + } else { + actor->_626 = 60; + actor->_628 = actor->_626; + actor->_640 = RANDOM_F(130.f); + } + } else if (MF_Control_Actor->_14db4 != actor->_630) { + mfish_kingyo_turn_init(actor, gamex); + } else if (mfish_peck_wall_check(actor, gamex)) { + actor->_5F0 = 0.0f; + actor->_5E8 = -0.2f; + } else if (fabsf(actor->_5E8) < 0.008f) { + actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + } } void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 v; + xyz_t p; + actor->_34(actor, gamex); + actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f), + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.25f)); - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + if (actor->_5E8 > actor->_5F0) { + add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.05f); + } else { + add_calc2(&actor->_5E8, actor->_5F0, GETREG(TAKREG, 0x35) * 0.01f + 0.25f, + GETREG(TAKREG, 0x36) * 0.01f + 0.05f); + } + if (actor->_5F0 < 0.0f) { + add_calc0(&actor->_5F0, 0.1f, 0.05f); + add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0.5f)); + } else if (ABS(actor->_60C.x) > DEG2SHORT_ANGLE(50)) { + add_calc2(&actor->_5F0, actor->init_data._14 + actor->init_data._10, 0.2f, 0.1f); + } + v = actor->_5E8 * cos_s(actor->_60C.x); + actor->_5D0.x = v * sin_s(actor->_60C.y); + actor->_5D0.z = v * cos_s(actor->_60C.y); + actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x); + mfish_get_flow_vec(&p, actor, gamex); + actor->_5A0.x += actor->_5D0.x + p.x; + actor->_5A0.y += actor->_5D0.y + p.y; + actor->_5A0.z += actor->_5D0.z + p.z; + mfish_onefish_mv(actor, gamex); + if ((((actor->_5F0 - 0.01f) > actor->_5E8) || (actor->_626 > (s16)(actor->_628 - actor->_640))) && + actor->_5F0 > 0.1f) { + actor->_38._00.frame_control.speed = + (5.0f + GETREG(TAKREG, 0x28) * 0.1f) * 0.5f + (4.0f + GETREG(TAKREG, 0x29) * 0.1f) * actor->_5E8; + } else { + add_calc2(&actor->_5F0, GETREG(TAKREG, 0x31) * 0.001f + 0.05f, GETREG(TAKREG, 0x32) * 0.001f + 0.01f, + GETREG(TAKREG, 0x33) * 0.001f + 0.002f); + add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f); + } + actor->_63A += (s16)DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x47) + 3.0f); + actor->_5B8 = actor->_5A0; + Museum_Fish_BGCheck(actor, gamex); + if (actor->_5A0.y < 60.f + actor->init_data._08) { + actor->_5A0.y = 60.f + actor->init_data._08; + if (actor->_612.x > 0) { + actor->_612.x = DEG2SHORT_ANGLE(-30); + } + } else if (actor->_5A0.y > 115.f - actor->init_data._08) { + actor->_5A0.y = 115.f - actor->init_data._08; + actor->_612.x = DEG2SHORT_ANGLE(30); + mfish_hamon_make(actor, gamex); + } else { + actor->_626--; + } + + actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x)); } -void mfish_kingyo_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (joint_num == 1) { + int i = joint1->x + actor->_618.z; + joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + i = joint1->y + actor->_618.z; + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + } else if (joint_num == 2) { + int i; + if (actor->_5F0 - 0.001f > actor->_5E8) { + joint1->y += (int)((actor->_5F0 - actor->_5E8) * 2.0f * joint1->y); + } + i = joint1->y - actor->_618.z * 3; + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80)); + i = joint1->x - (actor->_618.z >> 1); + joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + joint1->z += (int)(actor->_618.x * (-1.3f + 0.1f * GETREG(TAKREG, 0x4e))); + Matrix_scale(GETREG(TAKREG, 0x4b) * 0.01f * cos_s(actor->_63A) + 0.05f + 1.0f, + GETREG(TAKREG, 0x4c) * 0.01f * sin_s(actor->_63A) + 0.1f + 1.0f, + GETREG(TAKREG, 0x4d) * 0.01f * cos_s(actor->_63A) + 0.1f + 1.0f, 1); + } + return TRUE; } void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + s16 s; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + s = actor->_60C.x * (GETREG(TAKREG, 0x41) * 0.01f + 0.75f); + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_RotateY(actor->_60C.y, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1); + Matrix_RotateX(s, 1); + Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_gupi_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } From 9c52644bb8b8cb8d03f9bb769a128f237696fa77 Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 5 Jan 2025 19:50:51 -0500 Subject: [PATCH 23/33] match dojou --- include/ac_museum_fish.h | 4 +- src/actor/ac_museum_fish_afish.c_inc | 25 +++- src/actor/ac_museum_fish_aroana.c_inc | 30 ++-- src/actor/ac_museum_fish_base.c_inc | 6 +- src/actor/ac_museum_fish_dojou.c_inc | 207 +++++++++++++++++++++++--- 5 files changed, 228 insertions(+), 44 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 674b2821..83c259ec 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -247,7 +247,7 @@ void mfish_afish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); 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); +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); @@ -370,7 +370,7 @@ void mfish_dojou_normal(); void mfish_dojou_turn_init(); void mfish_dojou_turn(); void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_dojou_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); diff --git a/src/actor/ac_museum_fish_afish.c_inc b/src/actor/ac_museum_fish_afish.c_inc index 5c9523eb..bccb3dad 100644 --- a/src/actor/ac_museum_fish_afish.c_inc +++ b/src/actor/ac_museum_fish_afish.c_inc @@ -1,7 +1,11 @@ void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - // NOT BAD + mfish_onefish_ct(actor, gamex); + mfish_base_ct(actor, gamex); + actor->_5EC = 0.0f; + actor->_5E8 = actor->init_data._10; + actor->_34 = mfish_afish_normal_process; + actor->_624 = 0; } void mfish_afish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { @@ -223,13 +227,18 @@ void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_afish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - // NOT BAD - return; + mfish_onefish_mv(actor, gamex); + mfish_afish_base_mv(actor, gamex); + Museum_Fish_BGCheck(actor, gamex); + if (actor->_640 > 0) { + actor->_640--; + actor->_38._00.frame_control.speed = + ((actor->_5F0 - actor->_5E8) * 3.0f) / (actor->init_data._10 + actor->init_data._14) + 1.5f; + } else { + add_calc2(&(actor->_38)._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f); + } } void mfish_afish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - // NOT BAD - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + mfish_onefish_dw(actor, gamex); } diff --git a/src/actor/ac_museum_fish_aroana.c_inc b/src/actor/ac_museum_fish_aroana.c_inc index 5de55ff3..9e7a0de0 100644 --- a/src/actor/ac_museum_fish_aroana.c_inc +++ b/src/actor/ac_museum_fish_aroana.c_inc @@ -1,16 +1,18 @@ void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - // NOT BAD - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + mfish_onefish_ct(actor, gamex); + mfish_base_ct(actor, gamex); + actor->_34 = mfish_aroana_normal_process; + actor->_624 = 0; } -void mfish_aroana_dummy_process_init() { - // NOT BAD - return; +void mfish_aroana_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + actor->_5F0 = actor->_5E8; + actor->_5EC = 0.0f; + actor->_34 = mfish_aroana_dummy_process; } -void mfish_aroana_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) { +void mfish_aroana_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.0f), DEG2SHORT_ANGLE(0.25f)); @@ -166,9 +168,10 @@ void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } } -void mfish_aroana_long_move_process_init() { - // NOT BAD - return; +void mfish_aroana_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { + actor->_5F0 = MAX(actor->_5E8, 0.2f); + actor->_5EC = 0.0f; + actor->_34 = mfish_aroana_long_move_process; } void mfish_aroana_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -242,9 +245,10 @@ void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - // NOT BAD - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + mfish_onefish_mv(actor, gamex); + mfish_aroana_base_mv(actor, gamex); + Museum_Fish_BGCheck(actor, gamex); + actor->_38._00.frame_control.speed = (actor->_5E8 * 2.0f) / (actor->init_data._10 + actor->init_data._14) + 0.5f; } BOOL mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index 8e648fa7..98be75ad 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -583,8 +583,10 @@ void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_ani_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + mfish_onefish_ct(actor, gamex); + mfish_base_ct(actor, gamex); + actor->_34 = mfish_normal_process; + actor->_624 = 0; } void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { diff --git a/src/actor/ac_museum_fish_dojou.c_inc b/src/actor/ac_museum_fish_dojou.c_inc index 59c8f00a..4c3767c1 100644 --- a/src/actor/ac_museum_fish_dojou.c_inc +++ b/src/actor/ac_museum_fish_dojou.c_inc @@ -1,40 +1,209 @@ void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + s16 s = qrand(); + mfish_onefish_ct(actor, gamex); + actor->_5E8 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + actor->_5F0 = actor->_5E8; + actor->_60C.y = s; + actor->_612.y = actor->_60C.y; + actor->_60C.x = DEG2SHORT_ANGLE2(RANDOM2_F(actor->init_data._30 * 2.0f)); + actor->_612.x = actor->_60C.x; + actor->_5F4 = 110.0f; + actor->_5D0.y = 0.0f; + actor->_5AC = ZeroVec; + actor->_638 = qrand(); + actor->_622 = 0; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_624 = 6; + actor->_5AC.x = 0.0f; + mfish_dojou_normal_init(actor, gamex); } -void mfish_dojou_normal_init() { - // NOT BAD - return; +void mfish_dojou_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; + actor->_34 = mfish_dojou_normal; } -void mfish_dojou_normal() { - return; +void mfish_dojou_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 30.f); + actor->_636 += DEG2SHORT_ANGLE(10); + actor->_622 = add_calc_short_angle2(&actor->_60C.y, + actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636) * cos_s(actor->_60C.x)), + CALC_EASE2(0.3f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(2.5f), + DEG2SHORT_ANGLE(0.25f)); + if (actor->_62E & 0x1e) { + mfish_dojou_turn_init(actor, gamex); + } else if (actor->_62E & 0x20) { + add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f), + DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f)); + } else if (actor->_626 < 0) { + f32 v = RANDOM_F(1.0f); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); + if (RANDOM_F(1.0f) < 0.5f) { + actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f); + } else { + actor->_612.y -= DEG2SHORT_ANGLE((v - 0.3f) * 90.f); + } + if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(50)) { + actor->_612.x = RANDOM2_F(actor->init_data._30 * 2.0f * (v - 0.3f)); + } + } } -void mfish_dojou_turn_init() { - // NOT BAD - return; +void mfish_dojou_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + if ((s16)(actor->_60C.y - actor->_62C) > 0) { + actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(115); + } else { + actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115); + } + actor->_5F0 = actor->init_data._14 + actor->init_data._10; + actor->_34 = mfish_dojou_turn; } -void mfish_dojou_turn() { - return; +void mfish_dojou_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 15.0f); + actor->_636 += DEG2SHORT_ANGLE(10); + actor->_622 = add_calc_short_angle2( + &actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636) * cos_s(actor->_60C.x)), + CALC_EASE2(0.3f), (s16)(DEG2SHORT_ANGLE(ABS(cos_s(actor->_60C.x)) * 15.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); + + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), + (s16)(DEG2SHORT_ANGLE(ABS(cos_s(actor->_60C.x)) * 10.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f)); + + if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) { + mfish_dojou_normal_init(actor, gamex); + } } void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 v; + xyz_t p; + actor->_34(actor, gamex); + actor->_61E = add_calc_short_angle2(&actor->_60C.x, + actor->_612.x + (s16)(actor->_632 * sin_s(actor->_636) * sin_s(actor->_60C.x)), + CALC_EASE(0.1f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f)); + add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE(0.1f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f)); - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + if (actor->_5E8 > actor->_5F0) { + add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.05f); + } else { + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f); + } + + if (actor->_5F0 < 0.0f) { + add_calc0(&actor->_5F0, 0.1f, 0.05f); + add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0.5f)); + } else { + if (ABS(actor->_60C.x) > DEG2SHORT_ANGLE(50)) { + add_calc2(&actor->_5F0, (actor->init_data._14 + actor->init_data._10) * 2.0f, 0.2f, 0.1f); + } + } + + v = cos_s(actor->_60C.x) * actor->_5E8; + actor->_5D0.x = v * sin_s(actor->_60C.y); + actor->_5D0.z = v * cos_s(actor->_60C.y); + actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x); + mfish_get_flow_vec(&p, actor, gamex); + actor->_5A0.x += actor->_5D0.x + p.x; + actor->_5A0.y += actor->_5D0.y + p.y; + actor->_5A0.z += actor->_5D0.z + p.z; + mfish_onefish_mv(actor, gamex); + if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(15)) { + add_calc2(&actor->_38._00.frame_control.speed, + (GETREG(TAKREG, 0x1a) * 0.1f + 3.0f) * 0.5f + (GETREG(TAKREG, 0x1b) * 0.1f + 3.0f) * actor->_5E8, + 0.2f, 0.1f); + add_calc2(&actor->_5AC.x, 1.0f, 0.1f, 0.02f); + } else { + add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 1.5f + 0.5f, 0.2f, 0.1f); + add_calc0(&actor->_5AC.x, 0.1f, 0.02f); + } + actor->_5B8 = actor->_5A0; + Museum_Fish_BGCheck(actor, gamex); + if (actor->_5A0.y < actor->init_data._08 + 50.f) { + actor->_5A0.y = actor->init_data._08 + 50.f; + if (actor->_612.x > 0) { + if ((RANDOM_F(1.0f) < 0.5f && actor->_63E < 0) || actor->_63E > 0) { + actor->_612.x = DEG2SHORT_ANGLE(-80); + actor->_5F4 = 110.0f; + if (actor->_63E <= 0) { + actor->_63E = 1; + } else { + actor->_63E--; + } + } else { + if (actor->_63E == 0) { + actor->_63E--; + } + actor->_612.x = DEG2SHORT_ANGLE(-10); + actor->_5F4 = 75.0f; + } + } + } else if (actor->_5A0.y > actor->_5F4 - actor->init_data._08) { + actor->_5A0.y = actor->_5F4 - actor->init_data._08; + if (actor->_5F4 > 100.0f) { + actor->_612.x = DEG2SHORT_ANGLE(80); + mfish_hamon_make(actor, gamex); + } else { + actor->_612.x = DEG2SHORT_ANGLE(10); + } + } else { + if (actor->_63E > 0) { + if (actor->_612.x > 0) { + add_calc_short_angle2(&actor->_612.x, DEG2SHORT_ANGLE(75), CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.25f), + DEG2SHORT_ANGLE(0.0f)); + } else { + add_calc_short_angle2(&actor->_612.x, DEG2SHORT_ANGLE(-75), CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.25f), + DEG2SHORT_ANGLE(0.0f)); + } + } + actor->_626--; + } + actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x)); } -void mfish_dojou_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (joint_num == 1) { + int i = joint1->x + actor->_618.z; + joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-45), DEG2SHORT_ANGLE(40)); + i = joint1->y + actor->_618.z; + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40)); + } else if (joint_num == 2) { + int i = (s16)(joint1->z - actor->_618.x); + f32 z; + f32 t; + joint1->z = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40)); + z = actor->_618.z; + t = joint1->y * ((GETREG(TAKREG, 0x19) * 0.1f + 0.8f) * actor->_5AC.x + 1.0f); + i = (int)t - (int)z; + + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80)); + } + return TRUE; } void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + s16 s; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + s = actor->_60C.x; + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_RotateY(actor->_60C.y, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24 * (0.5f * cos_s(s) + ABS(cos_s(s))), 1); + Matrix_RotateY(s, 1); + Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f * cos_s(s), 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } From db08f0ce1356d61a02e356a0fea8ceaa35a56eaa Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 5 Jan 2025 20:54:10 -0500 Subject: [PATCH 24/33] Match ito --- include/ac_museum_fish.h | 2 +- src/actor/ac_museum_fish_ito.c_inc | 123 ++++++++++++++++++++++++++--- 2 files changed, 114 insertions(+), 11 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 83c259ec..25250ac1 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -388,7 +388,7 @@ void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); diff --git a/src/actor/ac_museum_fish_ito.c_inc b/src/actor/ac_museum_fish_ito.c_inc index 804288d7..907f7f2e 100644 --- a/src/actor/ac_museum_fish_ito.c_inc +++ b/src/actor/ac_museum_fish_ito.c_inc @@ -1,23 +1,126 @@ void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + //! BUG: unused + s16 s = qrand(); + actor->_5A0.y = actor->init_data._0C; + mfish_onefish_ct(actor, gamex); + actor->_5E8 = 0.0f; + actor->_5AC = ZeroVec; + actor->_5F0 = actor->_5E8; + actor->_60C.y = DEG2SHORT_ANGLE(90); + actor->_612.y = actor->_60C.y; + actor->_5F4 = 0.0f; + actor->_5D0.y = 0.0f; + actor->_622 = 0; + actor->_624 = 7; + actor->_63A = qrand(); + actor->_63C = qrand(); + actor->_640 = 0; + actor->_634 = 0; + actor->_632 = 0; + actor->_644 = 0; + actor->_5AC.x = 0.0f; + actor->_5AC.z = 0.0f; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); } void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + xyz_t p; + mfish_onefish_mv(actor, gamex); + mfish_body_wind_anime_play(actor, gamex); + actor->_38._00.frame_control.speed = (sin_s(actor->_63A) * 0.6f + 3.0f) * 0.5f; + actor->_5AC.y = sin_s(actor->_63A) * 0.2f; + add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f); + actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); + actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); + if (ABS(actor->_600 - actor->_5FC) > 60.f) { + if (actor->_600 > actor->_5FC) { + add_calc2(&actor->_5F0, 0.1f, CALC_EASE(0.05f), 0.005f); + } else { + add_calc2(&actor->_5F0, -0.1f, CALC_EASE(0.05f), 0.005f); + } + } + mfish_get_flow_vec(&p, actor, gamex); + actor->_5A0.x += actor->_5D0.x + p.x * 0.1f; + actor->_5A0.z += actor->_5D0.z + p.z * 0.1f; + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.875f), + DEG2SHORT_ANGLE(0.05f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.025f)); + add_calc(&actor->_5A0.y, actor->init_data._0C + actor->_5F4, CALC_EASE(0.05f), 0.15f, 0.05f); + actor->_646 += DEG2SHORT_ANGLE(10); + add_calc_short_angle2(&actor->_634, actor->_640, CALC_EASE2(0.1f), + (s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 0x3d) * 0.1f + 0.8f) >> 1) >> 1, + DEG2SHORT_ANGLE(0.025f)); + add_calc_short_angle2(&actor->_644, actor->_634, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.625f), + DEG2SHORT_ANGLE(0.025f)); + add_calc2(&actor->_5AC.x, actor->_5AC.z, 0.25f, 0.001f); + if (actor->_626-- < 0) { + if (RANDOM_F(1.0f) > 0.5f && actor->_600 > 5.0f) { + if (actor->_60C.y > 0) { + actor->_612.y = DEG2SHORT_ANGLE(90); + } else { + actor->_612.y = DEG2SHORT_ANGLE(-90); + } + actor->_5F0 = actor->init_data._10 + MAX(-actor->init_data._10, RANDOM_F(actor->init_data._14)); + actor->_642 = DEG2SHORT_ANGLE(RANDOM2_F(2.0f) + 3.0f); + actor->_634 = DEG2SHORT_ANGLE(RANDOM_F(10.0f) + 20.0f); + actor->_640 = DEG2SHORT_ANGLE(RANDOM_F(10.0f)); + actor->_5AC.z = Rnd_EX_f(0.06f); + } else { + actor->_5F0 = -0.1f; + actor->_5F4 = RANDOM2_F(5.0f); + actor->_642 = 0; + actor->_634 = 0; + actor->_640 = 0; + actor->_5AC.z = 0.0f; + } + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + } + Museum_Fish_BGCheck(actor, gamex); } -void mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (joint_num == 1) { + f32 v; + int i = joint1->x + (actor->_618.z >> 1); + joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); + i = joint1->y + (int)(actor->_644 * (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * sin_s(actor->_646)); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30)); + v = actor->_5AC.x * actor->_644 * sin_s(actor->_646 - DEG2SHORT_ANGLE(90)); + trans->z += v; + Matrix_scale(1.0f, sin_s(actor->_63A + actor->_63C) * 0.025f + 1.0f, sin_s(actor->_63A) * 0.025f + 1.0f, 1); + } else if (joint_num == 2) { + int i; + i = joint1->y - 2 * actor->_618.z + + (int)(actor->_644 * (GETREG(TAKREG, 0x15) * 0.01f + 0.7f) * + sin_s(actor->_646 + DEG2SHORT_ANGLE(-90.f + GETREG(TAKREG, 0x17)))); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40)); + i = joint1->x - (actor->_618.z >> 1); + joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); + Matrix_scale(1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) * 0.05f + 1.0f, + sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) * 0.05f + 1.0f, 1); + } + return TRUE; } void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - // NOT BAD - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x, actor->_5A0.y + actor->_5AC.y, actor->_5A0.z, 0); + Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_sfish_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } From 463faea2b81dfb8a2c28ad971abb341b803d8b13 Mon Sep 17 00:00:00 2001 From: roeming Date: Tue, 7 Jan 2025 23:50:14 -0500 Subject: [PATCH 25/33] match almost all fish functions --- include/ac_museum_fish.h | 6 +- src/actor/ac_museum_fish_afish.c_inc | 4 +- src/actor/ac_museum_fish_aroana.c_inc | 6 +- src/actor/ac_museum_fish_bass.c_inc | 7 +- src/actor/ac_museum_fish_kaseki.c_inc | 9 +- src/actor/ac_museum_fish_koi.c_inc | 37 +-- src/actor/ac_museum_fish_seafish.c_inc | 10 +- src/actor/ac_museum_fish_tai.c_inc | 2 +- src/actor/ac_museum_fish_unagi.c_inc | 354 ++++++++++++++++++++++--- 9 files changed, 369 insertions(+), 66 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 25250ac1..85d67549 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -262,7 +262,7 @@ BOOL mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int jo void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4); -void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor); +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); @@ -393,7 +393,7 @@ BOOL mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_unagi_get_next_rail_type(); +s16 mfish_unagi_get_next_rail_type(); void mfish_unagi_aim_wind_angle_calc(); void mfish_unagi_rail_move_init(); void mfish_unagi_rail_move(); @@ -404,7 +404,7 @@ void mfish_unagi_rail_move_reverse(); void mfish_unagi_reverse_to_normal_init(); void mfish_unagi_reverse_to_normal(); void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game); -void mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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); diff --git a/src/actor/ac_museum_fish_afish.c_inc b/src/actor/ac_museum_fish_afish.c_inc index bccb3dad..e8240b0f 100644 --- a/src/actor/ac_museum_fish_afish.c_inc +++ b/src/actor/ac_museum_fish_afish.c_inc @@ -95,7 +95,7 @@ void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { mfish_afish_dummy_process_init(actor); - } else if (actor->_5E8 > 0.01f && actor->_62E & 0x1e) { + } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) > 0) { actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); } else { @@ -178,7 +178,7 @@ void mfish_afish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc0(&actor->_5EC, 0.5f, 0.01f); actor->_5D0.x = actor->_5E8 * cos_s(actor->_60C.x) * sin_s(actor->_60C.y); actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.x) * cos_s(actor->_60C.y); - add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.001f); + add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); mfish_move_smooth(actor, gamex); mfish_get_flow_vec(&p, actor, gamex); diff --git a/src/actor/ac_museum_fish_aroana.c_inc b/src/actor/ac_museum_fish_aroana.c_inc index 9e7a0de0..3098fa90 100644 --- a/src/actor/ac_museum_fish_aroana.c_inc +++ b/src/actor/ac_museum_fish_aroana.c_inc @@ -85,12 +85,12 @@ void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { DEG2SHORT_ANGLE(0.25f)); if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { - if (fqrand() < 0.01f) { + if (fqrand() < 0.8f) { mfish_aroana_long_move_process_init(actor); } else { mfish_aroana_dummy_process_init(actor); } - } else if (actor->_5E8 > 0.01f && actor->_62E & 0x1e) { + } else if (actor->_5E8 > 1.f && actor->_62E & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) > 0) { actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); } else { @@ -133,7 +133,7 @@ void mfish_aroana_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5EC = 0.0f; actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.2f; - actor->_34 = mfish_afish_turn_process; + actor->_34 = mfish_aroana_turn_process; } void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc index 1a2ef329..407e14b4 100644 --- a/src/actor/ac_museum_fish_bass.c_inc +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -62,6 +62,7 @@ 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; @@ -132,6 +133,7 @@ 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 & 0x200) != 0 && actor->_632 > DEG2SHORT_ANGLE(20)) || actor->_640 > 0) { f32 v = (actor->_5AC.y * 0.03f + 0.02f); add_calc2(&actor->_5EC, @@ -281,6 +283,7 @@ 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) { @@ -297,7 +300,7 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_bass_turn_process_init(actor); } else { mfish_bass_tail_anim_set(actor, 0); - mfish_bass_turn_process_init(actor); + mfish_bass_normal_process_init(actor); } } else if (actor->_34 == &mfish_bass_normal_process) { if (((actor->_62E & 0x1e) && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || @@ -359,7 +362,7 @@ void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); Matrix_RotateY(actor->_60C.y, 1); - Matrix_translate(0, 0.25f * actor->init_data._04, 0.5f * actor->init_data._24, 1); + Matrix_translate(0, 0.25f * actor->init_data._04, 1.5f * actor->init_data._24, 1); Matrix_RotateX(actor->_60C.x, 1); Matrix_RotateZ(MY_CLAMP(-(actor->_618.z >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); Matrix_translate(0, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1); diff --git a/src/actor/ac_museum_fish_kaseki.c_inc b/src/actor/ac_museum_fish_kaseki.c_inc index 87198941..3d2184c3 100644 --- a/src/actor/ac_museum_fish_kaseki.c_inc +++ b/src/actor/ac_museum_fish_kaseki.c_inc @@ -22,9 +22,10 @@ void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Museum_Fish_BGCheck(actor, gamex); } -void mfish_kaseki_normal_init() { - // NOT BAD - return; +void mfish_kaseki_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); + actor->_34 = mfish_kaseki_normal; } void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -184,6 +185,6 @@ void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_aroana_before_disp, NULL, actor); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_kaseki_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index 6eabc9c9..fb19fde2 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -18,7 +18,7 @@ void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) { } } -void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor) { +void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { s16 vv; s16 v = 0; s16* o; @@ -157,11 +157,12 @@ void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_62E &= ~0xC0; actor->_5EC = 0.0f; - actor->_34 = mfish_aroana_normal_process; + actor->_34 = mfish_koi_normal_process; } void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { s16 temp; + //! NOTE: wrong float somewhere in this file, just based on objdiffs colors changing if (ABS(actor->_632) > DEG2SHORT_ANGLE(20) || actor->_640 > 0) { add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.002f + 0.03f, 0.25f, 0.02f); @@ -178,9 +179,9 @@ void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { if (fqrand() < 0.01f) { - mfish_aroana_long_move_process_init(actor); + mfish_koi_long_move_process_init(actor); } else { - mfish_aroana_dummy_process_init(actor); + mfish_koi_dummy_process_init(actor); } } else if (actor->_5E8 > 0.01f && actor->_62E & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) > 0) { @@ -245,16 +246,16 @@ void mfish_koi_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { if (actor->_63E > 0 && ABS(actor->_618.z) < DEG2SHORT_ANGLE(2)) { if (mfish_WallCheck(actor)) { mfish_koi_tail_anim_set(actor, 1); - mfish_aroana_turn_process_init(actor); + mfish_koi_turn_process_init(actor); } else { - mfish_aroana_normal_process_init(actor); + mfish_koi_normal_process_init(actor); } actor->_63E--; } else { if (RANDOM_F(1.0f) < 0.8f) { - mfish_aroana_long_move_process_init(actor); + mfish_koi_long_move_process_init(actor); } else { - mfish_aroana_dummy_process_init(actor); + mfish_koi_dummy_process_init(actor); } } } @@ -352,8 +353,9 @@ void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_koi_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { - // NOT BAD - return; + actor->_5F0 = MAX(MIN(actor->_5E8, 0.5f), 0.05f); + actor->_5EC = 0.0f; + actor->_34 = mfish_koi_long_move_process; } void mfish_koi_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -368,7 +370,7 @@ 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) { xyz_t p; - if ((actor->_34 != mfish_aroana_turn_process && actor->_34 != mfish_aroana_long_move_process) || + if ((actor->_34 != mfish_koi_turn_process && actor->_34 != mfish_koi_long_move_process) || actor->_640 > DEG2SHORT_ANGLE(0)) { add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, GETREG(TAKREG, 0x13) * 0.001f + 0.01f); } else { @@ -380,7 +382,7 @@ void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y) * cos_s(actor->_60C.x); add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); - mfish_move_smooth(actor, game); + mfish_koi_move_smooth(actor, game); mfish_get_flow_vec(&p, actor, game); actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; @@ -389,6 +391,7 @@ 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->_626 = 0; @@ -407,9 +410,9 @@ void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_koi_turn_process_init(actor); } else { mfish_koi_tail_anim_set(actor, 0); - mfish_aroana_normal_process_init(actor); + mfish_koi_normal_process_init(actor); } - } else if (actor->_34 == mfish_aroana_normal_process) { + } else if (actor->_34 == mfish_koi_normal_process) { if ((actor->_62E & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || (actor->_62E & 0x20 && ABS((s16)(DEG2SHORT_ANGLE(180) + actor->_62A - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { @@ -429,7 +432,7 @@ void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.1f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0.05f)); add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.05f)); - mfish_aroana_base_FishMove(actor, gamex); + mfish_koi_base_FishMove(actor, gamex); } void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -503,11 +506,11 @@ void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0.0f, actor->init_data._04 * 0.25f, actor->init_data._24 * 1.5f, 1); - Matrix_RotateY(actor->_60C.x, 1); + Matrix_RotateX(actor->_60C.x, 1); Matrix_RotateZ(MY_CLAMP(-(actor->_618.z >> 2), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); Matrix_translate(0.0f, -actor->init_data._04 * 0.25f, -actor->init_data._24 * 0.5f, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_aroana_before_disp, NULL, actor); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_koi_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_seafish.c_inc b/src/actor/ac_museum_fish_seafish.c_inc index 8e81d40c..9252973b 100644 --- a/src/actor/ac_museum_fish_seafish.c_inc +++ b/src/actor/ac_museum_fish_seafish.c_inc @@ -22,9 +22,12 @@ void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { mfish_seafish_normal_init(actor, game); } -void mfish_seafish_normal_init() { - // NOT BAD - return; +void mfish_seafish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); + actor->_5EC = Rnd_EX_f(0.15f) + 0.15f; + actor->_34 = mfish_seafish_normal; } void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -175,6 +178,7 @@ 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->_34(actor, gamex); actor->_618.x += DEG2SHORT_ANGLE(actor->_5E8 * RANDOM_F(3.0f)); diff --git a/src/actor/ac_museum_fish_tai.c_inc b/src/actor/ac_museum_fish_tai.c_inc index 246f7870..e5a8206d 100644 --- a/src/actor/ac_museum_fish_tai.c_inc +++ b/src/actor/ac_museum_fish_tai.c_inc @@ -270,6 +270,6 @@ void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_tai_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_unagi.c_inc b/src/actor/ac_museum_fish_unagi.c_inc index 14ff9f68..82d6e876 100644 --- a/src/actor/ac_museum_fish_unagi.c_inc +++ b/src/actor/ac_museum_fish_unagi.c_inc @@ -1,64 +1,356 @@ void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + mfish_onefish_ct(actor, gamex); + actor->_624 = 8; + actor->_5A0.x = 225.0f; + actor->_5A0.y = 55.0f; + actor->_5A0.z = 185.0f; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_640 = 0; + actor->_642 = 1; + actor->_5AC = ZeroVec; + actor->_612.x = DEG2SHORT_ANGLE2(25.0f + GETREG(TAKREG, 0x46)); + actor->_612.z = DEG2SHORT_ANGLE(-3); + actor->_646 = 0; + actor->_5AC.y = 0.1f; + actor->_5E8 = 0.05f; + actor->_60C.y = DEG2SHORT_ANGLE(50); + mfish_unagi_rail_move_init(actor, gamex); } -void mfish_unagi_get_next_rail_type() { - // NOT BAD - return; +s16 mfish_unagi_get_next_rail_type(MUSEUM_FISH_PRIVATE_DATA* actor) { + s16 s = actor->_646; + s16 s2 = (s16)RANDOM_F(3.0f); + if (s2 == s) { + if (s2 < 2) { + s2++; + } else { + s2 = 0; + } + } + return s2; } -void mfish_unagi_aim_wind_angle_calc() { - return; +void mfish_unagi_aim_wind_angle_calc(MUSEUM_FISH_PRIVATE_DATA* actor) { + s16 s; + if (actor->_34 == mfish_unagi_normal_to_reverse) { + s = 12; + } else if (actor->_34 == mfish_unagi_reverse_to_normal) { + s = 19; + } else { + s = unagi_rail_num_tbl[actor->_646]; + } + if (actor->_640 > s - 5 || actor->_640 < 3) { + add_calc_short_angle2(&actor->_612.x, (s16)DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x32) + 25.0f), CALC_EASE(0.1f), + DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0)); + } else { + add_calc_short_angle2(&actor->_612.x, (s16)DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x33) + 30.0f), CALC_EASE(0.05f), + DEG2SHORT_ANGLE(0.25f), DEG2SHORT_ANGLE(0)); + } + add_calc_short_angle2(&actor->_612.z, (s16)DEG2SHORT_ANGLE2(-(GETREG(TAKREG, 0x34) * 0.1f + 3.0f)), + CALC_EASE(0.05f), DEG2SHORT_ANGLE(0.025f), DEG2SHORT_ANGLE(0)); } -void mfish_unagi_rail_move_init() { - return; +void mfish_unagi_rail_move_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + s16 target = search_position_angleY(&actor->_5A0, &unagi_rail_tbl[actor->_646][actor->_642]); + actor->_640 = 0; + actor->_642 = 1; + add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(GETREG(TAKREG, 0x24) * 0.01f + 0.5f), + DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f)); + actor->_34 = mfish_unagi_rail_move; } -void mfish_unagi_rail_move() { - return; +void mfish_unagi_rail_move(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + xyz_t* pp = unagi_rail_tbl[actor->_646]; + f32 v = cos_s(actor->_618.z); + f32 v2 = actor->_5E8; + f32 v3; + s16 s; + if (v < 0.0f) { + v = 0.0f; + } + v3 = search_position_distance(&actor->_5A0, &pp[actor->_642]); + if ((f32)(__fabs(chase_xyz_t(&actor->_5A0, &pp[actor->_642], v2))) < 0.008f) { + if (actor->_640 < unagi_rail_num_tbl[actor->_646] - 1) { + actor->_640++; + } else { + actor->_640 = 0; + if (RANDOM_F(1.0f) > 0.5f) { + mfish_unagi_normal_to_reverse_init(actor, gamex); + return; + } + actor->_646 = mfish_unagi_get_next_rail_type(actor); + } + if (actor->_642 < unagi_rail_num_tbl[actor->_646] - 1) { + actor->_642++; + } else { + actor->_642 = 0; + } + v2 -= v3; + if (v2 > 0.0f) { + chase_xyz_t(&actor->_5A0, &pp[actor->_642], v2); + } + } + + mfish_unagi_aim_wind_angle_calc(actor); + s = search_position_angleY(&actor->_5A0, &pp[actor->_642]); + add_calc_short_angle2(&actor->_612.y, s, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_632, actor->_612.x * v, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0)); + add_calc_short_angle2(&actor->_644, actor->_612.z * v, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0)); } -void mfish_unagi_normal_to_reverse_init() { - return; +void mfish_unagi_normal_to_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + s16 target = search_position_angleY(&actor->_5A0, &unagi_normal_to_reverse_rail_pos[actor->_642]); + actor->_640 = 0; + actor->_642 = 1; + add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(GETREG(TAKREG, 0x24) * 0.01f + 0.5f), + DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, 0x2d); + actor->_34 = mfish_unagi_normal_to_reverse; } -void mfish_unagi_normal_to_reverse() { - return; +void mfish_unagi_normal_to_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 v1; + s16 s2; + xyz_t* p = unagi_normal_to_reverse_rail_pos; + f32 c = cos_s(actor->_618.z); + f32 v0 = actor->_5E8; + if (c < 0.0f) { + c = 0.0f; + } + + v1 = search_position_distance(&actor->_5A0, &p[actor->_642]); + if ((f32)__fabs(chase_xyz_t(&actor->_5A0, &p[actor->_642], v0)) < 0.008f) { + if (actor->_640 < 11) { + actor->_640++; + } else { + actor->_640 = 0; + actor->_646 = mfish_unagi_get_next_rail_type(actor); + mfish_unagi_rail_move_reverse_init(actor, gamex); + return; + } + if (actor->_642 < 11) { + actor->_642++; + } else { + actor->_642 = 0; + } + v0 -= v1; + if (v0 > 0.0f) { + chase_xyz_t(&actor->_5A0, &p[actor->_642], v0); + } + } + mfish_unagi_aim_wind_angle_calc(actor); + s2 = search_position_angleY(&actor->_5A0, &p[actor->_642]); + add_calc_short_angle2(&actor->_612.y, s2, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_632, actor->_612.x * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0)); + add_calc_short_angle2(&actor->_644, actor->_612.z * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0)); } -void mfish_unagi_rail_move_reverse_init() { - return; +void mfish_unagi_rail_move_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + xyz_t* p = unagi_rail_tbl[actor->_646]; + s16 target; + actor->_640 = 0; + actor->_642 = unagi_rail_num_tbl[actor->_646] - 1; + target = search_position_angleY(&actor->_5A0, &p[actor->_642]); + add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(0.5f + 0.01f * GETREG(TAKREG, 0x24)), + DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f)); + actor->_34 = mfish_unagi_rail_move_reverse; } -void mfish_unagi_rail_move_reverse() { - return; +void mfish_unagi_rail_move_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 v1; + s16 s2; + xyz_t* p = unagi_rail_tbl[actor->_646]; + f32 c = cos_s(actor->_618.z); + f32 v0 = actor->_5E8; + if (c < 0.0f) { + c = 0.0f; + } + v1 = search_position_distance(&actor->_5A0, &p[actor->_642]); + if ((f32)__fabs(chase_xyz_t(&actor->_5A0, &p[actor->_642], v0)) < 0.008f) { + if (actor->_640 > 1) { + actor->_640--; + } else if (actor->_640 == 1) { + actor->_640 = 0; + if (RANDOM_F(1.0f) > 0.5f) { + mfish_unagi_reverse_to_normal_init(actor, gamex); + return; + } + actor->_646 = mfish_unagi_get_next_rail_type(actor); + } else { + actor->_640 = unagi_rail_num_tbl[actor->_646] + -1; + } + + if (actor->_642 > 0) { + actor->_642--; + } else { + actor->_642 = unagi_rail_num_tbl[actor->_646] + -1; + } + v0 -= v1; + if (v0 > 0.0f) { + chase_xyz_t(&actor->_5A0, &p[actor->_642], v0); + } + } + mfish_unagi_aim_wind_angle_calc(actor); + s2 = search_position_angleY(&actor->_5A0, &p[actor->_642]); + add_calc_short_angle2(&actor->_612.y, s2, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_632, actor->_612.x * c, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0)); + add_calc_short_angle2(&actor->_644, actor->_612.z * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0)); } -void mfish_unagi_reverse_to_normal_init() { - return; +void mfish_unagi_reverse_to_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + s16 target; + actor->_640 = 0; + actor->_642 = 0x12; + target = search_position_angleY(&actor->_5A0, &unagi_reverse_to_normal_rail_pos[actor->_642]); + add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(0.5f + 0.01f * GETREG(TAKREG, 0x24)), + DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f)); + actor->_34 = mfish_unagi_rail_move_reverse; } -void mfish_unagi_reverse_to_normal() { - return; +void mfish_unagi_reverse_to_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + f32 v1; + s16 s2; + xyz_t* p = unagi_reverse_to_normal_rail_pos; + f32 c = cos_s(actor->_618.z); + f32 v0 = actor->_5E8; + if (c < 0.0f) { + c = 0.0f; + } + v1 = search_position_distance(&actor->_5A0, &p[actor->_642]); + if ((f32)__fabs(chase_xyz_t(&actor->_5A0, &p[actor->_642], v0)) < 0.008f) { + if (actor->_640 > 1) { + actor->_640--; + } else if (actor->_640 == 1) { + actor->_640 = 0; + actor->_646 = mfish_unagi_get_next_rail_type(actor); + mfish_unagi_rail_move_init(actor, gamex); + return; + } else { + actor->_640 = 0x12; + } + + if (actor->_642 > 0) { + actor->_642--; + } else { + actor->_642 = 0x12; + } + v0 -= v1; + if (v0 > 0.0f) { + chase_xyz_t(&actor->_5A0, &p[actor->_642], v0); + } + } + mfish_unagi_aim_wind_angle_calc(actor); + s2 = search_position_angleY(&actor->_5A0, &p[actor->_642]); + add_calc_short_angle2(&actor->_612.y, s2, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_632, actor->_612.x * c, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0)); + add_calc_short_angle2(&actor->_644, actor->_612.z * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0)); } void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { + xyz_t p1, p2, p3; + p1 = ZeroVec; + p2 = ZeroVec; + mfish_onefish_mv(actor, gamex); + if (actor->_626-- < 0) { + f32 v; + actor->_5F0 = Rnd_EX_f(actor->init_data._14) + actor->init_data._10; + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->_628 = actor->_626; + v = (actor->_5F0 / (actor->init_data._14 + actor->init_data._10)); + actor->_612.x = DEG2SHORT_ANGLE((GETREG(TAKREG, 0x35) + 75.0f) * v); + actor->_612.z = DEG2SHORT_ANGLE(-(GETREG(TAKREG, 0x36) * 0.1f + 9.0f) * v); + actor->_5AC.y = (GETREG(TAKREG, 0x11) * 0.01f + 0.05f) + RANDOM_F(GETREG(TAKREG, 0x12) * 0.01f + 0.1f); + } - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + if (actor->_626 > actor->_628 - 40) { + actor->_5EC = cos_s(actor->_622) * 0.1f; + add_calc2(&actor->_5E8, actor->_5F0, 0.15f, actor->_5EC); + } else { + if (ABS(actor->_618.z) > ABS(actor->_622)) { + actor->_5EC = cos_s(actor->_622) * 0.05f; + add_calc2(&actor->_5E8, actor->_5AC.y * MAX(0.0f, cos_s(actor->_622)), 0.025f, actor->_5EC); + } + } + + add_calc0(&actor->_5AC.x, 0.25f, 0.5f); + add_calc0(&actor->_5AC.z, 0.25f, 0.5f); + p1.x = sin_s(actor->_612.y) * actor->_5E8; + p1.z = cos_s(actor->_612.y) * actor->_5E8; + p2.x = sin_s(actor->_60C.y) * actor->_5E8; + p2.z = cos_s(actor->_60C.y) * actor->_5E8; + xyz_t_sub(&p2, &p1, &p3); + actor->_5AC.x += p3.x; + actor->_5AC.z += p3.z; + actor->_636 += actor->_644; + + actor->_622 = + add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(GETREG(TAKREG, 0x26) * 0.01f + 0.2f), + (s16)(DEG2SHORT_ANGLE((GETREG(TAKREG, 0x27) + 10.0f) + + (GETREG(TAKREG, 0x28) + 50.0f) * MAX(actor->_5E8, 0.01f)) >> + 1) >> + 1, + DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.125f)); + add_calc_short_angle2(&actor->_38._538.x, actor->_618.z, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.125f)); + add_calc_short_angle2(&actor->_38._538.y, actor->_38._538.x, CALC_EASE2(0.15f), DEG2SHORT_ANGLE(1.25f), + DEG2SHORT_ANGLE(0.125f)); + actor->_34(actor, gamex); + add_calc2(&actor->_5F4, actor->_632 * (GETREG(TAKREG, 0x47) * 0.001f + 0.04f), 0.25f, 91.0f); + Museum_Fish_objchk_pos_set(actor, gamex); } -void mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, +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) { - return; + + MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; + if (joint_num == 1) { + int i = (s16)(actor->_632 * 0.5f * sin_s(actor->_636)); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); + trans->z += actor->_5F4 * sin_s(actor->_636 + DEG2SHORT_ANGLE(90)); + } else if (joint_num == 2) { + int i; + i = (int)((1.0f + 0.01f * GETREG(TAKREG, 0x38)) * actor->_618.z); + i -= DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3c)); + i += (s16)(actor->_632 * 0.75f * sin_s(actor->_636 + DEG2SHORT_ANGLE(90))); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); + } else if (joint_num == 3) { + int i; + i = (int)((1.1f + 0.01f * GETREG(TAKREG, 0x39)) * actor->_38._538.x); + i -= DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3d)); + i += (s16)(actor->_632 * sin_s(actor->_636 + DEG2SHORT_ANGLE(180))); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); + } else if (joint_num == 4) { + int i; + i = (int)((1.2f + 0.01f * GETREG(TAKREG, 0x3a)) * actor->_38._538.y); + i -= DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3e)); + i += (s16)(actor->_632 * 0.75f * sin_s(actor->_636 + DEG2SHORT_ANGLE(270))); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); + } else if (joint_num == 5) { + int i; + i = (int)((1.3f + 0.01f * GETREG(TAKREG, 0x3b)) * actor->_38._538.z); + i -= DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3f)); + i += (s16)(actor->_632 * 0.5f * sin_s(actor->_636)); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); + } + return TRUE; } void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - // NOT BAD - - GAME_PLAY* game = (GAME_PLAY*)gamex; - return; + YET_SKELETON* skele = &actor->_38; + Mtx* mtxp; + if (gamex->frame_counter & 1) { + mtxp = &skele->_70; + } else { + mtxp = &skele->_2b0; + } + OPEN_DISP(gamex->graph); + Matrix_translate(actor->_5A0.x + actor->_5AC.x, actor->_5A0.y, actor->_5A0.z + actor->_5AC.z, 0); + Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); + Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); + Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor); + CLOSE_DISP(gamex->graph); } From 1203cfb49d9d6941c8fb2b99eabb42835553525a Mon Sep 17 00:00:00 2001 From: roeming Date: Wed, 8 Jan 2025 11:01:20 -0500 Subject: [PATCH 26/33] fixing misc mistakes, filling out .h --- include/ac_museum_fish.h | 145 ++++++++++++++---------- src/actor/ac_museum_fish.c | 4 +- src/actor/ac_museum_fish_big_fish.c_inc | 4 +- src/actor/ac_museum_fish_dojou.c_inc | 2 +- src/actor/ac_museum_fish_donko.c_inc | 2 +- src/actor/ac_museum_fish_gupi.c_inc | 2 +- src/actor/ac_museum_fish_hasu.c_inc | 14 +-- src/actor/ac_museum_fish_ito.c_inc | 2 +- src/actor/ac_museum_fish_kingyo.c_inc | 2 +- src/actor/ac_museum_fish_kurage.c_inc | 1 + src/actor/ac_museum_fish_medaka.c_inc | 2 +- src/actor/ac_museum_fish_namazu.c_inc | 2 +- src/actor/ac_museum_fish_unagi.c_inc | 24 ++-- 13 files changed, 114 insertions(+), 92 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index 85d67549..cc7f6b0f 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -170,6 +170,7 @@ typedef struct _MUSEUM_FISH_ACTOR { 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); @@ -190,6 +191,7 @@ 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); @@ -233,6 +235,7 @@ 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); @@ -245,6 +248,7 @@ 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); @@ -261,6 +265,7 @@ BOOL mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int jo 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); @@ -281,15 +286,17 @@ BOOL mfish_koi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint 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(); -void mfish_kaseki_normal(); -void mfish_kaseki_move_wall_smooth(); +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); @@ -302,8 +309,9 @@ 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(); +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); @@ -312,150 +320,165 @@ BOOL mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int j 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(); -void mfish_tai_normal(); -void mfish_tai_turn_init(); -void mfish_tai_turn(); +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(); -void mfish_sfish_normal(); -void mfish_sfish_turn_init(); -void mfish_sfish_turn(); +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(); -void mfish_gupi_normal(); -void mfish_gupi_turn_init(); -void mfish_gupi_turn(); +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(); -void mfish_medaka_normal(); -void mfish_medaka_turn_init(); -void mfish_medaka_turn(); +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(); -void mfish_kingyo_normal(); -void mfish_kingyo_turn_init(); -void mfish_kingyo_turn(); -void mfish_kingyo_peck_init(); -void mfish_kingyo_peck(); +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(); -void mfish_dojou_normal(); -void mfish_dojou_turn_init(); -void mfish_dojou_turn(); +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(); -void mfish_unagi_aim_wind_angle_calc(); -void mfish_unagi_rail_move_init(); -void mfish_unagi_rail_move(); -void mfish_unagi_normal_to_reverse_init(); -void mfish_unagi_normal_to_reverse(); -void mfish_unagi_rail_move_reverse_init(); -void mfish_unagi_rail_move_reverse(); -void mfish_unagi_reverse_to_normal_init(); -void mfish_unagi_reverse_to_normal(); +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(); -void mfish_namazu_normal_process_init(); -void mfish_namazu_normal_process(); +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(); +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(); -void mfish_zarigani_normal_process(); -void mfish_zarigani_wait_process_init(); -void mfish_zarigani_wait_process(); -void mfish_zarigani_stand_process_init(); -void mfish_zarigani_stand_process(); -void mfish_zarigani_jump_process_init(); -void mfish_zarigani_jump_process(); +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(); -void mfish_kurage_normal(); -void mfish_kurage_turn_init(); -void mfish_kurage_turn(); +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(); -void mfish_hasu_dw(); -void mfish_kaeru_ct(); -void mfish_kaeru_mv(); +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(); +void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex); #ifdef __cplusplus } diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index f5c5f4b0..c6bc1c96 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -1158,7 +1158,7 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { } if ((actor->prvFish[0x21]._62E & 1) == 0) { - mfish_hasu_mv((MUSEUM_FISH_PRIVATE_DATA*)&actor->_14788, game); + mfish_hasu_mv(&actor->_14788, game); } for (i = 0; i < 5; i++) { @@ -1201,7 +1201,7 @@ void Museum_Fish_Suisou_draw(ACTOR* actorx, GAME* game, int r5) { CLOSE_DISP(graph); if ((actor->prvFish[0x21]._62E & 1) == 0) { - mfish_hasu_dw((MUSEUM_FISH_PRIVATE_DATA*)&actor->_14788, game); + mfish_hasu_dw(&actor->_14788, game); } } } else if (mfish_cull_check(game, &suisou_pos[4], 215.0f, 25.0f, 0.0f)) { diff --git a/src/actor/ac_museum_fish_big_fish.c_inc b/src/actor/ac_museum_fish_big_fish.c_inc index ae1be141..269d3275 100644 --- a/src/actor/ac_museum_fish_big_fish.c_inc +++ b/src/actor/ac_museum_fish_big_fish.c_inc @@ -35,6 +35,7 @@ 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); @@ -145,6 +146,7 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg, s_xyz* joint1, xyz_t* trans) { + //! NOTE: wrong floats in this function, based on objdiff MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; if (joint_num == 1) { @@ -201,6 +203,6 @@ void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_sfish_before_disp, NULL, actor); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_bfish_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_dojou.c_inc b/src/actor/ac_museum_fish_dojou.c_inc index 4c3767c1..23573aef 100644 --- a/src/actor/ac_museum_fish_dojou.c_inc +++ b/src/actor/ac_museum_fish_dojou.c_inc @@ -204,6 +204,6 @@ void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f * cos_s(s), 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_dojou_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_donko.c_inc b/src/actor/ac_museum_fish_donko.c_inc index eff51ca3..76da14f8 100644 --- a/src/actor/ac_museum_fish_donko.c_inc +++ b/src/actor/ac_museum_fish_donko.c_inc @@ -125,6 +125,6 @@ void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_sfish_before_disp, NULL, actor); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_donko_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_gupi.c_inc b/src/actor/ac_museum_fish_gupi.c_inc index 31a085fc..52792e74 100644 --- a/src/actor/ac_museum_fish_gupi.c_inc +++ b/src/actor/ac_museum_fish_gupi.c_inc @@ -6,7 +6,7 @@ void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5F0 = actor->_5E8; actor->_60C.y = s; actor->_612.y = actor->_60C.y; - actor->_60C.x = DEG2SHORT_ANGLE(RANDOM_F(actor->init_data._30 * 2.0f)); + actor->_60C.x = DEG2SHORT_ANGLE(RANDOM2_F(actor->init_data._30 * 2.0f)); actor->_612.x = actor->_60C.x; actor->_5F4 = 115.f; actor->_5D0.y = 0.0f; diff --git a/src/actor/ac_museum_fish_hasu.c_inc b/src/actor/ac_museum_fish_hasu.c_inc index 27e19f02..7b97c0ed 100644 --- a/src/actor/ac_museum_fish_hasu.c_inc +++ b/src/actor/ac_museum_fish_hasu.c_inc @@ -10,30 +10,28 @@ void mfish_hasu_ct(YET_SKELETON_2* actor, GAME* gamex) { 0.0); } -void mfish_hasu_mv(YET_SKELETON* actor, GAME* gamex) { - cKF_SkeletonInfo_R_play(&actor->_00); +void mfish_hasu_mv(YET_SKELETON_2* actor, GAME* gamex) { + cKF_SkeletonInfo_R_play(&actor->_00._00); } -void mfish_hasu_dw(YET_SKELETON* actor, GAME* gamex) { +void mfish_hasu_dw(YET_SKELETON_2* actor, GAME* gamex) { Mtx* mtxp; if (gamex->frame_counter & 1) { - mtxp = &actor->_70; + mtxp = &actor->_00._70; } else { - mtxp = &actor->_2b0; + mtxp = &actor->_00._2b0; } OPEN_DISP(gamex->graph); Matrix_translate(hasu_pos.x + GETREG(TAKREG, 0x42) * 0.1f, hasu_pos.y, hasu_pos.z + GETREG(TAKREG, 0x43) * 0.1f, 0); Matrix_RotateY(DEG2SHORT_ANGLE(-180), 1); Matrix_scale(0.01f, 0.01f, 0.01f, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &actor->_00, mtxp, NULL, NULL, NULL); + cKF_Si3_draw_R_SV(gamex, &actor->_00._00, mtxp, NULL, NULL, NULL); CLOSE_DISP(gamex->graph); } extern cKF_Animation_R_c cKF_ba_r_act_mus_kaeru_a1_big; void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - //! TODO: grabbed keyframe from ghidra, probably a cast to a larger struct - YET_SKELETON* skele = &actor->_38; YET_SKELETON_2* keyframe = actor->_590; skele->_550[1] = &cKF_ba_r_act_mus_kaeru_a1_big; diff --git a/src/actor/ac_museum_fish_ito.c_inc b/src/actor/ac_museum_fish_ito.c_inc index 907f7f2e..2cddea11 100644 --- a/src/actor/ac_museum_fish_ito.c_inc +++ b/src/actor/ac_museum_fish_ito.c_inc @@ -121,6 +121,6 @@ void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_sfish_before_disp, NULL, actor); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_ito_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_kingyo.c_inc b/src/actor/ac_museum_fish_kingyo.c_inc index 03355c1c..d2633d77 100644 --- a/src/actor/ac_museum_fish_kingyo.c_inc +++ b/src/actor/ac_museum_fish_kingyo.c_inc @@ -254,6 +254,6 @@ void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_gupi_before_disp, NULL, actor); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_kingyo_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_kurage.c_inc b/src/actor/ac_museum_fish_kurage.c_inc index 294bbb0a..1fc0e707 100644 --- a/src/actor/ac_museum_fish_kurage.c_inc +++ b/src/actor/ac_museum_fish_kurage.c_inc @@ -99,6 +99,7 @@ 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 fe0c6428..4429e578 100644 --- a/src/actor/ac_museum_fish_medaka.c_inc +++ b/src/actor/ac_museum_fish_medaka.c_inc @@ -170,6 +170,6 @@ void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_gupi_before_disp, NULL, actor); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_medaka_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_namazu.c_inc b/src/actor/ac_museum_fish_namazu.c_inc index cf72b2ee..75cd51d1 100644 --- a/src/actor/ac_museum_fish_namazu.c_inc +++ b/src/actor/ac_museum_fish_namazu.c_inc @@ -319,6 +319,6 @@ void mfish_namazu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_namazu_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); } diff --git a/src/actor/ac_museum_fish_unagi.c_inc b/src/actor/ac_museum_fish_unagi.c_inc index 82d6e876..3de9b395 100644 --- a/src/actor/ac_museum_fish_unagi.c_inc +++ b/src/actor/ac_museum_fish_unagi.c_inc @@ -204,7 +204,7 @@ void mfish_unagi_reverse_to_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* g target = search_position_angleY(&actor->_5A0, &unagi_reverse_to_normal_rail_pos[actor->_642]); add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(0.5f + 0.01f * GETREG(TAKREG, 0x24)), DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f)); - actor->_34 = mfish_unagi_rail_move_reverse; + actor->_34 = mfish_unagi_reverse_to_normal; } void mfish_unagi_reverse_to_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -247,6 +247,7 @@ 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; @@ -311,27 +312,24 @@ BOOL mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi trans->z += actor->_5F4 * sin_s(actor->_636 + DEG2SHORT_ANGLE(90)); } else if (joint_num == 2) { int i; - i = (int)((1.0f + 0.01f * GETREG(TAKREG, 0x38)) * actor->_618.z); - i -= DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3c)); - i += (s16)(actor->_632 * 0.75f * sin_s(actor->_636 + DEG2SHORT_ANGLE(90))); - joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); + + i = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3c)) - (int)(actor->_618.z * (1.0f + 0.01f * GETREG(TAKREG, 0x38))); + i += (s16)(actor->_632 * 0.75f * sin_s(actor->_636 + DEG2SHORT_ANGLE2(90))); + joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE2(-90), DEG2SHORT_ANGLE2(90)); } else if (joint_num == 3) { int i; - i = (int)((1.1f + 0.01f * GETREG(TAKREG, 0x39)) * actor->_38._538.x); - i -= DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3d)); + i = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3d)) - (int)(actor->_38._538.x * (1.1f + 0.01f * GETREG(TAKREG, 0x39))); i += (s16)(actor->_632 * sin_s(actor->_636 + DEG2SHORT_ANGLE(180))); joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); } else if (joint_num == 4) { int i; - i = (int)((1.2f + 0.01f * GETREG(TAKREG, 0x3a)) * actor->_38._538.y); - i -= DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3e)); + i = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3e)) - (int)(actor->_38._538.y * (1.2f + 0.01f * GETREG(TAKREG, 0x3a))); i += (s16)(actor->_632 * 0.75f * sin_s(actor->_636 + DEG2SHORT_ANGLE(270))); joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); } else if (joint_num == 5) { int i; - i = (int)((1.3f + 0.01f * GETREG(TAKREG, 0x3b)) * actor->_38._538.z); - i -= DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3f)); - i += (s16)(actor->_632 * 0.5f * sin_s(actor->_636)); + i = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3f)) - (int)(actor->_38._538.z * (1.3f + 0.01f * GETREG(TAKREG, 0x3b))); + i += (s16)(actor->_632 * 0.5f * sin_s(actor->_636 + DEG2SHORT_ANGLE(0))); joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90)); } return TRUE; @@ -351,6 +349,6 @@ void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor); + cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_unagi_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); } From 3649463e232d4af8d02d49adc9eeaf1ec66a8ed7 Mon Sep 17 00:00:00 2001 From: roeming Date: Wed, 8 Jan 2025 14:51:41 -0500 Subject: [PATCH 27/33] fix remaining floats --- src/actor/ac_museum_fish.c | 8 ++-- src/actor/ac_museum_fish_afish.c_inc | 2 +- src/actor/ac_museum_fish_aroana.c_inc | 4 +- src/actor/ac_museum_fish_base.c_inc | 16 ++++---- src/actor/ac_museum_fish_bass.c_inc | 14 +++---- src/actor/ac_museum_fish_big_fish.c_inc | 10 ++--- src/actor/ac_museum_fish_dojou.c_inc | 2 +- src/actor/ac_museum_fish_gupi.c_inc | 6 +-- src/actor/ac_museum_fish_hasu.c_inc | 10 ++--- src/actor/ac_museum_fish_ito.c_inc | 2 +- src/actor/ac_museum_fish_kingyo.c_inc | 2 +- src/actor/ac_museum_fish_koi.c_inc | 45 +++++++++++------------ src/actor/ac_museum_fish_kurage.c_inc | 2 +- src/actor/ac_museum_fish_medaka.c_inc | 2 +- src/actor/ac_museum_fish_namazu.c_inc | 2 +- src/actor/ac_museum_fish_seafish.c_inc | 6 +-- src/actor/ac_museum_fish_small_fish.c_inc | 2 +- src/actor/ac_museum_fish_tai.c_inc | 2 +- src/actor/ac_museum_fish_unagi.c_inc | 4 +- 19 files changed, 69 insertions(+), 72 deletions(-) diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index c6bc1c96..c0821c0b 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -918,7 +918,7 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) { } for (i = 0; i < 20; i++) { - actor->_14d50[i] = RANDOMF_RANGE(80, 120); + actor->_14d50[i] = RANDOMF_RANGE(40, 120); actor->_14d78[i] = RANDOMF_RANGE(2, 5); } } @@ -1116,7 +1116,7 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { add_calc2(&actor->prvKusa[j]._540.x, -4.0f, 0.5f, 0.5f); add_calc_short_angle2(&actor->prvKusa[j]._538.y, DEG2SHORT_ANGLE(3.5f), CALC_EASE2(0.1f), 22, 4); } else { - actor->prvKusa[j]._540.x *= 0.9f; + actor->prvKusa[j]._540.x *= 0.98f; add_calc_short_angle2(&actor->prvKusa[j]._538.y, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4); } actor->prvKusa[j]._540.z *= 0.98f; @@ -1139,7 +1139,7 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { actor->_14d78[i]--; actor->_14d50[i] = RANDOMF_RANGE(2, 10); } else { - actor->_14d50[i] = RANDOMF_RANGE(160, 240); + actor->_14d50[i] = RANDOMF_RANGE(80, 240); actor->_14d78[i] = RANDOMF_RANGE(2, 5); } } @@ -1184,7 +1184,7 @@ void Museum_Fish_Suisou_draw(ACTOR* actorx, GAME* game, int r5) { xyz_t* p = &suisou_pos[r5]; if (mfish_cull_check(game, &suisou_pos[r5], 350.0f, 20.0f, 650.0f)) { Matrix_translate(suisou_pos[r5].x, 0, suisou_pos[r5].z, 0); - Matrix_scale(0.1f, 0.1f, 0.1f, 1); + Matrix_scale(0.01f, 0.01f, 0.01f, 1); OPEN_DISP(graph); gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(play->game.graph), diff --git a/src/actor/ac_museum_fish_afish.c_inc b/src/actor/ac_museum_fish_afish.c_inc index e8240b0f..cbf18515 100644 --- a/src/actor/ac_museum_fish_afish.c_inc +++ b/src/actor/ac_museum_fish_afish.c_inc @@ -185,7 +185,7 @@ void mfish_afish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; actor->_5A0.y += actor->_5DC.y; - actor->_5A0.y = MAX(110.f, MIN(60.f, actor->_5A0.y)); + actor->_5A0.y = MAX(60.f, MIN(110.f, actor->_5A0.y)); } void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { diff --git a/src/actor/ac_museum_fish_aroana.c_inc b/src/actor/ac_museum_fish_aroana.c_inc index 3098fa90..d500a8ae 100644 --- a/src/actor/ac_museum_fish_aroana.c_inc +++ b/src/actor/ac_museum_fish_aroana.c_inc @@ -146,7 +146,7 @@ void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), CALC_EASE(0.2f), actor->_618.y >> 1, DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.125f)); if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) { if (actor->_63E > 0) { @@ -206,7 +206,7 @@ void mfish_aroana_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; actor->_5A0.y += actor->_5DC.y; - actor->_5A0.y = MAX(110.f, MIN(60.f, actor->_5A0.y)); + actor->_5A0.y = MAX(60.f, MIN(110.f, actor->_5A0.y)); } void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index 98be75ad..18e89e1f 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -124,7 +124,7 @@ 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.0f), DEG2SHORT_ANGLE(3.75f), + 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), DEG2SHORT_ANGLE(0.25f)); @@ -171,7 +171,7 @@ void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { } } - fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 20); + fishActor->_632 = DEG2SHORT_ANGLE(t * 30.f + 20.0f); } else { if ((s16)(fishActor->_612.y - fishActor->_60C.y) > 0) { fishActor->_612.y += DEG2SHORT_ANGLE(15); @@ -179,7 +179,7 @@ void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { fishActor->_612.y += DEG2SHORT_ANGLE(-15); } - fishActor->_632 = DEG2SHORT_ANGLE((GETREG(TAKREG, 42) + 40.0f) * t + 30); + fishActor->_632 = DEG2SHORT_ANGLE((GETREG(TAKREG, 42) + 40.0f) * t + 30.0f); } if ((s16)(fishActor->_60C.y - fishActor->_612.y) > 0) { fishActor->_636 = DEG2SHORT_ANGLE(0); @@ -354,7 +354,7 @@ void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_632 > DEG2SHORT_ANGLE(15)) { add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.25f), - (((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.04f + 0.01f) * 0.5f, 0.05f); + (((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.04f + 0.1f) * 0.5f, 0.05f); } else if (actor->_626 > actor->_628 - 16) { add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), 0.5f, 0.05f); } else if (dist > 20) { @@ -782,9 +782,9 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Museum_Fish_objchk_pos_set(actor, gamex); // asm 17C a = (+00.0f + p.x); - b = (-45.0f + p.x); + b = (+45.0f + p.x); d = (-17.5f + p.z); - c = (+45.0f + p.z); + c = (-45.0f + p.z); f27 = 76.0f - 6.0f * cos_s(DEG2SHORT_ANGLE2(180.0f * (actor->_5B8.x - p.x) / 55.0f)); f26 = 76.0f - 6.0f * cos_s(DEG2SHORT_ANGLE2((actor->_5B8.x + sin_s(actor->_60C.y) - p.x) * 180.0f / 55.0f)); @@ -1113,8 +1113,8 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { test.y = -test.y - (f->init_data._04 + fj->init_data._04); } - test.y *= 0.2f + (GETREG(TAKREG, 0x11)) * 0.001f; - f22 *= 0.2f + (GETREG(TAKREG, 0x12)) * 0.001f; + test.y *= 0.2f + (GETREG(TAKREG, 0x11)) * 0.0001f; + f22 *= 0.2f + (GETREG(TAKREG, 0x12)) * 0.0001f; f->_62A = atans_table(test.z, test.x); f->_62E |= 0x20; fj->_62A = f->_62A + DEG2SHORT_ANGLE(180); diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc index 407e14b4..cb1202a0 100644 --- a/src/actor/ac_museum_fish_bass.c_inc +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -19,7 +19,7 @@ void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); t = add_calc(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y, 0); - if (fabsf(t) < 0.08f) { + if (fabsf(t) < 0.008f) { add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.03f), DEG2SHORT_ANGLE(1.0f + (0.5f * actor->_5AC.y)) >> 1, 9); } @@ -54,7 +54,7 @@ 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.0f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); + add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f), @@ -70,7 +70,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { ra = RANDOM_F(fishActor->init_data._14) + fishActor->init_data._10; t = (ra) / MAX(fishActor->init_data._14 + fishActor->init_data._10, 1); - if (RANDOM_F(1) > 0.25f && (fishActor->_62E & 0x200) == 0) { + if (RANDOM_F(1.0f) > 0.25f && (fishActor->_62E & 0x200) == 0) { fishActor->_62E |= 0x200; } else { fishActor->_62E &= ~0x200; @@ -116,7 +116,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { } if ((fishActor->_62E & 0x200) == 0) { - fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 20); + fishActor->_632 = DEG2SHORT_ANGLE(t * 10 + 30); } else { fishActor->_632 = DEG2SHORT_ANGLE((GETREG(TAKREG, 42) + 40.0f) * t + 30); } @@ -139,10 +139,10 @@ void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { add_calc2(&actor->_5EC, v + (actor->_5AC.y * 0.02f + 0.03f) * (float)((actor->_632 - DEG2SHORT_ANGLE(20)) / 364), actor->_5AC.y * 0.04f + 0.01f, actor->_5AC.y * 0.02f + 0.01f); - add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(v), actor->_5EC * 0.5f, 0.02f); + add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(v), actor->_5EC * 0.5f, 0.025f); } if (actor->_62E & 0x200) { - add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(GETREG(TAKREG, 73) * 0.1f + 4.0f), + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(GETREG(TAKREG, 73) * 0.01f + 0.5f), (s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 74) * 0.1f + 4.0f) >> 1) >> 1, 45); actor->_636 = actor->_636 + (s16)DEG2SHORT_ANGLE2( (3.0f * actor->_5E8) / (actor->init_data._14 + actor->init_data._10) + 9.0f); @@ -316,7 +316,7 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_34(actor, gamex); if (ABS(actor->_618.z) > ABS(actor->_622)) { - add_calc2(&actor->_5E8, MIN(GETREG(TAKREG, 19) * 0.01f + 1.0f, actor->_5E8), GETREG(TAKREG, 18) * 0.01f + 0.2f, + add_calc2(&actor->_5E8, MIN(GETREG(TAKREG, 19) * 0.1f + 1.0f, actor->_5E8), GETREG(TAKREG, 18) * 0.01f + 0.2f, GETREG(TAKREG, 17) * 0.01f + 0.5f); } diff --git a/src/actor/ac_museum_fish_big_fish.c_inc b/src/actor/ac_museum_fish_big_fish.c_inc index 269d3275..09f6dfb5 100644 --- a/src/actor/ac_museum_fish_big_fish.c_inc +++ b/src/actor/ac_museum_fish_big_fish.c_inc @@ -54,7 +54,7 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_632 > DEG2SHORT_ANGLE(10)) { add_calc0(&actor->_5F0, 1.0f - actor->init_data._18, 0.005f); } else { - add_calc2(&actor->_5F0, -0.25f, CALC_EASE(0.05f), 0.005f); + add_calc2(&actor->_5F0, -0.025f, CALC_EASE(0.05f), 0.005f); } } else if (actor->_600 < 5.0f) { add_calc2(&actor->_5F0, 0.025f, CALC_EASE(0.05f), 0.005f); @@ -112,13 +112,13 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5F0 = actor->init_data._10 + MAX(-actor->init_data._10, RANDOM_F(actor->init_data._14)); if (RANDOM_F(1.0f) < GETREG(TAKREG, 0x46) * 0.01f + 0.5f) { - actor->_642 = DEG2SHORT_ANGLE(RANDOM_F(2.0f) + 3.0f); + actor->_642 = DEG2SHORT_ANGLE(RANDOM2_F(2.0f) + 3.0f); if (actor->_59C == 0x27 || GETREG(TAKREG, 0x39) == 1) { actor->_634 = DEG2SHORT_ANGLE(RANDOM_F(10.f) + 20.f); actor->_640 = DEG2SHORT_ANGLE(RANDOM_F(10.f)); actor->_5AC.z = Rnd_EX_f(1.0f); } else { - actor->_634 = DEG2SHORT_ANGLE(RANDOM_F(2.0f) + 3.0f); + actor->_634 = DEG2SHORT_ANGLE(RANDOM_F(5.0f) + 15.0f); actor->_640 = DEG2SHORT_ANGLE(RANDOM_F(10.f)); actor->_5AC.z = Rnd_EX_f(0.5f); } @@ -133,7 +133,7 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } else { actor->_5F0 = -0.01f; - actor->_5F4 = RANDOM_F(5.0f); + actor->_5F4 = RANDOM2_F(5.0f); actor->_642 = 0; actor->_634 = 0; actor->_640 = 0; @@ -172,7 +172,7 @@ BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi v = 0.035f; } i = joint1->y - (actor->_618.z * 2) + - (int)(actor->_644 * (GETREG(TAKREG, 0x15) * 0.1f + 0.75f) * + (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); diff --git a/src/actor/ac_museum_fish_dojou.c_inc b/src/actor/ac_museum_fish_dojou.c_inc index 23573aef..4686979f 100644 --- a/src/actor/ac_museum_fish_dojou.c_inc +++ b/src/actor/ac_museum_fish_dojou.c_inc @@ -200,7 +200,7 @@ void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24 * (0.5f * cos_s(s) + ABS(cos_s(s))), 1); - Matrix_RotateY(s, 1); + Matrix_RotateX(s, 1); Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f * cos_s(s), 1); Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/actor/ac_museum_fish_gupi.c_inc b/src/actor/ac_museum_fish_gupi.c_inc index 52792e74..df14f402 100644 --- a/src/actor/ac_museum_fish_gupi.c_inc +++ b/src/actor/ac_museum_fish_gupi.c_inc @@ -88,7 +88,7 @@ void mfish_gupi_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) { - mfish_sfish_normal_init(actor, gamex); + mfish_gupi_normal_init(actor, gamex); } } @@ -183,8 +183,8 @@ BOOL mfish_gupi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int join s = joint1->x - (actor->_618.z >> 1); joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30)); joint1->z += (s16)(actor->_618.x * (-1.3f + GETREG(TAKREG, 0x4e) * 0.1f)); - Matrix_scale((GETREG(TAKREG, 0x4b) * 0.01f) * sin_s(actor->_63A) + 0.5f + 1.0f, - (GETREG(TAKREG, 0x4c) * 0.01f) * cos_s(actor->_63A) + 0.1f + 1.0f, 1.0f, 1); + Matrix_scale((GETREG(TAKREG, 0x4b) * 0.01f) * cos_s(actor->_63A) + 0.05f + 1.0f, + (GETREG(TAKREG, 0x4c) * 0.01f) * sin_s(actor->_63A) + 0.1f + 1.0f, 1.0f, 1); } return TRUE; } diff --git a/src/actor/ac_museum_fish_hasu.c_inc b/src/actor/ac_museum_fish_hasu.c_inc index 7b97c0ed..6e5e482d 100644 --- a/src/actor/ac_museum_fish_hasu.c_inc +++ b/src/actor/ac_museum_fish_hasu.c_inc @@ -6,8 +6,8 @@ extern cKF_Animation_R_c cKF_ba_r_obj_museum5_hasu; void mfish_hasu_ct(YET_SKELETON_2* actor, GAME* gamex) { cKF_SkeletonInfo_R_ct(&actor->_00._00, &cKF_bs_r_obj_museum5_hasu, &cKF_ba_r_obj_museum5_hasu, &actor->_00._4F0, &actor->_00._526); - cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->_00._00, &cKF_ba_r_obj_museum5_hasu, NULL, 1.75, - 0.0); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->_00._00, &cKF_ba_r_obj_museum5_hasu, NULL, 0.5f, + 0.0f); } void mfish_hasu_mv(YET_SKELETON_2* actor, GAME* gamex) { @@ -36,11 +36,11 @@ void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { YET_SKELETON_2* keyframe = actor->_590; skele->_550[1] = &cKF_ba_r_act_mus_kaeru_a1_big; cKF_SkeletonInfo_R_ct(&skele->_00, skele->_54C, skele->_550[0], &skele->_4F0, &skele->_514); - cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&skele->_00, skele->_550[0], NULL, 1.75f, 0.0f); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&skele->_00, skele->_550[0], NULL, 0.5f, 0.0f); cKF_SkeletonInfo_R_ct(&keyframe->_00._00, &cKF_bs_r_obj_museum5_hasu, &cKF_ba_r_obj_museum5_hasu, &keyframe->_00._4F0, &keyframe->_00._526); - cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&keyframe->_00._00, &cKF_ba_r_obj_museum5_hasu, NULL, - 1.75f, 0.0f); + cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&keyframe->_00._00, &cKF_ba_r_obj_museum5_hasu, NULL, 0.5f, + 0.0f); actor->_5A0.x = 453.9f; actor->_5A0.y = 116.0f; actor->_5A0.z = 250.4f; diff --git a/src/actor/ac_museum_fish_ito.c_inc b/src/actor/ac_museum_fish_ito.c_inc index 2cddea11..f7431919 100644 --- a/src/actor/ac_museum_fish_ito.c_inc +++ b/src/actor/ac_museum_fish_ito.c_inc @@ -95,7 +95,7 @@ BOOL mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint } else if (joint_num == 2) { int i; i = joint1->y - 2 * actor->_618.z + - (int)(actor->_644 * (GETREG(TAKREG, 0x15) * 0.01f + 0.7f) * + (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); diff --git a/src/actor/ac_museum_fish_kingyo.c_inc b/src/actor/ac_museum_fish_kingyo.c_inc index d2633d77..fe40f357 100644 --- a/src/actor/ac_museum_fish_kingyo.c_inc +++ b/src/actor/ac_museum_fish_kingyo.c_inc @@ -129,7 +129,7 @@ void mfish_kingyo_peck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.y -= DEG2SHORT_ANGLE(90); } } - actor->_612.x += (s16)DEG2SHORT_ANGLE2(RANDOM_F(20.0f)); + actor->_612.x += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(20.0f)); actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; if (actor->_5F0 < 0.1f) { actor->_5F0 = 0.1f; diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index fb19fde2..cb71b1c4 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -164,26 +164,26 @@ 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.002f + 0.03f, 0.25f, - 0.02f); - add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.2f), actor->_5EC * 0.5f); + add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.0035f + 0.03f, 0.35f, + 0.05f); + add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.4f), actor->_5EC * 0.5f); } add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.05f), DEG2SHORT_ANGLE(0.375), DEG2SHORT_ANGLE(0.125)); - temp = DEG2SHORT_ANGLE2((actor->_5E8 * 4.0f) / (actor->init_data._14 + actor->init_data._10) + 6.0f); + temp = DEG2SHORT_ANGLE2((actor->_5E8 * 2.0f) / (actor->init_data._14 + actor->init_data._10) + 3.0f); actor->_636 += temp; actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f)); - add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(2.0f), + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.0f), DEG2SHORT_ANGLE(0.125f)); if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { - if (fqrand() < 0.01f) { + if (fqrand() < 0.8f) { mfish_koi_long_move_process_init(actor); } else { mfish_koi_dummy_process_init(actor); } - } else if (actor->_5E8 > 0.01f && actor->_62E & 0x1e) { + } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) > 0) { actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); } else { @@ -194,8 +194,8 @@ void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } void mfish_koi_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { - s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(55.0f)) + DEG2SHORT_ANGLE(60.0f); - actor->_618.y = ABS(DEG2SHORT_ANGLE2((SHORT2DEG_ANGLE2(s3) / 120.0f) * 2.5f + 2.0f)); + s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(30.0f)) + DEG2SHORT_ANGLE(60.0f); + actor->_618.y = ABS(DEG2SHORT_ANGLE2((SHORT2DEG_ANGLE2(s3) / 120.0f) * 3.0f + 2.0f)); if (actor->_62E & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { s3 = -s3; @@ -240,7 +240,7 @@ void mfish_koi_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), CALC_EASE(0.2f), actor->_618.y >> 1, DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); if (ABS(actor->_622) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) { if (actor->_63E > 0 && ABS(actor->_618.z) < DEG2SHORT_ANGLE(2)) { @@ -301,7 +301,7 @@ void mfish_koi_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_5F4 = MAX(MIN(10, actor->_5F4), -10); } - actor->_632 = DEG2SHORT_ANGLE((fVar8 * 30.0f) + 20.0f); + actor->_632 = DEG2SHORT_ANGLE((fVar8 * 40.0f) + 30.0f); if (qrand() & 0x8000) { actor->_636 = DEG2SHORT_ANGLE(90); @@ -325,24 +325,21 @@ void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.0035f + 0.04f, 0.4f, 0.1f); add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.4f), actor->_5EC * 0.5f); - // add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), 0.5f, 0.05f); - // add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.25f), (((actor->_632 - DEG2SHORT_ANGLE(20)) / - // DEG2SHORT_ANGLE(2)) * 0.04f + 0.01f) * 0.5f, 0.05f); } else if (actor->_626 > actor->_628 - 16) { } - add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(0.375f), DEG2SHORT_ANGLE(0.125f)); + add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.05f), DEG2SHORT_ANGLE(0.375f), DEG2SHORT_ANGLE(0.125f)); actor->_636 += DEG2SHORT_ANGLE(3.f); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(sin_s(actor->_636) * actor->_632), CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.f), DEG2SHORT_ANGLE(0.125f)); if (mfish_peck_wall_check(actor, gamex)) { - if (fqrand() < 0.9f) { - actor->_5E8 = -0.3f - fqrand() * 0.3f; + if (fqrand() < 0.8f) { + actor->_5E8 = -0.05f - fqrand() * 0.1f; actor->_5F0 = 0.05f; actor->_626 = DEG2SHORT_ANGLE(0.33f); } else { - actor->_5E8 = -1.0f - RANDOM_F(0.05f); + actor->_5E8 = -0.1f - RANDOM_F(0.05f); actor->_5F0 = 0.05f; actor->_626 = actor->init_data._2C + (s16)(fqrand() * actor->init_data._2E); // actor->_626 >>= 3; @@ -360,9 +357,9 @@ 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) { GAME_PLAY* play = (GAME_PLAY*)game; - actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(2.f), + actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.f), DEG2SHORT_ANGLE(0.25f)); - add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), + add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.15f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); add_calc2(&actor->_5EC, 0.05f, 0.25f, 0.025f); add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC); @@ -387,7 +384,7 @@ void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; actor->_5A0.y += actor->_5DC.y * 0.05f; - actor->_5A0.y = MAX(110.f, MIN(60.f, actor->_5A0.y)); + actor->_5A0.y = MAX(60.f, MIN(110.f, actor->_5A0.y)); } void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -427,11 +424,11 @@ void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_638 += DEG2SHORT_ANGLE(10); actor->_34(actor, gamex); if (ABS(actor->_618.z) < ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { - add_calc2(&actor->_5E8, MAX(0.2f, actor->_5E8), 0.2f, 0.5f); + add_calc2(&actor->_5E8, MAX(0.1f, actor->_5E8), 0.2f, 0.25f); } - add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.1f), DEG2SHORT_ANGLE(1.5f), + add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE(0.05f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0.05f)); - add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.05f)); + add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.05f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.05f)); mfish_koi_base_FishMove(actor, gamex); } diff --git a/src/actor/ac_museum_fish_kurage.c_inc b/src/actor/ac_museum_fish_kurage.c_inc index 1fc0e707..bdb53505 100644 --- a/src/actor/ac_museum_fish_kurage.c_inc +++ b/src/actor/ac_museum_fish_kurage.c_inc @@ -121,7 +121,7 @@ void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC); add_calc2(&actor->_5AC.y, actor->_5F0, 0.1f, 0.25f); - add_calc2(&actor->_5F0, 0.1f, 0.1f, 0.01f); + add_calc2(&actor->_5F0, 0.05f, 0.05f, 0.01f); add_calc_short_angle2(&actor->_63A, (s16)DEG2SHORT_ANGLE2((GETREG(TAKREG, 0x56) + 13.0f) * 0.5f), CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.25f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_60C.x, (s16)actor->_612.x, CALC_EASE2(GETREG(TAKREG, 0x18) * 0.01f + 0.1f), diff --git a/src/actor/ac_museum_fish_medaka.c_inc b/src/actor/ac_museum_fish_medaka.c_inc index 4429e578..f0889722 100644 --- a/src/actor/ac_museum_fish_medaka.c_inc +++ b/src/actor/ac_museum_fish_medaka.c_inc @@ -80,7 +80,7 @@ void mfish_medaka_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_632 = DEG2SHORT_ANGLE(actor->_5E8 * 15.0f); actor->_636 += DEG2SHORT_ANGLE(7.5f); actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + (s16)(actor->_632 * sin_s(actor->_636)), - CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.05f), DEG2SHORT_ANGLE(7.5f), + CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); if (ABS(actor->_622) < DEG2SHORT_ANGLE(1)) { diff --git a/src/actor/ac_museum_fish_namazu.c_inc b/src/actor/ac_museum_fish_namazu.c_inc index 75cd51d1..89911764 100644 --- a/src/actor/ac_museum_fish_namazu.c_inc +++ b/src/actor/ac_museum_fish_namazu.c_inc @@ -72,7 +72,7 @@ void mfish_namazu_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { void mfish_namazu_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_632 > DEG2SHORT_ANGLE(20)) { - add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.75f), + add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.075f), (0.4f + ((DEG2SHORT_ANGLE(-20) + actor->_632) / DEG2SHORT_ANGLE(2)) * 0.02f) * 0.5f); } add_calc_short_angle2(&actor->_632, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.25f), diff --git a/src/actor/ac_museum_fish_seafish.c_inc b/src/actor/ac_museum_fish_seafish.c_inc index 9252973b..2f2e4967 100644 --- a/src/actor/ac_museum_fish_seafish.c_inc +++ b/src/actor/ac_museum_fish_seafish.c_inc @@ -188,16 +188,16 @@ void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } else { add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, 0.1f); } - add_calc0(&actor->_5F8, 0.2f, 0.05f); + add_calc0(&actor->_5F8, 0.25f, 0.05f); actor->_5F8 = MIN(1.0f, actor->_5F8); if (ABS(actor->_618.z) > DEG2SHORT_ANGLE(15) && ABS(actor->_622) - ABS(actor->_618.z) < 0) { add_calc2(&actor->_5E8, MAX(actor->_5F0, 0.8f), 0.5f, 0.25f); } else if (actor->_626 < actor->_628 - 80) { add_calc2(&actor->_5E8, actor->_5EC, 1.0f - actor->init_data._18, 0.0025f); } else if (actor->_5E8 > actor->_5F0) { - add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.02f); - } else { add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.01f); + } else { + add_calc2(&actor->_5E8, actor->_5F0, 0.2f, 0.02f); } actor->_38._00.frame_control.speed = (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * 0.5f + (GETREG(TAKREG, 0x15) * 0.01f + 1.2f) * actor->_5E8; diff --git a/src/actor/ac_museum_fish_small_fish.c_inc b/src/actor/ac_museum_fish_small_fish.c_inc index 5552cdf8..fe1f0862 100644 --- a/src/actor/ac_museum_fish_small_fish.c_inc +++ b/src/actor/ac_museum_fish_small_fish.c_inc @@ -6,7 +6,7 @@ void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5F0 = actor->_5E8; actor->_60C.y = s; actor->_612.y = actor->_60C.y; - actor->_60C.x = DEG2SHORT_ANGLE(RANDOM_F(actor->init_data._30 * 2.0f)); + actor->_60C.x = DEG2SHORT_ANGLE(RANDOM2_F(actor->init_data._30 * 2.0f)); actor->_612.x = actor->_60C.x; actor->_5F4 = 110.0f; actor->_5D0.y = 0.0f; diff --git a/src/actor/ac_museum_fish_tai.c_inc b/src/actor/ac_museum_fish_tai.c_inc index e5a8206d..4088c33f 100644 --- a/src/actor/ac_museum_fish_tai.c_inc +++ b/src/actor/ac_museum_fish_tai.c_inc @@ -177,7 +177,7 @@ void mfish_tai_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { DEG2SHORT_ANGLE(0.125f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f + GETREG(TAKREG, 0x19) * 0.01f), - (s16)(DEG2SHORT_ANGLE(15.0f + 0.1f * GETREG(TAKREG, 0x1a)) >> 1) >> 1, + (s16)(DEG2SHORT_ANGLE(5.0f + 0.1f * GETREG(TAKREG, 0x1a)) >> 1) >> 1, DEG2SHORT_ANGLE(0.125f)); if (ABS((s16)actor->_622) < DEG2SHORT_ANGLE(3)) { diff --git a/src/actor/ac_museum_fish_unagi.c_inc b/src/actor/ac_museum_fish_unagi.c_inc index 3de9b395..6d84d743 100644 --- a/src/actor/ac_museum_fish_unagi.c_inc +++ b/src/actor/ac_museum_fish_unagi.c_inc @@ -273,8 +273,8 @@ void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } } - add_calc0(&actor->_5AC.x, 0.25f, 0.5f); - add_calc0(&actor->_5AC.z, 0.25f, 0.5f); + add_calc0(&actor->_5AC.x, 0.025f, 0.5f); + add_calc0(&actor->_5AC.z, 0.025f, 0.5f); p1.x = sin_s(actor->_612.y) * actor->_5E8; p1.z = cos_s(actor->_612.y) * actor->_5E8; p2.x = sin_s(actor->_60C.y) * actor->_5E8; From 36a3c615163c1c40e1c323d8e41f9ae2463b222a Mon Sep 17 00:00:00 2001 From: roeming Date: Wed, 8 Jan 2025 20:11:11 -0500 Subject: [PATCH 28/33] just using random_f macro instead of fqrand --- src/actor/ac_museum_fish.c | 186 ---------------------- src/actor/ac_museum_fish_aroana.c_inc | 2 +- src/actor/ac_museum_fish_base.c_inc | 30 ++-- src/actor/ac_museum_fish_bass.c_inc | 2 +- src/actor/ac_museum_fish_gupi.c_inc | 2 +- src/actor/ac_museum_fish_koi.c_inc | 12 +- src/actor/ac_museum_fish_seafish.c_inc | 2 +- src/actor/ac_museum_fish_small_fish.c_inc | 2 +- 8 files changed, 26 insertions(+), 212 deletions(-) diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index c0821c0b..9a6ed958 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -11,192 +11,6 @@ #include "m_rcp.h" #include "ac_gyoei.h" -/* - just some shorthand; D(v) == double, F(v) == float - NOTE: sometimes something is used as a double, but has - the truncated precision of a float. you'll see `D(0.71f)` - - @467 F(2.0f); - @468 F(0.0f); - @469 D(0.5); // sqrtf - @470 D(3.0); // sqrtf - @471 F(0.5f); - @472 F(1.0f); - @526 F(0.025f); - @527 F(0.1f); - @528 F(0.005f); - @529 F(110.0f); - @530 F(60.0f); - @555 F(45.0f); - @556 F(180.0f); - @557 F(5.0f); - @568 D(4294967296.0); // 0x1_00_00_00_00, number of ints? - @570 D(4503601774854144.0); - @587 F(0.8f); - @588 F(0x10000 / 360.f); // deg2short - @603 F(1.2f); - @665 D(0.8f); // double cut at float precision - @666 F(0.05f); - @697 F(10.0f); - @698 F(20.0f); - @699 F(40.0f); - @791 F(0.04f); - @792 F(0.75f); - @793 F(0.01f); - @836 F(75.0f); - @837 F(7.5f); - @838 F(0.7f); - @839 F(0.2f); - @840 F(3.0f); - @920 D(0.9f); // double cut at float precision - @921 D(0.6f); // double cut at float precision - @974 F(0.125f); - @975 F(2.5f); - @976 F(-10.0f); - @1066 D(0.75); - @1067 F(0.4f); - @1068 F(0.25f); - @1069 F(0.9f); - @1070 F(-0.3f); - @1071 F(0.3f); - @1072 F(-0.5f); - @1099 F(65.0f); - @1100 F(0.15f); - @1101 F(15.0f); - @1145 F(4.0f); - @1146 F(0.6f); - @1147 F(-0.2f); - @1315 F(1.5f); - @1344 F(1.25f); - @1475 F(-12.0f); - @1556 F(0.03f); - @1557 F(0.003f); - @1558 F(0.02f); - @1559 F(6.0f); - @1598 F(0.0054931640625f); - @1599 F(120.0f); - @1680 D(0.7f); // double cut at float precision - @1711 F(0.08f); - @1712 F(0.001f); - @1957 F(0.002f); - @1958 D(0.95f); // double cut at float precision - @1997 F(55.0f); - @2301 F(6.5f); - @2377 F(0.0025f); - @2593 F(0.0035f); - @2594 F(0.35f); - @2850 F(-0.05f); - @2851 F(-0.1f); - @2906 D(0.85f); // double cut at float precision - @2937 F(0.0005f); - @2938 F(0.0001f); - @3066 F(1400.0f); - @3228 F(32749.0f); - @3229 F(25.0f); - @3230 D(10.0); - @3391 F(0.045f); - @3475 F(0.008f); - @3476 D(0.97f); // double cut at float precision - @3706 F(9.0f); - @3707 F(7.0f); - @3708 F(8.0f); - @3752 F(1.75f); - @4106 F(5461.0f); - @4261 F(0.035f); - @4262 F(0.07f); - @4470 F(80.0f); - @4626 F(0.16f); - @4774 F(35.0f); - @4775 F(90.0f); - @4929 F(115.0f); - @5269 F(85.0f); - @5270 F(114.5f); - @5325 F(-1.3f); - @5573 F(70.0f); - @5574 F(100.0f); - @5655 F(130.0f); - @6315 F(50.0f); - @6403 F(450.0f); - @6505 F(31.25f); - @6506 F(22.5f); - @6507 F(0.95f); - @6583 F(430.0f); - @6584 F(530.0f); - @6800 F(-0.025f); - @6801 F(-0.01f); - @6874 F(0.015f); - @6875 F(0.06f); - @6876 F(-90.0f); - @6877 F(-180.0f); - @7119 F(225.0f); - @7120 F(185.0f); - @7531 F(91.0f); - @7611 F(1.1f); - @7612 F(1.3f); - @7652 F(1500.0f); - @7653 F(1700.0f); - @7768 D(0.925f); // double cut at float precision - @7769 D(0.895f); // double cut at float precision - @7841 D(0.945f); // double cut at float precision - @7929 F(0.0625f); - @7930 D(0.7100000381469727); - @7931 D(0.965f); // double cut at float precision - @7932 D(0.975f); // double cut at float precision - @8130 F(300.0f); - @8131 F(-0.15f); - @8234 F(53.0f); - @8327 F(-3.0f); - @8410 F(-45.0f); - @8411 D(0.99f); // double cut at float precision - @8418 F(-1.2f); - @8451 F(0.99f); - @8478 F(58.0f); - @8726 F(12.0f); - @8727 F(13.0f); - @8807 F(453.9f); - @8808 F(116.0f); - @8809 F(250.4f); - @8810 F(-1.5f); - @8811 F(-2.0f); - @8883 F(-32.6f); - @8884 F(-26.6f); - @8885 F(-1.0f); - @8886 F(-4.0f); - @8887 F(-2.3f); - @8888 F(-13.7f); - @8889 F(-7.7f); - @8890 F(-32.3f); - @8949 float arr[2] = { 430.0f, 530.f }; - @9156 F(-20.0f); - @9157 F(1000.0f); - @9158 F(-25.0f); - @9159 F(-1000.0f); - @9160 F(-5.0f); - @9247 F(-17.5f); - @9248 F(76.0f); - @9352 F(54.0f); - @9353 F(189.0f); - @9354 F(14.0f); - @9355 F(32768.0f); - @9356 F(21.0f); - @9567 F(3.4028234663852886e+38f); - @9693 F(320.0f); - @9694 F(360.0f); - @9695 F(560.0f); - @9785 F(720.0f); - @10190 F(0.9800000190734863f); - @10191 F(160.0f); - @10226 F(350.0f); - @10227 F(650.0f); - @10228 F(215.0f); - @10240 F(1274.0f); - @10241 F(4369.0f); - @10353 F(240.0f); - @10417 F(340.0f); - @10418 F(580.0f); - @10419 F(200.0f); -*/ - // found useful macros #define MY_MAX(a, b) (((a) >= (b)) ? (a) : (b)) #define MY_CLAMP(v, l, h) MIN(MY_MAX((l), (v)), (h)) diff --git a/src/actor/ac_museum_fish_aroana.c_inc b/src/actor/ac_museum_fish_aroana.c_inc index d500a8ae..5c66ae9f 100644 --- a/src/actor/ac_museum_fish_aroana.c_inc +++ b/src/actor/ac_museum_fish_aroana.c_inc @@ -85,7 +85,7 @@ void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { DEG2SHORT_ANGLE(0.25f)); if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { - if (fqrand() < 0.8f) { + if (RANDOM_F(1.0f) < 0.8f) { mfish_aroana_long_move_process_init(actor); } else { mfish_aroana_dummy_process_init(actor); diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index 18e89e1f..f8823e62 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -260,8 +260,8 @@ void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.7f; - if (fqrand() < 0.2f) { - actor->_63E = fqrand() * 3.0f + 1.0f; + if (RANDOM_F(1.0f) < 0.2f) { + actor->_63E = RANDOM_F(3.0f) + 1.0f; } else { actor->_63E = 0; } @@ -325,11 +325,11 @@ void mfish_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } if (atany < 0) { - actor->_5F4 = actor->_5F4 + fqrand() * 2.5f; + actor->_5F4 = actor->_5F4 + RANDOM_F(2.5f); actor->_5F4 = MAX(MIN(10, actor->_5F4), -10); } else { - actor->_5F4 = actor->_5F4 - fqrand() * 2.5f; + actor->_5F4 = actor->_5F4 - RANDOM_F(2.5f); actor->_5F4 = MAX(MIN(10, actor->_5F4), -10); } @@ -369,12 +369,12 @@ void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { DEG2SHORT_ANGLE(0.25f)); if (mfish_peck_wall_check(actor, gamex)) { - if (fqrand() < 0.9f) { - actor->_5E8 = -0.3f - fqrand() * 0.3f; + if (RANDOM_F(1.0f) < 0.9f) { + actor->_5E8 = -0.3f - RANDOM_F(0.3f); actor->_626 = 10; } else { actor->_5E8 = -0.5f; - actor->_626 = actor->init_data._2C + (s16)(fqrand() * actor->init_data._2E); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); actor->_626 >>= 3; } actor->_628 = actor->_626; @@ -391,7 +391,7 @@ void mfish_ground_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex actor->_626 = (int)(Rnd_EX_f(30.0f) + 15.0f) << 1; if (actor->_34 != mfish_ground_peck_process) { - actor->_63E = fqrand() * 2.0f + 3.0f; + actor->_63E = RANDOM_F(2.0f) + 3.0f; } else { actor->_63E--; } @@ -433,7 +433,7 @@ void mfish_ground_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GAME_PLAY* play = (GAME_PLAY*)gamex; - f32 f = fqrand() * 2; + f32 f = RANDOM_F(2.0f); f32 s; s16 q = qrand(); actor->_5E8 = f; @@ -444,9 +444,9 @@ void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_59C == 4 || actor->_59C == 9) { actor->_5F4 = 0.0f; } else if (actor->_59C == 0x1b) { - actor->_5F4 = fqrand() * 5.0f; + actor->_5F4 = RANDOM_F(5.0f); } else { - actor->_5F4 = fqrand2() * 10.0f; + actor->_5F4 = RANDOM_F(10.0f); } actor->_5D0.y = 0.0; actor->_5AC = ZeroVec; @@ -463,7 +463,7 @@ void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } if (actor->_626-- <= 0) { - actor->_626 = actor->init_data._2C + (s16)(fqrand() * actor->init_data._2E); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); actor->_628 = actor->_626; if (mfish_peck_check(actor, gamex)) { actor->_626 >>= 2; @@ -480,7 +480,7 @@ void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if ((actor->_62E & 0x1E && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || (actor->_62E & 0x20 && ABS((s16)(actor->_62A + DEG2SHORT_ANGLE(180) - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { - actor->_626 = actor->init_data._2C + (s16)(fqrand() * actor->init_data._2E); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); actor->_628 = actor->_626; mfish_turn_process_init(actor); } @@ -512,7 +512,7 @@ void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { YET_SKELETON* s = &actor->_38; cKF_SkeletonInfo_R_ct(&s->_00, s->_54C, s->_550[0], &s->_4F0, &s->_514); cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&s->_00, s->_550[0], NULL, 1.0f, 0.0f); - actor->_626 = actor->init_data._2C + (s16)(actor->init_data._2E * fqrand()); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); actor->_628 = actor->_626; actor->_60C.x = DEG2SHORT_ANGLE(0); actor->_60C.y = DEG2SHORT_ANGLE(-90); @@ -1257,7 +1257,7 @@ BOOL mfish_ground_peck_before_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex if (actor->_34 == mfish_ground_peck_process) { return actor->_63E > 0; } else if ((actor->_630 == 2) && (actor->_5A0.x < p.x + 20.0f) && (actor->_5A0.z > p.z - 10.0f) && - (actor->_5A0.y < (actor->init_data._08 * 0.5f + 75.0f) - (v * 0.15f)) && (fqrand() > 0.2f)) { + (actor->_5A0.y < (actor->init_data._08 * 0.5f + 75.0f) - (v * 0.15f)) && (RANDOM_F(1.0f) > 0.2f)) { return TRUE; } diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc index cb1202a0..8d9ee3f1 100644 --- a/src/actor/ac_museum_fish_bass.c_inc +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -306,7 +306,7 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (((actor->_62E & 0x1e) && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || ((actor->_62E & 0x20) && ABS((s16)((actor->_62A - DEG2SHORT_ANGLE(-180)) - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { - actor->_626 = actor->init_data._2C + (s16)(actor->init_data._2E * fqrand()); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); actor->_628 = actor->_626; mfish_bass_tail_anim_set(actor, 1); mfish_bass_turn_process_init(actor); diff --git a/src/actor/ac_museum_fish_gupi.c_inc b/src/actor/ac_museum_fish_gupi.c_inc index df14f402..b892770d 100644 --- a/src/actor/ac_museum_fish_gupi.c_inc +++ b/src/actor/ac_museum_fish_gupi.c_inc @@ -59,7 +59,7 @@ void mfish_gupi_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } else if (actor->_5F8 > actor->init_data._08 * 30.f) { s16 s; //! BUG: unused? - fqrand(); + RANDOM_F(1.0f); s = search_position_angleY(&suisou_pos[actor->_630], &actor->_5A0); actor->_5F8 = 0.0f; actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90.0)); diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index cb71b1c4..57695282 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -178,7 +178,7 @@ void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { DEG2SHORT_ANGLE(0.125f)); if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { - if (fqrand() < 0.8f) { + if (RANDOM_F(1.0f) < 0.8f) { mfish_koi_long_move_process_init(actor); } else { mfish_koi_dummy_process_init(actor); @@ -293,11 +293,11 @@ void mfish_koi_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } if (atany < 0) { - actor->_5F4 = actor->_5F4 + fqrand() * 2.5f; + actor->_5F4 = actor->_5F4 + RANDOM_F(2.5f); actor->_5F4 = MAX(MIN(10, actor->_5F4), -10); } else { - actor->_5F4 = actor->_5F4 - fqrand() * 2.5f; + actor->_5F4 = actor->_5F4 - RANDOM_F(2.5f); actor->_5F4 = MAX(MIN(10, actor->_5F4), -10); } @@ -334,14 +334,14 @@ void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.f), DEG2SHORT_ANGLE(0.125f)); if (mfish_peck_wall_check(actor, gamex)) { - if (fqrand() < 0.8f) { - actor->_5E8 = -0.05f - fqrand() * 0.1f; + if (RANDOM_F(1.0f) < 0.8f) { + actor->_5E8 = -0.05f - RANDOM_F(0.1f); actor->_5F0 = 0.05f; actor->_626 = DEG2SHORT_ANGLE(0.33f); } else { actor->_5E8 = -0.1f - RANDOM_F(0.05f); actor->_5F0 = 0.05f; - actor->_626 = actor->init_data._2C + (s16)(fqrand() * actor->init_data._2E); + actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); // actor->_626 >>= 3; } actor->_628 = actor->_626; diff --git a/src/actor/ac_museum_fish_seafish.c_inc b/src/actor/ac_museum_fish_seafish.c_inc index 2f2e4967..2e4a8d86 100644 --- a/src/actor/ac_museum_fish_seafish.c_inc +++ b/src/actor/ac_museum_fish_seafish.c_inc @@ -124,7 +124,7 @@ void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } } else if (actor->_626 < 0) { // r in wrong register here - r = fqrand(); + r = RANDOM_F(1.0f); actor->_612.y = actor->_60C.y; if ((actor->_608 - actor->_604) * cos_s(actor->_60C.y) < 0.0f) { actor->_612.y += (s16)(r * actor->init_data._30); diff --git a/src/actor/ac_museum_fish_small_fish.c_inc b/src/actor/ac_museum_fish_small_fish.c_inc index fe1f0862..730952e0 100644 --- a/src/actor/ac_museum_fish_small_fish.c_inc +++ b/src/actor/ac_museum_fish_small_fish.c_inc @@ -63,7 +63,7 @@ void mfish_sfish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } else if (actor->_5F8 > actor->init_data._08 * 30.f) { s16 s; //! BUG: unused? - fqrand(); + RANDOM_F(1.0f); s = search_position_angleY(&suisou_pos[actor->_630], &actor->_5A0); actor->_5F8 = 0.0f; actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90.0)); From cd8a1d5f1e5357a19777a10c883ea2be2d1f2421 Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 9 Jan 2025 09:11:19 -0500 Subject: [PATCH 29/33] renaming some fish variables --- include/ac_museum_fish.h | 49 +-- src/actor/ac_museum_fish.c | 215 ++++++----- src/actor/ac_museum_fish_afish.c_inc | 62 ++-- src/actor/ac_museum_fish_aroana.c_inc | 68 ++-- src/actor/ac_museum_fish_base.c_inc | 415 +++++++++++----------- src/actor/ac_museum_fish_bass.c_inc | 90 ++--- src/actor/ac_museum_fish_big_fish.c_inc | 48 +-- src/actor/ac_museum_fish_dojou.c_inc | 41 +-- src/actor/ac_museum_fish_donko.c_inc | 37 +- src/actor/ac_museum_fish_gupi.c_inc | 52 +-- src/actor/ac_museum_fish_hasu.c_inc | 18 +- src/actor/ac_museum_fish_ito.c_inc | 19 +- src/actor/ac_museum_fish_kaseki.c_inc | 31 +- src/actor/ac_museum_fish_kingyo.c_inc | 76 ++-- src/actor/ac_museum_fish_koi.c_inc | 93 ++--- src/actor/ac_museum_fish_kurage.c_inc | 76 ++-- src/actor/ac_museum_fish_medaka.c_inc | 54 +-- src/actor/ac_museum_fish_namazu.c_inc | 72 ++-- src/actor/ac_museum_fish_seafish.c_inc | 77 ++-- src/actor/ac_museum_fish_small_fish.c_inc | 62 ++-- src/actor/ac_museum_fish_tai.c_inc | 86 ++--- src/actor/ac_museum_fish_unagi.c_inc | 75 ++-- src/actor/ac_museum_fish_zarigani.c_inc | 80 +++-- 23 files changed, 971 insertions(+), 925 deletions(-) diff --git a/include/ac_museum_fish.h b/include/ac_museum_fish.h index cc7f6b0f..180e7230 100644 --- a/include/ac_museum_fish.h +++ b/include/ac_museum_fish.h @@ -5,6 +5,7 @@ #include "m_actor.h" #include "c_keyframe.h" #include "libu64/u64types.h" +#include "ac_gyoei.h" #ifdef __cplusplus extern "C" { @@ -23,7 +24,7 @@ typedef void (*PRIV_FISH_PROCESS)(struct _FISH_PRIVATE_DATA*, GAME*); // unsure temp structs typedef struct _MUSEUM_FISH_INIT_DATA { - f32 _00; + f32 renderScale; f32 _04; f32 _08; f32 _0C; @@ -34,8 +35,8 @@ typedef struct _MUSEUM_FISH_INIT_DATA { f32 _20; f32 _24; f32 _28; - s16 _2C; - s16 _2E; + s16 activeFramesMin; + s16 activeFramesRange; s16 _30; } MUSEUM_FISH_INIT_DATA; // size: 0x34 @@ -81,17 +82,19 @@ typedef struct _YET_SKELETON_2 { 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 _34; // size:4 + PRIV_FISH_PROCESS currentProcess; // size:4 YET_SKELETON _38; YET_SKELETON_2* _590; struct _FISH_PRIVATE_DATA* _594; struct _FISH_PRIVATE_DATA* _598; - s32 _59C; // fish num - xyz_t _5A0; + MUSEUM_FISH_TYPE fishIDEnum; + xyz_t position; xyz_t _5AC; xyz_t _5B8; artificial_padding(0x5B8, 0x5D0, xyz_t); @@ -113,12 +116,12 @@ typedef struct _FISH_PRIVATE_DATA { s16 _620; s16 _622; s16 _624; - s16 _626; - s16 _628; + s16 activityFrameCount; + s16 savedActivityFrameCount; s16 _62A; s16 _62C; - s16 _62E; - s16 _630; + s16 _62E_flags; + s16 group; s16 _632; s16 _634; s16 _636; @@ -143,13 +146,13 @@ typedef struct _FISH_DISPLAY_MSG_INFO { typedef struct _MUSEUM_FISH_ACTOR { ACTOR actor; // offset: 0, size: 0x174 int _174; - MUSEUM_FISH_PRIVATE_DATA prvFish[40]; // offset: 0x178 size: 0xFB48 - MUSEUM_FISH_KUSA_DATA prvKusa[14]; // offset: 0xFCB8 size: 0x4AD0 - YET_SKELETON_2 _14788; // offset: 0x14788 size: 0x570 + 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 _14d08[2]; + 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 @@ -160,15 +163,15 @@ typedef struct _MUSEUM_FISH_ACTOR { s16 _14daa[5]; s16 _14db4; - s16 _14db6; // offset: 0x14db6, size: 2 - s16 _14db8; // offset: 0x14db8, size: 2 - s16 _14dba; // offset: 0x14dba, size: 2 - s16 _14dbc[2]; // offset: 0x14dbc, size: 4 - s16 _14dc0; // offset: 0x14dc0, size: 2 - s16 _14dc2; // offset: 0x14dc2, size: 2 - s16 _14dc4; // offset: 0x14dc4, size: 2 - s16 _14dc8; // offset: 0x14dc8, size: 2 -} MUSEUM_FISH_ACTOR; // size 14DCA + 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); diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index 9a6ed958..f8d898a0 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -670,22 +670,22 @@ float kusa_start_frame[14] = { // clang-format on void Museum_Fish_Prv_data_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, int fishNum, int r6) { - actor->_59C = fishNum; + actor->fishIDEnum = fishNum; actor->init_data = mfish_init_data[fishNum]; - actor->_630 = mfish_group_tbl[fishNum]; + actor->group = mfish_group_tbl[fishNum]; - if (actor->_630 >= 0) { - actor->_5A0 = suisou_pos[actor->_630]; + if (actor->group >= 0) { + actor->position = suisou_pos[actor->group]; } else { - actor->_5A0 = ZeroVec; + actor->position = ZeroVec; } - actor->_5A0.y = mfish_init_data[fishNum]._0C + RANDOM2_F(10); + actor->position.y = mfish_init_data[fishNum]._0C + RANDOM2_F(10); if (r6 == 1) { - actor->_5A0.x += RANDOM2_F(90); - actor->_5A0.z += RANDOM2_F(90); + actor->position.x += RANDOM2_F(90); + actor->position.z += RANDOM2_F(90); } - actor->_34 = &mfish_normal_process; + actor->currentProcess = &mfish_normal_process; mfish_ct[fishNum](actor, game); } @@ -714,19 +714,19 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) { // actor->_101f0[i * 2 + 2] = qrand(); } - if (mMmd_FishInfo(0x21)) { - actor->prvFish[0x21]._590 = &actor->_14788; + if (mMmd_FishInfo(aGYO_TYPE_FROG)) { + actor->prvFish[aGYO_TYPE_FROG]._590 = &actor->_14788; } else { mfish_hasu_ct(&actor->_14788, gamex); } prv = actor->prvFish; - for (i = 0; i < 40; i++, prv++) { - prv->_62E &= ~1; + for (i = 0; i < aGYO_TYPE_NUM; i++, prv++) { + prv->_62E_flags &= ~1; if (mMmd_FishInfo(i)) { prv->_38._54C = mfish_model_tbl[i]; prv->_38._550[0] = mfish_anime_init_tbl[i]; - prv->_62E |= 1; + prv->_62E_flags |= 1; Museum_Fish_Prv_data_init(prv, gamex, i, 1); } } @@ -871,20 +871,15 @@ void Museum_Fish_Talk_process(ACTOR* actorx, GAME* game) { } } } - } else { - if (chkTrigger(BUTTON_A) != 0 && mDemo_Get_talk_actor() == 0) { - int i; - for (i = 0; i < 5; i++) { - if (Museum_Fish_Check_Talk_Distance(game, i)) { - Museum_Fish_Set_MsgFishInfo(actorx, i); - mDemo_Request(8, actorx, &Museum_Fish_set_talk_info); - } + } else if (chkTrigger(BUTTON_A) != 0 && mDemo_Get_talk_actor() == 0) { + int i; + for (i = 0; i < 5; i++) { + if (Museum_Fish_Check_Talk_Distance(game, i)) { + Museum_Fish_Set_MsgFishInfo(actorx, i); + mDemo_Request(8, actorx, &Museum_Fish_set_talk_info); } } } - // line 16C - - return; } void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { @@ -908,18 +903,18 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { p = player->actor_class.world.position; if (actor->_14db4 == 3) { - actor->prvFish[0x17]._626 = 0; - actor->prvFish[0x1e]._626 = 0; - actor->prvFish[0x18]._626 = 0; + actor->prvFish[aGYO_TYPE_GOLDFISH].activityFrameCount = 0; + actor->prvFish[aGYO_TYPE_POPEYED_GOLDFISH].activityFrameCount = 0; + actor->prvFish[aGYO_TYPE_PIRANHA].activityFrameCount = 0; } else if (actor->_14db4 == 0) { - actor->prvFish[2]._626 = 20; - actor->prvFish[3]._626 = 20; + actor->prvFish[aGYO_TYPE_CARP].activityFrameCount = 20; + actor->prvFish[aGYO_TYPE_KOI].activityFrameCount = 20; } - for (i = 0; i < 40; i++, prv++) { - f32 v = search_position_distanceXZ(&p, &prv->_5A0); - if (actor->_14db4 == prv->_630 && v < 60.0f) { - prv->_626 = RANDOM_F(60); + for (i = 0; i < aGYO_TYPE_NUM; i++, prv++) { + f32 v = search_position_distanceXZ(&p, &prv->position); + if (actor->_14db4 == prv->group && v < 60.0f) { + prv->activityFrameCount = RANDOM_F(60); } } } @@ -964,14 +959,14 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) { { // needs a new variable MUSEUM_FISH_PRIVATE_DATA* prv = actor->prvFish; - for (i = 0; i < 40; i++, prv++) { - if (prv->_62E & 1) { + for (i = 0; i < aGYO_TYPE_NUM; i++, prv++) { + if (prv->_62E_flags & 1) { mfish_mv[i](prv, game); } } } - if ((actor->prvFish[0x21]._62E & 1) == 0) { + if ((actor->prvFish[aGYO_TYPE_FROG]._62E_flags & 1) == 0) { mfish_hasu_mv(&actor->_14788, game); } @@ -1014,7 +1009,7 @@ void Museum_Fish_Suisou_draw(ACTOR* actorx, GAME* game, int r5) { CLOSE_DISP(graph); - if ((actor->prvFish[0x21]._62E & 1) == 0) { + if ((actor->prvFish[aGYO_TYPE_FROG]._62E_flags & 1) == 0) { mfish_hasu_dw(&actor->_14788, game); } } @@ -1076,6 +1071,7 @@ void Museum_Fish_Kusa_Draw(ACTOR* actorx, GAME* game, int r5) { extern EVW_ANIME_DATA obj_suisou1_evw_anime, obj_museum5_evw_anime; extern Gfx act_mus_fish_set_mode; + void Museum_Fish_Actor_draw(ACTOR* actorx, GAME* game) { MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; GAME_PLAY* play = (GAME_PLAY*)game; @@ -1099,26 +1095,28 @@ void Museum_Fish_Actor_draw(ACTOR* actorx, GAME* game) { CLOSE_DISP(graph); prv = actor->prvFish; - for (i = 0; i < 40; i++, prv++) { - if (prv->_62E & 1 && prv->_59C != 0x23 && prv->_59C != 0x21 && + for (i = 0; i < aGYO_TYPE_NUM; i++, prv++) { + if (prv->_62E_flags & 1 && prv->fishIDEnum != aGYO_TYPE_JELLYFISH && prv->fishIDEnum != aGYO_TYPE_FROG && mfish_cull_check(game, &prv->_5B8, prv->init_data._08 + 50.0f, prv->init_data._08 + 10.0f, prv->init_data._08 + 10.0f)) { mfish_dw[i](prv, game); } } - if (actor->prvFish[0x23]._62E & 1 && - mfish_cull_check(game, &actor->prvFish[0x23]._5A0, actor->prvFish[0x23].init_data._08 + 10.0f, - actor->prvFish[0x23].init_data._04, actor->prvFish[0x23].init_data._04)) { - mfish_dw[0x23](&actor->prvFish[0x23], game); + if (actor->prvFish[aGYO_TYPE_JELLYFISH]._62E_flags & 1 && + mfish_cull_check(game, &actor->prvFish[aGYO_TYPE_JELLYFISH].position, + actor->prvFish[aGYO_TYPE_JELLYFISH].init_data._08 + 10.0f, + actor->prvFish[aGYO_TYPE_JELLYFISH].init_data._04, + actor->prvFish[aGYO_TYPE_JELLYFISH].init_data._04)) { + mfish_dw[0x23](&actor->prvFish[aGYO_TYPE_JELLYFISH], game); } if (!GETREG(TAKREG, 82)) { mfish_normal_light_set(actorx, game); } - if (actor->prvFish[0x21]._62E & 1) { - mfish_dw[0x21](&actor->prvFish[0x21], game); + if (actor->prvFish[aGYO_TYPE_FROG]._62E_flags & 1) { + mfish_dw[aGYO_TYPE_FROG](&actor->prvFish[aGYO_TYPE_FROG], game); } if (GETREG(TAKREG, 82) == 1) { @@ -1148,88 +1146,87 @@ BOOL mfish_cull_check(GAME* game, xyz_t* worldPos, f32 x, f32 y, f32 _y) { return FALSE; } -void mfish_point_ligh_pos_get(ACTOR* actorx, GAME* game, int r5) { +void mfish_point_ligh_pos_get(ACTOR* actorx, GAME* game, int lightIndex) { MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; GAME_PLAY* play = (GAME_PLAY*)game; - f32 a, b, c, d; - xyz_t _30; - xyz_t _24; - xyz_t _18; - xyz_t _0c; + f32 extentRight, extentLeft, extentUp, extentDown; + xyz_t playerPosition, vecToPlayer, lightPos, tankPos; - int r; - f32 v; + int tankIndex; + f32 distLightToPlayer; PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); - _30 = player->actor_class.world.position; + playerPosition = player->actor_class.world.position; - if (_30.z < 100.0f) { - r = 4; - } else if (_30.z > 100.0f && _30.z < 340.0f) { - if (r5 == 0) { - r = 0; + if (playerPosition.z < 100.0f) { + tankIndex = 4; + } else if (playerPosition.z > 100.0f && playerPosition.z < 340.0f) { + if (lightIndex == 0) { + tankIndex = 0; } else { - r = 1; + tankIndex = 1; } - } else if (_30.z > 340.0f && _30.z < 580.0f) { - if (r5 == 0) { - r = 2; + } else if (playerPosition.z > 340.0f && playerPosition.z < 580.0f) { + if (lightIndex == 0) { + tankIndex = 2; } else { - r = 3; + tankIndex = 3; } } else { return; } - if (r < 4) { - a = 60.0f; - b = 60.0f; - c = 60.0f; - d = 60.0f; - _0c = suisou_pos[r]; - _18 = _30; + if (tankIndex < 4) { + extentRight = 60.0f; + extentLeft = 60.0f; + extentUp = 60.0f; + extentDown = 60.0f; + tankPos = suisou_pos[tankIndex]; + lightPos = playerPosition; } else { - a = 200.0f; - c = 35.0f; - d = 20.0f; - b = 200.0f; - _0c = suisou_pos[r]; - _18 = _30; - if (r5 == 0) { - _18.x -= d; + extentRight = 200.0f; + extentLeft = 200.0f; + extentUp = 35.0f; + extentDown = 20.0f; + tankPos = suisou_pos[tankIndex]; + lightPos = playerPosition; + if (lightIndex == 0) { + lightPos.x -= extentDown; } else { - _18.x += d; + lightPos.x += extentDown; } } - if (_18.x > _0c.x + a) { - _18.x = _0c.x + a; - } else if (_18.x < _0c.x - b) { - _18.x = _0c.x - b; + if (lightPos.x > tankPos.x + extentRight) { + lightPos.x = tankPos.x + extentRight; + } else if (lightPos.x < tankPos.x - extentLeft) { + lightPos.x = tankPos.x - extentLeft; } - if (_18.z > _0c.z + c) { - _18.z = _0c.z + c; - } else if (_18.z < _0c.z - d) { - _18.z = _0c.z - d; + if (lightPos.z > tankPos.z + extentUp) { + lightPos.z = tankPos.z + extentUp; + } else if (lightPos.z < tankPos.z - extentDown) { + lightPos.z = tankPos.z - extentDown; } - actor->_14d08[r5] = _18; + actor->lightPosition[lightIndex] = lightPos; - xyz_t_sub(&_18, &_30, &_24); + xyz_t_sub(&lightPos, &playerPosition, &vecToPlayer); - v = sqrtf(_24.x * _24.x + _24.z * _24.z); + distLightToPlayer = sqrtf(SQ(vecToPlayer.x) + SQ(vecToPlayer.z)); - actor->_14dbc[r5] = (u8)(((60.0f - CLAMP(v, 0.0f, 60.0f)) / 60.0f) * 55.0f); + actor->lightPower[lightIndex] = (u8)(((60.0f - CLAMP(distLightToPlayer, 0.0f, 60.0f)) / 60.0f) * 55.0f); } -void mfish_point_light_ct(ACTOR* actorx, GAME* game) { - MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; +void mfish_point_light_ct(ACTOR* _actor, GAME* game) { + MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)_actor; GAME_PLAY* play = (GAME_PLAY*)game; + // fill in the light positions mfish_point_ligh_pos_get(&actor->actor, game, 0); mfish_point_ligh_pos_get(&actor->actor, game, 1); - actor->_14db8 = mEnv_ReservePointLight(play, &actor->_14d08[0], 0, 0x96, 0xff, (u8)actor->_14dbc[0]); - actor->_14dba = mEnv_ReservePointLight(play, &actor->_14d08[1], 0, 0x96, 0xff, (u8)actor->_14dbc[1]); + // make the lights + actor->lightID1 = mEnv_ReservePointLight(play, &actor->lightPosition[0], 0, 150, 255, (u8)actor->lightPower[0]); + actor->lightID2 = mEnv_ReservePointLight(play, &actor->lightPosition[1], 0, 150, 255, (u8)actor->lightPower[1]); actor->_14dc0 = 0; } @@ -1237,12 +1234,12 @@ void mfish_point_light_dt(ACTOR* actorx, GAME* game) { MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; GAME_PLAY* play = (GAME_PLAY*)game; - if (actor->_14db8 != -1) { - mEnv_CancelReservedPointLight(actor->_14db8, (GAME_PLAY*)game); + if (actor->lightID1 != -1) { + mEnv_CancelReservedPointLight(actor->lightID1, (GAME_PLAY*)game); } - if (actor->_14dba != -1) { - mEnv_CancelReservedPointLight(actor->_14dba, (GAME_PLAY*)game); + if (actor->lightID2 != -1) { + mEnv_CancelReservedPointLight(actor->lightID2, (GAME_PLAY*)game); } } @@ -1252,27 +1249,27 @@ void mfish_point_light_mv(MUSEUM_FISH_ACTOR* actor, GAME* game) { mfish_point_ligh_pos_get(&actor->actor, game, 0); mfish_point_ligh_pos_get(&actor->actor, game, 1); - mEnv_OperateReservedPointLight(actor->_14db8, &actor->_14d08[0], 0, 0x96, 0xff, (u8)actor->_14dbc[0]); - mEnv_OperateReservedPointLight(actor->_14dba, &actor->_14d08[1], 0, 0x96, 0xff, (u8)actor->_14dbc[1]); - actor->actor.world.position = actor->_14d08[0]; + mEnv_OperateReservedPointLight(actor->lightID1, &actor->lightPosition[0], 0, 150, 255, (u8)actor->lightPower[0]); + mEnv_OperateReservedPointLight(actor->lightID2, &actor->lightPosition[1], 0, 150, 255, (u8)actor->lightPower[1]); + actor->actor.world.position = actor->lightPosition[0]; actor->actor.world.position.x = sin_s(actor->_14dc0) * 200.0f; actor->actor.world.position.y = sin_s(actor->_14dc0 * 2) * 10.0f; actor->actor.world.position.z = cos_s(actor->_14dc0) * 200.0f; actor->_14dc0 += DEG2SHORT_ANGLE(1.5f); } -void mfish_normal_light_set(ACTOR* actor, GAME* _game) { +void mfish_normal_light_set(ACTOR* actor, GAME* game) { LightsN* lights; - GAME_PLAY* game = (GAME_PLAY*)_game; + GAME_PLAY* play = (GAME_PLAY*)game; xyz_t lightPos; lightPos.x = 320; lightPos.y = 0; lightPos.z = 240; - lights = Global_light_read(&game->global_light, game->game.graph); - LightsN_list_check(lights, game->global_light.list, &lightPos); - LightsN_disp(lights, game->game.graph); + lights = Global_light_read(&play->global_light, play->game.graph); + LightsN_list_check(lights, play->global_light.list, &lightPos); + LightsN_disp(lights, play->game.graph); } #include "../src/actor/ac_museum_fish_base.c_inc" diff --git a/src/actor/ac_museum_fish_afish.c_inc b/src/actor/ac_museum_fish_afish.c_inc index cbf18515..2ed81fb0 100644 --- a/src/actor/ac_museum_fish_afish.c_inc +++ b/src/actor/ac_museum_fish_afish.c_inc @@ -4,14 +4,14 @@ void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_base_ct(actor, gamex); actor->_5EC = 0.0f; actor->_5E8 = actor->init_data._10; - actor->_34 = mfish_afish_normal_process; + actor->currentProcess = mfish_afish_normal_process; actor->_624 = 0; } void mfish_afish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { f32 v; actor->_634 = mfish_get_hide_camera_angle(actor); - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { if ((s16)(actor->_612.y - actor->_62C) > 0) { actor->_634 = actor->_62C + DEG2SHORT_ANGLE(90); } else { @@ -24,7 +24,7 @@ void mfish_afish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5F0 = MIN(MAX(actor->init_data._10, 0.1f), actor->_5E8); actor->_5EC = 0.0f; - actor->_34 = mfish_afish_dummy_process; + actor->currentProcess = mfish_afish_dummy_process; } void mfish_afish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -43,7 +43,7 @@ void mfish_afish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5F0 = v; } actor->_5F4 = Rnd_EX_fx(10.0f) * v2; - actor->_612.x = DEG2SHORT_ANGLE((actor->_5F4 + actor->init_data._0C - actor->_5A0.y) * -12.0f); + actor->_612.x = DEG2SHORT_ANGLE((actor->_5F4 + actor->init_data._0C - actor->position.y) * -12.0f); actor->_612.x = CLAMP(actor->_612.x, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60)); actor->_5D0.y = 0.0f; @@ -73,9 +73,9 @@ void mfish_afish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_636 = DEG2SHORT_ANGLE(-180); } - actor->_62E &= ~0xC0; + actor->_62E_flags &= ~0xC0; actor->_5EC = 0.0f; - actor->_34 = mfish_afish_normal_process; + actor->currentProcess = mfish_afish_normal_process; } void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -95,7 +95,7 @@ void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_5E8 < 0.01f && actor->_632 < DEG2SHORT_ANGLE(1)) { mfish_afish_dummy_process_init(actor); - } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { + } else if (actor->_5E8 > 1.0f && actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) > 0) { actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); } else { @@ -108,24 +108,24 @@ void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_afish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(75.0f)) + DEG2SHORT_ANGLE(45.0f); actor->_618.y = ABS(DEG2SHORT_ANGLE2((SHORT2DEG_ANGLE2(s3) / 120.0f) * 4.0f + 2.5f)); - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { s3 = -s3; } - } else if (actor->_62E & 0xC0) { - if (actor->_62E & 0x40) { + } else if (actor->_62E_flags & 0xC0) { + if (actor->_62E_flags & 0x40) { s3 = ABS(s3); } else { s3 = -ABS(s3); } - } else if (actor->_62E & 0x20 && (actor->_62A - actor->_60C.y) < 0) { + } else if (actor->_62E_flags & 0x20 && (actor->_62A - actor->_60C.y) < 0) { s3 = -s3; } if (s3 > 0) { - actor->_62E |= 0x40; + actor->_62E_flags |= 0x40; } else { - actor->_62E |= 0x80; + actor->_62E_flags |= 0x80; } actor->_612.y += s3; @@ -138,7 +138,7 @@ void mfish_afish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5EC = 0.0f; actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.5f; - actor->_34 = mfish_afish_turn_process; + actor->currentProcess = mfish_afish_turn_process; } void mfish_afish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -170,7 +170,7 @@ void mfish_afish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_afish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { xyz_t p; - if (actor->_34 != mfish_afish_turn_process && actor->_622 < DEG2SHORT_ANGLE(20)) { + if (actor->currentProcess != mfish_afish_turn_process && actor->_622 < DEG2SHORT_ANGLE(20)) { add_calc2(&actor->_5E8, 0.08f, 1.0f - actor->init_data._18, 0.005f); } else { add_calc2(&actor->_5E8, 0.05f, 1.0f - actor->init_data._18, 0.001f); @@ -179,24 +179,25 @@ void mfish_afish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5D0.x = actor->_5E8 * cos_s(actor->_60C.x) * sin_s(actor->_60C.y); actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.x) * cos_s(actor->_60C.y); add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); + add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); mfish_move_smooth(actor, gamex); mfish_get_flow_vec(&p, actor, gamex); - actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; - actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; - actor->_5A0.y += actor->_5DC.y; - actor->_5A0.y = MAX(60.f, MIN(110.f, actor->_5A0.y)); + actor->position.x += actor->_5D0.x + actor->_5DC.x; + actor->position.z += actor->_5D0.z + actor->_5DC.z; + actor->position.y += actor->_5DC.y; + actor->position.y = MAX(60.f, MIN(110.f, actor->position.y)); } void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_5F8 > actor->init_data._08 * 20.f) { actor->_5F8 = 0.0f; - actor->_626 = 0; + actor->activityFrameCount = 0; } - if (actor->_626-- <= 0) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + if (actor->activityFrameCount-- <= 0) { + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; if (mfish_WallCheck(actor)) { actor->_640 = 10; mfish_afish_turn_process_init(actor); @@ -204,12 +205,13 @@ void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_640 = 10; mfish_afish_normal_process_init(actor); } - } else if (actor->_34 == mfish_afish_normal_process) { - if ((actor->_62E & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || - (actor->_62E & 0x20 && + } else if (actor->currentProcess == mfish_afish_normal_process) { + if ((actor->_62E_flags & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || + (actor->_62E_flags & 0x20 && ABS((s16)(DEG2SHORT_ANGLE(180) + actor->_62A - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_640 = 10; mfish_afish_turn_process_init(actor); } @@ -217,7 +219,7 @@ void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5AC.y = 0.0f; actor->_638 += DEG2SHORT_ANGLE(10); - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); if (ABS(actor->_618.z) > ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { add_calc2(&actor->_5E8, MIN(0.2f, actor->_5E8), 0.2f, 0.5f); } diff --git a/src/actor/ac_museum_fish_aroana.c_inc b/src/actor/ac_museum_fish_aroana.c_inc index 5c66ae9f..f29391f0 100644 --- a/src/actor/ac_museum_fish_aroana.c_inc +++ b/src/actor/ac_museum_fish_aroana.c_inc @@ -2,14 +2,14 @@ void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_onefish_ct(actor, gamex); mfish_base_ct(actor, gamex); - actor->_34 = mfish_aroana_normal_process; + actor->currentProcess = mfish_aroana_normal_process; actor->_624 = 0; } void mfish_aroana_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5F0 = actor->_5E8; actor->_5EC = 0.0f; - actor->_34 = mfish_aroana_dummy_process; + actor->currentProcess = mfish_aroana_dummy_process; } void mfish_aroana_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -31,7 +31,7 @@ void mfish_aroana_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5F0 = v; } actor->_5F4 = Rnd_EX_fx(10.0f) * v2; - actor->_612.x = atans_table(actor->_5E8, actor->_5F4 + actor->init_data._0C - actor->_5A0.y) >> 4; + actor->_612.x = atans_table(actor->_5E8, actor->_5F4 + actor->init_data._0C - actor->position.y) >> 4; actor->_5D0.y = 0.0f; if (RANDOM_F(1.0f) > actor->init_data._1C) { @@ -60,9 +60,9 @@ void mfish_aroana_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_636 = DEG2SHORT_ANGLE(-180); } - actor->_62E &= ~0xC0; + actor->_62E_flags &= ~0xC0; actor->_5EC = 0.0f; - actor->_34 = mfish_aroana_normal_process; + actor->currentProcess = mfish_aroana_normal_process; } void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -71,7 +71,7 @@ void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.002f + 0.03f, 0.25f, 0.02f); add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.2f), actor->_5EC * 0.5f); - } else if (actor->_626 > actor->_628 - 10) { + } else if (actor->activityFrameCount > actor->savedActivityFrameCount - 10) { add_calc2(&actor->_5EC, 0.25f, 0.2f, 0.5f); add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.05f), actor->_5EC * 0.5f); } @@ -90,7 +90,7 @@ void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } else { mfish_aroana_dummy_process_init(actor); } - } else if (actor->_5E8 > 1.f && actor->_62E & 0x1e) { + } else if (actor->_5E8 > 1.f && actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) > 0) { actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); } else { @@ -103,24 +103,24 @@ void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { void mfish_aroana_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(55.0f)) + DEG2SHORT_ANGLE(45.0f); actor->_618.y = ABS(DEG2SHORT_ANGLE2((SHORT2DEG_ANGLE2(s3) / 120.0f) * 2.5f + 2.0f)); - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { s3 = -s3; } - } else if (actor->_62E & 0xC0) { - if (actor->_62E & 0x40) { + } else if (actor->_62E_flags & 0xC0) { + if (actor->_62E_flags & 0x40) { s3 = ABS(s3); } else { s3 = -ABS(s3); } - } else if (actor->_62E & 0x20 && (actor->_62A - actor->_60C.y) < 0) { + } else if (actor->_62E_flags & 0x20 && (actor->_62A - actor->_60C.y) < 0) { s3 = -s3; } if (s3 > 0) { - actor->_62E |= 0x40; + actor->_62E_flags |= 0x40; } else { - actor->_62E |= 0x80; + actor->_62E_flags |= 0x80; } actor->_612.y += s3; @@ -133,7 +133,7 @@ void mfish_aroana_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5EC = 0.0f; actor->_5F0 = actor->init_data._10 + actor->init_data._14 * 0.2f; - actor->_34 = mfish_aroana_turn_process; + actor->currentProcess = mfish_aroana_turn_process; } void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -171,7 +171,7 @@ void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { void mfish_aroana_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5F0 = MAX(actor->_5E8, 0.2f); actor->_5EC = 0.0f; - actor->_34 = mfish_aroana_long_move_process; + actor->currentProcess = mfish_aroana_long_move_process; } void mfish_aroana_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -189,7 +189,7 @@ 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) { xyz_t p; - if (actor->_34 != mfish_aroana_turn_process && actor->_34 != mfish_aroana_long_move_process && + if (actor->currentProcess != mfish_aroana_turn_process && actor->currentProcess != mfish_aroana_long_move_process && actor->_622 < DEG2SHORT_ANGLE(20)) { add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, GETREG(TAKREG, 0x13) * 0.001f + 0.02f); } else { @@ -200,42 +200,44 @@ void mfish_aroana_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); + add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); mfish_move_smooth(actor, game); mfish_get_flow_vec(&p, actor, game); - actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; - actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; - actor->_5A0.y += actor->_5DC.y; - actor->_5A0.y = MAX(60.f, MIN(110.f, actor->_5A0.y)); + actor->position.x += actor->_5D0.x + actor->_5DC.x; + actor->position.z += actor->_5D0.z + actor->_5DC.z; + actor->position.y += actor->_5DC.y; + actor->position.y = MAX(60.f, MIN(110.f, actor->position.y)); } void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_5F8 > actor->init_data._08 * 20.f) { actor->_5F8 = 0.0f; - actor->_626 = 0; + actor->activityFrameCount = 0; } - if (actor->_626-- <= 0) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + if (actor->activityFrameCount-- <= 0) { + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; if (mfish_WallCheck(actor)) { mfish_aroana_turn_process_init(actor); } else { mfish_aroana_normal_process_init(actor); } - } else if (actor->_34 == mfish_aroana_normal_process) { - if ((actor->_62E & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || - (actor->_62E & 0x20 && + } else if (actor->currentProcess == mfish_aroana_normal_process) { + if ((actor->_62E_flags & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || + (actor->_62E_flags & 0x20 && ABS((s16)(DEG2SHORT_ANGLE(180) + actor->_62A - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; mfish_aroana_turn_process_init(actor); } } actor->_5AC.y = 0.0f; actor->_638 += DEG2SHORT_ANGLE(5); - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); if (ABS(actor->_618.z) > ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { add_calc2(&actor->_5E8, MIN(0.2f, actor->_5E8), 0.2f, 0.5f); } @@ -279,10 +281,10 @@ void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mtxp = &skele->_2b0; } OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y + actor->_5AC.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y + actor->_5AC.y, actor->position.z, 0); Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_aroana_before_disp, NULL, actor); CLOSE_DISP(play->game.graph); diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index f8823e62..a63a3822 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -1,5 +1,3 @@ -// pretty sure all the floats in this file are correct - f32 Rnd_EX_f(f32 v) { f32 rand1 = RANDOM2_F(2); f32 rand2 = RANDOM_F(1); @@ -31,7 +29,7 @@ f32 Rnd_EX_fx(f32 v) { void mfish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { f32 t; xyz_t pos; - if (actor->_59C == 0x18 && actor->_34 != mfish_peck_process) { + if (actor->fishIDEnum == aGYO_TYPE_PIRANHA && actor->currentProcess != mfish_peck_process) { actor->_5E8 *= actor->init_data._18; } else { add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, 0.025f); @@ -41,22 +39,22 @@ void mfish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); + add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); mfish_move_smooth(actor, game); mfish_get_flow_vec(&pos, actor, game); - actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; - actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; - actor->_5A0.y = actor->_5A0.y + actor->_5DC.y; - actor->_5A0.y = MAX(60, MIN(110, actor->_5A0.y)); + actor->position.x += actor->_5D0.x + actor->_5DC.x; + actor->position.z += actor->_5D0.z + actor->_5DC.z; + actor->position.y = actor->position.y + actor->_5DC.y; + actor->position.y = MAX(60, MIN(110, actor->position.y)); } int mfish_PosWallCheck(MUSEUM_FISH_PRIVATE_DATA* priv, xyz_t* pos) { u32 flag = 0; - xyz_t p = suisou_pos[priv->_630]; + xyz_t p = suisou_pos[priv->group]; f32 a, b, c, d; - if (priv->_630 < 4) { + if (priv->group < 4) { a = priv->init_data._28 + 45; b = priv->init_data._28 + 45; c = priv->init_data._28 + 45; @@ -86,7 +84,7 @@ int mfish_PosWallCheck(MUSEUM_FISH_PRIVATE_DATA* priv, xyz_t* pos) { BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* prv) { xyz_t p, p1; - p = prv->_5A0; + p = prv->position; p.x += sin_s(prv->_60C.y) * (GETREG(TAKREG, 70) + 30.0f); p.z += cos_s(prv->_60C.y) * (GETREG(TAKREG, 70) + 30.0f); @@ -98,7 +96,7 @@ BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* prv) { s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv) { s16 v = priv->_60C.y; - if (v > 0 || (priv->_630 == 2 && RANDOM_F(1) < 0.8f)) { + if (v > 0 || (priv->group == 2 && RANDOM_F(1) < 0.8f)) { if (v > DEG2SHORT_ANGLE(90)) { v = DEG2SHORT_ANGLE(90) + DEG2SHORT_ANGLE(RANDOM_F(45)); } else { @@ -116,10 +114,10 @@ s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv) { void mfish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* prv) { prv->_634 = mfish_get_hide_camera_angle(prv); - if (prv->_630 == 2 && prv->_60C.y < 0 && prv->_634 > 0) { + if (prv->group == 2 && prv->_60C.y < 0 && prv->_634 > 0) { prv->_5F0 = MAX(prv->init_data._10, GETREG(TAKREG, 80) * 0.1f + 1.2f); } - prv->_34 = mfish_dummy_process; + prv->currentProcess = mfish_dummy_process; } void mfish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -130,9 +128,9 @@ void mfish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f), DEG2SHORT_ANGLE(0.25f)); - if (actor->_630 == 2) { + if (actor->group == 2) { if (actor->_612.y < 0) { - actor->_626--; + actor->activityFrameCount--; } else { add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.05f); add_calc0(&actor->_5F0, 0.05f, 0.1f); @@ -155,7 +153,7 @@ void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { fishActor->_5F4 = Rnd_EX_fx(10.0f) * t; fishActor->_612.x = - atans_table(fishActor->_5E8, fishActor->_5F4 + fishActor->init_data._0C - fishActor->_5A0.y) >> 4; + atans_table(fishActor->_5E8, fishActor->_5F4 + fishActor->init_data._0C - fishActor->position.y) >> 4; fishActor->_5D0.y = 0; if (RANDOM_F(1) > fishActor->init_data._1C) { @@ -187,15 +185,15 @@ void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { fishActor->_636 = DEG2SHORT_ANGLE(-180); } - fishActor->_62E &= ~0xC0; - fishActor->_34 = mfish_normal_process; + fishActor->_62E_flags &= ~0xC0; + fishActor->currentProcess = mfish_normal_process; } void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { if (actor->_632 > DEG2SHORT_ANGLE(20)) { add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.2f), (((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.04f + 0.1f) * 0.5f, 0.05f); - } else if (actor->_626 > actor->_628 - 10) { + } else if (actor->activityFrameCount > actor->savedActivityFrameCount - 10) { add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.5f), 0.75f, 0.05f); } add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f)); @@ -204,9 +202,9 @@ void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { CALC_EASE2(0.5f), DEG2SHORT_ANGLE(6.25f), 45); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(3.75f), 45); - if (actor->_5E8 < 0.01f || actor->_630 == 2 && actor->_5E8 < 0.05f) { + if (actor->_5E8 < 0.01f || actor->group == 2 && actor->_5E8 < 0.05f) { mfish_dummy_process_init(actor); - } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { + } else if (actor->_5E8 > 1.0f && actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) > 0) { actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); } else { @@ -221,19 +219,19 @@ void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_618.y = DEG2SHORT_ANGLE(((actor->_5E8 + 0.5f) / (actor->init_data._10 + actor->init_data._14 + 0.5f)) * 7.5f + 7.5f); - if (actor->_62E & 0xC0) { - if (actor->_62E & 0x40) { + if (actor->_62E_flags & 0xC0) { + if (actor->_62E_flags & 0x40) { v = ABS(v); } else { v = -ABS(v); } - } else if (actor->_62E & 0x1e) { + } else if (actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { v = -v; } else { v = v; } - } else if (actor->_62E & 0x20) { + } else if (actor->_62E_flags & 0x20) { if ((s16)(actor->_62A - actor->_60C.y) < 0) { v = -v; } else { @@ -242,14 +240,14 @@ void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { } if (v > 0) { - actor->_62E |= 0x40; + actor->_62E_flags |= 0x40; } else { - actor->_62E |= 0x80; + actor->_62E_flags |= 0x80; } actor->_612.y += v; - if (actor->_630 == 2) { + if (actor->group == 2) { s16 tmp = actor->_612.y + DEG2SHORT_ANGLE(90); if (tmp > DEG2SHORT_ANGLE(135)) { actor->_612.y = DEG2SHORT_ANGLE(-45); @@ -265,7 +263,7 @@ void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { } else { actor->_63E = 0; } - actor->_34 = mfish_turn_process; + actor->currentProcess = mfish_turn_process; } void mfish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -341,8 +339,8 @@ void mfish_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_636 = DEG2SHORT_ANGLE(-90); } - actor->_62E &= ~0xC0; - actor->_34 = mfish_peck_process; + actor->_62E_flags &= ~0xC0; + actor->currentProcess = mfish_peck_process; } void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -355,7 +353,7 @@ void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_632 > DEG2SHORT_ANGLE(15)) { add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.25f), (((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.04f + 0.1f) * 0.5f, 0.05f); - } else if (actor->_626 > actor->_628 - 16) { + } else if (actor->activityFrameCount > actor->savedActivityFrameCount - 16) { add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(0.1f), 0.5f, 0.05f); } else if (dist > 20) { add_calc2(&actor->_5E8, MAX(actor->_5E8, 0.4f), 0.25f, 0.05f); @@ -371,46 +369,47 @@ void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (mfish_peck_wall_check(actor, gamex)) { if (RANDOM_F(1.0f) < 0.9f) { actor->_5E8 = -0.3f - RANDOM_F(0.3f); - actor->_626 = 10; + actor->activityFrameCount = 10; } else { actor->_5E8 = -0.5f; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_626 >>= 3; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->activityFrameCount >>= 3; } - actor->_628 = actor->_626; + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = 0.0f; } } void mfish_ground_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - xyz_t p = suisou_pos[actor->_630]; - xyz_t_sub(&p, &actor->_5A0, &p); + xyz_t p = suisou_pos[actor->group]; + xyz_t_sub(&p, &actor->position, &p); actor->_5F4 = ((actor->init_data._08 * 0.3f + 65.0f) - MAX(ABS(p.x), ABS(p.z)) * 0.15f) - actor->init_data._0C; actor->_612.x = DEG2SHORT_ANGLE(60); - actor->_626 = (int)(Rnd_EX_f(30.0f) + 15.0f) << 1; + actor->activityFrameCount = (int)(Rnd_EX_f(30.0f) + 15.0f) << 1; - if (actor->_34 != mfish_ground_peck_process) { + if (actor->currentProcess != mfish_ground_peck_process) { actor->_63E = RANDOM_F(2.0f) + 3.0f; } else { actor->_63E--; } actor->_5F0 = 0.5f; - actor->_34 = mfish_ground_peck_process; + actor->currentProcess = mfish_ground_peck_process; } void mfish_ground_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - xyz_t p = suisou_pos[actor->_630]; - xyz_t_sub(&p, &actor->_5A0, &p); + xyz_t p = suisou_pos[actor->group]; + xyz_t_sub(&p, &actor->position, &p); actor->_5F4 = ((actor->init_data._08 * 0.3f + 65.0f) - (MAX(ABS(p.x), ABS(p.z)) * 0.15f)) - actor->init_data._0C; xyz_t_mult_v(&actor->_5DC, 0.1f); - if (actor->_5A0.y > actor->_5F4 + actor->init_data._0C + 4.0f) { + if (actor->position.y > actor->_5F4 + actor->init_data._0C + 4.0f) { if (actor->_612.x < DEG2SHORT_ANGLE(40)) { actor->_612.x = DEG2SHORT_ANGLE(40); } - actor->_626++; + actor->activityFrameCount++; add_calc2(&actor->_5F0, 0.5f, 0.6f, 0.5f); } else if ((s16)(actor->_612.x - actor->_60C.x) > 0) { add_calc2(&actor->_5F0, 0.2f, 0.5f, 0.4f); @@ -441,9 +440,9 @@ void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5D0.z = sin_s(q) * f; actor->_60C.y = q; actor->_612.y = actor->_60C.y; - if (actor->_59C == 4 || actor->_59C == 9) { + if (actor->fishIDEnum == aGYO_TYPE_CATFISH || actor->fishIDEnum == aGYO_TYPE_GIANT_CATFISH) { actor->_5F4 = 0.0f; - } else if (actor->_59C == 0x1b) { + } else if (actor->fishIDEnum == aGYO_TYPE_FRESHWATER_GOBY) { actor->_5F4 = RANDOM_F(5.0f); } else { actor->_5F4 = RANDOM_F(10.0f); @@ -459,15 +458,16 @@ void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_5F8 > actor->init_data._08 * 20.0f) { actor->_5F8 = 0.0f; - actor->_626 = 0; + actor->activityFrameCount = 0; } - if (actor->_626-- <= 0) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + if (actor->activityFrameCount-- <= 0) { + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; if (mfish_peck_check(actor, gamex)) { - actor->_626 >>= 2; - actor->_628 = actor->_626; + actor->activityFrameCount >>= 2; + actor->savedActivityFrameCount = actor->activityFrameCount; mfish_peck_process_init(actor, gamex); } else if (mfish_WallCheck(actor)) { mfish_turn_process_init(actor); @@ -476,27 +476,28 @@ void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } else { mfish_normal_process_init(actor); } - } else if (actor->_34 == mfish_normal_process) { - if ((actor->_62E & 0x1E && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || - (actor->_62E & 0x20 && + } else if (actor->currentProcess == mfish_normal_process) { + if ((actor->_62E_flags & 0x1E && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || + (actor->_62E_flags & 0x20 && ABS((s16)(actor->_62A + DEG2SHORT_ANGLE(180) - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; mfish_turn_process_init(actor); } } if (actor->_624 == 10) { actor->_5AC.y = 0; - actor->_5A0.y = actor->init_data._0C; - } else if (actor->_630 == 2) { + actor->position.y = actor->init_data._0C; + } else if (actor->group == 2) { actor->_5AC.y = sin_s(actor->_638) * 0.2f; } else { actor->_5AC.y = 0; } actor->_638 += DEG2SHORT_ANGLE(10); - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); if (ABS(actor->_618.z) > ABS(actor->_622)) { add_calc2(&actor->_5E8, MIN(GETREG(TAKREG, 19) * 0.1f + 0.2f, actor->_5E8), 0.2f, 0.5f); @@ -512,8 +513,8 @@ void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { YET_SKELETON* s = &actor->_38; cKF_SkeletonInfo_R_ct(&s->_00, s->_54C, s->_550[0], &s->_4F0, &s->_514); cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&s->_00, s->_550[0], NULL, 1.0f, 0.0f); - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_60C.x = DEG2SHORT_ANGLE(0); actor->_60C.y = DEG2SHORT_ANGLE(-90); actor->_60C.z = DEG2SHORT_ANGLE(0); @@ -531,7 +532,7 @@ int mfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, if (joint_num == 2) { int v, t; - if (actor->_630 != 4) { + if (actor->group != 4) { v = 2; } else if (actor->init_data._20 > 0.7f) { v = 1; @@ -566,14 +567,14 @@ void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { graph = play->game.graph; - Matrix_translate(actor->_5A0.x, actor->_5A0.y + actor->_5AC.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y + actor->_5AC.y, actor->position.z, 0); Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0.0f, 0.25f * actor->init_data._04, 1.5f * actor->init_data._24, 1); Matrix_RotateX(actor->_60C.x, 1); Matrix_RotateZ(MY_CLAMP(-(actor->_618.z >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); Matrix_translate(0.0f, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); OPEN_DISP(graph); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -585,7 +586,7 @@ void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_ani_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_onefish_ct(actor, gamex); mfish_base_ct(actor, gamex); - actor->_34 = mfish_normal_process; + actor->currentProcess = mfish_normal_process; actor->_624 = 0; } @@ -595,18 +596,20 @@ void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_base_mv(actor, gamex); Museum_Fish_BGCheck(actor, gamex); - if (actor->_630 == 2) { + if (actor->group == 2) { actor->_38._00.frame_control.speed = (actor->_5E8 * 3.0f) / (actor->init_data._10 + actor->init_data._14) + 1.0f; - } else if (actor->_59C == 0xe || actor->_59C == 0x1 || actor->_59C == 0) { - if (actor->_5F0 - 0.1f > actor->_5E8 && actor->_34 == mfish_normal_process && actor->_626 > actor->_628 - 10) { + } else if (actor->fishIDEnum == aGYO_TYPE_BITTERLING || actor->fishIDEnum == aGYO_TYPE_BROOK_TROUT || + actor->fishIDEnum == aGYO_TYPE_CRUCIAN_CARP) { + if (actor->_5F0 - 0.1f > actor->_5E8 && actor->currentProcess == mfish_normal_process && + actor->activityFrameCount > actor->savedActivityFrameCount - 10) { actor->_38._00.frame_control.speed = ((actor->_5F0 - actor->_5E8) * 3.0f) / (actor->init_data._10 + actor->init_data._14) + 1.5f; } else { add_calc2(&actor->_38._00.frame_control.speed, 2.0f * actor->_5E8 + 0.5f, 0.2f, 0.1f); } } else { - if (actor->_626 > actor->_628 - 10 && actor->_5F0 > 0) { + if (actor->activityFrameCount > actor->savedActivityFrameCount - 10 && actor->_5F0 > 0) { actor->_38._00.frame_control.speed = (actor->_5E8 * 4.0f) / (actor->init_data._10 + actor->init_data._14) + 1.25f; } else { @@ -642,33 +645,33 @@ void Museum_Fish_BigFishObjCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { f25 -= ABS(op.y); if (f25 < MIN(f27, f26)) { if (op.y < 0) { - actor->_5A0.y -= MIN(f25, 0.25f); - fish[i]->_5A0.y += MIN(f25, 0.05f); + actor->position.y -= MIN(f25, 0.25f); + fish[i]->position.y += MIN(f25, 0.05f); } else { - actor->_5A0.y += MIN(f25, 0.25f); - fish[i]->_5A0.y -= MIN(f25, 0.05f); + actor->position.y += MIN(f25, 0.25f); + fish[i]->position.y -= MIN(f25, 0.05f); } } else if (f26 < f27) { v = ABS(cos_s(actor->_60C.y) * actor->_5E8); if (op.z < 0) { - actor->_5A0.z -= MIN(f26, MAX(0.5f, v)); + actor->position.z -= MIN(f26, MAX(0.5f, v)); if (fish[i]->_5B8.z < max[i] + 10.0f) { - fish[i]->_5A0.z += MIN(f26, 0.05f); + fish[i]->position.z += MIN(f26, 0.05f); } } else { - actor->_5A0.z += MIN(f26, MAX(0.5f, v)); + actor->position.z += MIN(f26, MAX(0.5f, v)); if (fish[i]->_5B8.z > max[i] - 10.0f) { - fish[i]->_5A0.z -= MIN(f26, 0.05f); + fish[i]->position.z -= MIN(f26, 0.05f); } } } else { v = ABS(sin_s(actor->_60C.y) * actor->_5E8); if (op.x < 0) { - actor->_5A0.x -= MIN(f27, MAX(0.5f, v)); - fish[i]->_5A0.x += MIN(f27, 0.05f); + actor->position.x -= MIN(f27, MAX(0.5f, v)); + fish[i]->position.x += MIN(f27, 0.05f); } else { - actor->_5A0.x += MIN(f27, MAX(0.5f, v)); - fish[i]->_5A0.x -= MIN(f27, 0.05f); + actor->position.x += MIN(f27, MAX(0.5f, v)); + fish[i]->position.x -= MIN(f27, 0.05f); } } } @@ -676,10 +679,10 @@ 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) { - xyz_t p = suisou_pos[actor->_630]; + xyz_t p = suisou_pos[actor->group]; f32 a, b, c, d, e; - switch (actor->_630) { + switch (actor->group) { case 0: e = 85.0f; a = -20.0f + p.x; @@ -714,43 +717,43 @@ void Museum_Fish_ObjBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex, f32 f1 return; } - e -= actor->_5A0.y; + e -= actor->position.y; if (e > 0.0f) { f32 v1, v2; - b -= (actor->_5A0.x + (actor->init_data._28 * f1)); - a -= (actor->_5A0.x - (actor->init_data._28 * f1)); - c -= (actor->_5A0.z + (actor->init_data._28 * f2)); - d -= (actor->_5A0.z - (actor->init_data._28 * f2)); + b -= (actor->position.x + (actor->init_data._28 * f1)); + a -= (actor->position.x - (actor->init_data._28 * f1)); + c -= (actor->position.z + (actor->init_data._28 * f2)); + d -= (actor->position.z - (actor->init_data._28 * f2)); if (b > 0.0f && c > 0.0f && a < 0.0f && d < 0.0f) { if (b > -a) { - if ((actor->_62E & 2) == 0) { - actor->_62E |= 4; + if ((actor->_62E_flags & 2) == 0) { + actor->_62E_flags |= 4; } v1 = a; } else { - if ((actor->_62E & 4) == 0) { - actor->_62E |= 2; + if ((actor->_62E_flags & 4) == 0) { + actor->_62E_flags |= 2; } v1 = b; } if (c > -d) { - if ((actor->_62E & 8) == 0) { - actor->_62E |= 0x10; + if ((actor->_62E_flags & 8) == 0) { + actor->_62E_flags |= 0x10; } v2 = d; } else { - if ((actor->_62E & 0x10) == 0) { - actor->_62E |= 8; + if ((actor->_62E_flags & 0x10) == 0) { + actor->_62E_flags |= 8; } v2 = c; } if (e < MIN(ABS(v2), ABS(v1)) && actor->_624 != 10) { - actor->_5A0.y += e; + actor->position.y += e; if (actor->_624 == 3) { actor->_612.x = DEG2SHORT_ANGLE(45); - } else if (actor->_59C == 15) { + } else if (actor->fishIDEnum == aGYO_TYPE_LOACH) { if (actor->_612.x > DEG2SHORT_ANGLE(30)) { actor->_612.x -= DEG2SHORT_ANGLE(2); } else if (actor->_612.x < DEG2SHORT_ANGLE(-30)) { @@ -759,9 +762,9 @@ void Museum_Fish_ObjBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex, f32 f1 } } else { if (ABS(v2) < ABS(v1)) { - actor->_5A0.z += v2; + actor->position.z += v2; } else { - actor->_5A0.x += v1; + actor->position.x += v1; } } } @@ -774,10 +777,10 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f32 f24; f32 f25; f32 f26; - xyz_t p = suisou_pos[actor->_630]; + xyz_t p = suisou_pos[actor->group]; f32 v = (sin_s(actor->_60C.y) * 0.7f) * (ABS(cos_s(actor->_618.z)) * 0.5f + 0.5f) + 0.3f; f32 v2 = (cos_s(actor->_60C.y) * 0.7f) * (ABS(cos_s(actor->_618.z)) * 0.5f + 0.5f) + 0.3f; - actor->_62E &= ~0x1e; + actor->_62E_flags &= ~0x1e; actor->_62C = 0; Museum_Fish_objchk_pos_set(actor, gamex); // asm 17C @@ -789,10 +792,10 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f27 = 76.0f - 6.0f * cos_s(DEG2SHORT_ANGLE2(180.0f * (actor->_5B8.x - p.x) / 55.0f)); f26 = 76.0f - 6.0f * cos_s(DEG2SHORT_ANGLE2((actor->_5B8.x + sin_s(actor->_60C.y) - p.x) * 180.0f / 55.0f)); - a -= (actor->_5A0.x + actor->init_data._28 * v); - b -= (actor->_5A0.x - actor->init_data._28 * v); - c -= (actor->_5A0.z + actor->init_data._28 * v2); - d -= (actor->_5A0.z - actor->init_data._28 * v2); + a -= (actor->position.x + actor->init_data._28 * v); + b -= (actor->position.x - actor->init_data._28 * v); + c -= (actor->position.z + actor->init_data._28 * v2); + d -= (actor->position.z - actor->init_data._28 * v2); /* f31 = a @@ -807,42 +810,42 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_608 = d; // asm 2E8 - f27 -= actor->_5A0.y; - f26 -= actor->_5A0.y; + f27 -= actor->position.y; + f26 -= actor->position.y; if (a > 0.0f) { actor->_5FC = 0.0f; - actor->_5A0.x += a; - actor->_62E |= 2; + actor->position.x += a; + actor->_62E_flags |= 2; } else if (b < 0.0f) { actor->_600 = 0.0f; - actor->_5A0.x += b; - actor->_62E |= 4; + actor->position.x += b; + actor->_62E_flags |= 4; } if (c > 0.0f) { actor->_604 = 0.0f; - actor->_5A0.z += c; - actor->_62E |= 0x8; + actor->position.z += c; + actor->_62E_flags |= 0x8; } else if (d < 0.0f) { actor->_608 = 0.0f; - actor->_5A0.z += d; - actor->_62E |= 0x10; + actor->position.z += d; + actor->_62E_flags |= 0x10; } - if (actor->_62E & 2) { + if (actor->_62E_flags & 2) { actor->_62C = DEG2SHORT_ANGLE(-90); - } else if (actor->_62E & 4) { + } else if (actor->_62E_flags & 4) { actor->_62C = DEG2SHORT_ANGLE(90); } - if (actor->_62E & 8) { - if (actor->_62E & 6) { + if (actor->_62E_flags & 8) { + if (actor->_62E_flags & 6) { actor->_62C = DEG2SHORT_ANGLE(180) - (actor->_62C >> 1); } else { actor->_62C = DEG2SHORT_ANGLE(-180); } - } else if (actor->_62E & 0x10) { - if (actor->_62E & 6) { + } else if (actor->_62E_flags & 0x10) { + if (actor->_62E_flags & 6) { actor->_62C = (actor->_62C >> 1); } else { actor->_62C = 0; @@ -863,19 +866,19 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f26 -= f27; actor->_612.x = atans_table(1.0f, -f26); if (f27 > 0.0f) { - actor->_5A0.y += f27; + actor->position.y += f27; actor->_5D0.y *= 0.95f; } } void Museum_Fish_objchk_pos_set(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { - actor->_5B8 = actor->_5A0; + actor->_5B8 = actor->position; actor->_5B8.x += (actor->init_data._24 * sin_s(actor->_60C.y)); actor->_5B8.z += (actor->init_data._24 * cos_s(actor->_60C.y)); } void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { - xyz_t p = suisou_pos[actor->_630]; + xyz_t p = suisou_pos[actor->group]; f32 f29, f30, f28, f27, f31, f26, f25; s32 r31 = 0; @@ -899,7 +902,7 @@ void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { f25 = 1.0f; } - if (actor->_630 < 4) { + if (actor->group < 4) { f30 = 54.0f + actor->init_data._28 * f26; f29 = 54.0f + actor->init_data._28 * f26; f28 = 54.0f + actor->init_data._28 * f25; @@ -915,24 +918,24 @@ void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { r31 = DEG2SHORT_ANGLE(sin_s(f31 * 32768.0f / 180.0f) * -10.0f); } - actor->_62E &= ~0x1e; + actor->_62E_flags &= ~0x1e; actor->_62C = 0; Museum_Fish_objchk_pos_set(actor, game); if (actor->_5B8.x > (p.x + f30)) { - actor->_5A0.x += (p.x + f30) - actor->_5B8.x; - actor->_62E |= 0x4; + actor->position.x += (p.x + f30) - actor->_5B8.x; + actor->_62E_flags |= 0x4; } else if (actor->_5B8.x < p.x - f29) { - actor->_5A0.x += (p.x - f29) - actor->_5B8.x; - actor->_62E |= 0x2; + actor->position.x += (p.x - f29) - actor->_5B8.x; + actor->_62E_flags |= 0x2; } if (actor->_5B8.z > (p.z + f28)) { - actor->_5A0.z += (p.z + f28) - actor->_5B8.z; - actor->_62E |= 0x10; + actor->position.z += (p.z + f28) - actor->_5B8.z; + actor->_62E_flags |= 0x10; } else if (actor->_5B8.z < (p.z - f27)) { - actor->_5A0.z += (p.z - f27) - actor->_5B8.z; - actor->_62E |= 0x8; + actor->position.z += (p.z - f27) - actor->_5B8.z; + actor->_62E_flags |= 0x8; } // asm 468 @@ -942,24 +945,24 @@ void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_604 = actor->_5B8.z - (p.z - f27); actor->_608 = (p.z + f28) - actor->_5B8.z; - if (actor->_630 < 4 && actor->_59C != 26) { + if (actor->group < 4 && actor->fishIDEnum != aGYO_TYPE_EEL) { Museum_Fish_ObjBGCheck(actor, game, f26, f25); } - if (actor->_62E & 2) { + if (actor->_62E_flags & 2) { actor->_62C = DEG2SHORT_ANGLE(-90); - } else if (actor->_62E & 4) { + } else if (actor->_62E_flags & 4) { actor->_62C = DEG2SHORT_ANGLE(90); } - if (actor->_62E & 8) { - if (actor->_62E & 6) { + if (actor->_62E_flags & 8) { + if (actor->_62E_flags & 6) { actor->_62C = (DEG2SHORT_ANGLE(180) - (actor->_62C >> 1) + ((s16)r31 >> 1)); } else { actor->_62C = r31 + DEG2SHORT_ANGLE(180); } - } else if (actor->_62E & 0x10) { - if (actor->_62E & 6) { + } else if (actor->_62E_flags & 0x10) { + if (actor->_62E_flags & 6) { actor->_62C >>= 1; } else { actor->_62C = DEG2SHORT_ANGLE(0); @@ -970,7 +973,7 @@ void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { static int kusa_group_tbl[14] = { 0, 2, 1, 3, 3, 4, 4, 4, 4, 4, 0, 2, 1, 3 }; MUSEUM_FISH_KUSA_DATA* k; - MUSEUM_FISH_PRIVATE_DATA* f = &actor->prvFish[0]; + MUSEUM_FISH_PRIVATE_DATA* f = actor->prvFish; int i; int j; f32 sq; @@ -978,16 +981,17 @@ void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { f32 f29 = 0.0f; f32 f28 = 0.0f; - for (i = 0; i < 40; i++, f++) { - f->_62E &= ~0x100; + for (i = 0; i < aGYO_TYPE_NUM; i++, f++) { + f->_62E_flags &= ~0x100; // this if statement salso works as a continue statement - if (f->_59C != 0x1a && f->_59C != 0x1f && f->_59C != 0x21) { + if (f->fishIDEnum != aGYO_TYPE_EEL && f->fishIDEnum != aGYO_TYPE_COELACANTH && + f->fishIDEnum != aGYO_TYPE_FROG) { for (j = 0; j < 14; j++) { f32 f1 = (j < 5) ? 90.0f : (j < 10) ? 115.0f : 80.0f; - if (kusa_group_tbl[j] == f->_630 && f->_5B8.y < f1) { + if (kusa_group_tbl[j] == f->group && f->_5B8.y < f1) { f32 z; f32 x; f32 d; @@ -996,7 +1000,7 @@ void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { f32 dy; if (kusa_group_tbl[j] == 4) { - if (f->_59C == 0x1f) { + if (f->fishIDEnum == aGYO_TYPE_COELACANTH) { d = 5.0f + f->init_data._08; } else { d = 10.0f + f->init_data._08; @@ -1045,9 +1049,9 @@ void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { } // asm 414 if (f28 > 0.0f) { - f->_62E |= 0x100; - f->_5A0.x += (f30 / f28); - f->_5A0.z += (f29 / f28); + f->_62E_flags |= 0x100; + f->position.x += (f30 / f28); + f->position.z += (f29 / f28); } f28 = 0.0f; f29 = 0.0f; @@ -1076,19 +1080,19 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { f32 sq_xz; f32 sq_xzy; - fj = f = &actor->prvFish[0]; + fj = f = actor->prvFish; - for (i = 0; i < 40; i++, f++) { - f->_62E &= ~0x20; + for (i = 0; i < aGYO_TYPE_NUM; i++, f++) { + f->_62E_flags &= ~0x20; } - f = &actor->prvFish[0]; - for (i = 0; i < 40; i++, f++) { + 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 & 1) { - for (j = 0; j < 40; j++, fj++) { - if (f->_630 == fj->_630 && i != j && j != 0x21 && j != 0x1a && j != 0x27 && j != 10 && - fj->_62E & 1 != 0) { + 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 @@ -1116,11 +1120,11 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { test.y *= 0.2f + (GETREG(TAKREG, 0x11)) * 0.0001f; f22 *= 0.2f + (GETREG(TAKREG, 0x12)) * 0.0001f; f->_62A = atans_table(test.z, test.x); - f->_62E |= 0x20; + f->_62E_flags |= 0x20; fj->_62A = f->_62A + DEG2SHORT_ANGLE(180); - f->_62E |= 0x20; + f->_62E_flags |= 0x20; f->_594 = fj; - if ((fj->_62E & 0x1e) == 0 || ABS((s16)(fj->_62C - f->_62A)) >= DEG2SHORT_ANGLE(90)) { + if ((fj->_62E_flags & 0x1e) == 0 || ABS((s16)(fj->_62C - f->_62A)) >= DEG2SHORT_ANGLE(90)) { f32 v = (fj->init_data._20 / (f->init_data._20 + fj->init_data._20)); v *= (1.0f - f->init_data._20); f22 *= v; @@ -1132,7 +1136,7 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { test.y *= v; } - if (f22 < ABS(test.y) || f->_624 == 0xa || f->_59C == 0x1f) { + if (f22 < ABS(test.y) || f->_624 == 0xa || f->fishIDEnum == aGYO_TYPE_COELACANTH) { f28 += sin_s(f->_62A) * f22; f27 += cos_s(f->_62A) * f22; f25 += 1.0f; @@ -1152,12 +1156,12 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { } if (f25 > 0.0f) { - f->_5A0.x += f28 / f25; - f->_5A0.z += f27 / f25; + f->position.x += f28 / f25; + f->position.z += f27 / f25; } if (f24 > 0) { - f->_5A0.y += MAX(MIN(f26 / f24, 0.5f), -0.5f); + f->position.y += MAX(MIN(f26 / f24, 0.5f), -0.5f); if (f->_624 == 0 || f->_624 == 0xb) { f->_5F4 += f26 / f24; @@ -1166,7 +1170,7 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { if (f24 > 0 && f25 > 0) { xyz_t r; - xyz_t_sub(&f->_594->_5A0, &f->_5A0, &r); + xyz_t_sub(&f->_594->position, &f->position, &r); f->_62A = atans_table(r.z, r.x); } @@ -1176,9 +1180,9 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) { f28 = 0.0f; f26 = 0.0f; f23 = FLT_MAX; - fj = &actor->prvFish[0]; + fj = actor->prvFish; } - if (f->_630 == 3 && f->_624 != 7) { + if (f->group == 3 && f->_624 != 7) { Museum_Fish_BigFishObjCheck(f, game); } // asm 728 @@ -1201,7 +1205,7 @@ void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* at f32 v; p = playerActor->actor_class.world.position; p.y += 40.0f; - xyz_t_sub(&p, &actor->_5A0, &p1); + xyz_t_sub(&p, &actor->position, &p1); v = SQ(p1.x) + SQ(p1.z); v = sqrtf(v); if (atanx) { @@ -1218,15 +1222,15 @@ void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* at BOOL mfish_peck_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { Private_c* commonData_prv = common_data.now_private; - if (MF_Control_Actor->_14db4 == actor->_630) { - if (actor->_59C == 0x18) { + if (MF_Control_Actor->_14db4 == actor->group) { + if (actor->fishIDEnum == aGYO_TYPE_PIRANHA) { return TRUE; } else if (mPr_GetPossessionItemIdx(commonData_prv, 0x2806) != -1) { - if (actor->_59C == 2 || actor->_59C == 3) { + if (actor->fishIDEnum == aGYO_TYPE_CARP || actor->fishIDEnum == aGYO_TYPE_KOI) { return TRUE; } } else if (mPr_GetPossessionItemIdxItem1Category(commonData_prv, 8) != -1 && - (actor->_59C == 0x17 || actor->_59C == 0x1e)) { + (actor->fishIDEnum == aGYO_TYPE_GOLDFISH || actor->fishIDEnum == aGYO_TYPE_POPEYED_GOLDFISH)) { return TRUE; } } @@ -1236,10 +1240,10 @@ BOOL mfish_peck_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 temp = (actor->_60C.y - actor->_62C); - if (actor->_62E & 0x1E && ABS(temp) < DEG2SHORT_ANGLE(45)) { + if (actor->_62E_flags & 0x1E && ABS(temp) < DEG2SHORT_ANGLE(45)) { PLAYER_ACTOR* playerActor = get_player_actor_withoutCheck((GAME_PLAY*)gamex); xyz_t target = playerActor->actor_class.world.position; - return search_position_distance(&actor->_5A0, &target) < 60.0f; + return search_position_distance(&actor->position, &target) < 60.0f; } return FALSE; } @@ -1248,16 +1252,16 @@ BOOL mfish_ground_peck_before_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex xyz_t p, p2; f32 v; - p2 = p = suisou_pos[actor->_630]; + p2 = p = suisou_pos[actor->group]; - xyz_t_sub(&p2, &actor->_5A0, &p2); + xyz_t_sub(&p2, &actor->position, &p2); v = MAX(ABS(p2.x), ABS(p2.z)); - if (actor->_34 == mfish_ground_peck_process) { + if (actor->currentProcess == mfish_ground_peck_process) { return actor->_63E > 0; - } else if ((actor->_630 == 2) && (actor->_5A0.x < p.x + 20.0f) && (actor->_5A0.z > p.z - 10.0f) && - (actor->_5A0.y < (actor->init_data._08 * 0.5f + 75.0f) - (v * 0.15f)) && (RANDOM_F(1.0f) > 0.2f)) { + } else if ((actor->group == 2) && (actor->position.x < p.x + 20.0f) && (actor->position.z > p.z - 10.0f) && + (actor->position.y < (actor->init_data._08 * 0.5f + 75.0f) - (v * 0.15f)) && (RANDOM_F(1.0f) > 0.2f)) { return TRUE; } @@ -1303,7 +1307,7 @@ void mfish_get_player_area(MUSEUM_FISH_ACTOR* actor, GAME* gamex) { void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { f32 v; xyz_t p2; - xyz_t p = suisou_pos[actor->_630]; + xyz_t p = suisou_pos[actor->group]; xyz_t t; xyz_t p3; @@ -1314,18 +1318,18 @@ void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) f32 d; f32 dSQ; - if (actor->_630 == 0) { + if (actor->group == 0) { v = 0.05f; - } else if (actor->_630 == 1) { + } else if (actor->group == 1) { v = 0.06f; - } else if (actor->_630 == 2) { + } else if (actor->group == 2) { v = 0.2f; - } else if (actor->_630 == 3) { + } else if (actor->group == 3) { v = 0.05f; - } else if (actor->_630 == 4) { + } else if (actor->group == 4) { v = 0.08f; } - xyz_t_sub(&actor->_5A0, &p, &t); + xyz_t_sub(&actor->position, &p, &t); xy = SQ(t.x) + SQ(t.z); s = (sin_s(DEG2SHORT_ANGLE2(360.0f * sqrtf(xy) / 720.0f)) * 0.1f + 0.2f); p2.x = s * cos_s(DEG2SHORT_ANGLE2(360.0f * t.x / 60.0f)); @@ -1333,9 +1337,9 @@ void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) p2.y = (s * 0.5f) * cos_s(DEG2SHORT_ANGLE2(180.0f * t.y / 70.0f)); s2 = atans_table(t.z, t.x); - s2 += MF_Control_Actor->_14daa[actor->_630]; + s2 += MF_Control_Actor->_14daa[actor->group]; - if (actor->_630 == 2) { + if (actor->group == 2) { p2.x += (GETREG(TAKREG, 0xc) * 0.01f + 2.0f) * cos_s(s2); p2.z += (GETREG(TAKREG, 0xc) * 0.01f + 2.0f) * sin_s(s2); } else { @@ -1351,9 +1355,9 @@ void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) p2.z *= cos_s(actor->_618.z); } - if (actor->_630 == 4) { + if (actor->group == 4) { p2.z += (GETREG(TAKREG, 0xb) * 0.01f + 0.5f) * cos_s(actor->_60C.y + DEG2SHORT_ANGLE(90)); - } else if (actor->_630 == 2) { + } else if (actor->group == 2) { p2.x -= ABS(cos_s(actor->_60C.y)) * 0.02f; if (ABS((s16)(actor->_60C.y - DEG2SHORT_ANGLE(270))) < DEG2SHORT_ANGLE(100)) { p2.x = MIN(-1.0f + GETREG(TAKREG, 0x48) * 0.001f, p2.x); @@ -1361,12 +1365,12 @@ void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) } if (actor->_598 != NULL) { - if (actor->_630 == 4) { + if (actor->group == 4) { s = actor->_598->init_data._08 * 10.0f + actor->init_data._08 * 2.0f; } else { s = actor->_598->init_data._08 * 5.0f + actor->init_data._08 * 2.0f; } - xyz_t_sub(&actor->_5A0, &actor->_598->_5A0, &p3); + xyz_t_sub(&actor->position, &actor->_598->position, &p3); dSQ = SQ(p3.x) + SQ(p3.y) + SQ(p3.z); d = sqrtf(dSQ); @@ -1379,7 +1383,7 @@ void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) } } - if (actor->_630 == 2 && p2.x < 0.0f) { + if (actor->group == 2 && p2.x < 0.0f) { p2.x *= 1.1f; } @@ -1391,7 +1395,7 @@ 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) { - s16 v1 = atans_table(actor->_594->_5A0.z - actor->_5A0.z, actor->_594->_5A0.x - actor->_5A0.x); + s16 v1 = atans_table(actor->_594->position.z - actor->position.z, actor->_594->position.x - actor->position.x); s16 v = actor->_60C.y - v1; if (ABS(v) < DEG2SHORT_ANGLE(90)) { if (actor->_624 == 1 || actor->_624 == 2) { @@ -1447,15 +1451,16 @@ void mfish_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { if ((actor->_5E8 > 0.0f || actor->_608 < 5.0f || actor->_604 < 5.0f || actor->_600 < 5.0f || actor->_5FC < 5.0f) && - (actor->_34 != mfish_peck_process && actor->_34 != mfish_koi_peck_process)) { + (actor->currentProcess != mfish_peck_process && actor->currentProcess != mfish_koi_peck_process)) { vv = actor->_60C.y - (s16)v; if (ABS(vv) < DEG2SHORT_ANGLE(45)) { add_calc0(&actor->_5E8, 0.1f * cos_s(vv << 1), 0.02f); } - if ((actor->_630 == 0 || actor->_624 == 10 || actor->_624 == 11 || actor->_59C == 25) && + if ((actor->group == 0 || actor->_624 == 10 || actor->_624 == 11 || + actor->fishIDEnum == aGYO_TYPE_AROWANA) && ABS(vv) < DEG2SHORT_ANGLE(90) && ABS(actor->_622) < DEG2SHORT_ANGLE(10)) { - if (actor->_34 == mfish_afish_dummy_process) { + if (actor->currentProcess == mfish_afish_dummy_process) { o = &actor->_634; } else { o = &actor->_612.y; @@ -1480,8 +1485,8 @@ void mfish_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { void mfish_hamon_make(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { GAME_PLAY* play = (GAME_PLAY*)game; if ((play->game_frame & 7) == 0 && - ((actor->_62E & 0x1e) == 0 || ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(80))) { - xyz_t p = actor->_5A0; + ((actor->_62E_flags & 0x1e) == 0 || ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(80))) { + xyz_t p = actor->position; p.y = 115.0f; Common_Get(clip.effect_clip) ->effect_make_proc(0x45, p, 2, DEG2SHORT_ANGLE(180) + actor->_60C.y, game, -1, 7, 0); diff --git a/src/actor/ac_museum_fish_bass.c_inc b/src/actor/ac_museum_fish_bass.c_inc index 8d9ee3f1..706fc44d 100644 --- a/src/actor/ac_museum_fish_bass.c_inc +++ b/src/actor/ac_museum_fish_bass.c_inc @@ -18,23 +18,23 @@ void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); - t = add_calc(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y, 0); + t = add_calc(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y, 0); if (fabsf(t) < 0.008f) { add_calc_short_angle2(&actor->_612.x, 0, CALC_EASE(0.03f), DEG2SHORT_ANGLE(1.0f + (0.5f * actor->_5AC.y)) >> 1, 9); } mfish_move_smooth(actor, game); mfish_get_flow_vec(&pos, actor, game); - actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; - actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; - actor->_5A0.y = actor->_5A0.y + actor->_5DC.y; - actor->_5A0.y = MAX(60, MIN(110, actor->_5A0.y)); + actor->position.x += actor->_5D0.x + actor->_5DC.x; + actor->position.z += actor->_5D0.z + actor->_5DC.z; + actor->position.y = actor->position.y + actor->_5DC.y; + actor->position.y = MAX(60, MIN(110, actor->position.y)); } void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_634 = mfish_get_hide_camera_angle(actor); - if ((actor->_62E & 0x1E) != 0) { + if ((actor->_62E_flags & 0x1E) != 0) { // works with temp instead of cast if ((s16)(actor->_612.y - actor->_62C) > 0) { actor->_634 = actor->_62C + DEG2SHORT_ANGLE(90); @@ -47,7 +47,7 @@ void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { } actor->_5EC = 0.0f; - actor->_34 = &mfish_bass_dummy_process; + actor->currentProcess = &mfish_bass_dummy_process; return; } @@ -70,10 +70,10 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { ra = RANDOM_F(fishActor->init_data._14) + fishActor->init_data._10; t = (ra) / MAX(fishActor->init_data._14 + fishActor->init_data._10, 1); - if (RANDOM_F(1.0f) > 0.25f && (fishActor->_62E & 0x200) == 0) { - fishActor->_62E |= 0x200; + if (RANDOM_F(1.0f) > 0.25f && (fishActor->_62E_flags & 0x200) == 0) { + fishActor->_62E_flags |= 0x200; } else { - fishActor->_62E &= ~0x200; + fishActor->_62E_flags &= ~0x200; } if (ra > fishActor->_5E8) { @@ -84,7 +84,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { } fishActor->_5F4 = t * Rnd_EX_fx(10); - temp = (fishActor->_5F4 + fishActor->init_data._0C - fishActor->_5A0.y); + temp = (fishActor->_5F4 + fishActor->init_data._0C - fishActor->position.y); fishActor->_612.x = DEG2SHORT_ANGLE2(temp * -(2 * fishActor->_5AC.y + 10)); fishActor->_612.x = CLAMP(fishActor->_612.x, DEG2SHORT_ANGLE(-50), DEG2SHORT_ANGLE(50)); @@ -103,7 +103,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { } } - if ((fishActor->_62E & 0x200) == 0) { + if ((fishActor->_62E_flags & 0x200) == 0) { fishActor->_632 = DEG2SHORT_ANGLE(t * 15 + 20); } else { fishActor->_632 = DEG2SHORT_ANGLE(t * 30 + 20); @@ -115,7 +115,7 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { fishActor->_612.y += DEG2SHORT_ANGLE(-15); } - if ((fishActor->_62E & 0x200) == 0) { + if ((fishActor->_62E_flags & 0x200) == 0) { fishActor->_632 = DEG2SHORT_ANGLE(t * 10 + 30); } else { fishActor->_632 = DEG2SHORT_ANGLE((GETREG(TAKREG, 42) + 40.0f) * t + 30); @@ -127,21 +127,21 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) { fishActor->_636 = DEG2SHORT_ANGLE(-180); } - fishActor->_62E &= ~0xC0; + fishActor->_62E_flags &= ~0xC0; fishActor->_5EC = 0; - fishActor->_34 = mfish_bass_normal_process; + fishActor->currentProcess = mfish_bass_normal_process; } void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { //! NOTE: wrong floats in this file, based on objdiff - if (((actor->_62E & 0x200) != 0 && actor->_632 > DEG2SHORT_ANGLE(20)) || actor->_640 > 0) { + if (((actor->_62E_flags & 0x200) != 0 && actor->_632 > DEG2SHORT_ANGLE(20)) || actor->_640 > 0) { f32 v = (actor->_5AC.y * 0.03f + 0.02f); add_calc2(&actor->_5EC, v + (actor->_5AC.y * 0.02f + 0.03f) * (float)((actor->_632 - DEG2SHORT_ANGLE(20)) / 364), actor->_5AC.y * 0.04f + 0.01f, actor->_5AC.y * 0.02f + 0.01f); add_calc(&actor->_5E8, actor->_5F0, CALC_EASE(v), actor->_5EC * 0.5f, 0.025f); } - if (actor->_62E & 0x200) { + if (actor->_62E_flags & 0x200) { add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(GETREG(TAKREG, 73) * 0.01f + 0.5f), (s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 74) * 0.1f + 4.0f) >> 1) >> 1, 45); actor->_636 = actor->_636 + (s16)DEG2SHORT_ANGLE2( @@ -158,7 +158,7 @@ void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { if (actor->_5E8 < 0.01f) { mfish_bass_dummy_process_init(actor); - } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { + } else if (actor->_5E8 > 1.0f && actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) > 0) { actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); } else { @@ -175,37 +175,37 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { b = a = DEG2SHORT_ANGLE(45) + DEG2SHORT_ANGLE(RANDOM_F(75)); actor->_618.y = DEG2SHORT_ANGLE((actor->_5AC.y * 4.0f + 4.0f) * (SHORT2DEG_ANGLE2(a) / 120.0f) + 2.0f + actor->_5AC.y); - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { b = -a; } - } else if (actor->_62E & 0xC0) { - if (actor->_62E & 0x40) { + } else if (actor->_62E_flags & 0xC0) { + if (actor->_62E_flags & 0x40) { b = ABS(a); } else { b = -ABS(a); } - } else if (actor->_62E & 0x20) { + } else if (actor->_62E_flags & 0x20) { if ((s16)(actor->_62A - actor->_60C.y) < 0) { b = -a; } } if (b > 0) { - actor->_62E |= 0x40; + actor->_62E_flags |= 0x40; } else { - actor->_62E |= 0x80; + actor->_62E_flags |= 0x80; } actor->_612.y += b; - if ((RANDOM_F(1) < 0.25f) && (actor->_62E & 0x200) == 0) { - actor->_62E |= 0x200; + if ((RANDOM_F(1) < 0.25f) && (actor->_62E_flags & 0x200) == 0) { + actor->_62E_flags |= 0x200; } else { - actor->_62E &= ~0x200; + actor->_62E_flags &= ~0x200; } - if ((actor->_62E & 0x200) == 0) { + if ((actor->_62E_flags & 0x200) == 0) { actor->_5F0 = 1.75f; actor->_5AC.x = Rnd_EX_fx(0.1f) + 0.15f; } else { @@ -220,7 +220,7 @@ void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { } actor->_5EC = 0.0f; - actor->_34 = mfish_bass_turn_process; + actor->currentProcess = mfish_bass_turn_process; } void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -267,11 +267,11 @@ void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_onefish_ct(actor, gamex); mfish_base_ct(actor, gamex); - actor->_34 = mfish_bass_normal_process; + actor->currentProcess = mfish_bass_normal_process; - if (actor->_59C == 7) { + if (actor->fishIDEnum == aGYO_TYPE_LARGE_BASS) { actor->_5AC.y = 0; - } else if (actor->_59C == 6) { + } else if (actor->fishIDEnum == aGYO_TYPE_BASS) { actor->_5AC.y = 0.5f; } else { actor->_5AC.y = 1; @@ -288,12 +288,13 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_5F8 > actor->init_data._08 * 20.0f) { actor->_5F8 = 0.0f; - actor->_626 = 0; + actor->activityFrameCount = 0; } - if (actor->_626-- <= 0) { - actor->_626 = actor->init_data._2C + (s16)(RANDOM_F(actor->init_data._2E)); - actor->_628 = actor->_626; + if (actor->activityFrameCount-- <= 0) { + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)(RANDOM_F(actor->init_data.activeFramesRange)); + actor->savedActivityFrameCount = actor->activityFrameCount; if (mfish_WallCheck(actor)) { mfish_bass_tail_anim_set(actor, 1); @@ -302,18 +303,19 @@ void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_bass_tail_anim_set(actor, 0); mfish_bass_normal_process_init(actor); } - } else if (actor->_34 == &mfish_bass_normal_process) { - if (((actor->_62E & 0x1e) && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || - ((actor->_62E & 0x20) && + } else if (actor->currentProcess == &mfish_bass_normal_process) { + if (((actor->_62E_flags & 0x1e) && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || + ((actor->_62E_flags & 0x20) && ABS((s16)((actor->_62A - DEG2SHORT_ANGLE(-180)) - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; mfish_bass_tail_anim_set(actor, 1); mfish_bass_turn_process_init(actor); } } actor->_638 += DEG2SHORT_ANGLE(10); - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); if (ABS(actor->_618.z) > ABS(actor->_622)) { add_calc2(&actor->_5E8, MIN(GETREG(TAKREG, 19) * 0.1f + 1.0f, actor->_5E8), GETREG(TAKREG, 18) * 0.01f + 0.2f, @@ -359,14 +361,14 @@ void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { graph = play->game.graph; - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0, 0.25f * actor->init_data._04, 1.5f * actor->init_data._24, 1); Matrix_RotateX(actor->_60C.x, 1); Matrix_RotateZ(MY_CLAMP(-(actor->_618.z >> 1), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); Matrix_translate(0, 0.25f * -actor->init_data._04, 0.5f * -actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); OPEN_DISP(graph); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/actor/ac_museum_fish_big_fish.c_inc b/src/actor/ac_museum_fish_big_fish.c_inc index 09f6dfb5..6fe49ea9 100644 --- a/src/actor/ac_museum_fish_big_fish.c_inc +++ b/src/actor/ac_museum_fish_big_fish.c_inc @@ -1,20 +1,20 @@ void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { qrand(); - actor->_5A0.y = actor->init_data._0C; + actor->position.y = actor->init_data._0C; mfish_onefish_ct(actor, gamex); actor->_5E8 = 0.0f; actor->_5AC = ZeroVec; actor->_5F0 = actor->_5E8; actor->_60C.y = DEG2SHORT_ANGLE(90); - if (actor->_59C == 0x27) { + if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) { actor->_60C.y = -actor->_60C.y; - actor->_5A0.z = 430.0f; - actor->_5A0.x += 40.0f; + actor->position.z = 430.0f; + actor->position.x += 40.0f; actor->_640 = 0; - } else if (actor->_59C == 10) { - actor->_5A0.z = 530.0f; - actor->_5A0.x -= 40.0f; + } else if (actor->fishIDEnum == aGYO_TYPE_GIANT_SNAKEHEAD) { + actor->position.z = 530.0f; + actor->position.x -= 40.0f; } actor->_612.y = actor->_60C.y; @@ -31,7 +31,7 @@ void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5AC.x = 0.0f; actor->_5AC.z = 0.0f; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); } void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -39,7 +39,7 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { xyz_t p; mfish_onefish_mv(actor, gamex); mfish_body_wind_anime_play(actor, gamex); - if (actor->_59C == 0x27) { + if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) { actor->_38._00.frame_control.speed = (sin_s(actor->_63A) * 0.2f + 1.0f) * 0.5f; } else { actor->_38._00.frame_control.speed = @@ -49,7 +49,7 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.02f); actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); - if (actor->_59C == 0x27) { + if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) { if (actor->_600 > 35.0f) { if (actor->_632 > DEG2SHORT_ANGLE(10)) { add_calc0(&actor->_5F0, 1.0f - actor->init_data._18, 0.005f); @@ -74,8 +74,8 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } mfish_get_flow_vec(&p, actor, gamex); - actor->_5A0.x += actor->_5D0.x + p.x * 0.1f; - actor->_5A0.z += actor->_5D0.z + p.z * 0.1f; + actor->position.x += actor->_5D0.x + p.x * 0.1f; + actor->position.z += actor->_5D0.z + p.z * 0.1f; actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y + actor->_632 * sin_s(actor->_636), CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.875f), DEG2SHORT_ANGLE(0.05f)); @@ -84,8 +84,8 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc_short_angle2(&actor->_632, DEG2SHORT_ANGLE(0), CALC_EASE(0.05f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.05f)); actor->_636 += DEG2SHORT_ANGLE(GETREG(TAKREG, 0x47) * 0.1f + 3.0f); - add_calc(&actor->_5A0.y, actor->init_data._0C + actor->_5F4, CALC_EASE(0.05f), 0.15f, 0.05f); - if (actor->_630 == 2) { + add_calc(&actor->position.y, actor->init_data._0C + actor->_5F4, CALC_EASE(0.05f), 0.15f, 0.05f); + if (actor->group == 2) { actor->_636 += DEG2SHORT_ANGLE(10); } else { actor->_646 += actor->_642; @@ -101,8 +101,9 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { DEG2SHORT_ANGLE(0.025f)); } add_calc2(&actor->_5AC.x, actor->_5AC.z, 0.25f, 0.02f); - if (actor->_626-- < 0) { - if ((actor->_59C == 0x27 && actor->_600 < 10.0f) || (actor->_59C == 10 && actor->_5FC < 10.0f)) { + if (actor->activityFrameCount-- < 0) { + if ((actor->fishIDEnum == aGYO_TYPE_ARAPAIMA && actor->_600 < 10.0f) || + (actor->fishIDEnum == aGYO_TYPE_GIANT_SNAKEHEAD && actor->_5FC < 10.0f)) { if (actor->_60C.y > 0) { actor->_612.y = DEG2SHORT_ANGLE(90); } else { @@ -113,7 +114,7 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (RANDOM_F(1.0f) < GETREG(TAKREG, 0x46) * 0.01f + 0.5f) { actor->_642 = DEG2SHORT_ANGLE(RANDOM2_F(2.0f) + 3.0f); - if (actor->_59C == 0x27 || GETREG(TAKREG, 0x39) == 1) { + if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA || GETREG(TAKREG, 0x39) == 1) { actor->_634 = DEG2SHORT_ANGLE(RANDOM_F(10.f) + 20.f); actor->_640 = DEG2SHORT_ANGLE(RANDOM_F(10.f)); actor->_5AC.z = Rnd_EX_f(1.0f); @@ -139,7 +140,8 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_640 = 0; actor->_5AC.z = 0.0f; } - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); } Museum_Fish_BGCheck(actor, gamex); } @@ -152,7 +154,7 @@ BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi if (joint_num == 1) { f32 v; int i; - if (actor->_59C == 0x27) { + if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) { v = 0.015f; } else { v = 0.02f; @@ -166,7 +168,7 @@ BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi } else if (joint_num == 2) { f32 v; int i; - if (actor->_59C == 0x27) { + if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) { v = 0.025f; } else { v = 0.035f; @@ -179,7 +181,7 @@ BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)); Matrix_scale(1.0f, 1.0f + v * sin_s(actor->_63A + DEG2SHORT_ANGLE(270)), 1.0f + v * sin_s(actor->_63A + DEG2SHORT_ANGLE(90)), 1); - } else if (joint_num == 3 && actor->_59C == 0x27) { + } else if (joint_num == 3 && actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) { int i = joint1->y - actor->_618.z + (int)(actor->_644 * (1.0f + 0.01f * GETREG(TAKREG, 0x16)) * sin_s(actor->_646 + DEG2SHORT_ANGLE(-180.f + GETREG(TAKREG, 0x18)))); @@ -198,10 +200,10 @@ void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mtxp = &skele->_2b0; } OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_bfish_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_dojou.c_inc b/src/actor/ac_museum_fish_dojou.c_inc index 4686979f..271307dc 100644 --- a/src/actor/ac_museum_fish_dojou.c_inc +++ b/src/actor/ac_museum_fish_dojou.c_inc @@ -13,7 +13,7 @@ void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5AC = ZeroVec; actor->_638 = qrand(); actor->_622 = 0; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); actor->_624 = 6; actor->_5AC.x = 0.0f; mfish_dojou_normal_init(actor, gamex); @@ -21,7 +21,7 @@ void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_dojou_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; - actor->_34 = mfish_dojou_normal; + actor->currentProcess = mfish_dojou_normal; } void mfish_dojou_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -32,15 +32,16 @@ void mfish_dojou_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { CALC_EASE2(0.3f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { mfish_dojou_turn_init(actor, gamex); - } else if (actor->_62E & 0x20) { + } else if (actor->_62E_flags & 0x20) { add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f), DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f)); - } else if (actor->_626 < 0) { + } else if (actor->activityFrameCount < 0) { f32 v = RANDOM_F(1.0f); - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); if (RANDOM_F(1.0f) < 0.5f) { actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f); @@ -60,7 +61,7 @@ void mfish_dojou_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115); } actor->_5F0 = actor->init_data._14 + actor->init_data._10; - actor->_34 = mfish_dojou_turn; + actor->currentProcess = mfish_dojou_turn; } void mfish_dojou_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -81,7 +82,7 @@ void mfish_dojou_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f32 v; xyz_t p; - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x + (s16)(actor->_632 * sin_s(actor->_636) * sin_s(actor->_60C.x)), CALC_EASE(0.1f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.5f)); @@ -107,9 +108,9 @@ void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5D0.z = v * cos_s(actor->_60C.y); actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x); mfish_get_flow_vec(&p, actor, gamex); - actor->_5A0.x += actor->_5D0.x + p.x; - actor->_5A0.y += actor->_5D0.y + p.y; - actor->_5A0.z += actor->_5D0.z + p.z; + actor->position.x += actor->_5D0.x + p.x; + actor->position.y += actor->_5D0.y + p.y; + actor->position.z += actor->_5D0.z + p.z; mfish_onefish_mv(actor, gamex); if (ABS(actor->_612.x) > DEG2SHORT_ANGLE(15)) { add_calc2(&actor->_38._00.frame_control.speed, @@ -120,10 +121,10 @@ void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 1.5f + 0.5f, 0.2f, 0.1f); add_calc0(&actor->_5AC.x, 0.1f, 0.02f); } - actor->_5B8 = actor->_5A0; + actor->_5B8 = actor->position; Museum_Fish_BGCheck(actor, gamex); - if (actor->_5A0.y < actor->init_data._08 + 50.f) { - actor->_5A0.y = actor->init_data._08 + 50.f; + if (actor->position.y < actor->init_data._08 + 50.f) { + actor->position.y = actor->init_data._08 + 50.f; if (actor->_612.x > 0) { if ((RANDOM_F(1.0f) < 0.5f && actor->_63E < 0) || actor->_63E > 0) { actor->_612.x = DEG2SHORT_ANGLE(-80); @@ -141,8 +142,8 @@ void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5F4 = 75.0f; } } - } else if (actor->_5A0.y > actor->_5F4 - actor->init_data._08) { - actor->_5A0.y = actor->_5F4 - actor->init_data._08; + } else if (actor->position.y > actor->_5F4 - actor->init_data._08) { + actor->position.y = actor->_5F4 - actor->init_data._08; if (actor->_5F4 > 100.0f) { actor->_612.x = DEG2SHORT_ANGLE(80); mfish_hamon_make(actor, gamex); @@ -159,7 +160,7 @@ void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { DEG2SHORT_ANGLE(0.0f)); } } - actor->_626--; + actor->activityFrameCount--; } actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x)); } @@ -197,12 +198,12 @@ void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } s = actor->_60C.x; OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24 * (0.5f * cos_s(s) + ABS(cos_s(s))), 1); Matrix_RotateX(s, 1); Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f * cos_s(s), 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_dojou_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_donko.c_inc b/src/actor/ac_museum_fish_donko.c_inc index 76da14f8..86cedac4 100644 --- a/src/actor/ac_museum_fish_donko.c_inc +++ b/src/actor/ac_museum_fish_donko.c_inc @@ -3,9 +3,9 @@ void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { //! BUG: ? qrand(); mfish_onefish_ct(actor, gamex); - actor->_5A0.x = GETREG(TAKREG, 0x32) + 450.f; - actor->_5A0.y = GETREG(TAKREG, 0x33) + 60.f; - actor->_5A0.z = GETREG(TAKREG, 0x34) + 180.f; + actor->position.x = GETREG(TAKREG, 0x32) + 450.f; + actor->position.y = GETREG(TAKREG, 0x33) + 60.f; + actor->position.z = GETREG(TAKREG, 0x34) + 180.f; actor->_5E8 = 0.0f; actor->_5AC = ZeroVec; actor->_5F0 = actor->_5E8; @@ -18,7 +18,7 @@ void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_624 = 0; actor->_63A = qrand(); actor->_63C = qrand(); - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); } void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -27,7 +27,7 @@ void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_onefish_mv(actor, gamex); mfish_body_wind_anime_play(actor, gamex); - if (actor->_626 > actor->_628 - 10) { + if (actor->activityFrameCount > actor->savedActivityFrameCount - 10) { actor->_38._00.frame_control.speed = (actor->_5E8 * 3.0f + 1.0f) * 0.5f; } else { add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.125f, 0.2f, 0.1f); @@ -36,8 +36,8 @@ void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5AC.y = 0.0f; actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); - x = (actor->_5A0.x - (suisou_pos[actor->_630].x + 22.5f)); - z = (actor->_5A0.z - (suisou_pos[actor->_630].z - 31.25f)); + x = (actor->position.x - (suisou_pos[actor->group].x + 22.5f)); + z = (actor->position.z - (suisou_pos[actor->group].z - 31.25f)); actor->_5D0.x -= x * 0.002f; actor->_5D0.z -= z * 0.002f; @@ -45,18 +45,18 @@ void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5D0.y *= 0.95f; mfish_get_flow_vec(&p, actor, gamex); mfish_move_smooth(actor, gamex); - actor->_5A0.x += actor->_5D0.x + actor->_5DC.x * 0.1f; - actor->_5A0.z += actor->_5D0.z + actor->_5DC.z * 0.1f; - actor->_5A0.y += actor->_5D0.y; + actor->position.x += actor->_5D0.x + actor->_5DC.x * 0.1f; + actor->position.z += actor->_5D0.z + actor->_5DC.z * 0.1f; + actor->position.y += actor->_5D0.y; actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_60C.x, actor->_612.x >> 1, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(3.75f), DEG2SHORT_ANGLE(0.25f)); - if (actor->_626-- < 0) { + if (actor->activityFrameCount-- < 0) { s16 s = RANDOM_F(actor->init_data._30); - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) > 0) { actor->_612.y = actor->_60C.y + s; } else { @@ -70,15 +70,16 @@ void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } } actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; - } else if (actor->_626 > actor->_628 - 20) { + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; + } else if (actor->activityFrameCount > actor->savedActivityFrameCount - 20) { add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.025f); } else { actor->_5E8 *= actor->init_data._18; } - if (actor->_62E & 0x1e && actor->_5E8 > 0.05f) { + if (actor->_62E_flags & 0x1e && actor->_5E8 > 0.05f) { s16 s = actor->_62C; if ((s16)(actor->_612.y - actor->_62C) > DEG2SHORT_ANGLE(-1) && ABS((s16)(actor->_612.y - actor->_62C)) < DEG2SHORT_ANGLE(95)) { @@ -118,12 +119,12 @@ void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mtxp = &skele->_2b0; } OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1); Matrix_RotateX(actor->_60C.x, 1); Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_donko_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_gupi.c_inc b/src/actor/ac_museum_fish_gupi.c_inc index b892770d..5924cb5e 100644 --- a/src/actor/ac_museum_fish_gupi.c_inc +++ b/src/actor/ac_museum_fish_gupi.c_inc @@ -13,14 +13,14 @@ void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5AC = ZeroVec; actor->_638 = qrand(); actor->_622 = 0; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); actor->_624 = 6; mfish_gupi_normal_init(actor, gamex); } void mfish_gupi_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; - actor->_34 = mfish_gupi_normal; + actor->currentProcess = mfish_gupi_normal; } void mfish_gupi_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -30,15 +30,16 @@ void mfish_gupi_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { mfish_gupi_turn_init(actor, gamex); - } else if (actor->_62E & 0x20) { + } else if (actor->_62E_flags & 0x20) { add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f), DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f)); - } else if (actor->_626 < 0) { + } else if (actor->activityFrameCount < 0) { f32 v = RANDOM_F(1.0f); - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); if (RANDOM_F(1.0f) < 0.5f) { @@ -60,12 +61,13 @@ void mfish_gupi_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 s; //! BUG: unused? RANDOM_F(1.0f); - s = search_position_angleY(&suisou_pos[actor->_630], &actor->_5A0); + s = search_position_angleY(&suisou_pos[actor->group], &actor->position); actor->_5F8 = 0.0f; actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90.0)); - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_626 >>= 1; - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->activityFrameCount >>= 1; + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._14 + actor->init_data._10; } } @@ -77,7 +79,7 @@ void mfish_gupi_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115); } actor->_5F0 = actor->init_data._14 + actor->init_data._10; - actor->_34 = mfish_gupi_turn; + actor->currentProcess = mfish_gupi_turn; } void mfish_gupi_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -96,7 +98,7 @@ void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f32 v; xyz_t p; int s; - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), @@ -120,9 +122,9 @@ void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5D0.z = v * cos_s(actor->_60C.y); actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x); mfish_get_flow_vec(&p, actor, gamex); - actor->_5A0.x += actor->_5D0.x + p.x; - actor->_5A0.y += actor->_5D0.y + p.y; - actor->_5A0.z += actor->_5D0.z + p.z; + actor->position.x += actor->_5D0.x + p.x; + actor->position.y += actor->_5D0.y + p.y; + actor->position.z += actor->_5D0.z + p.z; mfish_onefish_mv(actor, gamex); if (actor->_5F0 - 0.01f > actor->_5E8 && actor->_5F0 > 0.1f) { @@ -132,11 +134,11 @@ void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f); } actor->_63A += (s16)DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x47) + 3.0f); - actor->_5B8 = actor->_5A0; + actor->_5B8 = actor->position; Museum_Fish_BGCheck(actor, gamex); - if (actor->_5A0.y < (actor->_5F4 - 30.f) + actor->init_data._08) { - actor->_5A0.y = (actor->_5F4 - 30.f) + actor->init_data._08; + if (actor->position.y < (actor->_5F4 - 30.f) + actor->init_data._08) { + actor->position.y = (actor->_5F4 - 30.f) + actor->init_data._08; if (actor->_612.x > 0) { if (RANDOM_F(1.0f) < 0.1f) { actor->_5F4 -= RANDOM_F(10.f) + 5.0f; @@ -145,8 +147,8 @@ void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.x = DEG2SHORT_ANGLE(-30); } } - } else if (actor->_5A0.y > actor->_5F4 - actor->init_data._08) { - actor->_5A0.y = actor->_5F4 - actor->init_data._08; + } else if (actor->position.y > actor->_5F4 - actor->init_data._08) { + actor->position.y = actor->_5F4 - actor->init_data._08; if (actor->_612.x <= 0) { if (RANDOM_F(1.0f) < 0.1f) { actor->_5F4 += RANDOM_F(10.f) + 5.0f; @@ -155,11 +157,11 @@ void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.x = DEG2SHORT_ANGLE(30); } } - if (actor->_5F4 > 110.f || actor->_5A0.y >= 114.5f - actor->init_data._08) { + if (actor->_5F4 > 110.f || actor->position.y >= 114.5f - actor->init_data._08) { mfish_hamon_make(actor, gamex); } } else { - actor->_626--; + actor->activityFrameCount--; } actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x)); @@ -200,12 +202,12 @@ void mfish_gupi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } v = actor->_60C.x * 0.7f; OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1); Matrix_RotateX(v, 1); Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_gupi_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_hasu.c_inc b/src/actor/ac_museum_fish_hasu.c_inc index 6e5e482d..65a9a8de 100644 --- a/src/actor/ac_museum_fish_hasu.c_inc +++ b/src/actor/ac_museum_fish_hasu.c_inc @@ -41,11 +41,11 @@ void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { &keyframe->_00._4F0, &keyframe->_00._526); cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&keyframe->_00._00, &cKF_ba_r_obj_museum5_hasu, NULL, 0.5f, 0.0f); - actor->_5A0.x = 453.9f; - actor->_5A0.y = 116.0f; - actor->_5A0.z = 250.4f; + actor->position.x = 453.9f; + actor->position.y = 116.0f; + actor->position.z = 250.4f; actor->_5AC = ZeroVec; - actor->_626 = 0; + actor->activityFrameCount = 0; actor->_612.x = 0; actor->_612.y = 0; actor->_612.z = 0; @@ -84,7 +84,7 @@ void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { cKF_SkeletonInfo_R_init_standard_repeat_morph(&skele1->_00, skele1->_550[actor->_640], NULL, 0.f); } if (actor->_640 == 1) { - sAdo_OngenTrgStart(0x77, &actor->_5A0); + sAdo_OngenTrgStart(0x77, &actor->position); actor->_612.x = 1; } } @@ -178,8 +178,8 @@ BOOL hasu_after_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg; YET_SKELETON_2* skele = actor->_590; if (joint_num == 9) { - Matrix_Position_Zero(&actor->_5A0); - actor->_5A0.y = skele->_564 * actor->init_data._00 * sin_s(skele->_56C) + 116.0f; + Matrix_Position_Zero(&actor->position); + actor->position.y = skele->_564 * actor->init_data.renderScale * sin_s(skele->_56C) + 116.0f; } return TRUE; } @@ -203,10 +203,10 @@ void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &keyframe->_00._00, mtxp2, hasu_before_disp, hasu_after_disp, actor); - Matrix_translate(actor->_5A0.x + actor->_5AC.x, actor->_5A0.y, actor->_5A0.z + actor->_5AC.z, 0); + Matrix_translate(actor->position.x + actor->_5AC.x, actor->position.y, actor->position.z + actor->_5AC.z, 0); Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, NULL, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_ito.c_inc b/src/actor/ac_museum_fish_ito.c_inc index f7431919..93deec89 100644 --- a/src/actor/ac_museum_fish_ito.c_inc +++ b/src/actor/ac_museum_fish_ito.c_inc @@ -2,7 +2,7 @@ void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { //! BUG: unused s16 s = qrand(); - actor->_5A0.y = actor->init_data._0C; + actor->position.y = actor->init_data._0C; mfish_onefish_ct(actor, gamex); actor->_5E8 = 0.0f; actor->_5AC = ZeroVec; @@ -21,7 +21,7 @@ void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_644 = 0; actor->_5AC.x = 0.0f; actor->_5AC.z = 0.0f; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); } void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -41,13 +41,13 @@ void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } } mfish_get_flow_vec(&p, actor, gamex); - actor->_5A0.x += actor->_5D0.x + p.x * 0.1f; - actor->_5A0.z += actor->_5D0.z + p.z * 0.1f; + actor->position.x += actor->_5D0.x + p.x * 0.1f; + actor->position.z += actor->_5D0.z + p.z * 0.1f; actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.875f), DEG2SHORT_ANGLE(0.05f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.025f)); - add_calc(&actor->_5A0.y, actor->init_data._0C + actor->_5F4, CALC_EASE(0.05f), 0.15f, 0.05f); + add_calc(&actor->position.y, actor->init_data._0C + actor->_5F4, CALC_EASE(0.05f), 0.15f, 0.05f); actor->_646 += DEG2SHORT_ANGLE(10); add_calc_short_angle2(&actor->_634, actor->_640, CALC_EASE2(0.1f), (s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 0x3d) * 0.1f + 0.8f) >> 1) >> 1, @@ -55,7 +55,7 @@ void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc_short_angle2(&actor->_644, actor->_634, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.625f), DEG2SHORT_ANGLE(0.025f)); add_calc2(&actor->_5AC.x, actor->_5AC.z, 0.25f, 0.001f); - if (actor->_626-- < 0) { + if (actor->activityFrameCount-- < 0) { if (RANDOM_F(1.0f) > 0.5f && actor->_600 > 5.0f) { if (actor->_60C.y > 0) { actor->_612.y = DEG2SHORT_ANGLE(90); @@ -75,7 +75,8 @@ void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_640 = 0; actor->_5AC.z = 0.0f; } - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); } Museum_Fish_BGCheck(actor, gamex); } @@ -116,10 +117,10 @@ void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mtxp = &skele->_2b0; } OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y + actor->_5AC.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y + actor->_5AC.y, actor->position.z, 0); Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_ito_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_kaseki.c_inc b/src/actor/ac_museum_fish_kaseki.c_inc index 3d2184c3..410d1dc3 100644 --- a/src/actor/ac_museum_fish_kaseki.c_inc +++ b/src/actor/ac_museum_fish_kaseki.c_inc @@ -14,7 +14,7 @@ void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_638 = qrand(); actor->_622 = 0; actor->_634 = 0; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); actor->_624 = 1; actor->_594 = NULL; actor->_598 = NULL; @@ -23,9 +23,9 @@ void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_kaseki_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); - actor->_34 = mfish_kaseki_normal; + actor->currentProcess = mfish_kaseki_normal; } void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -64,9 +64,9 @@ void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(-90), CALC_EASE(GETREG(TAKREG, 0x21) * 0.01f + 0.25f), DEG2SHORT_ANGLE(GETREG(TAKREG, 0x22) + 25.0f) >> 1, DEG2SHORT_ANGLE(0.5f)); } - } else if (actor->_62E & 0x1e) { + } else if (actor->_62E_flags & 0x1e) { mfish_kaseki_move_wall_smooth(actor, gamex); - } else if (actor->_626 < 0) { + } else if (actor->activityFrameCount < 0) { f32 r = RANDOM_F(1.0f); actor->_612.y = actor->_60C.y; if ((actor->_608 - actor->_604) * cos_s(actor->_60C.y) < 0) { @@ -74,7 +74,8 @@ void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } else { actor->_612.y -= (s16)(r * actor->init_data._30); } - actor->_626 = actor->init_data._2C + (s16)(RANDOM_F(actor->init_data._2E)); + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)(RANDOM_F(actor->init_data.activeFramesRange)); actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); } } @@ -105,8 +106,8 @@ void mfish_kaseki_move_wall_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { GAME_PLAY* play = (GAME_PLAY*)game; f32 v; - actor->_34(actor, game); - add_calc2(&actor->_5A0.y, actor->init_data._0C, 0.5f, 0.1f); + actor->currentProcess(actor, game); + add_calc2(&actor->position.y, actor->init_data._0C, 0.5f, 0.1f); if (ABS(actor->_622) > DEG2SHORT_ANGLE(10)) { add_calc_short_angle2(&actor->_634, DEG2SHORT_ANGLE(20), CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.25f), DEG2SHORT_ANGLE(0)); @@ -134,16 +135,16 @@ void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { v = actor->_5E8 * (1.0f - ((sin_s(actor->_63A) * 0.2f + 0.2f) * MAX(cos_s(actor->_618.z), 0.5f))); actor->_5D0.x = v * sin_s(actor->_60C.y); actor->_5D0.z = v * cos_s(actor->_60C.y); - actor->_5A0.x += actor->_5D0.x; - actor->_5A0.z += actor->_5D0.z; + actor->position.x += actor->_5D0.x; + actor->position.z += actor->_5D0.z; mfish_onefish_mv(actor, game); actor->_38._00.frame_control.speed = actor->_5E8 * 0.75f + 0.25f; mfish_body_wind_anime_play(actor, game); Museum_Fish_BGCheck(actor, game); - if (actor->_5A0.y < 55.0f - actor->init_data._04) { - actor->_5A0.y = 55.0f - actor->init_data._04; + if (actor->position.y < 55.0f - actor->init_data._04) { + actor->position.y = 55.0f - actor->init_data._04; } - actor->_626--; + actor->activityFrameCount--; } BOOL mfish_kaseki_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, @@ -180,10 +181,10 @@ void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mtxp = &skele->_2b0; } OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_kaseki_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_kingyo.c_inc b/src/actor/ac_museum_fish_kingyo.c_inc index fe40f357..96143ebd 100644 --- a/src/actor/ac_museum_fish_kingyo.c_inc +++ b/src/actor/ac_museum_fish_kingyo.c_inc @@ -12,8 +12,8 @@ void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5D0.y = 0.0f; actor->_5AC = ZeroVec; actor->_622 = 0; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_640 = RANDOM_F(130.f); actor->_624 = 6; mfish_kingyo_normal_init(actor, gamex); @@ -21,7 +21,7 @@ void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_kingyo_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; - actor->_34 = mfish_kingyo_normal; + actor->currentProcess = mfish_kingyo_normal; } void mfish_kingyo_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -34,15 +34,16 @@ void mfish_kingyo_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (mfish_peck_check(actor, gamex)) { mfish_kingyo_peck_init(actor, gamex); - } else if (actor->_62E & 0x1e) { + } else if (actor->_62E_flags & 0x1e) { mfish_kingyo_turn_init(actor, gamex); - } else if (actor->_62E & 0x20) { + } else if (actor->_62E_flags & 0x20) { add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f), DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f)); - } else if (actor->_626 < 0) { + } else if (actor->activityFrameCount < 0) { f32 v = RANDOM_F(1.0f); - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_640 = RANDOM_F(130.f); actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); if (RANDOM_F(1.0f) < 0.5f) { @@ -55,12 +56,13 @@ void mfish_kingyo_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } } else if (actor->_5F8 > actor->init_data._08 * 30.f) { f32 v = RANDOM_F(1.0f); - s16 s = search_position_angleY(&suisou_pos[actor->_630], &actor->_5A0); + s16 s = search_position_angleY(&suisou_pos[actor->group], &actor->position); actor->_5F8 = 0.0f; actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90)); - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_626 >>= 1; - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->activityFrameCount >>= 1; + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_640 = RANDOM_F(130.f); actor->_5F0 = actor->init_data._14 + actor->init_data._10; } @@ -73,7 +75,7 @@ void mfish_kingyo_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115); } actor->_5F0 = actor->init_data._14 + actor->init_data._10; - actor->_34 = mfish_kingyo_turn; + actor->currentProcess = mfish_kingyo_turn; } void mfish_kingyo_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -91,11 +93,11 @@ void mfish_kingyo_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_kingyo_peck_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f32 dist; mfish_get_player_angle(actor, gamex, &actor->_612.y, &actor->_612.x, &dist); - actor->_626 = 120; - actor->_628 = actor->_626; + actor->activityFrameCount = 120; + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_640 = RANDOM_F(130.f); actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; - actor->_34 = mfish_kingyo_peck; + actor->currentProcess = mfish_kingyo_peck; } void mfish_kingyo_peck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -105,7 +107,7 @@ void mfish_kingyo_peck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(10), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); - if (actor->_626 < 0) { + if (actor->activityFrameCount < 0) { f32 dist; mfish_get_player_angle(actor, gamex, &actor->_612.y, &actor->_612.x, &dist); if (ABS(actor->_612.y) < DEG2SHORT_ANGLE(15)) { @@ -122,7 +124,7 @@ void mfish_kingyo_peck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } } - if (actor->_62E & 0x20 && dist > 40.f) { + if (actor->_62E_flags & 0x20 && dist > 40.f) { if ((s16)(actor->_612.y - actor->_62A) > 0) { actor->_612.y += DEG2SHORT_ANGLE(90); } else { @@ -135,15 +137,16 @@ void mfish_kingyo_peck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5F0 = 0.1f; } if (dist > 40.0f) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_640 = RANDOM_F(130.f); } else { - actor->_626 = 60; - actor->_628 = actor->_626; + actor->activityFrameCount = 60; + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_640 = RANDOM_F(130.f); } - } else if (MF_Control_Actor->_14db4 != actor->_630) { + } else if (MF_Control_Actor->_14db4 != actor->group) { mfish_kingyo_turn_init(actor, gamex); } else if (mfish_peck_wall_check(actor, gamex)) { actor->_5F0 = 0.0f; @@ -156,7 +159,7 @@ void mfish_kingyo_peck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f32 v; xyz_t p; - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), @@ -179,11 +182,12 @@ void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5D0.z = v * cos_s(actor->_60C.y); actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x); mfish_get_flow_vec(&p, actor, gamex); - actor->_5A0.x += actor->_5D0.x + p.x; - actor->_5A0.y += actor->_5D0.y + p.y; - actor->_5A0.z += actor->_5D0.z + p.z; + actor->position.x += actor->_5D0.x + p.x; + actor->position.y += actor->_5D0.y + p.y; + actor->position.z += actor->_5D0.z + p.z; mfish_onefish_mv(actor, gamex); - if ((((actor->_5F0 - 0.01f) > actor->_5E8) || (actor->_626 > (s16)(actor->_628 - actor->_640))) && + if ((((actor->_5F0 - 0.01f) > actor->_5E8) || + (actor->activityFrameCount > (s16)(actor->savedActivityFrameCount - actor->_640))) && actor->_5F0 > 0.1f) { actor->_38._00.frame_control.speed = (5.0f + GETREG(TAKREG, 0x28) * 0.1f) * 0.5f + (4.0f + GETREG(TAKREG, 0x29) * 0.1f) * actor->_5E8; @@ -193,19 +197,19 @@ void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f); } actor->_63A += (s16)DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x47) + 3.0f); - actor->_5B8 = actor->_5A0; + actor->_5B8 = actor->position; Museum_Fish_BGCheck(actor, gamex); - if (actor->_5A0.y < 60.f + actor->init_data._08) { - actor->_5A0.y = 60.f + actor->init_data._08; + if (actor->position.y < 60.f + actor->init_data._08) { + actor->position.y = 60.f + actor->init_data._08; if (actor->_612.x > 0) { actor->_612.x = DEG2SHORT_ANGLE(-30); } - } else if (actor->_5A0.y > 115.f - actor->init_data._08) { - actor->_5A0.y = 115.f - actor->init_data._08; + } else if (actor->position.y > 115.f - actor->init_data._08) { + actor->position.y = 115.f - actor->init_data._08; actor->_612.x = DEG2SHORT_ANGLE(30); mfish_hamon_make(actor, gamex); } else { - actor->_626--; + actor->activityFrameCount--; } actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x)); @@ -247,12 +251,12 @@ void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } s = actor->_60C.x * (GETREG(TAKREG, 0x41) * 0.01f + 0.75f); OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1); Matrix_RotateX(s, 1); Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_kingyo_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_koi.c_inc b/src/actor/ac_museum_fish_koi.c_inc index 57695282..09b68c13 100644 --- a/src/actor/ac_museum_fish_koi.c_inc +++ b/src/actor/ac_museum_fish_koi.c_inc @@ -45,14 +45,14 @@ void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { if ((actor->_5E8 > 0.0f || actor->_608 < 10.0f || actor->_604 < 10.0f || actor->_600 < 10.0f || actor->_5FC < 10.0f) && - (actor->_34 != mfish_koi_peck_process)) { + (actor->currentProcess != mfish_koi_peck_process)) { vv = actor->_60C.y - (s16)v; if (ABS(vv) < DEG2SHORT_ANGLE(45)) { add_calc0(&actor->_5E8, 0.05f * cos_s(vv << 1), 0.0025f); } if (ABS(vv) < DEG2SHORT_ANGLE(90) && ABS(actor->_622) < DEG2SHORT_ANGLE(15)) { - if (actor->_34 == mfish_koi_dummy_process) { + if (actor->currentProcess == mfish_koi_dummy_process) { o = &actor->_634; } else { o = &actor->_612.y; @@ -80,7 +80,7 @@ void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_onefish_ct(actor, gamex); mfish_base_ct(actor, gamex); - actor->_34 = mfish_koi_normal_process; + actor->currentProcess = mfish_koi_normal_process; actor->_5E8 = actor->init_data._10; actor->_5AC.z = 1.0f; actor->_624 = 9; @@ -88,7 +88,7 @@ void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_koi_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_634 = mfish_get_hide_camera_angle(actor); - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { if ((s16)(actor->_612.y - actor->_62C) > 0) { actor->_634 = actor->_62C + DEG2SHORT_ANGLE(90); } else { @@ -100,7 +100,7 @@ void mfish_koi_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { } actor->_5F0 = MIN(MAX(actor->init_data._10, 0.1f), actor->_5E8); actor->_5EC = 0.0f; - actor->_34 = mfish_koi_dummy_process; + actor->currentProcess = mfish_koi_dummy_process; } void mfish_koi_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -124,7 +124,7 @@ void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5F0 = v; } actor->_5F4 = Rnd_EX_fx(10.0f) * v2; - actor->_612.x = DEG2SHORT_ANGLE(-10 * (actor->_5F4 + actor->init_data._0C - actor->_5A0.y)); + actor->_612.x = DEG2SHORT_ANGLE(-10 * (actor->_5F4 + actor->init_data._0C - actor->position.y)); actor->_612.x = CLAMP(actor->_612.x, DEG2SHORT_ANGLE(-50), DEG2SHORT_ANGLE(50)); actor->_5D0.y = 0.0f; @@ -155,9 +155,9 @@ void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_636 = 0; } - actor->_62E &= ~0xC0; + actor->_62E_flags &= ~0xC0; actor->_5EC = 0.0f; - actor->_34 = mfish_koi_normal_process; + actor->currentProcess = mfish_koi_normal_process; } void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -183,7 +183,7 @@ void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } else { mfish_koi_dummy_process_init(actor); } - } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { + } else if (actor->_5E8 > 1.0f && actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) > 0) { actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); } else { @@ -196,25 +196,25 @@ void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { void mfish_koi_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 s3 = DEG2SHORT_ANGLE(RANDOM_F(30.0f)) + DEG2SHORT_ANGLE(60.0f); actor->_618.y = ABS(DEG2SHORT_ANGLE2((SHORT2DEG_ANGLE2(s3) / 120.0f) * 3.0f + 2.0f)); - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { s3 = -s3; } - } else if (actor->_62E & 0xC0) { - if (actor->_62E & 0x40) { + } else if (actor->_62E_flags & 0xC0) { + if (actor->_62E_flags & 0x40) { s3 = ABS(s3); } else { s3 = -ABS(s3); } - actor->_62E &= ~0xC0; - } else if (actor->_62E & 0x20 && (actor->_62A - actor->_60C.y) < 0) { + actor->_62E_flags &= ~0xC0; + } else if (actor->_62E_flags & 0x20 && (actor->_62A - actor->_60C.y) < 0) { s3 = -s3; } if (s3 > 0) { - actor->_62E |= 0x40; + actor->_62E_flags |= 0x40; } else { - actor->_62E |= 0x80; + actor->_62E_flags |= 0x80; } actor->_612.y += s3; @@ -227,7 +227,7 @@ void mfish_koi_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5EC = 0.0f; actor->_5F0 = actor->init_data._10; - actor->_34 = mfish_koi_turn_process; + actor->currentProcess = mfish_koi_turn_process; } void mfish_koi_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -309,9 +309,9 @@ void mfish_koi_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_636 = DEG2SHORT_ANGLE(-90); } - actor->_62E &= ~0xC0; + actor->_62E_flags &= ~0xC0; actor->_5EC = 0.0f; - actor->_34 = mfish_koi_peck_process; + actor->currentProcess = mfish_koi_peck_process; } void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -337,14 +337,15 @@ void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (RANDOM_F(1.0f) < 0.8f) { actor->_5E8 = -0.05f - RANDOM_F(0.1f); actor->_5F0 = 0.05f; - actor->_626 = DEG2SHORT_ANGLE(0.33f); + actor->activityFrameCount = DEG2SHORT_ANGLE(0.33f); } else { actor->_5E8 = -0.1f - RANDOM_F(0.05f); actor->_5F0 = 0.05f; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); // actor->_626 >>= 3; } - actor->_628 = actor->_626; + actor->savedActivityFrameCount = actor->activityFrameCount; // actor->_5F0 = 0.0f; } } @@ -352,7 +353,7 @@ void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_koi_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_5F0 = MAX(MIN(actor->_5E8, 0.5f), 0.05f); actor->_5EC = 0.0f; - actor->_34 = mfish_koi_long_move_process; + actor->currentProcess = mfish_koi_long_move_process; } void mfish_koi_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { @@ -367,7 +368,7 @@ 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) { xyz_t p; - if ((actor->_34 != mfish_koi_turn_process && actor->_34 != mfish_koi_long_move_process) || + if ((actor->currentProcess != mfish_koi_turn_process && actor->currentProcess != mfish_koi_long_move_process) || actor->_640 > DEG2SHORT_ANGLE(0)) { add_calc0(&actor->_5E8, 1.0f - actor->init_data._18, GETREG(TAKREG, 0x13) * 0.001f + 0.01f); } else { @@ -378,28 +379,29 @@ void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y) * cos_s(actor->_60C.x); actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y) * cos_s(actor->_60C.x); add_calc(&actor->_5D0.y, MAX(ABS(actor->_5E8 * sin_s(actor->_60C.x)), 0.1f), 0.1f, 0.1f, 0.005f); - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); + add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); mfish_koi_move_smooth(actor, game); mfish_get_flow_vec(&p, actor, game); - actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; - actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; - actor->_5A0.y += actor->_5DC.y * 0.05f; - actor->_5A0.y = MAX(60.f, MIN(110.f, actor->_5A0.y)); + actor->position.x += actor->_5D0.x + actor->_5DC.x; + actor->position.z += actor->_5D0.z + actor->_5DC.z; + actor->position.y += actor->_5DC.y * 0.05f; + actor->position.y = MAX(60.f, MIN(110.f, actor->position.y)); } void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { //! NOTE: wrong floats in this file, based on objdiff if (actor->_5F8 > actor->init_data._08 * 20.f) { actor->_5F8 = 0.0f; - actor->_626 = 0; + actor->activityFrameCount = 0; } - if (actor->_626-- <= 0) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + if (actor->activityFrameCount-- <= 0) { + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; if (mfish_peck_check(actor, gamex)) { - actor->_626 >>= 1; - actor->_628 = actor->_626; + actor->activityFrameCount >>= 1; + actor->savedActivityFrameCount = actor->activityFrameCount; mfish_koi_tail_anim_set(actor, 0); mfish_koi_peck_process_init(actor, gamex); } else if (mfish_WallCheck(actor)) { @@ -409,12 +411,13 @@ void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_koi_tail_anim_set(actor, 0); mfish_koi_normal_process_init(actor); } - } else if (actor->_34 == mfish_koi_normal_process) { - if ((actor->_62E & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || - (actor->_62E & 0x20 && + } else if (actor->currentProcess == mfish_koi_normal_process) { + if ((actor->_62E_flags & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(30)) || + (actor->_62E_flags & 0x20 && ABS((s16)(DEG2SHORT_ANGLE(180) + actor->_62A - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; mfish_koi_tail_anim_set(actor, 1); mfish_koi_turn_process_init(actor); } @@ -422,7 +425,7 @@ void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { // actor->_5AC.y = 0.0f; actor->_638 += DEG2SHORT_ANGLE(10); - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); if (ABS(actor->_618.z) < ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) { add_calc2(&actor->_5E8, MAX(0.1f, actor->_5E8), 0.2f, 0.25f); } @@ -437,13 +440,13 @@ void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { mfish_onefish_mv(actor, game); mfish_koi_base_mv(actor, game); Museum_Fish_BGCheck(actor, game); - if ((actor->_34 == mfish_koi_dummy_process || actor->_34 == mfish_koi_long_move_process) && + if ((actor->currentProcess == mfish_koi_dummy_process || actor->currentProcess == mfish_koi_long_move_process) && (play->game_frame & 0xff) == 0 && RANDOM_F(1) < 0.3f) { mfish_koi_tail_anim_set(actor, 2); } if (actor->_640 > 0) { actor->_640--; - if (actor->_34 == mfish_koi_dummy_process || actor->_34 == mfish_koi_long_move_process) { + if (actor->currentProcess == mfish_koi_dummy_process || actor->currentProcess == mfish_koi_long_move_process) { add_calc2(&actor->_38._00.frame_control.speed, (actor->_5AC.x * MAX(actor->_5F0 - actor->_5E8, 0.0f)) / (actor->init_data._10 + actor->init_data._14) + @@ -500,13 +503,13 @@ void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mtxp = &skele->_2b0; } OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0.0f, actor->init_data._04 * 0.25f, actor->init_data._24 * 1.5f, 1); Matrix_RotateX(actor->_60C.x, 1); Matrix_RotateZ(MY_CLAMP(-(actor->_618.z >> 2), DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20)), 1); Matrix_translate(0.0f, -actor->init_data._04 * 0.25f, -actor->init_data._24 * 0.5f, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_koi_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_kurage.c_inc b/src/actor/ac_museum_fish_kurage.c_inc index bdb53505..eec6471d 100644 --- a/src/actor/ac_museum_fish_kurage.c_inc +++ b/src/actor/ac_museum_fish_kurage.c_inc @@ -14,8 +14,8 @@ void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_638 = qrand(); actor->_618 = ZeroSVec; actor->_622 = 0; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_594 = NULL; actor->_598 = NULL; actor->_624 = 3; @@ -23,16 +23,16 @@ void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_kurage_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); - actor->_34 = mfish_kurage_normal; + actor->currentProcess = mfish_kurage_normal; } void mfish_kurage_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { mfish_kurage_turn_init(actor, gamex); - } else if (actor->_626 < 0) { + } else if (actor->activityFrameCount < 0) { actor->_612.y = qrand(); actor->_612.x = qrand(); @@ -49,8 +49,9 @@ void mfish_kurage_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.x > (s16)(actor->_60C.x + DEG2SHORT_ANGLE(180))) { actor->_612.x = actor->_60C.x - (DEG2SHORT_ANGLE(180) - 1); } - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); } else if (actor->_5F8 > actor->init_data._08 * 10.0f) { f32 v = RANDOM_F(0.5f) + 0.5f; @@ -67,9 +68,10 @@ void mfish_kurage_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.x = DEG2SHORT_ANGLE(-90.0f + RANDOM2_F(60.0f)); } - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_626 >>= 1; - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->activityFrameCount >>= 1; + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); } } @@ -83,17 +85,18 @@ void mfish_kurage_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(-135); } actor->_5F0 = actor->init_data._14 + actor->init_data._10; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; - actor->_34 = mfish_kurage_turn; + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; + actor->currentProcess = mfish_kurage_turn; } void mfish_kurage_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if ((s16)(actor->_612.x - actor->_60C.x) == 0 && (s16)(actor->_612.y - actor->_60C.y) == 0) { mfish_kurage_normal_init(actor, gamex); - } else if (actor->_626 < 0) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + } else if (actor->activityFrameCount < 0) { + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._14 + actor->init_data._10; } } @@ -104,11 +107,11 @@ void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { xyz_t p; f32 t; - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); actor->_5F4 = GETREG(TAKREG, 0x55) * 0.001f + 0.035f; actor->_632 += actor->_63A; actor->_63C += actor->_618.y; - if (actor->_62E & 0x20) { + if (actor->_62E_flags & 0x20) { add_calc_short_angle2(&actor->_618.y, DEG2SHORT_ANGLE(8), CALC_EASE(0.5f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.05f)); } else { @@ -116,7 +119,7 @@ void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { DEG2SHORT_ANGLE(0.05f)); } actor->_622 = DEG2SHORT_ANGLE(actor->_5E8 * 12.0f + 0.2f + GETREG(TAKREG, 0x1a) * 0.1f); - if (actor->_626 > actor->_628 - 20) { + if (actor->activityFrameCount > actor->savedActivityFrameCount - 20) { add_calc2(&actor->_5EC, 0.1f, 0.5f, 0.02f); } add_calc2(&actor->_5E8, actor->_5F0, 0.1f, actor->_5EC); @@ -152,37 +155,37 @@ void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { GETREG(TAKREG, 0x3d) * 0.01f + 0.25f, GETREG(TAKREG, 0x3e) * 0.01f + 0.2f); } - if (actor->_5A0.y < (55.0f + actor->init_data._08) + 10.0f) { - t = (10.f - (actor->_5A0.y - (55.0f + actor->init_data._08))); + if (actor->position.y < (55.0f + actor->init_data._08) + 10.0f) { + t = (10.f - (actor->position.y - (55.0f + actor->init_data._08))); t *= (GETREG(TAKREG, 0x3C) * 0.0001f + 0.01f); add_calc2(&actor->_5DC.y, t, GETREG(TAKREG, 0x3D) * 0.01f + 0.25f, GETREG(TAKREG, 0x3E) * 0.01f + 0.2f); - } else if (actor->_5A0.y > (110.0f - actor->init_data._08) - 10.0f) { - t = -(10.f - ((110.0f - actor->init_data._08) - actor->_5A0.y)); + } else if (actor->position.y > (110.0f - actor->init_data._08) - 10.0f) { + t = -(10.f - ((110.0f - actor->init_data._08) - actor->position.y)); t *= (GETREG(TAKREG, 0x3C) * 0.0001f + 0.01f); add_calc2(&actor->_5DC.y, t, GETREG(TAKREG, 0x3D) * 0.01f + 0.25f, GETREG(TAKREG, 0x3E) * 0.01f + 0.2f); } - actor->_5A0.x += actor->_5D0.x + actor->_5DC.x; - actor->_5A0.y += actor->_5D0.y + actor->_5DC.y; - actor->_5A0.z += actor->_5D0.z + actor->_5DC.z; + actor->position.x += actor->_5D0.x + actor->_5DC.x; + actor->position.y += actor->_5D0.y + actor->_5DC.y; + actor->position.z += actor->_5D0.z + actor->_5DC.z; - actor->_5B8 = actor->_5A0; + actor->_5B8 = actor->position; Museum_Fish_BGCheck(actor, gamex); - if (actor->_5A0.y < 55.0f + actor->init_data._08) { - actor->_5A0.y = 55.0f + actor->init_data._08; + if (actor->position.y < 55.0f + actor->init_data._08) { + actor->position.y = 55.0f + actor->init_data._08; actor->_612.x = DEG2SHORT_ANGLE(-30); - } else if (actor->_5A0.y > 110.f - actor->init_data._08 - actor->_608 * 0.2f) { - actor->_5A0.y = 110.f - actor->init_data._08 - actor->_608 * 0.2f; + } else if (actor->position.y > 110.f - actor->init_data._08 - actor->_608 * 0.2f) { + actor->position.y = 110.f - actor->init_data._08 - actor->_608 * 0.2f; if (actor->_612.x > 0) { actor->_612.x = DEG2SHORT_ANGLE(120); } else { actor->_612.x = DEG2SHORT_ANGLE(-120); } } - actor->_626--; + actor->activityFrameCount--; } extern Gfx act_mus_kurage_sakana_body_model[]; @@ -193,9 +196,10 @@ void mfish_kurage_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { a += (actor->_5F4 * sin_s(actor->_632) + 1.0f); OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); - Matrix_scale(actor->init_data._00 * a, actor->init_data._00 * (1.0f / SQ(a)), actor->init_data._00 * a, 1); + Matrix_scale(actor->init_data.renderScale * a, actor->init_data.renderScale * (1.0f / SQ(a)), + actor->init_data.renderScale * a, 1); Matrix_push(); Matrix_RotateY(actor->_63C, 1); diff --git a/src/actor/ac_museum_fish_medaka.c_inc b/src/actor/ac_museum_fish_medaka.c_inc index f0889722..3789e73c 100644 --- a/src/actor/ac_museum_fish_medaka.c_inc +++ b/src/actor/ac_museum_fish_medaka.c_inc @@ -13,20 +13,20 @@ void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5AC = ZeroVec; actor->_638 = qrand(); actor->_622 = 0; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); actor->_624 = 6; mfish_medaka_normal_init(actor, gamex); } void mfish_medaka_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - if (actor->_630 == 2) { - if (actor->_626 < 0) { + if (actor->group == 2) { + if (actor->activityFrameCount < 0) { actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); } } else { actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; } - actor->_34 = mfish_medaka_normal; + actor->currentProcess = mfish_medaka_normal; } void mfish_medaka_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -36,15 +36,16 @@ void mfish_medaka_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { mfish_medaka_turn_init(actor, gamex); - } else if (actor->_62E & 0x20) { + } else if (actor->_62E_flags & 0x20) { add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f), DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f)); - } else if (actor->_626 < 0) { + } else if (actor->activityFrameCount < 0) { f32 v = RANDOM_F(1.0f); - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); if (RANDOM_F(1.0f) < 0.5f) { actor->_612.y += DEG2SHORT_ANGLE((v - 0.3f) * 90.f); @@ -56,12 +57,13 @@ void mfish_medaka_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } } else if (actor->_5F8 > actor->init_data._08 * 30.f) { f32 v = RANDOM_F(1.0f); - s16 s = search_position_angleY(&suisou_pos[actor->_630], &actor->_5A0); + s16 s = search_position_angleY(&suisou_pos[actor->group], &actor->position); actor->_5F8 = 0.0f; actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90)); - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_626 >>= 1; - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->activityFrameCount >>= 1; + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._14 + actor->init_data._10; } } @@ -73,7 +75,7 @@ void mfish_medaka_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115); } actor->_5F0 = actor->init_data._14 + actor->init_data._10; - actor->_34 = mfish_medaka_turn; + actor->currentProcess = mfish_medaka_turn; } void mfish_medaka_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -92,7 +94,7 @@ void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f32 v; xyz_t p; - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), @@ -113,23 +115,23 @@ void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5D0.z = v * cos_s(actor->_60C.y); actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x); mfish_get_flow_vec(&p, actor, gamex); - actor->_5A0.x += actor->_5D0.x + p.x; - actor->_5A0.y += actor->_5D0.y + p.y; - actor->_5A0.z += actor->_5D0.z + p.z; + actor->position.x += actor->_5D0.x + p.x; + actor->position.y += actor->_5D0.y + p.y; + actor->position.z += actor->_5D0.z + p.z; mfish_onefish_mv(actor, gamex); add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f); - actor->_5B8 = actor->_5A0; + actor->_5B8 = actor->position; Museum_Fish_BGCheck(actor, gamex); - if (actor->_5A0.y < 70.f + actor->init_data._08) { - actor->_5A0.y = 70.f + actor->init_data._08; + if (actor->position.y < 70.f + actor->init_data._08) { + actor->position.y = 70.f + actor->init_data._08; if (actor->_612.x > 0) { actor->_612.x = DEG2SHORT_ANGLE(-30); } - } else if (actor->_5A0.y > 100.f - actor->init_data._08) { - actor->_5A0.y = 100.f - actor->init_data._08; + } else if (actor->position.y > 100.f - actor->init_data._08) { + actor->position.y = 100.f - actor->init_data._08; actor->_612.x = DEG2SHORT_ANGLE(30); } else { - actor->_626--; + actor->activityFrameCount--; } actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x)); @@ -163,12 +165,12 @@ void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } s = actor->_60C.x * (GETREG(TAKREG, 0x41) * 0.01f + 0.75f); OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1); Matrix_RotateX(s, 1); Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_medaka_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_namazu.c_inc b/src/actor/ac_museum_fish_namazu.c_inc index 89911764..e9728e0d 100644 --- a/src/actor/ac_museum_fish_namazu.c_inc +++ b/src/actor/ac_museum_fish_namazu.c_inc @@ -7,14 +7,14 @@ void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.y = actor->_60C.y; actor->_5F4 = 0.0f; actor->_5AC = ZeroVec; - if (actor->_59C == 4) { + if (actor->fishIDEnum == aGYO_TYPE_CATFISH) { actor->_5AC.y = 1500.f; } else { actor->_5AC.y = 1700.f; } actor->_638 = qrand(); actor->_622 = actor->_60C.y; - actor->_5A0.z += 40.0f; + 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; @@ -66,8 +66,8 @@ void mfish_namazu_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_636 = DEG2SHORT_ANGLE(-180); } - actor->_62E &= ~0xC0; - actor->_34 = mfish_namazu_normal_process; + actor->_62E_flags &= ~0xC0; + actor->currentProcess = mfish_namazu_normal_process; } void mfish_namazu_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -85,7 +85,7 @@ void mfish_namazu_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_5E8 < 0.01f) { mfish_namazu_dummy_process_init(actor); - } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { + } else if (actor->_5E8 > 1.0f && actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) > 0) { actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); } else { @@ -98,7 +98,7 @@ void mfish_namazu_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_namazu_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { actor->_634 = mfish_get_hide_camera_angle(actor); add_calc_short_angle2(&actor->_634, actor->_612.y, CALC_EASE(0.5f), DEG2SHORT_ANGLE(10), DEG2SHORT_ANGLE(0.5f)); - actor->_34 = mfish_namazu_dummy_process; + actor->currentProcess = mfish_namazu_dummy_process; } void mfish_namazu_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) { @@ -116,31 +116,31 @@ void mfish_namazu_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 angle = DEG2SHORT_ANGLE(RANDOM_F(60.0f)) + DEG2SHORT_ANGLE(30); actor->_618.y = DEG2SHORT_ANGLE(0.5f + SHORT2DEG_ANGLE2(angle) / 90.f); - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { if ((s16)(actor->_60C.y - actor->_62C) < 0) { angle = -angle; } - } else if (actor->_62E & 0xc0) { - if (actor->_62E & 0x40) { + } else if (actor->_62E_flags & 0xc0) { + if (actor->_62E_flags & 0x40) { angle = ABS(angle); } else { angle = -ABS(angle); } - } else if (actor->_62E & 0x20) { + } else if (actor->_62E_flags & 0x20) { if ((s16)(actor->_62A - actor->_60C.y) < 0) { angle = -angle; } } if (angle > 0) { - actor->_62E |= 0x40; + actor->_62E_flags |= 0x40; } else { - actor->_62E |= 0x80; + actor->_62E_flags |= 0x80; } actor->_612.y += angle; actor->_5F0 = 0.06f; - actor->_34 = mfish_namazu_turn_process; + actor->currentProcess = mfish_namazu_turn_process; } void mfish_namazu_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor) { @@ -180,8 +180,8 @@ void mfish_namazu_ground_sweep_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) { } else { actor->_636 = DEG2SHORT_ANGLE(-180); } - actor->_62E &= ~0xc0; - actor->_34 = mfish_namazu_ground_sweep_process; + actor->_62E_flags &= ~0xc0; + actor->currentProcess = mfish_namazu_ground_sweep_process; } void mfish_namazu_ground_sweep_process(MUSEUM_FISH_PRIVATE_DATA* actor) { @@ -199,7 +199,7 @@ void mfish_namazu_ground_sweep_process(MUSEUM_FISH_PRIVATE_DATA* actor) { if (actor->_5E8 < 0.01f) { mfish_namazu_dummy_process_init(actor); - } else if (actor->_5E8 > 1.0f && actor->_62E & 0x1e) { + } else if (actor->_5E8 > 1.0f && actor->_62E_flags & 0x1e) { if ((s16)(actor->_612.y - actor->_62C) > 0) { actor->_612.y = actor->_62C + DEG2SHORT_ANGLE(112.5f); } else { @@ -213,25 +213,26 @@ void mfish_namazu_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); add_calc(&actor->_5D0.y, MAX(ABS(sin_s(actor->_60C.x) * actor->_5E8), 0.1f), 0.1f, 0.1f, 0.005f); - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); + add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, actor->_5D0.y); mfish_move_smooth(actor, gamex); - actor->_5A0.x += actor->_5D0.x; - actor->_5A0.z += actor->_5D0.z; - actor->_5A0.y = MAX(60.f, MIN(110.f, actor->_5A0.y)); + actor->position.x += actor->_5D0.x; + actor->position.z += actor->_5D0.z; + actor->position.y = MAX(60.f, MIN(110.f, actor->position.y)); } void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - xyz_t p = suisou_pos[actor->_630]; + xyz_t p = suisou_pos[actor->group]; f32 v; int s; mfish_onefish_mv(actor, gamex); if (actor->_5F8 > actor->init_data._08 * 10.0f) { actor->_5F8 = 0.0f; - actor->_626 = 0; + actor->activityFrameCount = 0; } - if (actor->_626-- <= 0) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + if (actor->activityFrameCount-- <= 0) { + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; if (actor->_644 <= 0 && RANDOM_F(1.0f) < 0.2f) { actor->_644 = (s16)RANDOM_F(300.f) + 300; mfish_namazu_ground_sweep_process_init(actor); @@ -240,18 +241,19 @@ void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } else { mfish_namazu_normal_process_init(actor); } - } else if (actor->_34 == mfish_namazu_normal_process) { - if ((actor->_62E & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(45)) || - (actor->_62E & 0x20 && + } else if (actor->currentProcess == mfish_namazu_normal_process) { + if ((actor->_62E_flags & 0x1e && ABS((s16)(actor->_62C - actor->_60C.y)) < DEG2SHORT_ANGLE(45)) || + (actor->_62E_flags & 0x20 && ABS((s16)(actor->_62A + DEG2SHORT_ANGLE(180) - actor->_60C.y)) < DEG2SHORT_ANGLE(30))) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; mfish_namazu_turn_process_init(actor); } } actor->_638 += DEG2SHORT_ANGLE(10); - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); if (ABS(actor->_618.z) > DEG2SHORT_ANGLE(20) && ABS(actor->_622 - actor->_618.z) < DEG2SHORT_ANGLE(30)) { add_calc2(&actor->_5E8, 0.2f + 0.01f * GETREG(TAKREG, 0x2d), 0.25f + 0.01f * GETREG(TAKREG, 0x2e), 0.05f + 0.01f * GETREG(TAKREG, 0x2f)); @@ -274,9 +276,9 @@ void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_38._00.frame_control.speed = (actor->_5E8 * 0.75f) / (actor->init_data._10 + actor->init_data._14) + 0.125f; mfish_namazu_base_FishMove(actor, gamex); Museum_Fish_BGCheck(actor, gamex); - xyz_t_sub(&p, &actor->_5A0, &p); + xyz_t_sub(&p, &actor->position, &p); v = 60.f + MAX(ABS(p.x), ABS(p.z)) * -0.15f; - actor->_5A0.y = v + actor->init_data._04; + actor->position.y = v + actor->init_data._04; mfish_namazu_body_wind_anime_play(actor, gamex); } @@ -314,10 +316,10 @@ void mfish_namazu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mtxp = &skele->_2b0; } OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_namazu_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_seafish.c_inc b/src/actor/ac_museum_fish_seafish.c_inc index 2e4a8d86..2ac49a41 100644 --- a/src/actor/ac_museum_fish_seafish.c_inc +++ b/src/actor/ac_museum_fish_seafish.c_inc @@ -11,8 +11,8 @@ void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { actor->_5AC = ZeroVec; actor->_638 = qrand(); actor->_622 = 0; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_624 = 2; actor->_594 = NULL; actor->_598 = NULL; @@ -23,11 +23,11 @@ void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } void mfish_seafish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); actor->_5EC = Rnd_EX_f(0.15f) + 0.15f; - actor->_34 = mfish_seafish_normal; + actor->currentProcess = mfish_seafish_normal; } void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -44,36 +44,36 @@ void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { (s16)DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); if (actor->_598 != NULL) { - o_5a0_z = actor->_598->_5A0.z; - o_5a0_y = actor->_598->_5A0.y; + o_5a0_z = actor->_598->position.z; + o_5a0_y = actor->_598->position.y; sum_i_8 = (actor->_598->init_data._08 + actor->init_data._08); - abs_diff_sum = MAX(sum_i_8 - ABS(actor->_598->_5A0.z - actor->_5A0.z), 0.f); + abs_diff_sum = MAX(sum_i_8 - ABS(actor->_598->position.z - actor->position.z), 0.f); abs_diff_sum /= sum_i_8; - if (actor->_598->_59C != 0x23) { - f32 this_5a0_y = actor->_5A0.y; - if (o_5a0_y < actor->_5A0.y) { + if (actor->_598->fishIDEnum != aGYO_TYPE_JELLYFISH) { + f32 this_5a0_y = actor->position.y; + if (o_5a0_y < actor->position.y) { t = o_5a0_y + (actor->_598->init_data._04 + actor->init_data._04); if (this_5a0_y < t) { - add_calc2(&actor->_5A0.y, t + 2.0f, 0.2f, abs_diff_sum * 0.1f); + add_calc2(&actor->position.y, t + 2.0f, 0.2f, abs_diff_sum * 0.1f); } } else { t = o_5a0_y - (actor->_598->init_data._04 + actor->init_data._04); if (this_5a0_y > t) { - add_calc2(&actor->_5A0.y, t - 2.0f, 0.2f, abs_diff_sum * 0.1f); + add_calc2(&actor->position.y, t - 2.0f, 0.2f, abs_diff_sum * 0.1f); } } } - if (actor->_598->_5A0.z < actor->_5A0.z) { + if (actor->_598->position.z < actor->position.z) { // swap here o_5a0_z += sum_i_8; - add_calc2(&actor->_5A0.z, o_5a0_z, 0.1f, abs_diff_sum * 0.1f); + 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->_5A0.z, o_5a0_z, 0.1f, abs_diff_sum * 0.1f); + add_calc2(&actor->position.z, o_5a0_z, 0.1f, abs_diff_sum * 0.1f); } } @@ -105,8 +105,8 @@ void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(-90), CALC_EASE(0.5f), DEG2SHORT_ANGLE(7.5f), DEG2SHORT_ANGLE(0.5f)); } - } else if (actor->_62E & 0x100) { - actor->_5A0.z += 0.05f; + } else if (actor->_62E_flags & 0x100) { + actor->position.z += 0.05f; if (ABS((s16)(actor->_612.y - DEG2SHORT_ANGLE(180))) < DEG2SHORT_ANGLE(110)) { if (actor->_612.y > 0) { actor->_612.y -= DEG2SHORT_ANGLE(1.5f); @@ -114,15 +114,15 @@ void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.y += DEG2SHORT_ANGLE(1.5f); } } - } else if (actor->_62E & 0x1e) { + } else if (actor->_62E_flags & 0x1e) { mfish_seafish_turn_init(actor, gamex); - } else if (actor->_62E & 0x20 && actor->_5F8 > actor->init_data._08 * 0.5f) { + } else if (actor->_62E_flags & 0x20 && actor->_5F8 > actor->init_data._08 * 0.5f) { if (actor->init_data._20 > actor->_594->init_data._20) { s16 escAngle = mfish_get_escape_angle(actor, gamex); add_calc_short_angle2(&actor->_612.y, escAngle, CALC_EASE(0.25f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0)); } - } else if (actor->_626 < 0) { + } else if (actor->activityFrameCount < 0) { // r in wrong register here r = RANDOM_F(1.0f); actor->_612.y = actor->_60C.y; @@ -131,8 +131,9 @@ void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } else { actor->_612.y -= (s16)(r * actor->init_data._30); } - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); } } @@ -148,13 +149,13 @@ void mfish_seafish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } if ((s16)(actor->_60C.y - s) > 0) { - if (actor->_62E & 6) { + if (actor->_62E_flags & 6) { s = s + DEG2SHORT_ANGLE(170); } else { s = s + DEG2SHORT_ANGLE(95); } } else { - if (actor->_62E & 6) { + if (actor->_62E_flags & 6) { s = s - DEG2SHORT_ANGLE(170); } else { s = s - DEG2SHORT_ANGLE(95); @@ -162,7 +163,7 @@ void mfish_seafish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { } if (ABS((s16)(s - actor->_612.y)) > DEG2SHORT_ANGLE(45)) { - actor->_34 = mfish_seafish_turn; + actor->currentProcess = mfish_seafish_turn; } actor->_612.y = s; } @@ -180,19 +181,19 @@ 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->_34(actor, gamex); + actor->currentProcess(actor, gamex); actor->_618.x += DEG2SHORT_ANGLE(actor->_5E8 * RANDOM_F(3.0f)); actor->_5F4 = sin_s(actor->_618.x) * 5.0f; - if (actor->_62E & 0x20) { - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.02f, 0.05f); + if (actor->_62E_flags & 0x20) { + add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.02f, 0.05f); } else { - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, 0.1f); + add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, 0.1f); } add_calc0(&actor->_5F8, 0.25f, 0.05f); actor->_5F8 = MIN(1.0f, actor->_5F8); if (ABS(actor->_618.z) > DEG2SHORT_ANGLE(15) && ABS(actor->_622) - ABS(actor->_618.z) < 0) { add_calc2(&actor->_5E8, MAX(actor->_5F0, 0.8f), 0.5f, 0.25f); - } else if (actor->_626 < actor->_628 - 80) { + } else if (actor->activityFrameCount < actor->savedActivityFrameCount - 80) { add_calc2(&actor->_5E8, actor->_5EC, 1.0f - actor->init_data._18, 0.0025f); } else if (actor->_5E8 > actor->_5F0) { add_calc2(&actor->_5E8, actor->_5F0, 0.1f, 0.01f); @@ -204,15 +205,15 @@ void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5D0.x = actor->_5E8 * sin_s(actor->_60C.y); actor->_5D0.z = actor->_5E8 * cos_s(actor->_60C.y); mfish_get_flow_vec(&p, actor, gamex); - actor->_5A0.x += actor->_5D0.x + p.x; - actor->_5A0.z += actor->_5D0.z + p.z; + actor->position.x += actor->_5D0.x + p.x; + actor->position.z += actor->_5D0.z + p.z; mfish_onefish_mv(actor, gamex); mfish_body_wind_anime_play(actor, gamex); Museum_Fish_BGCheck(actor, gamex); - if (actor->_5A0.y < GETREG(TAKREG, 0x47) + 55.0f - actor->init_data._04) { - actor->_5A0.y = GETREG(TAKREG, 0x47) + 55.0f - actor->init_data._04; + if (actor->position.y < GETREG(TAKREG, 0x47) + 55.0f - actor->init_data._04) { + actor->position.y = GETREG(TAKREG, 0x47) + 55.0f - actor->init_data._04; } - actor->_626--; + actor->activityFrameCount--; } BOOL mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, @@ -241,10 +242,10 @@ void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mtxp = &skele->_2b0; } OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_seafish_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_small_fish.c_inc b/src/actor/ac_museum_fish_small_fish.c_inc index 730952e0..9c9b77eb 100644 --- a/src/actor/ac_museum_fish_small_fish.c_inc +++ b/src/actor/ac_museum_fish_small_fish.c_inc @@ -13,20 +13,20 @@ void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5AC = ZeroVec; actor->_638 = qrand(); actor->_622 = 0; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); actor->_624 = 6; mfish_sfish_normal_init(actor, gamex); } void mfish_sfish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - if (actor->_630 == 2) { - if (actor->_626 < 0) { + if (actor->group == 2) { + if (actor->activityFrameCount < 0) { actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); } } else { actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; } - actor->_34 = mfish_sfish_normal; + actor->currentProcess = mfish_sfish_normal; } void mfish_sfish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -36,19 +36,20 @@ void mfish_sfish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { CALC_EASE2(GETREG(TAKREG, 0x17) * 0.01f + 0.5f), DEG2SHORT_ANGLE(7.5f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.z, actor->_622, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(5), DEG2SHORT_ANGLE(0.25f)); - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { mfish_sfish_turn_init(actor, gamex); - } else if (actor->_62E & 0x20) { + } else if (actor->_62E_flags & 0x20) { add_calc_short_angle2(&actor->_612.y, mfish_get_escape_angle(actor, gamex), CALC_EASE(0.5f), DEG2SHORT_ANGLE(15), DEG2SHORT_ANGLE(0.5f)); - } else if (actor->_626 < 0) { + } else if (actor->activityFrameCount < 0) { f32 v = RANDOM_F(1.0f); - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); - if (actor->_630 == 2 && actor->_5F0 < actor->init_data._10 + actor->init_data._14 * 0.5f) { + if (actor->group == 2 && actor->_5F0 < actor->init_data._10 + actor->init_data._14 * 0.5f) { actor->_612.y = atans_table(-actor->_5DC.z, -actor->_5DC.x); - actor->_626 *= 5; + actor->activityFrameCount *= 5; } if (RANDOM_F(1.0f) < 0.5f) { @@ -64,12 +65,13 @@ void mfish_sfish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { s16 s; //! BUG: unused? RANDOM_F(1.0f); - s = search_position_angleY(&suisou_pos[actor->_630], &actor->_5A0); + s = search_position_angleY(&suisou_pos[actor->group], &actor->position); actor->_5F8 = 0.0f; actor->_612.y = s + DEG2SHORT_ANGLE(RANDOM2_F(90.0)); - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_626 >>= 1; - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->activityFrameCount >>= 1; + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._14 + actor->init_data._10; } } @@ -81,14 +83,14 @@ void mfish_sfish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.y = actor->_62C - DEG2SHORT_ANGLE(115); } - if (actor->_630 == 2) { + if (actor->group == 2) { if (actor->_5F0 < 0.0f) { actor->_5F0 = actor->init_data._10 + MAX(-actor->init_data._10, RANDOM_F(actor->init_data._14)); } } else { actor->_5F0 = actor->init_data._14 + actor->init_data._10; } - actor->_34 = mfish_sfish_turn; + actor->currentProcess = mfish_sfish_turn; } void mfish_sfish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -107,7 +109,7 @@ void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f32 v; xyz_t p; int s; - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); actor->_61E = add_calc_short_angle2(&actor->_60C.x, actor->_612.x, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(1.75f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_618.x, actor->_61E, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), @@ -131,30 +133,30 @@ void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5D0.z = v * cos_s(actor->_60C.y); actor->_5D0.y = -actor->_5E8 * sin_s(actor->_60C.x); mfish_get_flow_vec(&p, actor, gamex); - actor->_5A0.x += actor->_5D0.x + p.x; - actor->_5A0.y += actor->_5D0.y + p.y; - actor->_5A0.z += actor->_5D0.z + p.z; + actor->position.x += actor->_5D0.x + p.x; + actor->position.y += actor->_5D0.y + p.y; + actor->position.z += actor->_5D0.z + p.z; mfish_onefish_mv(actor, gamex); - if (actor->_630 == 2) { + if (actor->group == 2) { actor->_38._00.frame_control.speed = actor->_5E8 * 2.0f + 1.0f; } else { add_calc2(&actor->_38._00.frame_control.speed, actor->_5E8 * 2.0f + 0.5f, 0.2f, 0.1f); } - actor->_5B8 = actor->_5A0; + actor->_5B8 = actor->position; Museum_Fish_BGCheck(actor, gamex); - if (actor->_5A0.y < 55.0f + actor->init_data._08) { - actor->_5A0.y = 55.0f + actor->init_data._08; + if (actor->position.y < 55.0f + actor->init_data._08) { + actor->position.y = 55.0f + actor->init_data._08; if (actor->_612.x > 0) { actor->_612.x = DEG2SHORT_ANGLE(-30); } - } else if (actor->_5A0.y > 115.0f - actor->init_data._08) { - actor->_5A0.y = 115.0f - actor->init_data._08; + } else if (actor->position.y > 115.0f - actor->init_data._08) { + actor->position.y = 115.0f - actor->init_data._08; mfish_hamon_make(actor, gamex); actor->_612.x = DEG2SHORT_ANGLE(30); } else { - actor->_626--; + actor->activityFrameCount--; } actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x)); @@ -188,12 +190,12 @@ void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } v = actor->_60C.x * 0.7f; OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_RotateY(actor->_60C.y, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24 * 1.5f, 1); Matrix_RotateX(v, 1); Matrix_translate(0.0f, 0.0f, -actor->init_data._24 * 0.5f, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_sfish_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_tai.c_inc b/src/actor/ac_museum_fish_tai.c_inc index 4088c33f..40573d63 100644 --- a/src/actor/ac_museum_fish_tai.c_inc +++ b/src/actor/ac_museum_fish_tai.c_inc @@ -11,8 +11,8 @@ void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5AC = ZeroVec; actor->_638 = qrand(); actor->_622 = 0; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_624 = 2; actor->_594 = NULL; actor->_598 = NULL; @@ -22,12 +22,13 @@ void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_tai_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - if (actor->_34 == mfish_tai_turn) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + if (actor->currentProcess == mfish_tai_turn) { + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = RANDOM_F(actor->init_data._14) + actor->init_data._10; } - actor->_34 = mfish_tai_normal; + actor->currentProcess = mfish_tai_normal; } void mfish_tai_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -43,28 +44,28 @@ void mfish_tai_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (actor->_598) { f32 d = (actor->_598->init_data._08 + actor->init_data._08); - f32 o_y = actor->_598->_5A0.y; - f32 o_z = actor->_598->_5A0.z; - f32 v = MAX(d - ABS(actor->_598->_5A0.z - actor->_5A0.z), 0.0f); + f32 o_y = actor->_598->position.y; + f32 o_z = actor->_598->position.z; + f32 v = MAX(d - ABS(actor->_598->position.z - actor->position.z), 0.0f); v = v / d; - if (actor->_598->_59C != 0x23) { - if (actor->_598->_5A0.y < actor->_5A0.y) { - if (actor->_5A0.y < (o_y + (actor->_598->init_data._04 + actor->init_data._04))) { - add_calc2(&actor->_5A0.y, (o_y + (actor->_598->init_data._04 + actor->init_data._04)) + 2.0f, 0.2f, - v * 0.1f); + if (actor->_598->fishIDEnum != aGYO_TYPE_JELLYFISH) { + if (actor->_598->position.y < actor->position.y) { + if (actor->position.y < (o_y + (actor->_598->init_data._04 + actor->init_data._04))) { + add_calc2(&actor->position.y, (o_y + (actor->_598->init_data._04 + actor->init_data._04)) + 2.0f, + 0.2f, v * 0.1f); } } else { - if (actor->_5A0.y > o_y - (actor->_598->init_data._04 + actor->init_data._04)) { - add_calc2(&actor->_5A0.y, (o_y - (actor->_598->init_data._04 + actor->init_data._04)) - 2.0f, 0.2f, - v * 0.1f); + if (actor->position.y > o_y - (actor->_598->init_data._04 + actor->init_data._04)) { + add_calc2(&actor->position.y, (o_y - (actor->_598->init_data._04 + actor->init_data._04)) - 2.0f, + 0.2f, v * 0.1f); } } } - if (actor->_598->_5A0.z < actor->_5A0.z) { - add_calc2(&actor->_5A0.z, o_z + d, 0.05f, v * 0.1f); + if (actor->_598->position.z < actor->position.z) { + add_calc2(&actor->position.z, o_z + d, 0.05f, v * 0.1f); } else { - add_calc2(&actor->_5A0.z, o_z - d, 0.05f, v * 0.1f); + add_calc2(&actor->position.z, o_z - d, 0.05f, v * 0.1f); } } @@ -96,8 +97,8 @@ void mfish_tai_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { add_calc_short_angle2(&actor->_612.y, DEG2SHORT_ANGLE(-90), CALC_EASE(0.5f), DEG2SHORT_ANGLE(7.5f), DEG2SHORT_ANGLE(0.5f)); } - } else if (actor->_62E & 0x100) { - actor->_5A0.z += 0.05f; + } else if (actor->_62E_flags & 0x100) { + actor->position.z += 0.05f; if (ABS((s16)(actor->_612.y - DEG2SHORT_ANGLE(180))) < DEG2SHORT_ANGLE(110)) { if (actor->_612.y > DEG2SHORT_ANGLE(0)) { actor->_612.y -= DEG2SHORT_ANGLE(1.5f); @@ -105,15 +106,15 @@ void mfish_tai_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.y += DEG2SHORT_ANGLE(1.5f); } } - } else if (actor->_62E & 0x1e) { + } else if (actor->_62E_flags & 0x1e) { mfish_tai_turn_init(actor, gamex); - } else if (actor->_62E & 0x20 && actor->_5F8 > actor->init_data._08 * 0.5f) { + } else if (actor->_62E_flags & 0x20 && actor->_5F8 > actor->init_data._08 * 0.5f) { if (actor->init_data._20 < actor->_594->init_data._20) { s16 escAngle = mfish_get_escape_angle(actor, gamex); add_calc_short_angle2(&actor->_612.y, escAngle, CALC_EASE(0.25f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0)); } - } else if (actor->_626 < 0) { + } else if (actor->activityFrameCount < 0) { f32 f = RANDOM_F(1.0f); actor->_612.y = actor->_60C.y; if (RANDOM_F(1.0f) < GETREG(TAKREG, 0x1c) * 0.1f + 0.1f) { @@ -137,8 +138,9 @@ void mfish_tai_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_612.y -= (s16)(f * actor->init_data._30); } } - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; actor->_5F0 = actor->init_data._10 + Rnd_EX_f(actor->init_data._14); } } @@ -151,13 +153,13 @@ void mfish_tai_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } if ((s16)(actor->_60C.y - b) > 0) { - if (actor->_62E & 6) { + if (actor->_62E_flags & 6) { b = b + DEG2SHORT_ANGLE(170); } else { b = b + DEG2SHORT_ANGLE(95); } } else { - if (actor->_62E & 6) { + if (actor->_62E_flags & 6) { b = b - DEG2SHORT_ANGLE(170); } else { b = b - DEG2SHORT_ANGLE(95); @@ -165,7 +167,7 @@ void mfish_tai_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } if (ABS((s16)(b - actor->_612.y)) > DEG2SHORT_ANGLE(45)) { - actor->_34 = mfish_tai_turn; + actor->currentProcess = mfish_tai_turn; } actor->_612.y = b; @@ -189,19 +191,19 @@ void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { xyz_t p; f32 v; - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); actor->_618.x += DEG2SHORT_ANGLE(RANDOM_F(3.0f) * actor->_5E8 + 0.1f); actor->_5F4 = sin_s(actor->_618.x) * 5.0f; - if (actor->_62E & 0x20) { - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.02f, 0.05f); + if (actor->_62E_flags & 0x20) { + add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.02f, 0.05f); } else { - add_calc2(&actor->_5A0.y, actor->_5F4 + actor->init_data._0C, 0.1f, 0.125f); + add_calc2(&actor->position.y, actor->_5F4 + actor->init_data._0C, 0.1f, 0.125f); } if (ABS(actor->_622) > DEG2SHORT_ANGLE(20)) { add_calc_short_angle2(&actor->_632, MAX(DEG2SHORT_ANGLE2((GETREG(TAKREG, 0x27) + 5.0f) * actor->_5E8), 0), CALC_EASE(0.25f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.5f)); - } else if ((actor->_62E & 0x20) == 0) { + } else if ((actor->_62E_flags & 0x20) == 0) { add_calc_short_angle2(&actor->_632, MAX(DEG2SHORT_ANGLE2((GETREG(TAKREG, 0x28) + 30.0f) * actor->_5E8), 0), CALC_EASE(0.25f), DEG2SHORT_ANGLE(5.0f), DEG2SHORT_ANGLE(0.5f)); } else { @@ -225,8 +227,8 @@ void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_get_flow_vec(&p, actor, gamex); - actor->_5A0.x += actor->_5D0.x + p.x; - actor->_5A0.z += actor->_5D0.z + p.z; + actor->position.x += actor->_5D0.x + p.x; + actor->position.z += actor->_5D0.z + p.z; mfish_onefish_mv(actor, gamex); actor->_38._00.frame_control.speed = @@ -236,11 +238,11 @@ void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_body_wind_anime_play(actor, gamex); Museum_Fish_BGCheck(actor, gamex); - if (actor->_5A0.y < (GETREG(TAKREG, 0x47) + 55.0f) - actor->init_data._04) { - actor->_5A0.y = (GETREG(TAKREG, 0x47) + 55.0f) - actor->init_data._04; + if (actor->position.y < (GETREG(TAKREG, 0x47) + 55.0f) - actor->init_data._04) { + actor->position.y = (GETREG(TAKREG, 0x47) + 55.0f) - actor->init_data._04; } - actor->_626--; + actor->activityFrameCount--; } BOOL mfish_tai_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, @@ -265,10 +267,10 @@ void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mtxp = &skele->_2b0; } OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x, actor->_5A0.y, actor->_5A0.z, 0); + Matrix_translate(actor->position.x, actor->position.y, actor->position.z, 0); Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_tai_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_unagi.c_inc b/src/actor/ac_museum_fish_unagi.c_inc index 6d84d743..e0847f91 100644 --- a/src/actor/ac_museum_fish_unagi.c_inc +++ b/src/actor/ac_museum_fish_unagi.c_inc @@ -2,10 +2,10 @@ void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_onefish_ct(actor, gamex); actor->_624 = 8; - actor->_5A0.x = 225.0f; - actor->_5A0.y = 55.0f; - actor->_5A0.z = 185.0f; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->position.x = 225.0f; + actor->position.y = 55.0f; + actor->position.z = 185.0f; + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); actor->_640 = 0; actor->_642 = 1; actor->_5AC = ZeroVec; @@ -33,9 +33,9 @@ s16 mfish_unagi_get_next_rail_type(MUSEUM_FISH_PRIVATE_DATA* actor) { void mfish_unagi_aim_wind_angle_calc(MUSEUM_FISH_PRIVATE_DATA* actor) { s16 s; - if (actor->_34 == mfish_unagi_normal_to_reverse) { + if (actor->currentProcess == mfish_unagi_normal_to_reverse) { s = 12; - } else if (actor->_34 == mfish_unagi_reverse_to_normal) { + } else if (actor->currentProcess == mfish_unagi_reverse_to_normal) { s = 19; } else { s = unagi_rail_num_tbl[actor->_646]; @@ -52,12 +52,12 @@ void mfish_unagi_aim_wind_angle_calc(MUSEUM_FISH_PRIVATE_DATA* actor) { } void mfish_unagi_rail_move_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - s16 target = search_position_angleY(&actor->_5A0, &unagi_rail_tbl[actor->_646][actor->_642]); + s16 target = search_position_angleY(&actor->position, &unagi_rail_tbl[actor->_646][actor->_642]); actor->_640 = 0; actor->_642 = 1; add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(GETREG(TAKREG, 0x24) * 0.01f + 0.5f), DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f)); - actor->_34 = mfish_unagi_rail_move; + actor->currentProcess = mfish_unagi_rail_move; } void mfish_unagi_rail_move(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -69,8 +69,8 @@ void mfish_unagi_rail_move(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { if (v < 0.0f) { v = 0.0f; } - v3 = search_position_distance(&actor->_5A0, &pp[actor->_642]); - if ((f32)(__fabs(chase_xyz_t(&actor->_5A0, &pp[actor->_642], v2))) < 0.008f) { + v3 = search_position_distance(&actor->position, &pp[actor->_642]); + if ((f32)(__fabs(chase_xyz_t(&actor->position, &pp[actor->_642], v2))) < 0.008f) { if (actor->_640 < unagi_rail_num_tbl[actor->_646] - 1) { actor->_640++; } else { @@ -88,24 +88,24 @@ void mfish_unagi_rail_move(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } v2 -= v3; if (v2 > 0.0f) { - chase_xyz_t(&actor->_5A0, &pp[actor->_642], v2); + chase_xyz_t(&actor->position, &pp[actor->_642], v2); } } mfish_unagi_aim_wind_angle_calc(actor); - s = search_position_angleY(&actor->_5A0, &pp[actor->_642]); + s = search_position_angleY(&actor->position, &pp[actor->_642]); add_calc_short_angle2(&actor->_612.y, s, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_632, actor->_612.x * v, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0)); add_calc_short_angle2(&actor->_644, actor->_612.z * v, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0)); } void mfish_unagi_normal_to_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - s16 target = search_position_angleY(&actor->_5A0, &unagi_normal_to_reverse_rail_pos[actor->_642]); + s16 target = search_position_angleY(&actor->position, &unagi_normal_to_reverse_rail_pos[actor->_642]); actor->_640 = 0; actor->_642 = 1; add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(GETREG(TAKREG, 0x24) * 0.01f + 0.5f), DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, 0x2d); - actor->_34 = mfish_unagi_normal_to_reverse; + actor->currentProcess = mfish_unagi_normal_to_reverse; } void mfish_unagi_normal_to_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -118,8 +118,8 @@ void mfish_unagi_normal_to_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) c = 0.0f; } - v1 = search_position_distance(&actor->_5A0, &p[actor->_642]); - if ((f32)__fabs(chase_xyz_t(&actor->_5A0, &p[actor->_642], v0)) < 0.008f) { + v1 = search_position_distance(&actor->position, &p[actor->_642]); + if ((f32)__fabs(chase_xyz_t(&actor->position, &p[actor->_642], v0)) < 0.008f) { if (actor->_640 < 11) { actor->_640++; } else { @@ -135,11 +135,11 @@ void mfish_unagi_normal_to_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) } v0 -= v1; if (v0 > 0.0f) { - chase_xyz_t(&actor->_5A0, &p[actor->_642], v0); + chase_xyz_t(&actor->position, &p[actor->_642], v0); } } mfish_unagi_aim_wind_angle_calc(actor); - s2 = search_position_angleY(&actor->_5A0, &p[actor->_642]); + s2 = search_position_angleY(&actor->position, &p[actor->_642]); add_calc_short_angle2(&actor->_612.y, s2, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_632, actor->_612.x * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0)); add_calc_short_angle2(&actor->_644, actor->_612.z * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0)); @@ -150,10 +150,10 @@ void mfish_unagi_rail_move_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* g s16 target; actor->_640 = 0; actor->_642 = unagi_rail_num_tbl[actor->_646] - 1; - target = search_position_angleY(&actor->_5A0, &p[actor->_642]); + target = search_position_angleY(&actor->position, &p[actor->_642]); add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(0.5f + 0.01f * GETREG(TAKREG, 0x24)), DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f)); - actor->_34 = mfish_unagi_rail_move_reverse; + actor->currentProcess = mfish_unagi_rail_move_reverse; } void mfish_unagi_rail_move_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -165,8 +165,8 @@ void mfish_unagi_rail_move_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) if (c < 0.0f) { c = 0.0f; } - v1 = search_position_distance(&actor->_5A0, &p[actor->_642]); - if ((f32)__fabs(chase_xyz_t(&actor->_5A0, &p[actor->_642], v0)) < 0.008f) { + v1 = search_position_distance(&actor->position, &p[actor->_642]); + if ((f32)__fabs(chase_xyz_t(&actor->position, &p[actor->_642], v0)) < 0.008f) { if (actor->_640 > 1) { actor->_640--; } else if (actor->_640 == 1) { @@ -187,11 +187,11 @@ void mfish_unagi_rail_move_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) } v0 -= v1; if (v0 > 0.0f) { - chase_xyz_t(&actor->_5A0, &p[actor->_642], v0); + chase_xyz_t(&actor->position, &p[actor->_642], v0); } } mfish_unagi_aim_wind_angle_calc(actor); - s2 = search_position_angleY(&actor->_5A0, &p[actor->_642]); + s2 = search_position_angleY(&actor->position, &p[actor->_642]); add_calc_short_angle2(&actor->_612.y, s2, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_632, actor->_612.x * c, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0)); add_calc_short_angle2(&actor->_644, actor->_612.z * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0)); @@ -201,10 +201,10 @@ void mfish_unagi_reverse_to_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* g s16 target; actor->_640 = 0; actor->_642 = 0x12; - target = search_position_angleY(&actor->_5A0, &unagi_reverse_to_normal_rail_pos[actor->_642]); + target = search_position_angleY(&actor->position, &unagi_reverse_to_normal_rail_pos[actor->_642]); add_calc_short_angle2(&actor->_612.y, target, CALC_EASE(0.5f + 0.01f * GETREG(TAKREG, 0x24)), DEG2SHORT_ANGLE(GETREG(TAKREG, 0x25) + 5.0f) >> 1, DEG2SHORT_ANGLE(0.25f)); - actor->_34 = mfish_unagi_reverse_to_normal; + actor->currentProcess = mfish_unagi_reverse_to_normal; } void mfish_unagi_reverse_to_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -216,8 +216,8 @@ void mfish_unagi_reverse_to_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) if (c < 0.0f) { c = 0.0f; } - v1 = search_position_distance(&actor->_5A0, &p[actor->_642]); - if ((f32)__fabs(chase_xyz_t(&actor->_5A0, &p[actor->_642], v0)) < 0.008f) { + v1 = search_position_distance(&actor->position, &p[actor->_642]); + if ((f32)__fabs(chase_xyz_t(&actor->position, &p[actor->_642], v0)) < 0.008f) { if (actor->_640 > 1) { actor->_640--; } else if (actor->_640 == 1) { @@ -236,11 +236,11 @@ void mfish_unagi_reverse_to_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) } v0 -= v1; if (v0 > 0.0f) { - chase_xyz_t(&actor->_5A0, &p[actor->_642], v0); + chase_xyz_t(&actor->position, &p[actor->_642], v0); } } mfish_unagi_aim_wind_angle_calc(actor); - s2 = search_position_angleY(&actor->_5A0, &p[actor->_642]); + s2 = search_position_angleY(&actor->position, &p[actor->_642]); add_calc_short_angle2(&actor->_612.y, s2, CALC_EASE(0.5f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f)); add_calc_short_angle2(&actor->_632, actor->_612.x * c, CALC_EASE(0.2f), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0)); add_calc_short_angle2(&actor->_644, actor->_612.z * c, CALC_EASE(0.1f), DEG2SHORT_ANGLE(0.1f), DEG2SHORT_ANGLE(0)); @@ -252,18 +252,19 @@ void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { p1 = ZeroVec; p2 = ZeroVec; mfish_onefish_mv(actor, gamex); - if (actor->_626-- < 0) { + if (actor->activityFrameCount-- < 0) { f32 v; actor->_5F0 = Rnd_EX_f(actor->init_data._14) + actor->init_data._10; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); - actor->_628 = actor->_626; + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); + actor->savedActivityFrameCount = actor->activityFrameCount; v = (actor->_5F0 / (actor->init_data._14 + actor->init_data._10)); actor->_612.x = DEG2SHORT_ANGLE((GETREG(TAKREG, 0x35) + 75.0f) * v); actor->_612.z = DEG2SHORT_ANGLE(-(GETREG(TAKREG, 0x36) * 0.1f + 9.0f) * v); actor->_5AC.y = (GETREG(TAKREG, 0x11) * 0.01f + 0.05f) + RANDOM_F(GETREG(TAKREG, 0x12) * 0.01f + 0.1f); } - if (actor->_626 > actor->_628 - 40) { + if (actor->activityFrameCount > actor->savedActivityFrameCount - 40) { actor->_5EC = cos_s(actor->_622) * 0.1f; add_calc2(&actor->_5E8, actor->_5F0, 0.15f, actor->_5EC); } else { @@ -297,7 +298,7 @@ void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { DEG2SHORT_ANGLE(0.125f)); add_calc_short_angle2(&actor->_38._538.y, actor->_38._538.x, CALC_EASE2(0.15f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.125f)); - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); add_calc2(&actor->_5F4, actor->_632 * (GETREG(TAKREG, 0x47) * 0.001f + 0.04f), 0.25f, 91.0f); Museum_Fish_objchk_pos_set(actor, gamex); } @@ -344,10 +345,10 @@ void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mtxp = &skele->_2b0; } OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x + actor->_5AC.x, actor->_5A0.y, actor->_5A0.z + actor->_5AC.z, 0); + Matrix_translate(actor->position.x + actor->_5AC.x, actor->position.y, actor->position.z + actor->_5AC.z, 0); Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_unagi_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); diff --git a/src/actor/ac_museum_fish_zarigani.c_inc b/src/actor/ac_museum_fish_zarigani.c_inc index 1845dd62..74f03a37 100644 --- a/src/actor/ac_museum_fish_zarigani.c_inc +++ b/src/actor/ac_museum_fish_zarigani.c_inc @@ -3,11 +3,11 @@ void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { YET_SKELETON* skele = &actor->_38; cKF_SkeletonInfo_R_ct(&skele->_00, skele->_54C, skele->_550[0], &skele->_4F0, &skele->_514); cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&skele->_00, skele->_550[0], NULL, 0.5f, 0.0f); - actor->_5A0 = suisou_pos[actor->_630]; - actor->_5A0.y = 53.0f; + actor->position = suisou_pos[actor->group]; + actor->position.y = 53.0f; actor->_60C.y = qrand(); actor->_612.y = actor->_60C.y; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); actor->_5E8 = 0.0f; actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); actor->_5AC = ZeroVec; @@ -16,11 +16,11 @@ void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_zarigani_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - actor->_34 = mfish_zarigani_normal_process; + actor->currentProcess = mfish_zarigani_normal_process; } void mfish_zarigani_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - actor->_626--; + actor->activityFrameCount--; cKF_SkeletonInfo_R_play(&actor->_38._00); if (actor->_5F0 > 0.0f) { add_calc_short_angle2(&actor->_644, (s16)DEG2SHORT_ANGLE2(actor->_5F0 * 30.0f + 1.0f), CALC_EASE(0.25f), @@ -39,19 +39,20 @@ void mfish_zarigani_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) if (ABS((s16)(actor->_612.y - actor->_60C.y)) < DEG2SHORT_ANGLE(10) | actor->_638 > 0) { //! BUG: someone forgot a `|` ^ f32 v = actor->_5E8 * (ABS(sin_s(actor->_638)) * 0.5f + 0.5f); - actor->_5A0.x += v * sin_s(actor->_60C.y); - actor->_5A0.z += v * cos_s(actor->_60C.y); + actor->position.x += v * sin_s(actor->_60C.y); + actor->position.z += v * cos_s(actor->_60C.y); } - if (actor->_626 < 0) { + if (actor->activityFrameCount < 0) { actor->_5F0 = 0.0f; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); mfish_zarigani_wait_process_init(actor, gamex); } - if (actor->_62E & 0x1e) { + if (actor->_62E_flags & 0x1e) { if (ABS((s16)(actor->_60C.y - actor->_62C)) < DEG2SHORT_ANGLE(90)) { - if (ABS((s16)(actor->_612.y - actor->_62C)) < DEG2SHORT_ANGLE(35) && (actor->_62E & 0x10) == 0) { + if (ABS((s16)(actor->_612.y - actor->_62C)) < DEG2SHORT_ANGLE(35) && (actor->_62E_flags & 0x10) == 0) { mfish_zarigani_stand_process_init(actor, gamex); } else if ((s16)(actor->_612.y - actor->_62C) > 0) { actor->_612.y = actor->_62C; @@ -68,18 +69,20 @@ void mfish_zarigani_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) } void mfish_zarigani_wait_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - actor->_34 = mfish_zarigani_wait_process; + actor->currentProcess = mfish_zarigani_wait_process; } void mfish_zarigani_wait_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - actor->_626--; + actor->activityFrameCount--; add_calc_short_angle2(&actor->_644, 0, CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.125f), DEG2SHORT_ANGLE(0.5f)); - if (actor->_626 < 0) { + if (actor->activityFrameCount < 0) { if (mfish_WallCheck(actor) && RANDOM_F(1) < 0.2f) { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); mfish_zarigani_jump_process_init(actor, gamex); } else { - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); actor->_5F0 = actor->init_data._10 + RANDOM_F(actor->init_data._14); actor->_612.y += (s16)RANDOM2_F(actor->init_data._30 * 2.0f); mfish_zarigani_normal_process_init(actor, gamex); @@ -88,8 +91,8 @@ void mfish_zarigani_wait_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } void mfish_zarigani_stand_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { - actor->_34 = mfish_zarigani_stand_process; - if (actor->_62E & 0x1e) { + actor->currentProcess = mfish_zarigani_stand_process; + if (actor->_62E_flags & 0x1e) { actor->_612.y = actor->_62C; if ((s16)(actor->_60C.y - actor->_62C) != DEG2SHORT_ANGLE(0)) { actor->_612.y += DEG2SHORT_ANGLE(90); @@ -97,15 +100,15 @@ void mfish_zarigani_stand_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* ga actor->_612.y += DEG2SHORT_ANGLE(-90); } } - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); } void mfish_zarigani_stand_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f32 v; cKF_SkeletonInfo_R_play(&actor->_38._00); - if (actor->_626 > 0) { - actor->_626--; + if (actor->activityFrameCount > 0) { + actor->activityFrameCount--; if (add_calc_short_angle2(&actor->_60C.x, (s16)DEG2SHORT_ANGLE2(-45.0f + GETREG(TAKREG, 0x1a)), CALC_EASE(0.1), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.05f)) == 0) { add_calc_short_angle2(&actor->_644, DEG2SHORT_ANGLE(0.5f), CALC_EASE(0.01f), DEG2SHORT_ANGLE(0.05f), @@ -117,7 +120,8 @@ void mfish_zarigani_stand_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) if (add_calc_short_angle2(&actor->_60C.x, DEG2SHORT_ANGLE(0), CALC_EASE(0.25f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.05f)) == 0) { actor->_5AC = ZeroVec; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); mfish_zarigani_wait_process_init(actor, gamex); } } @@ -133,7 +137,7 @@ void mfish_zarigani_jump_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gam actor->_5E8 = 0.0f; actor->_5D0.y = 0.25f + GETREG(TAKREG, 0x1d) * 0.01f; actor->_644 = 0; - actor->_34 = mfish_zarigani_jump_process; + actor->currentProcess = mfish_zarigani_jump_process; } void mfish_zarigani_jump_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { @@ -141,17 +145,18 @@ void mfish_zarigani_jump_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { actor->_5D0.y *= 0.99f; actor->_5F0 *= 0.95f; add_calc2(&actor->_5E8, actor->_5F0, 0.25f, 0.05f); - actor->_5A0.x += actor->_5E8 * sin_s(actor->_60C.y); - actor->_5A0.y += actor->_5D0.y * MAX(sin_s(actor->_60C.x), 0.1f); - actor->_5A0.z += actor->_5E8 * cos_s(actor->_60C.y); + actor->position.x += actor->_5E8 * sin_s(actor->_60C.y); + actor->position.y += actor->_5D0.y * MAX(sin_s(actor->_60C.x), 0.1f); + actor->position.z += actor->_5E8 * cos_s(actor->_60C.y); if (actor->_5D0.y > 0.0f) { add_calc_short_angle2(&actor->_60C.x, (s16)DEG2SHORT_ANGLE2(30.f + GETREG(TAKREG, 0x21)), CALC_EASE(0.5), DEG2SHORT_ANGLE(7.5f), DEG2SHORT_ANGLE(0)); } else if ((add_calc_short_angle2(&actor->_60C.x, 0, CALC_EASE(0.1), DEG2SHORT_ANGLE(1.5f), DEG2SHORT_ANGLE(0.25f)) == 0) && - (actor->_62E & 0x200)) { + (actor->_62E_flags & 0x200)) { actor->_5AC.y = 0.0f; - actor->_626 = actor->init_data._2C + (s16)RANDOM_F(actor->init_data._2E); + actor->activityFrameCount = + actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange); mfish_zarigani_wait_process_init(actor, gamex); return; } @@ -161,18 +166,18 @@ void mfish_zarigani_jump_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { f32 v; - xyz_t p = suisou_pos[actor->_630]; + xyz_t p = suisou_pos[actor->group]; add_calc(&actor->_5E8, actor->_5F0, 0.1f, 0.2f, 0.01f); - actor->_34(actor, gamex); + actor->currentProcess(actor, gamex); actor->_638 += actor->_644; Museum_Fish_objchk_pos_set(actor, gamex); Museum_Fish_BGCheck(actor, gamex); - xyz_t_sub(&p, &actor->_5A0, &p); + xyz_t_sub(&p, &actor->position, &p); v = 58.0f + MAX(ABS(p.x), ABS(p.z)) * -0.15f; - actor->_62E &= ~0x200; - if (actor->_5A0.y < v || actor->_34 != mfish_zarigani_jump_process) { - actor->_62E |= 0x200; - actor->_5A0.y = v; + actor->_62E_flags &= ~0x200; + if (actor->position.y < v || actor->currentProcess != mfish_zarigani_jump_process) { + actor->_62E_flags |= 0x200; + actor->position.y = v; } } @@ -212,11 +217,12 @@ void mfish_zarigani_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mtxp = &skele->_2b0; } OPEN_DISP(gamex->graph); - Matrix_translate(actor->_5A0.x + actor->_5AC.x, actor->_5A0.y + actor->_5AC.y, actor->_5A0.z + actor->_5AC.z, 0); + Matrix_translate(actor->position.x + actor->_5AC.x, actor->position.y + actor->_5AC.y, + actor->position.z + actor->_5AC.z, 0); Matrix_rotateXYZ(actor->_60C.x, actor->_60C.y, actor->_60C.z, 1); Matrix_translate(0.0f, 0.0f, actor->init_data._24, 1); Matrix_rotateXYZ(DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(-180), DEG2SHORT_ANGLE(0), 1); - Matrix_scale(actor->init_data._00, actor->init_data._00, actor->init_data._00, 1); + Matrix_scale(actor->init_data.renderScale, actor->init_data.renderScale, actor->init_data.renderScale, 1); gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(gamex->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); cKF_Si3_draw_R_SV(gamex, &skele->_00, mtxp, mfish_zarigani_before_disp, NULL, actor); CLOSE_DISP(gamex->graph); From 00e4806bc941e781d68318c9c8401cb6b211b0b4 Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 16 Jan 2025 14:09:10 -0500 Subject: [PATCH 30/33] fix data ordering --- src/actor/ac_museum_fish.c | 44 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index f8d898a0..a7740563 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -630,6 +630,28 @@ int unagi_rail_num_tbl[3] = { ARRAY_LEN(unagi_rail_pos3), }; +#include "../src/actor/ac_museum_fish_base.c_inc" +#include "../src/actor/ac_museum_fish_afish.c_inc" +#include "../src/actor/ac_museum_fish_aroana.c_inc" +#include "../src/actor/ac_museum_fish_koi.c_inc" +#include "../src/actor/ac_museum_fish_kaseki.c_inc" +#include "../src/actor/ac_museum_fish_bass.c_inc" +#include "../src/actor/ac_museum_fish_seafish.c_inc" +#include "../src/actor/ac_museum_fish_tai.c_inc" +#include "../src/actor/ac_museum_fish_small_fish.c_inc" +#include "../src/actor/ac_museum_fish_gupi.c_inc" +#include "../src/actor/ac_museum_fish_medaka.c_inc" +#include "../src/actor/ac_museum_fish_kingyo.c_inc" +#include "../src/actor/ac_museum_fish_dojou.c_inc" +#include "../src/actor/ac_museum_fish_donko.c_inc" +#include "../src/actor/ac_museum_fish_big_fish.c_inc" +#include "../src/actor/ac_museum_fish_ito.c_inc" +#include "../src/actor/ac_museum_fish_unagi.c_inc" +#include "../src/actor/ac_museum_fish_namazu.c_inc" +#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" + cKF_Skeleton_R_c* kusa_model[14] = { &cKF_bs_r_obj_museum5_kusa1, &cKF_bs_r_obj_museum5_kusa1, @@ -1271,25 +1293,3 @@ void mfish_normal_light_set(ACTOR* actor, GAME* game) { LightsN_list_check(lights, play->global_light.list, &lightPos); LightsN_disp(lights, play->game.graph); } - -#include "../src/actor/ac_museum_fish_base.c_inc" -#include "../src/actor/ac_museum_fish_afish.c_inc" -#include "../src/actor/ac_museum_fish_aroana.c_inc" -#include "../src/actor/ac_museum_fish_koi.c_inc" -#include "../src/actor/ac_museum_fish_kaseki.c_inc" -#include "../src/actor/ac_museum_fish_bass.c_inc" -#include "../src/actor/ac_museum_fish_seafish.c_inc" -#include "../src/actor/ac_museum_fish_tai.c_inc" -#include "../src/actor/ac_museum_fish_small_fish.c_inc" -#include "../src/actor/ac_museum_fish_gupi.c_inc" -#include "../src/actor/ac_museum_fish_medaka.c_inc" -#include "../src/actor/ac_museum_fish_kingyo.c_inc" -#include "../src/actor/ac_museum_fish_dojou.c_inc" -#include "../src/actor/ac_museum_fish_donko.c_inc" -#include "../src/actor/ac_museum_fish_big_fish.c_inc" -#include "../src/actor/ac_museum_fish_ito.c_inc" -#include "../src/actor/ac_museum_fish_unagi.c_inc" -#include "../src/actor/ac_museum_fish_namazu.c_inc" -#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" From a59dd955b7e74bf92863fccd547b91e41f517399 Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 16 Jan 2025 14:56:41 -0500 Subject: [PATCH 31/33] fix rodata --- src/actor/ac_museum_fish.c | 74 +++++++++----------------- src/actor/ac_museum_fish_base.c_inc | 25 ++++++++- src/actor/ac_museum_fish_subfish.c_inc | 3 ++ 3 files changed, 51 insertions(+), 51 deletions(-) create mode 100644 src/actor/ac_museum_fish_subfish.c_inc diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index a7740563..01c4d314 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -1,13 +1,9 @@ #include "ac_museum_fish.h" -#include "m_demo.h" -#include "m_name_table.h" -#include "m_item_name.h" #include "m_msg.h" #include "m_common_data.h" #include "sys_matrix.h" #include "m_player_lib.h" #include "m_debug_mode.h" -#include "libforest/gbi_extensions.h" #include "m_rcp.h" #include "ac_gyoei.h" @@ -24,10 +20,6 @@ #define RANDOM_RANGE(min, max) ((int)(min) + (int)RANDOM((int)(max) - (int)(min))) #define RANDOM2_RANGE(min, max) ((int)(min) + (int)RANDOM2((int)(max) - (int)(min))) -// delete this stuff later -typedef Mtx; -typedef Gfx; - // extern data // clang-format off extern cKF_Skeleton_R_c @@ -630,28 +622,31 @@ int unagi_rail_num_tbl[3] = { ARRAY_LEN(unagi_rail_pos3), }; -#include "../src/actor/ac_museum_fish_base.c_inc" -#include "../src/actor/ac_museum_fish_afish.c_inc" -#include "../src/actor/ac_museum_fish_aroana.c_inc" -#include "../src/actor/ac_museum_fish_koi.c_inc" -#include "../src/actor/ac_museum_fish_kaseki.c_inc" -#include "../src/actor/ac_museum_fish_bass.c_inc" -#include "../src/actor/ac_museum_fish_seafish.c_inc" -#include "../src/actor/ac_museum_fish_tai.c_inc" -#include "../src/actor/ac_museum_fish_small_fish.c_inc" -#include "../src/actor/ac_museum_fish_gupi.c_inc" -#include "../src/actor/ac_museum_fish_medaka.c_inc" -#include "../src/actor/ac_museum_fish_kingyo.c_inc" -#include "../src/actor/ac_museum_fish_dojou.c_inc" -#include "../src/actor/ac_museum_fish_donko.c_inc" -#include "../src/actor/ac_museum_fish_big_fish.c_inc" -#include "../src/actor/ac_museum_fish_ito.c_inc" -#include "../src/actor/ac_museum_fish_unagi.c_inc" -#include "../src/actor/ac_museum_fish_namazu.c_inc" -#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" +#include "../src/actor/ac_museum_fish_subfish.c_inc" +// clang-format on + +void Museum_Fish_Prv_data_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, int fishNum, int r6) { + actor->fishIDEnum = fishNum; + actor->init_data = mfish_init_data[fishNum]; + actor->group = mfish_group_tbl[fishNum]; + + if (actor->group >= 0) { + actor->position = suisou_pos[actor->group]; + } else { + actor->position = ZeroVec; + } + + actor->position.y = mfish_init_data[fishNum]._0C + RANDOM2_F(10); + if (r6 == 1) { + actor->position.x += RANDOM2_F(90.f); + actor->position.z += RANDOM2_F(90.f); + } + actor->currentProcess = &mfish_normal_process; + mfish_ct[fishNum](actor, game); +} + +// clang-format off cKF_Skeleton_R_c* kusa_model[14] = { &cKF_bs_r_obj_museum5_kusa1, &cKF_bs_r_obj_museum5_kusa1, @@ -688,29 +683,8 @@ cKF_Animation_R_c* kusa_anime[14]= { float kusa_start_frame[14] = { 25.0f, 0.0f, 25.0f, 0.0f, 50.0f, 0.0f, 20.0f, 60.0f, 80.0f, 0.0f, 0.0f, 25.0f, 0.0f, 75.0f }; - // clang-format on -void Museum_Fish_Prv_data_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, int fishNum, int r6) { - actor->fishIDEnum = fishNum; - actor->init_data = mfish_init_data[fishNum]; - actor->group = mfish_group_tbl[fishNum]; - - if (actor->group >= 0) { - actor->position = suisou_pos[actor->group]; - } else { - actor->position = ZeroVec; - } - - actor->position.y = mfish_init_data[fishNum]._0C + RANDOM2_F(10); - if (r6 == 1) { - actor->position.x += RANDOM2_F(90); - actor->position.z += RANDOM2_F(90); - } - actor->currentProcess = &mfish_normal_process; - mfish_ct[fishNum](actor, game); -} - void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) { MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx; int i; diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index a63a3822..f0bcb72e 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -623,7 +623,26 @@ void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { mfish_onefish_dw(actor, gamex); } - +#include "../src/actor/ac_museum_fish_afish.c_inc" +#include "../src/actor/ac_museum_fish_aroana.c_inc" +#include "../src/actor/ac_museum_fish_koi.c_inc" +#include "../src/actor/ac_museum_fish_kaseki.c_inc" +#include "../src/actor/ac_museum_fish_bass.c_inc" +#include "../src/actor/ac_museum_fish_seafish.c_inc" +#include "../src/actor/ac_museum_fish_tai.c_inc" +#include "../src/actor/ac_museum_fish_small_fish.c_inc" +#include "../src/actor/ac_museum_fish_gupi.c_inc" +#include "../src/actor/ac_museum_fish_medaka.c_inc" +#include "../src/actor/ac_museum_fish_kingyo.c_inc" +#include "../src/actor/ac_museum_fish_dojou.c_inc" +#include "../src/actor/ac_museum_fish_donko.c_inc" +#include "../src/actor/ac_museum_fish_big_fish.c_inc" +#include "../src/actor/ac_museum_fish_ito.c_inc" +#include "../src/actor/ac_museum_fish_unagi.c_inc" +#include "../src/actor/ac_museum_fish_namazu.c_inc" +#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]; @@ -877,6 +896,10 @@ 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() { + // UNUSED/STRIPPED +} + void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) { xyz_t p = suisou_pos[actor->group]; f32 f29, f30, f28, f27, f31, f26, f25; diff --git a/src/actor/ac_museum_fish_subfish.c_inc b/src/actor/ac_museum_fish_subfish.c_inc new file mode 100644 index 00000000..cf727934 --- /dev/null +++ b/src/actor/ac_museum_fish_subfish.c_inc @@ -0,0 +1,3 @@ + +#include "../src/actor/ac_museum_fish_base.c_inc" + From 4e5462e1644f2149e89a351acd839fd102664f56 Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 16 Jan 2025 15:00:23 -0500 Subject: [PATCH 32/33] fix link --- src/actor/ac_museum_fish.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index 01c4d314..cba224b9 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -90,7 +90,7 @@ extern cKF_Animation_R_c cKF_ba_r_act_mus_kingyo_a1, cKF_ba_r_act_mus_pirania_a1, cKF_ba_r_act_mus_aroana_a1, - cKF_ba_r_act_mus_unagi_a1, + cKF_ba_r_act_mus_unagi_a2, cKF_ba_r_act_mus_donko_a1, cKF_ba_r_act_mus_angel_a1, cKF_ba_r_act_mus_gupi_a1, @@ -262,7 +262,7 @@ cKF_Animation_R_c* mfish_anime_init_tbl[40] = { /* GOLDFISH */ &cKF_ba_r_act_mus_kingyo_a1, /* PIRANHA */ &cKF_ba_r_act_mus_pirania_a1, /* AROWANA */ &cKF_ba_r_act_mus_aroana_a1, -/* EEL */ &cKF_ba_r_act_mus_unagi_a1, +/* EEL */ &cKF_ba_r_act_mus_unagi_a2, /* FRESHWATER_GOBY */ &cKF_ba_r_act_mus_donko_a1, /* ANGELFISH */ &cKF_ba_r_act_mus_angel_a1, /* GUPPY */ &cKF_ba_r_act_mus_gupi_a1, From 6ab19954af194ae7284a01ca91399d993bd02897 Mon Sep 17 00:00:00 2001 From: roeming Date: Thu, 16 Jan 2025 15:28:16 -0500 Subject: [PATCH 33/33] link ac_museum_fish.c --- configure.py | 2 +- src/actor/ac_museum_fish.c | 4 ++-- src/actor/ac_museum_fish_base.c_inc | 2 +- src/actor/ac_museum_fish_subfish.c_inc | 3 --- 4 files changed, 4 insertions(+), 7 deletions(-) delete mode 100644 src/actor/ac_museum_fish_subfish.c_inc diff --git a/configure.py b/configure.py index 741f77eb..7650fa0a 100644 --- a/configure.py +++ b/configure.py @@ -1013,7 +1013,7 @@ config.libs = [ Object(Matching, "actor/ac_mscore_control.c"), Object(Matching, "actor/ac_mural.c"), Object(Matching, "actor/ac_museum.c"), - Object(NonMatching, "actor/ac_museum_fish.c"), + Object(Matching, "actor/ac_museum_fish.c"), Object(Matching, "actor/ac_museum_fossil.c"), Object(NonMatching, "actor/ac_museum_indoor.c"), Object(NonMatching, "actor/ac_museum_insect.c"), diff --git a/src/actor/ac_museum_fish.c b/src/actor/ac_museum_fish.c index cba224b9..291b99b3 100644 --- a/src/actor/ac_museum_fish.c +++ b/src/actor/ac_museum_fish.c @@ -488,7 +488,7 @@ PRIV_FISH_DRAW mfish_dw[40] = { /* FROG */ mfish_kaeru_dw, /* KILLIFISH */ mfish_medaka_dw, /* JELLYFISH */ mfish_kurage_dw, -/* SEA_BASS */ mfish_seafish_dw, +/* SEA_BASS */ mfish_ani_base_dw, /* RED_SNAPPER */ mfish_tai_dw, /* BARRED_KNIFEJAW */ mfish_tai_dw, /* ARAPAIMA */ mfish_big_fish_dw @@ -622,7 +622,7 @@ int unagi_rail_num_tbl[3] = { ARRAY_LEN(unagi_rail_pos3), }; -#include "../src/actor/ac_museum_fish_subfish.c_inc" +#include "../src/actor/ac_museum_fish_base.c_inc" // clang-format on diff --git a/src/actor/ac_museum_fish_base.c_inc b/src/actor/ac_museum_fish_base.c_inc index f0bcb72e..b94e2791 100644 --- a/src/actor/ac_museum_fish_base.c_inc +++ b/src/actor/ac_museum_fish_base.c_inc @@ -445,7 +445,7 @@ void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) { } else if (actor->fishIDEnum == aGYO_TYPE_FRESHWATER_GOBY) { actor->_5F4 = RANDOM_F(5.0f); } else { - actor->_5F4 = RANDOM_F(10.0f); + actor->_5F4 = RANDOM2_F(10.0f); } actor->_5D0.y = 0.0; actor->_5AC = ZeroVec; diff --git a/src/actor/ac_museum_fish_subfish.c_inc b/src/actor/ac_museum_fish_subfish.c_inc deleted file mode 100644 index cf727934..00000000 --- a/src/actor/ac_museum_fish_subfish.c_inc +++ /dev/null @@ -1,3 +0,0 @@ - -#include "../src/actor/ac_museum_fish_base.c_inc" -