From 5d0abe3198ee75ea7a41b85a5f8a62b6f644cc3f Mon Sep 17 00:00:00 2001 From: Cuyler36 <24523422+Cuyler36@users.noreply.github.com> Date: Thu, 12 Sep 2024 08:04:10 -0400 Subject: [PATCH] Implement & link m_player_lib --- config/rel_slices.yml | 5 + include/ac_uki.h | 13 + include/ac_weather.h | 38 +- include/m_actor_dlftbls.h | 20 +- include/m_collision_bg.h | 9 + include/m_common_data.h | 7 +- include/m_event.h | 7 + include/m_field_info.h | 2 +- include/m_name_table.h | 1 + include/m_npc.h | 319 +- include/m_player.h | 49 +- include/m_player_lib.h | 267 +- include/m_private.h | 2 + src/ac_npc_rtc_think.c.inc | 2 +- src/ac_t_umbrella.c | 24 +- src/ac_weather.c | 134 +- src/ac_weather_leaf.c | 127 +- src/ac_weather_rain.c | 132 +- src/ac_weather_sakura.c | 126 +- src/ac_weather_snow.c | 6 +- src/m_demo.c | 1518 +++++----- src/m_field_info.c | 6 +- src/m_npc.c | 3 +- src/m_player_common.c_inc | 6 +- src/m_player_controller.c_inc | 21 +- src/m_player_lib.c | 3710 ++++++++++++++++++++++++ src/m_player_main_rotate_octagon.c_inc | 2 +- src/m_player_other_func.c_inc | 6 +- src/m_scene.c | 2 +- src/m_titledemo.c | 2 +- 30 files changed, 5158 insertions(+), 1408 deletions(-) create mode 100644 src/m_player_lib.c diff --git a/config/rel_slices.yml b/config/rel_slices.yml index 933105be..cf830f3a 100644 --- a/config/rel_slices.yml +++ b/config/rel_slices.yml @@ -256,6 +256,11 @@ m_player_call.c: .text: [0x803D8AEC, 0x803D8CEC] .data: [0x8065B9A0, 0x8065B9C8] .bss: [0x8129CC98, 0x8129CCA8] +m_player_lib.c: + .text: [0x803D8CEC, 0x803DE8A0] + .rodata: [0x80642A10, 0x806431C8] + .data: [0x8065B9C8, 0x8065BE98] + .bss: [0x8129CCA8, 0x8129CD40] m_police_box.c: .text: [0x803DE8A0, 0x803DEE38] .rodata: [0x806431C8, 0x806431D8] diff --git a/include/ac_uki.h b/include/ac_uki.h index cd1ef093..631782f1 100644 --- a/include/ac_uki.h +++ b/include/ac_uki.h @@ -8,6 +8,19 @@ extern "C" { #endif +enum { + aUKI_STATUS_0, + aUKI_STATUS_CARRY, + aUKI_STATUS_READY, + aUKI_STATUS_CAST, + aUKI_STATUS_FLOAT, + aUKI_STATUS_VIB, + aUKI_STATUS_COMEBACK, + aUKI_STATUS_7, + + aUKI_STATUS_NUM +}; + typedef void (*aUKI_SET_VALUE_PROC)(ACTOR* actorx, xyz_t pos, xyz_t pos_speed, int param_4, int command); typedef mActor_name_t (*aUKI_GET_FISH_TYPE)(ACTOR* actorx); diff --git a/include/ac_weather.h b/include/ac_weather.h index 7774e372..decb49aa 100644 --- a/include/ac_weather.h +++ b/include/ac_weather.h @@ -11,32 +11,32 @@ extern "C" { extern int aWeather_ChangingWeather(); extern void aWeather_RequestChangeWeatherToIsland(); extern void aWeather_RequestChangeWeatherFromIsland(); - + extern ACTOR_PROFILE Weather_Profile; -typedef struct ac_weather_priv_s{ +typedef struct ac_weather_priv_s { xyz_t pos; xyz_t speed; f32 currentY; f32 unk1C; s16 timer; - s16 work[5]; + s16 work[5]; u8 use; u8 id; u8 status; -}aWeather_Priv; +} aWeather_Priv; typedef struct weather_actor_s WEATHER_ACTOR; -typedef void (*CHANGE_WEATHER_PROC)(ACTOR* weather, s16 status, s16 level); -typedef int (*GET_WEATHER_PRV_NUM)(ACTOR* weather); -typedef void (*REMOVE_WEATHER_PRV)(ACTOR* weather, int id); +typedef void (*CHANGE_WEATHER_PROC)(ACTOR* actorx, s16 status, s16 level); +typedef int (*GET_WEATHER_PRV_NUM)(ACTOR* actorx); +typedef void (*REMOVE_WEATHER_PRV)(ACTOR* actorx, int id); typedef aWeather_Priv* (*GET_WEATHER_PRV)(u8 status, s16 timer, xyz_t* pos, xyz_t* speed, ACTOR* weather, int id); typedef int (*WEATHER_SOUND_EFFECT)(); -typedef void (*CHANGE_WEATER_INSTANCE_PROC)(WEATHER_ACTOR* weather, s16 status, s16 level); +typedef void (*CHANGE_WEATER_INSTANCE_PROC)(ACTOR* actorx, s16 status, s16 level); -typedef struct ac_weather_clip_s{ - WEATHER_ACTOR* actor; +typedef struct ac_weather_clip_s { + ACTOR* actor; CHANGE_WEATHER_PROC change_weather; GET_WEATHER_PRV_NUM get_priv_num; REMOVE_WEATHER_PRV remove_priv; @@ -44,25 +44,24 @@ typedef struct ac_weather_clip_s{ WEATHER_SOUND_EFFECT stop_sound; WEATHER_SOUND_EFFECT start_sound; CHANGE_WEATER_INSTANCE_PROC change_weather_instance; -}aWeather_Clip_c; +} aWeather_Clip_c; - -typedef void (*MK_WEATHER_PROC)(ACTOR*,GAME*); +typedef void (*MK_WEATHER_PROC)(ACTOR*, GAME*); typedef void (*CT_WEATHER_PROC)(aWeather_Priv*, GAME*); typedef void (*MV_WEATHER_PROC)(aWeather_Priv*, GAME*); typedef void (*MT_WEATHER_PROC)(aWeather_Priv*, GAME*); typedef void (*ST_WEATHER_PROC)(GAME*); typedef void (*DW_WEATHER_PROC)(aWeather_Priv*, GAME*); -typedef struct ac_weather_profile_s{ +typedef struct ac_weather_profile_s { MK_WEATHER_PROC make; CT_WEATHER_PROC constructor; MV_WEATHER_PROC move; ST_WEATHER_PROC set; DW_WEATHER_PROC draw; -}aWeather_Profile_c; +} aWeather_Profile_c; -struct weather_actor_s{ +struct weather_actor_s { /* 0x000 */ ACTOR actor_class; /* 0x174 */ aWeather_Profile_c* current_profile; /* 0x178 */ s16 current_status; @@ -74,10 +73,10 @@ struct weather_actor_s{ /* 0x184 */ u8* ptr; /* 0x188 */ xyz_t pos; /* 0x194 */ aWeather_Priv* priv; - /* 0x198 */ void* t; + /* 0x198 */ void* t; /* 0x19C */ u8 request_change; /* 0x19E */ s16 unk19E; - /* 0x1A0 */ aWeather_Clip_c clip; + /* 0x1A0 */ aWeather_Clip_c clip; /* 0x1C0 */ s16 timer; /* 0x1C2 */ s16 timer2; /* 0x1C4 */ xyz_t wind_info; @@ -90,11 +89,10 @@ struct weather_actor_s{ /* 0x1DC */ s16 start_sound_effect; /* 0x1DE */ s16 stop_sound_effect; /* 0x1E0 */ s16 basement_event; -}; +}; #ifdef __cplusplus } #endif #endif - diff --git a/include/m_actor_dlftbls.h b/include/m_actor_dlftbls.h index 57167a8d..435f7b4e 100644 --- a/include/m_actor_dlftbls.h +++ b/include/m_actor_dlftbls.h @@ -9,16 +9,16 @@ extern "C" { #endif typedef struct actor_dlftbl_s { - u32 rom_start; // unused in AC - u32 rom_end; // unused in AC - u8* ram_start; // used only with a check, but never set in AC - u8* ram_end; // unused in AC - u8* alloc_buf; // used in AC but only on free check and data is never allocated - ACTOR_PROFILE* profile; // profile for the actor - int unk; // unused in AC - u16 flags; // related to memory pinning but functionally useless in AC since alloc_buf is never allocated - s8 num_actors; // number of this type of actor that currently exist - s8 unk2; // unused in AC + /* 0x00 */ u32 rom_start; // unused in AC + /* 0x04 */ u32 rom_end; // unused in AC + /* 0x08 */ u8* ram_start; // used only with a check, but never set in AC + /* 0x0C */ u8* ram_end; // unused in AC + /* 0x10 */ u8* alloc_buf; // used in AC but only on free check and data is never allocated + /* 0x14 */ ACTOR_PROFILE* profile; // profile for the actor + /* 0x18 */ int unk; // unused in AC + /* 0x1C */ u16 flags; // related to memory pinning but functionally useless in AC since alloc_buf is never allocated + /* 0x1E */ s8 num_actors; // number of this type of actor that currently exist + /* 0x1F */ s8 unk2; // unused in AC } ACTOR_DLFTBL; extern int actor_dlftbls_num; diff --git a/include/m_collision_bg.h b/include/m_collision_bg.h index c7181452..240b8661 100644 --- a/include/m_collision_bg.h +++ b/include/m_collision_bg.h @@ -345,6 +345,15 @@ extern f32 mCoBG_Wpos2BgUtCenterHeight_AddColumn(xyz_t pos); extern f32 mCoBG_UtNum2UtCenterY_Keep(int ut_x, int ut_z); extern int mCoBG_RegistDecalCircle(const xyz_t* pos_p, f32 radius_start, f32 radius_end, s16 timer); +typedef int (*mCoBG_LINECHECK_PROC)(mActor_name_t); + +#define mCoBG_LINECHECK_CAT_WALL (1 << 0) +#define mCoBG_LINECHECK_CAT_GROUND (1 << 1) +#define mCoBG_LINECHECK_CAT_WATER (1 << 2) + +extern int mCoBG_LineCheck_RemoveFg(xyz_t* rev_pos, xyz_t start_pos, xyz_t end_pos, mCoBG_LINECHECK_PROC check_proc, + int category); + extern void mCoBG_InitMoveBgData(); extern void mCoBG_InitBlockBgCheckMode(); extern void mCoBG_InitDecalCircle(); diff --git a/include/m_common_data.h b/include/m_common_data.h index d072f6ea..192cd1e5 100644 --- a/include/m_common_data.h +++ b/include/m_common_data.h @@ -241,7 +241,8 @@ typedef struct common_data_s { /* 0x028592 */ s16 demo_profiles[2]; /* demo_profiles[0] is for demo_clip, demo_profiles[1] is for demo_clip2 */ /* 0x028596 */ u16 copy_protect_code; /* 0x028598 */ int event_keep_flags[4]; - /* 0x0285A8 */ u8 _285A8[0x0285BE - 0x0285A8]; + /* 0x0285A8 */ u8 _285A8[0x0285BD - 0x0285A8]; + /* 0x0285BD */ s8 player_warp_request; /* 0x0285BE */ s8 player_actor_exists; /* 0x0285BF */ s8 complete_payment_type; /* 0x0285C0 */ s8 player_decoy_flag; @@ -258,8 +259,8 @@ typedef struct common_data_s { /* 0x028839 */ s8 player_bee_chase_flag; /* 0x02883A */ s8 goki_shocked_flag; /* 0x02883B */ u8 time_changed_flag; - /* 0x02883C */ u8 unable_to_wade_flag; - /* 0x02883D */ u8 fail_emu_flag; + /* 0x02883C */ s8 unable_wade; + /* 0x02883D */ s8 fail_emu_flag; /* 0x02883E */ u8 train_coming_flag; /* state tracker for when train is going to spawn/has spawned */ /* 0x02883F */ u8 train_exists_flag; /* state tracker for when train exists */ /* 0x028840 */ u8 train_control_state; /* current train state */ diff --git a/include/m_event.h b/include/m_event.h index ef08001b..0504a46e 100644 --- a/include/m_event.h +++ b/include/m_event.h @@ -350,6 +350,13 @@ enum { mEv_SPECIAL_STATE_NUM }; +enum { + mEv_EVENT_MAIL_VT_DAY, /* Valentine's day */ + mEv_EVENT_MAIL_WT_DAY, /* White day */ + + mEv_EVENT_MAIL_NUM +}; + #define mEv_STATUS_ACTIVE (1 << 0) /* event is active */ #define mEv_STATUS_STOP (1 << 1) /* event is stopped */ #define mEv_STATUS_SHOW (1 << 2) /* event is shown */ diff --git a/include/m_field_info.h b/include/m_field_info.h index 6717e39a..490ef92a 100644 --- a/include/m_field_info.h +++ b/include/m_field_info.h @@ -308,7 +308,7 @@ extern int mFI_UnregistMoveActorList(mActor_name_t actor_name, int bx, int bz); extern int mFI_AddMoveActorList(mActor_name_t actor_name, int bx, int bz, int ut_x, int ut_z, s16 arg); extern mFM_move_actor_c* mFI_MoveActorListDma(int bx, int bz); extern void mFI_InitMoveActorBitData(); -extern void mFI_SetPlayerWade(GAME_PLAY* play); +extern void mFI_SetPlayerWade(GAME* game); extern int mFI_CheckPlayerWade(int wade); extern int mFI_GetPlayerWade(); extern int mFI_GetNextBlockNum(int* bx, int* bz); diff --git a/include/m_name_table.h b/include/m_name_table.h index 3d65771a..7f14095d 100644 --- a/include/m_name_table.h +++ b/include/m_name_table.h @@ -497,6 +497,7 @@ extern int mNT_check_unknown(mActor_name_t item_no); (item) >= GOLD_TREE_STUMP001 && (item) <= GOLD_TREE_STUMP004 \ ) +#define IS_ITEM_HITTABLE_TREE(item) (IS_ITEM_SMALL_TREE(item) || IS_ITEM_MED_TREE(item) || IS_ITEM_LARGE_TREE(item) || IS_ITEM_FULL_TREE(item)) #define IS_ITEM_SHAKEABLE_TREE(item) (IS_ITEM_MED_TREE(item) || IS_ITEM_LARGE_TREE(item) || IS_ITEM_FULL_TREE(item)) #define IS_ITEM_BEE_TREE(item) ((item) == TREE_BEES || (item) == CEDAR_TREE_BEES || (item) == GOLD_TREE_BEES) diff --git a/include/m_npc.h b/include/m_npc.h index 9343c3d3..80feb7ed 100644 --- a/include/m_npc.h +++ b/include/m_npc.h @@ -23,7 +23,7 @@ extern "C" { #define mNpc_GET_TYPE(npc_id) ((npc_id) & 0xF000) #define mNpc_IS_SPECIAL(npc_id) (mNpc_GET_TYPE(npc_id) == 0xD000) -#define ANIMAL_NUM_MIN 5 +#define ANIMAL_NUM_MIN 5 #define ANIMAL_NUM_MAX 15 /* Maximum number of villagers possible in town */ #define ANIMAL_MEMORY_NUM 7 #define ANIMAL_CATCHPHRASE_LEN 10 @@ -38,188 +38,194 @@ extern "C" { #define mNpc_ISLANDER_NO ANIMAL_NUM_MAX enum { - mNpc_MOOD_0, - mNpc_MOOD_1, - mNpc_MOOD_2, - mNpc_MOOD_3, - mNpc_MOOD_4, - mNpc_MOOD_5, - mNpc_MOOD_6, - mNpc_MOOD_7, - mNpc_MOOD_8, + mNpc_MOOD_0, + mNpc_MOOD_1, + mNpc_MOOD_2, + mNpc_MOOD_3, + mNpc_MOOD_4, + mNpc_MOOD_5, + mNpc_MOOD_6, + mNpc_MOOD_7, + mNpc_MOOD_8, - mNpc_MOOD_NUM + mNpc_MOOD_NUM }; enum { - mNpc_LETTER_RANK_BAD, - mNpc_LETTER_RANK_OK, + mNpc_LETTER_RANK_BAD, + mNpc_LETTER_RANK_OK, - mNpc_LETTER_RANK_NUM + mNpc_LETTER_RANK_NUM }; enum { - mNpc_EVENT_MAIL_VT_DAY, /* valentine's day */ - mNpc_EVENT_MAIL_WT_DAY, /* white day (JP only) */ + mNpc_EVENT_MAIL_VT_DAY, /* valentine's day */ + mNpc_EVENT_MAIL_WT_DAY, /* white day (JP only) */ - mNpc_EVENT_MAIL_NUM + mNpc_EVENT_MAIL_NUM }; enum { - mNpc_EVENT_MAIL_BEST_FRIEND, - mNpc_EVENT_MAIL_OK_FRIEND, - mNpc_EVENT_MAIL_NOT_FRIEND, + mNpc_EVENT_MAIL_BEST_FRIEND, + mNpc_EVENT_MAIL_OK_FRIEND, + mNpc_EVENT_MAIL_NOT_FRIEND, - mNpc_EVENT_MAIL_FRIEND_NUM + mNpc_EVENT_MAIL_FRIEND_NUM }; enum { - mNpc_GROW_STARTER, - mNpc_GROW_MOVE_IN, - mNpc_GROW_ISLANDER, + mNpc_GROW_STARTER, + mNpc_GROW_MOVE_IN, + mNpc_GROW_ISLANDER, - mNpc_GROW_NUM + mNpc_GROW_NUM }; enum { - mNpc_NAME_TYPE_SPNPC, - mNpc_NAME_TYPE_NPC, + mNpc_NAME_TYPE_SPNPC, + mNpc_NAME_TYPE_NPC, - mNpc_NAME_TYPE_NUM + mNpc_NAME_TYPE_NUM }; enum { - mNpc_FEEL_NORMAL, - mNpc_FEEL_HAPPY, - mNpc_FEEL_ANGRY, - mNpc_FEEL_SAD, - mNpc_FEEL_SLEEPY, - mNpc_FEEL_PITFALL, + mNpc_FEEL_NORMAL, + mNpc_FEEL_HAPPY, + mNpc_FEEL_ANGRY, + mNpc_FEEL_SAD, + mNpc_FEEL_SLEEPY, + mNpc_FEEL_PITFALL, - mNpc_FEEL_NUM, + mNpc_FEEL_NUM, - mNpc_FEEL_6 = mNpc_FEEL_NUM, - mNpc_FEEL_UZAI_0, - mNpc_FEEL_UZAI_1, + mNpc_FEEL_6 = mNpc_FEEL_NUM, + mNpc_FEEL_UZAI_0, + mNpc_FEEL_UZAI_1, - mNpc_FEEL_ALL_NUM + mNpc_FEEL_ALL_NUM }; enum { - mNpc_PATIENCE_MILDLY_ANNOYED, - mNpc_PATIENCE_ANNOYED, - mNpc_PATIENCE_NORMAL, + mNpc_PATIENCE_MILDLY_ANNOYED, + mNpc_PATIENCE_ANNOYED, + mNpc_PATIENCE_NORMAL, - mNpc_PATIENCE_NUM + mNpc_PATIENCE_NUM }; /* sizeof(Anmremail_c) == 0x16 */ typedef struct animal_remail_s { - lbRTC_ymd_c date; /* date sent */ - u8 name[ANIMAL_NAME_LEN]; /* villager name */ - u8 land_name[LAND_NAME_SIZE]; /* town name */ - struct { - u8 cond:1; /* was letter good or not */ - u8 looks:7; /* personality */ - } flags; + lbRTC_ymd_c date; /* date sent */ + u8 name[ANIMAL_NAME_LEN]; /* villager name */ + u8 land_name[LAND_NAME_SIZE]; /* town name */ + struct { + u8 cond : 1; /* was letter good or not */ + u8 looks : 7; /* personality */ + } flags; } Anmremail_c; /* sizeof(Anmplmail_c) == 0x104 */ typedef struct animal_player_maiL_s { - /* 0x000 */ u8 font; /* 'font' to use for letter info */ - /* 0x001 */ u8 paper_type; - /* 0x002 */ mActor_name_t present; - /* 0x004 */ u8 header_back_start; /* position for name insertion in header */ - /* 0x005 */ u8 header[MAIL_HEADER_LEN]; - /* 0x01D */ u8 body[MAIL_BODY_LEN]; - /* 0x0DD */ u8 footer[MAIL_FOOTER_LEN]; - /* 0x0FD */ u8 pad0; /* likely pad */ - /* 0x0FE */ lbRTC_ymd_c date; /* sent date */ + /* 0x000 */ u8 font; /* 'font' to use for letter info */ + /* 0x001 */ u8 paper_type; + /* 0x002 */ mActor_name_t present; + /* 0x004 */ u8 header_back_start; /* position for name insertion in header */ + /* 0x005 */ u8 header[MAIL_HEADER_LEN]; + /* 0x01D */ u8 body[MAIL_BODY_LEN]; + /* 0x0DD */ u8 footer[MAIL_FOOTER_LEN]; + /* 0x0FD */ u8 pad0; /* likely pad */ + /* 0x0FE */ lbRTC_ymd_c date; /* sent date */ } Anmplmail_c; /* sizeof(Anmhome_c) == 5 */ typedef struct animal_home_s { - /* 0x00 */ u8 type_unused; /* Likely the house type, but seems to be unused outside of SChk_Anmhome_c_sub */ - /* 0x01 */ u8 block_x; /* acre x position */ - /* 0x02 */ u8 block_z; /* acre y position */ - /* 0x03 */ u8 ut_x; /* unit x position */ - /* 0x04 */ u8 ut_z; /* unit z position */ + /* 0x00 */ u8 type_unused; /* Likely the house type, but seems to be unused outside of SChk_Anmhome_c_sub */ + /* 0x01 */ u8 block_x; /* acre x position */ + /* 0x02 */ u8 block_z; /* acre y position */ + /* 0x03 */ u8 ut_x; /* unit x position */ + /* 0x04 */ u8 ut_z; /* unit z position */ } Anmhome_c; /* sizeof(Anmlet_c) == 1 */ typedef struct animal_letter_info_s { - u8 exists:1; /* letter received by villager and exists */ - u8 cond:1; /* mNpc_LETTER_RANK_* */ - u8 send_reply:1; /* set when the villager should reply */ - u8 has_present_cloth:1; /* set when the villager's held present shirt is from this letter */ - u8 wearing_present_cloth:1; /* set when a villager is wearing the shirt sent with the saved letter */ - u8 bit5_7:3; /* seemingly unused */ + u8 exists : 1; /* letter received by villager and exists */ + u8 cond : 1; /* mNpc_LETTER_RANK_* */ + u8 send_reply : 1; /* set when the villager should reply */ + u8 has_present_cloth : 1; /* set when the villager's held present shirt is from this letter */ + u8 wearing_present_cloth : 1; /* set when a villager is wearing the shirt sent with the saved letter */ + u8 bit5_7 : 3; /* seemingly unused */ } Anmlet_c; /* sizeof(Anmlnd_c) == 0xA */ typedef struct animal_land_mem_s { - /* 0x00 */ u8 name[LAND_NAME_SIZE]; - /* 0x08 */ u16 id; + /* 0x00 */ u8 name[LAND_NAME_SIZE]; + /* 0x08 */ u16 id; } Anmlnd_c; typedef struct island_animal_best_ftr_s { - u32 check; - u16 have_bitfield; + u32 check; + u16 have_bitfield; } Anm_bestFtr_c; /* sizeof(memuni_u) == 0xC */ typedef union { - Anmlnd_c land; /* size = 0xA */ - Anm_bestFtr_c island; /* size = 6 */ + Anmlnd_c land; /* size = 0xA */ + Anm_bestFtr_c island; /* size = 6 */ } memuni_u; /* sizeof(Anmmem_c) == 0x138 */ typedef struct animal_memory_s { - /* 0x000 */ PersonalID_c memory_player_id; /* personal id of the player memory belongs to */ - /* 0x014 */ lbRTC_time_c last_speak_time; /* time the player last spoke to this villager */ - /* 0x01C */ memuni_u memuni; /* union between town NPC land memory & islander player action memory */ - /* 0x028 */ u64 saved_town_tune; /* memory origin town tune */ - /* 0x030 */ s8 friendship; /* friendship with the player */ - /* 0x031 */ Anmlet_c letter_info; /* saved letter flags */ - /* 0x032 */ Anmplmail_c letter; /* saved letter */ + /* 0x000 */ PersonalID_c memory_player_id; /* personal id of the player memory belongs to */ + /* 0x014 */ lbRTC_time_c last_speak_time; /* time the player last spoke to this villager */ + /* 0x01C */ memuni_u memuni; /* union between town NPC land memory & islander player action memory */ + /* 0x028 */ u64 saved_town_tune; /* memory origin town tune */ + /* 0x030 */ s8 friendship; /* friendship with the player */ + /* 0x031 */ Anmlet_c letter_info; /* saved letter flags */ + /* 0x032 */ Anmplmail_c letter; /* saved letter */ } Anmmem_c; /* sizeof(anmuni) == 8 */ typedef union { - u8 previous_land_name[LAND_NAME_SIZE]; - mActor_name_t island_ftr[mNpc_ISLAND_FTR_SAVE_NUM]; + u8 previous_land_name[LAND_NAME_SIZE]; + mActor_name_t island_ftr[mNpc_ISLAND_FTR_SAVE_NUM]; } anmuni_u; /* sizeof(AnmHPMail_c) == 0x1C */ typedef struct animal_password_mail_s { - /* 0x00 */ lbRTC_time_c receive_time; - /* 0x08 */ u8 password[20]; /* TODO: this should not be a hardcoded length */ + /* 0x00 */ lbRTC_time_c receive_time; + /* 0x08 */ u8 password[20]; /* TODO: this should not be a hardcoded length */ } AnmHPMail_c; /* sizeof(Animal_c) == 0x988 */ typedef struct animal_s { - /* 0x000 */ AnmPersonalID_c id; /* this villager's ID */ - /* 0x010 */ Anmmem_c memories[ANIMAL_MEMORY_NUM]; /* memories of players who've spoken to this villager */ - /* 0x898 */ Anmhome_c home_info; /* home position info */ - /* 0x89D */ u8 catchphrase[ANIMAL_CATCHPHRASE_LEN]; /* may be called 'word_ending' */ - /* 0x8A8 */ mQst_contest_c contest_quest; /* current contest quest information */ - /* 0x8D0 */ u8 parent_name[PLAYER_NAME_LEN]; /* name of the player who 'spawned' the villager in, unsure why this is tracked */ - /* 0x8D8 */ anmuni_u anmuni; /* name of the last town the villager lived in or saved island ftr */ - /* 0x8E0 */ u16 previous_land_id; /* id of the previous town the villager lived in */ - /* 0x8E2 */ u8 mood; /* probably called 'feel' based on code */ - /* 0x8E3 */ u8 mood_time; /* probably called 'feel_tim' based on code */ - /* 0x8E4 */ mActor_name_t cloth; /* shirt the villager is wearing */ - /* 0x8E6 */ u16 remove_info; /* info about villager moving between towns? kinda stubbed */ - /* 0x8E8 */ u8 is_home; /* TRUE when the villager is home, otherwise FALSE */ - /* 0x8E9 */ u8 moved_in; /* TRUE when the villager moved in after town creation, FALSE if they started out in town */ - /* 0x8EA */ u8 removing; /* TRUE when the villager is leaving town, FALSE otherwise */ - /* 0x8EB */ u8 cloth_original_id; /* 0xFF when not wearing an Able Sister's pattern, otherwise 0-3 indicating which pattern */ - /* 0x8EC */ s8 umbrella_id; /* 0xFF when no umbrella, 0-31 when a standard umbrella, 32-35 when using an Able Sister's pattern */ - /* 0x8ED */ u8 unk_8ED; /* Exists according to mISL_gc_to_agb_animal, but seems unused in practice */ - /* 0x8EE */ mActor_name_t present_cloth; /* The most recently received shirt from a letter which the villager may change into */ - /* 0x8F0 */ u8 animal_relations[ANIMAL_NUM_MAX]; /* relationships between all villagers in town, starts at 128 which is neutral */ - /* 0x900 */ AnmHPMail_c hp_mail[ANIMAL_HP_MAIL_NUM]; /* mail password info storage */ - /* 0x000 */ u8 unused[24]; /* unknown usage/unused */ + /* 0x000 */ AnmPersonalID_c id; /* this villager's ID */ + /* 0x010 */ Anmmem_c memories[ANIMAL_MEMORY_NUM]; /* memories of players who've spoken to this villager */ + /* 0x898 */ Anmhome_c home_info; /* home position info */ + /* 0x89D */ u8 catchphrase[ANIMAL_CATCHPHRASE_LEN]; /* may be called 'word_ending' */ + /* 0x8A8 */ mQst_contest_c contest_quest; /* current contest quest information */ + /* 0x8D0 */ u8 + parent_name[PLAYER_NAME_LEN]; /* name of the player who 'spawned' the villager in, unsure why this is tracked */ + /* 0x8D8 */ anmuni_u anmuni; /* name of the last town the villager lived in or saved island ftr */ + /* 0x8E0 */ u16 previous_land_id; /* id of the previous town the villager lived in */ + /* 0x8E2 */ u8 mood; /* probably called 'feel' based on code */ + /* 0x8E3 */ u8 mood_time; /* probably called 'feel_tim' based on code */ + /* 0x8E4 */ mActor_name_t cloth; /* shirt the villager is wearing */ + /* 0x8E6 */ u16 remove_info; /* info about villager moving between towns? kinda stubbed */ + /* 0x8E8 */ u8 is_home; /* TRUE when the villager is home, otherwise FALSE */ + /* 0x8E9 */ u8 + moved_in; /* TRUE when the villager moved in after town creation, FALSE if they started out in town */ + /* 0x8EA */ u8 removing; /* TRUE when the villager is leaving town, FALSE otherwise */ + /* 0x8EB */ u8 + cloth_original_id; /* 0xFF when not wearing an Able Sister's pattern, otherwise 0-3 indicating which pattern */ + /* 0x8EC */ s8 umbrella_id; /* 0xFF when no umbrella, 0-31 when a standard umbrella, 32-35 when using an Able + Sister's pattern */ + /* 0x8ED */ u8 unk_8ED; /* Exists according to mISL_gc_to_agb_animal, but seems unused in practice */ + /* 0x8EE */ mActor_name_t + present_cloth; /* The most recently received shirt from a letter which the villager may change into */ + /* 0x8F0 */ u8 animal_relations[ANIMAL_NUM_MAX]; /* relationships between all villagers in town, starts at 128 which + is neutral */ + /* 0x900 */ AnmHPMail_c hp_mail[ANIMAL_HP_MAIL_NUM]; /* mail password info storage */ + /* 0x000 */ u8 unused[24]; /* unknown usage/unused */ } Animal_c; /* @@ -230,69 +236,69 @@ typedef struct animal_s { /* sizeof(Anmret_c) == 0xC */ typedef struct animal_return_s { - /* 0x00 */ mActor_name_t npc_id; /* id of the villager who left */ - /* 0x02 */ u8 talk_bit; /* which players have already interacted with this villager */ - /* 0x03 */ u8 exist; /* if the villager exists */ - /* 0x04 */ lbRTC_time_c renew_time; /* time that this struct was updated */ + /* 0x00 */ mActor_name_t npc_id; /* id of the villager who left */ + /* 0x02 */ u8 talk_bit; /* which players have already interacted with this villager */ + /* 0x03 */ u8 exist; /* if the villager exists */ + /* 0x04 */ lbRTC_time_c renew_time; /* time that this struct was updated */ } Anmret_c; typedef struct demo_npc_s { - mActor_name_t npc_name; /* villager id, E0XX */ - u32 block_x, block_z; /* spawn acre */ - u32 ut_x, ut_z; /* spawn unit in acre */ + mActor_name_t npc_name; /* villager id, E0XX */ + u32 block_x, block_z; /* spawn acre */ + u32 ut_x, ut_z; /* spawn unit in acre */ } mNpc_demo_npc_c; typedef struct { - u8 type; - u8 palette; - u8 wall_id; - u8 floor_id; - mActor_name_t main_layer_id; - mActor_name_t secondary_layer_id; + u8 type; + u8 palette; + u8 wall_id; + u8 floor_id; + mActor_name_t main_layer_id; + mActor_name_t secondary_layer_id; } mNpc_NpcHouseData_c; typedef struct npc_conversation_s { - u8 beesting:1; // talk to player about their beesting - u8 fish_complete:1; // talk to the player about catching all fish - u8 insect_complete:1; // talk to the player about catching all insects - u8 unk:5; + u8 beesting : 1; // talk to player about their beesting + u8 fish_complete : 1; // talk to the player about catching all fish + u8 insect_complete : 1; // talk to the player about catching all insects + u8 unk : 5; } mNpc_NpcConversation_c; typedef struct npc_list_s { - mActor_name_t name; - mActor_name_t field_name; - xyz_t house_position; - xyz_t position; - u8 appear_flag; - mNpc_NpcConversation_c conversation_flags; - mQst_base_c quest_info; - mNpc_NpcHouseData_c house_data; - mActor_name_t reward_furniture; + mActor_name_t name; + mActor_name_t field_name; + xyz_t house_position; + xyz_t position; + u8 appear_flag; + mNpc_NpcConversation_c conversation_flags; + mQst_base_c quest_info; + mNpc_NpcHouseData_c house_data; + mActor_name_t reward_furniture; } mNpc_NpcList_c; typedef struct event_npc_s { - mActor_name_t event_id; /* event NPC id */ - mActor_name_t texture_id; /* real NPC id which is used for texture data */ - mActor_name_t npc_id; /* non-texture NPC id used for other NPC data */ - mActor_name_t cloth_id; /* cloth texture id */ - u8 exists; /* has the actor been spawned yet? */ - u8 in_use; /* is this event npc structure being used? */ - u16 _A; /* exists based on size of structure, seems unused */ + mActor_name_t event_id; /* event NPC id */ + mActor_name_t texture_id; /* real NPC id which is used for texture data */ + mActor_name_t npc_id; /* non-texture NPC id used for other NPC data */ + mActor_name_t cloth_id; /* cloth texture id */ + u8 exists; /* has the actor been spawned yet? */ + u8 in_use; /* is this event npc structure being used? */ + u16 _A; /* exists based on size of structure, seems unused */ } mNpc_EventNpc_c; typedef struct mask_npc_s { - mActor_name_t mask_id; /* 'mask' actor id */ - mActor_name_t npc_id; /* NPC actor id whose data will be used */ - mActor_name_t cloth_id; /* cloth actor id */ - u8 exists; /* has the actor been spawned yet? */ - u8 in_use; /* is this mask npc structure being used? */ - Animal_c animal_data; /* animal data is copied if the mask npc is a standard villager NPC */ + mActor_name_t mask_id; /* 'mask' actor id */ + mActor_name_t npc_id; /* NPC actor id whose data will be used */ + mActor_name_t cloth_id; /* cloth actor id */ + u8 exists; /* has the actor been spawned yet? */ + u8 in_use; /* is this mask npc structure being used? */ + Animal_c animal_data; /* animal data is copied if the mask npc is a standard villager NPC */ } mNpc_MaskNpc_c; typedef struct npc_default_data_s { - mActor_name_t cloth; - u16 catchphrase_str_idx; - s8 umbrella; + mActor_name_t cloth; + u16 catchphrase_str_idx; + s8 umbrella; } mNpc_Default_Data_c; extern void mNpc_AddNowNpcMax(u8* npc_max); @@ -340,7 +346,8 @@ extern void mNpc_CopyAnimalInfo(Animal_c* dst, Animal_c* src); extern int mNpc_SearchAnimalinfo(Animal_c* animal, mActor_name_t npc_id, int count); extern Animal_c* mNpc_GetAnimalInfoP(mActor_name_t npc_id); extern int mNpc_SearchAnimalPersonalID(AnmPersonalID_c* anm_pid); -extern AnmPersonalID_c* mNpc_GetOtherAnimalPersonalIDOtherBlock(AnmPersonalID_c* exclude_pids, int count, int bx, int bz, int check_flag); +extern AnmPersonalID_c* mNpc_GetOtherAnimalPersonalIDOtherBlock(AnmPersonalID_c* exclude_pids, int count, int bx, + int bz, int check_flag); extern AnmPersonalID_c* mNpc_GetOtherAnimalPersonalID(AnmPersonalID_c* pids, int count); extern void mNpc_SetAnimalThisLand(Animal_c* animal, int count); extern int mNpc_GetSameLooksNum(u8 looks); @@ -354,7 +361,7 @@ extern int mNpc_SendMailtoNpc(Mail_c* mail); extern void mNpc_ClearRemail(Anmremail_c* remail); extern void mNpc_Remail(); extern u8 mNpc_GetPaperType(); -extern int mNpc_SendVtdayMail(); +extern int mNpc_SendVtdayMail(int type); extern int mNpc_CheckFriendship(PersonalID_c* pid, Animal_c* animal); extern int mNpc_SendEventBirthdayCard(PersonalID_c* pid); extern int mNpc_SendEventBirthdayCard2(PersonalID_c* pid, int player_no); @@ -366,7 +373,8 @@ extern void mNpc_ChangePresentCloth(); extern u8* mNpc_GetWordEnding(ACTOR* actor); extern void mNpc_ResetWordEnding(ACTOR* actor); extern int mNpc_GetFreeEventNpcIdx(); -extern int mNpc_RegistEventNpc(mActor_name_t event_id, mActor_name_t texture_id, mActor_name_t npc_id, mActor_name_t cloth_id); +extern int mNpc_RegistEventNpc(mActor_name_t event_id, mActor_name_t texture_id, mActor_name_t npc_id, + mActor_name_t cloth_id); extern void mNpc_UnRegistEventNpc(mNpc_EventNpc_c* npc); extern void mNpc_ClearEventNpc(); extern mNpc_EventNpc_c* mNpc_GetSameEventNpc(mActor_name_t event_id); @@ -383,7 +391,8 @@ extern void mNpc_SetAnimalTitleDemo(mNpc_demo_npc_c* demo_npc, Animal_c* animal, extern int mNpc_GetReservedUtNum(int* ut_x, int* ut_z, mActor_name_t* item); extern int mNpc_BlockNum2ReservedUtNum(int* ut_x, int* ut_z, int bx, int bz); extern void mNpc_MakeReservedListBeforeFieldct(Anmhome_c* reserved, int reserved_num, u8* reserved_count); -extern void mNpc_MakeReservedListAfterFieldct(Anmhome_c* reserved, int reserved_num, u8* reserved_count, u8 bx_max, u8 bz_max); +extern void mNpc_MakeReservedListAfterFieldct(Anmhome_c* reserved, int reserved_num, u8* reserved_count, u8 bx_max, + u8 bz_max); extern mNpc_InitNpcData(); extern void mNpc_InitNpcList(mNpc_NpcList_c* npclist, int count); extern void mNpc_SetNpcList(mNpc_NpcList_c* npclist, Animal_c* animal, int count, int malloc_flag); diff --git a/include/m_player.h b/include/m_player.h index aa435a51..12bc9129 100644 --- a/include/m_player.h +++ b/include/m_player.h @@ -775,6 +775,37 @@ enum { mPlayer_GOLDEN_ITEM_TYPE_NUM }; +enum { + mPlayer_USE_FACE_ROM_TYPE_TEX, + mPlayer_USE_FACE_ROM_TYPE_PAL, + + mPlayer_USE_FACE_ROM_TYPE_NUM +}; + +enum { + mPlayer_EYE_TEX0, + mPlayer_EYE_TEX1, + mPlayer_EYE_TEX2, + mPlayer_EYE_TEX3, + mPlayer_EYE_TEX4, + mPlayer_EYE_TEX5, + mPlayer_EYE_TEX6, + mPlayer_EYE_TEX7, + + mPlayer_EYE_TEX_NUM +}; + +enum { + mPlayer_MOUTH_TEX0, + mPlayer_MOUTH_TEX1, + mPlayer_MOUTH_TEX2, + mPlayer_MOUTH_TEX3, + mPlayer_MOUTH_TEX4, + mPlayer_MOUTH_TEX5, + + mPlayer_MOUTH_TEX_NUM +}; + #define mPlayer_SETUP_TEXTURE_ANIMATION_NONE (0 << 0) /* Where is (1 << 0)? */ #define mPlayer_SETUP_TEXTURE_ANIMATION_EYE (1 << 1) @@ -1987,10 +2018,10 @@ typedef struct { typedef struct controller_data_s { MCON mcon; - s8 on; - s8 now; - s8 unk3A; - s8 unk3B; + s8 trigger_btn_a; + s8 btn_a; + s8 trigger_btn_b; + s8 btn_b; mActor_name_t equiped_item; } mPlayer_Controller_Data_c; @@ -2174,10 +2205,10 @@ struct player_actor_s { /* 0x12D0 */ int (*request_main_demo_standing_train_all_proc)(GAME*, int); /* 0x12D4 */ int (*request_main_stung_bee_all_proc)(GAME*, int); /* 0x12D8 */ int (*request_main_shock_all_proc)(GAME*, f32, s16, s8, int, int); - /* 0x12DC */ int (*request_main_change_cloth_forNPC_proc)(GAME*, mActor_name_t, int); + /* 0x12DC */ int (*request_main_change_cloth_forNPC_proc)(GAME*, mActor_name_t, u16, int); /* 0x12E0 */ int (*request_main_push_snowball_all_proc)(GAME*, void*, int, int); - /* 0x12E4 */ int (*request_main_stung_mosquito_all_proc)(GAME*, int, int); - /* 0x12E8 */ int (*request_main_switch_on_lighthouse_all_proc)(GAME*, const xyz_t*, int, int); + /* 0x12E4 */ int (*request_main_stung_mosquito_all_proc)(GAME*, void*, int); + /* 0x12E8 */ int (*request_main_switch_on_lighthouse_all_proc)(GAME*, const xyz_t*, s16, int); /* 0x12EC */ int (*request_main_demo_geton_boat_all_proc)(GAME*, const xyz_t*, s16, int); /* 0x12F0 */ int (*request_main_demo_getoff_boat_standup_all_proc)(GAME*, const xyz_t*, s16, int); /* 0x12F4 */ int (*request_main_demo_get_golden_item2_all_proc)(GAME*, int, int); @@ -2194,7 +2225,7 @@ struct player_actor_s { /* 0x1320 */ int (*SetParam_for_push_snowball_proc)(GAME*, const xyz_t*, s16, f32); /* 0x1324 */ int (*able_submenu_request_main_index_proc)(GAME*); /* 0x1328 */ int (*check_able_change_camera_normal_index_proc)(ACTOR*); - /* 0x132C */ int (*Check_able_force_speak_label_proc)(GAME*, ACTOR*); + /* 0x132C */ int (*Check_able_force_speak_label_proc)(GAME*, void*); /* 0x1330 */ int (*check_cancel_request_change_proc_index_proc)(int); /* 0x1334 */ u32 (*Get_item_net_catch_label_proc)(ACTOR*); /* 0x1338 */ int (*Change_item_net_catch_label_proc)(ACTOR*, u32, s8); @@ -2217,7 +2248,7 @@ struct player_actor_s { /* 0x137C */ mActor_name_t (*Get_itemNo_forWindow_proc)(ACTOR*); /* 0x1380 */ int (*check_cancel_event_without_priority_proc)(GAME*); /* 0x1384 */ int (*CheckScene_AbleSubmenu_proc)(); - /* 0x1388 */ int (*Check_stung_mosquito_proc)(GAME*, ACTOR*); + /* 0x1388 */ int (*Check_stung_mosquito_proc)(GAME*, void*); /* 0x138C */ int a_btn_pressed; /* 0x1390 */ int a_btn_triggers_submenu; /* 0x1394 */ mActor_name_t item_in_front; /* item directly in front of the player */ diff --git a/include/m_player_lib.h b/include/m_player_lib.h index 37d4f645..0ad50ffe 100644 --- a/include/m_player_lib.h +++ b/include/m_player_lib.h @@ -10,123 +10,182 @@ extern "C" { #endif -extern void mPlib_Object_Exchange_keep_Player_dt(GAME_PLAY*); -extern PLAYER_ACTOR* get_player_actor_withoutCheck(GAME_PLAY* play); -extern mPlayer_Controller_Data_c* mPlib_Get_controller_data_for_title_demo_p(); -extern void mPlib_SetData1_controller_data_for_title_demo(int btn_a, int btn_b, f32 stick_x, f32 stick_y); -extern void mPlib_SetData2_controller_data_for_title_demo(mActor_name_t tool); -extern void mPlib_Clear_controller_data_for_title_demo(void); -extern void mPlib_request_main_invade_type1(GAME_PLAY* play); -extern mActor_name_t mPlib_Get_itemNo_forWindow(); -extern int mPlib_check_able_change_camera_normal_index(void); -extern void mPlib_request_main_refuse_type1(GAME* game); -extern void mPlib_request_main_wait_type3(GAME* game); -extern void mPlib_Set_able_force_speak_label(ACTOR* actor); -extern void mPlib_Reset_able_force_speak_label(void); -extern int mPlib_request_main_demo_walk_type1(GAME* game, f32 goal_x, f32 goal_z, f32 speed, int flag); -extern void mPlib_Set_goal_player_demo_walk(f32 goal_x, f32 goal_z, f32 speed); -extern void mPlib_Set_able_hand_all_item_in_demo(s8 enable); -extern void mPlib_change_player_cloth_info_lv2(Private_c* priv, mActor_name_t cloth_name); -extern int mPlib_Get_address_able_display(void); -extern int mPlib_get_player_actor_main_index(GAME* game); -extern int mPlib_check_player_actor_main_index_AllWade(GAME_PLAY* play); -extern int mPlib_request_main_demo_wait_type1(GAME* game, int param_2, void* param_3); -extern int mPlib_request_main_talk_type1(GAME_PLAY* play, ACTOR* other_actor, int turn, int flag); -extern int mPlib_request_main_talk_end_type1(GAME_PLAY* play, int return_demo_wait, int return_get_golden_axe_demo); -extern int mPlib_request_main_door_type1(GAME* game, const xyz_t* pos, s16 angle_y, int door_type, void* door_label); -extern int mPlib_request_main_door_type2(GAME* game, const xyz_t* pos, s16 angle_y, int door_type, void* door_label); -extern int mPlib_strength_request_main_door_priority(GAME* game); -extern int mPlib_check_request_main_wade_priority(GAME* game); -extern int mPlib_check_request_main_demo_wade_priority(GAME* game); -extern int mPlib_check_request_main_demo_geton_boat_wade_priority(GAME* game); -extern int mPlib_check_request_main_door_type1_priority(GAME* game); -extern int mPlib_check_request_main_door_type2_priority(GAME* game); -extern int mPlib_check_request_main_outdoor_priority(GAME* game); -extern int mPlib_check_request_main_talk_type1_priority(GAME* game); -extern int mPlib_check_request_main_speak_type1_priority(GAME* game); -extern int mPlib_Check_able_force_speak_label(GAME* game, ACTOR* label); -extern int mPlib_able_submenu_type1(GAME* game); -extern void mPlib_request_main_demo_wait_from_submenu(ACTOR* force_speak_label); -extern void mPlib_Load_PlayerTexAndPallet(void* tex_p, void* pal_p, int idx); -extern void mPlib_request_main_give_from_submenu(mActor_name_t disp_item, int submenu_ovl, int present_flag, - int counter_flag); -extern int mPlib_Check_tree_shaken_big(const xyz_t* pos); -extern int mPlib_Check_tree_shaken_little(const xyz_t* pos); -extern int mPlib_request_main_recieve_wait_type1(GAME* game, mActor_name_t item, int counter_flag); -extern int mPlib_able_player_warp_forEvent(void); -extern int mPlib_Get_unable_wade(void); -extern s8 mPlib_Get_ItemNoToItemKind(mActor_name_t); -extern void mPlib_Set_boat_angleZ(s16 angleZ); -extern int mPlib_Get_end_player_demo_walk(void); -extern int mPlib_request_main_demo_geton_boat_type1(f32 goal_x, f32 goal_z, s16 angleY); -extern int mPlib_request_main_demo_getoff_boat_standup_type1(const xyz_t* pos, s16 angleY); -extern int mPlib_check_player_actor_main_index_RecieveMove(GAME* game); -extern int mPlib_check_label_player_demo_wait(GAME* game, void* label); -extern int mPlib_check_player_outdoor_start(GAME* game); -extern void mPlib_Set_change_color_request(void); -extern int mPlib_check_player_open_umbrella(GAME_PLAY* play); -extern int mPlib_Check_UKI_COMEBACK_STATUS(void); -extern int mPlib_check_player_actor_main_index_OutDoorMove(GAME* game); -extern int mPlib_request_main_close_furniture_type1(GAME* game); -extern int mPlib_request_main_shock_type1(GAME* game, f32 time, s16 angle_y, int axe_swing); -extern int mPlib_request_main_hold_type1(GAME* game, int ftr_no, int player_direct, const xyz_t* player_pos); -extern int mPlib_check_player_warp_forEvent(void); -extern int mPlib_check_player_actor_main_index_Furniture_Move(GAME* game); -extern int mPlib_request_main_sitdown_type1(GAME* game, int direct, const xyz_t* pos, int ftr_no); -extern int mPlib_request_main_lie_bed_type1(GAME* game, int direct, const xyz_t* pos, int head_direct, int ftr_no); -extern void mPlib_change_player_cloth(GAME* game, int idx); -extern u32 mPlib_Get_item_net_catch_label(void); -extern int mPlib_Check_stung_mosquito(ACTOR* actorx); -extern int mPlib_request_main_stung_mosquito_type1(ACTOR* actorx); -extern int mPlib_Check_HitAxe(xyz_t* axe_pos); -extern int mPlib_Check_StopNet(xyz_t* net_pos); -extern int mPlib_Check_DigScoop(xyz_t* scoop_pos); -extern int mPlib_Check_tree_shaken(const xyz_t* pos); -extern int mPlib_Check_VibUnit_OneFrame(const xyz_t* pos); -extern int mPlib_Get_BasicItemShapeIndex_fromItemKind(int item_kind); -extern u8 mPlib_Get_Item_DataPointerType(int idx); -extern void* mPlib_Get_Item_DataPointer(int idx); -extern int mPlib_Get_BasicPlayerAnimeIndex_fromItemKind(int item_kind); extern cKF_Animation_R_c* mPlib_Get_Pointer_Animation(int anim_idx); +extern int mPlib_Get_BasicPlayerAnimeIndex_fromItemKind(int item_kind); extern int mPlib_Get_BasicPartTableIndex_fromAnimeIndex(int anim_idx); +extern void* mPlib_Get_Item_DataPointer(int data_kind); +extern int mPlib_Get_BasicItemShapeIndex_fromItemKind(int item_kind); extern int mPlib_Get_BasicItemAnimeIndex_fromItemKind(int item_kind); -extern void mPlib_DMA_player_Part_Table(s8* part_table_p, int idx); +extern u8 mPlib_Get_Item_DataPointerType(int data_idx); +extern void mPlib_Object_Exchange_keep_new_PlayerMdl(GAME_PLAY* play); +extern u32 mPlib_Get_PlayerTexRom_p(int idx); +extern void mPlib_Object_Exchange_keep_new_PlayerTex(GAME_PLAY* play, int bank_idx, int bank); +extern u32 mPlib_Get_PlayerPalletRom_p(int idx); +extern void mPlib_Object_Exchange_keep_new_PlayerPallet(GAME_PLAY* play, int bank_idx, int bank); +extern int mPlib_Check_PlayerClothInAram(int idx); +extern void mPlib_Object_Exchange_keep_new_PlayerFaceTex(GAME_PLAY* play); +extern void mPlib_Object_Exchange_keep_new_PlayerFacePallet(GAME_PLAY* play, int bank, int bank_idx); +extern void mPlib_Object_Exchange_keep_Player_dt(GAME_PLAY* play); +extern u8* mPlib_get_player_tex_p(GAME* game); +extern u16* mPlib_get_player_pallet_p(GAME* game); +extern u8* mPlib_get_player_face_p(GAME* game); +extern u16* mPlib_get_player_face_pallet_p(GAME* game); +extern void mPlib_change_player_cloth(GAME* game, u16 cloth_idx); +extern void mPlib_change_player_face_pallet(GAME* game); +extern void mPlib_change_player_face(GAME* game); +extern PLAYER_ACTOR* get_player_actor_withoutCheck(GAME_PLAY* play); +extern int mPlib_get_player_actor_main_index(GAME* game); +extern int mPlib_get_player_actor_request_main_index(GAME* game); extern cKF_Skeleton_R_c* mPlib_get_player_mdl_p(void); +extern s16 mPlib_get_player_Object_Bank(void); +extern void mPlib_DMA_player_Part_Table(s8* part_table_p, int idx); +extern void mPlib_change_player_cloth_info(mPr_cloth_c* cloth_p, mActor_name_t item); +extern void mPlib_change_player_cloth_info_lv2(Private_c* priv, mActor_name_t item); +extern void mPlib_Load_PlayerTexAndPallet(void* tex_p, void* pal_p, int idx); +extern mPlayer_change_data_from_submenu_c* mPlib_Get_change_data_from_submenu_p(void); +extern void mPlib_Clear_change_data_from_submenu(void); +extern void mPlib_request_main_give_from_submenu(mActor_name_t item, int after_mode, int present_flag, + int surface_flag); +extern void mPlib_request_main_putin_scoop_from_submenu(const xyz_t* pos_p, mActor_name_t item, int gold_scoop_flag); +extern void mPlib_request_main_release_creature_gyoei_from_submenu(s16 angle_y, s16 item, int gold_scoop_flag); +extern void mPlib_request_main_release_creature_insect_from_submenu(int insect_type, int gold_scoop_flag); +extern s8 mPlib_Get_ItemNoToItemKind(mActor_name_t itemNo); +extern int mPlib_Get_ItemKindTOBalloonShapeType(int item_kind); +extern void mPlib_request_main_release_creature_balloon_from_submenu(mActor_name_t itemNo, int gold_scoop_flag); +extern void mPlib_request_main_wait_from_submenu(void); +extern void mPlib_request_main_demo_get_golden_item_from_submenu(void); +extern void mPlib_request_main_mail_land_from_submenu(void); +extern void mPlib_request_main_demo_wait_from_submenu(ACTOR* speak_actor_p); +extern void mPlib_Set_unable_wade(int v); +extern int mPlib_Get_unable_wade(void); +extern int mPlib_Check_able_force_speak_label(GAME* game, ACTOR* label); +extern void mPlib_Set_able_force_speak_label(ACTOR* label); +extern void mPlib_Reset_able_force_speak_label(void); extern u8* mPlib_Get_PlayerEyeTexAnimation_p(int anim_idx); extern u8* mPlib_Get_PlayerMouthTexAnimation_p(int anim_idx); extern u8* mPlib_Get_eye_tex_p(int idx); extern u8* mPlib_Get_mouth_tex_p(int idx); -extern u8* mPlib_get_player_tex_p(GAME* game); -extern u16* mPlib_get_player_pallet_p(GAME* game); -extern u16* mPlib_get_player_face_pallet_p(GAME* game); -extern int mPlib_Check_scoop_after(GAME* game, xyz_t* pos, mActor_name_t* item, ACTOR** hit_actor, int gold_shovel); -extern int mPlib_request_main_demo_standing_train_type1(GAME* game); -extern void mPlib_Set_unable_wade(int unable); +extern int mPlib_request_main_invade_type1(GAME* game); +extern int mPlib_request_main_refuse_type1(GAME* game); +extern int mPlib_request_main_wait_type3(GAME* game); +extern int mPlib_request_main_demo_get_golden_item2_type1(GAME* game, int golden_item_type); +extern int mPlib_request_main_talk_end_type1(GAME* game, int wait_demo, int demo_get_golden_axe); +extern int mPlib_request_main_talk_type1(GAME* game, ACTOR* talk_actor_p, int turn_flag, int umbrella_flag); +extern int mPlib_request_main_hold_type1(GAME* game, int ftr_no, int player_direct, const xyz_t* player_pos_p); +extern int mPlib_request_main_recieve_wait_type1(GAME* game, mActor_name_t item, int counter_flag); +extern int mPlib_request_main_give_type1(GAME* game, mActor_name_t item, int mode, int present, int on_surface); +extern int mPlib_request_main_sitdown_type1(GAME* game, int direct, const xyz_t* pos_p, int ftr_no); +extern int mPlib_request_main_close_furniture_type1(GAME* game); +extern int mPlib_request_main_lie_bed_type1(GAME* game, int direct, const xyz_t* pos_p, int head_direct, int ftr_no); +extern int mPlib_request_main_hide_type1(GAME* game); +extern int mPlib_request_main_groundhog_type1(GAME* game); +extern int mPlib_request_main_door_type1(GAME* game, const xyz_t* pos_p, s16 angle_y, int door_type, void* door_label); +extern int mPlib_request_main_door_type2(GAME* game, const xyz_t* pos_p, s16 angle_y, int door_type, void* door_label); +extern int mPlib_request_main_outdoor_type1(GAME* game, int is_start_demo, int door_type); +extern int mPlib_request_main_wash_car_type1(GAME* game, const xyz_t* car_pos_p, const xyz_t* ret_pos_p, + s16 ret_angle_y, ACTOR* ctrl_actor_p); +extern int mPlib_request_main_rotate_octagon_type1(GAME* game, const xyz_t* pos_p, s16 angle_y); +extern int mPlib_request_main_throw_money_type1(GAME* game, const xyz_t* pos_p, s16 angle_y); +extern int mPlib_request_main_pray_type1(GAME* game, const xyz_t* pos_p, s16 angle_y); +extern int mPlib_request_main_mail_jump_type1(GAME* game, const xyz_t* pos_p, s16 angle_y); +extern int mPlib_request_main_stung_bee_type1(GAME* game); +extern int mPlib_request_main_stung_mosquito_type1(void* label); +extern int mPlib_request_main_switch_on_lighthouse_type1(GAME* game, const xyz_t* pos_p, s16 angle_y); +extern int mPlib_request_main_demo_geton_boat_type1(f32 goal_x, f32 goal_z, s16 angleY); +extern int mPlib_request_main_demo_getoff_boat_standup_type1(const xyz_t* pos_p, s16 angleY); +extern int mPlib_request_main_shock_type1(GAME* game, f32 time, s16 angle_y, int axe_swing); +extern int mPlib_request_main_change_cloth_forNPC_type1(GAME* game, mActor_name_t cloth_item, u16 cloth_idx, + int try_on_flag); +extern int mPlib_request_main_push_snowball_type1(GAME* game, void* label); +extern int mPlib_request_main_push_snowball_end_type1(GAME* game); +extern int mPlib_request_main_demo_wait_type1(GAME* game, int umbrella_flag, void* label); +extern int mPlib_request_main_demo_walk_type1(GAME* game, f32 goal_x, f32 goal_z, f32 speed, int wait_flag); +extern int mPlib_request_main_demo_geton_train_type1(GAME* game, const xyz_t* pos_p); extern int mPlib_request_main_demo_getoff_train_type1(GAME* game); -extern int mPlib_check_player_actor_main_index_OutDoorMove2(GAME* game); -extern int mPlib_Check_SetOrderSubmenu(void); -extern void mPlib_Clear_change_data_from_submenu(void); +extern int mPlib_request_main_demo_standing_train_type1(GAME* game); +extern int mPlib_check_request_main_talk_type1_priority(GAME* game); +extern int mPlib_check_request_main_speak_type1_priority(GAME* game); +extern int mPlib_check_request_main_door_type1_priority(GAME* game); +extern int mPlib_check_request_main_door_type2_priority(GAME* game); +extern int mPlib_check_request_main_wade_priority(GAME* game); +extern int mPlib_check_request_main_demo_wade_priority(GAME* game); +extern int mPlib_check_request_main_demo_geton_boat_wade_priority(GAME* game); extern int mPlib_strength_request_main_wade_priority(GAME* game); extern int mPlib_strength_request_main_demo_wade_priority(GAME* game); -extern int mPlib_strength_request_main_demo_geton_boat_wade_priority(GAME* game); extern int mPlib_strength_request_main_wade_snowball_priority(GAME* game); -extern void mPlib_change_player_face(GAME* game); -extern void mPlib_change_player_cloth_info(mPr_cloth_c* cloth_p, mActor_name_t cloth_item); -extern int mPlib_Get_status_for_bee(void); -extern int mPlib_request_main_demo_get_golden_item2_type1(GAME* game, int golden_item_type); -extern void mPlib_Get_goal_player_demo_walk(f32* goal_pos_x, f32* goal_pos_z, f32* speed); +extern int mPlib_strength_request_main_demo_geton_boat_wade_priority(GAME* game); +extern int mPlib_strength_request_main_door_priority(GAME* game); +extern int mPlib_check_request_main_outdoor_priority(GAME* game); +extern int mPlib_Check_SetOrderSubmenu(void); +extern int mPlib_able_submenu_type1(GAME* game); +extern int mPlib_check_player_open_umbrella(GAME* game); +extern int mPlib_check_player_outdoor_start(GAME* game); +extern int mPlib_check_label_player_demo_wait(GAME* game, void* label); +extern void mPlib_Set_goal_player_demo_walk(f32 pos_x, f32 pos_z, f32 speed); +extern void mPlib_Get_goal_player_demo_walk(f32* pos_x_p, f32* pos_z_p, f32* speed_p); +extern void mPlib_Set_continue_player_after_demo_walk(int value); extern int mPlib_Get_continue_player_after_demo_walk(void); -extern void mPlib_Set_continue_player_after_demo_walk(int wait_flag); -extern void mPlib_Set_end_player_demo_walk(int end_flag); - -extern mPlayer_change_data_from_submenu_c* mPlib_Get_change_data_from_submenu_p(void); - -extern void mPlib_Object_Exchange_keep_new_PlayerMdl(GAME_PLAY* play); -extern void mPlib_Object_Exchange_keep_new_PlayerTex(GAME_PLAY* play, int bank_id, int base_idx); -extern void mPlib_Object_Exchange_keep_new_PlayerFaceTex(GAME_PLAY* play); -extern void mPlib_Object_Exchange_keep_new_PlayerFacePallet(GAME_PLAY* play, int bank_id, int base_idx); -extern void mPlib_Object_Exchange_keep_new_PlayerPallet(GAME_PLAY* play, int bank_id, int base_idx); -extern void mPlib_request_main_give_type1(GAME* game, mActor_name_t item, int mode, int present, int on_surface); +extern void mPlib_Set_end_player_demo_walk(int value); +extern int mPlib_Get_end_player_demo_walk(void); +extern int mPlib_Get_space_putin_item(void); +extern int mPlib_Get_space_putin_item_forTICKET(mActor_name_t* item_p); +extern int mPlib_Get_space_putin_item_forHITODAMA(mActor_name_t* item_p); +extern int mPlib_able_player_warp_forEvent(void); +extern int mPlib_request_player_warp_forEvent(void); +extern int mPlib_cancel_player_warp_forEvent(void); +extern int mPlib_check_player_warp_forEvent(void); +extern int mPlib_Check_HitAxe(xyz_t* pos_p); +extern int mPlib_Check_VibUnit_OneFrame(const xyz_t* pos_p); +extern int mPlib_Check_StopNet(xyz_t* pos_p); +extern u32 mPlib_Get_item_net_catch_label(void); +extern int mPlib_Change_item_net_catch_label(u32 label, s8 type); +extern int mPlib_Check_HitScoop(xyz_t* pos_p); +extern int mPlib_Check_DigScoop(xyz_t* pos_p); +extern int mPlib_Get_address_able_display(void); +extern int mPlib_Check_scoop_after(GAME* game, xyz_t* pos_p, mActor_name_t* item_p, ACTOR** reflect_actor_pp, + int gold_scoop); +extern int mPlib_Check_scene_able_change_camera_pos(void); +extern int mPlib_Check_RotateOctagon(void); +extern int mPlib_Set_EndWashCar(void); +extern int mPlib_Set_AnimeSpeedWashCar(f32 anime_speed); +extern int mPlib_Check_now_handin_item_kind(void); +extern int mPlib_Check_now_handin_item(void); +extern void mPlib_Set_able_hand_all_item_in_demo(s8 v); +extern int mPlib_Get_status_for_bee(void); +extern int mPlib_Check_end_stung_bee(void); +extern int mPlib_Check_Label_main_push_snowball(void* label); +extern int mPlib_Check_Label_main_wade_snowball(void* label); +extern int mPlib_Set_ScrollDemo_forWade_snowball(int dir, const xyz_t* snowball_dist_p); +extern int mPlib_GetSnowballPos_forWadeSnowball(xyz_t* pos_p); +extern int mPlib_CheckCondition_forWadeSnowball(const xyz_t* pos_p, s16 angle_y); +extern int mPlib_SetParam_for_push_snowball(const xyz_t* pos_p, s16 angle_y, f32 anim_speed); +extern void mPlib_Set_crash_snowball_for_wade(int v); +extern mPlayer_Controller_Data_c* mPlib_Get_controller_data_for_title_demo_p(void); +extern void mPlib_Clear_controller_data_for_title_demo(void); +extern void mPlib_SetData1_controller_data_for_title_demo(int btn_a, int btn_b, f32 stick_x, f32 stick_y); +extern void mPlib_SetData2_controller_data_for_title_demo(mActor_name_t item); +extern int mPlib_Check_CorrectPlayerPos_forEvent(void); +extern int mPlib_Check_UKI_COMEBACK_STATUS(void); +extern int mPlib_Check_tree_shaken(const xyz_t* pos_p); +extern int mPlib_Check_tree_shaken_little(const xyz_t* pos_p); +extern int mPlib_Check_tree_shaken_big(const xyz_t* pos_p); +extern mActor_name_t mPlib_Get_itemNo_forWindow(void); +extern int mPlib_able_birth_bee(void); +extern int mPlib_check_able_change_camera_normal_index(void); +extern int mPlib_check_player_actor_main_index_Furniture_Move(GAME* game); +extern int mPlib_check_player_actor_main_index_RecieveMove(GAME* game); +extern int mPlib_check_player_actor_main_index_Pitfall(GAME* game); +extern int mPlib_check_player_actor_main_index_OutDoorMove(GAME* game); +extern int mPlib_check_player_actor_main_index_OutDoorMove2(GAME* game); +extern int mPlib_check_player_actor_main_index_AllWade(GAME* game); +extern int mPlib_check_player_actor_main_index_catch_insect(GAME* game); +extern int mPlib_check_player_actor_main_index_catch_fish(GAME* game); +extern int mPlib_check_player_actor_start_switch_on_lighthouse(GAME* game); +extern int mPlib_Check_stung_mosquito(void* label); +extern void mPlib_Set_boat_angleZ(s16 angle_z); +extern int mPlib_CheckButtonOnly_forDush(void); +extern int mPlib_Check_golden_item_get_demo_end(int gold_item_type); +extern void mPlib_Set_change_color_request(void); #define GET_PLAYER_ACTOR(play) get_player_actor_withoutCheck(play) #define GET_PLAYER_ACTOR_NOW() get_player_actor_withoutCheck((GAME_PLAY*)gamePT) diff --git a/include/m_private.h b/include/m_private.h index 5350e98c..aa52f30b 100644 --- a/include/m_private.h +++ b/include/m_private.h @@ -87,6 +87,8 @@ enum { #define mPr_ORIGINAL_DESIGN_COUNT 8 #define mPr_RADIOCARD_MAX_DAYS 13 +#define mPr_ORIGINAL_DESIGN_IDX_VALID(idx) ((idx) >= 0 && (idx) < mPr_ORIGINAL_DESIGN_COUNT) + #define mPr_GET_ITEM_COND(all_cond, slot_no) (((all_cond) >> (((u32)(slot_no)) << 1)) & mPr_ITEM_COND_NUM) #define mPr_SET_ITEM_COND(all_cond, slot_no, cond) \ (((all_cond) & ~((u32)mPr_ITEM_COND_NUM << ((u32)(slot_no) << 1))) | ((u32)(cond) << ((u32)(slot_no) << 1))) diff --git a/src/ac_npc_rtc_think.c.inc b/src/ac_npc_rtc_think.c.inc index 224d9eac..f4b8fa58 100644 --- a/src/ac_npc_rtc_think.c.inc +++ b/src/ac_npc_rtc_think.c.inc @@ -17,7 +17,7 @@ static void aNRTC_think_title(NPC_ACTOR* actor, GAME_PLAY* play) { play->fb_wipe_type = 3; play->fb_fade_type = 4; - mPlib_request_main_invade_type1(play); + mPlib_request_main_invade_type1((GAME*)play); Actor_info_save_actor(play); rtc->think_idx = aNRTC_THINK_WAIT; } diff --git a/src/ac_t_umbrella.c b/src/ac_t_umbrella.c index edc5da0f..ff50ac2f 100644 --- a/src/ac_t_umbrella.c +++ b/src/ac_t_umbrella.c @@ -19,17 +19,19 @@ static void aTUMB_actor_ct(ACTOR* actor, GAME* game); static void aTUMB_actor_move(ACTOR* actor, GAME* game); static void aTUMB_actor_draw(ACTOR* actor, GAME* game); -ACTOR_PROFILE T_Umbrella_Profile = { mAc_PROFILE_T_UMBRELLA, - ACTOR_PART_BG, - ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, - EMPTY_NO, - ACTOR_OBJ_BANK_UMBRELLA, - sizeof(UMBRELLA_ACTOR), - &aTUMB_actor_ct, - NONE_ACTOR_PROC, - &aTUMB_actor_move, - &aTUMB_actor_draw, - NULL }; +ACTOR_PROFILE T_Umbrella_Profile = { + mAc_PROFILE_T_UMBRELLA, + ACTOR_PART_BG, + ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, + EMPTY_NO, + ACTOR_OBJ_BANK_UMBRELLA, + sizeof(UMBRELLA_ACTOR), + &aTUMB_actor_ct, + NONE_ACTOR_PROC, + &aTUMB_actor_move, + &aTUMB_actor_draw, + NULL, +}; extern Gfx e_umb01_model[]; extern Gfx kasa_umb01_model[]; diff --git a/src/ac_weather.c b/src/ac_weather.c index dd86a1ec..b5a23149 100644 --- a/src/ac_weather.c +++ b/src/ac_weather.c @@ -19,8 +19,8 @@ static void Weather_Actor_dt(ACTOR* actor, GAME* game); static void Weather_Actor_move(ACTOR* actor, GAME* game); static void Weather_Actor_draw(ACTOR* actor, GAME* game); -static void aWeather_SetNowProfile(WEATHER_ACTOR* weather, s16 id); -static int aWeather_CountWeatherPrivate(WEATHER_ACTOR* weather); +static void aWeather_SetNowProfile(ACTOR* actorx, s16 id); +static int aWeather_CountWeatherPrivate(ACTOR* actorx); static aWeather_Profile_c* profile_tbl[] = { &iam_weather_fine, &iam_weather_rain, &iam_weather_snow, &iam_weather_sakura, &iam_weather_leaf, @@ -58,12 +58,14 @@ static void aWeather_SysLevCall_MoveEnd(WEATHER_ACTOR* weather) { } static void aWeather_SysLevStart(u8 flag) { - Common_Get(clip.weather_clip)->actor->start_sound_effect = flag; + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; + + weather->start_sound_effect = flag; } static void aWeather_SysLevStop(u8 flag) { int stopFlag = flag; - WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; if (weather->start_sound_effect == stopFlag) { weather->start_sound_effect = 0; @@ -97,13 +99,12 @@ static void aWeather_RequestChangeWeather(ACTOR* actor, s16 status, s16 level) { } extern void aWeather_RequestChangeWeatherToIsland() { - aWeather_RequestChangeWeather(&Common_Get(clip.weather_clip)->actor->actor_class, Common_Get(island_weather), + aWeather_RequestChangeWeather(Common_Get(clip.weather_clip)->actor, Common_Get(island_weather), Common_Get(island_weather_intensity)); } extern void aWeather_RequestChangeWeatherFromIsland() { - aWeather_RequestChangeWeather(&Common_Get(clip.weather_clip)->actor->actor_class, - mEnv_SAVE_GET_WEATHER_TYPE(Save_Get(weather)), + aWeather_RequestChangeWeather(Common_Get(clip.weather_clip)->actor, mEnv_SAVE_GET_WEATHER_TYPE(Save_Get(weather)), mEnv_SAVE_GET_WEATHER_INTENSITY(Save_Get(weather))); } @@ -158,8 +159,7 @@ static aWeather_Priv* aWeather_GetWeatherPrv(u8 status, s16 timer, xyz_t* pos, x } static int aWeather_StopSysLevSE() { - WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; - + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; u8 current = weather->current_sound_effect; if (weather->sound_flag == 0) { @@ -174,8 +174,7 @@ static int aWeather_StopSysLevSE() { } static int aWeather_StartSysLevSE() { - WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; - + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; u8 current = weather->current_sound_effect; if (weather->sound_flag == 1) { @@ -202,7 +201,8 @@ static int aWeather_StartSysLevSE() { return 0; } -static void aWeather_ChangeWeatherInstance(WEATHER_ACTOR* weather, s16 status, s16 level) { +static void aWeather_ChangeWeatherInstance(ACTOR* actorx, s16 status, s16 level) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; weather->next_status = status; weather->next_level = level; @@ -210,9 +210,9 @@ static void aWeather_ChangeWeatherInstance(WEATHER_ACTOR* weather, s16 status, s weather->current_level = 0; weather->request_change = TRUE; - if (!aWeather_CountWeatherPrivate(weather)) { + if (!aWeather_CountWeatherPrivate(actorx)) { weather->current_status = weather->next_status; - aWeather_SetNowProfile(weather, weather->current_status); + aWeather_SetNowProfile(actorx, weather->current_status); aWeather_weatherinfo_CommonSet(weather->current_status, weather->next_level); weather->current_level = level; weather->current_aim_level = weather->next_level; @@ -229,7 +229,8 @@ static int aWeather_IsLand_Event_Check() { return 0; } -static int aWeather_Basement_Event_Check(WEATHER_ACTOR* weather) { +static int aWeather_Basement_Event_Check(ACTOR* actorx) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; if ((weather->basement_event == 1) || (weather->basement_event == 2)) { return 1; @@ -237,7 +238,8 @@ static int aWeather_Basement_Event_Check(WEATHER_ACTOR* weather) { return 0; } -static void aWeather_ChangeEnvSE(WEATHER_ACTOR* weather, GAME_PLAY* play, s16 status, s16 level) { +static void aWeather_ChangeEnvSE(ACTOR* actorx, GAME* game, s16 status, s16 level) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; u8 current = weather->current_sound_effect; if (weather->sound_flag == 1 || weather->sound_flag == 2) @@ -256,7 +258,7 @@ static void aWeather_ChangeEnvSE(WEATHER_ACTOR* weather, GAME_PLAY* play, s16 st if ((status == 1) && (weather->current_sound_effect == -1000)) { switch (level) { case 1: - if (mPlib_check_player_open_umbrella(play) != 0) { + if (mPlib_check_player_open_umbrella(game) != 0) { aWeather_SysLevStart(0x12); weather->current_sound_effect = 0x12; return; @@ -265,7 +267,7 @@ static void aWeather_ChangeEnvSE(WEATHER_ACTOR* weather, GAME_PLAY* play, s16 st weather->current_sound_effect = 7; break; case 2: - if (mPlib_check_player_open_umbrella(play) != 0) { + if (mPlib_check_player_open_umbrella(game) != 0) { aWeather_SysLevStart(0x13); weather->current_sound_effect = 0x13; return; @@ -274,7 +276,7 @@ static void aWeather_ChangeEnvSE(WEATHER_ACTOR* weather, GAME_PLAY* play, s16 st weather->current_sound_effect = 8; break; case 3: - if (mPlib_check_player_open_umbrella(play) != 0) { + if (mPlib_check_player_open_umbrella(game) != 0) { aWeather_SysLevStart(0x14); weather->current_sound_effect = 0x14; return; @@ -293,7 +295,7 @@ static void aWeather_EndEnvSE(ACTOR* actor) { if ((sAdo_GameframeEnd_Check() == 1) || ((sAdo_GameframeEnd_Check() == 2) && - ((aWeather_IsLand_Event_Check() != 0) || (aWeather_Basement_Event_Check(weather) != 0)))) { + ((aWeather_IsLand_Event_Check() != 0) || (aWeather_Basement_Event_Check(actor) != 0)))) { if (((u8)(current - 7) <= 2) || ((u8)(current - 0x12) <= 1) || (u8)(current == 0x14)) { aWeather_SysLevStop(current); weather->current_sound_effect = -1000; @@ -305,7 +307,8 @@ static void aWeather_EndEnvSE(ACTOR* actor) { aWeather_SysLevCall_MoveEnd(weather); } -static void aWeather_SetNowProfile(WEATHER_ACTOR* weather, s16 id) { +static void aWeather_SetNowProfile(ACTOR* actorx, s16 id) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; if (!mFI_GET_TYPE(mFI_GetFieldId())) { weather->current_profile = profile_tbl[id]; @@ -314,11 +317,11 @@ static void aWeather_SetNowProfile(WEATHER_ACTOR* weather, s16 id) { } } -static void aWeather_SecureWeatherPrivateWork(WEATHER_ACTOR* weather) { +static void aWeather_SecureWeatherPrivateWork(ACTOR* actorx) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; int i; weather->priv = zelda_malloc(sizeof(aWeather_Priv) * 100); - if (weather->priv != NULL) { for (i = 0; i < 100; i++) { bzero(&weather->priv[i], sizeof(aWeather_Priv)); @@ -326,14 +329,16 @@ static void aWeather_SecureWeatherPrivateWork(WEATHER_ACTOR* weather) { } } -static void aWeather_SetClip(WEATHER_ACTOR* weather, int flag) { +static void aWeather_SetClip(ACTOR* actorx, int flag) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; aWeather_Clip_c* clip; + if (flag != 0) { Common_Set(clip.weather_clip, NULL); } else { clip = &weather->clip; - clip->actor = weather; + clip->actor = actorx; clip->change_weather = aWeather_RequestChangeWeather; clip->get_priv_num = aWeather_GetWeatherPrvNum; clip->remove_priv = aWeather_AbolishPrivate; @@ -346,7 +351,8 @@ static void aWeather_SetClip(WEATHER_ACTOR* weather, int flag) { } } -static void aWeather_RenewWindInfo(WEATHER_ACTOR* weather) { +static void aWeather_RenewWindInfo(ACTOR* actorx) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; s_xyz pos = Common_Get(wind); // multiply by 1 means inline ? f32 speed = Common_Get(wind_speed) * 0.01f; f32 factor = 1.0f; @@ -356,12 +362,12 @@ static void aWeather_RenewWindInfo(WEATHER_ACTOR* weather) { weather->wind_info.z = pos.z * speed * factor; } -static void aWeather_SnowInAdvance(WEATHER_ACTOR* weather, GAME_PLAY* play, int moves) { - +static void aWeather_SnowInAdvance(ACTOR* actorx, GAME* game, int moves) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; int i; for (i = 0; i < moves; i++) { - Weather_Actor_move(&weather->actor_class, &play->game); + Weather_Actor_move(actorx, game); } } @@ -375,7 +381,7 @@ static void Weather_Actor_ct(ACTOR* actor, GAME* game) { int cur; xyz_t* pos = Camera2_getCenterPos_p(); - aWeather_SetClip(weather, 0); + aWeather_SetClip(actor, 0); if (mEv_CheckTitleDemo() > 0) { cur = mEv_CheckTitleDemo() - 1; @@ -408,17 +414,17 @@ static void Weather_Actor_ct(ACTOR* actor, GAME* game) { weather->lightning_timer2 = 30; weather->sound_flag = 0; - aWeather_RenewWindInfo(weather); + aWeather_RenewWindInfo(actor); if (!mFI_GET_TYPE(mFI_GetFieldId())) { - aWeather_SecureWeatherPrivateWork(weather); + aWeather_SecureWeatherPrivateWork(actor); } - aWeather_SetNowProfile(weather, weather->current_status); + aWeather_SetNowProfile(actor, weather->current_status); if ((weather->current_status == 2) || (weather->current_status == 3)) { weather->pos.y -= 50.0f; - aWeather_SnowInAdvance(weather, play, 0x28); + aWeather_SnowInAdvance(actor, game, 0x28); weather->pos.y += 50.0f; } @@ -437,11 +443,11 @@ static void Weather_Actor_ct(ACTOR* actor, GAME* game) { weather->basement_event = 0; } if ((play->fb_wipe_type == 6) && (aWeather_IsLand_Event_Check() == 0) && - (aWeather_Basement_Event_Check(weather) == 0)) { + (aWeather_Basement_Event_Check(actor) == 0)) { weather->current_sound_effect = Common_Get(current_sound_effect); } else { weather->current_sound_effect = -1000; - aWeather_ChangeEnvSE(weather, play, weather->current_status, weather->current_level); + aWeather_ChangeEnvSE(actor, game, weather->current_status, weather->current_level); aWeather_SysLevCall_MoveEnd(weather); } } @@ -453,7 +459,7 @@ static void Weather_Actor_dt(ACTOR* actor, GAME* game) { zelda_free(weather->priv); } - aWeather_SetClip(weather, 1); + aWeather_SetClip(actor, 1); } static void aWeather_DrawWeatherPrv(ACTOR* actor, GAME* game) { @@ -495,7 +501,8 @@ static void aWeather_MakeWeatherPrv(ACTOR* actor, GAME* game) { } } -static void aWeather_MoveWeatherPrv(WEATHER_ACTOR* weather, GAME* game) { +static void aWeather_MoveWeatherPrv(ACTOR* actorx, GAME* game) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; aWeather_Priv* priv; int i; @@ -509,7 +516,7 @@ static void aWeather_MoveWeatherPrv(WEATHER_ACTOR* weather, GAME* game) { if (priv->timer != -100) { priv->timer--; if (priv->timer <= 0) { - aWeather_AbolishPrivate(&weather->actor_class, i); + aWeather_AbolishPrivate(actorx, i); } } } @@ -517,7 +524,8 @@ static void aWeather_MoveWeatherPrv(WEATHER_ACTOR* weather, GAME* game) { } } -static int aWeather_CountWeatherPrivate(WEATHER_ACTOR* weather) { +static int aWeather_CountWeatherPrivate(ACTOR* actorx) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; int i; int count; aWeather_Priv* priv = weather->priv; @@ -534,7 +542,8 @@ static int aWeather_CountWeatherPrivate(WEATHER_ACTOR* weather) { return count; } -static void aWeather_ChangeWeather(WEATHER_ACTOR* weather, GAME_PLAY* play) { +static void aWeather_ChangeWeather(ACTOR* actorx, GAME* game) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; if ((weather->request_change == TRUE) && (weather->current_level == 0)) { if (mFI_GET_TYPE(mFI_GetFieldId())) { @@ -542,27 +551,28 @@ static void aWeather_ChangeWeather(WEATHER_ACTOR* weather, GAME_PLAY* play) { aWeather_weatherinfo_CommonSet(weather->current_status, weather->next_level); weather->current_level = 1; weather->current_aim_level = weather->next_level; - aWeather_ChangeEnvSE(weather, play, weather->current_status, weather->current_level); + aWeather_ChangeEnvSE(actorx, game, weather->current_status, weather->current_level); weather->request_change = FALSE; - } else if (aWeather_CountWeatherPrivate(weather) == 0) { + } else if (aWeather_CountWeatherPrivate(actorx) == 0) { weather->current_status = weather->next_status; - aWeather_SetNowProfile(weather, weather->current_status); + aWeather_SetNowProfile(actorx, weather->current_status); aWeather_weatherinfo_CommonSet(weather->current_status, weather->next_level); weather->current_level = 1; weather->current_aim_level = weather->next_level; - aWeather_ChangeEnvSE(weather, play, weather->current_status, weather->current_level); + aWeather_ChangeEnvSE(actorx, game, weather->current_status, weather->current_level); weather->request_change = FALSE; } } } -static void aWeather_CheckWeatherTimer() { +static void aWeather_CheckWeatherTimer(ACTOR* actorx) { s_xyz dir; mEnv_DecideWindDirect(&dir, 0x3000, 0x3000); } -static void aWeather_RenewWeatherLevel(WEATHER_ACTOR* weather, GAME_PLAY* play) { +static void aWeather_RenewWeatherLevel(ACTOR* actorx, GAME* game) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; s16 level; if (weather->current_level != weather->current_aim_level) { @@ -574,12 +584,13 @@ static void aWeather_RenewWeatherLevel(WEATHER_ACTOR* weather, GAME_PLAY* play) weather->current_level--; else weather->current_level++; - aWeather_ChangeEnvSE(weather, play, weather->current_status, weather->current_level); + aWeather_ChangeEnvSE(actorx, game, weather->current_status, weather->current_level); } } } -static void aWeather_ChangeWeatherTime0(WEATHER_ACTOR* weather) { +static void aWeather_ChangeWeatherTime0(ACTOR* actorx) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; s16 rndWeather, rndIntensity; s16 evWeather, evIntensity; s16 save_weather; @@ -611,14 +622,15 @@ static void aWeather_ChangeWeatherTime0(WEATHER_ACTOR* weather) { Save_Set(weather, rndIntensity | (rndWeather * 16)); if (((mEv_CheckTitleDemo() != -9) || (weather->sound_flag != 1)) && (mFI_CheckInIsland() == 0)) { - aWeather_RequestChangeWeather(&weather->actor_class, rndWeather, rndIntensity); + aWeather_RequestChangeWeather(actorx, rndWeather, rndIntensity); } Common_Set(weather_time, Common_Get(time.rtc_time)); } } } -static void aWeather_MakeKaminari(WEATHER_ACTOR* weather) { +static void aWeather_MakeKaminari(ACTOR* actorx) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actorx; lbRTC_time_c time = Common_Get(time.rtc_time); u8 month = time.month; s16 timer; @@ -660,21 +672,21 @@ static void Weather_Actor_move(ACTOR* actor, GAME* game) { camera = &play->camera; angle = search_position_angleY(&camera->lookat.center, &camera->lookat.eye); - aWeather_MakeKaminari(weather); - aWeather_CheckWeatherTimer(weather); + aWeather_MakeKaminari(actor); + aWeather_CheckWeatherTimer(actor); aWeather_MakeWeatherPrv(actor, game); - aWeather_RenewWeatherLevel(weather, play); - aWeather_MoveWeatherPrv(weather, game); - aWeather_ChangeWeather(weather, play); + aWeather_RenewWeatherLevel(actor, game); + aWeather_MoveWeatherPrv(actor, game); + aWeather_ChangeWeather(actor, game); weather->pos = *pos; - aWeather_ChangeWeatherTime0(weather); + aWeather_ChangeWeatherTime0(actor); if (Common_Get(weather) == 1) { - umbrella = mPlib_check_player_open_umbrella(play); + umbrella = mPlib_check_player_open_umbrella(game); if (umbrella != weather->umbrella_flag) { - aWeather_ChangeEnvSE(weather, play, weather->current_status, weather->current_level); + aWeather_ChangeEnvSE(actor, game, weather->current_status, weather->current_level); } weather->umbrella_flag = umbrella; @@ -689,10 +701,10 @@ static void Weather_Actor_move(ACTOR* actor, GAME* game) { } extern int aWeather_ChangingWeather() { - if (Common_Get(clip.weather_clip) != NULL) { if (Common_Get(clip.weather_clip->actor) != NULL) { - return Common_Get(clip.weather_clip->actor)->request_change == TRUE; + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip).weather_clip->actor; + return weather->request_change == TRUE; } } diff --git a/src/ac_weather_leaf.c b/src/ac_weather_leaf.c index 2b43a161..f072f92e 100644 --- a/src/ac_weather_leaf.c +++ b/src/ac_weather_leaf.c @@ -27,50 +27,46 @@ Gfx* ef_otiba_model_tbl[] = { }; aWeather_Profile_c iam_weather_leaf = { - aWeatherLeaf_make, - aWeatherLeaf_ct, - aWeatherLeaf_move, - aWeatherLeaf_set, - aWeatherLeaf_draw, + aWeatherLeaf_make, aWeatherLeaf_ct, aWeatherLeaf_move, aWeatherLeaf_set, aWeatherLeaf_draw, }; -static int aWeatherLeaf_DecideMakeLeafCount(ACTOR* actor, GAME* game){ +static int aWeatherLeaf_DecideMakeLeafCount(ACTOR* actor, GAME* game) { WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actor; - if(weather->current_level == 1){ + if (weather->current_level == 1) { return (game->frame_counter & 15) == 0; } - return (game->frame_counter & 7) == 0; + return (game->frame_counter & 7) == 0; } - -static void aWeatherLeaf_make(ACTOR* actor, GAME* game){ + +static void aWeatherLeaf_make(ACTOR* actor, GAME* game) { WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actor; GAME_PLAY* play = (GAME_PLAY*)game; - aWeather_Priv* priv; - f32 x,z; + aWeather_Priv* priv; + f32 x, z; xyz_t pos = weather->pos; f32 y = 230.0f + pos.y; - int count = Common_Get(clip.weather_clip)->get_priv_num(actor); - xyz_t base = {0.0f, 0.0f, 0.0f}; + int count = Common_Get(clip.weather_clip)->get_priv_num(actor); + xyz_t base = { 0.0f, 0.0f, 0.0f }; xyz_t mod_pos; - if(aWeatherLeaf_DecideMakeLeafCount(actor, game) != 0){ + if (aWeatherLeaf_DecideMakeLeafCount(actor, game) != 0) { base.y = -0.8f + (RANDOM_F(-0.0999999642372f)); - if(count != -1){ + if (count != -1) { x = -100.0f + (RANDOM_F(200.0f)); z = -200.0f + (RANDOM_F(380.0f)); - + mod_pos = pos; mod_pos.x += x; mod_pos.z += z; mod_pos.y = y; - + priv = Common_Get(clip.weather_clip)->get_priv(4, 280, &mod_pos, &base, actor, count); - if(priv != NULL){ + if (priv != NULL) { aWeatherLeaf_ct(priv, game); - priv->work[3]= 0; + priv->work[3] = 0; priv->work[4] = 156.5f + (RANDOM_F(260.5)); priv->currentY = y; } @@ -78,36 +74,34 @@ static void aWeatherLeaf_make(ACTOR* actor, GAME* game){ } } - -static void aWeatherLeaf_ct(aWeather_Priv* priv, GAME*){ +static void aWeatherLeaf_ct(aWeather_Priv* priv, GAME*) { priv->work[0] = RANDOM_F(3.0f); priv->work[1] = RANDOM_F(65535.0f); priv->work[2] = RANDOM_F(65535.0f); } - -static int aWeatherLeaf_CheckLeafBorder(aWeather_Priv* priv){ - WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; +static int aWeatherLeaf_CheckLeafBorder(aWeather_Priv* priv) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; int ret = 0; f32 leafTemp; xyz_t pos; - - if(weather != NULL){ - pos = weather->pos; - leafTemp =priv->pos.x; - if(leafTemp < (-100.0f + pos.x)){ + if (weather != NULL) { + pos = weather->pos; + leafTemp = priv->pos.x; + + if (leafTemp < (-100.0f + pos.x)) { ret |= 2; } - if(leafTemp > (100.0f + pos.x)){ + if (leafTemp > (100.0f + pos.x)) { ret |= 8; } - leafTemp =priv->pos.z; + leafTemp = priv->pos.z; - if(leafTemp > (180.0f + pos.z)){ + if (leafTemp > (180.0f + pos.z)) { ret |= 4; } - if(leafTemp < (-200.0f + pos.z)){ + if (leafTemp < (-200.0f + pos.z)) { ret |= 1; } } @@ -115,58 +109,58 @@ static int aWeatherLeaf_CheckLeafBorder(aWeather_Priv* priv){ return ret; } -static void aWeatherLeaf_CheckLeafScroll(aWeather_Priv* priv){ +static void aWeatherLeaf_CheckLeafScroll(aWeather_Priv* priv) { int border = aWeatherLeaf_CheckLeafBorder(priv); - if(border != 0){ - if((border >> 1) & 1){ + if (border != 0) { + if ((border >> 1) & 1) { priv->pos.x += 200.0f; } - if((border >> 3) & 1){ + if ((border >> 3) & 1) { priv->pos.x -= 200.0f; } - if((border >> 2) & 1){ + if ((border >> 2) & 1) { priv->pos.z -= 380.0f; } - if(border & 1){ + if (border & 1) { priv->pos.z += 380.0f; } } - if(Common_Get(clip.weather_clip) != NULL){ + if (Common_Get(clip.weather_clip) != NULL) { f32 y; - WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; - if(weather != NULL){ + if (weather != NULL) { y = 230.0f + weather->pos.y; - if(priv->pos.y < + weather->pos.y){ + if (priv->pos.y < +weather->pos.y) { priv->pos.y = (y + (priv->pos.y - priv->currentY)); - priv->currentY = y; + priv->currentY = y; } } } } -static void aWeatherLeaf_SetWind2Leaf(aWeather_Priv* priv){ +static void aWeatherLeaf_SetWind2Leaf(aWeather_Priv* priv) { priv->pos.x += 0.45f; } -static void aWeatherLeaf_move(aWeather_Priv* priv, GAME* game){ - GAME_PLAY* play = (GAME_PLAY*) game; +static void aWeatherLeaf_move(aWeather_Priv* priv, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; priv->pos.x += priv->speed.x; priv->pos.y += priv->speed.y; priv->pos.z += priv->speed.z; - + priv->work[3] += priv->work[4]; aWeatherLeaf_SetWind2Leaf(priv); aWeatherLeaf_CheckLeafScroll(priv); priv->work[1] += 0x8DC; - priv->work[2] += 0x474; + priv->work[2] += 0x474; } -static void aWeatherLeaf_set(GAME* game){ +static void aWeatherLeaf_set(GAME* game) { _texture_z_light_fog_prim_xlu(game->graph); @@ -174,39 +168,38 @@ static void aWeatherLeaf_set(GAME* game){ gSPDisplayList(NEXT_POLY_XLU_DISP, ef_otiba01_setmode); - CLOSE_DISP(game->graph); } -void aWeatherLeaf_draw(aWeather_Priv* priv, GAME* game){ - GAME_PLAY* play = (GAME_PLAY*) game; - +void aWeatherLeaf_draw(aWeather_Priv* priv, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + Mtx* work; f32 scale; f32 min; xyz_t pos; - xyz_t screen_pos; - + xyz_t screen_pos; pos.x = priv->pos.x + (6.0f * sin_s(priv->work[3])); pos.z = priv->pos.z + (6.0f * cos_s(priv->work[3])); - pos.y = priv->pos.y; + pos.y = priv->pos.y; Game_play_Projection_Trans(play, &pos, &screen_pos); - if(( screen_pos.x >= 0.0f) && (screen_pos.x < SCREEN_WIDTH_F) && ( screen_pos.y >= 0.0f) && (screen_pos.y < SCREEN_HEIGHT_F)){ - + if ((screen_pos.x >= 0.0f) && (screen_pos.x < SCREEN_WIDTH_F) && (screen_pos.y >= 0.0f) && + (screen_pos.y < SCREEN_HEIGHT_F)) { + work = GRAPH_ALLOC_TYPE(game->graph, Mtx, 1); - OPEN_DISP(game->graph); - - suMtxMakeSRT(work, 0.00499999988824f, 0.00499999988824f, 0.00499999988824f, priv->work[2], priv->work[1], priv->work[2], pos.x, pos.y, pos.z); + OPEN_DISP(game->graph); + + suMtxMakeSRT(work, 0.00499999988824f, 0.00499999988824f, 0.00499999988824f, priv->work[2], priv->work[1], + priv->work[2], pos.x, pos.y, pos.z); gSPMatrix(NEXT_POLY_XLU_DISP, work, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - - gSPDisplayList(NEXT_POLY_XLU_DISP, ef_otiba_model_tbl[priv->work[0]]); - - CLOSE_DISP( game->graph); + gSPDisplayList(NEXT_POLY_XLU_DISP, ef_otiba_model_tbl[priv->work[0]]); + + CLOSE_DISP(game->graph); } } diff --git a/src/ac_weather_rain.c b/src/ac_weather_rain.c index dbd4148c..38c1b2ea 100644 --- a/src/ac_weather_rain.c +++ b/src/ac_weather_rain.c @@ -29,24 +29,20 @@ static void aWeatherRain_set(GAME*); static void aWeatherRain_draw(aWeather_Priv*, GAME*); aWeather_Profile_c iam_weather_rain = { - aWeatherRain_make, - aWeatherRain_ct, - aWeatherRain_move, - aWeatherRain_set, - aWeatherRain_draw, + aWeatherRain_make, aWeatherRain_ct, aWeatherRain_move, aWeatherRain_set, aWeatherRain_draw, }; -static int aWeatherRain_DecideMakeRainCount(ACTOR* actor){ - WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actor; +static int aWeatherRain_DecideMakeRainCount(ACTOR* actor) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actor; - if(weather->current_level == 1){ + if (weather->current_level == 1) { return 1; } - return( weather->current_level -2 ? 0 : -1) + 3; + return (weather->current_level - 2 ? 0 : -1) + 3; } -static void aWeatherRain_make(ACTOR* actor, GAME* game){ +static void aWeatherRain_make(ACTOR* actor, GAME* game) { aWeather_Priv* priv; xyz_t pos; xyz_t pos_mod; @@ -57,84 +53,79 @@ static void aWeatherRain_make(ACTOR* actor, GAME* game){ GAME_PLAY* play = (GAME_PLAY*)game; WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actor; - f32 x,y,z; - + f32 x, y, z; + count = aWeatherRain_DecideMakeRainCount(actor); pos = weather->pos; - for(i = 0; i < count; i++){ + for (i = 0; i < count; i++) { priv_num = Common_Get(clip.weather_clip)->get_priv_num(&weather->actor_class); - if (priv_num != -1){ + if (priv_num != -1) { x = -130.0f + (RANDOM_F(260.0f)); z = -200.0f + (RANDOM_F(360.0f)); - + pos_mod = pos; speed = ZeroVec; - - speed.y = -9.5f + (RANDOM_F(-2.5f)); + + speed.y = -9.5f + (RANDOM_F(-2.5f)); speed.y += -2.0f; - + pos_mod.x += x; pos_mod.z += z; - if(mEv_CheckTitleDemo() == -9){ + if (mEv_CheckTitleDemo() == -9) { PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); pos_mod.y = 70.0f + (120.0f + player->actor_class.world.position.y); - } - else{ + } else { pos_mod.y = 70.0f + (120.0f + mCoBG_GetBgY_OnlyCenter_FromWpos(pos_mod, 0.0f)); } - + priv = Common_Get(clip.weather_clip)->get_priv(1, 1000, &pos_mod, &speed, actor, priv_num); - if(priv != NULL){ - aWeatherRain_ct(priv,game); + if (priv != NULL) { + aWeatherRain_ct(priv, game); priv->work[0] = 0; } } } } -static void aWeatherRain_ct(aWeather_Priv*, GAME*){ - +static void aWeatherRain_ct(aWeather_Priv*, GAME*) { } +static void aWeatherRain_MoveRain(aWeather_Priv* priv) { -static void aWeatherRain_MoveRain(aWeather_Priv* priv){ - - priv->pos.x += priv->speed.x; - priv->pos.y += priv->speed.y; - priv->pos.z += priv->speed.z; + priv->pos.x += priv->speed.x; + priv->pos.y += priv->speed.y; + priv->pos.z += priv->speed.z; } - -static void aWeatherRain_MakePicha(ACTOR* actor, GAME* game, xyz_t pos){ +static void aWeatherRain_MakePicha(ACTOR* actor, GAME* game, xyz_t pos) { int priv_num = Common_Get(clip.weather_clip)->get_priv_num(actor); GAME_PLAY* play = (GAME_PLAY*)game; aWeather_Priv* priv; f32 y; - - if(priv_num != -1){ - if(mEv_CheckTitleDemo() == -9){ + + if (priv_num != -1) { + if (mEv_CheckTitleDemo() == -9) { PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); - + y = player->actor_class.world.position.y; pos.y = y; - } - else{ + } else { y = mCoBG_GetBgY_OnlyCenter_FromWpos(pos, 0.0f); pos.y = y; } priv = Common_Get(clip.weather_clip)->get_priv(1, 8, &pos, NULL, actor, priv_num); - if(priv != NULL){ - aWeatherRain_ct(priv,game); + if (priv != NULL) { + aWeatherRain_ct(priv, game); priv->work[0] = 1; } } } -static void aWeatherRain_set(GAME* game){ +static void aWeatherRain_set(GAME* game) { _texture_z_light_fog_prim_xlu(game->graph); @@ -142,75 +133,78 @@ static void aWeatherRain_set(GAME* game){ gSPDisplayList(NEXT_POLY_XLU_DISP, ef_ame02_setmode); - CLOSE_DISP(game->graph); } - -static void aWeatherRain_move(aWeather_Priv* priv, GAME* game){ +static void aWeatherRain_move(aWeather_Priv* priv, GAME* game) { WEATHER_ACTOR* weather; s16 timer = (1000 - priv->timer); - if(priv->work[0] == 0){ + if (priv->work[0] == 0) { aWeatherRain_MoveRain(priv); - if((timer >= 10) && (Common_Get(clip.weather_clip) != NULL)){ - weather = Common_Get(clip.weather_clip)->actor; - if(weather != NULL){ - (Common_Get(clip.weather_clip)->remove_priv(&weather->actor_class, priv->id)); + if ((timer >= 10) && (Common_Get(clip.weather_clip) != NULL)) { + weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; + if (weather != NULL) { + (Common_Get(clip.weather_clip)->remove_priv(&weather->actor_class, priv->id)); aWeatherRain_MakePicha(&weather->actor_class, game, priv->pos); } } } } -void aWeatherRain_draw(aWeather_Priv* priv, GAME* game){ +void aWeatherRain_draw(aWeather_Priv* priv, GAME* game) { static f32 rain_scale[] = { - 0.000299999985145f, 0.035f, 0.01f, + 0.000299999985145f, + 0.035f, + 0.01f, }; static f32 picha_scale[] = { - 0.0033f,0.0033f,0.0033f, + 0.0033f, + 0.0033f, + 0.0033f, }; GAME_PLAY* play = (GAME_PLAY*)game; + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; - s16 disp; + s16 disp; xyz_t pos; s16 angle; GRAPH* graph; Mtx* work; - angle = Common_Get(clip.weather_clip)->actor->current_yAngle; - disp = 8 - priv->timer; + angle = weather->current_yAngle; + disp = 8 - priv->timer; pos = priv->pos; - if(priv->work[0] == 1){ + if (priv->work[0] == 1) { graph = play->game.graph; disp = disp >> 1; - Matrix_translate(pos.x,pos.y,pos.z, FALSE); + Matrix_translate(pos.x, pos.y, pos.z, FALSE); Matrix_mult(&play->billboard_matrix, 1); Matrix_scale(picha_scale[0], picha_scale[1], picha_scale[2], TRUE); - OPEN_DISP(graph); + OPEN_DISP(graph); - gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(play->game.graph), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(NEXT_POLY_XLU_DISP, aWeather_rain_picha_disp[(disp)]); - + CLOSE_DISP(graph); - } - else if(priv->work[0] == 0){ + } else if (priv->work[0] == 0) { work = GRAPH_ALLOC_TYPE(game->graph, Mtx, 1); - - OPEN_DISP( play->game.graph); - - suMtxMakeSRT(work, rain_scale[0], rain_scale[1], rain_scale[2], 0, angle, 0, pos.x, pos.y, pos.z); + + OPEN_DISP(play->game.graph); + + suMtxMakeSRT(work, rain_scale[0], rain_scale[1], rain_scale[2], 0, angle, 0, pos.x, pos.y, pos.z); gSPMatrix(NEXT_POLY_XLU_DISP, work, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(NEXT_POLY_XLU_DISP, ef_ame02_04_modelT); - - CLOSE_DISP( play->game.graph); + + CLOSE_DISP(play->game.graph); } } diff --git a/src/ac_weather_sakura.c b/src/ac_weather_sakura.c index 3e6fa0c6..6b85345d 100644 --- a/src/ac_weather_sakura.c +++ b/src/ac_weather_sakura.c @@ -20,50 +20,46 @@ static void aWeatherSakura_set(GAME*); static void aWeatherSakura_draw(aWeather_Priv*, GAME*); aWeather_Profile_c iam_weather_sakura = { - aWeatherSakura_make, - aWeatherSakura_ct, - aWeatherSakura_move, - aWeatherSakura_set, - aWeatherSakura_draw, + aWeatherSakura_make, aWeatherSakura_ct, aWeatherSakura_move, aWeatherSakura_set, aWeatherSakura_draw, }; -static int aWeatherSakura_DecideMakeSakuraCount(ACTOR* actor, GAME* game){ +static int aWeatherSakura_DecideMakeSakuraCount(ACTOR* actor, GAME* game) { WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actor; - if(weather->current_level == 1){ + if (weather->current_level == 1) { return (game->frame_counter & 7) == 0; } - return (game->frame_counter & 3) == 0; + return (game->frame_counter & 3) == 0; } - -static void aWeatherSakura_make(ACTOR* actor, GAME* game){ + +static void aWeatherSakura_make(ACTOR* actor, GAME* game) { WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actor; GAME_PLAY* play = (GAME_PLAY*)game; - aWeather_Priv* priv; - f32 x,z; + aWeather_Priv* priv; + f32 x, z; xyz_t pos = weather->pos; f32 y = 230.0f + pos.y; - int count = Common_Get(clip.weather_clip)->get_priv_num(actor); - xyz_t base = {0.0f, 0.0f, 0.0f}; + int count = Common_Get(clip.weather_clip)->get_priv_num(actor); + xyz_t base = { 0.0f, 0.0f, 0.0f }; xyz_t mod_pos; - if(aWeatherSakura_DecideMakeSakuraCount(actor, game) != 0){ + if (aWeatherSakura_DecideMakeSakuraCount(actor, game) != 0) { base.y = -0.8f + (RANDOM_F(-0.0999999642372f)); - if(count != -1){ + if (count != -1) { x = -100.0f + (RANDOM_F(200.0f)); z = -200.0f + (RANDOM_F(380.0f)); - + mod_pos = pos; mod_pos.x += x; mod_pos.z += z; mod_pos.y = y; - + priv = Common_Get(clip.weather_clip)->get_priv(3, 280, &mod_pos, &base, actor, count); - if(priv != NULL){ + if (priv != NULL) { aWeatherSakura_ct(priv, game); - priv->work[3]= 0; + priv->work[3] = 0; priv->work[4] = 156.5f + (RANDOM_F(260.5)); priv->currentY = y; } @@ -71,36 +67,34 @@ static void aWeatherSakura_make(ACTOR* actor, GAME* game){ } } - -static void aWeatherSakura_ct(aWeather_Priv* priv, GAME*){ +static void aWeatherSakura_ct(aWeather_Priv* priv, GAME*) { priv->work[0] = RANDOM_F(65535.0f); priv->work[1] = RANDOM_F(65535.0f); priv->work[2] = RANDOM_F(65535.0f); } - -static int aWeatherSakura_CheckSakuraBorder(aWeather_Priv* priv){ - WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; +static int aWeatherSakura_CheckSakuraBorder(aWeather_Priv* priv) { + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; int ret = 0; f32 sakuraTemp; xyz_t pos; - - if(weather != NULL){ - pos = weather->pos; - sakuraTemp =priv->pos.x; - if(sakuraTemp < (-100.0f + pos.x)){ + if (weather != NULL) { + pos = weather->pos; + sakuraTemp = priv->pos.x; + + if (sakuraTemp < (-100.0f + pos.x)) { ret |= 2; } - if(sakuraTemp > (100.0f + pos.x)){ + if (sakuraTemp > (100.0f + pos.x)) { ret |= 8; } - sakuraTemp =priv->pos.z; + sakuraTemp = priv->pos.z; - if(sakuraTemp > (180.0f + pos.z)){ + if (sakuraTemp > (180.0f + pos.z)) { ret |= 4; } - if(sakuraTemp < (-200.0f + pos.z)){ + if (sakuraTemp < (-200.0f + pos.z)) { ret |= 1; } } @@ -108,59 +102,59 @@ static int aWeatherSakura_CheckSakuraBorder(aWeather_Priv* priv){ return ret; } -static void aWeatherSakura_CheckSakuraScroll(aWeather_Priv* priv){ +static void aWeatherSakura_CheckSakuraScroll(aWeather_Priv* priv) { int border = aWeatherSakura_CheckSakuraBorder(priv); - if(border != 0){ - if((border >> 1) & 1){ + if (border != 0) { + if ((border >> 1) & 1) { priv->pos.x += 200.0f; } - if((border >> 3) & 1){ + if ((border >> 3) & 1) { priv->pos.x -= 200.0f; } - if((border >> 2) & 1){ + if ((border >> 2) & 1) { priv->pos.z -= 380.0f; } - if(border & 1){ + if (border & 1) { priv->pos.z += 380.0f; } } - if(Common_Get(clip.weather_clip) != NULL){ + if (Common_Get(clip.weather_clip) != NULL) { f32 y; - WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; - if(weather != NULL){ + if (weather != NULL) { y = 230.0f + weather->pos.y; - if(priv->pos.y < + weather->pos.y){ + if (priv->pos.y < +weather->pos.y) { priv->pos.y = (y + (priv->pos.y - priv->currentY)); - priv->currentY = y; + priv->currentY = y; } } } } -static void aWeatherSakura_SetWind2Sakura(aWeather_Priv* priv){ +static void aWeatherSakura_SetWind2Sakura(aWeather_Priv* priv) { priv->pos.x += 0.45f; } -static void aWeatherSakura_move(aWeather_Priv* priv, GAME* game){ - GAME_PLAY* play = (GAME_PLAY*) game; +static void aWeatherSakura_move(aWeather_Priv* priv, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; priv->pos.x += priv->speed.x; priv->pos.y += priv->speed.y; priv->pos.z += priv->speed.z; - + priv->work[3] += priv->work[4]; aWeatherSakura_SetWind2Sakura(priv); aWeatherSakura_CheckSakuraScroll(priv); priv->work[0] += 0x200; priv->work[1] += 0x8DC; - priv->work[2] += 0x474; + priv->work[2] += 0x474; } -static void aWeatherSakura_set(GAME* game){ +static void aWeatherSakura_set(GAME* game) { _texture_z_light_fog_prim_xlu(game->graph); @@ -168,41 +162,39 @@ static void aWeatherSakura_set(GAME* game){ gSPDisplayList(NEXT_POLY_XLU_DISP, ef_hanabira01_00_setmode); - CLOSE_DISP(game->graph); } -void aWeatherSakura_draw(aWeather_Priv* priv, GAME* game){ - GAME_PLAY* play = (GAME_PLAY*) game; +void aWeatherSakura_draw(aWeather_Priv* priv, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + + xyz_t base = { 0.05f, 0.05f, 0.05f }; - xyz_t base = {0.05f, 0.05f, 0.05f}; - Mtx* work; f32 scale; f32 min; xyz_t pos; - xyz_t screen_pos; - + xyz_t screen_pos; pos.x = priv->pos.x + (6.0f * sin_s(priv->work[3])); pos.z = priv->pos.z + (6.0f * cos_s(priv->work[3])); - pos.y = priv->pos.y; + pos.y = priv->pos.y; Game_play_Projection_Trans(play, &pos, &screen_pos); - if(( screen_pos.x >= 0.0f) && (screen_pos.x < SCREEN_WIDTH_F) && ( screen_pos.y >= 0.0f) && (screen_pos.y < SCREEN_HEIGHT_F)){ - + if ((screen_pos.x >= 0.0f) && (screen_pos.x < SCREEN_WIDTH_F) && (screen_pos.y >= 0.0f) && + (screen_pos.y < SCREEN_HEIGHT_F)) { + work = GRAPH_ALLOC_TYPE(game->graph, Mtx, 1); - OPEN_DISP(game->graph); - + OPEN_DISP(game->graph); + suMtxMakeSRT(work, base.x, base.y, base.z, priv->work[2], priv->work[1], priv->work[2], pos.x, pos.y, pos.z); gSPMatrix(NEXT_POLY_XLU_DISP, work, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - - gSPDisplayList(NEXT_POLY_XLU_DISP, ef_hanabira01_00_modelT); - - CLOSE_DISP( game->graph); + gSPDisplayList(NEXT_POLY_XLU_DISP, ef_hanabira01_00_modelT); + + CLOSE_DISP(game->graph); } } diff --git a/src/ac_weather_snow.c b/src/ac_weather_snow.c index f59d0d88..35952c72 100644 --- a/src/ac_weather_snow.c +++ b/src/ac_weather_snow.c @@ -72,7 +72,7 @@ static void aWeatherSnow_ct(aWeather_Priv*, GAME*) { } static int aWeatherSnow_CheckSnowBorder(aWeather_Priv* priv, GAME_PLAY* play) { - WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; int ret = 0; f32 wtemp, ptemp; if (weather != NULL) { @@ -120,7 +120,7 @@ static void aWeatherSnow_CheckSnowScroll(aWeather_Priv* priv, GAME_PLAY* play) { if (Common_Get(clip.weather_clip) != NULL) { f32 y; - WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; if (weather != NULL) { y = 230.0f + weather->pos.y; @@ -135,7 +135,7 @@ static void aWeatherSnow_CheckSnowScroll(aWeather_Priv* priv, GAME_PLAY* play) { static void aWeatherSnow_SetWind2Snow(aWeather_Priv* priv) { if (Common_Get(clip.weather_clip) != NULL) { - WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; + WEATHER_ACTOR* weather = (WEATHER_ACTOR*)Common_Get(clip.weather_clip)->actor; if (weather != NULL) { priv->pos.x += weather->wind_info.x; priv->pos.y += weather->wind_info.y; diff --git a/src/m_demo.c b/src/m_demo.c index 7e43c6b3..d25b9afd 100644 --- a/src/m_demo.c +++ b/src/m_demo.c @@ -9,1183 +9,1097 @@ #include "_mem.h" /* Z-X */ -static f32 direct_vector[mDemo_DIRECT_NUM][2] = { - { -1.0f, 0.0f }, - { -F_SQRT2, F_SQRT2 }, - { 0.0f, 1.0f }, - { F_SQRT2, F_SQRT2 }, - { 1.0f, 0.0f }, - { F_SQRT2, -F_SQRT2 }, - { 0.0f, -1.0f }, - { -F_SQRT2, -F_SQRT2 } -}; +static f32 direct_vector[mDemo_DIRECT_NUM][2] = { { -1.0f, 0.0f }, { -F_SQRT2, F_SQRT2 }, { 0.0f, 1.0f }, + { F_SQRT2, F_SQRT2 }, { 1.0f, 0.0f }, { F_SQRT2, -F_SQRT2 }, + { 0.0f, -1.0f }, { -F_SQRT2, -F_SQRT2 } }; -static s16 direct_back_angle[mDemo_DIRECT_NUM] = { - 0x0000, - 0xE000, - 0xC000, - 0xA000, - 0x8000, - 0x6000, - 0x4000, - 0x2000 -}; +static s16 direct_back_angle[mDemo_DIRECT_NUM] = { 0x0000, 0xE000, 0xC000, 0xA000, 0x8000, 0x6000, 0x4000, 0x2000 }; static mDemo_Data_c demo_data; static mDemo_Data_c* const demo = &demo_data; static int mDemo_Check_talk_type() { - int res = FALSE; + int res = FALSE; - switch (demo->current.type) { - case mDemo_TYPE_TALK: - case mDemo_TYPE_SPEAK: - case mDemo_TYPE_REPORT: - case mDemo_TYPE_SPEECH: - res = TRUE; - break; - } + switch (demo->current.type) { + case mDemo_TYPE_TALK: + case mDemo_TYPE_SPEAK: + case mDemo_TYPE_REPORT: + case mDemo_TYPE_SPEECH: + res = TRUE; + break; + } - return res; + return res; } extern ACTOR* mDemo_Get_talk_actor() { - if (mDemo_Check_talk_type() == TRUE) { - return demo->current.actor; - } + if (mDemo_Check_talk_type() == TRUE) { + return demo->current.actor; + } - return NULL; + return NULL; } /* @unused @fabricated */ extern void mDemo_Set_speaker_actor(ACTOR* actor) { - demo->current.actor = actor; + demo->current.actor = actor; } extern void mDemo_Set_OrderValue(int type, int idx, u16 value) { - if (type >= 0 && type < mDemo_ORDER_NUM && idx >= 0 && idx < mDemo_ORDER_VALUE_MAX) { - demo->order_data[type][idx] = value; - } + if (type >= 0 && type < mDemo_ORDER_NUM && idx >= 0 && idx < mDemo_ORDER_VALUE_MAX) { + demo->order_data[type][idx] = value; + } } extern u16 mDemo_Get_OrderValue(int type, int idx) { - if (type >= 0 && type < mDemo_ORDER_NUM && idx >= 0 && idx < mDemo_ORDER_VALUE_MAX) { - return demo->order_data[type][idx]; - } + if (type >= 0 && type < mDemo_ORDER_NUM && idx >= 0 && idx < mDemo_ORDER_VALUE_MAX) { + return demo->order_data[type][idx]; + } - return 0; + return 0; } static void mDemo_Init_OrderValue() { - int i; - int j; + int i; + int j; - for (i = 0; i < mDemo_ORDER_NUM; i++) { - for (j = 0; j < mDemo_ORDER_VALUE_MAX; j++) { - demo->order_data[i][j] = 0; + for (i = 0; i < mDemo_ORDER_NUM; i++) { + for (j = 0; j < mDemo_ORDER_VALUE_MAX; j++) { + demo->order_data[i][j] = 0; + } } - } } extern void mDemo_Set_msg_num(int msg_num) { - if (mDemo_Check_talk_type() == TRUE) { - demo->data.talk.msg_no = msg_num; - } + if (mDemo_Check_talk_type() == TRUE) { + demo->data.talk.msg_no = msg_num; + } } extern int mDemo_Get_Talk_Actors(ACTOR** speaker, ACTOR** listener) { - if (mDemo_Check_talk_type() == TRUE) { - - speaker[0] = demo->speaker_actor; - listener[0] = demo->listen_actor; - return TRUE; - } - else { - speaker[0] = NULL; - listener[0] = NULL; - return FALSE; - } + if (mDemo_Check_talk_type() == TRUE) { + + speaker[0] = demo->speaker_actor; + listener[0] = demo->listen_actor; + return TRUE; + } else { + speaker[0] = NULL; + listener[0] = NULL; + return FALSE; + } } extern void mDemo_Set_change_player_destiny(s8 destiny) { - demo->change_player_destiny = destiny; + demo->change_player_destiny = destiny; } static int mDemo_Get_change_player_destiny() { - return demo->change_player_destiny; + return demo->change_player_destiny; } static void mDemo_Clear_change_player_destiny() { - mDemo_Set_change_player_destiny(-1); + mDemo_Set_change_player_destiny(-1); } static void mDemo_Copy_change_player_destiny() { - if (mDemo_Get_change_player_destiny() >= 0) { - Private_c* priv = Common_Get(now_private); - lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time); + if (mDemo_Get_change_player_destiny() >= 0) { + Private_c* priv = Common_Get(now_private); + lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time); - priv->destiny.received_time.sec = rtc_time->sec; - priv->destiny.received_time.min = rtc_time->min; - priv->destiny.received_time.hour = rtc_time->hour; - priv->destiny.received_time.day = rtc_time->day; - priv->destiny.received_time.weekday = rtc_time->weekday; - priv->destiny.received_time.month = rtc_time->month; - priv->destiny.received_time.year = rtc_time->year; - priv->destiny.type = mDemo_Get_change_player_destiny(); - mDemo_Clear_change_player_destiny(); - } + priv->destiny.received_time.sec = rtc_time->sec; + priv->destiny.received_time.min = rtc_time->min; + priv->destiny.received_time.hour = rtc_time->hour; + priv->destiny.received_time.day = rtc_time->day; + priv->destiny.received_time.weekday = rtc_time->weekday; + priv->destiny.received_time.month = rtc_time->month; + priv->destiny.received_time.year = rtc_time->year; + priv->destiny.type = mDemo_Get_change_player_destiny(); + mDemo_Clear_change_player_destiny(); + } } extern void mDemo_Set_use_zoom_sound(u8 use_zoom_sound) { - if (mDemo_Check_talk_type() == TRUE) { - demo->data.talk.use_zoom_sound = use_zoom_sound; - } + if (mDemo_Check_talk_type() == TRUE) { + demo->data.talk.use_zoom_sound = use_zoom_sound; + } } extern int mDemo_Get_use_zoom_sound() { - if (mDemo_Check_talk_type() == TRUE) { - return demo->data.talk.use_zoom_sound; - } + if (mDemo_Check_talk_type() == TRUE) { + return demo->data.talk.use_zoom_sound; + } - return FALSE; + return FALSE; } extern void mDemo_Set_talk_display_name(s8 display_name) { - if (mDemo_Check_talk_type() == TRUE) { - demo->data.talk.display_name = display_name; - } + if (mDemo_Check_talk_type() == TRUE) { + demo->data.talk.display_name = display_name; + } } /* @unused @fabricated */ extern int mDemo_Get_talk_display_name() { - if (mDemo_Check_talk_type() == TRUE) { - return demo->data.talk.display_name; - } + if (mDemo_Check_talk_type() == TRUE) { + return demo->data.talk.display_name; + } - return FALSE; + return FALSE; } extern void mDemo_Set_talk_change_player(u8 change_player) { - if (mDemo_Check_talk_type() == TRUE) { - demo->data.talk.change_player = change_player; - } + if (mDemo_Check_talk_type() == TRUE) { + demo->data.talk.change_player = change_player; + } } /* @unused @fabricated */ extern int mDemo_Get_talk_change_player() { - if (mDemo_Check_talk_type() == TRUE) { - return demo->data.talk.change_player; - } + if (mDemo_Check_talk_type() == TRUE) { + return demo->data.talk.change_player; + } - return FALSE; + return FALSE; } extern void mDemo_Set_talk_return_demo_wait(u8 return_demo_wait) { - if (mDemo_Check_talk_type() == TRUE) { - demo->data.talk.return_demo_wait = return_demo_wait; - } + if (mDemo_Check_talk_type() == TRUE) { + demo->data.talk.return_demo_wait = return_demo_wait; + } } /* @unused @fabricated */ extern int mDemo_Get_talk_return_demo_wait() { - if (mDemo_Check_talk_type() == TRUE) { - return demo->data.talk.return_demo_wait; - } + if (mDemo_Check_talk_type() == TRUE) { + return demo->data.talk.return_demo_wait; + } - return FALSE; + return FALSE; } extern void mDemo_Set_talk_return_get_golden_axe_demo(u8 return_get_golden_axe_demo) { - if (mDemo_Check_talk_type() == TRUE) { - demo->data.talk.return_get_golden_axe_demo = return_get_golden_axe_demo; - } + if (mDemo_Check_talk_type() == TRUE) { + demo->data.talk.return_get_golden_axe_demo = return_get_golden_axe_demo; + } } /* @unused @fabricated */ extern int mDemo_Get_talk_return_get_golden_axe_demo() { - if (mDemo_Check_talk_type() == TRUE) { - return demo->data.talk.return_get_golden_axe_demo; - } + if (mDemo_Check_talk_type() == TRUE) { + return demo->data.talk.return_get_golden_axe_demo; + } - return FALSE; + return FALSE; } extern void mDemo_Set_talk_turn(u8 turn) { - if (mDemo_Check_talk_type() == TRUE) { - demo->data.talk.turn = turn; - } + if (mDemo_Check_talk_type() == TRUE) { + demo->data.talk.turn = turn; + } } extern int mDemo_Get_talk_turn() { - if (mDemo_Check_talk_type() == TRUE) { - return demo->data.talk.turn; - } + if (mDemo_Check_talk_type() == TRUE) { + return demo->data.talk.turn; + } - return FALSE; + return FALSE; } extern void mDemo_Set_talk_window_color(rgba_t* window_color) { - switch (demo->current.type) { - case mDemo_TYPE_TALK: - case mDemo_TYPE_SPEAK: - case mDemo_TYPE_REPORT: - case mDemo_TYPE_SPEECH: - demo->data.talk.window_color = *window_color; - break; + switch (demo->current.type) { + case mDemo_TYPE_TALK: + case mDemo_TYPE_SPEAK: + case mDemo_TYPE_REPORT: + case mDemo_TYPE_SPEECH: + demo->data.talk.window_color = *window_color; + break; - case mDemo_TYPE_EVENTMSG: - case mDemo_TYPE_EVENTMSG2: - demo->data.emsg.window_color = *window_color; - break; - } + case mDemo_TYPE_EVENTMSG: + case mDemo_TYPE_EVENTMSG2: + demo->data.emsg.window_color = *window_color; + break; + } } /* @unused @fabricated */ extern rgba_t* mDemo_Get_talk_window_color_p() { - if (demo->current.type >= mDemo_TYPE_TALK && demo->current.type < mDemo_TYPE_OUTDOOR) { - return &demo->data.talk.window_color; - } - else if (demo->current.type >= mDemo_TYPE_EVENTMSG && demo->current.type < mDemo_TYPE_15) { - return &demo->data.emsg.window_color; - } + if (demo->current.type >= mDemo_TYPE_TALK && demo->current.type < mDemo_TYPE_OUTDOOR) { + return &demo->data.talk.window_color; + } else if (demo->current.type >= mDemo_TYPE_EVENTMSG && demo->current.type < mDemo_TYPE_15) { + return &demo->data.emsg.window_color; + } - return NULL; + return NULL; } extern void mDemo_Set_camera(u8 camera_type) { - demo->camera_type = camera_type; + demo->camera_type = camera_type; } extern int mDemo_Get_camera() { - return demo->camera_type; + return demo->camera_type; } extern int mDemo_CheckDemoType() { - if (mDemo_CheckDemo()) { - return demo->current.type; - } + if (mDemo_CheckDemo()) { + return demo->current.type; + } - return mDemo_TYPE_NONE; + return mDemo_TYPE_NONE; } static int change_camera(int camera_type) { - GAME_PLAY* play; - PLAYER_ACTOR* player; + GAME_PLAY* play; + PLAYER_ACTOR* player; - player = GET_PLAYER_ACTOR_NOW(); - play = (GAME_PLAY*)gamePT; + player = GET_PLAYER_ACTOR_NOW(); + play = (GAME_PLAY*)gamePT; - if (camera_type == play->camera.now_main_index) { - return FALSE; - } + if (camera_type == play->camera.now_main_index) { + return FALSE; + } - switch (camera_type) { - case CAMERA2_PROCESS_TALK: - Camera2_request_main_talk(play, (ACTOR*)player, demo->current.actor, mDemo_CAMERA_PRIORITY); - break; - case CAMERA2_PROCESS_ITEM: - Camera2_request_main_item(play, 0, mDemo_CAMERA_PRIORITY); - break; - case CAMERA2_PROCESS_DOOR: - Camera2_request_main_door(play, (ACTOR*)player, demo->current.type != mDemo_TYPE_OUTDOOR, mDemo_CAMERA_PRIORITY); - break; - case CAMERA2_PROCESS_LOCK: - { - s_xyz angle; - f32 dist; - int sh_bx; - int sh_bz; - xyz_t camera_wpos; + switch (camera_type) { + case CAMERA2_PROCESS_TALK: + Camera2_request_main_talk(play, (ACTOR*)player, demo->current.actor, mDemo_CAMERA_PRIORITY); + break; + case CAMERA2_PROCESS_ITEM: + Camera2_request_main_item(play, 0, mDemo_CAMERA_PRIORITY); + break; + case CAMERA2_PROCESS_DOOR: + Camera2_request_main_door(play, (ACTOR*)player, demo->current.type != mDemo_TYPE_OUTDOOR, + mDemo_CAMERA_PRIORITY); + break; + case CAMERA2_PROCESS_LOCK: { + s_xyz angle; + f32 dist; + int sh_bx; + int sh_bz; + xyz_t camera_wpos; - switch (demo->current.type) { - case mDemo_TYPE_EVENTMSG: - { - Camera2_main_Simple_AngleDistStd(play, &angle, &dist); - Camera2_request_main_simple((GAME_PLAY*)gamePT, &player->actor_class.world.position, &angle, dist, 0, mDemo_CAMERA_PRIORITY); - break; + switch (demo->current.type) { + case mDemo_TYPE_EVENTMSG: { + Camera2_main_Simple_AngleDistStd(play, &angle, &dist); + Camera2_request_main_simple((GAME_PLAY*)gamePT, &player->actor_class.world.position, &angle, dist, + 0, mDemo_CAMERA_PRIORITY); + break; + } + + case mDemo_TYPE_SPEECH: + case mDemo_TYPE_EVENTMSG2: { + Camera2_main_Simple_AngleDistStd(play, &angle, &dist); + mFI_BlockKind2BkNum(&sh_bx, &sh_bz, mRF_BLOCKKIND_SHRINE); + mFI_BkNum2WposXZ(&camera_wpos.x, &camera_wpos.z, sh_bx, sh_bz); + camera_wpos.x += 320.0f; + camera_wpos.y = player->actor_class.world.position.y; + camera_wpos.z += 400.0f; + Camera2_request_main_simple((GAME_PLAY*)gamePT, &camera_wpos, &angle, dist, 0, + mDemo_CAMERA_PRIORITY); + break; + } + } + + break; } + case CAMERA2_PROCESS_CUST_TALK: { + switch (demo->current.actor->id) { + case mAc_PROFILE_EV_YOMISE: + Camera2_request_main_listen_front_low_talk(play, (ACTOR*)player, demo->current.actor, + mDemo_CAMERA_PRIORITY); + break; + } - case mDemo_TYPE_SPEECH: - case mDemo_TYPE_EVENTMSG2: - { - Camera2_main_Simple_AngleDistStd(play, &angle, &dist); - mFI_BlockKind2BkNum(&sh_bx, &sh_bz, mRF_BLOCKKIND_SHRINE); - mFI_BkNum2WposXZ(&camera_wpos.x, &camera_wpos.z, sh_bx, sh_bz); - camera_wpos.x += 320.0f; - camera_wpos.y = player->actor_class.world.position.y; - camera_wpos.z += 400.0f; - Camera2_request_main_simple((GAME_PLAY*)gamePT, &camera_wpos, &angle, dist, 0, mDemo_CAMERA_PRIORITY); - break; + break; } - } + case CAMERA2_PROCESS_SIMPLE: { + switch (demo->current.actor->id) { + case mAc_PROFILE_EV_DESIGNER: + Camera2_request_main_simple_kirin(play, &demo->current.actor->world.position, + mDemo_CAMERA_PRIORITY - 1); + break; + } - break; + break; + } + case CAMERA2_PROCESS_NORMAL: + Camera2_request_main_normal(play, 0, mDemo_CAMERA_PRIORITY - 1); + break; + case CAMERA2_PROCESS_INTER2: { + xyz_t center; + xyz_t eye; + + center = play->camera.lookat.center; + center.x -= 80.0f; + + eye = play->camera.lookat.eye; + eye.x -= 80.0f; + eye.z -= 20.0f; + + Camera2_request_main_inter(play, ¢er, &eye, ¢er, &eye, 0.6f, 0.3f, TRUE, 14, + mDemo_CAMERA_PRIORITY + 1); + play->camera.requested_main_index = CAMERA2_PROCESS_INTER2; + break; + } + case CAMERA2_PROCESS_NUM: + break; } - case CAMERA2_PROCESS_CUST_TALK: - { - switch (demo->current.actor->id) { - case mAc_PROFILE_EV_YOMISE: - Camera2_request_main_listen_front_low_talk(play, (ACTOR*)player, demo->current.actor, mDemo_CAMERA_PRIORITY); - break; - } - break; - } - case CAMERA2_PROCESS_SIMPLE: - { - switch (demo->current.actor->id) { - case mAc_PROFILE_EV_DESIGNER: - Camera2_request_main_simple_kirin(play, &demo->current.actor->world.position, mDemo_CAMERA_PRIORITY - 1); - break; - } - - break; - } - case CAMERA2_PROCESS_NORMAL: - Camera2_request_main_normal(play, 0, mDemo_CAMERA_PRIORITY - 1); - break; - case CAMERA2_PROCESS_INTER2: - { - xyz_t center; - xyz_t eye; - - center = play->camera.lookat.center; - center.x -= 80.0f; - - eye = play->camera.lookat.eye; - eye.x -= 80.0f; - eye.z -= 20.0f; - - Camera2_request_main_inter(play, ¢er, &eye, ¢er, &eye, 0.6f, 0.3f, TRUE, 14, mDemo_CAMERA_PRIORITY + 1); - play->camera.requested_main_index = CAMERA2_PROCESS_INTER2; - break; - } - case CAMERA2_PROCESS_NUM: - break; - } - - return TRUE; + return TRUE; } static int set_speak_default() { - PLAYER_ACTOR* player; + PLAYER_ACTOR* player; - demo->data.talk.msg_no = 0; - demo->data.talk.turn = FALSE; - demo->data.talk.display_name = TRUE; - demo->data.talk.change_player = TRUE; - demo->data.talk.return_demo_wait = FALSE; - demo->data.talk.return_get_golden_axe_demo = FALSE; - demo->data.talk.use_zoom_sound = TRUE; - demo->data.talk.window_color.r = mDemo_WINDOW_COLOR_R; - demo->data.talk.window_color.g = mDemo_WINDOW_COLOR_G; - demo->data.talk.window_color.b = mDemo_WINDOW_COLOR_B; - demo->data.talk.window_color.a = mDemo_WINDOW_COLOR_A; - demo->camera_type = CAMERA2_PROCESS_TALK; - mDemo_Unset_SpeakerAble(); - mDemo_Unset_ListenAble(); + demo->data.talk.msg_no = 0; + demo->data.talk.turn = FALSE; + demo->data.talk.display_name = TRUE; + demo->data.talk.change_player = TRUE; + demo->data.talk.return_demo_wait = FALSE; + demo->data.talk.return_get_golden_axe_demo = FALSE; + demo->data.talk.use_zoom_sound = TRUE; + demo->data.talk.window_color.r = mDemo_WINDOW_COLOR_R; + demo->data.talk.window_color.g = mDemo_WINDOW_COLOR_G; + demo->data.talk.window_color.b = mDemo_WINDOW_COLOR_B; + demo->data.talk.window_color.a = mDemo_WINDOW_COLOR_A; + demo->camera_type = CAMERA2_PROCESS_TALK; + mDemo_Unset_SpeakerAble(); + mDemo_Unset_ListenAble(); - player = GET_PLAYER_ACTOR_NOW(); - demo->speaker_actor = (ACTOR*)player; - demo->listen_actor = demo->current.actor; - return TRUE; + player = GET_PLAYER_ACTOR_NOW(); + demo->speaker_actor = (ACTOR*)player; + demo->listen_actor = demo->current.actor; + return TRUE; } static int set_report_default() { - PLAYER_ACTOR* player; + PLAYER_ACTOR* player; - demo->data.talk.msg_no = 0; - demo->data.talk.turn = FALSE; - demo->data.talk.display_name = FALSE; - demo->data.talk.change_player = FALSE; - demo->data.talk.return_demo_wait = FALSE; - demo->data.talk.return_get_golden_axe_demo = FALSE; - demo->data.talk.use_zoom_sound = TRUE; - demo->data.talk.window_color.r = mDemo_WINDOW_COLOR_R; - demo->data.talk.window_color.g = mDemo_WINDOW_COLOR_G; - demo->data.talk.window_color.b = mDemo_WINDOW_COLOR_B; - demo->data.talk.window_color.a = mDemo_WINDOW_COLOR_A; - demo->camera_type = CAMERA2_PROCESS_NORMAL; - mDemo_Set_SpeakerAble(); - mDemo_Unset_ListenAble(); - player = GET_PLAYER_ACTOR_NOW(); - demo->speaker_actor = (ACTOR*)player; - demo->listen_actor = demo->current.actor; - return TRUE; + demo->data.talk.msg_no = 0; + demo->data.talk.turn = FALSE; + demo->data.talk.display_name = FALSE; + demo->data.talk.change_player = FALSE; + demo->data.talk.return_demo_wait = FALSE; + demo->data.talk.return_get_golden_axe_demo = FALSE; + demo->data.talk.use_zoom_sound = TRUE; + demo->data.talk.window_color.r = mDemo_WINDOW_COLOR_R; + demo->data.talk.window_color.g = mDemo_WINDOW_COLOR_G; + demo->data.talk.window_color.b = mDemo_WINDOW_COLOR_B; + demo->data.talk.window_color.a = mDemo_WINDOW_COLOR_A; + demo->camera_type = CAMERA2_PROCESS_NORMAL; + mDemo_Set_SpeakerAble(); + mDemo_Unset_ListenAble(); + player = GET_PLAYER_ACTOR_NOW(); + demo->speaker_actor = (ACTOR*)player; + demo->listen_actor = demo->current.actor; + return TRUE; } static int set_talk_default() { - demo->data.talk.msg_no = 0; - demo->data.talk.turn = TRUE; - demo->data.talk.display_name = TRUE; - demo->data.talk.change_player = TRUE; - demo->data.talk.return_demo_wait = FALSE; - demo->data.talk.return_get_golden_axe_demo = FALSE; - demo->data.talk.use_zoom_sound = TRUE; - demo->data.talk.window_color.r = mDemo_WINDOW_COLOR_R; - demo->data.talk.window_color.g = mDemo_WINDOW_COLOR_G; - demo->data.talk.window_color.b = mDemo_WINDOW_COLOR_B; - demo->data.talk.window_color.a = mDemo_WINDOW_COLOR_A; - demo->camera_type = CAMERA2_PROCESS_TALK; - mDemo_Unset_SpeakerAble(); - mDemo_Unset_ListenAble(); - demo->speaker_actor = (ACTOR*)GET_PLAYER_ACTOR_NOW(); - demo->listen_actor = demo->current.actor; - return TRUE; + demo->data.talk.msg_no = 0; + demo->data.talk.turn = TRUE; + demo->data.talk.display_name = TRUE; + demo->data.talk.change_player = TRUE; + demo->data.talk.return_demo_wait = FALSE; + demo->data.talk.return_get_golden_axe_demo = FALSE; + demo->data.talk.use_zoom_sound = TRUE; + demo->data.talk.window_color.r = mDemo_WINDOW_COLOR_R; + demo->data.talk.window_color.g = mDemo_WINDOW_COLOR_G; + demo->data.talk.window_color.b = mDemo_WINDOW_COLOR_B; + demo->data.talk.window_color.a = mDemo_WINDOW_COLOR_A; + demo->camera_type = CAMERA2_PROCESS_TALK; + mDemo_Unset_SpeakerAble(); + mDemo_Unset_ListenAble(); + demo->speaker_actor = (ACTOR*)GET_PLAYER_ACTOR_NOW(); + demo->listen_actor = demo->current.actor; + return TRUE; } static int wait_talk_start() { - PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); - if (demo->data.talk.change_player) { - if ( - mPlib_get_player_actor_main_index(gamePT) != 65 && - mPlib_request_main_talk_type1((GAME_PLAY*)gamePT, demo->current.actor, demo->data.talk.turn, FALSE) == FALSE - ) { - return FALSE; + if (demo->data.talk.change_player) { + if (mPlib_get_player_actor_main_index(gamePT) != 65 && + mPlib_request_main_talk_type1(gamePT, demo->current.actor, demo->data.talk.turn, FALSE) == FALSE) { + return FALSE; + } + } else { + mDemo_Set_SpeakerAble(); } - } - else { - mDemo_Set_SpeakerAble(); - } - if (mDemo_Check_SpeakerAble() && mDemo_Check_ListenAble()) { - mMsg_Window_c* msg_win = mMsg_Get_base_window_p(); - - mDemo_Init_OrderValue(); + if (mDemo_Check_SpeakerAble() && mDemo_Check_ListenAble()) { + mMsg_Window_c* msg_win = mMsg_Get_base_window_p(); - if (mMsg_Check_main_index(msg_win, mMsg_INDEX_APPEAR) == FALSE) { - int msg_no = demo->data.talk.msg_no; // pulled out here, probably for debug or something? - - player->actor_class.state_bitfield |= ACTOR_STATE_IN_DEMO; - demo->current.actor->state_bitfield |= ACTOR_STATE_IN_DEMO; - demo->data.talk.actor_saved_weight = demo->current.actor->status_data.weight; - demo->current.actor->status_data.weight = 255; - mMsg_request_main_appear(msg_win, demo->current.actor, demo->data.talk.display_name, &demo->data.talk.window_color, msg_no, mDemo_MSG_PRIORITY); + mDemo_Init_OrderValue(); - if (demo->data.talk.use_zoom_sound) { - sAdo_SysTrgStart(demo->camera_type == CAMERA2_PROCESS_TALK ? (u16)0x8014 : (u16)0x8004); - } + if (mMsg_Check_main_index(msg_win, mMsg_INDEX_APPEAR) == FALSE) { + int msg_no = demo->data.talk.msg_no; // pulled out here, probably for debug or something? - if ( - mFI_GET_TYPE(mFI_GetFieldId()) != mFI_FIELD_DEMO_STARTDEMO && - demo->data.talk.msg_no != 0x07DD && /* Porter "Now arriving at !" message (new player) */ - demo->data.talk.msg_no != 0x0949 && /* Porter "Now arriving in !" message (returning home) */ - demo->data.talk.msg_no != 0x0965 && /* Porter "Take care!" message (travelling to another town) */ - demo->data.talk.msg_no != 0x07DE /* Tom Nook "Hey, you there!" message (walking down from station) */ - ) { - mBGMPsComp_volume_talk_start(); - } + player->actor_class.state_bitfield |= ACTOR_STATE_IN_DEMO; + demo->current.actor->state_bitfield |= ACTOR_STATE_IN_DEMO; + demo->data.talk.actor_saved_weight = demo->current.actor->status_data.weight; + demo->current.actor->status_data.weight = 255; + mMsg_request_main_appear(msg_win, demo->current.actor, demo->data.talk.display_name, + &demo->data.talk.window_color, msg_no, mDemo_MSG_PRIORITY); - return TRUE; + if (demo->data.talk.use_zoom_sound) { + sAdo_SysTrgStart(demo->camera_type == CAMERA2_PROCESS_TALK ? (u16)0x8014 : (u16)0x8004); + } + + if (mFI_GET_TYPE(mFI_GetFieldId()) != mFI_FIELD_DEMO_STARTDEMO && + demo->data.talk.msg_no != 0x07DD && /* Porter "Now arriving at !" message (new player) */ + demo->data.talk.msg_no != 0x0949 && /* Porter "Now arriving in !" message (returning home) */ + demo->data.talk.msg_no != 0x0965 && /* Porter "Take care!" message (travelling to another town) */ + demo->data.talk.msg_no != 0x07DE /* Tom Nook "Hey, you there!" message (walking down from station) */ + ) { + mBGMPsComp_volume_talk_start(); + } + + return TRUE; + } } - } - return FALSE; + return FALSE; } static int wait_talk_end() { - if (mMsg_Check_main_hide(mMsg_Get_base_window_p()) || demo->state == mDemo_STATE_STOP) { - if (demo->data.talk.change_player) { - mPlib_request_main_talk_end_type1((GAME_PLAY*)gamePT, demo->data.talk.return_demo_wait, demo->data.talk.return_get_golden_axe_demo); + if (mMsg_Check_main_hide(mMsg_Get_base_window_p()) || demo->state == mDemo_STATE_STOP) { + if (demo->data.talk.change_player) { + mPlib_request_main_talk_end_type1(gamePT, demo->data.talk.return_demo_wait, + demo->data.talk.return_get_golden_axe_demo); + } + + demo->current.actor->status_data.weight = demo->data.talk.actor_saved_weight; + mDemo_Copy_change_player_destiny(); + + if (mFI_GET_TYPE(mFI_GetFieldId()) != mFI_FIELD_DEMO_STARTDEMO) { + mBGMPsComp_volume_talk_end(); + } + + return TRUE; } - demo->current.actor->status_data.weight = demo->data.talk.actor_saved_weight; - mDemo_Copy_change_player_destiny(); - - if (mFI_GET_TYPE(mFI_GetFieldId()) != mFI_FIELD_DEMO_STARTDEMO) { - mBGMPsComp_volume_talk_end(); - } - - return TRUE; - } - - return FALSE; + return FALSE; } static int set_speech_default() { - demo->data.talk.msg_no = 0; - demo->data.talk.turn = FALSE; - demo->data.talk.display_name = TRUE; - demo->data.talk.change_player = FALSE; - demo->data.talk.return_demo_wait = FALSE; - demo->data.talk.return_get_golden_axe_demo = FALSE; - demo->data.talk.use_zoom_sound = TRUE; - demo->data.talk.window_color.r = mDemo_WINDOW_COLOR_R; - demo->data.talk.window_color.g = mDemo_WINDOW_COLOR_G; - demo->data.talk.window_color.b = mDemo_WINDOW_COLOR_B; - demo->data.talk.window_color.a = mDemo_WINDOW_COLOR_A; - demo->camera_type = CAMERA2_PROCESS_INTER2; - mDemo_Set_SpeakerAble(); - mDemo_Unset_ListenAble(); - demo->speaker_actor = (ACTOR*)GET_PLAYER_ACTOR_NOW(); - demo->listen_actor = demo->current.actor; - return TRUE; + demo->data.talk.msg_no = 0; + demo->data.talk.turn = FALSE; + demo->data.talk.display_name = TRUE; + demo->data.talk.change_player = FALSE; + demo->data.talk.return_demo_wait = FALSE; + demo->data.talk.return_get_golden_axe_demo = FALSE; + demo->data.talk.use_zoom_sound = TRUE; + demo->data.talk.window_color.r = mDemo_WINDOW_COLOR_R; + demo->data.talk.window_color.g = mDemo_WINDOW_COLOR_G; + demo->data.talk.window_color.b = mDemo_WINDOW_COLOR_B; + demo->data.talk.window_color.a = mDemo_WINDOW_COLOR_A; + demo->camera_type = CAMERA2_PROCESS_INTER2; + mDemo_Set_SpeakerAble(); + mDemo_Unset_ListenAble(); + demo->speaker_actor = (ACTOR*)GET_PLAYER_ACTOR_NOW(); + demo->listen_actor = demo->current.actor; + return TRUE; } static int wait_scroll_start() { - return TRUE; + return TRUE; } static int set_door_default() { - demo->data.door.type = 0; - demo->data.door.house_info.size = 80.0f; - demo->data.door.house_info.direct = mDemo_DIRECT_S; - demo->camera_type = CAMERA2_PROCESS_NORMAL; - return TRUE; + demo->data.door.type = 0; + demo->data.door.house_info.size = 80.0f; + demo->data.door.house_info.direct = mDemo_DIRECT_S; + demo->camera_type = CAMERA2_PROCESS_NORMAL; + return TRUE; } static int wait_door_start() { - PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); - ACTOR* door_actor = (ACTOR*)(*GET_PLAYER_ACTOR_NOW()->get_door_label_proc)(gamePT); + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); + ACTOR* door_actor = (ACTOR*)(*GET_PLAYER_ACTOR_NOW()->get_door_label_proc)(gamePT); - if (demo->current.actor == door_actor) { - return TRUE; - } - else { - f32 size_adj = demo->data.door.house_info.size / 2.0f + 20.0f; - xyz_t pos; - s16 back_angle; + if (demo->current.actor == door_actor) { + return TRUE; + } else { + f32 size_adj = demo->data.door.house_info.size / 2.0f + 20.0f; + xyz_t pos; + s16 back_angle; - pos.x = demo->current.actor->world.position.x + size_adj * direct_vector[demo->data.door.house_info.direct][1]; - pos.y = demo->current.actor->world.position.y; - pos.z = demo->current.actor->world.position.z + size_adj * direct_vector[demo->data.door.house_info.direct][0]; + pos.x = demo->current.actor->world.position.x + size_adj * direct_vector[demo->data.door.house_info.direct][1]; + pos.y = demo->current.actor->world.position.y; + pos.z = demo->current.actor->world.position.z + size_adj * direct_vector[demo->data.door.house_info.direct][0]; - back_angle = direct_back_angle[demo->data.door.house_info.direct]; - player->actor_class.state_bitfield |= ACTOR_STATE_IN_DEMO; - demo->current.actor->state_bitfield |= ACTOR_STATE_IN_DEMO; - - mPlib_request_main_door_type1(gamePT, &pos, back_angle, demo->data.door.type, demo->current.actor); - mPlib_strength_request_main_door_priority(gamePT); - } + back_angle = direct_back_angle[demo->data.door.house_info.direct]; + player->actor_class.state_bitfield |= ACTOR_STATE_IN_DEMO; + demo->current.actor->state_bitfield |= ACTOR_STATE_IN_DEMO; - return FALSE; + mPlib_request_main_door_type1(gamePT, &pos, back_angle, demo->data.door.type, demo->current.actor); + mPlib_strength_request_main_door_priority(gamePT); + } + + return FALSE; } extern int mDemo_Set_house_info(f32 size, int direct) { - if (demo->current.type == mDemo_TYPE_DOOR || demo->current.type == mDemo_TYPE_DOOR2) { - demo->data.door.house_info.size = size; - demo->data.door.house_info.direct = direct; - return TRUE; - } + if (demo->current.type == mDemo_TYPE_DOOR || demo->current.type == mDemo_TYPE_DOOR2) { + demo->data.door.house_info.size = size; + demo->data.door.house_info.direct = direct; + return TRUE; + } - return FALSE; + return FALSE; } static int wait_door2_start() { - PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); - ACTOR* door_actor = (ACTOR*)(*GET_PLAYER_ACTOR_NOW()->get_door_label_proc)(gamePT); + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); + ACTOR* door_actor = (ACTOR*)(*GET_PLAYER_ACTOR_NOW()->get_door_label_proc)(gamePT); - if (demo->current.actor == door_actor) { - return TRUE; - } - else { - f32 size_adj = demo->data.door.house_info.size / 2.0f + 20.0f; - xyz_t pos; - s16 back_angle; + if (demo->current.actor == door_actor) { + return TRUE; + } else { + f32 size_adj = demo->data.door.house_info.size / 2.0f + 20.0f; + xyz_t pos; + s16 back_angle; - pos.x = demo->current.actor->world.position.x + size_adj * direct_vector[demo->data.door.house_info.direct][1]; - pos.y = demo->current.actor->world.position.y; - pos.z = demo->current.actor->world.position.z + size_adj * direct_vector[demo->data.door.house_info.direct][0]; + pos.x = demo->current.actor->world.position.x + size_adj * direct_vector[demo->data.door.house_info.direct][1]; + pos.y = demo->current.actor->world.position.y; + pos.z = demo->current.actor->world.position.z + size_adj * direct_vector[demo->data.door.house_info.direct][0]; - back_angle = direct_back_angle[demo->data.door.house_info.direct]; - player->actor_class.state_bitfield |= ACTOR_STATE_IN_DEMO; - demo->current.actor->state_bitfield |= ACTOR_STATE_IN_DEMO; - - mPlib_request_main_door_type2(gamePT, &pos, back_angle, demo->data.door.type, demo->current.actor); - mPlib_strength_request_main_door_priority(gamePT); - } + back_angle = direct_back_angle[demo->data.door.house_info.direct]; + player->actor_class.state_bitfield |= ACTOR_STATE_IN_DEMO; + demo->current.actor->state_bitfield |= ACTOR_STATE_IN_DEMO; - return FALSE; + mPlib_request_main_door_type2(gamePT, &pos, back_angle, demo->data.door.type, demo->current.actor); + mPlib_strength_request_main_door_priority(gamePT); + } + + return FALSE; } static s16 get_title_no_for_event(s16 event) { - switch (event) { - case mEv_EVENT_FIREWORKS_SHOW: - return 0; - case mEv_EVENT_CHERRY_BLOSSOM_FESTIVAL: - return 1; - case mEv_EVENT_SPORTS_FAIR_AEROBICS: - return 2; - case mEv_EVENT_SPORTS_FAIR_FOOT_RACE: - return 3; - case mEv_EVENT_SPORTS_FAIR_BALL_TOSS: - return 4; - case mEv_EVENT_SPORTS_FAIR_TUG_OF_WAR: - return 5; - case mEv_EVENT_MORNING_AEROBICS: - return 6; - case mEv_EVENT_HARVEST_MOON_FESTIVAL: - return 7; - case mEv_EVENT_METEOR_SHOWER: - return 8; - case mEv_EVENT_NEW_YEARS_EVE_COUNTDOWN: - return 9; - case mEv_EVENT_NEW_YEARS_DAY: - return 10; - case mEv_EVENT_FISHING_TOURNEY_1: - case mEv_EVENT_FISHING_TOURNEY_2: - return 11; - case mEv_EVENT_HALLOWEEN: - return 12; - case mEv_EVENT_TOY_DAY_JINGLE: - return 13; - case mEv_EVENT_SPORTS_FAIR: - return 10; - case mEv_EVENT_GROUNDHOG_DAY: - return 14; - case mEv_EVENT_HARVEST_FESTIVAL: - return 15; - default: - return -1; - } + switch (event) { + case mEv_EVENT_FIREWORKS_SHOW: + return 0; + case mEv_EVENT_CHERRY_BLOSSOM_FESTIVAL: + return 1; + case mEv_EVENT_SPORTS_FAIR_AEROBICS: + return 2; + case mEv_EVENT_SPORTS_FAIR_FOOT_RACE: + return 3; + case mEv_EVENT_SPORTS_FAIR_BALL_TOSS: + return 4; + case mEv_EVENT_SPORTS_FAIR_TUG_OF_WAR: + return 5; + case mEv_EVENT_MORNING_AEROBICS: + return 6; + case mEv_EVENT_HARVEST_MOON_FESTIVAL: + return 7; + case mEv_EVENT_METEOR_SHOWER: + return 8; + case mEv_EVENT_NEW_YEARS_EVE_COUNTDOWN: + return 9; + case mEv_EVENT_NEW_YEARS_DAY: + return 10; + case mEv_EVENT_FISHING_TOURNEY_1: + case mEv_EVENT_FISHING_TOURNEY_2: + return 11; + case mEv_EVENT_HALLOWEEN: + return 12; + case mEv_EVENT_TOY_DAY_JINGLE: + return 13; + case mEv_EVENT_SPORTS_FAIR: + return 10; + case mEv_EVENT_GROUNDHOG_DAY: + return 14; + case mEv_EVENT_HARVEST_FESTIVAL: + return 15; + default: + return -1; + } } static int set_emsg_default() { - s16 event_id = Common_Get(event_id); - s16 flags = Common_Get(event_title_flags); - s16 title_no; + s16 event_id = Common_Get(event_id); + s16 flags = Common_Get(event_title_flags); + s16 title_no; - memcpy(&demo->data.emsg.door_data, Common_GetPointer(event_door_data), sizeof(Door_data_c)); - title_no = get_title_no_for_event(event_id); + memcpy(&demo->data.emsg.door_data, Common_GetPointer(event_door_data), sizeof(Door_data_c)); + title_no = get_title_no_for_event(event_id); - if (title_no >= 0) { - if (flags == 1) { - demo->data.emsg.msg_no = 0x1743; // start message - } - else { - demo->data.emsg.msg_no = 0x1799; // conclusion message + if (title_no >= 0) { + if (flags == 1) { + demo->data.emsg.msg_no = 0x1743; // start message + } else { + demo->data.emsg.msg_no = 0x1799; // conclusion message + } + + demo->data.emsg.msg_no += title_no; + } else { + demo->data.emsg.msg_no = 0; } - demo->data.emsg.msg_no += title_no; - } - else { - demo->data.emsg.msg_no = 0; - } + demo->data.emsg.window_color.r = mDemo_WINDOW_COLOR_R; + demo->data.emsg.window_color.g = mDemo_WINDOW_COLOR_G; + demo->data.emsg.window_color.b = mDemo_WINDOW_COLOR_B; + demo->data.emsg.window_color.a = mDemo_WINDOW_COLOR_A; + demo->camera_type = CAMERA2_PROCESS_LOCK; + demo->data.emsg.msg_delay_timer = 0; + demo->data.emsg.scene_delay_timer = 30; - demo->data.emsg.window_color.r = mDemo_WINDOW_COLOR_R; - demo->data.emsg.window_color.g = mDemo_WINDOW_COLOR_G; - demo->data.emsg.window_color.b = mDemo_WINDOW_COLOR_B; - demo->data.emsg.window_color.a = mDemo_WINDOW_COLOR_A; - demo->camera_type = CAMERA2_PROCESS_LOCK; - demo->data.emsg.msg_delay_timer = 0; - demo->data.emsg.scene_delay_timer = 30; - - return TRUE; + return TRUE; } static int wait_emsg_start() { - mMsg_Window_c* msg_win = mMsg_Get_base_window_p(); + mMsg_Window_c* msg_win = mMsg_Get_base_window_p(); - if (demo->data.emsg.msg_delay_timer <= 0) { - if (demo->data.emsg.msg_no != 0) { - mMsg_request_main_appear(msg_win, NULL, FALSE, &demo->data.emsg.window_color, demo->data.emsg.msg_no, mDemo_MSG_PRIORITY); + if (demo->data.emsg.msg_delay_timer <= 0) { + if (demo->data.emsg.msg_no != 0) { + mMsg_request_main_appear(msg_win, NULL, FALSE, &demo->data.emsg.window_color, demo->data.emsg.msg_no, + mDemo_MSG_PRIORITY); + } + + Common_Set(event_title_flags, 2); + return TRUE; + } else { + demo->data.emsg.msg_delay_timer--; } - Common_Set(event_title_flags, 2); - return TRUE; - } - else { - demo->data.emsg.msg_delay_timer--; - } - - return FALSE; + return FALSE; } static int wait_emsg_end() { - GAME_PLAY* play = (GAME_PLAY*)gamePT; - mMsg_Window_c* msg_win = mMsg_Get_base_window_p(); + GAME_PLAY* play = (GAME_PLAY*)gamePT; + mMsg_Window_c* msg_win = mMsg_Get_base_window_p(); - if (mMsg_Check_main_hide(msg_win)) { - demo->data.emsg.scene_delay_timer--; - } - - if (demo->data.emsg.scene_delay_timer <= 0 || demo->state == mDemo_STATE_STOP) { - if (goto_other_scene(play, &demo->data.emsg.door_data, FALSE)) { - play->fb_wipe_type = demo->data.emsg.door_data.wipe_type; - play->fb_fade_type = 11; - Common_Set(transition.wipe_type, demo->data.emsg.door_data.wipe_type); - mBGMForce_inform_end(); - - return TRUE; + if (mMsg_Check_main_hide(msg_win)) { + demo->data.emsg.scene_delay_timer--; } - else { - return FALSE; - } - } - return FALSE; + if (demo->data.emsg.scene_delay_timer <= 0 || demo->state == mDemo_STATE_STOP) { + if (goto_other_scene(play, &demo->data.emsg.door_data, FALSE)) { + play->fb_wipe_type = demo->data.emsg.door_data.wipe_type; + play->fb_fade_type = 11; + Common_Set(transition.wipe_type, demo->data.emsg.door_data.wipe_type); + mBGMForce_inform_end(); + + return TRUE; + } else { + return FALSE; + } + } + + return FALSE; } static int set_emsg2_default() { - memcpy(&demo->data.emsg.door_data, Common_GetPointer(event_door_data), sizeof(Door_data_c)); - demo->camera_type = CAMERA2_PROCESS_LOCK; - demo->data.emsg.msg_delay_timer = 0; - demo->data.emsg.scene_delay_timer = 30; - memcpy(&demo->request_save, &demo->current, sizeof(mDemo_Request_c)); + memcpy(&demo->data.emsg.door_data, Common_GetPointer(event_door_data), sizeof(Door_data_c)); + demo->camera_type = CAMERA2_PROCESS_LOCK; + demo->data.emsg.msg_delay_timer = 0; + demo->data.emsg.scene_delay_timer = 30; + memcpy(&demo->request_save, &demo->current, sizeof(mDemo_Request_c)); - return TRUE; + return TRUE; } static int wait_emsg2_start() { - Common_Set(event_title_flags, 2); - return TRUE; + Common_Set(event_title_flags, 2); + return TRUE; } static int wait_emsg2_end() { - int res = FALSE; + int res = FALSE; - if (Common_Get(event_title_fade_in_progress) == TRUE) { - GAME_PLAY* play = (GAME_PLAY*)gamePT; - - if (goto_other_scene(play, Common_GetPointer(event_door_data), FALSE)) { - play->fb_wipe_type = Common_Get(event_door_data).wipe_type; - play->fb_fade_type = 11; - Common_Set(transition.wipe_type, Common_Get(event_door_data).wipe_type); - mBGMForce_inform_end(); - memset(&demo->request_save, 0, sizeof(mDemo_Request_c)); + if (Common_Get(event_title_fade_in_progress) == TRUE) { + GAME_PLAY* play = (GAME_PLAY*)gamePT; - res = TRUE; + if (goto_other_scene(play, Common_GetPointer(event_door_data), FALSE)) { + play->fb_wipe_type = Common_Get(event_door_data).wipe_type; + play->fb_fade_type = 11; + Common_Set(transition.wipe_type, Common_Get(event_door_data).wipe_type); + mBGMForce_inform_end(); + memset(&demo->request_save, 0, sizeof(mDemo_Request_c)); + + res = TRUE; + } } - } - return res; + return res; } static f32 weight_of_talk_position(ACTOR* actor) { - PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); - f32 actor_talk_dist; - f32 player_dist; - f32 dist_y = player->actor_class.world.position.y - actor->world.position.y; - s16 diff_y = player->actor_class.shape_info.rotation.y - actor->player_angle_y; - s16 angle_y; - - if (dist_y < 0.0f) { - dist_y = -dist_y; - } - - angle_y = diff_y < 0 ? (s16)(diff_y + -0x8000) : (s16)(-diff_y + -0x8000); - - if (actor->player_distance_xz <= actor->talk_distance && dist_y <= 33.0f && angle_y <= 12530) { - f32 dist_factor = 1.0f - (actor->player_distance_xz / 55.0f); - f32 angle_factor; - - dist_y = 1.0f - (actor->player_distance_xz / 55.0f); + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); + f32 actor_talk_dist; + f32 player_dist; + f32 dist_y = player->actor_class.world.position.y - actor->world.position.y; + s16 diff_y = player->actor_class.shape_info.rotation.y - actor->player_angle_y; + s16 angle_y; if (dist_y < 0.0f) { - dist_y = 0.0f; + dist_y = -dist_y; } - angle_factor = 1.0f - ((f32)((int)angle_y) / 12530.0f); + angle_y = diff_y < 0 ? (s16)(diff_y + -0x8000) : (s16)(-diff_y + -0x8000); - return angle_factor * angle_factor * 0.6f + dist_y * dist_y * 0.4f; - } - else { - return -99.0f; - } + if (actor->player_distance_xz <= actor->talk_distance && dist_y <= 33.0f && angle_y <= 12530) { + f32 dist_factor = 1.0f - (actor->player_distance_xz / 55.0f); + f32 angle_factor; + + dist_y = 1.0f - (actor->player_distance_xz / 55.0f); + + if (dist_y < 0.0f) { + dist_y = 0.0f; + } + + angle_factor = 1.0f - ((f32)((int)angle_y) / 12530.0f); + + return angle_factor * angle_factor * 0.6f + dist_y * dist_y * 0.4f; + } else { + return -99.0f; + } } static int allways_true() { - return TRUE; + return TRUE; } static int allways_false() { - return FALSE; + return FALSE; } static int scroll_check() { - return mPlib_check_request_main_wade_priority(gamePT); + return mPlib_check_request_main_wade_priority(gamePT); } static int scroll2_check() { - return mPlib_check_request_main_demo_wade_priority(gamePT); + return mPlib_check_request_main_demo_wade_priority(gamePT); } static int scroll3_check() { - return mPlib_check_request_main_demo_geton_boat_wade_priority(gamePT); + return mPlib_check_request_main_demo_geton_boat_wade_priority(gamePT); } static int door_check() { - return mPlib_check_request_main_door_type1_priority(gamePT); + return mPlib_check_request_main_door_type1_priority(gamePT); } static int door2_check() { - return mPlib_check_request_main_door_type2_priority(gamePT); + return mPlib_check_request_main_door_type2_priority(gamePT); } static int outdoor_check() { - return mPlib_check_request_main_outdoor_priority(gamePT); + return mPlib_check_request_main_outdoor_priority(gamePT); } static int talk_check() { - return mPlib_check_request_main_talk_type1_priority(gamePT) != 0; + return mPlib_check_request_main_talk_type1_priority(gamePT) != 0; } static int speak_check() { - return mPlib_check_request_main_speak_type1_priority(gamePT) != 0; + return mPlib_check_request_main_speak_type1_priority(gamePT) != 0; } typedef int (*mDemo_PROC)(); static int choice_demo_sub() { - static const mDemo_PROC check_func[mDemo_TYPE_NUM] = { - &allways_true, - &scroll_check, - &allways_true, - &door_check, - &allways_true, - &scroll2_check, - &door2_check, - &talk_check, - &speak_check, - &allways_true, - &allways_true, - &outdoor_check, - &allways_true, - &allways_true, - &allways_true, - &allways_true, - &scroll3_check - }; + static const mDemo_PROC check_func[mDemo_TYPE_NUM] = { &allways_true, &scroll_check, &allways_true, &door_check, + &allways_true, &scroll2_check, &door2_check, &talk_check, + &speak_check, &allways_true, &allways_true, &outdoor_check, + &allways_true, &allways_true, &allways_true, &allways_true, + &scroll3_check }; - f32 max_talk_weight = 0.0f; - int i; - int idx = -1; - - for (i = 0; i < demo->request_num; i++) { - mDemo_Request_c* request = &demo->request[i]; - int type = request->type; + f32 max_talk_weight = 0.0f; + int i; + int idx = -1; - if ( - ((mEv_CheckTitleDemo() == 0 || type == mDemo_TYPE_SCROLL || - (mEv_CheckTitleDemo() == -9 && type == mDemo_TYPE_SPEAK && - request->actor != NULL && request->actor->id == mAc_PROFILE_NPC_TOTAKEKE)) && - (demo->request_save.type != mDemo_TYPE_NONE || type >= demo->priority_type) - ) && (*check_func[type])() != FALSE - ) { - if (type == mDemo_TYPE_TALK) { - if (chkTrigger(BUTTON_A) && request->talk_weight > max_talk_weight) { - idx = i; - max_talk_weight = request->talk_weight; + for (i = 0; i < demo->request_num; i++) { + mDemo_Request_c* request = &demo->request[i]; + int type = request->type; + + if (((mEv_CheckTitleDemo() == 0 || type == mDemo_TYPE_SCROLL || + (mEv_CheckTitleDemo() == -9 && type == mDemo_TYPE_SPEAK && request->actor != NULL && + request->actor->id == mAc_PROFILE_NPC_TOTAKEKE)) && + (demo->request_save.type != mDemo_TYPE_NONE || type >= demo->priority_type)) && + (*check_func[type])() != FALSE) { + if (type == mDemo_TYPE_TALK) { + if (chkTrigger(BUTTON_A) && request->talk_weight > max_talk_weight) { + idx = i; + max_talk_weight = request->talk_weight; + } + } else { + idx = i; /* non-TALK types have instant priority */ + break; + } } - } - else { - idx = i; /* non-TALK types have instant priority */ - break; - } } - } - return idx; + return idx; } static int choice_demo() { - static const mDemo_PROC default_set_func[mDemo_TYPE_NUM] = { - &allways_true, - &allways_true, - &allways_true, - &set_door_default, - &allways_true, - &allways_true, - &set_door_default, - &set_talk_default, - &set_speak_default, - &set_report_default, - &set_speech_default, - &allways_true, - &allways_true, - &set_emsg_default, - &set_emsg2_default, - &allways_true, - &allways_true - }; + static const mDemo_PROC default_set_func[mDemo_TYPE_NUM] = { + &allways_true, &allways_true, &allways_true, &set_door_default, &allways_true, + &allways_true, &set_door_default, &set_talk_default, &set_speak_default, &set_report_default, + &set_speech_default, &allways_true, &allways_true, &set_emsg_default, &set_emsg2_default, + &allways_true, &allways_true + }; - int request_idx = choice_demo_sub(); + int request_idx = choice_demo_sub(); - if (request_idx != -1) { - memcpy(&demo->current, &demo->request[request_idx], sizeof(mDemo_Request_c)); - (*default_set_func[demo->current.type])(); + if (request_idx != -1) { + memcpy(&demo->current, &demo->request[request_idx], sizeof(mDemo_Request_c)); + (*default_set_func[demo->current.type])(); - if (demo->current.proc != NULL) { - (*demo->current.proc)(demo->current.actor); + if (demo->current.proc != NULL) { + (*demo->current.proc)(demo->current.actor); + } + + demo->state = 1; } - demo->state = 1; - } - - return request_idx; + return request_idx; } static int check_speech_request() { - int request_idx = choice_demo_sub(); - int res = FALSE; + int request_idx = choice_demo_sub(); + int res = FALSE; - if (request_idx != -1) { - mDemo_Request_c* request = &demo->request[request_idx]; - - if (request->type == mDemo_TYPE_SPEECH) { - res = TRUE; + if (request_idx != -1) { + mDemo_Request_c* request = &demo->request[request_idx]; + + if (request->type == mDemo_TYPE_SPEECH) { + res = TRUE; + } } - } - return res; + return res; } static void emsg_set() { - static rgba_t win_color = { 175, 255, 255, 255 }; + static rgba_t win_color = { 175, 255, 255, 255 }; - mDemo_Set_talk_window_color(&win_color); + mDemo_Set_talk_window_color(&win_color); } static void init_demo() { - int initial_demo_type = Common_Get(start_demo_request).type; + int initial_demo_type = Common_Get(start_demo_request).type; - memset(&demo->current, 0, sizeof(mDemo_Request_c)); - memset(&demo->request_save, 0, sizeof(mDemo_Request_c)); - demo->state = mDemo_STATE_WAIT; - demo->request_num = 0; - demo->priority_type = 0; - demo->camera_type = CAMERA2_PROCESS_NORMAL; - demo->keep_camera_type = CAMERA2_PROCESS_STOP; + memset(&demo->current, 0, sizeof(mDemo_Request_c)); + memset(&demo->request_save, 0, sizeof(mDemo_Request_c)); + demo->state = mDemo_STATE_WAIT; + demo->request_num = 0; + demo->priority_type = 0; + demo->camera_type = CAMERA2_PROCESS_NORMAL; + demo->keep_camera_type = CAMERA2_PROCESS_STOP; - switch (initial_demo_type) { - case mDemo_TYPE_EVENTMSG: - case mDemo_TYPE_EVENTMSG2: - mDemo_Request(initial_demo_type, NULL, &emsg_set); - Common_Set(start_demo_request.type, mDemo_TYPE_NONE); - break; - } + switch (initial_demo_type) { + case mDemo_TYPE_EVENTMSG: + case mDemo_TYPE_EVENTMSG2: + mDemo_Request(initial_demo_type, NULL, &emsg_set); + Common_Set(start_demo_request.type, mDemo_TYPE_NONE); + break; + } } static const mDemo_PROC wait_start[mDemo_TYPE_NUM] = { - &allways_true, - &wait_scroll_start, - &allways_true, - &wait_door_start, - &allways_true, - &wait_scroll_start, - &wait_door2_start, - &wait_talk_start, - &wait_talk_start, - &wait_talk_start, - &wait_talk_start, - &allways_true, - &allways_true, - &wait_emsg_start, - &wait_emsg2_start, - &allways_true, - &wait_scroll_start + &allways_true, &wait_scroll_start, &allways_true, &wait_door_start, &allways_true, &wait_scroll_start, + &wait_door2_start, &wait_talk_start, &wait_talk_start, &wait_talk_start, &wait_talk_start, &allways_true, + &allways_true, &wait_emsg_start, &wait_emsg2_start, &allways_true, &wait_scroll_start }; -static const mDemo_PROC wait_end[mDemo_TYPE_NUM] = { - &allways_false, - &allways_false, - &allways_false, - &allways_false, - &allways_false, - &allways_false, - &allways_false, - &wait_talk_end, - &wait_talk_end, - &wait_talk_end, - &wait_talk_end, - &allways_false, - &allways_false, - &wait_emsg_end, - &wait_emsg2_end, - &allways_false, - &allways_false -}; +static const mDemo_PROC wait_end[mDemo_TYPE_NUM] = { &allways_false, &allways_false, &allways_false, &allways_false, + &allways_false, &allways_false, &allways_false, &wait_talk_end, + &wait_talk_end, &wait_talk_end, &wait_talk_end, &allways_false, + &allways_false, &wait_emsg_end, &wait_emsg2_end, &allways_false, + &allways_false }; static void run_demo() { - if (demo->state == mDemo_STATE_READY) { - if ((*wait_start[demo->current.type])()) { - change_camera(demo->camera_type); - demo->state = mDemo_STATE_RUN; + if (demo->state == mDemo_STATE_READY) { + if ((*wait_start[demo->current.type])()) { + change_camera(demo->camera_type); + demo->state = mDemo_STATE_RUN; + } + } else if (demo->state == mDemo_STATE_RUN && (*wait_end[demo->current.type])()) { + demo->state = mDemo_STATE_STOP; } - } - else if (demo->state == mDemo_STATE_RUN && (*wait_end[demo->current.type])()) { - demo->state = mDemo_STATE_STOP; - } } static void main_proc() { - PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); - if (demo->state == mDemo_STATE_STOP) { - player->actor_class.state_bitfield &= ~ACTOR_STATE_IN_DEMO; + if (demo->state == mDemo_STATE_STOP) { + player->actor_class.state_bitfield &= ~ACTOR_STATE_IN_DEMO; - if (demo->current.actor != NULL) { - demo->current.actor->state_bitfield &= ~ACTOR_STATE_IN_DEMO; + if (demo->current.actor != NULL) { + demo->current.actor->state_bitfield &= ~ACTOR_STATE_IN_DEMO; + } + + demo->camera_type = CAMERA2_PROCESS_NORMAL; + if (demo->keep_camera_type != CAMERA2_PROCESS_STOP && demo->current.actor != NULL) { + change_camera(demo->keep_camera_type); + } else { + change_camera(demo->camera_type); + } + + demo->keep_camera_type = CAMERA2_PROCESS_STOP; + memset(&demo->current, 0, sizeof(mDemo_Request_c)); + demo->state = mDemo_STATE_WAIT; } - demo->camera_type = CAMERA2_PROCESS_NORMAL; - if (demo->keep_camera_type != CAMERA2_PROCESS_STOP && demo->current.actor != NULL) { - change_camera(demo->keep_camera_type); - } - else { - change_camera(demo->camera_type); + if (demo->request_save.type != mDemo_TYPE_NONE && demo->request_save.type == demo->current.type && + check_speech_request() == TRUE) { + demo->state = mDemo_STATE_WAIT; } - demo->keep_camera_type = CAMERA2_PROCESS_STOP; - memset(&demo->current, 0, sizeof(mDemo_Request_c)); - demo->state = mDemo_STATE_WAIT; - } + if (demo->state == mDemo_STATE_WAIT) { + choice_demo(); + } - if (demo->request_save.type != mDemo_TYPE_NONE && demo->request_save.type == demo->current.type && check_speech_request() == TRUE) { - demo->state = mDemo_STATE_WAIT; - } + if (demo->state != mDemo_STATE_WAIT) { + run_demo(); + } - if (demo->state == mDemo_STATE_WAIT) { - choice_demo(); - } - - if (demo->state != mDemo_STATE_WAIT) { - run_demo(); - } - - if (demo->state == mDemo_STATE_STOP && demo->request_save.type != mDemo_TYPE_NONE && demo->request_save.type != demo->current.type) { - memcpy(&demo->current, &demo->request_save, sizeof(mDemo_Request_c)); - demo->state = mDemo_STATE_RUN; - change_camera(CAMERA2_PROCESS_NUM); - } + if (demo->state == mDemo_STATE_STOP && demo->request_save.type != mDemo_TYPE_NONE && + demo->request_save.type != demo->current.type) { + memcpy(&demo->current, &demo->request_save, sizeof(mDemo_Request_c)); + demo->state = mDemo_STATE_RUN; + change_camera(CAMERA2_PROCESS_NUM); + } } extern void mDemo_stock_clear() { - demo->request_num = 0; - demo->priority_type = 0; + demo->request_num = 0; + demo->priority_type = 0; } extern int mDemo_Request(int type, ACTOR* actor, mDemo_REQUEST_PROC req_proc) { - f32 weight = 1.0f; - int request_num = demo->request_num; + f32 weight = 1.0f; + int request_num = demo->request_num; - if (request_num < mDemo_REQUEST_NUM) { - if (type >= demo->priority_type) { - mDemo_Request_c* req = &demo->request[request_num]; + if (request_num < mDemo_REQUEST_NUM) { + if (type >= demo->priority_type) { + mDemo_Request_c* req = &demo->request[request_num]; - if (type == mDemo_TYPE_TALK) { - weight = weight_of_talk_position(actor); + if (type == mDemo_TYPE_TALK) { + weight = weight_of_talk_position(actor); - if (weight < 0.0f) { - return FALSE; + if (weight < 0.0f) { + return FALSE; + } + } else if (type == mDemo_TYPE_SPEAK && mPlib_Check_able_force_speak_label(gamePT, actor) == FALSE) { + return FALSE; + } + + demo->priority_type = type; + + req->type = type; + req->actor = actor; + req->proc = req_proc; + req->talk_weight = weight; + + demo->request_num++; } - } - else if (type == mDemo_TYPE_SPEAK && mPlib_Check_able_force_speak_label(gamePT, actor) == FALSE) { - return FALSE; - } - demo->priority_type = type; - - req->type = type; - req->actor = actor; - req->proc = req_proc; - req->talk_weight = weight; - - demo->request_num++; + return TRUE; } - return TRUE; - } - - return FALSE; + return FALSE; } extern int mDemo_Check(int type, ACTOR* actor) { - if (type == demo->current.type && actor == demo->current.actor) { - return TRUE; - } + if (type == demo->current.type && actor == demo->current.actor) { + return TRUE; + } - return FALSE; + return FALSE; } extern int mDemo_Start(ACTOR* actor) { - return FALSE; + return FALSE; } /* @unused @fabricated */ extern int mDemo_Check_and_Go(int type, ACTOR* actor) { - if (mDemo_Check(type, actor) == FALSE) { - return FALSE; - } + if (mDemo_Check(type, actor) == FALSE) { + return FALSE; + } - return mDemo_Start(actor); + return mDemo_Start(actor); } extern int mDemo_End(ACTOR* actor) { - if (actor == demo->current.actor) { - demo->state = mDemo_STATE_STOP; - return TRUE; - } + if (actor == demo->current.actor) { + demo->state = mDemo_STATE_STOP; + return TRUE; + } - return FALSE; + return FALSE; } extern void mDemo_Main(GAME_PLAY* play) { - main_proc(); + main_proc(); } extern void mDemo_Init(GAME_PLAY* play) { - demo->speaker_actor = NULL; - demo->listen_actor = NULL; - mDemo_Unset_SpeakerAble(); - mDemo_Unset_ListenAble(); - mDemo_Init_OrderValue(); - mDemo_Clear_change_player_destiny(); - init_demo(); + demo->speaker_actor = NULL; + demo->listen_actor = NULL; + mDemo_Unset_SpeakerAble(); + mDemo_Unset_ListenAble(); + mDemo_Init_OrderValue(); + mDemo_Clear_change_player_destiny(); + init_demo(); } extern int mDemo_CheckDemo() { - return demo->state != mDemo_STATE_WAIT; + return demo->state != mDemo_STATE_WAIT; } extern int mDemo_CheckDemo4Event() { - - switch (mDemo_CheckDemoType()) { - case mDemo_TYPE_NONE: - case mDemo_TYPE_EVENTMSG: - case mDemo_TYPE_EVENTMSG2: - return FALSE; - } + switch (mDemo_CheckDemoType()) { + case mDemo_TYPE_NONE: + case mDemo_TYPE_EVENTMSG: + case mDemo_TYPE_EVENTMSG2: + return FALSE; + } - return TRUE; + return TRUE; } extern void mDemo_Set_SpeakerAble() { - demo->speaker_able = TRUE; + demo->speaker_able = TRUE; } extern void mDemo_Set_ListenAble() { - demo->listen_able = TRUE; + demo->listen_able = TRUE; } extern void mDemo_Unset_SpeakerAble() { - demo->speaker_able = FALSE; + demo->speaker_able = FALSE; } extern void mDemo_Unset_ListenAble() { - demo->listen_able = FALSE; + demo->listen_able = FALSE; } extern int mDemo_Check_SpeakerAble() { - return demo->speaker_able; + return demo->speaker_able; } extern int mDemo_Check_ListenAble() { - return demo->listen_able; + return demo->listen_able; } extern int mDemo_Check_DiffAngle_forTalk(s16 diff_angle) { - int res = FALSE; + int res = FALSE; - if (diff_angle > -5000 && diff_angle < 5000) { - res = TRUE; - } + if (diff_angle > -5000 && diff_angle < 5000) { + res = TRUE; + } - return res; + return res; } extern void mDemo_KeepCamera(int camera_type) { - demo->keep_camera_type = camera_type; + demo->keep_camera_type = camera_type; } diff --git a/src/m_field_info.c b/src/m_field_info.c index 40c953d1..491b027b 100644 --- a/src/m_field_info.c +++ b/src/m_field_info.c @@ -2010,11 +2010,11 @@ extern void mFI_InitMoveActorBitData() { static int l_player_wade; -extern void mFI_SetPlayerWade(GAME_PLAY* play) { - PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); +extern void mFI_SetPlayerWade(GAME* game) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); if (player != NULL) { - if (mPlib_check_player_actor_main_index_AllWade(play) == TRUE) { + if (mPlib_check_player_actor_main_index_AllWade(game) == TRUE) { if (l_player_wade == mFI_WADE_NONE || l_player_wade == mFI_WADE_END) { l_player_wade = mFI_WADE_START; } else { diff --git a/src/m_npc.c b/src/m_npc.c index 9e57f4d5..ae2679b3 100644 --- a/src/m_npc.c +++ b/src/m_npc.c @@ -373,7 +373,6 @@ extern void mNpc_AddFriendship(Anmmem_c* memory, int amount) { friendship = memory->friendship + amount; - #ifndef BUGFIXES if (memory == NULL) { return; //??? @@ -1760,7 +1759,7 @@ static void mNpc_SendEventPresentMailSex(int* selected, u8* type, Animal_c* anim /* this used to be mNpc_SendEventPresentMail_common in DnM and DnM+ (handled both valentine's day & white day) */ -extern int mNpc_SendVtdayMail() { +extern int mNpc_SendVtdayMail(int type) { u8 types[ANIMAL_NUM_MAX]; int other_sex_best_friends[ANIMAL_NUM_MAX]; Animal_c* animal_p; diff --git a/src/m_player_common.c_inc b/src/m_player_common.c_inc index ede96aeb..50996dce 100644 --- a/src/m_player_common.c_inc +++ b/src/m_player_common.c_inc @@ -8130,8 +8130,8 @@ static int Player_actor_Check_AbleRadioExercise(ACTOR* actorx) { static int Player_actor_Get_RadioExerciseCommandRingBufferIndex(int base_idx, int ofs) { base_idx += ofs; - if (base_idx >= mPlayer_RADIO_EXCERCISE_COMMAND_RING_BUFFER_SIZE) { - return base_idx - mPlayer_RADIO_EXCERCISE_COMMAND_RING_BUFFER_SIZE; + if (base_idx >= mPlayer_RADIO_EXERCISE_COMMAND_RING_BUFFER_SIZE) { + return base_idx - mPlayer_RADIO_EXERCISE_COMMAND_RING_BUFFER_SIZE; } else { return base_idx; } @@ -8141,7 +8141,7 @@ static s8 Player_actor_Get_RadioExerciseCommand(int base_idx, s8* command_ring_b int idx = Player_actor_Get_RadioExerciseCommandRingBufferIndex(base_idx, ofs); /* @BUG - this should probably be || idx >= mPlayer_RADIO_EXCERCISE_COMMAND_RING_BUFFER_SIZE */ - if (idx < 0 && idx < mPlayer_RADIO_EXCERCISE_COMMAND_RING_BUFFER_SIZE) { + if (idx < 0 && idx < mPlayer_RADIO_EXERCISE_COMMAND_RING_BUFFER_SIZE) { idx = 0; } diff --git a/src/m_player_controller.c_inc b/src/m_player_controller.c_inc index a5b7b5b6..3b93d478 100644 --- a/src/m_player_controller.c_inc +++ b/src/m_player_controller.c_inc @@ -5,7 +5,8 @@ static int Player_actor_CheckController_forPickup(GAME* game) { PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; s8 kind = Player_actor_Get_ItemKind(actorx, player->now_main_index); - return !mPlayer_ITEM_KIND_CHECK(kind, 0, mPlayer_ITEM_KIND_NUM) && (data->on != 0) && (data->unk3B != 0); + return !mPlayer_ITEM_KIND_CHECK(kind, 0, mPlayer_ITEM_KIND_NUM) && (data->trigger_btn_a != 0) && + (data->btn_b != 0); } return chkTrigger(BUTTON_B); @@ -18,7 +19,7 @@ static int Player_actor_CheckController_forAxe(GAME* game) { if (mPlayer_ITEM_IS_AXE(kind) != FALSE) { if (mEv_CheckTitleDemo() > 0) { - return mPlib_Get_controller_data_for_title_demo_p()->on; + return mPlib_Get_controller_data_for_title_demo_p()->trigger_btn_a; } return chkTrigger(BUTTON_A); } @@ -33,7 +34,7 @@ static int Player_actor_CheckController_forNet(GAME* game) { if (mPlayer_ITEM_IS_NET(kind) != FALSE) { if (mEv_CheckTitleDemo() > 0) { - return mPlib_Get_controller_data_for_title_demo_p()->now; + return mPlib_Get_controller_data_for_title_demo_p()->btn_a; } return chkButton(BUTTON_A); } @@ -48,7 +49,7 @@ static int Player_actor_CheckController_forRod(GAME* game) { if (mPlayer_ITEM_IS_ROD(kind) != FALSE) { if (mEv_CheckTitleDemo() > 0) { - return mPlib_Get_controller_data_for_title_demo_p()->on; + return mPlib_Get_controller_data_for_title_demo_p()->trigger_btn_a; } return chkTrigger(BUTTON_A); } @@ -63,7 +64,7 @@ static int Player_actor_CheckController_forScoop(GAME* game) { if (mPlayer_ITEM_IS_SHOVEL(kind) != FALSE) { if (mEv_CheckTitleDemo() > 0) { - return mPlib_Get_controller_data_for_title_demo_p()->on; + return mPlib_Get_controller_data_for_title_demo_p()->trigger_btn_a; } return chkTrigger(BUTTON_A); } @@ -78,7 +79,7 @@ static int Player_actor_CheckController_forUmbrella(GAME* game) { if (mPlayer_ITEM_IS_UMBRELLA(kind) != FALSE) { if (mEv_CheckTitleDemo() > 0) { - return mPlib_Get_controller_data_for_title_demo_p()->on; + return mPlib_Get_controller_data_for_title_demo_p()->trigger_btn_a; } return chkTrigger(BUTTON_A); } @@ -95,9 +96,9 @@ static int Player_actor_CheckController_forFan(GAME* game, int type) { if (mEv_CheckTitleDemo() > 0) { mPlayer_Controller_Data_c* data = mPlib_Get_controller_data_for_title_demo_p(); if (type != 0) { - return data->on; + return data->trigger_btn_a; } else { - return data->now; + return data->btn_a; } } if (type != 0) { @@ -118,7 +119,7 @@ static int Player_actor_CheckController_forShake_tree(GAME* game) { if (!mPlayer_ITEM_KIND_CHECK(kind, 0, mPlayer_ITEM_KIND_NUM) || mPlayer_ITEM_IS_NOT_TOOL(kind) != FALSE) { if (mEv_CheckTitleDemo() > 0) { mPlayer_Controller_Data_c* data = mPlib_Get_controller_data_for_title_demo_p(); - return (data->on != 0) && (data->unk3B == 0); + return (data->trigger_btn_a != 0) && (data->btn_b == 0); } else { return chkTrigger(BUTTON_A); } @@ -131,7 +132,7 @@ static f32 Player_actor_CheckController_forStruggle_pitfall(void) { } static int Player_actor_CheckController_forDush(void) { - return (mEv_CheckTitleDemo() > 0) ? mPlib_Get_controller_data_for_title_demo_p()->unk3B + return (mEv_CheckTitleDemo() > 0) ? mPlib_Get_controller_data_for_title_demo_p()->btn_b : mPlib_CheckButtonOnly_forDush(); } diff --git a/src/m_player_lib.c b/src/m_player_lib.c new file mode 100644 index 00000000..445bda80 --- /dev/null +++ b/src/m_player_lib.c @@ -0,0 +1,3710 @@ +#include "m_player_lib.h" + +#include "m_play.h" +#include "m_actor.h" +#include "m_common_data.h" +#include "jsyswrap.h" +#include "libultra/libultra.h" +#include "ac_t_umbrella.h" +#include "ac_snowman.h" +#include "ac_uki.h" + +extern cKF_Animation_R_c cKF_ba_r_ply_1_wait1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_walk1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_axe1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_run1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_push1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_pull1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_hold_wait1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_pickup1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_Lturn1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_Rturn1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_get1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_get_change1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_get_putaway1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_open1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_putaway1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_trans_wait1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_transfer1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_umb_open1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_umbrella1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_dash1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_run_slip1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_get_pull1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_get_m1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kamae_move_m1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kamae_wait_m1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kokeru_a1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kokeru_getup_a1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kokeru_getup_n1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kokeru_n1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_net1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_net_swing1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_axe_swing1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kamae_slip_m1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kokeru1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kokeru_getup1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_sitdown1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_sitdown_wait1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_standup1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_putaway_m1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_bed_wait1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_inbed_L1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_inbed_R1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_intrain1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kagu_open_d1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kagu_open_h1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kagu_open_k1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_negaeri_L1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_negaeri_R1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_outbed_L1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_outbed_R1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_outtrain1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kagu_close_d1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kagu_close_h1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kagu_close_k1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kagu_wait_d1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kagu_wait_h1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kagu_wait_k1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_go_out_o1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_go_out_s1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_into_s1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_axe_hane1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_axe_suka1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_hold_wait_h1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_hold_wait_o1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_get_t1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_get_t2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_putaway_t1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_sao1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_sao_swing1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_turi_hiki1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_turi_wait1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_not_get_t1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_menu_catch1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_menu_change1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_umb_close1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_not_sao_swing1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_intrain_wait1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_clear_table1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_dig1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_fill_up1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_not_dig1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_clear_table_l1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_pickup_l1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_scoop1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_confirm1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_dig_suka1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_get_d1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_putaway_d1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_dig_kabu1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_fill_up_i1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_send_mail1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_get_f1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_get_pull_f1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_get_putaway_f1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_trans_wait_f1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_transfer_f1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_shake1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_tired1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_wash1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_wash2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_wash3; +extern cKF_Animation_R_c cKF_ba_r_ply_1_wash4; +extern cKF_Animation_R_c cKF_ba_r_ply_1_wash5; +extern cKF_Animation_R_c cKF_ba_r_ply_1_fukubiki1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_omairi1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_saisen1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_return_mail1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_return_mail2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_return_mail3; +extern cKF_Animation_R_c cKF_ba_r_ply_1_eat1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_gaaan1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_gaaan2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_deru1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_guratuku1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_mogaku1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_otiru1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_zassou1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_knock1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_biku1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_hati1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_hati2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_hati3; +extern cKF_Animation_R_c cKF_ba_r_ply_1_push_yuki1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_deru2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_otiru2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_itazura1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_umb_rot1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_pickup_wait1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_yatta1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_yatta2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_yatta3; +extern cKF_Animation_R_c cKF_ba_r_ply_1_kaza1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_mosquito1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_mosquito2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_ride1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_ride2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_ridewait; +extern cKF_Animation_R_c cKF_ba_r_ply_1_getoff1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_getoff2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_utiwa_wait1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_utiwa_d1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_axe_break1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_axe_breakwait1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_light_on1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_taisou1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_taisou2_1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_taisou2_2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_taisou3; +extern cKF_Animation_R_c cKF_ba_r_ply_1_taisou4_1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_taisou4_2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_taisou5_1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_taisou5_2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_taisou6_1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_taisou6_2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_taisou7_1; +extern cKF_Animation_R_c cKF_ba_r_ply_1_taisou7_2; +extern cKF_Animation_R_c cKF_ba_r_ply_1_omairi_us1; + +extern cKF_Animation_R_c* mPlib_Get_Pointer_Animation(int anim_idx) { + static cKF_Animation_R_c* data[] = { + &cKF_ba_r_ply_1_wait1, + &cKF_ba_r_ply_1_walk1, + &cKF_ba_r_ply_1_axe1, + &cKF_ba_r_ply_1_run1, + &cKF_ba_r_ply_1_push1, + &cKF_ba_r_ply_1_pull1, + &cKF_ba_r_ply_1_hold_wait1, + &cKF_ba_r_ply_1_pickup1, + &cKF_ba_r_ply_1_Lturn1, + &cKF_ba_r_ply_1_Rturn1, + &cKF_ba_r_ply_1_get1, + &cKF_ba_r_ply_1_get_change1, + &cKF_ba_r_ply_1_get_putaway1, + &cKF_ba_r_ply_1_open1, + &cKF_ba_r_ply_1_putaway1, + &cKF_ba_r_ply_1_trans_wait1, + &cKF_ba_r_ply_1_transfer1, + &cKF_ba_r_ply_1_umb_open1, + &cKF_ba_r_ply_1_umbrella1, + &cKF_ba_r_ply_1_dash1, + &cKF_ba_r_ply_1_run_slip1, + &cKF_ba_r_ply_1_get_pull1, + &cKF_ba_r_ply_1_get_m1, + &cKF_ba_r_ply_1_kamae_move_m1, + &cKF_ba_r_ply_1_kamae_wait_m1, + &cKF_ba_r_ply_1_kokeru_a1, + &cKF_ba_r_ply_1_kokeru_getup_a1, + &cKF_ba_r_ply_1_kokeru_getup_n1, + &cKF_ba_r_ply_1_kokeru_n1, + &cKF_ba_r_ply_1_net1, + &cKF_ba_r_ply_1_net_swing1, + &cKF_ba_r_ply_1_axe_swing1, + &cKF_ba_r_ply_1_kamae_slip_m1, + &cKF_ba_r_ply_1_kokeru1, + &cKF_ba_r_ply_1_kokeru_getup1, + &cKF_ba_r_ply_1_sitdown1, + &cKF_ba_r_ply_1_sitdown_wait1, + &cKF_ba_r_ply_1_standup1, + &cKF_ba_r_ply_1_putaway_m1, + &cKF_ba_r_ply_1_bed_wait1, + &cKF_ba_r_ply_1_inbed_L1, + &cKF_ba_r_ply_1_inbed_R1, + &cKF_ba_r_ply_1_intrain1, + &cKF_ba_r_ply_1_kagu_open_d1, + &cKF_ba_r_ply_1_kagu_open_h1, + &cKF_ba_r_ply_1_kagu_open_k1, + &cKF_ba_r_ply_1_negaeri_L1, + &cKF_ba_r_ply_1_negaeri_R1, + &cKF_ba_r_ply_1_outbed_L1, + &cKF_ba_r_ply_1_outbed_R1, + &cKF_ba_r_ply_1_outtrain1, + &cKF_ba_r_ply_1_kagu_close_d1, + &cKF_ba_r_ply_1_kagu_close_h1, + &cKF_ba_r_ply_1_kagu_close_k1, + &cKF_ba_r_ply_1_kagu_wait_d1, + &cKF_ba_r_ply_1_kagu_wait_h1, + &cKF_ba_r_ply_1_kagu_wait_k1, + &cKF_ba_r_ply_1_go_out_o1, + &cKF_ba_r_ply_1_go_out_s1, + &cKF_ba_r_ply_1_into_s1, + &cKF_ba_r_ply_1_axe_hane1, + &cKF_ba_r_ply_1_axe_suka1, + &cKF_ba_r_ply_1_hold_wait_h1, + &cKF_ba_r_ply_1_hold_wait_o1, + &cKF_ba_r_ply_1_get_t1, + &cKF_ba_r_ply_1_get_t2, + &cKF_ba_r_ply_1_putaway_t1, + &cKF_ba_r_ply_1_sao1, + &cKF_ba_r_ply_1_sao_swing1, + &cKF_ba_r_ply_1_turi_hiki1, + &cKF_ba_r_ply_1_turi_wait1, + &cKF_ba_r_ply_1_not_get_t1, + &cKF_ba_r_ply_1_menu_catch1, + &cKF_ba_r_ply_1_menu_change1, + &cKF_ba_r_ply_1_umb_close1, + &cKF_ba_r_ply_1_not_sao_swing1, + &cKF_ba_r_ply_1_intrain_wait1, + &cKF_ba_r_ply_1_clear_table1, + &cKF_ba_r_ply_1_dig1, + &cKF_ba_r_ply_1_fill_up1, + &cKF_ba_r_ply_1_not_dig1, + &cKF_ba_r_ply_1_clear_table_l1, + &cKF_ba_r_ply_1_pickup_l1, + &cKF_ba_r_ply_1_scoop1, + &cKF_ba_r_ply_1_confirm1, + &cKF_ba_r_ply_1_dig_suka1, + &cKF_ba_r_ply_1_get_d1, + &cKF_ba_r_ply_1_putaway_d1, + &cKF_ba_r_ply_1_dig_kabu1, + &cKF_ba_r_ply_1_fill_up_i1, + &cKF_ba_r_ply_1_send_mail1, + &cKF_ba_r_ply_1_get_f1, + &cKF_ba_r_ply_1_get_pull_f1, + &cKF_ba_r_ply_1_get_putaway_f1, + &cKF_ba_r_ply_1_trans_wait_f1, + &cKF_ba_r_ply_1_transfer_f1, + &cKF_ba_r_ply_1_shake1, + &cKF_ba_r_ply_1_tired1, + &cKF_ba_r_ply_1_wash1, + &cKF_ba_r_ply_1_wash2, + &cKF_ba_r_ply_1_wash3, + &cKF_ba_r_ply_1_wash4, + &cKF_ba_r_ply_1_wash5, + &cKF_ba_r_ply_1_fukubiki1, + &cKF_ba_r_ply_1_omairi1, + &cKF_ba_r_ply_1_saisen1, + &cKF_ba_r_ply_1_return_mail1, + &cKF_ba_r_ply_1_return_mail2, + &cKF_ba_r_ply_1_return_mail3, + &cKF_ba_r_ply_1_eat1, + &cKF_ba_r_ply_1_gaaan1, + &cKF_ba_r_ply_1_gaaan2, + &cKF_ba_r_ply_1_deru1, + &cKF_ba_r_ply_1_guratuku1, + &cKF_ba_r_ply_1_mogaku1, + &cKF_ba_r_ply_1_otiru1, + &cKF_ba_r_ply_1_zassou1, + &cKF_ba_r_ply_1_knock1, + &cKF_ba_r_ply_1_biku1, + &cKF_ba_r_ply_1_hati1, + &cKF_ba_r_ply_1_hati2, + &cKF_ba_r_ply_1_hati3, + &cKF_ba_r_ply_1_push_yuki1, + &cKF_ba_r_ply_1_deru2, + &cKF_ba_r_ply_1_otiru2, + &cKF_ba_r_ply_1_itazura1, + &cKF_ba_r_ply_1_umb_rot1, + &cKF_ba_r_ply_1_pickup_wait1, + &cKF_ba_r_ply_1_yatta1, + &cKF_ba_r_ply_1_yatta2, + &cKF_ba_r_ply_1_yatta3, + &cKF_ba_r_ply_1_kaza1, + &cKF_ba_r_ply_1_mosquito1, + &cKF_ba_r_ply_1_mosquito2, + &cKF_ba_r_ply_1_ride1, + &cKF_ba_r_ply_1_ride2, + &cKF_ba_r_ply_1_ridewait, + &cKF_ba_r_ply_1_getoff1, + &cKF_ba_r_ply_1_getoff2, + &cKF_ba_r_ply_1_utiwa_wait1, + &cKF_ba_r_ply_1_utiwa_d1, + &cKF_ba_r_ply_1_axe_break1, + &cKF_ba_r_ply_1_axe_breakwait1, + &cKF_ba_r_ply_1_light_on1, + &cKF_ba_r_ply_1_taisou1, + &cKF_ba_r_ply_1_taisou2_1, + &cKF_ba_r_ply_1_taisou2_2, + &cKF_ba_r_ply_1_taisou3, + &cKF_ba_r_ply_1_taisou4_1, + &cKF_ba_r_ply_1_taisou4_2, + &cKF_ba_r_ply_1_taisou5_1, + &cKF_ba_r_ply_1_taisou5_2, + &cKF_ba_r_ply_1_taisou6_1, + &cKF_ba_r_ply_1_taisou6_2, + &cKF_ba_r_ply_1_taisou7_1, + &cKF_ba_r_ply_1_taisou7_2, + &cKF_ba_r_ply_1_omairi_us1, + }; + + if (anim_idx >= 0 && anim_idx < mPlayer_ANIM_NUM && data[anim_idx] != NULL) { + return data[anim_idx]; + } + + return NULL; +} + +extern int mPlib_Get_BasicPlayerAnimeIndex_fromItemKind(int item_kind) { + if (item_kind >= 0 && item_kind < (mPlayer_ITEM_KIND_NUM + 1)) { + // clang-format off + static const u8 data[] = { + mPlayer_ANIM_AXE1, + mPlayer_ANIM_AXE1, + mPlayer_ANIM_AXE1, + mPlayer_ANIM_AXE1, + mPlayer_ANIM_AXE1, + mPlayer_ANIM_AXE1, + mPlayer_ANIM_AXE1, + mPlayer_ANIM_AXE1, + mPlayer_ANIM_AXE1, + mPlayer_ANIM_NET1, + mPlayer_ANIM_NET1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_UMBRELLA1, + mPlayer_ANIM_SAO1, + mPlayer_ANIM_SAO1, + mPlayer_ANIM_SCOOP1, + mPlayer_ANIM_SCOOP1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_KAZA1, + mPlayer_ANIM_UTIWA_WAIT1, + mPlayer_ANIM_UTIWA_WAIT1, + mPlayer_ANIM_UTIWA_WAIT1, + mPlayer_ANIM_UTIWA_WAIT1, + mPlayer_ANIM_UTIWA_WAIT1, + mPlayer_ANIM_UTIWA_WAIT1, + mPlayer_ANIM_UTIWA_WAIT1, + mPlayer_ANIM_UTIWA_WAIT1, + mPlayer_ANIM_WAIT1, + }; + // clang-format on + + return data[item_kind]; + } + + return -1; +} + +extern int mPlib_Get_BasicPartTableIndex_fromAnimeIndex(int anim_idx) { + if (anim_idx >= 0 && anim_idx < mPlayer_ANIM_NUM) { + // clang-format off + static const s8 data[] = { + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_AXE, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_PICK_UP, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NET, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NET, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_AXE, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_PICK_UP, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_PICK_UP, + mPlayer_PART_TABLE_PICK_UP, + mPlayer_PART_TABLE_AXE, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NET, + mPlayer_PART_TABLE_PICK_UP, + mPlayer_PART_TABLE_PICK_UP, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NET, + mPlayer_PART_TABLE_NET, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + mPlayer_PART_TABLE_NORMAL, + }; + // clang-format on + + return data[anim_idx]; + } + + return -1; +} + +extern Gfx tol_axe_1_model[]; +extern Gfx tol_axe_1_b_model[]; +extern Gfx tol_axe_1_c_model[]; +extern Gfx tol_axe_2_model[]; +extern cKF_Skeleton_R_c cKF_bs_r_tol_net_1; +extern cKF_Skeleton_R_c cKF_bs_r_tol_net_2; +extern cKF_Animation_R_c cKF_ba_r_tol_net_1_get_m1; +extern cKF_Animation_R_c cKF_ba_r_tol_net_1_net_swing1; +extern cKF_Animation_R_c cKF_ba_r_tol_net_1_kamae_main_m1; +extern cKF_Animation_R_c cKF_ba_r_tol_net_1_kokeru_getup_n1; +extern cKF_Animation_R_c cKF_ba_r_tol_net_1_kokeru_n1; +extern cKF_Animation_R_c cKF_ba_r_tol_net_1_swing_wait1; +extern cKF_Animation_R_c cKF_ba_r_tol_net_1_yatta_m1; +extern cKF_Skeleton_R_c cKF_bs_r_tol_sao_1; +extern cKF_Skeleton_R_c cKF_bs_r_tol_sao_2; +extern cKF_Animation_R_c cKF_ba_r_tol_sao_1_sao_get_t1; +extern cKF_Animation_R_c cKF_ba_r_tol_sao_1_sao_move1; +extern cKF_Animation_R_c cKF_ba_r_tol_sao_1_sao_sinari1; +extern cKF_Animation_R_c cKF_ba_r_tol_sao_1_sao_swing1; +extern cKF_Animation_R_c cKF_ba_r_tol_sao_1_sao_wait1; +extern cKF_Animation_R_c cKF_ba_r_tol_sao_1_not_sao_swing1; +extern Gfx tol_scoop_1_model[]; +extern Gfx tol_scoop_2_model[]; +extern cKF_Skeleton_R_c cKF_bs_r_tol_balloon1; +extern cKF_Skeleton_R_c cKF_bs_r_tol_balloon2; +extern cKF_Skeleton_R_c cKF_bs_r_tol_balloon3; +extern cKF_Skeleton_R_c cKF_bs_r_tol_balloon4; +extern cKF_Skeleton_R_c cKF_bs_r_tol_balloon5; +extern cKF_Skeleton_R_c cKF_bs_r_tol_balloon6; +extern cKF_Skeleton_R_c cKF_bs_r_tol_balloon7; +extern cKF_Skeleton_R_c cKF_bs_r_tol_balloon8; +extern cKF_Animation_R_c cKF_ba_r_tol_balloon1_wait; +extern cKF_Animation_R_c cKF_ba_r_tol_balloon1_gyaza1; +extern cKF_Skeleton_R_c cKF_bs_r_tol_kaza1; +extern cKF_Skeleton_R_c cKF_bs_r_tol_kaza2; +extern cKF_Skeleton_R_c cKF_bs_r_tol_kaza3; +extern cKF_Skeleton_R_c cKF_bs_r_tol_kaza4; +extern cKF_Skeleton_R_c cKF_bs_r_tol_kaza5; +extern cKF_Skeleton_R_c cKF_bs_r_tol_kaza6; +extern cKF_Skeleton_R_c cKF_bs_r_tol_kaza7; +extern cKF_Skeleton_R_c cKF_bs_r_tol_kaza8; +extern cKF_Animation_R_c cKF_ba_r_tol_kaza1_wait; +extern Gfx tol_fan1_model[]; +extern Gfx tol_fan2_model[]; +extern Gfx tol_fan3_model[]; +extern Gfx tol_fan4_model[]; +extern Gfx tol_fan5_model[]; +extern Gfx tol_fan6_model[]; +extern Gfx tol_fan7_model[]; +extern Gfx tol_fan8_model[]; + +extern void* mPlib_Get_Item_DataPointer(int data_kind) { + if (mPlayer_ITEM_DATA_VALID(data_kind)) { + static void* mPlib_Item_DataPointer[] = { + tol_axe_1_model, + tol_axe_1_b_model, + tol_axe_1_c_model, + tol_axe_2_model, + &cKF_bs_r_tol_net_1, + &cKF_bs_r_tol_net_2, + &cKF_ba_r_tol_net_1_get_m1, + &cKF_ba_r_tol_net_1_net_swing1, + &cKF_ba_r_tol_net_1_kamae_main_m1, + &cKF_ba_r_tol_net_1_kokeru_getup_n1, + &cKF_ba_r_tol_net_1_kokeru_n1, + &cKF_ba_r_tol_net_1_swing_wait1, + &cKF_ba_r_tol_net_1_yatta_m1, + &cKF_bs_r_tol_sao_1, + &cKF_bs_r_tol_sao_2, + &cKF_ba_r_tol_sao_1_sao_get_t1, + &cKF_ba_r_tol_sao_1_sao_move1, + &cKF_ba_r_tol_sao_1_sao_sinari1, + &cKF_ba_r_tol_sao_1_sao_swing1, + &cKF_ba_r_tol_sao_1_sao_wait1, + &cKF_ba_r_tol_sao_1_not_sao_swing1, + tol_scoop_1_model, + tol_scoop_2_model, + &cKF_bs_r_tol_balloon1, + &cKF_bs_r_tol_balloon2, + &cKF_bs_r_tol_balloon3, + &cKF_bs_r_tol_balloon4, + &cKF_bs_r_tol_balloon5, + &cKF_bs_r_tol_balloon6, + &cKF_bs_r_tol_balloon7, + &cKF_bs_r_tol_balloon8, + &cKF_ba_r_tol_balloon1_wait, + &cKF_ba_r_tol_balloon1_gyaza1, + &cKF_bs_r_tol_kaza1, + &cKF_bs_r_tol_kaza2, + &cKF_bs_r_tol_kaza3, + &cKF_bs_r_tol_kaza4, + &cKF_bs_r_tol_kaza5, + &cKF_bs_r_tol_kaza6, + &cKF_bs_r_tol_kaza7, + &cKF_bs_r_tol_kaza8, + &cKF_ba_r_tol_kaza1_wait, + tol_fan1_model, + tol_fan2_model, + tol_fan3_model, + tol_fan4_model, + tol_fan5_model, + tol_fan6_model, + tol_fan7_model, + tol_fan8_model, + }; + + return mPlib_Item_DataPointer[data_kind]; + } + + return NULL; +} + +extern int mPlib_Get_BasicItemShapeIndex_fromItemKind(int item_kind) { + if (item_kind >= 0 && item_kind < (mPlayer_ITEM_KIND_NUM + 1)) { + // clang-format off + static const s8 data[] = { + mPlayer_ITEM_DATA_AXE, + mPlayer_ITEM_DATA_AXE, + mPlayer_ITEM_DATA_AXE_B, + mPlayer_ITEM_DATA_AXE_B, + mPlayer_ITEM_DATA_AXE_B, + mPlayer_ITEM_DATA_AXE_C, + mPlayer_ITEM_DATA_AXE_C, + mPlayer_ITEM_DATA_AXE_C, + mPlayer_ITEM_DATA_GOLD_AXE, + mPlayer_ITEM_DATA_NET, + mPlayer_ITEM_DATA_GOLD_NET, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + mPlayer_ITEM_DATA_ROD, + mPlayer_ITEM_DATA_GOLD_ROD, + mPlayer_ITEM_DATA_SHOVEL, + mPlayer_ITEM_DATA_GOLD_SHOVEL, + mPlayer_ITEM_DATA_BALLOON1, + mPlayer_ITEM_DATA_BALLOON2, + mPlayer_ITEM_DATA_BALLOON3, + mPlayer_ITEM_DATA_BALLOON4, + mPlayer_ITEM_DATA_BALLOON5, + mPlayer_ITEM_DATA_BALLOON6, + mPlayer_ITEM_DATA_BALLOON7, + mPlayer_ITEM_DATA_BALLOON8, + mPlayer_ITEM_DATA_PINWHEEL1, + mPlayer_ITEM_DATA_PINWHEEL2, + mPlayer_ITEM_DATA_PINWHEEL3, + mPlayer_ITEM_DATA_PINWHEEL4, + mPlayer_ITEM_DATA_PINWHEEL5, + mPlayer_ITEM_DATA_PINWHEEL6, + mPlayer_ITEM_DATA_PINWHEEL7, + mPlayer_ITEM_DATA_PINWHEEL8, + mPlayer_ITEM_DATA_FAN1, + mPlayer_ITEM_DATA_FAN2, + mPlayer_ITEM_DATA_FAN3, + mPlayer_ITEM_DATA_FAN4, + mPlayer_ITEM_DATA_FAN5, + mPlayer_ITEM_DATA_FAN6, + mPlayer_ITEM_DATA_FAN7, + mPlayer_ITEM_DATA_FAN8, + 0x00, + }; + // clang-format on + + return data[item_kind]; + } + + return -1; +} + +extern int mPlib_Get_BasicItemAnimeIndex_fromItemKind(int item_kind) { + if (item_kind >= 0 && item_kind < (mPlayer_ITEM_KIND_NUM + 1)) { + // clang-format off + static const s8 data[] = { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + mPlayer_ITEM_DATA_KAMAE_MAIN_M, + mPlayer_ITEM_DATA_KAMAE_MAIN_M, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + mPlayer_ITEM_DATA_ROD_WAIT, + mPlayer_ITEM_DATA_ROD_WAIT, + -1, + -1, + mPlayer_ITEM_DATA_BALLOON_GYAZA, + mPlayer_ITEM_DATA_BALLOON_GYAZA, + mPlayer_ITEM_DATA_BALLOON_GYAZA, + mPlayer_ITEM_DATA_BALLOON_GYAZA, + mPlayer_ITEM_DATA_BALLOON_GYAZA, + mPlayer_ITEM_DATA_BALLOON_GYAZA, + mPlayer_ITEM_DATA_BALLOON_GYAZA, + mPlayer_ITEM_DATA_BALLOON_GYAZA, + mPlayer_ITEM_DATA_PINWHEEL_WAIT, + mPlayer_ITEM_DATA_PINWHEEL_WAIT, + mPlayer_ITEM_DATA_PINWHEEL_WAIT, + mPlayer_ITEM_DATA_PINWHEEL_WAIT, + mPlayer_ITEM_DATA_PINWHEEL_WAIT, + mPlayer_ITEM_DATA_PINWHEEL_WAIT, + mPlayer_ITEM_DATA_PINWHEEL_WAIT, + mPlayer_ITEM_DATA_PINWHEEL_WAIT, + -1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00 + }; + // clang-format on + + return data[item_kind]; + } + + return -1; +} + +extern u8 mPlib_Get_Item_DataPointerType(int data_idx) { + if (data_idx >= 0 && data_idx < mPlayer_ITEM_DATA_NUM) { + // clang-format off + static const u8 mPlib_Item_DataPointerType[] = { + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_NET_ANIMATION, + mPlayer_ITEM_DATA_TYPE_NET_ANIMATION, + mPlayer_ITEM_DATA_TYPE_NET_ANIMATION, + mPlayer_ITEM_DATA_TYPE_NET_ANIMATION, + mPlayer_ITEM_DATA_TYPE_NET_ANIMATION, + mPlayer_ITEM_DATA_TYPE_NET_ANIMATION, + mPlayer_ITEM_DATA_TYPE_NET_ANIMATION, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_ROD_ANIMATION, + mPlayer_ITEM_DATA_TYPE_ROD_ANIMATION, + mPlayer_ITEM_DATA_TYPE_ROD_ANIMATION, + mPlayer_ITEM_DATA_TYPE_ROD_ANIMATION, + mPlayer_ITEM_DATA_TYPE_ROD_ANIMATION, + mPlayer_ITEM_DATA_TYPE_ROD_ANIMATION, + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_BALLOON_ANIMATION, + mPlayer_ITEM_DATA_TYPE_BALLOON_ANIMATION, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_SKELETON, + mPlayer_ITEM_DATA_TYPE_PINWHEEL_ANIMATION, + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_GFX, + mPlayer_ITEM_DATA_TYPE_GFX, + }; + // clang-format on + + return mPlib_Item_DataPointerType[data_idx]; + } + + return mPlayer_ITEM_DATA_TYPE_GFX; +} + +static u32 mPlib_Get_UseFaceRom_index(int sex, int face_type, int swell, int decoy, int res_type) { + int swell_flag = swell != FALSE; + int decoy_flag = decoy != FALSE; + int ofs; + + if (res_type != mPlayer_USE_FACE_ROM_TYPE_TEX) { + ofs = face_type * 8; + ofs += sex * 64; + ofs += swell_flag * 128; + } else { + ofs = decoy_flag * 32; + ofs += face_type; + ofs += sex * 8; + ofs += swell_flag * 16; + } + + return ofs; +} + +static u32 mPlib_Get_UseFaceTexRom_p_common(int sex, int face_type, int swell, int decoy) { + u32 idx = mPlib_Get_UseFaceRom_index(sex, face_type, swell, decoy, mPlayer_USE_FACE_ROM_TYPE_TEX); + u32 base_address = JW_GetAramAddress(RESOURCE_FACE_BOY); + + return base_address + idx * 0xE20; +} + +static u32 mPlib_Get_UseFaceTexRom_p(void) { + return mPlib_Get_UseFaceTexRom_p_common(Now_Private->gender, Now_Private->face, Common_Get(player_bee_swell_flag), + Common_Get(player_decoy_flag)); +} + +static u32 mPlib_Get_UseFacePalletRom_p(void) { + int sunburn_rank = Now_Private->sunburn.rank; + int decoy_flag = Common_Get(player_decoy_flag); + u32 base; + u32 ofs; + + if (sunburn_rank > 0 && decoy_flag == FALSE) { + u32 idx = mPlib_Get_UseFaceRom_index(Now_Private->gender, Now_Private->face, Common_Get(player_bee_swell_flag), + FALSE, mPlayer_USE_FACE_ROM_TYPE_PAL); + + base = mPlib_Get_UseFaceTexRom_p_common(mPr_SEX_FEMALE, mPr_FACE_TYPE7, TRUE, TRUE); + ofs = 0xE00 + (sunburn_rank + idx) * 0x20; + } else { + base = mPlib_Get_UseFaceTexRom_p(); + ofs = 0xE00; + } + + return base + ofs; +} + +extern void mPlib_Object_Exchange_keep_new_PlayerMdl(GAME_PLAY* play) { + Actor_data* player_data = play->player_data; + + actor_dlftbls[player_data->profile].profile->obj_bank_id = mPlib_get_player_Object_Bank(); +} + +static int mPlib_Object_Exchange_keep_new(GAME_PLAY* play, s16 bank, u32 src, u32 size, int aram_flag) { + Object_Exchange_c* obj_ex = &play->object_exchange; + Object_Bank_c* bank_p = &obj_ex->banks[obj_ex->bank_idx]; + + bank_p->bank_id = bank; + bank_p->dma_start = obj_ex->next_bank_ram_address; + bank_p->ram_start = obj_ex->next_bank_ram_address; + bank_p->size = size; + + if (src != 0) { + if (aram_flag) { + _JW_GetResourceAram(src, (u8*)bank_p->dma_start, size); + } else { + bcopy((void*)src, bank_p->dma_start, size); + } + + DCStoreRangeNoSync(bank_p->ram_start, size); + } + + if (obj_ex->bank_idx < (mSc_OBJECT_BANK_NUM - 1)) { + obj_ex->next_bank_ram_address = (char*)ALIGN_NEXT((u32)obj_ex->next_bank_ram_address + size, 32); + obj_ex->bank_idx++; + } + + return mSc_bank_regist_check(obj_ex, bank); +} + +static int Player_bank_ID_Index = 0; + +static int Change_Player_bank_ID_Index(void) { + Player_bank_ID_Index ^= 1; + return Player_bank_ID_Index; +} + +static int Player_face_bank_ID_Index = 0; + +static int Change_Player_face_bank_ID_Index(void) { + Player_face_bank_ID_Index ^= 1; + return Player_face_bank_ID_Index; +} + +extern u32 mPlib_Get_PlayerTexRom_p(int idx) { + if (mPlib_Check_PlayerClothInAram(idx)) { + u32 addr = JW_GetAramAddress(RESOURCE_TEX_BOY); + addr += idx * mNW_DESIGN_TEX_SIZE; + return addr; + } else { + int org_idx = idx - (CLOTH_NUM + 1); + + if (!mPr_ORIGINAL_DESIGN_IDX_VALID(org_idx)) { + org_idx = 0; + } + + return (u32)Now_Private->my_org[org_idx & 7].design.data; + } +} + +static u32 mPlib_Get_UseTexRom_p(void) { + return mPlib_Get_PlayerTexRom_p(Now_Private->cloth.idx); +} + +static int Player_Tex_bank_ID[] = { -1, -1 }; + +extern void mPlib_Object_Exchange_keep_new_PlayerTex(GAME_PLAY* play, int bank_idx, int bank) { + u32 tex = mPlib_Get_UseTexRom_p(); + int idx = mPlib_Object_Exchange_keep_new(play, ACTOR_OBJ_BANK_14, tex, mNW_DESIGN_TEX_SIZE, + mPlib_Check_PlayerClothInAram(Now_Private->cloth.idx)); + + Player_Tex_bank_ID[bank_idx] = bank + idx; +} + +extern u32 mPlib_Get_PlayerPalletRom_p(int idx) { + if (mPlib_Check_PlayerClothInAram(idx)) { + u32 addr = JW_GetAramAddress(RESOURCE_PALLET_BOY); + addr += idx * mNW_PALETTE_SIZE; + return addr; + } else { + int org_idx = idx - (CLOTH_NUM + 1); + + if (!mPr_ORIGINAL_DESIGN_IDX_VALID(org_idx)) { + org_idx = 0; + } + + return (u32)mNW_PaletteIdx2Palette(Now_Private->my_org[org_idx & 7].palette); + } +} + +static u32 mPlib_Get_UsePalletRom_p(void) { + return mPlib_Get_PlayerPalletRom_p(Now_Private->cloth.idx); +} + +static int Player_Pallet_bank_ID[] = { -1, -1 }; + +extern void mPlib_Object_Exchange_keep_new_PlayerPallet(GAME_PLAY* play, int bank_idx, int bank) { + u32 pal = mPlib_Get_UsePalletRom_p(); + + Player_Pallet_bank_ID[bank_idx] = + bank + mPlib_Object_Exchange_keep_new(play, ACTOR_OBJ_BANK_15, pal, mNW_PALETTE_SIZE, + mPlib_Check_PlayerClothInAram(Now_Private->cloth.idx)); +} + +extern int mPlib_Check_PlayerClothInAram(int idx) { + if (idx < (CLOTH_NUM + 1)) { + return TRUE; + } + + return FALSE; +} + +static int Player_face_tex_bank_ID = -1; + +extern void mPlib_Object_Exchange_keep_new_PlayerFaceTex(GAME_PLAY* play) { + Player_face_tex_bank_ID = mPlib_Object_Exchange_keep_new(play, ACTOR_OBJ_BANK_52, 0, 0xE00, TRUE); +} + +static int Player_face_pallet_bank_ID[] = { -1, -1 }; + +extern void mPlib_Object_Exchange_keep_new_PlayerFacePallet(GAME_PLAY* play, int bank, int bank_idx) { + Player_face_pallet_bank_ID[bank_idx] = + bank + mPlib_Object_Exchange_keep_new(play, ACTOR_OBJ_BANK_52, 0, mNW_PALETTE_SIZE, TRUE); +} + +extern void mPlib_Object_Exchange_keep_Player_dt(GAME_PLAY* play) { + Player_face_tex_bank_ID = -1; + Player_face_pallet_bank_ID[0] = -1; + Player_face_pallet_bank_ID[1] = -1; + Player_bank_ID_Index = 0; + Player_face_bank_ID_Index = 0; + Player_Tex_bank_ID[0] = -1; + Player_Tex_bank_ID[1] = -1; + Player_Pallet_bank_ID[0] = -1; + Player_Pallet_bank_ID[1] = -1; +} + +extern u8* mPlib_get_player_tex_p(GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + Object_Exchange_c* obj_ex = &play->object_exchange; + int bank_no = Player_Tex_bank_ID[Player_bank_ID_Index]; + + if (bank_no >= 0 && obj_ex->banks[bank_no].bank_id > 0) { + return (u8*)obj_ex->banks[bank_no].ram_start; + } + + return NULL; +} + +extern u16* mPlib_get_player_pallet_p(GAME* game) { + u8* tex_p = mPlib_get_player_tex_p(game); + + if (tex_p != NULL) { + tex_p = tex_p + mNW_DESIGN_TEX_SIZE; + } + + return (u16*)tex_p; +} + +extern u8* mPlib_get_player_face_p(GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + Object_Exchange_c* obj_ex = &play->object_exchange; + int bank_no = Player_face_tex_bank_ID; + + if (bank_no >= 0 && obj_ex->banks[bank_no].bank_id > 0) { + return (u8*)obj_ex->banks[bank_no].ram_start; + } + + return NULL; +} + +extern u16* mPlib_get_player_face_pallet_p(GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + Object_Exchange_c* obj_ex = &play->object_exchange; + int bank_no = Player_face_pallet_bank_ID[Player_face_bank_ID_Index]; + + if (bank_no >= 0 && obj_ex->banks[bank_no].bank_id > 0) { + return (u16*)obj_ex->banks[bank_no].ram_start; + } + + return NULL; +} + +extern void mPlib_change_player_cloth(GAME* game, u16 cloth_idx) { + int idx = cloth_idx; + Change_Player_bank_ID_Index(); + + { + u8* player_tex_p = mPlib_get_player_tex_p(game); + u32 player_tex_rom_p = mPlib_Get_PlayerTexRom_p(idx); + + if (mPlib_Check_PlayerClothInAram(idx)) { + _JW_GetResourceAram(player_tex_rom_p, player_tex_p, mNW_DESIGN_TEX_SIZE); + } else { + bcopy((u8*)player_tex_rom_p, player_tex_p, mNW_DESIGN_TEX_SIZE); + } + + DCStoreRangeNoSync(player_tex_p, mNW_DESIGN_TEX_SIZE); + } + + { + u16* player_pallet_p = mPlib_get_player_pallet_p(game); + u32 player_pallet_rom_p = mPlib_Get_PlayerPalletRom_p(idx); + + if (mPlib_Check_PlayerClothInAram(idx)) { + _JW_GetResourceAram(player_pallet_rom_p, (u8*)player_pallet_p, mNW_PALETTE_SIZE); + } else { + bcopy((u16*)player_pallet_rom_p, player_pallet_p, mNW_PALETTE_SIZE); + } + + DCStoreRangeNoSync(player_pallet_p, mNW_PALETTE_SIZE); + } +} + +extern void mPlib_change_player_face_pallet(GAME* game) { + Change_Player_face_bank_ID_Index(); + + { + u16* player_face_pallet_p = mPlib_get_player_face_pallet_p(game); + u32 player_face_pallet_rom_p = mPlib_Get_UseFacePalletRom_p(); + + if (player_face_pallet_p != NULL && player_face_pallet_rom_p != 0) { + _JW_GetResourceAram(player_face_pallet_rom_p, (u8*)player_face_pallet_p, mNW_PALETTE_SIZE); + DCStoreRangeNoSync(player_face_pallet_p, mNW_PALETTE_SIZE); + } + } +} + +extern void mPlib_change_player_face(GAME* game) { + u8* player_face_p = mPlib_get_player_face_p(game); + u32 player_face_rom_p = mPlib_Get_UseFaceTexRom_p(); + + if (player_face_p != NULL && player_face_rom_p != 0) { + _JW_GetResourceAram(player_face_rom_p, player_face_p, 0xE00); + DCStoreRangeNoSync(player_face_p, 0xE00); + } + + mPlib_change_player_face_pallet(game); +} + +extern PLAYER_ACTOR* get_player_actor_withoutCheck(GAME_PLAY* play) { + return (PLAYER_ACTOR*)&play->actor_info.list[ACTOR_PART_PLAYER].actor[0]; +} + +static int mPlib_check_DynamicLinkFile_m_player(void) { + return SubmenuArea_IsPlayer() != FALSE; +} + +extern int mPlib_get_player_actor_main_index(GAME* game) { + return GET_PLAYER_ACTOR_GAME(game)->now_main_index; +} + +extern int mPlib_get_player_actor_request_main_index(GAME* game) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); + + if (player->requested_main_index_changed) { + return player->requested_main_index; + } + + return -1; +} + +extern cKF_Skeleton_R_c cKF_bs_r_boy_1; +extern cKF_Skeleton_R_c cKF_bs_r_grl_1; + +extern cKF_Skeleton_R_c* mPlib_get_player_mdl_p(void) { + if (Now_Private->gender == mPr_SEX_MALE) { + return &cKF_bs_r_boy_1; + } else { + return &cKF_bs_r_grl_1; + } +} + +extern s16 mPlib_get_player_Object_Bank(void) { + if (Now_Private->gender == mPr_SEX_MALE) { + return ACTOR_OBJ_BANK_8; + } else { + return ACTOR_OBJ_BANK_51; + } +} + +extern s8 BOY_part_data[][mPlayer_JOINT_NUM + 1]; + +extern void mPlib_DMA_player_Part_Table(s8* part_table_p, int idx) { + if (idx >= 0 && idx < mPlayer_PART_TABLE_NUM) { + bcopy(&BOY_part_data[idx], part_table_p, sizeof(BOY_part_data[idx])); + } +} + +extern void mPlib_change_player_cloth_info(mPr_cloth_c* cloth_p, mActor_name_t item) { + cloth_p->item = item; + cloth_p->idx = ITEM_IS_CLOTH(item) ? (item - ITM_CLOTH_START) : 0; +} + +extern void mPlib_change_player_cloth_info_lv2(Private_c* priv, mActor_name_t item) { + mPlib_change_player_cloth_info(&priv->cloth, item); +} + +extern void mPlib_Load_PlayerTexAndPallet(void* tex_p, void* pal_p, int idx) { + if (idx >= 0 && idx < (CLOTH_NUM + 1 + mPr_ORIGINAL_DESIGN_COUNT) && tex_p != NULL && pal_p != NULL) { + u32 tex_rom_p = mPlib_Get_PlayerTexRom_p(idx); + u32 pal_rom_p = mPlib_Get_PlayerPalletRom_p(idx); + + if (mPlib_Check_PlayerClothInAram(idx)) { + _JW_GetResourceAram(tex_rom_p, (u8*)tex_p, mNW_DESIGN_TEX_SIZE); + _JW_GetResourceAram(pal_rom_p, (u8*)pal_p, mNW_PALETTE_SIZE); + } else { + bcopy((u8*)tex_rom_p, tex_p, mNW_DESIGN_TEX_SIZE); + bcopy((u16*)pal_rom_p, pal_p, mNW_PALETTE_SIZE); + } + + DCStoreRangeNoSync(tex_p, mNW_DESIGN_TEX_SIZE); + DCStoreRangeNoSync(pal_p, mNW_PALETTE_SIZE); + } +} + +static mPlayer_change_data_from_submenu_c change_data_from_submenu; + +extern mPlayer_change_data_from_submenu_c* mPlib_Get_change_data_from_submenu_p(void) { + return &change_data_from_submenu; +} + +extern void mPlib_Clear_change_data_from_submenu(void) { + bzero(&change_data_from_submenu, sizeof(change_data_from_submenu)); +} + +extern void mPlib_request_main_give_from_submenu(mActor_name_t item, int after_mode, int present_flag, + int surface_flag) { + mPlayer_change_data_from_submenu_c* change_data_from_submenu_p = mPlib_Get_change_data_from_submenu_p(); + mPlayer_request_give_c* req_give_p = &change_data_from_submenu_p->request_main_data.give; + + change_data_from_submenu_p->requested_main_index = mPlayer_INDEX_GIVE; + change_data_from_submenu_p->requested_index_pending = TRUE; + + req_give_p->item = item; + req_give_p->mode = after_mode; + req_give_p->present_flag = present_flag; + req_give_p->on_surface_flag = surface_flag; +} + +extern void mPlib_request_main_putin_scoop_from_submenu(const xyz_t* pos_p, mActor_name_t item, int gold_scoop_flag) { + mPlayer_change_data_from_submenu_c* change_data_from_submenu_p = mPlib_Get_change_data_from_submenu_p(); + mPlayer_request_putin_scoop_c* req_putin_scoop_p = &change_data_from_submenu_p->request_main_data.putin_scoop; + + change_data_from_submenu_p->requested_main_index = mPlayer_INDEX_PUTIN_SCOOP; + change_data_from_submenu_p->requested_index_pending = TRUE; + + req_putin_scoop_p->dig_pos = *pos_p; + req_putin_scoop_p->item = item; + req_putin_scoop_p->get_gold_scoop_flag = gold_scoop_flag; +} + +extern void mPlib_request_main_release_creature_gyoei_from_submenu(s16 angle_y, s16 item, int gold_scoop_flag) { + mPlayer_change_data_from_submenu_c* change_data_from_submenu_p = mPlib_Get_change_data_from_submenu_p(); + mPlayer_request_release_creature_c* req_release_creature_p = + &change_data_from_submenu_p->request_main_data.release_creature; + mPlayer_request_release_creature_gyoei_c* release_gyoei_p = &req_release_creature_p->data.gyoei; + + change_data_from_submenu_p->requested_main_index = mPlayer_INDEX_RELEASE_CREATURE; + change_data_from_submenu_p->requested_index_pending = TRUE; + + req_release_creature_p->type = mPlayer_CREATURE_GYOEI; + req_release_creature_p->gold_scoop_flag = gold_scoop_flag; + + release_gyoei_p->angle_y = angle_y; + release_gyoei_p->_02 = item; +} + +extern void mPlib_request_main_release_creature_insect_from_submenu(int insect_type, int gold_scoop_flag) { + mPlayer_change_data_from_submenu_c* change_data_from_submenu_p = mPlib_Get_change_data_from_submenu_p(); + mPlayer_request_release_creature_c* req_release_creature_p = + &change_data_from_submenu_p->request_main_data.release_creature; + mPlayer_request_release_creature_insect_c* release_insect_p = &req_release_creature_p->data.insect; + ACTOR* actorx = GET_PLAYER_ACTOR_NOW_ACTOR(); + + change_data_from_submenu_p->requested_main_index = mPlayer_INDEX_RELEASE_CREATURE; + change_data_from_submenu_p->requested_index_pending = TRUE; + + req_release_creature_p->type = mPlayer_CREATURE_INSECT; + req_release_creature_p->gold_scoop_flag = gold_scoop_flag; + + release_insect_p->pos.x = actorx->world.position.x + 7.0f * sin_s(actorx->shape_info.rotation.y); + release_insect_p->pos.y = actorx->world.position.y + 13.0f; + release_insect_p->pos.z = actorx->world.position.z + 7.0f * cos_s(actorx->shape_info.rotation.y); + release_insect_p->type = insect_type; +} + +extern s8 mPlib_Get_ItemNoToItemKind(mActor_name_t itemNo) { + switch (itemNo) { + case ITM_NET: + return mPlayer_ITEM_KIND_NET; + case ITM_GOLDEN_NET: + return mPlayer_ITEM_KIND_GOLD_NET; + case ITM_AXE: + return mPlayer_ITEM_KIND_AXE; + case ITM_AXE_USE_1: + return mPlayer_ITEM_KIND_AXE_USE_1; + case ITM_AXE_USE_2: + return mPlayer_ITEM_KIND_AXE_USE_2; + case ITM_AXE_USE_3: + return mPlayer_ITEM_KIND_AXE_USE_3; + case ITM_AXE_USE_4: + return mPlayer_ITEM_KIND_AXE_USE_4; + case ITM_AXE_USE_5: + return mPlayer_ITEM_KIND_AXE_USE_5; + case ITM_AXE_USE_6: + return mPlayer_ITEM_KIND_AXE_USE_6; + case ITM_AXE_USE_7: + return mPlayer_ITEM_KIND_AXE_USE_7; + case ITM_GOLDEN_AXE: + return mPlayer_ITEM_KIND_GOLD_AXE; + case ITM_UMBRELLA00: + return mPlayer_ITEM_KIND_UMBRELLA00; + case ITM_UMBRELLA01: + return mPlayer_ITEM_KIND_UMBRELLA01; + case ITM_UMBRELLA02: + return mPlayer_ITEM_KIND_UMBRELLA02; + case ITM_UMBRELLA03: + return mPlayer_ITEM_KIND_UMBRELLA03; + case ITM_UMBRELLA04: + return mPlayer_ITEM_KIND_UMBRELLA04; + case ITM_UMBRELLA05: + return mPlayer_ITEM_KIND_UMBRELLA05; + case ITM_UMBRELLA06: + return mPlayer_ITEM_KIND_UMBRELLA06; + case ITM_UMBRELLA07: + return mPlayer_ITEM_KIND_UMBRELLA07; + case ITM_UMBRELLA08: + return mPlayer_ITEM_KIND_UMBRELLA08; + case ITM_UMBRELLA09: + return mPlayer_ITEM_KIND_UMBRELLA09; + case ITM_UMBRELLA10: + return mPlayer_ITEM_KIND_UMBRELLA10; + case ITM_UMBRELLA11: + return mPlayer_ITEM_KIND_UMBRELLA11; + case ITM_UMBRELLA12: + return mPlayer_ITEM_KIND_UMBRELLA12; + case ITM_UMBRELLA13: + return mPlayer_ITEM_KIND_UMBRELLA13; + case ITM_UMBRELLA14: + return mPlayer_ITEM_KIND_UMBRELLA14; + case ITM_UMBRELLA15: + return mPlayer_ITEM_KIND_UMBRELLA15; + case ITM_UMBRELLA16: + return mPlayer_ITEM_KIND_UMBRELLA16; + case ITM_UMBRELLA17: + return mPlayer_ITEM_KIND_UMBRELLA17; + case ITM_UMBRELLA18: + return mPlayer_ITEM_KIND_UMBRELLA18; + case ITM_UMBRELLA19: + return mPlayer_ITEM_KIND_UMBRELLA19; + case ITM_UMBRELLA20: + return mPlayer_ITEM_KIND_UMBRELLA20; + case ITM_UMBRELLA21: + return mPlayer_ITEM_KIND_UMBRELLA21; + case ITM_UMBRELLA22: + return mPlayer_ITEM_KIND_UMBRELLA22; + case ITM_UMBRELLA23: + return mPlayer_ITEM_KIND_UMBRELLA23; + case ITM_UMBRELLA24: + return mPlayer_ITEM_KIND_UMBRELLA24; + case ITM_UMBRELLA25: + return mPlayer_ITEM_KIND_UMBRELLA25; + case ITM_UMBRELLA26: + return mPlayer_ITEM_KIND_UMBRELLA26; + case ITM_UMBRELLA27: + return mPlayer_ITEM_KIND_UMBRELLA27; + case ITM_UMBRELLA28: + return mPlayer_ITEM_KIND_UMBRELLA28; + case ITM_UMBRELLA29: + return mPlayer_ITEM_KIND_UMBRELLA29; + case ITM_UMBRELLA30: + return mPlayer_ITEM_KIND_UMBRELLA30; + case ITM_UMBRELLA31: + return mPlayer_ITEM_KIND_UMBRELLA31; + case ITM_MY_ORG_UMBRELLA0: + return mPlayer_ITEM_KIND_ORG_UMBRELLA00; + case ITM_MY_ORG_UMBRELLA1: + return mPlayer_ITEM_KIND_ORG_UMBRELLA01; + case ITM_MY_ORG_UMBRELLA2: + return mPlayer_ITEM_KIND_ORG_UMBRELLA02; + case ITM_MY_ORG_UMBRELLA3: + return mPlayer_ITEM_KIND_ORG_UMBRELLA03; + case ITM_MY_ORG_UMBRELLA4: + return mPlayer_ITEM_KIND_ORG_UMBRELLA04; + case ITM_MY_ORG_UMBRELLA5: + return mPlayer_ITEM_KIND_ORG_UMBRELLA05; + case ITM_MY_ORG_UMBRELLA6: + return mPlayer_ITEM_KIND_ORG_UMBRELLA06; + case ITM_MY_ORG_UMBRELLA7: + return mPlayer_ITEM_KIND_ORG_UMBRELLA07; + case ITM_ROD: + return mPlayer_ITEM_KIND_ROD; + case ITM_GOLDEN_ROD: + return mPlayer_ITEM_KIND_GOLD_ROD; + case ITM_SHOVEL: + return mPlayer_ITEM_KIND_SHOVEL; + case ITM_GOLDEN_SHOVEL: + return mPlayer_ITEM_KIND_GOLD_SHOVEL; + case ITM_RED_BALLOON: + return mPlayer_ITEM_KIND_RED_BALLOON; + case ITM_YELLOW_BALLOON: + return mPlayer_ITEM_KIND_YELLOW_BALLOON; + case ITM_BLUE_BALLOON: + return mPlayer_ITEM_KIND_BLUE_BALLOON; + case ITM_GREEN_BALLOON: + return mPlayer_ITEM_KIND_GREEN_BALLOON; + case ITM_PURPLE_BALLOON: + return mPlayer_ITEM_KIND_PURPLE_BALLOON; + case ITM_BUNNY_P_BALLOON: + return mPlayer_ITEM_KIND_BUNNY_P_BALLOON; + case ITM_BUNNY_B_BALLOON: + return mPlayer_ITEM_KIND_BUNNY_B_BALLOON; + case ITM_BUNNY_O_BALLOON: + return mPlayer_ITEM_KIND_BUNNY_O_BALLOON; + case ITM_YELLOW_PINWHEEL: + return mPlayer_ITEM_KIND_YELLOW_PINWHEEL; + case ITM_RED_PINWHEEL: + return mPlayer_ITEM_KIND_RED_PINWHEEL; + case ITM_TIGER_PINWHEEL: + return mPlayer_ITEM_KIND_TIGER_PINWHEEL; + case ITM_GREEN_PINWHEEL: + return mPlayer_ITEM_KIND_GREEN_PINWHEEL; + case ITM_PINK_PINWHEEL: + return mPlayer_ITEM_KIND_PINK_PINWHEEL; + case ITM_STRIPED_PINWHEEL: + return mPlayer_ITEM_KIND_STRIPED_PINWHEEL; + case ITM_FLOWER_PINWHEEL: + return mPlayer_ITEM_KIND_FLOWER_PINWHEEL; + case ITM_FANCY_PINWHEEL: + return mPlayer_ITEM_KIND_FANCY_PINWHEEL; + case ITM_BLUEBELL_FAN: + return mPlayer_ITEM_KIND_BLUEBELL_FAN; + case ITM_PLUM_FAN: + return mPlayer_ITEM_KIND_PLUM_FAN; + case ITM_BAMBOO_FAN: + return mPlayer_ITEM_KIND_BAMBOO_FAN; + case ITM_CLOUD_FAN: + return mPlayer_ITEM_KIND_CLOUD_FAN; + case ITM_MAPLE_FAN: + return mPlayer_ITEM_KIND_MAPLE_FAN; + case ITM_FAN_FAN: + return mPlayer_ITEM_KIND_FAN_FAN; + case ITM_FLOWER_FAN: + return mPlayer_ITEM_KIND_FLOWER_FAN; + case ITM_LEAF_FAN: + return mPlayer_ITEM_KIND_LEAF_FAN; + default: + return -1; + } +} + +extern int mPlib_Get_ItemKindTOBalloonShapeType(int item_kind) { + if (mPlayer_ITEM_IS_BALLOON(item_kind) != FALSE) { + return item_kind - mPlayer_ITEM_KIND_RED_BALLOON; + } + + return 0; +} + +static int mPlib_Get_itemNOTOBalloonShapeType(mActor_name_t itemNo) { + return mPlib_Get_ItemKindTOBalloonShapeType(mPlib_Get_ItemNoToItemKind(itemNo)); +} + +extern void mPlib_request_main_release_creature_balloon_from_submenu(mActor_name_t itemNo, int gold_scoop_flag) { + mPlayer_change_data_from_submenu_c* change_data_from_submenu_p = mPlib_Get_change_data_from_submenu_p(); + mPlayer_request_release_creature_c* req_release_creature_p = + &change_data_from_submenu_p->request_main_data.release_creature; + mPlayer_request_release_creature_balloon_c* release_balloon_p = &req_release_creature_p->data.balloon; + ACTOR* actorx = GET_PLAYER_ACTOR_NOW_ACTOR(); /* @unused */ + + change_data_from_submenu_p->requested_main_index = mPlayer_INDEX_RELEASE_CREATURE; + change_data_from_submenu_p->requested_index_pending = TRUE; + + req_release_creature_p->type = mPlayer_CREATURE_BALLOON; + req_release_creature_p->gold_scoop_flag = gold_scoop_flag; + + release_balloon_p->balloon_type = mPlib_Get_itemNOTOBalloonShapeType(itemNo); +} + +extern void mPlib_request_main_wait_from_submenu(void) { + mPlayer_change_data_from_submenu_c* change_data_from_submenu_p = mPlib_Get_change_data_from_submenu_p(); + + change_data_from_submenu_p->requested_main_index = mPlayer_INDEX_WAIT; + change_data_from_submenu_p->requested_index_pending = TRUE; +} + +extern void mPlib_request_main_demo_get_golden_item_from_submenu(void) { + mPlayer_change_data_from_submenu_c* change_data_from_submenu_p = mPlib_Get_change_data_from_submenu_p(); + + change_data_from_submenu_p->requested_main_index = mPlayer_INDEX_DEMO_GET_GOLDEN_ITEM; + change_data_from_submenu_p->requested_index_pending = TRUE; +} + +extern void mPlib_request_main_mail_land_from_submenu(void) { + mPlayer_change_data_from_submenu_c* change_data_from_submenu_p = mPlib_Get_change_data_from_submenu_p(); + + change_data_from_submenu_p->requested_main_index = mPlayer_INDEX_MAIL_LAND; + change_data_from_submenu_p->requested_index_pending = TRUE; +} + +extern void mPlib_request_main_demo_wait_from_submenu(ACTOR* speak_actor_p) { + mPlayer_change_data_from_submenu_c* change_data_from_submenu_p = mPlib_Get_change_data_from_submenu_p(); + mPlayer_request_demo_wait_c* req_demo_wait_p = &change_data_from_submenu_p->request_main_data.demo_wait; + + change_data_from_submenu_p->requested_main_index = mPlayer_INDEX_DEMO_WAIT; + change_data_from_submenu_p->requested_index_pending = TRUE; + + req_demo_wait_p->umbrella_flag = FALSE; + req_demo_wait_p->label = (u32)speak_actor_p; + + if (speak_actor_p != NULL) { + mPlib_Set_able_force_speak_label(speak_actor_p); + } +} + +extern void mPlib_Set_unable_wade(int v) { + Common_Set(unable_wade, v); +} + +extern int mPlib_Get_unable_wade(void) { + return Common_Get(unable_wade); +} + +extern int mPlib_Check_able_force_speak_label(GAME* game, ACTOR* label) { + if (Common_Get(player_actor_exists) == FALSE) { + return FALSE; + } + + return GET_PLAYER_ACTOR_GAME(game)->Check_able_force_speak_label_proc(game, label); +} + +extern void mPlib_Set_able_force_speak_label(ACTOR* label) { + if (Common_Get(player_actor_exists)) { + GET_PLAYER_ACTOR_NOW()->able_force_speak_label = (u32)label; + } +} + +extern void mPlib_Reset_able_force_speak_label(void) { + mPlib_Set_able_force_speak_label(NULL); +} + +extern u8 ply_1_get_change12_tex_index[]; +extern u8 ply_1_kokeru_a12_tex_index[]; +extern u8 ply_1_kokeru_getup_a12_tex_index[]; +extern u8 ply_1_kokeru_getup_n12_tex_index[]; +extern u8 ply_1_kokeru_n12_tex_index[]; +extern u8 ply_1_axe_swing12_tex_index[]; +extern u8 ply_1_kokeru12_tex_index[]; +extern u8 ply_1_kokeru_getup12_tex_index[]; +extern u8 ply_1_axe_hane12_tex_index[]; +extern u8 ply_1_axe_suka12_tex_index[]; +extern u8 ply_1_get_t12_tex_index[]; +extern u8 ply_1_menu_change12_tex_index[]; +extern u8 ply_1_not_sao_swing12_tex_index[]; +extern u8 ply_1_not_dig12_tex_index[]; +extern u8 ply_1_dig_suka12_tex_index[]; +extern u8 ply_1_shake12_tex_index[]; +extern u8 ply_1_eat12_tex_index[]; +extern u8 ply_1_gaaan12_tex_index[]; +extern u8 ply_1_deru12_tex_index[]; +extern u8 ply_1_guratuku12_tex_index[]; +extern u8 ply_1_otiru12_tex_index[]; +extern u8 ply_1_biku12_tex_index[]; +extern u8 ply_1_hati12_tex_index[]; +extern u8 ply_1_hati22_tex_index[]; +extern u8 ply_1_hati32_tex_index[]; +extern u8 ply_1_deru22_tex_index[]; +extern u8 ply_1_otiru22_tex_index[]; +extern u8 ply_1_itazura12_tex_index[]; +extern u8 ply_1_yatta12_tex_index[]; +extern u8 ply_1_yatta22_tex_index[]; +extern u8 ply_1_yatta32_tex_index[]; +extern u8 ply_1_mosquito12_tex_index[]; +extern u8 ply_1_axe_break12_tex_index[]; + +extern u8* mPlib_Get_PlayerEyeTexAnimation_p(int anim_idx) { + if (anim_idx >= 0 && anim_idx < mPlayer_ANIM_NUM) { + static u8* const eye_tex_index_table[] = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_get_change12_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_kokeru_a12_tex_index, + ply_1_kokeru_getup_a12_tex_index, + ply_1_kokeru_getup_n12_tex_index, + ply_1_kokeru_n12_tex_index, + NULL, + NULL, + ply_1_axe_swing12_tex_index, + NULL, + ply_1_kokeru12_tex_index, + ply_1_kokeru_getup12_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_axe_hane12_tex_index, + ply_1_axe_suka12_tex_index, + NULL, + NULL, + ply_1_get_t12_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_menu_change12_tex_index, + NULL, + ply_1_not_sao_swing12_tex_index, + NULL, + NULL, + NULL, + NULL, + ply_1_not_dig12_tex_index, + NULL, + NULL, + NULL, + NULL, + ply_1_dig_suka12_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_shake12_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_eat12_tex_index, + ply_1_gaaan12_tex_index, + NULL, + ply_1_deru12_tex_index, + ply_1_guratuku12_tex_index, + NULL, + ply_1_otiru12_tex_index, + NULL, + NULL, + ply_1_biku12_tex_index, + ply_1_hati12_tex_index, + ply_1_hati22_tex_index, + ply_1_hati32_tex_index, + NULL, + ply_1_deru22_tex_index, + ply_1_otiru22_tex_index, + ply_1_itazura12_tex_index, + NULL, + NULL, + ply_1_yatta12_tex_index, + ply_1_yatta22_tex_index, + ply_1_yatta32_tex_index, + NULL, + ply_1_mosquito12_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_axe_break12_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + }; + + return eye_tex_index_table[anim_idx]; + } + + return NULL; +} + +extern u8 ply_1_get_change11_tex_index[]; +extern u8 ply_1_kokeru_a11_tex_index[]; +extern u8 ply_1_kokeru_getup_a11_tex_index[]; +extern u8 ply_1_kokeru_getup_n11_tex_index[]; +extern u8 ply_1_kokeru_n11_tex_index[]; +extern u8 ply_1_axe_swing11_tex_index[]; +extern u8 ply_1_kokeru11_tex_index[]; +extern u8 ply_1_kokeru_getup11_tex_index[]; +extern u8 ply_1_axe_hane11_tex_index[]; +extern u8 ply_1_axe_suka11_tex_index[]; +extern u8 ply_1_get_t11_tex_index[]; +extern u8 ply_1_get_t21_tex_index[]; +extern u8 ply_1_not_get_t11_tex_index[]; +extern u8 ply_1_menu_change11_tex_index[]; +extern u8 ply_1_not_sao_swing11_tex_index[]; +extern u8 ply_1_not_dig11_tex_index[]; +extern u8 ply_1_dig_suka11_tex_index[]; +extern u8 ply_1_eat11_tex_index[]; +extern u8 ply_1_gaaan11_tex_index[]; +extern u8 ply_1_deru11_tex_index[]; +extern u8 ply_1_guratuku11_tex_index[]; +extern u8 ply_1_mogaku11_tex_index[]; +extern u8 ply_1_otiru11_tex_index[]; +extern u8 ply_1_biku11_tex_index[]; +extern u8 ply_1_hati11_tex_index[]; +extern u8 ply_1_hati21_tex_index[]; +extern u8 ply_1_hati31_tex_index[]; +extern u8 ply_1_deru21_tex_index[]; +extern u8 ply_1_otiru21_tex_index[]; +extern u8 ply_1_itazura11_tex_index[]; +extern u8 ply_1_yatta11_tex_index[]; +extern u8 ply_1_yatta21_tex_index[]; +extern u8 ply_1_yatta31_tex_index[]; +extern u8 ply_1_mosquito11_tex_index[]; +extern u8 ply_1_axe_break11_tex_index[]; + +extern u8* mPlib_Get_PlayerMouthTexAnimation_p(int anim_idx) { + if (anim_idx >= 0 && anim_idx < mPlayer_ANIM_NUM) { + static u8* const mouth_tex_index_table[] = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_get_change11_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_kokeru_a11_tex_index, + ply_1_kokeru_getup_a11_tex_index, + ply_1_kokeru_getup_n11_tex_index, + ply_1_kokeru_n11_tex_index, + NULL, + NULL, + ply_1_axe_swing11_tex_index, + NULL, + ply_1_kokeru11_tex_index, + ply_1_kokeru_getup11_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_axe_hane11_tex_index, + ply_1_axe_suka11_tex_index, + NULL, + NULL, + ply_1_get_t11_tex_index, + ply_1_get_t21_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_not_get_t11_tex_index, + NULL, + ply_1_menu_change11_tex_index, + NULL, + ply_1_not_sao_swing11_tex_index, + NULL, + NULL, + NULL, + NULL, + ply_1_not_dig11_tex_index, + NULL, + NULL, + NULL, + NULL, + ply_1_dig_suka11_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_eat11_tex_index, + ply_1_gaaan11_tex_index, + NULL, + ply_1_deru11_tex_index, + ply_1_guratuku11_tex_index, + ply_1_mogaku11_tex_index, + ply_1_otiru11_tex_index, + NULL, + NULL, + ply_1_biku11_tex_index, + ply_1_hati11_tex_index, + ply_1_hati21_tex_index, + ply_1_hati31_tex_index, + NULL, + ply_1_deru21_tex_index, + ply_1_otiru21_tex_index, + ply_1_itazura11_tex_index, + NULL, + NULL, + ply_1_yatta11_tex_index, + ply_1_yatta21_tex_index, + ply_1_yatta31_tex_index, + NULL, + ply_1_mosquito11_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + ply_1_axe_break11_tex_index, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + }; + + return mouth_tex_index_table[anim_idx]; + } + + return NULL; +} + +extern u8* mPlib_Get_eye_tex_p(int idx) { + if (idx >= 0 && idx < mPlayer_EYE_TEX_NUM) { + u8* face_tex_p = mPlib_get_player_face_p(gamePT); + + if (face_tex_p != NULL) { + return face_tex_p + idx * 0x100; + } + } + + return NULL; +} + +extern u8* mPlib_Get_mouth_tex_p(int idx) { + if (idx >= 0 && idx < mPlayer_MOUTH_TEX_NUM) { + u8* face_tex_p = mPlib_get_player_face_p(gamePT); + + if (face_tex_p != NULL) { + face_tex_p += (mPlayer_EYE_TEX_NUM * 0x100) + idx * 0x100; + return face_tex_p; + } + } + + return NULL; +} + +extern int mPlib_request_main_invade_type1(GAME* game) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_invade_all_proc(game, mPlayer_REQUEST_PRIORITY_2); +} + +extern int mPlib_request_main_refuse_type1(GAME* game) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_refuse_all_proc(game, mPlayer_REQUEST_PRIORITY_34); +} + +extern int mPlib_request_main_wait_type3(GAME* game) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_return_demo_all_proc(game, mPlayer_INDEX_WAIT, 3.0f, + mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_demo_get_golden_item2_type1(GAME* game, int golden_item_type) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_demo_get_golden_item2_all_proc(game, golden_item_type, + mPlayer_REQUEST_PRIORITY_34); +} + +extern int mPlib_request_main_talk_end_type1(GAME* game, int wait_demo, int demo_get_golden_axe) { + if (wait_demo == FALSE) { + if (demo_get_golden_axe == FALSE) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_return_demo_all_proc(game, mPlayer_INDEX_WAIT, 3.0f, + mPlayer_REQUEST_PRIORITY_19); + } else { + return GET_PLAYER_ACTOR_GAME(game)->request_main_demo_get_golden_axe_wait_all_proc( + game, mPlayer_REQUEST_PRIORITY_33); + } + } else { + return mPlib_request_main_demo_wait_type1(game, FALSE, NULL); + } +} + +extern int mPlib_request_main_talk_type1(GAME* game, ACTOR* talk_actor_p, int turn_flag, int umbrella_flag) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_talk_all_proc(game, talk_actor_p, turn_flag, -5.0f, umbrella_flag, + mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_hold_type1(GAME* game, int ftr_no, int player_direct, const xyz_t* player_pos_p) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_hold_all_proc(game, ftr_no, player_direct, player_pos_p, -5.0f, 1, + mPlayer_REQUEST_PRIORITY_9); +} + +extern int mPlib_request_main_recieve_wait_type1(GAME* game, mActor_name_t item, int counter_flag) { + GET_PLAYER_ACTOR_GAME(game)->request_main_recieve_wait_all_proc( + game, GET_PLAYER_ACTOR_GAME(game)->main_data.talk.talk_actor_p, + GET_PLAYER_ACTOR_GAME(game)->main_data.talk.turn_flag, GET_PLAYER_ACTOR_GAME(game)->now_main_index, item, + counter_flag, mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_give_type1(GAME* game, mActor_name_t item, int mode, int present, int on_surface) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); + int return_main_index = player->now_main_index; + ACTOR* talk_actor_p; + int turn_flag; + + if (return_main_index == mPlayer_INDEX_TALK) { + talk_actor_p = player->main_data.talk.talk_actor_p; + turn_flag = player->main_data.talk.turn_flag; + } else { + talk_actor_p = NULL; + turn_flag = FALSE; + } + + GET_PLAYER_ACTOR_GAME(game)->request_main_give_all_proc(game, talk_actor_p, turn_flag, return_main_index, item, + mode, present, on_surface, mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_sitdown_type1(GAME* game, int direct, const xyz_t* pos_p, int ftr_no) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_sitdown_all_proc(game, direct, pos_p, ftr_no, + mPlayer_REQUEST_PRIORITY_2); +} + +extern int mPlib_request_main_close_furniture_type1(GAME* game) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_close_furniture_all_proc(game, mPlayer_REQUEST_PRIORITY_23); +} + +extern int mPlib_request_main_lie_bed_type1(GAME* game, int direct, const xyz_t* pos_p, int head_direct, int ftr_no) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_lie_bed_all_proc(game, direct, pos_p, head_direct, ftr_no, + mPlayer_REQUEST_PRIORITY_9); +} + +extern int mPlib_request_main_hide_type1(GAME* game) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_hide_all_proc(game, mPlayer_REQUEST_PRIORITY_43); +} + +extern int mPlib_request_main_groundhog_type1(GAME* game) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_groundhog_proc(game, mPlayer_REQUEST_PRIORITY_43); +} + +extern int mPlib_request_main_door_type1(GAME* game, const xyz_t* pos_p, s16 angle_y, int door_type, void* door_label) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_door_all_proc(game, pos_p, angle_y, door_type, door_label, + mPlayer_REQUEST_PRIORITY_7) != FALSE; +} + +extern int mPlib_request_main_door_type2(GAME* game, const xyz_t* pos_p, s16 angle_y, int door_type, void* door_label) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_door_all_proc(game, pos_p, angle_y, door_type, door_label, + mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_outdoor_type1(GAME* game, int is_start_demo, int door_type) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_outdoor_all_proc(game, is_start_demo, door_type, + mPlayer_REQUEST_PRIORITY_43); +} + +extern int mPlib_request_main_wash_car_type1(GAME* game, const xyz_t* car_pos_p, const xyz_t* ret_pos_p, + s16 ret_angle_y, ACTOR* ctrl_actor_p) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_wash_car_all_proc(game, car_pos_p, ret_pos_p, ret_angle_y, + ctrl_actor_p, mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_rotate_octagon_type1(GAME* game, const xyz_t* pos_p, s16 angle_y) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_TALK) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_rotate_octagon_all_proc( + game, GET_PLAYER_ACTOR_GAME(game)->main_data.talk.talk_actor_p, + GET_PLAYER_ACTOR_GAME(game)->main_data.talk.turn_flag, GET_PLAYER_ACTOR_GAME(game)->now_main_index, pos_p, + angle_y, mPlayer_REQUEST_PRIORITY_19); + } else { + return GET_PLAYER_ACTOR_GAME(game)->request_main_rotate_octagon_all_proc( + game, NULL, FALSE, GET_PLAYER_ACTOR_GAME(game)->now_main_index, pos_p, angle_y, + mPlayer_REQUEST_PRIORITY_19); + } +} + +extern int mPlib_request_main_throw_money_type1(GAME* game, const xyz_t* pos_p, s16 angle_y) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_throw_money_all_proc(game, pos_p, angle_y, + mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_pray_type1(GAME* game, const xyz_t* pos_p, s16 angle_y) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_pray_all_proc(game, pos_p, angle_y, mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_mail_jump_type1(GAME* game, const xyz_t* pos_p, s16 angle_y) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_mail_jump_all_proc(game, pos_p, angle_y, + mPlayer_REQUEST_PRIORITY_9); +} + +extern int mPlib_request_main_stung_bee_type1(GAME* game) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_stung_bee_all_proc(game, mPlayer_REQUEST_PRIORITY_25); +} + +extern int mPlib_request_main_stung_mosquito_type1(void* label) { + return GET_PLAYER_ACTOR_NOW()->request_main_stung_mosquito_all_proc(gamePT, label, mPlayer_REQUEST_PRIORITY_25); +} + +extern int mPlib_request_main_switch_on_lighthouse_type1(GAME* game, const xyz_t* pos_p, s16 angle_y) { + return GET_PLAYER_ACTOR_NOW()->request_main_switch_on_lighthouse_all_proc(game, pos_p, angle_y, + mPlayer_REQUEST_PRIORITY_9); +} + +extern int mPlib_request_main_demo_geton_boat_type1(f32 goal_x, f32 goal_z, s16 angleY) { + ACTOR* actorx = GET_PLAYER_ACTOR_NOW_ACTOR(); + xyz_t goal_pos; + + goal_pos.x = goal_x; + goal_pos.z = goal_z; + goal_pos.y = actorx->world.position.y; + + return GET_PLAYER_ACTOR_NOW()->request_main_demo_geton_boat_all_proc(gamePT, &goal_pos, angleY, + mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_demo_getoff_boat_standup_type1(const xyz_t* pos_p, s16 angleY) { + return GET_PLAYER_ACTOR_NOW()->request_main_demo_getoff_boat_standup_all_proc(gamePT, pos_p, angleY, + mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_shock_type1(GAME* game, f32 time, s16 angle_y, int axe_swing) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_shock_all_proc(game, time, angle_y, FALSE, axe_swing, + mPlayer_REQUEST_PRIORITY_14); +} + +extern int mPlib_request_main_change_cloth_forNPC_type1(GAME* game, mActor_name_t cloth_item, u16 cloth_idx, + int try_on_flag) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_change_cloth_forNPC_proc(game, cloth_item, cloth_idx, try_on_flag); +} + +extern int mPlib_request_main_push_snowball_type1(GAME* game, void* label) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_push_snowball_all_proc(game, label, FALSE, + mPlayer_REQUEST_PRIORITY_2); +} + +extern int mPlib_request_main_push_snowball_end_type1(GAME* game) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_PUSH_SNOWBALL) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_wait_all_proc(game, -5.0f, 0.0f, 0, + mPlayer_REQUEST_PRIORITY_1); + } + + return FALSE; +} + +extern int mPlib_request_main_demo_wait_type1(GAME* game, int umbrella_flag, void* label) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_demo_wait_all_proc(game, umbrella_flag, label, + mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_demo_walk_type1(GAME* game, f32 goal_x, f32 goal_z, f32 speed, int wait_flag) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_demo_walk_all_proc(game, goal_x, goal_z, speed, wait_flag, + mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_demo_geton_train_type1(GAME* game, const xyz_t* pos_p) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_demo_geton_train_all_proc(game, pos_p, DEG2SHORT_ANGLE2(180.0f), + mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_demo_getoff_train_type1(GAME* game) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_demo_getoff_train_all_proc( + game, &GET_PLAYER_ACTOR_GAME_ACTOR(game)->world.position, + GET_PLAYER_ACTOR_GAME_ACTOR(game)->shape_info.rotation.y, mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_request_main_demo_standing_train_type1(GAME* game) { + return GET_PLAYER_ACTOR_GAME(game)->request_main_demo_standing_train_all_proc(game, mPlayer_REQUEST_PRIORITY_19); +} + +extern int mPlib_check_request_main_talk_type1_priority(GAME* game) { + int res = FALSE; + + if (GET_PLAYER_ACTOR_GAME(game)->check_request_main_priority_proc(game, mPlayer_REQUEST_PRIORITY_19) > 0) { + if (GET_PLAYER_ACTOR_GAME(game)->check_cancel_request_change_proc_index_proc(mPlayer_INDEX_TALK) == FALSE) { + if (mPlib_get_player_actor_main_index(game) != mPlayer_INDEX_DEMO_WAIT && + mPlib_get_player_actor_main_index(game) != mPlayer_INDEX_DEMO_WALK && + mPlib_get_player_actor_main_index(game) != mPlayer_INDEX_TIRED && + mPlib_get_player_actor_main_index(game) != mPlayer_INDEX_TALK && + mPlib_get_player_actor_main_index(game) != mPlayer_INDEX_WASH_CAR && + mPlib_get_player_actor_main_index(game) != mPlayer_INDEX_DEMO_STANDING_TRAIN) { + res = TRUE; + } + } + } + + return res; +} + +extern int mPlib_check_request_main_speak_type1_priority(GAME* game) { + int res = FALSE; + + if (GET_PLAYER_ACTOR_GAME(game)->check_request_main_priority_proc(game, mPlayer_REQUEST_PRIORITY_19) > 0) { + if (GET_PLAYER_ACTOR_GAME(game)->check_cancel_request_change_proc_index_proc(mPlayer_INDEX_TALK) == FALSE) { + res = TRUE; + } + } + + return res; +} + +extern int mPlib_check_request_main_door_type1_priority(GAME* game) { + int res = FALSE; + + if (GET_PLAYER_ACTOR_GAME(game)->check_request_main_priority_proc(game, mPlayer_REQUEST_PRIORITY_7) > 0) { + if (GET_PLAYER_ACTOR_GAME(game)->check_cancel_request_change_proc_index_proc(mPlayer_INDEX_DOOR) == FALSE) { + res = TRUE; + } + } + + return res; +} + +extern int mPlib_check_request_main_door_type2_priority(GAME* game) { + int res = FALSE; + + if (GET_PLAYER_ACTOR_GAME(game)->check_request_main_priority_proc(game, mPlayer_REQUEST_PRIORITY_19) > 0) { + if (GET_PLAYER_ACTOR_GAME(game)->check_cancel_request_change_proc_index_proc(mPlayer_INDEX_DOOR) == FALSE) { + res = TRUE; + } + } + + return res; +} + +extern int mPlib_check_request_main_wade_priority(GAME* game) { + int res; + + if (mPlib_get_player_actor_request_main_index(game) == mPlayer_INDEX_WADE_SNOWBALL) { + res = FALSE; + + if (GET_PLAYER_ACTOR_GAME(game)->check_request_main_priority_proc(game, mPlayer_REQUEST_PRIORITY_2) > 0) { + if (GET_PLAYER_ACTOR_GAME(game)->check_cancel_request_change_proc_index_proc(mPlayer_INDEX_WADE_SNOWBALL) == + FALSE) { + res = TRUE; + } + } + } else { + res = FALSE; + + if (GET_PLAYER_ACTOR_GAME(game)->check_request_main_priority_proc(game, mPlayer_REQUEST_PRIORITY_2) > 0) { + if (GET_PLAYER_ACTOR_GAME(game)->check_cancel_request_change_proc_index_proc(mPlayer_INDEX_WADE) == FALSE) { + res = TRUE; + } + } + } + + return res; +} + +extern int mPlib_check_request_main_demo_wade_priority(GAME* game) { + int res = FALSE; + + if (GET_PLAYER_ACTOR_GAME(game)->check_request_main_priority_proc(game, mPlayer_REQUEST_PRIORITY_19) > 0) { + if (GET_PLAYER_ACTOR_GAME(game)->check_cancel_request_change_proc_index_proc(mPlayer_INDEX_DEMO_WADE) == + FALSE) { + res = TRUE; + } + } + + return res; +} + +extern int mPlib_check_request_main_demo_geton_boat_wade_priority(GAME* game) { + int res = FALSE; + + if (GET_PLAYER_ACTOR_GAME(game)->check_request_main_priority_proc(game, mPlayer_REQUEST_PRIORITY_19) > 0) { + if (GET_PLAYER_ACTOR_GAME(game)->check_cancel_request_change_proc_index_proc( + mPlayer_INDEX_DEMO_GETON_BOAT_WADE) == FALSE) { + res = TRUE; + } + } + + return res; +} + +static int mPlib_strength_request_main_index_priority(GAME* game, int priority) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); + + if (player->requested_main_index_priority < priority) { + player->requested_main_index_priority = priority; + return TRUE; + } + + return FALSE; +} + +extern int mPlib_strength_request_main_wade_priority(GAME* game) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_WADE) { + return TRUE; + } + + if (mPlib_get_player_actor_request_main_index(game) == mPlayer_INDEX_WADE) { + mPlib_strength_request_main_index_priority(game, mPlayer_REQUEST_PRIORITY_19); + return TRUE; + } + + return FALSE; +} + +extern int mPlib_strength_request_main_demo_wade_priority(GAME* game) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_DEMO_WADE) { + return TRUE; + } + + if (mPlib_get_player_actor_request_main_index(game) == mPlayer_INDEX_DEMO_WADE) { + mPlib_strength_request_main_index_priority(game, mPlayer_REQUEST_PRIORITY_19); + return TRUE; + } + + return FALSE; +} + +extern int mPlib_strength_request_main_wade_snowball_priority(GAME* game) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_WADE_SNOWBALL) { + return TRUE; + } + + if (mPlib_get_player_actor_request_main_index(game) == mPlayer_INDEX_WADE_SNOWBALL) { + mPlib_strength_request_main_index_priority(game, mPlayer_REQUEST_PRIORITY_19); + return TRUE; + } + + return FALSE; +} + +extern int mPlib_strength_request_main_demo_geton_boat_wade_priority(GAME* game) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_DEMO_GETON_BOAT_WADE) { + return TRUE; + } + + if (mPlib_get_player_actor_request_main_index(game) == mPlayer_INDEX_DEMO_GETON_BOAT_WADE) { + mPlib_strength_request_main_index_priority(game, mPlayer_REQUEST_PRIORITY_19); + return TRUE; + } + + return FALSE; +} + +extern int mPlib_strength_request_main_door_priority(GAME* game) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_DOOR) { + return TRUE; + } + + if (mPlib_get_player_actor_request_main_index(game) == mPlayer_INDEX_DOOR) { + mPlib_strength_request_main_index_priority(game, mPlayer_REQUEST_PRIORITY_19); + return TRUE; + } + + return FALSE; +} + +extern int mPlib_check_request_main_outdoor_priority(GAME* game) { + return TRUE; +} + +extern int mPlib_Check_SetOrderSubmenu(void) { + mPlayer_change_data_from_submenu_c* change_data_from_submenu_p = mPlib_Get_change_data_from_submenu_p(); + + return change_data_from_submenu_p->requested_index_pending != FALSE; +} + +static int mPlib_check_request_change_item(void) { + int idx; + + if (Common_Get(player_actor_exists) == FALSE) { + return TRUE; + } + + if (mPlib_check_DynamicLinkFile_m_player() == FALSE) { + return TRUE; + } + + idx = GET_PLAYER_ACTOR_GAME(gamePT)->check_request_change_item_proc(gamePT); + return mPlayer_MAIN_INDEX_VALID(idx); +} + +static int mPlib_CheckScene_AbleSubmenu(void) { + + if (Common_Get(player_actor_exists) == FALSE) { + return FALSE; + } + + if (mPlib_check_DynamicLinkFile_m_player() == FALSE) { + return FALSE; + } + + return GET_PLAYER_ACTOR_GAME(gamePT)->CheckScene_AbleSubmenu_proc(); +} + +extern int mPlib_able_submenu_type1(GAME* game) { + int res = FALSE; + + if (GET_PLAYER_ACTOR_GAME(game)->check_request_main_priority_proc(game, mPlayer_REQUEST_PRIORITY_19) > 0 && + mPlib_Check_SetOrderSubmenu() == FALSE && mPlib_check_request_change_item() == FALSE && + mPlib_check_player_warp_forEvent() == FALSE && + GET_PLAYER_ACTOR_GAME(game)->able_submenu_request_main_index_proc(game) && mPlib_CheckScene_AbleSubmenu()) { + res = TRUE; + } + + return res; +} + +static int mPlib_check_priority_event_type1(GAME* game) { + return GET_PLAYER_ACTOR_GAME(game)->check_request_main_priority_proc(game, mPlayer_REQUEST_PRIORITY_17) > 0; +} + +extern int mPlib_check_player_open_umbrella(GAME* game) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game); + + if (player->umbrella_actor != NULL) { + UMBRELLA_ACTOR* umbrella_actor = (UMBRELLA_ACTOR*)player->umbrella_actor; + + if (umbrella_actor->opened_fully) { + return TRUE; + } + } + + return FALSE; +} + +extern int mPlib_check_player_outdoor_start(GAME* game) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_OUTDOOR) { + mPlayer_main_outdoor_c* outdoor_p = &GET_PLAYER_ACTOR_GAME(game)->main_data.outdoor; + + if (outdoor_p->is_demo) { + return TRUE; + } + } + + return FALSE; +} + +extern int mPlib_check_label_player_demo_wait(GAME* game, void* label) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_DEMO_WAIT) { + mPlayer_main_demo_wait_c* demo_wait_p = &GET_PLAYER_ACTOR_GAME(game)->main_data.demo_wait; + + if (demo_wait_p->label == (u32)label) { + return TRUE; + } + } + + return FALSE; +} + +extern void mPlib_Set_goal_player_demo_walk(f32 pos_x, f32 pos_z, f32 speed) { + mDemo_Set_OrderValue(mDemo_ORDER_PLAYER, 2, (int)pos_x); + mDemo_Set_OrderValue(mDemo_ORDER_PLAYER, 4, (int)pos_z); + mDemo_Set_OrderValue(mDemo_ORDER_PLAYER, 7, (int)(speed * 100.0f)); +} + +extern void mPlib_Get_goal_player_demo_walk(f32* pos_x_p, f32* pos_z_p, f32* speed_p) { + *pos_x_p = (f32)(int)mDemo_Get_OrderValue(mDemo_ORDER_PLAYER, 2); + *pos_z_p = (f32)(int)mDemo_Get_OrderValue(mDemo_ORDER_PLAYER, 4); + *speed_p = (f32)(int)mDemo_Get_OrderValue(mDemo_ORDER_PLAYER, 7) * 0.01f; +} + +extern void mPlib_Set_continue_player_after_demo_walk(int value) { + mDemo_Set_OrderValue(mDemo_ORDER_PLAYER, 8, value); +} + +extern int mPlib_Get_continue_player_after_demo_walk(void) { + return mDemo_Get_OrderValue(mDemo_ORDER_PLAYER, 8); +} + +extern void mPlib_Set_end_player_demo_walk(int value) { + mDemo_Set_OrderValue(mDemo_ORDER_PLAYER, 9, value); +} + +extern int mPlib_Get_end_player_demo_walk(void) { + return mDemo_Get_OrderValue(mDemo_ORDER_PLAYER, 9); +} + +extern int mPlib_Get_space_putin_item(void) { + return mPr_GetPossessionItemIdxWithCond(Now_Private, EMPTY_NO, mPr_ITEM_COND_NORMAL); +} + +extern int mPlib_Get_space_putin_item_forTICKET(mActor_name_t* item_p) { + mActor_name_t item = *item_p; + + if (ITEM_NAME_GET_TYPE(item) == NAME_TYPE_ITEM1 && ITEM_NAME_GET_CAT(item) == ITEM1_CAT_TICKET) { + int ticket_month = (item >> 3) & 0xF; + int ticket_count = 1 + (item & 7); + int ticket_begin = ITM_TICKET_START | (ticket_month << 3); + int ticket_end = ticket_begin + (5 - ticket_count); + int idx = mPr_GetPossessionItemIdxKindWithCond(Now_Private, ticket_begin, ticket_end, mPr_ITEM_COND_NORMAL); + + if (idx >= 0) { + *item_p = Now_Private->inventory.pockets[idx] + ticket_count; + return idx; + } + } else if (ITEM_IS_PAPER(item)) { + int paper_base = item - ITM_PAPER_START; + int paper_type = PAPER2TYPE(paper_base); + int paper_num = PAPER2STACK(paper_base) + 1; + int i; + + for (i = 4 - paper_num; i > 0; i--) { + mActor_name_t paper_item = ITM_PAPER_START + paper_type + (i - 1) * PAPER_UNIQUE_NUM; + int idx = mPr_GetPossessionItemIdxWithCond(Now_Private, paper_item, mPr_ITEM_COND_NORMAL); + + if (idx != -1) { + *item_p = (mActor_name_t)(ITM_PAPER_START + paper_type + (i + paper_num - 1) * PAPER_UNIQUE_NUM); + return idx; + } + } + } + + return mPlib_Get_space_putin_item(); +} + +extern int mPlib_Get_space_putin_item_forHITODAMA(mActor_name_t* item_p) { + mActor_name_t item = *item_p; + + if (ITEM_IS_WISP(item)) { + int hitodama_count = ITEM_IS_WISP(item) ? (1 + (item - ITM_SPIRIT0)) : 0; + mActor_name_t hitodama_begin = ITM_SPIRIT0; + mActor_name_t hitodama_end = hitodama_begin + (5 - hitodama_count); + int idx = mPr_GetPossessionItemIdxKindWithCond(Now_Private, hitodama_begin, hitodama_end, mPr_ITEM_COND_NORMAL); + + if (idx >= 0) { + *item_p = Now_Private->inventory.pockets[idx] + hitodama_count; + return idx; + } + } + + return mPlib_Get_space_putin_item(); +} + +extern int mPlib_able_player_warp_forEvent(void) { + if (mPlib_check_DynamicLinkFile_m_player() == FALSE) { + return FALSE; + } + + if (mPlib_check_player_warp_forEvent()) { + return FALSE; + } + + if (mEv_CheckFirstIntro()) { + return FALSE; + } + + if (Common_Get(player_actor_exists) == FALSE) { + return FALSE; + } + + if (Common_Get(complete_payment_type) != mPlayer_COMPLETE_PAYMENT_TYPE_NONE) { + return FALSE; + } + + if (Common_Get(fail_emu_flag) != FALSE) { + return FALSE; + } + + if (mPlib_Check_SetOrderSubmenu()) { + return FALSE; + } + + if (mPlib_check_request_change_item()) { + return FALSE; + } + + if (mPlib_check_priority_event_type1(gamePT)) { + return GET_PLAYER_ACTOR_NOW()->check_cancel_event_without_priority_proc(gamePT) == FALSE; + } + + if (mPlib_get_player_actor_main_index(gamePT) == mPlayer_INDEX_RELAX_ROD || + mPlib_get_player_actor_main_index(gamePT) == mPlayer_INDEX_READY_NET || + mPlib_get_player_actor_main_index(gamePT) == mPlayer_INDEX_READY_WALK_NET || + mPlib_get_player_actor_main_index(gamePT) == mPlayer_INDEX_HOLD || + mPlib_get_player_actor_main_index(gamePT) == mPlayer_INDEX_SITDOWN_WAIT || + mPlib_get_player_actor_main_index(gamePT) == mPlayer_INDEX_WAIT_BED || + mPlib_get_player_actor_main_index(gamePT) == mPlayer_INDEX_STRUGGLE_PITFALL) { + if (GET_PLAYER_ACTOR_NOW()->requested_main_index_changed == FALSE) { + return TRUE; + } + } + + return FALSE; +} + +extern int mPlib_request_player_warp_forEvent(void) { + Common_Set(player_warp_request, TRUE); + return TRUE; +} + +extern int mPlib_cancel_player_warp_forEvent(void) { + Common_Set(player_warp_request, FALSE); + return TRUE; +} + +extern int mPlib_check_player_warp_forEvent(void) { + return Common_Get(player_warp_request); +} + +extern int mPlib_Check_HitAxe(xyz_t* pos_p) { + return GET_PLAYER_ACTOR_NOW()->Check_HitAxe_proc(GET_PLAYER_ACTOR_NOW_ACTOR(), pos_p); +} + +extern int mPlib_Check_VibUnit_OneFrame(const xyz_t* pos_p) { + return GET_PLAYER_ACTOR_NOW()->Check_VibUnit_OneFrame_proc(GET_PLAYER_ACTOR_NOW_ACTOR(), pos_p); +} + +extern int mPlib_Check_StopNet(xyz_t* pos_p) { + return GET_PLAYER_ACTOR_NOW()->Check_StopNet_proc(GET_PLAYER_ACTOR_NOW_ACTOR(), pos_p); +} + +extern u32 mPlib_Get_item_net_catch_label(void) { + return GET_PLAYER_ACTOR_NOW()->Get_item_net_catch_label_proc(GET_PLAYER_ACTOR_NOW_ACTOR()); +} + +extern int mPlib_Change_item_net_catch_label(u32 label, s8 type) { + return GET_PLAYER_ACTOR_NOW()->Change_item_net_catch_label_proc(GET_PLAYER_ACTOR_NOW_ACTOR(), label, type); +} + +extern int mPlib_Check_HitScoop(xyz_t* pos_p) { + return GET_PLAYER_ACTOR_NOW()->Check_HitScoop_proc(GET_PLAYER_ACTOR_NOW_ACTOR(), pos_p); +} + +extern int mPlib_Check_DigScoop(xyz_t* pos_p) { + return GET_PLAYER_ACTOR_NOW()->Check_DigScoop_proc(GET_PLAYER_ACTOR_NOW_ACTOR(), pos_p); +} + +extern int mPlib_Get_address_able_display(void) { + return GET_PLAYER_ACTOR_NOW()->address_able_display; +} + +static ACTOR* mPlib_Search_exist_npc_inCircle_forScoop(GAME* game, const xyz_t* pos_p, f32 radius_sq) { + GAME_PLAY* play = (GAME_PLAY*)game; + Actor_info* actor_info = &play->actor_info; + Actor_list* npc_actor_list = &actor_info->list[ACTOR_PART_NPC]; + ACTOR* actor = npc_actor_list->actor; + f32 pos_x = pos_p->x; + f32 pos_z = pos_p->z; + + for (actor; actor != NULL; actor = actor->next_actor) { + f32 dx = actor->world.position.x - pos_x; + f32 dz = actor->world.position.z - pos_z; + + if (Math3DVecLengthSquare2D(dx, dz) < radius_sq) { + NPC_ACTOR* npc_actor = (NPC_ACTOR*)actor; + + if (npc_actor->condition_info.hide_flg == FALSE) { + return actor; + } + } + } + + return NULL; +} + +static ACTOR* mPlib_Search_exist_psnowman_inCircle_forScoop(GAME* game, const xyz_t* pos_p, f32 radius_sq) { + GAME_PLAY* play = (GAME_PLAY*)game; + Actor_info* actor_info = &play->actor_info; + Actor_list* bg_actor_list = &actor_info->list[ACTOR_PART_BG]; + ACTOR* actor = bg_actor_list->actor; + f32 pos_x = pos_p->x; + f32 pos_z = pos_p->z; + + for (actor; actor != NULL; actor = actor->next_actor) { + if (actor->id == mAc_PROFILE_PSNOWMAN) { + f32 dx = actor->world.position.x - pos_x; + f32 dz = actor->world.position.z - pos_z; + + if (Math3DVecLengthSquare2D(dx, dz) < radius_sq) { + return actor; + } + } + } + + return NULL; +} + +static ACTOR* mPlib_Search_exist_snowball_forScoop(GAME* game, const xyz_t* pos_p) { + GAME_PLAY* play = (GAME_PLAY*)game; + Actor_info* actor_info = &play->actor_info; + Actor_list* bg_actor_list = &actor_info->list[ACTOR_PART_BG]; + ACTOR* actor = bg_actor_list->actor; + f32 pos_x = pos_p->x; + f32 pos_y = pos_p->y; + f32 pos_z = pos_p->z; + + for (actor; actor != NULL; actor = actor->next_actor) { + if (actor->id == mAc_PROFILE_SNOWMAN) { + SNOWMAN_ACTOR* snowball = (SNOWMAN_ACTOR*)actor; + f32 dy = actor->world.position.y - pos_y; + f32 abs_dy = ABS(dy); + f32 radius = MIN(10.0f + 20.0f * snowball->normalized_scale, 19.0f); + + if (abs_dy <= 35.0f) { + f32 dx = actor->world.position.x - pos_x; + f32 dz = actor->world.position.z - pos_z; + f32 len; + f32 sq_radius; + + radius += 19.0f; + len = Math3DVecLengthSquare2D(dx, dz); + sq_radius = SQ(radius); + + if (len < sq_radius) { + return actor; + } + } + } + } + + return NULL; +} + +static ACTOR* mPlib_Search_exist_ball_forScoop(GAME* game, const xyz_t* pos_p) { + GAME_PLAY* play = (GAME_PLAY*)game; + Actor_info* actor_info = &play->actor_info; + Actor_list* bg_actor_list = &actor_info->list[ACTOR_PART_BG]; + ACTOR* actor = bg_actor_list->actor; + f32 pos_x = pos_p->x; + f32 pos_y = pos_p->y; + f32 pos_z = pos_p->z; + + for (actor; actor != NULL; actor = actor->next_actor) { + if (actor->id == mAc_PROFILE_BALL) { + f32 dy = actor->world.position.y - pos_y; + f32 abs_dy = ABS(dy); + + if (abs_dy <= 20.0f) { + f32 dx = actor->world.position.x - pos_x; + f32 dz = actor->world.position.z - pos_z; + + if (Math3DVecLengthSquare2D(dx, dz) < SQ(39.0f)) { + return actor; + } + } + } + } + + return NULL; +} + +extern int mPlib_Check_scoop_after(GAME* game, xyz_t* pos_p, mActor_name_t* item_p, ACTOR** reflect_actor_pp, + int gold_scoop) { + ACTOR* player_actor = GET_PLAYER_ACTOR_GAME_ACTOR(game); + xyz_t* player_pos_p = &player_actor->world.position; + int player_ux; + int player_uz; + int field_type = Common_Get(field_type); + + if (reflect_actor_pp != NULL) { + *reflect_actor_pp = NULL; + } + + *item_p = EMPTY_NO; + + if (field_type == mFI_FIELDTYPE2_FG) { + if (mFI_Wpos2UtNum(&player_ux, &player_uz, *player_pos_p)) { + // clang-format off + static const int add_num[8][2] = { + { -1, -1 }, + { 0, -1 }, + { 1, -1 }, + { -1, 0 }, + // { 0, 0 }, <--- player pos + { 1, 0 }, + { -1, 1 }, + { 0, 1 }, + { 1, 1 }, + }; + // clang-format on + xyz_t unit_pos[8]; + int unit_num[8][2]; + int unit_exist[8]; + xyz_t center_ut_pos; + xyz_t unit_dist[8]; + s16 unit_angle_y[8]; + int unit_abs_diff_angle_y[8]; + f32 player_pos_x = player_pos_p->x; + f32 player_pos_y = player_pos_p->y; + f32 player_pos_z = player_pos_p->z; + int idx = 0; + int min_angle_y; + int player_angle_y; + int i; + + mFI_UtNum2CenterWpos(¢er_ut_pos, player_ux, player_uz); + + /* Get the center position for each surrounding unit and if it exists or not */ + for (i = 0; i < 8; i++) { + unit_num[i][0] = player_ux + add_num[i][0]; + unit_num[i][1] = player_uz + add_num[i][1]; + unit_exist[i] = mFI_UtNum2CenterWpos(&unit_pos[i], unit_num[i][0], unit_num[i][1]); + unit_pos[i].y = player_pos_y; + + if (unit_exist[i] == FALSE) { + unit_pos[i].x = center_ut_pos.x + unit_num[i][0] * mFI_UT_WORLDSIZE_X_F; + unit_pos[i].z = center_ut_pos.z + unit_num[i][1] * mFI_UT_WORLDSIZE_Z_F; + } + } + + /* Calculate distance and angle to center of each surrounding unit */ + for (i = 0; i < 8; i++) { + unit_dist[i].x = unit_pos[i].x - player_pos_x; + unit_dist[i].z = unit_pos[i].z - player_pos_z; + unit_angle_y[i] = atans_table(unit_dist[i].z, unit_dist[i].x); + } + + player_angle_y = player_actor->shape_info.rotation.y; + min_angle_y = DEG2SHORT_ANGLE2(360.0f); + + /* Find the closest unit in relation to player's rotation */ + for (i = 0; i < 8; i++) { + int diff_angle_y = unit_angle_y[i] - player_angle_y; + + unit_abs_diff_angle_y[i] = ABS(diff_angle_y); + + if (unit_abs_diff_angle_y[i] > DEG2SHORT_ANGLE2(180.0f)) { + unit_abs_diff_angle_y[i] = DEG2SHORT_ANGLE2(360.0f) - unit_abs_diff_angle_y[i]; + } + + if (min_angle_y > unit_abs_diff_angle_y[i]) { + min_angle_y = unit_abs_diff_angle_y[i]; + idx = i; + } + } + + /* Special handling for diagonal units */ + if (idx == 0 || idx == 2 || idx == 5 || idx == 7) { + int near_wall; + int too_far_away = FALSE; + int check_ut0; + int check_ut1; + int wall0 = FALSE; + int wall1 = FALSE; + f32 base_ut_y = mCoBG_GetBgY_OnlyCenter_FromWpos2(unit_pos[idx], 0.0f); + + if (idx == 0) { + check_ut0 = 1; + check_ut1 = 3; + } else if (idx == 2) { + check_ut0 = 1; + check_ut1 = 4; + } else if (idx == 5) { + check_ut0 = 3; + check_ut1 = 6; + } else { + check_ut0 = 4; + check_ut1 = 6; + } + + if (unit_exist[check_ut0]) { + f32 ground0 = mCoBG_GetBgY_OnlyCenter_FromWpos2(unit_pos[check_ut0], 0.0f); + f32 ground1 = mCoBG_Wpos2BgUtCenterHeight_AddColumn(unit_pos[check_ut0]); + + /* If the base ground position and the 'column' height aren't the same, and our ground position is + * less than the 'column' height, there must be a wall in front of us. */ + if (ground0 != ground1 && base_ut_y < ground1) { + wall0 = TRUE; + } + } + + if (unit_exist[check_ut1]) { + f32 ground0 = mCoBG_GetBgY_OnlyCenter_FromWpos2(unit_pos[check_ut1], 0.0f); + f32 ground1 = mCoBG_Wpos2BgUtCenterHeight_AddColumn(unit_pos[check_ut1]); + + /* If the base ground position and the 'column' height aren't the same, and our ground position is + * less than the 'column' height, there must be a wall in front of us. */ + if (ground0 != ground1 && base_ut_y < ground1) { + wall1 = TRUE; + } + } + + /* If both units diagonally have a wall then we've definitely hit a wall */ + if (wall0 && wall1) { + near_wall = TRUE; + } else { + near_wall = FALSE; + } + + if (near_wall == FALSE) { + f32 dist = Math3DVecLengthSquare2D(unit_dist[idx].z, unit_dist[idx].x); + + if (SQ(63.245553f) > dist) { + too_far_away = FALSE; + } else { + too_far_away = TRUE; + } + } + + if (too_far_away || near_wall) { + min_angle_y = DEG2SHORT_ANGLE2(360.0f); + + if (min_angle_y > unit_abs_diff_angle_y[1]) { + min_angle_y = unit_abs_diff_angle_y[1]; + idx = 1; + } + + if (min_angle_y > unit_abs_diff_angle_y[3]) { + min_angle_y = unit_abs_diff_angle_y[3]; + idx = 3; + } + + if (min_angle_y > unit_abs_diff_angle_y[4]) { + min_angle_y = unit_abs_diff_angle_y[4]; + idx = 4; + } + + if (min_angle_y > unit_abs_diff_angle_y[6]) { + min_angle_y = unit_abs_diff_angle_y[6]; + idx = 6; + } + } + } + + if (unit_exist[idx] == FALSE) { + *pos_p = unit_pos[idx]; + return mPlayer_INDEX_AIR_SCOOP; + } else { + mActor_name_t* scoop_fg_p = mFI_UtNum2UtFG(unit_num[idx][0], unit_num[idx][1]); + mActor_name_t scoop_fg = scoop_fg_p == NULL ? EMPTY_NO : *scoop_fg_p; + int is_stump; + int is_stone_tencoin; + int is_tree; + int is_rsv; + int is_special_scoop_item; + + is_stump = FALSE; + is_stone_tencoin = FALSE; + is_tree = FALSE; + is_rsv = FALSE; + is_special_scoop_item = TRUE; + + if (IS_ITEM_TREE_STUMP(scoop_fg) != FALSE) { + is_stump = TRUE; + } else if (IS_ITEM_STONE_TC(scoop_fg) != FALSE) { + is_stone_tencoin = TRUE; + } else if (IS_ITEM_HITTABLE_TREE(scoop_fg) != FALSE) { + is_tree = TRUE; + } else if (scoop_fg == DUMMY_RESERVE) { + is_rsv = TRUE; + } else { + is_special_scoop_item = FALSE; + } + + { + f32 diff_col_y; + f32 diff_pos_y; + f32 tmp_y; + + unit_pos[idx].y = mCoBG_Wpos2BgUtCenterHeight_AddColumn(unit_pos[idx]); + diff_col_y = unit_pos[idx].y - mCoBG_GetBgY_OnlyCenter_FromWpos2(unit_pos[idx], 0.0f); + diff_pos_y = unit_pos[idx].y - player_pos_p->y; + *pos_p = unit_pos[idx]; + + if (is_special_scoop_item && diff_pos_y > diff_col_y) { + return mPlayer_INDEX_REFLECT_SCOOP; + } + + if (is_special_scoop_item && diff_pos_y < -diff_col_y) { + return mPlayer_INDEX_AIR_SCOOP; + } + + if (!is_special_scoop_item && diff_pos_y > 63.245552f) { + return mPlayer_INDEX_REFLECT_SCOOP; + } + + if (!is_special_scoop_item && diff_pos_y < -63.245552f) { + return mPlayer_INDEX_AIR_SCOOP; + } + + if (is_stump || is_stone_tencoin || is_tree || is_rsv) { + pos_p->y = mCoBG_GetBgY_OnlyCenter_FromWpos2(*pos_p, 0.0f); + diff_pos_y = pos_p->y - player_pos_p->y; + } + + { + xyz_t start_pos = *player_pos_p; + xyz_t end_pos = *pos_p; + xyz_t rev_pos; + xyz_t start2_pos = *player_pos_p; + xyz_t end2_pos = *pos_p; + xyz_t rev2_pos; + xyz_t rev3_pos; + xyz_t rev4_pos; + + start_pos.y += 1.0f; + end_pos.y += 1.0f; + start2_pos.y -= 1.0f; + end2_pos.y -= 1.0f; + + if (is_stump) { + mCoBG_LineCheck_RemoveFg(&rev_pos, start_pos, end_pos, &mNT_ItIsStump, + mCoBG_LINECHECK_CAT_WALL); + mCoBG_LineCheck_RemoveFg(&rev3_pos, end_pos, start_pos, &mNT_ItIsStump, + mCoBG_LINECHECK_CAT_WALL); + mCoBG_LineCheck_RemoveFg(&rev2_pos, start2_pos, end2_pos, &mNT_ItIsStump, + mCoBG_LINECHECK_CAT_WALL); + mCoBG_LineCheck_RemoveFg(&rev4_pos, end2_pos, start2_pos, &mNT_ItIsStump, + mCoBG_LINECHECK_CAT_WALL); + } else if (is_stone_tencoin) { + mCoBG_LineCheck_RemoveFg(&rev_pos, start_pos, end_pos, &mNT_ItIsStoneCoin10, + mCoBG_LINECHECK_CAT_WALL); + mCoBG_LineCheck_RemoveFg(&rev3_pos, end_pos, start_pos, &mNT_ItIsStoneCoin10, + mCoBG_LINECHECK_CAT_WALL); + mCoBG_LineCheck_RemoveFg(&rev2_pos, start2_pos, end2_pos, &mNT_ItIsStoneCoin10, + mCoBG_LINECHECK_CAT_WALL); + mCoBG_LineCheck_RemoveFg(&rev4_pos, end2_pos, start2_pos, &mNT_ItIsStoneCoin10, + mCoBG_LINECHECK_CAT_WALL); + } else if (is_rsv) { + mCoBG_LineCheck_RemoveFg(&rev_pos, start_pos, end_pos, &mNT_ItIsReserveDummy, + mCoBG_LINECHECK_CAT_WALL); + mCoBG_LineCheck_RemoveFg(&rev3_pos, end_pos, start_pos, &mNT_ItIsReserveDummy, + mCoBG_LINECHECK_CAT_WALL); + mCoBG_LineCheck_RemoveFg(&rev2_pos, start2_pos, end2_pos, &mNT_ItIsReserveDummy, + mCoBG_LINECHECK_CAT_WALL); + mCoBG_LineCheck_RemoveFg(&rev4_pos, end2_pos, start2_pos, &mNT_ItIsReserveDummy, + mCoBG_LINECHECK_CAT_WALL); + } else if (!is_tree) { + mCoBG_LineCheck_RemoveFg(&rev_pos, start_pos, end_pos, NULL, mCoBG_LINECHECK_CAT_WALL); + mCoBG_LineCheck_RemoveFg(&rev3_pos, end_pos, start_pos, NULL, mCoBG_LINECHECK_CAT_WALL); + mCoBG_LineCheck_RemoveFg(&rev2_pos, start2_pos, end2_pos, NULL, mCoBG_LINECHECK_CAT_WALL); + mCoBG_LineCheck_RemoveFg(&rev4_pos, end2_pos, start2_pos, NULL, mCoBG_LINECHECK_CAT_WALL); + } + + if (!is_tree) { + if (((rev_pos.x != 0.0f || rev_pos.y != 0.0f || rev_pos.z != 0.0f) && + (rev2_pos.x != 0.0f || rev2_pos.y != 0.0f || rev2_pos.z != 0.0f)) || + ((rev3_pos.x != 0.0f || rev3_pos.y != 0.0f || rev3_pos.z != 0.0f) && + (rev4_pos.x != 0.0f || rev4_pos.y != 0.0f || rev4_pos.z != 0.0f))) { + if (diff_pos_y >= 0.0f) { + return mPlayer_INDEX_REFLECT_SCOOP; + } else { + return mPlayer_INDEX_AIR_SCOOP; + } + } + } + + { + int dig_status; + int hit_flag = FALSE; + ACTOR* hit_actor_p; + mActor_name_t hit_item; + + dig_status = mFI_GetDigStatus(&hit_item, *pos_p, gold_scoop); + + /* Don't let the player hit NPCs with the shovel */ + hit_actor_p = mPlib_Search_exist_npc_inCircle_forScoop(game, pos_p, SQ(39.0f)); + if (hit_actor_p != NULL) { + return mPlayer_INDEX_AIR_SCOOP; + } + + hit_actor_p = mPlib_Search_exist_psnowman_inCircle_forScoop(game, pos_p, SQ(39.0f)); + if (hit_actor_p != NULL) { + hit_flag = TRUE; + } + + if (hit_actor_p == NULL) { + hit_actor_p = mPlib_Search_exist_snowball_forScoop(game, pos_p); + if (hit_actor_p != NULL) { + hit_flag = TRUE; + } + } + + if (hit_actor_p == NULL) { + hit_actor_p = mPlib_Search_exist_ball_forScoop(game, pos_p); + if (hit_actor_p != NULL) { + hit_flag = TRUE; + } + } + + if (reflect_actor_pp != NULL) { + *reflect_actor_pp = hit_actor_p; + } + + if (scoop_fg != hit_item) { + *item_p = hit_item; + } else { + *item_p = scoop_fg; + } + + if (is_tree) { + return mPlayer_INDEX_REFLECT_SCOOP; + } + + if (is_rsv) { + return mPlayer_INDEX_REFLECT_SCOOP; + } + + switch (dig_status) { + case mFI_DIGSTATUS_FILLIN: + if (hit_flag) { + return mPlayer_INDEX_REFLECT_SCOOP; + } else if (is_stone_tencoin) { + return mPlayer_INDEX_REFLECT_SCOOP; + } else { + return mPlayer_INDEX_FILL_SCOOP; + } + break; + case mFI_DIGSTATUS_DIG: + case mFI_DIGSTATUS_PUT_ITEM: + if (hit_flag) { + return mPlayer_INDEX_REFLECT_SCOOP; + } else if (is_stone_tencoin) { + return mPlayer_INDEX_REFLECT_SCOOP; + } else { + return mPlayer_INDEX_DIG_SCOOP; + } + break; + case mFI_DIGSTATUS_GET_ITEM: + if (hit_flag) { + return mPlayer_INDEX_REFLECT_SCOOP; + } else if (is_stone_tencoin) { + return mPlayer_INDEX_REFLECT_SCOOP; + } else { + return mPlayer_INDEX_GET_SCOOP; + } + break; + case mFI_DIGSTATUS_MISS: + return mPlayer_INDEX_AIR_SCOOP; + default: + if (is_stone_tencoin) { + *item_p = scoop_fg; + } + return mPlayer_INDEX_REFLECT_SCOOP; + } + } + } + } + } + } + } + + return -1; +} + +extern int mPlib_Check_scene_able_change_camera_pos(void) { + if (mFI_CheckFieldData()) { + int field_type = mFI_GET_TYPE(mFI_GetFieldId()); + + return (field_type == mFI_FIELD_NPCROOM0 || field_type == mFI_FIELD_PLAYER0_ROOM || + Save_Get(scene_no) == SCENE_MUSEUM_ROOM_FOSSIL || Save_Get(scene_no) == SCENE_MUSEUM_ROOM_PAINTING || + Save_Get(scene_no) == SCENE_MUSEUM_ROOM_INSECT || Save_Get(scene_no) == SCENE_MUSEUM_ROOM_FISH); + } + + return FALSE; +} + +extern int mPlib_Check_RotateOctagon(void) { + return GET_PLAYER_ACTOR_NOW()->Check_RotateOctagon_proc(gamePT); +} + +extern int mPlib_Set_EndWashCar(void) { + if (mPlib_get_player_actor_main_index(gamePT) == mPlayer_INDEX_WASH_CAR) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); + mPlayer_main_wash_car_c* wash_car_p = &player->main_data.wash_car; + + wash_car_p->ret_order = TRUE; + return TRUE; + } + + return FALSE; +} + +extern int mPlib_Set_AnimeSpeedWashCar(f32 anime_speed) { + if (mPlib_get_player_actor_main_index(gamePT) == mPlayer_INDEX_WASH_CAR) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); + + player->keyframe0.frame_control.speed = anime_speed; + player->keyframe1.frame_control.speed = anime_speed; + return TRUE; + } + + return FALSE; +} + +extern int mPlib_Check_now_handin_item_kind(void) { + return GET_PLAYER_ACTOR_NOW()->item_kind; +} + +extern int mPlib_Check_now_handin_item(void) { + return GET_PLAYER_ACTOR_NOW()->item_kind >= 0; +} + +extern void mPlib_Set_able_hand_all_item_in_demo(s8 v) { + GET_PLAYER_ACTOR_NOW()->able_hand_all_item_in_demo = v; +} + +extern int mPlib_Get_status_for_bee(void) { + return GET_PLAYER_ACTOR_NOW()->Get_status_for_bee_proc(GET_PLAYER_ACTOR_NOW_ACTOR()); +} + +extern int mPlib_Check_end_stung_bee(void) { + return GET_PLAYER_ACTOR_NOW()->Check_end_stung_bee_proc(GET_PLAYER_ACTOR_NOW_ACTOR()); +} + +extern int mPlib_Check_Label_main_push_snowball(void* label) { + return GET_PLAYER_ACTOR_NOW()->Check_Label_main_push_snowball_proc(gamePT, label); +} + +extern int mPlib_Check_Label_main_wade_snowball(void* label) { + return GET_PLAYER_ACTOR_NOW()->Check_Label_main_wade_snowball_proc(gamePT, label); +} + +extern int mPlib_Set_ScrollDemo_forWade_snowball(int dir, const xyz_t* snowball_dist_p) { + return GET_PLAYER_ACTOR_NOW()->Set_ScrollDemo_forWade_snowball_proc(GET_PLAYER_ACTOR_NOW_ACTOR(), dir, + snowball_dist_p); +} + +extern int mPlib_GetSnowballPos_forWadeSnowball(xyz_t* pos_p) { + return GET_PLAYER_ACTOR_NOW()->GetSnowballPos_forWadeSnowball_proc(GET_PLAYER_ACTOR_NOW_ACTOR(), pos_p); +} + +extern int mPlib_CheckCondition_forWadeSnowball(const xyz_t* pos_p, s16 angle_y) { + return GET_PLAYER_ACTOR_NOW()->CheckCondition_forWadeSnowball_proc(gamePT, pos_p, angle_y); +} + +extern int mPlib_SetParam_for_push_snowball(const xyz_t* pos_p, s16 angle_y, f32 anim_speed) { + return GET_PLAYER_ACTOR_NOW()->SetParam_for_push_snowball_proc(gamePT, pos_p, angle_y, anim_speed); +} + +extern void mPlib_Set_crash_snowball_for_wade(int v) { + GET_PLAYER_ACTOR_NOW()->crash_snowball_for_wade = v; +} + +static mPlayer_Controller_Data_c controller_data_for_title_demo; + +extern mPlayer_Controller_Data_c* mPlib_Get_controller_data_for_title_demo_p(void) { + return &controller_data_for_title_demo; +} + +extern void mPlib_Clear_controller_data_for_title_demo(void) { + bzero(&controller_data_for_title_demo, sizeof(controller_data_for_title_demo)); + controller_data_for_title_demo.equiped_item = ITM_PAPER_START; /* @BUG - this should be a tool, not paper */ +} + +extern void mPlib_SetData1_controller_data_for_title_demo(int btn_a, int btn_b, f32 stick_x, f32 stick_y) { + mCon_calc(&controller_data_for_title_demo.mcon, stick_x, stick_y); + + if (controller_data_for_title_demo.trigger_btn_a == FALSE && btn_a != FALSE) { + controller_data_for_title_demo.trigger_btn_a = TRUE; + } else { + controller_data_for_title_demo.trigger_btn_a = FALSE; + } + controller_data_for_title_demo.btn_a = btn_a; + + if (controller_data_for_title_demo.trigger_btn_b == FALSE && btn_b != FALSE) { + controller_data_for_title_demo.trigger_btn_b = TRUE; + } else { + controller_data_for_title_demo.trigger_btn_b = FALSE; + } + controller_data_for_title_demo.btn_b = btn_b; +} + +extern void mPlib_SetData2_controller_data_for_title_demo(mActor_name_t item) { + controller_data_for_title_demo.equiped_item = item; +} + +extern int mPlib_Check_CorrectPlayerPos_forEvent(void) { + if (Common_Get(player_actor_exists)) { + int main_index = GET_PLAYER_ACTOR_NOW()->now_main_index; + + if (mPlayer_MAIN_INDEX_VALID(main_index) != FALSE) { + // clang-format off + static const s8 data[] = { + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + TRUE, + TRUE, + TRUE, + TRUE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + TRUE, + TRUE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + FALSE, + }; + // clang-format on + + return data[main_index]; + } + } + + return FALSE; +} + +extern int mPlib_Check_UKI_COMEBACK_STATUS(void) { + if (Common_Get(player_actor_exists)) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); + + if (player->fishing_rod_actor_p) { + UKI_ACTOR* uki_actor = (UKI_ACTOR*)player->fishing_rod_actor_p; + + return uki_actor->status == aUKI_STATUS_COMEBACK; + } + } + + return FALSE; +} + +extern int mPlib_Check_tree_shaken(const xyz_t* pos_p) { + return GET_PLAYER_ACTOR_NOW()->Check_tree_shaken_proc(GET_PLAYER_ACTOR_NOW_ACTOR(), pos_p); +} + +extern int mPlib_Check_tree_shaken_little(const xyz_t* pos_p) { + return GET_PLAYER_ACTOR_NOW()->Check_tree_shaken_little_proc(GET_PLAYER_ACTOR_NOW_ACTOR(), pos_p); +} + +extern int mPlib_Check_tree_shaken_big(const xyz_t* pos_p) { + return GET_PLAYER_ACTOR_NOW()->Check_tree_shaken_big_proc(GET_PLAYER_ACTOR_NOW_ACTOR(), pos_p); +} + +extern mActor_name_t mPlib_Get_itemNo_forWindow(void) { + if (Common_Get(player_actor_exists) == FALSE) { + return EMPTY_NO; + } + + if (SubmenuArea_IsPlayer() == FALSE) { + return EMPTY_NO; + } + + return GET_PLAYER_ACTOR_NOW()->Get_itemNo_forWindow_proc(GET_PLAYER_ACTOR_NOW_ACTOR()); +} + +extern int mPlib_able_birth_bee(void) { + if (mEv_CheckFirstIntro() != FALSE || Common_Get(reset_flag) != FALSE || + Common_Get(player_bee_chase_flag) != FALSE || mEv_CheckTitleDemo() > 0) { + return FALSE; + } + + return TRUE; +} + +extern int mPlib_check_able_change_camera_normal_index(void) { + if (Common_Get(player_actor_exists) == FALSE) { + return EMPTY_NO; + } + + if (SubmenuArea_IsPlayer() == FALSE) { + return EMPTY_NO; + } + + return GET_PLAYER_ACTOR_NOW()->check_able_change_camera_normal_index_proc(GET_PLAYER_ACTOR_NOW_ACTOR()); +} + +extern int mPlib_check_player_actor_main_index_Furniture_Move(GAME* game) { + int res = FALSE; + + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_PUSH || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_PULL) { + res = TRUE; + } + + return res; +} + +extern int mPlib_check_player_actor_main_index_RecieveMove(GAME* game) { + int res = FALSE; + + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_RECIEVE_WAIT || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_RECIEVE_STRETCH || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_RECIEVE || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_RECIEVE_PUTAWAY) { + res = TRUE; + } + + return res; +} + +extern int mPlib_check_player_actor_main_index_Pitfall(GAME* game) { + int res = FALSE; + + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_READY_PITFALL || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_FALL_PITFALL || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_STRUGGLE_PITFALL || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_CLIMBUP_PITFALL) { + res = TRUE; + } + + return res; +} + +extern int mPlib_check_player_actor_main_index_OutDoorMove(GAME* game) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_DMA || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_INTRO || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_OUTDOOR || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_COMPLETE_PAYMENT || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_RETURN_OUTDOOR || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_RETURN_OUTDOOR2 || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_TAKEOUT_ITEM) { + return TRUE; + } + + return FALSE; +} + +extern int mPlib_check_player_actor_main_index_OutDoorMove2(GAME* game) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_DMA || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_INTRO || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_OUTDOOR || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_RETURN_OUTDOOR || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_COMPLETE_PAYMENT || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_TAKEOUT_ITEM) { + return TRUE; + } + + return FALSE; +} + +extern int mPlib_check_player_actor_main_index_AllWade(GAME* game) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_WADE || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_DEMO_WADE || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_WADE_SNOWBALL || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_DEMO_GETON_BOAT_WADE) { + return TRUE; + } + + return FALSE; +} + +extern int mPlib_check_player_actor_main_index_catch_insect(GAME* game) { + return (mPlib_Get_item_net_catch_label() != 0 && + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_SWING_NET) || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_PULL_NET || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_NOTICE_NET || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_PUTAWAY_NET; +} + +extern int mPlib_check_player_actor_main_index_catch_fish(GAME* game) { + return mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_FLY_ROD || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_NOTICE_ROD || + mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_PUTAWAY_ROD; +} + +extern int mPlib_check_player_actor_start_switch_on_lighthouse(GAME* game) { + if (mPlib_get_player_actor_main_index(game) == mPlayer_INDEX_SWITCH_ON_LIGHTHOUSE && + GET_PLAYER_ACTOR_GAME(game)->keyframe0.frame_control.current_frame > 1.0f) { + return TRUE; + } + + return FALSE; +} + +extern int mPlib_Check_stung_mosquito(void* label) { + return GET_PLAYER_ACTOR_NOW()->Check_stung_mosquito_proc(gamePT, label); +} + +extern void mPlib_Set_boat_angleZ(s16 angle_z) { + GET_PLAYER_ACTOR_NOW()->boat_angleZ = angle_z; +} + +extern int mPlib_CheckButtonOnly_forDush(void) { + return chkButton(BUTTON_B) || chkButton(BUTTON_L) || chkButton(BUTTON_R); +} + +extern int mPlib_Check_golden_item_get_demo_end(int gold_item_type) { + static u8 data[] = { + (1 << mPlayer_GOLDEN_ITEM_TYPE_AXE), + (1 << mPlayer_GOLDEN_ITEM_TYPE_NET), + (1 << mPlayer_GOLDEN_ITEM_TYPE_ROD), + (1 << mPlayer_GOLDEN_ITEM_TYPE_SHOVEL), + }; + + return data[gold_item_type] & Now_Private->golden_items_collected; +} + +extern void mPlib_Set_change_color_request(void) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR_NOW(); + + player->change_color_request = TRUE; +} diff --git a/src/m_player_main_rotate_octagon.c_inc b/src/m_player_main_rotate_octagon.c_inc index 328faf7a..79e854be 100644 --- a/src/m_player_main_rotate_octagon.c_inc +++ b/src/m_player_main_rotate_octagon.c_inc @@ -39,7 +39,7 @@ static void Player_actor_setup_main_Rotate_octagon(ACTOR* actorx, GAME* game) { Player_actor_setup_main_Base(actorx, game); } -static void Player_actor_settle_main_Rotate_octagon(ACTOR* actorx) { +static void Player_actor_settle_main_Rotate_octagon(ACTOR* actorx, GAME* game) { PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; cKF_SkeletonInfo_R_c* kf0_p = &player->keyframe0; diff --git a/src/m_player_other_func.c_inc b/src/m_player_other_func.c_inc index 49fc6727..4a791a09 100644 --- a/src/m_player_other_func.c_inc +++ b/src/m_player_other_func.c_inc @@ -6,8 +6,7 @@ void Player_actor_ct_other_func1(ACTOR* actor, GAME* game) { actor->unknown_b4 = 1; Actor_info_make_actor(&play->actor_info, game, mAc_PROFILE_FIELD_DRAW, actor->world.position.x, - actor->world.position.y, actor->world.position.z, 0, 0, 0, -1, -1, - -1, EMPTY_NO, -1, -1, -1); + actor->world.position.y, actor->world.position.z, 0, 0, 0, -1, -1, -1, EMPTY_NO, -1, -1, -1); } void Player_actor_setup_main_Wade_other_func1(ACTOR* actor, GAME* game) { @@ -253,13 +252,12 @@ void Player_actor_move_other_func1(ACTOR* actor, GAME* game) { void Player_actor_move_other_func2(ACTOR* actor, GAME* game) { PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - GAME_PLAY* play = (GAME_PLAY*)game; Player_actor_set_eye_PositionAndAngle(actor); Player_actor_sound_SetStatus(actor); Player_actor_Set_Indoor_Camera_Index(actor, game); Player_actor_check_forward(actor, game); - mFI_SetPlayerWade(play); + mFI_SetPlayerWade(game); Player_actor_check_little_shake_tree(actor, game); Player_actor_check_shake_tree_timer(actor); Player_actor_check_pitfall(actor, game); diff --git a/src/m_scene.c b/src/m_scene.c index 58bd1b6a..2e9f84ef 100644 --- a/src/m_scene.c +++ b/src/m_scene.c @@ -511,7 +511,7 @@ extern int goto_other_scene(GAME_PLAY* play, Door_data_c* door_data, int update_ play->next_scene_no = door_data->next_scene_id; if (update_player_mode) { - mPlib_request_main_invade_type1(play); + mPlib_request_main_invade_type1((GAME*)play); } restore_fgdata_all(play); diff --git a/src/m_titledemo.c b/src/m_titledemo.c index 0909ba2e..b1f93b1a 100644 --- a/src/m_titledemo.c +++ b/src/m_titledemo.c @@ -126,7 +126,7 @@ static void mTD_game_end_init(GAME_PLAY* play) { play->fb_fade_type = 10; // TODO: enum/define play->fb_wipe_type = 3; // TODO: enum/define - mPlib_request_main_invade_type1(play); + mPlib_request_main_invade_type1((GAME*)play); mBGMPsComp_make_ps_wipe(0x521C); // TODO: enum/define }