diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 6048d42a..75b11b49 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -1539,7 +1539,9 @@ d/lyt/d_lyt_game_over.cpp: .ctors start:0x804DB860 end:0x804DB864 .rodata start:0x804EE700 end:0x804EE778 .data start:0x80537970 end:0x80538160 + .sdata start:0x80573B58 end:0x80573B80 .sbss start:0x80575948 end:0x80575950 + .sdata2 start:0x8057C6A0 end:0x8057C6B0 .bss start:0x805B5D40 end:0x805B5F00 d/lyt/d_lyt_save_mgr.cpp: diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 49913803..043a96f1 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -10447,7 +10447,7 @@ isInSkyKeepPuzzleRoom = .text:0x80194F40; // type:function size:0xA4 isInAnySkyKeepRoom = .text:0x80194FF0; // type:function size:0x38 maybeResetSkykeepPuzzle = .text:0x80195030; // type:function size:0xB4 saveSkykeepPuzzleToGlobal = .text:0x801950F0; // type:function size:0x58 -restoreSkykeepPuzzleFromGlobal = .text:0x80195150; // type:function size:0x68 +restoreSkykeepPuzzleFromGlobal__Fv = .text:0x80195150; // type:function size:0x68 relatedToSkeepMapStuff = .text:0x801951C0; // type:function size:0x120 getSKDoorSceneflag = .text:0x801952E0; // type:function size:0x18 checkSKDoorHasSceneflag = .text:0x80195300; // type:function size:0x34 @@ -11179,7 +11179,7 @@ clearSpawnInfo__9dScGame_cFv = .text:0x801BAE10; // type:function size:0x48 fn_801BAE60 = .text:0x801BAE60; // type:function size:0x90 fn_801BAEF0 = .text:0x801BAEF0; // type:function size:0x50 fn_801BAF40 = .text:0x801BAF40; // type:function size:0x54 -Reloader__triggerEntrance = .text:0x801BAFA0; // type:function size:0xDC +triggerEntrance__9dScGame_cFPCcUcUcUciiUcUsSc = .text:0x801BAFA0; // type:function size:0xDC triggerExit__9dScGame_cFlUsll = .text:0x801BB080; // type:function size:0xC0 Reloader__triggerExitInner = .text:0x801BB140; // type:function size:0x154 fn_801BB2A0 = .text:0x801BB2A0; // type:function size:0x28 @@ -14932,95 +14932,95 @@ LytPauseMain__dtor = .text:0x802824A0; // type:function size:0x58 LytPauseMgr__dtor = .text:0x80282500; // type:function size:0x58 fn_80282560 = .text:0x80282560; // type:function size:0x88 fn_802825F0 = .text:0x802825F0; // type:function size:0x88 -fn_80282680 = .text:0x80282680; // type:function size:0x22C -fn_802828B0 = .text:0x802828B0; // type:function size:0xA4 -fn_80282960 = .text:0x80282960; // type:function size:0xA0 -fn_80282A00 = .text:0x80282A00; // type:function size:0x6C -fn_80282A70 = .text:0x80282A70; // type:function size:0x58 -fn_80282AD0 = .text:0x80282AD0; // type:function size:0x2D0 -fn_80282DA0 = .text:0x80282DA0; // type:function size:0x10 -fn_80282DB0 = .text:0x80282DB0; // type:function size:0xF4 -fn_80282EB0 = .text:0x80282EB0; // type:function size:0x68 -fn_80282F20 = .text:0x80282F20; // type:function size:0x10 -fn_80282F30 = .text:0x80282F30; // type:function size:0x3C -fn_80282F70 = .text:0x80282F70; // type:function size:0xC0 -fn_80283030 = .text:0x80283030; // type:function size:0x80 -fn_802830B0 = .text:0x802830B0; // type:function size:0x10 -fn_802830C0 = .text:0x802830C0; // type:function size:0x4 -fn_802830D0 = .text:0x802830D0; // type:function size:0x30 -fn_80283100 = .text:0x80283100; // type:function size:0x4 -fn_80283110 = .text:0x80283110; // type:function size:0x64 -fn_80283180 = .text:0x80283180; // type:function size:0xC4 -fn_80283250 = .text:0x80283250; // type:function size:0x3C -fn_80283290 = .text:0x80283290; // type:function size:0xC -fn_802832A0 = .text:0x802832A0; // type:function size:0xB4 -fn_80283360 = .text:0x80283360; // type:function size:0x4 -fn_80283370 = .text:0x80283370; // type:function size:0x24 -fn_802833A0 = .text:0x802833A0; // type:function size:0x114 -fn_802834C0 = .text:0x802834C0; // type:function size:0x4 -fn_802834D0 = .text:0x802834D0; // type:function size:0x1C -fn_802834F0 = .text:0x802834F0; // type:function size:0x50 -fn_80283540 = .text:0x80283540; // type:function size:0x10 -fn_80283550 = .text:0x80283550; // type:function size:0xAC -fn_80283600 = .text:0x80283600; // type:function size:0xC4 -LytGameOver__ctor = .text:0x802836D0; // type:function size:0x30 -LytGameOver__ctorCont = .text:0x80283700; // type:function size:0xB0 -fn_802837B0 = .text:0x802837B0; // type:function size:0x200 -fn_802839B0 = .text:0x802839B0; // type:function size:0x58 -fn_80283A10 = .text:0x80283A10; // type:function size:0x6C -fn_80283A80 = .text:0x80283A80; // type:function size:0xA0 -fn_80283B20 = .text:0x80283B20; // type:function size:0xA4 -fn_80283BD0 = .text:0x80283BD0; // type:function size:0x268 -fn_80283E40 = .text:0x80283E40; // type:function size:0x50 -fn_80283E90 = .text:0x80283E90; // type:function size:0x10 -fn_80283EA0 = .text:0x80283EA0; // type:function size:0x28 -fn_80283ED0 = .text:0x80283ED0; // type:function size:0x30 -fn_80283F00 = .text:0x80283F00; // type:function size:0x10 -fn_80283F10 = .text:0x80283F10; // type:function size:0x28 -fn_80283F40 = .text:0x80283F40; // type:function size:0x4 -fn_80283F50 = .text:0x80283F50; // type:function size:0x18 -fn_80283F70 = .text:0x80283F70; // type:function size:0x4 -fn_80283F80 = .text:0x80283F80; // type:function size:0x10 -fn_80283F90 = .text:0x80283F90; // type:function size:0xA0 -fn_80284030 = .text:0x80284030; // type:function size:0x4 -fn_80284040 = .text:0x80284040; // type:function size:0x10 -LytGameOver__triggerRespawn = .text:0x80284050; // type:function size:0x44C -fn_802844A0 = .text:0x802844A0; // type:function size:0x4 -fn_802844B0 = .text:0x802844B0; // type:function size:0x10 -fn_802844C0 = .text:0x802844C0; // type:function size:0x60 -fn_80284520 = .text:0x80284520; // type:function size:0xC -fn_80284530 = .text:0x80284530; // type:function size:0x60 -fn_80284590 = .text:0x80284590; // type:function size:0xC -fn_802845A0 = .text:0x802845A0; // type:function size:0x1C -fn_802845C0 = .text:0x802845C0; // type:function size:0x1C -fn_802845E0 = .text:0x802845E0; // type:function size:0x1C -fn_80284600 = .text:0x80284600; // type:function size:0x1C -fn_80284620 = .text:0x80284620; // type:function size:0x1C -fn_80284640 = .text:0x80284640; // type:function size:0x1C -fn_80284660 = .text:0x80284660; // type:function size:0x10 -fn_80284670 = .text:0x80284670; // type:function size:0x10 -fn_80284680 = .text:0x80284680; // type:function size:0x10 -fn_80284690 = .text:0x80284690; // type:function size:0x10 -fn_802846A0 = .text:0x802846A0; // type:function size:0x10 -fn_802846B0 = .text:0x802846B0; // type:function size:0x10 -fn_802846C0 = .text:0x802846C0; // type:function size:0x10 -fn_802846D0 = .text:0x802846D0; // type:function size:0x10 -fn_802846E0 = .text:0x802846E0; // type:function size:0x10 -fn_802846F0 = .text:0x802846F0; // type:function size:0x10 -fn_80284700 = .text:0x80284700; // type:function size:0x10 -fn_80284710 = .text:0x80284710; // type:function size:0x10 -fn_80284720 = .text:0x80284720; // type:function size:0x10 -fn_80284730 = .text:0x80284730; // type:function size:0x30 -fn_80284760 = .text:0x80284760; // type:function size:0x30 -fn_80284790 = .text:0x80284790; // type:function size:0x30 -fn_802847C0 = .text:0x802847C0; // type:function size:0x30 -fn_802847F0 = .text:0x802847F0; // type:function size:0x30 -fn_80284820 = .text:0x80284820; // type:function size:0x30 -LytGameOver__initStates = .text:0x80284850; // type:function size:0x578 -LytGameOver__dtor = .text:0x80284DD0; // type:function size:0x58 -LytGameOverMgr__dtor = .text:0x80284E30; // type:function size:0x58 -fn_80284E90 = .text:0x80284E90; // type:function size:0x88 -fn_80284F20 = .text:0x80284F20; // type:function size:0x88 +__ct__14dLytGameOver_cFv = .text:0x80282680; // type:function size:0x22C +__dt__53sFStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c>Fv = .text:0x802828B0; // type:function size:0xA4 +__dt__83sStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80282960; // type:function size:0xA0 +__dt__30sFStateFct_c<14dLytGameOver_c>Fv = .text:0x80282A00; // type:function size:0x6C +__dt__27sFState_c<14dLytGameOver_c>Fv = .text:0x80282A70; // type:function size:0x58 +build__14dLytGameOver_cFv = .text:0x80282AD0; // type:function size:0x2D0 +changeState__83sStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x80282DA0; // type:function size:0x10 +remove__14dLytGameOver_cFv = .text:0x80282DB0; // type:function size:0xF4 +execute__14dLytGameOver_cFv = .text:0x80282EB0; // type:function size:0x68 +executeState__83sStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80282F20; // type:function size:0x10 +draw__14dLytGameOver_cFv = .text:0x80282F30; // type:function size:0x3C +requestIn__14dLytGameOver_cFPCcll = .text:0x80282F70; // type:function size:0xC0 +requestOut__14dLytGameOver_cFl = .text:0x80283030; // type:function size:0x80 +getStateID__83sStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x802830B0; // type:function size:0x10 +initializeState_Init__14dLytGameOver_cFv = .text:0x802830C0; // type:function size:0x4 +executeState_Init__14dLytGameOver_cFv = .text:0x802830D0; // type:function size:0x30 +finalizeState_Init__14dLytGameOver_cFv = .text:0x80283100; // type:function size:0x4 +initializeState_In__14dLytGameOver_cFv = .text:0x80283110; // type:function size:0x64 +executeState_In__14dLytGameOver_cFv = .text:0x80283180; // type:function size:0xC4 +finalizeState_In__14dLytGameOver_cFv = .text:0x80283250; // type:function size:0x3C +initializeState_Wait__14dLytGameOver_cFv = .text:0x80283290; // type:function size:0xC +executeState_Wait__14dLytGameOver_cFv = .text:0x802832A0; // type:function size:0xB4 +finalizeState_Wait__14dLytGameOver_cFv = .text:0x80283360; // type:function size:0x4 +initializeState_Out__14dLytGameOver_cFv = .text:0x80283370; // type:function size:0x24 +executeState_Out__14dLytGameOver_cFv = .text:0x802833A0; // type:function size:0x114 +finalizeState_Out__14dLytGameOver_cFv = .text:0x802834C0; // type:function size:0x4 +init__14dLytGameOver_cFv = .text:0x802834D0; // type:function size:0x1C +setAnm__14dLytGameOver_cFi = .text:0x802834F0; // type:function size:0x50 +stopAnm__14dLytGameOver_cFi = .text:0x80283540; // type:function size:0x10 +applyText__14dLytGameOver_cFv = .text:0x80283550; // type:function size:0xAC +setupButtons__14dLytGameOver_cFv = .text:0x80283600; // type:function size:0xC4 +dLytGameOverMgr_c_classInit__Fv = .text:0x802836D0; // type:function size:0x30 +__ct__17dLytGameOverMgr_cFv = .text:0x80283700; // type:function size:0xB0 +__dt__14dLytGameOver_cFv = .text:0x802837B0; // type:function size:0x200 +__dt__30sFState_c<17dLytGameOverMgr_c>Fv = .text:0x802839B0; // type:function size:0x58 +__dt__33sFStateFct_c<17dLytGameOverMgr_c>Fv = .text:0x80283A10; // type:function size:0x6C +__dt__86sStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80283A80; // type:function size:0xA0 +__dt__56sFStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c>Fv = .text:0x80283B20; // type:function size:0xA4 +__dt__17dLytGameOverMgr_cFv = .text:0x80283BD0; // type:function size:0x268 +create__17dLytGameOverMgr_cFv = .text:0x80283E40; // type:function size:0x50 +changeState__86sStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x80283E90; // type:function size:0x10 +doDelete__17dLytGameOverMgr_cFv = .text:0x80283EA0; // type:function size:0x28 +execute__17dLytGameOverMgr_cFv = .text:0x80283ED0; // type:function size:0x30 +executeState__86sStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80283F00; // type:function size:0x10 +draw__17dLytGameOverMgr_cFv = .text:0x80283F10; // type:function size:0x28 +initializeState_Init__17dLytGameOverMgr_cFv = .text:0x80283F40; // type:function size:0x4 +executeState_Init__17dLytGameOverMgr_cFv = .text:0x80283F50; // type:function size:0x18 +finalizeState_Init__17dLytGameOverMgr_cFv = .text:0x80283F70; // type:function size:0x4 +initializeState_FadeOut__17dLytGameOverMgr_cFv = .text:0x80283F80; // type:function size:0x10 +executeState_FadeOut__17dLytGameOverMgr_cFv = .text:0x80283F90; // type:function size:0xA0 +finalizeState_FadeOut__17dLytGameOverMgr_cFv = .text:0x80284030; // type:function size:0x4 +initializeState_Select__17dLytGameOverMgr_cFv = .text:0x80284040; // type:function size:0x10 +executeState_Select__17dLytGameOverMgr_cFv = .text:0x80284050; // type:function size:0x44C +finalizeState_Select__17dLytGameOverMgr_cFv = .text:0x802844A0; // type:function size:0x4 +init__17dLytGameOverMgr_cFv = .text:0x802844B0; // type:function size:0x10 +build__33sFStateFct_c<17dLytGameOverMgr_c>FRC12sStateIDIf_c = .text:0x802844C0; // type:function size:0x60 +dispose__33sFStateFct_c<17dLytGameOverMgr_c>FRP10sStateIf_c = .text:0x80284520; // type:function size:0xC +build__30sFStateFct_c<14dLytGameOver_c>FRC12sStateIDIf_c = .text:0x80284530; // type:function size:0x60 +dispose__30sFStateFct_c<14dLytGameOver_c>FRP10sStateIf_c = .text:0x80284590; // type:function size:0xC +initialize__30sFState_c<17dLytGameOverMgr_c>Fv = .text:0x802845A0; // type:function size:0x1C +execute__30sFState_c<17dLytGameOverMgr_c>Fv = .text:0x802845C0; // type:function size:0x1C +finalize__30sFState_c<17dLytGameOverMgr_c>Fv = .text:0x802845E0; // type:function size:0x1C +initialize__27sFState_c<14dLytGameOver_c>Fv = .text:0x80284600; // type:function size:0x1C +execute__27sFState_c<14dLytGameOver_c>Fv = .text:0x80284620; // type:function size:0x1C +finalize__27sFState_c<14dLytGameOver_c>Fv = .text:0x80284640; // type:function size:0x1C +initializeState__86sStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80284660; // type:function size:0x10 +finalizeState__86sStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80284670; // type:function size:0x10 +refreshState__86sStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80284680; // type:function size:0x10 +getState__86sStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80284690; // type:function size:0x10 +getNewStateID__86sStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x802846A0; // type:function size:0x10 +getStateID__86sStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x802846B0; // type:function size:0x10 +getOldStateID__86sStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x802846C0; // type:function size:0x10 +initializeState__83sStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x802846D0; // type:function size:0x10 +finalizeState__83sStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x802846E0; // type:function size:0x10 +refreshState__83sStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x802846F0; // type:function size:0x10 +getState__83sStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80284700; // type:function size:0x10 +getNewStateID__83sStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80284710; // type:function size:0x10 +getOldStateID__83sStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80284720; // type:function size:0x10 +finalizeState__29sFStateID_c<14dLytGameOver_c>CFR14dLytGameOver_c = .text:0x80284730; // type:function size:0x30 +executeState__29sFStateID_c<14dLytGameOver_c>CFR14dLytGameOver_c = .text:0x80284760; // type:function size:0x30 +initializeState__29sFStateID_c<14dLytGameOver_c>CFR14dLytGameOver_c = .text:0x80284790; // type:function size:0x30 +finalizeState__32sFStateID_c<17dLytGameOverMgr_c>CFR17dLytGameOverMgr_c = .text:0x802847C0; // type:function size:0x30 +executeState__32sFStateID_c<17dLytGameOverMgr_c>CFR17dLytGameOverMgr_c = .text:0x802847F0; // type:function size:0x30 +initializeState__32sFStateID_c<17dLytGameOverMgr_c>CFR17dLytGameOverMgr_c = .text:0x80284820; // type:function size:0x30 +__sinit_\d_lyt_game_over_cpp = .text:0x80284850; // type:function size:0x578 +__dt__29sFStateID_c<14dLytGameOver_c>Fv = .text:0x80284DD0; // type:function size:0x58 +__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 @@ -28667,7 +28667,9 @@ lbl_804EE578 = .rodata:0x804EE578; // type:object size:0x30 align:4 data:float TgMassObj__GRASS_A_TYPES = .rodata:0x804EE5A8; // type:object size:0xF8 data:4byte lbl_804EE6A0 = .rodata:0x804EE6A0; // type:object size:0x20 lbl_804EE6C0 = .rodata:0x804EE6C0; // type:object size:0x40 data:4byte -lbl_804EE700 = .rodata:0x804EE700; // type:object size:0x78 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 lbl_804EE790 = .rodata:0x804EE790; // type:object size:0x48 lbl_804EE7D8 = .rodata:0x804EE7D8; // type:object size:0x18 data:4byte @@ -36055,22 +36057,32 @@ lbl_80537ACC = .data:0x80537ACC; // type:object size:0x18 lbl_80537AE4 = .data:0x80537AE4; // type:object size:0x1C lbl_80537B00 = .data:0x80537B00; // type:object size:0x1C lbl_80537B1C = .data:0x80537B1C; // type:object size:0x18 -lbl_80537B34 = .data:0x80537B34; // type:object size:0xA0 +lbl_80537B34 = .data:0x80537B34; // type:object size:0xC +lbl_80537B40 = .data:0x80537B40; // type:object size:0xC data:string +lbl_80537B4C = .data:0x80537B4C; // type:object size:0xC data:string +lbl_80537B58 = .data:0x80537B58; // type:object size:0xC data:string +lbl_80537B64 = .data:0x80537B64; // type:object size:0x9 data:string +lbl_80537B70 = .data:0x80537B70; // type:object size:0x12 data:string +lbl_80537B84 = .data:0x80537B84; // type:object size:0x12 data:string +lbl_80537B98 = .data:0x80537B98; // type:object size:0x12 data:string +lbl_80537BAC = .data:0x80537BAC; // type:object size:0xC data:string +lbl_80537BB8 = .data:0x80537BB8; // type:object size:0xD data:string +lbl_80537BC8 = .data:0x80537BC8; // type:object size:0x9 data:string g_profile_LYT_GAMEOVER_MGR = .data:0x80537BD4; // type:object size:0xC lbl_80537BE0 = .data:0x80537BE0; // type:object size:0x10 data:string lbl_80537BF0 = .data:0x80537BF0; // type:object size:0x10 data:string -lbl_80537C00 = .data:0x80537C00; // type:object size:0x50 -lbl_80537C50 = .data:0x80537C50; // type:object size:0x30 -lbl_80537C80 = .data:0x80537C80; // type:object size:0x30 -lbl_80537CB0 = .data:0x80537CB0; // type:object size:0x18 -lbl_80537CC8 = .data:0x80537CC8; // type:object size:0x18 -lbl_80537CE0 = .data:0x80537CE0; // type:object size:0x10 -lbl_80537CF0 = .data:0x80537CF0; // type:object size:0x30 -lbl_80537D20 = .data:0x80537D20; // type:object size:0x30 -lbl_80537D50 = .data:0x80537D50; // type:object size:0x18 -lbl_80537D68 = .data:0x80537D68; // type:object size:0x390 -lbl_805380F8 = .data:0x805380F8; // type:object size:0x34 -lbl_8053812C = .data:0x8053812C; // type:object size:0x34 +__vt__17dLytGameOverMgr_c = .data:0x80537C00; // type:object size:0x50 +__vt__56sFStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c> = .data:0x80537C50; // type:object size:0x30 +__vt__86sStateMgr_c<17dLytGameOverMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x80537C80; // type:object size:0x30 +__vt__33sFStateFct_c<17dLytGameOverMgr_c> = .data:0x80537CB0; // type:object size:0x18 +__vt__30sFState_c<17dLytGameOverMgr_c> = .data:0x80537CC8; // type:object size:0x18 +__vt__14dLytGameOver_c = .data:0x80537CE0; // type:object size:0x10 +__vt__53sFStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c> = .data:0x80537CF0; // type:object size:0x30 +__vt__83sStateMgr_c<14dLytGameOver_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x80537D20; // type:object size:0x30 +__vt__30sFStateFct_c<14dLytGameOver_c> = .data:0x80537D50; // type:object size:0x18 +__vt__27sFState_c<14dLytGameOver_c> = .data:0x80537D68; // type:object size:0x390 +__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 @@ -40503,10 +40515,10 @@ lbl_80573B48 = .sdata:0x80573B48; // type:object size:0x8 lbl_80573B50 = .sdata:0x80573B50; // type:object size:0x8 lbl_80573B58 = .sdata:0x80573B58; // type:object size:0x4 data:4byte lbl_80573B5C = .sdata:0x80573B5C; // type:object size:0x4 -lbl_80573B60 = .sdata:0x80573B60; // type:object size:0x8 -lbl_80573B68 = .sdata:0x80573B68; // type:object size:0x8 -lbl_80573B70 = .sdata:0x80573B70; // type:object size:0x8 -lbl_80573B78 = .sdata:0x80573B78; // type:object size:0x8 +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 lbl_80573B88 = .sdata:0x80573B88; // type:object size:0x8 data:string lbl_80573B90 = .sdata:0x80573B90; // type:object size:0x4 data:4byte @@ -41688,9 +41700,9 @@ lbl_80575778 = .sbss:0x80575778; // type:object size:0x4 align:4 data:float lbl_8057577C = .sbss:0x8057577C; // type:object size:0x4 data:4byte sInstance__10dScTitle_c = .sbss:0x80575780; // type:object size:0x4 data:4byte sPreventEmptyFilesTitle__10dScTitle_c = .sbss:0x80575784; // type:object size:0x1 data:byte -lbl_80575785 = .sbss:0x80575785; // type:object size:0x1 -lbl_80575786 = .sbss:0x80575786; // type:object size:0x1 data:byte -lbl_80575787 = .sbss:0x80575787; // type:object size:0x1 data:byte +lbl_80575785__10dScTitle_c = .sbss:0x80575785; // type:object size:0x1 +lbl_80575786__10dScTitle_c = .sbss:0x80575786; // type:object size:0x1 data:byte +lbl_80575787__10dScTitle_c = .sbss:0x80575787; // type:object size:0x1 data:byte CAMERAS = .sbss:0x80575788; // type:object size:0x4 data:4byte LINK__7dAcPy_c = .sbss:0x8057578C; // type:object size:0x4 data:4byte SCRAPPER_PTR = .sbss:0x80575790; // type:object size:0x4 data:4byte @@ -41831,7 +41843,7 @@ 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__14dLytGameOver_c = .sbss:0x80575948; // 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 lbl_80575959 = .sbss:0x80575959; // type:object size:0x1 data:byte diff --git a/include/d/d_fader.h b/include/d/d_fader.h index 43912630..75f92ad6 100644 --- a/include/d/d_fader.h +++ b/include/d/d_fader.h @@ -8,6 +8,13 @@ class dFader_c : public mFader_c { public: + enum FadeType_e { + FADER_BLACK = 0, + FADER_GREY = 1, + FADER_LYT = 2, + FADER_SCREEN = 3, + }; + dFader_c() : mpColorFader(nullptr), mpLytFader(nullptr), mpScreenFader(nullptr), field_0x14(0) {} virtual ~dFader_c(); diff --git a/include/d/d_sc_game.h b/include/d/d_sc_game.h index 69054716..ec04ea82 100644 --- a/include/d/d_sc_game.h +++ b/include/d/d_sc_game.h @@ -3,10 +3,10 @@ #include "common.h" #include "d/a/d_a_base.h" +#include "d/d_camera.h" #include "d/d_dylink.h" #include "d/d_fader.h" #include "d/d_scene.h" -#include "d/d_camera.h" #include "egg/gfx/eggScreen.h" #include "f/f_profile_name.h" #include "m/m2d.h" @@ -130,6 +130,10 @@ public: virtual void deleteReady() override; void triggerExit(s32 room, u16 exitIndex, s32 forcedNight = 2, s32 forcedTrial = 2); + void triggerEntrance( + const char *stageName, u8 roomid, u8 layer, u8 entrance, int forcedNight = SpawnInfo::RETAIN_TOD, int forcedTrial = SpawnInfo::RETAIN_TRIAL, u8 transitionType = dFader_c::FADER_BLACK, + u16 transitionFadeFrames = 15, s8 field0x28 = -1 + ); // void triggerEntrance(const char *stageName, u8 room, ); const LinkReloadInfo &getLinkReloadInfo() const; @@ -152,7 +156,6 @@ public: return sInstance; } - bool setReloadTrigger(fProfile::PROFILE_NAME_e reloadTrigger); void setRespawnInfo(const mVec3_c &linkPos, const mAng3_c &linkRot, bool unk); void setSpawnInfo(u8 roomid, const mVec3_c &pos, mAng rot); @@ -206,13 +209,14 @@ public: return mScreen1.fn_801BBEC0(); } + static bool sCopyFileBToCurrentAfterRespawn; + static bool sDoSomethingWithFileAOnTransition; + static bool sPreventClearingSomeFlag; + protected: static u32 sUpdateFrameCount; static u8 sCurrentLayer; static u8 sReloaderType; - static bool sCopyFileBToCurrentAfterRespawn; - static bool sDoSomethingWithFileAOnTransition; - static bool sPreventClearingSomeFlag; static void someGfxThingCallback(); void somethingWithScreen(); diff --git a/include/d/d_sc_title.h b/include/d/d_sc_title.h index fbb869ab..37bc145c 100644 --- a/include/d/d_sc_title.h +++ b/include/d/d_sc_title.h @@ -15,6 +15,14 @@ public: static dScTitle_c *sInstance; + static void setLbl_80575787(bool v) { + lbl_80575787 = v; + } + + static u8 lbl_80575785; + static u8 lbl_80575786; + static u8 lbl_80575787; + static void loadTitleScreen(u32 params); static void setSomethingSkbRelated(); diff --git a/include/d/lyt/d_lyt_game_over.h b/include/d/lyt/d_lyt_game_over.h index 391f0740..8c88f042 100644 --- a/include/d/lyt/d_lyt_game_over.h +++ b/include/d/lyt/d_lyt_game_over.h @@ -1,19 +1,100 @@ #ifndef D_LYT_GAME_OVER_H #define D_LYT_GAME_OVER_H +#include "common.h" #include "d/d_base.h" +#include "d/lyt/d2d.h" +#include "d/lyt/msg_window/d_lyt_msg_window_select_btn.h" +#include "s/s_State.hpp" +#include "sized_string.h" -class dLytGameOver_c : public dBase_c { +class dLytGameOver_c { public: dLytGameOver_c(); - virtual ~dLytGameOver_c(); + virtual ~dLytGameOver_c() {} - static dLytGameOver_c *GetInstance() { + bool build(); + bool remove(); + bool execute(); + bool draw(); + + bool requestIn(const char *text, s32 p1, s32 p2); + bool requestOut(s32 outType); + + s32 getSelectedOption() const { + return mSelectedOption; + } + + bool isChangingState() const { + return mIsChangingState; + } + + void setField_0x1338(bool v) { + field_0x1338 = v; + } + + +private: + STATE_FUNC_DECLARE(dLytGameOver_c, Init); + STATE_FUNC_DECLARE(dLytGameOver_c, In); + STATE_FUNC_DECLARE(dLytGameOver_c, Wait); + STATE_FUNC_DECLARE(dLytGameOver_c, Out); + + void init(); + + void setAnm(int idx); + void stopAnm(int idx); + void applyText(); + void setupButtons(); + + /* 0x0004 */ UI_STATE_MGR_DECLARE(dLytGameOver_c); + /* 0x0044 */ d2d::ResAccIf_c mResAcc1; + /* 0x03B0 */ d2d::ResAccIf_c mResAcc2; + /* 0x0720 */ d2d::LytBase_c mLyt; + /* 0x07B0 */ d2d::AnmGroup_c mAnm[5]; + /* 0x08F0 */ d2d::SubPaneList mSubpaneList; + /* 0x08FC */ d2d::SubPaneListNode mSubpanes[1]; + /* 0x090C */ dLytMsgWindowSelectBtn_c mSelectBtn; + /* 0x12E0 */ SizedString<0x40> mLabel; + /* 0x1320 */ s32 mVariant; + /* 0x1324 */ s32 mInType; + /* 0x1328 */ s32 mOutType; + /* 0x132C */ s32 mStep; + /* 0x1330 */ s32 mSelectedOption; + /* 0x1334 */ bool mIsVisible; + /* 0x1335 */ bool mIsChangingState; + /* 0x1336 */ bool mInRequest; + /* 0x1337 */ bool mOutRequest; + /* 0x1338 */ bool field_0x1338; +}; + +class dLytGameOverMgr_c : public dBase_c { +public: + dLytGameOverMgr_c(); + virtual ~dLytGameOverMgr_c(); + + int create() override; + int doDelete() override; + int execute() override; + int draw() override; + + static dLytGameOverMgr_c *GetInstance() { return sInstance; } private: - static dLytGameOver_c *sInstance; + STATE_FUNC_DECLARE(dLytGameOverMgr_c, Init); + STATE_FUNC_DECLARE(dLytGameOverMgr_c, FadeOut); + STATE_FUNC_DECLARE(dLytGameOverMgr_c, Select); + + void init(); + + static dLytGameOverMgr_c *sInstance; + + /* 0x0068 */ UI_STATE_MGR_DECLARE(dLytGameOverMgr_c); + /* 0x00A4 */ dLytGameOver_c mMain; + /* 0x13E0 */ s32 mStep; + /* 0x13E4 */ s32 mTimer; }; #endif diff --git a/include/toBeSorted/file_manager.h b/include/toBeSorted/file_manager.h index e80e0f1a..f7cfc629 100644 --- a/include/toBeSorted/file_manager.h +++ b/include/toBeSorted/file_manager.h @@ -174,16 +174,16 @@ public: /* 8000BDD0 */ u16 getHitCountFromEnemy(u8 enemy); /* 8000BE50 */ void setLoadRoomT1_FileB(s16 roomId); - /* 8000BE80 */ s16 getLoadRoomT1_FileB(); + /* 8000BE80 */ u16 getLoadRoomT1_FileB(); /* 8000BE90 */ void setEntranceT1_FileB(u8 entrance); /* 8000BEC0 */ u8 getEntranceT1_FileB(); /* 8000BED0 */ void setAreaT1_FileB(const char *name); /* 8000BF80 */ char *getAreaT1_FileB(); /* 8000C080 */ void setNightT1_FileB(bool night); - /* 8000C0B0 */ bool getNightT1_FileB(); + /* 8000C0B0 */ u8 getNightT1_FileB(); /* 8000C0C0 */ void setEntranceT1LoadFlag_FileB(u8 flag); /* 8000C0F0 */ void setForcedLayerT1_FileB(u8 layer); - /* 8000C120 */ void getForcedLayerT1_FileB(); + /* 8000C120 */ u8 getForcedLayerT1_FileB(); /* 8000C130 */ void setCurrentHealth_FileB(s16 health); /* 8000C160 */ void setHeroname(const wchar_t *name); @@ -208,7 +208,7 @@ public: /* 8000CA00 */ bool getNightT1(); /* 8000CA50 */ void setNightT3(bool night); - /* 8000CA80 */ bool getNightT3(); + /* 8000CA80 */ u8 getNightT3(); /* 8000CAD0 */ bool isNew_FileA(); @@ -358,8 +358,8 @@ public: mSelectedFile = val; } -private: static FileManager *sInstance; +private: }; #endif diff --git a/include/toBeSorted/minigame_mgr.h b/include/toBeSorted/minigame_mgr.h index a74ddbeb..f473974b 100644 --- a/include/toBeSorted/minigame_mgr.h +++ b/include/toBeSorted/minigame_mgr.h @@ -24,6 +24,7 @@ public: static void create(); static void destroy(); static void execute(); + private: MinigameManager() {} virtual ~MinigameManager() {} diff --git a/include/toBeSorted/misc_actor.h b/include/toBeSorted/misc_actor.h index 95f4af98..081734e1 100644 --- a/include/toBeSorted/misc_actor.h +++ b/include/toBeSorted/misc_actor.h @@ -2,5 +2,6 @@ #define MISC_ACTOR_H bool checkIsInSkykeepPuzzle(); +void restoreSkykeepPuzzleFromGlobal(); #endif diff --git a/src/d/d_fader.cpp b/src/d/d_fader.cpp index 287458c1..a725bd03 100644 --- a/src/d/d_fader.cpp +++ b/src/d/d_fader.cpp @@ -36,18 +36,18 @@ bool dFader_c::create() { return false; } - mFadeOutType = 0; - mFadeInType = 0; + mFadeOutType = FADER_BLACK; + mFadeInType = FADER_BLACK; mFadeInFrame = 0x1E; mFadeOutFrame = 0x1E; - setFader(0); + setFader(FADER_BLACK); return true; } bool dFader_c::setFader(s32 fader) { switch (fader) { - case 0: + case FADER_BLACK: if (mFader_c::setFader(mpColorFader)) { if (mpColorFader->getStatus() == mFaderBase_c::FADED_IN) { mpColorFader->setColor(mColor(0, 0, 0, 0xFF)); @@ -55,7 +55,7 @@ bool dFader_c::setFader(s32 fader) { return true; } break; - case 1: + case FADER_GREY: if (mFader_c::setFader(mpColorFader)) { if (mpColorFader->getStatus() == mFaderBase_c::FADED_IN) { mpColorFader->setColor(mFaderColor); @@ -63,7 +63,7 @@ bool dFader_c::setFader(s32 fader) { return true; } break; - case 2: + case FADER_LYT: if (mFader_c::setFader(mpLytFader)) { if (mpLytFader->getStatus() == mFaderBase_c::FADED_IN) { mpLytFader->setColor(mColor(0, 0, 0, 0xFF)); @@ -71,7 +71,7 @@ bool dFader_c::setFader(s32 fader) { return true; } break; - case 3: + case FADER_SCREEN: if (mFader_c::setFader(mpScreenFader)) { if (mpScreenFader->getStatus() == mFaderBase_c::FADED_IN) { mpScreenFader->setColor(mColor(0, 0, 0, 0xFF)); diff --git a/src/d/d_sc_game.cpp b/src/d/d_sc_game.cpp index 10f2c796..9d85e44f 100644 --- a/src/d/d_sc_game.cpp +++ b/src/d/d_sc_game.cpp @@ -2,6 +2,7 @@ #include "common.h" #include "d/d_base.h" +#include "d/d_fader.h" #include "d/d_gfx.h" #include "d/d_stage_mgr.h" #include "d/flag/storyflag_manager.h" @@ -104,7 +105,7 @@ void dScGame_c::deleteReady() { sFPhaseBase::sFPhaseState dScGame_c::cb1() { mFader.create(); mFader.setFrames(15, 15); - mFader.setTypes(1, 1); + mFader.setTypes(dFader_c::FADER_GREY, dFader_c::FADER_GREY); mFader.initForLyt(); mRelCtrl.do_link(); mLayoutCtrl.load(nullptr); diff --git a/src/d/d_sc_title.cpp b/src/d/d_sc_title.cpp index 91cede66..3206a5a7 100644 --- a/src/d/d_sc_title.cpp +++ b/src/d/d_sc_title.cpp @@ -2,6 +2,7 @@ #include "common.h" #include "d/d_dvd_unk.h" +#include "d/d_fader.h" #include "d/d_heap.h" #include "d/d_message.h" #include "d/d_pad.h" @@ -24,11 +25,10 @@ SPECIAL_BASE_PROFILE(TITLE, dScTitle_c, fProfile::TITLE, 0, 0); dScTitle_c *dScTitle_c::sInstance; bool dScTitle_c::sPreventEmptyFilesTitle; -extern "C" { -u8 lbl_80575785; -u8 lbl_80575786; -u8 lbl_80575787; -} + +u8 dScTitle_c::lbl_80575785; +u8 dScTitle_c::lbl_80575786; +u8 dScTitle_c::lbl_80575787; static u16 sModulesToLoad[] = { // ??? not sure what these correspond to @@ -159,11 +159,11 @@ void dScTitle_c::loadTitleScreen(u32 params) { params = 2; } TITLE_SCREEN_CHANGE = params; - setRootActor(fProfile::TITLE, params, 0, 0); + setRootActor(fProfile::TITLE, params, dFader_c::FADER_BLACK, dFader_c::FADER_BLACK); if (checkAllSaveFilesEmpty() == true) { - actuallyTriggerEntrance("F000", 0, 26, 55, 0, 0, 0, 15, -1); + actuallyTriggerEntrance("F000", 0, 26, 55, 0, 0, dFader_c::FADER_BLACK, 15, -1); } else { - actuallyTriggerEntrance("F000", 0, 28, 48, 0, 0, 0, 15, -1); + actuallyTriggerEntrance("F000", 0, 28, 48, 0, 0, dFader_c::FADER_BLACK, 15, -1); } fn_80362150(ENEMY_SOUND_MGR, 30); } diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index 0d26e2b5..684824f7 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -4,6 +4,7 @@ #include "d/col/bg/d_bg_s.h" #include "d/d_base.h" #include "d/d_bzs_types.h" +#include "d/d_fader.h" #include "d/d_room.h" #include "d/d_rumble.h" #include "d/d_sc_game.h" @@ -124,7 +125,7 @@ sFPhaseBase::sFPhaseState dStage_c::createRooms() { // TODO // if (dScGame_c::sCo) mFader.create(); - mFader.setTypes(1, 1); + mFader.setTypes(dFader_c::FADER_GREY, dFader_c::FADER_GREY); mFader.setFadeInFrame(1); mFader.fadeIn(); mFader.calc(); diff --git a/src/d/lyt/d_lyt_game_over.cpp b/src/d/lyt/d_lyt_game_over.cpp new file mode 100644 index 00000000..d443bfef --- /dev/null +++ b/src/d/lyt/d_lyt_game_over.cpp @@ -0,0 +1,584 @@ +#include "d/lyt/d_lyt_game_over.h" + +#include "common.h" +#include "d/d_base.h" +#include "d/d_fader.h" +#include "d/d_message.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/lyt/d2d.h" +#include "d/lyt/d_window.h" +#include "d/snd/d_snd_wzsound.h" +#include "f/f_base.h" +#include "nw4r/lyt/lyt_group.h" +#include "toBeSorted/arc_managers/layout_arc_manager.h" +#include "toBeSorted/file_manager.h" +#include "toBeSorted/minigame_mgr.h" +#include "toBeSorted/misc_actor.h" +#include "toBeSorted/music_mgrs.h" + +STATE_DEFINE(dLytGameOver_c, Init); +STATE_DEFINE(dLytGameOver_c, In); +STATE_DEFINE(dLytGameOver_c, Wait); +STATE_DEFINE(dLytGameOver_c, Out); + +static const d2d::LytBrlanMapping brlanMap2[] = { + {"gameOver_02_gameOver.brlan", "G_gameOver_00"}, + { "gameOver_02_loop.brlan", "G_loop_00"}, + { "gameOver_02_textOut.brlan", "G_textInOut_00"}, + { "gameOver_02_textIn.brlan", "G_textInOut_00"}, + { "gameOver_02_fade.brlan", "G_fade_00"}, +}; + +static const d2d::LytBrlanMapping brlanMap3[] = { + {"gameOver_03_gameOver.brlan", "G_gameOver_00"}, + { "gameOver_03_loop.brlan", "G_loop_00"}, + { "gameOver_03_textOut.brlan", "G_textInOut_00"}, + { "gameOver_03_textIn.brlan", "G_textInOut_00"}, + { "gameOver_03_fade.brlan", "G_fade_00"}, +}; + +static const d2d::LytBrlanMapping brlanMap1[] = { + {"gameOver_01_gameOver.brlan", "G_gameOver_00"}, + { "gameOver_01_loop.brlan", "G_loop_00"}, + { "gameOver_01_textOut.brlan", "G_textInOut_00"}, + { "gameOver_01_textIn.brlan", "G_textInOut_00"}, + { "gameOver_01_fade.brlan", "G_fade_00"}, +}; + +#define GAME_OVER_ANIM_GAME_OVER 0 +#define GAME_OVER_ANIM_LOOP 1 +#define GAME_OVER_ANIM_TEXT_OUT 2 +#define GAME_OVER_ANIM_TEXT_IN 3 +#define GAME_OVER_ANIM_TEXT_FADE 4 + +#define GAME_OVER_NUM_ANIMS 5 + +static const char *sGroupName = "G_ref_00"; + +dLytGameOver_c::dLytGameOver_c() : mStateMgr(*this) { + init(); +} + +extern "C" u8 fn_80054F30(); + +bool dLytGameOver_c::build() { + u8 lang = fn_80054F30(); + s32 variant; + if (lang == 3) { + variant = 1; + } else if (lang == 4) { + variant = 2; + } else { + variant = 0; + } + + if (variant == 0) { + void *data = LayoutArcManager::GetInstance()->getLoadedData("gameOver_01"); + mResAcc1.attach(data, ""); + } else if (variant == 1) { + void *data = LayoutArcManager::GetInstance()->getLoadedData("gameOver_02"); + mResAcc1.attach(data, ""); + } else { + void *data = LayoutArcManager::GetInstance()->getLoadedData("gameOver_03"); + mResAcc1.attach(data, ""); + } + void *data2 = LayoutArcManager::GetInstance()->getLoadedData("System2D"); + mResAcc2.attach(data2, ""); + + switch (variant) { + case 1: { + mLyt.setResAcc(&mResAcc1); + mLyt.build("gameOver_02.brlyt", nullptr); + for (int i = 0; i < GAME_OVER_NUM_ANIMS; i++) { + mAnm[i].init(brlanMap2[i].mFile, &mResAcc1, mLyt.getLayout(), brlanMap2[i].mName); + } + break; + } + case 2: { + mLyt.setResAcc(&mResAcc1); + mLyt.build("gameOver_03.brlyt", nullptr); + for (int i = 0; i < GAME_OVER_NUM_ANIMS; i++) { + mAnm[i].init(brlanMap3[i].mFile, &mResAcc1, mLyt.getLayout(), brlanMap3[i].mName); + } + break; + } + default: { + mLyt.setResAcc(&mResAcc1); + mLyt.build("gameOver_01.brlyt", nullptr); + for (int i = 0; i < GAME_OVER_NUM_ANIMS; i++) { + mAnm[i].init(brlanMap1[i].mFile, &mResAcc1, mLyt.getLayout(), brlanMap1[i].mName); + } + break; + } + } + + mLyt.setPriority(0x8A); + + for (int i = 0; i < 1; i++) { + mSubpanes[i].mpLytPane = &mSelectBtn; + mSelectBtn.build(&mResAcc2); + mSubpaneList.PushBack(&mSubpanes[i]); + } + + if (mLyt.getLayout()->GetGroupContainer() != nullptr) { + nw4r::lyt::Group *g = mLyt.getLayout()->GetGroupContainer()->FindGroupByName(sGroupName); + if (g != nullptr) { + d2d::dSubPane::linkMeters(g, &mSubpaneList); + } + } + + mSelectBtn.setField_0x9C4(1); + mSelectBtn.setField_0x99C(1); + mSelectBtn.setField_0x9A0(2); + + mStateMgr.changeState(StateID_Init); + + field_0x1338 = true; + + return true; +} + +bool dLytGameOver_c::remove() { + for (d2d::SubPaneList::Iterator it = mSubpaneList.GetBeginIter(); it != mSubpaneList.GetEndIter(); ++it) { + d2d::dSubPane *subPane = it->mpLytPane; + if (subPane != nullptr) { + nw4r::lyt::Pane *parent = subPane->getPane()->GetParent(); + parent->RemoveChild(subPane->getPane()); + } + } + + for (int i = 0; i < 1; i++) { + mSubpanes[i].mpLytPane->remove(); + } + + mLyt.unbindAnims(); + + for (int i = 0; i < GAME_OVER_NUM_ANIMS; i++) { + mAnm[i].remove(); + } + + mResAcc2.detach(); + mResAcc1.detach(); + + dBase_c::s_NextExecuteControlFlags &= ~0x200; + dBase_c::s_DrawControlFlags &= ~0x200; + + return true; +} + +bool dLytGameOver_c::execute() { + mStateMgr.executeState(); + mLyt.calc(); + for (int i = 0; i < 1; i++) { + mSubpanes[i].mpLytPane->execute(); + } + return true; +} + +bool dLytGameOver_c::draw() { + if (mIsVisible != true) { + return true; + } + mLyt.addToDrawList(); + return true; +} + +bool dLytGameOver_c::requestIn(const char *label, s32 p1, s32 p2) { + mLabel = label; + mVariant = p1; + mInType = p2; + mInRequest = true; + return true; +} + +bool dLytGameOver_c::requestOut(s32 type) { + if (!mStateMgr.getStateID()->isEqual(StateID_Wait)) { + return false; + } + + mOutType = type; + mOutRequest = true; + + return true; +} + +void dLytGameOver_c::initializeState_Init() { + init(); +} +void dLytGameOver_c::executeState_Init() { + if (mInRequest == true) { + mInRequest = false; + mStateMgr.changeState(StateID_In); + } +} +void dLytGameOver_c::finalizeState_Init() {} + +void dLytGameOver_c::initializeState_In() { + mStep = 0; + mIsVisible = true; + u32 anim = GAME_OVER_ANIM_TEXT_IN; + if (mInType == 0) { + anim = GAME_OVER_ANIM_GAME_OVER; + } + setAnm(anim); + applyText(); + field_0x1338 = 0; +} +void dLytGameOver_c::executeState_In() { + u32 anim = GAME_OVER_ANIM_TEXT_IN; + if (mInType == 0) { + anim = GAME_OVER_ANIM_GAME_OVER; + } + + d2d::AnmGroup_c &anm = mAnm[anim]; + if (anm.isEndReached() == true) { + stopAnm(anim); + setAnm(GAME_OVER_ANIM_LOOP); + mStateMgr.changeState(StateID_Wait); + setupButtons(); + } + anm.play(); +} +void dLytGameOver_c::finalizeState_In() { + mSelectBtn.getPane()->SetVisible(true); +} + +void dLytGameOver_c::initializeState_Wait() { + mStep = 0; +} +void dLytGameOver_c::executeState_Wait() { + d2d::AnmGroup_c &anm = mAnm[GAME_OVER_ANIM_LOOP]; + anm.play(); + switch (mStep) { + case 0: { + if (mSelectBtn.getField_0x9B4() >= 0) { + mSelectedOption = mSelectBtn.getField_0x9B4(); + mStep += 1; + mIsChangingState = true; + } + break; + } + case 1: { + if (mStep == 1 && mOutRequest == true) { + mIsChangingState = false; + mOutRequest = false; + mStateMgr.changeState(StateID_Out); + } + break; + } + } +} +void dLytGameOver_c::finalizeState_Wait() {} + +void dLytGameOver_c::initializeState_Out() { + mStep = 0; + if (mOutType == 0) { + setAnm(GAME_OVER_ANIM_TEXT_OUT); + } else { + setAnm(GAME_OVER_ANIM_TEXT_FADE); + } +} +void dLytGameOver_c::executeState_Out() { + u32 anim = GAME_OVER_ANIM_TEXT_OUT; + if (mOutType != 0) { + anim = GAME_OVER_ANIM_TEXT_FADE; + } + d2d::AnmGroup_c &anm = mAnm[anim]; + switch (mStep) { + case 0: { + if (anm.isEndReached() == true) { + stopAnm(GAME_OVER_ANIM_TEXT_OUT); + stopAnm(GAME_OVER_ANIM_LOOP); + mIsVisible = false; + mIsChangingState = true; + mSelectBtn.getPane()->SetVisible(false); + mStep = 1; + } + break; + } + case 1: { + mStateMgr.changeState(StateID_Init); + break; + } + } + anm.play(); +} +void dLytGameOver_c::finalizeState_Out() {} + +void dLytGameOver_c::init() { + mIsVisible = false; + mIsChangingState = false; + mInRequest = false; + mOutRequest = false; + mSelectedOption = 0; +} + +void dLytGameOver_c::setAnm(int idx) { + d2d::AnmGroup_c &anm = mAnm[idx]; + anm.bind(false); + anm.setFrame(0.0f); +} + +void dLytGameOver_c::stopAnm(int idx) { + d2d::AnmGroup_c &anm = mAnm[idx]; + anm.unbind(); +} + +void dLytGameOver_c::applyText() { + const wchar_t *text = dMessage_c::getTextMessageByLabel(mLabel, true, nullptr, 0); + mLyt.getTextBox("T_select_00")->setTextWithGlobalTextProcessor(text); + mLyt.getTextBox("T_selectS_00")->setTextWithGlobalTextProcessor(text); + + dWindow_c *window = mLyt.getWindow("W_bgP_00"); + window->UpdateSize(mLyt.getSizeBoxInWindow("W_bgP_00"), 32.0f); +} + +void dLytGameOver_c::setupButtons() { + s32 numOptions = 2; + if (mVariant == 1) { + numOptions = 3; + } else if (mVariant == 2) { + numOptions = 4; + } + + for (int i = 0; i < numOptions; i++) { + const wchar_t *buf = dMessage_c::getGlobalTagProcessor()->getBuf(i); + mSelectBtn.getSelectTextBox(i, 0)->setTextWithGlobalTextProcessor(buf); + mSelectBtn.getSelectTextBox(i, 1)->setTextWithGlobalTextProcessor(buf); + } + mSelectBtn.setTagProcessor(dMessage_c::getGlobalTagProcessor()); + u32 tmp = dMessage_c::getGlobalTagProcessor()->getField_0x828(); + mSelectBtn.setField_0x9BC(tmp); + mSelectBtn.setField_0x990(tmp); + mSelectBtn.fn_8011E5D0(numOptions, true); +} + +SPECIAL_BASE_PROFILE(LYT_GAMEOVER_MGR, dLytGameOverMgr_c, fProfile::LYT_GAMEOVER_MGR, 0x02AC, 0x0201); + +STATE_DEFINE(dLytGameOverMgr_c, Init); +STATE_DEFINE(dLytGameOverMgr_c, FadeOut); +STATE_DEFINE(dLytGameOverMgr_c, Select); + +dLytGameOverMgr_c::dLytGameOverMgr_c() : mStateMgr(*this) { + sInstance = this; + init(); +} + +dLytGameOverMgr_c::~dLytGameOverMgr_c() { + sInstance = nullptr; +} + +int dLytGameOverMgr_c::create() { + mMain.build(); + mStateMgr.changeState(StateID_Init); + return SUCCEEDED; +} + +int dLytGameOverMgr_c::doDelete() { + mMain.remove(); + return SUCCEEDED; +} + +int dLytGameOverMgr_c::execute() { + mStateMgr.executeState(); + return SUCCEEDED; +} + +int dLytGameOverMgr_c::draw() { + mMain.draw(); + return SUCCEEDED; +} + +void dLytGameOverMgr_c::initializeState_Init() {} +void dLytGameOverMgr_c::executeState_Init() { + mStateMgr.changeState(StateID_FadeOut); +} +void dLytGameOverMgr_c::finalizeState_Init() {} + +void dLytGameOverMgr_c::initializeState_FadeOut() { + dStage_c::GetInstance()->fadeOut(dFader_c::FADER_BLACK, 40); +} +void dLytGameOverMgr_c::executeState_FadeOut() { + if (dStage_c::GetInstance()->isFadedOut() == true) { + // "Do you want to continue adventuring? [1]Continue[2]Quit" + if (mMain.requestIn("SYS_GAMEOVER_01", 0, 0)) { + mMain.setField_0x1338(true); + mStateMgr.changeState(StateID_Select); + AnotherSoundMgr__playSound(FANFARE_SOUND_MGR, FAN_GAMEOVER); + } + } +} +void dLytGameOverMgr_c::finalizeState_FadeOut() {} + +void dLytGameOverMgr_c::initializeState_Select() { + mStep = 0; + mTimer = 0; +} +void dLytGameOverMgr_c::executeState_Select() { + // TODO - regswaps https://decomp.me/scratch/IPWjo + // FileManager::GetInstance() causes even more regswaps + FileManager *fileManager = FileManager::sInstance; + + // I'm not sure if all these were declared here - it'd make + // sense for a switch statement... + const char *stage; + u8 entrance; + u16 room; + u8 layer; + bool isSpecialMinigame; + + switch (mStep) { + case 0: { + if (mTimer < 20) { + mTimer++; + if (mTimer == 20) { + dBase_c::s_NextExecuteControlFlags |= 1; + dBase_c::s_DrawControlFlags |= 1; + } + } + if (mMain.isChangingState() == true) { + if (mMain.getSelectedOption() == 0) { + mStep = 20; + } else { + mStep = 1; + } + } + break; + } + case 1: + case 10: { + if (mMain.requestOut(0) == true) { + mStep++; + } + break; + } + case 2: + case 11: { + if (mMain.isChangingState() == true) { + mStep++; + } + break; + } + case 3: { + // "Are you sure you want to quit? [1]Quit[2-]Cancel" + if (mMain.requestIn("SYS_GAMEOVER_03", 0, 1)) { + mStep++; + } + break; + } + case 4: { + if (mMain.isChangingState() == true) { + if (mMain.getSelectedOption() == 0) { + mStep++; + } else { + mStep = 10; + } + } + break; + } + case 5: + case 20: { + if (mMain.requestOut(1) == true) { + mStep++; + } + break; + } + case 6: { + dScTitle_c::loadTitleScreen(1); + mStep = 100; + // break; + } + case 12: { + // "Do you want to continue adventuring? [1]Continue[2]Quit" + if (mMain.requestIn("SYS_GAMEOVER_01", 0, 1)) { + mStep = 0; + } + break; + } + case 21: { + if (mMain.isChangingState() == true) { + dScTitle_c::setLbl_80575787(true); + dScGame_c::sPreventClearingSomeFlag = true; + // Maybe an inline? Would have to use the inverse condition and then negate... + isSpecialMinigame = false; + if (MinigameManager::isInMinigameState(MinigameManager::TRIAL_TIME_ATTACK) || + MinigameManager::isInMinigameState(MinigameManager::BOSS_RUSH)) { + isSpecialMinigame = true; + } + + if (params != 0 && !isSpecialMinigame) { + dScGame_c::setReloaderType(1); + dScGame_c::sCopyFileBToCurrentAfterRespawn = true; + entrance = fileManager->getEntranceT1_FileB(); + room = fileManager->getLoadRoomT1_FileB(); + layer = fileManager->getForcedLayerT1_FileB(); + // TODO document this logic + if (dScGame_c::isCurrentStage("F403") && layer == 2) { + layer = 7; + } + stage = fileManager->getAreaT1_FileB(); + // TODO - this is weird, why is dScGame_c::sInstance being loaded first? + // inlines? But we're using the fileManager from above for this call... + // Probably the reason for the regswaps... + dScGame_c::GetInstance()->triggerEntrance( + stage, room, layer, entrance, fileManager->getNightT1_FileB() + ); + } else { + dScGame_c::setReloaderType(3); + entrance = fileManager->getEntranceT3(); + room = fileManager->getLoadRoomT3(); + layer = fileManager->getForcedLayerT3(); + // TODO - document this logic + if (dScGame_c::isCurrentStage("B400") && !isSpecialMinigame) { + dScGame_c::setReloaderType(4); + entrance = 8; + room = 1; + layer = 3; + } + stage = fileManager->getAreaT3(); + // TODO - same as above + dScGame_c::GetInstance()->triggerEntrance(stage, room, layer, entrance, fileManager->getNightT3()); + } + + // TODO - document this logic + if (dScGame_c::isCurrentStage("F401")) { + if (fileManager->getCurrentHealth() < 24) { + fileManager->setCurrentHealth(24); + } + } else { + fileManager->setCurrentHealth(24); + } + + // TODO - document this logic + if (dScGame_c::isCurrentStage("F302")) { + // "Minecart Escort related" + SceneflagManager::sInstance->unsetTempflag_i(0x3F, 0); + } + restoreSkykeepPuzzleFromGlobal(); + mStep = 100; + } + break; + } + case 100: { + dBase_c::s_NextExecuteControlFlags &= ~0x1; + dBase_c::s_DrawControlFlags &= ~0x1; + + dBase_c::s_NextExecuteControlFlags |= 0x200; + dBase_c::s_DrawControlFlags |= 0x200; + + mStep++; + break; + } + } + + mMain.execute(); +} +void dLytGameOverMgr_c::finalizeState_Select() {} + +void dLytGameOverMgr_c::init() { + mStep = 0; + mTimer = 0; +} diff --git a/src/d/lyt/d_lyt_wipe.cpp b/src/d/lyt/d_lyt_wipe.cpp index 5a564dce..5571e1a8 100644 --- a/src/d/lyt/d_lyt_wipe.cpp +++ b/src/d/lyt/d_lyt_wipe.cpp @@ -1,6 +1,7 @@ #include "d/lyt/d_lyt_wipe.h" #include "common.h" +#include "d/d_fader.h" #include "d/d_stage.h" #include "d/lyt/d2d.h" #include "toBeSorted/arc_managers/layout_arc_manager.h" @@ -148,7 +149,7 @@ void dLytWipe_c::executeState_None() { mIsSettled = false; // State IN fades OUT, because I guess the fader fades the scene out, // which means Wipe is In - if (dStage_c::GetInstance()->fadeOut(2, 16)) { + if (dStage_c::GetInstance()->fadeOut(dFader_c::FADER_LYT, 16)) { mStateMgr.changeState(StateID_In); mWantsIn = false; mVisible = true; @@ -207,7 +208,7 @@ void dLytWipe_c::executeState_Out() { dStage_c::GetInstance()->forceFadeOut(); mFadeDelay--; if (mFadeDelay == 0) { - dStage_c::GetInstance()->fadeIn(2, 16); + dStage_c::GetInstance()->fadeIn(dFader_c::FADER_LYT, 16); mMain.gotoNone(); mTransitionStage = 2; } diff --git a/src/d/lyt/meter/d_lyt_meter_heart.cpp b/src/d/lyt/meter/d_lyt_meter_heart.cpp index 74e5fc6e..ed22aed2 100644 --- a/src/d/lyt/meter/d_lyt_meter_heart.cpp +++ b/src/d/lyt/meter/d_lyt_meter_heart.cpp @@ -322,7 +322,7 @@ void dLytMeterHeart_c::executeInternal() { mStoredHealth = mStoredHealth + 1; if (mpAlphaPane->IsVisible() && mpAlphaPane->GetGlobalAlpha() != 0 && mStoredHealth % 4 == 0 && (!(dScGame_c::currentSpawnInfo.stageName == "F406") || dScGame_c::currentSpawnInfo.layer != 13) && - dLytGameOver_c::GetInstance() == nullptr) { + dLytGameOverMgr_c::GetInstance() == nullptr) { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_HP_GAUGE_UP); } } else { diff --git a/src/toBeSorted/file_manager.cpp b/src/toBeSorted/file_manager.cpp index 19a3a055..9c74c9f7 100644 --- a/src/toBeSorted/file_manager.cpp +++ b/src/toBeSorted/file_manager.cpp @@ -199,16 +199,16 @@ u16 *FileManager::getStoryFlagsMut() { /* 8000BDD0 */ u16 FileManager::getHitCountFromEnemy(u8 enemy) {} /* 8000BE50 */ void FileManager::setLoadRoomT1_FileB(s16 roomId) {} -/* 8000BE80 */ s16 FileManager::getLoadRoomT1_FileB() {} +/* 8000BE80 */ u16 FileManager::getLoadRoomT1_FileB() {} /* 8000BE90 */ void FileManager::setEntranceT1_FileB(u8 entrance) {} /* 8000BEC0 */ u8 FileManager::getEntranceT1_FileB() {} /* 8000BED0 */ void FileManager::setAreaT1_FileB(const char *name) {} /* 8000BF80 */ char *FileManager::getAreaT1_FileB() {} /* 8000C080 */ void FileManager::setNightT1_FileB(bool night) {} -/* 8000C0B0 */ bool FileManager::getNightT1_FileB() {} +/* 8000C0B0 */ u8 FileManager::getNightT1_FileB() {} /* 8000C0C0 */ void FileManager::setEntranceT1LoadFlag_FileB(u8 flag) {} /* 8000C0F0 */ void FileManager::setForcedLayerT1_FileB(u8 layer) {} -/* 8000C120 */ void FileManager::getForcedLayerT1_FileB() {} +/* 8000C120 */ u8 FileManager::getForcedLayerT1_FileB() {} /* 8000C130 */ void FileManager::setCurrentHealth_FileB(s16 health) {} /* 8000C160 */ void FileManager::setHeroname(const wchar_t *name) {} @@ -233,7 +233,7 @@ u16 *FileManager::getStoryFlagsMut() { /* 8000CA00 */ bool FileManager::getNightT1() {} /* 8000CA50 */ void FileManager::setNightT3(bool night) {} -/* 8000CA80 */ bool FileManager::getNightT3() {} +/* 8000CA80 */ u8 FileManager::getNightT3() {} /* 8000CAD0 */ bool FileManager::isNew_FileA() {}