mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-07-07 12:03:27 -04:00
+7
-4
@@ -172,7 +172,8 @@ config.asflags = [
|
||||
"-I include/libc",
|
||||
"-I src/static/dolphin",
|
||||
f"-I build/{config.version}/include",
|
||||
f"-I build/{config.version}/bin/assets", # needed for JUTResFONT_Ascfont_fix12
|
||||
# needed for JUTResFONT_Ascfont_fix12
|
||||
f"-I build/{config.version}/bin/assets",
|
||||
f"--defsym version={version_num}",
|
||||
]
|
||||
config.ldflags = [
|
||||
@@ -1023,7 +1024,7 @@ config.libs = [
|
||||
Object(Matching, "actor/ac_museum_fish.c"),
|
||||
Object(Matching, "actor/ac_museum_fossil.c"),
|
||||
Object(NonMatching, "actor/ac_museum_indoor.c"),
|
||||
Object(NonMatching, "actor/ac_museum_insect.c"),
|
||||
Object(Matching, "actor/ac_museum_insect.c"),
|
||||
Object(Matching, "actor/ac_museum_picture.c"),
|
||||
Object(Matching, "actor/ac_my_house.c"),
|
||||
Object(Matching, "actor/ac_my_indoor.c"),
|
||||
@@ -2720,7 +2721,8 @@ for url in N64_SDK_urls:
|
||||
os.makedirs(os.path.dirname(file_path), exist_ok=True)
|
||||
|
||||
print(f"Fetching {file_path} from {url}")
|
||||
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
|
||||
req = urllib.request.Request(
|
||||
url, headers={"User-Agent": "Mozilla/5.0"})
|
||||
with urllib.request.urlopen(req) as response:
|
||||
if response.getcode() == 200:
|
||||
content = response.read()
|
||||
@@ -2744,7 +2746,8 @@ config.progress_categories = [
|
||||
ProgressCategory("game", "Game Code"),
|
||||
ProgressCategory("sdk", "SDK Code"),
|
||||
ProgressCategory("jsystem", "JSystem Code"),
|
||||
ProgressCategory("library", "Library Code"), # catch-all for the rest of static
|
||||
# catch-all for the rest of static
|
||||
ProgressCategory("library", "Library Code"),
|
||||
]
|
||||
config.progress_each_module = args.verbose
|
||||
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
#ifndef AC_MUSEUM_FISH_H
|
||||
#define AC_MUSEUM_FISH_H
|
||||
|
||||
#include "types.h"
|
||||
#include "m_actor.h"
|
||||
#include "c_keyframe.h"
|
||||
#include "libu64/u64types.h"
|
||||
#include "ac_gyoei.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -13,476 +9,6 @@ extern "C" {
|
||||
|
||||
extern ACTOR_PROFILE Museum_Fish_Profile;
|
||||
|
||||
typedef struct _FISH_PRIVATE_DATA;
|
||||
|
||||
typedef void (*PRIV_FISH_CONSTRUCTOR)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
typedef void (*PRIV_FISH_MOVE)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
typedef void (*PRIV_FISH_DRAW)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
// typedef void (*PRIV_FISH_PROCESS)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
typedef void (*PRIV_FISH_PROCESS)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
|
||||
// unsure temp structs
|
||||
|
||||
typedef struct _MUSEUM_FISH_INIT_DATA {
|
||||
f32 renderScale;
|
||||
f32 _04;
|
||||
f32 _08;
|
||||
f32 _0C;
|
||||
f32 _10;
|
||||
f32 _14;
|
||||
f32 _18;
|
||||
f32 _1C;
|
||||
f32 _20;
|
||||
f32 _24;
|
||||
f32 _28;
|
||||
s16 activeFramesMin;
|
||||
s16 activeFramesRange;
|
||||
s16 _30;
|
||||
} MUSEUM_FISH_INIT_DATA; // size: 0x34
|
||||
|
||||
#define artificial_padding(lastOffset, currentOffset, typeOfLastMember) \
|
||||
u8 __##currentOffset##padding[currentOffset - lastOffset - sizeof(typeOfLastMember)]
|
||||
|
||||
// #define offsetof(structName, memberName) ((size_t) & (((structName*)0)->memberName))
|
||||
|
||||
typedef struct _YET_SKELETON {
|
||||
cKF_SkeletonInfo_R_c _00; // offset 0, size 0x70
|
||||
Mtx _70; // offset 70, size
|
||||
artificial_padding(0x70, 0x2b0, Mtx);
|
||||
Mtx _2b0;
|
||||
artificial_padding(0x2b0, 0x46C, Mtx);
|
||||
|
||||
void* _46C;
|
||||
|
||||
artificial_padding(0x46C, 0x4F0, void*);
|
||||
|
||||
s_xyz _4F0;
|
||||
|
||||
artificial_padding(0x4F0, 0x514, s_xyz);
|
||||
|
||||
s_xyz _514;
|
||||
artificial_padding(0x514, 0x526, s_xyz);
|
||||
s_xyz _526;
|
||||
artificial_padding(0x526, 0x538, s_xyz);
|
||||
s_xyz _538;
|
||||
// unused 2 byte padding here
|
||||
xyz_t _540;
|
||||
cKF_Skeleton_R_c* _54C;
|
||||
cKF_Animation_R_c* _550[2];
|
||||
} YET_SKELETON; // size 558
|
||||
|
||||
typedef struct _YET_SKELETON_2 {
|
||||
YET_SKELETON _00;
|
||||
f32 _558;
|
||||
f32 _55C;
|
||||
f32 _560;
|
||||
f32 _564;
|
||||
s16 _568;
|
||||
s16 _56A;
|
||||
s16 _56C;
|
||||
} YET_SKELETON_2;
|
||||
|
||||
typedef enum fish_type MUSEUM_FISH_TYPE;
|
||||
|
||||
typedef struct _FISH_PRIVATE_DATA {
|
||||
MUSEUM_FISH_INIT_DATA init_data;
|
||||
PRIV_FISH_PROCESS currentProcess; // size:4
|
||||
YET_SKELETON _38;
|
||||
|
||||
YET_SKELETON_2* _590;
|
||||
struct _FISH_PRIVATE_DATA* _594;
|
||||
struct _FISH_PRIVATE_DATA* _598;
|
||||
|
||||
MUSEUM_FISH_TYPE fishIDEnum;
|
||||
xyz_t position;
|
||||
xyz_t _5AC;
|
||||
xyz_t _5B8;
|
||||
artificial_padding(0x5B8, 0x5D0, xyz_t);
|
||||
xyz_t _5D0;
|
||||
xyz_t _5DC;
|
||||
f32 _5E8;
|
||||
f32 _5EC;
|
||||
f32 _5F0;
|
||||
f32 _5F4;
|
||||
f32 _5F8;
|
||||
f32 _5FC;
|
||||
f32 _600;
|
||||
f32 _604;
|
||||
f32 _608;
|
||||
s_xyz _60C;
|
||||
s_xyz _612;
|
||||
s_xyz _618;
|
||||
s16 _61E;
|
||||
s16 _620;
|
||||
s16 _622;
|
||||
s16 _624;
|
||||
s16 activityFrameCount;
|
||||
s16 savedActivityFrameCount;
|
||||
s16 _62A;
|
||||
s16 _62C;
|
||||
s16 _62E_flags;
|
||||
s16 group;
|
||||
s16 _632;
|
||||
s16 _634;
|
||||
s16 _636;
|
||||
s16 _638;
|
||||
s16 _63A;
|
||||
s16 _63C;
|
||||
s16 _63E;
|
||||
s16 _640;
|
||||
s16 _642;
|
||||
s16 _644;
|
||||
s16 _646;
|
||||
} MUSEUM_FISH_PRIVATE_DATA; // size 648
|
||||
|
||||
// Holds data for the underwater grass
|
||||
typedef YET_SKELETON MUSEUM_FISH_KUSA_DATA;
|
||||
|
||||
typedef struct _FISH_DISPLAY_MSG_INFO {
|
||||
s16 fishName;
|
||||
s16 fishInfo;
|
||||
} FISH_DISPLAY_MSG_INFO;
|
||||
|
||||
typedef struct _MUSEUM_FISH_ACTOR {
|
||||
ACTOR actor; // offset: 0, size: 0x174
|
||||
int _174;
|
||||
MUSEUM_FISH_PRIVATE_DATA prvFish[aGYO_TYPE_NUM]; // offset: 0x178 size: 0xFB48
|
||||
MUSEUM_FISH_KUSA_DATA prvKusa[14]; // offset: 0xFCB8 size: 0x4AD0
|
||||
YET_SKELETON_2 _14788; // offset: 0x14788 size: 0x570
|
||||
|
||||
u8 _14cf8[16]; // temp
|
||||
|
||||
xyz_t lightPosition[2];
|
||||
int numFishDisplayed; // offset: 0x14d20, size: 4
|
||||
int fishDisplayMsgIter; // offset: 0x14d24, size: 4
|
||||
FISH_DISPLAY_MSG_INFO fishDisplayMsgInfo[10]; // offset: 0x14d28, size: 4*10
|
||||
|
||||
s16 _14d50[20];
|
||||
s16 _14d78[20];
|
||||
artificial_padding(0x14d78, 0x14daa, s16[20]);
|
||||
|
||||
s16 _14daa[5];
|
||||
s16 _14db4;
|
||||
s16 _14db6; // offset: 0x14db6, size: 2
|
||||
s16 lightID1; // offset: 0x14db8, size: 2
|
||||
s16 lightID2; // offset: 0x14dba, size: 2
|
||||
s16 lightPower[2]; // offset: 0x14dbc, size: 4
|
||||
s16 _14dc0; // offset: 0x14dc0, size: 2
|
||||
s16 _14dc2; // offset: 0x14dc2, size: 2
|
||||
s16 _14dc4; // offset: 0x14dc4, size: 2
|
||||
s16 _14dc8; // offset: 0x14dc8, size: 2
|
||||
} MUSEUM_FISH_ACTOR; // size 14DCA
|
||||
|
||||
// ac_museum_fish.c_inc
|
||||
void Museum_Fish_Prv_data_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, int fishNum, int r6);
|
||||
void Museum_Fish_Actor_ct(ACTOR* actor, GAME* game);
|
||||
void Museum_Fish_Actor_dt(ACTOR* actor, GAME* game);
|
||||
int Museum_Fish_GetMsgNo(ACTOR* actor);
|
||||
BOOL Museum_Fish_Check_Talk_Distance(GAME* gamex, int index);
|
||||
void Museum_Fish_Set_MsgFishInfo(ACTOR* actor, int param2);
|
||||
void Museum_Fish_set_talk_info(ACTOR* actor);
|
||||
void Museum_Fish_Talk_process(ACTOR* actor, GAME* game);
|
||||
void Museum_Fish_Actor_move(ACTOR* actor, GAME* game);
|
||||
void Museum_Fish_Suisou_draw(ACTOR* actor, GAME* game, int r5);
|
||||
int kusa_before_disp(GAME* r3, cKF_SkeletonInfo_R_c* r4, int r5, Gfx** r6, u8* r7, void* arg, s_xyz* r9, xyz_t* r10);
|
||||
void Museum_Fish_Kusa_Draw(ACTOR* actor, GAME* game, int r5);
|
||||
void Museum_Fish_Actor_draw(ACTOR* actor, GAME* game);
|
||||
BOOL mfish_cull_check(GAME* game, xyz_t* worldPos, f32 x, f32 y, f32 _y);
|
||||
void mfish_point_ligh_pos_get(ACTOR* actorx, GAME* game, int r5);
|
||||
void mfish_point_light_ct(ACTOR* actor, GAME* game);
|
||||
void mfish_point_light_dt(ACTOR* r30, GAME* r31);
|
||||
void mfish_point_light_mv(MUSEUM_FISH_ACTOR* actor, GAME* game);
|
||||
void mfish_normal_light_set(ACTOR* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_base.c_inc
|
||||
f32 Rnd_EX_f(f32 v1);
|
||||
f32 Rnd_EX_fx(f32 v1);
|
||||
void mfish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
int mfish_PosWallCheck(MUSEUM_FISH_PRIVATE_DATA* priv, xyz_t* pos);
|
||||
BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* priv);
|
||||
s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv);
|
||||
void mfish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ground_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ground_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_onefish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_before_disp(GAME*, cKF_SkeletonInfo_R_c*, int, Gfx**, u8*, void*, s_xyz*, xyz_t*);
|
||||
void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ani_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_BigFishObjCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_ObjBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex, f32 f1, f32 f2);
|
||||
void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_objchk_pos_set(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game);
|
||||
void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game);
|
||||
void mfish_body_wind_anime_play(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* atanx, s16* atany, f32* distance);
|
||||
BOOL mfish_peck_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_ground_peck_before_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_get_player_area(MUSEUM_FISH_ACTOR* actor, GAME* game);
|
||||
void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
s16 mfish_get_escape_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_hamon_make(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_afish.c_inc
|
||||
void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_afish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_afish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_aroana.c_inc
|
||||
void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_aroana_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_aroana_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_aroana_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_koi.c_inc
|
||||
void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4);
|
||||
void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_koi_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_koi_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_koi_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_koi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_kaseki.c_inc
|
||||
void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kaseki_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_kaseki_move_wall_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_kaseki_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_bass.c_inc
|
||||
void mfish_bass_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4);
|
||||
void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_seafish.c_inc
|
||||
void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_tai.c_inc
|
||||
void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_tai_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_sfish.c_inc
|
||||
void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_sfish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_sfish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_sfish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_sfish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_gupi.c_inc
|
||||
void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_gupi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_gupi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_medaka.c_inc
|
||||
void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_medaka_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_kingyo.c_inc
|
||||
void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_peck_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_peck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_kingyo_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_dojou.c_inc
|
||||
void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_dojou_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_donko.c_inc
|
||||
void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_donko_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_big_fish.c_inc
|
||||
void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_ito.c_inc
|
||||
void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_unagi.c_inc
|
||||
void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
s16 mfish_unagi_get_next_rail_type(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_unagi_aim_wind_angle_calc(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_unagi_rail_move_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_rail_move(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_normal_to_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_normal_to_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_rail_move_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_rail_move_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_reverse_to_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_reverse_to_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_namazu.c_inc
|
||||
void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_body_wind_anime_play(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_namazu_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
//! TODO: these should take (actor, game) because they're assigned to _34, but are statically called with just (actor)
|
||||
void mfish_namazu_dummy_process_init();
|
||||
void mfish_namazu_dummy_process();
|
||||
void mfish_namazu_turn_process_init();
|
||||
void mfish_namazu_turn_process();
|
||||
void mfish_namazu_ground_sweep_process_init();
|
||||
void mfish_namazu_ground_sweep_process();
|
||||
void mfish_namazu_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_namazu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_namazu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_zarigani.c_inc
|
||||
void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_wait_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_wait_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_stand_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_stand_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_jump_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_jump_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_zarigani_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_zarigani_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_kurage.c_inc
|
||||
void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_hasu.c_inc
|
||||
void mfish_hasu_ct(YET_SKELETON_2* actor, GAME* game);
|
||||
void mfish_hasu_mv(YET_SKELETON_2* actor, GAME* game);
|
||||
void mfish_hasu_dw(YET_SKELETON_2* actor, GAME* game);
|
||||
void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
BOOL hasu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg,
|
||||
s_xyz* joint1, xyz_t* trans);
|
||||
BOOL hasu_after_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg,
|
||||
s_xyz* joint1, xyz_t* trans);
|
||||
void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,521 @@
|
||||
#ifndef AC_MUSEUM_FISH_PRIV_H
|
||||
#define AC_MUSEUM_FISH_PRIV_H
|
||||
|
||||
#include "ac_museum_fish.h"
|
||||
#include "m_msg.h"
|
||||
#include "m_common_data.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "m_player_lib.h"
|
||||
#include "m_debug_mode.h"
|
||||
#include "m_rcp.h"
|
||||
#include "ac_gyoei.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// found useful macros
|
||||
#define MY_MAX(a, b) (((a) >= (b)) ? (a) : (b))
|
||||
#define MY_CLAMP(v, l, h) MIN(MY_MAX((l), (v)), (h))
|
||||
#define ARRAY_LEN(a) (sizeof(a) / sizeof(*a))
|
||||
|
||||
#define CALC_EASE(x) (1.0f - sqrtf(1.0f - (x)))
|
||||
#define CALC_EASE2(x) CALC_EASE(CALC_EASE(x))
|
||||
#define SHORT2DEG_ANGLE2(x) ((x) * (360.0f / 65536.0f))
|
||||
#define RANDOMF_RANGE(min, max) ((f32)(min) + (f32)RANDOM_F((f32)(max) - (f32)(min)))
|
||||
#define RANDOM2F_RANGE(min, max) ((f32)(min) + (f32)RANDOM2_F((f32)(max) - (f32)(min)))
|
||||
#define RANDOM_RANGE(min, max) ((int)(min) + (int)RANDOM((int)(max) - (int)(min)))
|
||||
#define RANDOM2_RANGE(min, max) ((int)(min) + (int)RANDOM2((int)(max) - (int)(min)))
|
||||
|
||||
#define artificial_padding(lastOffset, currentOffset, typeOfLastMember) \
|
||||
u8 __##currentOffset##padding[currentOffset - lastOffset - sizeof(typeOfLastMember)]
|
||||
|
||||
typedef struct _FISH_PRIVATE_DATA;
|
||||
|
||||
typedef void (*PRIV_FISH_CONSTRUCTOR)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
typedef void (*PRIV_FISH_MOVE)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
typedef void (*PRIV_FISH_DRAW)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
typedef void (*PRIV_FISH_PROCESS)(struct _FISH_PRIVATE_DATA*, GAME*);
|
||||
|
||||
// struct decls
|
||||
typedef struct _MUSEUM_FISH_INIT_DATA {
|
||||
f32 renderScale;
|
||||
f32 _04;
|
||||
f32 _08;
|
||||
f32 _0C;
|
||||
f32 _10;
|
||||
f32 _14;
|
||||
f32 _18;
|
||||
f32 _1C;
|
||||
f32 _20;
|
||||
f32 _24;
|
||||
f32 _28;
|
||||
s16 activeFramesMin;
|
||||
s16 activeFramesRange;
|
||||
s16 _30;
|
||||
} MUSEUM_FISH_INIT_DATA; // size: 0x34
|
||||
|
||||
typedef struct _YET_SKELETON {
|
||||
cKF_SkeletonInfo_R_c _00; // offset 0, size 0x70
|
||||
Mtx _70; // offset 70, size
|
||||
artificial_padding(0x70, 0x2b0, Mtx);
|
||||
Mtx _2b0;
|
||||
artificial_padding(0x2b0, 0x46C, Mtx);
|
||||
|
||||
void* _46C;
|
||||
|
||||
artificial_padding(0x46C, 0x4F0, void*);
|
||||
|
||||
s_xyz _4F0;
|
||||
|
||||
artificial_padding(0x4F0, 0x514, s_xyz);
|
||||
|
||||
s_xyz _514;
|
||||
artificial_padding(0x514, 0x526, s_xyz);
|
||||
s_xyz _526;
|
||||
artificial_padding(0x526, 0x538, s_xyz);
|
||||
s_xyz _538;
|
||||
// unused 2 byte padding here
|
||||
xyz_t _540;
|
||||
cKF_Skeleton_R_c* _54C;
|
||||
cKF_Animation_R_c* _550[2];
|
||||
} YET_SKELETON; // size 558
|
||||
|
||||
typedef struct _YET_SKELETON_2 {
|
||||
YET_SKELETON _00;
|
||||
f32 _558;
|
||||
f32 _55C;
|
||||
f32 _560;
|
||||
f32 _564;
|
||||
s16 _568;
|
||||
s16 _56A;
|
||||
s16 _56C;
|
||||
} YET_SKELETON_2;
|
||||
|
||||
typedef enum fish_type MUSEUM_FISH_TYPE;
|
||||
|
||||
typedef struct _FISH_PRIVATE_DATA {
|
||||
MUSEUM_FISH_INIT_DATA init_data;
|
||||
PRIV_FISH_PROCESS currentProcess; // size:4
|
||||
YET_SKELETON _38;
|
||||
|
||||
YET_SKELETON_2* _590;
|
||||
struct _FISH_PRIVATE_DATA* _594;
|
||||
struct _FISH_PRIVATE_DATA* _598;
|
||||
|
||||
MUSEUM_FISH_TYPE fishIDEnum;
|
||||
xyz_t position;
|
||||
xyz_t _5AC;
|
||||
xyz_t _5B8;
|
||||
artificial_padding(0x5B8, 0x5D0, xyz_t);
|
||||
xyz_t _5D0;
|
||||
xyz_t _5DC;
|
||||
f32 _5E8;
|
||||
f32 _5EC;
|
||||
f32 _5F0;
|
||||
f32 _5F4;
|
||||
f32 _5F8;
|
||||
f32 _5FC;
|
||||
f32 _600;
|
||||
f32 _604;
|
||||
f32 _608;
|
||||
s_xyz _60C;
|
||||
s_xyz _612;
|
||||
s_xyz _618;
|
||||
s16 _61E;
|
||||
s16 _620;
|
||||
s16 _622;
|
||||
s16 _624;
|
||||
s16 activityFrameCount;
|
||||
s16 savedActivityFrameCount;
|
||||
s16 _62A;
|
||||
s16 _62C;
|
||||
s16 _62E_flags;
|
||||
s16 group;
|
||||
s16 _632;
|
||||
s16 _634;
|
||||
s16 _636;
|
||||
s16 _638;
|
||||
s16 _63A;
|
||||
s16 _63C;
|
||||
s16 _63E;
|
||||
s16 _640;
|
||||
s16 _642;
|
||||
s16 _644;
|
||||
s16 _646;
|
||||
} MUSEUM_FISH_PRIVATE_DATA; // size 648
|
||||
|
||||
// Holds data for the underwater grass
|
||||
typedef YET_SKELETON MUSEUM_FISH_KUSA_DATA;
|
||||
|
||||
typedef struct _FISH_DISPLAY_MSG_INFO {
|
||||
s16 fishName;
|
||||
s16 fishInfo;
|
||||
} FISH_DISPLAY_MSG_INFO;
|
||||
|
||||
typedef struct _MUSEUM_FISH_ACTOR {
|
||||
ACTOR actor; // offset: 0, size: 0x174
|
||||
int _174;
|
||||
MUSEUM_FISH_PRIVATE_DATA prvFish[aGYO_TYPE_NUM]; // offset: 0x178 size: 0xFB48
|
||||
MUSEUM_FISH_KUSA_DATA prvKusa[14]; // offset: 0xFCB8 size: 0x4AD0
|
||||
YET_SKELETON_2 _14788; // offset: 0x14788 size: 0x570
|
||||
|
||||
u8 _14cf8[16]; // temp
|
||||
|
||||
xyz_t lightPosition[2];
|
||||
int numFishDisplayed; // offset: 0x14d20, size: 4
|
||||
int fishDisplayMsgIter; // offset: 0x14d24, size: 4
|
||||
FISH_DISPLAY_MSG_INFO fishDisplayMsgInfo[10]; // offset: 0x14d28, size: 4*10
|
||||
|
||||
s16 _14d50[20];
|
||||
s16 _14d78[20];
|
||||
artificial_padding(0x14d78, 0x14daa, s16[20]);
|
||||
|
||||
s16 _14daa[5];
|
||||
s16 _14db4;
|
||||
s16 _14db6; // offset: 0x14db6, size: 2
|
||||
s16 lightID1; // offset: 0x14db8, size: 2
|
||||
s16 lightID2; // offset: 0x14dba, size: 2
|
||||
s16 lightPower[2]; // offset: 0x14dbc, size: 4
|
||||
s16 _14dc0; // offset: 0x14dc0, size: 2
|
||||
s16 _14dc2; // offset: 0x14dc2, size: 2
|
||||
s16 _14dc4; // offset: 0x14dc4, size: 2
|
||||
s16 _14dc8; // offset: 0x14dc8, size: 2
|
||||
} MUSEUM_FISH_ACTOR; // size 14DCA
|
||||
|
||||
// data
|
||||
extern ACTOR_PROFILE Museum_Fish_Profile;
|
||||
// technically static, but this helps with vscode includes
|
||||
extern xyz_t suisou_pos[5];
|
||||
extern int kusa_group_tbl[14];
|
||||
extern xyz_t kusa_pos[14];
|
||||
extern xyz_t hasu_pos;
|
||||
extern xyz_t suisou_awa_pos[20];
|
||||
extern s16 suisou_awa_group[20];
|
||||
extern cKF_Skeleton_R_c* mfish_model_tbl[40];
|
||||
extern cKF_Animation_R_c* mfish_anime_init_tbl[40];
|
||||
extern MUSEUM_FISH_INIT_DATA mfish_init_data[40];
|
||||
extern s16 mfish_group_tbl[40];
|
||||
extern PRIV_FISH_CONSTRUCTOR mfish_ct[40];
|
||||
extern PRIV_FISH_MOVE mfish_mv[40];
|
||||
extern PRIV_FISH_DRAW mfish_dw[40];
|
||||
extern float kusa_start_frame[14];
|
||||
|
||||
// functions
|
||||
|
||||
// ac_museum_fish.c_inc
|
||||
void Museum_Fish_Prv_data_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, int fishNum, int r6);
|
||||
void Museum_Fish_Actor_ct(ACTOR* actor, GAME* game);
|
||||
void Museum_Fish_Actor_dt(ACTOR* actor, GAME* game);
|
||||
int Museum_Fish_GetMsgNo(ACTOR* actor);
|
||||
BOOL Museum_Fish_Check_Talk_Distance(GAME* gamex, int index);
|
||||
void Museum_Fish_Set_MsgFishInfo(ACTOR* actor, int param2);
|
||||
void Museum_Fish_set_talk_info(ACTOR* actor);
|
||||
void Museum_Fish_Talk_process(ACTOR* actor, GAME* game);
|
||||
void Museum_Fish_Actor_move(ACTOR* actor, GAME* game);
|
||||
void Museum_Fish_Suisou_draw(ACTOR* actor, GAME* game, int r5);
|
||||
BOOL kusa_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags,
|
||||
void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void Museum_Fish_Kusa_Draw(ACTOR* actor, GAME* game, int r5);
|
||||
void Museum_Fish_Actor_draw(ACTOR* actor, GAME* game);
|
||||
BOOL mfish_cull_check(GAME* game, xyz_t* worldPos, f32 x, f32 y, f32 _y);
|
||||
void mfish_point_ligh_pos_get(ACTOR* actorx, GAME* game, int r5);
|
||||
void mfish_point_light_ct(ACTOR* actor, GAME* game);
|
||||
void mfish_point_light_dt(ACTOR* r30, GAME* r31);
|
||||
void mfish_point_light_mv(MUSEUM_FISH_ACTOR* actor, GAME* game);
|
||||
void mfish_normal_light_set(ACTOR* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_base.c_inc
|
||||
f32 Rnd_EX_f(f32 v1);
|
||||
f32 Rnd_EX_fx(f32 v1);
|
||||
void mfish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
int mfish_PosWallCheck(MUSEUM_FISH_PRIVATE_DATA* priv, xyz_t* pos);
|
||||
BOOL mfish_WallCheck(MUSEUM_FISH_PRIVATE_DATA* priv);
|
||||
s16 mfish_get_hide_camera_angle(MUSEUM_FISH_PRIVATE_DATA* priv);
|
||||
void mfish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ground_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ground_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_onefish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_onefish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags,
|
||||
void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_onefish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ani_base_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ani_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_BigFishObjCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_ObjBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex, f32 f1, f32 f2);
|
||||
void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_objchk_pos_set(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game);
|
||||
void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game);
|
||||
void mfish_body_wind_anime_play(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_get_player_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, s16* atanx, s16* atany, f32* distance);
|
||||
BOOL mfish_peck_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_peck_wall_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_ground_peck_before_check(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_get_player_area(MUSEUM_FISH_ACTOR* actor, GAME* game);
|
||||
void mfish_get_flow_vec(xyz_t* pos, MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
s16 mfish_get_escape_angle(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_hamon_make(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_afish.c_inc
|
||||
void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_afish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_afish_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_afish_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_afish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_aroana.c_inc
|
||||
void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_aroana_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_aroana_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_aroana_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_aroana_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_aroana_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_koi.c_inc
|
||||
void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4);
|
||||
void mfish_koi_move_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_koi_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_koi_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_peck_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_long_move_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_koi_long_move_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_koi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_koi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_kaseki.c_inc
|
||||
void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kaseki_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_kaseki_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_kaseki_move_wall_smooth(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_kaseki_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_kaseki_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_bass.c_inc
|
||||
void mfish_bass_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4);
|
||||
void mfish_bass_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_bass_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_bass_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_seafish.c_inc
|
||||
void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_seafish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_tai.c_inc
|
||||
void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_tai_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_tai_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_sfish.c_inc
|
||||
void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_sfish_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_sfish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_sfish_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_sfish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_small_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_gupi.c_inc
|
||||
void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_gupi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_gupi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_medaka.c_inc
|
||||
void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_medaka_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_medaka_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_kingyo.c_inc
|
||||
void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_peck_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_peck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_kingyo_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_kingyo_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_dojou.c_inc
|
||||
void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_dojou_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_dojou_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_donko.c_inc
|
||||
void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_donko_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_donko_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_big_fish.c_inc
|
||||
void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_big_fish_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_ito.c_inc
|
||||
void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_ito_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_unagi.c_inc
|
||||
void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
s16 mfish_unagi_get_next_rail_type(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_unagi_aim_wind_angle_calc(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_unagi_rail_move_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_rail_move(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_normal_to_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_normal_to_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_rail_move_reverse_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_rail_move_reverse(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_reverse_to_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_reverse_to_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_unagi_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_namazu.c_inc
|
||||
void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_body_wind_anime_play(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_namazu_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_namazu_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_namazu_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_ground_sweep_process_init(MUSEUM_FISH_PRIVATE_DATA* actor);
|
||||
void mfish_namazu_ground_sweep_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_namazu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_namazu_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_zarigani.c_inc
|
||||
void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_wait_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_wait_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_stand_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_stand_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_jump_process_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_jump_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL mfish_zarigani_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_zarigani_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_kurage.c_inc
|
||||
void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_normal_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_turn_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
void mfish_kurage_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_fish_hasu.c_inc
|
||||
void mfish_hasu_ct(YET_SKELETON_2* actor, GAME* game);
|
||||
void mfish_hasu_mv(YET_SKELETON_2* actor, GAME* game);
|
||||
void mfish_hasu_dw(YET_SKELETON_2* actor, GAME* game);
|
||||
void mfish_kaeru_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
BOOL hasu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags,
|
||||
void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
BOOL hasu_after_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags,
|
||||
void* arg, s_xyz* joint_rot, xyz_t* joint_pos);
|
||||
void mfish_kaeru_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // !AC_MUSEUM_FISH_PRIV_H
|
||||
@@ -1,7 +1,6 @@
|
||||
#ifndef AC_MUSEUM_INSECT_H
|
||||
#define AC_MUSEUM_INSECT_H
|
||||
|
||||
#include "types.h"
|
||||
#include "m_actor.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -15,4 +14,3 @@ extern ACTOR_PROFILE Museum_Insect_Profile;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,389 @@
|
||||
#ifndef AC_MUSEUM_INSECT_PRIV_H
|
||||
#define AC_MUSEUM_INSECT_PRIV_H
|
||||
|
||||
#include "ac_museum_insect.h"
|
||||
#include "m_msg.h"
|
||||
#include "m_common_data.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "m_player_lib.h"
|
||||
#include "m_debug_mode.h"
|
||||
#include "m_rcp.h"
|
||||
#include "ac_insect_h.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define artificial_padding(lastOffset, currentOffset, typeOfLastMember) \
|
||||
u8 __##currentOffset##padding[currentOffset - lastOffset - sizeof(typeOfLastMember)]
|
||||
#define CALC_EASE(x) (1.0f - sqrtf(1.0f - (x)))
|
||||
#define CALC_EASE2(x) CALC_EASE(CALC_EASE(x))
|
||||
|
||||
struct _MUSEUM_INSECT_PRIVATE_DATA;
|
||||
|
||||
typedef void (*PRIV_INSECT_PROCESS)(struct _MUSEUM_INSECT_PRIVATE_DATA*, GAME*);
|
||||
|
||||
typedef struct _MUSEUM_INSECT_SKELETON {
|
||||
cKF_SkeletonInfo_R_c _00;
|
||||
Mtx _70;
|
||||
artificial_padding(0x70, 0x170, Mtx);
|
||||
Mtx _170;
|
||||
artificial_padding(0x170, 0x270, Mtx);
|
||||
s_xyz _270;
|
||||
artificial_padding(0x270, 0x288, s_xyz);
|
||||
s_xyz _288;
|
||||
artificial_padding(0x288, 0x2A8, s_xyz);
|
||||
cKF_Skeleton_R_c* _2A8;
|
||||
cKF_Animation_R_c* _2AC;
|
||||
} MUSEUM_INSECT_SKELETON;
|
||||
|
||||
typedef struct _MUSEUM_INSECT_PRIVATE_DATA {
|
||||
int _00;
|
||||
PRIV_INSECT_PROCESS _04;
|
||||
MUSEUM_INSECT_SKELETON* _08;
|
||||
f32 _0C;
|
||||
f32 _10;
|
||||
f32 _14; // scale
|
||||
f32 _18;
|
||||
xyz_t _1C;
|
||||
xyz_t _28;
|
||||
xyz_t _34;
|
||||
f32 _40;
|
||||
xyz_t _44;
|
||||
int _50;
|
||||
int _54;
|
||||
f32 _58;
|
||||
union {
|
||||
f32 _5C;
|
||||
struct {
|
||||
s16 _5C_s16;
|
||||
s16 _5E_s16;
|
||||
};
|
||||
};
|
||||
f32 _60;
|
||||
artificial_padding(0x60, 0x68, f32);
|
||||
s_xyz _68;
|
||||
s16 _6E;
|
||||
s16 _70;
|
||||
s16 _72;
|
||||
s16 _74;
|
||||
s16 _76;
|
||||
s16 _78;
|
||||
s16 _7A;
|
||||
s16 _7C;
|
||||
s16 _7E;
|
||||
s16 _80;
|
||||
s16 _82;
|
||||
artificial_padding(0x82, 0x8C, s16);
|
||||
s16 _8C;
|
||||
s16 _8E;
|
||||
int _90;
|
||||
} MUSEUM_INSECT_PRIVATE_DATA;
|
||||
|
||||
typedef struct _INSECT_DISPLAY_MSG_INFO {
|
||||
s16 insectName;
|
||||
s16 insectInfo;
|
||||
} INSECT_DISPLAY_MSG_INFO;
|
||||
|
||||
typedef struct _MUSEUM_INSECT_ACTOR {
|
||||
ACTOR actor; // offset: 0x0
|
||||
MUSEUM_INSECT_PRIVATE_DATA privInsects[aINS_INSECT_TYPE_NUM]; // offset: 0x174
|
||||
MUSEUM_INSECT_PRIVATE_DATA _1894[6]; // offset: 0x1894
|
||||
MUSEUM_INSECT_PRIVATE_DATA _1CA0[15]; // offset: 0x1CA0
|
||||
MUSEUM_INSECT_SKELETON _24B8[4]; // offset: 0x24B8
|
||||
int _2F78; // offset: 0x2F78
|
||||
int _2F7C; // offset: 0x2F7C
|
||||
INSECT_DISPLAY_MSG_INFO _2F80[7]; // offset: 0x2F82
|
||||
s16 _2F9C[5]; // offset: 0x2F9C
|
||||
} MUSEUM_INSECT_ACTOR;
|
||||
|
||||
// bss
|
||||
extern MUSEUM_INSECT_ACTOR* MI_Control_Actor;
|
||||
|
||||
// data
|
||||
extern rgba_t window_color;
|
||||
extern Gfx *m_monshiro_disp_tbl[], *m_monki_disp_tbl[], *m_ageha_disp_tbl[], *m_ohmurasaki_disp_tbl[],
|
||||
*m_minmin_disp_tbl[], *m_tukutuku_disp_tbl[], *m_higurashi_disp_tbl[], *m_abura_disp_tbl[], *m_shiokara_disp_tbl[],
|
||||
*m_akiakane_disp_tbl[], *m_ginyanma_disp_tbl[], *m_oniyanma_disp_tbl[], *m_syouryou_disp_tbl[],
|
||||
*m_tonosama_disp_tbl[], *m_koorogi_disp_tbl[], *m_kirigirisu_disp_tbl[], *m_suzumushi_disp_tbl[],
|
||||
*m_matumushi_disp_tbl[], *m_tentou_disp_tbl[], *m_nanahoshi_disp_tbl[], *m_kamakiri_disp_tbl[],
|
||||
*m_maimai_disp_tbl[], *m_hachi_disp_tbl[], *m_kanabun_disp_tbl[], *m_kabuto_disp_tbl[], *m_hirata_disp_tbl[],
|
||||
*m_tamamushi_disp_tbl[], *m_gomadara_disp_tbl[], *m_nokogiri_disp_tbl[], *m_miyama_disp_tbl[], *m_okuwa_disp_tbl[],
|
||||
*m_amenbo_disp_tbl[], *m_mino_disp_tbl[], *m_kumo_disp_tbl[], *m_goki_disp_tbl[], *m_genji_disp_tbl[],
|
||||
*m_dango_disp_tbl[], *m_ari_disp_tbl[], *m_okera_disp_tbl[], *m_ka_disp_tbl[];
|
||||
extern Gfx** minsect_mdl[aINS_INSECT_TYPE_NUM];
|
||||
extern PRIV_INSECT_PROCESS minsect_ct[aINS_INSECT_TYPE_NUM];
|
||||
extern PRIV_INSECT_PROCESS minsect_mv[aINS_INSECT_TYPE_NUM];
|
||||
extern PRIV_INSECT_PROCESS minsect_dw[aINS_INSECT_TYPE_NUM];
|
||||
extern f32 minsect_shadow_scale_tbl[aINS_INSECT_TYPE_NUM];
|
||||
extern int active_time_tbl[aINS_INSECT_TYPE_NUM];
|
||||
extern int relax_time_tbl[aINS_INSECT_TYPE_NUM];
|
||||
extern xyz_t flower_pos[8];
|
||||
extern xyz_t tree_pos[8];
|
||||
extern xyz_t rock_pos[2];
|
||||
extern xyz_t tonbo_rock_pos[6];
|
||||
extern xyz_t tentou_flower_pos[4];
|
||||
extern xyz_t hachi_base_pos;
|
||||
extern xyz_t kabuto_base_pos[9];
|
||||
extern cKF_Skeleton_R_c* kuwagata_model_tbl[4];
|
||||
extern cKF_Animation_R_c* kuwagata_anim_tbl[4];
|
||||
extern xyz_t kuwagata_base_pos[4];
|
||||
extern xyz_t amenbo_center_pos;
|
||||
extern xyz_t rail_pos[6];
|
||||
extern xyz_t ari_rail_pos[3];
|
||||
extern f32 minsect_scale_tbl[aINS_INSECT_TYPE_NUM];
|
||||
|
||||
// rodata
|
||||
extern const f32 base_high_tbl[4];
|
||||
extern const s16 aim_angle_tbl[6];
|
||||
extern const xyz_t mino_base_pos;
|
||||
extern const xyz_t mino_top_pos;
|
||||
extern const xyz_t mino_bottom_pos;
|
||||
extern const xyz_t kumo_base_pos;
|
||||
extern const xyz_t kumo_top_pos;
|
||||
extern const xyz_t kumo_bottom_pos;
|
||||
extern const xyz_t base_genji_pos;
|
||||
extern const xyz_t genji_mizu_pos;
|
||||
extern const xyz_t okera_base_pos;
|
||||
|
||||
// ac_museum_insect.c
|
||||
int Museum_Insect_GetMsgNo(ACTOR* actorx);
|
||||
int Museum_Insect_Check_Talk_Distance(GAME* game, int i);
|
||||
void Museum_Insect_Set_MsgInsectInfo(ACTOR* actor, int i);
|
||||
void Museum_Insect_set_talk_info(ACTOR* actor);
|
||||
void Museum_Insect_Talk_process(ACTOR* actor, GAME* game);
|
||||
void Museum_Insect_Actor_ct(ACTOR* actor, GAME* game);
|
||||
void Museum_Insect_Actor_dt(ACTOR* actor, GAME* game);
|
||||
void Museum_Insect_Actor_move(ACTOR* actor, GAME* game);
|
||||
void Museum_Insect_Actor_draw(ACTOR* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_base.c_inc
|
||||
void mID_insect_moveF(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void minsect_amenbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_amenbo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_amenbo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void ari_alone_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void ari_alone_make(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void ari_alone_dt(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void ari_alone_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void ari_alone_draw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_ari_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_ari_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_ari_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_draw_shadow(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_fly_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2);
|
||||
void minsect_garden_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2);
|
||||
void minsect_flower_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, xyz_t* p);
|
||||
void minsect_goki_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void minsect_kanban_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void minsect_tree_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void minsect_rock_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void minsect_batta_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
BOOL get_now_mind_flag(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void set_relax_active_time(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_chou.c_inc
|
||||
void minsect_chou_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_chou_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_chou_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_chou_aim_flower_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_chou_aim_flower_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_chou_flower_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_chou_flower_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_chou_fly_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_chou_fly_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_chou_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_chou_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_semi.c_inc
|
||||
void minsect_semi_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_semi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void mi_semi_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_semi_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_semi_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_tonbo.c_inc
|
||||
void minsect_tonbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_tonbo_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL minsect_tonbo_bg_check(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_near_target_set(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_rock_target_set(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game, xyz_t* p);
|
||||
BOOL minsect_tonbo_suprised_rest_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
f32 minsect_tonbo_acc_change(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void minsect_tonbo_max_speed_set(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
f32 minsect_tonbo_aim_distance_set(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void minsect_tonbo_aim_angle_check(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void minsect_tonbo_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_aim_rock_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_aim_rock_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_rock_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_rock_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_rock_wait_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_rock_wait_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_fly_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_fly_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tonbo_MoveF(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
|
||||
// ac_museum_insect_batta.c_inc
|
||||
void mi_batta_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_batta_suzumushi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void mi_batta_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void minsect_batta_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_batta_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_batta_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_batta_silent_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_batta_silent_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_batta_jump_wait_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_batta_jump_wait_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_batta_jump_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_batta_jump_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_batta_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_batta_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_tentou.c_inc
|
||||
void mi_tentou_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_tentou_kama_anime(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void mi_tentou_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_tentou_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_tentou_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_tentou_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_tentou_menace_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_tentou_menace(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_tentou_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game);
|
||||
void minsect_tentou_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tentou_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_tentou_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_hachi.c_inc
|
||||
void mi_hachi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor);
|
||||
void mi_hachi_mitu_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_hachi_mitu(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_hachi_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_hachi_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_hachi_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_hachi_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_hachi_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game);
|
||||
void minsect_hachi_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_hachi_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_hachi_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_kabuto.c_inc
|
||||
void minsect_kabuto_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kabuto_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kabuto_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_kuwagata.c_inc
|
||||
void mi_kuwagata_rensa_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_kuwagata_rensa(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_kuwagata_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_kuwagata_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_kuwagata_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_kuwagata_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_kuwagata_battle_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_kuwagata_battle(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_kuwagata_menace_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_kuwagata_menace(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_kuwagata_attack_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_kuwagata_attack(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_kuwagata_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game);
|
||||
void minsect_kuwagata_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kuwagata_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kuwagata_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_mino.c_inc
|
||||
void minsect_mino_up_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_up(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_down_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_down(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_check_dush_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_furiko(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_hineri(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game);
|
||||
void minsect_mino_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_mino_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_kumo.c_inc
|
||||
void minsect_kumo_hide_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_hide(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_up_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_up(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_down_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_down(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_furiko(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_hineri(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game);
|
||||
void minsect_kumo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_kumo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_goki.c_inc
|
||||
void minsect_goki_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
BOOL goki_player_check(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void goki_wall_hit_angle_corect_sub(MUSEUM_INSECT_PRIVATE_DATA* actor, int angle);
|
||||
void goki_wall_hit_angle_corect(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void goki_set_talk_info_init(ACTOR* actor);
|
||||
void goki_talk_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void goki_talk_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_goki_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_goki_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_genji.c_inc
|
||||
void mi_genji_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void genji_light_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game, s16 r5);
|
||||
void genji_light_make(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game, s16 i);
|
||||
void genji_light_anime(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void genji_light_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void genji_light_draw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_genji_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_genji_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_genji_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_dango.c_inc
|
||||
void mi_dango_defence_anime(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_dango_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_dango_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_dango_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_dango_defence_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_dango_defence(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void mi_dango_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game);
|
||||
void minsect_dango_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_dango_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_dango_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_okera.c_inc
|
||||
void mi_okera_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_okera_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void okera_dig_up_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void okera_dig_up_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void okera_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void okera_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void okera_dig_down_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void okera_dig_down_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void okera_dig_wait_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void okera_dig_wait_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_okera_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_okera_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
// ac_museum_insect_ka.c_inc
|
||||
void minsect_ka_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_ka_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
void minsect_ka_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
+13
-171
@@ -1,24 +1,4 @@
|
||||
#include "ac_museum_fish.h"
|
||||
#include "m_msg.h"
|
||||
#include "m_common_data.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "m_player_lib.h"
|
||||
#include "m_debug_mode.h"
|
||||
#include "m_rcp.h"
|
||||
#include "ac_gyoei.h"
|
||||
|
||||
// found useful macros
|
||||
#define MY_MAX(a, b) (((a) >= (b)) ? (a) : (b))
|
||||
#define MY_CLAMP(v, l, h) MIN(MY_MAX((l), (v)), (h))
|
||||
#define ARRAY_LEN(a) (sizeof(a) / sizeof(*a))
|
||||
|
||||
#define CALC_EASE(x) (1.0f - sqrtf(1.0f - (x)))
|
||||
#define CALC_EASE2(x) CALC_EASE(CALC_EASE(x))
|
||||
#define SHORT2DEG_ANGLE2(x) ((x) * (360.0f / 65536.0f))
|
||||
#define RANDOMF_RANGE(min, max) ((f32)(min) + (f32)RANDOM_F((f32)(max) - (f32)(min)))
|
||||
#define RANDOM2F_RANGE(min, max) ((f32)(min) + (f32)RANDOM2_F((f32)(max) - (f32)(min)))
|
||||
#define RANDOM_RANGE(min, max) ((int)(min) + (int)RANDOM((int)(max) - (int)(min)))
|
||||
#define RANDOM2_RANGE(min, max) ((int)(min) + (int)RANDOM2((int)(max) - (int)(min)))
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
// extern data
|
||||
// clang-format off
|
||||
@@ -115,7 +95,6 @@ extern cKF_Animation_R_c
|
||||
cKF_ba_r_obj_museum5_kusa3;
|
||||
|
||||
// data
|
||||
|
||||
MUSEUM_FISH_ACTOR* MF_Control_Actor;
|
||||
|
||||
/* Init stuff */
|
||||
@@ -494,134 +473,6 @@ PRIV_FISH_DRAW mfish_dw[40] = {
|
||||
/* ARAPAIMA */ mfish_big_fish_dw
|
||||
};
|
||||
|
||||
xyz_t unagi_rail_pos[25] = {
|
||||
{ 228.0f, 57.0f, 192.0f },
|
||||
{ 231.0f, 57.0f, 203.0f },
|
||||
{ 237.0f, 57.0f, 215.0f },
|
||||
{ 245.0f, 58.0f, 225.0f },
|
||||
{ 252.0f, 59.0f, 233.0f },
|
||||
{ 254.0f, 60.0f, 245.0f },
|
||||
{ 248.0f, 60.0f, 255.0f },
|
||||
{ 238.0f, 60.0f, 256.0f },
|
||||
{ 231.0f, 60.0f, 247.0f },
|
||||
{ 222.0f, 60.0f, 240.0f },
|
||||
{ 212.0f, 60.0f, 243.0f },
|
||||
{ 203.0f, 60.0f, 249.0f },
|
||||
{ 196.0f, 60.0f, 248.0f },
|
||||
{ 191.0f, 60.0f, 241.0f },
|
||||
{ 191.0f, 60.0f, 234.0f },
|
||||
{ 187.0f, 60.0f, 223.0f },
|
||||
{ 183.0f, 60.0f, 212.0f },
|
||||
{ 181.0f, 60.0f, 203.0f },
|
||||
{ 182.0f, 57.0f, 191.0f },
|
||||
{ 187.0f, 56.0f, 183.0f },
|
||||
{ 193.0f, 56.0f, 176.0f },
|
||||
{ 201.0f, 56.0f, 172.0f },
|
||||
{ 209.0f, 56.0f, 173.0f },
|
||||
{ 216.0f, 56.0f, 176.0f },
|
||||
{ 221.0f, 56.0f, 182.0f }
|
||||
};
|
||||
|
||||
xyz_t unagi_rail_pos2[20] = {
|
||||
{ 228.0f, 57.0f, 192.0f },
|
||||
{ 236.0f, 57.0f, 201.0f },
|
||||
{ 244.0f, 57.0f, 204.0f },
|
||||
{ 250.0f, 58.0f, 213.0f },
|
||||
{ 254.0f, 59.0f, 225.0f },
|
||||
{ 250.0f, 60.0f, 238.0f },
|
||||
{ 243.0f, 60.0f, 242.0f },
|
||||
{ 235.0f, 60.0f, 238.0f },
|
||||
{ 226.0f, 60.0f, 233.0f },
|
||||
{ 215.0f, 60.0f, 229.0f },
|
||||
{ 205.0f, 60.0f, 228.0f },
|
||||
{ 198.0f, 60.0f, 229.0f },
|
||||
{ 191.0f, 60.0f, 227.0f },
|
||||
{ 186.0f, 60.0f, 222.0f },
|
||||
{ 181.0f, 60.0f, 216.0f },
|
||||
{ 181.0f, 60.0f, 207.0f },
|
||||
{ 184.0f, 60.0f, 196.0f },
|
||||
{ 191.0f, 60.0f, 186.0f },
|
||||
{ 201.0f, 57.0f, 177.0f },
|
||||
{ 213.0f, 56.0f, 178.0f }
|
||||
};
|
||||
|
||||
xyz_t unagi_rail_pos3[25] = {
|
||||
{ 228.0f, 57.0f, 192.0f },
|
||||
{ 231.0f, 57.0f, 203.0f },
|
||||
{ 229.0f, 57.0f, 213.0f },
|
||||
{ 222.0f, 58.0f, 225.0f },
|
||||
{ 212.0f, 59.0f, 226.0f },
|
||||
{ 204.0f, 60.0f, 227.0f },
|
||||
{ 197.0f, 60.0f, 230.0f },
|
||||
{ 193.0f, 60.0f, 236.0f },
|
||||
{ 195.0f, 60.0f, 246.0f },
|
||||
{ 201.0f, 60.0f, 253.0f },
|
||||
{ 212.0f, 60.0f, 256.0f },
|
||||
{ 222.0f, 60.0f, 255.0f },
|
||||
{ 237.0f, 60.0f, 254.0f },
|
||||
{ 243.0f, 60.0f, 246.0f },
|
||||
{ 240.0f, 60.0f, 232.0f },
|
||||
{ 232.0f, 60.0f, 227.0f },
|
||||
{ 223.0f, 60.0f, 225.0f },
|
||||
{ 209.0f, 60.0f, 225.0f },
|
||||
{ 198.0f, 60.0f, 220.0f },
|
||||
{ 190.0f, 60.0f, 209.0f },
|
||||
{ 187.0f, 60.0f, 196.0f },
|
||||
{ 191.0f, 60.0f, 184.0f },
|
||||
{ 197.0f, 60.0f, 178.0f },
|
||||
{ 207.0f, 59.0f, 173.0f },
|
||||
{ 221.0f, 57.0f, 180.0f }
|
||||
};
|
||||
|
||||
xyz_t unagi_normal_to_reverse_rail_pos[12] = {
|
||||
{ 228.0f, 57.0f, 192.0f },
|
||||
{ 236.0f, 57.0f, 201.0f },
|
||||
{ 244.0f, 57.0f, 204.0f },
|
||||
{ 250.0f, 58.0f, 213.0f },
|
||||
{ 254.0f, 59.0f, 225.0f },
|
||||
{ 250.0f, 60.0f, 238.0f },
|
||||
{ 243.0f, 60.0f, 242.0f },
|
||||
{ 235.0f, 60.0f, 236.0f },
|
||||
{ 226.0f, 60.0f, 228.0f },
|
||||
{ 225.0f, 60.0f, 219.0f },
|
||||
{ 228.0f, 58.0f, 208.0f },
|
||||
{ 228.0f, 57.0f, 192.0f }
|
||||
};
|
||||
|
||||
xyz_t unagi_reverse_to_normal_rail_pos[19] = {
|
||||
{ 228.0f, 57.0f, 192.0f },
|
||||
{ 218.0f, 56.0f, 178.0f },
|
||||
{ 204.0f, 57.0f, 176.0f },
|
||||
{ 191.0f, 58.0f, 186.0f },
|
||||
{ 184.0f, 59.0f, 196.0f },
|
||||
{ 189.0f, 60.0f, 208.0f },
|
||||
{ 198.0f, 60.0f, 215.0f },
|
||||
{ 205.0f, 60.0f, 224.0f },
|
||||
{ 204.0f, 60.0f, 235.0f },
|
||||
{ 196.0f, 60.0f, 242.0f },
|
||||
{ 188.0f, 60.0f, 241.0f },
|
||||
{ 183.0f, 60.0f, 233.0f },
|
||||
{ 180.0f, 60.0f, 219.0f },
|
||||
{ 181.0f, 60.0f, 207.0f },
|
||||
{ 184.0f, 60.0f, 196.0f },
|
||||
{ 191.0f, 59.0f, 186.0f },
|
||||
{ 204.0f, 57.0f, 176.0f },
|
||||
{ 218.0f, 56.0f, 178.0f },
|
||||
{ 228.0f, 57.0f, 192.0f }
|
||||
};
|
||||
|
||||
xyz_t *unagi_rail_tbl[3] = {
|
||||
unagi_rail_pos,
|
||||
unagi_rail_pos2,
|
||||
unagi_rail_pos3
|
||||
};
|
||||
|
||||
int unagi_rail_num_tbl[3] = {
|
||||
ARRAY_LEN(unagi_rail_pos),
|
||||
ARRAY_LEN(unagi_rail_pos2),
|
||||
ARRAY_LEN(unagi_rail_pos3),
|
||||
};
|
||||
|
||||
#include "../src/actor/ac_museum_fish_base.c_inc"
|
||||
|
||||
// clang-format on
|
||||
@@ -695,10 +546,6 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) {
|
||||
mfish_point_light_ct(actorx, gamex);
|
||||
|
||||
for (i = 0; i < 14; i++) {
|
||||
// 0x0060 : kusa_group_tbl
|
||||
// 0x1300 : kusa_model
|
||||
// 0x1338 : kusa_anime
|
||||
// 0x1370 : kusa_start_frame
|
||||
actor->prvKusa[i]._54C = kusa_model[i];
|
||||
cKF_SkeletonInfo_R_ct(&actor->prvKusa[i]._00, kusa_model[i], kusa_anime[i], &actor->prvKusa[i]._4F0,
|
||||
&actor->prvKusa[i]._514);
|
||||
@@ -707,7 +554,6 @@ void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) {
|
||||
actor->prvKusa[i]._00.frame_control.current_frame = kusa_start_frame[i];
|
||||
actor->prvKusa[i]._538.x = qrand();
|
||||
actor->prvKusa[i]._538.z = qrand();
|
||||
// actor->_101f0[i * 2 + 2] = qrand();
|
||||
}
|
||||
|
||||
if (mMmd_FishInfo(aGYO_TYPE_FROG)) {
|
||||
@@ -886,7 +732,7 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) {
|
||||
f32 v;
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
|
||||
|
||||
MUSEUM_FISH_PRIVATE_DATA* prv2;
|
||||
mfish_point_light_mv(actor, &play->game);
|
||||
old_14db4 = actor->_14db4;
|
||||
mfish_get_player_area(actor, &play->game);
|
||||
@@ -951,14 +797,10 @@ void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) {
|
||||
}
|
||||
|
||||
Museum_Fish_Talk_process(actorx, game);
|
||||
|
||||
{
|
||||
// needs a new variable
|
||||
MUSEUM_FISH_PRIVATE_DATA* prv = actor->prvFish;
|
||||
for (i = 0; i < aGYO_TYPE_NUM; i++, prv++) {
|
||||
if (prv->_62E_flags & 1) {
|
||||
mfish_mv[i](prv, game);
|
||||
}
|
||||
prv2 = actor->prvFish;
|
||||
for (i = 0; i < aGYO_TYPE_NUM; i++, prv2++) {
|
||||
if (prv2->_62E_flags & 1) {
|
||||
mfish_mv[i](prv2, game);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1031,17 +873,17 @@ void Museum_Fish_Suisou_draw(ACTOR* actorx, GAME* game, int r5) {
|
||||
}
|
||||
}
|
||||
|
||||
BOOL kusa_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** mjoint_m, u8* joint_f, void* arg,
|
||||
s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL kusa_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags,
|
||||
void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_KUSA_DATA* actor = (MUSEUM_FISH_KUSA_DATA*)arg;
|
||||
if (joint_num > 0) {
|
||||
if (joint_idx > 0) {
|
||||
f32 v = (actor->_54C == &cKF_bs_r_obj_museum5_kusa3) ? 35.0f : 20.f;
|
||||
|
||||
joint1->y += (s16)(sin_s(actor->_538.x + (joint_num * DEG2SHORT_ANGLE(90))) * 1274.0f);
|
||||
joint1->x += (s16)(sin_s(actor->_538.z + (joint_num * DEG2SHORT_ANGLE(90))) * 4369.0f);
|
||||
joint_rot->y += (s16)(sin_s(actor->_538.x + (joint_idx * DEG2SHORT_ANGLE(90))) * 1274.0f);
|
||||
joint_rot->x += (s16)(sin_s(actor->_538.z + (joint_idx * DEG2SHORT_ANGLE(90))) * 4369.0f);
|
||||
|
||||
trans->y -= actor->_540.x * (v * joint_num);
|
||||
trans->z += actor->_540.z * (v * joint_num);
|
||||
joint_pos->y -= actor->_540.x * (v * joint_idx);
|
||||
joint_pos->z += actor->_540.z * (v * joint_idx);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_afish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_aroana_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
@@ -21,8 +22,6 @@ void mfish_aroana_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
add_calc0(&actor->_5F0, 0.01f, 0.001f);
|
||||
}
|
||||
|
||||
// close copy of mfish_afish_normal_process_init
|
||||
|
||||
void mfish_aroana_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
f32 v = RANDOM_F(actor->init_data._14) + actor->init_data._10;
|
||||
|
||||
@@ -151,10 +150,8 @@ void mfish_aroana_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (ABS((s16)(actor->_60C.y - actor->_612.y)) < DEG2SHORT_ANGLE(2) && actor->_5E8 < 0.1f) {
|
||||
if (actor->_63E > 0) {
|
||||
if (mfish_WallCheck(actor)) {
|
||||
// actor->_640 = 10;
|
||||
mfish_aroana_turn_process_init(actor);
|
||||
} else {
|
||||
// actor->_640 = 10;
|
||||
mfish_aroana_normal_process_init(actor);
|
||||
}
|
||||
actor->_63E--;
|
||||
@@ -253,18 +250,18 @@ void mfish_aroana_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_38._00.frame_control.speed = (actor->_5E8 * 2.0f) / (actor->init_data._10 + actor->init_data._14) + 0.5f;
|
||||
}
|
||||
|
||||
BOOL mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_aroana_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
int v;
|
||||
if (joint_num == 1) {
|
||||
if (joint_idx == 1) {
|
||||
Matrix_scale(1.0, sin_s(actor->_63A + actor->_63C) * 0.025f + 1.0f, sin_s(actor->_63A) * 0.025f + 1.0f, 1);
|
||||
} else if (joint_num == 2) {
|
||||
v = joint1->y - (actor->_618.z << 1);
|
||||
joint1->y = MIN(MAX(v, DEG2SHORT_ANGLE(-40)), DEG2SHORT_ANGLE(40));
|
||||
} else if (joint_idx == 2) {
|
||||
v = joint_rot->y - (actor->_618.z << 1);
|
||||
joint_rot->y = MIN(MAX(v, DEG2SHORT_ANGLE(-40)), DEG2SHORT_ANGLE(40));
|
||||
|
||||
v = joint1->x - (actor->_618.z >> 2);
|
||||
joint1->x = MIN(MAX(v, DEG2SHORT_ANGLE(-20)), DEG2SHORT_ANGLE(20));
|
||||
v = joint_rot->x - (actor->_618.z >> 2);
|
||||
joint_rot->x = MIN(MAX(v, DEG2SHORT_ANGLE(-20)), DEG2SHORT_ANGLE(20));
|
||||
|
||||
Matrix_scale(1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) * 0.05f + 1.0f,
|
||||
sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) * 0.05f + 1.0f, 1);
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
f32 Rnd_EX_f(f32 v) {
|
||||
f32 rand1 = RANDOM2_F(2);
|
||||
f32 rand2 = RANDOM_F(1);
|
||||
@@ -121,7 +123,6 @@ void mfish_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* prv) {
|
||||
}
|
||||
|
||||
void mfish_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
// no clue what's going on here
|
||||
add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(3.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5.0f),
|
||||
@@ -526,10 +527,10 @@ void mfish_onefish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
cKF_SkeletonInfo_R_play(&actor->_38._00);
|
||||
}
|
||||
|
||||
int mfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg,
|
||||
s_xyz* joint1, xyz_t* trans) {
|
||||
int mfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags,
|
||||
void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 2) {
|
||||
if (joint_idx == 2) {
|
||||
int v, t;
|
||||
|
||||
if (actor->group != 4) {
|
||||
@@ -542,10 +543,10 @@ int mfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num,
|
||||
v = 3;
|
||||
}
|
||||
|
||||
t = joint1->y - (actor->_618.z * v);
|
||||
joint1->y = MY_CLAMP(t, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60));
|
||||
t = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(t, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25));
|
||||
t = joint_rot->y - (actor->_618.z * v);
|
||||
joint_rot->y = MY_CLAMP(t, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60));
|
||||
t = joint_rot->x - (actor->_618.z >> 1);
|
||||
joint_rot->x = MY_CLAMP(t, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25));
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@@ -643,6 +644,7 @@ void mfish_ani_base_dw(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
#include "../src/actor/ac_museum_fish_zarigani.c_inc"
|
||||
#include "../src/actor/ac_museum_fish_kurage.c_inc"
|
||||
#include "../src/actor/ac_museum_fish_hasu.c_inc"
|
||||
|
||||
void Museum_Fish_BigFishObjCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
int i;
|
||||
MUSEUM_FISH_PRIVATE_DATA* fish[2];
|
||||
@@ -802,7 +804,7 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_62E_flags &= ~0x1e;
|
||||
actor->_62C = 0;
|
||||
Museum_Fish_objchk_pos_set(actor, gamex);
|
||||
// asm 17C
|
||||
|
||||
a = (+00.0f + p.x);
|
||||
b = (+45.0f + p.x);
|
||||
d = (-17.5f + p.z);
|
||||
@@ -816,19 +818,11 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
c -= (actor->position.z + actor->init_data._28 * v2);
|
||||
d -= (actor->position.z - actor->init_data._28 * v2);
|
||||
|
||||
/*
|
||||
f31 = a
|
||||
f30 = b
|
||||
f28 = c
|
||||
f29 = d
|
||||
*/
|
||||
|
||||
actor->_5FC = -a;
|
||||
actor->_600 = b;
|
||||
actor->_604 = -c;
|
||||
actor->_608 = d;
|
||||
|
||||
// asm 2E8
|
||||
f27 -= actor->position.y;
|
||||
f26 -= actor->position.y;
|
||||
if (a > 0.0f) {
|
||||
@@ -878,7 +872,6 @@ void Museum_Fish_DonkoBGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
|
||||
f25 = MIN(MIN(actor->_608 - cos_s(actor->_60C.y), actor->_604 + cos_s(actor->_60C.y)),
|
||||
MIN(actor->_600 - sin_s(actor->_60C.y), actor->_5FC + sin_s(actor->_60C.y)));
|
||||
// asm 5D8
|
||||
if (f25 < 5.0f) {
|
||||
f26 -= 0.5f * (5.0f - f25);
|
||||
}
|
||||
@@ -896,7 +889,7 @@ void Museum_Fish_objchk_pos_set(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_5B8.z += (actor->init_data._24 * cos_s(actor->_60C.y));
|
||||
}
|
||||
|
||||
void Museum_Fish_old_chk_pos_set() {
|
||||
void Museum_Fish_old_chk_pos_set(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
// UNUSED/STRIPPED
|
||||
}
|
||||
|
||||
@@ -961,7 +954,6 @@ void Museum_Fish_BGCheck(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_62E_flags |= 0x8;
|
||||
}
|
||||
|
||||
// asm 468
|
||||
Museum_Fish_objchk_pos_set(actor, game);
|
||||
actor->_5FC = actor->_5B8.x - (p.x - f29);
|
||||
actor->_600 = (p.x + f30) - actor->_5B8.x;
|
||||
@@ -1068,9 +1060,7 @@ void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) {
|
||||
actor->prvKusa[j]._538.y = DEG2SHORT_ANGLE(3.5f);
|
||||
}
|
||||
}
|
||||
// asm 3fc-410
|
||||
}
|
||||
// asm 414
|
||||
if (f28 > 0.0f) {
|
||||
f->_62E_flags |= 0x100;
|
||||
f->position.x += (f30 / f28);
|
||||
@@ -1079,15 +1069,14 @@ void Museum_Fish_Kusa_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) {
|
||||
f28 = 0.0f;
|
||||
f29 = 0.0f;
|
||||
f30 = 0.0f;
|
||||
// asm 460
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) {
|
||||
int i;
|
||||
MUSEUM_FISH_PRIVATE_DATA* fj; // r31
|
||||
MUSEUM_FISH_PRIVATE_DATA* f; // r29
|
||||
MUSEUM_FISH_PRIVATE_DATA* fj;
|
||||
MUSEUM_FISH_PRIVATE_DATA* f;
|
||||
int j;
|
||||
f32 f31;
|
||||
f32 f30;
|
||||
@@ -1111,15 +1100,14 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) {
|
||||
|
||||
f = actor->prvFish;
|
||||
for (i = 0; i < aGYO_TYPE_NUM; i++, f++) {
|
||||
// asm b8
|
||||
if (i != 0x21 && i != 0x20 && i != 0x1a && i != 0x27 && i != 0xa && f->_62E_flags & 1) {
|
||||
for (j = 0; j < aGYO_TYPE_NUM; j++, fj++) {
|
||||
if (f->group == fj->group && i != j && j != 0x21 && j != 0x1a && j != 0x27 && j != 10 &&
|
||||
fj->_62E_flags & 1 != 0) {
|
||||
|
||||
test.x = f->_5B8.x - fj->_5B8.x; // f31
|
||||
test.y = f->_5B8.y - fj->_5B8.y; // f29
|
||||
test.z = f->_5B8.z - fj->_5B8.z; // f30
|
||||
test.x = f->_5B8.x - fj->_5B8.x;
|
||||
test.y = f->_5B8.y - fj->_5B8.y;
|
||||
test.z = f->_5B8.z - fj->_5B8.z;
|
||||
sq_xz = SQ(test.x) + SQ(test.z);
|
||||
sq_xzy = sq_xz + SQ(test.y);
|
||||
if (sqrtf(sq_xzy) < f23) {
|
||||
@@ -1133,7 +1121,7 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) {
|
||||
if (sq_xz < SQ(additive)) {
|
||||
f22 = additive - sqrtf(SQ(test.x) + SQ(test.z));
|
||||
|
||||
// bug?
|
||||
//! BUG: multiplying by zero?
|
||||
if (test.y > atans_table(sqrtf(SQ(test.x) + SQ(test.z)), test.y) * 0.0f) {
|
||||
test.y = -test.y + (f->init_data._04 + fj->init_data._04);
|
||||
} else {
|
||||
@@ -1174,8 +1162,6 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// asm 5ec - 5f8
|
||||
}
|
||||
|
||||
if (f25 > 0.0f) {
|
||||
@@ -1208,7 +1194,6 @@ void Museum_Fish_Object_Check(MUSEUM_FISH_ACTOR* actor, GAME* game) {
|
||||
if (f->group == 3 && f->_624 != 7) {
|
||||
Museum_Fish_BigFishObjCheck(f, game);
|
||||
}
|
||||
// asm 728
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_bass_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) {
|
||||
if (r4 == 0) {
|
||||
@@ -53,7 +54,6 @@ void mfish_bass_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
}
|
||||
|
||||
void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
// no clue what's going on here
|
||||
add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
actor->_622 = add_calc_short_angle2(&actor->_60C.y, actor->_612.y, CALC_EASE2(0.25f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
@@ -62,7 +62,6 @@ void mfish_bass_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
}
|
||||
|
||||
void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
f32 ra;
|
||||
f32 t;
|
||||
f32 temp;
|
||||
@@ -133,7 +132,6 @@ void mfish_bass_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* fishActor) {
|
||||
}
|
||||
|
||||
void mfish_bass_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
if (((actor->_62E_flags & 0x200) != 0 && actor->_632 > DEG2SHORT_ANGLE(20)) || actor->_640 > 0) {
|
||||
f32 v = (actor->_5AC.y * 0.03f + 0.02f);
|
||||
add_calc2(&actor->_5EC,
|
||||
@@ -283,7 +281,6 @@ void mfish_bass_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_bass_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
|
||||
if (actor->_5F8 > actor->init_data._08 * 20.0f) {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
qrand();
|
||||
@@ -35,7 +36,6 @@ void mfish_big_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! NOTE: wrong floats in this function, based on objdiff
|
||||
xyz_t p;
|
||||
mfish_onefish_mv(actor, gamex);
|
||||
mfish_body_wind_anime_play(actor, gamex);
|
||||
@@ -146,12 +146,11 @@ void mfish_big_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
}
|
||||
|
||||
BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
//! NOTE: wrong floats in this function, based on objdiff
|
||||
BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
|
||||
if (joint_num == 1) {
|
||||
if (joint_idx == 1) {
|
||||
f32 v;
|
||||
int i;
|
||||
if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) {
|
||||
@@ -159,13 +158,13 @@ BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi
|
||||
} else {
|
||||
v = 0.02f;
|
||||
}
|
||||
i = joint1->x + (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
i = joint1->y + (int)(actor->_644 * (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * sin_s(actor->_646));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
trans->z += actor->_5AC.x * 0.06f * actor->_644 * sin_s(actor->_646 - DEG2SHORT_ANGLE(90));
|
||||
i = joint_rot->x + (actor->_618.z >> 1);
|
||||
joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
i = joint_rot->y + (int)(actor->_644 * (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * sin_s(actor->_646));
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
joint_pos->z += actor->_5AC.x * 0.06f * actor->_644 * sin_s(actor->_646 - DEG2SHORT_ANGLE(90));
|
||||
Matrix_scale(1.0f, 1.0f + v * sin_s(actor->_63A + actor->_63C), 1.0f + v * sin_s(actor->_63A), 1);
|
||||
} else if (joint_num == 2) {
|
||||
} else if (joint_idx == 2) {
|
||||
f32 v;
|
||||
int i;
|
||||
if (actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) {
|
||||
@@ -173,19 +172,19 @@ BOOL mfish_bfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joi
|
||||
} else {
|
||||
v = 0.035f;
|
||||
}
|
||||
i = joint1->y - (actor->_618.z * 2) +
|
||||
i = joint_rot->y - (actor->_618.z * 2) +
|
||||
(int)(actor->_644 * (GETREG(TAKREG, 0x15) * 0.01f + 0.75f) *
|
||||
sin_s(actor->_646 + DEG2SHORT_ANGLE(-90.f + GETREG(TAKREG, 0x17))));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40));
|
||||
i = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40));
|
||||
i = joint_rot->x - (actor->_618.z >> 1);
|
||||
joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
Matrix_scale(1.0f, 1.0f + v * sin_s(actor->_63A + DEG2SHORT_ANGLE(270)),
|
||||
1.0f + v * sin_s(actor->_63A + DEG2SHORT_ANGLE(90)), 1);
|
||||
} else if (joint_num == 3 && actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) {
|
||||
int i = joint1->y - actor->_618.z +
|
||||
} else if (joint_idx == 3 && actor->fishIDEnum == aGYO_TYPE_ARAPAIMA) {
|
||||
int i = joint_rot->y - actor->_618.z +
|
||||
(int)(actor->_644 * (1.0f + 0.01f * GETREG(TAKREG, 0x16)) *
|
||||
sin_s(actor->_646 + DEG2SHORT_ANGLE(-180.f + GETREG(TAKREG, 0x18))));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_dojou_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
@@ -165,24 +166,24 @@ void mfish_dojou_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x));
|
||||
}
|
||||
|
||||
BOOL mfish_dojou_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_dojou_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int i = joint1->x + actor->_618.z;
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-45), DEG2SHORT_ANGLE(40));
|
||||
i = joint1->y + actor->_618.z;
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40));
|
||||
} else if (joint_num == 2) {
|
||||
int i = (s16)(joint1->z - actor->_618.x);
|
||||
if (joint_idx == 1) {
|
||||
int i = joint_rot->x + actor->_618.z;
|
||||
joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-45), DEG2SHORT_ANGLE(40));
|
||||
i = joint_rot->y + actor->_618.z;
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40));
|
||||
} else if (joint_idx == 2) {
|
||||
int i = (s16)(joint_rot->z - actor->_618.x);
|
||||
f32 z;
|
||||
f32 t;
|
||||
joint1->z = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40));
|
||||
joint_rot->z = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40));
|
||||
z = actor->_618.z;
|
||||
t = joint1->y * ((GETREG(TAKREG, 0x19) * 0.1f + 0.8f) * actor->_5AC.x + 1.0f);
|
||||
t = joint_rot->y * ((GETREG(TAKREG, 0x19) * 0.1f + 0.8f) * actor->_5AC.x + 1.0f);
|
||||
i = (int)t - (int)z;
|
||||
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80));
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_donko_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! BUG: ?
|
||||
@@ -94,17 +95,17 @@ void mfish_donko_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
Museum_Fish_DonkoBGCheck(actor, gamex);
|
||||
}
|
||||
|
||||
BOOL mfish_donko_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_donko_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int i = joint1->x + (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
} else if (joint_num == 2) {
|
||||
int i = joint1->y - (actor->_618.z << 1);
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60));
|
||||
i = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
if (joint_idx == 1) {
|
||||
int i = joint_rot->x + (actor->_618.z >> 1);
|
||||
joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
} else if (joint_idx == 2) {
|
||||
int i = joint_rot->y - (actor->_618.z << 1);
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60));
|
||||
i = joint_rot->x - (actor->_618.z >> 1);
|
||||
joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_gupi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
@@ -167,24 +168,24 @@ void mfish_gupi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x));
|
||||
}
|
||||
|
||||
BOOL mfish_gupi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_gupi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int s = joint1->x + actor->_618.z;
|
||||
joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
s = joint1->y + actor->_618.z;
|
||||
joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_num == 2) {
|
||||
if (joint_idx == 1) {
|
||||
int s = joint_rot->x + actor->_618.z;
|
||||
joint_rot->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
s = joint_rot->y + actor->_618.z;
|
||||
joint_rot->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_idx == 2) {
|
||||
int s;
|
||||
if (actor->_5F0 - 0.001f > actor->_5E8) {
|
||||
joint1->y += (int)(2.0f * (actor->_5F0 - actor->_5E8) * joint1->y);
|
||||
joint_rot->y += (int)(joint_rot->y * (2.0f * (actor->_5F0 - actor->_5E8)));
|
||||
}
|
||||
s = joint1->y - actor->_618.z * 3;
|
||||
joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(60), DEG2SHORT_ANGLE(60));
|
||||
s = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
joint1->z += (s16)(actor->_618.x * (-1.3f + GETREG(TAKREG, 0x4e) * 0.1f));
|
||||
s = joint_rot->y - actor->_618.z * 3;
|
||||
joint_rot->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(60), DEG2SHORT_ANGLE(60));
|
||||
s = joint_rot->x - (actor->_618.z >> 1);
|
||||
joint_rot->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
joint_rot->z += (s16)(actor->_618.x * (-1.3f + GETREG(TAKREG, 0x4e) * 0.1f));
|
||||
Matrix_scale((GETREG(TAKREG, 0x4b) * 0.01f) * cos_s(actor->_63A) + 0.05f + 1.0f,
|
||||
(GETREG(TAKREG, 0x4c) * 0.01f) * sin_s(actor->_63A) + 0.1f + 1.0f, 1.0f, 1);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Pretty sure all the floats in this file are correct
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_museum5_hasu;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_museum5_hasu;
|
||||
@@ -159,25 +159,25 @@ void mfish_kaeru_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
}
|
||||
|
||||
BOOL hasu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg,
|
||||
s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL hasu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags,
|
||||
void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
YET_SKELETON_2* v2 = actor->_590;
|
||||
if (joint_num == 7) {
|
||||
trans->z += v2->_55C * sin_s(v2->_568);
|
||||
} else if (joint_num == 4) {
|
||||
trans->z += v2->_560 * sin_s(v2->_56A);
|
||||
} else if (joint_num == 9) {
|
||||
trans->z += v2->_564 * sin_s(v2->_56C);
|
||||
if (joint_idx == 7) {
|
||||
joint_pos->z += v2->_55C * sin_s(v2->_568);
|
||||
} else if (joint_idx == 4) {
|
||||
joint_pos->z += v2->_560 * sin_s(v2->_56A);
|
||||
} else if (joint_idx == 9) {
|
||||
joint_pos->z += v2->_564 * sin_s(v2->_56C);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL hasu_after_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f, void* arg,
|
||||
s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL hasu_after_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags,
|
||||
void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
YET_SKELETON_2* skele = actor->_590;
|
||||
if (joint_num == 9) {
|
||||
if (joint_idx == 9) {
|
||||
Matrix_Position_Zero(&actor->position);
|
||||
actor->position.y = skele->_564 * actor->init_data.renderScale * sin_s(skele->_56C) + 116.0f;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_ito_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! BUG: unused
|
||||
@@ -81,26 +82,26 @@ void mfish_ito_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
Museum_Fish_BGCheck(actor, gamex);
|
||||
}
|
||||
|
||||
BOOL mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_ito_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
if (joint_idx == 1) {
|
||||
f32 v;
|
||||
int i = joint1->x + (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
i = joint1->y + (int)(actor->_644 * (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * sin_s(actor->_646));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
int i = joint_rot->x + (actor->_618.z >> 1);
|
||||
joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
i = joint_rot->y + (int)(actor->_644 * (GETREG(TAKREG, 0x14) * 0.01f + 0.5f) * sin_s(actor->_646));
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
v = actor->_5AC.x * actor->_644 * sin_s(actor->_646 - DEG2SHORT_ANGLE(90));
|
||||
trans->z += v;
|
||||
joint_pos->z += v;
|
||||
Matrix_scale(1.0f, sin_s(actor->_63A + actor->_63C) * 0.025f + 1.0f, sin_s(actor->_63A) * 0.025f + 1.0f, 1);
|
||||
} else if (joint_num == 2) {
|
||||
} else if (joint_idx == 2) {
|
||||
int i;
|
||||
i = joint1->y - 2 * actor->_618.z +
|
||||
i = joint_rot->y - 2 * actor->_618.z +
|
||||
(int)(actor->_644 * (GETREG(TAKREG, 0x15) * 0.01f + 0.75f) *
|
||||
sin_s(actor->_646 + DEG2SHORT_ANGLE(-90.f + GETREG(TAKREG, 0x17))));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40));
|
||||
i = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-40), DEG2SHORT_ANGLE(40));
|
||||
i = joint_rot->x - (actor->_618.z >> 1);
|
||||
joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
Matrix_scale(1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) * 0.05f + 1.0f,
|
||||
sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) * 0.05f + 1.0f, 1);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_kaseki_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
@@ -147,27 +148,27 @@ void mfish_kaseki_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->activityFrameCount--;
|
||||
}
|
||||
|
||||
BOOL mfish_kaseki_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_kaseki_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
int i;
|
||||
if (joint_num == 1) {
|
||||
i = joint1->x + (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.01f + 0.5f));
|
||||
joint1->x = MIN(MAX(i, DEG2SHORT_ANGLE(-10)), DEG2SHORT_ANGLE(10));
|
||||
if (joint_idx == 1) {
|
||||
i = joint_rot->x + (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.01f + 0.5f));
|
||||
joint_rot->x = MIN(MAX(i, DEG2SHORT_ANGLE(-10)), DEG2SHORT_ANGLE(10));
|
||||
Matrix_scale(1.0f, (GETREG(TAKREG, 0x36) * 0.001f + 0.02f) * sin_s(actor->_63A + actor->_63C) + 1.0f,
|
||||
(GETREG(TAKREG, 0x36) * 0.001f + 0.02f) * sin_s(actor->_63A) + 1.0f, 1);
|
||||
} else if (joint_num == 2) {
|
||||
i = joint1->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x46) * 0.01f + 1.25f));
|
||||
joint1->y = MIN(MAX(i, DEG2SHORT_ANGLE(-50)), DEG2SHORT_ANGLE(50));
|
||||
i = joint1->x - (int)(actor->_618.z * (GETREG(TAKREG, 0x48) * 0.01f + 0.25f));
|
||||
joint1->x = MIN(MAX(i, DEG2SHORT_ANGLE(-10)), DEG2SHORT_ANGLE(10));
|
||||
} else if (joint_idx == 2) {
|
||||
i = joint_rot->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x46) * 0.01f + 1.25f));
|
||||
joint_rot->y = MIN(MAX(i, DEG2SHORT_ANGLE(-50)), DEG2SHORT_ANGLE(50));
|
||||
i = joint_rot->x - (int)(actor->_618.z * (GETREG(TAKREG, 0x48) * 0.01f + 0.25f));
|
||||
joint_rot->x = MIN(MAX(i, DEG2SHORT_ANGLE(-10)), DEG2SHORT_ANGLE(10));
|
||||
Matrix_scale(1.0f, (GETREG(TAKREG, 0x37) * 0.001f + 0.045f) * sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) + 1.0f,
|
||||
(GETREG(TAKREG, 0x37) * 0.001f + 0.045f) * sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) + 1.0f, 1);
|
||||
} else if (joint_num == 3) {
|
||||
i = joint1->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.01f + 1.25f));
|
||||
joint1->y = MIN(MAX(i, DEG2SHORT_ANGLE(-50)), DEG2SHORT_ANGLE(50));
|
||||
i = joint1->x + DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x2d) * sin_s(actor->_63A));
|
||||
joint1->x = MIN(MAX(i, DEG2SHORT_ANGLE(-40)), DEG2SHORT_ANGLE(40));
|
||||
} else if (joint_idx == 3) {
|
||||
i = joint_rot->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.01f + 1.25f));
|
||||
joint_rot->y = MIN(MAX(i, DEG2SHORT_ANGLE(-50)), DEG2SHORT_ANGLE(50));
|
||||
i = joint_rot->x + DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x2d) * sin_s(actor->_63A));
|
||||
joint_rot->x = MIN(MAX(i, DEG2SHORT_ANGLE(-40)), DEG2SHORT_ANGLE(40));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_kingyo_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
@@ -215,24 +216,24 @@ void mfish_kingyo_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x));
|
||||
}
|
||||
|
||||
BOOL mfish_kingyo_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_kingyo_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int i = joint1->x + actor->_618.z;
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
i = joint1->y + actor->_618.z;
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_num == 2) {
|
||||
if (joint_idx == 1) {
|
||||
int i = joint_rot->x + actor->_618.z;
|
||||
joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
i = joint_rot->y + actor->_618.z;
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_idx == 2) {
|
||||
int i;
|
||||
if (actor->_5F0 - 0.001f > actor->_5E8) {
|
||||
joint1->y += (int)((actor->_5F0 - actor->_5E8) * 2.0f * joint1->y);
|
||||
joint_rot->y += (int)((actor->_5F0 - actor->_5E8) * 2.0f * joint_rot->y);
|
||||
}
|
||||
i = joint1->y - actor->_618.z * 3;
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80));
|
||||
i = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
joint1->z += (int)(actor->_618.x * (-1.3f + 0.1f * GETREG(TAKREG, 0x4e)));
|
||||
i = joint_rot->y - actor->_618.z * 3;
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80));
|
||||
i = joint_rot->x - (actor->_618.z >> 1);
|
||||
joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
joint_rot->z += (int)(actor->_618.x * (-1.3f + 0.1f * GETREG(TAKREG, 0x4e)));
|
||||
Matrix_scale(GETREG(TAKREG, 0x4b) * 0.01f * cos_s(actor->_63A) + 0.05f + 1.0f,
|
||||
GETREG(TAKREG, 0x4c) * 0.01f * sin_s(actor->_63A) + 0.1f + 1.0f,
|
||||
GETREG(TAKREG, 0x4d) * 0.01f * cos_s(actor->_63A) + 0.1f + 1.0f, 1);
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_koi_tail_anim_set(MUSEUM_FISH_PRIVATE_DATA* actor, s32 r4) {
|
||||
f32 temp;
|
||||
f32 temp2;
|
||||
@@ -162,7 +164,6 @@ void mfish_koi_normal_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
|
||||
void mfish_koi_normal_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
s16 temp;
|
||||
//! NOTE: wrong float somewhere in this file, just based on objdiffs colors changing
|
||||
if (ABS(actor->_632) > DEG2SHORT_ANGLE(20) || actor->_640 > 0) {
|
||||
add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.0035f + 0.03f, 0.35f,
|
||||
0.05f);
|
||||
@@ -319,8 +320,6 @@ void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 atany;
|
||||
f32 dist;
|
||||
|
||||
// mfish_get_player_angle(actor, gamex, &atanx, &atany, &dist);
|
||||
|
||||
if (ABS(actor->_632) > DEG2SHORT_ANGLE(20) || actor->_640 > 0) {
|
||||
add_calc2(&actor->_5EC, ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2)) * 0.0035f + 0.04f, 0.4f,
|
||||
0.1f);
|
||||
@@ -343,10 +342,8 @@ void mfish_koi_peck_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_5F0 = 0.05f;
|
||||
actor->activityFrameCount =
|
||||
actor->init_data.activeFramesMin + (s16)RANDOM_F(actor->init_data.activeFramesRange);
|
||||
// actor->_626 >>= 3;
|
||||
}
|
||||
actor->savedActivityFrameCount = actor->activityFrameCount;
|
||||
// actor->_5F0 = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -389,7 +386,6 @@ void mfish_koi_base_FishMove(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
}
|
||||
|
||||
void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
if (actor->_5F8 > actor->init_data._08 * 20.f) {
|
||||
actor->_5F8 = 0.0f;
|
||||
actor->activityFrameCount = 0;
|
||||
@@ -423,7 +419,6 @@ void mfish_koi_base_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
}
|
||||
|
||||
// actor->_5AC.y = 0.0f;
|
||||
actor->_638 += DEG2SHORT_ANGLE(10);
|
||||
actor->currentProcess(actor, gamex);
|
||||
if (ABS(actor->_618.z) < ABS(actor->_622) && ABS(actor->_622) > DEG2SHORT_ANGLE(2)) {
|
||||
@@ -472,23 +467,23 @@ void mfish_koi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
}
|
||||
}
|
||||
|
||||
BOOL mfish_koi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_koi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 0) {
|
||||
trans->x *= actor->_5AC.z;
|
||||
trans->y *= actor->_5AC.z;
|
||||
trans->z = (trans->z - 1400.0f) * actor->_5AC.z + 1400.0f;
|
||||
} else if (joint_num == 1) {
|
||||
joint1->y = joint1->y * actor->_5AC.z;
|
||||
} else if (joint_num == 2) {
|
||||
if (joint_idx == 0) {
|
||||
joint_pos->x *= actor->_5AC.z;
|
||||
joint_pos->y *= actor->_5AC.z;
|
||||
joint_pos->z = (joint_pos->z - 1400.0f) * actor->_5AC.z + 1400.0f;
|
||||
} else if (joint_idx == 1) {
|
||||
joint_rot->y *= actor->_5AC.z;
|
||||
} else if (joint_idx == 2) {
|
||||
int i;
|
||||
|
||||
i = joint1->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.1f + 2.0f));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80));
|
||||
i = joint_rot->y - (int)(actor->_618.z * (GETREG(TAKREG, 0x47) * 0.1f + 2.0f));
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-80), DEG2SHORT_ANGLE(80));
|
||||
|
||||
i = joint1->x - (actor->_618.z >> 3);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25));
|
||||
i = joint_rot->x - (actor->_618.z >> 3);
|
||||
joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-25), DEG2SHORT_ANGLE(25));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_kurage_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
@@ -102,7 +103,6 @@ void mfish_kurage_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
void mfish_kurage_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
f32 v;
|
||||
xyz_t p;
|
||||
f32 t;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_medaka_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
@@ -137,19 +138,19 @@ void mfish_medaka_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x));
|
||||
}
|
||||
|
||||
BOOL mfish_medaka_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_medaka_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int i = joint1->x + actor->_618.z;
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
i = joint1->y + actor->_618.z;
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_num == 2) {
|
||||
int i = joint1->y - (actor->_618.z * 3);
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60));
|
||||
i = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
if (joint_idx == 1) {
|
||||
int i = joint_rot->x + actor->_618.z;
|
||||
joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
i = joint_rot->y + actor->_618.z;
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_idx == 2) {
|
||||
int i = joint_rot->y - (actor->_618.z * 3);
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60));
|
||||
i = joint_rot->x - (actor->_618.z >> 1);
|
||||
joint_rot->x = MY_CLAMP(i, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
@@ -16,7 +17,6 @@ void mfish_namazu_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_622 = actor->_60C.y;
|
||||
actor->position.z += 40.0f;
|
||||
actor->_624 = 10;
|
||||
// maybe s_xyz? but because we're not assigning a ZeroSVec, i'm thinking not?
|
||||
actor->_640 = 0;
|
||||
actor->_642 = 0;
|
||||
actor->_644 = 0;
|
||||
@@ -101,7 +101,7 @@ void mfish_namazu_dummy_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
actor->currentProcess = mfish_namazu_dummy_process;
|
||||
}
|
||||
|
||||
void mfish_namazu_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
void mfish_namazu_dummy_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_5E8 < 0.5f) {
|
||||
add_calc_short_angle2(&actor->_612.y, actor->_634, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.125f));
|
||||
@@ -143,7 +143,7 @@ void mfish_namazu_turn_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
actor->currentProcess = mfish_namazu_turn_process;
|
||||
}
|
||||
|
||||
void mfish_namazu_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
void mfish_namazu_turn_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.05f), 0.0625f);
|
||||
add_calc2(&actor->_5F0, 0.05f, CALC_EASE(0.1f), 0.0025f);
|
||||
add_calc_short_angle2(&actor->_632, 0, CALC_EASE2(0.29f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.125f));
|
||||
@@ -184,7 +184,7 @@ void mfish_namazu_ground_sweep_process_init(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
actor->currentProcess = mfish_namazu_ground_sweep_process;
|
||||
}
|
||||
|
||||
void mfish_namazu_ground_sweep_process(MUSEUM_FISH_PRIVATE_DATA* actor) {
|
||||
void mfish_namazu_ground_sweep_process(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_632 > DEG2SHORT_ANGLE(20)) {
|
||||
add_calc2(&actor->_5E8, actor->_5F0, CALC_EASE(0.075f),
|
||||
(0.4f + 0.02f * ((actor->_632 - DEG2SHORT_ANGLE(20)) / DEG2SHORT_ANGLE(2))) * 0.5f);
|
||||
@@ -282,25 +282,25 @@ void mfish_namazu_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_namazu_body_wind_anime_play(actor, gamex);
|
||||
}
|
||||
|
||||
BOOL mfish_namazu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_namazu_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
int s;
|
||||
if (joint_num == 0) {
|
||||
trans->y = -(actor->_5AC.y * MIN(sin_s(actor->_640), 0.5f));
|
||||
} else if (joint_num == 1) {
|
||||
s = joint1->z + actor->_640;
|
||||
joint1->z = MY_CLAMP(s, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
s = joint1->x + (actor->_618.z >> 2);
|
||||
joint1->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
if (joint_idx == 0) {
|
||||
joint_pos->y = -(actor->_5AC.y * MIN(sin_s(actor->_640), 0.5f));
|
||||
} else if (joint_idx == 1) {
|
||||
s = joint_rot->z + actor->_640;
|
||||
joint_rot->z = MY_CLAMP(s, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
s = joint_rot->x + (actor->_618.z >> 2);
|
||||
joint_rot->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
Matrix_scale(1.0f, 1.0f + 0.01f * sin_s(actor->_63A + actor->_63C), 1.0f + 0.01f * sin_s(actor->_63A), 1);
|
||||
} else if (joint_num == 2) {
|
||||
s = joint1->y - (actor->_618.z << 1);
|
||||
joint1->y = MY_CLAMP(s, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60));
|
||||
s = joint1->x - (actor->_618.z >> 2);
|
||||
joint1->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
s = joint1->z - (s16)(actor->_640 * (0.6f + GETREG(TAKREG, 0x4E) * 0.01f));
|
||||
joint1->z = MY_CLAMP(s, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_idx == 2) {
|
||||
s = joint_rot->y - (actor->_618.z << 1);
|
||||
joint_rot->y = MY_CLAMP(s, DEG2SHORT_ANGLE(-60), DEG2SHORT_ANGLE(60));
|
||||
s = joint_rot->x - (actor->_618.z >> 2);
|
||||
joint_rot->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-20), DEG2SHORT_ANGLE(20));
|
||||
s = joint_rot->z - (s16)(actor->_640 * (0.6f + GETREG(TAKREG, 0x4E) * 0.01f));
|
||||
joint_rot->z = MY_CLAMP(s, DEG2SHORT_ANGLE(-30), DEG2SHORT_ANGLE(30));
|
||||
Matrix_scale(1.0f, 1.0f + 0.005f * sin_s(actor->_63A + DEG2SHORT_ANGLE(270)),
|
||||
1.0f + 0.005f * sin_s(actor->_63A + DEG2SHORT_ANGLE(90)), 1);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_seafish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
s16 s = qrand();
|
||||
@@ -67,11 +68,9 @@ void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
|
||||
if (actor->_598->position.z < actor->position.z) {
|
||||
// swap here
|
||||
o_5a0_z += sum_i_8;
|
||||
add_calc2(&actor->position.z, o_5a0_z, 0.1f, abs_diff_sum * 0.1f);
|
||||
} else {
|
||||
// swap here
|
||||
o_5a0_z -= sum_i_8;
|
||||
add_calc2(&actor->position.z, o_5a0_z, 0.1f, abs_diff_sum * 0.1f);
|
||||
}
|
||||
@@ -123,7 +122,6 @@ void mfish_seafish_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
DEG2SHORT_ANGLE(0));
|
||||
}
|
||||
} else if (actor->activityFrameCount < 0) {
|
||||
// r in wrong register here
|
||||
r = RANDOM_F(1.0f);
|
||||
actor->_612.y = actor->_60C.y;
|
||||
if ((actor->_608 - actor->_604) * cos_s(actor->_60C.y) < 0.0f) {
|
||||
@@ -179,7 +177,6 @@ void mfish_seafish_turn(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game) {
|
||||
}
|
||||
|
||||
void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
xyz_t p;
|
||||
actor->currentProcess(actor, gamex);
|
||||
actor->_618.x += DEG2SHORT_ANGLE(actor->_5E8 * RANDOM_F(3.0f));
|
||||
@@ -216,17 +213,17 @@ void mfish_seafish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->activityFrameCount--;
|
||||
}
|
||||
|
||||
BOOL mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_seafish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int s = joint1->x + (int)(actor->_618.z * (GETREG(TAKREG, 0x37) * 0.01f + 0.5f));
|
||||
joint1->x = MIN(MAX(s, DEG2SHORT_ANGLE(-15)), DEG2SHORT_ANGLE(15));
|
||||
if (joint_idx == 1) {
|
||||
int s = joint_rot->x + (int)(actor->_618.z * (GETREG(TAKREG, 0x37) * 0.01f + 0.5f));
|
||||
joint_rot->x = MIN(MAX(s, DEG2SHORT_ANGLE(-15)), DEG2SHORT_ANGLE(15));
|
||||
Matrix_scale(1.0f, (GETREG(TAKREG, 0x36) * 0.001f + 0.035f) * sin_s(actor->_63A + actor->_63C) + 1.0f,
|
||||
(GETREG(TAKREG, 0x36) * 0.001f + 0.035f) * sin_s(actor->_63A) + 1.0f, 1);
|
||||
} else if (joint_num == 2) {
|
||||
int v = joint1->y - (actor->_618.z << 1);
|
||||
joint1->y = MIN(MAX(v, DEG2SHORT_ANGLE(-80)), DEG2SHORT_ANGLE(80));
|
||||
} else if (joint_idx == 2) {
|
||||
int v = joint_rot->y - (actor->_618.z << 1);
|
||||
joint_rot->y = MIN(MAX(v, DEG2SHORT_ANGLE(-80)), DEG2SHORT_ANGLE(80));
|
||||
Matrix_scale(1.0f, sin_s(actor->_63A + DEG2SHORT_ANGLE(270)) * 0.07f + 1.0f,
|
||||
sin_s(actor->_63A + DEG2SHORT_ANGLE(90)) * 0.07f + 1.0f, 1);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_small_fish_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
@@ -162,19 +163,19 @@ void mfish_small_fish_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->_612.x = MAX((s16)-actor->init_data._30, MIN(actor->init_data._30, actor->_612.x));
|
||||
}
|
||||
|
||||
BOOL mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_sfish_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int s = joint1->x + actor->_618.z;
|
||||
joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
s = joint1->y + actor->_618.z;
|
||||
joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_num == 2) {
|
||||
int s = joint1->y - actor->_618.z * 3;
|
||||
joint1->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(60), DEG2SHORT_ANGLE(60));
|
||||
s = joint1->x - (actor->_618.z >> 1);
|
||||
joint1->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
if (joint_idx == 1) {
|
||||
int s = joint_rot->x + actor->_618.z;
|
||||
joint_rot->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
s = joint_rot->y + actor->_618.z;
|
||||
joint_rot->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
} else if (joint_idx == 2) {
|
||||
int s = joint_rot->y - actor->_618.z * 3;
|
||||
joint_rot->y = MY_CLAMP(s, -DEG2SHORT_ANGLE(60), DEG2SHORT_ANGLE(60));
|
||||
s = joint_rot->x - (actor->_618.z >> 1);
|
||||
joint_rot->x = MY_CLAMP(s, -DEG2SHORT_ANGLE(30), DEG2SHORT_ANGLE(30));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_tai_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
s16 s = qrand();
|
||||
@@ -245,15 +246,15 @@ void mfish_tai_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
actor->activityFrameCount--;
|
||||
}
|
||||
|
||||
BOOL mfish_tai_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_tai_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
int s = (joint1->x + actor->_618.z) >> 3;
|
||||
joint1->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-15), DEG2SHORT_ANGLE(15));
|
||||
} else if (joint_num == 2) {
|
||||
int s = joint1->y - (int)(actor->_618.z * (0.01f * GETREG(TAKREG, 0x4b) + 1.5f));
|
||||
joint1->y = MY_CLAMP(s, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
if (joint_idx == 1) {
|
||||
int s = (joint_rot->x + actor->_618.z) >> 3;
|
||||
joint_rot->x = MY_CLAMP(s, DEG2SHORT_ANGLE(-15), DEG2SHORT_ANGLE(15));
|
||||
} else if (joint_idx == 2) {
|
||||
int s = joint_rot->y - (int)(actor->_618.z * (0.01f * GETREG(TAKREG, 0x4b) + 1.5f));
|
||||
joint_rot->y = MY_CLAMP(s, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,54 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
xyz_t unagi_rail_pos[25] = { { 228.0f, 57.0f, 192.0f }, { 231.0f, 57.0f, 203.0f }, { 237.0f, 57.0f, 215.0f },
|
||||
{ 245.0f, 58.0f, 225.0f }, { 252.0f, 59.0f, 233.0f }, { 254.0f, 60.0f, 245.0f },
|
||||
{ 248.0f, 60.0f, 255.0f }, { 238.0f, 60.0f, 256.0f }, { 231.0f, 60.0f, 247.0f },
|
||||
{ 222.0f, 60.0f, 240.0f }, { 212.0f, 60.0f, 243.0f }, { 203.0f, 60.0f, 249.0f },
|
||||
{ 196.0f, 60.0f, 248.0f }, { 191.0f, 60.0f, 241.0f }, { 191.0f, 60.0f, 234.0f },
|
||||
{ 187.0f, 60.0f, 223.0f }, { 183.0f, 60.0f, 212.0f }, { 181.0f, 60.0f, 203.0f },
|
||||
{ 182.0f, 57.0f, 191.0f }, { 187.0f, 56.0f, 183.0f }, { 193.0f, 56.0f, 176.0f },
|
||||
{ 201.0f, 56.0f, 172.0f }, { 209.0f, 56.0f, 173.0f }, { 216.0f, 56.0f, 176.0f },
|
||||
{ 221.0f, 56.0f, 182.0f } };
|
||||
|
||||
xyz_t unagi_rail_pos2[20] = { { 228.0f, 57.0f, 192.0f }, { 236.0f, 57.0f, 201.0f }, { 244.0f, 57.0f, 204.0f },
|
||||
{ 250.0f, 58.0f, 213.0f }, { 254.0f, 59.0f, 225.0f }, { 250.0f, 60.0f, 238.0f },
|
||||
{ 243.0f, 60.0f, 242.0f }, { 235.0f, 60.0f, 238.0f }, { 226.0f, 60.0f, 233.0f },
|
||||
{ 215.0f, 60.0f, 229.0f }, { 205.0f, 60.0f, 228.0f }, { 198.0f, 60.0f, 229.0f },
|
||||
{ 191.0f, 60.0f, 227.0f }, { 186.0f, 60.0f, 222.0f }, { 181.0f, 60.0f, 216.0f },
|
||||
{ 181.0f, 60.0f, 207.0f }, { 184.0f, 60.0f, 196.0f }, { 191.0f, 60.0f, 186.0f },
|
||||
{ 201.0f, 57.0f, 177.0f }, { 213.0f, 56.0f, 178.0f } };
|
||||
|
||||
xyz_t unagi_rail_pos3[25] = { { 228.0f, 57.0f, 192.0f }, { 231.0f, 57.0f, 203.0f }, { 229.0f, 57.0f, 213.0f },
|
||||
{ 222.0f, 58.0f, 225.0f }, { 212.0f, 59.0f, 226.0f }, { 204.0f, 60.0f, 227.0f },
|
||||
{ 197.0f, 60.0f, 230.0f }, { 193.0f, 60.0f, 236.0f }, { 195.0f, 60.0f, 246.0f },
|
||||
{ 201.0f, 60.0f, 253.0f }, { 212.0f, 60.0f, 256.0f }, { 222.0f, 60.0f, 255.0f },
|
||||
{ 237.0f, 60.0f, 254.0f }, { 243.0f, 60.0f, 246.0f }, { 240.0f, 60.0f, 232.0f },
|
||||
{ 232.0f, 60.0f, 227.0f }, { 223.0f, 60.0f, 225.0f }, { 209.0f, 60.0f, 225.0f },
|
||||
{ 198.0f, 60.0f, 220.0f }, { 190.0f, 60.0f, 209.0f }, { 187.0f, 60.0f, 196.0f },
|
||||
{ 191.0f, 60.0f, 184.0f }, { 197.0f, 60.0f, 178.0f }, { 207.0f, 59.0f, 173.0f },
|
||||
{ 221.0f, 57.0f, 180.0f } };
|
||||
|
||||
xyz_t unagi_normal_to_reverse_rail_pos[12] = {
|
||||
{ 228.0f, 57.0f, 192.0f }, { 236.0f, 57.0f, 201.0f }, { 244.0f, 57.0f, 204.0f }, { 250.0f, 58.0f, 213.0f },
|
||||
{ 254.0f, 59.0f, 225.0f }, { 250.0f, 60.0f, 238.0f }, { 243.0f, 60.0f, 242.0f }, { 235.0f, 60.0f, 236.0f },
|
||||
{ 226.0f, 60.0f, 228.0f }, { 225.0f, 60.0f, 219.0f }, { 228.0f, 58.0f, 208.0f }, { 228.0f, 57.0f, 192.0f }
|
||||
};
|
||||
|
||||
xyz_t unagi_reverse_to_normal_rail_pos[19] = {
|
||||
{ 228.0f, 57.0f, 192.0f }, { 218.0f, 56.0f, 178.0f }, { 204.0f, 57.0f, 176.0f }, { 191.0f, 58.0f, 186.0f },
|
||||
{ 184.0f, 59.0f, 196.0f }, { 189.0f, 60.0f, 208.0f }, { 198.0f, 60.0f, 215.0f }, { 205.0f, 60.0f, 224.0f },
|
||||
{ 204.0f, 60.0f, 235.0f }, { 196.0f, 60.0f, 242.0f }, { 188.0f, 60.0f, 241.0f }, { 183.0f, 60.0f, 233.0f },
|
||||
{ 180.0f, 60.0f, 219.0f }, { 181.0f, 60.0f, 207.0f }, { 184.0f, 60.0f, 196.0f }, { 191.0f, 59.0f, 186.0f },
|
||||
{ 204.0f, 57.0f, 176.0f }, { 218.0f, 56.0f, 178.0f }, { 228.0f, 57.0f, 192.0f }
|
||||
};
|
||||
|
||||
xyz_t* unagi_rail_tbl[3] = { unagi_rail_pos, unagi_rail_pos2, unagi_rail_pos3 };
|
||||
|
||||
int unagi_rail_num_tbl[3] = {
|
||||
ARRAY_LEN(unagi_rail_pos),
|
||||
ARRAY_LEN(unagi_rail_pos2),
|
||||
ARRAY_LEN(unagi_rail_pos3),
|
||||
};
|
||||
|
||||
void mfish_unagi_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
mfish_onefish_ct(actor, gamex);
|
||||
@@ -247,7 +298,6 @@ void mfish_unagi_reverse_to_normal(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex)
|
||||
}
|
||||
|
||||
void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
//! NOTE: wrong floats in this file, based on objdiff
|
||||
xyz_t p1, p2, p3;
|
||||
p1 = ZeroVec;
|
||||
p2 = ZeroVec;
|
||||
@@ -303,35 +353,35 @@ void mfish_unagi_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
Museum_Fish_objchk_pos_set(actor, gamex);
|
||||
}
|
||||
|
||||
BOOL mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_unagi_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 1) {
|
||||
if (joint_idx == 1) {
|
||||
int i = (s16)(actor->_632 * 0.5f * sin_s(actor->_636));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
trans->z += actor->_5F4 * sin_s(actor->_636 + DEG2SHORT_ANGLE(90));
|
||||
} else if (joint_num == 2) {
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
joint_pos->z += actor->_5F4 * sin_s(actor->_636 + DEG2SHORT_ANGLE(90));
|
||||
} else if (joint_idx == 2) {
|
||||
int i;
|
||||
|
||||
i = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3c)) - (int)(actor->_618.z * (1.0f + 0.01f * GETREG(TAKREG, 0x38)));
|
||||
i += (s16)(actor->_632 * 0.75f * sin_s(actor->_636 + DEG2SHORT_ANGLE2(90)));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE2(-90), DEG2SHORT_ANGLE2(90));
|
||||
} else if (joint_num == 3) {
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE2(-90), DEG2SHORT_ANGLE2(90));
|
||||
} else if (joint_idx == 3) {
|
||||
int i;
|
||||
i = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3d)) - (int)(actor->_38._538.x * (1.1f + 0.01f * GETREG(TAKREG, 0x39)));
|
||||
i += (s16)(actor->_632 * sin_s(actor->_636 + DEG2SHORT_ANGLE(180)));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
} else if (joint_num == 4) {
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
} else if (joint_idx == 4) {
|
||||
int i;
|
||||
i = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3e)) - (int)(actor->_38._538.y * (1.2f + 0.01f * GETREG(TAKREG, 0x3a)));
|
||||
i += (s16)(actor->_632 * 0.75f * sin_s(actor->_636 + DEG2SHORT_ANGLE(270)));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
} else if (joint_num == 5) {
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
} else if (joint_idx == 5) {
|
||||
int i;
|
||||
i = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x3f)) - (int)(actor->_38._538.z * (1.3f + 0.01f * GETREG(TAKREG, 0x3b)));
|
||||
i += (s16)(actor->_632 * 0.5f * sin_s(actor->_636 + DEG2SHORT_ANGLE(0)));
|
||||
joint1->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
joint_rot->y = MY_CLAMP(i, DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE(90));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "ac_museum_fish_priv.h"
|
||||
|
||||
void mfish_zarigani_ct(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
YET_SKELETON* skele = &actor->_38;
|
||||
@@ -181,28 +182,28 @@ void mfish_zarigani_mv(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* gamex) {
|
||||
}
|
||||
}
|
||||
|
||||
BOOL mfish_zarigani_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_num, Gfx** joint_m, u8* joint_f,
|
||||
void* arg, s_xyz* joint1, xyz_t* trans) {
|
||||
BOOL mfish_zarigani_before_disp(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape,
|
||||
u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) {
|
||||
MUSEUM_FISH_PRIVATE_DATA* actor = (MUSEUM_FISH_PRIVATE_DATA*)arg;
|
||||
if (joint_num == 2) {
|
||||
joint1->x += (s16)(actor->_60C.x >> 3);
|
||||
} else if (joint_num == 3) {
|
||||
joint1->z += (s16)((joint1->z + DEG2SHORT_ANGLE2(-90.65f) + GETREG(TAKREG, 0x2a)) *
|
||||
(1.5f + GETREG(TAKREG, 0x29) * 0.1f));
|
||||
} else if (joint_num == 5) {
|
||||
joint1->x += (s16)DEG2SHORT_ANGLE2(3.0f * sin_s(actor->_638));
|
||||
joint1->z -= (s16)DEG2SHORT_ANGLE2(5.0f * cos_s(actor->_638));
|
||||
joint1->z += (s16)(actor->_618.z * (0.4f + cos_s(actor->_638) * 0.4f));
|
||||
} else if (joint_num == 7) {
|
||||
joint1->x += (s16)DEG2SHORT_ANGLE2(3.0f * sin_s(actor->_638));
|
||||
joint1->z -= (s16)DEG2SHORT_ANGLE2(5.0f * cos_s(actor->_638));
|
||||
joint1->z += (s16)(actor->_618.z * (0.4f + cos_s(actor->_638) * 0.4f));
|
||||
} else if (joint_num == 8) {
|
||||
joint1->z >>= 2;
|
||||
if (joint_idx == 2) {
|
||||
joint_rot->x += (s16)(actor->_60C.x >> 3);
|
||||
} else if (joint_idx == 3) {
|
||||
joint_rot->z += (s16)((joint_rot->z + DEG2SHORT_ANGLE2(-90.65f) + GETREG(TAKREG, 0x2a)) *
|
||||
(1.5f + GETREG(TAKREG, 0x29) * 0.1f));
|
||||
} else if (joint_idx == 5) {
|
||||
joint_rot->x += (s16)DEG2SHORT_ANGLE2(3.0f * sin_s(actor->_638));
|
||||
joint_rot->z -= (s16)DEG2SHORT_ANGLE2(5.0f * cos_s(actor->_638));
|
||||
joint_rot->z += (s16)(actor->_618.z * (0.4f + cos_s(actor->_638) * 0.4f));
|
||||
} else if (joint_idx == 7) {
|
||||
joint_rot->x += (s16)DEG2SHORT_ANGLE2(3.0f * sin_s(actor->_638));
|
||||
joint_rot->z -= (s16)DEG2SHORT_ANGLE2(5.0f * cos_s(actor->_638));
|
||||
joint_rot->z += (s16)(actor->_618.z * (0.4f + cos_s(actor->_638) * 0.4f));
|
||||
} else if (joint_idx == 8) {
|
||||
joint_rot->z >>= 2;
|
||||
if (actor->_60C.x < 0) {
|
||||
joint1->z += actor->_60C.x;
|
||||
joint_rot->z += actor->_60C.x;
|
||||
} else {
|
||||
joint1->z += (s16)(actor->_60C.x * (GETREG(TAKREG, 0x20) * 0.1f + 3.0f));
|
||||
joint_rot->z += (s16)(actor->_60C.x * (GETREG(TAKREG, 0x20) * 0.1f + 3.0f));
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
@@ -0,0 +1,881 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
// clang-format off
|
||||
extern Gfx
|
||||
act_m_mu_monshiro1T_model,
|
||||
act_m_mu_monshiro2T_model,
|
||||
act_m_mu_monki1T_model,
|
||||
act_m_mu_monki2T_model,
|
||||
act_m_mu_kiageha1T_model,
|
||||
act_m_mu_kiageha2T_model,
|
||||
act_m_mu_ohmurasaki1T_model,
|
||||
act_m_mu_ohmurasaki2T_model,
|
||||
act_m_mu_minmin1_1T_model,
|
||||
act_m_mu_minmin1_2T_model,
|
||||
act_m_mu_tukutuku1_1T_model,
|
||||
act_m_mu_tukutuku1_2T_model,
|
||||
act_m_mu_higurashi1_1T_model,
|
||||
act_m_mu_higurashi1_2T_model,
|
||||
act_m_mu_abura1_1T_model,
|
||||
act_m_mu_abura1_2T_model,
|
||||
act_m_mu_shiokara1_1T_model,
|
||||
act_m_mu_shiokara1_2T_model,
|
||||
act_m_mu_shiokara2_2T_model,
|
||||
act_m_mu_akiakane1_1T_model,
|
||||
act_m_mu_akiakane1_2T_model,
|
||||
act_m_mu_akiakane2_2T_model,
|
||||
act_m_mu_ginyanma1_1T_model,
|
||||
act_m_mu_ginyanma1_2T_model,
|
||||
act_m_mu_ginyanma2_2T_model,
|
||||
act_m_mu_oniyanma1_1T_model,
|
||||
act_m_mu_oniyanma1_2T_model,
|
||||
act_m_mu_oniyanma2_2T_model,
|
||||
act_m_mu_syouryou1T_model,
|
||||
act_m_mu_syouryou2_2T_model,
|
||||
act_m_mu_tonosama1T_model,
|
||||
act_m_mu_tonosama2_2T_model,
|
||||
act_m_mu_koorogi1T_model,
|
||||
act_m_mu_koorogi2_2T_model,
|
||||
act_m_mu_kirigirisu1T_model,
|
||||
act_m_mu_kirigirisu2_2T_model,
|
||||
act_m_mu_suzumushi1T_model,
|
||||
act_m_mu_suzumushi2_2T_model,
|
||||
act_m_mu_matumushi1T_model,
|
||||
act_m_mu_matumushi2_2T_model,
|
||||
act_m_mu_tentou1T_model,
|
||||
act_m_mu_tentou2T_model,
|
||||
act_m_mu_nanahoshi1T_model,
|
||||
act_m_mu_nanahoshi2T_model,
|
||||
act_m_mu_kamakiri1T_model,
|
||||
act_m_mu_kamakiri2_2T_model,
|
||||
act_m_mu_maimaiT_model,
|
||||
act_m_mu_hachi1_1T_model,
|
||||
act_m_mu_hachi1_2T_model,
|
||||
act_m_mu_hachi2_2T_model,
|
||||
act_m_mu_kanabun1T_model,
|
||||
act_m_mu_kabuto1T_model,
|
||||
act_m_mu_hirata1T_model,
|
||||
act_m_mu_tamamushi1T_model,
|
||||
act_m_mu_gomadara1T_model,
|
||||
act_m_mu_nokogiri1T_model,
|
||||
act_m_mu_miyama1T_model,
|
||||
act_m_mu_okuwa1T_model,
|
||||
act_m_mu_amenbo1T_model,
|
||||
act_m_mu_amenbo2T_model,
|
||||
act_m_mu_mino1_1T_model,
|
||||
act_m_mu_mino1_2T_model,
|
||||
act_m_mu_mino2T_model,
|
||||
act_m_mu_kumo1_1T_mode,
|
||||
act_m_mu_kumo1_2T_mode,
|
||||
act_m_mu_kumo2T_model,
|
||||
act_m_mu_kumo1_1T_model,
|
||||
act_m_mu_kumo1_2T_model,
|
||||
act_m_mu_danna1T_model,
|
||||
act_m_mu_danna2T_model,
|
||||
act_m_mu_genji2_a_model,
|
||||
act_m_mu_genji2_b_model,
|
||||
act_m_mu_genji2_c_model,
|
||||
act_m_mu_genji2_d_model,
|
||||
act_m_mu_dango1T_model,
|
||||
act_m_mu_dango2T_model,
|
||||
act_m_mu_ariT_model,
|
||||
act_m_mu_keraT_model,
|
||||
act_m_mu_ka1T_model,
|
||||
act_m_mu_ka2_1T_model,
|
||||
act_m_mu_ka2_2T_model;
|
||||
|
||||
ACTOR_PROFILE Museum_Insect_Profile = {
|
||||
mAc_PROFILE_MUSEUM_INSECT,
|
||||
ACTOR_PART_BG,
|
||||
ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES | ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED,
|
||||
EMPTY_NO,
|
||||
ACTOR_OBJ_BANK_408,
|
||||
sizeof(MUSEUM_INSECT_ACTOR),
|
||||
Museum_Insect_Actor_ct,
|
||||
Museum_Insect_Actor_dt,
|
||||
Museum_Insect_Actor_move,
|
||||
Museum_Insect_Actor_draw,
|
||||
NULL,
|
||||
};
|
||||
|
||||
rgba_t window_color = {
|
||||
0xff, 0xff, 0xcd, 0xff
|
||||
};
|
||||
|
||||
Gfx *m_monshiro_disp_tbl[] = {
|
||||
&act_m_mu_monshiro1T_model,
|
||||
&act_m_mu_monshiro2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_monki_disp_tbl[] = {
|
||||
&act_m_mu_monki1T_model,
|
||||
&act_m_mu_monki2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_ageha_disp_tbl[] = {
|
||||
&act_m_mu_kiageha1T_model,
|
||||
&act_m_mu_kiageha2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_ohmurasaki_disp_tbl[] = {
|
||||
&act_m_mu_ohmurasaki1T_model,
|
||||
&act_m_mu_ohmurasaki2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_minmin_disp_tbl[] = {
|
||||
&act_m_mu_minmin1_1T_model,
|
||||
&act_m_mu_minmin1_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_tukutuku_disp_tbl[] = {
|
||||
&act_m_mu_tukutuku1_1T_model,
|
||||
&act_m_mu_tukutuku1_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_higurashi_disp_tbl[] = {
|
||||
&act_m_mu_higurashi1_1T_model,
|
||||
&act_m_mu_higurashi1_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_abura_disp_tbl[] = {
|
||||
&act_m_mu_abura1_1T_model,
|
||||
&act_m_mu_abura1_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_shiokara_disp_tbl[] = {
|
||||
&act_m_mu_shiokara1_1T_model,
|
||||
&act_m_mu_shiokara1_2T_model,
|
||||
&act_m_mu_shiokara2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_akiakane_disp_tbl[] = {
|
||||
&act_m_mu_akiakane1_1T_model,
|
||||
&act_m_mu_akiakane1_2T_model,
|
||||
&act_m_mu_akiakane2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_ginyanma_disp_tbl[] = {
|
||||
&act_m_mu_ginyanma1_1T_model,
|
||||
&act_m_mu_ginyanma1_2T_model,
|
||||
&act_m_mu_ginyanma2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_oniyanma_disp_tbl[] = {
|
||||
&act_m_mu_oniyanma1_1T_model,
|
||||
&act_m_mu_oniyanma1_2T_model,
|
||||
&act_m_mu_oniyanma2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_syouryou_disp_tbl[] = {
|
||||
&act_m_mu_syouryou1T_model,
|
||||
&act_m_mu_syouryou2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_tonosama_disp_tbl[] = {
|
||||
&act_m_mu_tonosama1T_model,
|
||||
&act_m_mu_tonosama2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_koorogi_disp_tbl[] = {
|
||||
&act_m_mu_koorogi1T_model,
|
||||
&act_m_mu_koorogi2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_kirigirisu_disp_tbl[] = {
|
||||
&act_m_mu_kirigirisu1T_model,
|
||||
&act_m_mu_kirigirisu2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_suzumushi_disp_tbl[] = {
|
||||
&act_m_mu_suzumushi1T_model,
|
||||
&act_m_mu_suzumushi2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_matumushi_disp_tbl[] = {
|
||||
&act_m_mu_matumushi1T_model,
|
||||
&act_m_mu_matumushi2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_tentou_disp_tbl[] = {
|
||||
&act_m_mu_tentou1T_model,
|
||||
&act_m_mu_tentou2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_nanahoshi_disp_tbl[] = {
|
||||
&act_m_mu_nanahoshi1T_model,
|
||||
&act_m_mu_nanahoshi2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_kamakiri_disp_tbl[] = {
|
||||
&act_m_mu_kamakiri1T_model,
|
||||
&act_m_mu_kamakiri2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_maimai_disp_tbl[] = {
|
||||
&act_m_mu_maimaiT_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_hachi_disp_tbl[] = {
|
||||
&act_m_mu_hachi1_1T_model,
|
||||
&act_m_mu_hachi1_2T_model,
|
||||
&act_m_mu_hachi2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_kanabun_disp_tbl[] = {
|
||||
&act_m_mu_kanabun1T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_kabuto_disp_tbl[] = {
|
||||
&act_m_mu_kabuto1T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_hirata_disp_tbl[] = {
|
||||
&act_m_mu_hirata1T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_tamamushi_disp_tbl[] = {
|
||||
&act_m_mu_tamamushi1T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_gomadara_disp_tbl[] = {
|
||||
&act_m_mu_gomadara1T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_nokogiri_disp_tbl[] = {
|
||||
&act_m_mu_nokogiri1T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_miyama_disp_tbl[] = {
|
||||
&act_m_mu_miyama1T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_okuwa_disp_tbl[] = {
|
||||
&act_m_mu_okuwa1T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_amenbo_disp_tbl[] = {
|
||||
&act_m_mu_amenbo1T_model,
|
||||
&act_m_mu_amenbo2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_mino_disp_tbl[] = {
|
||||
&act_m_mu_mino1_1T_model,
|
||||
&act_m_mu_mino1_2T_model,
|
||||
&act_m_mu_mino2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_kumo_disp_tbl[] = {
|
||||
&act_m_mu_kumo1_1T_model,
|
||||
&act_m_mu_kumo1_2T_model,
|
||||
&act_m_mu_kumo2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_goki_disp_tbl[] = {
|
||||
&act_m_mu_danna1T_model,
|
||||
&act_m_mu_danna2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_genji_disp_tbl[] = {
|
||||
&act_m_mu_genji2_a_model,
|
||||
&act_m_mu_genji2_b_model,
|
||||
&act_m_mu_genji2_c_model,
|
||||
&act_m_mu_genji2_d_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_dango_disp_tbl[] = {
|
||||
&act_m_mu_dango1T_model,
|
||||
&act_m_mu_dango2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_ari_disp_tbl[] = {
|
||||
&act_m_mu_ariT_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_okera_disp_tbl[] = {
|
||||
&act_m_mu_keraT_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx *m_ka_disp_tbl[] = {
|
||||
&act_m_mu_ka1T_model,
|
||||
&act_m_mu_ka2_1T_model,
|
||||
&act_m_mu_ka2_2T_model,
|
||||
NULL
|
||||
};
|
||||
|
||||
Gfx **minsect_mdl[] = {
|
||||
m_monshiro_disp_tbl,
|
||||
m_monki_disp_tbl,
|
||||
m_ageha_disp_tbl,
|
||||
m_ohmurasaki_disp_tbl,
|
||||
m_minmin_disp_tbl,
|
||||
m_tukutuku_disp_tbl,
|
||||
m_higurashi_disp_tbl,
|
||||
m_abura_disp_tbl,
|
||||
m_hachi_disp_tbl,
|
||||
m_shiokara_disp_tbl,
|
||||
m_akiakane_disp_tbl,
|
||||
m_ginyanma_disp_tbl,
|
||||
m_oniyanma_disp_tbl,
|
||||
m_syouryou_disp_tbl,
|
||||
m_tonosama_disp_tbl,
|
||||
m_koorogi_disp_tbl,
|
||||
m_kirigirisu_disp_tbl,
|
||||
m_suzumushi_disp_tbl,
|
||||
m_matumushi_disp_tbl,
|
||||
m_kanabun_disp_tbl,
|
||||
m_kabuto_disp_tbl,
|
||||
m_hirata_disp_tbl,
|
||||
m_tamamushi_disp_tbl,
|
||||
m_gomadara_disp_tbl,
|
||||
m_tentou_disp_tbl,
|
||||
m_nanahoshi_disp_tbl,
|
||||
m_kamakiri_disp_tbl,
|
||||
m_genji_disp_tbl,
|
||||
m_goki_disp_tbl,
|
||||
m_nokogiri_disp_tbl,
|
||||
m_miyama_disp_tbl,
|
||||
m_okuwa_disp_tbl,
|
||||
m_maimai_disp_tbl,
|
||||
m_okera_disp_tbl,
|
||||
m_amenbo_disp_tbl,
|
||||
m_mino_disp_tbl,
|
||||
m_dango_disp_tbl,
|
||||
m_kumo_disp_tbl,
|
||||
m_ari_disp_tbl,
|
||||
m_ka_disp_tbl
|
||||
};
|
||||
|
||||
PRIV_INSECT_PROCESS minsect_ct[] = {
|
||||
minsect_chou_ct,
|
||||
minsect_chou_ct,
|
||||
minsect_chou_ct,
|
||||
minsect_chou_ct,
|
||||
minsect_semi_ct,
|
||||
minsect_semi_ct,
|
||||
minsect_semi_ct,
|
||||
minsect_semi_ct,
|
||||
minsect_hachi_ct,
|
||||
minsect_tonbo_ct,
|
||||
minsect_tonbo_ct,
|
||||
minsect_tonbo_ct,
|
||||
minsect_tonbo_ct,
|
||||
minsect_batta_ct,
|
||||
minsect_batta_ct,
|
||||
minsect_batta_ct,
|
||||
minsect_batta_ct,
|
||||
minsect_batta_ct,
|
||||
minsect_batta_ct,
|
||||
minsect_kabuto_ct,
|
||||
minsect_kabuto_ct,
|
||||
minsect_kuwagata_ct,
|
||||
minsect_kabuto_ct,
|
||||
minsect_kabuto_ct,
|
||||
minsect_tentou_ct,
|
||||
minsect_tentou_ct,
|
||||
minsect_tentou_ct,
|
||||
minsect_genji_ct,
|
||||
minsect_goki_ct,
|
||||
minsect_kuwagata_ct,
|
||||
minsect_kuwagata_ct,
|
||||
minsect_kuwagata_ct,
|
||||
minsect_tentou_ct,
|
||||
minsect_okera_ct,
|
||||
minsect_amenbo_ct,
|
||||
minsect_mino_ct,
|
||||
minsect_dango_ct,
|
||||
minsect_kumo_ct,
|
||||
minsect_ari_ct,
|
||||
minsect_ka_ct
|
||||
};
|
||||
|
||||
PRIV_INSECT_PROCESS minsect_mv[] = {
|
||||
minsect_chou_mv,
|
||||
minsect_chou_mv,
|
||||
minsect_chou_mv,
|
||||
minsect_chou_mv,
|
||||
minsect_semi_mv,
|
||||
minsect_semi_mv,
|
||||
minsect_semi_mv,
|
||||
minsect_semi_mv,
|
||||
minsect_hachi_mv,
|
||||
minsect_tonbo_mv,
|
||||
minsect_tonbo_mv,
|
||||
minsect_tonbo_mv,
|
||||
minsect_tonbo_mv,
|
||||
minsect_batta_mv,
|
||||
minsect_batta_mv,
|
||||
minsect_batta_mv,
|
||||
minsect_batta_mv,
|
||||
minsect_batta_mv,
|
||||
minsect_batta_mv,
|
||||
minsect_kabuto_mv,
|
||||
minsect_kabuto_mv,
|
||||
minsect_kuwagata_mv,
|
||||
minsect_kabuto_mv,
|
||||
minsect_kabuto_mv,
|
||||
minsect_tentou_mv,
|
||||
minsect_tentou_mv,
|
||||
minsect_tentou_mv,
|
||||
minsect_genji_mv,
|
||||
minsect_goki_mv,
|
||||
minsect_kuwagata_mv,
|
||||
minsect_kuwagata_mv,
|
||||
minsect_kuwagata_mv,
|
||||
minsect_tentou_mv,
|
||||
minsect_okera_mv,
|
||||
minsect_amenbo_mv,
|
||||
minsect_mino_mv,
|
||||
minsect_dango_mv,
|
||||
minsect_kumo_mv,
|
||||
minsect_ari_mv,
|
||||
minsect_ka_mv
|
||||
};
|
||||
|
||||
PRIV_INSECT_PROCESS minsect_dw[] = {
|
||||
minsect_chou_dw,
|
||||
minsect_chou_dw,
|
||||
minsect_chou_dw,
|
||||
minsect_chou_dw,
|
||||
minsect_semi_dw,
|
||||
minsect_semi_dw,
|
||||
minsect_semi_dw,
|
||||
minsect_semi_dw,
|
||||
minsect_hachi_dw,
|
||||
minsect_tonbo_dw,
|
||||
minsect_tonbo_dw,
|
||||
minsect_tonbo_dw,
|
||||
minsect_tonbo_dw,
|
||||
minsect_batta_dw,
|
||||
minsect_batta_dw,
|
||||
minsect_batta_dw,
|
||||
minsect_batta_dw,
|
||||
minsect_batta_dw,
|
||||
minsect_batta_dw,
|
||||
minsect_kabuto_dw,
|
||||
minsect_kabuto_dw,
|
||||
minsect_kuwagata_dw,
|
||||
minsect_kabuto_dw,
|
||||
minsect_kabuto_dw,
|
||||
minsect_tentou_dw,
|
||||
minsect_tentou_dw,
|
||||
minsect_tentou_dw,
|
||||
minsect_genji_dw,
|
||||
minsect_goki_dw,
|
||||
minsect_kuwagata_dw,
|
||||
minsect_kuwagata_dw,
|
||||
minsect_kuwagata_dw,
|
||||
minsect_tentou_dw,
|
||||
minsect_okera_dw,
|
||||
minsect_amenbo_dw,
|
||||
minsect_mino_dw,
|
||||
minsect_dango_dw,
|
||||
minsect_kumo_dw,
|
||||
minsect_ari_dw,
|
||||
minsect_ka_dw
|
||||
};
|
||||
|
||||
f32 minsect_shadow_scale_tbl[] = {
|
||||
1.0f,
|
||||
1.0f,
|
||||
1.5f,
|
||||
1.5f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
1.0f,
|
||||
1.0f,
|
||||
1.0f,
|
||||
1.5f,
|
||||
1.5f,
|
||||
1.8f,
|
||||
1.0f,
|
||||
1.5f,
|
||||
1.0f,
|
||||
1.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
1.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
1.0f,
|
||||
0.0f,
|
||||
1.0f,
|
||||
0.6f,
|
||||
0.7f,
|
||||
0.0f,
|
||||
0.0f
|
||||
};
|
||||
|
||||
int active_time_tbl[] = {
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 4, 0, 0),
|
||||
mTM_TIME2SEC( 4, 0, 0),
|
||||
mTM_TIME2SEC( 4, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC(16, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC(16, 0, 0),
|
||||
mTM_TIME2SEC(16, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC(19, 0, 0),
|
||||
mTM_TIME2SEC(19, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC(19, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC(19, 0, 0),
|
||||
mTM_TIME2SEC(19, 0, 0),
|
||||
mTM_TIME2SEC(19, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0)
|
||||
};
|
||||
|
||||
int relax_time_tbl[] = {
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC(16, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC(16, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(17, 0, 0),
|
||||
mTM_TIME2SEC(4, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 8, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC(19, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0),
|
||||
mTM_TIME2SEC( 0, 0, 0)
|
||||
};
|
||||
|
||||
xyz_t flower_pos[8] = {
|
||||
{ 147.0f, 66.f, 169.f },
|
||||
{ 238.0f, 66.f, 201.f },
|
||||
{ 264.0f, 66.f, 164.f },
|
||||
{ 165.0f, 66.f, 219.f },
|
||||
{ 181.0f, 66.f, 235.f },
|
||||
{ 199.0f, 66.f, 188.f },
|
||||
{ 327.5f, 66.f, 154.f },
|
||||
{ 410.0f, 66.f, 190.f }
|
||||
};
|
||||
|
||||
xyz_t ohmurasaki_tree_pos = {
|
||||
360.f, 85.f, 265.f
|
||||
};
|
||||
|
||||
xyz_t tree_pos[8] = {
|
||||
{ 92.f, 0.f, -15.f },
|
||||
{ 168.f, 0.f, 5.f },
|
||||
{ 244.f, 0.f, -15.f },
|
||||
{ 316.f, 0.f, 5.f },
|
||||
{ 392.f, 0.f, -15.f },
|
||||
{ 468.f, 0.f, 5.f },
|
||||
{ 360.f, 0.f, 245.f },
|
||||
{ 165.f, 0.f, 485.f }
|
||||
};
|
||||
|
||||
xyz_t rock_pos[] = {
|
||||
{ 225.f, 0.f, 388.5f },
|
||||
{ 385.f, 0.f, 485.0f }
|
||||
};
|
||||
|
||||
// rodata
|
||||
const s16 aim_angle_tbl[6] = {
|
||||
DEG2SHORT_ANGLE(45 + 0),
|
||||
DEG2SHORT_ANGLE(45 + 90),
|
||||
DEG2SHORT_ANGLE(45 + 180),
|
||||
DEG2SHORT_ANGLE(45 + 270),
|
||||
DEG2SHORT_ANGLE(45 + 180),
|
||||
DEG2SHORT_ANGLE(45 + 90)
|
||||
};
|
||||
|
||||
const f32 base_high_tbl[4] = {
|
||||
85.f, 95.f, 90.f, 90.f
|
||||
};
|
||||
|
||||
// clang-format on
|
||||
MUSEUM_INSECT_ACTOR* MI_Control_Actor = NULL;
|
||||
|
||||
#include "../src/actor/ac_museum_insect_base.c_inc"
|
||||
|
||||
int Museum_Insect_GetMsgNo(ACTOR* actorx) {
|
||||
static u8 item_name[mIN_ITEM_NAME_LEN];
|
||||
MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx;
|
||||
int insect_caught_by = actor->_2F80[actor->_2F7C].insectInfo;
|
||||
s16 insect_no = ITM_INSECT_START + actor->_2F80[actor->_2F7C].insectName;
|
||||
int msgNo;
|
||||
mIN_copy_name_str(item_name, insect_no);
|
||||
mMsg_Set_item_str_art(mMsg_Get_base_window_p(), mMsg_ITEM_STR0, item_name, ARRAY_COUNT(item_name),
|
||||
mIN_get_item_article(insect_no));
|
||||
|
||||
if (insect_caught_by >= 1 && insect_caught_by <= 4) {
|
||||
mMsg_Set_free_str(mMsg_Get_base_window_p(), mMsg_FREE_STR0,
|
||||
common_data.save.save.private_data[insect_caught_by - 1].player_ID.player_name, 8);
|
||||
}
|
||||
|
||||
if (actor->_2F7C < actor->_2F78 - 1) {
|
||||
if (insect_caught_by >= 1 && insect_caught_by <= 4) {
|
||||
msgNo = 0x2fa2;
|
||||
} else {
|
||||
msgNo = 0x2fa3;
|
||||
}
|
||||
} else {
|
||||
if (insect_caught_by >= 1 && insect_caught_by <= 4) {
|
||||
msgNo = 0x2f9f;
|
||||
} else {
|
||||
msgNo = 0x2fa0;
|
||||
}
|
||||
}
|
||||
|
||||
return msgNo;
|
||||
}
|
||||
|
||||
f32 minsect_scale_tbl[40] = { 0.01f, 0.01f, 0.01f, 0.01f, 0.008f, 0.008f, 0.008f, 0.008f, 0.01f, 0.01f,
|
||||
0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f,
|
||||
0.01f, 0.01f, 0.009f, 0.009f, 0.009f, 0.009f, 0.01f, 0.01f, 0.01f, 0.01f,
|
||||
0.01f, 0.01f, 0.01f, 0.01f, 0.007f, 0.01f, 0.01f, 0.01f, 0.01f, 0.01f };
|
||||
|
||||
int Museum_Insect_Check_Talk_Distance(GAME* game, int i) {
|
||||
static xyz_t kanban_pos[6] = { { 140.f, 40.f, 60.f }, { 420.f, 40.f, 60.f }, { 220.f, 40.f, 300.f },
|
||||
{ 380.f, 40.f, 300.f }, { 180.f, 40.f, 540.f }, { 340.f, 40.f, 540.f } };
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
xyz_t p;
|
||||
PLAYER_ACTOR* player_actor = get_player_actor_withoutCheck(play);
|
||||
s16 newAngle = player_actor->actor_class.world.angle.y + DEG2SHORT_ANGLE(-180);
|
||||
xyz_t_sub(&player_actor->actor_class.world.position, &kanban_pos[i], &p);
|
||||
|
||||
if (ABS(p.x) < 20.f && ABS(p.z) < 20.f && ABS(newAngle) < DEG2SHORT_ANGLE(67.5f)) {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void Museum_Insect_Set_MsgInsectInfo(ACTOR* actorx, int groupNum) {
|
||||
MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx;
|
||||
int i;
|
||||
static int group_max_num[6] = { 7, 6, 6, 6, 7, 7 };
|
||||
static int group_1_insect_name[7] = { 22, 4, 21, 29, 38, 20, 7 };
|
||||
static int group_2_insect_name[6] = { 31, 30, 19, 5, 23, 6 };
|
||||
static int group_3_insect_name[6] = { 0, 25, 26, 1, 27, 2 };
|
||||
static int group_4_insect_name[6] = { 32, 34, 37, 3, 24, 39 };
|
||||
static int group_5_insect_name[7] = { 35, 8, 33, 9, 10, 11, 12 };
|
||||
static int group_6_insect_name[7] = { 15, 16, 18, 17, 13, 14, 36 };
|
||||
static int* group_insect_name[6] = { group_1_insect_name, group_2_insect_name, group_3_insect_name,
|
||||
group_4_insect_name, group_5_insect_name, group_6_insect_name };
|
||||
actor->_2F78 = 0;
|
||||
actor->_2F7C = 0;
|
||||
for (i = 0; i < group_max_num[groupNum]; i++) {
|
||||
s16 insectName = group_insect_name[groupNum][i];
|
||||
s16 s = mMmd_InsectInfo(insectName);
|
||||
if (s) {
|
||||
actor->_2F80[actor->_2F78].insectName = insectName;
|
||||
actor->_2F80[actor->_2F78].insectInfo = s;
|
||||
actor->_2F78++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Museum_Insect_set_talk_info(ACTOR* actorx) {
|
||||
MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx;
|
||||
int x;
|
||||
if (actor->_2F78 > 0) {
|
||||
x = Museum_Insect_GetMsgNo(actorx);
|
||||
actor->_2F7C++;
|
||||
} else {
|
||||
x = 0x2fa1;
|
||||
}
|
||||
mDemo_Set_talk_window_color(&window_color);
|
||||
mDemo_Set_msg_num(x);
|
||||
mDemo_Set_talk_display_name(FALSE);
|
||||
mDemo_Set_ListenAble();
|
||||
mDemo_Set_camera(CAMERA2_PROCESS_NORMAL);
|
||||
mDemo_Set_use_zoom_sound(TRUE);
|
||||
}
|
||||
|
||||
void Museum_Insect_Talk_process(ACTOR* actorx, GAME* game) {
|
||||
MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx;
|
||||
if (mDemo_Check(mDemo_TYPE_SPEAK, actorx)) {
|
||||
s_xyz rot = get_player_actor_withoutCheck((GAME_PLAY*)game)->actor_class.shape_info.rotation;
|
||||
add_calc_short_angle2(&rot.y, DEG2SHORT_ANGLE(-180), 0.3f, DEG2SHORT_ANGLE(22.5), DEG2SHORT_ANGLE(0));
|
||||
get_player_actor_withoutCheck((GAME_PLAY*)gamePT)
|
||||
->Set_force_position_angle_proc(gamePT, NULL, &rot, mPlayer_FORCE_POSITION_ANGLE_ROTY);
|
||||
if (mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p())) {
|
||||
int choice = mChoice_Get_ChoseNum(mChoice_Get_base_window_p());
|
||||
if (choice != -1) {
|
||||
if (choice == 0) {
|
||||
int msgNum = Museum_Insect_GetMsgNo(actorx);
|
||||
actor->_2F7C++;
|
||||
mMsg_Set_continue_msg_num(mMsg_Get_base_window_p(), msgNum);
|
||||
mMsg_Unset_LockContinue(mMsg_Get_base_window_p());
|
||||
} else {
|
||||
mMsg_Set_CancelNormalContinue(mMsg_Get_base_window_p());
|
||||
mMsg_Unset_LockContinue(mMsg_Get_base_window_p());
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (chkTrigger(BUTTON_A) && !mDemo_Get_talk_actor()) {
|
||||
int i;
|
||||
for (i = 0; i < 6; i++) {
|
||||
if (Museum_Insect_Check_Talk_Distance(game, i)) {
|
||||
Museum_Insect_Set_MsgInsectInfo(actorx, i);
|
||||
mDemo_Request(mDemo_TYPE_SPEAK, actorx, Museum_Insect_set_talk_info);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Museum_Insect_Actor_ct(ACTOR* actorx, GAME* game) {
|
||||
int i;
|
||||
MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx;
|
||||
MI_Control_Actor = actor;
|
||||
for (i = 0; i < 5; i++) {
|
||||
actor->_2F9C[i] = 0;
|
||||
}
|
||||
for (i = 0; i < aINS_INSECT_TYPE_NUM; i++) {
|
||||
if (mMmd_InsectInfo(i)) {
|
||||
actor->privInsects[i]._8C |= 1;
|
||||
actor->privInsects[i]._00 = i;
|
||||
actor->privInsects[i]._14 = minsect_scale_tbl[i];
|
||||
set_relax_active_time(&actor->privInsects[i], game);
|
||||
minsect_ct[i](&actor->privInsects[i], game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Museum_Insect_Actor_dt(ACTOR* actor, GAME* game) {
|
||||
return;
|
||||
}
|
||||
|
||||
void Museum_Insect_Actor_move(ACTOR* actorx, GAME* game) {
|
||||
MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx;
|
||||
int i;
|
||||
actor->actor.world.position.y = 4000.f;
|
||||
Museum_Insect_Talk_process(actorx, game);
|
||||
for (i = 0; i < aINS_INSECT_TYPE_NUM; i++) {
|
||||
if (actor->privInsects[i]._8C & 1) {
|
||||
minsect_mv[i](&actor->privInsects[i], game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern EVW_ANIME_DATA obj_museum4_water_evw_anime;
|
||||
extern Gfx obj_museum4_water_modelT[];
|
||||
|
||||
void Museum_Insect_Actor_draw(ACTOR* actorx, GAME* game) {
|
||||
MUSEUM_INSECT_ACTOR* actor = (MUSEUM_INSECT_ACTOR*)actorx;
|
||||
GRAPH* graph;
|
||||
int i;
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
Evw_Anime_Set((GAME_PLAY*)game, &obj_museum4_water_evw_anime);
|
||||
graph = game->graph;
|
||||
Matrix_translate(100.0f, 0.0f, 0.0f, FALSE);
|
||||
Matrix_scale(0.01f, 0.01f, 0.01f, TRUE);
|
||||
OPEN_DISP(graph);
|
||||
gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(NEXT_POLY_XLU_DISP, obj_museum4_water_modelT);
|
||||
CLOSE_DISP(graph);
|
||||
for (i = 0; i < aINS_INSECT_TYPE_NUM; i++) {
|
||||
if (actor->privInsects[i]._8C & 1) {
|
||||
if (GETREG(TAKREG, 0) == i + 1) {
|
||||
actor->privInsects[i]._14 = (GETREG(TAKREG, 1) * 0.0001f) + minsect_scale_tbl[i];
|
||||
}
|
||||
minsect_dw[i](&actor->privInsects[i], game);
|
||||
if (GETREG(TAKREG, 0) == i + 1) {
|
||||
actor->privInsects[i]._14 = minsect_scale_tbl[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,529 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
void mID_insect_moveF(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
actor->_34.x = actor->_40 * sin_s(actor->_68.y);
|
||||
actor->_34.z = actor->_40 * cos_s(actor->_68.y);
|
||||
xyz_t_add(&actor->_1C, &actor->_34, &actor->_1C);
|
||||
}
|
||||
|
||||
#include "../src/actor/ac_museum_insect_chou.c_inc"
|
||||
#include "../src/actor/ac_museum_insect_semi.c_inc"
|
||||
#include "../src/actor/ac_museum_insect_tonbo.c_inc"
|
||||
#include "../src/actor/ac_museum_insect_batta.c_inc"
|
||||
#include "../src/actor/ac_museum_insect_tentou.c_inc"
|
||||
#include "../src/actor/ac_museum_insect_hachi.c_inc"
|
||||
#include "../src/actor/ac_museum_insect_kabuto.c_inc"
|
||||
#include "../src/actor/ac_museum_insect_kuwagata.c_inc"
|
||||
|
||||
void minsect_amenbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_1C = amenbo_center_pos;
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_44 = ZeroVec;
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_68.y = qrand();
|
||||
actor->_70 = actor->_68.y;
|
||||
actor->_6E = (s16)RANDOM_F(60.f);
|
||||
actor->_40 = 0.f;
|
||||
}
|
||||
|
||||
void minsect_amenbo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_8E = get_now_mind_flag(actor, game);
|
||||
actor->_6E--;
|
||||
if (actor->_40 > 0.f) {
|
||||
if (!add_calc(&actor->_40, 0.f, CALC_EASE(0.1), 0.05f, 0.005f)) {
|
||||
actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(120.f));
|
||||
actor->_6E = RANDOM_F(60.f);
|
||||
if (actor->_8E == 0) {
|
||||
actor->_6E *= 10;
|
||||
}
|
||||
}
|
||||
mID_insect_moveF(actor);
|
||||
} else {
|
||||
if (actor->_6E < 0) {
|
||||
if (!add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE(0.5f), DEG2SHORT_ANGLE(5),
|
||||
DEG2SHORT_ANGLE(0.5f))) {
|
||||
actor->_40 = (RANDOM_F(1.19f) + 1.15f) * 0.5f;
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(69, actor->_1C, 1, actor->_68.y, game, 0, 1, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_1C.x < amenbo_center_pos.x - 25.f) {
|
||||
actor->_1C.x = amenbo_center_pos.x - 25.f;
|
||||
actor->_6E = 0;
|
||||
actor->_40 = 0.f;
|
||||
actor->_70 = -actor->_68.y;
|
||||
} else if (actor->_1C.x > amenbo_center_pos.x + 25.f) {
|
||||
actor->_1C.x = amenbo_center_pos.x + 25.f;
|
||||
actor->_6E = 0;
|
||||
actor->_40 = 0.f;
|
||||
actor->_70 = -actor->_68.y;
|
||||
}
|
||||
|
||||
if (actor->_1C.z < amenbo_center_pos.z - 18.f) {
|
||||
actor->_1C.z = amenbo_center_pos.z - 18.f;
|
||||
actor->_6E = 0;
|
||||
actor->_40 = 0.f;
|
||||
actor->_70 = (s16)DEG2SHORT_ANGLE2(180);
|
||||
actor->_70 -= actor->_68.y;
|
||||
} else if (actor->_1C.z > amenbo_center_pos.z + 18.f) {
|
||||
actor->_1C.z = amenbo_center_pos.z + 18.f;
|
||||
actor->_6E = 0;
|
||||
actor->_40 = 0.f;
|
||||
actor->_70 = (s16)DEG2SHORT_ANGLE2(180);
|
||||
actor->_70 -= actor->_68.y;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_amenbo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y + (s16)DEG2SHORT_ANGLE2(180), actor->_68.z, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
CLOSE_DISP(game->graph);
|
||||
}
|
||||
|
||||
#include "../src/actor/ac_museum_insect_mino.c_inc"
|
||||
#include "../src/actor/ac_museum_insect_kumo.c_inc"
|
||||
#include "../src/actor/ac_museum_insect_goki.c_inc"
|
||||
#include "../src/actor/ac_museum_insect_genji.c_inc"
|
||||
#include "../src/actor/ac_museum_insect_dango.c_inc"
|
||||
|
||||
void ari_alone_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_8C |= 1;
|
||||
if (RANDOM_F(1.f) < (2.f / 3.f)) {
|
||||
actor->_74 = 1;
|
||||
actor->_1C = ari_rail_pos[0];
|
||||
} else {
|
||||
actor->_1C = ari_rail_pos[2];
|
||||
actor->_74 = -1;
|
||||
}
|
||||
actor->_70 = 1;
|
||||
actor->_40 = RANDOM_F(0.25f) + 0.05f;
|
||||
actor->_6E = (s16)RANDOM_F(1160.f) + 40;
|
||||
actor->_5C = RANDOM2_F(5.f);
|
||||
}
|
||||
|
||||
void ari_alone_make(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
int i = 0;
|
||||
for (i = 0; i < 15; actor++, i++) {
|
||||
if ((actor->_8C & 1) == 0) {
|
||||
ari_alone_ct(actor, game);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ari_alone_dt(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_8C &= ~1;
|
||||
}
|
||||
|
||||
void ari_alone_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t p = ari_rail_pos[actor->_70];
|
||||
xyz_t p2;
|
||||
actor->_6E--;
|
||||
if (actor->_40 > 0.f) {
|
||||
f32 v;
|
||||
s16 s;
|
||||
if (actor->_74 > 0) {
|
||||
v = 307.f - actor->_1C.x;
|
||||
} else {
|
||||
v = actor->_1C.x - 177.f;
|
||||
}
|
||||
s = DEG2SHORT_ANGLE2((v * 360.f) / 130.f);
|
||||
if (actor->_70 == 1) {
|
||||
actor->_58 = (-5.f - (GETREG(TAKREG, 0x32) * 0.1f)) * sin_s(s);
|
||||
} else {
|
||||
actor->_58 = (5.f + (GETREG(TAKREG, 0x32) * 0.1f)) * sin_s(s);
|
||||
}
|
||||
p.z += actor->_5C;
|
||||
if (!chase_xyz_t(&actor->_1C, &p, actor->_40)) {
|
||||
if (actor->_70 == 1) {
|
||||
actor->_70 += actor->_74;
|
||||
} else {
|
||||
ari_alone_dt(actor, game);
|
||||
}
|
||||
}
|
||||
xyz_t_sub(&p, &actor->_1C, &p2);
|
||||
actor->_72 = atans_table(p2.z, p2.x);
|
||||
add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->_6E < 0) {
|
||||
actor->_40 = 0.f;
|
||||
actor->_6E = (s16)RANDOM_F(260.f) + 40;
|
||||
}
|
||||
} else if (actor->_6E < 0) {
|
||||
actor->_40 = RANDOM_F(0.25f) + 0.05f;
|
||||
actor->_6E = (s16)RANDOM_F(1160.f) + 40;
|
||||
}
|
||||
}
|
||||
|
||||
#include "../src/actor/ac_museum_insect_okera.c_inc"
|
||||
#include "../src/actor/ac_museum_insect_ka.c_inc"
|
||||
|
||||
extern Gfx act_m_mu_ariT_model;
|
||||
void ari_alone_draw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z + actor->_58, FALSE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, &act_m_mu_ariT_model);
|
||||
CLOSE_DISP(game->graph);
|
||||
}
|
||||
|
||||
void minsect_ari_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
MUSEUM_INSECT_PRIVATE_DATA* priv = &MI_Control_Actor->_1CA0[0];
|
||||
int i;
|
||||
actor->_6E = (s16)RANDOM_F(100.f) + 20;
|
||||
for (i = 0; i < 15; priv++, i++) {
|
||||
ari_alone_dt(priv, game);
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_ari_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
MUSEUM_INSECT_PRIVATE_DATA* priv = MI_Control_Actor->_1CA0;
|
||||
int i;
|
||||
if (actor->_6E-- < 0) {
|
||||
actor->_6E = (s16)RANDOM_F(100.f) + 20;
|
||||
ari_alone_make(priv, game);
|
||||
}
|
||||
for (i = 0; i < 15; priv++, i++) {
|
||||
if (priv->_8C & 1) {
|
||||
ari_alone_move(priv, game);
|
||||
priv->_14 = actor->_14;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_ari_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
MUSEUM_INSECT_PRIVATE_DATA* priv = MI_Control_Actor->_1CA0;
|
||||
int i;
|
||||
for (i = 0; i < 15; priv++, i++) {
|
||||
if (priv->_8C & 1) {
|
||||
ari_alone_draw(priv, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern Gfx ef_shadow_insect_modelT;
|
||||
void minsect_draw_shadow(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
u8 shadow = play->kankyo.shadow_alpha;
|
||||
f32 v;
|
||||
f32 scale;
|
||||
u8 alpha;
|
||||
|
||||
f32 v0;
|
||||
f32 v1;
|
||||
|
||||
if (actor->_1C.z > -40.f && actor->_1C.z < 40.f) {
|
||||
v = 46.f;
|
||||
} else if (actor->_1C.x > 120.f && actor->_1C.x < 440.f &&
|
||||
(actor->_1C.z > 120.f && actor->_1C.z < 280.f || actor->_1C.z > 360.f && actor->_1C.z < 520.f)) {
|
||||
v = 45.f;
|
||||
} else {
|
||||
v = 40.f;
|
||||
}
|
||||
|
||||
v0 = 100.f - (actor->_1C.y - v);
|
||||
v1 = 1.f + (GETREG(TAKREG, 0x2b) * 0.1f);
|
||||
alpha = (int)(v0 * v1 + 40.0f + GETREG(TAKREG, 0x2c));
|
||||
alpha = (alpha * shadow) >> 8;
|
||||
|
||||
scale = (GETREG(TAKREG, 0x28) * 0.001f + 0.005f);
|
||||
scale *= minsect_shadow_scale_tbl[(int)actor->_00];
|
||||
|
||||
Matrix_translate(actor->_1C.x, v, actor->_1C.z, FALSE);
|
||||
Matrix_scale(scale, scale, scale, TRUE);
|
||||
_texture_z_light_fog_prim_shadow(game->graph);
|
||||
|
||||
OPEN_SHADOW_DISP(game->graph);
|
||||
gDPSetPrimColor(SHADOW_DISP++, 0, 255, 0, 0, 0, alpha);
|
||||
gSPMatrix(SHADOW_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(SHADOW_DISP++, &ef_shadow_insect_modelT);
|
||||
CLOSE_SHADOW_DISP(game->graph);
|
||||
}
|
||||
|
||||
void minsect_fly_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2) {
|
||||
const f32 min = 50.0f;
|
||||
const f32 max = 510.0f;
|
||||
|
||||
actor->_8C &= ~0x1e;
|
||||
if (actor->_1C.x < min) {
|
||||
actor->_1C.x = min;
|
||||
actor->_8C |= 2;
|
||||
} else if (actor->_1C.x > max) {
|
||||
actor->_1C.x = max;
|
||||
actor->_8C |= 4;
|
||||
}
|
||||
|
||||
if (actor->_1C.z < f2) {
|
||||
actor->_8C |= 8;
|
||||
} else if (actor->_1C.z > f1) {
|
||||
actor->_8C |= 0x10;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_garden_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, f32 f1, f32 f2) {
|
||||
const f32 v1 = 130.f, v2 = 430.f;
|
||||
actor->_8C &= ~0x1e;
|
||||
actor->_8C &= ~0x20;
|
||||
if (actor->_1C.x < v1) {
|
||||
actor->_1C.x = v1;
|
||||
actor->_8C |= 2;
|
||||
} else if (actor->_1C.x > v2) {
|
||||
actor->_1C.x = v2;
|
||||
actor->_8C |= 4;
|
||||
}
|
||||
|
||||
if (actor->_1C.z < f2) {
|
||||
actor->_1C.z = f2;
|
||||
actor->_8C |= 8;
|
||||
} else if (actor->_1C.z > f1) {
|
||||
actor->_1C.z = f1;
|
||||
actor->_8C |= 0x10;
|
||||
}
|
||||
|
||||
if (actor->_1C.y < 45.f) {
|
||||
actor->_1C.y = 45.f;
|
||||
actor->_8C |= 0x20;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_flower_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor, xyz_t* p) {
|
||||
xyz_t p2;
|
||||
f32 dsq;
|
||||
|
||||
xyz_t_sub(&actor->_1C, p, &p2);
|
||||
dsq = SQ(p2.x) + SQ(p2.z);
|
||||
actor->_8C &= ~2;
|
||||
if (dsq > SQ(15)) {
|
||||
f32 d = sqrtf(dsq);
|
||||
|
||||
p2.x *= (14.9f) / d;
|
||||
p2.z *= (14.9f) / d;
|
||||
actor->_1C.x = p->x + p2.x;
|
||||
actor->_1C.z = p->z + p2.z;
|
||||
actor->_8C |= 2;
|
||||
}
|
||||
actor->_1C.y = (-p2.z * 5.f) / 20.f + 65.f;
|
||||
}
|
||||
|
||||
void minsect_goki_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
f32 v1;
|
||||
f32 v2;
|
||||
f32 a1;
|
||||
f32 a2;
|
||||
f32 m1;
|
||||
f32 m2;
|
||||
f32 am1;
|
||||
f32 am2;
|
||||
|
||||
v1 = actor->_1C.x - 115.f;
|
||||
v2 = 445.f - actor->_1C.x;
|
||||
actor->_8C &= ~0x1e;
|
||||
actor->_8C &= ~0x20;
|
||||
if (actor->_1C.x < 45.f) {
|
||||
actor->_1C.x = 45.f;
|
||||
actor->_8C |= 2;
|
||||
} else if (actor->_1C.x > 515.f) {
|
||||
actor->_1C.x = 515.f;
|
||||
actor->_8C |= 4;
|
||||
}
|
||||
|
||||
if (actor->_1C.z < 45.f) {
|
||||
actor->_1C.z = 45.f;
|
||||
actor->_8C |= 8;
|
||||
} else if (actor->_1C.z > 595.f) {
|
||||
actor->_1C.z = 595.f;
|
||||
actor->_8C |= 0x10;
|
||||
}
|
||||
|
||||
if (actor->_1C.y < 40.f) {
|
||||
actor->_1C.y = 40.f;
|
||||
actor->_8C |= 0x20;
|
||||
}
|
||||
|
||||
if (v1 > 0.f && v2 > 0.f) {
|
||||
int i;
|
||||
for (i = 0; i < 2; i++) {
|
||||
static const float BG_ZB_tbl[2] = { 115.f, 355.f };
|
||||
static const float BG_ZF_tbl[2] = { 285.f, 525.f };
|
||||
a1 = actor->_1C.z - BG_ZB_tbl[i];
|
||||
a2 = BG_ZF_tbl[i] - actor->_1C.z;
|
||||
if (a1 > 0.f && a2 > 0.f) {
|
||||
// float regswaps here
|
||||
if (v1 > v2) {
|
||||
m1 = v2;
|
||||
} else {
|
||||
m1 = -v1;
|
||||
}
|
||||
if (a1 > a2) {
|
||||
m2 = a2;
|
||||
} else {
|
||||
m2 = -a1;
|
||||
}
|
||||
am1 = ABS(m1);
|
||||
am2 = ABS(m2);
|
||||
if (am2 > am1) {
|
||||
actor->_1C.x += m1;
|
||||
if (m1 > 0.f) {
|
||||
actor->_8C |= 4;
|
||||
} else {
|
||||
actor->_8C |= 2;
|
||||
}
|
||||
} else {
|
||||
actor->_1C.z += m2;
|
||||
if (m2 > 0.f) {
|
||||
actor->_8C |= 0x10;
|
||||
} else {
|
||||
actor->_8C |= 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_kanban_BGCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
static float KANBAN_XL_TBL[] = { 162.f, 325.f };
|
||||
static float KANBAN_XR_TBL[] = { 195.f, 358.f };
|
||||
int i;
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (actor->_1C.x > KANBAN_XL_TBL[i] && actor->_1C.x < KANBAN_XR_TBL[i]) {
|
||||
f32 v = actor->_1C.z - actor->_34.z;
|
||||
const f32 vv = 508.f;
|
||||
const f32 tt = 500.f;
|
||||
if (v - vv >= 0.f && actor->_1C.z - vv < 0.f) {
|
||||
actor->_1C.z = vv;
|
||||
} else if (v - tt <= 0.f && actor->_1C.z - tt > 0.f) {
|
||||
actor->_1C.z = tt;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_tree_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
int i = 0;
|
||||
const f32 d = SQ(20.f);
|
||||
actor->_8C &= ~0x80;
|
||||
for (i = 0; i < 8; i++) {
|
||||
f32 x = tree_pos[i].x - actor->_1C.x;
|
||||
f32 z = tree_pos[i].z - actor->_1C.z;
|
||||
f32 dsq = SQ(x) + SQ(z);
|
||||
if (dsq < d) {
|
||||
s16 ang = atans_table(z, x);
|
||||
f32 dist = 20.1f - sqrtf(dsq);
|
||||
actor->_1C.x -= dist * sin_s(ang);
|
||||
actor->_1C.z -= dist * cos_s(ang);
|
||||
actor->_8C |= 0x80;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_rock_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
int i = 0;
|
||||
const f32 d = SQ(22.f);
|
||||
actor->_8C &= ~0x40;
|
||||
for (i = 0; i < 2; i++) {
|
||||
f32 x = rock_pos[i].x - actor->_1C.x;
|
||||
f32 z = rock_pos[i].z - actor->_1C.z;
|
||||
f32 dsq = SQ(x) + SQ(z);
|
||||
if (dsq < d) {
|
||||
s16 ang = atans_table(z, x);
|
||||
f32 dist = 22.f - sqrtf(dsq);
|
||||
actor->_1C.x -= dist * sin_s(ang);
|
||||
actor->_1C.z -= dist * cos_s(ang);
|
||||
actor->_8C |= 0x40;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_batta_ObjCheck(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
int c = 6;
|
||||
int i;
|
||||
if (MI_Control_Actor->privInsects[0x21]._8C & 1 &&
|
||||
MI_Control_Actor->privInsects[0x21]._04 == okera_normal_process) {
|
||||
c = 7;
|
||||
}
|
||||
for (i = 0; i < c; i++) {
|
||||
static int idx_tbl[7] = { 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x21 };
|
||||
MUSEUM_INSECT_PRIVATE_DATA* priv = &MI_Control_Actor->privInsects[idx_tbl[i]];
|
||||
if (priv != actor && priv->_8C & 1) {
|
||||
f32 x = priv->_1C.x - actor->_1C.x;
|
||||
f32 z = priv->_1C.z - actor->_1C.z;
|
||||
f32 dsq = SQ(x) + SQ(z);
|
||||
const f32 d = SQ(GETREG(NMREG, 0x5a) + 10.f);
|
||||
if (dsq < d) {
|
||||
s16 ang = atans_table(z, x);
|
||||
f32 dist = (GETREG(NMREG, 0x5a) + 10.f) - sqrtf(dsq);
|
||||
actor->_1C.x -= dist * sin_s(ang);
|
||||
actor->_1C.z -= dist * cos_s(ang);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOL get_now_mind_flag(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
int now_sec = Common_Get(time.now_sec);
|
||||
BOOL b;
|
||||
|
||||
if (actor->_50 == 0 && actor->_54 == 0) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (actor->_54 > actor->_50) {
|
||||
if (now_sec < actor->_50) {
|
||||
b = FALSE;
|
||||
} else if (now_sec < actor->_54) {
|
||||
b = TRUE;
|
||||
} else {
|
||||
b = FALSE;
|
||||
}
|
||||
} else {
|
||||
if (now_sec < actor->_54) {
|
||||
b = TRUE;
|
||||
} else if (now_sec < actor->_50) {
|
||||
b = FALSE;
|
||||
} else {
|
||||
b = TRUE;
|
||||
}
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
void set_relax_active_time(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_00 == 6) {
|
||||
int now_sec = Common_Get(time.now_sec);
|
||||
if (now_sec < (14280)) {
|
||||
actor->_50 = 14400;
|
||||
actor->_54 = 28800;
|
||||
} else if (now_sec < (28680)) {
|
||||
actor->_50 = 57600;
|
||||
actor->_54 = 28800;
|
||||
} else if (now_sec < (57480)) {
|
||||
actor->_50 = 57600;
|
||||
actor->_54 = 68400;
|
||||
} else if (now_sec < (68280)) {
|
||||
actor->_50 = 14400;
|
||||
actor->_54 = 68400;
|
||||
} else {
|
||||
actor->_50 = 14400;
|
||||
actor->_54 = 28800;
|
||||
}
|
||||
} else {
|
||||
actor->_54 = relax_time_tbl[actor->_00];
|
||||
actor->_50 = active_time_tbl[actor->_00];
|
||||
}
|
||||
if (actor->_54 && actor->_50) {
|
||||
actor->_54 += (int)RANDOM2_F(240.f);
|
||||
actor->_50 += (int)RANDOM2_F(240.f);
|
||||
}
|
||||
actor->_8E = get_now_mind_flag(actor, game);
|
||||
}
|
||||
@@ -0,0 +1,254 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
void mi_batta_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
f32 v = search_position_distance(&actor->_1C, &player->actor_class.world.position);
|
||||
if (v < 60.f) {
|
||||
if (player->actor_class.speed > 1.4f) {
|
||||
actor->_7E += (s16)((v / 60.f) * 8.f);
|
||||
} else if (player->actor_class.speed > 5.0f) {
|
||||
actor->_7E += (s16)((v / 60.f) * 20.f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mi_batta_suzumushi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
static f32 scaleX_table[7] = { 1.15f, 0.9f, 1.15f, 0.9f, 1.15f, 0.9f, 1.15f };
|
||||
if (actor->_82 < 7) {
|
||||
if (chase_f(&actor->_58, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_82], 0.23f) == 1) {
|
||||
actor->_82--;
|
||||
if (actor->_82 < 0) {
|
||||
actor->_82 = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
actor->_82--;
|
||||
}
|
||||
}
|
||||
|
||||
void mi_batta_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
static f32 scaleX_table[7] = { 1.15f, 0.5f, 1.15f, 0.5f, 1.15f, 0.5f, 1.15f };
|
||||
if (actor->_7C < 7) {
|
||||
if (chase_f(&actor->_58, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_7C], 0.23f) == 1) {
|
||||
actor->_7C--;
|
||||
if (actor->_7C < 0) {
|
||||
actor->_7C = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
actor->_7C--;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_batta_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
static const xyz_t batta_init_pos = { 280.f, 45.f, 440.f };
|
||||
actor->_1C = batta_init_pos;
|
||||
actor->_1C.x += RANDOM2_F(300.f);
|
||||
actor->_1C.z += RANDOM2_F(140.f);
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_44 = ZeroVec;
|
||||
actor->_44.y = -0.05f;
|
||||
actor->_68.y = qrand();
|
||||
actor->_70 = qrand();
|
||||
actor->_72 = 0;
|
||||
actor->_74 = 0;
|
||||
actor->_7A = 0;
|
||||
actor->_58 = 1.0f;
|
||||
actor->_7C = 0;
|
||||
actor->_82 = 0;
|
||||
minsect_batta_normal_process_init(actor, game);
|
||||
}
|
||||
|
||||
void minsect_batta_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
s16 s = qrand();
|
||||
xyz_t p = actor->_1C;
|
||||
p.x += 30.f * sin_s(s);
|
||||
p.z += 30.f * cos_s(s);
|
||||
actor->_04 = minsect_batta_normal_process;
|
||||
if (p.x < 130.f) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(90);
|
||||
} else if (p.x > 430.f) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(-90);
|
||||
actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90));
|
||||
} else if (p.z > 510.f) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(-180);
|
||||
actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90));
|
||||
} else if (p.z < 370.f) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(RANDOM2_F(90));
|
||||
} else {
|
||||
actor->_70 = s;
|
||||
}
|
||||
actor->_78 = DEG2SHORT_ANGLE(-7);
|
||||
actor->_7A = 0;
|
||||
}
|
||||
|
||||
void minsect_batta_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_76 == DEG2SHORT_ANGLE(-7) && actor->_78) {
|
||||
actor->_78 = 0;
|
||||
}
|
||||
if (!add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE2(0.5), DEG2SHORT_ANGLE(15),
|
||||
DEG2SHORT_ANGLE(0.25f))) {
|
||||
if (actor->_74 == 0 && RANDOM_F(1.0f) > 0.3f) {
|
||||
actor->_74 = 1;
|
||||
if (RANDOM_F(1.0f) >= 0.5f) {
|
||||
actor->_70 += (s16)(DEG2SHORT_ANGLE(RANDOM_F(30)) + DEG2SHORT_ANGLE(20));
|
||||
} else {
|
||||
actor->_70 -= (s16)(DEG2SHORT_ANGLE(RANDOM_F(30)) + DEG2SHORT_ANGLE(20));
|
||||
}
|
||||
actor->_78 = DEG2SHORT_ANGLE(-7);
|
||||
} else {
|
||||
if (RANDOM_F(1.0f) > 0.8f || GETREG(NMREG, 2)) {
|
||||
minsect_batta_silent_process_init(actor, game);
|
||||
} else {
|
||||
minsect_batta_jump_wait_process_init(actor, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_batta_silent_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E = (s16)((s16)RANDOM_F(360) + 120) * 5;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_6E = (s16)((s16)RANDOM_F(360.f) + 120) * 2;
|
||||
}
|
||||
actor->_04 = minsect_batta_silent_process;
|
||||
return;
|
||||
}
|
||||
|
||||
void minsect_batta_silent_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_6E-- < 0) {
|
||||
if (RANDOM_F(1.0f) > 0.6f) {
|
||||
minsect_batta_jump_process_init(actor, game);
|
||||
} else {
|
||||
minsect_batta_normal_process_init(actor, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_batta_jump_wait_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_74 = 0;
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 120;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_6E *= 5;
|
||||
}
|
||||
actor->_04 = minsect_batta_jump_wait_process;
|
||||
actor->_78 = 0;
|
||||
}
|
||||
|
||||
void minsect_batta_jump_wait_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_6E-- < 0) {
|
||||
minsect_batta_jump_process_init(actor, game);
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_batta_jump_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_40 = RANDOM_F(1.0f) + 1.0f;
|
||||
actor->_34.y = 0.75f;
|
||||
actor->_04 = minsect_batta_jump_process;
|
||||
if (RANDOM_F(1.0f) > 0.6f || GETREG(NMREG, 2)) {
|
||||
actor->_7A = 1;
|
||||
actor->_7C = 7;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_batta_jump_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_68.x = -atans_table(actor->_40, actor->_34.y);
|
||||
if (actor->_34.y < 0.0f && actor->_8C & 0x20) {
|
||||
actor->_40 = 0.f;
|
||||
actor->_68.x = 0;
|
||||
minsect_batta_normal_process_init(actor, game);
|
||||
}
|
||||
mi_batta_hane_anime(actor);
|
||||
if (actor->_7C <= 0) {
|
||||
actor->_7C = 7;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_batta_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
static u8 batta_sound_data[4] = { 0x9f, 0x9e, 0xa0, 0x9d };
|
||||
actor->_8E = get_now_mind_flag(actor, game);
|
||||
mi_batta_check_player(actor, game);
|
||||
actor->_7E--;
|
||||
if (actor->_7E < 0) {
|
||||
actor->_7E = 0;
|
||||
}
|
||||
if (actor->_7E > 1600) {
|
||||
actor->_7E = 1600;
|
||||
}
|
||||
|
||||
if (actor->_8E) {
|
||||
if (actor->_7E > 150 && actor->_04 != minsect_batta_jump_process) {
|
||||
minsect_batta_jump_process_init(actor, game);
|
||||
actor->_7E = 0;
|
||||
}
|
||||
} else {
|
||||
if (actor->_7E > 1000 && actor->_04 != minsect_batta_jump_process) {
|
||||
minsect_batta_jump_process_init(actor, game);
|
||||
actor->_7E = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_00 >= 15 && actor->_04 != minsect_batta_jump_process) {
|
||||
int id = actor->_00 - 15;
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
xyz_t p = player->actor_class.world.position;
|
||||
f32 dist = search_position_distanceXZ(&actor->_1C, &p);
|
||||
if (actor->_04 != minsect_batta_silent_process && actor->_8E) {
|
||||
if (actor->_00 == 17) {
|
||||
mi_batta_suzumushi_hane_anime(actor);
|
||||
if (actor->_82 <= 0) {
|
||||
actor->_82 = 7;
|
||||
}
|
||||
}
|
||||
if (dist < 200.f) {
|
||||
sAdo_OngenPos((u32)actor, batta_sound_data[id], &actor->_1C);
|
||||
}
|
||||
} else if (actor->_04 == minsect_batta_silent_process && actor->_8E == 0) {
|
||||
if (actor->_00 == 17) {
|
||||
mi_batta_suzumushi_hane_anime(actor);
|
||||
if (actor->_82 <= 0) {
|
||||
actor->_82 = 7;
|
||||
}
|
||||
}
|
||||
if (dist < 200.f) {
|
||||
sAdo_OngenPos((u32)actor, batta_sound_data[id], &actor->_1C);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
actor->_04(actor, game);
|
||||
mID_insect_moveF(actor);
|
||||
actor->_34.y += actor->_44.y;
|
||||
minsect_batta_ObjCheck(actor);
|
||||
minsect_tree_ObjCheck(actor);
|
||||
minsect_rock_ObjCheck(actor);
|
||||
minsect_kanban_BGCheck(actor);
|
||||
minsect_garden_BGCheck(actor, 510.0, 370.0);
|
||||
add_calc_short_angle2(&actor->_76, actor->_78, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
|
||||
void minsect_batta_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
Matrix_rotateXYZ(actor->_76, 0, 0, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
CLOSE_DISP(game->graph);
|
||||
|
||||
if (actor->_7A || actor->_00 == 17) {
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
OPEN_POLY_XLU_DISP(game->graph);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 0xff, 0xff, 0xff, 0xff);
|
||||
Matrix_scale(actor->_58, 1.0f, 1.0f, TRUE);
|
||||
gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][1]);
|
||||
CLOSE_POLY_XLU_DISP(game->graph);
|
||||
}
|
||||
|
||||
minsect_draw_shadow(actor, game);
|
||||
}
|
||||
@@ -0,0 +1,250 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
void minsect_chou_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_58 = base_high_tbl[actor->_00];
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_0C = 0.0f;
|
||||
actor->_10 = 0.25f;
|
||||
actor->_70 = RANDOM_F(5.0f);
|
||||
actor->_44 = ZeroVec;
|
||||
actor->_44.y = -0.075f;
|
||||
if (actor->_8E == 1) {
|
||||
static const xyz_t init_center_pos = { 280.f, 100.f, 180.f };
|
||||
actor->_1C = init_center_pos;
|
||||
actor->_1C.x += RANDOM2_F(460.f);
|
||||
actor->_1C.z += RANDOM2_F(200.f);
|
||||
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_68.y = qrand();
|
||||
actor->_1C.y = actor->_58 + RANDOM_F(5.f);
|
||||
actor->_40 = 0.75f;
|
||||
minsect_chou_normal_process_init(actor, game);
|
||||
} else {
|
||||
if (actor->_00 <= 2) {
|
||||
actor->_1C = flower_pos[actor->_00];
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_68.y = qrand();
|
||||
actor->_74 = actor->_00;
|
||||
MI_Control_Actor->_2F9C[0] |= 1 << actor->_74;
|
||||
} else {
|
||||
actor->_1C = ohmurasaki_tree_pos;
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_68.y = DEG2SHORT_ANGLE(-180);
|
||||
}
|
||||
actor->_40 = 0.0f;
|
||||
minsect_chou_flower_process_init(actor, game);
|
||||
actor->_76 = DEG2SHORT_ANGLE(-180);
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_chou_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_04 = minsect_chou_normal_process;
|
||||
}
|
||||
|
||||
void minsect_chou_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if ((actor->_6E-- <= 0) || (actor->_70 != 0 && actor->_70 != 3 && actor->_8C & 8) ||
|
||||
((actor->_70 == 0) || (actor->_70 == 3)) && actor->_8C & 0x10) {
|
||||
actor->_6E = (s16)(RANDOM_F(20.f) + 40.f);
|
||||
if (actor->_70 < 5) {
|
||||
actor->_70++;
|
||||
} else {
|
||||
if (RANDOM_F(1.0f) > 0.8f) {
|
||||
actor->_70 = 0;
|
||||
minsect_chou_aim_flower_process_init(actor, game);
|
||||
return;
|
||||
}
|
||||
actor->_70 = 0;
|
||||
}
|
||||
actor->_72 = aim_angle_tbl[actor->_70];
|
||||
actor->_72 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(20.f));
|
||||
if (actor->_70 % 3 == 0) {
|
||||
actor->_6E += (s16)(actor->_6E + 10);
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_1C.y < actor->_58) {
|
||||
actor->_34.y = (RANDOM_F(1.0f) + 2.0f) * 0.5f;
|
||||
}
|
||||
|
||||
add_calc(&actor->_40, 0.75f, CALC_EASE(0.2f), 0.05f, 0.05f);
|
||||
}
|
||||
|
||||
void minsect_chou_aim_flower_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_00 != 3) {
|
||||
actor->_74 = RANDOM_F(8.0f);
|
||||
while (MI_Control_Actor->_2F9C[0] & (1 << actor->_74)) {
|
||||
if (actor->_74 < 7) {
|
||||
actor->_74++;
|
||||
} else {
|
||||
actor->_74 = 0;
|
||||
}
|
||||
}
|
||||
MI_Control_Actor->_2F9C[0] |= (1 << actor->_74);
|
||||
actor->_72 = search_position_angleY(&actor->_1C, &flower_pos[actor->_74]);
|
||||
} else {
|
||||
actor->_72 = search_position_angleY(&actor->_1C, &ohmurasaki_tree_pos);
|
||||
}
|
||||
actor->_6E = RANDOM_F(20.f) + 40.f;
|
||||
actor->_04 = minsect_chou_aim_flower_process;
|
||||
}
|
||||
|
||||
void minsect_chou_aim_flower_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t* target;
|
||||
f32 dist;
|
||||
f32 diff;
|
||||
if (actor->_00 != 3) {
|
||||
target = &flower_pos[actor->_74];
|
||||
} else {
|
||||
target = &ohmurasaki_tree_pos;
|
||||
}
|
||||
dist = search_position_distanceXZ(&actor->_1C, target);
|
||||
diff = actor->_1C.y - target->y;
|
||||
if (actor->_6E-- < 0) {
|
||||
actor->_72 = search_position_angleY(&actor->_1C, target);
|
||||
actor->_72 += DEG2SHORT_ANGLE(RANDOM2_F(90.f));
|
||||
actor->_6E = RANDOM_F(20.f) + 40.f;
|
||||
if (actor->_00 == 3 &&
|
||||
((actor->_72 < DEG2SHORT_ANGLE(90) && actor->_72 > DEG2SHORT_ANGLE(-90)) || actor->_1C.z < target->z)) {
|
||||
if ((s16)actor->_72 > 0) {
|
||||
actor->_72 += DEG2SHORT_ANGLE(30);
|
||||
} else {
|
||||
actor->_72 -= DEG2SHORT_ANGLE(30);
|
||||
}
|
||||
actor->_6E += 10;
|
||||
}
|
||||
}
|
||||
if (actor->_1C.y < actor->_58) {
|
||||
actor->_34.y = (RANDOM_F(1.0f) + 2.0f) * 0.5f;
|
||||
}
|
||||
if ((dist < 30.f) || (actor->_00 == 3 && dist < 50.f && actor->_1C.z > target->z)) {
|
||||
add_calc(&actor->_40, 0.2f, CALC_EASE(0.1f), 0.05f, 0.005f);
|
||||
add_calc(&actor->_58, target->y, CALC_EASE(0.5f), 0.5f, 0.05f);
|
||||
if (ABS(diff) < 10 && dist < (GETREG(TAKREG, 0x27) + 10.f)) {
|
||||
minsect_chou_flower_process_init(actor, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_chou_flower_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_44.y = 0.0f;
|
||||
actor->_34.x = actor->_34.y = actor->_34.z = 0.0f;
|
||||
actor->_04 = minsect_chou_flower_process;
|
||||
actor->_10 = 0.25f;
|
||||
actor->_0C = 0.0f;
|
||||
actor->_6E = 0x10;
|
||||
actor->_28 = actor->_1C;
|
||||
actor->_76 = 0;
|
||||
}
|
||||
|
||||
void minsect_chou_flower_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t* target;
|
||||
f32 dist;
|
||||
f32 diff;
|
||||
if (actor->_00 != 3) {
|
||||
target = &flower_pos[actor->_74];
|
||||
} else {
|
||||
target = &ohmurasaki_tree_pos;
|
||||
}
|
||||
actor->_6E--;
|
||||
actor->_1C.x = actor->_28.x + (target->x - actor->_28.x) * (ABS(actor->_76) / 32768.0f);
|
||||
if (actor->_00 != 3) {
|
||||
actor->_1C.z = actor->_28.z + (target->z - actor->_28.z) * (ABS(actor->_76) / 32768.0f);
|
||||
} else {
|
||||
actor->_1C.z = actor->_28.z + (target->z - actor->_28.z - 20.f) * (ABS(actor->_76) / 32768.0f);
|
||||
}
|
||||
|
||||
actor->_1C.y = actor->_28.y + (target->y - actor->_28.y) * (0.5f * (1.0f - cos_s(actor->_76)));
|
||||
|
||||
if ((int)actor->_76 >= 0) {
|
||||
actor->_76 += GETREG(TAKREG, 0x29) + DEG2SHORT_ANGLE(5.625f);
|
||||
}
|
||||
|
||||
if (actor->_10 > 0.0f) {
|
||||
if ((int)actor->_0C == 1 && actor->_6E < 0) {
|
||||
actor->_10 = 0.0f;
|
||||
actor->_6E = RANDOM_F(540.f) + 60.f;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_6E *= 5;
|
||||
}
|
||||
}
|
||||
} else if (actor->_6E < 0) {
|
||||
if (actor->_8E == 1 && RANDOM_F(1.0f) > 0.75f) {
|
||||
minsect_chou_fly_process_init(actor, game);
|
||||
} else {
|
||||
actor->_10 = 0.25f;
|
||||
actor->_6E = 0x10;
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_00 == 3) {
|
||||
add_calc_short_angle2(&actor->_72, DEG2SHORT_ANGLE(-180), CALC_EASE2(GETREG(TAKREG, 0x2a) * 0.01f + 0.3f),
|
||||
(s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 0x2c) + 10.f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_68.x, DEG2SHORT_ANGLE(-90), CALC_EASE2(GETREG(TAKREG, 0x2b) * 0.01f + 0.3f),
|
||||
(s16)(DEG2SHORT_ANGLE(GETREG(TAKREG, 0x2d) + 10.f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_chou_fly_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_58 = base_high_tbl[actor->_00];
|
||||
if (actor->_00 != 3) {
|
||||
MI_Control_Actor->_2F9C[0] &= ~(1 << actor->_74);
|
||||
}
|
||||
actor->_10 = 0.25f;
|
||||
actor->_04 = minsect_chou_fly_process;
|
||||
actor->_40 = 0.75f;
|
||||
actor->_34.y = (RANDOM_F(1.0f) + 2.0f) * 0.5f;
|
||||
actor->_44.y = -0.075f;
|
||||
if (actor->_00 == 3) {
|
||||
actor->_1C.z += 2.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_chou_fly_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_00 == 3) {
|
||||
add_calc_short_angle2(&actor->_68.y, DEG2SHORT_ANGLE(90), CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_68.x, DEG2SHORT_ANGLE(0), CALC_EASE2(0.5f), DEG2SHORT_ANGLE(3.75f),
|
||||
DEG2SHORT_ANGLE(0.5f));
|
||||
}
|
||||
|
||||
if (actor->_1C.y > actor->_58 && actor->_68.x == 0) {
|
||||
minsect_chou_normal_process_init(actor, game);
|
||||
} else if (actor->_34.y < 0.0f) {
|
||||
actor->_34.y = (RANDOM_F(1.0f) + 2.0f) * 0.5f;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_chou_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_8E = get_now_mind_flag(actor, game);
|
||||
actor->_04(actor, game);
|
||||
add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f));
|
||||
mID_insect_moveF(actor);
|
||||
|
||||
actor->_34.y += actor->_44.y;
|
||||
actor->_0C += actor->_10;
|
||||
|
||||
if (!minsect_mdl[actor->_00][(int)actor->_0C]) {
|
||||
actor->_0C = 0.0f;
|
||||
}
|
||||
|
||||
if (actor->_04 != minsect_chou_flower_process) {
|
||||
minsect_tree_ObjCheck(actor);
|
||||
}
|
||||
|
||||
minsect_fly_BGCheck(actor, 360.0, 40.0);
|
||||
}
|
||||
|
||||
void minsect_chou_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
Matrix_scale(GETREG(NMREG, 0) * 0.01f + 1.0f, GETREG(NMREG, 1) * 0.01f + 1.0f, GETREG(NMREG, 2) * 0.01f + 1.0f,
|
||||
TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][(int)actor->_0C]);
|
||||
minsect_draw_shadow(actor, game);
|
||||
CLOSE_DISP(game->graph);
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
xyz_t rail_pos[6] = { { 368.f, 45.f, 467.f }, { 363.f, 45.f, 482.f }, { 374.f, 45.f, 499.f },
|
||||
{ 393.f, 45.f, 502.f }, { 407.f, 45.f, 488.f }, { 407.f, 45.f, 469.f } };
|
||||
|
||||
void mi_dango_defence_anime(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
static f32 scale_table[] = { 1.f, 0.85f, 1.15f, 0.75f, 1.05f, 0.65f, 0.95f };
|
||||
if (actor->_7E < 7 && actor->_7E >= 0) {
|
||||
if (chase_f(&actor->_58, scale_table[actor->_7E], 0.115f) == TRUE) {
|
||||
actor->_7E--;
|
||||
}
|
||||
} else {
|
||||
actor->_7E--;
|
||||
}
|
||||
if (actor->_7E < 0) {
|
||||
actor->_7E = -1;
|
||||
}
|
||||
}
|
||||
|
||||
void mi_dango_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position);
|
||||
if (dist < 80.f) {
|
||||
if (player->actor_class.speed > 1.4f) {
|
||||
actor->_7A += (s16)((dist / 80.f) * 8.f);
|
||||
} else if (player->actor_class.speed > 5.f) {
|
||||
actor->_7A += (s16)((dist / 80.f) * 20.f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mi_dango_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E = (s16)RANDOM_F(560.f) + 40;
|
||||
}
|
||||
|
||||
void mi_dango_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_7C = 0;
|
||||
actor->_6E--;
|
||||
if ((f32)__fabs(actor->_40) < 0.008f) {
|
||||
if (actor->_6E < 0) {
|
||||
actor->_40 = RANDOM_F(0.1f) + 0.065f;
|
||||
actor->_6E = (s16)RANDOM_F(560.f) + 40;
|
||||
}
|
||||
} else {
|
||||
if (actor->_6E < 0) {
|
||||
actor->_6E = (s16)RANDOM_F(260.f) + 40;
|
||||
actor->_40 = 0.f;
|
||||
}
|
||||
chase_angle2(&actor->_68.y, actor->_74, actor->_78);
|
||||
if (actor->_8C & 2) {
|
||||
xyz_t p;
|
||||
xyz_t_sub(&rail_pos[actor->_72], &actor->_1C, &p);
|
||||
actor->_74 = atans_table(p.z, p.x);
|
||||
if (ABS((s16)(actor->_68.y - actor->_74)) < DEG2SHORT_ANGLE(1)) {
|
||||
actor->_8C &= ~2;
|
||||
} else {
|
||||
mID_insect_moveF(actor);
|
||||
}
|
||||
} else {
|
||||
xyz_t p;
|
||||
xyz_t_sub(&rail_pos[actor->_72], &actor->_1C, &p);
|
||||
actor->_74 = atans_table(p.z, p.x);
|
||||
if (!chase_xyz_t(&actor->_1C, &rail_pos[actor->_72], actor->_40)) {
|
||||
if (actor->_8C & 4) {
|
||||
actor->_72 += actor->_76;
|
||||
actor->_70 += actor->_76;
|
||||
actor->_8C &= ~4;
|
||||
} else if (((actor->_76 < 0 && RANDOM_F(1.f) > 0.85f) || (actor->_76 > 0 && RANDOM_F(1.f) > 0.15f)) &&
|
||||
(actor->_72 < 5) ||
|
||||
actor->_72 == 0) {
|
||||
xyz_t p2;
|
||||
if (actor->_76 < 0) {
|
||||
actor->_8C |= 2;
|
||||
actor->_8C |= 4;
|
||||
}
|
||||
actor->_76 = 1;
|
||||
actor->_78 = DEG2SHORT_ANGLE(2.5f);
|
||||
actor->_72 += actor->_76;
|
||||
actor->_70 += actor->_76;
|
||||
xyz_t_sub(&rail_pos[actor->_72], &actor->_1C, &p2);
|
||||
actor->_74 = atans_table(p2.z, p2.x);
|
||||
} else {
|
||||
xyz_t p;
|
||||
if (actor->_76 > 0) {
|
||||
actor->_8C |= 2;
|
||||
actor->_8C |= 4;
|
||||
}
|
||||
actor->_76 = -1;
|
||||
actor->_78 = DEG2SHORT_ANGLE(-2.5f);
|
||||
actor->_72 += actor->_76;
|
||||
actor->_70 += actor->_76;
|
||||
xyz_t_sub(&rail_pos[actor->_72], &actor->_1C, &p);
|
||||
actor->_74 = atans_table(p.z, p.x);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mi_dango_defence_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_7E < 0) {
|
||||
actor->_7E = 10;
|
||||
actor->_80 = 1;
|
||||
}
|
||||
actor->_6E = (s16)RANDOM_F(260.f) + 500;
|
||||
}
|
||||
|
||||
void mi_dango_defence(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
if (actor->_6E > 0 && actor->_7E < 0) {
|
||||
actor->_7C = 1;
|
||||
actor->_80 = 0;
|
||||
}
|
||||
if (actor->_6E < 0 && actor->_7C == 1 && actor->_7E < 0) {
|
||||
if (actor->_80 == 0) {
|
||||
actor->_80 = 1;
|
||||
actor->_7E = 10;
|
||||
} else {
|
||||
actor->_80 = 0;
|
||||
actor->_7C = 0;
|
||||
actor->_7A = 0;
|
||||
mi_dango_setupAction(actor, 0, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mi_dango_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) {
|
||||
static PRIV_INSECT_PROCESS init_proc[] = { mi_dango_move_init, mi_dango_defence_init };
|
||||
static PRIV_INSECT_PROCESS move_proc[] = { mi_dango_move, mi_dango_defence };
|
||||
actor->_04 = move_proc[r4];
|
||||
init_proc[r4](actor, game);
|
||||
}
|
||||
|
||||
void minsect_dango_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t p;
|
||||
actor->_70 = RANDOM_F(5.f);
|
||||
if (RANDOM2_F(1.f) > 0.f && actor->_70 < 5 || actor->_70 == 0) {
|
||||
actor->_76 = 1;
|
||||
actor->_78 = DEG2SHORT_ANGLE(2.5f);
|
||||
} else {
|
||||
actor->_76 = -1;
|
||||
actor->_78 = DEG2SHORT_ANGLE(-2.5f);
|
||||
}
|
||||
actor->_72 = actor->_70 + actor->_76;
|
||||
actor->_1C = rail_pos[actor->_70];
|
||||
xyz_t_sub(&rail_pos[actor->_72], &actor->_1C, &p);
|
||||
actor->_68.y = actor->_74 = atans_table(p.z, p.x);
|
||||
actor->_40 = RANDOM_F(0.1f) + 0.065f;
|
||||
actor->_6E = RANDOM_F(280.f) + 20.f;
|
||||
actor->_44 = ZeroVec;
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_58 = 1.0f;
|
||||
actor->_7C = 0;
|
||||
mi_dango_setupAction(actor, 0, game);
|
||||
actor->_7E = -1;
|
||||
}
|
||||
|
||||
void minsect_dango_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
mi_dango_defence_anime(actor, game);
|
||||
mi_dango_check_player(actor, game);
|
||||
actor->_7A--;
|
||||
if (actor->_7A < 0) {
|
||||
actor->_7A = 0;
|
||||
}
|
||||
if (actor->_7A > 900) {
|
||||
actor->_7A = 900;
|
||||
}
|
||||
if (actor->_7A > 200) {
|
||||
if (actor->_7C == 0 && actor->_80 == 0) {
|
||||
mi_dango_setupAction(actor, 1, game);
|
||||
} else if (actor->_6E < 10) {
|
||||
actor->_6E++;
|
||||
}
|
||||
}
|
||||
if (GETREG(NMREG, 1)) {
|
||||
mi_dango_setupAction(actor, 1, game);
|
||||
}
|
||||
actor->_04(actor, game);
|
||||
}
|
||||
|
||||
void minsect_dango_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE);
|
||||
if (actor->_7C) {
|
||||
Matrix_rotateXYZ(DEG2SHORT_ANGLE2(GETREG(NMREG, 5) + 20.f), DEG2SHORT_ANGLE2(GETREG(NMREG, 6)),
|
||||
DEG2SHORT_ANGLE2(GETREG(NMREG, 7)), TRUE);
|
||||
}
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
if (actor->_7C) {
|
||||
Matrix_scale(GETREG(NMREG, 2) * 0.01f + 1.2f, GETREG(NMREG, 3) * 0.01f + 1.2f, GETREG(NMREG, 4) * 0.01f + 1.2f,
|
||||
TRUE);
|
||||
}
|
||||
Matrix_scale(1.f, 1.f, actor->_58, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
if (actor->_7C) {
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][1]);
|
||||
|
||||
} else {
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
}
|
||||
minsect_draw_shadow(actor, game);
|
||||
CLOSE_DISP(game->graph);
|
||||
}
|
||||
@@ -0,0 +1,294 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
const xyz_t base_genji_pos = { 258.f, 62.f, 258.5f };
|
||||
|
||||
const xyz_t genji_mizu_pos = { 289.f, 25.f, 218.f };
|
||||
|
||||
void mi_genji_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position);
|
||||
if (dist > 160.f && actor->_90 != -1 && actor->_7A == 0) {
|
||||
actor->_7C = 0;
|
||||
mEnv_CancelReservedPointLight(actor->_90, (GAME_PLAY*)game);
|
||||
actor->_90 = -1;
|
||||
} else if (dist > 160.f && actor->_90 != -1 && actor->_7C != 0) {
|
||||
actor->_7C = 0;
|
||||
} else if (dist <= 160.f) {
|
||||
actor->_7C = 150;
|
||||
if (actor->_90 == -1) {
|
||||
xyz_t p = actor->_1C;
|
||||
p.z += 10.f;
|
||||
actor->_90 = mEnv_ReservePointLight((GAME_PLAY*)game, &p, 0x78, 0xff, 0xb4, actor->_7A);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void genji_light_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game, s16 r5) {
|
||||
actor->_8C |= 1;
|
||||
actor->_1C = genji_mizu_pos;
|
||||
actor->_58 = actor->_1C.y;
|
||||
actor->_10 = RANDOM_F(50.f) + 100.f;
|
||||
actor->_0C = 1.f;
|
||||
actor->_70 = (s16)RANDOM_F(180.f);
|
||||
actor->_5C_s16 = qrand();
|
||||
actor->_68.y = qrand();
|
||||
if (r5) {
|
||||
actor->_5E_s16 = qrand();
|
||||
} else {
|
||||
actor->_5E_s16 = DEG2SHORT_ANGLE(20);
|
||||
}
|
||||
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_44 = ZeroVec;
|
||||
actor->_40 = 0.75f;
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 60;
|
||||
actor->_78 = r5;
|
||||
}
|
||||
|
||||
void genji_light_make(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game, s16 i) {
|
||||
actor->_8C |= 1;
|
||||
actor->_1C = genji_mizu_pos;
|
||||
actor->_1C.x += RANDOM2_F(50.f);
|
||||
actor->_1C.z += RANDOM2_F(36.f);
|
||||
actor->_1C.y += 5.f;
|
||||
actor->_58 = actor->_1C.y;
|
||||
actor->_10 = RANDOM_F(50.f) + 100.f;
|
||||
actor->_0C = 0.f;
|
||||
actor->_70 = RANDOM_F(180.f);
|
||||
actor->_5C_s16 = qrand();
|
||||
actor->_68.y = qrand();
|
||||
actor->_5E_s16 = qrand();
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_44 = ZeroVec;
|
||||
actor->_40 = 0.75f;
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 60;
|
||||
actor->_78 = i;
|
||||
}
|
||||
|
||||
void genji_light_anime(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_70 < 30) {
|
||||
actor->_72 = 0;
|
||||
actor->_74 = 1;
|
||||
actor->_76 = 255.f - 255 * (actor->_70 / 30.f);
|
||||
} else if (actor->_70 < 60) {
|
||||
actor->_72 = 1;
|
||||
actor->_74 = 2;
|
||||
actor->_76 = 255.f - 255 * ((actor->_70 - 30.f) / 30.f);
|
||||
} else if (actor->_70 < 90) {
|
||||
actor->_72 = 2;
|
||||
actor->_74 = 3;
|
||||
actor->_76 = 255.f - 255 * ((actor->_70 - 60.f) / 30.f);
|
||||
} else if (actor->_70 < 120) {
|
||||
actor->_72 = 2;
|
||||
actor->_74 = 3;
|
||||
actor->_76 = 255 * ((actor->_70 - 90.f) / 30.f);
|
||||
} else if (actor->_70 < 150) {
|
||||
actor->_72 = 1;
|
||||
actor->_74 = 2;
|
||||
actor->_76 = 255 * ((actor->_70 - 120.f) / 30.f);
|
||||
} else if (actor->_70 < 180) {
|
||||
actor->_72 = 0;
|
||||
actor->_74 = 1;
|
||||
actor->_76 = 255 * ((actor->_70 - 150.f) / 30.f);
|
||||
} else {
|
||||
actor->_70 = 0;
|
||||
}
|
||||
actor->_70++;
|
||||
if (actor->_7C) {
|
||||
actor->_7A += 3;
|
||||
if (actor->_7A > actor->_7C) {
|
||||
actor->_7A = actor->_7C;
|
||||
}
|
||||
} else {
|
||||
actor->_7A -= 3;
|
||||
if (actor->_7A < 0) {
|
||||
actor->_7A = 0;
|
||||
}
|
||||
}
|
||||
mEnv_OperateReservedPointLight_Power(actor->_90, actor->_7A);
|
||||
}
|
||||
|
||||
void genji_light_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
s16 ang;
|
||||
f32 v;
|
||||
mEnv_OperateReservedPointLight_Position(actor->_90, &actor->_1C);
|
||||
actor->_6E--;
|
||||
if (actor->_8C & 0x100) {
|
||||
actor->_0C -= 0.0125f;
|
||||
if (actor->_0C < 0.0125f) {
|
||||
actor->_8C = 0;
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
actor->_0C += 0.0125f;
|
||||
if (actor->_0C > 1.f) {
|
||||
actor->_0C = 1.f;
|
||||
}
|
||||
}
|
||||
mID_insect_moveF(actor);
|
||||
ang = add_calc_short_angle2(&actor->_68.y, actor->_5E_s16, CALC_EASE2(0.1f), DEG2SHORT_ANGLE(0.5f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->_6E < 0) {
|
||||
actor->_5E_s16 = qrand();
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 60;
|
||||
} else if (actor->_8C & 8) {
|
||||
actor->_5E_s16 = DEG2SHORT_ANGLE2(RANDOM2_F(60.f));
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 60;
|
||||
} else if (actor->_8C & 0x10) {
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 60;
|
||||
actor->_5E_s16 = DEG2SHORT_ANGLE2(-180.f + RANDOM2_F(60.f));
|
||||
} else if (actor->_8C & 2) {
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 60;
|
||||
actor->_5E_s16 = DEG2SHORT_ANGLE2(90.f + RANDOM2_F(90.f));
|
||||
} else if (actor->_8C & 4) {
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 60;
|
||||
actor->_5E_s16 = DEG2SHORT_ANGLE2(-90.f + RANDOM2_F(90.f));
|
||||
}
|
||||
actor->_5C_s16 += (s16)DEG2SHORT_ANGLE2(RANDOM_F(5.f) + 1.5f);
|
||||
add_calc(&actor->_58, actor->_10, CALC_EASE(0.3f), 0.75f, 0.25f);
|
||||
actor->_1C.y = actor->_58 + 10.f * sin_s(actor->_5C_s16);
|
||||
minsect_tree_ObjCheck(actor);
|
||||
minsect_fly_BGCheck(actor, 360.0, 40.0);
|
||||
genji_light_anime(actor, game);
|
||||
}
|
||||
|
||||
void genji_light_draw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t p = actor->_1C;
|
||||
u8 a, b;
|
||||
if ((f32)__fabs(actor->_0C) < 0.008f) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (actor->_78 == 0) {
|
||||
p.x += -3.f * sin_s(-actor->_68.z);
|
||||
p.y += -3.f * cos_s(-actor->_68.z);
|
||||
p.z += 6.f + cos_s(actor->_7E);
|
||||
}
|
||||
a = actor->_76;
|
||||
b = (255 - actor->_76);
|
||||
a -= (u8)(a * (1.f - actor->_0C));
|
||||
b -= (u8)(b * (1.f - actor->_0C));
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
OPEN_POLY_XLU_DISP(game->graph);
|
||||
Matrix_translate(p.x, p.y, p.z, FALSE);
|
||||
Matrix_mult(&((GAME_PLAY*)game)->billboard_matrix, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0xff, 0x9b, a);
|
||||
gSPDisplayList(POLY_XLU_DISP++, m_genji_disp_tbl[actor->_72]);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0xff, 0x9b, b);
|
||||
gSPDisplayList(POLY_XLU_DISP++, m_genji_disp_tbl[actor->_74]);
|
||||
CLOSE_POLY_XLU_DISP(game->graph);
|
||||
minsect_draw_shadow(actor, game);
|
||||
}
|
||||
|
||||
void minsect_genji_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
genji_light_ct(actor, game, 0);
|
||||
actor->_1C = base_genji_pos;
|
||||
actor->_68.z = DEG2SHORT_ANGLE(-25);
|
||||
actor->_82 = (s16)RANDOM_F(60.f) + 600;
|
||||
}
|
||||
|
||||
void minsect_genji_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
MUSEUM_INSECT_PRIVATE_DATA* priv;
|
||||
BOOL found;
|
||||
s16 i;
|
||||
found = FALSE;
|
||||
priv = &MI_Control_Actor->_1894[0];
|
||||
mi_genji_check_player(actor, game);
|
||||
mEnv_OperateReservedPointLight_Position(actor->_90, &actor->_1C);
|
||||
actor->_8E = get_now_mind_flag(actor, game);
|
||||
genji_light_anime(actor, game);
|
||||
if (actor->_8E == 0) {
|
||||
actor->_0C -= 0.04f;
|
||||
if (actor->_0C < 0.04f) {
|
||||
actor->_0C = 0.f;
|
||||
if (actor->_90 != -1) {
|
||||
mEnv_CancelReservedPointLight(actor->_90, (GAME_PLAY*)game);
|
||||
actor->_90 = -1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
actor->_0C += 0.04f;
|
||||
if (actor->_0C > 1.0f) {
|
||||
actor->_0C = 1.0f;
|
||||
}
|
||||
}
|
||||
actor->_82--;
|
||||
if (actor->_82 < 0) {
|
||||
actor->_80 = DEG2SHORT_ANGLE(-7);
|
||||
actor->_82 = (int)RANDOM_F(60.f) + 600;
|
||||
if (RANDOM_F(1.f) > 0.5f) {
|
||||
actor->_5E_s16 = DEG2SHORT_ANGLE(RANDOM2_F(40.f));
|
||||
} else {
|
||||
actor->_5E_s16 = DEG2SHORT_ANGLE(20);
|
||||
}
|
||||
}
|
||||
if (actor->_7E == actor->_80) {
|
||||
actor->_80 = 0;
|
||||
}
|
||||
add_calc_short_angle2(&actor->_68.z, actor->_5E_s16, CALC_EASE2(0.4f),
|
||||
(s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 3) * 0.01f + 5.f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_7E, actor->_80, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f));
|
||||
for (i = 0 + 1; i < 6 + 1; i++, priv++) {
|
||||
if (priv->_8C & 1) {
|
||||
if ((GETREG(NMREG, 0xF) || (RANDOM_F(1.f) > 0.9f && actor->_6E < 0)) && (priv->_8C & 0x100) == 0) {
|
||||
|
||||
if (priv->_90 != -1) {
|
||||
mEnv_CancelReservedPointLight(priv->_90, (GAME_PLAY*)game);
|
||||
priv->_90 = -1;
|
||||
}
|
||||
priv->_8C |= 0x100;
|
||||
actor->_6E = RANDOM_F(1500.f);
|
||||
found = TRUE;
|
||||
} else if (actor->_8E == 0) {
|
||||
if (actor->_6E < 0 && (priv->_8C & 0x100) == 0) {
|
||||
if (priv->_90 != -1) {
|
||||
mEnv_CancelReservedPointLight(priv->_90, (GAME_PLAY*)game);
|
||||
priv->_90 = -1;
|
||||
}
|
||||
priv->_8C |= 0x100;
|
||||
actor->_6E = RANDOM_F(1500.f);
|
||||
}
|
||||
found = TRUE;
|
||||
}
|
||||
mi_genji_check_player(priv, game);
|
||||
genji_light_move(priv, game);
|
||||
priv->_14 = actor->_14;
|
||||
} else if (actor->_8E == 1) {
|
||||
if (actor->_6E < 0) {
|
||||
genji_light_make(priv, game, i);
|
||||
actor->_6E = RANDOM_F(300.f);
|
||||
}
|
||||
found = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (found == TRUE) {
|
||||
actor->_6E--;
|
||||
}
|
||||
}
|
||||
|
||||
extern Gfx act_m_mu_genji_modelT;
|
||||
|
||||
void minsect_genji_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
MUSEUM_INSECT_PRIVATE_DATA* priv = &MI_Control_Actor->_1894[0];
|
||||
int i;
|
||||
for (i = 0; i < 6; i++, priv++) {
|
||||
if (priv->_8C & 1) {
|
||||
genji_light_draw(priv, game);
|
||||
}
|
||||
}
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x + GETREG(NMREG, 0x10) * 0.01f, actor->_1C.y + GETREG(NMREG, 0x11) * 0.01f,
|
||||
actor->_1C.z + GETREG(NMREG, 0x12) * 0.01f, FALSE);
|
||||
Matrix_rotateXYZ(0, 0, actor->_68.z, TRUE);
|
||||
Matrix_rotateXYZ(actor->_7E, 0, 0, TRUE);
|
||||
Matrix_rotateXYZ(DEG2SHORT_ANGLE(110), 0, DEG2SHORT_ANGLE2(180), TRUE);
|
||||
Matrix_scale(0.01f, 0.01f, 0.01f, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, &act_m_mu_genji_modelT);
|
||||
CLOSE_DISP(game->graph);
|
||||
genji_light_draw(actor, game);
|
||||
}
|
||||
@@ -0,0 +1,217 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
// UNUSED
|
||||
void mi_goki_hane_anime() {
|
||||
}
|
||||
|
||||
void minsect_goki_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_1C.x = 280.f;
|
||||
actor->_1C.y = 40.f;
|
||||
actor->_1C.z = 320.f;
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_40 = 0.f;
|
||||
actor->_44 = ZeroVec;
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_68.y = (int)RANDOM_F(16.f) * (0x10000 / 16);
|
||||
actor->_6E = (s16)RANDOM_F(420.f) + 180;
|
||||
actor->_44.y = -0.225;
|
||||
actor->_58 = 1.f;
|
||||
actor->_74 = 0;
|
||||
actor->_72 = 0;
|
||||
actor->_78 = 0;
|
||||
}
|
||||
|
||||
BOOL goki_player_check(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
BOOL ret;
|
||||
if (player->actor_class.speed > 0 &&
|
||||
search_position_distanceXZ(&player->actor_class.world.position, &actor->_1C) < 40.f) {
|
||||
actor->_68.y = search_position_angleY(&player->actor_class.world.position, &actor->_1C);
|
||||
actor->_68.y += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(180.f));
|
||||
//! NOTE: huh?
|
||||
actor->_68.y &= 0xf000;
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void goki_wall_hit_angle_corect_sub(MUSEUM_INSECT_PRIVATE_DATA* actor, int _angle) {
|
||||
f32 r = RANDOM_F(1.f);
|
||||
s16 angle = _angle;
|
||||
if (actor->_68.y == (s16)(angle + DEG2SHORT_ANGLE2(180))) {
|
||||
if (r < 0.5f) {
|
||||
if (r < 0.25f) {
|
||||
actor->_68.y = angle - DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
actor->_68.y = angle + DEG2SHORT_ANGLE(90);
|
||||
}
|
||||
} else {
|
||||
actor->_68.y = _angle;
|
||||
actor->_68.y += (s16)((int)RANDOM2_F(8.f) * 4096);
|
||||
}
|
||||
} else if (actor->_68.y - angle > 0) {
|
||||
if (r < 0.5f) {
|
||||
actor->_68.y = angle + DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
actor->_68.y = angle - DEG2SHORT_ANGLE(90);
|
||||
actor->_68.y += (s16)((int)RANDOM_F(8.f) * 4096);
|
||||
}
|
||||
} else {
|
||||
if (r < 0.5f) {
|
||||
actor->_68.y = angle - DEG2SHORT_ANGLE(90);
|
||||
} else {
|
||||
actor->_68.y = angle + DEG2SHORT_ANGLE(90);
|
||||
actor->_68.y += (s16)((int)-RANDOM_F(8.f) * 4096);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void goki_wall_hit_angle_corect(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_8C & 2) {
|
||||
goki_wall_hit_angle_corect_sub(actor, DEG2SHORT_ANGLE(90));
|
||||
} else if (actor->_8C & 4) {
|
||||
goki_wall_hit_angle_corect_sub(actor, DEG2SHORT_ANGLE(-90));
|
||||
} else if (actor->_8C & 8) {
|
||||
goki_wall_hit_angle_corect_sub(actor, DEG2SHORT_ANGLE(0));
|
||||
} else if (actor->_8C & 0x10) {
|
||||
goki_wall_hit_angle_corect_sub(actor, (s16)DEG2SHORT_ANGLE2(180));
|
||||
}
|
||||
}
|
||||
|
||||
void goki_set_talk_info_init(ACTOR* actor) {
|
||||
int info = mMmd_InsectInfo(0x1c);
|
||||
int i;
|
||||
if (info < 1 || info > 4) {
|
||||
i = 0x2fa5;
|
||||
} else {
|
||||
if (info >= 1 && info <= 4) {
|
||||
mMsg_Set_free_str(mMsg_Get_base_window_p(), mMsg_FREE_STR0,
|
||||
common_data.save.save.private_data[info - 1].player_ID.player_name, 8);
|
||||
}
|
||||
i = 0x2fa4;
|
||||
}
|
||||
mDemo_Set_talk_window_color(&window_color);
|
||||
mDemo_Set_talk_display_name(0);
|
||||
mDemo_Set_msg_num(i);
|
||||
mDemo_Set_use_zoom_sound(TRUE);
|
||||
mDemo_Set_talk_turn(0);
|
||||
}
|
||||
|
||||
void goki_talk_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (mDemo_Check(8, &MI_Control_Actor->actor) == TRUE) {
|
||||
if (mDemo_Check_ListenAble() == FALSE) {
|
||||
mDemo_Set_ListenAble();
|
||||
mDemo_Set_camera(CAMERA2_PROCESS_NORMAL);
|
||||
mPlib_Set_able_hand_all_item_in_demo(FALSE);
|
||||
}
|
||||
} else {
|
||||
actor->_04 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void goki_talk_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
mDemo_Request(8, &MI_Control_Actor->actor, goki_set_talk_info_init);
|
||||
actor->_04 = goki_talk_process;
|
||||
}
|
||||
|
||||
void minsect_goki_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
xyz_t* target = &player->actor_class.world.position;
|
||||
if (actor->_04) {
|
||||
actor->_04(actor, game);
|
||||
}
|
||||
|
||||
if (actor->_72 == 0) {
|
||||
if (search_position_distanceXZ(&actor->_1C, target) < 20.f && player->actor_class.speed > 7.f &&
|
||||
RANDOM_F(1.f) > 0.4f) {
|
||||
actor->_72 = 1;
|
||||
actor->_40 = RANDOM_F(1.f) + 2.f + GETREG(NMREG, 3) * 0.01f;
|
||||
actor->_34.y = GETREG(NMREG, 2) * 0.01f + 3.25f;
|
||||
actor->_74 = 1;
|
||||
sAdo_OngenTrgStart(0x132, &actor->_1C);
|
||||
return;
|
||||
}
|
||||
|
||||
if (search_position_distanceXZ(&actor->_1C, target) < 15.f && player->actor_class.speed > 1.f) {
|
||||
if (RANDOM_F(1.f) > 0.9f) {
|
||||
actor->_72 = 1;
|
||||
actor->_40 = RANDOM_F(1.f) + 2.f + GETREG(NMREG, 3) * 0.01f;
|
||||
actor->_34.y = GETREG(NMREG, 2) * 0.01f + 3.25f;
|
||||
actor->_74 = 1;
|
||||
sAdo_OngenTrgStart(0x132, &actor->_1C);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player->actor_class.speed > 0.f && actor->_78 != 1) {
|
||||
goki_talk_process_init(actor, game);
|
||||
actor->_78 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_40 > 0.f) {
|
||||
goki_wall_hit_angle_corect(actor, game);
|
||||
mID_insect_moveF(actor);
|
||||
sAdo_OngenPos((u32)actor, 0xa8, &actor->_1C);
|
||||
if (actor->_6E-- < 0) {
|
||||
if (RANDOM_F(1.f) > 0.2f) {
|
||||
actor->_6E = (s16)RANDOM_F(420.f) + 180;
|
||||
actor->_40 = 0.f;
|
||||
} else if (goki_player_check(actor, game)) {
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 40;
|
||||
} else {
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 40;
|
||||
actor->_68.y = qrand() & 0xf000;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (actor->_6E-- < 0) {
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 40;
|
||||
actor->_40 = 3.5f;
|
||||
actor->_68.y = qrand() & 0xf000;
|
||||
} else if (goki_player_check(actor, game)) {
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 40;
|
||||
actor->_40 = 3.5f;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
actor->_68.x = -atans_table(actor->_40, actor->_34.y);
|
||||
if (actor->_34.y < 0.f && actor->_8C & 0x20) {
|
||||
actor->_68.x = 0;
|
||||
actor->_72 = 0;
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 40;
|
||||
actor->_40 = 3.5f;
|
||||
actor->_74 = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
mID_insect_moveF(actor);
|
||||
actor->_34.y += actor->_44.y;
|
||||
mi_batta_hane_anime(actor);
|
||||
|
||||
if (actor->_76 <= 0) {
|
||||
actor->_76 = 7;
|
||||
}
|
||||
}
|
||||
minsect_goki_BGCheck(actor);
|
||||
}
|
||||
|
||||
void minsect_goki_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
CLOSE_DISP(game->graph);
|
||||
if (actor->_74) {
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
OPEN_POLY_XLU_DISP(game->graph);
|
||||
Matrix_scale(actor->_58, 1.0f, 1.0f, TRUE);
|
||||
gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][1]);
|
||||
CLOSE_POLY_XLU_DISP(game->graph);
|
||||
}
|
||||
minsect_draw_shadow(actor, game);
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
xyz_t hachi_base_pos = { 165.5f, 78.5f, 482.5f };
|
||||
|
||||
void mi_hachi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
static f32 scaleX_table[7] = { 1.f, 0.85f, 1.15f, 0.85f, 1.15f, 0.85f, 1.15f };
|
||||
if (actor->_78 < 7) {
|
||||
if (chase_f(&actor->_5C, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_78], 0.115f) == 1) {
|
||||
actor->_78--;
|
||||
if (actor->_78 < 0) {
|
||||
actor->_78 = (s16)(RANDOM_F(3.0f) * 60.f) + 187;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
actor->_78--;
|
||||
}
|
||||
}
|
||||
|
||||
void mi_hachi_mitu_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E = 0;
|
||||
actor->_7A = 0;
|
||||
}
|
||||
|
||||
void mi_hachi_mitu(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
if (actor->_6E < 0) {
|
||||
if (actor->_7A > (s16)(((s16)RANDOM_F(10.f) << 1) + 0x10)) {
|
||||
mi_hachi_setupAction(actor, 0, game);
|
||||
return;
|
||||
}
|
||||
actor->_72 = -1820;
|
||||
actor->_58 = GETREG(NMREG, 8) * 0.01f;
|
||||
actor->_6E = 10;
|
||||
actor->_7A++;
|
||||
}
|
||||
if (actor->_70 == actor->_72) {
|
||||
actor->_72 = 0;
|
||||
actor->_58 = 0.0f;
|
||||
}
|
||||
if (GETREG(NMREG, 4)) {
|
||||
actor->_74 = DEG2SHORT_ANGLE(GETREG(NMREG, 4) * 0.01f);
|
||||
}
|
||||
if (GETREG(NMREG, 5)) {
|
||||
actor->_76 = DEG2SHORT_ANGLE(GETREG(NMREG, 5) * 0.01f);
|
||||
}
|
||||
if (GETREG(NMREG, 6)) {
|
||||
actor->_44.y = GETREG(NMREG, 6) * 0.01f;
|
||||
}
|
||||
}
|
||||
|
||||
void mi_hachi_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 40;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_6E *= 10;
|
||||
}
|
||||
}
|
||||
|
||||
void mi_hachi_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
if (actor->_6E < 0) {
|
||||
if (RANDOM_F(1.0f) > 0.9f || GETREG(NMREG, 0)) {
|
||||
if (RANDOM_F(1.0f) > 0.5f) {
|
||||
mi_hachi_setupAction(actor, 1, game);
|
||||
} else {
|
||||
mi_hachi_setupAction(actor, 2, game);
|
||||
}
|
||||
return;
|
||||
}
|
||||
actor->_72 = -1820;
|
||||
actor->_74 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(30.f));
|
||||
actor->_58 = GETREG(NMREG, 8) * 0.01f;
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 40;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_6E *= 10;
|
||||
}
|
||||
}
|
||||
if (actor->_70 == actor->_72) {
|
||||
actor->_72 = 0;
|
||||
actor->_58 = 0.0f;
|
||||
}
|
||||
if (GETREG(NMREG, 4)) {
|
||||
actor->_74 = DEG2SHORT_ANGLE(GETREG(NMREG, 4) * 0.01f);
|
||||
}
|
||||
if (GETREG(NMREG, 5)) {
|
||||
actor->_76 = DEG2SHORT_ANGLE(GETREG(NMREG, 5) * 0.01f);
|
||||
}
|
||||
if (GETREG(NMREG, 6)) {
|
||||
actor->_44.y = GETREG(NMREG, 6) * 0.01f;
|
||||
}
|
||||
}
|
||||
|
||||
void mi_hachi_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E = (s16)RANDOM_F(720.f) + 360;
|
||||
}
|
||||
|
||||
void mi_hachi_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
if (actor->_6E < 0) {
|
||||
if (RANDOM_F(1.0f) > 0.2f || GETREG(NMREG, 1)) {
|
||||
if (RANDOM_F(1.0f) > 0.5f) {
|
||||
mi_hachi_setupAction(actor, 0, game);
|
||||
return;
|
||||
} else {
|
||||
mi_hachi_setupAction(actor, 2, game);
|
||||
return;
|
||||
}
|
||||
}
|
||||
actor->_6E = (s16)RANDOM_F(720.f) + 360;
|
||||
}
|
||||
|
||||
if (!actor->_70) {
|
||||
f32 v;
|
||||
actor->_72 = -1820;
|
||||
if (RANDOM_F(1.0f) > 0.5f) {
|
||||
actor->_74 += (s16)DEG2SHORT_ANGLE2(RANDOM_F(30.f) + 10.f);
|
||||
} else {
|
||||
actor->_74 -= (s16)DEG2SHORT_ANGLE2(RANDOM_F(30.f) + 10.f);
|
||||
}
|
||||
actor->_58 = GETREG(NMREG, 8) * 0.01f + 1.0f;
|
||||
v = -0.5f * sin_s(actor->_74);
|
||||
actor->_76 += RAD2SHORT_ANGLE(v / 15.f);
|
||||
actor->_44.y += cos_s(actor->_74) * 0.5f;
|
||||
if (actor->_44.y > 10.f) {
|
||||
actor->_74 = DEG2SHORT_ANGLE(RANDOM2_F(60.f)) + DEG2SHORT_ANGLE(180);
|
||||
actor->_44.y = 10.f;
|
||||
} else if (actor->_44.y < -10.f) {
|
||||
actor->_74 = DEG2SHORT_ANGLE(RANDOM2_F(60.f));
|
||||
actor->_44.y = -10.f;
|
||||
}
|
||||
if (actor->_76 > DEG2SHORT_ANGLE(30)) {
|
||||
actor->_74 = DEG2SHORT_ANGLE(RANDOM2_F(60.f)) + DEG2SHORT_ANGLE(90);
|
||||
actor->_76 = DEG2SHORT_ANGLE(30);
|
||||
} else if (actor->_76 < DEG2SHORT_ANGLE(-30)) {
|
||||
actor->_74 = DEG2SHORT_ANGLE(RANDOM2_F(60.f)) - DEG2SHORT_ANGLE(90);
|
||||
actor->_76 = DEG2SHORT_ANGLE(-30);
|
||||
}
|
||||
} else if (actor->_70 == actor->_72) {
|
||||
actor->_72 = 0;
|
||||
actor->_58 = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void mi_hachi_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) {
|
||||
static PRIV_INSECT_PROCESS init_proc[3] = { mi_hachi_wait_init, mi_hachi_move_init, mi_hachi_mitu_init };
|
||||
static PRIV_INSECT_PROCESS move_proc[3] = { mi_hachi_wait, mi_hachi_move, mi_hachi_mitu };
|
||||
actor->_04 = move_proc[r4];
|
||||
init_proc[r4](actor, game);
|
||||
}
|
||||
|
||||
void minsect_hachi_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_1C = ZeroVec;
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_44 = actor->_1C;
|
||||
actor->_76 = 0;
|
||||
actor->_5C = 1.0f;
|
||||
actor->_78 = (s16)(RANDOM_F(5.0f) * 60.f) + 307;
|
||||
mi_hachi_setupAction(actor, 0, game);
|
||||
}
|
||||
|
||||
void minsect_hachi_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_8E = get_now_mind_flag(actor, game);
|
||||
mi_hachi_hane_anime(actor);
|
||||
actor->_04(actor, game);
|
||||
add_calc_short_angle2(&actor->_70, actor->_72, CALC_EASE2(GETREG(NMREG, 0x5e) * 0.01f + 0.8f),
|
||||
(s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 0x5F) * 0.01f + 4.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_68.z, actor->_74, CALC_EASE2(0.4f),
|
||||
(s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 3) * 0.01f + 5.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_68.y, actor->_76, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc(&actor->_40, actor->_58, CALC_EASE(0.1f), 0.25f, 0.05f);
|
||||
chase_xyz_t(&actor->_1C, &actor->_44, actor->_40);
|
||||
}
|
||||
|
||||
void minsect_hachi_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(hachi_base_pos.x, hachi_base_pos.y, hachi_base_pos.z, FALSE);
|
||||
Matrix_rotateXYZ(DEG2SHORT_ANGLE(-20), 0, 0, TRUE);
|
||||
Matrix_translate(0.0f, actor->_1C.y, 0.0f, TRUE);
|
||||
Matrix_translate(-GETREG(NMREG, 0x10) * 0.01f, -GETREG(NMREG, 0x11) * 0.01f, -15.f - GETREG(NMREG, 0xe) * 0.01f,
|
||||
TRUE);
|
||||
Matrix_rotateXYZ(0, actor->_68.y, 0, TRUE);
|
||||
Matrix_translate(GETREG(NMREG, 0x10) * 0.01f, GETREG(NMREG, 0x11) * 0.01f, 15.f + GETREG(NMREG, 0xe) * 0.01f, TRUE);
|
||||
Matrix_rotateXYZ(0, 0, actor->_68.z, TRUE);
|
||||
Matrix_rotateXYZ(actor->_70, 0, 0, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
Matrix_rotateXYZ(DEG2SHORT_ANGLE(90), 0, DEG2SHORT_ANGLE(-180), TRUE);
|
||||
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
CLOSE_DISP(game->graph);
|
||||
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
OPEN_POLY_XLU_DISP(game->graph);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 0xff, 0xff, 0xff, 0xff);
|
||||
Matrix_scale(actor->_5C, 1.0f, 1.0f, TRUE);
|
||||
gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][1]);
|
||||
CLOSE_POLY_XLU_DISP(game->graph);
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
xyz_t ari_rail_pos[3] = { { 177.f, 45.f, -14.f }, { 242.f, 45.f, 10.f }, { 307.f, 45.f, -14.f } };
|
||||
|
||||
void minsect_ka_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
static xyz_t init_pos = { 280.f, 40.f, 320.f };
|
||||
actor->_72 = qrand();
|
||||
actor->_58 = 80.f;
|
||||
actor->_1C = init_pos;
|
||||
actor->_1C.x += RANDOM2_F(280.f);
|
||||
actor->_1C.y = actor->_58 + sin_s(actor->_72) * 10.f;
|
||||
actor->_1C.z += RANDOM2_F(240.f);
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_40 = 0.7f;
|
||||
actor->_0C = 1.f;
|
||||
actor->_10 = 0.5f;
|
||||
actor->_70 = qrand();
|
||||
actor->_68.y = qrand();
|
||||
actor->_44 = ZeroVec;
|
||||
actor->_74 = 0;
|
||||
actor->_6E = (s16)RANDOM_F(1200.f) + 600;
|
||||
}
|
||||
|
||||
void minsect_ka_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
xyz_t p = player->actor_class.world.position;
|
||||
MUSEUM_INSECT_ACTOR* priv;
|
||||
f32 dist = search_position_distanceXZ(&actor->_1C, &p);
|
||||
actor->_6E--;
|
||||
add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
if (actor->_1C.z > 540.f) {
|
||||
actor->_70 = search_position_angleY(&actor->_1C, &p);
|
||||
} else if (actor->_1C.z < 60.f) {
|
||||
actor->_70 = search_position_angleY(&actor->_1C, &p);
|
||||
} else if (actor->_1C.x > 340.f) {
|
||||
actor->_70 = search_position_angleY(&actor->_1C, &p);
|
||||
} else if (actor->_1C.x < 60.f) {
|
||||
actor->_70 = search_position_angleY(&actor->_1C, &p);
|
||||
}
|
||||
|
||||
if (actor->_74 == 0) {
|
||||
if (actor->_6E < 0) {
|
||||
if (dist < 60.f) {
|
||||
actor->_70 = search_position_angleY(&actor->_1C, &p);
|
||||
actor->_6E = (s16)RANDOM_F(1200.f) + 600;
|
||||
actor->_74 = 1;
|
||||
} else {
|
||||
actor->_70 = qrand();
|
||||
actor->_6E = (s16)RANDOM_F(1200.f) + 600;
|
||||
}
|
||||
}
|
||||
} else if (actor->_74 == 1) {
|
||||
priv = MI_Control_Actor;
|
||||
actor->_70 = search_position_angleY(&actor->_1C, &p);
|
||||
if (dist < 20.f) {
|
||||
if (mPlib_Check_stung_mosquito(MI_Control_Actor)) {
|
||||
actor->_74 = 2;
|
||||
} else if (mDemo_Check(8, &priv->actor) == 0) {
|
||||
sAdo_OngenTrgStart(0x6a, &actor->_1C);
|
||||
mPlib_request_main_stung_mosquito_type1(MI_Control_Actor);
|
||||
}
|
||||
} else if (actor->_6E < 0) {
|
||||
if (dist > 60.f) {
|
||||
actor->_6E = (s16)RANDOM_F(1200.f) + 600;
|
||||
} else {
|
||||
actor->_70 = qrand();
|
||||
actor->_74 = 0;
|
||||
}
|
||||
}
|
||||
if (actor->_6E < 0) {
|
||||
actor->_6E = (s16)RANDOM_F(1200.f) + 600;
|
||||
}
|
||||
} else if (actor->_74 == 2 && actor->_6E < 0) {
|
||||
actor->_70 = qrand();
|
||||
actor->_6E = (s16)RANDOM_F(1200.f) + 600;
|
||||
}
|
||||
if (dist < 300.f) {
|
||||
sAdo_OngenPos((u32)actor, 0xcf, &actor->_1C);
|
||||
}
|
||||
mID_insect_moveF(actor);
|
||||
actor->_0C += actor->_10;
|
||||
if (minsect_mdl[actor->_00][(int)actor->_0C] == 0) {
|
||||
actor->_0C = 1.f;
|
||||
}
|
||||
actor->_72 += DEG2SHORT_ANGLE(2.5f);
|
||||
actor->_1C.y = actor->_58 + sin_s(actor->_72) * 10.f;
|
||||
minsect_tree_ObjCheck(actor);
|
||||
minsect_fly_BGCheck(actor, 600.0, 40.0);
|
||||
if (actor->_8C & 0x10) {
|
||||
actor->_1C.z = 600.f;
|
||||
} else if (actor->_8C & 8) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(RANDOM2_F(90.f));
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_ka_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
CLOSE_DISP(game->graph);
|
||||
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
OPEN_POLY_XLU_DISP(game->graph);
|
||||
gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][(int)actor->_0C]);
|
||||
CLOSE_POLY_XLU_DISP(game->graph);
|
||||
minsect_draw_shadow(actor, game);
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
void minsect_kabuto_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
switch (actor->_00) {
|
||||
case 8:
|
||||
actor->_70 = 0;
|
||||
break;
|
||||
case 0x13:
|
||||
case 0x14:
|
||||
case 0x15:
|
||||
case 0x16:
|
||||
case 0x17:
|
||||
actor->_70 = actor->_00 - 0x12;
|
||||
break;
|
||||
case 0x1e:
|
||||
case 0x1f:
|
||||
default:
|
||||
actor->_70 = actor->_00 - 0x17;
|
||||
break;
|
||||
}
|
||||
actor->_1C = kabuto_base_pos[actor->_70];
|
||||
actor->_44 = actor->_1C;
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_40 = 0.05f;
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_72 = qrand();
|
||||
actor->_6E = (s16)RANDOM_F(120) + 60;
|
||||
actor->_78 = (s16)RANDOM_F(60) + 60;
|
||||
actor->_7A = 0;
|
||||
}
|
||||
|
||||
void minsect_kabuto_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_8E = get_now_mind_flag(actor, game);
|
||||
actor->_6E--;
|
||||
if (actor->_8C & 2) {
|
||||
actor->_1C.y += actor->_40 * (cos_s(actor->_72) * 0.5f + 0.5f);
|
||||
actor->_72 += ((s16)DEG2SHORT_ANGLE(GETREG(TAKREG, 0x14) + 30.0f) >> 1);
|
||||
actor->_68.z = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x15) * 0.1f + 2.0f) * sin_s(actor->_72);
|
||||
if (sin_s(actor->_72) <= 0.1 && sin_s(actor->_72) >= -0.1) {
|
||||
if (actor->_76) {
|
||||
actor->_76 = 0;
|
||||
} else {
|
||||
actor->_76 = DEG2SHORT_ANGLE(-7);
|
||||
}
|
||||
}
|
||||
if (actor->_6E < 0) {
|
||||
actor->_40 = 0.0f;
|
||||
actor->_8C &= ~2;
|
||||
actor->_76 = DEG2SHORT_ANGLE(-7);
|
||||
actor->_6E = (s16)RANDOM_F(300.f) + 60;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_6E *= 10;
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_1C.y > actor->_44.y + 2.0f) {
|
||||
actor->_1C.y = actor->_44.y + 2.0f;
|
||||
actor->_8C &= ~2;
|
||||
actor->_8C |= 8;
|
||||
actor->_76 = DEG2SHORT_ANGLE(-7);
|
||||
actor->_6E = (s16)RANDOM_F(300.f) + 60;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_6E *= 10;
|
||||
}
|
||||
} else if (actor->_1C.y < actor->_44.y - 2.0f) {
|
||||
actor->_1C.y = actor->_44.y - 2.0f;
|
||||
actor->_8C &= ~2;
|
||||
actor->_8C |= 4;
|
||||
actor->_76 = DEG2SHORT_ANGLE(-7);
|
||||
actor->_6E = (s16)RANDOM_F(300.f) + 60;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_6E *= 10;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (actor->_6E < 0) {
|
||||
if (actor->_8C & 4) {
|
||||
actor->_40 = 0.05f;
|
||||
} else if (actor->_8C & 8 || RANDOM_F(1.0f) > 0.5f) {
|
||||
actor->_40 = -0.05f;
|
||||
} else {
|
||||
actor->_40 = 0.05f;
|
||||
}
|
||||
actor->_8C &= ~0xc;
|
||||
actor->_76 = DEG2SHORT_ANGLE(-7);
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 60;
|
||||
actor->_8C |= 2;
|
||||
}
|
||||
actor->_78--;
|
||||
if (actor->_78 < 0) {
|
||||
actor->_7A++;
|
||||
actor->_76 = DEG2SHORT_ANGLE(-7);
|
||||
actor->_78 = (s16)RANDOM_F(60.f) + 60;
|
||||
actor->_7C = DEG2SHORT_ANGLE(RANDOM2_F(30.f));
|
||||
if (actor->_7A > (s16)(1.0f + RANDOM_F(3.0f))) {
|
||||
actor->_7A = 0;
|
||||
actor->_78 = (s16)((s16)RANDOM_F(60.0f) + 60) * 5;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_78 *= 2;
|
||||
}
|
||||
actor->_7C = 0;
|
||||
}
|
||||
}
|
||||
if (actor->_74 == actor->_76) {
|
||||
actor->_76 = 0;
|
||||
}
|
||||
add_calc_short_angle2(&actor->_68.z, actor->_7C, CALC_EASE2(0.4f),
|
||||
(s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 3) * 0.01f + 5.0f) >> 1) >> 1,
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
add_calc_short_angle2(&actor->_74, actor->_76, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
|
||||
void minsect_kabuto_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE);
|
||||
Matrix_rotateXYZ(0, 0, actor->_68.z, TRUE);
|
||||
Matrix_rotateXYZ(actor->_74, 0, 0, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
Matrix_rotateXYZ(DEG2SHORT_ANGLE(90), 0, DEG2SHORT_ANGLE2(180), TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
CLOSE_DISP(game->graph);
|
||||
|
||||
if (actor->_00 == 8) {
|
||||
OPEN_POLY_XLU_DISP(game->graph);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 0xff, 0xff, 0xff, 0xff);
|
||||
gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][1]);
|
||||
CLOSE_POLY_XLU_DISP(game->graph);
|
||||
}
|
||||
}
|
||||
|
||||
xyz_t kabuto_base_pos[9] = { { 165.5f, 78.5f, 482.5f }, { 389.5f, 66.5f, -14.5f }, { 241.5f, 67.0f, -15.5f },
|
||||
{ 165.0f, 81.5f, 0.5f }, { 89.0f, 64.0f, -15.5f }, { 466.0f, 84.0f, 1.5f },
|
||||
{ 171.0f, 64.5f, 5.5f }, { 319.0f, 81.0f, 1.0f }, { 313.0f, 63.0f, 5.5f } };
|
||||
@@ -0,0 +1,285 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
const xyz_t kumo_base_pos = { 330.f, 64.5f, 229.f };
|
||||
|
||||
const xyz_t kumo_top_pos = { 330.f, 90.f, 229.f };
|
||||
|
||||
const xyz_t kumo_bottom_pos = { 330.f, 54.f, 229.f };
|
||||
|
||||
void minsect_kumo_hide_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_40 = 0.165f;
|
||||
}
|
||||
|
||||
void minsect_kumo_hide(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_1C.y += actor->_40;
|
||||
if (actor->_1C.y > kumo_top_pos.y + 10.f) {
|
||||
actor->_1C.y = kumo_top_pos.y + 10.f;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_kumo_up_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_40 = 0.165f;
|
||||
actor->_6E = (s16)RANDOM_F(20.f) + 50;
|
||||
actor->_44.x = 10.f;
|
||||
actor->_7E = actor->_78;
|
||||
}
|
||||
|
||||
void minsect_kumo_up(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
actor->_1C.y += actor->_40;
|
||||
if (actor->_1C.y > kumo_top_pos.y - 10.f) {
|
||||
actor->_1C.y = kumo_top_pos.y - 10.f;
|
||||
minsect_kumo_setupAction(actor, 0, game);
|
||||
} else if (actor->_6E < 0) {
|
||||
actor->_6E = (s16)RANDOM_F(20.f) + 50;
|
||||
actor->_40 = 0.165f;
|
||||
actor->_7E = actor->_78;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_kumo_down_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_44.x = 60.f;
|
||||
actor->_7E = DEG2SHORT_ANGLE(90);
|
||||
if (GETREG(NMREG, 0x14)) {
|
||||
actor->_60 = GETREG(NMREG, 0x14) * 0.01f;
|
||||
} else {
|
||||
actor->_60 = 1.8f;
|
||||
}
|
||||
actor->_40 = GETREG(NMREG, 0x13) * 0.01f + 4.0f;
|
||||
actor->_82 = 0;
|
||||
}
|
||||
|
||||
void minsect_kumo_down(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (add_calc(&actor->_40, 0.f, CALC_EASE(GETREG(NMREG, 0x15) * 0.01f + 0.25f),
|
||||
(GETREG(NMREG, 0x16) * 0.01f + 3.0f) * 0.5f, 0.05f) < (GETREG(NMREG, 0x1a) * 0.01f + 0.1f)) {
|
||||
if (!add_calc(&actor->_60, 0.f, CALC_EASE(GETREG(NMREG, 0x17) * 0.01f + 0.5f),
|
||||
(GETREG(NMREG, 0x18) * 0.01f + 0.08f) * 0.5f, 0.005f)) {
|
||||
actor->_44.x = 40.f;
|
||||
minsect_kumo_setupAction(actor, 0, game);
|
||||
return;
|
||||
}
|
||||
actor->_1C.y -= actor->_40;
|
||||
}
|
||||
if (actor->_1C.y < kumo_bottom_pos.y) {
|
||||
actor->_1C.y = kumo_bottom_pos.y;
|
||||
} else if (actor->_1C.y > kumo_top_pos.y - 10.f) {
|
||||
actor->_1C.y = kumo_top_pos.y - 10.f;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_kumo_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
return;
|
||||
}
|
||||
|
||||
void minsect_kumo_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
if (actor->_8C & 2) {
|
||||
if (actor->_40 < 0.f) {
|
||||
actor->_1C.y += actor->_40;
|
||||
if (actor->_1C.y < kumo_bottom_pos.y + 10.f) {
|
||||
actor->_8C |= 8;
|
||||
actor->_8C &= ~2;
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 40;
|
||||
}
|
||||
} else if (actor->_8C & 0x10) {
|
||||
actor->_1C.y += actor->_40;
|
||||
if (actor->_1C.y > kumo_top_pos.y - 10.f) {
|
||||
actor->_1C.y = kumo_top_pos.y - 10.f;
|
||||
actor->_8C |= 4;
|
||||
actor->_8C &= ~2;
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 40;
|
||||
}
|
||||
if (actor->_6E % 12 == 0) {
|
||||
actor->_8C &= ~0x10;
|
||||
}
|
||||
} else if (actor->_6E % 12 == 0) {
|
||||
actor->_8C |= 0x10;
|
||||
}
|
||||
if (actor->_6E < 0) {
|
||||
actor->_8C &= ~2;
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 40;
|
||||
}
|
||||
} else if (actor->_6E < 0) {
|
||||
if (actor->_8C & 4) {
|
||||
if (RANDOM_F(1.f) > 0.5f) {
|
||||
minsect_kumo_setupAction(actor, 3, game);
|
||||
return;
|
||||
}
|
||||
actor->_6E = (s16)RANDOM_F(20.f) + 40;
|
||||
actor->_40 = -0.45f;
|
||||
} else if (actor->_8C & 8 || RANDOM_F(1.f) > 0.5f) {
|
||||
if (RANDOM_F(1.f) > 0.9f) {
|
||||
minsect_kumo_setupAction(actor, 2, game);
|
||||
return;
|
||||
}
|
||||
actor->_6E = (s16)RANDOM_F(20.f) + 50;
|
||||
actor->_40 = 0.165f;
|
||||
actor->_8C |= 0x10;
|
||||
actor->_44.x += 5.f;
|
||||
actor->_7E = actor->_78;
|
||||
} else {
|
||||
if (RANDOM_F(1.f) > 0.7f) {
|
||||
minsect_kumo_setupAction(actor, 0, game);
|
||||
} else {
|
||||
actor->_6E = (s16)RANDOM_F(20.f) + 40;
|
||||
actor->_40 = -0.45f;
|
||||
}
|
||||
}
|
||||
actor->_8C &= ~0xc;
|
||||
actor->_8C |= 2;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_kumo_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position);
|
||||
if (dist > 200.f) {
|
||||
minsect_kumo_setupAction(actor, 4, game);
|
||||
} else if (dist < 100.f && actor->_04 == minsect_kumo_hide) {
|
||||
minsect_kumo_setupAction(actor, 3, game);
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_kumo_furiko(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
f32 v, v2;
|
||||
if (actor->_44.x) {
|
||||
add_calc(&actor->_5C, actor->_44.x, CALC_EASE(0.7f), 0.75f, 0.05f);
|
||||
} else {
|
||||
add_calc(&actor->_5C, actor->_44.x, CALC_EASE(0.3f), 0.25f, 0.05f);
|
||||
}
|
||||
if (actor->_5C == actor->_44.x) {
|
||||
actor->_44.x = 0.f;
|
||||
}
|
||||
|
||||
add_calc_short_angle2(&actor->_7C, actor->_7E, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(1.25f), DEG2SHORT_ANGLE(0.25f));
|
||||
if (GETREG(NMREG, 0x10)) {
|
||||
v = GETREG(NMREG, 0x10) * 0.01f;
|
||||
} else {
|
||||
v = 0.2f;
|
||||
}
|
||||
if (GETREG(NMREG, 0x11)) {
|
||||
v2 = GETREG(NMREG, 0x11) * 0.01f;
|
||||
} else {
|
||||
v2 = 1.f;
|
||||
}
|
||||
actor->_58 = MAX(1.f, kumo_top_pos.y - actor->_1C.y);
|
||||
actor->_70 += (s16)DEG2SHORT_ANGLE2(((v2 * actor->_5C + 35.f) / actor->_58) * 1.8f * 0.5f);
|
||||
actor->_68.x = sin_s(actor->_70) * DEG2SHORT_ANGLE2(v * actor->_5C);
|
||||
}
|
||||
|
||||
void minsect_kumo_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 40;
|
||||
}
|
||||
|
||||
void minsect_kumo_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
if (actor->_6E < 0) {
|
||||
if (actor->_1C.y >= kumo_top_pos.y - 2.f && (RANDOM_F(1.f) > 0.2f || GETREG(NMREG, 0x14))) {
|
||||
minsect_kumo_setupAction(actor, 3, game);
|
||||
} else if (RANDOM_F(1.f) > 0.5f) {
|
||||
minsect_kumo_setupAction(actor, 1, game);
|
||||
} else {
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 40;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_kumo_hineri(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_58 = MAX(1.f, kumo_top_pos.y - actor->_1C.y);
|
||||
actor->_72 += (s16)DEG2SHORT_ANGLE2(35.f / actor->_58 * 1.2f * 0.5f);
|
||||
actor->_78 = 5461.f * sin_s(actor->_72);
|
||||
}
|
||||
|
||||
void minsect_kumo_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) {
|
||||
static PRIV_INSECT_PROCESS init_proc[] = { minsect_kumo_wait_init, minsect_kumo_move_init, minsect_kumo_up_init,
|
||||
minsect_kumo_down_init, minsect_kumo_hide_init };
|
||||
static PRIV_INSECT_PROCESS move_proc[] = { minsect_kumo_wait, minsect_kumo_move, minsect_kumo_up, minsect_kumo_down,
|
||||
minsect_kumo_hide };
|
||||
// unused, but has to be here because of data pooling
|
||||
static f32 scaleX_table[] = { 1.15, 0.5f, 1.15f, 0.5f, 1.15f, 0.5f, 1.15f };
|
||||
actor->_04 = move_proc[r4];
|
||||
init_proc[r4](actor, game);
|
||||
}
|
||||
|
||||
void minsect_kumo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_1C = kumo_base_pos;
|
||||
actor->_34.x = 0.01f;
|
||||
actor->_34.y = 0.01f;
|
||||
actor->_34.z = 0.01f;
|
||||
actor->_5C = 0.f;
|
||||
actor->_44.x = 0.f;
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 40;
|
||||
actor->_72 = qrand();
|
||||
actor->_76 = (s16)(RANDOM_F(5.f) * 60.f) + 307;
|
||||
actor->_7A = (s16)RANDOM_F(360.f) + 40;
|
||||
minsect_kumo_setupAction(actor, 4, game);
|
||||
}
|
||||
|
||||
void minsect_kumo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
minsect_kumo_check_player(actor, game);
|
||||
minsect_kumo_furiko(actor, game);
|
||||
if (actor->_04 != minsect_kumo_hide) {
|
||||
minsect_kumo_hineri(actor, game);
|
||||
}
|
||||
if (GETREG(NMREG, 1) && (play->game_frame & 7) == 0) {
|
||||
xyz_t p = actor->_1C;
|
||||
p = actor->_1C;
|
||||
p.y += GETREG(NMREG, 5) * 0.01f;
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(101, p, 1, 0, game, 0x5843, 2, 0);
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(101, actor->_1C, 1, 0, game, 0x5843, 1, 0);
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(101, kumo_base_pos, 1, 0, game, 0x5843, 3, 0);
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(101, kumo_top_pos, 1, 0, game, 0x5843, 1, 0);
|
||||
}
|
||||
actor->_04(actor, game);
|
||||
}
|
||||
|
||||
void minsect_kumo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y + actor->_58, actor->_1C.z, FALSE);
|
||||
Matrix_rotateXYZ(0, actor->_7C, 0, TRUE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
Matrix_rotateXYZ(0, -actor->_7C, 0, TRUE);
|
||||
Matrix_translate(0.f, -actor->_58, 0.f, TRUE);
|
||||
Matrix_rotateXYZ(0, actor->_78, 0, TRUE);
|
||||
Matrix_translate(0.f, 0.f, -2.5f, TRUE);
|
||||
Matrix_rotateXYZ(DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE2(180), 0, TRUE);
|
||||
Matrix_scale(actor->_34.x, actor->_34.y, actor->_34.z, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff);
|
||||
if (actor->_80) {
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
} else {
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][1]);
|
||||
}
|
||||
CLOSE_DISP(game->graph);
|
||||
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y + actor->_58, actor->_1C.z + (GETREG(NMREG, 0x5F)) * 0.01f, FALSE);
|
||||
Matrix_rotateXYZ(0, actor->_7C, 0, TRUE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
Matrix_rotateXYZ(0, -actor->_7C, 0, TRUE);
|
||||
Matrix_translate(0.0f, -actor->_58, 0.0f, TRUE);
|
||||
Matrix_rotateXYZ(0, actor->_78, 0, TRUE);
|
||||
if (GETREG(NMREG, 5)) {
|
||||
Matrix_translate(GETREG(NMREG, 4) * 0.001f, GETREG(NMREG, 5) * 0.01f, GETREG(NMREG, 6) * 0.01f, TRUE);
|
||||
} else {
|
||||
Matrix_translate(0.0f, 6.5f, 0.f, TRUE);
|
||||
}
|
||||
|
||||
if (GETREG(NMREG, 7)) {
|
||||
Matrix_scale(1.5f, actor->_58 / ((kumo_top_pos.y - kumo_base_pos.y) - (GETREG(NMREG, 7) * 0.01f)), 1.f, TRUE);
|
||||
} else {
|
||||
Matrix_scale(2.f, actor->_58 / ((kumo_top_pos.y - kumo_base_pos.y) - 10.f), 1.f, TRUE);
|
||||
}
|
||||
Matrix_translate(0.f, -8.7f + GETREG(NMREG, 0x5d) * 0.01f, 1.f + GETREG(NMREG, 0x5e) * 0.01f, TRUE);
|
||||
Matrix_rotateXYZ(DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE2(180), 0, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][2]);
|
||||
minsect_draw_shadow(actor, game);
|
||||
CLOSE_DISP(game->graph);
|
||||
}
|
||||
@@ -0,0 +1,322 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_act_m_hirata_b, cKF_bs_r_act_m_nokogiri_b, cKF_bs_r_act_m_miyama_b,
|
||||
cKF_bs_r_act_m_okuwa_b;
|
||||
|
||||
cKF_Skeleton_R_c* kuwagata_model_tbl[] = { &cKF_bs_r_act_m_hirata_b, &cKF_bs_r_act_m_nokogiri_b,
|
||||
&cKF_bs_r_act_m_miyama_b, &cKF_bs_r_act_m_okuwa_b };
|
||||
|
||||
extern cKF_Animation_R_c cKF_ba_r_act_m_hirata_b, cKF_ba_r_act_m_nokogiri_b, cKF_ba_r_act_m_miyama_b,
|
||||
cKF_ba_r_act_m_okuwa_b;
|
||||
|
||||
cKF_Animation_R_c* kuwagata_anim_tbl[] = { &cKF_ba_r_act_m_hirata_b, &cKF_ba_r_act_m_nokogiri_b,
|
||||
&cKF_ba_r_act_m_miyama_b, &cKF_ba_r_act_m_okuwa_b };
|
||||
|
||||
xyz_t kuwagata_base_pos[4] = {
|
||||
{ 166.f, 80.5f, 0.5f }, { 169.f, 66.5f, 5.0f }, { 318.f, 80.0f, 1.0f }, { 315.f, 65.0f, 5.5f }
|
||||
};
|
||||
|
||||
void mi_kuwagata_rensa_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_7A = 0;
|
||||
}
|
||||
void mi_kuwagata_rensa(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
add_calc_short_angle2(&actor->_78, actor->_7A, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
|
||||
void mi_kuwagata_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E = (s16)RANDOM_F(200.f) + 40;
|
||||
cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->_08->_00, actor->_08->_2AC, NULL, 0.5f, 0.0f);
|
||||
}
|
||||
|
||||
void mi_kuwagata_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
if (actor->_6E < 0) {
|
||||
actor->_7A = DEG2SHORT_ANGLE(-7);
|
||||
actor->_6E = (s16)RANDOM_F(200.F) + 40;
|
||||
if (RANDOM_F(1.0f) > 0.7f || GETREG(NMREG, 1)) {
|
||||
mi_kuwagata_setupAction(actor, 3, game);
|
||||
return;
|
||||
} else if (RANDOM_F(1.0f) > 0.7f || GETREG(NMREG, 0)) {
|
||||
mi_kuwagata_setupAction(actor, 2, game);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_78 == actor->_7A) {
|
||||
actor->_7A = 0;
|
||||
}
|
||||
actor->_76--;
|
||||
if (actor->_76 < 0) {
|
||||
cKF_SkeletonInfo_R_play(&actor->_08->_00);
|
||||
if ((int)actor->_08->_00.frame_control.current_frame == 14) {
|
||||
actor->_76 = (s16)RANDOM_F(356.F) + 4;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_76 *= 10;
|
||||
}
|
||||
} else if ((int)actor->_08->_00.frame_control.current_frame == 1) {
|
||||
actor->_76 = (s16)RANDOM_F(1760.f) + 40;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_76 *= 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
add_calc_short_angle2(&actor->_78, actor->_7A, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f), DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
|
||||
void mi_kuwagata_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
return;
|
||||
}
|
||||
|
||||
void mi_kuwagata_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
return;
|
||||
}
|
||||
|
||||
void mi_kuwagata_battle_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_8C & 4) {
|
||||
actor->_40 = 0.05f;
|
||||
} else if (actor->_8C & 8) {
|
||||
actor->_40 = -0.05f;
|
||||
}
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 60;
|
||||
actor->_7C = 0x10;
|
||||
}
|
||||
|
||||
void mi_kuwagata_battle(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
MUSEUM_INSECT_PRIVATE_DATA* priv;
|
||||
f32 v;
|
||||
switch (actor->_00) {
|
||||
case 0x15:
|
||||
priv = &MI_Control_Actor->privInsects[0x1d];
|
||||
break;
|
||||
case 0x1d:
|
||||
priv = &MI_Control_Actor->privInsects[0x15];
|
||||
break;
|
||||
case 0x1e:
|
||||
priv = &MI_Control_Actor->privInsects[0x1f];
|
||||
break;
|
||||
case 0x1f:
|
||||
priv = &MI_Control_Actor->privInsects[0x1e];
|
||||
break;
|
||||
}
|
||||
if (actor->_7C == 0) {
|
||||
actor->_7C = -1;
|
||||
priv->_8C &= ~0xc;
|
||||
if (actor->_40 >= 0.0f) {
|
||||
priv->_8C |= 4;
|
||||
} else if (actor->_40 < 0.0f) {
|
||||
priv->_8C |= 8;
|
||||
}
|
||||
|
||||
if (priv->_04 != mi_kuwagata_battle) {
|
||||
mi_kuwagata_setupAction(priv, 3, game);
|
||||
}
|
||||
}
|
||||
actor->_6E--;
|
||||
actor->_7C--;
|
||||
actor->_72 += DEG2SHORT_ANGLE(GETREG(TAKREG, 0x14) + 30.f) >> 1;
|
||||
actor->_68.z = DEG2SHORT_ANGLE2(GETREG(TAKREG, 0x15) * 0.1f + 2.0f) * sin_s(actor->_72);
|
||||
v = actor->_1C.y - kuwagata_base_pos[actor->_70].y;
|
||||
if (sin_s(actor->_72) <= 0.1 && sin_s(actor->_72) >= -0.1) {
|
||||
if (actor->_7A) {
|
||||
actor->_7A = 0;
|
||||
} else {
|
||||
actor->_7A = DEG2SHORT_ANGLE(-7);
|
||||
}
|
||||
}
|
||||
actor->_1C.y += actor->_40 * (cos_s(actor->_72) * 0.5f + 0.5f);
|
||||
actor->_1C.x = kuwagata_base_pos[actor->_70].x + (v * sin_s(actor->_74));
|
||||
if (actor->_1C.y > actor->_44.y + 2.0f) {
|
||||
actor->_1C.y = actor->_44.y + 2.0f;
|
||||
actor->_8C &= ~0xc;
|
||||
actor->_8C |= 0x8;
|
||||
mi_kuwagata_setupAction(actor, 0, game);
|
||||
priv->_6E = 0x10;
|
||||
}
|
||||
|
||||
if (actor->_1C.y < actor->_44.y - 2.0f) {
|
||||
actor->_1C.y = actor->_44.y - 2.0f;
|
||||
actor->_8C &= ~0xc;
|
||||
actor->_8C |= 0x4;
|
||||
mi_kuwagata_setupAction(actor, 0, game);
|
||||
priv->_6E = 0x10;
|
||||
}
|
||||
if (actor->_6E < 0) {
|
||||
mi_kuwagata_setupAction(actor, 0, game);
|
||||
priv->_6E = 0x10;
|
||||
} else {
|
||||
actor->_76--;
|
||||
if (actor->_76 < 0) {
|
||||
cKF_SkeletonInfo_R_play(&actor->_08->_00);
|
||||
if ((int)actor->_08->_00.frame_control.current_frame == 14) {
|
||||
actor->_76 = (s16)RANDOM_F(356.f) + 4;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_76 *= 10;
|
||||
}
|
||||
} else if ((int)actor->_08->_00.frame_control.current_frame == 1) {
|
||||
actor->_76 = (s16)RANDOM_F(1760.f) + 40;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_76 *= 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
add_calc_short_angle2(&actor->_78, actor->_7A, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f),
|
||||
DEG2SHORT_ANGLE(0.25F));
|
||||
}
|
||||
}
|
||||
|
||||
void mi_kuwagata_menace_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_7A = 3640 - DEG2SHORT_ANGLE(GETREG(NMREG, 0) * 0.01f);
|
||||
actor->_6E = (s16)((s16)RANDOM_F(200.f) + 40) * 5;
|
||||
actor->_76 = 10;
|
||||
cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->_08->_00, actor->_08->_2AC, NULL, 0.75f, 0.0f);
|
||||
}
|
||||
|
||||
void mi_kuwagata_menace(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
if (actor->_7A) {
|
||||
add_calc(&actor->_1C.z, actor->_44.z + 3.f + GETREG(NMREG, 0xf) * 0.01f, CALC_EASE(0.3f), 0.75f, 0.05f);
|
||||
} else {
|
||||
add_calc(&actor->_1C.z, actor->_44.z, CALC_EASE(0.3f), 0.75f, 0.05f);
|
||||
}
|
||||
|
||||
if (actor->_6E < 0) {
|
||||
actor->_7A = 0;
|
||||
if (actor->_78 == 0) {
|
||||
if (RANDOM_F(1.f) > 0.7f || GETREG(NMREG, 1)) {
|
||||
mi_kuwagata_setupAction(actor, 3, game);
|
||||
return;
|
||||
} else {
|
||||
mi_kuwagata_setupAction(actor, 0, game);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
actor->_76--;
|
||||
if (actor->_76 < 0) {
|
||||
cKF_SkeletonInfo_R_play(&actor->_08->_00);
|
||||
if ((int)actor->_08->_00.frame_control.current_frame == 1) {
|
||||
cKF_Animation_R_c* anim = actor->_08->_2AC;
|
||||
cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->_08->_00, anim, NULL,
|
||||
(RANDOM_F(1.f) + 1.5f) * 0.5f, 0.f);
|
||||
if (RANDOM_F(1.f) > 0.9f) {
|
||||
actor->_76 = (s16)RANDOM_F(1760.f) + 40;
|
||||
}
|
||||
}
|
||||
}
|
||||
add_calc_short_angle2(&actor->_78, actor->_7A, CALC_EASE2(GETREG(NMREG, 0x5e) * 0.01f + 0.8f),
|
||||
(s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 0x5f) * 0.01f + 4.f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
|
||||
void mi_kuwagata_attack_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
return;
|
||||
}
|
||||
|
||||
void mi_kuwagata_attack(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
return;
|
||||
}
|
||||
|
||||
void mi_kuwagata_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) {
|
||||
static PRIV_INSECT_PROCESS init_proc[] = {
|
||||
mi_kuwagata_wait_init, mi_kuwagata_move_init, mi_kuwagata_menace_init,
|
||||
mi_kuwagata_battle_init, mi_kuwagata_attack_init, mi_kuwagata_rensa_init,
|
||||
};
|
||||
static PRIV_INSECT_PROCESS move_proc[] = {
|
||||
mi_kuwagata_wait, mi_kuwagata_move, mi_kuwagata_menace,
|
||||
mi_kuwagata_battle, mi_kuwagata_attack, mi_kuwagata_rensa,
|
||||
};
|
||||
actor->_04 = move_proc[r4];
|
||||
init_proc[r4](actor, game);
|
||||
}
|
||||
|
||||
void minsect_kuwagata_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
switch (actor->_00) {
|
||||
case 0x15:
|
||||
actor->_70 = 0;
|
||||
break;
|
||||
case 0x1d:
|
||||
case 0x1e:
|
||||
default:
|
||||
actor->_70 = actor->_00 - 0x1c;
|
||||
break;
|
||||
}
|
||||
if (actor->_00 == 0x1e) {
|
||||
if (mMmd_InsectInfo(0x1f)) {
|
||||
actor->_8C |= 0x10;
|
||||
}
|
||||
} else if (actor->_00 == 0x15) {
|
||||
if (mMmd_InsectInfo(0x1d)) {
|
||||
actor->_8C |= 0x10;
|
||||
}
|
||||
} else if (actor->_00 == 0x1f) {
|
||||
if (mMmd_InsectInfo(0x1e)) {
|
||||
actor->_8C |= 0x10;
|
||||
}
|
||||
} else if (actor->_00 == 0x1d) {
|
||||
if (mMmd_InsectInfo(0x15)) {
|
||||
actor->_8C |= 0x10;
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->_8C & 0x10) {
|
||||
if (actor->_00 == 0x1e || actor->_00 == 0x15) {
|
||||
xyz_t p;
|
||||
xyz_t_sub(&kuwagata_base_pos[actor->_70 + 1], &kuwagata_base_pos[actor->_70], &p);
|
||||
actor->_74 = atans_table(p.y, -p.x);
|
||||
} else {
|
||||
xyz_t p;
|
||||
xyz_t_sub(&kuwagata_base_pos[actor->_70 - 1], &kuwagata_base_pos[actor->_70], &p);
|
||||
actor->_74 = atans_table(p.y, -p.x);
|
||||
}
|
||||
}
|
||||
actor->_08 = &MI_Control_Actor->_24B8[actor->_70];
|
||||
actor->_08->_2A8 = kuwagata_model_tbl[actor->_70];
|
||||
actor->_08->_2AC = kuwagata_anim_tbl[actor->_70];
|
||||
cKF_SkeletonInfo_R_ct(&actor->_08->_00, actor->_08->_2A8, actor->_08->_2AC, &actor->_08->_270, &actor->_08->_288);
|
||||
cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->_08->_00, actor->_08->_2AC, NULL, 0.5f, 0.0f);
|
||||
cKF_SkeletonInfo_R_play(&actor->_08->_00);
|
||||
actor->_76 = (s16)RANDOM_F(1760.f) + 40;
|
||||
actor->_1C = kuwagata_base_pos[actor->_70];
|
||||
actor->_44 = actor->_1C;
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_40 = 0.05f;
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_72 = qrand();
|
||||
actor->_6E = (s16)RANDOM_F(120.f) + 60;
|
||||
mi_kuwagata_setupAction(actor, 0, game);
|
||||
}
|
||||
|
||||
// UNUSED
|
||||
void minsect_kuwagata_normal_process() {
|
||||
}
|
||||
|
||||
// UNUSED
|
||||
void minsect_kuwagata_battle_process() {
|
||||
}
|
||||
|
||||
void minsect_kuwagata_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_04(actor, game);
|
||||
}
|
||||
|
||||
void minsect_kuwagata_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
Mtx* mtx;
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
if (game->frame_counter & 1) {
|
||||
mtx = &actor->_08->_70;
|
||||
} else {
|
||||
mtx = &actor->_08->_170;
|
||||
}
|
||||
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z + 1.5f + GETREG(NMREG, 0xe) * 0.01f, FALSE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
Matrix_rotateXYZ(-0xe38, 0, 0, TRUE);
|
||||
Matrix_rotateXYZ(0, 0, actor->_74, TRUE);
|
||||
Matrix_rotateXYZ(actor->_78, 0, 0, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
Matrix_rotateXYZ(DEG2SHORT_ANGLE(90), 0, DEG2SHORT_ANGLE2(180), TRUE);
|
||||
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
cKF_Si3_draw_R_SV(game, &actor->_08->_00, mtx, NULL, NULL, actor);
|
||||
CLOSE_DISP(game->graph);
|
||||
}
|
||||
@@ -0,0 +1,318 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
xyz_t amenbo_center_pos = { 289.f, 25.f, 218.f };
|
||||
|
||||
const xyz_t mino_base_pos = { 135.f, 64.f, 474.f };
|
||||
|
||||
const xyz_t mino_top_pos = { 135.f, 90.f, 474.f };
|
||||
|
||||
const xyz_t mino_bottom_pos = { 135.f, 54.f, 474.f };
|
||||
|
||||
void minsect_mino_up_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_40 = 0.165f;
|
||||
actor->_6E = (s16)RANDOM_F(20.f) + 50;
|
||||
actor->_44.x = 30.f;
|
||||
actor->_7E = actor->_78;
|
||||
}
|
||||
|
||||
void minsect_mino_up(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
actor->_1C.y += actor->_40;
|
||||
if (actor->_1C.y > mino_top_pos.y - 10.f) {
|
||||
actor->_1C.y = mino_top_pos.y - 10.f;
|
||||
if (RANDOM_F(1.f) > 0.5f) {
|
||||
minsect_mino_setupAction(actor, 0, game);
|
||||
|
||||
} else {
|
||||
minsect_mino_setupAction(actor, 3, game);
|
||||
}
|
||||
} else if (actor->_6E < 0) {
|
||||
if (actor->_40) {
|
||||
actor->_6E = 10;
|
||||
actor->_40 = 0.f;
|
||||
} else {
|
||||
actor->_40 = 0.165f;
|
||||
actor->_6E = (s16)RANDOM_F(20.f) + 50;
|
||||
}
|
||||
actor->_44.x = 30.f;
|
||||
actor->_7E = actor->_78;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_mino_down_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_7E = actor->_78;
|
||||
if (GETREG(NMREG, 0x14)) {
|
||||
actor->_60 = GETREG(NMREG, 0x14) * 0.01f;
|
||||
} else {
|
||||
actor->_60 = 1.8f;
|
||||
}
|
||||
actor->_40 = GETREG(NMREG, 0x13) * 0.01f + 4.0f;
|
||||
actor->_82 = 0;
|
||||
}
|
||||
|
||||
void minsect_mino_down(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (add_calc(&actor->_40, 0.0f, CALC_EASE(GETREG(NMREG, 0x15) * 0.01f + 0.25f),
|
||||
(GETREG(NMREG, 0x16) * 0.01f + 3.0f) * 0.5f, 0.05f) < GETREG(NMREG, 0x1a) * 0.01f + 0.1f) {
|
||||
if (!add_calc(&actor->_60, 0.0f, CALC_EASE(GETREG(NMREG, 0x17) * 0.01f + 0.5f),
|
||||
(GETREG(NMREG, 0x18) * 0.01f + 0.08f) * 0.5f, 0.005f)) {
|
||||
actor->_44.x = 30.f;
|
||||
minsect_mino_setupAction(actor, 0, game);
|
||||
return;
|
||||
}
|
||||
actor->_44.x = 0.0f;
|
||||
actor->_5C = 0.0f;
|
||||
actor->_1C.y -= actor->_40;
|
||||
actor->_82 += (s16)DEG2SHORT_ANGLE2(GETREG(NMREG, 0x1b) * 0.01f + 25.f);
|
||||
}
|
||||
actor->_1C.y += actor->_60 * sin_s(actor->_82);
|
||||
if (actor->_1C.y < mino_bottom_pos.y) {
|
||||
actor->_1C.y = mino_bottom_pos.y;
|
||||
} else if (actor->_1C.y > mino_top_pos.y - 10.f) {
|
||||
actor->_1C.y = mino_top_pos.y - 10.f;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_mino_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
return;
|
||||
}
|
||||
|
||||
void minsect_mino_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
if (actor->_8C & 2) {
|
||||
if (actor->_40 < 0.f) {
|
||||
actor->_1C.y += actor->_40;
|
||||
if (actor->_1C.y < mino_bottom_pos.y + 10.f) {
|
||||
actor->_8C |= 8;
|
||||
actor->_8C &= ~2;
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 40;
|
||||
}
|
||||
} else if (actor->_8C & 0x10) {
|
||||
actor->_1C.y += actor->_40;
|
||||
if (actor->_1C.y > mino_top_pos.y - 10.f) {
|
||||
actor->_1C.y = mino_top_pos.y - 10.f;
|
||||
actor->_8C |= 4;
|
||||
actor->_8C &= ~2;
|
||||
actor->_6E = (s16)RANDOM_F(360.F) + 40;
|
||||
}
|
||||
if (actor->_6E % 12 == 0) {
|
||||
actor->_8C &= ~0x10;
|
||||
}
|
||||
} else if (actor->_6E % 12 == 0) {
|
||||
actor->_8C |= 0x10;
|
||||
}
|
||||
if (actor->_6E < 0) {
|
||||
actor->_8C &= ~2;
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 40;
|
||||
}
|
||||
} else if (actor->_6E < 0) {
|
||||
if (actor->_8C & 4) {
|
||||
if (RANDOM_F(1.f) > 0.5f) {
|
||||
minsect_mino_setupAction(actor, 3, game);
|
||||
return;
|
||||
}
|
||||
actor->_6E = (s16)RANDOM_F(20.f) + 40;
|
||||
actor->_40 = -0.45f;
|
||||
} else if (actor->_8C & 8 || RANDOM_F(1.f) > 0.5f) {
|
||||
if (RANDOM_F(1.f) > 0.6f) {
|
||||
minsect_mino_setupAction(actor, 2, game);
|
||||
return;
|
||||
}
|
||||
actor->_6E = (s16)RANDOM_F(20.f) + 50;
|
||||
actor->_40 = 0.165f;
|
||||
actor->_8C |= 0x10;
|
||||
actor->_44.x += 40.f;
|
||||
actor->_7E = actor->_78;
|
||||
} else if (RANDOM_F(1.f) > 0.7f) {
|
||||
minsect_mino_setupAction(actor, 0, game);
|
||||
} else {
|
||||
actor->_6E = (s16)RANDOM_F(20.f) + 40;
|
||||
actor->_40 = -0.45f;
|
||||
}
|
||||
|
||||
actor->_8C &= ~0xc;
|
||||
actor->_8C |= 2;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_mino_check_dush_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
if (search_position_distance(&actor->_1C, &player->actor_class.world.position) < 75.f &&
|
||||
player->actor_class.speed > 6.0f) {
|
||||
if (RANDOM_F(1.f) > 0.2f && actor->_6E < 0x1e) {
|
||||
minsect_mino_setupAction(actor, 2, game);
|
||||
} else {
|
||||
minsect_mino_setupAction(actor, 0, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_mino_furiko(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
f32 v, v2, v3;
|
||||
if (actor->_44.x) {
|
||||
add_calc(&actor->_5C, actor->_44.x, CALC_EASE(0.7f), 0.75f, 0.05f);
|
||||
} else {
|
||||
add_calc(&actor->_5C, actor->_44.x, CALC_EASE(0.3f), 0.25f, 0.05f);
|
||||
}
|
||||
|
||||
if (actor->_5C == actor->_44.x) {
|
||||
actor->_44.x = 0.0f;
|
||||
}
|
||||
|
||||
add_calc_short_angle2(&actor->_7C, actor->_7E, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(1.25), DEG2SHORT_ANGLE(0.25f));
|
||||
|
||||
if (GETREG(NMREG, 0x10)) {
|
||||
v = GETREG(NMREG, 0x10) * 0.01f;
|
||||
} else {
|
||||
v = 0.2f;
|
||||
}
|
||||
|
||||
if (GETREG(NMREG, 0x11)) {
|
||||
v2 = GETREG(NMREG, 0x11) * 0.01f;
|
||||
} else {
|
||||
v2 = 1.f;
|
||||
}
|
||||
|
||||
actor->_58 = MAX(1.f, mino_top_pos.y - actor->_1C.y);
|
||||
actor->_70 += (s16)DEG2SHORT_ANGLE2(((v2 * actor->_5C + 35.f) / actor->_58) * 1.8f * 0.5f);
|
||||
actor->_68.x = DEG2SHORT_ANGLE2(v * actor->_5C) * sin_s(actor->_70);
|
||||
}
|
||||
|
||||
void minsect_mino_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 40;
|
||||
}
|
||||
|
||||
void minsect_mino_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
if (actor->_6E < 0) {
|
||||
if (actor->_1C.y >= mino_top_pos.y - 2.f && (RANDOM_F(1.f) > 0.2f || GETREG(NMREG, 0x14))) {
|
||||
minsect_mino_setupAction(actor, 3, game);
|
||||
} else if (RANDOM_F(1.f) > 0.5f) {
|
||||
minsect_mino_setupAction(actor, 1, game);
|
||||
} else {
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 40;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_mino_hineri(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_58 = MAX(1.f, mino_top_pos.y - actor->_1C.y);
|
||||
actor->_72 += (s16)DEG2SHORT_ANGLE2((35.f / actor->_58) * 1.2f * 0.5f);
|
||||
actor->_78 = 5461.f * sin_s(actor->_72);
|
||||
actor->_7A--;
|
||||
if (actor->_7A < 0) {
|
||||
actor->_7A = (s16)RANDOM_F(360.f) + 40;
|
||||
} else if (actor->_76 < 7) {
|
||||
static float scaleX_table[] = { 0.01f, 0.00875f, 0.01125f, 0.00875f, 0.01125f, 0.00875f, 0.01125f };
|
||||
static float scaleY_table[] = { 0.01f, 0.01125f, 0.00875f, 0.01125f, 0.00875f, 0.01125f, 0.00875f };
|
||||
int index = actor->_76;
|
||||
f32 temp = 2.f;
|
||||
BOOL a = chase_f(&actor->_34.x, (temp / 2.f) * scaleX_table[index], 0.001125f);
|
||||
BOOL b = chase_f(&actor->_34.y, (temp / 2.f) * scaleY_table[index], 0.001125f);
|
||||
if ((a & b) == TRUE) {
|
||||
if (actor->_76 == 3) {
|
||||
if (actor->_80 == 0 && RANDOM_F(1.f) > 0.4f) {
|
||||
actor->_80 = 1;
|
||||
} else if (actor->_80 != 0 && RANDOM_F(1.f) > 0.2f) {
|
||||
actor->_80 = 0;
|
||||
}
|
||||
}
|
||||
actor->_76--;
|
||||
if (actor->_76 < 0) {
|
||||
actor->_44.x += 25.f;
|
||||
actor->_7E = actor->_78;
|
||||
actor->_76 = (s16)(RANDOM_F(5.f) * 60.f) + 307;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
actor->_76--;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_mino_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) {
|
||||
static PRIV_INSECT_PROCESS init_proc[] = { minsect_mino_wait_init, minsect_mino_move_init, minsect_mino_up_init,
|
||||
minsect_mino_down_init };
|
||||
static PRIV_INSECT_PROCESS move_proc[] = { minsect_mino_wait, minsect_mino_move, minsect_mino_up,
|
||||
minsect_mino_down };
|
||||
actor->_04 = move_proc[r4];
|
||||
init_proc[r4](actor, game);
|
||||
}
|
||||
|
||||
void minsect_mino_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_1C = mino_base_pos;
|
||||
actor->_34.x = 0.01f;
|
||||
actor->_34.y = 0.01f;
|
||||
actor->_34.z = 0.01f;
|
||||
actor->_5C = 0.0f;
|
||||
actor->_44.x = 0.0f;
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 40;
|
||||
actor->_72 = qrand();
|
||||
actor->_76 = (s16)(RANDOM_F(5.f) * 60.f) + 307;
|
||||
actor->_7A = (s16)RANDOM_F(360.f) + 40;
|
||||
minsect_mino_setupAction(actor, 0, game);
|
||||
}
|
||||
|
||||
void minsect_mino_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
if (actor->_04 != minsect_mino_down && actor->_04 != minsect_mino_up) {
|
||||
minsect_mino_check_dush_player(actor, game);
|
||||
}
|
||||
minsect_mino_furiko(actor, game);
|
||||
minsect_mino_hineri(actor, game);
|
||||
if (GETREG(NMREG, 1) && (play->game_frame & 7) == 0) {
|
||||
xyz_t p = actor->_1C;
|
||||
p = actor->_1C;
|
||||
p.y += GETREG(NMREG, 5) * 0.01f;
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(101, p, 1, 0, game, 0x5843, 2, 0);
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(101, actor->_1C, 1, 0, game, 0x5843, 1, 0);
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(101, mino_base_pos, 1, 0, game, 0x5843, 3, 0);
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(101, mino_top_pos, 1, 0, game, 0x5843, 1, 0);
|
||||
}
|
||||
actor->_04(actor, game);
|
||||
}
|
||||
|
||||
void minsect_mino_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y + actor->_58, actor->_1C.z, FALSE);
|
||||
Matrix_rotateXYZ(0, actor->_7C, 0, TRUE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
Matrix_rotateXYZ(0, -actor->_7C, 0, TRUE);
|
||||
Matrix_translate(0.f, -actor->_58, 0.f, TRUE);
|
||||
Matrix_rotateXYZ(0, actor->_78, 0, TRUE);
|
||||
Matrix_translate(0.f, 0.f, -2.5f, TRUE);
|
||||
Matrix_rotateXYZ(DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE2(180), 0, TRUE);
|
||||
Matrix_scale(actor->_34.x, actor->_34.y, actor->_34.z, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff);
|
||||
if (actor->_80) {
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][1]);
|
||||
} else {
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
}
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y + actor->_58, actor->_1C.z, FALSE);
|
||||
Matrix_rotateXYZ(0, actor->_7C, 0, TRUE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
Matrix_rotateXYZ(0, -actor->_7C, 0, TRUE);
|
||||
Matrix_translate(0.0f, -actor->_58, 0.0f, TRUE);
|
||||
Matrix_rotateXYZ(0, actor->_78, 0, TRUE);
|
||||
if (GETREG(NMREG, 5)) {
|
||||
Matrix_translate(GETREG(NMREG, 4) * 0.001f, GETREG(NMREG, 5) * 0.01f, GETREG(NMREG, 6) * 0.01f, TRUE);
|
||||
} else if (actor->_80) {
|
||||
Matrix_translate(0.0f, 7.5f, 0.f, TRUE);
|
||||
} else {
|
||||
Matrix_translate(0.0f, 5.f, 0.f, TRUE);
|
||||
}
|
||||
if (GETREG(NMREG, 7)) {
|
||||
Matrix_scale(1.5f, actor->_58 / ((mino_top_pos.y - mino_base_pos.y) - (GETREG(NMREG, 7) * 0.01f)), 1.f, TRUE);
|
||||
} else {
|
||||
Matrix_scale(1.5f, actor->_58 / ((mino_top_pos.y - mino_base_pos.y) - 10.f), 1.f, TRUE);
|
||||
}
|
||||
Matrix_translate(0.31f, -8.7f, -2.5f, TRUE);
|
||||
Matrix_rotateXYZ(DEG2SHORT_ANGLE(-90), DEG2SHORT_ANGLE2(180), 0, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][2]);
|
||||
CLOSE_DISP(game->graph);
|
||||
minsect_draw_shadow(actor, game);
|
||||
}
|
||||
@@ -0,0 +1,217 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
const xyz_t okera_base_pos = { 235.f, 45.f, 445.f };
|
||||
|
||||
void mi_okera_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position);
|
||||
if (dist < 60.f) {
|
||||
if (player->actor_class.speed > 1.4f) {
|
||||
actor->_7C += (s16)((dist / 60.f) * 8.f);
|
||||
} else if (player->actor_class.speed > 5.f) {
|
||||
actor->_7C += (s16)((dist / 60.f) * 20.f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_okera_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
okera_dig_wait_process_init(actor, game);
|
||||
}
|
||||
|
||||
void okera_dig_up_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
s16 s = qrand();
|
||||
f32 v = RANDOM_F(25.f);
|
||||
actor->_1C = okera_base_pos;
|
||||
actor->_1C.x += sin_s(s) * v;
|
||||
actor->_1C.y -= 2.f;
|
||||
actor->_1C.z += sin_s(s) * v;
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_44 = ZeroVec;
|
||||
actor->_34.y = 0.75f;
|
||||
actor->_44.y = -0.05f;
|
||||
actor->_40 = 0.625;
|
||||
actor->_68 = ZeroSVec;
|
||||
if (actor->_1C.z >= okera_base_pos.z) {
|
||||
actor->_68.y = qrand();
|
||||
} else {
|
||||
actor->_68.y = DEG2SHORT_ANGLE(RANDOM2_F(180));
|
||||
}
|
||||
actor->_70 = actor->_68.y;
|
||||
actor->_76 = 0;
|
||||
actor->_04 = okera_dig_up_process;
|
||||
}
|
||||
|
||||
void okera_dig_up_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_8C & 0x20 && actor->_34.y < 0.f) {
|
||||
actor->_68.x = 0;
|
||||
okera_normal_process_init(actor, game);
|
||||
} else {
|
||||
mID_insect_moveF(actor);
|
||||
actor->_34.y += actor->_44.y;
|
||||
actor->_68.x = -atans_table(actor->_40, actor->_34.y);
|
||||
}
|
||||
}
|
||||
|
||||
void okera_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_40 = 0.65f;
|
||||
actor->_6E = (s16)RANDOM_F(68.f) + 24;
|
||||
actor->_74 = (s16)(RANDOM_F(1500.f) + 300.f);
|
||||
actor->_04 = okera_normal_process;
|
||||
}
|
||||
|
||||
void okera_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
mi_okera_check_player(actor, game);
|
||||
actor->_7C--;
|
||||
if (actor->_7C < 0) {
|
||||
actor->_7C = 0;
|
||||
}
|
||||
if (actor->_7C > 900) {
|
||||
actor->_7C = 900;
|
||||
}
|
||||
if (actor->_7C > 150 && actor->_40 == 0.f) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
s16 s = player->actor_class.shape_info.rotation.y;
|
||||
actor->_7C = 0;
|
||||
actor->_6E = (s16)RANDOM_F(68.f) + 24;
|
||||
actor->_40 = 1.615f;
|
||||
actor->_70 = s + DEG2SHORT_ANGLE(RANDOM2_F(30.f));
|
||||
} else {
|
||||
actor->_6E--;
|
||||
if (actor->_74 > 0) {
|
||||
actor->_74--;
|
||||
}
|
||||
if (actor->_40 > 0.f) {
|
||||
if (actor->_78 == actor->_7A) {
|
||||
if (actor->_7A) {
|
||||
actor->_7A = 0;
|
||||
} else {
|
||||
actor->_7A = DEG2SHORT_ANGLE(-10);
|
||||
}
|
||||
}
|
||||
if (!add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5),
|
||||
DEG2SHORT_ANGLE(0.25f))) {
|
||||
actor->_76 += DEG2SHORT_ANGLE(15);
|
||||
mID_insect_moveF(actor);
|
||||
actor->_34.y += actor->_44.y;
|
||||
if (actor->_6E < 0) {
|
||||
actor->_40 = 0.f;
|
||||
actor->_6E = (s16)RANDOM_F(76.f) + 4;
|
||||
} else if (actor->_8C & 0x5e) {
|
||||
actor->_40 = 0.f;
|
||||
actor->_72 = actor->_8C;
|
||||
}
|
||||
//! BUG: unused
|
||||
sin_s(actor->_76) <= 0.1 ? sin_s(actor->_76) : 0.1;
|
||||
}
|
||||
} else if (actor->_6E < 0) {
|
||||
actor->_40 = 0.95f;
|
||||
actor->_6E = (s16)RANDOM_F(68.f) + 24;
|
||||
if (GETREG(NMREG, 4)) {
|
||||
okera_dig_down_process_init(actor, game);
|
||||
}
|
||||
if (actor->_72 & 0x5e) {
|
||||
if (actor->_72 & 0x40) {
|
||||
actor->_70 = qrand();
|
||||
} else if (actor->_72 & 6) {
|
||||
actor->_70 = -actor->_70;
|
||||
} else {
|
||||
actor->_70 = DEG2SHORT_ANGLE2(180) - actor->_70;
|
||||
}
|
||||
actor->_72 &= ~0x5e;
|
||||
} else {
|
||||
if (actor->_74 == 0 && search_position_distanceXZ(&okera_base_pos, &actor->_1C) < 35.f) {
|
||||
okera_dig_down_process_init(actor, game);
|
||||
} else {
|
||||
actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(120.f));
|
||||
}
|
||||
}
|
||||
}
|
||||
add_calc_short_angle2(&actor->_78, actor->_7A, CALC_EASE2(0.7f), DEG2SHORT_ANGLE(1.25f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
}
|
||||
|
||||
void okera_dig_down_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_7A = 0;
|
||||
actor->_04 = okera_dig_down_process;
|
||||
actor->_6E = 10;
|
||||
}
|
||||
|
||||
void okera_dig_down_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_6E-- < 0) {
|
||||
xyz_t p = actor->_1C;
|
||||
int v = (int)(RANDOM_F(3.f) + 3.f) | 0x4000;
|
||||
p.y = 45.f;
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(84, p, 2, actor->_68.y, game, -1, 0, v);
|
||||
actor->_6E = 6;
|
||||
}
|
||||
if (!add_calc_short_angle2(&actor->_68.x, DEG2SHORT_ANGLE(90), CALC_EASE2(0.5f), DEG2SHORT_ANGLE(5),
|
||||
DEG2SHORT_ANGLE(1.25f))) {
|
||||
actor->_1C.y -= 0.2f;
|
||||
actor->_76 += DEG2SHORT_ANGLE(12.5f);
|
||||
if (actor->_1C.y < 40.f) {
|
||||
okera_dig_wait_process_init(actor, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void okera_dig_wait_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_1C = okera_base_pos;
|
||||
actor->_6E = (s16)RANDOM_F(600.f) + 300;
|
||||
actor->_04 = okera_dig_wait_process;
|
||||
}
|
||||
|
||||
void okera_dig_wait_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (GETREG(NMREG, 5)) {
|
||||
okera_dig_up_process_init(actor, game);
|
||||
}
|
||||
if (actor->_6E-- < 0) {
|
||||
int i;
|
||||
okera_dig_up_process_init(actor, game);
|
||||
for (i = 3; i < 6; i++) {
|
||||
Common_Get(clip.effect_clip)->effect_make_proc(84, actor->_1C, 2, actor->_68.y, game, -1, 0, i | 0x4000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_okera_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position);
|
||||
actor->_04(actor, game);
|
||||
if (actor->_04 == okera_dig_wait_process && dist < 200.f) {
|
||||
sAdo_OngenPos((u32)actor, 68, &actor->_1C);
|
||||
}
|
||||
if (actor->_04 == okera_dig_up_process && dist < 200.f) {
|
||||
sAdo_OngenPos((u32)actor, 69, &actor->_1C);
|
||||
}
|
||||
|
||||
//! NOTE: has to be written this way to match
|
||||
if (actor->_04 == okera_dig_wait_process || actor->_04 == okera_dig_down_process) {
|
||||
return;
|
||||
}
|
||||
minsect_tree_ObjCheck(actor);
|
||||
minsect_rock_ObjCheck(actor);
|
||||
minsect_kanban_BGCheck(actor);
|
||||
minsect_batta_ObjCheck(actor);
|
||||
minsect_garden_BGCheck(actor, 510.f, 370.f);
|
||||
}
|
||||
|
||||
void minsect_okera_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_04 == okera_dig_wait_process) {
|
||||
return;
|
||||
}
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y + (s16)(DEG2SHORT_ANGLE2(GETREG(TAKREG, 4) + 5.f) * sin_s(actor->_76)),
|
||||
actor->_68.z, TRUE);
|
||||
Matrix_rotateXYZ(actor->_78, 0, 0, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
CLOSE_DISP(game->graph);
|
||||
if (actor->_04 != okera_dig_down_process) {
|
||||
minsect_draw_shadow(actor, game);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
void minsect_semi_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
const static xyz_t init_pos[4] = {
|
||||
{ 97.f, 85.f, -18.5f }, { 396.f, 85.5f, -20.f }, { 471.5f, 65.5f, 4.5f }, { 248.f, 88.f, -21.f }
|
||||
};
|
||||
int s;
|
||||
actor->_58 = 1.0f;
|
||||
actor->_70 = 0;
|
||||
actor->_76 = 0;
|
||||
actor->_74 = 0;
|
||||
actor->_78 = 0;
|
||||
s = (actor->_00 - 4);
|
||||
actor->_1C = init_pos[s];
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_68.x = DEG2SHORT_ANGLE(-70);
|
||||
actor->_68.y = DEG2SHORT_ANGLE(-180);
|
||||
|
||||
actor->_44 = actor->_34 = ZeroVec;
|
||||
}
|
||||
|
||||
void mi_semi_hane_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
static float scaleX_table[7] = { 1.15f, 1.f, 1.15f, 1.f, 1.15f, 1.f, 1.15f };
|
||||
if (actor->_70 < 7) {
|
||||
if (chase_f(&actor->_58, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_70], 0.23f) == TRUE) {
|
||||
actor->_70--;
|
||||
if (actor->_70 < 0) {
|
||||
actor->_70 = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
actor->_70--;
|
||||
}
|
||||
}
|
||||
|
||||
void mi_semi_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position);
|
||||
if (dist < 120.f) {
|
||||
if (player->actor_class.speed > 1.4f) {
|
||||
actor->_76 += (s16)((dist / 120.f) * 8.0f);
|
||||
} else if (player->actor_class.speed > 5.0f) {
|
||||
actor->_76 += (s16)((dist / 120.f) * 20.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_semi_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
int id = actor->_00 - 4;
|
||||
get_now_mind_flag(actor, game);
|
||||
if (actor->_8E) {
|
||||
mi_semi_hane_anime(actor);
|
||||
add_calc_short_angle2(&actor->_72, actor->_74, CALC_EASE2(0.4f), DEG2SHORT_ANGLE(0.75f),
|
||||
DEG2SHORT_ANGLE(0.25f));
|
||||
mi_semi_check_player(actor, game);
|
||||
actor->_76--;
|
||||
if (actor->_76 < 0) {
|
||||
actor->_76 = 0;
|
||||
}
|
||||
if (actor->_76 > 900) {
|
||||
actor->_76 = 900;
|
||||
}
|
||||
if (actor->_76 > 500) {
|
||||
actor->_74 = 0;
|
||||
} else {
|
||||
if (actor->_78 != 0) {
|
||||
actor->_74 = DEG2SHORT_ANGLE(-10);
|
||||
}
|
||||
actor->_6E--;
|
||||
if (actor->_6E < 0) {
|
||||
if (actor->_78 != 0) {
|
||||
actor->_78 = 0;
|
||||
actor->_74 = 0;
|
||||
actor->_6E = (s16)RANDOM_F(360.f) + 360;
|
||||
} else {
|
||||
actor->_78 = 1;
|
||||
actor->_74 = DEG2SHORT_ANGLE(-10);
|
||||
actor->_6E = (s16)RANDOM_F(6000.f) + 12000;
|
||||
}
|
||||
}
|
||||
if (actor->_78 == 1 && actor->_72 == actor->_74) {
|
||||
static const u8 semi_sound_data[4] = { 0x9b, 0x9a, 0x98, 0x97 };
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
if (search_position_distance(&actor->_1C, &player->actor_class.world.position) < 200.f) {
|
||||
sAdo_OngenPos((u32)actor, semi_sound_data[id], &actor->_1C);
|
||||
}
|
||||
if (actor->_70 <= 0) {
|
||||
actor->_70 = 7;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_semi_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y, actor->_1C.z, FALSE);
|
||||
Matrix_rotateXYZ(actor->_72, 0, 0, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
CLOSE_DISP(game->graph);
|
||||
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
|
||||
OPEN_POLY_XLU_DISP(game->graph);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 0xff, 0xff, 0xff, 0xff);
|
||||
Matrix_scale(actor->_58 + (GETREG(NMREG, 1) * 0.01f), GETREG(NMREG, 2) * 0.01f + 1.0f,
|
||||
GETREG(NMREG, 3) * 0.01f + 1.0f, TRUE);
|
||||
gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][1]);
|
||||
CLOSE_POLY_XLU_DISP(game->graph);
|
||||
}
|
||||
@@ -0,0 +1,258 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
void mi_tentou_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position);
|
||||
if (dist < 80.f) {
|
||||
if (player->actor_class.speed > 1.4f) {
|
||||
actor->_80 += (s16)((dist / 80.f) * 8.f);
|
||||
} else if (player->actor_class.speed > 5.f) {
|
||||
actor->_80 += (s16)((dist / 80.f) * 20.f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
xyz_t tentou_flower_pos[4] = {
|
||||
{ 410.0f, 65.f, 240.0f },
|
||||
{ 213.5f, 65.f, 155.0f },
|
||||
{ 233.0f, 65.f, 233.5f },
|
||||
{ 294.0f, 65.f, 170.5f },
|
||||
};
|
||||
|
||||
void mi_tentou_kama_anime(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
static f32 scaleX_table[7] = { 1.f, 0.95f, 1.15f, 0.95f, 1.15f, 0.95f, 1.15f };
|
||||
if (actor->_7E < 7) {
|
||||
if (chase_f(&actor->_5C, (GETREG(NMREG, 1) * 0.01f + 1.0f) * scaleX_table[actor->_7E], 0.115f) == 1) {
|
||||
actor->_7E--;
|
||||
if (actor->_7E < 0) {
|
||||
actor->_7E = (s16)(RANDOM_F(2.0F) * 60.0f) + 67;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
actor->_7E--;
|
||||
}
|
||||
}
|
||||
|
||||
void mi_tentou_wait_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E = (int)(RANDOM_F(300.f)) + 100.f;
|
||||
actor->_7C = (int)(RANDOM_F(20.f)) + 5.f;
|
||||
if (actor->_8E == 0 && actor->_00 != 32) {
|
||||
actor->_6E *= 10;
|
||||
}
|
||||
}
|
||||
|
||||
void mi_tentou_wait(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E--;
|
||||
actor->_7C--;
|
||||
if (actor->_7C < 0) {
|
||||
if (actor->_76 != 0) {
|
||||
actor->_76 = 0;
|
||||
actor->_7C = (int)RANDOM_F(20.f) + 5.f;
|
||||
} else {
|
||||
actor->_76 = 910;
|
||||
actor->_72 = qrand();
|
||||
}
|
||||
}
|
||||
if (actor->_6E < 0 && actor->_74 == 0) {
|
||||
mi_tentou_setupAction(actor, 1, game);
|
||||
}
|
||||
add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(0.25f), DEG2SHORT_ANGLE(0.125f));
|
||||
if (actor->_00 != 32) {
|
||||
add_calc_short_angle2(&actor->_74, actor->_76, CALC_EASE2(0.8f), DEG2SHORT_ANGLE(1.f), DEG2SHORT_ANGLE(0.25f));
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_74, actor->_76, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
}
|
||||
|
||||
void mi_tentou_move_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E = (int)RANDOM_F(300.f) + 30.f;
|
||||
}
|
||||
|
||||
void mi_tentou_move(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t* tentou_pos = &tentou_flower_pos[actor->_70];
|
||||
if (actor->_6E-- > 0 && actor->_40 > 0.0f) {
|
||||
if (actor->_74 == actor->_76) {
|
||||
if (actor->_76 != 0) {
|
||||
actor->_76 = 0;
|
||||
} else {
|
||||
actor->_76 = 910;
|
||||
}
|
||||
}
|
||||
if (actor->_8C & 2) {
|
||||
xyz_t p;
|
||||
s16 ang;
|
||||
xyz_t_sub(tentou_pos, &actor->_1C, &p);
|
||||
ang = atans_table(p.z, p.x);
|
||||
if ((s16)(ang - actor->_68.y) > 0) {
|
||||
actor->_72 = ang - DEG2SHORT_ANGLE2(90);
|
||||
} else {
|
||||
actor->_72 = ang + DEG2SHORT_ANGLE2(90);
|
||||
}
|
||||
} else {
|
||||
if (ABS((s16)(actor->_68.y - actor->_72)) < 3640) {
|
||||
actor->_72 = qrand();
|
||||
}
|
||||
}
|
||||
if (actor->_00 != 32) {
|
||||
add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.5f), DEG2SHORT_ANGLE(2.125),
|
||||
DEG2SHORT_ANGLE(0.25));
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_68.y, actor->_72, CALC_EASE2(0.2f), DEG2SHORT_ANGLE(0.25),
|
||||
DEG2SHORT_ANGLE(0.125));
|
||||
}
|
||||
} else {
|
||||
if (actor->_40 > 0.0f) {
|
||||
actor->_40 = 0.0f;
|
||||
actor->_6E = (int)RANDOM_F(300.f) + 100.f;
|
||||
if (actor->_8E == 0 && actor->_00 != 32) {
|
||||
actor->_6E <<= 1;
|
||||
}
|
||||
}
|
||||
if (actor->_6E-- < 0) {
|
||||
if (RANDOM_F(1.0f) > 0.9f) {
|
||||
mi_tentou_setupAction(actor, 0, game);
|
||||
return;
|
||||
}
|
||||
actor->_40 = actor->_58;
|
||||
actor->_6E = (int)RANDOM_F(300.f) + 30.f;
|
||||
if (actor->_00 == 32) {
|
||||
actor->_6E <<= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
mID_insect_moveF(actor);
|
||||
actor->_34.y += actor->_44.y;
|
||||
minsect_flower_BGCheck(actor, tentou_pos);
|
||||
if (actor->_00 != 32) {
|
||||
add_calc_short_angle2(&actor->_74, actor->_76, CALC_EASE2(0.8f), DEG2SHORT_ANGLE(1.0f), DEG2SHORT_ANGLE(0.25f));
|
||||
} else {
|
||||
add_calc_short_angle2(&actor->_74, actor->_76, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(0.5f), DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
}
|
||||
|
||||
void mi_tentou_menace_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_6E = (int)RANDOM_F(600.f) + 200.f;
|
||||
actor->_76 = DEG2SHORT_ANGLE(-40);
|
||||
actor->_7C = (int)RANDOM_F(20.f) + 5.f;
|
||||
actor->_7E = (int)(RANDOM_F(2.f) * 60.f) + 67;
|
||||
}
|
||||
|
||||
void mi_tentou_menace(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
s16 target = search_position_angleY(&actor->_1C, &player->actor_class.world.position);
|
||||
mi_tentou_kama_anime(actor);
|
||||
actor->_6E--;
|
||||
actor->_7C--;
|
||||
if (actor->_7C < 0) {
|
||||
actor->_7C = (int)RANDOM_F(20.f) + 5.f;
|
||||
if (actor->_7A) {
|
||||
actor->_7A = 0;
|
||||
} else {
|
||||
actor->_7A = 1274;
|
||||
}
|
||||
}
|
||||
if (actor->_76) {
|
||||
add_calc(&actor->_60, GETREG(NMREG, 0xf) * 0.01f + 5.0f, CALC_EASE(0.1f), 0.25f, 0.05f);
|
||||
} else {
|
||||
add_calc(&actor->_60, 0.0f, CALC_EASE(0.1f), 0.25f, 0.05f);
|
||||
}
|
||||
if (actor->_6E < 0) {
|
||||
actor->_76 = 0;
|
||||
if (actor->_74 == 0) {
|
||||
mi_tentou_setupAction(actor, 1, game);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if ((int)((actor->_68.y * (180.f / 0x8000)) - (target * (180.f / 0x8000))) % 5 == 0) {
|
||||
if (actor->_7A) {
|
||||
actor->_7A = 0;
|
||||
} else {
|
||||
actor->_7A = 1274;
|
||||
}
|
||||
}
|
||||
add_calc_short_angle2(&actor->_78, actor->_7A, CALC_EASE2(GETREG(NMREG, 0x5c) * 0.01f + 0.8f),
|
||||
(s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 0x5b) * 0.01f + 4.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
add_calc_short_angle2(&actor->_68.y, target, CALC_EASE2(0.3f), DEG2SHORT_ANGLE(2.5f), DEG2SHORT_ANGLE(0.125f));
|
||||
add_calc_short_angle2(&actor->_74, actor->_76, CALC_EASE2(GETREG(NMREG, 0x5e) * 0.01f + 0.8f),
|
||||
(s16)(DEG2SHORT_ANGLE(GETREG(NMREG, 0x5f) * 0.01f + 8.0f) >> 1) >> 1, DEG2SHORT_ANGLE(0.25f));
|
||||
}
|
||||
|
||||
void mi_tentou_setupAction(MUSEUM_INSECT_PRIVATE_DATA* actor, int r4, GAME* game) {
|
||||
static PRIV_INSECT_PROCESS init_proc[3] = { mi_tentou_wait_init, mi_tentou_move_init, mi_tentou_menace_init };
|
||||
static PRIV_INSECT_PROCESS move_proc[3] = { mi_tentou_wait, mi_tentou_move, mi_tentou_menace };
|
||||
actor->_04 = move_proc[r4];
|
||||
init_proc[r4](actor, game);
|
||||
}
|
||||
|
||||
void minsect_tentou_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
switch (actor->_00) {
|
||||
case 0x18: {
|
||||
actor->_70 = 0;
|
||||
actor->_1C = tentou_flower_pos[actor->_70];
|
||||
} break;
|
||||
case 0x19: {
|
||||
actor->_70 = 1;
|
||||
actor->_1C = tentou_flower_pos[actor->_70];
|
||||
} break;
|
||||
case 0x1a: {
|
||||
actor->_70 = 2;
|
||||
actor->_1C = tentou_flower_pos[actor->_70];
|
||||
} break;
|
||||
default:
|
||||
case 0x20: {
|
||||
actor->_70 = 3;
|
||||
actor->_1C = tentou_flower_pos[actor->_70];
|
||||
} break;
|
||||
}
|
||||
actor->_80 = 0;
|
||||
actor->_74 = 0;
|
||||
actor->_76 = 0;
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_44 = ZeroVec;
|
||||
actor->_44.y = -0.125f;
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_68.y = qrand();
|
||||
actor->_40 = 0.0f;
|
||||
mi_tentou_setupAction(actor, 1, game);
|
||||
if (actor->_00 != 32) {
|
||||
actor->_58 = 0.125f;
|
||||
} else {
|
||||
actor->_58 = 0.025f;
|
||||
}
|
||||
actor->_78 = 0;
|
||||
actor->_7A = 0;
|
||||
actor->_5C = 1.0f;
|
||||
actor->_6E = (s16)(RANDOM_F(100.f) + 20.f);
|
||||
}
|
||||
|
||||
void minsect_tentou_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_00 == 0x1a) {
|
||||
mi_tentou_check_player(actor, game);
|
||||
actor->_80--;
|
||||
if (actor->_80 < 0) {
|
||||
actor->_80 = 0;
|
||||
}
|
||||
if (actor->_80 > 900) {
|
||||
actor->_80 = 900;
|
||||
}
|
||||
if (actor->_80 > 500) {
|
||||
mi_tentou_setupAction(actor, 2, game);
|
||||
}
|
||||
}
|
||||
actor->_04(actor, game);
|
||||
}
|
||||
|
||||
void minsect_tentou_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
OPEN_DISP(game->graph);
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y + actor->_60, actor->_1C.z, FALSE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
Matrix_rotateXYZ(actor->_74 + actor->_78, 0, 0, TRUE);
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
Matrix_scale(actor->_5C, 1.0f, 1.0f, TRUE);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(NEXT_POLY_OPA_DISP, 0, 0xff, 0x9b, 0xff);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
CLOSE_DISP(game->graph);
|
||||
}
|
||||
@@ -0,0 +1,617 @@
|
||||
#include "ac_museum_insect_priv.h"
|
||||
|
||||
xyz_t tonbo_rock_pos[6] = { { 215.f, 68.f, 403.f }, { 232.f, 60.f, 381.f }, { 372.f, 65.f, 482.f },
|
||||
{ 390.f, 68.f, 469.f }, { 328.f, 72.f, 501.f }, { 351.f, 72.f, 501.f } };
|
||||
|
||||
void minsect_tonbo_ct(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_34 = ZeroVec;
|
||||
actor->_68 = ZeroSVec;
|
||||
actor->_68.y = qrand();
|
||||
actor->_70 = qrand();
|
||||
actor->_72 = 0;
|
||||
if (actor->_8E == 1) {
|
||||
static const xyz_t init_center_pos = { 280.f, 100.f, 440.f };
|
||||
actor->_1C = init_center_pos;
|
||||
actor->_1C.x += RANDOM2_F(460.f);
|
||||
actor->_1C.y = RANDOM_F(30.f) + 100.f;
|
||||
actor->_1C.z += RANDOM2_F(280.f);
|
||||
actor->_44 = actor->_1C;
|
||||
actor->_10 = 0.5f;
|
||||
actor->_0C = 1.0f;
|
||||
actor->_74 = 0;
|
||||
actor->_76 = qrand();
|
||||
minsect_tonbo_normal_process_init(actor, game);
|
||||
} else {
|
||||
actor->_74 = actor->_00 - 9;
|
||||
MI_Control_Actor->_2F9C[2] |= (1 << actor->_74);
|
||||
actor->_44 = actor->_1C = tonbo_rock_pos[actor->_74];
|
||||
minsect_tonbo_rock_wait_process_init(actor, game);
|
||||
}
|
||||
}
|
||||
|
||||
void mi_tonbo_check_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
f32 dist = search_position_distance(&actor->_1C, &player->actor_class.world.position);
|
||||
if (dist < 80.f) {
|
||||
if (player->actor_class.speed > 1.4f) {
|
||||
actor->_82 += (s16)((dist / 80.f) * 8.0f);
|
||||
} else if (player->actor_class.speed > 5.0f) {
|
||||
actor->_82 += (s16)((dist / 80.f) * 20.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOL minsect_tonbo_bg_check(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_8C & 0x9e) {
|
||||
if (actor->_72 & 0x80) {
|
||||
if (RANDOM_F(1.0f) >= 0.5f) {
|
||||
actor->_70 += (s16)(DEG2SHORT_ANGLE2(RANDOM_F(90)) + DEG2SHORT_ANGLE(90));
|
||||
} else {
|
||||
actor->_70 -= (s16)(DEG2SHORT_ANGLE(RANDOM_F(90)) + DEG2SHORT_ANGLE(90));
|
||||
}
|
||||
actor->_72 = 0;
|
||||
actor->_40 = 0.0f;
|
||||
return TRUE;
|
||||
}
|
||||
if ((actor->_8C & 8) == 0 || (actor->_8C & 6)) {
|
||||
if (actor->_72 & 2) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(90);
|
||||
actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90));
|
||||
} else if (actor->_72 & 4) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(-90);
|
||||
actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90));
|
||||
} else if (actor->_72 & 0x10) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(-180);
|
||||
actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90));
|
||||
} else if (actor->_72 & 8) {
|
||||
actor->_70 = (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90));
|
||||
} else {
|
||||
actor->_70 += DEG2SHORT_ANGLE2(RANDOM2_F(90));
|
||||
}
|
||||
actor->_72 = 0;
|
||||
actor->_40 = 0.0f;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void minsect_tonbo_near_target_set(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
int i;
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
for (i = 0; i <= 6; i++) {
|
||||
f32 dist;
|
||||
if (i >= 6) {
|
||||
dist = search_position_distance(&actor->_1C, &player->actor_class.world.position);
|
||||
} else {
|
||||
dist = search_position_distance(&actor->_1C, &tonbo_rock_pos[i]);
|
||||
}
|
||||
if (dist < 80.f && (MI_Control_Actor->_2F9C[2] & (1 << actor->_74)) == 0) {
|
||||
minsect_tonbo_aim_rock_process_init(actor, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_tonbo_rock_target_set(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game, xyz_t* p) {
|
||||
xyz_t arr[2] = { { 0.f, 22.f, 0.f }, { 0.f, 27.f, 0.f } };
|
||||
float g_f[2] = { 1.f, -12.f };
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
if (actor->_74 >= 6) {
|
||||
int gender = Common_Get(now_private)->gender;
|
||||
search_position_distance(&actor->_1C, &actor->_44);
|
||||
*p = player->head_pos;
|
||||
if (GETREG(NMREG, 0x11)) {
|
||||
arr[gender].y = GETREG(NMREG, 0x11) * 0.01f;
|
||||
}
|
||||
|
||||
arr[gender].x += sin_s(player->actor_class.shape_info.rotation.y) * g_f[gender];
|
||||
arr[gender].z += cos_s(player->actor_class.shape_info.rotation.y) * g_f[gender];
|
||||
|
||||
p->x += arr[gender].x;
|
||||
p->y += arr[gender].y;
|
||||
p->z += arr[gender].z;
|
||||
if (actor->_04 == minsect_tonbo_rock_wait_process && actor->_74 >= 6) {
|
||||
xyz_t pp;
|
||||
xyz_t_sub(&player->feel_pos, &player->head_pos, &pp);
|
||||
actor->_7E = atans_table(pp.y, pp.z);
|
||||
actor->_80 = atans_table(pp.y, -pp.x);
|
||||
} else if (actor->_04 != minsect_tonbo_rock_process || actor->_74 < 6) {
|
||||
actor->_7E = 0;
|
||||
actor->_80 = 0;
|
||||
}
|
||||
} else {
|
||||
*p = tonbo_rock_pos[(int)actor->_74];
|
||||
}
|
||||
}
|
||||
|
||||
// UNUSED
|
||||
void minsect_tonbo_suprised_near_player() {
|
||||
extern _strip(f32);
|
||||
_strip(75.f);
|
||||
_strip(6.f);
|
||||
_strip(55.f);
|
||||
}
|
||||
|
||||
BOOL minsect_tonbo_suprised_rest_player(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_74 >= 6) {
|
||||
actor->_7A = 1;
|
||||
minsect_tonbo_fly_process_init(actor, game);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
f32 minsect_tonbo_acc_change(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
f32 v;
|
||||
if (GETREG(NMREG, 5)) {
|
||||
return GETREG(NMREG, 5);
|
||||
}
|
||||
|
||||
if (GETREG(NMREG, 4)) {
|
||||
v = GETREG(NMREG, 4);
|
||||
} else {
|
||||
v = 55.f;
|
||||
}
|
||||
if (actor->_00 != 10) {
|
||||
if (actor->_00 == 9) {
|
||||
v *= 0.9f;
|
||||
} else if (actor->_00 == 11) {
|
||||
v *= 1.5f;
|
||||
} else if (actor->_00 == 12) {
|
||||
v *= 1.7f;
|
||||
}
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
void minsect_tonbo_max_speed_set(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
if (actor->_00 == 10) {
|
||||
actor->_5C = RANDOM_F(1.0f) + 1.75f;
|
||||
actor->_6E = 0;
|
||||
} else if (actor->_00 == 9) {
|
||||
actor->_5C = (RANDOM_F(1.0f) + 1.75f) * 0.9f;
|
||||
actor->_6E = 0;
|
||||
} else if (actor->_00 == 11) {
|
||||
actor->_5C = (RANDOM_F(1.0f) + 1.75f) * 1.5f;
|
||||
actor->_6E = 0;
|
||||
} else if (actor->_00 == 12) {
|
||||
actor->_5C = (RANDOM_F(1.0f) + 1.75f) * 1.7f;
|
||||
actor->_6E = 0;
|
||||
}
|
||||
}
|
||||
|
||||
f32 minsect_tonbo_aim_distance_set(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
f32 v;
|
||||
if (GETREG(NMREG, 2)) {
|
||||
v = (GETREG(NMREG, 2) + RANDOM_F(GETREG(NMREG, 3))) * 4.0f;
|
||||
} else if (actor->_00 == 12) {
|
||||
v = (RANDOM_F(5.0f) + 41.25f) * 4.0f;
|
||||
} else {
|
||||
v = (RANDOM_F(5.0f) + 27.5f) * 4.0f;
|
||||
}
|
||||
if (actor->_00 != 10) {
|
||||
if (actor->_00 == 9) {
|
||||
v *= 0.9f;
|
||||
} else if (actor->_00 == 11) {
|
||||
v *= 1.1f;
|
||||
} else if (actor->_00 == 12) {
|
||||
v *= 1.7f;
|
||||
}
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
void minsect_tonbo_aim_angle_check(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
f32 v;
|
||||
xyz_t b;
|
||||
if (GETREG(NMREG, 1)) {
|
||||
v = GETREG(NMREG, 1);
|
||||
} else {
|
||||
v = 30.f;
|
||||
}
|
||||
b = actor->_1C;
|
||||
b.x += sin_s(actor->_70) * v;
|
||||
b.z += cos_s(actor->_70) * v;
|
||||
if (b.x < 80.f) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(90);
|
||||
} else if (b.x > 480.f) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(-90);
|
||||
actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90));
|
||||
} else if (b.z > 560.f) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(-180);
|
||||
actor->_70 += (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90));
|
||||
} else if (b.z < 80.f) {
|
||||
actor->_70 = (s16)DEG2SHORT_ANGLE2(RANDOM2_F(90));
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_tonbo_normal_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
minsect_tonbo_max_speed_set(actor);
|
||||
actor->_40 = 0.0f;
|
||||
if (actor->_7A) {
|
||||
actor->_5C *= 1.5f;
|
||||
actor->_40 = actor->_5C / 3.0f;
|
||||
}
|
||||
actor->_7A = 0;
|
||||
actor->_78 = 0;
|
||||
actor->_04 = minsect_tonbo_normal_process;
|
||||
}
|
||||
|
||||
void minsect_tonbo_normal_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (actor->_78 != 2 && minsect_tonbo_bg_check(actor, game)) {
|
||||
if (RANDOM_F(1.0f) > 0.9f) {
|
||||
minsect_tonbo_aim_rock_process_init(actor, game);
|
||||
return;
|
||||
}
|
||||
actor->_78 = 2;
|
||||
if (RANDOM_F(1.0f) > 0.9f) {
|
||||
minsect_tonbo_near_target_set(actor, game);
|
||||
return;
|
||||
}
|
||||
actor->_6E = 0;
|
||||
}
|
||||
|
||||
switch (actor->_78) {
|
||||
case 0: {
|
||||
f32 acc;
|
||||
add_calc(&actor->_40, actor->_5C, CALC_EASE(0.5f), 0.3f, 0.05f);
|
||||
acc = minsect_tonbo_acc_change(actor);
|
||||
if (ABS(actor->_1C.x - actor->_44.x) <= acc && ABS(actor->_1C.z - actor->_44.z) <= acc) {
|
||||
actor->_78 = 1;
|
||||
}
|
||||
} break;
|
||||
case 1: {
|
||||
if (!add_calc(&actor->_40, 0.0f, CALC_EASE(0.1f), 0.25f, 0.05f)) {
|
||||
actor->_78 = 2;
|
||||
if (actor->_8C & 8) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(RANDOM2_F(90.f));
|
||||
} else {
|
||||
actor->_70 += DEG2SHORT_ANGLE(RANDOM2_F(90.f));
|
||||
}
|
||||
minsect_tonbo_aim_angle_check(actor);
|
||||
if (actor->_7C) {
|
||||
if (RANDOM_F(1.0f) > 0.9f) {
|
||||
minsect_tonbo_aim_rock_process_init(actor, game);
|
||||
} else if (RANDOM_F(1.0f) > 0.9f) {
|
||||
minsect_tonbo_near_target_set(actor, game);
|
||||
}
|
||||
}
|
||||
actor->_72 = 0;
|
||||
}
|
||||
} break;
|
||||
case 2: {
|
||||
if (!add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE2(0.6f), DEG2SHORT_ANGLE(15),
|
||||
DEG2SHORT_ANGLE(0.25f))) {
|
||||
actor->_6E--;
|
||||
if (actor->_6E < 0) {
|
||||
f32 v;
|
||||
minsect_tonbo_max_speed_set(actor);
|
||||
v = minsect_tonbo_aim_distance_set(actor);
|
||||
actor->_44 = actor->_1C;
|
||||
actor->_44.y += RANDOM2_F(30.f) + 5.0f;
|
||||
actor->_44.y = MAX(100.f, MIN(125.f, actor->_44.y));
|
||||
actor->_44.x += v * sin_s(actor->_68.y);
|
||||
actor->_44.z += v * cos_s(actor->_68.y);
|
||||
actor->_7C = 1;
|
||||
actor->_78 = 0;
|
||||
}
|
||||
}
|
||||
} break;
|
||||
} // end switch
|
||||
|
||||
minsect_tonbo_MoveF(actor);
|
||||
}
|
||||
|
||||
void minsect_tonbo_aim_rock_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_74 = RANDOM_F(16.0f);
|
||||
if (actor->_74 >= 6) {
|
||||
actor->_74 = 6;
|
||||
}
|
||||
while (MI_Control_Actor->_2F9C[2] & (1 << actor->_74)) {
|
||||
if (actor->_74 < 6) {
|
||||
actor->_74++;
|
||||
} else {
|
||||
actor->_74 = 0;
|
||||
}
|
||||
}
|
||||
MI_Control_Actor->_2F9C[2] |= (1 << actor->_74);
|
||||
if (actor->_00 == 12) {
|
||||
actor->_5C = (RANDOM_F(1.f) + 1.75f) * 1.7f;
|
||||
actor->_6E = 0;
|
||||
} else {
|
||||
actor->_5C = (RANDOM_F(1.f) + 1.75f);
|
||||
actor->_6E = 0;
|
||||
}
|
||||
actor->_40 = 0.0f;
|
||||
actor->_78 = 0;
|
||||
actor->_04 = minsect_tonbo_aim_rock_process;
|
||||
}
|
||||
|
||||
void minsect_tonbo_aim_rock_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t p;
|
||||
minsect_tonbo_rock_target_set(actor, game, &p);
|
||||
if (actor->_78 != 2 && minsect_tonbo_bg_check(actor, game)) {
|
||||
actor->_78 = 2;
|
||||
actor->_6E = 0;
|
||||
}
|
||||
switch (actor->_78) {
|
||||
case 0: {
|
||||
f32 acc;
|
||||
add_calc(&actor->_40, actor->_5C, CALC_EASE(0.5f), 0.3f, 0.05f);
|
||||
acc = minsect_tonbo_acc_change(actor);
|
||||
if (ABS(actor->_1C.x - actor->_44.x) <= acc && ABS(actor->_1C.z - actor->_44.z) <= acc) {
|
||||
actor->_78 = 1;
|
||||
}
|
||||
} break;
|
||||
case 1: {
|
||||
if (!add_calc(&actor->_40, 0.0f, CALC_EASE(0.1f), 0.25f, 0.05f)) {
|
||||
actor->_78 = 2;
|
||||
if (actor->_8C & 8) {
|
||||
actor->_70 = DEG2SHORT_ANGLE(RANDOM2_F(90.f));
|
||||
minsect_tonbo_aim_angle_check(actor);
|
||||
} else if (RANDOM_F(1.0f) > 0.8f) {
|
||||
MI_Control_Actor->_2F9C[2] &= ~(1 << actor->_74);
|
||||
minsect_tonbo_normal_process_init(actor, game);
|
||||
return;
|
||||
} else {
|
||||
actor->_70 = search_position_angleY(&actor->_1C, &p);
|
||||
actor->_70 += DEG2SHORT_ANGLE2(RANDOM2_F(45.f));
|
||||
}
|
||||
actor->_72 = 0;
|
||||
}
|
||||
} break;
|
||||
case 2: {
|
||||
if (!add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE2(0.6f), DEG2SHORT_ANGLE(15),
|
||||
DEG2SHORT_ANGLE(0.025f))) {
|
||||
actor->_6E--;
|
||||
if (actor->_6E < 0) {
|
||||
f32 v, s;
|
||||
v = search_position_distanceXZ(&actor->_1C, &p);
|
||||
s = (actor->_1C.y - p.y) * sin_s(DEG2SHORT_ANGLE(30));
|
||||
if (v < 50.f && v > s) {
|
||||
minsect_tonbo_rock_process_init(actor, game);
|
||||
} else {
|
||||
minsect_tonbo_max_speed_set(actor);
|
||||
v = minsect_tonbo_aim_distance_set(actor);
|
||||
actor->_44 = actor->_1C;
|
||||
actor->_44.y += RANDOM2_F(30.f) + 5.0f;
|
||||
actor->_44.y = MAX(100.f, MIN(125.f, actor->_44.y));
|
||||
actor->_44.x += v * sin_s(actor->_68.y);
|
||||
actor->_44.z += v * cos_s(actor->_68.y);
|
||||
actor->_78 = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
} break;
|
||||
} // end switch
|
||||
|
||||
minsect_tonbo_MoveF(actor);
|
||||
}
|
||||
|
||||
void minsect_tonbo_rock_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t p;
|
||||
minsect_tonbo_rock_target_set(actor, game, &p);
|
||||
actor->_44 = p;
|
||||
actor->_70 = search_position_angleY(&actor->_1C, &p);
|
||||
actor->_40 = 2.0f;
|
||||
actor->_04 = minsect_tonbo_rock_process;
|
||||
}
|
||||
|
||||
void minsect_tonbo_rock_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t p;
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
minsect_tonbo_rock_target_set(actor, game, &p);
|
||||
actor->_44 = p;
|
||||
if ((!player->actor_class.speed || (!minsect_tonbo_suprised_rest_player(actor, game))) &&
|
||||
!(player->actor_class.world.position.x > 500.f && actor->_74 >= 6 &&
|
||||
minsect_tonbo_suprised_rest_player(actor, game)) &&
|
||||
!add_calc_short_angle2(&actor->_68.y, actor->_70, CALC_EASE2(0.6f), DEG2SHORT_ANGLE(15),
|
||||
DEG2SHORT_ANGLE(0.025f))) {
|
||||
chase_xyz_t(&actor->_1C, &actor->_44, actor->_40);
|
||||
add_calc(&actor->_40, 0.25f, CALC_EASE(0.1f), 0.25f, 0.05f);
|
||||
add_calc_short_angle2(&actor->_76, DEG2SHORT_ANGLE(0), CALC_EASE2(0.3f), DEG2SHORT_ANGLE(15),
|
||||
DEG2SHORT_ANGLE(0.025f));
|
||||
if (actor->_74 >= 6) {
|
||||
f32 v = 6.0f;
|
||||
f32 dist = search_position_distance(&actor->_1C, &actor->_44);
|
||||
if (GETREG(NMREG, 0x10)) {
|
||||
v = GETREG(NMREG, 0x10) * 0.01f;
|
||||
}
|
||||
if (dist < v) {
|
||||
s16 s;
|
||||
xyz_t p2;
|
||||
v = 0.6f;
|
||||
xyz_t_sub(&player->feel_pos, &player->head_pos, &p2);
|
||||
if (GETREG(NMREG, 0x12)) {
|
||||
v = GETREG(NMREG, 0x12) * 0.01f;
|
||||
}
|
||||
if (chase_s(&actor->_7E, atans_table(p2.y, p2.z), (s16)DEG2SHORT_ANGLE2(v)) &&
|
||||
chase_s(&actor->_80, atans_table(p2.y, -p2.x), (s16)DEG2SHORT_ANGLE2(v)) &&
|
||||
(f32)__fabs(actor->_1C.x - p.x) < 0.008f && (f32)__fabs(actor->_1C.y - p.y) < 0.008f &&
|
||||
(f32)__fabs(actor->_1C.z - p.z) < 0.008f) {
|
||||
minsect_tonbo_rock_wait_process_init(actor, game);
|
||||
}
|
||||
}
|
||||
} else if ((f32)__fabs(actor->_1C.x - p.x) < 0.008f && (f32)__fabs(actor->_1C.y - p.y) < 0.008f &&
|
||||
(f32)__fabs(actor->_1C.z - p.z) < 0.008f) {
|
||||
minsect_tonbo_rock_wait_process_init(actor, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_tonbo_rock_wait_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_04 = minsect_tonbo_rock_wait_process;
|
||||
actor->_10 = 0.0f;
|
||||
actor->_6E = (s16)RANDOM_F(540.f) + 60;
|
||||
}
|
||||
|
||||
void minsect_tonbo_rock_wait_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t p;
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
minsect_tonbo_rock_target_set(actor, game, &p);
|
||||
actor->_6E--;
|
||||
if (actor->_10 > 0.0f) {
|
||||
if ((int)actor->_0C == 1 && actor->_6E < 0) {
|
||||
actor->_10 = 0.0f;
|
||||
actor->_6E = (s16)RANDOM_F(540.f) + 60;
|
||||
if (actor->_8E == 0) {
|
||||
actor->_6E *= 5;
|
||||
}
|
||||
}
|
||||
} else if (actor->_6E < 0) {
|
||||
if (actor->_8E == 1 && RANDOM_F(1.0f) > 0.75f) {
|
||||
minsect_tonbo_fly_process_init(actor, game);
|
||||
} else {
|
||||
actor->_10 = 0.5f;
|
||||
actor->_6E = 0x10;
|
||||
}
|
||||
}
|
||||
|
||||
mi_tonbo_check_player(actor, game);
|
||||
actor->_82--;
|
||||
if (actor->_82 < 0) {
|
||||
actor->_82 = 0;
|
||||
}
|
||||
if (actor->_82 > 1600) {
|
||||
actor->_82 = 1600;
|
||||
}
|
||||
if (actor->_8E) {
|
||||
if (actor->_82 > 150) {
|
||||
minsect_tonbo_fly_process_init(actor, game);
|
||||
actor->_82 = 0;
|
||||
}
|
||||
} else {
|
||||
if (actor->_82 > 1500) {
|
||||
minsect_tonbo_fly_process_init(actor, game);
|
||||
actor->_82 = 0;
|
||||
}
|
||||
}
|
||||
if (!(player->actor_class.speed > 1.9f && minsect_tonbo_suprised_rest_player(actor, game)) &&
|
||||
!(player->actor_class.world.position.x > 500.f && minsect_tonbo_suprised_rest_player(actor, game))) {
|
||||
if (actor->_74 >= 6) {
|
||||
actor->_68.y += player->actor_class.shape_info.rotation.y - (player->old_shape_angle.y);
|
||||
}
|
||||
actor->_1C = p;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_tonbo_fly_process_init(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
f32 v;
|
||||
MI_Control_Actor->_2F9C[2] &= ~(1 << actor->_74);
|
||||
actor->_5C = RANDOM_F(1.0f) + 1.75f;
|
||||
v = minsect_tonbo_aim_distance_set(actor);
|
||||
v *= 0.3f;
|
||||
minsect_tonbo_max_speed_set(actor);
|
||||
actor->_5C *= 0.7f;
|
||||
actor->_44 = actor->_1C;
|
||||
actor->_44.y += RANDOM_F(10.f) + 10.f;
|
||||
actor->_44.y = MAX(100.f, MIN(125.f, actor->_44.y));
|
||||
actor->_44.x += v * sin_s(actor->_68.y);
|
||||
actor->_44.z += v * cos_s(actor->_68.y);
|
||||
actor->_04 = minsect_tonbo_fly_process;
|
||||
actor->_6E = 0;
|
||||
actor->_40 = 0.0f;
|
||||
actor->_10 = 0.5f;
|
||||
actor->_7A = 0;
|
||||
actor->_7C = 0;
|
||||
}
|
||||
|
||||
void minsect_tonbo_fly_process(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
if (minsect_tonbo_bg_check(actor, game)) {
|
||||
actor->_44.y = MAX(100.f, MIN(125.f, actor->_44.y));
|
||||
minsect_tonbo_normal_process_init(actor, game);
|
||||
} else {
|
||||
f32 v;
|
||||
minsect_tonbo_MoveF(actor);
|
||||
add_calc(&actor->_40, actor->_5C, CALC_EASE(0.7f), 0.5f, 0.5f);
|
||||
v = minsect_tonbo_acc_change(actor);
|
||||
if (ABS(actor->_1C.y - actor->_44.y) <= 10.f && ABS(actor->_1C.x - actor->_44.x) <= v &&
|
||||
ABS(actor->_1C.z - actor->_44.z) <= v) {
|
||||
minsect_tonbo_normal_process_init(actor, game);
|
||||
actor->_78 = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_tonbo_mv(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
actor->_8E = get_now_mind_flag(actor, game);
|
||||
actor->_04(actor, game);
|
||||
if (actor->_04 != minsect_tonbo_rock_process && actor->_04 != minsect_tonbo_rock_wait_process &&
|
||||
actor->_04 != minsect_tonbo_fly_process) {
|
||||
actor->_76 += 910;
|
||||
actor->_58 = 4.0f * sin_s(actor->_76);
|
||||
} else {
|
||||
add_calc0(&actor->_58, 0.1f, 0.1f);
|
||||
actor->_76 = 0;
|
||||
}
|
||||
minsect_tree_ObjCheck(actor);
|
||||
minsect_fly_BGCheck(actor, 600.0f, 280.0f);
|
||||
if (actor->_8C & 0x10) {
|
||||
actor->_1C.z = 600.f;
|
||||
}
|
||||
if (actor->_8C & 0x9e) {
|
||||
actor->_72 = actor->_8C;
|
||||
}
|
||||
actor->_0C += actor->_10;
|
||||
if (!minsect_mdl[actor->_00][(int)actor->_0C]) {
|
||||
actor->_0C = 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void minsect_tonbo_dw(MUSEUM_INSECT_PRIVATE_DATA* actor, GAME* game) {
|
||||
xyz_t arr[2] = { { 0.f, 22.f, 0.f }, { 0.f, 27.f, 0.f } };
|
||||
float g_f[2] = { 1.f, -12.f };
|
||||
search_position_distance(&actor->_1C, &actor->_44);
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
if (((actor->_04 == minsect_tonbo_rock_wait_process) && (actor->_74 >= 6)) ||
|
||||
((actor->_04 == minsect_tonbo_rock_process && (actor->_74 >= 6))) || GETREG(NMREG, 0x13)) {
|
||||
int gender = Common_Get(now_private)->gender;
|
||||
PLAYER_ACTOR* player = get_player_actor_withoutCheck((GAME_PLAY*)game);
|
||||
if (GETREG(NMREG, 0x11)) {
|
||||
arr[gender].y = GETREG(NMREG, 0x11) * 0.01f;
|
||||
}
|
||||
arr[gender].x += g_f[gender] * sin_s(player->actor_class.shape_info.rotation.y);
|
||||
arr[gender].z += g_f[gender] * cos_s(player->actor_class.shape_info.rotation.y);
|
||||
Matrix_translate(actor->_1C.x - arr[gender].x, actor->_58 + (actor->_1C.y - arr[gender].y),
|
||||
actor->_1C.z - arr[gender].z, FALSE);
|
||||
Matrix_rotateXYZ(actor->_7E, 0, actor->_80, TRUE);
|
||||
Matrix_translate(arr[gender].x, arr[gender].y, arr[gender].z, TRUE);
|
||||
} else {
|
||||
Matrix_translate(actor->_1C.x, actor->_1C.y + actor->_58, actor->_1C.z, FALSE);
|
||||
}
|
||||
Matrix_scale(actor->_14, actor->_14, actor->_14, TRUE);
|
||||
Matrix_rotateXYZ(actor->_68.x, actor->_68.y, actor->_68.z, TRUE);
|
||||
|
||||
OPEN_POLY_XLU_DISP(game->graph);
|
||||
gSPMatrix(POLY_XLU_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, minsect_mdl[actor->_00][(int)actor->_0C]);
|
||||
CLOSE_POLY_XLU_DISP(game->graph);
|
||||
|
||||
OPEN_DISP(game->graph);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, minsect_mdl[actor->_00][0]);
|
||||
CLOSE_DISP(game->graph);
|
||||
minsect_draw_shadow(actor, game);
|
||||
}
|
||||
|
||||
void minsect_tonbo_MoveF(MUSEUM_INSECT_PRIVATE_DATA* actor) {
|
||||
xyz_t p = actor->_44;
|
||||
f32 v = search_position_distance(&actor->_1C, &actor->_44);
|
||||
if (actor->_00 == 12) {
|
||||
if (actor->_8C & 0x1e && !(actor->_8C & 8)) {
|
||||
v = 0.0f;
|
||||
} else {
|
||||
v = -v * 0.01f;
|
||||
}
|
||||
p.y += v;
|
||||
} else {
|
||||
if (actor->_8C & 0x1e && !(actor->_8C & 8)) {
|
||||
v = 0.0f;
|
||||
} else {
|
||||
v = -v * 0.15f;
|
||||
}
|
||||
p.y += v;
|
||||
}
|
||||
chase_xyz_t(&actor->_1C, &p, actor->_40);
|
||||
}
|
||||
Reference in New Issue
Block a user