summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremilybrooks <emilybrooksemilybrooks@gmail.com>2023-09-20 10:07:50 -0700
committerGitHub <noreply@github.com>2023-09-20 10:07:50 -0700
commitea9db85fde9f1b0059379c45e03cac380e567aad (patch)
tree3cd910e4b6b2c5a83e0c8f9da1686fa5432a70db
parent4ea0ce4f32b3255c2e91ccf36b8b36db80a03f87 (diff)
Matched 23 functions in m_scene (#98)
* ported over from private branch * trying to find original names * matched small functions * matched func_800C5A08_jp * small changes * matched mSc_bank_regist_check * matched mSc_regist_initial_exchange_bank * more cleanup * cleaned up compile errors * renamed struct * remove save struct * named mSc_set_bank_status_after
-rw-r--r--include/6E9650.h49
-rw-r--r--include/m_common_data.h14
-rw-r--r--include/m_player_lib.h12
-rw-r--r--include/m_scene.h81
-rw-r--r--include/unknown_structs.h17
-rw-r--r--linker_scripts/jp/symbol_addrs_code.txt22
-rw-r--r--src/code/m_actor.c49
-rw-r--r--src/code/m_scene.c366
-rw-r--r--src/code/m_submenu.c10
-rw-r--r--src/overlays/gamestates/ovl__00743CD0/_00743CD0.h3
-rw-r--r--src/overlays/gamestates/ovl_play/m_play.c12
-rw-r--r--src/overlays/gamestates/ovl_play/m_play.h13
-rw-r--r--src/overlays/submenu/submenu_ovl/m_submenu_ovl.c6
-rw-r--r--yamls/jp/code.yaml4
14 files changed, 521 insertions, 137 deletions
diff --git a/include/6E9650.h b/include/6E9650.h
deleted file mode 100644
index 4cf3823..0000000
--- a/include/6E9650.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef C_6E9650_H
-#define C_6E9650_H
-
-#include "ultra64.h"
-
-struct Game_Play;
-struct Game_Play_unk_0110_unk_0000;
-
-// void func_800C59B0_jp();
-// void func_800C5A08_jp();
-// void func_800C5A60_jp();
-// void func_800C5AA0_jp();
-// void func_800C5B30_jp();
-// void func_800C5B5C_jp();
-// void func_800C5B74_jp();
-// void func_800C5C30_jp();
-// void func_800C5CC4_jp();
-// void func_800C5D68_jp();
-// void func_800C5E10_jp();
-// void func_800C5EA0_jp();
-// void func_800C5F0C_jp();
-void mSc_dmacopy_data_bank(struct Game_Play_unk_0110_unk_0000* arg0);
-s32 mSc_bank_regist_check(struct Game_Play_unk_0110_unk_0000* arg0, s16 arg1);
-void func_800C6144_jp(struct Game_Play_unk_0110_unk_0000* arg0, s16 arg1);
-void mSc_regist_initial_exchange_bank(struct Game_Play* game_play);
-// void func_800C62C4_jp();
-void mSc_dmacopy_all_exchange_bank(struct Game_Play_unk_0110_unk_0000* arg0);
-void mSc_data_bank_ct(struct Game_Play* game_play, struct Game_Play_unk_0110_unk_0000* arg1);
-void mSc_decide_exchange_bank(struct Game_Play_unk_0110_unk_0000* arg0);
-// void func_800C6690_jp();
-void Scene_ct(struct Game_Play* game_play, void* arg1);
-// void func_800C6960_jp();
-// void func_800C69F4_jp();
-// void func_800C6A28_jp();
-// void func_800C6A5C_jp();
-// void func_800C6A90_jp();
-void Door_info_ct(s32* arg0);
-// void func_800C6AD0_jp();
-// 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();
-
-#endif
diff --git a/include/m_common_data.h b/include/m_common_data.h
index 48981c2..7494376 100644
--- a/include/m_common_data.h
+++ b/include/m_common_data.h
@@ -19,7 +19,7 @@
struct Actor;
struct ActorOverlay;
struct struct_801161E8_jp;
-struct Game_Play_unk_0110_unk_0000;
+struct ObjectStatus;
struct CommonData_unk_1004C_unk_14_arg0;
struct Game_Play;
struct struct_809AEFA4;
@@ -42,9 +42,9 @@ typedef UNK_RET (*CommonData_unk_1004C_unk_D0)(void);
typedef UNK_RET (*CommonData_unk_1004C_unk_E4)(void);
-typedef UNK_RET (*CommonData_unk_1004C_unk_EC)(struct Game_Play_unk_0110_unk_0000*, s16, s16);
-typedef UNK_RET (*CommonData_unk_1004C_unk_F0)(struct Game_Play_unk_0110_unk_0000*, struct Actor*);
-typedef s32 (*CommonData_unk_1004C_unk_F4)(struct Game_Play_unk_0110_unk_0000*, struct Actor*);
+typedef UNK_RET (*CommonData_unk_1004C_unk_EC)(struct ObjectStatus*, s16, s16);
+typedef UNK_RET (*CommonData_unk_1004C_unk_F0)(struct ObjectStatus*, struct Actor*);
+typedef s32 (*CommonData_unk_1004C_unk_F4)(struct ObjectStatus*, struct Actor*);
typedef UNK_RET (*CommonData_unk_1004C_unk_118)(struct Actor*);
@@ -239,7 +239,11 @@ typedef struct CommonData {
/* 0x10694 */ NpcWalking npcWalk;
/* 0x10710 */ UNK_TYPE1 unk_10710[0x3C];
/* 0x1074C */ UNK_TYPE unk_1074C;
- /* 0x10750 */ UNK_TYPE1 unk_10750[0x66];
+ /* 0x10750 */ UNK_TYPE1 unk_10750[0x4];
+ /* 0x10754 */ UNK_TYPE unk_10754;
+ /* 0x10758 */ UNK_TYPE1 unk_10758[0x48];
+ /* 0x107A0 */ UNK_TYPE unk_107A0;
+ /* 0x107A4 */ UNK_TYPE1 unk_107A4[0x12];
/* 0x107B6 */ s16 unk_107B6; // named "demo_profile" in AC GCN decomp (though it's an array of two s16s in that game)
/* 0x107B8 */ u8 unk107B8[0x28];
/* 0x107E0 */ s8 player_decoy_flag;
diff --git a/include/m_player_lib.h b/include/m_player_lib.h
index 1535afd..27b5a16 100644
--- a/include/m_player_lib.h
+++ b/include/m_player_lib.h
@@ -25,14 +25,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();
+void func_800B1784_jp(UNK_TYPE);
// void func_800B1838_jp();
-// void func_800B190C_jp();
+void func_800B190C_jp(UNK_TYPE);
// void func_800B1944_jp();
-// void func_800B1960_jp();
-// void func_800B19C4_jp();
-// void func_800B1A28_jp();
-// void func_800B1A60_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 mPlib_Object_Exchange_keep_Player_dt(struct Game_Play* game_play);
// void func_800B1AE0_jp();
// void func_800B1B3C_jp();
diff --git a/include/m_scene.h b/include/m_scene.h
index e0154bc..c809733 100644
--- a/include/m_scene.h
+++ b/include/m_scene.h
@@ -4,6 +4,8 @@
#include "ultra64.h"
#include "z64math.h"
+struct Game_Play;
+
typedef struct ActorEntry {
/* 0x0 */ s16 id;
/* 0x2 */ Vec3s pos;
@@ -11,4 +13,83 @@ typedef struct ActorEntry {
/* 0xE */ s16 params;
} ActorEntry; // size = 0x10
+typedef struct ObjectStatus {
+ /* 0x00 */ s16 id;
+ /* 0x04 */ void* segment;
+ /* 0x08 */ UNK_TYPE unk_08;
+ /* 0x0C */ uintptr_t vrom;
+ /* 0x10 */ size_t size;
+ /* 0x14 */ UNK_TYPE unk14;
+ /* 0x18 */ char pad18[0x1C];
+ /* 0x34 */ OSMesgQueue unk34;
+ /* 0x4C */ UNK_TYPE unk4C;
+ /* 0x50 */ s16 unk50;
+ /* 0x52 */ u8 unk52;
+ /* 0x53 */ u8 unk53;
+} ObjectStatus; // size = 0x54
+
+#define OBJECT_EXCHANGE_BANK_MAX 73 // Name taken from oot debug string
+
+typedef struct ObjectExchangeBank {
+ /* 0x0000 */ ObjectStatus status[OBJECT_EXCHANGE_BANK_MAX]; // Name taken from oot debug string
+ /* 0x17F4 */ s32 num; // Name taken from oot debug string
+ /* 0x17F8 */ UNK_TYPE unk17F8;
+ /* 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;
+ /* 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;
+
+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_clear_bank_status(ObjectStatus* objectStatus);
+s32 func_800C5B74_jp(ObjectExchangeBank* objectExchangeBank, s16 id);
+void Object_Exchange_keep_new_Player(s32 arg0);
+u32 mSc_secure_exchange_keep_bank(ObjectExchangeBank* objectExchangeBank, s16 id, s32 size);
+void func_800C5D68_jp(ObjectExchangeBank*);
+void func_800C5E10_jp(ObjectExchangeBank* objectExchangeBank);
+// void func_800C5EA0_jp();
+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_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();
+
#endif
diff --git a/include/unknown_structs.h b/include/unknown_structs.h
index 59a8da2..b5f688e 100644
--- a/include/unknown_structs.h
+++ b/include/unknown_structs.h
@@ -24,23 +24,6 @@ typedef struct CommonData_unk_1004C_unk_14_arg0 {
/* 0x04 */ UNK_TYPE1 unk_04[0x60];
} CommonData_unk_1004C_unk_14_arg0; // size >= 0x64, maybe less, guessed from stack usage
-typedef struct Game_Play_unk_0110_unk_0000 {
- /* 0x00 */ s16 unk_00;
- /* 0x02 */ UNK_TYPE1 unk_02[0x2];
- /* 0x04 */ void* segment;
- /* 0x08 */ UNK_TYPE1 unk_08[0x48];
- /* 0x50 */ s16 unk_50;
- /* 0x52 */ UNK_TYPE1 unk_52[0x2];
-} Game_Play_unk_0110_unk_0000; // size = 0x54
-
-typedef struct Game_Play_unk_0110 {
- /* 0x0000 */ Game_Play_unk_0110_unk_0000 unk_0000[UNK_SIZE];
- /* 0x0054 */ UNK_TYPE1 unk_0054[0x17A8];
- /* 0x17FC */ s32 unk_17FC;
- /* 0x1800 */ UNK_TYPE1 unk_1800[0x18];
- /* 0x1818 */ void* unk_1818;
-} Game_Play_unk_0110; // size >= 0x181C
-
typedef struct ShadowData {
/* 0x00 */ u32 numberOfVertices;
/* 0x04 */ u8* vertexFixFlagTable;
diff --git a/linker_scripts/jp/symbol_addrs_code.txt b/linker_scripts/jp/symbol_addrs_code.txt
index 3912a53..95c9a7c 100644
--- a/linker_scripts/jp/symbol_addrs_code.txt
+++ b/linker_scripts/jp/symbol_addrs_code.txt
@@ -3078,11 +3078,11 @@ func_800C59B0_jp = 0x800C59B0; // type:func
func_800C5A08_jp = 0x800C5A08; // type:func
func_800C5A60_jp = 0x800C5A60; // type:func
func_800C5AA0_jp = 0x800C5AA0; // type:func
-func_800C5B30_jp = 0x800C5B30; // type:func
-func_800C5B5C_jp = 0x800C5B5C; // type:func
+mSc_set_bank_status_after = 0x800C5B30; // type:func
+mSc_clear_bank_status = 0x800C5B5C; // type:func
func_800C5B74_jp = 0x800C5B74; // type:func
-func_800C5C30_jp = 0x800C5C30; // type:func
-func_800C5CC4_jp = 0x800C5CC4; // type:func
+Object_Exchange_keep_new_Player = 0x800C5C30; // type:func
+mSc_secure_exchange_keep_bank = 0x800C5CC4; // type:func
func_800C5D68_jp = 0x800C5D68; // type:func
func_800C5E10_jp = 0x800C5E10; // type:func
func_800C5EA0_jp = 0x800C5EA0; // type:func
@@ -3097,13 +3097,13 @@ mSc_data_bank_ct = 0x800C65E4; // type:func
mSc_decide_exchange_bank = 0x800C6678; // type:func
func_800C6690_jp = 0x800C6690; // type:func
Scene_ct = 0x800C68C8; // type:func
-func_800C6960_jp = 0x800C6960; // type:func
-func_800C69F4_jp = 0x800C69F4; // type:func
-func_800C6A28_jp = 0x800C6A28; // type:func
-func_800C6A5C_jp = 0x800C6A5C; // type:func
-func_800C6A90_jp = 0x800C6A90; // type:func
+Scene_Proc_Player_Ptr = 0x800C6960; // type:func
+Scene_Proc_Ctrl_Actor_Ptr = 0x800C69F4; // type:func
+Scene_Proc_Actor_Ptr = 0x800C6A28; // type:func
+Scene_Proc_Object_Exchange_Bank_Ptr = 0x800C6A5C; // type:func
+Scene_Proc_Door_Data_Ptr = 0x800C6A90; // type:func
Door_info_ct = 0x800C6AC4; // type:func
-func_800C6AD0_jp = 0x800C6AD0; // type:func
+Scene_Proc_Sound = 0x800C6AD0; // type:func
func_800C6AE0_jp = 0x800C6AE0; // type:func
func_800C6B50_jp = 0x800C6B50; // type:func
func_800C6BB0_jp = 0x800C6BB0; // type:func
@@ -3112,7 +3112,7 @@ func_800C6BF8_jp = 0x800C6BF8; // type:func
func_800C6C10_jp = 0x800C6C10; // type:func
func_800C6D14_jp = 0x800C6D14; // type:func
func_800C6D5C_jp = 0x800C6D5C; // type:func
-func_800C6E14_jp = 0x800C6E14; // type:func
+return_emu_game = 0x800C6E14; // type:func
Skin_Matrix_PrjMulVector = 0x800C6E80; // type:func
Skin_Matrix_MulVector = 0x800C6F68; // type:func
Skin_Matrix_MulMatrix = 0x800C7018; // type:func
diff --git a/src/code/m_actor.c b/src/code/m_actor.c
index 9ef1551..382d775 100644
--- a/src/code/m_actor.c
+++ b/src/code/m_actor.c
@@ -17,7 +17,6 @@
#include "sys_matrix.h"
#include "ovlmgr.h"
#include "gfx.h"
-#include "6E9650.h"
#include "unknown_structs.h"
#include "code_variables.h"
#include "macros.h"
@@ -103,11 +102,11 @@ s32 Actor_data_bank_dma_end_check(Actor* actor, Game_Play* game_play) {
switch (ACTOR_FGNAME_GET_F000(actor->fgName)) {
case FGNAME_F000_D:
case FGNAME_F000_E:
- var_v1 = common_data.unk_1004C->unk_F4(game_play->unk_0110.unk_0000, actor);
+ var_v1 = common_data.unk_1004C->unk_F4(game_play->objectExchangeBank.status, actor);
break;
default:
- var_v1 = game_play->unk_0110.unk_0000[actor->unk_026].unk_00 > 0;
+ var_v1 = game_play->objectExchangeBank.status[actor->unk_026].id > 0;
break;
}
@@ -147,23 +146,23 @@ void Actor_delete(Actor* actor) {
void Actor_ct(Actor* actor, Game_Play* game_play) {
s32 pad[2] UNUSED;
- Game_Play_unk_0110_unk_0000* temp;
+ ObjectStatus* temp;
Npc* npc;
CommonData_unk_1004C_unk_14_arg0 sp34;
- Game_Play_unk_0110* temp_a0;
+ ObjectExchangeBank* temp_a0;
- temp_a0 = &game_play->unk_0110;
+ temp_a0 = &game_play->objectExchangeBank;
- temp = temp_a0->unk_0000;
+ temp = temp_a0->status;
temp += actor->unk_026;
- temp->unk_50++;
+ temp->unk50++;
if (actor->part == ACTOR_PART_NPC) {
npc = (Npc*)actor;
common_data.unk_1004C->unk_14(&sp34, npc->actor.fgName);
- npc->unk_708 = mSc_bank_regist_check(temp_a0->unk_0000, sp34.unk_02);
- temp_a0->unk_0000[npc->unk_708].unk_50++;
+ npc->unk_708 = mSc_bank_regist_check(temp_a0, sp34.unk_02);
+ temp_a0->status[npc->unk_708].unk50++;
}
actor->world = actor->home;
@@ -193,7 +192,7 @@ void Actor_ct(Actor* actor, Game_Play* game_play) {
Shape_Info_init(actor, 0.0f, NULL, 0.0f, 0.0f);
if (Actor_data_bank_dma_end_check(actor, game_play) == 1) {
- gSegments[6] = (uintptr_t)OS_K0_TO_PHYSICAL(temp_a0->unk_0000[actor->unk_026].segment);
+ gSegments[6] = (uintptr_t)OS_K0_TO_PHYSICAL(temp_a0->status[actor->unk_026].segment);
actor->ct(actor, game_play);
actor->ct = NULL;
}
@@ -201,7 +200,7 @@ void Actor_ct(Actor* actor, Game_Play* game_play) {
#ifdef NON_MATCHING
void Actor_dt(Actor* actor, Game_Play* game_play) {
- Game_Play_unk_0110_unk_0000* temp_v0_6;
+ ObjectStatus* temp_v0_6;
s32 new_var;
if (actor->save != NULL) {
@@ -222,7 +221,7 @@ void Actor_dt(Actor* actor, Game_Play* game_play) {
actor->parent->child = NULL;
}
- temp_v0_6 = game_play->unk_0110.unk_0000;
+ temp_v0_6 = game_play->objectExchangeBank.status;
if (0) {}
switch ((actor->fgName & 0xF000) >> 0xC) {
@@ -232,13 +231,13 @@ void Actor_dt(Actor* actor, Game_Play* game_play) {
break;
default:
- new_var = game_play->unk_0110.unk_17FC;
+ new_var = game_play->objectExchangeBank.num;
if (actor->unk_026 >= new_var) {
temp_v0_6 = &temp_v0_6[(void)0, actor->unk_026];
- if (temp_v0_6->unk_50 > 0) {
+ if (temp_v0_6->unk50 > 0) {
actor->unk_026 = -1;
- temp_v0_6->unk_50--;
+ temp_v0_6->unk50--;
}
}
break;
@@ -272,7 +271,7 @@ void Actor_draw(Game_Play* game_play, Actor* actor) {
Matrix_scale(actor->scale.x, actor->scale.y, actor->scale.z, MTXMODE_APPLY);
{
- void* segment = game_play->unk_0110.unk_0000[(void)0, actor->unk_026].segment;
+ void* segment = game_play->objectExchangeBank.status[(void)0, actor->unk_026].segment;
gSegments[6] = (uintptr_t)OS_PHYSICAL_TO_K0(segment);
@@ -452,7 +451,8 @@ void Actor_info_call_actor(Game_Play* game_play, ActorInfo* actorInfo) {
if (actor->ct != NULL) {
if (Actor_data_bank_dma_end_check(actor, game_play) == 1) {
- gSegments[6] = (uintptr_t)OS_K0_TO_PHYSICAL(game_play->unk_0110.unk_0000[actor->unk_026].segment);
+ gSegments[6] =
+ (uintptr_t)OS_K0_TO_PHYSICAL(game_play->objectExchangeBank.status[actor->unk_026].segment);
game_play->state.unk_9D = 0x98;
actor->ct(actor, game_play);
@@ -488,7 +488,8 @@ void Actor_info_call_actor(Game_Play* game_play, ActorInfo* actorInfo) {
actor->flags &= ~ACTOR_FLAG_1000000;
if ((actor->flags & (ACTOR_FLAG_40 | ACTOR_FLAG_10)) || (actor->part == ACTOR_PART_NPC)) {
- gSegments[6] = (uintptr_t)OS_K0_TO_PHYSICAL(game_play->unk_0110.unk_0000[actor->unk_026].segment);
+ gSegments[6] =
+ (uintptr_t)OS_K0_TO_PHYSICAL(game_play->objectExchangeBank.status[actor->unk_026].segment);
game_play->state.unk_9D = 0xA1;
actor->update(actor, game_play);
game_play->state.unk_9D = 0xA2;
@@ -692,8 +693,8 @@ s32 func_80057A8C_jp(s32* arg0, ActorProfile* profile UNUSED, ActorOverlay* over
sp90 = sp24.unk_02;
}
- *arg0 = mSc_bank_regist_check(game_play->unk_0110.unk_0000, sp92);
- temp_v0 = mSc_bank_regist_check(game_play->unk_0110.unk_0000, sp90);
+ *arg0 = mSc_bank_regist_check(&game_play->objectExchangeBank, sp92);
+ temp_v0 = mSc_bank_regist_check(&game_play->objectExchangeBank, sp90);
if ((*arg0 < 0) || (temp_v0 < 0)) {
if (*arg0 >= 0) {
@@ -702,7 +703,7 @@ s32 func_80057A8C_jp(s32* arg0, ActorProfile* profile UNUSED, ActorOverlay* over
if (temp_v0 >= 0) {
sp90 = 0;
}
- common_data.unk_1004C->unk_EC(game_play->unk_0110.unk_0000, sp92, sp90);
+ common_data.unk_1004C->unk_EC(game_play->objectExchangeBank.status, sp92, sp90);
actor_free_check(overlayEntry, fgName);
ret = 0;
}
@@ -713,10 +714,10 @@ s32 func_80057B70_jp(s32* arg0, ActorProfile* profile, ActorOverlay* overlayEntr
s32 pad UNUSED;
s32 ret = 1;
- *arg0 = mSc_bank_regist_check(game_play->unk_0110.unk_0000, profile->objectId);
+ *arg0 = mSc_bank_regist_check(&game_play->objectExchangeBank, profile->objectId);
if (*arg0 == -1) {
- func_800C6144_jp(game_play->unk_0110.unk_0000, profile->objectId);
+ func_800C6144_jp(&game_play->objectExchangeBank, profile->objectId);
actor_free_check(overlayEntry, fgName);
ret = 0;
}
diff --git a/src/code/m_scene.c b/src/code/m_scene.c
new file mode 100644
index 0000000..87df0c3
--- /dev/null
+++ b/src/code/m_scene.c
@@ -0,0 +1,366 @@
+#include "unk.h"
+#include "libc/stdint.h"
+#include "m_scene.h"
+#include "m_common_data.h"
+#include "TwoHeadArena.h"
+#include "m_lib.h"
+#include "m_submenu.h"
+#include "overlays/gamestates/ovl_play/m_play.h"
+#include "game.h"
+#include "code_variables.h"
+#include "m_object.h"
+#include "m_player_lib.h"
+#include "z_std_dma.h"
+
+s32 func_800C59B0_jp(ObjectExchangeBank* objectExchangeBank) {
+ ObjectStatus* objectStatus = &objectExchangeBank->status[objectExchangeBank->unk17FC];
+ s32 ret = -1;
+ s32 statusIndex = objectExchangeBank->unk17FC;
+
+ if (statusIndex < OBJECT_EXCHANGE_BANK_MAX) {
+ do {
+ if (objectStatus->id == 0) {
+ ret = statusIndex;
+ break;
+ }
+ objectStatus++;
+ statusIndex++;
+ } while (statusIndex != OBJECT_EXCHANGE_BANK_MAX);
+ }
+
+ return ret;
+}
+
+s32 func_800C5A08_jp(ObjectExchangeBank* objectExchangeBank) {
+ ObjectStatus* objectStatus = &objectExchangeBank->status[objectExchangeBank->unk17FC];
+ s32 ret = -1;
+ s32 statusIndex = objectExchangeBank->unk17FC;
+
+ if (statusIndex < OBJECT_EXCHANGE_BANK_MAX) {
+ do {
+ if (objectStatus->unk50 == 0) {
+ ret = statusIndex;
+ break;
+ }
+ objectStatus++;
+ statusIndex++;
+ } while (statusIndex < OBJECT_EXCHANGE_BANK_MAX);
+ }
+
+ return ret;
+}
+
+s32 func_800C5A60_jp(ObjectExchangeBank* objectExchangeBank) {
+ s32 temp_v0;
+ s32 var_v1;
+
+ temp_v0 = func_800C59B0_jp(objectExchangeBank);
+ var_v1 = temp_v0;
+
+ if (temp_v0 == -1) {
+ var_v1 = func_800C5A08_jp(objectExchangeBank);
+ }
+
+ return var_v1;
+}
+
+s32 func_800C5AA0_jp(ObjectStatus* objectStatus, ObjectExchangeBank* objectExchangeBank, s16 objectBankIndex) {
+ s32 ret = 1;
+ s32 objectSize = gObjectTable[objectBankIndex].vromEnd - gObjectTable[objectBankIndex].vromStart;
+ u32 temp_t0 = (objectExchangeBank->unk1800 + objectSize + 0xF) & ~0xF;
+
+ if (temp_t0 >= objectExchangeBank->unk1804) {
+ ret = 0;
+
+ } else {
+ objectStatus->id = -objectBankIndex;
+ objectStatus->unk_08 = objectExchangeBank->unk1800;
+ objectStatus->segment = 0;
+ objectStatus->vrom = gObjectTable[objectBankIndex].vromStart;
+ objectStatus->size = objectSize;
+ objectStatus->unk50 = 0;
+ objectStatus->unk53 = 1;
+ objectExchangeBank->unk1800 = temp_t0;
+ }
+
+ return ret;
+}
+
+void mSc_set_bank_status_after(ObjectStatus* objectStatus) {
+ objectStatus->id = (objectStatus->id >= 0) ? objectStatus->id : -objectStatus->id;
+ objectStatus->unk53 = 0;
+ objectStatus->segment = (void*)objectStatus->unk_08;
+}
+
+void mSc_clear_bank_status(ObjectStatus* objectStatus) {
+ objectStatus->id = 0;
+ objectStatus->size = 0;
+ objectStatus->unk_08 = 0;
+ objectStatus->segment = 0;
+}
+
+// object_spawn equivalent
+s32 func_800C5B74_jp(ObjectExchangeBank* objectExchangeBank, s16 id) {
+ s32 ret = 0;
+
+ if (objectExchangeBank->num < OBJECT_EXCHANGE_BANK_MAX) {
+ ObjectStatus* objectStatus = &objectExchangeBank->status[objectExchangeBank->num];
+
+ if (func_800C5AA0_jp(objectStatus, objectExchangeBank, id) == 1) {
+
+ DmaMgr_RequestSyncDebug((void*)objectStatus->unk_08, objectStatus->vrom, objectStatus->size, "../m_scene.c",
+ 317);
+ mSc_set_bank_status_after(objectStatus);
+ objectStatus->unk50 = 1;
+ objectExchangeBank->num++;
+ ret = 1;
+ }
+ }
+
+ return ret;
+}
+
+void Object_Exchange_keep_new_Player(s32 arg0) {
+ func_800B1784_jp(arg0);
+ func_800B190C_jp(arg0);
+ func_800B190C_jp(arg0);
+ func_800B1960_jp(arg0, 0, 0);
+ func_800B19C4_jp(arg0, 0, 0);
+ func_800B1960_jp(arg0, 1, 2);
+ func_800B19C4_jp(arg0, 1, 2);
+ func_800B1A28_jp(arg0);
+ func_800B1A28_jp(arg0);
+ func_800B1A60_jp(arg0);
+}
+
+u32 mSc_secure_exchange_keep_bank(ObjectExchangeBank* objectExchangeBank, s16 id, s32 size) {
+ ObjectStatus* objectStatus = &objectExchangeBank->status[objectExchangeBank->num];
+ u32 ret = 0;
+
+ if (objectExchangeBank->num < OBJECT_EXCHANGE_BANK_MAX) {
+ ret = (objectExchangeBank->unk1800 + size + 0xF) & ~0xF;
+ if (ret >= objectExchangeBank->unk1804) {
+ ret = 0;
+
+ } else {
+ objectStatus->id = id;
+ objectStatus->segment = (void*)objectExchangeBank->unk1800;
+ objectStatus->unk_08 = objectExchangeBank->unk1800;
+ objectStatus->vrom = 0;
+ objectStatus->size = size;
+ objectStatus->unk50 = 0;
+ objectStatus->unk53 = 3;
+ objectExchangeBank->unk1800 = ret;
+ objectExchangeBank->num++;
+ }
+ }
+
+ return ret;
+}
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/func_800C5D68_jp.s")
+
+void func_800C5E10_jp(ObjectExchangeBank* objectExchangeBank) {
+ s32 temp_s3 = objectExchangeBank->unk181C;
+ s32 var_s1 = objectExchangeBank->unk17FC;
+ ObjectStatus* objectStatus = &objectExchangeBank->status[objectExchangeBank->unk17FC];
+
+ if (var_s1 < OBJECT_EXCHANGE_BANK_MAX) {
+ do {
+ if ((objectStatus->id != 0) && (temp_s3 == objectStatus->unk52)) {
+ mSc_clear_bank_status(objectStatus);
+ objectStatus++;
+ }
+ var_s1++;
+ } while (var_s1 < OBJECT_EXCHANGE_BANK_MAX);
+ }
+}
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/func_800C5EA0_jp.s")
+
+s32 func_800C5F0C_jp(ObjectStatus* objectStatus, ObjectExchangeBank* objectExchangeBank) {
+ s32 var_v1 = 1;
+ u32 temp_v0 = (objectExchangeBank->unk1800 + objectStatus->size + 0xF) & ~0xF;
+
+ if (temp_v0 >= (u32)objectExchangeBank->unk1804) {
+ var_v1 = 0;
+
+ } else {
+ objectStatus->unk_08 = objectExchangeBank->unk1800;
+ objectStatus->unk52 = objectExchangeBank->unk181C;
+ objectStatus->unk53 = 1;
+ objectStatus->unk14 = 0;
+ objectExchangeBank->unk1800 = temp_v0;
+ }
+
+ return var_v1;
+}
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/mSc_dmacopy_data_bank.s")
+
+s32 mSc_bank_regist_check(ObjectExchangeBank* objectExchangeBank, s16 id) {
+ ObjectStatus* objectStatus;
+ s32 i;
+ s32 ret = -1;
+
+ for (i = 0; i < OBJECT_EXCHANGE_BANK_MAX; i++) {
+ objectStatus = &objectExchangeBank->status[i];
+
+ if (((objectStatus->id >= 0) ? objectStatus->id : -objectStatus->id) == id) {
+ ret = i;
+ break;
+ }
+ }
+
+ return ret;
+}
+
+s32 func_800C6144_jp(ObjectExchangeBank* objectExchangeBank, s16 arg1) {
+ s32 temp_v0;
+ s32 ret = 0;
+
+ temp_v0 = func_800C5A60_jp(objectExchangeBank);
+
+ if (temp_v0 != -1) {
+ ObjectStatus* temp_a0 = &objectExchangeBank->status[temp_v0];
+
+ if (func_800C5AA0_jp(temp_a0, objectExchangeBank, arg1) == 1) {
+ temp_a0->unk14 = 0;
+ temp_a0->unk52 = objectExchangeBank->unk181C;
+ ret = 1;
+ }
+ }
+
+ return ret;
+}
+
+void mSc_regist_initial_exchange_bank(Game_Play* game_play) {
+ ObjectExchangeBank* objectExchangeBank = &game_play->objectExchangeBank;
+ s16* var_s1 = game_play->unk_1EB4;
+ s32 var_s2;
+
+ objectExchangeBank->unk181C = 0;
+ var_s2 = 0;
+ objectExchangeBank->unk17FC = objectExchangeBank->num;
+
+ if (game_play->unk_1EA7 > 0) {
+ do {
+ func_800C6144_jp(objectExchangeBank, *var_s1);
+ var_s2 += 1;
+ var_s1 += 1;
+ objectExchangeBank->num += 1;
+ } while (var_s2 < game_play->unk_1EA7);
+ }
+
+ if (common_data.unk_10001 == 0) {
+ //! FAKE
+ u32 temp = ((u32)(objectExchangeBank->unk1804 - objectExchangeBank->unk1800) >> 1);
+ s32 temp_v0 = (objectExchangeBank->unk1800 + temp + 0xF) & ~0xF;
+
+ objectExchangeBank->unk1814 = objectExchangeBank->unk1804;
+ objectExchangeBank->unk1810 = temp_v0;
+ objectExchangeBank->unk180C = temp_v0;
+ objectExchangeBank->unk1804 = temp_v0;
+ temp = objectExchangeBank->unk1800;
+ objectExchangeBank->unk1808 = temp;
+
+ } else {
+ objectExchangeBank->unk1808 = objectExchangeBank->unk1800;
+ objectExchangeBank->unk180C = objectExchangeBank->unk1800;
+ objectExchangeBank->unk1810 = objectExchangeBank->unk1804;
+ objectExchangeBank->unk1814 = objectExchangeBank->unk1804;
+ }
+
+ objectExchangeBank->unk17FC = objectExchangeBank->num;
+}
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/func_800C62C4_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/mSc_dmacopy_all_exchange_bank.s")
+
+void mSc_data_bank_ct(Game_Play* game_play, ObjectExchangeBank* objectExchangeBank) {
+ u32 temp_v0;
+ u32 temp_v1;
+
+ bzero(objectExchangeBank, 0x1824);
+ objectExchangeBank->unk17F8 = -1;
+ objectExchangeBank->unk17FC = -1;
+ temp_v0 = (u32)THA_alloc16(&game_play->state.heap, 0x93400);
+ temp_v1 = temp_v0 + 0x93400;
+ objectExchangeBank->unk1800 = temp_v0;
+ objectExchangeBank->unk1808 = temp_v0;
+ objectExchangeBank->unk180C = temp_v0;
+ objectExchangeBank->unk1804 = temp_v1;
+ objectExchangeBank->unk1810 = temp_v1;
+ objectExchangeBank->unk1814 = temp_v1;
+ func_800C5B74_jp(objectExchangeBank, GAMEPLAY_KEEP);
+ gSegments[4] = (uintptr_t)OS_PHYSICAL_TO_K0(objectExchangeBank->status[0].segment);
+}
+
+void mSc_decide_exchange_bank(ObjectExchangeBank* objectExchangeBank) {
+ objectExchangeBank->unk17F8 = objectExchangeBank->num;
+ objectExchangeBank->unk1818 = (void*)objectExchangeBank->unk1800;
+}
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/func_800C6690_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/Scene_ct.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/Scene_Proc_Player_Ptr.s")
+
+void Scene_Proc_Ctrl_Actor_Ptr(Game_Play* game_play, MSceneUnkStruct* arg1) {
+ void* temp = arg1->unk4;
+
+ game_play->unk_1EA6 = arg1->unk1;
+ game_play->unk_1EB0 = Lib_SegmentedToVirtual(temp);
+}
+
+void Scene_Proc_Actor_Ptr(Game_Play* game_play, MSceneUnkStruct* arg1) {
+ void* temp = arg1->unk4;
+
+ game_play->unk_1EA5 = arg1->unk1;
+ game_play->unk_1EAC = Lib_SegmentedToVirtual(temp);
+}
+
+void Scene_Proc_Object_Exchange_Bank_Ptr(Game_Play* game_play, MSceneUnkStruct* arg1) {
+ game_play->unk_1EA7 = arg1->unk1;
+ game_play->unk_1EB4 = Lib_SegmentedToVirtual(arg1->unk4);
+}
+
+void Scene_Proc_Door_Data_Ptr(Game_Play* game_play, MSceneUnkStruct* arg1) {
+ UNK_PTR temp = arg1->unk4;
+
+ game_play->unk_1E10 = arg1->unk1;
+ game_play->unk_1E14 = Lib_SegmentedToVirtual(temp);
+}
+
+void Door_info_ct(s8* arg0) {
+ *arg0 = 0;
+}
+
+void Scene_Proc_Sound(UNK_TYPE arg0 UNUSED, UNK_TYPE arg1 UNUSED) {
+}
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/func_800C6AE0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/func_800C6B50_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/func_800C6BB0_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/func_800C6BD4_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/func_800C6BF8_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/func_800C6C10_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/func_800C6D14_jp.s")
+
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_scene/func_800C6D5C_jp.s")
+
+void return_emu_game(Game* game) {
+ mem_copy(&common_data.unk_10754, &common_data.unk_107A0, 0x14);
+ common_data.unk_10754 = common_data.unk_107A0 + 1;
+ game->unk_74 = 0;
+ game_goto_next_game_play(game);
+ common_data.unk_00014 = common_data.unk_107A0;
+}
diff --git a/src/code/m_submenu.c b/src/code/m_submenu.c
index b40490c..c466fbc 100644
--- a/src/code/m_submenu.c
+++ b/src/code/m_submenu.c
@@ -8,7 +8,7 @@
#include "ovlmgr.h"
#include "game.h"
#include "sys_math3d.h"
-#include "6E9650.h"
+#include "m_scene.h"
#include "6DE300.h"
#include "6F5550.h"
#include "libc/stddef.h"
@@ -60,7 +60,7 @@ s32 SubmenuArea_IsPlayer(void) {
#ifdef NON_MATCHING
// regalloc
void mSM_load_player_anime(Game_Play* game_play) {
- Game_Play_unk_0110_unk_0000* var_s4;
+ ObjectStatus* var_s4;
s32 var_s0;
s32 var_s3;
Player* temp_v0;
@@ -71,8 +71,8 @@ void mSM_load_player_anime(Game_Play* game_play) {
return;
}
- var_s4 = game_play->unk_0110.unk_0000;
- var_s4 += mSc_bank_regist_check(var_s4, 9);
+ var_s4 = game_play->objectExchangeBank.status;
+ var_s4 += mSc_bank_regist_check(&game_play->objectExchangeBank, 9);
for (var_s3 = 0; var_s3 < 2; var_s3++, var_s4++) {
segment = var_s4->segment;
@@ -506,7 +506,7 @@ void mSM_move_End(Submenu* submenu) {
sp24 = mMsg_Get_base_window_p();
submenu->unk_00 = 0;
- mSc_dmacopy_all_exchange_bank(sp28->unk_0110.unk_0000);
+ mSc_dmacopy_all_exchange_bank(&sp28->objectExchangeBank);
SubmenuArea_DoUnlink(SubmenuArea_dlftbl, submenu);
load_player(submenu);
mSM_load_player_anime(sp28);
diff --git a/src/overlays/gamestates/ovl__00743CD0/_00743CD0.h b/src/overlays/gamestates/ovl__00743CD0/_00743CD0.h
index ffa7c03..1da7f9e 100644
--- a/src/overlays/gamestates/ovl__00743CD0/_00743CD0.h
+++ b/src/overlays/gamestates/ovl__00743CD0/_00743CD0.h
@@ -11,8 +11,7 @@ typedef struct Game__00743CD0 {
/* 0x0000 */ Game state;
/* 0x00E0 */ Game_Play1938 unk_00E0;
/* 0x0208 */ UNK_TYPE1 unk_0208[0x2FC-0x208];
- /* 0x02FC */ Game_Play_unk_0110 unk_02FC;
- /* 0x1B18 */ UNK_TYPE1 unk_1B18[0x1B20-0x1B18];
+ /* 0x02FC */ ObjectExchangeBank unk_02FC;
} Game__00743CD0; // size = 0x1B20
void _00743CD0_init(Game *thisx);
diff --git a/src/overlays/gamestates/ovl_play/m_play.c b/src/overlays/gamestates/ovl_play/m_play.c
index 8631106..e6c038c 100644
--- a/src/overlays/gamestates/ovl_play/m_play.c
+++ b/src/overlays/gamestates/ovl_play/m_play.c
@@ -457,7 +457,7 @@ void Game_play_move_fbdemo_not_move(Game_Play* game_play) {
game_play->state.unk_9C = 4;
mDemo_stock_clear();
game_play->state.unk_9C = 5;
- mSc_dmacopy_data_bank(game_play->unk_0110.unk_0000);
+ mSc_dmacopy_data_bank(&game_play->objectExchangeBank);
game_play->state.unk_9C = 6;
mSM_submenu_move(&game_play->submenu);
if ((game_play->submenu.moveProcIndex == MSM_MOVE_PROC_WAIT) && (REGADDR(IREG, 0x48) == 0)) {
@@ -479,13 +479,13 @@ void Game_play_move_fbdemo_not_move(Game_Play* game_play) {
}
void Game_play_move(Game_Play* game_play) {
- Game_Play_unk_0110* p = &game_play->unk_0110;
+ ObjectExchangeBank* p = &game_play->objectExchangeBank;
s32 var_v1;
game_play->state.unk_9D = 0x8D;
game_play->state.unk_9C = 1;
Game_play_Reset_destiny();
- gSegments[4] = (uintptr_t)OS_K0_TO_PHYSICAL(p->unk_0000[0].segment);
+ gSegments[4] = (uintptr_t)OS_K0_TO_PHYSICAL(p->status[0].segment);
gSegments[2] = (uintptr_t)OS_K0_TO_PHYSICAL(game_play->unk_010C);
game_play->state.unk_9C = 2;
@@ -537,7 +537,7 @@ void Game_play_move(Game_Play* game_play) {
}
void func_80803810_jp(Game_Play* game_play, GraphicsContext* gfxCtx) {
- void* temp_v0 = game_play->unk_0110.unk_0000[0].segment;
+ void* temp_v0 = game_play->objectExchangeBank.status[0].segment;
gSegments[4] = (uintptr_t)OS_K0_TO_PHYSICAL(temp_v0);
gSegments[2] = (uintptr_t)OS_K0_TO_PHYSICAL(game_play->unk_010C);
@@ -827,12 +827,12 @@ void Gameplay_Scene_Init(Game_Play* game_play) {
game_play->unk_1EA6 = 0;
game_play->unk_1EA7 = 0;
game_play->unk_1EB8 = 0;
- mSc_data_bank_ct(game_play, game_play->unk_0110.unk_0000);
+ mSc_data_bank_ct(game_play, &game_play->objectExchangeBank);
Global_light_ct(&game_play->glight);
Door_info_ct(&game_play->unk_1E10);
common_data_clear();
Scene_ct(game_play, game_play->unk_010C);
- mSc_decide_exchange_bank(game_play->unk_0110.unk_0000);
+ mSc_decide_exchange_bank(&game_play->objectExchangeBank);
func_808041A4_jp(game_play);
}
diff --git a/src/overlays/gamestates/ovl_play/m_play.h b/src/overlays/gamestates/ovl_play/m_play.h
index d530d9a..fc1e404 100644
--- a/src/overlays/gamestates/ovl_play/m_play.h
+++ b/src/overlays/gamestates/ovl_play/m_play.h
@@ -20,7 +20,7 @@
#include "m_collision_bg.h"
#include "m_pause.h"
#include "6A8180.h"
-#include "6E9650.h"
+#include "m_scene.h"
struct Actor;
struct ActorEntry;
@@ -66,8 +66,7 @@ typedef struct Game_Play {
/* 0x00E6 */ UNK_TYPE1 unk_00E6[0x2];
/* 0x00E8 */ UNK_TYPE1 unk_00E8[0x24];
/* 0x010C */ void* unk_010C;
- /* 0x0110 */ Game_Play_unk_0110 unk_0110;
- /* 0x192C */ UNK_TYPE1 unk_192C[0xC];
+ /* 0x0110 */ ObjectExchangeBank objectExchangeBank;
/* 0x1938 */ Game_Play1938 unk_1938;
/* 0x1A60 */ UNK_TYPE1 unk_1A60[0x138];
/* 0x1B98 */ Kankyo kankyo;
@@ -79,8 +78,8 @@ typedef struct Game_Play {
/* 0x1DAD */ UNK_TYPE1 unk_1DAD[0x3];
/* 0x1DB0 */ UNK_TYPE1 unk_1DB0[0x10];
/* 0x1DC0 */ PreRender unk_1DC0;
- /* 0x1E10 */ s32 unk_1E10;
- /* 0x1E14 */ char unk_1E14[0x4];
+ /* 0x1E10 */ s8 unk_1E10;
+ /* 0x1E14 */ UNK_PTR unk_1E14;
/* 0x1E18 */ s32 unk_1E18;
/* 0x1E1C */ MtxF viewProjectionMtxF;
/* 0x1E5C */ MtxF billboardMtxF;
@@ -92,8 +91,8 @@ typedef struct Game_Play {
/* 0x1EA7 */ u8 unk_1EA7;
/* 0x1EA8 */ struct ActorEntry* unk_1EA8;
/* 0x1EAC */ struct ActorEntry* unk_1EAC;
- /* 0x1EB0 */ s16 *unk_1EB0;
- /* 0x1EB4 */ UNK_TYPE1 unk_1EB4[0x4];
+ /* 0x1EB0 */ s16* unk_1EB0;
+ /* 0x1EB4 */ s16* unk_1EB4;
/* 0x1EB8 */ s32 unk_1EB8;
/* 0x1EBC */ Event event;
/* 0x1ECC */ UNK_TYPE1 unk_1ECC[0x14];
diff --git a/src/overlays/submenu/submenu_ovl/m_submenu_ovl.c b/src/overlays/submenu/submenu_ovl/m_submenu_ovl.c
index cbaffdf..5e839b2 100644
--- a/src/overlays/submenu/submenu_ovl/m_submenu_ovl.c
+++ b/src/overlays/submenu/submenu_ovl/m_submenu_ovl.c
@@ -1529,7 +1529,7 @@ void mSM_menu_ovl_draw(Submenu* submenu, Game_Play* game_play) {
}
void mSM_menu_ovl_init(Submenu* submenu) {
- Game_Play_unk_0110* var_v1;
+ ObjectExchangeBank* var_v1;
void* func = none_proc1;
u16 temp = 0x2000;
@@ -1539,12 +1539,12 @@ void mSM_menu_ovl_init(Submenu* submenu) {
//! FAKE
label:
if (submenu->unk_00 != 4) {
- var_v1 = &((Game_Play*)gamePT)->unk_0110;
+ var_v1 = &((Game_Play*)gamePT)->objectExchangeBank;
} else {
var_v1 = &((Game__00743CD0*)gamePT)->unk_02FC;
}
- ovl_base.unk_10000.unk_00 = var_v1->unk_1818;
+ ovl_base.unk_10000.unk_00 = var_v1->unk1818;
submenu->unk_08 = SUBMENU_PROGRAM_0;
ovl_base.unk_10670.unk_00 = func;
ovl_base.unk_10670.unk_04 = func;
diff --git a/yamls/jp/code.yaml b/yamls/jp/code.yaml
index 080bc75..63d1f80 100644
--- a/yamls/jp/code.yaml
+++ b/yamls/jp/code.yaml
@@ -74,7 +74,7 @@
- [0x6E6C90, c, code/m_start_data_init]
- [0x6E7AD0, asm, code/6E7AD0]
- [0x6E80C0, c, code/m_submenu]
- - [0x6E9650, asm, code/6E9650]
+ - [0x6E9650, c, code/m_scene]
- [0x6EAB20, asm, code/m_skin_matrix]
- [0x6EC430, c, code/m_snowman]
- [0x6EC9E0, asm, code/6EC9E0]
@@ -215,7 +215,7 @@
- [0x73B400, rodata, code/m_shop]
- [0x73B580, rodata, code/m_string]
- [0x73B5C0, .rodata, code/m_submenu]
- - [0x73B6D0, rodata, code/m_scene]
+ - [0x73B6D0, .rodata, code/m_scene]
- [0x73B700, rodata, code/73B700]
- [0x73B710, .rodata, code/m_snowman]
- [0x73B720, rodata, code/m_titledemo]