summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorPrakxo <87568477+Prakxo@users.noreply.github.com>2024-04-10 03:57:33 +0200
committerGitHub <noreply@github.com>2024-04-09 18:57:33 -0700
commitfce490d951900c593f25329cdfef0f47263d5e43 (patch)
tree2324932640b707ad47350d1722c63b63542faa45 /include
parentfcdb6376299d9374d31c498f3204894e23c414b3 (diff)
m_scene OK (#165)
Diffstat (limited to 'include')
-rw-r--r--include/6E30B0.h5
-rw-r--r--include/m_clip.h96
-rw-r--r--include/m_common_data.h21
-rw-r--r--include/m_field_make.h2
-rw-r--r--include/m_player_lib.h14
-rw-r--r--include/m_scene.h134
-rw-r--r--include/m_scene_table.h11
-rw-r--r--include/m_submenu.h2
-rw-r--r--include/unknown_structs.h7
9 files changed, 216 insertions, 76 deletions
diff --git a/include/6E30B0.h b/include/6E30B0.h
index e08b2b8..62b8c17 100644
--- a/include/6E30B0.h
+++ b/include/6E30B0.h
@@ -4,12 +4,13 @@
#include "ultra64.h"
struct Game;
+struct Game_Play;
// void func_800BF410_jp();
// void func_800BF480_jp();
-// void func_800BF4F4_jp();
+void mScn_ObtainCarpetBank(struct Game_Play*);
// void func_800BF56C_jp();
-// void func_800BF580_jp();
+void mScn_ObtainMyRoomBank(struct Game_Play*);
// void func_800BF5A0_jp();
// void func_800BF5F4_jp();
// void func_800BF770_jp();
diff --git a/include/m_clip.h b/include/m_clip.h
index f58b2ba..f5c3a3b 100644
--- a/include/m_clip.h
+++ b/include/m_clip.h
@@ -16,6 +16,7 @@ struct ToolClip;
struct ShadowData;
struct FurnitureActor;
struct WeatherClip;
+struct ObjectExchangeBank;
typedef UNK_RET (*Clip_unk_040_unk_04)(struct ActorOverlay*, const struct struct_801161E8_jp*, size_t, s32);
typedef UNK_RET (*Clip_unk_040_unk_08)(void);
@@ -29,6 +30,7 @@ typedef UNK_RET (*Clip_unk_040_unk_C8)(struct Actor*, struct Game_Play*);
typedef UNK_RET (*Clip_unk_040_unk_CC)(struct Actor*, struct Game_Play*);
typedef UNK_RET (*Clip_unk_040_unk_D0)(void);
typedef UNK_RET (*Clip_unk_040_unk_E4)(void);
+typedef UNK_RET (*Clip_unk_040_unk_E8)(void);
typedef UNK_RET (*Clip_unk_040_unk_EC)(struct ObjectStatus*, s16, s16);
typedef UNK_RET (*Clip_unk_040_unk_F0)(struct ObjectStatus*, struct Actor*);
typedef s32 (*Clip_unk_040_unk_F4)(struct ObjectStatus*, struct Actor*);
@@ -50,7 +52,7 @@ typedef struct Clip_unk_040 {
/* 0x0D0 */ Clip_unk_040_unk_D0 unk_D0;
/* 0x0D4 */ UNK_TYPE1 unk_D4[0x10];
/* 0x0E4 */ Clip_unk_040_unk_E4 unk_E4;
- /* 0x0E8 */ UNK_TYPE1 unk_E8[0x4];
+ /* 0x0E8 */ Clip_unk_040_unk_E8 unk_E8;
/* 0x0EC */ Clip_unk_040_unk_EC unk_EC;
/* 0x0F0 */ Clip_unk_040_unk_F0 unk_F0;
/* 0x0F4 */ Clip_unk_040_unk_F4 unk_F4;
@@ -58,6 +60,14 @@ typedef struct Clip_unk_040 {
/* 0x118 */ Clip_unk_040_unk_118 unk_118;
} Clip_unk_040; // size >= 0x11C
+typedef UNK_RET (*Clip_unk_060_unk_04)(void);
+typedef struct Clip_unk_060 {
+ /* 0x0 */ UNK_TYPE1 unk_0[0x4];
+ /* 0x4 */ Clip_unk_060_unk_04 unk_4;
+} Clip_unk_060; // size >= 0x4
+
+typedef UNK_RET (*Clip_unk_068)(void);
+
typedef UNK_RET (*Clip_unk_06C_unk_00)(UNK_TYPE);
typedef UNK_RET (*Clip_unk_06C_unk_04)(UNK_TYPE);
typedef UNK_RET (*Clip_unk_06C_unk_08)(UNK_TYPE);
@@ -68,6 +78,12 @@ typedef struct Clip_unk_078 {
/* 0x08 */ Clip_unk_06C_unk_08 unk_08;
} Clip_unk_06C; // size >= 0xC
+typedef s32 (*Clip_unk_070_unk_0C)(void);
+typedef struct Clip_unk_070 {
+ /* 0x00 */ UNK_TYPE1 unk_0[0xC];
+ /* 0x04 */ Clip_unk_070_unk_0C unk_C;
+} Clip_unk_070; // size >= 0x10
+
typedef UNK_RET (*Clip_unk_074_unk_00)(UNK_TYPE);
typedef void (*Clip_unk_074_unk_04)(struct Game_Play* game_play, struct ShadowData* shadowData, s16 unk2);
@@ -76,10 +92,18 @@ typedef struct Clip_unk_074 {
/* 0x04 */ Clip_unk_074_unk_04 unk_04;
} Clip_unk_074; // size >= 0x8
+typedef void (*Clip_unk_07C_unk_4)(struct ObjectExchangeBank*);
+typedef struct Clip_unk_07C {
+ /* 0x00 */ s8 unk_0[0x4];
+ /* 0x04 */ Clip_unk_07C_unk_4 unk_4;
+} Clip_unk_07C; // size >= 0x8
+typedef void (*Clip_unk_080_unk_24)(void);
typedef UNK_RET (*Clip_unk_080_unk_34)(struct FurnitureActor* furnitureActor, struct Actor* myHouseActor, struct Game_Play* game_play, f32 arg0, f32 arg1);
typedef struct Clip_unk_080 {
- /* 0x00 */ UNK_TYPE1 unk_00[0x34];
+ /* 0x00 */ UNK_TYPE1 unk_00[0x24];
+ /* 0x24 */ Clip_unk_080_unk_24 unk_24;
+ /* 0x28 */ UNK_TYPE1 unk_28[0xC];
/* 0x34 */ Clip_unk_080_unk_34 unk_34; // open close proc
} Clip_unk_080; // size >= 0x8
@@ -87,6 +111,7 @@ typedef UNK_RET (*Clip_unk_08C_unk_4)(struct ActorOverlay*, size_t);
typedef UNK_RET (*Clip_unk_08C_unk_8)(void);
typedef UNK_PTR (*Clip_unk_08C_unk_0C)(void);
typedef UNK_RET (*Clip_unk_08C_unk_10)(struct Actor*);
+typedef void (*Clip_unk_08C_unk_A4)(struct ObjectExchangeBank*);
typedef UNK_RET (*Clip_unk_08C_unk_A8)(UNK_PTR, UNK_TYPE, u16 name, struct Actor* actor);
typedef UNK_RET (*Clip_unk_08C_unk_AC)(u16);
typedef UNK_RET (*Clip_unk_08C_unk_450)(u16);
@@ -97,7 +122,8 @@ typedef struct Clip_unk_08C {
/* 0x08 */ Clip_unk_08C_unk_8 unk_08;
/* 0x0C */ Clip_unk_08C_unk_0C unk_0C;
/* 0x10 */ Clip_unk_08C_unk_10 unk_10;
- /* 0x014 */ UNK_TYPE1 unk_14[0x94];
+ /* 0x014 */ UNK_TYPE1 unk_14[0x90];
+ /* 0x0A4 */ Clip_unk_08C_unk_A4 unk_A4;
/* 0x0A8 */ Clip_unk_08C_unk_A8 unk_A8; // unload object
/* 0x0AC */ Clip_unk_08C_unk_AC unk_AC; // load object
/* 0x0B0 */ UNK_TYPE unk_B0;
@@ -114,6 +140,39 @@ typedef struct Clip_unk_090 {
/* 0x30 */ Clip_unk_090_unk_30 unk_30;
} Clip_unk_090; // size >= 0x34
+typedef void (*Clip_unk_09C_unk_C)(void);
+typedef struct Clip_unk_09C {
+ /* 0x00 */ UNK_TYPE1 unk_00[0xC];
+ /* 0x0C */ Clip_unk_09C_unk_C unk_C;
+} Clip_unk_09C; // size >= 0x10
+
+typedef void (*Clip_unk_0A4_unk_4)(void);
+
+typedef struct Clip_unk_0A4 {
+ /* 0x00 */ UNK_TYPE1 unk_00[0x04];
+ /* 0x04 */ Clip_unk_0A4_unk_4 unk_4;
+} Clip_unk_0A4;
+
+typedef UNK_RET (*Clip_unk_0A8_unk_4)(void*);
+typedef struct Clip_unk_0A8 {
+ /* 0x00 */ UNK_TYPE1 unk_00[0x04];
+ /* 0x04 */ Clip_unk_0A8_unk_4 unk_4;
+} Clip_unk_0A8; // size >= 0x8
+
+typedef void (*Clip_unk_0B4_unk_4)(void);
+typedef struct Clip_unk_0B4 {
+ /* 0x00 */ UNK_TYPE1 unk_00[0x04];
+ /* 0x04 */ Clip_unk_0B4_unk_4 unk_4;
+} Clip_unk_0B4; // size >= 0x8
+
+typedef void (*Clip_unk_0B8_unk_4)(void);
+typedef struct Clip_unk_0B8 {
+ /* 0x00 */ UNK_TYPE1 unk_00[0x04];
+ /* 0x04 */ Clip_unk_0B8_unk_4 unk_4;
+} Clip_unk_0B8; // size >= 0x8
+
+typedef void (*Clip_unk_0D0)(void);
+
typedef void (*Clip_unk_0D8_unk_00)(struct Game_Play* game_play);
typedef struct Clip_unk_0D8 {
/* 0x00 */ Clip_unk_0D8_unk_00 unk_00;
@@ -121,21 +180,36 @@ typedef struct Clip_unk_0D8 {
typedef struct Clip {
- /* 0x000 */ UNK_TYPE1 unk000[0x40];
+ /* 0x000 */ s8 unk000[0x20];
+ /* 0x020 */ s32 unk_020;
+ /* 0x024 */ s8 unk_024[0x1C];
/* 0x040 */ Clip_unk_040* unk_040;
- /* 0x044 */ UNK_TYPE1 unk_044[0x28];
+ /* 0x044 */ s8 unk_044[0x1C];
+ /* 0x060 */ Clip_unk_060* unk_060;
+ /* 0x064 */ s8 unk_064[0x4];
+ /* 0x068 */ Clip_unk_068 unk_068;
/* 0x06C */ Clip_unk_06C* unk_06C;
- /* 0x070 */ UNK_TYPE1 unk_070[0x4];
+ /* 0x070 */ Clip_unk_070* unk_070;
/* 0x074 */ Clip_unk_074* unk_074;
/* 0x078 */ struct WeatherClip* weatherClip;
- /* 0x07C */ UNK_TYPE1 unk_07C[0x4];
+ /* 0x07C */ Clip_unk_07C* unk_07C;
/* 0x080 */ Clip_unk_080* unk_080;
- /* 0x084 */ UNK_TYPE1 unk_084[0x8];
- /* 0x08C */ Clip_unk_08C* unk_08C;
+ /* 0x084 */ s8 unk_084[0x8];
+ /* 0x08C */ Clip_unk_08C* unk_08C;
/* 0x090 */ Clip_unk_090* unk_090;
/* 0x094 */ struct ToolClip* toolClip;
- /* 0x098 */ UNK_TYPE1 unk_098[0x40];
- /* 0x0D8 */ Clip_unk_0D8* unk_0D8;
+ /* 0x098 */ s8 unk_098[0x4];
+ /* 0x09C */ Clip_unk_09C* unk_09C;
+ /* 0x0A0 */ s8 unk_0A0[0x4];
+ /* 0x0A4 */ Clip_unk_0A4* unk_0A4;
+ /* 0x0A8 */ Clip_unk_0A8* unk_0A8;
+ /* 0x0AC */ s8 unk_0AC[0x8];
+ /* 0x0B4 */ Clip_unk_0B4* unk_0B4;
+ /* 0x0B8 */ Clip_unk_0B8* unk_0B8;
+ /* 0x0BC */ s8 unk_0BC[0x14];
+ /* 0x0D0 */ Clip_unk_0D0 unk_0D0;
+ /* 0x0D4 */ s8 unk_0D4[0x4];
+ /* 0x0D8 */ Clip_unk_0D8* unk_0D8;
/* 0x0DC */ u8 unk_0DC[0x24];
} Clip; // size = 0x100
diff --git a/include/m_common_data.h b/include/m_common_data.h
index a14bc35..affa1b0 100644
--- a/include/m_common_data.h
+++ b/include/m_common_data.h
@@ -16,6 +16,7 @@
#include "unk.h"
#include "m_snowman.h"
#include "m_clip.h"
+#include "m_scene.h"
typedef enum Season {
/* 0 */ SPRING,
@@ -112,7 +113,7 @@ typedef struct CommonData {
/* 0x0F8B2 */ UNK_TYPE1 unk_0F8B2[0x74E];
/* 0x10000 */ u8 unk_10000; // named "game_started" in AC GCN decomp
/* 0x10001 */ u8 unk_10001;
- /* 0x10002 */ u8 unk_10002[0x1];
+ /* 0x10002 */ u8 unk_10002;
/* 0x10003 */ u8 playerNumber;
/* 0x10004 */ s32 unk_10004; // named "last_scene_no" in AC GCN decomp
/* 0x10008 */ s32 unk_10008;
@@ -126,13 +127,13 @@ typedef struct CommonData {
/* 0x10149 */ u8 unk_10149;
/* 0x1014A */ u8 unk_1014A;
/* 0x1014B */ u8 unk_1014B; // named "wipeType" in AC GCN decomp
- /* 0x1014C */ UNK_TYPE1 unk_1014C[0x2];
+ /* 0x1014C */ s16 unk_1014C;
/* 0x1014E */ s16 unk_1014E;
/* 0x10150 */ UNK_TYPE1 unk_10150[0x10];
/* 0x10160 */ NpcList npclist[ANIMAL_NUM_MAX];
/* 0x104A8 */ u16 houseOwnerName;
/* 0x104AA */ u16 lastFieldId;
- /* 0x104AC */ UNK_TYPE1 unk_104AC[0x1];
+ /* 0x104AC */ u8 unk_104AC;
/* 0x104AD */ u8 unk_104AD;
/* 0x104AE */ u8 sunlightFlag;
/* 0x104AF */ UNK_TYPE1 unk_104AF[0x1];
@@ -151,16 +152,18 @@ typedef struct CommonData {
/* 0x1074C */ s32 unk_1074C;
/* 0x10750 */ s16 moneyPower;
/* 0x10752 */ s16 goodsPower;
- /* 0x10754 */ s32 unk_10754;
- /* 0x10758 */ UNK_TYPE1 unk_10758[0x48];
- /* 0x107A0 */ UNK_TYPE unk_107A0;
- /* 0x107A4 */ UNK_TYPE1 unk_107A4[0x12];
+ /* 0x10754 */ DoorData doorData;
+ /* 0x10768 */ s8 unk_10768[0x38];
+ /* 0x107A0 */ DoorData famicomEmuDoorData;
+ /* 0x107B4 */ s16 unk_107B4;
/* 0x107B6 */ s16 unk_107B6; // named "demo_profile" in AC GCN decomp (though it's an array of two s16s in that game)
/* 0x107B8 */ UNK_TYPE1 unk_107B8[0x28];
/* 0x107E0 */ s8 playerDecoyFlag;
/* 0x107E1 */ UNK_TYPE1 unk_107E1[0x3];
- /* 0x107E4 */ s16 unk_107E4;
- /* 0x107E6 */ UNK_TYPE1 unk107E6[0x252];
+ /* 0x107E4 */ s16 unk_107E4;
+ /* 0x107E6 */ UNK_TYPE1 unk107E6[0x212];
+ /* 0x109F8 */ u8 unk109F8;
+ /* 0x109FC */ s8 unk109F9[0x3F];
/* 0x10A38 */ s8 beeStingFlag;
/* 0x10A39 */ UNK_TYPE1 unk_10A39[0x1];
/* 0x10A3A */ u8 gokiShockedFlag;
diff --git a/include/m_field_make.h b/include/m_field_make.h
index b26862f..a287939 100644
--- a/include/m_field_make.h
+++ b/include/m_field_make.h
@@ -78,7 +78,7 @@ typedef struct FieldMakeBlockInfo {
// void func_80086E30_jp();
// void func_80086F08_jp();
// void func_80086FA8_jp();
-// void func_80086FEC_jp();
+void mFM_SetFieldInitData(s32,s32);
void func_80087004_jp(void);
void func_80087280_jp(void);
// void func_80087380_jp();
diff --git a/include/m_player_lib.h b/include/m_player_lib.h
index 14e9150..fa473d1 100644
--- a/include/m_player_lib.h
+++ b/include/m_player_lib.h
@@ -26,14 +26,14 @@ UNK_RET func_800B131C_jp(UNK_TYPE arg0);
void func_800B167C_jp(s32 arg0, UNK_RET arg1);
// void func_800B16D0_jp();
// void func_800B16F8_jp();
-void func_800B1784_jp(UNK_TYPE);
+void func_800B1784_jp(struct Game_Play*);
// void func_800B1838_jp();
-void func_800B190C_jp(UNK_TYPE);
+void func_800B190C_jp(struct Game_Play*);
// void func_800B1944_jp();
-void func_800B1960_jp(UNK_TYPE, UNK_TYPE, UNK_TYPE);
-void func_800B19C4_jp(UNK_TYPE, UNK_TYPE, UNK_TYPE);
-void func_800B1A28_jp(UNK_TYPE);
-void func_800B1A60_jp(UNK_TYPE);
+void func_800B1960_jp(struct Game_Play*, UNK_TYPE, UNK_TYPE);
+void func_800B19C4_jp(struct Game_Play*, UNK_TYPE, UNK_TYPE);
+void func_800B1A28_jp(struct Game_Play*);
+void func_800B1A60_jp(struct Game_Play*);
void mPlib_Object_Exchange_keep_Player_dt(struct Game_Play* game_play);
// void func_800B1AE0_jp();
// void func_800B1B3C_jp();
@@ -69,7 +69,7 @@ void mPlib_change_player_cloth_info_lv2(struct PrivateInfo*, u16);
// void func_800B22D0_jp();
// void func_800B22FC_jp();
// void func_800B2350_jp();
-// void func_800B23A4_jp();
+void mPlib_request_main_invade_type1(struct Game_Play*);
// void func_800B23DC_jp();
// void func_800B2414_jp();
// void func_800B2450_jp();
diff --git a/include/m_scene.h b/include/m_scene.h
index 1cb1da7..c847c8d 100644
--- a/include/m_scene.h
+++ b/include/m_scene.h
@@ -3,8 +3,11 @@
#include "ultra64.h"
#include "z64math.h"
+#include "libc/stdint.h"
+#include "m_std_dma.h"
struct Game_Play;
+struct Game;
typedef struct ActorEntry {
/* 0x0 */ s16 id;
@@ -16,11 +19,10 @@ typedef struct ActorEntry {
typedef struct ObjectStatus {
/* 0x00 */ s16 id;
/* 0x04 */ void* segment;
- /* 0x08 */ UNK_TYPE unk_08;
+ /* 0x08 */ void* vram;
/* 0x0C */ uintptr_t vrom;
/* 0x10 */ size_t size;
- /* 0x14 */ UNK_TYPE unk14;
- /* 0x18 */ char pad18[0x1C];
+ /* 0x14 */ DmaRequest unk14;
/* 0x34 */ OSMesgQueue unk34;
/* 0x4C */ UNK_TYPE unk4C;
/* 0x50 */ s16 unk50;
@@ -37,59 +39,119 @@ typedef struct ObjectExchangeBank {
/* 0x17FC */ UNK_TYPE unk17FC;
/* 0x1800 */ UNK_TYPE unk1800;
/* 0x1804 */ UNK_TYPE unk1804;
- /* 0x1808 */ UNK_TYPE unk1808;
- /* 0x180C */ UNK_TYPE unk180C;
- /* 0x1810 */ UNK_TYPE unk1810;
- /* 0x1814 */ UNK_TYPE unk1814;
+ /* 0x1808 */ s32 unk1808[2];
+ /* 0x1810 */ s32 unk1810[2];
/* 0x1818 */ UNK_PTR unk1818;
/* 0x181C */ UNK_TYPE unk181C;
/* 0x1820 */ UNK_TYPE unk1820;
} ObjectExchangeBank; // size = 0x1824
-typedef struct {
- /* 0x0000 */ u8 unk0;
- /* 0x0001 */ u8 unk1;
- /* 0x0004 */ UNK_PTR unk4;
-} MSceneUnkStruct;
+typedef struct DoorData {
+ /* 0x00 */ s32 nextSceneId;
+ /* 0x04 */ u8 exitOrientation;
+ /* 0x05 */ u8 exitType;
+ /* 0x06 */ u16 params;
+ /* 0x08 */ s_xyz exitPos;
+ /* 0x0E */ u16 fgName;
+ /* 0x10 */ u8 wipeType;
+ /* 0x11 */ u8 alignment[3];
+} DoorData; // size = 0x14
+
+typedef struct DoorInfo {
+ /* 0x00 */ u8 numDoors;
+ /* 0x04 */ DoorData* doorDataPtr;
+} DoorInfo; // size = 0x8
+
+typedef struct SceneDataDoor {
+ /* 0x00 */ u8 type;
+ /* 0x01 */ u8 numDoors;
+ /* 0x04 */ DoorData* doorDataPtr;
+} SceneDataDoor; // size = 0x8
+
+typedef struct SceneDataActor {
+ /* 0x00 */ u8 type;
+ /* 0x01 */ u8 numActors;
+ /* 0x04 */ ActorEntry* actorDataPtr;
+} SceneDataActor; // size = 0x8
+
+typedef struct SceneDataCtrlActor {
+ /* 0x00 */ u8 type;
+ /* 0x01 */ u8 numCtrlActors;
+ /* 0x04 */ s16* ctrlActorDataPtr;
+} SceneDataCtrlActor; // size = 0x8
+
+typedef struct SceneDataObjectBank {
+ /* 0x00 */ u8 type;
+ /* 0x01 */ u8 numBanks;
+ /* 0x04 */ s16* banksDataPtr;
+} SceneDataObjectBank; // size = 0x8
+
+
+typedef struct SceneDataField {
+ /* 0x00 */ u8 type;
+ /* 0x01 */ u8 itemType;
+ /* 0x02 */ u8 bgNum;
+ /* 0x04 */ u16 bgDispSize;
+ /* 0x06 */ u8 unk_06;
+ /* 0x07 */ u8 drawType;
+} SceneDataField; // size = 0x8
+
+typedef struct SceneDataArrangeFtr {
+ /* 0x00 */ u8 type;
+ /* 0x01 */ u8 arrangeFtrNum;
+} SceneDataArrangeFtr; // size = 0x2
+
+typedef struct SceneDataMisc {
+ /* 0x01 */ u8 type;
+} SceneDataMisc; // size = 0x1
+
+typedef union SceneData {
+ SceneDataMisc misc;
+ SceneDataActor actor;
+ SceneDataCtrlActor controlActor;
+ SceneDataObjectBank objectBank;
+ SceneDataDoor doorData;
+ SceneDataField field;
+ SceneDataArrangeFtr arrangeFtr;
+} SceneData; // size = 0x8
s32 func_800C59B0_jp(ObjectExchangeBank* objectExchangeBank);
s32 func_800C5A08_jp(ObjectExchangeBank* objectExchangeBank);
s32 func_800C5A60_jp(ObjectExchangeBank* objectExchangeBank);
s32 func_800C5AA0_jp(ObjectStatus* objectStatus, ObjectExchangeBank* objectExchangeBank, s16 objectBankIndex);
-void func_800C5B30_jp(ObjectStatus* objectStatus);
+void mSc_set_bank_status_after(ObjectStatus* objectStatus);
void mSc_clear_bank_status(ObjectStatus* objectStatus);
s32 func_800C5B74_jp(ObjectExchangeBank* objectExchangeBank, s16 id);
-void Object_Exchange_keep_new_Player(s32 arg0);
+void Object_Exchange_keep_new_Player(struct Game_Play* arg0);
u32 mSc_secure_exchange_keep_bank(ObjectExchangeBank* objectExchangeBank, s16 id, s32 size);
-void func_800C5D68_jp(ObjectExchangeBank*);
+s32 func_800C5D68_jp(ObjectExchangeBank* objectExchangeBank);
void func_800C5E10_jp(ObjectExchangeBank* objectExchangeBank);
-// void func_800C5EA0_jp();
+void func_800C5EA0_jp(ObjectExchangeBank* objectExchangeBank);
s32 func_800C5F0C_jp(ObjectStatus* objectStatus, ObjectExchangeBank* objectExchangeBank);
void mSc_dmacopy_data_bank(ObjectExchangeBank* objectExchangeBank);
s32 mSc_bank_regist_check(ObjectExchangeBank* objectExchangeBank, s16 id);
s32 func_800C6144_jp(ObjectExchangeBank* objectExchangeBank, s16 arg1);
void mSc_regist_initial_exchange_bank(struct Game_Play* game_play);
-void func_800C62C4_jp(ObjectStatus*, ObjectExchangeBank*, s32);
-void mSc_dmacopy_all_exchange_bank(ObjectExchangeBank* objectExchangeBank);
+void mSc_dmacopy_all_exchange_bank_sub(ObjectStatus* status, ObjectExchangeBank* objectExchangeBank, s32 idx);
+void mSc_dmacopy_all_exchange_bank(ObjectExchangeBank* exchange);
void mSc_data_bank_ct(struct Game_Play* game_play, ObjectExchangeBank* objectExchangeBank);
void mSc_decide_exchange_bank(ObjectExchangeBank* objectExchangeBank);
-// void func_800C6690_jp();
-void Scene_ct(struct Game_Play* game_play, void* arg1);
-// void func_800C6960_jp();
-void Scene_Proc_Ctrl_Actor_Ptr(struct Game_Play* game_play, MSceneUnkStruct* arg1);
-void Scene_Proc_Actor_Ptr(struct Game_Play* game_play, MSceneUnkStruct* arg1);
-void Scene_Proc_Object_Exchange_Bank_Ptr(struct Game_Play* game_play, MSceneUnkStruct* arg1);
-void Scene_Proc_Door_Data_Ptr(struct Game_Play* game_play, MSceneUnkStruct* arg1);
-void Door_info_ct(s8* arg0);
-void Scene_Proc_Sound(UNK_TYPE arg0, UNK_TYPE arg1);
-// void func_800C6AE0_jp();
-// void func_800C6B50_jp();
-// void func_800C6BB0_jp();
-// void func_800C6BD4_jp();
-// void func_800C6BF8_jp();
-// void func_800C6C10_jp();
-// void func_800C6D14_jp();
-// void func_800C6D5C_jp();
-// void func_800C6E14_jp();
+void Scene_player_select(s32 sceneNo, s32 npcActor);
+void Scene_ct(struct Game_Play* play, SceneData* sceneData);
+void Scene_Proc_Player_Ptr(struct Game_Play* play, SceneData* scene_data);
+void Scene_Proc_CtrlActor_Ptr(struct Game_Play* play, SceneData* scene_data);
+void Scene_Proc_Actor_Ptr(struct Game_Play* play, SceneData* scene_data);
+void Scene_Proc_Object_Exchange_Bank_Ptr(struct Game_Play* play, SceneData* scene_data);
+void Scene_Proc_Door_Data_Ptr(struct Game_Play* play, SceneData* scene_data);
+void Door_info_ct(DoorInfo* door_info);
+void Scene_Proc_Sound(struct Game_Play* play, SceneData* scene_data);
+void set_item_info(struct Game_Play* play, SceneDataField* field);
+void Scene_Proc_Field_ct(struct Game_Play* play, SceneData* scene_data);
+void Scene_Proc_ArrangeRoom_ct(struct Game_Play* play, SceneData* data);
+void Scene_Proc_ArrangeFurniture_ct(struct Game_Play* play, SceneData* data);
+s32 goto_other_scene(struct Game_Play* play, DoorData* door_data, s32 updatePlayer);
+s32 goto_next_scene(struct Game_Play* play, s32 nextScene, s32 updatePlayer);
+s32 goto_emu_game(struct Game_Play* play, s16 famicomRomId);
+void return_emu_game(struct Game* game);
#endif
diff --git a/include/m_scene_table.h b/include/m_scene_table.h
index fd31922..04bb5b7 100644
--- a/include/m_scene_table.h
+++ b/include/m_scene_table.h
@@ -3,7 +3,13 @@
#include "ultra64.h"
#include "z64math.h"
-#include "unknown_structs.h"
+
+typedef struct SceneDmaStatus {
+ /* 0x00 */ RomOffset vromStart;
+ /* 0x04 */ RomOffset vromEnd;
+ /* 0x08 */ char unk08[0xB];
+ /* 0x13 */ u8 unk_13;
+} SceneDmaStatus;
typedef enum SceneTable {
/* 00 */ SCENE_TEST1,
@@ -43,6 +49,7 @@ typedef enum SceneTable {
/* 34 */ SCENE_PLAYERSELECT_SAVE,
/* 35 */ SCENE_NUM
} SceneTable;
-extern Struct_8010EAA0 scene_data_status[];
+
+extern SceneDmaStatus scene_data_status[];
#endif
diff --git a/include/m_submenu.h b/include/m_submenu.h
index 423f3dd..7916acd 100644
--- a/include/m_submenu.h
+++ b/include/m_submenu.h
@@ -118,7 +118,7 @@ u32 mSM_check_open_inventory_itemlist(InventoryItemList itemlist, s32 arg1) ;
// void mSM_Object_Exchange_keep_new();
// void mSM_Object_Exchange_keep_new_MenuTexAndPallet();
-// void mSM_Object_Exchange_keep_new_Menu();
+void mSM_Object_Exchange_keep_new_Menu(struct Game_Play*);
// void mSM_Get_ground_tex_p();
// void mSM_Get_ground_pallet_p();
diff --git a/include/unknown_structs.h b/include/unknown_structs.h
index b47f318..383f2cd 100644
--- a/include/unknown_structs.h
+++ b/include/unknown_structs.h
@@ -7,13 +7,6 @@
#include "unk.h"
#include "other_types.h"
-typedef struct Struct_8010EAA0 {
- /* 0x00 */ RomOffset unk_00;
- /* 0x04 */ RomOffset unk_04;
- /* 0x08 */ char unk08[0xB];
- /* 0x13 */ u8 unk_13;
-} Struct_8010EAA0; // size = 0x14
-
typedef struct struct_801161E8_jp {
/* 0x0 */ UNK_TYPE1 unk_0[0x8];
} struct_801161E8_jp; // size <= 0x8