summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/code_variables.h12
-rw-r--r--include/game.h34
-rw-r--r--include/tables/dmatables/dmadata_table_jp.h36
-rw-r--r--include/tables/gamestate_table.h10
-rw-r--r--linker_scripts/jp/symbol_addrs_code.txt13
-rw-r--r--linker_scripts/jp/symbol_addrs_overlays.txt36
-rw-r--r--src/code/m_game_dlftbls.c48
-rw-r--r--src/overlays/gamestates/ovl__00743CD0/_00743CD0.h16
-rw-r--r--src/overlays/gamestates/ovl_famicom_emu/famicom_emu.h1
-rw-r--r--src/overlays/gamestates/ovl_first_game/first_game.h16
-rw-r--r--src/overlays/gamestates/ovl_play/m_play.h1
-rw-r--r--src/overlays/gamestates/ovl_player_select/player_select.h16
-rw-r--r--src/overlays/gamestates/ovl_prenmi/m_prenmi.h16
-rw-r--r--src/overlays/gamestates/ovl_save_menu/save_menu.h16
-rw-r--r--src/overlays/gamestates/ovl_second_game/second_game.h16
-rw-r--r--src/overlays/gamestates/ovl_select/m_select.h16
-rw-r--r--src/overlays/gamestates/ovl_trademark/m_trademark.h16
-rw-r--r--yamls/jp/code.yaml3
-rw-r--r--yamls/jp/overlays.yaml144
19 files changed, 337 insertions, 129 deletions
diff --git a/include/code_variables.h b/include/code_variables.h
index d038f7e..86bdacd 100644
--- a/include/code_variables.h
+++ b/include/code_variables.h
@@ -467,17 +467,7 @@
// extern UNK_TYPE D_80106D8C_jp;
// extern UNK_TYPE D_80106DA0_jp;
// extern UNK_TYPE D_80106E10_jp;
-// extern UNK_TYPE game_dlftbls;
-// extern UNK_TYPE D_80106E50_jp;
-// extern UNK_TYPE D_80106E80_jp;
-// extern UNK_TYPE D_80106EB0_jp;
-// extern UNK_TYPE D_80106EE0_jp;
-// extern UNK_TYPE D_80106F10_jp;
-// extern UNK_TYPE D_80106F40_jp;
-// extern UNK_TYPE D_80106F70_jp;
-// extern UNK_TYPE D_80106FA0_jp;
-// extern UNK_TYPE D_80106FD0_jp;
-// extern UNK_TYPE D_80107000_jp;
+
// extern UNK_TYPE D_80107010_jp;
// extern UNK_TYPE D_80107020_jp;
// extern UNK_TYPE D_801071A4_jp;
diff --git a/include/game.h b/include/game.h
index 999d56d..9bc727e 100644
--- a/include/game.h
+++ b/include/game.h
@@ -3,6 +3,7 @@
#include "ultra64.h"
#include "TwoHeadArena.h"
+#include "other_types.h"
#include "gamealloc.h"
#include "libu64/pad.h"
#include "unk.h"
@@ -12,8 +13,35 @@ struct GraphicsContext;
struct struct_80145020_jp;
+#define DEFINE_GAMESTATE_INTERNAL(typeName, enumName) enumName,
+#define DEFINE_GAMESTATE(typeName, enumName, name) DEFINE_GAMESTATE_INTERNAL(typeName, enumName)
+
+typedef enum GameStateId {
+#include "tables/gamestate_table.h"
+ /* 0x0A */ GAMESTATE_ID_MAX
+} GameStateId;
+
+#undef DEFINE_GAMESTATE
+#undef DEFINE_GAMESTATE_INTERNAL
+
+
typedef void (*GameStateFunc)(struct GameState* gameState);
+typedef struct {
+ /* 0x00 */ void* loadedRamAddr;
+ /* 0x04 */ RomOffset vromStart;
+ /* 0x08 */ RomOffset vromEnd;
+ /* 0x0C */ void* vramStart;
+ /* 0x10 */ void* vramEnd;
+ /* 0x14 */ UNK_PTR unk_14;
+ /* 0x18 */ GameStateFunc init; // initializes and executes the given context
+ /* 0x1C */ GameStateFunc destroy; // deconstructs the context, and sets the next context to load
+ /* 0x20 */ UNK_PTR unk_20;
+ /* 0x24 */ UNK_PTR unk_24;
+ /* 0x28 */ UNK_TYPE unk_28;
+ /* 0x2C */ size_t instanceSize;
+} GameStateOverlay; // size = 0x30
+
typedef struct GameState {
/* 0x00 */ struct GraphicsContext* gfxCtx;
/* 0x04 */ GameStateFunc main;
@@ -64,6 +92,12 @@ extern f32 game_GameFrame_2F;
extern f32 game_GameFrame__1F;
+// m_game_dlftbls
+
+extern GameStateOverlay game_dlftbls[GAMESTATE_ID_MAX];
+extern GameStateId game_dlftbls_num;
+
+
#define CONTROLLER1(gameState) (&(gameState)->input[0])
#define CONTROLLER2(gameState) (&(gameState)->input[1])
#define CONTROLLER3(gameState) (&(gameState)->input[2])
diff --git a/include/tables/dmatables/dmadata_table_jp.h b/include/tables/dmatables/dmadata_table_jp.h
index d52578b..bfaa5e4 100644
--- a/include/tables/dmatables/dmadata_table_jp.h
+++ b/include/tables/dmatables/dmadata_table_jp.h
@@ -12,26 +12,26 @@ DEFINE_DMA_ENTRY(segment_027130, "segment_027130")
DEFINE_DMA_ENTRY(segment_0E4D10, "segment_0E4D10")
DEFINE_DMA_ENTRY(segment_13D9A0, "segment_13D9A0")
DEFINE_DMA_ENTRY(code, "code")
-DEFINE_DMA_ENTRY(ovl__0073F4D0, "ovl__0073F4D0")
-DEFINE_DMA_ENTRY(ovl__0073F4D0_reloc, "ovl__0073F4D0_reloc")
-DEFINE_DMA_ENTRY(ovl__00741EA0, "ovl__00741EA0")
-DEFINE_DMA_ENTRY(ovl__00741EA0_reloc, "ovl__00741EA0_reloc")
-DEFINE_DMA_ENTRY(ovl__00741FB0, "ovl__00741FB0")
-DEFINE_DMA_ENTRY(ovl__00741FB0_reloc, "ovl__00741FB0_reloc")
-DEFINE_DMA_ENTRY(ovl__00743B70, "ovl__00743B70")
-DEFINE_DMA_ENTRY(ovl__00743B70_reloc, "ovl__00743B70_reloc")
+DEFINE_DMA_ENTRY(ovl_select, "ovl_select")
+DEFINE_DMA_ENTRY(ovl_select_reloc, "ovl_select_reloc")
+DEFINE_DMA_ENTRY(ovl_first_game, "ovl_first_game")
+DEFINE_DMA_ENTRY(ovl_first_game_reloc, "ovl_first_game_reloc")
+DEFINE_DMA_ENTRY(ovl_play, "ovl_play")
+DEFINE_DMA_ENTRY(ovl_play_reloc, "ovl_play_reloc")
+DEFINE_DMA_ENTRY(ovl_second_game, "ovl_second_game")
+DEFINE_DMA_ENTRY(ovl_second_game_reloc, "ovl_second_game_reloc")
DEFINE_DMA_ENTRY(ovl__00743CD0, "ovl__00743CD0")
DEFINE_DMA_ENTRY(ovl__00743CD0_reloc, "ovl__00743CD0_reloc")
-DEFINE_DMA_ENTRY(ovl__00744020, "ovl__00744020")
-DEFINE_DMA_ENTRY(ovl__00744020_reloc, "ovl__00744020_reloc")
-DEFINE_DMA_ENTRY(ovl__00747AA0, "ovl__00747AA0")
-DEFINE_DMA_ENTRY(ovl__00747AA0_reloc, "ovl__00747AA0_reloc")
-DEFINE_DMA_ENTRY(ovl__007486E0, "ovl__007486E0")
-DEFINE_DMA_ENTRY(ovl__007486E0_reloc, "ovl__007486E0_reloc")
-DEFINE_DMA_ENTRY(ovl__007492E0, "ovl__007492E0")
-DEFINE_DMA_ENTRY(ovl__007492E0_reloc, "ovl__007492E0_reloc")
-DEFINE_DMA_ENTRY(ovl__007745B0, "ovl__007745B0")
-DEFINE_DMA_ENTRY(ovl__007745B0_reloc, "ovl__007745B0_reloc")
+DEFINE_DMA_ENTRY(ovl_trademark, "ovl_trademark")
+DEFINE_DMA_ENTRY(ovl_trademark_reloc, "ovl_trademark_reloc")
+DEFINE_DMA_ENTRY(ovl_player_select, "ovl_player_select")
+DEFINE_DMA_ENTRY(ovl_player_select_reloc, "ovl_player_select_reloc")
+DEFINE_DMA_ENTRY(ovl_save_menu, "ovl_save_menu")
+DEFINE_DMA_ENTRY(ovl_save_menu_reloc, "ovl_save_menu_reloc")
+DEFINE_DMA_ENTRY(ovl_famicom_emu, "ovl_famicom_emu")
+DEFINE_DMA_ENTRY(ovl_famicom_emu_reloc, "ovl_famicom_emu_reloc")
+DEFINE_DMA_ENTRY(ovl_prenmi, "ovl_prenmi")
+DEFINE_DMA_ENTRY(ovl_prenmi_reloc, "ovl_prenmi_reloc")
DEFINE_DMA_ENTRY(ovl_submenu, "ovl_submenu")
DEFINE_DMA_ENTRY(ovl_submenu_reloc, "ovl_submenu_reloc")
DEFINE_DMA_ENTRY(ovl__00777AE0, "ovl__00777AE0")
diff --git a/include/tables/gamestate_table.h b/include/tables/gamestate_table.h
new file mode 100644
index 0000000..1358bae
--- /dev/null
+++ b/include/tables/gamestate_table.h
@@ -0,0 +1,10 @@
+/* 0x00 */ DEFINE_GAMESTATE(FirstGame, GAMESTATE_FIRST_GAME, first_game)
+/* 0x01 */ DEFINE_GAMESTATE(MapSelect, GAMESTATE_MAP_SELECT, select)
+/* 0x02 */ DEFINE_GAMESTATE(Play, GAMESTATE_PLAY, play)
+/* 0x03 */ DEFINE_GAMESTATE(SecondGame, GAMESTATE_SECOND_GAME, second_game)
+/* 0x04 */ DEFINE_GAMESTATE(_00743CD0, GAMESTATE_00743CD0, _00743CD0)
+/* 0x05 */ DEFINE_GAMESTATE(Trademark, GAMESTATE_TRADEMARK, trademark)
+/* 0x06 */ DEFINE_GAMESTATE(PlayerSelect, GAMESTATE_PLAYER_SELECT, player_select)
+/* 0x07 */ DEFINE_GAMESTATE(SaveMenu, GAMESTATE_SAVE_MENU, save_menu)
+/* 0x08 */ DEFINE_GAMESTATE(FamicomEmu, GAMESTATE_FAMICOM_EMU, famicom_emu)
+/* 0x09 */ DEFINE_GAMESTATE(Prenmi, GAMESTATE_PRENMI, prenmi)
diff --git a/linker_scripts/jp/symbol_addrs_code.txt b/linker_scripts/jp/symbol_addrs_code.txt
index 74fd08e..6d9bee3 100644
--- a/linker_scripts/jp/symbol_addrs_code.txt
+++ b/linker_scripts/jp/symbol_addrs_code.txt
@@ -4642,17 +4642,10 @@ D_80106D78_jp = 0x80106D78; //
D_80106D8C_jp = 0x80106D8C; //
D_80106DA0_jp = 0x80106DA0; //
D_80106E10_jp = 0x80106E10; //
+
game_dlftbls = 0x80106E20; // type:GameStateOverlay size:0x1E0
-D_80106E50_jp = 0x80106E50; //
-D_80106E80_jp = 0x80106E80; //
-D_80106EB0_jp = 0x80106EB0; //
-D_80106EE0_jp = 0x80106EE0; //
-D_80106F10_jp = 0x80106F10; //
-D_80106F40_jp = 0x80106F40; //
-D_80106F70_jp = 0x80106F70; //
-D_80106FA0_jp = 0x80106FA0; //
-D_80106FD0_jp = 0x80106FD0; //
-D_80107000_jp = 0x80107000; //
+game_dlftbls_num = 0x80107000; // size:0x4
+
D_80107010_jp = 0x80107010; //
D_80107020_jp = 0x80107020; //
D_801071A4_jp = 0x801071A4; //
diff --git a/linker_scripts/jp/symbol_addrs_overlays.txt b/linker_scripts/jp/symbol_addrs_overlays.txt
index ec88207..6287ea3 100644
--- a/linker_scripts/jp/symbol_addrs_overlays.txt
+++ b/linker_scripts/jp/symbol_addrs_overlays.txt
@@ -51,8 +51,8 @@ func_80801658_jp = 0x80801658; // type:func
func_80801840_jp = 0x80801840; // type:func
func_80801928_jp = 0x80801928; // type:func
func_808019E4_jp = 0x808019E4; // type:func
-func_80801A28_jp = 0x80801A28; // type:func
-func_80801A34_jp = 0x80801A34; // type:func
+select_cleanup = 0x80801A28; // type:func
+select_init = 0x80801A34; // type:func
// .data
@@ -178,8 +178,8 @@ jtbl_80802550_jp = 0x80802550; // type:jtbl
// .text
func_808029D0_jp = 0x808029D0; // type:func
-func_80802A20_jp = 0x80802A20; // type:func
-func_80802A2C_jp = 0x80802A2C; // type:func
+first_game_cleanup = 0x80802A20; // type:func
+first_game_init = 0x80802A2C; // type:func
func_80802A60_jp = 0x80802A60; // type:func
func_80802AE0_jp = 0x80802AE0; // type:func
func_80802B40_jp = 0x80802B40; // type:func
@@ -197,7 +197,7 @@ func_80802E74_jp = 0x80802E74; // type:func
func_808030D0_jp = 0x808030D0; // type:func
func_80803124_jp = 0x80803124; // type:func
func_80803174_jp = 0x80803174; // type:func
-func_80803210_jp = 0x80803210; // type:func
+play_cleanup = 0x80803210; // type:func
play_init = 0x808032F8; // type:func
func_80803544_jp = 0x80803544; // type:func
func_8080367C_jp = 0x8080367C; // type:func
@@ -241,13 +241,13 @@ B_80804562_jp = 0x80804562; // type:s16
// .text
func_80804790_jp = 0x80804790; // type:func
-func_80804860_jp = 0x80804860; // type:func
-func_8080486C_jp = 0x8080486C; // type:func
+second_game_cleanup = 0x80804860; // type:func
+second_game_init = 0x8080486C; // type:func
func_808048F0_jp = 0x808048F0; // type:func
func_80804930_jp = 0x80804930; // type:func
func_80804ADC_jp = 0x80804ADC; // type:func
-func_80804B34_jp = 0x80804B34; // type:func
-func_80804B6C_jp = 0x80804B6C; // type:func
+_00743CD0_cleanup = 0x80804B34; // type:func
+_00743CD0_init = 0x80804B6C; // type:func
func_80804C40_jp = 0x80804C40; // type:func
func_80804CC0_jp = 0x80804CC0; // type:func
func_80804D18_jp = 0x80804D18; // type:func
@@ -261,8 +261,8 @@ func_808055F4_jp = 0x808055F4; // type:func
func_80805658_jp = 0x80805658; // type:func
func_808057D0_jp = 0x808057D0; // type:func
func_80805888_jp = 0x80805888; // type:func
-func_8080590C_jp = 0x8080590C; // type:func
-func_80805968_jp = 0x80805968; // type:func
+trademark_cleanup = 0x8080590C; // type:func
+trademark_init = 0x80805968; // type:func
// .data
@@ -326,8 +326,8 @@ func_80828C98_jp = 0x80828C98; // type:func
func_80828E48_jp = 0x80828E48; // type:func
func_80828F14_jp = 0x80828F14; // type:func
func_80828FC4_jp = 0x80828FC4; // type:func
-func_80829008_jp = 0x80829008; // type:func
-func_80829014_jp = 0x80829014; // type:func
+player_select_cleanup = 0x80829008; // type:func
+player_select_init = 0x80829014; // type:func
// .data
@@ -366,8 +366,8 @@ func_80829A80_jp = 0x80829A80; // type:func
func_80829B60_jp = 0x80829B60; // type:func
func_80829CC8_jp = 0x80829CC8; // type:func
func_80829D70_jp = 0x80829D70; // type:func
-func_80829DB4_jp = 0x80829DB4; // type:func
-func_80829DC0_jp = 0x80829DC0; // type:func
+save_menu_cleanup = 0x80829DB4; // type:func
+save_menu_init = 0x80829DC0; // type:func
// .data
@@ -466,7 +466,7 @@ func_8082D98C_jp = 0x8082D98C; // type:func
func_8082DA58_jp = 0x8082DA58; // type:func
func_8082DA64_jp = 0x8082DA64; // type:func
famicom_emu_init = 0x8082DF6C; // type:func
-func_8082E470_jp = 0x8082E470; // type:func
+famicom_emu_cleanup = 0x8082E470; // type:func
func_8082E4E0_jp = 0x8082E4E0; // type:func
func_8082E590_jp = 0x8082E590; // type:func
func_8082EA20_jp = 0x8082EA20; // type:func
@@ -801,8 +801,8 @@ B_80855800_jp = 0x80855800; //
func_8085B6B0_jp = 0x8085B6B0; // type:func
func_8085B718_jp = 0x8085B718; // type:func
func_8085B9D4_jp = 0x8085B9D4; // type:func
-func_8085BA1C_jp = 0x8085BA1C; // type:func
-func_8085BA28_jp = 0x8085BA28; // type:func
+prenmi_cleanup = 0x8085BA1C; // type:func
+prenmi_init = 0x8085BA28; // type:func
// .rodata
diff --git a/src/code/m_game_dlftbls.c b/src/code/m_game_dlftbls.c
new file mode 100644
index 0000000..21e59ec
--- /dev/null
+++ b/src/code/m_game_dlftbls.c
@@ -0,0 +1,48 @@
+#include "game.h"
+#include "segment_symbols.h"
+#include "overlays/gamestates/ovl_select/m_select.h"
+#include "overlays/gamestates/ovl_first_game/first_game.h"
+#include "overlays/gamestates/ovl_play/m_play.h"
+#include "overlays/gamestates/ovl_second_game/second_game.h"
+#include "overlays/gamestates/ovl__00743CD0/_00743CD0.h"
+#include "overlays/gamestates/ovl_trademark/m_trademark.h"
+#include "overlays/gamestates/ovl_player_select/player_select.h"
+#include "overlays/gamestates/ovl_save_menu/save_menu.h"
+#include "overlays/gamestates/ovl_famicom_emu/famicom_emu.h"
+#include "overlays/gamestates/ovl_prenmi/m_prenmi.h"
+
+// Linker symbol declarations (used in the table below)
+#define DEFINE_GAMESTATE(_typeName, _enumName, segmentName) DECLARE_SEGMENT(ovl_##segmentName);
+#define DEFINE_GAMESTATE_INTERNAL(_typeName, _enumName)
+
+#include "tables/gamestate_table.h"
+
+#undef DEFINE_GAMESTATE
+#undef DEFINE_GAMESTATE_INTERNAL
+
+// Gamestate Overlay Table definition
+#define DEFINE_GAMESTATE_INTERNAL(typeName, _enumName) \
+ { NULL, 0, 0, NULL, NULL, NULL, typeName##_Init, typeName##_Destroy, NULL, NULL, 0, sizeof(typeName##State) },
+
+#define DEFINE_GAMESTATE(typeName, _enumName, segmentName) \
+ { NULL, \
+ SEGMENT_ROM_START(ovl_##segmentName), \
+ SEGMENT_ROM_END(ovl_##segmentName), \
+ SEGMENT_VRAM_START(ovl_##segmentName), \
+ SEGMENT_VRAM_END(ovl_##segmentName), \
+ NULL, \
+ segmentName##_init, \
+ segmentName##_cleanup, \
+ NULL, \
+ NULL, \
+ 0, \
+ sizeof(typeName##State) },
+
+GameStateOverlay game_dlftbls[GAMESTATE_ID_MAX] = {
+#include "tables/gamestate_table.h"
+};
+
+#undef DEFINE_GAMESTATE
+#undef DEFINE_GAMESTATE_INTERNAL
+
+GameStateId game_dlftbls_num = GAMESTATE_ID_MAX;
diff --git a/src/overlays/gamestates/ovl__00743CD0/_00743CD0.h b/src/overlays/gamestates/ovl__00743CD0/_00743CD0.h
new file mode 100644
index 0000000..d91180b
--- /dev/null
+++ b/src/overlays/gamestates/ovl__00743CD0/_00743CD0.h
@@ -0,0 +1,16 @@
+#ifndef _00743CD0_H
+#define _00743CD0_H
+
+#include "ultra64.h"
+#include "game.h"
+#include "unk.h"
+
+typedef struct _00743CD0State {
+ /* 0x00 */ GameState state;
+ /* 0xA4 */ UNK_TYPE1 unk_00[0x1B20-0xA4];
+} _00743CD0State; // size = 0x1B20
+
+void _00743CD0_init(GameState *thisx);
+void _00743CD0_cleanup(GameState *thisx);
+
+#endif
diff --git a/src/overlays/gamestates/ovl_famicom_emu/famicom_emu.h b/src/overlays/gamestates/ovl_famicom_emu/famicom_emu.h
index a8c22d3..60d71a0 100644
--- a/src/overlays/gamestates/ovl_famicom_emu/famicom_emu.h
+++ b/src/overlays/gamestates/ovl_famicom_emu/famicom_emu.h
@@ -11,5 +11,6 @@ typedef struct FamicomEmuState {
} FamicomEmuState; // size = 0xE0
void famicom_emu_init(GameState *thisx);
+void famicom_emu_cleanup(GameState *thisx);
#endif
diff --git a/src/overlays/gamestates/ovl_first_game/first_game.h b/src/overlays/gamestates/ovl_first_game/first_game.h
new file mode 100644
index 0000000..35c7228
--- /dev/null
+++ b/src/overlays/gamestates/ovl_first_game/first_game.h
@@ -0,0 +1,16 @@
+#ifndef FIRST_GAME_H
+#define FIRST_GAME_H
+
+#include "ultra64.h"
+#include "game.h"
+#include "unk.h"
+
+typedef struct FirstGameState {
+ /* 0x00 */ GameState state;
+ /* 0xA4 */ UNK_TYPE1 unk_00[0x3C];
+} FirstGameState; // size = 0xE0
+
+void first_game_init(GameState *thisx);
+void first_game_cleanup(GameState *thisx);
+
+#endif
diff --git a/src/overlays/gamestates/ovl_play/m_play.h b/src/overlays/gamestates/ovl_play/m_play.h
index fb8872d..d832411 100644
--- a/src/overlays/gamestates/ovl_play/m_play.h
+++ b/src/overlays/gamestates/ovl_play/m_play.h
@@ -11,5 +11,6 @@ typedef struct PlayState {
} PlayState; // size = 0x2410
void play_init(GameState *thisx);
+void play_cleanup(GameState *thisx);
#endif
diff --git a/src/overlays/gamestates/ovl_player_select/player_select.h b/src/overlays/gamestates/ovl_player_select/player_select.h
new file mode 100644
index 0000000..0ae08b3
--- /dev/null
+++ b/src/overlays/gamestates/ovl_player_select/player_select.h
@@ -0,0 +1,16 @@
+#ifndef PLAYER_SELECT_H
+#define PLAYER_SELECT_H
+
+#include "ultra64.h"
+#include "game.h"
+#include "unk.h"
+
+typedef struct PlayerSelectState {
+ /* 0x00 */ GameState state;
+ /* 0xA4 */ UNK_TYPE1 unk_00[0x288-0xA4];
+} PlayerSelectState; // size = 0x288
+
+void player_select_init(GameState *thisx);
+void player_select_cleanup(GameState *thisx);
+
+#endif
diff --git a/src/overlays/gamestates/ovl_prenmi/m_prenmi.h b/src/overlays/gamestates/ovl_prenmi/m_prenmi.h
new file mode 100644
index 0000000..a55cfc4
--- /dev/null
+++ b/src/overlays/gamestates/ovl_prenmi/m_prenmi.h
@@ -0,0 +1,16 @@
+#ifndef PRENMI_H
+#define PRENMI_H
+
+#include "ultra64.h"
+#include "game.h"
+#include "unk.h"
+
+typedef struct PrenmiState {
+ /* 0x00 */ GameState state;
+ /* 0xA4 */ UNK_TYPE1 unk_00[0xE8-0xA4];
+} PrenmiState; // size = 0xE8
+
+void prenmi_init(GameState *thisx);
+void prenmi_cleanup(GameState *thisx);
+
+#endif
diff --git a/src/overlays/gamestates/ovl_save_menu/save_menu.h b/src/overlays/gamestates/ovl_save_menu/save_menu.h
new file mode 100644
index 0000000..57ef8f9
--- /dev/null
+++ b/src/overlays/gamestates/ovl_save_menu/save_menu.h
@@ -0,0 +1,16 @@
+#ifndef SAVE_MENU_H
+#define SAVE_MENU_H
+
+#include "ultra64.h"
+#include "game.h"
+#include "unk.h"
+
+typedef struct SaveMenuState {
+ /* 0x00 */ GameState state;
+ /* 0xA4 */ UNK_TYPE1 unk_00[0x230-0xA4];
+} SaveMenuState; // size = 0x230
+
+void save_menu_init(GameState *thisx);
+void save_menu_cleanup(GameState *thisx);
+
+#endif
diff --git a/src/overlays/gamestates/ovl_second_game/second_game.h b/src/overlays/gamestates/ovl_second_game/second_game.h
new file mode 100644
index 0000000..b3f7689
--- /dev/null
+++ b/src/overlays/gamestates/ovl_second_game/second_game.h
@@ -0,0 +1,16 @@
+#ifndef SECOND_GAME_H
+#define SECOND_GAME_H
+
+#include "ultra64.h"
+#include "game.h"
+#include "unk.h"
+
+typedef struct SecondGameState {
+ /* 0x00 */ GameState state;
+ /* 0xA4 */ UNK_TYPE1 unk_00[0xE0-0xA4];
+} SecondGameState; // size = 0xE0
+
+void second_game_init(GameState *thisx);
+void second_game_cleanup(GameState *thisx);
+
+#endif
diff --git a/src/overlays/gamestates/ovl_select/m_select.h b/src/overlays/gamestates/ovl_select/m_select.h
new file mode 100644
index 0000000..94dc534
--- /dev/null
+++ b/src/overlays/gamestates/ovl_select/m_select.h
@@ -0,0 +1,16 @@
+#ifndef SELECT_H
+#define SELECT_H
+
+#include "ultra64.h"
+#include "game.h"
+#include "unk.h"
+
+typedef struct MapSelectState {
+ /* 0x00 */ GameState state;
+ /* 0xA4 */ UNK_TYPE1 unk_00[0x240-0xA4];
+} MapSelectState; // size = 0x240
+
+void select_init(GameState *thisx);
+void select_cleanup(GameState *thisx);
+
+#endif
diff --git a/src/overlays/gamestates/ovl_trademark/m_trademark.h b/src/overlays/gamestates/ovl_trademark/m_trademark.h
new file mode 100644
index 0000000..38abf24
--- /dev/null
+++ b/src/overlays/gamestates/ovl_trademark/m_trademark.h
@@ -0,0 +1,16 @@
+#ifndef TRADEMARK_H
+#define TRADEMARK_H
+
+#include "ultra64.h"
+#include "game.h"
+#include "unk.h"
+
+typedef struct TrademarkState {
+ /* 0x00 */ GameState state;
+ /* 0xA4 */ UNK_TYPE1 unk_00[0x25A78-0xA4];
+} TrademarkState; // size = 0x25A78
+
+void trademark_init(GameState *thisx);
+void trademark_cleanup(GameState *thisx);
+
+#endif
diff --git a/yamls/jp/code.yaml b/yamls/jp/code.yaml
index 91d97ad..e5f3f68 100644
--- a/yamls/jp/code.yaml
+++ b/yamls/jp/code.yaml
@@ -132,6 +132,9 @@
- [0x7248D0, data, code/7248D0]
- [0x724930, .data, code/m_actor_dlftbls]
- [0x726260, data, code/m_actor_shadow]
+ - [0x7262C0, data, code/7262C0]
+ - [0x72AAC0, .data, code/m_game_dlftbls]
+ - [0x72ACB0, data, code/72ACB0]
- [0x72B7A0, data, code/m_lib]
- [0x72B7D0, data, code/72B7D0]
- [0x732C30, .data, code/game]
diff --git a/yamls/jp/overlays.yaml b/yamls/jp/overlays.yaml
index 6e81fe2..6fc9c6a 100644
--- a/yamls/jp/overlays.yaml
+++ b/yamls/jp/overlays.yaml
@@ -1,88 +1,88 @@
- - name: ovl__0073F4D0
+ - name: ovl_select
type: code
start: 0x73F4D0
vram: 0x80800000
compress: True
bss_size: 0x0
subsegments:
- - [0x73F4D0, asm, overlays/other_ovl/ovl__0073F4D0/ovl__0073F4D0]
- - [0x741030, data, overlays/other_ovl/ovl__0073F4D0/ovl__0073F4D0]
- - [0x741310, rodata, overlays/other_ovl/ovl__0073F4D0/ovl__0073F4D0]
- - name: ovl__0073F4D0_reloc
+ - [0x73F4D0, asm, overlays/gamestates/ovl_select/m_select]
+ - [0x741030, data, overlays/gamestates/ovl_select/m_select]
+ - [0x741310, rodata, overlays/gamestates/ovl_select/m_select]
+ - name: ovl_select_reloc
type: code
start: 0x741A40
vram: 0x80802570
- follows_vram: ovl__0073F4D0
+ follows_vram: ovl_select
compress: True
subsegments:
- - [0x741A40, data, overlays/other_ovl/ovl__0073F4D0/ovl__0073F4D0_reloc]
+ - [0x741A40, data, overlays/gamestates/ovl_select/ovl_select_reloc]
- - name: ovl__00741EA0
+ - name: ovl_first_game
type: code
start: 0x741EA0
vram: 0x808029D0
- follows_vram: ovl__0073F4D0_reloc
+ follows_vram: ovl_select_reloc
compress: True
bss_size: 0x0
subsegments:
- - [0x741EA0, asm, overlays/other_ovl/ovl__00741EA0/ovl__00741EA0]
- - name: ovl__00741EA0_reloc
+ - [0x741EA0, asm, overlays/gamestates/ovl_first_game/first_game]
+ - name: ovl_first_game_reloc
type: code
start: 0x741F80
vram: 0x80802AB0
- follows_vram: ovl__00741EA0
+ follows_vram: ovl_first_game
compress: True
subsegments:
- - [0x741F80, data, overlays/other_ovl/ovl__00741EA0/ovl__00741EA0_reloc]
+ - [0x741F80, data, overlays/gamestates/ovl_first_game/ovl_first_game_reloc]
- - name: ovl__00741FB0
+ - name: ovl_play
type: code
start: 0x741FB0
vram: 0x80802AE0
- follows_vram: ovl__00741EA0_reloc
+ follows_vram: ovl_first_game_reloc
compress: True
bss_size: 0xF0
subsegments:
- - [0x741FB0, asm, overlays/other_ovl/ovl__00741FB0/ovl__00741FB0]
- - [0x7437F0, data, overlays/other_ovl/ovl__00741FB0/ovl__00741FB0]
- - [0x743890, rodata, overlays/other_ovl/ovl__00741FB0/ovl__00741FB0]
- - { start: 0x743950, type: bss, vram: 0x80804480, name: overlays/other_ovl/ovl__00741FB0/ovl__00741FB0 }
- - name: ovl__00741FB0_reloc
+ - [0x741FB0, asm, overlays/gamestates/ovl_play/m_play]
+ - [0x7437F0, data, overlays/gamestates/ovl_play/m_play]
+ - [0x743890, rodata, overlays/gamestates/ovl_play/m_play]
+ - { start: 0x743950, type: bss, vram: 0x80804480, name: overlays/gamestates/ovl_play/m_play }
+ - name: ovl_play_reloc
type: code
start: 0x743950
vram: 0x80804570
- follows_vram: ovl__00741FB0
+ follows_vram: ovl_play
compress: True
subsegments:
- - [0x743950, data, overlays/other_ovl/ovl__00741FB0/ovl__00741FB0_reloc]
+ - [0x743950, data, overlays/gamestates/ovl_play/ovl_play_reloc]
- - name: ovl__00743B70
+ - name: ovl_second_game
type: code
start: 0x743B70
vram: 0x80804790
- follows_vram: ovl__00741FB0_reloc
+ follows_vram: ovl_play_reloc
compress: True
bss_size: 0x0
subsegments:
- - [0x743B70, asm, overlays/other_ovl/ovl__00743B70/ovl__00743B70]
- - name: ovl__00743B70_reloc
+ - [0x743B70, asm, overlays/gamestates/ovl_second_game/second_game]
+ - name: ovl_second_game_reloc
type: code
start: 0x743CA0
vram: 0x808048C0
- follows_vram: ovl__00743B70
+ follows_vram: ovl_second_game
compress: True
subsegments:
- - [0x743CA0, data, overlays/other_ovl/ovl__00743B70/ovl__00743B70_reloc]
+ - [0x743CA0, data, overlays/gamestates/ovl_second_game/ovl_second_game_reloc]
- name: ovl__00743CD0
type: code
start: 0x743CD0
vram: 0x808048F0
- follows_vram: ovl__00743B70_reloc
+ follows_vram: ovl_second_game_reloc
compress: True
bss_size: 0x0
subsegments:
- - [0x743CD0, asm, overlays/other_ovl/ovl__00743CD0/ovl__00743CD0]
+ - [0x743CD0, asm, overlays/gamestates/ovl__00743CD0/ovl__00743CD0]
- name: ovl__00743CD0_reloc
type: code
start: 0x743FE0
@@ -90,9 +90,9 @@
follows_vram: ovl__00743CD0
compress: True
subsegments:
- - [0x743FE0, data, overlays/other_ovl/ovl__00743CD0/ovl__00743CD0_reloc]
+ - [0x743FE0, data, overlays/gamestates/ovl__00743CD0/ovl__00743CD0_reloc]
- - name: ovl__00744020
+ - name: ovl_trademark
type: code
start: 0x744020
vram: 0x80804C40
@@ -100,104 +100,104 @@
compress: True
bss_size: 0x20170
subsegments:
- - [0x744020, asm, overlays/other_ovl/ovl__00744020/ovl__00744020]
- - [0x744F00, data, overlays/other_ovl/ovl__00744020/ovl__00744020]
- - [0x747910, rodata, overlays/other_ovl/ovl__00744020/ovl__00744020]
- - { start: 0x747940, type: bss, vram: 0x80808560, name: overlays/other_ovl/ovl__00744020/ovl__00744020 }
- - name: ovl__00744020_reloc
+ - [0x744020, asm, overlays/gamestates/ovl_trademark/m_trademark]
+ - [0x744F00, data, overlays/gamestates/ovl_trademark/m_trademark]
+ - [0x747910, rodata, overlays/gamestates/ovl_trademark/m_trademark]
+ - { start: 0x747940, type: bss, vram: 0x80808560, name: overlays/gamestates/ovl_trademark/m_trademark }
+ - name: ovl_trademark_reloc
type: code
start: 0x747940
vram: 0x808286D0
- follows_vram: ovl__00744020
+ follows_vram: ovl_trademark
compress: True
subsegments:
- - [0x747940, data, overlays/other_ovl/ovl__00744020/ovl__00744020_reloc]
+ - [0x747940, data, overlays/gamestates/ovl_trademark/ovl_trademark_reloc]
- - name: ovl__00747AA0
+ - name: ovl_player_select
type: code
start: 0x747AA0
vram: 0x80828830
- follows_vram: ovl__00744020_reloc
+ follows_vram: ovl_trademark_reloc
compress: True
bss_size: 0x0
subsegments:
- - [0x747AA0, asm, overlays/other_ovl/ovl__00747AA0/ovl__00747AA0]
- - [0x748570, data, overlays/other_ovl/ovl__00747AA0/ovl__00747AA0]
- - [0x7485E0, rodata, overlays/other_ovl/ovl__00747AA0/ovl__00747AA0]
- - name: ovl__00747AA0_reloc
+ - [0x747AA0, asm, overlays/gamestates/ovl_player_select/player_select]
+ - [0x748570, data, overlays/gamestates/ovl_player_select/player_select]
+ - [0x7485E0, rodata, overlays/gamestates/ovl_player_select/player_select]
+ - name: ovl_player_select_reloc
type: code
start: 0x7485F0
vram: 0x80829380
- follows_vram: ovl__00747AA0
+ follows_vram: ovl_player_select
compress: True
subsegments:
- - [0x7485F0, data, overlays/other_ovl/ovl__00747AA0/ovl__00747AA0_reloc]
+ - [0x7485F0, data, overlays/gamestates/ovl_player_select/ovl_player_select_reloc]
- - name: ovl__007486E0
+ - name: ovl_save_menu
type: code
start: 0x7486E0
vram: 0x80829470
- follows_vram: ovl__00747AA0_reloc
+ follows_vram: ovl_player_select_reloc
compress: True
bss_size: 0x0
subsegments:
- - [0x7486E0, asm, overlays/other_ovl/ovl__007486E0/ovl__007486E0]
- - [0x7490E0, data, overlays/other_ovl/ovl__007486E0/ovl__007486E0]
- - [0x7491E0, rodata, overlays/other_ovl/ovl__007486E0/ovl__007486E0]
- - name: ovl__007486E0_reloc
+ - [0x7486E0, asm, overlays/gamestates/ovl_save_menu/save_menu]
+ - [0x7490E0, data, overlays/gamestates/ovl_save_menu/save_menu]
+ - [0x7491E0, rodata, overlays/gamestates/ovl_save_menu/save_menu]
+ - name: ovl_save_menu_reloc
type: code
start: 0x749200
vram: 0x80829F90
- follows_vram: ovl__007486E0
+ follows_vram: ovl_save_menu
compress: True
subsegments:
- - [0x749200, data, overlays/other_ovl/ovl__007486E0/ovl__007486E0_reloc]
+ - [0x749200, data, overlays/gamestates/ovl_save_menu/ovl_save_menu_reloc]
- - name: ovl__007492E0
+ - name: ovl_famicom_emu
type: code
start: 0x7492E0
vram: 0x8082A070
- follows_vram: ovl__007486E0_reloc
+ follows_vram: ovl_save_menu_reloc
compress: True
bss_size: 0x6370
subsegments:
- - [0x7492E0, asm, overlays/other_ovl/ovl__007492E0/ovl__007492E0]
- - [0x755010, data, overlays/other_ovl/ovl__007492E0/ovl__007492E0]
- - [0x771500, rodata, overlays/other_ovl/ovl__007492E0/ovl__007492E0]
- - { start: 0x771900, type: bss, vram: 0x80852690, name: overlays/other_ovl/ovl__007492E0/ovl__007492E0 }
- - name: ovl__007492E0_reloc
+ - [0x7492E0, asm, overlays/gamestates/ovl_famicom_emu/famicom_emu]
+ - [0x755010, data, overlays/gamestates/ovl_famicom_emu/famicom_emu]
+ - [0x771500, rodata, overlays/gamestates/ovl_famicom_emu/famicom_emu]
+ - { start: 0x771900, type: bss, vram: 0x80852690, name: overlays/gamestates/ovl_famicom_emu/famicom_emu }
+ - name: ovl_famicom_emu_reloc
type: code
start: 0x771900
vram: 0x80858A00
- follows_vram: ovl__007492E0
+ follows_vram: ovl_famicom_emu
compress: True
subsegments:
- - [0x771900, data, overlays/other_ovl/ovl__007492E0/ovl__007492E0_reloc]
+ - [0x771900, data, overlays/gamestates/ovl_famicom_emu/ovl_famicom_emu_reloc]
- - name: ovl__007745B0
+ - name: ovl_prenmi
type: code
start: 0x7745B0
vram: 0x8085B6B0
- follows_vram: ovl__007492E0_reloc
+ follows_vram: ovl_famicom_emu_reloc
compress: True
bss_size: 0x0
subsegments:
- - [0x7745B0, asm, overlays/other_ovl/ovl__007745B0/ovl__007745B0]
- - [0x774970, rodata, overlays/other_ovl/ovl__007745B0/ovl__007745B0]
- - name: ovl__007745B0_reloc
+ - [0x7745B0, asm, overlays/gamestates/ovl_prenmi/m_prenmi]
+ - [0x774970, rodata, overlays/gamestates/ovl_prenmi/m_prenmi]
+ - name: ovl_prenmi_reloc
type: code
start: 0x774980
vram: 0x8085BA80
- follows_vram: ovl__007745B0
+ follows_vram: ovl_prenmi
compress: True
subsegments:
- - [0x774980, data, overlays/other_ovl/ovl__007745B0/ovl__007745B0_reloc]
+ - [0x774980, data, overlays/gamestates/ovl_prenmi/ovl_prenmi_reloc]
- name: ovl_submenu
type: code
start: 0x7749C0
vram: 0x8085BAC0
- follows_vram: ovl__007745B0_reloc
+ follows_vram: ovl_prenmi_reloc
compress: True
bss_size: 0x10730
subsegments: