summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-08-03 12:35:45 +0200
committerrobojumper <robojumper@gmail.com>2025-09-13 10:12:38 +0200
commitb4200519b168b970b3afdccf357d1ef42001b52a (patch)
treea8c6420bd02d662d4c69402779d91a810fa07965
parente97f2d6a4ad0c75a3f1c5eced7656b89b81633ae (diff)
d_lyt_pause_back OK
-rw-r--r--config/SOUE01/splits.txt3
-rw-r--r--config/SOUE01/symbols.txt157
-rw-r--r--configure.py2
-rw-r--r--include/d/d_stage_mgr.h10
-rw-r--r--include/d/lyt/d_lyt_pause.h31
-rw-r--r--include/d/lyt/d_lyt_pause_back.h41
-rw-r--r--src/d/lyt/d_lyt_pause_back.cpp159
7 files changed, 332 insertions, 71 deletions
diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt
index 4766f669..62f9579b 100644
--- a/config/SOUE01/splits.txt
+++ b/config/SOUE01/splits.txt
@@ -1002,7 +1002,7 @@ d/lyt/d_lyt_deposit_stock.cpp:
d/lyt/d_lyt_deposit_box.cpp:
.text start:0x801578B0 end:0x80158288 align:16
- .rodata start:0x804E8218 end:0x804E8258
+ .rodata start:0x804E8218 end:0x804E8248
.data start:0x80524BC8 end:0x80524CD0
.sdata start:0x80572990 end:0x80572998
.sdata2 start:0x8057A060 end:0x8057A078
@@ -1019,6 +1019,7 @@ d/lyt/d_lyt_boss_gauge.cpp:
d/lyt/d_lyt_pause_back.cpp:
.text start:0x80158E80 end:0x80159E78 align:16
.ctors start:0x804DB794 end:0x804DB798
+ .rodata start:0x804E8248 end:0x804E8258
.data start:0x80524ED0 end:0x80525138
.sdata2 start:0x8057A090 end:0x8057A098
.bss start:0x805B1570 end:0x805B1670
diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt
index 46e0dadb..125ddcb9 100644
--- a/config/SOUE01/symbols.txt
+++ b/config/SOUE01/symbols.txt
@@ -8733,53 +8733,53 @@ fn_80158940__15dLytBossGauge_cFv = .text:0x80158940; // type:function size:0x108
__sinit_\d_lyt_boss_gauge_cpp = .text:0x80158A50; // type:function size:0x338 scope:local
__dt__30sFStateID_c<15dLytBossGauge_c>Fv = .text:0x80158D90; // type:function size:0x58
isSameName__30sFStateID_c<15dLytBossGauge_c>CFPCc = .text:0x80158DF0; // type:function size:0x88
-LytPauseBack__ctor = .text:0x80158E80; // type:function size:0xC0
-fn_80158F40 = .text:0x80158F40; // type:function size:0xA4
-fn_80158FF0 = .text:0x80158FF0; // type:function size:0xA0
-fn_80159090 = .text:0x80159090; // type:function size:0x6C
-fn_80159100 = .text:0x80159100; // type:function size:0x58
-fn_80159160 = .text:0x80159160; // type:function size:0xC0
-fn_80159220 = .text:0x80159220; // type:function size:0x10
-fn_80159230 = .text:0x80159230; // type:function size:0x5C
-fn_80159290 = .text:0x80159290; // type:function size:0x54
-fn_801592F0 = .text:0x801592F0; // type:function size:0x10
-fn_80159300 = .text:0x80159300; // type:function size:0x34
-fn_80159340 = .text:0x80159340; // type:function size:0xC
-fn_80159350 = .text:0x80159350; // type:function size:0xC
-fn_80159360 = .text:0x80159360; // type:function size:0x48
-fn_801593B0 = .text:0x801593B0; // type:function size:0x30
-fn_801593E0 = .text:0x801593E0; // type:function size:0x4
-fn_801593F0 = .text:0x801593F0; // type:function size:0xAC
-fn_801594A0 = .text:0x801594A0; // type:function size:0x80
-fn_80159520 = .text:0x80159520; // type:function size:0x4
-fn_80159530 = .text:0x80159530; // type:function size:0xC
-fn_80159540 = .text:0x80159540; // type:function size:0x34
-fn_80159580 = .text:0x80159580; // type:function size:0x4
-fn_80159590 = .text:0x80159590; // type:function size:0x44
-fn_801595E0 = .text:0x801595E0; // type:function size:0xA8
-fn_80159690 = .text:0x80159690; // type:function size:0x4
-fn_801596A0 = .text:0x801596A0; // type:function size:0x50
-fn_801596F0 = .text:0x801596F0; // type:function size:0x10
-fn_80159700 = .text:0x80159700; // type:function size:0x98
-fn_801597A0 = .text:0x801597A0; // type:function size:0xD8
-fn_80159880 = .text:0x80159880; // type:function size:0x60
-fn_801598E0 = .text:0x801598E0; // type:function size:0xC
-fn_801598F0 = .text:0x801598F0; // type:function size:0x1C
-fn_80159910 = .text:0x80159910; // type:function size:0x1C
-fn_80159930 = .text:0x80159930; // type:function size:0x1C
-fn_80159950 = .text:0x80159950; // type:function size:0x10
-fn_80159960 = .text:0x80159960; // type:function size:0x10
-fn_80159970 = .text:0x80159970; // type:function size:0x10
-fn_80159980 = .text:0x80159980; // type:function size:0x10
-fn_80159990 = .text:0x80159990; // type:function size:0x10
-fn_801599A0 = .text:0x801599A0; // type:function size:0x10
-fn_801599B0 = .text:0x801599B0; // type:function size:0x10
-fn_801599C0 = .text:0x801599C0; // type:function size:0x30
-fn_801599F0 = .text:0x801599F0; // type:function size:0x30
-fn_80159A20 = .text:0x80159A20; // type:function size:0x30
-LytPauseBack__initStates = .text:0x80159A50; // type:function size:0x338
-LytPauseBack__dtor = .text:0x80159D90; // type:function size:0x58
-fn_80159DF0 = .text:0x80159DF0; // type:function size:0x88
+__ct__15dLytPauseBack_cFv = .text:0x80158E80; // type:function size:0xC0
+__dt__54sFStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c>Fv = .text:0x80158F40; // type:function size:0xA4 scope:weak
+__dt__84sStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80158FF0; // type:function size:0xA0 scope:weak
+__dt__31sFStateFct_c<15dLytPauseBack_c>Fv = .text:0x80159090; // type:function size:0x6C scope:weak
+__dt__28sFState_c<15dLytPauseBack_c>Fv = .text:0x80159100; // type:function size:0x58 scope:weak
+build__15dLytPauseBack_cFv = .text:0x80159160; // type:function size:0xC0
+changeState__84sStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x80159220; // type:function size:0x10 scope:weak
+remove__15dLytPauseBack_cFv = .text:0x80159230; // type:function size:0x5C
+execute__15dLytPauseBack_cFv = .text:0x80159290; // type:function size:0x54
+executeState__84sStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801592F0; // type:function size:0x10 scope:weak
+draw__15dLytPauseBack_cFv = .text:0x80159300; // type:function size:0x34
+requestIn__15dLytPauseBack_cFv = .text:0x80159340; // type:function size:0xC
+requestOut__15dLytPauseBack_cFv = .text:0x80159350; // type:function size:0xC
+initializeState_None__15dLytPauseBack_cFv = .text:0x80159360; // type:function size:0x48
+executeState_None__15dLytPauseBack_cFv = .text:0x801593B0; // type:function size:0x30
+finalizeState_None__15dLytPauseBack_cFv = .text:0x801593E0; // type:function size:0x4
+initializeState_In__15dLytPauseBack_cFv = .text:0x801593F0; // type:function size:0xAC
+executeState_In__15dLytPauseBack_cFv = .text:0x801594A0; // type:function size:0x80
+finalizeState_In__15dLytPauseBack_cFv = .text:0x80159520; // type:function size:0x4
+initializeState_Wait__15dLytPauseBack_cFv = .text:0x80159530; // type:function size:0xC
+executeState_Wait__15dLytPauseBack_cFv = .text:0x80159540; // type:function size:0x34
+finalizeState_Wait__15dLytPauseBack_cFv = .text:0x80159580; // type:function size:0x4
+initializeState_Out__15dLytPauseBack_cFv = .text:0x80159590; // type:function size:0x44
+executeState_Out__15dLytPauseBack_cFv = .text:0x801595E0; // type:function size:0xA8
+finalizeState_Out__15dLytPauseBack_cFv = .text:0x80159690; // type:function size:0x4
+startAnim__15dLytPauseBack_cFi = .text:0x801596A0; // type:function size:0x50
+stopAnim__15dLytPauseBack_cFi = .text:0x801596F0; // type:function size:0x10
+loadBgTexture__15dLytPauseBack_cFv = .text:0x80159700; // type:function size:0x98
+__dt__15dLytPauseBack_cFv = .text:0x801597A0; // type:function size:0xD8 scope:weak
+build__31sFStateFct_c<15dLytPauseBack_c>FRC12sStateIDIf_c = .text:0x80159880; // type:function size:0x60 scope:weak
+dispose__31sFStateFct_c<15dLytPauseBack_c>FRP10sStateIf_c = .text:0x801598E0; // type:function size:0xC scope:weak
+initialize__28sFState_c<15dLytPauseBack_c>Fv = .text:0x801598F0; // type:function size:0x1C scope:weak
+execute__28sFState_c<15dLytPauseBack_c>Fv = .text:0x80159910; // type:function size:0x1C scope:weak
+finalize__28sFState_c<15dLytPauseBack_c>Fv = .text:0x80159930; // type:function size:0x1C scope:weak
+initializeState__84sStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80159950; // type:function size:0x10 scope:weak
+finalizeState__84sStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80159960; // type:function size:0x10 scope:weak
+refreshState__84sStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80159970; // type:function size:0x10 scope:weak
+getState__84sStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80159980; // type:function size:0x10 scope:weak
+getNewStateID__84sStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80159990; // type:function size:0x10 scope:weak
+getStateID__84sStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801599A0; // type:function size:0x10 scope:weak
+getOldStateID__84sStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801599B0; // type:function size:0x10 scope:weak
+finalizeState__30sFStateID_c<15dLytPauseBack_c>CFR15dLytPauseBack_c = .text:0x801599C0; // type:function size:0x30 scope:weak
+executeState__30sFStateID_c<15dLytPauseBack_c>CFR15dLytPauseBack_c = .text:0x801599F0; // type:function size:0x30 scope:weak
+initializeState__30sFStateID_c<15dLytPauseBack_c>CFR15dLytPauseBack_c = .text:0x80159A20; // type:function size:0x30 scope:weak
+__sinit_\d_lyt_pause_back_cpp = .text:0x80159A50; // type:function size:0x338 scope:local
+__dt__30sFStateID_c<15dLytPauseBack_c>Fv = .text:0x80159D90; // type:function size:0x58 scope:weak
+isSameName__30sFStateID_c<15dLytPauseBack_c>CFPCc = .text:0x80159DF0; // type:function size:0x88 scope:weak
__ct__17dLytPauseDisp00_cFv = .text:0x80159E80; // type:function size:0x160
__dt__56sFStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c>Fv = .text:0x80159FE0; // type:function size:0xA4
__dt__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8015A090; // type:function size:0xA0
@@ -28335,7 +28335,7 @@ brlanMap = .rodata:0x804E8138; // type:object size:0x18 scope:local data:4byte
lbl_804E8150 = .rodata:0x804E8150; // type:object size:0xC8 data:4byte
lbl_804E8218 = .rodata:0x804E8218; // type:object size:0x10 data:4byte
lbl_804E8228 = .rodata:0x804E8228; // type:object size:0x20 data:4byte
-lbl_804E8248 = .rodata:0x804E8248; // type:object size:0x10 data:4byte
+brlanMap = .rodata:0x804E8248; // type:object size:0x10 scope:local data:4byte
lbl_804E8258 = .rodata:0x804E8258; // type:object size:0x128
lbl_804E8380 = .rodata:0x804E8380; // type:object size:0x128
lbl_804E84A8 = .rodata:0x804E84A8; // type:object size:0x3F0 data:4byte
@@ -34306,18 +34306,35 @@ lbl_80524D60 = .data:0x80524D60; // type:object size:0xC
lbl_80524D6C = .data:0x80524D6C; // type:object size:0xC
lbl_80524D78 = .data:0x80524D78; // type:object size:0x120
__vt__30sFStateID_c<15dLytBossGauge_c> = .data:0x80524E98; // type:object size:0x34
-lbl_80524ED0 = .data:0x80524ED0; // type:object size:0x18
-lbl_80524EE8 = .data:0x80524EE8; // type:object size:0xC
-lbl_80524EF4 = .data:0x80524EF4; // type:object size:0x18
-lbl_80524F0C = .data:0x80524F0C; // type:object size:0x14
-lbl_80524F20 = .data:0x80524F20; // type:object size:0x10
-lbl_80524F30 = .data:0x80524F30; // type:object size:0x10
-lbl_80524F40 = .data:0x80524F40; // type:object size:0x10
-lbl_80524F50 = .data:0x80524F50; // type:object size:0x30
-lbl_80524F80 = .data:0x80524F80; // type:object size:0x30
-lbl_80524FB0 = .data:0x80524FB0; // type:object size:0x18
-lbl_80524FC8 = .data:0x80524FC8; // type:object size:0x13C
-lbl_80525104 = .data:0x80525104; // type:object size:0x34
+@20998 = .data:0x80524ED0; // type:object size:0x16 scope:local data:string
+...data.0 = .data:0x80524ED0; // type:label scope:local
+@20999 = .data:0x80524EE8; // type:object size:0xB scope:local data:string
+@21000 = .data:0x80524EF4; // type:object size:0x17 scope:local data:string
+@21540 = .data:0x80524F0C; // type:object size:0x13 scope:local data:string
+@21588 = .data:0x80524F20; // type:object size:0xD scope:local data:string
+@21589 = .data:0x80524F30; // type:object size:0xD scope:local data:string
+__vt__15dLytPauseBack_c = .data:0x80524F40; // type:object size:0xC scope:weak
+__vt__54sFStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c> = .data:0x80524F50; // type:object size:0x30 scope:weak
+__vt__84sStateMgr_c<15dLytPauseBack_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x80524F80; // type:object size:0x30 scope:weak
+__vt__31sFStateFct_c<15dLytPauseBack_c> = .data:0x80524FB0; // type:object size:0x14 scope:weak
+__vt__28sFState_c<15dLytPauseBack_c> = .data:0x80524FC8; // type:object size:0x18 scope:weak
+@21697 = .data:0x80524FF8; // type:object size:0xC scope:local
+@21698 = .data:0x80525004; // type:object size:0xC scope:local
+@21699 = .data:0x80525010; // type:object size:0xC scope:local
+@21700 = .data:0x8052501C; // type:object size:0xC scope:local
+@21701 = .data:0x80525028; // type:object size:0xC scope:local
+@21702 = .data:0x80525034; // type:object size:0xC scope:local
+@21703 = .data:0x80525040; // type:object size:0xC scope:local
+@21704 = .data:0x8052504C; // type:object size:0xC scope:local
+@21705 = .data:0x80525058; // type:object size:0xC scope:local
+@21706 = .data:0x80525064; // type:object size:0xC scope:local
+@21707 = .data:0x80525070; // type:object size:0xC scope:local
+@21708 = .data:0x8052507C; // type:object size:0xC scope:local
+@21710 = .data:0x80525088; // type:object size:0x1E scope:local data:string
+@21711 = .data:0x805250A8; // type:object size:0x1C scope:local data:string
+@21712 = .data:0x805250C4; // type:object size:0x1E scope:local data:string
+@21713 = .data:0x805250E4; // type:object size:0x1D scope:local data:string
+__vt__30sFStateID_c<15dLytPauseBack_c> = .data:0x80525104; // type:object size:0x34 scope:weak
lbl_80525138 = .data:0x80525138; // type:object size:0x14
lbl_8052514C = .data:0x8052514C; // type:object size:0xC
lbl_80525158 = .data:0x80525158; // type:object size:0x14 data:string
@@ -41900,7 +41917,7 @@ sInstance__12dTgMassObj_c = .sbss:0x80575930; // type:object size:0x4 data:4byte
lbl_80575934 = .sbss:0x80575934; // type:object size:0x4 data:4byte
lbl_80575938 = .sbss:0x80575938; // type:object size:0x4 align:4 data:float
lbl_8057593C = .sbss:0x8057593C; // type:object size:0x4 align:4 data:float
-LYT_PAUSE_DISP = .sbss:0x80575940; // type:object size:0x8 data:4byte
+sInstance__14dLytPauseMgr_c = .sbss:0x80575940; // type:object size:0x8 data:4byte
sInstance__17dLytGameOverMgr_c = .sbss:0x80575948; // type:object size:0x8 data:4byte
sInstance__13dLytSaveMgr_c = .sbss:0x80575950; // type:object size:0x8 data:4byte
lbl_80575958 = .sbss:0x80575958; // type:object size:0x1 data:byte
@@ -45087,8 +45104,8 @@ lbl_8057A07C = .sdata2:0x8057A07C; // type:object size:0x4 align:4 data:float
lbl_8057A080 = .sdata2:0x8057A080; // type:object size:0x4 align:4 data:float
lbl_8057A084 = .sdata2:0x8057A084; // type:object size:0x4 align:4 data:float
lbl_8057A088 = .sdata2:0x8057A088; // type:object size:0x8 align:8 data:double
-lbl_8057A090 = .sdata2:0x8057A090; // type:object size:0x4 align:4 data:float
-lbl_8057A094 = .sdata2:0x8057A094; // type:object size:0x4 align:4 data:float
+@21516 = .sdata2:0x8057A090; // type:object size:0x4 scope:local align:4 data:float
+@21517 = .sdata2:0x8057A094; // type:object size:0x4 scope:local align:4 data:float
lbl_8057A098 = .sdata2:0x8057A098; // type:object size:0x4 align:4 data:float
lbl_8057A09C = .sdata2:0x8057A09C; // type:object size:0x4 align:4 data:float
lbl_8057A0A0 = .sdata2:0x8057A0A0; // type:object size:0x4 align:4 data:float
@@ -51374,11 +51391,15 @@ LytBossGauge__STATE_NONE = .bss:0x805B1480; // type:object size:0x40 data:4byte
LytBossGauge__STATE_IN = .bss:0x805B14C0; // type:object size:0x40 data:4byte
LytBossGauge__STATE_MOVE = .bss:0x805B1500; // type:object size:0x40 data:4byte
LytBossGauge__STATE_OUT = .bss:0x805B1540; // type:object size:0x30 data:4byte
-lbl_805B1570 = .bss:0x805B1570; // type:object size:0x10
-LytPauseBack__STATE_NONE = .bss:0x805B1580; // type:object size:0x40 data:4byte
-LytPauseBack__STATE_IN = .bss:0x805B15C0; // type:object size:0x40 data:4byte
-LytPauseBack__STATE_WAIT = .bss:0x805B1600; // type:object size:0x40 data:4byte
-LytPauseBack__STATE_OUT = .bss:0x805B1640; // type:object size:0x30 data:4byte
+@20985 = .bss:0x805B1570; // type:object size:0xC scope:local
+...bss.0 = .bss:0x805B1570; // type:label scope:local
+StateID_None__15dLytPauseBack_c = .bss:0x805B1580; // type:object size:0x30 data:4byte
+@20989 = .bss:0x805B15B0; // type:object size:0xC scope:local
+StateID_In__15dLytPauseBack_c = .bss:0x805B15C0; // type:object size:0x30 data:4byte
+@20993 = .bss:0x805B15F0; // type:object size:0xC scope:local
+StateID_Wait__15dLytPauseBack_c = .bss:0x805B1600; // type:object size:0x30 data:4byte
+@20997 = .bss:0x805B1630; // type:object size:0xC scope:local
+StateID_Out__15dLytPauseBack_c = .bss:0x805B1640; // type:object size:0x30 data:4byte
lbl_805B1670 = .bss:0x805B1670; // type:object size:0x10
LytPauseDisp00__STATE_NONE = .bss:0x805B1680; // type:object size:0x40 data:4byte
LytPauseDisp00__STATE_IN = .bss:0x805B16C0; // type:object size:0x40 data:4byte
diff --git a/configure.py b/configure.py
index 35fc5caf..fb558d74 100644
--- a/configure.py
+++ b/configure.py
@@ -545,7 +545,7 @@ config.libs = [
Object(NonMatching, "d/lyt/d_lyt_deposit_stock.cpp"),
Object(NonMatching, "d/lyt/d_lyt_deposit_box.cpp"),
Object(NonMatching, "d/lyt/d_lyt_boss_gauge.cpp"),
- Object(NonMatching, "d/lyt/d_lyt_pause_back.cpp"),
+ Object(Matching, "d/lyt/d_lyt_pause_back.cpp"),
Object(NonMatching, "d/lyt/d_lyt_pause_disp_00.cpp"),
Object(NonMatching, "d/lyt/d_lyt_pause_disp_01.cpp"),
Object(NonMatching, "d/lyt/d_lyt_pause_info.cpp"),
diff --git a/include/d/d_stage_mgr.h b/include/d/d_stage_mgr.h
index 49e97c78..57aad744 100644
--- a/include/d/d_stage_mgr.h
+++ b/include/d/d_stage_mgr.h
@@ -7,6 +7,7 @@
#include "d/d_bzs_types.h"
#include "d/d_dylink.h"
#include "d/d_fader.h"
+#include "egg/gfx/eggCpuTexture.h"
#include "egg/gfx/eggScreen.h"
#include "m/m_allocator.h"
#include "m/m_dvd.h"
@@ -78,6 +79,10 @@ public:
return sInstance;
}
+ EGG::CpuTexture *getField_0x8898() {
+ return field_0x8898;
+ }
+
bool checkFlag0x88A0(u32 flag) const {
return (field_0x88A0 & flag) != 0;
}
@@ -190,7 +195,10 @@ private:
/* 0x8694 */ dTimeAreaMgr_c mTimeAreaMgr;
// ...
- u8 ___[446];
+ u8 ___[438];
+ /* 0x8898 */ EGG::CpuTexture *field_0x8898;
+
+ u8 _0x889C[4];
/* 0x88A0 */ u32 field_0x88A0;
/* 0x88A4 */ SizedString<16> mDemoName;
diff --git a/include/d/lyt/d_lyt_pause.h b/include/d/lyt/d_lyt_pause.h
new file mode 100644
index 00000000..ca02dcc1
--- /dev/null
+++ b/include/d/lyt/d_lyt_pause.h
@@ -0,0 +1,31 @@
+#ifndef D_LYT_PAUSE_H
+#define D_LYT_PAUSE_H
+
+#include "d/lyt/d2d.h"
+#include "egg/gfx/eggCpuTexture.h"
+
+class dLytPauseMgr_c {
+public:
+ static dLytPauseMgr_c *GetInstance() {
+ return sInstance;
+ }
+
+ d2d::ResAccIf_c *getResAcc1() {
+ return &mResAcc1;
+ }
+
+ EGG::CpuTexture *getBgTexture() {
+ return mpBgTexture;
+ }
+
+private:
+ static dLytPauseMgr_c *sInstance;
+
+ /* 0x0000 */ u8 _0x0000[0x00C8 - 0x0000];
+ /* 0x00C8 */ d2d::ResAccIf_c mResAcc1;
+ /* 0x0438 */ u8 _0x0438[0x0814 - 0x0438];
+
+ /* 0x0814 */ EGG::CpuTexture *mpBgTexture;
+};
+
+#endif
diff --git a/include/d/lyt/d_lyt_pause_back.h b/include/d/lyt/d_lyt_pause_back.h
new file mode 100644
index 00000000..9085f6f0
--- /dev/null
+++ b/include/d/lyt/d_lyt_pause_back.h
@@ -0,0 +1,41 @@
+#ifndef D_LYT_PAUSE_BACK_H
+#define D_LYT_PAUSE_BACK_H
+
+#include "d/lyt/d2d.h"
+#include "s/s_State.hpp"
+
+class dLytPauseBack_c {
+public:
+ dLytPauseBack_c();
+ virtual ~dLytPauseBack_c() {}
+
+ bool build();
+ bool remove();
+ bool execute();
+ bool draw();
+
+ void loadBgTexture();
+ void requestIn();
+ void requestOut();
+
+private:
+ void startAnim(int idx);
+ void stopAnim(int idx);
+
+ STATE_FUNC_DECLARE(dLytPauseBack_c, None);
+ STATE_FUNC_DECLARE(dLytPauseBack_c, In);
+ STATE_FUNC_DECLARE(dLytPauseBack_c, Wait);
+ STATE_FUNC_DECLARE(dLytPauseBack_c, Out);
+
+ /* 0x004 */ UI_STATE_MGR_DECLARE(dLytPauseBack_c);
+ /* 0x040 */ d2d::LytBase_c mLyt;
+ /* 0x0D0 */ d2d::AnmGroup_c mAnm[2];
+
+ /* 0x150 */ s32 mOutStep;
+ /* 0x154 */ bool mInRequest;
+ /* 0x155 */ bool mOutRequest;
+ /* 0x156 */ bool field_0x156;
+ /* 0x157 */ bool mVisible;
+};
+
+#endif
diff --git a/src/d/lyt/d_lyt_pause_back.cpp b/src/d/lyt/d_lyt_pause_back.cpp
new file mode 100644
index 00000000..c2070a61
--- /dev/null
+++ b/src/d/lyt/d_lyt_pause_back.cpp
@@ -0,0 +1,159 @@
+#include "d/lyt/d_lyt_pause_back.h"
+
+#include "common.h"
+#include "d/d_stage_mgr.h"
+#include "d/lyt/d2d.h"
+#include "d/lyt/d_lyt_pause.h"
+#include "rvl/GX/GXTexture.h"
+
+STATE_DEFINE(dLytPauseBack_c, None);
+STATE_DEFINE(dLytPauseBack_c, In);
+STATE_DEFINE(dLytPauseBack_c, Wait);
+STATE_DEFINE(dLytPauseBack_c, Out);
+
+static const d2d::LytBrlanMapping brlanMap[] = {
+ { "pauseBace_00_in.brlan", "G_inOut_00"},
+ {"pauseBace_00_out.brlan", "G_inOut_00"},
+};
+
+#define PAUSE_BACK_ANIM_IN 0
+#define PAUSE_BACK_ANIM_OUT 1
+
+#define PAUSE_BACK_NUM_ANIMS 2
+
+dLytPauseBack_c::dLytPauseBack_c() : mStateMgr(*this) {}
+
+bool dLytPauseBack_c::build() {
+ d2d::ResAccIf_c *resAcc = dLytPauseMgr_c::GetInstance()->getResAcc1();
+ mLyt.setResAcc(resAcc);
+ mLyt.build("pauseBace_00.brlyt", nullptr);
+ mLyt.setPriority(0x86);
+
+ for (int i = 0; i < PAUSE_BACK_NUM_ANIMS; i++) {
+ mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
+ }
+
+ mStateMgr.changeState(StateID_None);
+ return true;
+}
+
+bool dLytPauseBack_c::remove() {
+ mLyt.unbindAnims();
+ for (int i = 0; i < PAUSE_BACK_NUM_ANIMS; i++) {
+ mAnm[i].remove();
+ }
+ return true;
+}
+
+bool dLytPauseBack_c::execute() {
+ mStateMgr.executeState();
+ mLyt.calc();
+ return true;
+}
+
+bool dLytPauseBack_c::draw() {
+ if (mVisible == true) {
+ mLyt.addToDrawList();
+ }
+ return true;
+}
+
+void dLytPauseBack_c::requestIn() {
+ mInRequest = true;
+}
+
+void dLytPauseBack_c::requestOut() {
+ mOutRequest = true;
+}
+
+void dLytPauseBack_c::initializeState_None() {
+ mLyt.unbindAnims();
+ field_0x156 = false;
+ mInRequest = false;
+ mOutRequest = false;
+ mVisible = false;
+ mOutStep = 0;
+}
+void dLytPauseBack_c::executeState_None() {
+ if (mInRequest == true) {
+ mInRequest = false;
+ mStateMgr.changeState(StateID_In);
+ }
+}
+void dLytPauseBack_c::finalizeState_None() {}
+
+void dLytPauseBack_c::initializeState_In() {
+ startAnim(PAUSE_BACK_ANIM_IN);
+ mVisible = true;
+ if (dStageMgr_c::GetInstance()->getField_0x8898() != nullptr) {
+ GXTexObj texObj;
+ dStageMgr_c::GetInstance()->getField_0x8898()->getTexObj(&texObj);
+ mLyt.findPicture("P_capture_00")->GetMaterial()->GetTexMapAry()->ReplaceImage(texObj);
+ mLyt.findPicture("P_capture_01")->GetMaterial()->GetTexMapAry()->ReplaceImage(texObj);
+ }
+}
+void dLytPauseBack_c::executeState_In() {
+ d2d::AnmGroup_c &anm = mAnm[PAUSE_BACK_ANIM_IN];
+ if (anm.isEndReached() == true) {
+ mStateMgr.changeState(StateID_Wait);
+ } else {
+ anm.play();
+ }
+}
+void dLytPauseBack_c::finalizeState_In() {}
+
+void dLytPauseBack_c::initializeState_Wait() {
+ field_0x156 = true;
+}
+void dLytPauseBack_c::executeState_Wait() {
+ field_0x156 = false;
+ if (mOutRequest == true) {
+ mOutRequest = false;
+ mStateMgr.changeState(StateID_Out);
+ }
+}
+void dLytPauseBack_c::finalizeState_Wait() {}
+
+void dLytPauseBack_c::initializeState_Out() {
+ stopAnim(PAUSE_BACK_ANIM_IN);
+ startAnim(PAUSE_BACK_ANIM_OUT);
+ mOutStep = 0;
+}
+void dLytPauseBack_c::executeState_Out() {
+ d2d::AnmGroup_c &anm = mAnm[PAUSE_BACK_ANIM_OUT];
+ switch (mOutStep) {
+ case 0: {
+ if (anm.isEndReached() == true) {
+ mOutStep = 1;
+ field_0x156 = true;
+ }
+ break;
+ }
+ case 1: {
+ mStateMgr.changeState(StateID_None);
+ return;
+ }
+ }
+ anm.play();
+}
+void dLytPauseBack_c::finalizeState_Out() {}
+
+void dLytPauseBack_c::startAnim(int idx) {
+ d2d::AnmGroup_c &anm = mAnm[idx];
+ anm.bind(false);
+ anm.setFrame(0.0f);
+}
+
+void dLytPauseBack_c::stopAnim(int idx) {
+ d2d::AnmGroup_c &anm = mAnm[idx];
+ anm.unbind();
+}
+
+void dLytPauseBack_c::loadBgTexture() {
+ if (dLytPauseMgr_c::GetInstance()->getBgTexture() != nullptr) {
+ GXTexObj texObj;
+ dLytPauseMgr_c::GetInstance()->getBgTexture()->getTexObj(&texObj);
+ mLyt.findPicture("P_capture_00")->GetMaterial()->GetTexMapAry()->ReplaceImage(texObj);
+ mLyt.findPicture("P_capture_01")->GetMaterial()->GetTexMapAry()->ReplaceImage(texObj);
+ }
+}