diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index e040996f..6f06108d 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -1571,6 +1571,7 @@ d/lyt/d_lyt_save_mgr.cpp: .ctors start:0x804DB864 end:0x804DB868 .rodata start:0x804EE778 end:0x804EE790 .data start:0x80538160 end:0x80538498 + .sdata start:0x80573B80 end:0x80573B88 .sbss start:0x80575950 end:0x80575958 .bss start:0x805B5F00 end:0x805B6000 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 2f289e6b..c7c4dfc9 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -15022,54 +15022,53 @@ __dt__29sFStateID_c<14dLytGameOver_c>Fv = .text:0x80284DD0; // type:function siz __dt__32sFStateID_c<17dLytGameOverMgr_c>Fv = .text:0x80284E30; // type:function size:0x58 isSameName__32sFStateID_c<17dLytGameOverMgr_c>CFPCc = .text:0x80284E90; // type:function size:0x88 isSameName__29sFStateID_c<14dLytGameOver_c>CFPCc = .text:0x80284F20; // type:function size:0x88 -LytSaveMgr__ctor = .text:0x80284FB0; // type:function size:0x30 -LytSaveMgr__ctorCont = .text:0x80284FE0; // type:function size:0xB0 -fn_80285090 = .text:0x80285090; // type:function size:0x58 -fn_802850F0 = .text:0x802850F0; // type:function size:0x6C -fn_80285160 = .text:0x80285160; // type:function size:0xA0 -fn_80285200 = .text:0x80285200; // type:function size:0xA4 -fn_802852B0 = .text:0x802852B0; // type:function size:0x23C -LytSaveMgr__init = .text:0x802854F0; // type:function size:0x54 -fn_80285550 = .text:0x80285550; // type:function size:0x10 -fn_80285560 = .text:0x80285560; // type:function size:0x28 -LytSaveMgr__update = .text:0x80285590; // type:function size:0x30 -fn_802855C0 = .text:0x802855C0; // type:function size:0x10 -LytSaveMgr__draw = .text:0x802855D0; // type:function size:0x28 -fn_80285600 = .text:0x80285600; // type:function size:0x18 -fn_80285620 = .text:0x80285620; // type:function size:0x1C -fn_80285640 = .text:0x80285640; // type:function size:0x10 -fn_80285650__13dLytSaveMgr_cCFv = .text:0x80285650; // type:function size:0x4C -LytSaveMgr__stateInitEnter = .text:0x802856A0; // type:function size:0x14 -LytSaveMgr__stateInitUpdate = .text:0x802856C0; // type:function size:0x28 -LytSaveMgr__stateInitLeave = .text:0x802856F0; // type:function size:0x4 -LytSaveMgr__stateFadeOutEnter = .text:0x80285700; // type:function size:0x74 -LytSaveMgr__stateFadeOutUpdate = .text:0x80285780; // type:function size:0xC4 -LytSaveMgr__stateFadeOutLeave = .text:0x80285850; // type:function size:0x4 -LytSaveMgr__stateSelectEnter = .text:0x80285860; // type:function size:0x4C -LytSaveMgr__stateSelectUpdate = .text:0x802858B0; // type:function size:0xD18 -LytSaveMgr__stateSelectLeave = .text:0x802865D0; // type:function size:0x4 -fn_802865E0 = .text:0x802865E0; // type:function size:0x30 -fn_80286610 = .text:0x80286610; // type:function size:0x40 -fn_80286650 = .text:0x80286650; // type:function size:0x4 -fn_80286660 = .text:0x80286660; // type:function size:0x4 -fn_80286670 = .text:0x80286670; // type:function size:0x28 -fn_802866A0 = .text:0x802866A0; // type:function size:0x60 -fn_80286700 = .text:0x80286700; // type:function size:0xC -fn_80286710 = .text:0x80286710; // type:function size:0x1C -fn_80286730 = .text:0x80286730; // type:function size:0x1C -fn_80286750 = .text:0x80286750; // type:function size:0x1C -fn_80286770 = .text:0x80286770; // type:function size:0x10 -fn_80286780 = .text:0x80286780; // type:function size:0x10 -fn_80286790 = .text:0x80286790; // type:function size:0x10 -fn_802867A0 = .text:0x802867A0; // type:function size:0x10 -fn_802867B0 = .text:0x802867B0; // type:function size:0x10 -fn_802867C0 = .text:0x802867C0; // type:function size:0x10 -fn_802867D0 = .text:0x802867D0; // type:function size:0x30 -fn_80286800 = .text:0x80286800; // type:function size:0x30 -fn_80286830 = .text:0x80286830; // type:function size:0x30 -LytSaveMgr__initStates = .text:0x80286860; // type:function size:0x338 -LytSaveMgr__ActorState__dtor = .text:0x80286BA0; // type:function size:0x58 -fn_80286C00 = .text:0x80286C00; // type:function size:0x88 +dLytSaveMgr_c_classInit__Fv = .text:0x80284FB0; // type:function size:0x30 +__ct__13dLytSaveMgr_cFv = .text:0x80284FE0; // type:function size:0xB0 +__dt__26sFState_c<13dLytSaveMgr_c>Fv = .text:0x80285090; // type:function size:0x58 scope:weak +__dt__29sFStateFct_c<13dLytSaveMgr_c>Fv = .text:0x802850F0; // type:function size:0x6C scope:weak +__dt__82sStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80285160; // type:function size:0xA0 scope:weak +__dt__52sFStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c>Fv = .text:0x80285200; // type:function size:0xA4 scope:weak +__dt__13dLytSaveMgr_cFv = .text:0x802852B0; // type:function size:0x23C +create__13dLytSaveMgr_cFv = .text:0x802854F0; // type:function size:0x54 +changeState__82sStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x80285550; // type:function size:0x10 scope:weak +doDelete__13dLytSaveMgr_cFv = .text:0x80285560; // type:function size:0x28 +execute__13dLytSaveMgr_cFv = .text:0x80285590; // type:function size:0x30 +executeState__82sStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x802855C0; // type:function size:0x10 scope:weak +draw__13dLytSaveMgr_cFv = .text:0x802855D0; // type:function size:0x28 +setPrompt__13dLytSaveMgr_cFlb = .text:0x80285600; // type:function size:0x18 +setSaveobjPrompt__13dLytSaveMgr_cFlUcb = .text:0x80285620; // type:function size:0x1C +getStateID__82sStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80285640; // type:function size:0x10 scope:weak +isBusy__13dLytSaveMgr_cCFv = .text:0x80285650; // type:function size:0x4C +initializeState_Init__13dLytSaveMgr_cFv = .text:0x802856A0; // type:function size:0x14 +executeState_Init__13dLytSaveMgr_cFv = .text:0x802856C0; // type:function size:0x28 +finalizeState_Init__13dLytSaveMgr_cFv = .text:0x802856F0; // type:function size:0x4 +initializeState_FadeOut__13dLytSaveMgr_cFv = .text:0x80285700; // type:function size:0x74 +executeState_FadeOut__13dLytSaveMgr_cFv = .text:0x80285780; // type:function size:0xC4 +finalizeState_FadeOut__13dLytSaveMgr_cFv = .text:0x80285850; // type:function size:0x4 +initializeState_Select__13dLytSaveMgr_cFv = .text:0x80285860; // type:function size:0x4C +executeState_Select__13dLytSaveMgr_cFv = .text:0x802858B0; // type:function size:0xD18 +finalizeState_Select__13dLytSaveMgr_cFv = .text:0x802865D0; // type:function size:0x4 +initializeState_FadeIn__13dLytSaveMgr_cFv = .text:0x802865E0; // type:function size:0x30 +executeState_FadeIn__13dLytSaveMgr_cFv = .text:0x80286610; // type:function size:0x44 +finalizeState_FadeIn__13dLytSaveMgr_cFv = .text:0x80286660; // type:function size:0x4 +init__13dLytSaveMgr_cFv = .text:0x80286670; // type:function size:0x28 +build__29sFStateFct_c<13dLytSaveMgr_c>FRC12sStateIDIf_c = .text:0x802866A0; // type:function size:0x60 scope:weak +dispose__29sFStateFct_c<13dLytSaveMgr_c>FRP10sStateIf_c = .text:0x80286700; // type:function size:0xC scope:weak +initialize__26sFState_c<13dLytSaveMgr_c>Fv = .text:0x80286710; // type:function size:0x1C scope:weak +execute__26sFState_c<13dLytSaveMgr_c>Fv = .text:0x80286730; // type:function size:0x1C scope:weak +finalize__26sFState_c<13dLytSaveMgr_c>Fv = .text:0x80286750; // type:function size:0x1C scope:weak +initializeState__82sStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80286770; // type:function size:0x10 scope:weak +finalizeState__82sStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80286780; // type:function size:0x10 scope:weak +refreshState__82sStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80286790; // type:function size:0x10 scope:weak +getState__82sStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x802867A0; // type:function size:0x10 scope:weak +getNewStateID__82sStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x802867B0; // type:function size:0x10 scope:weak +getOldStateID__82sStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x802867C0; // type:function size:0x10 scope:weak +finalizeState__28sFStateID_c<13dLytSaveMgr_c>CFR13dLytSaveMgr_c = .text:0x802867D0; // type:function size:0x30 scope:weak +executeState__28sFStateID_c<13dLytSaveMgr_c>CFR13dLytSaveMgr_c = .text:0x80286800; // type:function size:0x30 scope:weak +initializeState__28sFStateID_c<13dLytSaveMgr_c>CFR13dLytSaveMgr_c = .text:0x80286830; // type:function size:0x30 scope:weak +__sinit_\d_lyt_save_mgr_cpp = .text:0x80286860; // type:function size:0x338 scope:local +__dt__28sFStateID_c<13dLytSaveMgr_c>Fv = .text:0x80286BA0; // type:function size:0x58 scope:weak +isSameName__28sFStateID_c<13dLytSaveMgr_c>CFPCc = .text:0x80286C00; // type:function size:0x88 scope:weak fn_80286C90 = .text:0x80286C90; // type:function size:0x28 fn_80286CC0 = .text:0x80286CC0; // type:function size:0x40 fn_80286D00 = .text:0x80286D00; // type:function size:0x58 @@ -28674,7 +28673,7 @@ lbl_804EE6C0 = .rodata:0x804EE6C0; // type:object size:0x40 data:4byte lbl_804EE700 = .rodata:0x804EE700; // type:object size:0x28 data:4byte lbl_804EE728 = .rodata:0x804EE728; // type:object size:0x28 lbl_804EE750 = .rodata:0x804EE750; // type:object size:0x28 -lbl_804EE778 = .rodata:0x804EE778; // type:object size:0x18 +@LOCAL@executeState_FadeOut__13dLytSaveMgr_cFv@sFadeOutModes@0 = .rodata:0x804EE778; // type:object size:0x18 scope:local lbl_804EE790 = .rodata:0x804EE790; // type:object size:0x48 lbl_804EE7D8 = .rodata:0x804EE7D8; // type:object size:0x18 data:4byte lbl_804EE7F0 = .rodata:0x804EE7F0; // type:object size:0x150 data:4byte @@ -36437,24 +36436,48 @@ __vt__27sFState_c<14dLytGameOver_c> = .data:0x80537D68; // type:object size:0x39 __vt__32sFStateID_c<17dLytGameOverMgr_c> = .data:0x805380F8; // type:object size:0x34 __vt__29sFStateID_c<14dLytGameOver_c> = .data:0x8053812C; // type:object size:0x34 g_profile_LYT_SAVE_MGR = .data:0x80538160; // type:object size:0xC -lbl_8053816C = .data:0x8053816C; // type:object size:0xC data:string -lbl_80538178 = .data:0x80538178; // type:object size:0xC data:string -lbl_80538184 = .data:0x80538184; // type:object size:0xC data:string -lbl_80538190 = .data:0x80538190; // type:object size:0xC data:string -lbl_8053819C = .data:0x8053819C; // type:object size:0xC data:string -lbl_805381A8 = .data:0x805381A8; // type:object size:0x10 -lbl_805381B8 = .data:0x805381B8; // type:object size:0x18 -lbl_805381D0 = .data:0x805381D0; // type:object size:0xC data:string -lbl_805381DC = .data:0x805381DC; // type:object size:0xC data:string -lbl_805381E8 = .data:0x805381E8; // type:object size:0xC data:string -lbl_805381F4 = .data:0x805381F4; // type:object size:0xC data:string -lbl_80538200 = .data:0x80538200; // type:object size:0x78 -vtable = .data:0x80538278; // type:object size:0x50 -lbl_805382C8 = .data:0x805382C8; // type:object size:0x30 -lbl_805382F8 = .data:0x805382F8; // type:object size:0x30 -lbl_80538328 = .data:0x80538328; // type:object size:0x18 -lbl_80538340 = .data:0x80538340; // type:object size:0x124 -lbl_80538464 = .data:0x80538464; // type:object size:0x34 +...data.0 = .data:0x80538160; // type:label scope:local +@25212 = .data:0x8053816C; // type:object size:0xC scope:local data:string +@25213 = .data:0x80538178; // type:object size:0xC scope:local data:string +@25214 = .data:0x80538184; // type:object size:0xC scope:local data:string +@25215 = .data:0x80538190; // type:object size:0xC scope:local data:string +@25216 = .data:0x8053819C; // type:object size:0xC scope:local data:string +@25217 = .data:0x805381A8; // type:object size:0xC scope:local data:string +@LOCAL@executeState_FadeOut__13dLytSaveMgr_cFv@sFadeOutTexts = .data:0x805381B8; // type:object size:0x18 scope:local +@25241 = .data:0x805381D0; // type:object size:0xC scope:local data:string +@25242 = .data:0x805381DC; // type:object size:0xC scope:local data:string +@25243 = .data:0x805381E8; // type:object size:0xC scope:local data:string +@25244 = .data:0x805381F4; // type:object size:0xC scope:local data:string +@25245 = .data:0x80538200; // type:object size:0xC scope:local data:string +@LOCAL@executeState_Select__13dLytSaveMgr_cFv@sConfirmTexts = .data:0x80538210; // type:object size:0x18 scope:local +@27092 = .data:0x80538228; // type:object size:0xC scope:local data:string +@27093 = .data:0x80538238; // type:object size:0x10 scope:local data:string +@27094 = .data:0x80538248; // type:object size:0xC scope:local data:string +@27095 = .data:0x80538254; // type:object size:0xC scope:local data:string +@27096 = .data:0x80538260; // type:object size:0xC scope:local data:string +@27097 = .data:0x8053826C; // type:object size:0xC scope:local data:string +__vt__13dLytSaveMgr_c = .data:0x80538278; // type:object size:0x4C +__vt__52sFStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c> = .data:0x805382C8; // type:object size:0x30 scope:weak +__vt__82sStateMgr_c<13dLytSaveMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x805382F8; // type:object size:0x30 scope:weak +__vt__29sFStateFct_c<13dLytSaveMgr_c> = .data:0x80538328; // type:object size:0x14 scope:weak +__vt__26sFState_c<13dLytSaveMgr_c> = .data:0x80538340; // type:object size:0x18 scope:weak +@27154 = .data:0x80538358; // type:object size:0xC scope:local +@27155 = .data:0x80538364; // type:object size:0xC scope:local +@27156 = .data:0x80538370; // type:object size:0xC scope:local +@27157 = .data:0x8053837C; // type:object size:0xC scope:local +@27158 = .data:0x80538388; // type:object size:0xC scope:local +@27159 = .data:0x80538394; // type:object size:0xC scope:local +@27160 = .data:0x805383A0; // type:object size:0xC scope:local +@27161 = .data:0x805383AC; // type:object size:0xC scope:local +@27162 = .data:0x805383B8; // type:object size:0xC scope:local +@27163 = .data:0x805383C4; // type:object size:0xC scope:local +@27164 = .data:0x805383D0; // type:object size:0xC scope:local +@27165 = .data:0x805383DC; // type:object size:0xC scope:local +@27167 = .data:0x805383E8; // type:object size:0x1C scope:local data:string +@27168 = .data:0x80538404; // type:object size:0x1F scope:local data:string +@27169 = .data:0x80538424; // type:object size:0x1E scope:local data:string +@27170 = .data:0x80538444; // type:object size:0x1E scope:local data:string +__vt__28sFStateID_c<13dLytSaveMgr_c> = .data:0x80538464; // type:object size:0x34 scope:weak g_profile_LYT_DROP_LINE = .data:0x80538498; // type:object size:0xC lbl_805384A4 = .data:0x805384A4; // type:object size:0xC lbl_805384B0 = .data:0x805384B0; // type:object size:0x50 @@ -40875,7 +40898,7 @@ lbl_80573B60 = .sdata:0x80573B60; // type:object size:0x5 data:string lbl_80573B68 = .sdata:0x80573B68; // type:object size:0x5 data:string lbl_80573B70 = .sdata:0x80573B70; // type:object size:0x5 data:string lbl_80573B78 = .sdata:0x80573B78; // type:object size:0x5 data:string -lbl_80573B80 = .sdata:0x80573B80; // type:object size:0x8 +@27091 = .sdata:0x80573B80; // type:object size:0x5 scope:local data:string lbl_80573B88 = .sdata:0x80573B88; // type:object size:0x8 data:string lbl_80573B90 = .sdata:0x80573B90; // type:object size:0x4 data:4byte lbl_80573B94 = .sdata:0x80573B94; // type:object size:0x4 data:4byte @@ -42200,7 +42223,7 @@ sDisp00ArrowRotation__14dLytPauseMgr_c = .sbss:0x80575938; // type:object size:0 sDisp00ArrowLength__14dLytPauseMgr_c = .sbss:0x8057593C; // type:object size:0x4 align:4 data:float sInstance__14dLytPauseMgr_c = .sbss:0x80575940; // type:object size:0x4 data:4byte sInstance__17dLytGameOverMgr_c = .sbss:0x80575948; // type:object size:0x4 data:4byte -sInstance__13dLytSaveMgr_c = .sbss:0x80575950; // type:object size:0x8 data:4byte +sInstance__13dLytSaveMgr_c = .sbss:0x80575950; // type:object size:0x4 data:4byte lbl_80575958 = .sbss:0x80575958; // type:object size:0x1 data:byte lbl_80575959 = .sbss:0x80575959; // type:object size:0x1 data:byte lbl_8057595C = .sbss:0x8057595C; // type:object size:0x4 data:4byte @@ -52031,11 +52054,15 @@ LytGameOver__STATE_OUT = .bss:0x805B5E10; // type:object size:0x40 data:4byte LytGameOverMgr__STATE_INIT = .bss:0x805B5E50; // type:object size:0x40 data:4byte LytGameOverMgr__STATE_FADE_OUT = .bss:0x805B5E90; // type:object size:0x40 data:4byte LytGameOverMgr__STATE_SELECT = .bss:0x805B5ED0; // type:object size:0x30 data:4byte -lbl_805B5F00 = .bss:0x805B5F00; // type:object size:0x10 -LytSaveMgr__STATE_INIT = .bss:0x805B5F10; // type:object size:0x40 data:4byte -LytSaveMgr__STATE_FADE_OUT = .bss:0x805B5F50; // type:object size:0x40 data:4byte -LytSaveMgr__STATE_SELECT = .bss:0x805B5F90; // type:object size:0x40 data:4byte -LytSaveMgr__STATE_FADE_IN = .bss:0x805B5FD0; // type:object size:0x30 data:4byte +@25076 = .bss:0x805B5F00; // type:object size:0xC scope:local +...bss.0 = .bss:0x805B5F00; // type:label scope:local +StateID_Init__13dLytSaveMgr_c = .bss:0x805B5F10; // type:object size:0x30 data:4byte +@25080 = .bss:0x805B5F40; // type:object size:0xC scope:local +StateID_FadeOut__13dLytSaveMgr_c = .bss:0x805B5F50; // type:object size:0x30 data:4byte +@25084 = .bss:0x805B5F80; // type:object size:0xC scope:local +StateID_Select__13dLytSaveMgr_c = .bss:0x805B5F90; // type:object size:0x30 data:4byte +@25088 = .bss:0x805B5FC0; // type:object size:0xC scope:local +StateID_FadeIn__13dLytSaveMgr_c = .bss:0x805B5FD0; // type:object size:0x30 data:4byte lbl_805B6000 = .bss:0x805B6000; // type:object size:0x10 lbl_805B6010 = .bss:0x805B6010; // type:object size:0x20 LytDropLineParts__STATE_WAIT = .bss:0x805B6030; // type:object size:0x40 data:4byte diff --git a/configure.py b/configure.py index 19b6f0a4..4cc79328 100644 --- a/configure.py +++ b/configure.py @@ -627,7 +627,7 @@ config.libs = [ Object(NonMatching, "toBeSorted/d_a_npc_str.cpp"), Object(Matching, "d/lyt/d_lyt_pause.cpp"), Object(NonMatching, "d/lyt/d_lyt_game_over.cpp"), - Object(NonMatching, "d/lyt/d_lyt_save_mgr.cpp"), + Object(Matching, "d/lyt/d_lyt_save_mgr.cpp"), Object(NonMatching, "d/lyt/d_lyt_drop_line.cpp"), Object(NonMatching, "d/lyt/d_lyt_force_line.cpp"), Object(NonMatching, "d/lyt/d_lyt_enemy_icon.cpp"), diff --git a/include/d/flag/storyflag_manager.h b/include/d/flag/storyflag_manager.h index 6bd66fbf..0fae8d4a 100644 --- a/include/d/flag/storyflag_manager.h +++ b/include/d/flag/storyflag_manager.h @@ -2,7 +2,7 @@ #define D_FLAG_STORYFLAG_MANAGER_H #include "d/flag/baseflag_manager.h" -#include "d/flag/storyflag_map.h" +#include "d/flag/storyflag_map.h" // IWYU pragma: export #include "toBeSorted/file_manager.h" class StoryflagManager : public ItemStoryManagerBase { diff --git a/include/d/flag/storyflag_map.h b/include/d/flag/storyflag_map.h index f7f10329..eb4e4203 100644 --- a/include/d/flag/storyflag_map.h +++ b/include/d/flag/storyflag_map.h @@ -197,7 +197,7 @@ enum StoryFlags_e { * Sealed Grounds layer 1 / Behind The Temple layer 1 / Goddess Statue layers 2&3)] Story Flag #36 (0x0024) - JP * 805ACD5D 0x10 / US 805A9ADD 0x10 */ - STORYFLAG_36, + STORYFLAG_HEROS_TUNIC_FI, /** [Horwell Z-target tutorial] * Story Flag #37 (0x0025) - JP 805ACD65 0x08 / US 805A9AE5 0x08 @@ -1150,7 +1150,7 @@ enum StoryFlags_e { /** [Hero Mode] * Story Flag #226 (0x00E2) - JP 805ACD72 0x08 / US 805A9AF2 0x08 */ - STORYFLAG_226, + STORYFLAG_HERO_MODE, /** [First Goddess Cube (Unlocks ability to skyward strike Goddess Cubes)] * Story Flag #227 (0x00E3) - JP 805ACD72 0x20 / US 805A9AF2 0x20 diff --git a/include/d/lyt/d_lyt_save_mgr.h b/include/d/lyt/d_lyt_save_mgr.h index df9ae319..c8c506c5 100644 --- a/include/d/lyt/d_lyt_save_mgr.h +++ b/include/d/lyt/d_lyt_save_mgr.h @@ -1,17 +1,73 @@ #ifndef D_LYT_SAVE_MGR_H #define D_LYT_SAVE_MGR_H -class dLytSaveMgr_c { -public: +#include "d/d_base.h" +#include "d/lyt/d_lyt_save_msg_window.h" +#include "s/s_State.hpp" - static dLytSaveMgr_c* GetInstance() { +class dLytSaveMgr_c : public dBase_c { +public: + dLytSaveMgr_c(); + virtual ~dLytSaveMgr_c(); + + virtual int create() override; + virtual int doDelete() override; + virtual int execute() override; + virtual int draw() override; + + static dLytSaveMgr_c *GetInstance() { return sInstance; } - bool fn_80285650() const; + + void init(); + + enum FadeInPrompt_e { + PROMPT_SAVEOBJ_NORMAL, + PROMPT_SAVEOBJ_TOSKY, + PROMPT_SAVEOBJ_DUNGEON, + PROMPT_SAVE_NORMAL, + PROMPT_HERO_MODE, + PROMPT_HERO_MODE_CONFIRM, + + PROMPT_MAX, + + PROMPT_SAVEOBJ_NUM = PROMPT_SAVEOBJ_DUNGEON + 1, + }; + + bool setPrompt(s32 prompt, bool setTempflag2); + bool setSaveobjPrompt(s32 prompt, u8 saveobjId, bool setTempflag2); + bool unused_weakfnorder(); + bool isBusy() const; + + enum Action_e { + ACTION_0, + ACTION_1, + ACTION_2, + ACTION_3, + ACTION_MAX, + }; private: static dLytSaveMgr_c *sInstance; + + STATE_FUNC_DECLARE(dLytSaveMgr_c, Init); + STATE_FUNC_DECLARE(dLytSaveMgr_c, FadeOut); + STATE_FUNC_DECLARE(dLytSaveMgr_c, Select); + STATE_FUNC_DECLARE(dLytSaveMgr_c, FadeIn); + + /* 0x0068 */ UI_STATE_MGR_DECLARE(dLytSaveMgr_c); + /* 0x00A4 */ dLytSaveMsgWindow_c mWindow; + /* 0x1184 */ s32 mSavePrompt; + /* 0x1188 */ s32 mStep; + /* 0x118C */ s32 mChosenAction; + + /* 0x1190 */ u8 _0x1190[0x119A - 0x1190]; + + /* 0x119A */ u8 mSaveobjId; + /* 0x119B */ bool mFadeOutRequested; + /* 0x119C */ bool mIsFinishedFadingIn; + /* 0x119D */ bool mShouldSetTempflag2; }; #endif diff --git a/include/d/lyt/d_lyt_save_msg_window.h b/include/d/lyt/d_lyt_save_msg_window.h index d61f5888..99e6050e 100644 --- a/include/d/lyt/d_lyt_save_msg_window.h +++ b/include/d/lyt/d_lyt_save_msg_window.h @@ -11,6 +11,13 @@ public: dLytSaveMsgWindow_c(); virtual ~dLytSaveMsgWindow_c() {} + enum Mode_e { + MODE_NONE, + MODE_2_BUTTONS, + MODE_3_BUTTONS, + MODE_4_BUTTONS, + }; + bool build(bool); bool remove(); bool execute(); @@ -28,6 +35,30 @@ public: return mWillFinishOut; } + void setField0x10B8(s32 val) { + field_0x10B8 = val; + } + + void setField0x10BC(s32 val) { + field_0x10BC = val; + } + + s32 getField0x10C4() const { + return field_0x10C4; + } + + s32 getField0x10C8() const { + return field_0x10C8; + } + + void setField0x10DC(u8 val) { + field_0x10DC = val; + } + + void setSaveObjId(s32 id) { + mSaveobjId = id; + } + private: void resetProperties(); void setupSaveTextMaybe(); diff --git a/include/toBeSorted/save_manager.h b/include/toBeSorted/save_manager.h index fc58e410..1e3f22d4 100644 --- a/include/toBeSorted/save_manager.h +++ b/include/toBeSorted/save_manager.h @@ -124,9 +124,15 @@ public: return sInstance; } + bool isIdle() const { + return mIsIdle; + } bool getField_0x83D() const { return field_0x83D; } + void setField_0x83D(bool v) { + field_0x83D = v; + } bool getField_0x83F() const { return field_0x83F; } @@ -226,14 +232,14 @@ private: /* 0x830 */ s32 mDelayTimer; /* 0x834 */ u8 mCopyToFile; /* 0x835 */ u8 mCopyFromFile; - /* 0x836 */ u8 field_0x836; + /* 0x836 */ bool mIsIdle; /* 0x837 */ u8 field_0x837; /* 0x838 */ u8 field_0x838; /* 0x839 */ u8 field_0x839; /* 0x83A */ u8 field_0x83A; /* 0x83B */ u8 field_0x83B; /* 0x83C */ u8 field_0x83C; - /* 0x83D */ u8 field_0x83D; + /* 0x83D */ bool field_0x83D; /* 0x83E */ u8 field_0x83E; /* 0x83F */ u8 field_0x83F; diff --git a/src/d/lyt/d_lyt_save_mgr.cpp b/src/d/lyt/d_lyt_save_mgr.cpp new file mode 100644 index 00000000..0fc1e975 --- /dev/null +++ b/src/d/lyt/d_lyt_save_mgr.cpp @@ -0,0 +1,633 @@ +#include "d/lyt/d_lyt_save_mgr.h" + +#include "common.h" +#include "d/a/d_a_player.h" +#include "d/d_base.h" +#include "d/d_player.h" +#include "d/d_sc_game.h" +#include "d/d_sc_title.h" +#include "d/d_stage.h" +#include "d/flag/sceneflag_manager.h" +#include "d/flag/storyflag_manager.h" +#include "d/lyt/d_lyt_save_msg_window.h" +#include "toBeSorted/file_manager.h" +#include "toBeSorted/save_manager.h" + +SPECIAL_BASE_PROFILE(LYT_SAVE_MGR, dLytSaveMgr_c, fProfile::LYT_SAVE_MGR, 0x2AD, 1); + +STATE_DEFINE(dLytSaveMgr_c, Init); +STATE_DEFINE(dLytSaveMgr_c, FadeOut); +STATE_DEFINE(dLytSaveMgr_c, Select); +STATE_DEFINE(dLytSaveMgr_c, FadeIn); + +dLytSaveMgr_c *dLytSaveMgr_c::sInstance; + +dLytSaveMgr_c::dLytSaveMgr_c() : mStateMgr(*this) { + sInstance = this; + init(); +} + +dLytSaveMgr_c::~dLytSaveMgr_c() { + sInstance = nullptr; +} + +int dLytSaveMgr_c::create() { + mWindow.build(true); + mStateMgr.changeState(StateID_Init); + return SUCCEEDED; +} + +int dLytSaveMgr_c::doDelete() { + mWindow.remove(); + return SUCCEEDED; +} + +int dLytSaveMgr_c::execute() { + mStateMgr.executeState(); + return SUCCEEDED; +} + +int dLytSaveMgr_c::draw() { + mWindow.draw(); + return SUCCEEDED; +} + +bool dLytSaveMgr_c::setPrompt(s32 prompt, bool setTempflag2) { + mSavePrompt = prompt; + mShouldSetTempflag2 = setTempflag2; + mFadeOutRequested = true; + return true; +} + +bool dLytSaveMgr_c::setSaveobjPrompt(s32 prompt, u8 saveobjId, bool setTempflag2) { + mSavePrompt = prompt; + mSaveobjId = saveobjId; + mShouldSetTempflag2 = setTempflag2; + mFadeOutRequested = true; + return true; +} + +bool dLytSaveMgr_c::unused_weakfnorder() { + return mStateMgr.getStateID()->isEqual(StateID_Init); +} + +bool dLytSaveMgr_c::isBusy() const { + return !mStateMgr.getStateID()->isEqual(StateID_Init); +} + +void dLytSaveMgr_c::initializeState_Init() { + mStep = 0; + mFadeOutRequested = false; + mIsFinishedFadingIn = false; +} +void dLytSaveMgr_c::executeState_Init() { + if (mFadeOutRequested == true) { + mStateMgr.changeState(StateID_FadeOut); + } +} +void dLytSaveMgr_c::finalizeState_Init() {} + +void dLytSaveMgr_c::initializeState_FadeOut() { + if (mSavePrompt == PROMPT_HERO_MODE) { + StoryflagManager::sInstance->setFlag(STORYFLAG_490); + if (StoryflagManager::sInstance->getFlag(STORYFLAG_HERO_MODE)) { + // Skip hero mode prompt if we were in hero mode + mSavePrompt = PROMPT_HERO_MODE_CONFIRM; + } + } +} +void dLytSaveMgr_c::executeState_FadeOut() { + static const char *sFadeOutTexts[] = { + "SYS_SAVE_03", // "[1]Save[2]Save and quit[3-]Cancel" + "SYS_SAVE_05", // "[1]Save[2]Save and quit[3]To the sky[4-]Cancel" + "SYS_SAVE_07", // "[1]Save[2]Save and quit[3]Go outside[4-]Cancel" + "SYS_SAVE_09", // "Do you want to save your progress? [1]Save[2]Save and quit[3-]Cancel" + "SYS_SAVE_16", // "You can play again in Hero Mode using this save data. Do you want to continue? [1]Yes[2-]No" + "SYS_SAVE_14", // "Your progress up to this point will be deleted. Are you sure you want to play Hero Mode? + // [1]Bring it on[2-]No, thanks" + }; + + static const s32 sFadeOutModes[] = { + dLytSaveMsgWindow_c::MODE_3_BUTTONS, dLytSaveMsgWindow_c::MODE_4_BUTTONS, dLytSaveMsgWindow_c::MODE_4_BUTTONS, + dLytSaveMsgWindow_c::MODE_3_BUTTONS, dLytSaveMsgWindow_c::MODE_2_BUTTONS, dLytSaveMsgWindow_c::MODE_2_BUTTONS, + }; + + if (mWindow.setProperties(sFadeOutTexts[mSavePrompt], sFadeOutModes[mSavePrompt], 0, 1)) { + mWindow.setField0x10DC(1); + mWindow.setField0x10B8(0); + mStateMgr.changeState(StateID_Select); + + if (mSavePrompt < PROMPT_SAVEOBJ_NUM) { + mWindow.setSaveObjId(mSaveobjId); + } + } + + if (mSavePrompt == PROMPT_SAVE_NORMAL) { + dBase_c::s_NextExecuteControlFlags |= 1; + dBase_c::s_DrawControlFlags |= 1; + } +} +void dLytSaveMgr_c::finalizeState_FadeOut() {} + +void dLytSaveMgr_c::initializeState_Select() { + mStep = 0; + if (mSavePrompt == PROMPT_HERO_MODE) { + mStep = 200; + } else if (mSavePrompt == PROMPT_HERO_MODE_CONFIRM) { + mStep = 300; + StoryflagManager::sInstance->setFlag(STORYFLAG_HEROS_TUNIC_FI); + } +} +void dLytSaveMgr_c::executeState_Select() { + static const char *sConfirmTexts[] = { + "SYS_SAVE_04", // "Are you sure you want to quit? [1]Yes[2-]No" + "SYS_SAVE_06", // "Do you want to return to the sky? [1]Yes[2-]No" + "SYS_SAVE_08", // "Leave the area? [1]Leave[2-]Stay" + "SYS_SAVE_04", // "Are you sure you want to quit? [1]Yes[2-]No" + "SYS_SAVE_17", // "Your progress up to this point will be deleted. Are you sure you want to play Hero Mode? + // [1]Bring it on[2-]No, thanks" + "SYS_SAVE_15", // "Are you sure you want to return to the title screen without saving? [1]Don't save[2-]Save" + }; + + mWindow.execute(); + switch (mStep) { + case 0: { + if (mWindow.getField0x10C8() == 0 || mWindow.getField0x10C8() == 1) { + SaveMgr::GetInstance()->setField_0x83D(true); + } + s32 confirmedButton = mWindow.getField0x10C4(); + if (confirmedButton >= 0) { + mWindow.checkIsWait(); + mStep = 1; + if (confirmedButton == 0 || confirmedButton == 1) { + mWindow.setField0x10BC(1); + } else if (mSavePrompt == PROMPT_SAVEOBJ_TOSKY || mSavePrompt == PROMPT_SAVEOBJ_DUNGEON) { + if (confirmedButton == 2) { + mWindow.setField0x10BC(1); + } else { + mWindow.setField0x10BC(0); + } + } else { + mWindow.setField0x10BC(0); + } + } + break; + } + case 1: { + if (mWindow.getWillFinishOut() == true) { + s32 confirmedButton = mWindow.getField0x10C4(); + if (confirmedButton == 0) { + mChosenAction = ACTION_0; + mStep = 20; + if (mShouldSetTempflag2 == true) { + mShouldSetTempflag2 = false; + if (FileManager::GetInstance()->get_0xA84C() == 0) { + SceneflagManager::sInstance->setTempflag_i(dStage_c::GetInstance()->getCurrRoomId(), 0x2); + } + } + } else if (confirmedButton == 1) { + mChosenAction = ACTION_3; + mStep = 20; + } else if (mSavePrompt == PROMPT_SAVEOBJ_NORMAL || mSavePrompt == PROMPT_SAVE_NORMAL) { + mChosenAction = ACTION_0; + mStep = 100; + } else if (mSavePrompt == PROMPT_SAVEOBJ_TOSKY) { + if (confirmedButton == 2) { + mStep = 10; + mChosenAction = ACTION_1; + } else { + mChosenAction = ACTION_0; + mStep = 100; + } + } else { + if (confirmedButton == 2) { + mChosenAction = ACTION_1; + mStep = 10; + } else { + mChosenAction = ACTION_0; + mStep = 100; + } + } + + if (mStep == 20 && + (FileManager::GetInstance()->get_0xA84C() != 0 || !FileManager::GetInstance()->checkRegionCode())) { + mStep = 30; + SaveMgr::GetInstance()->setField_0x83D(false); + } + } + break; + } + case 10: { + if (mWindow.setProperties(sConfirmTexts[mSavePrompt], dLytSaveMsgWindow_c::MODE_2_BUTTONS, 0, 1)) { + mWindow.setField0x10B8(1); + mStep = 11; + break; + } + // fall-through + } + case 11: { + if (mWindow.getField0x10C4() >= 0) { + mWindow.checkIsWait(); + mWindow.setField0x10BC(0); + mStep = 12; + } + break; + } + case 12: { + if (mWindow.getWillFinishOut() == true) { + if (mWindow.getField0x10C4() == 0) { + FileManager::GetInstance()->setPlayerInfoFileA(); + } else { + mChosenAction = ACTION_0; + } + mStep = 100; + } + + break; + } + case 20: { + bool b = false; + if (mSavePrompt == PROMPT_SAVE_NORMAL) { + b = true; + } + if (mSavePrompt != PROMPT_SAVE_NORMAL && mSavePrompt != PROMPT_HERO_MODE) { + dAcPy_c *link = getLinkPtr(); + if (link != nullptr && !dScGame_c::isCurrentStage("F202")) { + // not Boko Base + FileManager::GetInstance()->setT3Info(link->mPosition, link->mAngle); + StoryflagManager::sInstance->setFlag(STORYFLAG_RESPAWN_AT_STATUE); + } + } + FileManager::GetInstance()->fn_8000CBD0(b); + mStep = 29; + break; + } + case 29: { + bool t1Flag = false; + if (mSavePrompt == PROMPT_SAVE_NORMAL) { + t1Flag = true; + } + if (SaveMgr::GetInstance()->save(t1Flag, true) == true) { + mStep = 21; + } + break; + } + case 21: { + if (SaveMgr::GetInstance()->isIdle() == true) { + if (mChosenAction == ACTION_3) { + mStep = 22; + } else { + mStep = 40; + } + } + break; + } + case 22: { + if (mWindow.setProperties( + sConfirmTexts[PROMPT_SAVEOBJ_NORMAL], dLytSaveMsgWindow_c::MODE_2_BUTTONS, 0, 1 + )) { + mWindow.setField0x10B8(1); + mStep = 23; + } + break; + } + case 23: { + s32 confirmedButton = mWindow.getField0x10C4(); + if (confirmedButton >= 0) { + if (confirmedButton != 0) { + mWindow.checkIsWait(); + mStep = 24; + mWindow.setField0x10BC(0); + } else { + mStep = 25; + } + } + break; + } + case 24: { + if (mWindow.getWillFinishOut() == true) { + mChosenAction = ACTION_0; + mStep = 100; + } + break; + } + case 25: { + dScTitle_c::loadTitleScreen(1); + mStep = 1000; + break; + } + case 30: { + // "It is not possible to save. Continue your adventure anyway? [1]Continue[2]Quit" + if (mWindow.setProperties("SYS_SAVE_11", dLytSaveMsgWindow_c::MODE_2_BUTTONS, 0, 1)) { + mWindow.setField0x10B8(1); + mWindow.setNumLines(2); + mStep++; + } + break; + } + case 31: { + s32 confirmedButton = mWindow.getField0x10C4(); + if (confirmedButton >= 0) { + mWindow.checkIsWait(); + if (confirmedButton != 0) { + mWindow.setField0x10BC(1); + } else { + mWindow.setField0x10BC(0); + } + mStep++; + } + break; + } + case 32: { + if (mWindow.getWillFinishOut() == true) { + if (mWindow.getField0x10C4()) { + mStep = 50; + } else { + mChosenAction = ACTION_0; + mStep = 100; + } + } + break; + } + case 40: + if (mWindow.checkIsWait()) { + mWindow.setField0x10BC(2); + mStep++; + } + break; + case 41: + if (mWindow.getWillFinishOut() == true) { + mStep = 100; + } + break; + case 50: + // "Are you sure you want to quit? [1]Quit[2-]Cancel" + if (mWindow.setProperties("SYS_GAMEOVER_03", dLytSaveMsgWindow_c::MODE_2_BUTTONS, 0, 1)) { + mWindow.setField0x10B8(1); + mStep++; + } + break; + case 51: + if (mWindow.getField0x10C4() >= 0) { + mWindow.checkIsWait(); + mWindow.setField0x10BC(0); + mStep++; + } + break; + case 52: + if (mWindow.getWillFinishOut() == true) { + if (mWindow.getField0x10C4() == 0) { + dScTitle_c::loadTitleScreen(0); + mStep = 1000; + } else { + mChosenAction = ACTION_0; + mStep = 100; + } + } + break; + case 60: + if (mWindow.setProperties(sConfirmTexts[mSavePrompt], dLytSaveMsgWindow_c::MODE_3_BUTTONS, 0, 1)) { + mWindow.setField0x10B8(1); + mStep = 61; + } + break; + case 61: + if (mWindow.getField0x10C4() >= 0) { + mWindow.checkIsWait(); + mWindow.setField0x10BC(0); + mStep = 62; + } + break; + case 62: + if (mWindow.getWillFinishOut() == true) { + s32 confirmedButton = mWindow.getField0x10C4(); + if (confirmedButton == 0) { + mChosenAction = ACTION_1; + FileManager::GetInstance()->setPlayerInfoFileA(); + } else if (confirmedButton == 1) { + mChosenAction = ACTION_2; + FileManager::GetInstance()->setPlayerInfoFileA(); + } else { + mChosenAction = ACTION_0; + } + mStep = 100; + } + break; + case 100: { + mStateMgr.changeState(StateID_FadeIn); + break; + } + case 200: + if (mWindow.getField0x10C4() >= 0) { + mWindow.checkIsWait(); + mWindow.setField0x10BC(1); + mStep++; + } + break; + case 201: + if (mWindow.getWillFinishOut() == true) { + if (mWindow.getField0x10C4() != 0) { + mStep = 230; + } else { + mStep = 210; + } + } + break; + case 210: + // "Your progress up to this point will be deleted. Are you sure you want to play Hero Mode? [1]Bring it on[2-]No, thanks" + if (mWindow.setProperties("SYS_SAVE_17", dLytSaveMsgWindow_c::MODE_2_BUTTONS, 0, 1)) { + mWindow.setField0x10B8(1); + mStep++; + } + break; + case 211: + if (mWindow.getField0x10C8() == 0) { + SaveMgr::GetInstance()->setField_0x83D(true); + } + if (mWindow.getField0x10C4() >= 0) { + mWindow.checkIsWait(); + mWindow.setField0x10BC(1); + mStep++; + } + break; + case 212: + if (mWindow.getWillFinishOut() == true) { + if (mWindow.getField0x10C4() != 0) { + mWindow.setField0x10BC(1); + mStep = 230; + } else { + mWindow.setField0x10BC(1); + mStep++; + } + } + break; + case 213: + FileManager::GetInstance()->fn_8000CBD0(true); + if (SaveMgr::GetInstance()->saveAfterCredits() == true) { + mStep++; + } + break; + case 214: + if (SaveMgr::GetInstance()->isIdle() == true) { + mStep = 40; + } + break; + case 230: + // "Are you sure you want to return to the title screen without saving? [1]Don't save[2-]Save" + if (mWindow.setProperties("SYS_SAVE_15", dLytSaveMsgWindow_c::MODE_2_BUTTONS, 0, 1)) { + mWindow.setField0x10B8(1); + mStep++; + } + break; + case 231: { + s32 tmp = mWindow.getField0x10C4(); + if (tmp >= 0) { + mWindow.checkIsWait(); + if (tmp != 0) { + mWindow.setField0x10BC(1); + } else { + mWindow.setField0x10BC(0); + } + mStep++; + } + break; + } + case 232: + if (mWindow.getWillFinishOut() == true) { + if (mWindow.getField0x10C4() != 0) { + mStep++; + } else { + mStep = 100; + } + } + break; + case 233: + // "You can play again in Hero Mode using this save data. Do you want to continue? [1]Yes[2-]No" + if (mWindow.setProperties("SYS_SAVE_16", dLytSaveMsgWindow_c::MODE_2_BUTTONS, 0, 1)) { + mWindow.setField0x10B8(1); + mStep = 200; + } + break; + case 300: + if (mWindow.getField0x10C8() == 0) { + SaveMgr::GetInstance()->setField_0x83D(true); + } + if (mWindow.getField0x10C4() >= 0) { + mWindow.checkIsWait(); + mWindow.setField0x10BC(1); + mStep++; + } + break; + case 301: + if (mWindow.getWillFinishOut() == true) { + if (mWindow.getField0x10C4() != 0) { + mStep = 320; + } else if (FileManager::GetInstance()->get_0xA84C()) { + mStep = 330; + SaveMgr::GetInstance()->setField_0x83D(false); + } else { + mStep = 310; + } + } + break; + case 310: + FileManager::GetInstance()->fn_8000CBD0(true); + if (SaveMgr::GetInstance()->saveAfterCredits() == true) { + mStep++; + } + break; + case 311: + if (SaveMgr::GetInstance()->isIdle() == true) { + mStep = 40; + } + break; + case 320: + if (mWindow.setProperties(sConfirmTexts[mSavePrompt], dLytSaveMsgWindow_c::MODE_2_BUTTONS, 0, 1)) { + mWindow.setField0x10B8(1); + mStep++; + } + break; + case 321: { + s32 tmp = mWindow.getField0x10C4(); + if (tmp >= 0) { + mWindow.checkIsWait(); + if (tmp != 0) { + mWindow.setField0x10BC(1); + } else { + mWindow.setField0x10BC(0); + } + mStep++; + } + break; + } + case 322: + if (mWindow.getWillFinishOut() == true) { + if (mWindow.getField0x10C4() != 0) { + mStep++; + } else { + mStep = 100; + } + } + break; + case 323: + // "You have conquered Hero Mode! Congratulations! Do you want to create a save just before the final + // battle? [1]Save[2-]Don't save" + if (mWindow.setProperties("SYS_SAVE_14", dLytSaveMsgWindow_c::MODE_2_BUTTONS, 0, 1)) { + mWindow.setField0x10B8(1); + mStep = 300; + } + break; + case 330: + // "It is not possible to save. Continue your adventure anyway? [1]Continue[2]Quit" + if (mWindow.setProperties("SYS_SAVE_11", dLytSaveMsgWindow_c::MODE_2_BUTTONS, 0, 1)) { + mWindow.setField0x10B8(1); + mWindow.setNumLines(2); + mStep++; + } + break; + case 331: + if (mWindow.getField0x10C4() >= 0) { + mWindow.checkIsWait(); + mWindow.setField0x10BC(0); + mStep++; + } + break; + case 332: + if (mWindow.getWillFinishOut() == true) { + mStep = 100; + } + break; + } +} +void dLytSaveMgr_c::finalizeState_Select() {} + +void dLytSaveMgr_c::initializeState_FadeIn() { + mStep = 0; + if (mSavePrompt == PROMPT_SAVE_NORMAL) { + dBase_c::s_NextExecuteControlFlags &= ~1; + dBase_c::s_DrawControlFlags &= ~1; + } +} +void dLytSaveMgr_c::executeState_FadeIn() { + switch (mStep) { + case 0: { + mIsFinishedFadingIn = true; + mStep = 1; + break; + } + case 1: { + mStateMgr.changeState(StateID_Init); + break; + } + } +} +void dLytSaveMgr_c::finalizeState_FadeIn() {} + +void dLytSaveMgr_c::init() { + mStep = 0; + mChosenAction = ACTION_MAX; + mSavePrompt = PROMPT_MAX; + mFadeOutRequested = false; + mIsFinishedFadingIn = false; + mSaveobjId = 0; +} diff --git a/src/d/lyt/meter/d_lyt_meter.cpp b/src/d/lyt/meter/d_lyt_meter.cpp index 12dc2514..f66b5021 100644 --- a/src/d/lyt/meter/d_lyt_meter.cpp +++ b/src/d/lyt/meter/d_lyt_meter.cpp @@ -1079,7 +1079,7 @@ bool dLytMeterMain_c::fn_800D5680() { } bool dLytMeterMain_c::fn_800D56B0() { - if (dLytSaveMgr_c::GetInstance() != nullptr && dLytSaveMgr_c::GetInstance()->fn_80285650()) { + if (dLytSaveMgr_c::GetInstance() != nullptr && dLytSaveMgr_c::GetInstance()->isBusy()) { return true; } diff --git a/src/toBeSorted/save_manager.cpp b/src/toBeSorted/save_manager.cpp index ae42e9b6..a62c145c 100644 --- a/src/toBeSorted/save_manager.cpp +++ b/src/toBeSorted/save_manager.cpp @@ -69,14 +69,14 @@ void SaveMgr::init() { mCheckForFreeSpaceResult = 0; mCopyToFile = 0; mCopyFromFile = 0; - field_0x836 = 0; + mIsIdle = false; field_0x837 = 0; field_0x838 = 0; field_0x839 = 0; field_0x83A = 0; field_0x83B = 0; field_0x83C = 0; - field_0x83D = 0; + field_0x83D = false; field_0x83E = 0; mDelayTimer = 0; FileManager::GetInstance()->setField0xA840(1); @@ -116,7 +116,7 @@ bool SaveMgr::checkForSave() { if (mCurrentState != STATE_MAX) { return false; } - field_0x836 = 0; + mIsIdle = false; initializeCheckForSave(); return true; } @@ -125,7 +125,7 @@ bool SaveMgr::checkForFreeSpace() { if (mCurrentState != STATE_MAX) { return false; } - field_0x836 = 0; + mIsIdle = false; initializeCheckForFreeSpace(); return true; } @@ -134,7 +134,7 @@ bool SaveMgr::createFiles() { if (mCurrentState != STATE_MAX) { return false; } - field_0x836 = 0; + mIsIdle = false; initializeCreateFiles(); return true; } @@ -143,7 +143,7 @@ bool SaveMgr::loadSave() { if (mCurrentState != STATE_MAX) { return false; } - field_0x836 = 0; + mIsIdle = false; initializeLoadSave(); return true; } @@ -155,7 +155,7 @@ bool SaveMgr::save(bool entranceT1LoadFlag, bool full) { if (FileManager::GetInstance()->get_0xA84C()) { return false; } - field_0x836 = 0; + mIsIdle = false; if (full == 1) { FileManager::GetInstance()->saveT1SaveInfo(entranceT1LoadFlag); } else { @@ -174,7 +174,7 @@ bool SaveMgr::saveAfterCredits() { if (FileManager::GetInstance()->get_0xA84C()) { return false; } - field_0x836 = 0; + mIsIdle = false; dDvdUnk::FontUnk::GetInstance()->setNeedsPad(true); FileManager::GetInstance()->setFileTimes(); FileManager::GetInstance()->saveAfterCredits(); @@ -187,7 +187,7 @@ bool SaveMgr::writeSkipDat() { if (mCurrentState != STATE_MAX) { return false; } - field_0x836 = 0; + mIsIdle = false; initializeWriteSkipDat(); return true; } @@ -196,7 +196,7 @@ bool SaveMgr::copySave(u8 to, u8 from) { if (mCurrentState != STATE_MAX) { return false; } - field_0x836 = 0; + mIsIdle = false; mCopyToFile = to; mCopyFromFile = from; initializeCopySave(); @@ -208,7 +208,7 @@ bool SaveMgr::clearSelectedFile() { if (mCurrentState != STATE_MAX) { return false; } - field_0x836 = 0; + mIsIdle = false; initializeClearSelectedFile(); field_0x83F = 0; return true; @@ -723,7 +723,7 @@ void SaveMgr::initializeWriteSave() { mDelayTimer = 0; dDvdUnk::FontUnk::GetInstance()->setNeedsPad(false); FileManager::GetInstance()->setField0xA84D(1); - field_0x83D = 1; + field_0x83D = true; } void SaveMgr::executeWriteSave() { @@ -1216,7 +1216,7 @@ void SaveMgr::executeDeleteAllData() { void SaveMgr::initializeError() { FileManager::GetInstance()->setField0xA84D(0); - field_0x83D = 0; + field_0x83D = false; beginState(STATE_ERROR); dDvdUnk::FontUnk::GetInstance()->setNeedsPad(true); field_0x83F = 0; @@ -1371,7 +1371,7 @@ void SaveMgr::executeError() { void SaveMgr::initializeNandError() { FileManager::GetInstance()->setField0xA84D(0); - field_0x83D = 0; + field_0x83D = false; dDvdUnk::FontUnk::GetInstance()->setNeedsPad(true); beginState(STATE_NAND_ERROR); } @@ -1458,7 +1458,7 @@ void SaveMgr::executeNandError() { dCsBase_c::GetInstance()->setDrawDirectly(false); dReset::Manage_c::GetInstance()->SetInteriorReturnDataManager(); endState(); - field_0x836 = 0; + mIsIdle = false; } break; } @@ -1519,9 +1519,9 @@ void SaveMgr::beginState(SaveMgrState_e state) { } void SaveMgr::endState() { - field_0x836 = 1; + mIsIdle = true; FileManager::GetInstance()->setField0xA840(1); - field_0x83D = 0; + field_0x83D = false; dDvdUnk::FontUnk::GetInstance()->setNeedsPad(true); field_0x83B = 0; field_0x83C = 0;