summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnghelo Carvajal <angheloalf95@gmail.com>2023-09-08 12:02:32 -0300
committerGitHub <noreply@github.com>2023-09-08 08:02:32 -0700
commit81b40ad296cc1f501bf8a33ecb38015a1d6148a8 (patch)
treee784e455d63c1a77b697278c5d4e52f311cb14ef /src
parente8c701eeb4309235940ca685b00031140e22f79a (diff)
`submenu_ovl`, 3 NON_EQUIVALENTs and 2 NON_MATCHINGs (#88)
* C file * func_8085DA28_jp, func_8085DA9C_jp * func_8085D638_jp * func_8085D358_jp, func_8085D500_jp, func_8085D674_jp * bleh * func_8085BAC0_jp * func_8085D128_jp * Rename many functions * mSM_move_menu * a * func_8085D43C_jp * mSM_set_char_matrix * mSM_cbuf_copy draft * mSM_cbuf_copy NON_EQUIVALENT * func_8085C20C_jp draft * match func_8085C20C_jp * cleanup unc_8085C20C_jp * func_8085C7A4_jp ok, func_8085C7B8_jp NON_EQUIVALENT * mSM_draw_mail NON_MATCHING * func_8085D094_jp * mSM_set_other_seg mSM_set_before_menu_proc * meh * mSM_move_Move * migrate data * move submenu overlays to the submenu folder and make headers for them * name some files based on rodata strings * name functions from known submenu overlays * mSM_move_chg_base * mSM_menu_ovl_init NON_MATCHING * migrate bss * mSM_menu_ovl_init * SubmenuProgramId * mSM_save_before_func * mSM_return_func NON_EQUIVALENT * some cleanup * rename lots of data * kinda format * more cleanup * symbolize remaining stuff * format * Kinda fix whatever is going on with Game_Play_unk_0110 * mroecleanup * name known overlays * tag_program_dlftbl, hand_program_dlftbl, haniwa_program_dlftbl * format * flag defines
Diffstat (limited to 'src')
-rw-r--r--src/code/m_actor.c38
-rw-r--r--src/code/m_submenu.c81
-rw-r--r--src/overlays/gamestates/ovl__00743CD0/_00743CD0.h9
-rw-r--r--src/overlays/gamestates/ovl_play/m_play.c12
-rw-r--r--src/overlays/gamestates/ovl_play/m_play.h8
-rw-r--r--src/overlays/submenu/board_ovl/m_board_ovl.h13
-rw-r--r--src/overlays/submenu/catalog_ovl/m_catalog_ovl.h13
-rw-r--r--src/overlays/submenu/hand_ovl/m_hand_ovl.h12
-rw-r--r--src/overlays/submenu/haniwaPortrait_ovl/m_haniwaPortrait_ovl.h12
-rw-r--r--src/overlays/submenu/inventory_ovl/m_inventory_ovl.h13
-rw-r--r--src/overlays/submenu/ledit_ovl/m_ledit_ovl.h13
-rw-r--r--src/overlays/submenu/map_ovl/m_map_ovl.h13
-rw-r--r--src/overlays/submenu/ovl__00789B60/ovl__00789B60.h13
-rw-r--r--src/overlays/submenu/ovl__0078A560/ovl__0078A560.h13
-rw-r--r--src/overlays/submenu/ovl__0078AE30/ovl__0078AE30.h13
-rw-r--r--src/overlays/submenu/ovl__0078CB80/ovl__0078CB80.h13
-rw-r--r--src/overlays/submenu/ovl__00792700/ovl__00792700.h13
-rw-r--r--src/overlays/submenu/ovl__00794380/ovl__00794380.h13
-rw-r--r--src/overlays/submenu/ovl__00797A50/ovl__00797A50.h13
-rw-r--r--src/overlays/submenu/ovl__00799580/ovl__00799580.h13
-rw-r--r--src/overlays/submenu/ovl__0079A290/ovl__0079A290.h13
-rw-r--r--src/overlays/submenu/ovl__0079B120/ovl__0079B120.h13
-rw-r--r--src/overlays/submenu/ovl__0079C020/ovl__0079C020.h13
-rw-r--r--src/overlays/submenu/ovl__0079DA50/ovl__0079DA50.h13
-rw-r--r--src/overlays/submenu/ovl__0079E430/ovl__0079E430.h13
-rw-r--r--src/overlays/submenu/ovl__0079F810/ovl__0079F810.h13
-rw-r--r--src/overlays/submenu/ovl__007A10E0/ovl__007A10E0.h13
-rw-r--r--src/overlays/submenu/submenu_ovl/m_submenu_ovl.c1573
-rw-r--r--src/overlays/submenu/submenu_ovl/m_submenu_ovl.h158
-rw-r--r--src/overlays/submenu/tag_ovl/m_tag_ovl.h12
30 files changed, 2101 insertions, 74 deletions
diff --git a/src/code/m_actor.c b/src/code/m_actor.c
index 7398d4b..9ef1551 100644
--- a/src/code/m_actor.c
+++ b/src/code/m_actor.c
@@ -103,11 +103,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, actor);
+ var_v1 = common_data.unk_1004C->unk_F4(game_play->unk_0110.unk_0000, actor);
break;
default:
- var_v1 = game_play->unk_0110[actor->unk_026].unk_00 > 0;
+ var_v1 = game_play->unk_0110.unk_0000[actor->unk_026].unk_00 > 0;
break;
}
@@ -147,14 +147,14 @@ void Actor_delete(Actor* actor) {
void Actor_ct(Actor* actor, Game_Play* game_play) {
s32 pad[2] UNUSED;
- Game_Play_unk_0110* temp;
+ Game_Play_unk_0110_unk_0000* temp;
Npc* npc;
CommonData_unk_1004C_unk_14_arg0 sp34;
Game_Play_unk_0110* temp_a0;
- temp_a0 = game_play->unk_0110;
+ temp_a0 = &game_play->unk_0110;
- temp = temp_a0;
+ temp = temp_a0->unk_0000;
temp += actor->unk_026;
temp->unk_50++;
@@ -162,8 +162,8 @@ void Actor_ct(Actor* actor, Game_Play* game_play) {
npc = (Npc*)actor;
common_data.unk_1004C->unk_14(&sp34, npc->actor.fgName);
- npc->unk_708 = mSc_bank_regist_check(temp_a0, sp34.unk_02);
- temp_a0[npc->unk_708].unk_50++;
+ npc->unk_708 = mSc_bank_regist_check(temp_a0->unk_0000, sp34.unk_02);
+ temp_a0->unk_0000[npc->unk_708].unk_50++;
}
actor->world = actor->home;
@@ -193,7 +193,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[actor->unk_026].segment);
+ gSegments[6] = (uintptr_t)OS_K0_TO_PHYSICAL(temp_a0->unk_0000[actor->unk_026].segment);
actor->ct(actor, game_play);
actor->ct = NULL;
}
@@ -201,7 +201,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* temp_v0_6;
+ Game_Play_unk_0110_unk_0000* temp_v0_6;
s32 new_var;
if (actor->save != NULL) {
@@ -222,7 +222,7 @@ void Actor_dt(Actor* actor, Game_Play* game_play) {
actor->parent->child = NULL;
}
- temp_v0_6 = game_play->unk_0110;
+ temp_v0_6 = game_play->unk_0110.unk_0000;
if (0) {}
switch ((actor->fgName & 0xF000) >> 0xC) {
@@ -232,7 +232,7 @@ void Actor_dt(Actor* actor, Game_Play* game_play) {
break;
default:
- new_var = game_play->unk_190C;
+ new_var = game_play->unk_0110.unk_17FC;
if (actor->unk_026 >= new_var) {
temp_v0_6 = &temp_v0_6[(void)0, actor->unk_026];
@@ -272,7 +272,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[(void)0, actor->unk_026].segment;
+ void* segment = game_play->unk_0110.unk_0000[(void)0, actor->unk_026].segment;
gSegments[6] = (uintptr_t)OS_PHYSICAL_TO_K0(segment);
@@ -452,7 +452,7 @@ 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[actor->unk_026].segment);
+ gSegments[6] = (uintptr_t)OS_K0_TO_PHYSICAL(game_play->unk_0110.unk_0000[actor->unk_026].segment);
game_play->state.unk_9D = 0x98;
actor->ct(actor, game_play);
@@ -488,7 +488,7 @@ 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[actor->unk_026].segment);
+ gSegments[6] = (uintptr_t)OS_K0_TO_PHYSICAL(game_play->unk_0110.unk_0000[actor->unk_026].segment);
game_play->state.unk_9D = 0xA1;
actor->update(actor, game_play);
game_play->state.unk_9D = 0xA2;
@@ -692,8 +692,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, sp92);
- temp_v0 = mSc_bank_regist_check(game_play->unk_0110, sp90);
+ *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);
if ((*arg0 < 0) || (temp_v0 < 0)) {
if (*arg0 >= 0) {
@@ -702,7 +702,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, sp92, sp90);
+ common_data.unk_1004C->unk_EC(game_play->unk_0110.unk_0000, sp92, sp90);
actor_free_check(overlayEntry, fgName);
ret = 0;
}
@@ -713,10 +713,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, profile->objectId);
+ *arg0 = mSc_bank_regist_check(game_play->unk_0110.unk_0000, profile->objectId);
if (*arg0 == -1) {
- func_800C6144_jp(game_play->unk_0110, profile->objectId);
+ func_800C6144_jp(game_play->unk_0110.unk_0000, profile->objectId);
actor_free_check(overlayEntry, fgName);
ret = 0;
}
diff --git a/src/code/m_submenu.c b/src/code/m_submenu.c
index a09cfb1..b40490c 100644
--- a/src/code/m_submenu.c
+++ b/src/code/m_submenu.c
@@ -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* var_s4;
+ Game_Play_unk_0110_unk_0000* var_s4;
s32 var_s0;
s32 var_s3;
Player* temp_v0;
@@ -71,7 +71,7 @@ void mSM_load_player_anime(Game_Play* game_play) {
return;
}
- var_s4 = game_play->unk_0110;
+ var_s4 = game_play->unk_0110.unk_0000;
var_s4 += mSc_bank_regist_check(var_s4, 9);
for (var_s3 = 0; var_s3 < 2; var_s3++, var_s4++) {
@@ -101,7 +101,7 @@ void mSM_load_player_anime(Game_Play* game_play);
#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_load_player_anime.s")
#endif
-void SubmenuArea_DoLink(SubmenuArea* area, mSM* submenu, SubmenuAreaIndex index) {
+void SubmenuArea_DoLink(SubmenuArea* area, Submenu* submenu, SubmenuAreaIndex index) {
area->allocatedRamAddr = D_8010DCE0_jp;
if (index == SUBMENU_AREA_INDEX_PLAYER) {
@@ -129,7 +129,7 @@ void SubmenuArea_DoLink(SubmenuArea* area, mSM* submenu, SubmenuAreaIndex index)
(void*)((uintptr_t)area->allocatedRamAddr + ALIGN64((uintptr_t)area->vramEnd - (uintptr_t)area->vramStart));
}
-void SubmenuArea_DoUnlink(SubmenuArea* area, mSM* submenu) {
+void SubmenuArea_DoUnlink(SubmenuArea* area, Submenu* submenu) {
if (area->allocatedRamAddr == NULL) {
return;
}
@@ -142,7 +142,7 @@ void SubmenuArea_DoUnlink(SubmenuArea* area, mSM* submenu) {
SubmenuArea_visit = NULL;
}
-s32 mSM_ovlptr_dllcnv_sub(void* vram, SubmenuArea* area, mSM* submenu) {
+s32 mSM_ovlptr_dllcnv_sub(void* vram, SubmenuArea* area, Submenu* submenu) {
SubmenuAreaIndex index;
s32 len = SUBMENU_AREA_INDEX_MAX;
@@ -156,7 +156,7 @@ s32 mSM_ovlptr_dllcnv_sub(void* vram, SubmenuArea* area, mSM* submenu) {
return 0;
}
-void* mSM_ovlptr_dllcnv(void* vram, mSM* submenu) {
+void* mSM_ovlptr_dllcnv(void* vram, Submenu* submenu) {
SubmenuArea* area = SubmenuArea_visit;
if (area == NULL) {
@@ -248,7 +248,7 @@ void mSM_submenu_ovlptr_init(Game_Play* game_play) {
size_t temp8 = ALIGN64(SEGMENT_VRAM_SIZE(ovl__0079E430));
size_t temp9 = ALIGN64(SEGMENT_VRAM_SIZE(ovl__0079F810));
size_t submenuOvlSize = ALIGN64(SEGMENT_VRAM_SIZE(submenu_ovl));
- size_t temp_a0 = ALIGN64(SEGMENT_VRAM_SIZE(ovl__00777AE0));
+ size_t temp_a0 = ALIGN64(SEGMENT_VRAM_SIZE(tag_ovl));
size_t var_t0 = temp6 + temp7;
size_t temp10;
size_t temp1;
@@ -262,12 +262,12 @@ void mSM_submenu_ovlptr_init(Game_Play* game_play) {
var_t0 = MAX(temp8 + temp9, var_t0);
- temp10 = ALIGN64(SEGMENT_VRAM_SIZE(ovl__007829E0));
- temp1 = ALIGN64(SEGMENT_VRAM_SIZE(ovl__00785700));
- temp2 = ALIGN64(SEGMENT_VRAM_SIZE(ovl__007908A0));
+ temp10 = ALIGN64(SEGMENT_VRAM_SIZE(hand_ovl));
+ temp1 = ALIGN64(SEGMENT_VRAM_SIZE(inventory_ovl));
+ temp2 = ALIGN64(SEGMENT_VRAM_SIZE(board_ovl));
temp3 = ALIGN64(SEGMENT_VRAM_SIZE(ovl__0078CB80));
temp4 = ALIGN64(SEGMENT_VRAM_SIZE(ovl__00799580));
- temp5 = ALIGN64(SEGMENT_VRAM_SIZE(ovl__007A28F0));
+ temp5 = ALIGN64(SEGMENT_VRAM_SIZE(catalog_ovl));
var_a3 = submenuOvlSize + temp1 + temp_a0 + temp10 + temp2 + temp3 + temp4 + var_t0;
var_a3 = MAX(submenuOvlSize + temp_a0 + temp10 + temp5 + 0x4000, var_a3);
@@ -294,7 +294,7 @@ dummy_label_255895:
fault_AddressConverterAddClient(&B_80144680_jp, func_800C497C_jp, NULL);
}
-void mSM_submenu_ovlptr_cleanup(mSM* submenu) {
+void mSM_submenu_ovlptr_cleanup(Submenu* submenu) {
fault_RemoveClient(&B_80144670_jp);
fault_AddressConverterRemoveClient(&B_80144680_jp);
if (SubmenuArea_visit != NULL) {
@@ -307,7 +307,7 @@ void mSM_submenu_ovlptr_cleanup(mSM* submenu) {
D_8010DCE4_jp = 0;
}
-void load_player(mSM* submenu) {
+void load_player(Submenu* submenu) {
SubmenuArea* playerActorOvl = &SubmenuArea_dlftbl[SUBMENU_AREA_INDEX_PLAYER];
if (SubmenuArea_visit == playerActorOvl) {
@@ -321,8 +321,8 @@ void load_player(mSM* submenu) {
SubmenuArea_DoLink(playerActorOvl, submenu, SUBMENU_AREA_INDEX_PLAYER);
}
-void mSM_submenu_ct(mSM* submenu) {
- bzero(submenu, sizeof(mSM));
+void mSM_submenu_ct(Submenu* submenu) {
+ bzero(submenu, sizeof(Submenu));
submenu->moveProcIndex = MSM_MOVE_PROC_WAIT;
submenu->unk_20 = 0;
@@ -332,23 +332,23 @@ void mSM_submenu_ct(mSM* submenu) {
common_data.unk_104AD = 0;
}
- submenu->play = (void*)none_proc1;
+ submenu->move = (void*)none_proc1;
submenu->draw = (void*)none_proc1;
}
-void mSM_submenu_dt(UNUSED mSM* submenu) {
+void mSM_submenu_dt(UNUSED Submenu* submenu) {
}
-void mSM_open_submenu(mSM* submenu, s32 arg1, s32 arg2, s32 arg3) {
- mSM_open_submenu_new2(submenu, arg1, arg2, arg3, 0, 0);
+void mSM_open_submenu(Submenu* submenu, SubmenuProgramId programId, s32 arg2, s32 arg3) {
+ mSM_open_submenu_new2(submenu, programId, arg2, arg3, 0, 0);
}
-void mSM_open_submenu_new(mSM* submenu, s32 arg1, s32 arg2, s32 arg3, s32 arg4) {
- mSM_open_submenu_new2(submenu, arg1, arg2, arg3, arg4, 0);
+void mSM_open_submenu_new(Submenu* submenu, SubmenuProgramId programId, s32 arg2, s32 arg3, s32 arg4) {
+ mSM_open_submenu_new2(submenu, programId, arg2, arg3, arg4, 0);
}
-void mSM_open_submenu_new2(mSM* submenu, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5) {
- submenu->unk_04 = arg1;
+void mSM_open_submenu_new2(Submenu* submenu, SubmenuProgramId programId, s32 arg2, s32 arg3, s32 arg4, s32 arg5) {
+ submenu->programId = programId;
submenu->unk_10 = arg2;
submenu->unk_14 = arg3;
submenu->unk_18 = arg4;
@@ -373,7 +373,7 @@ void mSM_Reset_player_btn_type2(Game_Play* game_play) {
}
void mSM_submenu_ctrl(Game_Play* game_play) {
- mSM* submenu = &game_play->submenu;
+ Submenu* submenu = &game_play->submenu;
if ((game_play->submenu.moveProcIndex != MSM_MOVE_PROC_WAIT) || (game_play->unk_1EE0 != 0) ||
(game_play->unk_1EE3 != 0)) {
@@ -422,14 +422,14 @@ void mSM_submenu_ctrl(Game_Play* game_play) {
}
}
- if (submenu->unk_04 != 0) {
+ if (submenu->programId != SUBMENU_PROGRAM_0) {
submenu->moveProcIndex = MSM_MOVE_PROC_PREWAIT;
submenu->unk_00 = 1;
SetGameFrame(2);
}
}
-void mSM_move_Wait(mSM* submenu) {
+void mSM_move_Wait(Submenu* submenu) {
if (submenu->unk_20 != 0) {
submenu->unk_20--;
}
@@ -439,13 +439,13 @@ void mSM_move_Wait(mSM* submenu) {
}
}
-void mSM_move_PREWait(mSM* submenu) {
+void mSM_move_PREWait(Submenu* submenu) {
if (submenu->unk_00 > 2) {
submenu->moveProcIndex = MSM_MOVE_PROC_LINKWAIT;
}
}
-void mSM_move_LINKWait(mSM* submenu) {
+void mSM_move_LINKWait(Submenu* submenu) {
SubmenuArea* submenuOvl = &SubmenuArea_dlftbl[SUBMENU_AREA_INDEX_SUBMENU];
if (SubmenuArea_visit == submenuOvl) {
@@ -457,7 +457,7 @@ void mSM_move_LINKWait(mSM* submenu) {
}
SubmenuArea_DoLink(submenuOvl, submenu, SUBMENU_AREA_INDEX_SUBMENU);
- submenu->play = mSM_ovlptr_dllcnv(mSM_menu_ovl_init, submenu);
+ submenu->move = mSM_ovlptr_dllcnv(mSM_menu_ovl_init, submenu);
submenu->draw = (void*)none_proc1;
submenu->moveProcIndex = MSM_MOVE_PROC_PLAY;
submenu->unk_DC = 1;
@@ -469,7 +469,8 @@ void mSM_move_LINKWait(mSM* submenu) {
xyz_t_move(&submenu->unk_E4, &ZeroVec);
if (submenu->unk_00 != 4) {
- if (((submenu->unk_04 == 4) && (submenu->unk_10 == 0)) || (common_data.now_private->gender == 0)) {
+ if (((submenu->programId == SUBMENU_PROGRAM_LEDIT) && (submenu->unk_10 == 0)) ||
+ (common_data.now_private->gender == 0)) {
sAdo_SpecChange(5);
} else {
sAdo_SpecChange(6);
@@ -478,22 +479,22 @@ void mSM_move_LINKWait(mSM* submenu) {
}
}
-void mSM_move_Play(mSM* submenu) {
- submenu->play(submenu);
+void mSM_move_Play(Submenu* submenu) {
+ submenu->move(submenu);
}
#ifdef NON_MATCHING
// likely branch instead of normal branch
-void mSM_move_End(mSM* submenu) {
+void mSM_move_End(Submenu* submenu) {
UNUSED s32 pad;
Game_Play* sp28;
UNK_TYPE sp24;
UNUSED s32 sp20[1];
sp28 = (Game_Play*)gamePT;
- submenu->play(submenu);
+ submenu->move(submenu);
submenu->moveProcIndex = MSM_MOVE_PROC_WAIT;
- submenu->unk_04 = 0;
+ submenu->programId = SUBMENU_PROGRAM_0;
submenu->unk_20 = 2;
submenu->unk_DC = 0;
@@ -505,7 +506,7 @@ void mSM_move_End(mSM* submenu) {
sp24 = mMsg_Get_base_window_p();
submenu->unk_00 = 0;
- mSc_dmacopy_all_exchange_bank(sp28->unk_0110);
+ mSc_dmacopy_all_exchange_bank(sp28->unk_0110.unk_0000);
SubmenuArea_DoUnlink(SubmenuArea_dlftbl, submenu);
load_player(submenu);
mSM_load_player_anime(sp28);
@@ -522,11 +523,11 @@ void mSM_move_End(mSM* submenu) {
mMsg_sound_spec_change_voice(sp24);
}
#else
-void mSM_move_End(mSM* submenu);
+void mSM_move_End(Submenu* submenu);
#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_move_End.s")
#endif
-typedef void (*MoveProcFunc)(mSM*);
+typedef void (*MoveProcFunc)(Submenu*);
MoveProcFunc move_proc_616[MSM_MOVE_PROC_MAX] = {
mSM_move_Wait, // MSM_MOVE_PROC_WAIT
@@ -536,11 +537,11 @@ MoveProcFunc move_proc_616[MSM_MOVE_PROC_MAX] = {
mSM_move_End, // MSM_MOVE_PROC_END
};
-void mSM_submenu_move(mSM* submenu) {
+void mSM_submenu_move(Submenu* submenu) {
move_proc_616[submenu->moveProcIndex](submenu);
}
-void mSM_submenu_draw(mSM* submenu, struct Game_Play* game_play) {
+void mSM_submenu_draw(Submenu* submenu, struct Game_Play* game_play) {
SubmenuArea* submenuOvl = &SubmenuArea_dlftbl[SUBMENU_AREA_INDEX_SUBMENU];
if ((submenu->unk_00 >= 3) && (submenu->moveProcIndex == 3) && (submenuOvl == SubmenuArea_visit)) {
diff --git a/src/overlays/gamestates/ovl__00743CD0/_00743CD0.h b/src/overlays/gamestates/ovl__00743CD0/_00743CD0.h
index 6aa683e..ffa7c03 100644
--- a/src/overlays/gamestates/ovl__00743CD0/_00743CD0.h
+++ b/src/overlays/gamestates/ovl__00743CD0/_00743CD0.h
@@ -3,11 +3,16 @@
#include "ultra64.h"
#include "game.h"
+#include "m_view.h"
+#include "unknown_structs.h"
#include "unk.h"
typedef struct Game__00743CD0 {
- /* 0x00 */ Game state;
- /* 0xE0 */ UNK_TYPE1 unk_00[0x1B20-0xE0];
+ /* 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];
} 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 e518099..0c824c0 100644
--- a/src/overlays/gamestates/ovl_play/m_play.c
+++ b/src/overlays/gamestates/ovl_play/m_play.c
@@ -456,7 +456,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);
+ mSc_dmacopy_data_bank(game_play->unk_0110.unk_0000);
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)) {
@@ -478,13 +478,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;
+ Game_Play_unk_0110* p = &game_play->unk_0110;
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->segment);
+ gSegments[4] = (uintptr_t)OS_K0_TO_PHYSICAL(p->unk_0000[0].segment);
gSegments[2] = (uintptr_t)OS_K0_TO_PHYSICAL(game_play->unk_010C);
game_play->state.unk_9C = 2;
@@ -536,7 +536,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[0].segment;
+ void* temp_v0 = game_play->unk_0110.unk_0000[0].segment;
gSegments[4] = (uintptr_t)OS_K0_TO_PHYSICAL(temp_v0);
gSegments[2] = (uintptr_t)OS_K0_TO_PHYSICAL(game_play->unk_010C);
@@ -826,12 +826,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);
+ mSc_data_bank_ct(game_play, game_play->unk_0110.unk_0000);
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);
+ mSc_decide_exchange_bank(game_play->unk_0110.unk_0000);
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 cb51835..d530d9a 100644
--- a/src/overlays/gamestates/ovl_play/m_play.h
+++ b/src/overlays/gamestates/ovl_play/m_play.h
@@ -66,17 +66,15 @@ 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[UNK_SIZE];
- /* 0x0164 */ UNK_TYPE1 unk_0164[0x17A8];
- /* 0x190C */ s32 unk_190C;
- /* 0x1910 */ UNK_TYPE1 unk_1910[0x28];
+ /* 0x0110 */ Game_Play_unk_0110 unk_0110;
+ /* 0x192C */ UNK_TYPE1 unk_192C[0xC];
/* 0x1938 */ Game_Play1938 unk_1938;
/* 0x1A60 */ UNK_TYPE1 unk_1A60[0x138];
/* 0x1B98 */ Kankyo kankyo;
/* 0x1C60 */ Global_light glight;
/* 0x1C70 */ Pause pause;
/* 0x1C78 */ ActorInfo actorInfo;
- /* 0x1CBC */ mSM submenu;
+ /* 0x1CBC */ Submenu submenu;
/* 0x1DAC */ s8 unk_1DAC;
/* 0x1DAD */ UNK_TYPE1 unk_1DAD[0x3];
/* 0x1DB0 */ UNK_TYPE1 unk_1DB0[0x10];
diff --git a/src/overlays/submenu/board_ovl/m_board_ovl.h b/src/overlays/submenu/board_ovl/m_board_ovl.h
new file mode 100644
index 0000000..43e1270
--- /dev/null
+++ b/src/overlays/submenu/board_ovl/m_board_ovl.h
@@ -0,0 +1,13 @@
+#ifndef M_BOARD_OVL_H
+#define M_BOARD_OVL_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void mBD_board_ovl_construct(struct Submenu* submenu);
+void mBD_board_ovl_destruct(struct Submenu* submenu);
+void mBD_board_ovl_set_proc(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/catalog_ovl/m_catalog_ovl.h b/src/overlays/submenu/catalog_ovl/m_catalog_ovl.h
new file mode 100644
index 0000000..e1099d3
--- /dev/null
+++ b/src/overlays/submenu/catalog_ovl/m_catalog_ovl.h
@@ -0,0 +1,13 @@
+#ifndef M_CATALOG_OVL_H
+#define M_CATALOG_OVL_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void mCL_catalog_ovl_construct(struct Submenu* submenu);
+void mCL_catalog_ovl_destruct(struct Submenu* submenu);
+void mCL_catalog_ovl_set_proc(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/hand_ovl/m_hand_ovl.h b/src/overlays/submenu/hand_ovl/m_hand_ovl.h
new file mode 100644
index 0000000..c608fd2
--- /dev/null
+++ b/src/overlays/submenu/hand_ovl/m_hand_ovl.h
@@ -0,0 +1,12 @@
+#ifndef M_HAND_OVL_H
+#define M_HAND_OVL_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void mHD_hand_ovl_construct(struct Submenu* submenu);
+void mHD_hand_ovl_destruct(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/haniwaPortrait_ovl/m_haniwaPortrait_ovl.h b/src/overlays/submenu/haniwaPortrait_ovl/m_haniwaPortrait_ovl.h
new file mode 100644
index 0000000..86fb5cc
--- /dev/null
+++ b/src/overlays/submenu/haniwaPortrait_ovl/m_haniwaPortrait_ovl.h
@@ -0,0 +1,12 @@
+#ifndef haniwaPortrait_ovl_H
+#define haniwaPortrait_ovl_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void mHP_haniwaPortrait_ovl_construct(struct Submenu* submenu);
+void mHP_haniwaPortrait_ovl_destruct(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/inventory_ovl/m_inventory_ovl.h b/src/overlays/submenu/inventory_ovl/m_inventory_ovl.h
new file mode 100644
index 0000000..056ac87
--- /dev/null
+++ b/src/overlays/submenu/inventory_ovl/m_inventory_ovl.h
@@ -0,0 +1,13 @@
+#ifndef M_INVENTORY_OVL_H
+#define M_INVENTORY_OVL_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void mIV_inventory_ovl_construct(struct Submenu* submenu);
+void mIV_inventory_ovl_destruct(struct Submenu* submenu);
+void mIV_inventory_ovl_set_proc(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ledit_ovl/m_ledit_ovl.h b/src/overlays/submenu/ledit_ovl/m_ledit_ovl.h
new file mode 100644
index 0000000..6a80e62
--- /dev/null
+++ b/src/overlays/submenu/ledit_ovl/m_ledit_ovl.h
@@ -0,0 +1,13 @@
+#ifndef M_LEDIT_OVL_H
+#define M_LEDIT_OVL_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void mLE_ledit_ovl_construct(struct Submenu* submenu);
+void mLE_ledit_ovl_destruct(struct Submenu* submenu);
+void mLE_ledit_ovl_set_proc(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/map_ovl/m_map_ovl.h b/src/overlays/submenu/map_ovl/m_map_ovl.h
new file mode 100644
index 0000000..2b85420
--- /dev/null
+++ b/src/overlays/submenu/map_ovl/m_map_ovl.h
@@ -0,0 +1,13 @@
+#ifndef M_MAP_OVL_H
+#define M_MAP_OVL_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void mMP_map_ovl_construct(struct Submenu* submenu);
+void mMP_map_ovl_destruct(struct Submenu* submenu);
+void mMP_map_ovl_set_proc(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__00789B60/ovl__00789B60.h b/src/overlays/submenu/ovl__00789B60/ovl__00789B60.h
new file mode 100644
index 0000000..8fb891c
--- /dev/null
+++ b/src/overlays/submenu/ovl__00789B60/ovl__00789B60.h
@@ -0,0 +1,13 @@
+#ifndef OVL__00789B60_H
+#define OVL__00789B60_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_80882778_jp(struct Submenu* submenu);
+void func_80882818_jp(struct Submenu* submenu);
+void func_808826B8_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__0078A560/ovl__0078A560.h b/src/overlays/submenu/ovl__0078A560/ovl__0078A560.h
new file mode 100644
index 0000000..829af1d
--- /dev/null
+++ b/src/overlays/submenu/ovl__0078A560/ovl__0078A560.h
@@ -0,0 +1,13 @@
+#ifndef OVL__0078A560_H
+#define OVL__0078A560_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_8088306C_jp(struct Submenu* submenu);
+void func_808830E8_jp(struct Submenu* submenu);
+void func_80882FAC_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__0078AE30/ovl__0078AE30.h b/src/overlays/submenu/ovl__0078AE30/ovl__0078AE30.h
new file mode 100644
index 0000000..b9018fa
--- /dev/null
+++ b/src/overlays/submenu/ovl__0078AE30/ovl__0078AE30.h
@@ -0,0 +1,13 @@
+#ifndef OVL__0078AE30_H
+#define OVL__0078AE30_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_80884120_jp(struct Submenu* submenu);
+void func_808841A8_jp(struct Submenu* submenu);
+void func_80883F5C_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__0078CB80/ovl__0078CB80.h b/src/overlays/submenu/ovl__0078CB80/ovl__0078CB80.h
new file mode 100644
index 0000000..292a9a9
--- /dev/null
+++ b/src/overlays/submenu/ovl__0078CB80/ovl__0078CB80.h
@@ -0,0 +1,13 @@
+#ifndef OVL__0078CB80_H
+#define OVL__0078CB80_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_808883F8_jp(struct Submenu* submenu);
+void func_808884E4_jp(struct Submenu* submenu);
+void func_80888354_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__00792700/ovl__00792700.h b/src/overlays/submenu/ovl__00792700/ovl__00792700.h
new file mode 100644
index 0000000..92a5134
--- /dev/null
+++ b/src/overlays/submenu/ovl__00792700/ovl__00792700.h
@@ -0,0 +1,13 @@
+#ifndef OVL__00792700_H
+#define OVL__00792700_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_8088C4A0_jp(struct Submenu* submenu);
+void func_8088C548_jp(struct Submenu* submenu);
+void func_8088C344_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__00794380/ovl__00794380.h b/src/overlays/submenu/ovl__00794380/ovl__00794380.h
new file mode 100644
index 0000000..195e438
--- /dev/null
+++ b/src/overlays/submenu/ovl__00794380/ovl__00794380.h
@@ -0,0 +1,13 @@
+#ifndef OVL__00794380_H
+#define OVL__00794380_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_8088D924_jp(struct Submenu* submenu);
+void func_8088D9D4_jp(struct Submenu* submenu);
+void func_8088D81C_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__00797A50/ovl__00797A50.h b/src/overlays/submenu/ovl__00797A50/ovl__00797A50.h
new file mode 100644
index 0000000..324a216
--- /dev/null
+++ b/src/overlays/submenu/ovl__00797A50/ovl__00797A50.h
@@ -0,0 +1,13 @@
+#ifndef OVL__00797A50_H
+#define OVL__00797A50_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_80895B04_jp(struct Submenu* submenu);
+void func_80895B9C_jp(struct Submenu* submenu);
+void func_80895A30_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__00799580/ovl__00799580.h b/src/overlays/submenu/ovl__00799580/ovl__00799580.h
new file mode 100644
index 0000000..1d7fc9f
--- /dev/null
+++ b/src/overlays/submenu/ovl__00799580/ovl__00799580.h
@@ -0,0 +1,13 @@
+#ifndef OVL__00799580_H
+#define OVL__00799580_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_80896898_jp(struct Submenu* submenu);
+void func_80896938_jp(struct Submenu* submenu);
+void func_80896830_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__0079A290/ovl__0079A290.h b/src/overlays/submenu/ovl__0079A290/ovl__0079A290.h
new file mode 100644
index 0000000..80224dc
--- /dev/null
+++ b/src/overlays/submenu/ovl__0079A290/ovl__0079A290.h
@@ -0,0 +1,13 @@
+#ifndef OVL__0079A290_H
+#define OVL__0079A290_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_8089730C_jp(struct Submenu* submenu);
+void func_80897394_jp(struct Submenu* submenu);
+void func_8089728C_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__0079B120/ovl__0079B120.h b/src/overlays/submenu/ovl__0079B120/ovl__0079B120.h
new file mode 100644
index 0000000..5ba2173
--- /dev/null
+++ b/src/overlays/submenu/ovl__0079B120/ovl__0079B120.h
@@ -0,0 +1,13 @@
+#ifndef OVL__0079B120_H
+#define OVL__0079B120_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_80898688_jp(struct Submenu* submenu);
+void func_80898710_jp(struct Submenu* submenu);
+void func_80898520_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__0079C020/ovl__0079C020.h b/src/overlays/submenu/ovl__0079C020/ovl__0079C020.h
new file mode 100644
index 0000000..85a0686
--- /dev/null
+++ b/src/overlays/submenu/ovl__0079C020/ovl__0079C020.h
@@ -0,0 +1,13 @@
+#ifndef OVL__0079C020_H
+#define OVL__0079C020_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_80899E34_jp(struct Submenu* submenu);
+void func_80899F00_jp(struct Submenu* submenu);
+void func_80899D84_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__0079DA50/ovl__0079DA50.h b/src/overlays/submenu/ovl__0079DA50/ovl__0079DA50.h
new file mode 100644
index 0000000..7fd23e2
--- /dev/null
+++ b/src/overlays/submenu/ovl__0079DA50/ovl__0079DA50.h
@@ -0,0 +1,13 @@
+#ifndef OVL__0079DA50_H
+#define OVL__0079DA50_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_8089AB8C_jp(struct Submenu* submenu);
+void func_8089AC14_jp(struct Submenu* submenu);
+void func_8089AAE4_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__0079E430/ovl__0079E430.h b/src/overlays/submenu/ovl__0079E430/ovl__0079E430.h
new file mode 100644
index 0000000..8ea0699
--- /dev/null
+++ b/src/overlays/submenu/ovl__0079E430/ovl__0079E430.h
@@ -0,0 +1,13 @@
+#ifndef OVL__0079E430_H
+#define OVL__0079E430_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_8089BE68_jp(struct Submenu* submenu);
+void func_8089BF10_jp(struct Submenu* submenu);
+void func_8089BCE0_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__0079F810/ovl__0079F810.h b/src/overlays/submenu/ovl__0079F810/ovl__0079F810.h
new file mode 100644
index 0000000..6fe47ab
--- /dev/null
+++ b/src/overlays/submenu/ovl__0079F810/ovl__0079F810.h
@@ -0,0 +1,13 @@
+#ifndef OVL__0079F810_H
+#define OVL__0079F810_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_808A40F0_jp(struct Submenu* submenu);
+void func_808A4188_jp(struct Submenu* submenu);
+void func_808A4058_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/ovl__007A10E0/ovl__007A10E0.h b/src/overlays/submenu/ovl__007A10E0/ovl__007A10E0.h
new file mode 100644
index 0000000..da0ce20
--- /dev/null
+++ b/src/overlays/submenu/ovl__007A10E0/ovl__007A10E0.h
@@ -0,0 +1,13 @@
+#ifndef OVL__007A10E0_H
+#define OVL__007A10E0_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void func_808A5D7C_jp(struct Submenu* submenu);
+void func_808A5E14_jp(struct Submenu* submenu);
+void func_808A5C28_jp(struct Submenu* submenu);
+
+#endif
diff --git a/src/overlays/submenu/submenu_ovl/m_submenu_ovl.c b/src/overlays/submenu/submenu_ovl/m_submenu_ovl.c
new file mode 100644
index 0000000..81f5baf
--- /dev/null
+++ b/src/overlays/submenu/submenu_ovl/m_submenu_ovl.c
@@ -0,0 +1,1573 @@
+#include "m_submenu_ovl.h"
+#include "m_submenu.h"
+#include "m_lib.h"
+#include "game.h"
+#include "ovlmgr.h"
+#include "PreRender.h"
+#include "sys_matrix.h"
+#include "z_std_dma.h"
+#include "6BFE60.h"
+#include "6E0F50.h"
+#include "macros.h"
+#include "segment_symbols.h"
+
+// gamestates
+#include "overlays/gamestates/ovl_play/m_play.h"
+#include "overlays/gamestates/ovl__00743CD0/_00743CD0.h"
+
+// submenus
+#include "overlays/submenu/inventory_ovl/m_inventory_ovl.h"
+#include "overlays/submenu/ovl__0078A560/ovl__0078A560.h"
+#include "overlays/submenu/ovl__0078AE30/ovl__0078AE30.h"
+#include "overlays/submenu/ledit_ovl/m_ledit_ovl.h"
+#include "overlays/submenu/map_ovl/m_map_ovl.h"
+#include "overlays/submenu/ovl__00797A50/ovl__00797A50.h"
+#include "overlays/submenu/ovl__0079B120/ovl__0079B120.h"
+#include "overlays/submenu/ovl__0079C020/ovl__0079C020.h"
+#include "overlays/submenu/ovl__0079DA50/ovl__0079DA50.h"
+#include "overlays/submenu/ovl__0078CB80/ovl__0078CB80.h"
+#include "overlays/submenu/ovl__00789B60/ovl__00789B60.h"
+#include "overlays/submenu/board_ovl/m_board_ovl.h"
+#include "overlays/submenu/ovl__00792700/ovl__00792700.h"
+#include "overlays/submenu/ovl__00794380/ovl__00794380.h"
+#include "overlays/submenu/ovl__00799580/ovl__00799580.h"
+#include "overlays/submenu/ovl__0079A290/ovl__0079A290.h"
+#include "overlays/submenu/ovl__0079E430/ovl__0079E430.h"
+#include "overlays/submenu/ovl__0079F810/ovl__0079F810.h"
+#include "overlays/submenu/ovl__007A10E0/ovl__007A10E0.h"
+#include "overlays/submenu/catalog_ovl/m_catalog_ovl.h"
+#include "overlays/submenu/tag_ovl/m_tag_ovl.h"
+#include "overlays/submenu/hand_ovl/m_hand_ovl.h"
+#include "overlays/submenu/haniwaPortrait_ovl/m_haniwaPortrait_ovl.h"
+
+extern Gfx D_C012370[]; // inv_item_model
+
+extern u8 D_0C00A620[]; // inv_mwin_unknown_pal
+extern u8 D_0C00A6E0[]; // inv_mwin_unknown_tex
+extern u8 D_0C00B720[]; // inv_mwin_haniwa_pal
+extern u8 D_0C00B740[]; // inv_mwin_haniwa_tex
+extern u8 D_0C00DD40[]; // inv_mwin_kaseki2_pal
+extern u8 D_0C00DD80[]; // inv_mwin_kaseki2_tex
+extern u8 D_0C00EC60[]; // inv_mwin_mtegami_pal
+extern u8 D_0C00F0E0[]; // inv_mwin_mtegami_tex
+extern u8 D_0C00F2E0[]; // inv_mwin_pmtegami_tex
+extern u8 D_0C00ECA0[]; // inv_mwin_otegami_pal
+extern u8 D_0C00F4E0[]; // inv_mwin_otegami_tex
+extern u8 D_0C00F6E0[]; // inv_mwin_potegami_tex
+extern u8 D_0C00EC20[]; // inv_mwin_mtegami2_pal
+extern u8 D_0C00ECE0[]; // inv_mwin_mtegami2_tex
+extern u8 D_0C00EEE0[]; // inv_mwin_pmtegami2_tex
+extern u8 D_0C010FA0[]; // inv_mwin_pbox2_pal
+extern u8 D_0C010FC0[]; // inv_mwin_pbox_tex
+extern u8 D_0C012400[]; // inv_mwin_pbox2_pal
+extern u8 D_0C012420[]; // inv_mwin_pbox_tex
+extern u8 D_0C012620[]; // inv_mwin_pbox1_tex_rgb_ci4_pal
+extern u8 D_0C0126A0[]; // inv_mwin_pbox1_tex_rgb_ci4
+extern u8 D_0C012640[]; // inv_mwin_pbox1_tex_rgb_ci4_pal
+extern u8 D_0C0128A0[]; // inv_mwin_pbox1_tex_rgb_ci4
+extern u8 D_0C012660[]; // inv_mwin_pbox2_tex_rgb_ci4_pal
+extern u8 D_0C012AA0[]; // inv_mwin_pbox2_tex_rgb_ci4
+extern u8 D_0C012680[]; // inv_mwin_pbox5_tex_rgb_ci4_pal
+extern u8 D_0C012CA0[]; // inv_mwin_pbox5_tex_rgb_ci4
+extern u8 D_0C00B2E0[];
+extern u8 D_0C00B300[];
+extern u8 D_0C010780[];
+extern u8 D_0C0109A0[];
+extern u8 D_0C010BA0[];
+extern u8 D_0C010DA0[];
+extern u8 D_0C0107A0[];
+extern u8 D_0C00F940[];
+extern u8 D_0C00FF60[];
+extern u8 D_0C00F8E0[];
+extern u8 D_0C00F960[];
+extern u8 D_0C00F900[];
+extern u8 D_0C00FB60[];
+extern u8 D_0C00F920[];
+extern u8 D_0C00FD60[];
+extern u8 D_0C00A680[];
+extern u8 D_0C00ACE0[];
+extern u8 D_0C004EA0[];
+extern u8 D_0C005860[];
+extern u8 D_0C004EE0[];
+extern u8 D_0C005A60[];
+extern u8 D_0C004F20[];
+extern u8 D_0C005C60[];
+extern u8 D_0C004F60[];
+extern u8 D_0C005E60[];
+extern u8 D_0C005020[];
+extern u8 D_0C006460[];
+extern u8 D_0C005160[];
+extern u8 D_0C006E60[];
+extern u8 D_0C0051A0[];
+extern u8 D_0C007060[];
+extern u8 D_0C0051E0[];
+extern u8 D_0C007260[];
+extern u8 D_0C005120[];
+extern u8 D_0C006C60[];
+extern u8 D_0C004E60[];
+extern u8 D_0C005660[];
+extern u8 D_0C005220[];
+extern u8 D_0C007460[];
+extern u8 D_0C004FA0[];
+extern u8 D_0C006060[];
+extern u8 D_0C004FE0[];
+extern u8 D_0C006260[];
+extern u8 D_0C005060[];
+extern u8 D_0C006660[];
+extern u8 D_0C0050A0[];
+extern u8 D_0C006860[];
+extern u8 D_0C0050E0[];
+extern u8 D_0C006A60[];
+extern u8 D_0C0052E0[];
+extern u8 D_0C007A60[];
+extern u8 D_0C005320[];
+extern u8 D_0C007C60[];
+extern u8 D_0C005360[];
+extern u8 D_0C007E60[];
+extern u8 D_0C0053E0[];
+extern u8 D_0C008260[];
+extern u8 D_0C0053A0[];
+extern u8 D_0C008060[];
+extern u8 D_0C005420[];
+extern u8 D_0C008460[];
+extern u8 D_0C005460[];
+extern u8 D_0C008660[];
+extern u8 D_0C0054A0[];
+extern u8 D_0C008860[];
+extern u8 D_0C0055A0[];
+extern u8 D_0C009060[];
+extern u8 D_0C0055E0[];
+extern u8 D_0C009260[];
+extern u8 D_0C005260[];
+extern u8 D_0C007660[];
+extern u8 D_0C0052A0[];
+extern u8 D_0C007860[];
+extern u8 D_0C005560[];
+extern u8 D_0C008E60[];
+extern u8 D_0C005520[];
+extern u8 D_0C008C60[];
+extern u8 D_0C0054E0[];
+extern u8 D_0C008A60[];
+extern u8 D_0C005620[];
+extern u8 D_0C009460[];
+extern u8 D_0C009720[];
+extern u8 D_0C009740[];
+extern u8 D_0C00C800[];
+extern u8 D_0C00C940[];
+extern u8 D_0C00C900[];
+extern u8 D_0C00D940[];
+extern u8 D_0C00C8E0[];
+extern u8 D_0C00D740[];
+extern u8 D_0C00C8A0[];
+extern u8 D_0C00D340[];
+extern u8 D_0C00C880[];
+extern u8 D_0C00D140[];
+extern u8 D_0C00C840[];
+extern u8 D_0C00CD40[];
+extern u8 D_0C00C820[];
+extern u8 D_0C00CB40[];
+extern u8 D_0C00C920[];
+extern u8 D_0C00DB40[];
+extern u8 D_0C00C860[];
+extern u8 D_0C00CF40[];
+extern u8 D_0C00C8C0[];
+extern u8 D_0C00D540[];
+extern u8 D_0C00B940[];
+extern u8 D_0C00B9C0[];
+extern u8 D_0C00B9A0[];
+extern u8 D_0C00C1C0[];
+extern u8 D_0C00BFC0[];
+extern u8 D_0C00DD60[];
+extern u8 D_0C00DF80[];
+extern u8 D_0C00C3C0[];
+extern u8 D_0C00C400[];
+extern u8 D_0C0111C0[];
+extern u8 D_0C0112C0[];
+extern u8 D_0C0111E0[];
+extern u8 D_0C0114C0[];
+extern u8 D_0C011200[];
+extern u8 D_0C0116C0[];
+extern u8 D_0C011240[];
+extern u8 D_0C011AC0[];
+extern u8 D_0C011260[];
+extern u8 D_0C011CC0[];
+extern u8 D_0C0112A0[];
+extern u8 D_0C0120C0[];
+extern u8 D_0C011220[];
+extern u8 D_0C0118C0[];
+extern u8 D_0C011280[];
+extern u8 D_0C011EC0[];
+extern u8 D_0C00A6A0[];
+extern u8 D_0C00AEE0[];
+extern u8 D_0C00A6C0[];
+extern u8 D_0C00B0E0[];
+extern u8 D_0C00E180[];
+extern u8 D_0C00E220[];
+extern u8 D_0C00E200[];
+extern u8 D_0C00EA20[];
+extern u8 D_0C00E1E0[];
+extern u8 D_0C00E820[];
+extern u8 D_0C00E1C0[];
+extern u8 D_0C00E620[];
+extern u8 D_0C00E1A0[];
+extern u8 D_0C00E420[];
+extern u8 D_0C00B500[];
+extern u8 D_0C00B520[];
+extern u8 D_0C009940[];
+extern u8 D_0C009960[];
+extern u8 D_0C00A640[];
+extern u8 D_0C00A8E0[];
+extern u8 D_0C00A660[];
+extern u8 D_0C00AAE0[];
+extern u8 D_0C00C3E0[];
+extern u8 D_0C00C600[];
+extern u8 D_0C009C00[];
+extern u8 D_0C00A420[];
+extern u8 D_0C00A220[];
+extern u8 D_0C009C20[];
+extern u8 D_0C00A020[];
+extern u8 D_0C009E20[];
+extern u8 D_0C009B60[];
+extern u8 D_0C009B80[];
+extern u8 D_0C009BA0[];
+extern u8 D_0C009BC0[];
+extern u8 D_0C009BE0[];
+extern u8 D_0C009660[];
+extern u8 D_0C009680[];
+extern u8 D_0C0096A0[];
+extern u8 D_0C0096C0[];
+extern u8 D_0C0096E0[];
+extern u8 D_0C009700[];
+extern u8 D_0C000660[];
+extern u8 D_0C000E60[];
+extern u8 D_0C0006A0[];
+extern u8 D_0C001060[];
+extern u8 D_0C0006E0[];
+extern u8 D_0C001260[];
+extern u8 D_0C000720[];
+extern u8 D_0C001460[];
+extern u8 D_0C0007A0[];
+extern u8 D_0C001860[];
+extern u8 D_0C0007E0[];
+extern u8 D_0C001A60[];
+extern u8 D_0C000820[];
+extern u8 D_0C001C60[];
+extern u8 D_0C000760[];
+extern u8 D_0C001660[];
+extern u8 D_0C000BE0[];
+extern u8 D_0C003A60[];
+extern u8 D_0C0008A0[];
+extern u8 D_0C002060[];
+extern u8 D_0C000860[];
+extern u8 D_0C001E60[];
+extern u8 D_0C0008E0[];
+extern u8 D_0C002260[];
+extern u8 D_0C000920[];
+extern u8 D_0C002460[];
+extern u8 D_0C000B20[];
+extern u8 D_0C003460[];
+extern u8 D_0C000B60[];
+extern u8 D_0C003660[];
+extern u8 D_0C000960[];
+extern u8 D_0C002660[];
+extern u8 D_0C0009A0[];
+extern u8 D_0C002860[];
+extern u8 D_0C000A20[];
+extern u8 D_0C002C60[];
+extern u8 D_0C0009E0[];
+extern u8 D_0C002A60[];
+extern u8 D_0C000C60[];
+extern u8 D_0C003E60[];
+extern u8 D_0C000D20[];
+extern u8 D_0C004460[];
+extern u8 D_0C000D60[];
+extern u8 D_0C004660[];
+extern u8 D_0C000CE0[];
+extern u8 D_0C004260[];
+extern u8 D_0C000CA0[];
+extern u8 D_0C004060[];
+extern u8 D_0C000A60[];
+extern u8 D_0C002E60[];
+extern u8 D_0C000AA0[];
+extern u8 D_0C003060[];
+extern u8 D_0C000AE0[];
+extern u8 D_0C003260[];
+extern u8 D_0C000C20[];
+extern u8 D_0C003C60[];
+extern u8 D_0C000BA0[];
+extern u8 D_0C003860[];
+extern u8 D_0C000DA0[];
+extern u8 D_0C004860[];
+extern u8 D_0C000DE0[];
+extern u8 D_0C004A60[];
+extern u8 D_0C000E20[];
+extern u8 D_0C004C60[];
+extern u8 D_0C010160[];
+extern u8 D_0C010180[];
+extern u8 D_0C010380[];
+extern u8 D_0C010580[];
+extern u8 D_0C000000[];
+extern u8 D_0C000020[];
+extern u8 D_0C00B960[];
+extern u8 D_0C00BBC0[];
+extern u8 D_0C000220[];
+extern u8 D_0C000240[];
+extern u8 D_0C000440[];
+extern u8 D_0C000460[];
+
+struct_8085E9B0 ovl_base;
+
+typedef struct struct_8085DCF8 {
+ /* 0x0 */ TexturePtr pal;
+ /* 0x4 */ TexturePtr tex;
+} struct_8085DCF8; // size = 0x8
+
+Vp viewport_data_621 = { { { 0, 0, 0x1FF, 0 }, { 0, 0, 0x1FF, 0 } } };
+
+Lights1 light_data_622 = gdSPDefLights1(0x69, 0x5A, 0x5A, 0xFF, 0xFF, 0xF5, 0, 0x3C, 0x3C);
+
+struct_8085DCF8 unknown_tex_data_761[] = {
+ { D_0C00A620, D_0C00A6E0 },
+};
+
+struct_8085DCF8 haniwa_tex_data_759[] = {
+ { D_0C00B720, D_0C00B740 },
+};
+
+struct_8085DCF8 fossil_tex_data_760[] = {
+ { D_0C00DD40, D_0C00DD80 },
+};
+
+struct_8085DCF8 present_tex_data_762[] = {
+ { D_0C010FA0, D_0C010FC0 }, { D_0C012400, D_0C012420 }, { D_0C012620, D_0C0126A0 },
+ { D_0C012640, D_0C0128A0 }, { D_0C012660, D_0C012AA0 },
+};
+
+// part of present_tex_data_762?
+struct_8085DCF8 D_8085DD38_jp[] = {
+ { D_0C012680, D_0C012CA0 },
+};
+
+struct_8085DCF8 D_8085DD40_jp[] = {
+ { D_0C00B2E0, D_0C00B300 },
+};
+
+struct_8085DCF8 D_8085DD48_jp[] = {
+ { D_0C010780, D_0C0109A0 },
+ { D_0C010780, D_0C010BA0 },
+ { D_0C010780, D_0C010DA0 },
+ { D_0C010780, D_0C0107A0 },
+};
+
+struct_8085DCF8 D_8085DD68_jp[] = {
+ { D_0C00F940, D_0C00FF60 },
+ { D_0C00F8E0, D_0C00F960 },
+ { D_0C00F900, D_0C00FB60 },
+ { D_0C00F920, D_0C00FD60 },
+};
+
+struct_8085DCF8 D_8085DD88_jp[] = {
+ { D_0C00A680, D_0C00ACE0 },
+};
+
+struct_8085DCF8 D_8085DD90_jp[] = {
+ { D_0C004EA0, D_0C005860 }, { D_0C004EE0, D_0C005A60 }, { D_0C004F20, D_0C005C60 }, { D_0C004F60, D_0C005E60 },
+ { D_0C005020, D_0C006460 }, { D_0C005160, D_0C006E60 }, { D_0C0051A0, D_0C007060 }, { D_0C0051E0, D_0C007260 },
+ { D_0C005120, D_0C006C60 }, { D_0C004E60, D_0C005660 }, { D_0C005220, D_0C007460 }, { D_0C004FA0, D_0C006060 },
+ { D_0C004FE0, D_0C006260 }, { D_0C005060, D_0C006660 }, { D_0C0050A0, D_0C006860 }, { D_0C0050E0, D_0C006A60 },
+ { D_0C0052E0, D_0C007A60 }, { D_0C005320, D_0C007C60 }, { D_0C005360, D_0C007E60 }, { D_0C0053E0, D_0C008260 },
+ { D_0C0053A0, D_0C008060 }, { D_0C005420, D_0C008460 }, { D_0C005460, D_0C008660 }, { D_0C0054A0, D_0C008860 },
+ { D_0C0055A0, D_0C009060 }, { D_0C0055E0, D_0C009260 }, { D_0C005260, D_0C007660 }, { D_0C0052A0, D_0C007860 },
+ { D_0C005560, D_0C008E60 }, { D_0C005520, D_0C008C60 }, { D_0C0054E0, D_0C008A60 }, { D_0C005620, D_0C009460 },
+};
+
+struct_8085DCF8 D_8085DE90_jp[] = {
+ { D_0C009720, D_0C009740 },
+};
+
+struct_8085DCF8 D_8085DE98_jp[] = {
+ { D_0C00EC60, D_0C00F0E0 }, { D_0C009720, D_0C009740 }, { D_0C010780, D_0C0109A0 }, { D_0C00C800, D_0C00C940 },
+ { D_0C00C900, D_0C00D940 }, { D_0C00C8E0, D_0C00D740 }, { D_0C00C8A0, D_0C00D340 }, { D_0C00C880, D_0C00D140 },
+ { D_0C00C840, D_0C00CD40 }, { D_0C00C820, D_0C00CB40 }, { D_0C00C920, D_0C00DB40 }, { D_0C00C860, D_0C00CF40 },
+ { D_0C00C8C0, D_0C00D540 }, { D_0C010780, D_0C0109A0 }, { D_0C00B940, D_0C00B9C0 }, { D_0C00B9A0, D_0C00C1C0 },
+ { D_0C00B9A0, D_0C00BFC0 }, { D_0C00DD60, D_0C00DF80 }, { D_0C00C3C0, D_0C00C400 }, { D_0C00C3C0, D_0C00C400 },
+ { D_0C0111C0, D_0C0112C0 }, { D_0C0111E0, D_0C0114C0 }, { D_0C011200, D_0C0116C0 }, { D_0C011240, D_0C011AC0 },
+ { D_0C011260, D_0C011CC0 }, { D_0C0112A0, D_0C0120C0 }, { D_0C011220, D_0C0118C0 }, { D_0C011280, D_0C011EC0 },
+ { D_0C010FA0, D_0C010FC0 }, { D_0C010FA0, D_0C010FC0 },
+};
+
+struct_8085DCF8 D_8085DF88_jp[] = {
+ { D_0C00A6A0, D_0C00AEE0 },
+};
+
+struct_8085DCF8 D_8085DF90_jp[] = {
+ { D_0C00A6C0, D_0C00B0E0 },
+};
+
+struct_8085DCF8 D_8085DF98_jp[] = {
+ { D_0C00E180, D_0C00E220 }, { D_0C00E200, D_0C00EA20 }, { D_0C00E1E0, D_0C00E820 }, { D_0C00E1C0, D_0C00E620 },
+ { D_0C00E1A0, D_0C00E420 }, { D_0C00B500, D_0C00B520 }, { D_0C009940, D_0C009960 },
+};
+
+struct_8085DCF8 D_8085DFD0_jp[] = {
+ { D_0C00A640, D_0C00A8E0 }, { D_0C00A660, D_0C00AAE0 }, { D_0C00A660, D_0C00AAE0 }, { D_0C00A660, D_0C00AAE0 },
+ { D_0C00A660, D_0C00AAE0 }, { D_0C00A660, D_0C00AAE0 }, { D_0C00A660, D_0C00AAE0 }, { D_0C00A660, D_0C00AAE0 },
+ { D_0C00A660, D_0C00AAE0 }, { D_0C00A660, D_0C00AAE0 },
+};
+
+struct_8085DCF8 D_8085E020_jp[] = {
+ { D_0C00C3E0, D_0C00C600 },
+};
+
+struct_8085DCF8 D_8085E028_jp[] = {
+ { D_0C009C00, D_0C00A420 }, { D_0C009C00, D_0C00A220 }, { D_0C009C00, D_0C009C20 }, { D_0C009C00, D_0C00A020 },
+ { D_0C009C00, D_0C009E20 }, { D_0C009C00, D_0C00A420 }, { D_0C009C00, D_0C00A420 }, { D_0C009C00, D_0C00A420 },
+ { D_0C009B60, D_0C00A420 }, { D_0C009B60, D_0C00A220 }, { D_0C009B60, D_0C009C20 }, { D_0C009B60, D_0C00A020 },
+ { D_0C009B60, D_0C009E20 }, { D_0C009B60, D_0C00A420 }, { D_0C009B60, D_0C00A420 }, { D_0C009B60, D_0C00A420 },
+ { D_0C009B80, D_0C00A420 }, { D_0C009B80, D_0C00A220 }, { D_0C009B80, D_0C009C20 }, { D_0C009B80, D_0C00A020 },
+ { D_0C009B80, D_0C009E20 }, { D_0C009B80, D_0C00A420 }, { D_0C009B80, D_0C00A420 }, { D_0C009B80, D_0C00A420 },
+ { D_0C009BA0, D_0C00A420 }, { D_0C009BA0, D_0C00A220 }, { D_0C009BA0, D_0C009C20 }, { D_0C009BA0, D_0C00A020 },
+ { D_0C009BA0, D_0C009E20 }, { D_0C009BA0, D_0C00A420 }, { D_0C009BA0, D_0C00A420 }, { D_0C009BA0, D_0C00A420 },
+ { D_0C009BC0, D_0C00A420 }, { D_0C009BC0, D_0C00A220 }, { D_0C009BC0, D_0C009C20 }, { D_0C009BC0, D_0C00A020 },
+ { D_0C009BC0, D_0C009E20 }, { D_0C009BC0, D_0C00A420 }, { D_0C009BC0, D_0C00A420 }, { D_0C009BC0, D_0C00A420 },
+ { D_0C009BE0, D_0C00A420 }, { D_0C009BE0, D_0C00A220 }, { D_0C009BE0, D_0C009C20 }, { D_0C009BE0, D_0C00A020 },
+ { D_0C009BE0, D_0C009E20 }, { D_0C009BE0, D_0C00A420 }, { D_0C009BE0, D_0C00A420 }, { D_0C009BE0, D_0C00A420 },
+ { D_0C009660, D_0C00A420 }, { D_0C009660, D_0C00A220 }, { D_0C009660, D_0C009C20 }, { D_0C009660, D_0C00A020 },
+ { D_0C009660, D_0C009E20 }, { D_0C009660, D_0C00A420 }, { D_0C009660, D_0C00A420 }, { D_0C009660, D_0C00A420 },
+ { D_0C009680, D_0C00A420 }, { D_0C009680, D_0C00A220 }, { D_0C009680, D_0C009C20 }, { D_0C009680, D_0C00A020 },
+ { D_0C009680, D_0C009E20 }, { D_0C009680, D_0C00A420 }, { D_0C009680, D_0C00A420 }, { D_0C009680, D_0C00A420 },
+ { D_0C0096A0, D_0C00A420 }, { D_0C0096A0, D_0C00A220 }, { D_0C0096A0, D_0C009C20 }, { D_0C0096A0, D_0C00A020 },
+ { D_0C0096A0, D_0C009E20 }, { D_0C0096A0, D_0C00A420 }, { D_0C0096A0, D_0C00A420 }, { D_0C0096A0, D_0C00A420 },
+ { D_0C0096C0, D_0C00A420 }, { D_0C0096C0, D_0C00A220 }, { D_0C0096C0, D_0C009C20 }, { D_0C0096C0, D_0C00A020 },
+ { D_0C0096C0, D_0C009E20 }, { D_0C0096C0, D_0C00A420 }, { D_0C0096C0, D_0C00A420 }, { D_0C0096C0, D_0C00A420 },
+ { D_0C0096E0, D_0C00A420 }, { D_0C0096E0, D_0C00A220 }, { D_0C0096E0, D_0C009C20 }, { D_0C0096E0, D_0C00A020 },
+ { D_0C0096E0, D_0C009E20 }, { D_0C0096E0, D_0C00A420 }, { D_0C0096E0, D_0C00A420 }, { D_0C0096E0, D_0C00A420 },
+ { D_0C009700, D_0C00A420 }, { D_0C009700, D_0C00A220 }, { D_0C009700, D_0C009C20 }, { D_0C009700, D_0C00A020 },
+ { D_0C009700, D_0C009E20 }, { D_0C009700, D_0C00A420 }, { D_0C009700, D_0C00A420 }, { D_0C009700, D_0C00A420 },
+};
+
+struct_8085DCF8 D_8085E328_jp[] = {
+ { D_0C000660, D_0C000E60 }, { D_0C0006A0, D_0C001060 }, { D_0C0006E0, D_0C001260 }, { D_0C000720, D_0C001460 },
+ { D_0C0007A0, D_0C001860 }, { D_0C0007E0, D_0C001A60 }, { D_0C000820, D_0C001C60 }, { D_0C000760, D_0C001660 },
+ { D_0C000BE0, D_0C003A60 }, { D_0C0008A0, D_0C002060 }, { D_0C000860, D_0C001E60 }, { D_0C0008E0, D_0C002260 },
+ { D_0C000920, D_0C002460 }, { D_0C000B20, D_0C003460 }, { D_0C000B60, D_0C003660 }, { D_0C000960, D_0C002660 },
+ { D_0C0009A0, D_0C002860 }, { D_0C000A20, D_0C002C60 }, { D_0C0009E0, D_0C002A60 }, { D_0C000C60, D_0C003E60 },
+ { D_0C000D20, D_0C004460 }, { D_0C000D60, D_0C004660 }, { D_0C000CE0, D_0C004260 }, { D_0C000CA0, D_0C004060 },
+ { D_0C000A60, D_0C002E60 }, { D_0C000AA0, D_0C003060 }, { D_0C000AE0, D_0C003260 }, { D_0C000C20, D_0C003C60 },
+ { D_0C000BA0, D_0C003860 }, { D_0C000DA0, D_0C004860 }, { D_0C000DE0, D_0C004A60 }, { D_0C000E20, D_0C004C60 },
+};
+
+struct_8085DCF8 D_8085E428_jp[] = {
+ { D_0C010160, D_0C010180 },
+ { D_0C010160, D_0C010380 },
+ { D_0C010160, D_0C010580 },
+ { D_0C000000, D_0C000020 },
+};
+
+struct_8085DCF8 D_8085E448_jp[] = {
+ { D_0C00B960, D_0C00BBC0 },
+ { D_0C000220, D_0C000240 },
+ { D_0C000440, D_0C000460 },
+};
+
+struct_8085DCF8* item_tex_data_table_779[] = {
+ D_8085DD40_jp, D_8085DD48_jp, D_8085DD68_jp, D_8085DD90_jp, D_8085DE90_jp, D_8085DE98_jp,
+ D_8085DF88_jp, D_8085DF90_jp, D_8085DF98_jp, D_8085DFD0_jp, D_8085E020_jp, D_8085E448_jp,
+ D_8085E028_jp, D_8085E328_jp, D_8085E448_jp, D_8085E428_jp,
+};
+
+struct_8085DCF8 letter_tex_data_table_837[] = {
+ { D_0C00EC60, D_0C00F0E0 }, { D_0C00EC60, D_0C00F2E0 }, { D_0C00ECA0, D_0C00F4E0 },
+ { D_0C00ECA0, D_0C00F6E0 }, { D_0C00EC20, D_0C00ECE0 }, { D_0C00EC20, D_0C00EEE0 },
+};
+
+#define SUBMENU_PROGRAM(name, construct, destruct, set_proc) \
+ { \
+ SEGMENT_ROM_START(name), SEGMENT_ROM_END(name), SEGMENT_VRAM_START(name), SEGMENT_VRAM_END(name), construct, \
+ destruct, set_proc, false \
+ }
+
+SubmenuProgramOverlay mSM_program_dlftbl[SUBMENU_PROGRAM_MAX] = {
+ // SUBMENU_PROGRAM_0
+ SUBMENU_PROGRAM(inventory_ovl, mIV_inventory_ovl_construct, mIV_inventory_ovl_destruct, mIV_inventory_ovl_set_proc),
+ // SUBMENU_PROGRAM_1
+ SUBMENU_PROGRAM(inventory_ovl, mIV_inventory_ovl_construct, mIV_inventory_ovl_destruct, mIV_inventory_ovl_set_proc),
+ // SUBMENU_PROGRAM_2
+ SUBMENU_PROGRAM(ovl__0078A560, func_8088306C_jp, func_808830E8_jp, func_80882FAC_jp),
+ // SUBMENU_PROGRAM_3
+ SUBMENU_PROGRAM(ovl__0078AE30, func_80884120_jp, func_808841A8_jp, func_80883F5C_jp),
+ // SUBMENU_PROGRAM_LEDIT
+ SUBMENU_PROGRAM(ledit_ovl, mLE_ledit_ovl_construct, mLE_ledit_ovl_destruct, mLE_ledit_ovl_set_proc),
+ // SUBMENU_PROGRAM_MAP
+ SUBMENU_PROGRAM(map_ovl, mMP_map_ovl_construct, mMP_map_ovl_destruct, mMP_map_ovl_set_proc),
+ // SUBMENU_PROGRAM_6
+ SUBMENU_PROGRAM(ovl__00797A50, func_80895B04_jp, func_80895B9C_jp, func_80895A30_jp),
+ // SUBMENU_PROGRAM_7
+ SUBMENU_PROGRAM(ovl__0079B120, func_80898688_jp, func_80898710_jp, func_80898520_jp),
+ // SUBMENU_PROGRAM_8
+ SUBMENU_PROGRAM(ovl__0079C020, func_80899E34_jp, func_80899F00_jp, func_80899D84_jp),
+ // SUBMENU_PROGRAM_9
+ SUBMENU_PROGRAM(ovl__0079DA50, func_8089AB8C_jp, func_8089AC14_jp, func_8089AAE4_jp),
+ // SUBMENU_PROGRAM_10
+ SUBMENU_PROGRAM(ovl__0078CB80, func_808883F8_jp, func_808884E4_jp, func_80888354_jp),
+ // SUBMENU_PROGRAM_11
+ SUBMENU_PROGRAM(ovl__00789B60, func_80882778_jp, func_80882818_jp, func_808826B8_jp),
+ // SUBMENU_PROGRAM_BOARD
+ SUBMENU_PROGRAM(board_ovl, mBD_board_ovl_construct, mBD_board_ovl_destruct, mBD_board_ovl_set_proc),
+ // SUBMENU_PROGRAM_13
+ SUBMENU_PROGRAM(ovl__00792700, func_8088C4A0_jp, func_8088C548_jp, func_8088C344_jp),
+ // SUBMENU_PROGRAM_14
+ SUBMENU_PROGRAM(ovl__00794380, func_8088D924_jp, func_8088D9D4_jp, func_8088D81C_jp),
+ // SUBMENU_PROGRAM_15
+ SUBMENU_PROGRAM(ovl__00799580, func_80896898_jp, func_80896938_jp, func_80896830_jp),
+ // SUBMENU_PROGRAM_16
+ SUBMENU_PROGRAM(ovl__0079A290, func_8089730C_jp, func_80897394_jp, func_8089728C_jp),
+ // SUBMENU_PROGRAM_17
+ SUBMENU_PROGRAM(ovl__0079E430, func_8089BE68_jp, func_8089BF10_jp, func_8089BCE0_jp),
+ // SUBMENU_PROGRAM_18
+ SUBMENU_PROGRAM(ovl__0079F810, func_808A40F0_jp, func_808A4188_jp, func_808A4058_jp),
+ // SUBMENU_PROGRAM_19
+ SUBMENU_PROGRAM(ovl__007A10E0, func_808A5D7C_jp, func_808A5E14_jp, func_808A5C28_jp),
+ // SUBMENU_PROGRAM_CATALOG
+ SUBMENU_PROGRAM(catalog_ovl, mCL_catalog_ovl_construct, mCL_catalog_ovl_destruct, mCL_catalog_ovl_set_proc),
+};
+
+SubmenuProgramOverlay tag_program_dlftbl[] = {
+ SUBMENU_PROGRAM(tag_ovl, mTG_tag_ovl_construct, mTG_tag_ovl_destruct, mTG_tag_ovl_destruct),
+};
+
+SubmenuProgramOverlay hand_program_dlftbl[] = {
+ SUBMENU_PROGRAM(hand_ovl, mHD_hand_ovl_construct, mHD_hand_ovl_destruct, mHD_hand_ovl_destruct),
+};
+
+SubmenuProgramOverlay haniwa_program_dlftbl[] = {
+ SUBMENU_PROGRAM(haniwaPortrait_ovl, mHP_haniwaPortrait_ovl_construct, mHP_haniwaPortrait_ovl_destruct,
+ mHP_haniwaPortrait_ovl_destruct),
+};
+
+#define PROGRAM_FLAG_2 (1 << 1)
+#define PROGRAM_FLAG_TAG (1 << 2)
+#define PROGRAM_FLAG_HAND (1 << 3)
+#define PROGRAM_FLAG_HANIWA (1 << 4)
+
+u8 flg_table_916[SUBMENU_PROGRAM_MAX] = {
+ 0, // SUBMENU_PROGRAM_0
+ PROGRAM_FLAG_2 | PROGRAM_FLAG_TAG | PROGRAM_FLAG_HAND, // SUBMENU_PROGRAM_1
+ PROGRAM_FLAG_HANIWA, // SUBMENU_PROGRAM_2
+ 0, // SUBMENU_PROGRAM_3
+ 0, // SUBMENU_PROGRAM_LEDIT
+ 0, // SUBMENU_PROGRAM_MAP
+ 0, // SUBMENU_PROGRAM_6
+ 0, // SUBMENU_PROGRAM_7
+ 0, // SUBMENU_PROGRAM_8
+ 0, // SUBMENU_PROGRAM_9
+ 0, // SUBMENU_PROGRAM_10
+ PROGRAM_FLAG_2 | PROGRAM_FLAG_TAG | PROGRAM_FLAG_HAND, // SUBMENU_PROGRAM_11
+ 0, // SUBMENU_PROGRAM_BOARD
+ 0, // SUBMENU_PROGRAM_13
+ PROGRAM_FLAG_2 | PROGRAM_FLAG_TAG | PROGRAM_FLAG_HAND | PROGRAM_FLAG_HANIWA, // SUBMENU_PROGRAM_14
+ 0, // SUBMENU_PROGRAM_15
+ 0, // SUBMENU_PROGRAM_16
+ PROGRAM_FLAG_2 | PROGRAM_FLAG_TAG | PROGRAM_FLAG_HAND, // SUBMENU_PROGRAM_17
+ 0, // SUBMENU_PROGRAM_18
+ PROGRAM_FLAG_TAG | PROGRAM_FLAG_HAND, // SUBMENU_PROGRAM_19
+ PROGRAM_FLAG_TAG | PROGRAM_FLAG_HAND, // SUBMENU_PROGRAM_CATALOG
+};
+
+f32 data_table_935[SUBMENU_PROGRAM_MAX][4] = {
+ { 0.0f, 0.0f, 0.0f, 0.0f }, // SUBMENU_PROGRAM_0
+ { 300.0f, 0.0f, 75.0f, 0.0f }, // SUBMENU_PROGRAM_1
+ { 0.0f, 300.0f, 0.0f, 75.0f }, // SUBMENU_PROGRAM_2
+ { 0.0f, 300.0f, 0.0f, 75.0f }, // SUBMENU_PROGRAM_3
+ { 0.0f, 300.0f, 0.0f, 75.0f }, // SUBMENU_PROGRAM_LEDIT
+ { 0.0f, 300.0f, 0.0f, 75.0f }, // SUBMENU_PROGRAM_MAP
+ { 0.0f, 300.0f, 0.0f, 75.0f }, // SUBMENU_PROGRAM_6
+ { 0.0f, 300.0f, 0.0f, 75.0f }, // SUBMENU_PROGRAM_7
+ { 0.0f, 300.0f, 0.0f, 75.0f }, // SUBMENU_PROGRAM_8
+ { 0.0f, 300.0f, 0.0f, 75.0f }, // SUBMENU_PROGRAM_9
+ { 0.0f, -300.0f, 0.0f, 75.0f }, // SUBMENU_PROGRAM_10
+ { -300.0f, 0.0f, 75.0f, 0.0f }, // SUBMENU_PROGRAM_11
+ { 0.0f, 300.0f, 0.0f, 75.0f }, // SUBMENU_PROGRAM_BOARD
+ { 0.0f, 0.0f, 0.0f, 0.0f }, // SUBMENU_PROGRAM_13
+ { -300.0f, 0.0f, 75.0f, 0.0f }, // SUBMENU_PROGRAM_14
+ { 0.0f, -300.0f, 0.0f, 75.0f }, // SUBMENU_PROGRAM_15
+ { 0.0f, 0.0f, 0.0f, 0.0f }, // SUBMENU_PROGRAM_16
+ { 300.0f, 0.0f, 75.0f, 0.0f }, // SUBMENU_PROGRAM_17
+ { 0.0f, 0.0f, 0.0f, 0.0f }, // SUBMENU_PROGRAM_18
+ { 0.0f, 300.0f, 0.0f, 75.0f }, // SUBMENU_PROGRAM_19
+ { 300.0f, 0.0f, 75.0f, 0.0f }, // SUBMENU_PROGRAM_CATALOG
+};
+
+s32 add_trigger_954[] = { R_CBUTTONS, U_CBUTTONS, L_CBUTTONS, D_CBUTTONS };
+
+f32 move_data_1027[2][4] = { { 2.0f, 0.0f, 300.0f, 1.0f }, { 0.5f, 120.0f, 0.0f, -1.0f } };
+
+void mSM_setup_view(Submenu* submenu, GraphicsContext* gfxCtx, s32 arg1) {
+ Mtx* mtx;
+ UNUSED s32 pad;
+ Gfx* gfx;
+
+ if (arg1 != 0) {
+ mtx = GRAPH_ALLOC(gfxCtx, sizeof(Mtx));
+ guOrtho(mtx, SCREEN_WIDTH * -8, SCREEN_WIDTH * 8, SCREEN_HEIGHT * -8, SCREEN_HEIGHT * 8, 1.0f, 2000.0f, 1.0f);
+ submenu->unk_2C->unk_1072C = mtx;
+ } else {
+ mtx = submenu->unk_2C->unk_1072C;
+ }
+
+ OPEN_DISPS(gfxCtx);
+
+ gfx = POLY_OPA_DISP;
+ if (arg1 == 0) {
+ Game_Play1938* var_a0;
+
+ if (submenu->unk_00 != 4) {
+ var_a0 = &((Game_Play*)gamePT)->unk_1938;
+ } else {
+ var_a0 = &((Game__00743CD0*)gamePT)->unk_00E0;
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetScissor(gfx++, G_SC_NON_INTERLACE, var_a0->unk_010, var_a0->unk_008, var_a0->unk_014, var_a0->unk_00C);
+ gSPViewport(gfx++, &var_a0->vp);
+ gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gfxCtx->unk_2E4);
+ gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+ }
+
+ //! FAKE
+ if (1) {}
+ if (1) {}
+ if (1) {}
+
+ gSPMatrix(gfx++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
+ POLY_OPA_DISP = gfx;
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void mSM_set_char_matrix(GraphicsContext* gfxCtx) {
+ Gfx* gfx;
+
+ OPEN_DISPS(gfxCtx);
+
+ gfx = POLY_OPA_DISP;
+ gSPMatrix(gfx++, &Mtx_clear, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ POLY_OPA_DISP = gfx;
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+#ifdef NON_EQUIVALENT
+void mSM_cbuf_copy(GraphicsContext* gfxCtx, PreRender* render, s32 arg2, s32 arg3, s32 arg4) {
+ s32 spCC;
+ void* sp9C;
+ void* sp98;
+ Gfx* sp8C;
+ // Gfx* temp_v0_11;
+ // Gfx* temp_v0_12;
+ // Gfx* temp_v0_13;
+ // Gfx* temp_v0_14;
+ // Gfx* temp_v0_15;
+ // Gfx* temp_v0_16;
+ // Gfx* temp_v0_17;
+ // Gfx* temp_v0_6;
+ // Gfx* temp_v0_8;
+ // Gfx* temp_v0_9;
+ s32 temp_a2;
+ s32 temp_v0_7;
+ s32 var_a1;
+ s32 var_a2;
+ s32 var_a3;
+ s32 var_t1;
+ s32 var_t2;
+ s32 var_t3;
+ s32 var_v1;
+ u16 temp_a0;
+ u16 temp_v0;
+ u16 var_ra;
+ s32 var_t0;
+ u16 var_t4;
+ u16 var_t5;
+
+ if (arg2 >= 0x13F) {
+ return;
+ }
+
+ temp_v0 = render->unk_04;
+ if (-(s32)temp_v0 >= arg2) {
+ return;
+ }
+
+ temp_a0 = render->unk_06;
+ if (1) {}
+ if (1) {}
+ if (1) {}
+ if (1) {}
+ if (-(s32)temp_a0 >= arg3) {
+ return;
+ }
+
+ if ((arg3 >= 0xEF)) {
+ return;
+ }
+
+ if (arg2 < 0) {
+ var_t5 = temp_v0 + arg2;
+ var_t3 = -arg2;
+ arg2 = 0;
+ } else {
+ var_t3 = 0;
+ if ((temp_v0 + arg2) >= 0x140) {
+ var_t5 = 0x140 - arg2;
+ } else {
+ var_t5 = temp_v0;
+ }
+ }
+
+ var_t4 = 0x140;
+ if (arg3 < 0) {
+ var_t0 = temp_a0 + arg3;
+ var_v1 = -arg3;
+ arg3 = 0;
+ } else {
+ var_v1 = 0;
+ if ((temp_a0 + arg3) >= 0xF0) {
+ var_t0 = 0xEF - arg3;
+ } else {
+ var_t0 = temp_a0;
+ }
+ }
+
+ OPEN_DISPS(gfxCtx);
+
+ var_ra = temp_a0;
+ if (arg4 == 0) {
+ spCC = 0x140;
+ var_t4 = temp_v0;
+ sp9C = gfxCtx->unk_2E4;
+ var_a1 = arg2;
+ var_t1 = arg3;
+ var_t2 = var_v1;
+ var_a2 = var_t3;
+ sp98 = render->unk_14;
+ } else {
+ spCC = (s32)temp_v0;
+ var_ra = 0xF0;
+ var_a1 = var_t3;
+ var_t1 = var_v1;
+ sp9C = render->unk_14;
+ var_t2 = arg3;
+ var_a2 = arg2;
+ sp98 = gfxCtx->unk_2E4;
+ }
+
+ var_a3 = 0x1000 / (s32)(((var_t5 + 3) & ~3) * 2);
+ if (arg4 != 0) {
+ sp8C = POLY_OPA_DISP;
+ render->unk_00 = 0x140;
+ render->unk_02 = 0xF0;
+ render->unk_10 = gfxCtx->unk_2E4;
+ PreRender_CopyRGBC(render, &sp8C, arg2 - var_t3, arg3 - var_v1);
+ POLY_OPA_DISP = sp8C;
+ } else {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gSPClearGeometryMode(POLY_OPA_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN |
+ G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH | G_CLIPPING |
+ 0x0040F9FA);
+
+ gDPSetOtherMode(POLY_OPA_DISP++,
+ G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PRIM | G_RM_NOOP | G_RM_NOOP2);
+
+ // temp_v0_5 = gfxCtx->polyOpa.p;
+ // gfxCtx->polyOpa.p = temp_v0_5 + 8;
+ // temp_v0_5->words.w0 = ((var_t4 - 1) & 0xFFF) | 0xFF100000;
+ // temp_v0_5->words.w1 = (u32) sp98;
+ gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, var_t4, sp98);
+
+ // temp_v0_6 = gfxCtx->polyOpa.p;
+ // gfxCtx->polyOpa.p = temp_v0_6 + 8;
+ // temp_v0_6->words.w0 = 0xED000000;
+ // temp_v0_6->words.w1 = (((s32) ((f32) var_t4 * 4.0f) & 0xFFF) << 0xC) | ((s32) ((f32) var_ra * 4.0f) & 0xFFF);
+ gDPSetScissorFrac(POLY_OPA_DISP++, G_SC_NON_INTERLACE, 0, 0, (s32)var_t4 * 4.0f, (s32)var_ra * 4.0f);
+
+ while ((s32)var_t0 > 0) {
+ if ((s32)var_t0 < var_a3) {
+ var_a3 = (s32)var_t0;
+ }
+ var_t0 -= var_a3;
+
+ temp_v0_7 = ((var_t5 + var_a1) - 1);
+
+#if 0
+ temp_v0_8 = gfxCtx->polyOpa.p;
+ gfxCtx->polyOpa.p = temp_v0_8 + 8;
+ temp_v0_8->words.w0 = ((spCC - 1) & 0xFFF) | 0xFD100000;
+ temp_v0_8->words.w1 = (u32) sp9C;
+ // gDPSetTextureImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, 0x12345678);
+
+ temp_v0_9 = gfxCtx->polyOpa.p;
+ gfxCtx->polyOpa.p = temp_v0_9 + 8;
+ temp_v0_9->words.w1 = 0x07000000;
+ temp_v0_9->words.w0 = ((((s32) (((temp_v0_7 - var_a1) * 2) + 9) >> 3) & 0x1FF) << 9) | 0xF5100000;
+
+ //temp_v0_10 = gfxCtx->polyOpa.p;
+ //gfxCtx->polyOpa.p = temp_v0_10 + 8;
+ //temp_v0_10->words.w1 = 0x00000000;
+ //temp_v0_10->words.w0 = 0xE6000000;
+ gDPLoadSync(POLY_OPA_DISP++);
+
+ temp_v0_11 = gfxCtx->polyOpa.p;
+ gfxCtx->polyOpa.p = temp_v0_11 + 8;
+ temp_a2 = var_t1 + var_a3;
+ temp_v0_11->words.w0 = (((var_a1 * 4) & 0xFFF) << 0xC) | 0xF4000000 | ((var_t1 * 4) & 0xFFF);
+ temp_v0_11->words.w1 = (((temp_v0_7 * 4) & 0xFFF) << 0xC) | 0x07000000 | (((temp_a2 - 1) * 4) & 0xFFF);
+
+ temp_v0_12 = gfxCtx->polyOpa.p;
+ gfxCtx->polyOpa.p = temp_v0_12 + 8;
+ temp_v0_12->words.w1 = 0x00000000;
+ temp_v0_12->words.w0 = 0xE7000000;
+
+ temp_v0_13 = gfxCtx->polyOpa.p;
+ gfxCtx->polyOpa.p = temp_v0_13 + 8;
+ temp_v0_13->words.w1 = 0x00000000;
+ temp_v0_13->words.w0 = ((((s32) (((temp_v0_7 - var_a1) * 2) + 9) >> 3) & 0x1FF) << 9) | 0xF5100000;
+
+ temp_v0_14 = gfxCtx->polyOpa.p;
+ gfxCtx->polyOpa.p = temp_v0_14 + 8;
+ temp_v0_14->words.w1 = (((temp_v0_7 * 4) & 0xFFF) << 0xC) | (((temp_a2 - 1) * 4) & 0xFFF);
+ temp_v0_14->words.w0 = (((var_a1 * 4) & 0xFFF) << 0xC) | 0xF2000000 | ((var_t1 * 4) & 0xFFF);
+#endif
+ gDPLoadTextureTile(POLY_OPA_DISP++, sp9C, G_IM_FMT_RGBA, G_IM_SIZ_16b, spCC, 0, var_a1, var_t1, temp_v0_7,
+ temp_a2 - 1, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
+ G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+#if 0
+ temp_v0_15 = gfxCtx->polyOpa.p;
+ gfxCtx->polyOpa.p = temp_v0_15 + 8;
+ temp_v0_15->words.w0 = ((((((var_a2 + var_t5) - 1) * 4) & 0xFFF) << 0xC) | 0xE4000000) | (((var_t2 + var_a3 - 1) * 4) & 0xFFF);
+ temp_v0_15->words.w1 = (((var_a2 * 4) & 0xFFF) << 0xC) | ((var_t2 * 4) & 0xFFF);
+
+ temp_v0_16 = gfxCtx->polyOpa.p;
+ gfxCtx->polyOpa.p = temp_v0_16 + 8;
+ temp_v0_16->words.w0 = 0xE1000000;
+ temp_v0_16->words.w1 = (var_a1 << 0x15) | ((var_t1 << 5) & 0xFFFF);
+
+ temp_v0_17 = gfxCtx->polyOpa.p;
+ gfxCtx->polyOpa.p = temp_v0_17 + 8;
+ temp_v0_17->words.w0 = 0xF1000000;
+ temp_v0_17->words.w1 = 0x10000400;
+#endif
+ gSPTextureRectangle(POLY_OPA_DISP++, (var_a2 * 4), (var_t2 * 4), (((var_a2 + var_t5) - 1) * 4),
+ ((var_t2 + var_a3 - 1) * 4), G_TX_RENDERTILE, (var_a1 << 0x5), (var_t1 << 5), 0x1000,
+ 0x0400);
+
+ var_t1 = temp_a2;
+
+ var_t2 = var_t2 + var_a3;
+ }
+ }
+
+ CLOSE_DISPS(gfxCtx);
+}
+#else
+void mSM_cbuf_copy(GraphicsContext* gfxCtx, PreRender* render, s32 arg2, s32 arg3, s32 arg4);
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/submenu/submenu_ovl/m_submenu_ovl/mSM_cbuf_copy.s")
+#endif
+
+void mSM_set_drawMode(GraphicsContext* gfxCtx, struct_func_8085C20C_jp_arg1* arg1, f32 arg2, f32 xAt, s16 angle) {
+ s32 temp_a3 = arg1->unk_04;
+ s32 temp_t1 = arg1->unk_06;
+ f32 temp_fv1;
+ f32 temp_fa0;
+
+ OPEN_DISPS(gfxCtx);
+
+ gSPSegment(POLY_OPA_DISP++, 0x00, NULL);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gSPClearGeometryMode(POLY_OPA_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN |
+ G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH | G_CLIPPING |
+ 0x0040F9FA);
+ gSPTexture(POLY_OPA_DISP++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_SHADE, G_CC_SHADE);
+ gDPSetOtherMode(POLY_OPA_DISP++,
+ G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_FILL | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2);
+ gSPLoadGeometryMode(POLY_OPA_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH);
+
+ temp_fv1 = temp_a3;
+ temp_fa0 = temp_t1;
+
+ gDPSetScissorFrac(POLY_OPA_DISP++, G_SC_NON_INTERLACE, 0, 0, temp_fv1 * 4.0f, temp_fa0 * 4.0f);
+
+ gSPClipRatio(POLY_OPA_DISP++, FRUSTRATIO_1);
+
+ gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, temp_a3, arg1->unk_20);
+
+ gDPSetFillColor(POLY_OPA_DISP++, (GPACK_RGBA5551(255, 255, 240, 0) << 16) | GPACK_RGBA5551(255, 255, 240, 0));
+
+ gDPFillRectangle(POLY_OPA_DISP++, 0, 0, temp_a3 - 1, temp_t1 - 1);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, temp_a3, arg1->unk_14);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetDepthImage(POLY_OPA_DISP++, arg1->unk_20);
+
+ {
+ Vp* vp = GRAPH_ALLOC(gfxCtx, sizeof(Vp));
+ Mtx* sp84 = GRAPH_ALLOC(gfxCtx, sizeof(Mtx));
+ Mtx* sp54 = GRAPH_ALLOC(gfxCtx, sizeof(Mtx));
+ u16 sp7E;
+
+ if (vp == NULL) {
+ vp = &viewport_data_621;
+ } else {
+ vp->vp.vtrans[2] = 0x1FF;
+ vp->vp.vtrans[3] = 0;
+ vp->vp.vscale[0] = vp->vp.vtrans[0] = temp_a3 * 2;
+ vp->vp.vscale[1] = vp->vp.vtrans[1] = temp_t1 * 2;
+ vp->vp.vscale[2] = vp->vp.vtrans[2];
+ vp->vp.vscale[3] = vp->vp.vtrans[3];
+ }
+
+ gSPViewport(POLY_OPA_DISP++, vp);
+
+ if (temp_a3 - 1 != 0x7F) {
+ guPerspective(sp84, &sp7E, 35.0f, temp_fv1 / temp_fa0, 1.0f, 2000.0f, 1.0f);
+ } else {
+ guPerspective(sp84, &sp7E, 20.0f, temp_fv1 / temp_fa0, 100.0f, 800.0f, 1.0f);
+ }
+
+ gSPPerspNormalize(POLY_OPA_DISP++, sp7E);
+ gSPMatrix(POLY_OPA_DISP++, sp84, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
+
+ {
+ f32 yEye;
+ f32 zEye;
+
+ if (angle == 0x4000) {
+ angle = 0x4000 + 0x100;
+ } else if (angle == -0x4000) {
+ angle = -0x4000 + 0x100;
+ }
+
+ yEye = sin_s(angle) * arg2 + xAt;
+ zEye = cos_s(angle) * arg2;
+ if ((angle < -0x4000) || (angle >= 0x4000)) {
+ guLookAt(sp54, 0.0f, yEye, zEye, 0.0f, xAt, 0.0f, 0.0f, -1.0f, 0.0f);
+ } else {
+ guLookAt(sp54, 0.0f, yEye, zEye, 0.0f, xAt, 0.0f, 0.0f, 1.0f, 0.0f);
+ }
+ }
+
+ gSPMatrix(POLY_OPA_DISP++, sp54, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION);
+ gSPSetLights1(POLY_OPA_DISP++, light_data_622);
+ }
+
+ POLY_OPA_DISP = gfx_set_fog_nosync(POLY_OPA_DISP++, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D0, 0x500);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+u8 mSM_get_groupNo(u16 arg0) {
+ return arg0;
+}
+
+#ifdef NON_EQUIVALENT
+// float messed up
+// maybe equivalent, but hard to tell
+void mSM_draw_item(GraphicsContext* gfxCtx, f32 arg1, f32 arg2, f32 arg3, u16 arg4, s32 arg5, s32 arg6, s32 arg7,
+ s32 arg8) {
+ struct_8085DCF8* var_a1; // spAC
+ s32 pad;
+ s32 var_a2;
+ s32 var_a3;
+ s32 var_v1;
+ s32 temp_v0;
+ void* var_a2_2;
+ s32 temp;
+
+ Gfx* gfx;
+
+ var_a2 = -1;
+ var_a3 = 0;
+ if (arg3 < 0.05f) {
+ return;
+ }
+
+ if (arg5 != 0) {
+ if (arg7 >= 6) {
+ var_a1 = &D_8085DD38_jp;
+ if (arg7 >= 0xC) {
+ var_a3 = 1;
+ }
+ } else {
+ var_a1 = &present_tex_data_762[arg7];
+ }
+ } else if (((s32)arg4 >= 0x15B0) && ((s32)arg4 < 0x17AC)) {
+ var_a1 = haniwa_tex_data_759;
+ } else if (((s32)arg4 >= 0x1E3C) && ((s32)arg4 < 0x1EA0)) {
+ var_a1 = fossil_tex_data_760;
+ } else if (((s32)(arg4 & 0xF000) >> 0xC) == 1) {
+ var_a1 = unknown_tex_data_761;
+ } else {
+ temp_v0 = mSM_get_groupNo(arg4);
+
+ var_a2 = (s32)(arg4 & 0xF00) >> 8;
+ if (var_a2 == 0xE) {
+ // var_a1 = *(item_tex_data_table_779 + (var_a2 * 4)) + (arg7 * 8);
+ var_a1 = &item_tex_data_table_779[var_a2][arg7];
+ } else if ((var_a2 == 0) || (var_a2 == 4) || (var_a2 == 6) || (var_a2 == 7) || (var_a2 == 0xA) ||
+ (var_a2 == 0xB)) {
+ // var_a1 = *(item_tex_data_table_779 + (var_a2 * 4));
+ var_a1 = &item_tex_data_table_779[var_a2][0];
+ } else if (var_a2 == 2) {
+ if (((s32)arg4 >= 0x2204) && ((s32)arg4 < 0x2224)) {
+ var_a1 = &D_8085DD88_jp;
+ } else {
+ var_a1 = &D_8085DD68_jp[temp_v0];
+ }
+ } else {
+ // var_a1 = *(item_tex_data_table_779 + (var_a2 * 4)) + (temp_v0 * 8);
+ var_a1 = &item_tex_data_table_779[var_a2][temp_v0];
+ }
+ }
+
+ if (((var_a2 == 3) || (var_a2 == 0xD)) && (arg7 != 0)) {
+ var_a2_2 = (uintptr_t)var_a1->pal + 0x20;
+ } else {
+ var_a2_2 = var_a1->pal;
+ }
+
+ OPEN_DISPS(gfxCtx);
+
+ gfx = POLY_OPA_DISP;
+
+ gDPPipeSync(gfx++);
+ gDPSetAlphaCompare(gfx++, G_AC_THRESHOLD);
+
+ if (arg6 != 0) {
+ if (var_a3 != 0) {
+ var_v1 = (s32)((arg7 * -0xFF) + 0x17E8) / 13;
+ } else {
+ var_v1 = 0xFF;
+ }
+
+ gDPSetPrimColor(gfx++, 0, 0xFF, 255, 255, 255, var_v1);
+ } else {
+ var_v1 = 0xFF;
+
+ gDPSetPrimColor(gfx++, 0, 0x64, 115, 160, 255, var_v1);
+ }
+
+ if (arg8 != 0) {
+ gDPSetBlendColor(gfx++, 255, 255, 255, 40);
+ } else if (var_v1 == 0xFF) {
+ gDPSetBlendColor(gfx++, 255, 255, 255, 254);
+ gDPSetCombineLERP(gfx++, TEXEL0, PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, TEXEL0, TEXEL0, PRIMITIVE,
+ PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, TEXEL0);
+ } else {
+ gDPSetBlendColor(gfx++, 255, 255, 255, 40);
+ gDPSetCombineLERP(gfx++, TEXEL0, PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, TEXEL0,
+ PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0);
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetTexturePersp(gfx++, G_TP_NONE);
+ gDPLoadTLUT_pal16(gfx++, 15, Lib_SegmentedToVirtual(var_a2_2));
+ if (arg3) {}
+ gDPLoadTextureBlock_4b(gfx++, Lib_SegmentedToVirtual(var_a1->tex), G_IM_FMT_CI, 32, 32, 15, G_TX_MIRROR | G_TX_WRAP,
+ G_TX_MIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD);
+
+ {
+ s32 ar1;
+ s32 ar2;
+ s32 ar3;
+ s32 ar4;
+ s32 ar5;
+ s32 ar6;
+ s32 ar7;
+ s32 ar8;
+ s32 ar9;
+
+ temp = (arg1 * 0.975f);
+
+ ar1 = (s32)(((temp + 160.0f) - 12.0f * arg3) * 4.0f);
+ ar2 = (s32)(((120.0f - arg2) - 12.0f * arg3) * 4.0f);
+ ar3 = (s32)((24.0f * arg3 + ((temp + 160.0f) - 12.0f * arg3)) * 4.0f);
+ ar4 = (s32)((24.0f * arg3 + ((120.0f - arg2) - 12.0f * arg3)) * 4.0f);
+ ar5 = 0;
+ ar6 = 0;
+ ar7 = 0;
+ ar8 = (s32)((1.0f / arg3) * 1365.3334f);
+ ar9 = (s32)((1.0f / arg3) * 1365.3334f);
+
+ gfx = func_800BE320_jp(gfx, ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9);
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetAlphaCompare(gfx++, G_AC_NONE);
+ gDPSetBlendColor(gfx++, 255, 255, 255, 8);
+ gDPSetTexturePersp(gfx++, G_TP_PERSP);
+
+ POLY_OPA_DISP = gfx;
+
+ CLOSE_DISPS(gfxCtx);
+}
+#else
+void mSM_draw_item(GraphicsContext* gfxCtx, f32 arg1, f32 arg2, f32 arg3, u16 arg4, s32 arg5, s32 arg6, s32 arg7,
+ s32 arg8);
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/submenu/submenu_ovl/m_submenu_ovl/mSM_draw_item.s")
+#endif
+
+#ifdef NON_MATCHING
+// stack issues
+void mSM_draw_mail(GraphicsContext* arg0, f32 arg1, f32 arg2, f32 arg3, struct_func_8085CE18_jp_arg4* arg4, s32 arg5,
+ s32 arg6) {
+ struct_8085DCF8* temp_a1;
+ s32 var_t0;
+ UNUSED s32 pad;
+ Gfx* gfx;
+
+ if (mMl_check_send_mail(arg4) != 0) {
+ var_t0 = 2;
+ } else if ((arg4->unk_26 == 4) || (arg4->unk_26 == 2)) {
+ var_t0 = 4;
+ } else {
+ var_t0 = 0;
+ }
+
+ if (arg4->unk_24 != 0) {
+ var_t0 += 1;
+ }
+
+ Matrix_scale(16.0f, 16.0f, 1.0f, MTXMODE_NEW);
+ Matrix_translate(arg1, arg2, 140.0f, MTXMODE_APPLY);
+ Matrix_scale(arg3, arg3, 1.0f, MTXMODE_APPLY);
+
+ OPEN_DISPS(arg0);
+
+ gfx = POLY_OPA_DISP;
+
+ gDPPipeSync(gfx++);
+ gSPMatrix(gfx++, _Matrix_to_Mtx_new(arg0), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ temp_a1 = &letter_tex_data_table_837[var_t0];
+
+ gSPSegment(gfx++, 0x09, Lib_SegmentedToVirtual(temp_a1->pal));
+ gSPSegment(gfx++, 0x0A, Lib_SegmentedToVirtual(temp_a1->tex));
+ gDPSetAlphaCompare(gfx++, G_AC_THRESHOLD);
+ gDPSetBlendColor(gfx++, 255, 255, 255, 40);
+
+ if (arg5 != 0) {
+ gDPSetPrimColor(gfx++, 0, 0xFF, 255, 255, 255, 255);
+ } else {
+ gDPSetPrimColor(gfx++, 0, 0x82, 255, 110, 105, 255);
+ }
+
+ if (arg6 == 0) {
+ gDPSetCombineLERP(gfx++, TEXEL0, PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, TEXEL0, TEXEL0, PRIMITIVE,
+ PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, TEXEL0);
+ }
+
+ gSPDisplayList(gfx++, D_C012370);
+ gDPPipeSync(gfx++);
+ gDPSetAlphaCompare(gfx++, G_AC_NONE);
+ gDPSetBlendColor(gfx++, 255, 255, 255, 8);
+
+ POLY_OPA_DISP = gfx;
+
+ CLOSE_DISPS(arg0);
+}
+#else
+void mSM_draw_mail(GraphicsContext* arg0, f32 arg1, f32 arg2, f32 arg3, struct_func_8085CE18_jp_arg4* arg4, s32 arg5,
+ s32 arg6);
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/submenu/submenu_ovl/m_submenu_ovl/mSM_draw_mail.s")
+#endif
+
+void func_8085D094_jp(Submenu* submenu) {
+ struct_8085E9B0_unk_10000* sp2C = &submenu->unk_2C->unk_10000;
+ void* vram;
+ s32 romStart;
+
+ if (sp2C->unk_04) {
+ return;
+ }
+
+ //! FAKE: needs s32 instead of unsigned type
+ romStart = SEGMENT_ROM_START(segment_00A58000);
+
+ vram = sp2C->unk_00;
+ sp2C->unk_08 = vram;
+
+ DmaMgr_RequestSyncDebug(vram, romStart, SEGMENT_ROM_SIZE(segment_00A58000), "../m_submenu_ovl.c", 0x7C0);
+ sp2C->unk_00 = (void*)ALIGN16(SEGMENT_ROM_SIZE(segment_00A58000) + (uintptr_t)vram);
+
+ sp2C->unk_04 = 1;
+}
+
+void mSM_ovl_prog_seg(Submenu* submenu, SubmenuProgramOverlay* programOvl) {
+ struct_8085E9B0_unk_10000* temp = &submenu->unk_2C->unk_10000;
+ UNUSED s32 pad;
+ void* allocatedVram;
+ SubmenuProgramOverlayFunc construct;
+
+ if (programOvl->unk_1C == true) {
+ SubmenuProgramOverlayFunc new_var = programOvl->construct;
+
+ new_var(submenu);
+ return;
+ }
+
+ allocatedVram = submenu->linkedAllocEnd;
+ ovlmgr_Load(programOvl->vromStart, programOvl->vromEnd, programOvl->vramStart, programOvl->vramEnd, allocatedVram);
+ submenu->linkedAllocEnd =
+ (void*)((uintptr_t)allocatedVram + ALIGN64((uintptr_t)programOvl->vramEnd - (uintptr_t)programOvl->vramStart));
+
+ construct = (void*)((uintptr_t)allocatedVram + (uintptr_t)programOvl->construct - (uintptr_t)programOvl->vramStart);
+ construct(submenu);
+ programOvl->construct = construct;
+
+ //! FAKE
+dummy_label_595693:
+ programOvl->destruct =
+ (void*)((uintptr_t)allocatedVram + (uintptr_t)programOvl->destruct - (uintptr_t)programOvl->vramStart);
+ programOvl->set_proc =
+ (void*)((uintptr_t)allocatedVram + (uintptr_t)programOvl->set_proc - (uintptr_t)programOvl->vramStart);
+
+ programOvl->unk_1C = true;
+ temp->unk_68[temp->unk_64] = programOvl;
+ temp->unk_64++;
+
+ //! FAKE
+ if (construct) {}
+}
+
+void mSM_set_other_seg(Submenu* submenu) {
+ SubmenuProgramId temp = submenu->unk_08;
+ u32 flag = flg_table_916[temp];
+
+ if (flag & PROGRAM_FLAG_2) {
+ func_8085D094_jp(submenu);
+ }
+ if (flag & PROGRAM_FLAG_TAG) {
+ mSM_ovl_prog_seg(submenu, tag_program_dlftbl);
+ }
+ if (flag & PROGRAM_FLAG_HAND) {
+ mSM_ovl_prog_seg(submenu, hand_program_dlftbl);
+ }
+ if (flag & PROGRAM_FLAG_HANIWA) {
+ mSM_ovl_prog_seg(submenu, haniwa_program_dlftbl);
+ }
+}
+
+void mSM_set_before_menu_proc(Submenu* submenu) {
+ SubmenuProgramId programId = submenu->programId;
+ struct_8085E9B0_unk_10088* temp;
+
+ mSM_program_dlftbl[programId].set_proc(submenu);
+ submenu->unk_08 = programId;
+
+ //! FAKE
+ if (((!programId) && (!programId)) && (!programId)) {}
+
+ temp = &submenu->unk_2C->unk_10088[programId];
+
+ temp->unk_14 = NULL;
+}
+
+void mSM_set_new_seg(Submenu* submenu) {
+ SubmenuProgramId programId = submenu->programId;
+
+ mSM_ovl_prog_seg(submenu, &mSM_program_dlftbl[programId]);
+ submenu->unk_08 = programId;
+}
+
+void mSM_set_new_start_data(Submenu* submenu) {
+ SubmenuProgramId programId = submenu->programId;
+ struct_8085E9B0_unk_10088* temp_v1 = &submenu->unk_2C->unk_10088[programId];
+ f32* temp_a1 = data_table_935[programId];
+
+ temp_v1->unk_00 = programId;
+ temp_v1->unk_18 = temp_a1[0];
+ temp_v1->unk_1C = temp_a1[1];
+ temp_v1->unk_20 = temp_a1[2];
+ temp_v1->unk_24 = temp_a1[3];
+ temp_v1->unk_38 = submenu->unk_10;
+ temp_v1->unk_3C = submenu->unk_14;
+ temp_v1->unk_40 = submenu->unk_18;
+ temp_v1->unk_44 = submenu->unk_1C;
+
+ if ((programId == SUBMENU_PROGRAM_1) && (submenu->unk_10 == 0xE)) {
+ temp_v1->unk_18 = -300.0f;
+ }
+}
+
+void func_8085D43C_jp(Submenu* submenu, void** arg1, struct_func_8085D43C_jp_arg2* arg2) {
+ void* temp_a0 = submenu->unk_2C->unk_10000.unk_00;
+ size_t size;
+
+ *arg1 = temp_a0;
+ size = arg2->vromEnd - arg2->vromStart;
+ DmaMgr_RequestSyncDebug(temp_a0, arg2->vromStart, size, "../m_submenu_ovl.c", 2307);
+ submenu->unk_2C->unk_10000.unk_00 = (void*)ALIGN16((uintptr_t)size + (uintptr_t)temp_a0);
+}
+
+void mSM_move_chg_base(struct_mSM_move_chg_base_arg0* arg0, u32 arg1) {
+ arg0->unk_04 = 0;
+ arg0->unk_34 = arg1;
+ if (arg1 & 1) {
+ arg0->unk_30 = 1;
+ } else {
+ arg0->unk_30 = 4;
+ }
+}
+
+void mSM_make_trigger_data(Submenu* submenu) {
+ s32 var_a0 = (getButton() & 0xF) | getTrigger();
+ struct_8085E9B0_unk_10670* temp_v1 = &submenu->unk_2C->unk_10670;
+
+ if (gamePT->controller.moveR > 0.5f) {
+ u16 temp = gamePT->controller.moveAngle + 0x2000;
+
+ var_a0 |= add_trigger_954[temp >> 0xE];
+ }
+
+ if (var_a0 == temp_v1->unk_20) {
+ if (temp_v1->unk_24 > 0) {
+ temp_v1->unk_24--;
+ var_a0 = 0;
+ } else {
+ temp_v1->unk_24 = 1;
+ }
+ } else {
+ temp_v1->unk_20 = var_a0;
+ temp_v1->unk_24 = 0xC;
+ }
+
+ temp_v1->unk_1C = var_a0;
+}
+
+#ifdef NON_MATCHING
+// regalloc
+void mSM_save_before_func(Submenu* submenu) {
+ struct_8085E9B0_unk_10088* new_var2;
+ SubmenuProgramId temp_a2;
+ struct_8085E9B0* temp_v0;
+ struct_8085E9B0_unk_10088* temp_v1;
+
+ temp_v0 = submenu->unk_2C;
+ temp_v1 = &temp_v0->unk_10088[submenu->programId];
+
+ temp_a2 = submenu->unk_08;
+ temp_v1->unk_08 = temp_a2;
+ temp_v1->unk_0C = temp_v0->unk_10670.unk_00;
+ temp_v1->unk_10 = temp_v0->unk_10670.unk_04;
+
+ if (submenu->programId) {}
+ new_var2 = &temp_v0->unk_10088[temp_v1->unk_08];
+
+ new_var2->unk_14 = submenu->programId;
+}
+#else
+void mSM_save_before_func(Submenu* submenu);
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/submenu/submenu_ovl/m_submenu_ovl/mSM_save_before_func.s")
+#endif
+
+void mSM_set_proc(Submenu* submenu) {
+ mSM_save_before_func(submenu);
+ mSM_set_new_start_data(submenu);
+ mSM_set_new_seg(submenu);
+ mSM_set_other_seg(submenu);
+}
+
+void mSM_tex_move(Submenu* submenu) {
+ struct_8085E9B0_unk_10670* temp_v0 = &submenu->unk_2C->unk_10670;
+
+ temp_v0->unk_28 += 0.707f;
+ temp_v0->unk_2C += 0.707f;
+
+ while (temp_v0->unk_28 >= 1024.0f) {
+ temp_v0->unk_28 -= 1024.0f;
+ }
+
+ while (temp_v0->unk_2C >= 1024.0f) {
+ temp_v0->unk_2C -= 1024.0f;
+ }
+}
+
+#ifdef NON_EQUIVALENT
+void mSM_return_func(Submenu* submenu, struct_mSM_return_func_arg1* arg1) {
+ struct_8085E9B0_unk_10088* temp_v0;
+ struct_8085E9B0* temp_v1;
+ struct_8085E9B0_unk_10088* othertemp;
+ s32 temp_a2;
+
+ temp_a2 = arg1->unk_14;
+ temp_v1 = submenu->unk_2C;
+ temp_v0 = temp_v1->unk_10088;
+
+ if (temp_a2 != 0) {
+ if (((!temp_a2) && (!temp_a2)) && (!temp_a2)) {}
+
+ othertemp = temp_v0;
+
+ temp_v0 += temp_a2;
+
+ temp_v0->unk_08 = arg1->unk_08;
+ temp_v0->unk_0C = arg1->unk_0C;
+ temp_v0->unk_10 = arg1->unk_10;
+ if (!arg1->unk_14) {}
+
+ othertemp[temp_v0->unk_08].unk_14 = arg1->unk_14;
+
+ arg1->unk_2C = 0;
+ } else {
+ struct_8085E9B0* temp_v1_2;
+ struct_8085E9B0_unk_10000* temp;
+
+ temp_v1_2 = submenu->unk_2C;
+ temp = &temp_v1_2->unk_10000;
+ submenu->programId = arg1->unk_08;
+ if (submenu->programId == SUBMENU_PROGRAM_0) {
+ while (temp_v1_2->unk_10000.unk_64 != 0) {
+ temp->unk_64--;
+ temp->unk_68[temp->unk_64]->destruct(submenu);
+ }
+
+ submenu->moveProcIndex = MSM_MOVE_PROC_END;
+ submenu->move = (void*)none_proc1;
+ submenu->unk_08 = arg1->unk_08;
+ submenu->unk_2C->unk_10670.unk_00 = (void*)none_proc1;
+ submenu->unk_2C->unk_10670.unk_04 = (void*)none_proc1;
+ } else {
+ mSM_set_before_menu_proc(submenu);
+ }
+ arg1->unk_2C = 0;
+ }
+
+ arg1->unk_08 = SUBMENU_PROGRAM_0;
+ arg1->unk_14 = 0;
+ arg1->unk_04 = 0;
+ arg1->unk_30 = 0;
+}
+#else
+void mSM_return_func(Submenu* submenu, struct_mSM_return_func_arg1* arg1);
+#pragma GLOBAL_ASM("asm/jp/nonmatchings/overlays/submenu/submenu_ovl/m_submenu_ovl/mSM_return_func.s")
+#endif
+
+s32 mSM_move_menu(f32* arg0, f32* arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5) {
+ if (((*arg0 - arg3) * arg5) >= 0.0f) {
+ *arg1 *= arg2;
+ if (*arg1 < 1.0f) {
+ *arg1 = 1.0f;
+ } else if (*arg1 > 75.0f) {
+ *arg1 = 75.0f;
+ }
+ }
+
+ *arg0 += *arg1 * arg5;
+ if (((*arg0 - arg4) * arg5) > 0.0f) {
+ *arg0 = arg4;
+ return 1;
+ }
+
+ return 0;
+}
+
+void mSM_move_Move(UNUSED Submenu* submenu, struct_mSM_move_Move_arg1* arg1) {
+ f32 var_fv0;
+ s32 temp_t0 = arg1->unk_34;
+ f32* temp_v0 = move_data_1027[temp_t0 & 1];
+ s32 index;
+ s32 new_var;
+
+ if (temp_t0 & 2) {
+ var_fv0 = -1.0f;
+ } else {
+ var_fv0 = 1.0f;
+ }
+
+ index = temp_t0 >> 2;
+
+ if (mSM_move_menu(&arg1->unk_18[index], &arg1->unk_20[index], temp_v0[0], temp_v0[1] * var_fv0,
+ temp_v0[2] * var_fv0, temp_v0[3] * var_fv0) == 1) {
+ arg1->unk_04 = arg1->unk_30;
+ }
+
+ // truncate
+ new_var = arg1->unk_18[index];
+ arg1->unk_18[index] = new_var;
+}
+
+/**
+ * Original name: mSM_move_End
+ */
+void mSM_ovl_move_End(Submenu* submenu, struct_mSM_return_func_arg1* arg1) {
+ mSM_return_func(submenu, arg1);
+}
+
+void mSM_menu_ovl_move(Submenu* submenu) {
+ struct_8085E9B0_unk_10670* sp24 = &submenu->unk_2C->unk_10670;
+
+ mSM_make_trigger_data(submenu);
+ if (submenu->programId != submenu->unk_08) {
+ mSM_set_proc(submenu);
+ }
+ mSM_tex_move(submenu);
+ sp24->unk_00(submenu);
+}
+
+void mSM_menu_ovl_draw(Submenu* submenu, Game_Play* game_play) {
+ mSM_setup_view(submenu, game_play->state.gfxCtx, 1);
+ submenu->unk_2C->unk_10670.unk_04(submenu, game_play);
+}
+
+void mSM_menu_ovl_init(Submenu* submenu) {
+ Game_Play_unk_0110* var_v1;
+ void* func = none_proc1;
+ u16 temp = 0x2000;
+
+ submenu->unk_2C = &ovl_base;
+ bzero(&ovl_base, sizeof(struct_8085E9B0));
+
+//! FAKE
+label:
+ if (submenu->unk_00 != 4) {
+ var_v1 = &((Game_Play*)gamePT)->unk_0110;
+ } else {
+ var_v1 = &((Game__00743CD0*)gamePT)->unk_02FC;
+ }
+
+ ovl_base.unk_10000.unk_00 = var_v1->unk_1818;
+ submenu->unk_08 = SUBMENU_PROGRAM_0;
+ ovl_base.unk_10670.unk_00 = func;
+ ovl_base.unk_10670.unk_04 = func;
+ ovl_base.unk_10670.unk_08 = func;
+ ovl_base.unk_10670.unk_0C = func;
+ ovl_base.unk_10670.unk_10 = func;
+ ovl_base.unk_10670.unk_14 = func;
+ ovl_base.unk_10670.unk_26 = temp;
+
+ submenu->unk_2C->returnFunc = mSM_return_func;
+ submenu->unk_2C->moveMove = mSM_move_Move;
+ submenu->unk_2C->moveEnd = mSM_ovl_move_End;
+ submenu->unk_2C->moveChgBase = mSM_move_chg_base;
+ submenu->unk_2C->setCharMatrix = mSM_set_char_matrix;
+ submenu->unk_2C->cbufCopy = mSM_cbuf_copy;
+ submenu->unk_2C->setDrawMode = mSM_set_drawMode;
+ submenu->unk_2C->drawItem = mSM_draw_item;
+ submenu->unk_2C->drawMail = mSM_draw_mail;
+ submenu->unk_2C->setupView = mSM_setup_view;
+ submenu->unk_2C->unk_106CC = func_8085D43C_jp;
+
+ mSM_set_proc(submenu);
+ submenu->move = mSM_menu_ovl_move;
+ submenu->draw = mSM_menu_ovl_draw;
+ mSM_menu_ovl_move(submenu);
+}
diff --git a/src/overlays/submenu/submenu_ovl/m_submenu_ovl.h b/src/overlays/submenu/submenu_ovl/m_submenu_ovl.h
index 63364e9..e02a529 100644
--- a/src/overlays/submenu/submenu_ovl/m_submenu_ovl.h
+++ b/src/overlays/submenu/submenu_ovl/m_submenu_ovl.h
@@ -1,8 +1,162 @@
#ifndef M_SUBMENU_OVL
#define M_SUBMENU_OVL
-struct mSM;
+#include "ultra64.h"
+#include "other_types.h"
+#include "unk.h"
-void mSM_menu_ovl_init(struct mSM* arg0);
+struct GraphicsContext;
+struct Game_Play;
+struct Submenu;
+struct PreRender;
+
+// TODO: Consider merging this two typedefs into one
+typedef void (*SubmenuProgramOverlayFunc)(struct Submenu*);
+
+typedef void (*struct_8085E9B0_unk_10670_unk_00)(struct Submenu*);
+typedef void (*struct_8085E9B0_unk_10670_unk_04)(struct Submenu*, struct Game_Play*);
+
+typedef struct SubmenuProgramOverlay {
+ /* 0x00 */ RomOffset vromStart;
+ /* 0x00 */ RomOffset vromEnd;
+ /* 0x08 */ void* vramStart;
+ /* 0x0C */ void* vramEnd;
+ /* 0x10 */ SubmenuProgramOverlayFunc construct; // name based on original function names
+ /* 0x14 */ SubmenuProgramOverlayFunc destruct; // name based on original function names
+ /* 0x18 */ SubmenuProgramOverlayFunc set_proc; // name based on original function names
+ /* 0x1C */ s32 unk_1C;
+} SubmenuProgramOverlay; // size = 0x20
+
+typedef struct struct_mSM_return_func_arg1 {
+ /* 0x00 */ UNK_TYPE1 unk_00[0x4];
+ /* 0x04 */ UNK_TYPE unk_04;
+ /* 0x08 */ UNK_TYPE unk_08;
+ /* 0x0C */ struct_8085E9B0_unk_10670_unk_00 unk_0C;
+ /* 0x10 */ struct_8085E9B0_unk_10670_unk_04 unk_10;
+ /* 0x14 */ UNK_TYPE unk_14;
+ /* 0x18 */ UNK_TYPE1 unk_18[0x14];
+ /* 0x2C */ UNK_TYPE unk_2C;
+ /* 0x30 */ UNK_TYPE unk_30;
+} struct_mSM_return_func_arg1; // size >= 0x34
+
+typedef struct struct_func_8085C20C_jp_arg1 {
+ /* 0x00 */ UNK_TYPE1 unk_00[0x4];
+ /* 0x04 */ u16 unk_04;
+ /* 0x06 */ u16 unk_06;
+ /* 0x08 */ UNK_TYPE1 unk_08[0xC];
+ /* 0x14 */ TexturePtr unk_14;
+ /* 0x18 */ UNK_TYPE1 unk_18[0x8];
+ /* 0x20 */ TexturePtr unk_20;
+} struct_func_8085C20C_jp_arg1; // size >= 0x24
+
+typedef struct struct_func_8085CE18_jp_arg4 {
+ /* 0x00 */ UNK_TYPE1 unk_00[0x24];
+ /* 0x24 */ u16 unk_24;
+ /* 0x26 */ u8 unk_26;
+} struct_func_8085CE18_jp_arg4; // size >= 0x28
+
+typedef struct struct_mSM_move_Move_arg1 {
+ /* 0x00 */ UNK_TYPE1 unk_00[0x4];
+ /* 0x04 */ s32 unk_04;
+ /* 0x08 */ UNK_TYPE1 unk_08[0x10];
+ /* 0x18 */ f32 unk_18[2];
+ /* 0x20 */ f32 unk_20[2];
+ /* 0x28 */ UNK_TYPE1 unk_28[0x8];
+ /* 0x30 */ UNK_TYPE4 unk_30;
+ /* 0x34 */ UNK_TYPE4 unk_34;
+} struct_mSM_move_Move_arg1; // size >= 0x38
+
+typedef struct struct_mSM_move_chg_base_arg0 {
+ /* 0x00 */ UNK_TYPE1 unk_00[0x4];
+ /* 0x04 */ UNK_TYPE4 unk_04;
+ /* 0x08 */ UNK_TYPE1 unk_08[0x28];
+ /* 0x04 */ UNK_TYPE4 unk_30;
+ /* 0x04 */ u32 unk_34;
+} struct_mSM_move_chg_base_arg0;
+
+typedef struct struct_func_8085D43C_jp_arg2 {
+ /* 0x0 */ RomOffset vromStart;
+ /* 0x4 */ RomOffset vromEnd;
+} struct_func_8085D43C_jp_arg2; // size = 0x8
+
+typedef struct struct_8085E9B0_unk_10000 {
+ /* 0x10000 */ void* unk_00;
+ /* 0x10004 */ s32 unk_04;
+ /* 0x10008 */ void* unk_08;
+ /* 0x1000C */ UNK_TYPE1 unk_0C[0x58];
+ /* 0x10064 */ UNK_TYPE4 unk_64;
+ /* 0x10068 */ SubmenuProgramOverlay* unk_68[UNK_SIZE];
+} struct_8085E9B0_unk_10000; // size >= 0x6C
+
+typedef struct struct_8085E9B0_unk_10088 {
+ /* 0x00 */ s32 unk_00;
+ /* 0x04 */ UNK_TYPE1 unk_04[0x4];
+ /* 0x08 */ UNK_TYPE4 unk_08;
+ /* 0x0C */ struct_8085E9B0_unk_10670_unk_00 unk_0C;
+ /* 0x10 */ struct_8085E9B0_unk_10670_unk_04 unk_10;
+ /* 0x14 */ UNK_TYPE4 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ f32 unk_20;
+ /* 0x24 */ f32 unk_24;
+ /* 0x28 */ UNK_TYPE1 unk_28[0x10];
+ /* 0x38 */ UNK_TYPE4 unk_38;
+ /* 0x3C */ UNK_TYPE4 unk_3C;
+ /* 0x40 */ UNK_TYPE4 unk_40;
+ /* 0x44 */ UNK_TYPE4 unk_44;
+} struct_8085E9B0_unk_10088; // size = 0x48
+
+typedef struct struct_8085E9B0_unk_10670 {
+ /* 0x00 */ struct_8085E9B0_unk_10670_unk_00 unk_00;
+ /* 0x04 */ struct_8085E9B0_unk_10670_unk_04 unk_04;
+ /* 0x08 */ UNK_FUN_PTR unk_08;
+ /* 0x0C */ UNK_FUN_PTR unk_0C;
+ /* 0x10 */ UNK_FUN_PTR unk_10;
+ /* 0x14 */ UNK_FUN_PTR unk_14;
+ /* 0x18 */ UNK_TYPE1 unk_18[0x4];
+ /* 0x1C */ UNK_TYPE4 unk_1C;
+ /* 0x20 */ UNK_TYPE4 unk_20;
+ /* 0x24 */ s16 unk_24;
+ /* 0x26 */ u16 unk_26;
+ /* 0x28 */ f32 unk_28;
+ /* 0x2C */ f32 unk_2C;
+} struct_8085E9B0_unk_10670; // size >= 0x30
+
+typedef void (*struct_8085E9B0_unk_106A4)(struct Submenu*, struct_mSM_return_func_arg1*);
+typedef void (*struct_8085E9B0_unk_106A8)(struct Submenu*, struct_mSM_move_Move_arg1*);
+typedef void (*struct_8085E9B0_unk_106AC)(struct Submenu*, struct_mSM_return_func_arg1*);
+typedef void (*struct_8085E9B0_unk_106B0)(struct_mSM_move_chg_base_arg0*, u32);
+typedef void (*struct_8085E9B0_unk_106B4)(struct GraphicsContext*);
+typedef void (*struct_8085E9B0_unk_106B8)(struct GraphicsContext*, struct PreRender*, s32, s32, s32);
+typedef void (*struct_8085E9B0_unk_106BC)(struct GraphicsContext*, struct struct_func_8085C20C_jp_arg1*, f32, f32, s16);
+typedef void (*struct_8085E9B0_unk_106C0)(struct GraphicsContext*, f32, f32, f32, u16, s32, s32, s32, s32);
+typedef void (*struct_8085E9B0_unk_106C4)(struct GraphicsContext*, f32, f32, f32, struct_func_8085CE18_jp_arg4*, s32, s32);
+typedef void (*struct_8085E9B0_unk_106C8)(struct Submenu*, struct GraphicsContext*, s32);
+typedef void (*struct_8085E9B0_unk_106CC)(struct Submenu*, void**, struct_func_8085D43C_jp_arg2*);
+
+typedef struct struct_8085E9B0 {
+ /* 0x00000 */ UNK_TYPE1 unk_00000[0x10000];
+ /* 0x10000 */ struct_8085E9B0_unk_10000 unk_10000;
+ /* 0x1006C */ UNK_TYPE1 unk_1006C[0x1C];
+ /* 0x10088 */ struct_8085E9B0_unk_10088 unk_10088[UNK_SIZE];
+ /* 0x100D0 */ UNK_TYPE1 unk_100D0[0x5A0];
+ /* 0x10670 */ struct_8085E9B0_unk_10670 unk_10670;
+ /* 0x106A0 */ UNK_TYPE1 unk_106A0[0x4];
+ /* 0x106A4 */ struct_8085E9B0_unk_106A4 returnFunc;
+ /* 0x106A8 */ struct_8085E9B0_unk_106A8 moveMove;
+ /* 0x106AC */ struct_8085E9B0_unk_106AC moveEnd;
+ /* 0x106B0 */ struct_8085E9B0_unk_106B0 moveChgBase;
+ /* 0x106B4 */ struct_8085E9B0_unk_106B4 setCharMatrix;
+ /* 0x106B8 */ struct_8085E9B0_unk_106B8 cbufCopy;
+ /* 0x106BC */ struct_8085E9B0_unk_106BC setDrawMode;
+ /* 0x106C0 */ struct_8085E9B0_unk_106C0 drawItem;
+ /* 0x106C4 */ struct_8085E9B0_unk_106C4 drawMail;
+ /* 0x106C8 */ struct_8085E9B0_unk_106C8 setupView;
+ /* 0x106CC */ struct_8085E9B0_unk_106CC unk_106CC;
+ /* 0x106D0 */ UNK_TYPE1 unk_106D0[0x5C];
+ /* 0x1072C */ Mtx* unk_1072C;
+} struct_8085E9B0; // size = 0x10730
+
+void mSM_menu_ovl_init(struct Submenu* submenu);
#endif
diff --git a/src/overlays/submenu/tag_ovl/m_tag_ovl.h b/src/overlays/submenu/tag_ovl/m_tag_ovl.h
new file mode 100644
index 0000000..7c6ce53
--- /dev/null
+++ b/src/overlays/submenu/tag_ovl/m_tag_ovl.h
@@ -0,0 +1,12 @@
+#ifndef tag_ovl_H
+#define tag_ovl_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+struct Submenu;
+
+void mTG_tag_ovl_construct(struct Submenu* submenu);
+void mTG_tag_ovl_destruct(struct Submenu* submenu);
+
+#endif