diff options
| -rw-r--r-- | include/67E840.h | 6 | ||||
| -rw-r--r-- | include/683030.h | 22 | ||||
| -rw-r--r-- | include/69E2C0.h | 73 | ||||
| -rw-r--r-- | include/m_common_data.h | 7 | ||||
| -rw-r--r-- | include/m_demo.h | 230 | ||||
| -rw-r--r-- | include/m_msg_main.h | 6 | ||||
| -rw-r--r-- | include/m_player_lib.h | 26 | ||||
| -rw-r--r-- | linker_scripts/jp/symbol_addrs_code.txt | 180 | ||||
| -rw-r--r-- | src/code/m_demo.c | 928 | ||||
| -rw-r--r-- | src/code/m_kankyo.c | 4 | ||||
| -rw-r--r-- | src/code/m_roll_lib.c | 2 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_Dump/ac_dump.c | 2 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_Kago/ac_kago.c | 2 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_Koinobori/ac_koinobori.c | 2 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_Mikuji/ac_mikuji.c | 2 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_Nameplate/ac_nameplate.c | 2 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_Sample/ac_sample.c | 2 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_Tama/ac_tama.c | 2 | ||||
| -rw-r--r-- | src/overlays/actors/player_actor/m_player.c | 2 | ||||
| -rw-r--r-- | src/overlays/actors/player_actor/m_player.h | 4 | ||||
| -rw-r--r-- | src/overlays/gamestates/ovl_play/m_play.c | 4 | ||||
| -rw-r--r-- | yamls/jp/code.yaml | 9 |
22 files changed, 1309 insertions, 208 deletions
diff --git a/include/67E840.h b/include/67E840.h index 9d52f95..7c38846 100644 --- a/include/67E840.h +++ b/include/67E840.h @@ -154,8 +154,8 @@ void mBGMPsComp_make_ps_wipe(s32 arg0); // void func_8005E8F4_jp(); // void func_8005E9B4_jp(); // void func_8005E9C8_jp(); -// void func_8005E9DC_jp(); -// void func_8005E9F0_jp(); +void mBGMPsComp_volume_talk_start(void); +void mBGMPsComp_volume_talk_end(void); // void func_8005EA14_jp(); // void func_8005EA24_jp(); // void func_8005EA38_jp(); @@ -174,7 +174,7 @@ void mBGMPsComp_scene_mode(s32 arg0); // void func_8005ED78_jp(); // void func_8005ED98_jp(); // void func_8005EDC4_jp(); -// void func_8005EDD8_jp(); +void mBGMForce_inform_end(void); // void func_8005EDEC_jp(); void mBGMForce_room_nonstop_start(void); // void func_8005EE20_jp(); diff --git a/include/683030.h b/include/683030.h index 8e0cf17..be53653 100644 --- a/include/683030.h +++ b/include/683030.h @@ -6,11 +6,14 @@ #include "z64math.h" struct Game_Play; +struct Actor; typedef struct Camera2{ /* 0x000 */ xyz_t unk0; /* 0x00C */ xyz_t unk4; - /* 0x018 */ UNK_TYPE1 unk18[0x120]; + /* 0x018 */ UNK_TYPE1 unk18[0x48]; + /* 0x060 */ s32 unk60; + /* 0x0D4 */ UNK_TYPE1 unk64[0xD4]; } Camera2; //size = 0x138 // void func_8005F390_jp(); @@ -66,7 +69,7 @@ xyz_t* Camera2_getMicPos_p(struct Game_Play* game_play); // void func_80061104_jp(); // void func_80061134_jp(); // void func_80061188_jp(); -// void func_800611D4_jp(); +s32 Camera2_request_main_talk(struct Game_Play* play, struct Actor* speaker, struct Actor* listener, s32 priority); // void func_80061280_jp(); // void func_8006136C_jp(); // void func_800613DC_jp(); @@ -91,7 +94,7 @@ xyz_t* Camera2_getMicPos_p(struct Game_Play* game_play); // void func_80062510_jp(); // void func_80062644_jp(); // void func_80062668_jp(); -// void Camera2_request_main_normal(); +s32 Camera2_request_main_normal(struct Game_Play* play, s32 flags, s32 priority); // void func_800626E4_jp(); // void func_80062760_jp(); // void func_800627A0_jp(); @@ -101,7 +104,7 @@ xyz_t* Camera2_getMicPos_p(struct Game_Play* game_play); // void func_80062B24_jp(); // void func_80062B74_jp(); // void func_80062BA0_jp(); -// void func_80062C84_jp(); +s32 Camera2_request_main_item(struct Game_Play* play, s32 type, s32 priority); // void func_80062CD8_jp(); // void func_80062DD8_jp(); // void func_80062E00_jp(); @@ -117,7 +120,7 @@ xyz_t* Camera2_getMicPos_p(struct Game_Play* game_play); // void func_800631C0_jp(); // void func_800631EC_jp(); // void func_8006328C_jp(); -// void func_800632C8_jp(); +s32 Camera2_request_main_door(struct Game_Play* play, struct Actor* doorActor, u32 flags, s32 priority); // void func_8006333C_jp(); // void func_8006339C_jp(); // void func_80063468_jp(); @@ -126,18 +129,19 @@ xyz_t* Camera2_getMicPos_p(struct Game_Play* game_play); // void func_80063608_jp(); // void func_80063628_jp(); // void func_80063674_jp(); -// void func_8006370C_jp(); +s32 Camera2_request_main_simple_kirin(struct Game_Play* play, xyz_t* center, s32 priority); // void func_800637C8_jp(); // void func_8006393C_jp(); -// void func_800639A0_jp(); +s32 Camera2_request_main_simple(struct Game_Play* play, xyz_t* pos, s_xyz* dir, f32 dist, s32 morphCounter, + s32 priority); // void func_80063A34_jp(); -// void func_80063AA0_jp(); +void Camera2_main_Simple_AngleDistStd(struct Game_Play* play, s_xyz* angle, f32* dist); // void func_80063B1C_jp(); // void func_80063B8C_jp(); // void func_80063CA0_jp(); // void func_80063D10_jp(); // void func_80063D38_jp(); -// void func_80063D9C_jp(); +s32 Camera2_request_main_listen_front_low_talk(struct Game_Play* play, struct Actor* speaker, struct Actor* listener, s32 priority); // void func_80063E14_jp(); // void func_80063E94_jp(); // void func_80063EF0_jp(); diff --git a/include/69E2C0.h b/include/69E2C0.h index 5ce8734..bfa2b16 100644 --- a/include/69E2C0.h +++ b/include/69E2C0.h @@ -18,78 +18,5 @@ void Debug_mode_input(struct Input *input); // void Debug_mode_output_sub(); // void Debug_mode_zelda_malloc_info_output(); void Debug_mode_output(struct GraphicsContext* gfxCtx); -struct Actor* mDemo_Get_talk_actor(void); -// void func_8007B44C_jp(); -// void func_8007B49C_jp(); -// void func_8007B4EC_jp(); -void mDemo_Set_msg_num(s32 arg0); -// void func_8007B5F4_jp(); -// void func_8007B650_jp(); -// void func_8007B670_jp(); -// void func_8007B684_jp(); -// void func_8007B6A4_jp(); -// void func_8007B724_jp(); -// void func_8007B760_jp(); -void mDemo_Set_talk_display_name(s8 arg0); -// void func_8007B7DC_jp(); -// void func_8007B818_jp(); -// void func_8007B854_jp(); -// void func_8007B890_jp(); -// void func_8007B8CC_jp(); -// void func_8007B908_jp(); -// void func_8007B944_jp(); -void mDemo_Set_talk_window_color(Color_RGBA8* color); -// void func_8007B9E0_jp(); -void mDemo_Set_camera(s32 arg0); -// void func_8007BA38_jp(); -// void func_8007BA4C_jp(); -// void func_8007BA84_jp(); -// void func_8007BC28_jp(); -// void func_8007BCE4_jp(); -// void func_8007BD9C_jp(); -// void func_8007BE58_jp(); -// void func_8007C00C_jp(); -// void func_8007C0B4_jp(); -// void func_8007C0C0_jp(); -// void func_8007C104_jp(); -// void func_8007C24C_jp(); -// void func_8007C290_jp(); -// void func_8007C3D8_jp(); -// void func_8007C484_jp(); -// void func_8007C570_jp(); -// void func_8007C5EC_jp(); -// void weight_of_talk_position(); -// void func_8007C808_jp(); -// void func_8007C814_jp(); -// void func_8007C820_jp(); -// void func_8007C844_jp(); -// void func_8007C868_jp(); -// void func_8007C88C_jp(); -// void func_8007C8B0_jp(); -// void func_8007C8D4_jp(); -// void func_8007C8FC_jp(); -// void func_8007C924_jp(); -// void func_8007CB28_jp(); -// void func_8007CB50_jp(); -// void func_8007CBEC_jp(); -// void func_8007CC9C_jp(); -void mDemo_stock_clear(void); -void mDemo_Request(s32 arg0, struct Actor* actor, void* arg2); -s32 mDemo_Check(s32 arg0, struct Actor* actor); -// void func_8007CF34_jp(); -// void func_8007CF44_jp(); -void mDemo_End(struct Actor*); -void mDemo_Main(struct Game_Play* game_play); -void func_8007CFD8_jp(struct Game_Play* game_play); -// void func_8007D030_jp(); -// void func_8007D048_jp(); -// void func_8007D080_jp(); -void mDemo_Set_ListenAble(void); -// void func_8007D0B0_jp(); -// void func_8007D0C4_jp(); -// void func_8007D0D8_jp(); -s32 mDemo_Check_ListenAble(void); -s32 mDemo_Check_DiffAngle_forTalk(s16 angle); -// void func_8007D128_jp(); #endif diff --git a/include/m_common_data.h b/include/m_common_data.h index a1527fa..3201dc2 100644 --- a/include/m_common_data.h +++ b/include/m_common_data.h @@ -17,6 +17,7 @@ #include "m_snowman.h" #include "m_clip.h" #include "m_scene.h" +#include "m_demo.h" typedef enum Season { /* 0 */ SPRING, @@ -158,7 +159,8 @@ typedef struct CommonData { /* 0x10752 */ s16 goodsPower; /* 0x10754 */ DoorData doorData; /* 0x10764 */ DoorData structureExitDoorData; - /* 0x1077C */ UNK_TYPE1 unk_1077C[0x24]; + /* 0x1077C */ DemoRequest startDemoRequest; + /* 0x1078C */ DoorData eventDoorData; /* 0x107A0 */ DoorData famicomEmuDoorData; /* 0x107B4 */ s8 unk_107B4; /* 0x107B5 */ s8 floorIdx; @@ -166,7 +168,8 @@ typedef struct CommonData { /* 0x107B8 */ UNK_TYPE1 unk_107B8[0x27]; /* 0x107FF*/ s8 paymentType; /* 0x107E0 */ s8 playerDecoyFlag; - /* 0x107E1 */ UNK_TYPE1 unk_107E1[0x3]; + /* 0x107E1 */ s8 unk_107E1; + /* 0x107E2 */ s16 unk_107E2; /* 0x107E4 */ s16 unk_107E4; /* 0x107E6 */ UNK_TYPE1 unk107E6[0x212]; /* 0x109F8 */ u8 unk109F8; diff --git a/include/m_demo.h b/include/m_demo.h new file mode 100644 index 0000000..9f5f7c2 --- /dev/null +++ b/include/m_demo.h @@ -0,0 +1,230 @@ +#ifndef M_DEMO_H +#define M_DEMO_H + +#include "ultra64.h" +#include "color.h" +#include "m_scene.h" + +struct Actor; +struct Game_Play; + +#define DEMO_ORDER_VALUE_MAX 10 +#define DEMO_REQUEST_MAX 32 + +#define DEMO_MSG_PRIORITY 5 +#define DEMO_CAMERA_PRIORITY 6 + +#define DEMO_WINDOW_COLOR_R 235 +#define DEMO_WINDOW_COLOR_G 255 +#define DEMO_WINDOW_COLOR_B 235 +#define DEMO_WINDOW_COLOR_A 255 + +typedef enum DemoState { + DEMO_STATE_WAIT, + DEMO_STATE_READY, + DEMO_STATE_RUN, + DEMO_STATE_STOP = 9, + + DEMO_STATE_MAX +} DemoState; + +typedef enum DemoDirection { + DEMO_DIRECT_N, + DEMO_DIRECT_NE, + DEMO_DIRECT_E, + DEMO_DIRECT_SE, + DEMO_DIRECT_S, + DEMO_DIRECT_SW, + DEMO_DIRECT_W, + DEMO_DIRECT_NW, + + DEMO_DIRECT_MAX +} DemoDirection; + +typedef enum DemoType { + DEMO_TYPE_NONE, + DEMO_TYPE_SCROLL, + DEMO_TYPE_EXITSCENE, + DEMO_TYPE_DOOR, + DEMO_TYPE_4, + DEMO_TYPE_SCROLL2, + DEMO_TYPE_DOOR2, + DEMO_TYPE_TALK, + DEMO_TYPE_SPEAK, + DEMO_TYPE_REPORT, + DEMO_TYPE_OUTDOOR, + DEMO_TYPE_B, + DEMO_TYPE_EVENTMSG, + DEMO_TYPE_D, + DEMO_TYPE_MAX +} DemoType; + +typedef enum DemoOrderType { + DEMO_ORDER_PLAYER, + DEMO_ORDER_1, + DEMO_ORDER_2, + DEMO_ORDER_3, + DEMO_ORDER_NPC0, + DEMO_ORDER_NPC1, + DEMO_ORDER_NPC2, + DEMO_ORDER_7, + DEMO_ORDER_8, + DEMO_ORDER_QUEST, + + DEMO_ORDER_MAX +} DemoOrderType; + +typedef void (*DemoRequestFunc)(struct Actor*); + +typedef struct DemoClip { + void* demoActor; + s32 type; +} DemoClip; + +typedef enum DemoClipType { + DEMO_CLIP_TYPE_NONE, + DEMO_CLIP_TYPE_INTRO_DEMO, + DEMO_CLIP_TYPE_RIDE_OFF_DEMO, + DEMO_CLIP_TYPE_PRESENT_DEMO, + DEMO_CLIP_TYPE_BOAT_DEMO, + DEMO_CLIP_TYPE_RESET_DEMO, + + DEMO_CLIP_TYPE_MAX +} DemoClipType; + +typedef struct DemoRequest { + struct Actor* actor; + s32 type; + DemoRequestFunc proc; + f32 talkWeight; +} DemoRequest; + +typedef struct DemoDoorData { + s32 type; + struct houseInfo{ + f32 size; + s32 direct; + } houseInfo; +} DemoDoorData; + +typedef struct DemoEMsgData { + s32 msgNo; + Color_RGBA8 windowColor; + s32 msgDelayTimer; + s32 sceneDelayTimer; + DoorData doorData; + UNK_TYPE1 unk_24[0x4]; +} DemoEMsgData; + +typedef struct DemoTalkData { + s32 msgNo; + s32 turn; + s32 useZoomSound; + s32 displayName; + s32 changePlayer; + s32 returnDemoWait; + Color_RGBA8 windowColor; + u8 actorSavedMass; +} DemoTalkData; + +typedef struct DemoData { + struct Actor* speaker; + struct Actor* listener; + s32 isAbleSpeaker; + s32 isAbleListener; + u16 orderData[DEMO_ORDER_MAX][DEMO_ORDER_VALUE_MAX]; + s8 changePlayerDestiny; + s32 state; + DemoRequest current; + DemoRequest request[DEMO_REQUEST_MAX]; + s32 requestId; + s32 priorityType; + s32 cameraType; + s32 keepCameraType; + + union { + DemoDoorData door; + DemoEMsgData emsg; + DemoTalkData talk; + } data; +} DemoData; + +extern DemoData* demo; + +struct Actor* mDemo_Get_talk_actor(void); +void mDemo_Set_OrderValue(s32 type, s32 idx, u16 value); +u16 mDemo_Get_OrderValue(s32 type, s32 idx); +void mDemo_Init_OrderValue(void); +void mDemo_Set_msg_num(s32 msgNo); +s32 mDemo_Get_Talk_Actors(struct Actor** speaker, struct Actor** listener); +void mDemo_Set_change_player_destiny(s8 destiny); +s32 mDemo_Get_change_player_destiny(void); +void mDemo_Clear_change_player_destiny(void); +void mDemo_Copy_change_player_destiny(void); +void mDemo_Set_use_zoom_sound(u8 useZoomSound); +s32 mDemo_Get_use_zoom_sound(void); +void mDemo_Set_talk_display_name(s8 displayName); +s32 mDemo_Get_talk_display_name(void); +void mDemo_Set_talk_change_player(u8 changePlayer); +s32 mDemo_Get_talk_change_player(void); +void mDemo_Set_talk_return_demo_wait(u8 returnDemoWait); +s32 mDemo_Get_talk_return_demo_wait(void); +void mDemo_Set_talk_turn(u8 turn); +s32 mDemo_Get_talk_turn(void); +void mDemo_Set_talk_window_color(Color_RGBA8* windowColor); +Color_RGBA8* mDemo_Get_talk_window_color_p(void); +void mDemo_Set_camera(u8 cameraType); +s32 mDemo_Get_camera(void); +s32 mDemo_CheckDemoType(void); +s32 change_camera(s32 cameraType); +s32 set_speak_default(void); +s32 set_report_default(void); +s32 set_talk_default(void); +s32 wait_talk_start(void); +s32 wait_talk_end(void); +s32 wait_scroll_start(void); +s32 set_door_default(void); +s32 wait_door_start(void); +s32 mDemo_Set_house_info(f32 size, s32 direct); +s32 wait_door2_start(void); +s16 get_title_no_for_event(s16 event); +s32 set_emsg_default(void); +s32 wait_emsg_start(void); +s32 wait_emsg_end(void); +f32 weight_of_talk_position(struct Actor* actor); +s32 allways_true(void); +s32 allways_false(void); +s32 scroll_check(void); +s32 scroll2_check(void); +s32 scroll3_check(void); +s32 door_check(void); +s32 outdoor_check(void); +s32 talk_check(void); +s32 speak_check(void); +s32 choice_demo(void); +void emsg_set(struct Actor* actor); +void init_demo(void); +void run_demo(void); +void main_proc(void); +void mDemo_stock_clear(void); +s32 mDemo_Request(s32 type, struct Actor* actor, DemoRequestFunc request); +s32 mDemo_Check(s32 type, struct Actor* actor); +s32 mDemo_Start(struct Actor* actor); +s32 mDemo_Check_and_Go(s32 type, struct Actor* actor); +s32 mDemo_End(struct Actor* actor); +void mDemo_Main(struct Game_Play* play); +void mDemo_Init(struct Game_Play* play); +s32 mDemo_CheckDemo(void); +s32 mDemo_CheckDemo4Event(void); +void mDemo_Set_SpeakerAble(void); +void mDemo_Set_ListenAble(void); +void mDemo_Unset_SpeakerAble(void); +void mDemo_Unset_ListenAble(void); +s32 mDemo_Check_SpeakerAble(void); +s32 mDemo_Check_ListenAble(void); +int mDemo_Check_DiffAngle_forTalk(s16 diffAngle); +void mDemo_KeepCamera(s32 cameraType); + + + +#endif diff --git a/include/m_msg_main.h b/include/m_msg_main.h index cbe841d..c06adbb 100644 --- a/include/m_msg_main.h +++ b/include/m_msg_main.h @@ -7,6 +7,7 @@ struct Game_Play; struct Actor; +struct Color_RGBA8; typedef struct MessageWindow { /* 0x000 */ UNK_TYPE1 unk_000[0x1B0]; @@ -16,13 +17,14 @@ typedef struct MessageWindow { MessageWindow* mMsg_Get_base_window_p(void); // void func_8009D200_jp(); // void func_8009D210_jp(); -// void func_8009D260_jp(); +s32 mMsg_Check_main_index(MessageWindow*, s32); // void func_8009D274_jp(); UNK_RET mMsg_Check_not_series_main_wait(UNK_PTR arg0); UNK_RET mMsg_Check_main_hide(UNK_PTR arg0); // void func_8009D308_jp(); // void func_8009D3B4_jp(); -// void func_8009D3E4_jp(); +s32 mMsg_request_main_appear(MessageWindow*, struct Actor*, s32 , struct Color_RGBA8*, + s32, s32); // void func_8009D458_jp(); // void func_8009D4A0_jp(); // void func_8009D4F0_jp(); diff --git a/include/m_player_lib.h b/include/m_player_lib.h index 456041e..ce6430e 100644 --- a/include/m_player_lib.h +++ b/include/m_player_lib.h @@ -63,7 +63,7 @@ void mPlib_Load_PlayerTexAndPallet(u8*, u8*, s32); // void func_800B21A0_jp(); // void func_800B21D0_jp(); // void func_800B21E0_jp(); -// void func_800B21F0_jp(); +s32 mPlib_Check_able_force_speak_label(struct Game_Play*, struct Actor*); // void func_800B2244_jp(); // void func_800B2284_jp(); // void func_800B22A4_jp(); @@ -73,8 +73,8 @@ void mPlib_Load_PlayerTexAndPallet(u8*, u8*, s32); void mPlib_request_main_invade_type1(struct Game_Play*); void mPlib_request_main_refuse_type1(struct Game_Play*); void mPlib_request_main_wait_type3(struct Game_Play*); -// void func_800B2450_jp(); -// void func_800B24A0_jp(); +s32 mPlib_request_main_talk_end_type1(struct Game_Play*, s32); +s32 mPlib_request_main_talk_type1(struct Game_Play*, struct Actor*, s32, s32); // void func_800B24F8_jp(); // void func_800B255C_jp(); // void func_800B25F4_jp(); @@ -82,8 +82,8 @@ void mPlib_request_main_wait_type3(struct Game_Play*); // void func_800B26E8_jp(); // void func_800B2720_jp(); // void func_800B2778_jp(); -// void func_800B27B0_jp(); -// void func_800B2814_jp(); +void mPlib_request_main_door_type1(struct Game_Play*, xyz_t*, s16, s32, struct Actor*); +void mPlib_request_main_door_type2(struct Game_Play*, xyz_t*, s16, s32, struct Actor*); // void func_800B286C_jp(); // void func_800B28B0_jp(); // void func_800B2908_jp(); @@ -100,18 +100,18 @@ void func_800B2AD0_jp(struct Game_Play*); // void func_800B2CD8_jp(); // void func_800B2D18_jp(); // void func_800B2D74_jp(); -// void func_800B2DAC_jp(); -// void func_800B2EBC_jp(); -// void func_800B2F1C_jp(); -// void func_800B2F7C_jp(); -// void func_800B2FDC_jp(); -// void func_800B30A4_jp(); +s32 mPlib_check_request_main_talk_type1_priority(struct Game_Play*); +s32 mPlib_check_request_main_speak_type1_priority(struct Game_Play*); +s32 mPlib_check_request_main_demo_geton_boat_wade_priority(struct Game_Play*); +s32 mPlib_check_request_main_door_type1_priority(struct Game_Play*); +s32 mPlib_check_request_main_wade_priority(struct Game_Play*); +s32 mPlib_check_request_main_demo_wade_priority(struct Game_Play*); // void func_800B3104_jp(); // void func_800B314C_jp(); // void func_800B31B4_jp(); // void func_800B321C_jp(); -// void func_800B3284_jp(); -// void func_800B32EC_jp(); +void mPlib_strength_request_main_door_priority(struct Game_Play*); +s32 mPlib_check_request_main_outdoor_priority(struct Game_Play*); // void func_800B32FC_jp(); // void func_800B3330_jp(); // void func_800B33AC_jp(); diff --git a/linker_scripts/jp/symbol_addrs_code.txt b/linker_scripts/jp/symbol_addrs_code.txt index c7b45d0..a416f05 100644 --- a/linker_scripts/jp/symbol_addrs_code.txt +++ b/linker_scripts/jp/symbol_addrs_code.txt @@ -317,8 +317,8 @@ func_8005E83C_jp = 0x8005E83C; // type:func func_8005E8F4_jp = 0x8005E8F4; // type:func func_8005E9B4_jp = 0x8005E9B4; // type:func func_8005E9C8_jp = 0x8005E9C8; // type:func -func_8005E9DC_jp = 0x8005E9DC; // type:func -func_8005E9F0_jp = 0x8005E9F0; // type:func +mBGMPsComp_volume_talk_start = 0x8005E9DC; // type:func +mBGMPsComp_volume_talk_end = 0x8005E9F0; // type:func func_8005EA14_jp = 0x8005EA14; // type:func func_8005EA24_jp = 0x8005EA24; // type:func func_8005EA38_jp = 0x8005EA38; // type:func @@ -337,7 +337,7 @@ func_8005ED44_jp = 0x8005ED44; // type:func func_8005ED78_jp = 0x8005ED78; // type:func func_8005ED98_jp = 0x8005ED98; // type:func func_8005EDC4_jp = 0x8005EDC4; // type:func -func_8005EDD8_jp = 0x8005EDD8; // type:func +mBGMForce_inform_end = 0x8005EDD8; // type:func func_8005EDEC_jp = 0x8005EDEC; // type:func mBGMForce_room_nonstop_start = 0x8005EE00; // type:func func_8005EE20_jp = 0x8005EE20; // type:func @@ -400,7 +400,7 @@ func_8006109C_jp = 0x8006109C; // type:func func_80061104_jp = 0x80061104; // type:func func_80061134_jp = 0x80061134; // type:func func_80061188_jp = 0x80061188; // type:func -func_800611D4_jp = 0x800611D4; // type:func +Camera2_request_main_talk = 0x800611D4; // type:func func_80061280_jp = 0x80061280; // type:func func_8006136C_jp = 0x8006136C; // type:func func_800613DC_jp = 0x800613DC; // type:func @@ -435,7 +435,7 @@ func_8006295C_jp = 0x8006295C; // type:func func_80062B24_jp = 0x80062B24; // type:func func_80062B74_jp = 0x80062B74; // type:func func_80062BA0_jp = 0x80062BA0; // type:func -func_80062C84_jp = 0x80062C84; // type:func +Camera2_request_main_item = 0x80062C84; // type:func func_80062CD8_jp = 0x80062CD8; // type:func func_80062DD8_jp = 0x80062DD8; // type:func func_80062E00_jp = 0x80062E00; // type:func @@ -451,7 +451,7 @@ func_80063170_jp = 0x80063170; // type:func func_800631C0_jp = 0x800631C0; // type:func func_800631EC_jp = 0x800631EC; // type:func func_8006328C_jp = 0x8006328C; // type:func -func_800632C8_jp = 0x800632C8; // type:func +Camera2_request_main_door = 0x800632C8; // type:func func_8006333C_jp = 0x8006333C; // type:func func_8006339C_jp = 0x8006339C; // type:func func_80063468_jp = 0x80063468; // type:func @@ -460,18 +460,18 @@ func_800635B8_jp = 0x800635B8; // type:func func_80063608_jp = 0x80063608; // type:func func_80063628_jp = 0x80063628; // type:func func_80063674_jp = 0x80063674; // type:func -func_8006370C_jp = 0x8006370C; // type:func +Camera2_request_main_simple_kirin = 0x8006370C; // type:func func_800637C8_jp = 0x800637C8; // type:func func_8006393C_jp = 0x8006393C; // type:func -func_800639A0_jp = 0x800639A0; // type:func +Camera2_request_main_simple = 0x800639A0; // type:func func_80063A34_jp = 0x80063A34; // type:func -func_80063AA0_jp = 0x80063AA0; // type:func +Camera2_main_Simple_AngleDistStd = 0x80063AA0; // type:func func_80063B1C_jp = 0x80063B1C; // type:func func_80063B8C_jp = 0x80063B8C; // type:func func_80063CA0_jp = 0x80063CA0; // type:func func_80063D10_jp = 0x80063D10; // type:func func_80063D38_jp = 0x80063D38; // type:func -func_80063D9C_jp = 0x80063D9C; // type:func +Camera2_request_main_listen_front_low_talk = 0x80063D9C; // type:func func_80063E14_jp = 0x80063E14; // type:func func_80063E94_jp = 0x80063E94; // type:func func_80063EF0_jp = 0x80063EF0; // type:func @@ -983,78 +983,78 @@ Debug_mode_output_sub = 0x8007AC1C; // type:func Debug_mode_zelda_malloc_info_output = 0x8007ADF8; // type:func Debug_mode_output = 0x8007AED8; // type:func mDemo_Get_talk_actor = 0x8007B410; // type:func -func_8007B44C_jp = 0x8007B44C; // type:func -func_8007B49C_jp = 0x8007B49C; // type:func -func_8007B4EC_jp = 0x8007B4EC; // type:func +mDemo_Set_OrderValue = 0x8007B44C; // type:func +mDemo_Get_OrderValue = 0x8007B49C; // type:func +mDemo_Init_OrderValue = 0x8007B4EC; // type:func mDemo_Set_msg_num = 0x8007B5C0; // type:func -func_8007B5F4_jp = 0x8007B5F4; // type:func -func_8007B650_jp = 0x8007B650; // type:func -func_8007B670_jp = 0x8007B670; // type:func -func_8007B684_jp = 0x8007B684; // type:func -func_8007B6A4_jp = 0x8007B6A4; // type:func -func_8007B724_jp = 0x8007B724; // type:func -func_8007B760_jp = 0x8007B760; // type:func +mDemo_Get_Talk_Actors = 0x8007B5F4; // type:func +mDemo_Set_change_player_destiny = 0x8007B650; // type:func +mDemo_Get_change_player_destiny = 0x8007B670; // type:func +mDemo_Clear_change_player_destiny = 0x8007B684; // type:func +mDemo_Copy_change_player_destiny = 0x8007B6A4; // type:func +mDemo_Set_use_zoom_sound = 0x8007B724; // type:func +mDemo_Get_use_zoom_sound = 0x8007B760; // type:func mDemo_Set_talk_display_name = 0x8007B79C; // type:func -func_8007B7DC_jp = 0x8007B7DC; // type:func -func_8007B818_jp = 0x8007B818; // type:func -func_8007B854_jp = 0x8007B854; // type:func -func_8007B890_jp = 0x8007B890; // type:func -func_8007B8CC_jp = 0x8007B8CC; // type:func -func_8007B908_jp = 0x8007B908; // type:func -func_8007B944_jp = 0x8007B944; // type:func +mDemo_Get_talk_display_name = 0x8007B7DC; // type:func +mDemo_Set_talk_change_player = 0x8007B818; // type:func +mDemo_Get_talk_change_player = 0x8007B854; // type:func +mDemo_Set_talk_return_demo_wait = 0x8007B890; // type:func +mDemo_Get_talk_return_demo_wait = 0x8007B8CC; // type:func +mDemo_Set_talk_turn = 0x8007B908; // type:func +mDemo_Get_talk_turn = 0x8007B944; // type:func mDemo_Set_talk_window_color = 0x8007B980; // type:func -func_8007B9E0_jp = 0x8007B9E0; // type:func +mDemo_Get_talk_window_color_p = 0x8007B9E0; // type:func mDemo_Set_camera = 0x8007BA1C; // type:func -func_8007BA38_jp = 0x8007BA38; // type:func -func_8007BA4C_jp = 0x8007BA4C; // type:func -func_8007BA84_jp = 0x8007BA84; // type:func -func_8007BC28_jp = 0x8007BC28; // type:func -func_8007BCE4_jp = 0x8007BCE4; // type:func -func_8007BD9C_jp = 0x8007BD9C; // type:func -func_8007BE58_jp = 0x8007BE58; // type:func -func_8007C00C_jp = 0x8007C00C; // type:func -func_8007C0B4_jp = 0x8007C0B4; // type:func -func_8007C0C0_jp = 0x8007C0C0; // type:func -func_8007C104_jp = 0x8007C104; // type:func -func_8007C24C_jp = 0x8007C24C; // type:func -func_8007C290_jp = 0x8007C290; // type:func -func_8007C3D8_jp = 0x8007C3D8; // type:func -func_8007C484_jp = 0x8007C484; // type:func -func_8007C570_jp = 0x8007C570; // type:func -func_8007C5EC_jp = 0x8007C5EC; // type:func +mDemo_Get_camera = 0x8007BA38; // type:func +mDemo_CheckDemoType = 0x8007BA4C; // type:func +change_camera = 0x8007BA84; // type:func +set_speak_default = 0x8007BC28; // type:func +set_report_default = 0x8007BCE4; // type:func +set_talk_default = 0x8007BD9C; // type:func +wait_talk_start = 0x8007BE58; // type:func +wait_talk_end = 0x8007C00C; // type:func +wait_scroll_start = 0x8007C0B4; // type:func +set_door_default = 0x8007C0C0; // type:func +wait_door_start = 0x8007C104; // type:func +mDemo_Set_house_info = 0x8007C24C; // type:func +wait_door2_start = 0x8007C290; // type:func +get_title_no_for_event = 0x8007C3D8; // type:func +set_emsg_default = 0x8007C484; // type:func +wait_emsg_start = 0x8007C570; // type:func +wait_emsg_end = 0x8007C5EC; // type:func weight_of_talk_position = 0x8007C6C0; // type:func -func_8007C808_jp = 0x8007C808; // type:func -func_8007C814_jp = 0x8007C814; // type:func -func_8007C820_jp = 0x8007C820; // type:func -func_8007C844_jp = 0x8007C844; // type:func -func_8007C868_jp = 0x8007C868; // type:func -func_8007C88C_jp = 0x8007C88C; // type:func -func_8007C8B0_jp = 0x8007C8B0; // type:func -func_8007C8D4_jp = 0x8007C8D4; // type:func -func_8007C8FC_jp = 0x8007C8FC; // type:func -func_8007C924_jp = 0x8007C924; // type:func -func_8007CB28_jp = 0x8007CB28; // type:func -func_8007CB50_jp = 0x8007CB50; // type:func -func_8007CBEC_jp = 0x8007CBEC; // type:func -func_8007CC9C_jp = 0x8007CC9C; // type:func +allways_true = 0x8007C808; // type:func +allways_false = 0x8007C814; // type:func +scroll_check = 0x8007C820; // type:func +scroll2_check = 0x8007C844; // type:func +scroll3_check = 0x8007C868; // type:func +door_check = 0x8007C88C; // type:func +outdoor_check = 0x8007C8B0; // type:func +talk_check = 0x8007C8D4; // type:func +speak_check = 0x8007C8FC; // type:func +choice_demo = 0x8007C924; // type:func +emsg_set = 0x8007CB28; // type:func +init_demo = 0x8007CB50; // type:func +run_demo = 0x8007CBEC; // type:func +main_proc = 0x8007CC9C; // type:func mDemo_stock_clear = 0x8007CDB8; // type:func mDemo_Request = 0x8007CDD8; // type:func mDemo_Check = 0x8007CF00; // type:func -func_8007CF34_jp = 0x8007CF34; // type:func -func_8007CF44_jp = 0x8007CF44; // type:func +mDemo_Start = 0x8007CF34; // type:func +mDemo_Check_and_Go = 0x8007CF44; // type:func mDemo_End = 0x8007CF84; // type:func mDemo_Main = 0x8007CFB4; // type:func -func_8007CFD8_jp = 0x8007CFD8; // type:func -func_8007D030_jp = 0x8007D030; // type:func -func_8007D048_jp = 0x8007D048; // type:func -func_8007D080_jp = 0x8007D080; // type:func +mDemo_Init = 0x8007CFD8; // type:func +mDemo_CheckDemo = 0x8007D030; // type:func +mDemo_CheckDemo4Event = 0x8007D048; // type:func +mDemo_Set_SpeakerAble = 0x8007D080; // type:func mDemo_Set_ListenAble = 0x8007D098; // type:func -func_8007D0B0_jp = 0x8007D0B0; // type:func -func_8007D0C4_jp = 0x8007D0C4; // type:func -func_8007D0D8_jp = 0x8007D0D8; // type:func +mDemo_Unset_SpeakerAble = 0x8007D0B0; // type:func +mDemo_Unset_ListenAble = 0x8007D0C4; // type:func +mDemo_Check_SpeakerAble = 0x8007D0D8; // type:func mDemo_Check_ListenAble = 0x8007D0EC; // type:func mDemo_Check_DiffAngle_forTalk = 0x8007D100; // type:func -func_8007D128_jp = 0x8007D128; // type:func +mDemo_KeepCamera = 0x8007D128; // type:func func_8007D140_jp = 0x8007D140; // type:func func_8007D180_jp = 0x8007D180; // type:func mEv_ClearEventSaveInfo = 0x8007D1A8; // type:func @@ -1904,13 +1904,13 @@ func_8009D1A8_jp = 0x8009D1A8; // type:func mMsg_Get_base_window_p = 0x8009D1F0; // type:func func_8009D200_jp = 0x8009D200; // type:func func_8009D210_jp = 0x8009D210; // type:func -func_8009D260_jp = 0x8009D260; // type:func +mMsg_Check_main_index = 0x8009D260; // type:func func_8009D274_jp = 0x8009D274; // type:func mMsg_Check_not_series_main_wait = 0x8009D294; // type:func mMsg_Check_main_hide = 0x8009D2E8; // type:func func_8009D308_jp = 0x8009D308; // type:func func_8009D3B4_jp = 0x8009D3B4; // type:func -func_8009D3E4_jp = 0x8009D3E4; // type:func +mMsg_request_main_appear = 0x8009D3E4; // type:func func_8009D458_jp = 0x8009D458; // type:func func_8009D4A0_jp = 0x8009D4A0; // type:func func_8009D4F0_jp = 0x8009D4F0; // type:func @@ -2557,7 +2557,7 @@ func_800B2170_jp = 0x800B2170; // type:func func_800B21A0_jp = 0x800B21A0; // type:func func_800B21D0_jp = 0x800B21D0; // type:func func_800B21E0_jp = 0x800B21E0; // type:func -func_800B21F0_jp = 0x800B21F0; // type:func +mPlib_Check_able_force_speak_label = 0x800B21F0; // type:func func_800B2244_jp = 0x800B2244; // type:func func_800B2284_jp = 0x800B2284; // type:func func_800B22A4_jp = 0x800B22A4; // type:func @@ -2567,8 +2567,8 @@ func_800B2350_jp = 0x800B2350; // type:func mPlib_request_main_invade_type1 = 0x800B23A4; // type:func mPlib_request_main_refuse_type1 = 0x800B23DC; // type:func mPlib_request_main_wait_type3 = 0x800B2414; // type:func -func_800B2450_jp = 0x800B2450; // type:func -func_800B24A0_jp = 0x800B24A0; // type:func +mPlib_request_main_talk_end_type1 = 0x800B2450; // type:func +mPlib_request_main_talk_type1 = 0x800B24A0; // type:func func_800B24F8_jp = 0x800B24F8; // type:func func_800B255C_jp = 0x800B255C; // type:func func_800B25F4_jp = 0x800B25F4; // type:func @@ -2576,8 +2576,8 @@ func_800B2698_jp = 0x800B2698; // type:func func_800B26E8_jp = 0x800B26E8; // type:func func_800B2720_jp = 0x800B2720; // type:func func_800B2778_jp = 0x800B2778; // type:func -func_800B27B0_jp = 0x800B27B0; // type:func -func_800B2814_jp = 0x800B2814; // type:func +mPlib_request_main_door_type1 = 0x800B27B0; // type:func +mPlib_request_main_door_type2 = 0x800B2814; // type:func func_800B286C_jp = 0x800B286C; // type:func func_800B28B0_jp = 0x800B28B0; // type:func func_800B2908_jp = 0x800B2908; // type:func @@ -2594,18 +2594,18 @@ func_800B2C80_jp = 0x800B2C80; // type:func func_800B2CD8_jp = 0x800B2CD8; // type:func func_800B2D18_jp = 0x800B2D18; // type:func func_800B2D74_jp = 0x800B2D74; // type:func -func_800B2DAC_jp = 0x800B2DAC; // type:func -func_800B2EBC_jp = 0x800B2EBC; // type:func -func_800B2F1C_jp = 0x800B2F1C; // type:func -func_800B2F7C_jp = 0x800B2F7C; // type:func -func_800B2FDC_jp = 0x800B2FDC; // type:func -func_800B30A4_jp = 0x800B30A4; // type:func +mPlib_check_request_main_talk_type1_priority = 0x800B2DAC; // type:func +mPlib_check_request_main_speak_type1_priority = 0x800B2EBC; // type:func +mPlib_check_request_main_demo_geton_boat_wade_priority = 0x800B2F1C; // type:func +mPlib_check_request_main_door_type1_priority = 0x800B2F7C; // type:func +mPlib_check_request_main_wade_priority = 0x800B2FDC; // type:func +mPlib_check_request_main_demo_wade_priority = 0x800B30A4; // type:func func_800B3104_jp = 0x800B3104; // type:func func_800B314C_jp = 0x800B314C; // type:func func_800B31B4_jp = 0x800B31B4; // type:func func_800B321C_jp = 0x800B321C; // type:func -func_800B3284_jp = 0x800B3284; // type:func -func_800B32EC_jp = 0x800B32EC; // type:func +mPlib_strength_request_main_door_priority = 0x800B3284; // type:func +mPlib_check_request_main_outdoor_priority = 0x800B32EC; // type:func func_800B32FC_jp = 0x800B32FC; // type:func func_800B3330_jp = 0x800B3330; // type:func func_800B33AC_jp = 0x800B33AC; // type:func @@ -4391,15 +4391,15 @@ D_80104A0C_jp = 0x80104A0C; // D_80104A10_jp = 0x80104A10; // D_80104A14_jp = 0x80104A14; // D_80104A18_jp = 0x80104A18; // -D_FLT_80104A20_jp = 0x80104A20; // type:f32 -D_80104A60_jp = 0x80104A60; // type:s16 -D_80104A70_jp = 0x80104A70; // +direct_vector = 0x80104A20; // type:f32 +direct_back_angle = 0x80104A60; // type:s16 +demo = 0x80104A70; // D_80104A74_jp = 0x80104A74; // D_80104A90_jp = 0x80104A90; // D_80104AAC_jp = 0x80104AAC; // D_80104AE4_jp = 0x80104AE4; // -D_80104AE8_jp = 0x80104AE8; // -D_80104B20_jp = 0x80104B20; // +wait_start = 0x80104AE8; // +wait_end = 0x80104B20; // D_80104B60_jp = 0x80104B60; // D_80104F2C_jp = 0x80104F2C; // D_80104F90_jp = 0x80104F90; // @@ -6009,7 +6009,7 @@ debug_display = 0x80138E60; // B_80138E70_jp = 0x80138E70; // type:s8 B_80138E73_jp = 0x80138E73; // B_80139C30_jp = 0x80139C30; // -B_80139C40_jp = 0x80139C40; // +demo_data = 0x80139C40; // B_80139F70_jp = 0x80139F70; // B_80139F98_jp = 0x80139F98; // B_8013A098_jp = 0x8013A098; // type:u8 diff --git a/src/code/m_demo.c b/src/code/m_demo.c new file mode 100644 index 0000000..b6562e7 --- /dev/null +++ b/src/code/m_demo.c @@ -0,0 +1,928 @@ +#include "m_demo.h" +#include "overlays/gamestates/ovl_play/m_play.h" +#include "overlays/actors/player_actor/m_player.h" +#include "m_msg_main.h" +#include "m_player_lib.h" +#include "lib/ultralib/include/ido/memory.h" +#include "libc/math.h" +#include "m_field_info.h" +#include "audio.h" +#include "67E840.h" + +f32 direct_vector[DEMO_DIRECT_MAX][2] = { { -1.0f, 0.0f }, { -M_SQRT2, M_SQRT2 }, { 0.0f, 1.0f }, + { M_SQRT2, M_SQRT2 }, { 1.0f, 0.0f }, { M_SQRT2, -M_SQRT2 }, + { 0.0f, -1.0f }, { -M_SQRT2, -M_SQRT2 } }; + +s16 direct_back_angle[DEMO_DIRECT_MAX] = { 0x0000, 0xE000, 0xC000, 0xA000, 0x8000, 0x6000, 0x4000, 0x2000 }; + +DemoData demo_data; + +DemoData* demo = &demo_data; + +Actor* mDemo_Get_talk_actor() { + s32 type = demo->current.type; + + if (type == DEMO_TYPE_TALK || type == DEMO_TYPE_SPEAK || type == DEMO_TYPE_REPORT) { + return demo->current.actor; + } + + return NULL; +} + +void mDemo_Set_OrderValue(s32 type, s32 idx, u16 value) { + if (type >= DEMO_TYPE_NONE && type < DEMO_TYPE_OUTDOOR && idx >= 0 && idx < DEMO_ORDER_VALUE_MAX) { + demo->orderData[type][idx] = value; + } +} + +u16 mDemo_Get_OrderValue(s32 type, s32 idx) { + if (type >= DEMO_TYPE_NONE && type < DEMO_TYPE_OUTDOOR && idx >= 0 && idx < DEMO_ORDER_VALUE_MAX) { + return demo->orderData[type][idx]; + } else { + return 0; + } +} + +void mDemo_Init_OrderValue() { + s32 i; + s32 j; + + for (i = 0; i < DEMO_ORDER_MAX; i++) { + for (j = 0; j < DEMO_ORDER_VALUE_MAX; j++) { + demo->orderData[i][j] = 0; + } + } +} + +void mDemo_Set_msg_num(s32 msgNo) { + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + demo->data.talk.msgNo = msgNo; + } +} + +s32 mDemo_Get_Talk_Actors(Actor** speaker, Actor** listener) { + s32 type = demo->current.type; + + if (type == DEMO_TYPE_TALK || type == DEMO_TYPE_SPEAK || type == DEMO_TYPE_REPORT) { + speaker[0] = demo->speaker; + listener[0] = demo->listener; + return TRUE; + + } else { + speaker[0] = NULL; + listener[0] = NULL; + + return FALSE; + } +} + +void mDemo_Set_change_player_destiny(s8 destiny) { + demo->changePlayerDestiny = destiny; +} + +s32 mDemo_Get_change_player_destiny() { + return demo->changePlayerDestiny; +} + +void mDemo_Clear_change_player_destiny() { + mDemo_Set_change_player_destiny(-1); +} + +void mDemo_Copy_change_player_destiny() { + if (mDemo_Get_change_player_destiny() >= 0) { + PrivateDestiny* destiny = &common_data.privateInfo->destiny; + lbRTC_time_c* rtcTime = &common_data.time.rtcTime; + + destiny->receivedTime.sec = rtcTime->sec; + destiny->receivedTime.min = rtcTime->min; + destiny->receivedTime.hour = rtcTime->hour; + destiny->receivedTime.day = rtcTime->day; + destiny->receivedTime.weekday = rtcTime->weekday; + destiny->receivedTime.month = rtcTime->month; + destiny->receivedTime.year = rtcTime->year; + destiny->type = mDemo_Get_change_player_destiny(); + mDemo_Clear_change_player_destiny(); + } +} + +void mDemo_Set_use_zoom_sound(u8 useZoomSound) { + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + demo->data.talk.useZoomSound = useZoomSound; + } +} + +s32 mDemo_Get_use_zoom_sound() { + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + return demo->data.talk.useZoomSound; + } else { + return 0; + } +} + +void mDemo_Set_talk_display_name(s8 displayName) { + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + demo->data.talk.displayName = displayName; + } +} + +s32 mDemo_Get_talk_display_name() { + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + return demo->data.talk.displayName; + } else { + return 0; + } +} + +void mDemo_Set_talk_change_player(u8 changePlayer) { + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + demo->data.talk.changePlayer = changePlayer; + } +} + +s32 mDemo_Get_talk_change_player() { + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + return demo->data.talk.changePlayer; + } else { + return 0; + } +} + +void mDemo_Set_talk_return_demo_wait(u8 returnDemoWait) { + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + demo->data.talk.returnDemoWait = returnDemoWait; + } +} + +s32 mDemo_Get_talk_return_demo_wait() { + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + return demo->data.talk.returnDemoWait; + } else { + return 0; + } +} + +void mDemo_Set_talk_turn(u8 turn) { + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + demo->data.talk.turn = turn; + } +} + +s32 mDemo_Get_talk_turn() { + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + return demo->data.talk.turn; + } else { + return 0; + } +} + +void mDemo_Set_talk_window_color(Color_RGBA8* windowColor) { + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + + demo->data.talk.windowColor = *windowColor; + } else if (demo->current.type == DEMO_TYPE_EVENTMSG) { + + demo->data.emsg.windowColor = *windowColor; + } +} + +Color_RGBA8* mDemo_Get_talk_window_color_p() { + + if (demo->current.type == DEMO_TYPE_TALK || demo->current.type == DEMO_TYPE_SPEAK || + demo->current.type == DEMO_TYPE_REPORT) { + return &demo->data.talk.windowColor; + } else { + return NULL; + } +} + +void mDemo_Set_camera(u8 cameraType) { + demo->cameraType = cameraType; +} + +s32 mDemo_Get_camera() { + return demo->cameraType; +} + +s32 mDemo_CheckDemoType() { + s32 demoType; + + if (mDemo_CheckDemo()) { + demoType = demo->current.type; + } else { + demoType = DEMO_TYPE_NONE; + } + + return demoType; +} + +s32 change_camera(s32 cameraType) { + Player* player = get_player_actor_withoutCheck((Game_Play*)gamePT); + Camera2* camera = &((Game_Play*)gamePT)->camera; + + if (cameraType == camera->unk60) { + return FALSE; + } + + switch (cameraType) { + case 3: + Camera2_request_main_talk(((Game_Play*)gamePT), &player->actor, demo->current.actor, DEMO_CAMERA_PRIORITY); + break; + case 5: + Camera2_request_main_item(((Game_Play*)gamePT), 0, DEMO_CAMERA_PRIORITY); + break; + case 7: { + Camera2_request_main_door(((Game_Play*)gamePT), &player->actor, + demo->current.type == DEMO_TYPE_OUTDOOR ? 0 : 1, DEMO_CAMERA_PRIORITY); + } break; + case 6: { + s_xyz angle; + f32 dist; + if (demo->current.type == DEMO_TYPE_EVENTMSG) { + + Camera2_main_Simple_AngleDistStd(((Game_Play*)gamePT), &angle, &dist); + Camera2_request_main_simple(((Game_Play*)gamePT), &player->actor.world.pos, &angle, dist, 0, + DEMO_CAMERA_PRIORITY); + } + break; + } + case 9: + if (demo->current.actor->name == 0x79) { + Camera2_request_main_listen_front_low_talk(((Game_Play*)gamePT), &player->actor, demo->current.actor, + DEMO_CAMERA_PRIORITY); + } + break; + case 8: + if (demo->current.actor->name == 0x2E) { + Camera2_request_main_simple_kirin(((Game_Play*)gamePT), &demo->current.actor->world.pos, + DEMO_CAMERA_PRIORITY - 1); + } + break; + case 1: + Camera2_request_main_normal((Game_Play*)gamePT, 0, DEMO_CAMERA_PRIORITY - 1); + break; + case 12: + break; + } + + return TRUE; +} + +s32 set_speak_default() { + Player* player; + + demo->data.talk.msgNo = 0; + demo->data.talk.turn = FALSE; + demo->data.talk.displayName = TRUE; + demo->data.talk.changePlayer = TRUE; + demo->data.talk.returnDemoWait = FALSE; + demo->data.talk.useZoomSound = TRUE; + demo->data.talk.windowColor.r = DEMO_WINDOW_COLOR_R; + demo->data.talk.windowColor.g = DEMO_WINDOW_COLOR_G; + demo->data.talk.windowColor.b = DEMO_WINDOW_COLOR_B; + demo->data.talk.windowColor.a = DEMO_WINDOW_COLOR_A; + demo->cameraType = 3; + mDemo_Unset_SpeakerAble(); + mDemo_Unset_ListenAble(); + + player = get_player_actor_withoutCheck((Game_Play*)gamePT); + demo->speaker = &player->actor; + demo->listener = demo->current.actor; + return TRUE; +} + +s32 set_report_default() { + Player* player; + + demo->data.talk.msgNo = 0; + demo->data.talk.turn = FALSE; + demo->data.talk.displayName = FALSE; + demo->data.talk.changePlayer = FALSE; + demo->data.talk.returnDemoWait = FALSE; + demo->data.talk.useZoomSound = TRUE; + demo->data.talk.windowColor.r = DEMO_WINDOW_COLOR_R; + demo->data.talk.windowColor.g = DEMO_WINDOW_COLOR_G; + demo->data.talk.windowColor.b = DEMO_WINDOW_COLOR_B; + demo->data.talk.windowColor.a = DEMO_WINDOW_COLOR_A; + demo->cameraType = 1; + mDemo_Set_SpeakerAble(); + mDemo_Unset_ListenAble(); + + player = get_player_actor_withoutCheck((Game_Play*)gamePT); + demo->speaker = &player->actor; + demo->listener = demo->current.actor; + return TRUE; +} + +s32 set_talk_default() { + Player* player; + + demo->data.talk.msgNo = 0; + demo->data.talk.turn = TRUE; + demo->data.talk.displayName = TRUE; + demo->data.talk.changePlayer = TRUE; + demo->data.talk.returnDemoWait = FALSE; + demo->data.talk.useZoomSound = TRUE; + demo->data.talk.windowColor.r = DEMO_WINDOW_COLOR_R; + demo->data.talk.windowColor.g = DEMO_WINDOW_COLOR_G; + demo->data.talk.windowColor.b = DEMO_WINDOW_COLOR_B; + demo->data.talk.windowColor.a = DEMO_WINDOW_COLOR_A; + demo->cameraType = 3; + mDemo_Unset_SpeakerAble(); + mDemo_Unset_ListenAble(); + + player = get_player_actor_withoutCheck((Game_Play*)gamePT); + demo->speaker = &player->actor; + demo->listener = demo->current.actor; + return TRUE; +} + +s32 wait_talk_start() { + Player* player = get_player_actor_withoutCheck((Game_Play*)gamePT); + + if (demo->data.talk.changePlayer) { + if (mPlib_request_main_talk_type1((Game_Play*)gamePT, demo->current.actor, demo->data.talk.turn, FALSE) == + FALSE) { + return FALSE; + } + } else { + mDemo_Set_SpeakerAble(); + } + + if (mDemo_Check_SpeakerAble() && mDemo_Check_ListenAble()) { + MessageWindow* window = mMsg_Get_base_window_p(); + + mDemo_Init_OrderValue(); + + if (mMsg_Check_main_index(window, 1) == FALSE) { + player->actor.flags |= ACTOR_FLAG_40000000; + demo->current.actor->flags |= ACTOR_FLAG_40000000; + demo->data.talk.actorSavedMass = demo->current.actor->colStatus.mass; + demo->current.actor->colStatus.mass = MASS_IMMOVABLE; + mMsg_request_main_appear(window, demo->current.actor, demo->data.talk.displayName, + &demo->data.talk.windowColor, demo->data.talk.msgNo, DEMO_MSG_PRIORITY); + + if (demo->data.talk.useZoomSound) { + u16 arg0; + + if (demo->cameraType == 3) { + arg0 = 0x14; + } else { + arg0 = 4; + } + + sAdo_SysTrgStart(arg0); + } + + if (FI_GET_TYPE(mFI_GetFieldId()) != 0x5000 && demo->data.talk.msgNo != 0x07DD && + demo->data.talk.msgNo != 0x0949 && demo->data.talk.msgNo != 0x0965 && demo->data.talk.msgNo != 0x07DE) { + mBGMPsComp_volume_talk_start(); + } + + return TRUE; + } + } + + return FALSE; +} + +s32 wait_talk_end() { + if (mMsg_Check_main_hide(mMsg_Get_base_window_p()) || demo->state == DEMO_STATE_STOP) { + if (demo->data.talk.changePlayer) { + mPlib_request_main_talk_end_type1((Game_Play*)gamePT, demo->data.talk.returnDemoWait); + } + + demo->current.actor->colStatus.mass = demo->data.talk.actorSavedMass; + mDemo_Copy_change_player_destiny(); + + if (FI_GET_TYPE(mFI_GetFieldId()) != 0x5000) { + mBGMPsComp_volume_talk_end(); + } + + return TRUE; + } + + return FALSE; +} + +s32 wait_scroll_start() { + return TRUE; +} + +s32 set_door_default() { + demo->data.door.type = DEMO_TYPE_NONE; + demo->data.door.houseInfo.size = 80.0f; + demo->data.door.houseInfo.direct = DEMO_DIRECT_S; + demo->cameraType = 1; + return TRUE; +} + +s32 wait_door_start() { + Player* player = get_player_actor_withoutCheck((Game_Play*)gamePT); + xyz_t pos; + Actor* actor = (Actor*)(get_player_actor_withoutCheck((Game_Play*)gamePT)->unk_122C((Game_Play*)gamePT)); + s16 backAngle; + f32 sizeAdjust; + + if (demo->current.actor == actor) { + return TRUE; + } else { + sizeAdjust = demo->data.door.houseInfo.size / 2.0f + 20.0f; + + pos.x = demo->current.actor->world.pos.x + sizeAdjust * direct_vector[demo->data.door.houseInfo.direct][1]; + pos.y = demo->current.actor->world.pos.y; + pos.z = demo->current.actor->world.pos.z + sizeAdjust * direct_vector[demo->data.door.houseInfo.direct][0]; + + backAngle = direct_back_angle[demo->data.door.houseInfo.direct]; + player->actor.flags |= ACTOR_FLAG_40000000; + demo->current.actor->flags |= ACTOR_FLAG_40000000; + + mPlib_request_main_door_type1((Game_Play*)gamePT, &pos, backAngle, demo->data.door.type, demo->current.actor); + mPlib_strength_request_main_door_priority((Game_Play*)gamePT); + } + + return FALSE; +} + +s32 mDemo_Set_house_info(f32 size, s32 direct) { + if (demo->current.type == DEMO_TYPE_DOOR || demo->current.type == DEMO_TYPE_DOOR2) { + demo->data.door.houseInfo.size = size; + demo->data.door.houseInfo.direct = direct; + return TRUE; + } + + return FALSE; +} + +s32 wait_door2_start() { + Player* player = get_player_actor_withoutCheck((Game_Play*)gamePT); + xyz_t pos; + Actor* actor = (Actor*)get_player_actor_withoutCheck((Game_Play*)gamePT)->unk_122C((Game_Play*)gamePT); + s16 backAngle; + f32 sizeAdjust; + + if (demo->current.actor == actor) { + return TRUE; + } else { + sizeAdjust = demo->data.door.houseInfo.size / 2.0f + 20.0f; + + pos.x = demo->current.actor->world.pos.x + sizeAdjust * direct_vector[demo->data.door.houseInfo.direct][1]; + pos.y = demo->current.actor->world.pos.y; + pos.z = demo->current.actor->world.pos.z + sizeAdjust * direct_vector[demo->data.door.houseInfo.direct][0]; + + backAngle = direct_back_angle[demo->data.door.houseInfo.direct]; + player->actor.flags |= ACTOR_FLAG_40000000; + demo->current.actor->flags |= ACTOR_FLAG_40000000; + + mPlib_request_main_door_type2((Game_Play*)gamePT, &pos, backAngle, demo->data.door.type, demo->current.actor); + mPlib_strength_request_main_door_priority((Game_Play*)gamePT); + } + + return FALSE; +} + +s16 get_title_no_for_event(s16 event) { + switch (event) { + case 11: + return 0; + case 12: + return 1; + case 8: + return 2; + case 10: + return 3; + case 7: + return 4; + case 9: + return 5; + case 16: + return 6; + case 22: + return 7; + case 21: + return 8; + case 6: + return 9; + case 3: + return 0xA; + case 2: + case 20: + return 0xB; + case 13: + return 0xC; + case 5: + return 0xD; + default: + return -1; + } +} + +s32 set_emsg_default() { + s16 id = common_data.unk_107E2; + s16 flags = common_data.unk_107E4; + s16 titleNo; + + memcpy(&demo->data.emsg.doorData, &common_data.eventDoorData, sizeof(DoorData)); + + if (flags == 1) { + demo->data.emsg.msgNo = 0x1743; + } else { + demo->data.emsg.msgNo = 0x1799; + } + + titleNo = get_title_no_for_event(id); + + if (titleNo >= 0) { + demo->data.emsg.msgNo += titleNo; + } + demo->data.emsg.windowColor.r = DEMO_WINDOW_COLOR_R; + demo->data.emsg.windowColor.g = DEMO_WINDOW_COLOR_G; + demo->data.emsg.windowColor.b = DEMO_WINDOW_COLOR_B; + demo->data.emsg.windowColor.a = DEMO_WINDOW_COLOR_A; + demo->cameraType = 6; + demo->data.emsg.msgDelayTimer = 0; + demo->data.emsg.sceneDelayTimer = 30; + + return TRUE; +} + +s32 wait_emsg_start() { + MessageWindow* window = mMsg_Get_base_window_p(); + + if (demo->data.emsg.msgDelayTimer <= 0) { + if (demo->data.emsg.msgNo != 0) { + mMsg_request_main_appear(window, NULL, FALSE, &demo->data.emsg.windowColor, demo->data.emsg.msgNo, + DEMO_MSG_PRIORITY); + } + + common_data.unk_107E4 = 2; + return TRUE; + } else { + demo->data.emsg.msgDelayTimer--; + } + + return FALSE; +} + +s32 wait_emsg_end() { + Game_Play* play = (Game_Play*)gamePT; + MessageWindow* window = mMsg_Get_base_window_p(); + + if (mMsg_Check_main_hide(window)) { + demo->data.emsg.sceneDelayTimer--; + } + + if (demo->data.emsg.sceneDelayTimer <= 0 || demo->state == DEMO_STATE_STOP) { + if (goto_other_scene(play, &demo->data.emsg.doorData, FALSE)) { + play->unk_1EE1 = demo->data.emsg.doorData.wipeType; + play->unk_1EE0 = 11; + common_data.unk_1014B = demo->data.emsg.doorData.wipeType; + mBGMForce_inform_end(); + + return TRUE; + } else { + return FALSE; + } + } + + return FALSE; +} + +f32 weight_of_talk_position(Actor* actor) { + f32 distY; + f32 distFact; + Player* player = get_player_actor_withoutCheck((Game_Play*)gamePT); + s16 diffY = (player->actor.shape.rot.y - actor->yawTowardsPlayer); + f32 angleFactor; + + distY = player->actor.world.pos.y - actor->world.pos.y; + if (distY < 0.0f) { + distY = -distY; + } + + if (diffY < 0) { + diffY = diffY - 0x8000; + } else { + diffY = -diffY - 0x8000; + } + + if (actor->xzDistToPlayer <= actor->unk_144 && distY <= 33.0f && diffY <= 12530) { + angleFactor = (1.0f - (actor->xzDistToPlayer / 55.0f)); + + distFact = angleFactor; + + if (distFact < 0.0f) { + distFact = 0.0f; + } + + angleFactor = 1.0f - ((f32)diffY / 12530.0f); + return SQ(angleFactor) * 0.6f + SQ(distFact) * 0.4f; + } else { + return -99.0f; + } +} + +s32 allways_true() { + return TRUE; +} + +s32 allways_false() { + return FALSE; +} + +s32 scroll_check() { + return mPlib_check_request_main_wade_priority((Game_Play*)gamePT); +} + +s32 scroll2_check() { + return mPlib_check_request_main_demo_wade_priority((Game_Play*)gamePT); +} + +s32 scroll3_check() { + return mPlib_check_request_main_demo_geton_boat_wade_priority((Game_Play*)gamePT); +} + +s32 door_check() { + return mPlib_check_request_main_door_type1_priority((Game_Play*)gamePT); +} + +s32 outdoor_check() { + return mPlib_check_request_main_outdoor_priority((Game_Play*)gamePT); +} + +s32 talk_check() { + return mPlib_check_request_main_talk_type1_priority((Game_Play*)gamePT) != FALSE; +} + +s32 speak_check() { + return mPlib_check_request_main_speak_type1_priority((Game_Play*)gamePT) != FALSE; +} + +typedef s32 (*DemoFunc)(void); + +s32 choice_demo() { + static DemoFunc check_func[] = { allways_true, scroll_check, allways_true, scroll3_check, allways_true, + scroll2_check, door_check, talk_check, speak_check, allways_true, + outdoor_check, allways_true, allways_true, allways_true }; + static DemoFunc default_set_func[] = { 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, allways_true, allways_true, + set_emsg_default, allways_true }; + f32 maxTalkWeight = 0.0f; + DemoRequest* req; + s32 idx = -1; + s32 i = 0; + + for (; i < demo->requestId; i++) { + s32 type; + + req = &demo->request[i]; + type = req->type; + + if (mEv_CheckTitleDemo() != 0 && type != DEMO_TYPE_SCROLL && + ((mEv_CheckTitleDemo() != -9 || type != DEMO_TYPE_SPEAK || req->actor == NULL || + req->actor->name != 0x99))) { + continue; + } + + if (type >= demo->priorityType && (*check_func[type])() != FALSE) { + if (type == DEMO_TYPE_TALK) { + if (chkTrigger(A_BUTTON) && req->talkWeight > maxTalkWeight) { + maxTalkWeight = req->talkWeight; + idx = i; + } + } else { + idx = i; + break; + } + } + } + + if (idx != -1) { + memcpy(&demo->current, &demo->request[idx], sizeof(DemoRequest)); + default_set_func[demo->current.type](); + + if (demo->current.proc != NULL) { + demo->current.proc(demo->current.actor); + } + + demo->state = 1; + } + + return idx; +} + +void emsg_set(UNUSED Actor* actor) { + static Color_RGBA8 win_color = { 175, 255, 255, 255 }; + + mDemo_Set_talk_window_color(&win_color); +} + +void init_demo() { + s32 initialType = common_data.startDemoRequest.type; + + memset(&demo->current, 0, sizeof(DemoRequest)); + demo->state = DEMO_STATE_WAIT; + demo->requestId = 0; + demo->priorityType = 0; + demo->cameraType = 1; + demo->keepCameraType = 0; + + switch (initialType) { + case DEMO_TYPE_EVENTMSG: + mDemo_Request(initialType, NULL, &emsg_set); + common_data.startDemoRequest.type = DEMO_TYPE_NONE; + break; + } +} + +DemoFunc wait_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, + allways_true, allways_true, wait_emsg_start, allways_true }; + +DemoFunc wait_end[] = { allways_false, allways_false, allways_false, allways_false, allways_false, + allways_false, allways_false, wait_talk_end, wait_talk_end, wait_talk_end, + allways_false, allways_false, wait_emsg_end, allways_false }; + +void run_demo() { + if (demo->state == DEMO_STATE_READY) { + if (wait_start[demo->current.type]()) { + change_camera(demo->cameraType); + demo->state = DEMO_STATE_RUN; + } + } else if (demo->state == DEMO_STATE_RUN && wait_end[demo->current.type]()) { + demo->state = DEMO_STATE_STOP; + } +} + +void main_proc() { + Player* player = get_player_actor_withoutCheck((Game_Play*)gamePT); + + if (demo->state == DEMO_STATE_STOP) { + player->actor.flags &= ~ACTOR_FLAG_40000000; + + if (demo->current.actor != NULL) { + demo->current.actor->flags &= ~ACTOR_FLAG_40000000; + } + + demo->cameraType = 1; + if (demo->keepCameraType != 0 && demo->current.actor != NULL) { + change_camera(demo->keepCameraType); + } else { + change_camera(demo->cameraType); + } + + demo->keepCameraType = 0; + memset(&demo->current, 0, sizeof(DemoRequest)); + demo->state = DEMO_STATE_WAIT; + } + + if (demo->state == DEMO_STATE_WAIT) { + choice_demo(); + } + + if (demo->state != DEMO_STATE_WAIT) { + run_demo(); + } +} + +void mDemo_stock_clear() { + demo->requestId = 0; + demo->priorityType = DEMO_TYPE_NONE; +} + +s32 mDemo_Request(s32 type, Actor* actor, DemoRequestFunc request) { + f32 weight = 1.0f; + DemoRequest* req; + s32 requestId = demo->requestId; + + if (requestId < DEMO_REQUEST_MAX) { + if (type >= demo->priorityType) { + req = &demo->request[requestId]; + + if (type == DEMO_TYPE_TALK) { + weight = weight_of_talk_position(actor); + + if (weight < 0.0f) { + return FALSE; + } + } else if (type == DEMO_TYPE_SPEAK && + mPlib_Check_able_force_speak_label((Game_Play*)gamePT, actor) == FALSE) { + return FALSE; + } + + demo->priorityType = type; + + req->type = demo->priorityType; + req->actor = actor; + req->proc = request; + req->talkWeight = weight; + + demo->requestId++; + } + + return TRUE; + } + + return FALSE; +} + +s32 mDemo_Check(s32 type, Actor* actor) { + if (type == demo->current.type && actor == demo->current.actor) { + return TRUE; + } + + return FALSE; +} + +s32 mDemo_Start(UNUSED Actor* actor) { + return FALSE; +} + +s32 mDemo_Check_and_Go(s32 type, Actor* actor) { + if (mDemo_Check(type, actor) != FALSE) { + return mDemo_Start(actor); + } + + return FALSE; +} + +s32 mDemo_End(Actor* actor) { + if (actor == demo->current.actor) { + demo->state = DEMO_STATE_STOP; + return TRUE; + } + + return FALSE; +} + +void mDemo_Main(UNUSED Game_Play* play) { + main_proc(); +} + +void mDemo_Init(UNUSED Game_Play* play) { + demo->speaker = NULL; + demo->listener = NULL; + mDemo_Unset_SpeakerAble(); + mDemo_Unset_ListenAble(); + mDemo_Init_OrderValue(); + mDemo_Clear_change_player_destiny(); + init_demo(); +} + +s32 mDemo_CheckDemo() { + return demo->state != DEMO_STATE_WAIT; +} + +s32 mDemo_CheckDemo4Event() { + switch (mDemo_CheckDemoType()) { + case DEMO_TYPE_NONE: + case DEMO_TYPE_EVENTMSG: + return FALSE; + } + + return TRUE; +} + +void mDemo_Set_SpeakerAble() { + demo->isAbleSpeaker = TRUE; +} + +void mDemo_Set_ListenAble() { + demo->isAbleListener = TRUE; +} + +void mDemo_Unset_SpeakerAble() { + demo->isAbleSpeaker = FALSE; +} + +void mDemo_Unset_ListenAble() { + demo->isAbleListener = FALSE; +} + +s32 mDemo_Check_SpeakerAble() { + return demo->isAbleSpeaker; +} + +s32 mDemo_Check_ListenAble() { + return demo->isAbleListener; +} + +int mDemo_Check_DiffAngle_forTalk(s16 diffAngle) { + return diffAngle > -5000 && diffAngle < 5000; +} + +void mDemo_KeepCamera(s32 cameraType) { + demo->keepCameraType = cameraType; +} diff --git a/src/code/m_kankyo.c b/src/code/m_kankyo.c index 4291b7d..a9b9de7 100644 --- a/src/code/m_kankyo.c +++ b/src/code/m_kankyo.c @@ -8,8 +8,6 @@ #include "m_event.h" #include "audio.h" #include "m_all_grow.h" -#include "prevent_bss_reordering.h" -#include "prevent_bss_reordering2.h" #include "overlays/actors/player_actor/m_player.h" #include "m_player_lib.h" @@ -1469,6 +1467,8 @@ s32 mEnv_CheckNpcRoomPointLightNiceStatus() { return ret; } +#include "prevent_bss_reordering2.h" + void mEnv_TaimatuPointLightWaveMoveProc(Game_Play* play) { static s16 point_light_wave_counter; diff --git a/src/code/m_roll_lib.c b/src/code/m_roll_lib.c index 775f1fc..063c30d 100644 --- a/src/code/m_roll_lib.c +++ b/src/code/m_roll_lib.c @@ -7,7 +7,7 @@ #include "m_player_lib.h" #include "sys_math_atan.h" #include "m_collision_bg.h" -#include "69E2C0.h" +#include "m_demo.h" #include "macros.h" void mRlib_spdXZ_to_spdF_Angle(xyz_t* speed, f32* speedf, s16* angle) { diff --git a/src/overlays/actors/ovl_Dump/ac_dump.c b/src/overlays/actors/ovl_Dump/ac_dump.c index b93651b..9897276 100644 --- a/src/overlays/actors/ovl_Dump/ac_dump.c +++ b/src/overlays/actors/ovl_Dump/ac_dump.c @@ -2,7 +2,7 @@ #include "m_actor_dlftbls.h" #include "m_object.h" #include "overlays/gamestates/ovl_play/m_play.h" -#include "69E2C0.h" +#include "m_demo.h" #include "m_player_lib.h" #include "overlays/actors/player_actor/m_player.h" #include "m_field_info.h" diff --git a/src/overlays/actors/ovl_Kago/ac_kago.c b/src/overlays/actors/ovl_Kago/ac_kago.c index 5cb3bc7..60867fb 100644 --- a/src/overlays/actors/ovl_Kago/ac_kago.c +++ b/src/overlays/actors/ovl_Kago/ac_kago.c @@ -3,7 +3,7 @@ #include "m_object.h" #include "overlays/gamestates/ovl_play/m_play.h" #include "overlays/actors/player_actor/m_player.h" -#include "69E2C0.h" +#include "m_demo.h" #include "m_field_info.h" #include "m_player_lib.h" #include "m_rcp.h" diff --git a/src/overlays/actors/ovl_Koinobori/ac_koinobori.c b/src/overlays/actors/ovl_Koinobori/ac_koinobori.c index f63c756..c92b162 100644 --- a/src/overlays/actors/ovl_Koinobori/ac_koinobori.c +++ b/src/overlays/actors/ovl_Koinobori/ac_koinobori.c @@ -5,7 +5,7 @@ #include "overlays/gamestates/ovl_play/m_play.h" #include "c_keyframe.h" #include "m_player_lib.h" -#include "69E2C0.h" +#include "m_demo.h" #include "m_field_info.h" #include "audio.h" #include "overlays/actors/player_actor/m_player.h" diff --git a/src/overlays/actors/ovl_Mikuji/ac_mikuji.c b/src/overlays/actors/ovl_Mikuji/ac_mikuji.c index 2504af7..bf34f3c 100644 --- a/src/overlays/actors/ovl_Mikuji/ac_mikuji.c +++ b/src/overlays/actors/ovl_Mikuji/ac_mikuji.c @@ -4,7 +4,7 @@ #include "m_player_lib.h" #include "overlays/actors/player_actor/m_player.h" #include "overlays/gamestates/ovl_play/m_play.h" -#include "69E2C0.h" +#include "m_demo.h" #include "gfx.h" #include "m_field_info.h" #include "m_rcp.h" diff --git a/src/overlays/actors/ovl_Nameplate/ac_nameplate.c b/src/overlays/actors/ovl_Nameplate/ac_nameplate.c index c74f8bb..36add1b 100644 --- a/src/overlays/actors/ovl_Nameplate/ac_nameplate.c +++ b/src/overlays/actors/ovl_Nameplate/ac_nameplate.c @@ -6,7 +6,7 @@ #include "m_player_lib.h" #include "m_npc.h" #include "m_msg_main.h" -#include "69E2C0.h" +#include "m_demo.h" #include "overlays/actors/player_actor/m_player.h" #include "color.h" diff --git a/src/overlays/actors/ovl_Sample/ac_sample.c b/src/overlays/actors/ovl_Sample/ac_sample.c index f95d071..55f6db8 100644 --- a/src/overlays/actors/ovl_Sample/ac_sample.c +++ b/src/overlays/actors/ovl_Sample/ac_sample.c @@ -2,7 +2,7 @@ #include "m_actor_dlftbls.h" #include "m_object.h" #include "m_rcp.h" -#include "69E2C0.h" +#include "m_demo.h" #include "m_msg_main.h" #include "overlays/gamestates/ovl_play/m_play.h" diff --git a/src/overlays/actors/ovl_Tama/ac_tama.c b/src/overlays/actors/ovl_Tama/ac_tama.c index afbfcfc..bb1b2ec 100644 --- a/src/overlays/actors/ovl_Tama/ac_tama.c +++ b/src/overlays/actors/ovl_Tama/ac_tama.c @@ -6,7 +6,7 @@ #include "overlays/actors/player_actor/m_player.h" #include "m_player_lib.h" #include "libc/math.h" -#include "69E2C0.h" +#include "m_demo.h" #include "m_field_info.h" #include "code_variables.h" #include "m_rcp.h" diff --git a/src/overlays/actors/player_actor/m_player.c b/src/overlays/actors/player_actor/m_player.c index 29cda2c..f187543 100644 --- a/src/overlays/actors/player_actor/m_player.c +++ b/src/overlays/actors/player_actor/m_player.c @@ -9,7 +9,7 @@ #include "m_name_table.h" #include "m_scene_table.h" #include "m_debug.h" -#include "69E2C0.h" +#include "m_demo.h" #include "67E840.h" extern ClObjPipe_Init Player_actor_OcInfoData_forStand; diff --git a/src/overlays/actors/player_actor/m_player.h b/src/overlays/actors/player_actor/m_player.h index 1ce84a7..c1e350e 100644 --- a/src/overlays/actors/player_actor/m_player.h +++ b/src/overlays/actors/player_actor/m_player.h @@ -123,6 +123,7 @@ typedef union Player_MainIndexData { u8 forceAlignment[72]; } Player_MainIndexData; +typedef void* (*PlayerUnk122CFunc)(struct Game_Play*); typedef void (*PlayerUnk1230Func)(struct Player*, struct Game_Play*, Actor*, s32, xyz_t*, f32); typedef f32 (*PlayerUnk1234Func)(struct Player*, struct Game_Play*); typedef void (*PlayerUnk1238Func)(struct Player*, struct Game_Play*, Actor*, s32); @@ -158,7 +159,8 @@ typedef struct Player { /* 0x0FA4 */ ClObjTris colliderTris2; /* 0x0FB8 */ UNK_TYPE1 unk_0FB8[0x50]; /* 0x1008 */ ClObjPipe colliderPipe; - /* 0x1024 */ UNK_TYPE1 unk_1024[0x20C]; + /* 0x1024 */ UNK_TYPE1 unk_1024[0x208]; + /* 0x122C */ PlayerUnk122CFunc unk_122C; /* 0x1230 */ PlayerUnk1230Func unk_1230; /* 0x1234 */ PlayerUnk1234Func unk_1234; /* 0x1238 */ PlayerUnk1238Func unk_1238; diff --git a/src/overlays/gamestates/ovl_play/m_play.c b/src/overlays/gamestates/ovl_play/m_play.c index 864f414..64b6ec9 100644 --- a/src/overlays/gamestates/ovl_play/m_play.c +++ b/src/overlays/gamestates/ovl_play/m_play.c @@ -11,7 +11,7 @@ #include "audio.h" #include "6EC9E0.h" #include "m_time.h" -#include "69E2C0.h" +#include "m_demo.h" #include "683030.h" #include "6E3240.h" #include "6C97F0.h" @@ -387,7 +387,7 @@ void play_init(Game* game) { mTM_set_season(); func_800B594C_jp(); mSM_submenu_ovlptr_init(game_play); - func_8007CFD8_jp(game_play); + mDemo_Init(game_play); mEv_init(&game_play->event); initView(&game_play->view, gfxCtx); func_80064F48_jp(game_play); diff --git a/yamls/jp/code.yaml b/yamls/jp/code.yaml index 2ff8de6..7164735 100644 --- a/yamls/jp/code.yaml +++ b/yamls/jp/code.yaml @@ -27,6 +27,7 @@ - [0x69DD60, c, code/m_debug] - [0x69DDF0, c, code/m_debug_display] - [0x69E2C0, asm, code/69E2C0] + - [0x69F0B0, c, code/m_demo] - [0x6A0DE0, asm, code/6A0DE0] - [0x6A5B00, asm, code/6A5B00] - [0x6A6C40, asm, code/6A6C40] @@ -158,6 +159,8 @@ - [0x728430, data, code/69CB30] - [0x728460, .data, code/m_debug_display] - [0x7284B0, data, code/69E2C0] + - [0x7286C0, .data, code/m_demo] + - [0x728800, data, code/728800] - [0x72AAC0, .data, code/m_game_dlftbls] - [0x72ACB0, data, code/72ACB0] - [0x72B400, .data, code/m_kankyo] @@ -216,7 +219,7 @@ - [0x73A490, .rodata, code/m_controller] - [0x73A4A0, rodata, code/73A4A0] - [0x73A4D0, rodata, code/73A4D0] - - [0x73A6A0, rodata, code/73A6A0] + - [0x73A6A0, .rodata, code/m_demo] - [0x73A730, rodata, code/73A730] - [0x73A9B0, rodata, code/73A9B0] - [0x73A9C0, rodata, code/73A9C0] @@ -294,7 +297,9 @@ - { start: 0x75B600, type: bss, vram: 0x80137960, name: code/80137960 } - { start: 0x73F4D0, type: .bss, vram: 0x80138E50, name: code/m_debug} - { start: 0x73F4D0, type: .bss, vram: 0x80138E60, name: code/m_debug_display} - - { start: 0x73F4E0, type: bss, vram: 0x80138E70, name: code/80138E70 } + - { start: 0x73F4D0, type: bss, vram: 0x80138E70, name: code/80138E70 } + - { start: 0x73F4D0, type: .bss, vram: 0x80139C40, name: code/m_demo} + - { start: 0x73F4E0, type: bss, vram: 0x80139F70, name: code/80139F70} - { start: 0x73F4D0, type: .bss, vram: 0x80141DE0, name: code/m_kankyo } - { start: 0x73F4D0, type: .bss, vram: 0x80141E10, name: code/m_lights } - { start: 0x75B600, type: .bss, vram: 0x80141FA0, name: code/m_malloc } |
