From b4200519b168b970b3afdccf357d1ef42001b52a Mon Sep 17 00:00:00 2001 From: robojumper Date: Sun, 3 Aug 2025 12:35:45 +0200 Subject: [PATCH] d_lyt_pause_back OK --- config/SOUE01/splits.txt | 3 +- config/SOUE01/symbols.txt | 157 +++++++++++++++++------------- configure.py | 2 +- include/d/d_stage_mgr.h | 10 +- include/d/lyt/d_lyt_pause.h | 31 ++++++ include/d/lyt/d_lyt_pause_back.h | 41 ++++++++ src/d/lyt/d_lyt_pause_back.cpp | 159 +++++++++++++++++++++++++++++++ 7 files changed, 332 insertions(+), 71 deletions(-) create mode 100644 include/d/lyt/d_lyt_pause.h create mode 100644 include/d/lyt/d_lyt_pause_back.h create mode 100644 src/d/lyt/d_lyt_pause_back.cpp 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); + } +}