diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 4f1d8943..5fe4e35b 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -619,15 +619,57 @@ d/lyt/d_screen_fader.cpp: .data start:0x80528D68 end:0x80528D90 .sdata2 start:0x8057ABE0 end:0x8057AC08 +d/a/d_a_fish_mgr_base.cpp: + .text start:0x8018B880 end:0x8018BFC8 + .ctors start:0x804DB7E4 end:0x804DB7E8 + +d/a/d_a_fish_base.cpp: + .text start:0x8018BFD0 end:0x8018E378 + .ctors start:0x804DB7E8 end:0x804DB7EC + d/a/d_a_insect.cpp: .text start:0x8018F190 end:0x80190710 .data start:0x8052ABD8 end:0x8052ACC0 .sdata2 start:0x8057ADD8 end:0x8057AE30 +d/a/d_a_salbage_obj.cpp: + .text start:0x80190AB0 end:0x80192AF8 + .ctors start:0x804DB7EC end:0x804DB7F0 + +d/a/d_a_salbage_npc.cpp: + .text start:0x80192B00 end:0x80194080 + .ctors start:0x804DB7F0 end:0x804DB7F4 + d/tg/d_t_weather.cpp: .text start:0x801A65D0 end:0x801AF7D8 .ctors start:0x804DB804 end:0x804DB808 +d/d_room_mgr.cpp: + .text start:0x801B32A0 end:0x801B5BC8 + .ctors start:0x804DB80C end:0x804DB810 + +d/d_room.cpp: + .text start:0x801B5C80 end:0x801B84D8 + .ctors start:0x804DB810 end:0x804DB814 + +d/d_sc_title.cpp: + .text start:0x801B9230 end:0x801BA3A0 + .ctors start:0x804DB818 end:0x804DB81C + .data start:0x8052E438 end:0x8052E5F8 + .sdata start:0x805733D0 end:0x805733E8 + .sbss start:0x80575780 end:0x80575788 + .sdata2 start:0x8057B580 end:0x8057B588 + .bss start:0x805B3760 end:0x805B37E0 + +d/d_sc_game.cpp: + .text start:0x801BA3A0 end:0x801BC6B8 + .ctors start:0x804DB81C end:0x804DB820 + .data start:0x8052E5F8 end:0x8052E860 + .sdata start:0x805733E8 end:0x80573430 + .sbss start:0x80575788 end:0x805757A8 + .sdata2 start:0x8057B588 end:0x8057B5A8 + .bss start:0x805B37E0 end:0x805B38B8 + d/d_cs_base.cpp: .text start:0x801BC6C0 end:0x801BD250 .data start:0x8052E860 end:0x8052E968 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index dde4f160..cfac4d4c 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -427,14 +427,14 @@ getFileB__11FileManagerFv = .text:0x80011270; // type:function size:0x8 calcFileCRC__11FileManagerFPCvUl = .text:0x80011280; // type:function size:0xC updateEmptyFiles__11FileManagerFv = .text:0x80011290; // type:function size:0x34 updateEmptyFileFlags__11FileManagerFv = .text:0x800112D0; // type:function size:0x9C -isFileEmpty__11FileManagerFi = .text:0x80011370; // type:function size:0x20 +isFileEmpty__11FileManagerFUc = .text:0x80011370; // type:function size:0x20 isFileDirty__11FileManagerFi = .text:0x80011390; // type:function size:0x20 get_0xA84C__11FileManagerFv = .text:0x800113B0; // type:function size:0xC checkRegionCode__11FileManagerFv = .text:0x800113C0; // type:function size:0x78 checkFileCRC__11FileManagerFUc = .text:0x80011440; // type:function size:0x50 isFileInactive__11FileManagerCFv = .text:0x80011490; // type:function size:0x6C setPlayerInfoFileA__11FileManagerFv = .text:0x80011500; // type:function size:0xE0 -setT3Info__11FileManagerFP7mVec3_cP7mAng3_c = .text:0x800115E0; // type:function size:0xD8 +setT3Info__11FileManagerFRC7mVec3_cRC7mAng3_c = .text:0x800115E0; // type:function size:0xD8 getRegionVersion__11FileManagerFPc = .text:0x800116C0; // type:function size:0x28 __sinit_\file_manager_cpp = .text:0x800116F0; // type:function size:0x3C scope:local fn_80011730 = .text:0x80011730; // type:function size:0x2C @@ -2832,7 +2832,7 @@ EGG__ConfigurationData__onEndFrame = .text:0x80064430; // type:function size:0x4 dSys_c__setBlack = .text:0x80064440; // type:function size:0x80 setFrameRate__4dSysFUl = .text:0x800644C0; // type:function size:0x10 dSys_c__getFrameRate = .text:0x800644D0; // type:function size:0x10 -dSys_c__setClearColor = .text:0x800644E0; // type:function size:0x60 +setClearColor__4dSysF6mColor = .text:0x800644E0; // type:function size:0x60 dSys_c__getClearColor = .text:0x80064540; // type:function size:0x14 dSys_c__create = .text:0x80064560; // type:function size:0x3BC setPosParam__Q23EGG14CoreControllerFff = .text:0x80064920; // type:function size:0x8 @@ -2980,7 +2980,7 @@ fn_80068E50 = .text:0x80068E50; // type:function size:0x4 fn_80068E60 = .text:0x80068E60; // type:function size:0x8 fn_80068E70 = .text:0x80068E70; // type:function size:0xC fn_80068E80 = .text:0x80068E80; // type:function size:0x6C -fn_80068EF0 = .text:0x80068EF0; // type:function size:0xC0 +fn_80067EF0__16ReloadColorFaderFl = .text:0x80068EF0; // type:function size:0xC0 fn_80068FB0 = .text:0x80068FB0; // type:function size:0x20 __ct__22CurrentStageArcManagerFv = .text:0x80068FD0; // type:function size:0x54 __dt__22CurrentStageArcManagerFv = .text:0x80069030; // type:function size:0x64 @@ -3034,11 +3034,11 @@ decrement__16LayoutArcManagerFPCc = .text:0x8006A220; // type:function size:0x30 getData__16LayoutArcManagerFPCcPCc = .text:0x8006A250; // type:function size:0x8 getLoadedData__16LayoutArcManagerFPCc = .text:0x8006A260; // type:function size:0x8 create__16LayoutArcManagerFPQ23EGG4Heap = .text:0x8006A270; // type:function size:0x64 -fn_8006A2E0 = .text:0x8006A2E0; // type:function size:0x6C -fn_8006A350 = .text:0x8006A350; // type:function size:0xC -fn_8006A360 = .text:0x8006A360; // type:function size:0x88 +__dt__16LayoutArcControlFv = .text:0x8006A2E0; // type:function size:0x6C +set__16LayoutArcControlFPCPCcl = .text:0x8006A350; // type:function size:0xC +load__16LayoutArcControlFPQ23EGG4Heap = .text:0x8006A360; // type:function size:0x88 fn_8006A3F0 = .text:0x8006A3F0; // type:function size:0x88 -fn_8006A480 = .text:0x8006A480; // type:function size:0xC4 +release__16LayoutArcControlFv = .text:0x8006A480; // type:function size:0xC4 getActorInfoForObjName = .text:0x8006A550; // type:function size:0x98 getActorIdForObjName = .text:0x8006A5F0; // type:function size:0x34 getActorIdForObjName2 = .text:0x8006A630; // type:function size:0x34 @@ -3628,12 +3628,12 @@ debugPrint10 = .text:0x800A50D0; // type:function size:0x50 fn_800A5120 = .text:0x800A5120; // type:function size:0x10 fn_800A5130 = .text:0x800A5130; // type:function size:0x10 fn_800A5140 = .text:0x800A5140; // type:function size:0x18 -fn_800A5160 = .text:0x800A5160; // type:function size:0x50 -fn_800A51B0 = .text:0x800A51B0; // type:function size:0x44 +create__15MinigameManagerFv = .text:0x800A5160; // type:function size:0x50 +destroy__15MinigameManagerFv = .text:0x800A51B0; // type:function size:0x44 fn_800A5200 = .text:0x800A5200; // type:function size:0x40 -fn_800A5240 = .text:0x800A5240; // type:function size:0x30 +execute__15MinigameManagerFv = .text:0x800A5240; // type:function size:0x30 isSpecialMinigameState1 = .text:0x800A5270; // type:function size:0x2C -isInSpecialMinigameState = .text:0x800A52A0; // type:function size:0x28 +isInMinigameState__15MinigameManagerFQ215MinigameManager8Minigame = .text:0x800A52A0; // type:function size:0x28 setNextStoredSpecialMinigameState = .text:0x800A52D0; // type:function size:0x54 endSpecialMinigameState = .text:0x800A5330; // type:function size:0x50 fn_800A5380 = .text:0x800A5380; // type:function size:0x3C @@ -4745,7 +4745,7 @@ fn_800D5350 = .text:0x800D5350; // type:function size:0x30 fn_800D5380 = .text:0x800D5380; // type:function size:0x44 fn_800D53D0 = .text:0x800D53D0; // type:function size:0x50 fn_800D5420 = .text:0x800D5420; // type:function size:0x114 -isSilentRealmModeButNotSkykeep = .text:0x800D5540; // type:function size:0x4C +isSilentRealm__11dLytMeter_cFv = .text:0x800D5540; // type:function size:0x4C fn_800D5590 = .text:0x800D5590; // type:function size:0x98 fn_800D5630 = .text:0x800D5630; // type:function size:0x18 fn_800D5650 = .text:0x800D5650; // type:function size:0x24 @@ -5545,7 +5545,7 @@ finalizeState_Active__19dLytMeterSmallKey_cFv = .text:0x800E3670; // type:functi initializeState_Off__19dLytMeterSmallKey_cFv = .text:0x800E3680; // type:function size:0x48 executeState_Off__19dLytMeterSmallKey_cFv = .text:0x800E36D0; // type:function size:0x78 finalizeState_Off__19dLytMeterSmallKey_cFv = .text:0x800E3750; // type:function size:0x4 -LytMeterSmallKey__init = .text:0x800E3760; // type:function size:0x230 +build__19dLytMeterSmallKey_cFPQ23d2d10ResAccIf_c = .text:0x800E3760; // type:function size:0x230 remove__19dLytMeterSmallKey_cFv = .text:0x800E3990; // type:function size:0x58 fn_800E39F0 = .text:0x800E39F0; // type:function size:0x224 draw__19dLytMeterSmallKey_cFv = .text:0x800E3C20; // type:function size:0x28 @@ -10568,13 +10568,13 @@ getPCAMfromId = .text:0x80199540; // type:function size:0x34 StageManager__overrideLayer0WithLyse = .text:0x80199580; // type:function size:0xF8 StageManager__setSTIF = .text:0x80199680; // type:function size:0x1AC StageManager__getFlagindex = .text:0x80199830; // type:function size:0x2C -StageManager__getAreaType = .text:0x80199860; // type:function size:0x1C +getAreaType__11dStageMgr_cCFv = .text:0x80199860; // type:function size:0x1C StageManager__isAreaTypeNormal = .text:0x80199880; // type:function size:0x28 -StageManager__isAreaTypeDungeon = .text:0x801998B0; // type:function size:0x2C +isAreaTypeDungeon__11dStageMgr_cCFv = .text:0x801998B0; // type:function size:0x2C StageManager__isAreaTypeBoss = .text:0x801998E0; // type:function size:0x2C StageManager__isAreaTypeSkyloft = .text:0x80199910; // type:function size:0x2C StageManager__isAreaTypeHouse = .text:0x80199940; // type:function size:0x2C -StageManager__isAreaTypeSky = .text:0x80199970; // type:function size:0x2C +isAreaTypeSky__11dStageMgr_cCFv = .text:0x80199970; // type:function size:0x2C StageManager__isAreaTypeOverworldOrSkyloft = .text:0x801999A0; // type:function size:0x3C StageManager__isAreaTypeDungeonOrBoss = .text:0x801999E0; // type:function size:0x3C StageManager__getSTIFmapNameId = .text:0x80199A20; // type:function size:0x20 @@ -11112,87 +11112,87 @@ TagVrbox__update = .text:0x801B8EF0; // type:function size:0x78 TagVrbox__draw = .text:0x801B8F70; // type:function size:0x1F0 TagVrbox__dtor = .text:0x801B9160; // type:function size:0xA4 fn_801B9210 = .text:0x801B9210; // type:function size:0x1C -AcTitleReloader__ctor = .text:0x801B9230; // type:function size:0x30 -AcTitleReloader__ctorCont = .text:0x801B9260; // type:function size:0xFC -Reloader__dtor = .text:0x801B9360; // type:function size:0x138 -fn_801B94A0 = .text:0x801B94A0; // type:function size:0x58 -fn_801B9500 = .text:0x801B9500; // type:function size:0x5C -fn_801B9560 = .text:0x801B9560; // type:function size:0xA4 -fn_801B9610 = .text:0x801B9610; // type:function size:0xA0 -fn_801B96B0 = .text:0x801B96B0; // type:function size:0x6C -fn_801B9720 = .text:0x801B9720; // type:function size:0x58 -fn_801B9780 = .text:0x801B9780; // type:function size:0x58 -AcTitleReloader__dtor = .text:0x801B97E0; // type:function size:0x140 -AcTitleReloader__init = .text:0x801B9920; // type:function size:0x158 -fn_801B9A80 = .text:0x801B9A80; // type:function size:0x54 -fn_801B9AE0 = .text:0x801B9AE0; // type:function size:0x10 -AcTitleReloader__destroy = .text:0x801B9AF0; // type:function size:0xF0 -fn_801B9BE0 = .text:0x801B9BE0; // type:function size:0x24 -LoadTitleScreen = .text:0x801B9C10; // type:function size:0xD4 -fn_801B9CF0 = .text:0x801B9CF0; // type:function size:0x18 -fn_801B9D10 = .text:0x801B9D10; // type:function size:0x4 -fn_801B9D20 = .text:0x801B9D20; // type:function size:0x4 -fn_801B9D30 = .text:0x801B9D30; // type:function size:0x4 -fn_801B9D40 = .text:0x801B9D40; // type:function size:0x4 -fn_801B9D50 = .text:0x801B9D50; // type:function size:0x4 -fn_801B9D60 = .text:0x801B9D60; // type:function size:0x4 -checkAllSaveFilesEmpty = .text:0x801B9D70; // type:function size:0x88 -ScTitle__initStates = .text:0x801B9E00; // type:function size:0x1E0 -fn_801B9FE0 = .text:0x801B9FE0; // type:function size:0x58 -ScTitle__dtor = .text:0x801BA040; // type:function size:0x5C -fn_801BA0A0 = .text:0x801BA0A0; // type:function size:0xC -fn_801BA0B0 = .text:0x801BA0B0; // type:function size:0xC -fn_801BA0C0 = .text:0x801BA0C0; // type:function size:0xDC -fn_801BA1A0 = .text:0x801BA1A0; // type:function size:0xE0 -fn_801BA280 = .text:0x801BA280; // type:function size:0x88 -fn_801BA310 = .text:0x801BA310; // type:function size:0x30 -fn_801BA340 = .text:0x801BA340; // type:function size:0x30 -fn_801BA370 = .text:0x801BA370; // type:function size:0x30 -fn_801BA3A0 = .text:0x801BA3A0; // type:function size:0x30 -fn_801BA3D0 = .text:0x801BA3D0; // type:function size:0xC -fn_801BA3E0 = .text:0x801BA3E0; // type:function size:0xC -fn_801BA3F0 = .text:0x801BA3F0; // type:function size:0x38 -Reloader__ctor = .text:0x801BA430; // type:function size:0x23C -Reloader__init = .text:0x801BA670; // type:function size:0x50 -Reloader__destroy = .text:0x801BA6C0; // type:function size:0x40 -Reloader__update = .text:0x801BA700; // type:function size:0x58 -Reloader__draw = .text:0x801BA760; // type:function size:0x3C -fn_801BA7A0 = .text:0x801BA7A0; // type:function size:0x10 -fn_801BA7B0 = .text:0x801BA7B0; // type:function size:0x68 -fn_801BA820 = .text:0x801BA820; // type:function size:0xA8 -fn_801BA8D0 = .text:0x801BA8D0; // type:function size:0x10 -fn_801BA8E0 = .text:0x801BA8E0; // type:function size:0x30 -fn_801BA910 = .text:0x801BA910; // type:function size:0x6C -fn_801BA980 = .text:0x801BA980; // type:function size:0x18 -fn_801BA9A0 = .text:0x801BA9A0; // type:function size:0x4 -fn_801BA9B0 = .text:0x801BA9B0; // type:function size:0x54 -fn_801BAA10 = .text:0x801BAA10; // type:function size:0xBC -fn_801BAAD0 = .text:0x801BAAD0; // type:function size:0x4 -fn_801BAAE0 = .text:0x801BAAE0; // type:function size:0xC4 -Reloader__setRespawnInfo = .text:0x801BABB0; // type:function size:0x17C -Reloader__getReloadInfoKeep = .text:0x801BAD30; // type:function size:0x8 -fn_801BAD40 = .text:0x801BAD40; // type:function size:0x44 -Reloader__setReloadTrigger = .text:0x801BAD90; // type:function size:0x20 -fn_801BADB0 = .text:0x801BADB0; // type:function size:0x4C -fn_801BAE00 = .text:0x801BAE00; // type:function size:0x8 -fn_801BAE10 = .text:0x801BAE10; // type:function size:0x48 +dScTitle_c_classInit__Fv = .text:0x801B9230; // type:function size:0x30 +__ct__10dScTitle_cFv = .text:0x801B9260; // type:function size:0xFC +__dt__9dScGame_cFv = .text:0x801B9360; // type:function size:0x138 +__dt__12ScGameScreenFv = .text:0x801B94A0; // type:function size:0x58 +__dt__21ScGameScreenTargetingFv = .text:0x801B9500; // type:function size:0x5C +__dt__47sFStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c>Fv = .text:0x801B9560; // type:function size:0xA4 +__dt__77sStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801B9610; // type:function size:0xA0 +__dt__24sFStateFct_c<9dScGame_c>Fv = .text:0x801B96B0; // type:function size:0x6C +__dt__21sFState_c<9dScGame_c>Fv = .text:0x801B9720; // type:function size:0x58 +__dt__19sFPhase<9dScGame_c>Fv = .text:0x801B9780; // type:function size:0x58 +__dt__10dScTitle_cFv = .text:0x801B97E0; // type:function size:0x140 +create__10dScTitle_cFv = .text:0x801B9920; // type:function size:0x158 +execute__10dScTitle_cFv = .text:0x801B9A80; // type:function size:0x54 +executeState__77sStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801B9AE0; // type:function size:0x10 +doDelete__10dScTitle_cFv = .text:0x801B9AF0; // type:function size:0xF0 +draw__10dScTitle_cFv = .text:0x801B9BE0; // type:function size:0x24 +loadTitleScreen__10dScTitle_cFUl = .text:0x801B9C10; // type:function size:0xD4 +setSomethingSkbRelated__10dScTitle_cFv = .text:0x801B9CF0; // type:function size:0x18 +initializeState_Stanby__10dScTitle_cFv = .text:0x801B9D10; // type:function size:0x4 +executeState_Stanby__10dScTitle_cFv = .text:0x801B9D20; // type:function size:0x4 +finalizeState_Stanby__10dScTitle_cFv = .text:0x801B9D30; // type:function size:0x4 +initializeState_Action__10dScTitle_cFv = .text:0x801B9D40; // type:function size:0x4 +executeState_Action__10dScTitle_cFv = .text:0x801B9D50; // type:function size:0x4 +finalizeState_Action__10dScTitle_cFv = .text:0x801B9D60; // type:function size:0x4 +checkAllSaveFilesEmpty__10dScTitle_cFv = .text:0x801B9D70; // type:function size:0x88 +__sinit_\d_sc_title_cpp = .text:0x801B9E00; // type:function size:0x1E0 scope:local +__dt__25sFStateID_c<10dScTitle_c>Fv = .text:0x801B9FE0; // type:function size:0x58 +__dt__32sFStateVirtualID_c<10dScTitle_c>Fv = .text:0x801BA040; // type:function size:0x5C +baseID_Action<9dScGame_c>__Fv_RC10sStateID_c = .text:0x801BA0A0; // type:function size:0xC +baseID_Stanby<9dScGame_c>__Fv_RC10sStateID_c = .text:0x801BA0B0; // type:function size:0xC +number__32sFStateVirtualID_c<10dScTitle_c>CFv = .text:0x801BA0C0; // type:function size:0xDC +superID__32sFStateVirtualID_c<10dScTitle_c>CFv = .text:0x801BA1A0; // type:function size:0xE0 +isSameName__25sFStateID_c<10dScTitle_c>CFPCc = .text:0x801BA280; // type:function size:0x88 +initializeState__25sFStateID_c<10dScTitle_c>CFR10dScTitle_c = .text:0x801BA310; // type:function size:0x30 +executeState__25sFStateID_c<10dScTitle_c>CFR10dScTitle_c = .text:0x801BA340; // type:function size:0x30 +finalizeState__25sFStateID_c<10dScTitle_c>CFR10dScTitle_c = .text:0x801BA370; // type:function size:0x30 +dScGame_c_classInit__Fv = .text:0x801BA3A0; // type:function size:0x30 +baseID_Stanby<10sStateID_c>__Fv_RC10sStateID_c = .text:0x801BA3D0; // type:function size:0xC +baseID_Action<10sStateID_c>__Fv_RC10sStateID_c = .text:0x801BA3E0; // type:function size:0xC +someGfxThingCallback__9dScGame_cFv = .text:0x801BA3F0; // type:function size:0x38 +__ct__9dScGame_cFv = .text:0x801BA430; // type:function size:0x23C +create__9dScGame_cFv = .text:0x801BA670; // type:function size:0x50 +doDelete__9dScGame_cFv = .text:0x801BA6C0; // type:function size:0x40 +execute__9dScGame_cFv = .text:0x801BA700; // type:function size:0x58 +draw__9dScGame_cFv = .text:0x801BA760; // type:function size:0x3C +deleteReady__9dScGame_cFv = .text:0x801BA7A0; // type:function size:0x10 +cb1__9dScGame_cFv = .text:0x801BA7B0; // type:function size:0x68 +cb2__9dScGame_cFv = .text:0x801BA820; // type:function size:0xA8 +changeState__77sStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x801BA8D0; // type:function size:0x10 +cb3__9dScGame_cFv = .text:0x801BA8E0; // type:function size:0x30 +initializeState_Stanby__9dScGame_cFv = .text:0x801BA910; // type:function size:0x6C +executeState_Stanby__9dScGame_cFv = .text:0x801BA980; // type:function size:0x18 +finalizeState_Stanby__9dScGame_cFv = .text:0x801BA9A0; // type:function size:0x4 +initializeState_Action__9dScGame_cFv = .text:0x801BA9B0; // type:function size:0x54 +executeState_Action__9dScGame_cFv = .text:0x801BAA10; // type:function size:0xBC +finalizeState_Action__9dScGame_cFv = .text:0x801BAAD0; // type:function size:0x4 +somethingWithScreen__9dScGame_cFv = .text:0x801BAAE0; // type:function size:0xC4 +setRespawnInfo__9dScGame_cFRC7mVec3_cRC7mAng3_cb = .text:0x801BABB0; // type:function size:0x17C +getLinkReloadInfo__9dScGame_cCFv = .text:0x801BAD30; // type:function size:0x8 +attemptDelete__9dScGame_cFv = .text:0x801BAD40; // type:function size:0x44 +setReloadTrigger__9dScGame_cFQ28fProfile14PROFILE_NAME_e = .text:0x801BAD90; // type:function size:0x20 +setSpawnInfo__9dScGame_cFUcRC7mVec3_c4mAng = .text:0x801BADB0; // type:function size:0x4C +getSpawnInfo__9dScGame_cCFv = .text:0x801BAE00; // type:function size:0x8 +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 -triggerExit__6ScGameFlUcll = .text:0x801BB080; // type:function size:0xC0 +triggerExit__9dScGame_cFlUcll = .text:0x801BB080; // type:function size:0xC0 Reloader__triggerExitInner = .text:0x801BB140; // type:function size:0x154 fn_801BB2A0 = .text:0x801BB2A0; // type:function size:0x28 fn_801BB2D0 = .text:0x801BB2D0; // type:function size:0x8 fn_801BB2E0 = .text:0x801BB2E0; // type:function size:0xC -fn_801BB2F0 = .text:0x801BB2F0; // type:function size:0x88 -LinkReloadInfoKeep__set = .text:0x801BB380; // type:function size:0x34 -isCurrentStage__6ScGameFPCc = .text:0x801BB3C0; // type:function size:0x10 +setSpawnData__12SpawnInfoExtFPCcUcUcUcRC7mVec3_c4mAng = .text:0x801BB2F0; // type:function size:0x88 +set__14LinkReloadInfoFUcRC7mVec3_c4mAngUl = .text:0x801BB380; // type:function size:0x34 +isCurrentStage__9dScGame_cFPCc = .text:0x801BB3C0; // type:function size:0x10 isStageSkyloftLayer20 = .text:0x801BB3D0; // type:function size:0x54 isInCredits = .text:0x801BB430; // type:function size:0x54 isStateLayerWithSeekerStoneHintMenu = .text:0x801BB490; // type:function size:0x78 -copySpawnNextToCurrent = .text:0x801BB510; // type:function size:0xBC -actuallyTriggerEntrance = .text:0x801BB5D0; // type:function size:0x104 +copySpawnNextToCurrent__9dScGame_cFv = .text:0x801BB510; // type:function size:0xBC +actuallyTriggerEntrance__9dScGame_cFPCcUcUcUciiUcUsSc = .text:0x801BB5D0; // type:function size:0x104 setCamera = .text:0x801BB6E0; // type:function size:0x10 getCamera = .text:0x801BB6F0; // type:function size:0x10 fn_801BB700 = .text:0x801BB700; // type:function size:0x4C @@ -11203,38 +11203,38 @@ startNewGameFile = .text:0x801BB8C0; // type:function size:0x100 fn_801BB9C0 = .text:0x801BB9C0; // type:function size:0x3C unsetFlagsAfterStart = .text:0x801BBA00; // type:function size:0x110 fn_801BBB10 = .text:0x801BBB10; // type:function size:0x3C -SpawnStruct__setData = .text:0x801BBB50; // type:function size:0xD4 +setData__9SpawnInfoFPCcUcUcUcllUcUsSc = .text:0x801BBB50; // type:function size:0xD4 fn_801BBC30 = .text:0x801BBC30; // type:function size:0x4 fn_801BBC40 = .text:0x801BBC40; // type:function size:0xE4 fn_801BBD30 = .text:0x801BBD30; // type:function size:0x14 fn_801BBD50 = .text:0x801BBD50; // type:function size:0x15C fn_801BBEB0 = .text:0x801BBEB0; // type:function size:0x8 fn_801BBEC0 = .text:0x801BBEC0; // type:function size:0x18 -fn_801BBEE0 = .text:0x801BBEE0; // type:function size:0x10 -fn_801BBEF0 = .text:0x801BBEF0; // type:function size:0x60 -fn_801BBF50 = .text:0x801BBF50; // type:function size:0xC -fn_801BBF60 = .text:0x801BBF60; // type:function size:0x1C -fn_801BBF80 = .text:0x801BBF80; // type:function size:0x1C -fn_801BBFA0 = .text:0x801BBFA0; // type:function size:0x1C -fn_801BBFC0 = .text:0x801BBFC0; // type:function size:0x10 -fn_801BBFD0 = .text:0x801BBFD0; // type:function size:0x10 -fn_801BBFE0 = .text:0x801BBFE0; // type:function size:0x10 -fn_801BBFF0 = .text:0x801BBFF0; // type:function size:0x10 -fn_801BC000 = .text:0x801BC000; // type:function size:0x10 -fn_801BC010 = .text:0x801BC010; // type:function size:0x10 -fn_801BC020 = .text:0x801BC020; // type:function size:0x30 -fn_801BC050 = .text:0x801BC050; // type:function size:0xC -fn_801BC060 = .text:0x801BC060; // type:function size:0x10 -fn_801BC070 = .text:0x801BC070; // type:function size:0x2C -fn_801BC0A0 = .text:0x801BC0A0; // type:function size:0x30 -fn_801BC0D0 = .text:0x801BC0D0; // type:function size:0x30 -fn_801BC100 = .text:0x801BC100; // type:function size:0x30 -ScGame__sinit = .text:0x801BC130; // type:function size:0x27C -fn_801BC3B0 = .text:0x801BC3B0; // type:function size:0x58 -ScGame__state_dtor = .text:0x801BC410; // type:function size:0x5C -fn_801BC470 = .text:0x801BC470; // type:function size:0xDC -fn_801BC550 = .text:0x801BC550; // type:function size:0xE0 -fn_801BC630 = .text:0x801BC630; // type:function size:0x88 +getStateID__77sStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801BBEE0; // type:function size:0x10 +build__24sFStateFct_c<9dScGame_c>FRC12sStateIDIf_c = .text:0x801BBEF0; // type:function size:0x60 +dispose__24sFStateFct_c<9dScGame_c>FRP10sStateIf_c = .text:0x801BBF50; // type:function size:0xC +initialize__21sFState_c<9dScGame_c>Fv = .text:0x801BBF60; // type:function size:0x1C +execute__21sFState_c<9dScGame_c>Fv = .text:0x801BBF80; // type:function size:0x1C +finalize__21sFState_c<9dScGame_c>Fv = .text:0x801BBFA0; // type:function size:0x1C +initializeState__77sStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801BBFC0; // type:function size:0x10 +finalizeState__77sStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801BBFD0; // type:function size:0x10 +refreshState__77sStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801BBFE0; // type:function size:0x10 +getState__77sStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801BBFF0; // type:function size:0x10 +getNewStateID__77sStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801BC000; // type:function size:0x10 +getOldStateID__77sStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801BC010; // type:function size:0x10 +callPhase__19sFPhase<9dScGame_c>Fv = .text:0x801BC020; // type:function size:0x30 +onReset__19sFPhase<9dScGame_c>Fv = .text:0x801BC050; // type:function size:0xC +nextPhase__19sFPhase<9dScGame_c>Fv = .text:0x801BC060; // type:function size:0x10 +hasReachedEnd__19sFPhase<9dScGame_c>CFv = .text:0x801BC070; // type:function size:0x2C +finalizeState__23sFStateID_c<9dScGame_c>CFR9dScGame_c = .text:0x801BC0A0; // type:function size:0x30 +executeState__23sFStateID_c<9dScGame_c>CFR9dScGame_c = .text:0x801BC0D0; // type:function size:0x30 +initializeState__23sFStateID_c<9dScGame_c>CFR9dScGame_c = .text:0x801BC100; // type:function size:0x30 +__sinit_\d_sc_game_cpp = .text:0x801BC130; // type:function size:0x27C +__dt__23sFStateID_c<9dScGame_c>Fv = .text:0x801BC3B0; // type:function size:0x58 +__dt__30sFStateVirtualID_c<9dScGame_c>Fv = .text:0x801BC410; // type:function size:0x5C +number__30sFStateVirtualID_c<9dScGame_c>CFv = .text:0x801BC470; // type:function size:0xDC +superID__30sFStateVirtualID_c<9dScGame_c>CFv = .text:0x801BC550; // type:function size:0xE0 +isSameName__23sFStateID_c<9dScGame_c>CFPCc = .text:0x801BC630; // type:function size:0x88 dCsBase_c_classInit__Fv = .text:0x801BC6C0; // type:function size:0x30 __ct__9dCsBase_cFv = .text:0x801BC6F0; // type:function size:0x1AC __dt__30sFState_c<17dLytCursorStick_c>Fv = .text:0x801BC8A0; // type:function size:0x58 @@ -17679,7 +17679,7 @@ destroy__Q23m3d9mShadow_cFv = .text:0x802ED2D0; // type:function size:0x60 __dt__Q23m3d14mShadowChild_cFv = .text:0x802ED330; // type:function size:0x9C create__Q23m3d14mShadowChild_cFUcPQ23EGG4Heap = .text:0x802ED3D0; // type:function size:0x7C set__Q23m3d14mShadowChild_cFRC7mVec3_cf6mColor = .text:0x802ED450; // type:function size:0x40 -addMdl__Q23m3d14mShadowChild_cFRQ23m3d9scnLeaf_cRC7mQuat_c = .text:0x802ED490; // type:function size:0x16C +addMdl__Q23m3d14mShadowChild_cFRQ23m3d9scnLeaf_cR7mQuat_c = .text:0x802ED490; // type:function size:0x16C setGeom__Q23m3d14mShadowChild_cFPC9_GXTexObjRC6mMtx_cRC7mQuat_c = .text:0x802ED600; // type:function size:0xF8 updateMtx__Q23m3d14mShadowChild_cFv = .text:0x802ED700; // type:function size:0x148 drawMdl__Q23m3d14mShadowChild_cFv = .text:0x802ED850; // type:function size:0x24C @@ -30804,7 +30804,7 @@ __vt__22CurrentStageArcManager = .data:0x8050E004; // type:object size:0xC __vt__11OarcManager = .data:0x8050E02C; // type:object size:0xC lbl_8050E038 = .data:0x8050E038; // type:object size:0x10 __vt__16LayoutArcManager = .data:0x8050E048; // type:object size:0xC -lbl_8050E054 = .data:0x8050E054; // type:object size:0xC +__vt__16LayoutArcControl = .data:0x8050E054; // type:object size:0xC lbl_8050E060 = .data:0x8050E060; // type:object size:0x30 lbl_8050E090 = .data:0x8050E090; // type:object size:0x2FC lbl_8050E38C = .data:0x8050E38C; // type:object size:0xCC @@ -34215,22 +34215,22 @@ lbl_8052E380 = .data:0x8052E380; // type:object size:0x20 lbl_8052E3A0 = .data:0x8052E3A0; // type:object size:0x20 TagVrbox__vtable = .data:0x8052E3C0; // type:object size:0x78 g_profile_TITLE = .data:0x8052E438; // type:object size:0xC -actorInit.defaultFlags2 = .data:0x8052E444; // type:object size:0xC -lbl_8052E450 = .data:0x8052E450; // type:object size:0xC -lbl_8052E45C = .data:0x8052E45C; // type:object size:0x4C -AcTitleReloader__vtable = .data:0x8052E4A8; // type:object size:0xE4 -lbl_8052E58C = .data:0x8052E58C; // type:object size:0x6C -g_profile_GAME = .data:0x8052E5F8; // type:object size:0x10 -lbl_8052E608 = .data:0x8052E608; // type:object size:0x30 -Reloader__vtable = .data:0x8052E638; // type:object size:0x68 -Reloader__stateMgr__vtable = .data:0x8052E6A0; // type:object size:0x30 -lbl_8052E6D0 = .data:0x8052E6D0; // type:object size:0x30 -lbl_8052E700 = .data:0x8052E700; // type:object size:0x18 -lbl_8052E718 = .data:0x8052E718; // type:object size:0x18 +sModulesToLoad = .data:0x8052E444; // type:object size:0xA scope:local +lbl_8052E450 = .data:0x8052E450; // type:object size:0xB data:string +lbl_8052E45C = .data:0x8052E45C; // type:object size:0x11 data:string +__vt__10dScTitle_c = .data:0x8052E4A8; // type:object size:0x64 +__vt__32sFStateVirtualID_c<10dScTitle_c> = .data:0x8052E58C; // type:object size:0x34 +g_profile_GAME = .data:0x8052E5F8; // type:object size:0xC +sCallbacks__9dScGame_c = .data:0x8052E608; // type:object size:0x30 +__vt__9dScGame_c = .data:0x8052E638; // type:object size:0x64 +__vt__47sFStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c> = .data:0x8052E6A0; // type:object size:0x30 +__vt__77sStateMgr_c<9dScGame_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x8052E6D0; // type:object size:0x30 +__vt__24sFStateFct_c<9dScGame_c> = .data:0x8052E700; // type:object size:0x14 +__vt__21sFState_c<9dScGame_c> = .data:0x8052E718; // type:object size:0x18 lbl_8052E730 = .data:0x8052E730; // type:object size:0x10 lbl_8052E740 = .data:0x8052E740; // type:object size:0x10 -lbl_8052E750 = .data:0x8052E750; // type:object size:0xA4 -lbl_8052E7F4 = .data:0x8052E7F4; // type:object size:0x6C +__vt__19sFPhase<9dScGame_c> = .data:0x8052E750; // type:object size:0x24 +__vt__30sFStateVirtualID_c<9dScGame_c> = .data:0x8052E7F4; // type:object size:0x34 g_profile_C_BASE = .data:0x8052E860; // type:object size:0xC lbl_8052E86C = .data:0x8052E86C; // type:object size:0x10 lbl_8052E87C = .data:0x8052E87C; // type:object size:0x10 @@ -38687,8 +38687,8 @@ lbl_805733B8 = .sdata:0x805733B8; // type:object size:0x8 data:string lbl_805733C0 = .sdata:0x805733C0; // type:object size:0x8 data:string lbl_805733C8 = .sdata:0x805733C8; // type:object size:0x8 data:string lbl_805733D0 = .sdata:0x805733D0; // type:object size:0x8 data:string -lbl_805733D8 = .sdata:0x805733D8; // type:object size:0x4 -lbl_805733DC = .sdata:0x805733DC; // type:object size:0xC +sLayoutArcsToLoad = .sdata:0x805733D8; // type:object size:0x4 +lbl_805733DC = .sdata:0x805733DC; // type:object size:0x5 data:string lbl_805733E8 = .sdata:0x805733E8; // type:object size:0x4 lbl_805733EC = .sdata:0x805733EC; // type:object size:0x8 lbl_805733F4 = .sdata:0x805733F4; // type:object size:0x8 @@ -40195,7 +40195,7 @@ IS_IN_SKYKEEP_PUZZLE = .sbss:0x805756E8; // type:object size:0x1 data:byte lbl_805756E9 = .sbss:0x805756E9; // type:object size:0x1 data:byte sInstance__10dTgSndMg_c = .sbss:0x805756EC; // type:object size:0x4 data:4byte HBM_stuff = .sbss:0x805756F0; // type:object size:0x8 data:4byte -STAGE_MANAGER = .sbss:0x805756F8; // type:object size:0x4 data:4byte +sInstance__11dStageMgr_c = .sbss:0x805756F8; // type:object size:0x4 data:4byte lbl_805756FC = .sbss:0x805756FC; // type:object size:0x1 data:byte lbl_805756FD = .sbss:0x805756FD; // type:object size:0x1 data:byte lbl_805756FE = .sbss:0x805756FE; // type:object size:0x1 data:byte @@ -40240,21 +40240,21 @@ lbl_80575770 = .sbss:0x80575770; // type:object size:0x4 data:float lbl_80575774 = .sbss:0x80575774; // type:object size:0x4 data:4byte lbl_80575778 = .sbss:0x80575778; // type:object size:0x4 data:float lbl_8057577C = .sbss:0x8057577C; // type:object size:0x4 data:4byte -lbl_80575780 = .sbss:0x80575780; // type:object size:0x4 data:4byte -lbl_80575784 = .sbss:0x80575784; // type:object size:0x1 data:byte +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 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 -sInstance__6ScGame = .sbss:0x80575794; // type:object size:0x4 data:4byte -StageUpdateCountFrameNum = .sbss:0x80575798; // type:object size:0x4 data:4byte -CURRENT_SPAWN_LAYER = .sbss:0x8057579C; // type:object size:0x1 data:byte -RELOADER_TYPE = .sbss:0x8057579D; // type:object size:0x1 data:byte -COPY_FILE_B_TO_CURRENT_AFTER_RESPAWN = .sbss:0x8057579E; // type:object size:0x1 data:byte -lbl_8057579F = .sbss:0x8057579F; // type:object size:0x1 data:byte -lbl_805757A0 = .sbss:0x805757A0; // type:object size:0x8 data:byte +sInstance__9dScGame_c = .sbss:0x80575794; // type:object size:0x4 data:4byte +sUpdateFrameCount__9dScGame_c = .sbss:0x80575798; // type:object size:0x4 data:4byte +sCurrentLayer__9dScGame_c = .sbss:0x8057579C; // type:object size:0x1 data:byte +sReloaderType__9dScGame_c = .sbss:0x8057579D; // type:object size:0x1 data:byte +sCopyFileBToCurrentAfterRespawn__9dScGame_c = .sbss:0x8057579E; // type:object size:0x1 data:byte +sDoSomethingWithFileAOnTransition__9dScGame_c = .sbss:0x8057579F; // type:object size:0x1 data:byte +sPreventClearingSomeFlag__9dScGame_c = .sbss:0x805757A0; // type:object size:0x1 data:byte sInstance__9dCsBase_c = .sbss:0x805757A8; // type:object size:0x8 data:4byte C_GAME = .sbss:0x805757B0; // type:object size:0x8 data:4byte LINK_PTR2 = .sbss:0x805757B8; // type:object size:0x4 data:4byte @@ -49134,12 +49134,14 @@ lbl_805B3660 = .bss:0x805B3660; // type:object size:0x80 data:byte lbl_805B36E0 = .bss:0x805B36E0; // type:object size:0x10 Room__STATE_ACTIVE = .bss:0x805B36F0; // type:object size:0x40 data:4byte Room__STATE_NON_ACTIVE = .bss:0x805B3730; // type:object size:0x30 data:4byte -lbl_805B3760 = .bss:0x805B3760; // type:object size:0x80 +lbl_805B3760 = .bss:0x805B3760; // type:object size:0xC +StateID_Stanby__10dScTitle_c = .bss:0x805B376C; // type:object size:0x34 +StateID_Action__10dScTitle_c = .bss:0x805B37AC; // type:object size:0x34 lbl_805B37E0 = .bss:0x805B37E0; // type:object size:0xC -ScGame__STATE_STANBY = .bss:0x805B37EC; // type:object size:0x40 data:4byte -ScGame__STATE_ACTION = .bss:0x805B382C; // type:object size:0x34 data:4byte -currentSpawnInfo__6ScGame = .bss:0x805B3860; // type:object size:0x2C data:4byte -NEXT_SPAWN_INFO = .bss:0x805B388C; // type:object size:0x2C data:byte +StateID_Stanby__9dScGame_c = .bss:0x805B37EC; // type:object size:0x34 data:4byte +StateID_Action__9dScGame_c = .bss:0x805B382C; // type:object size:0x34 data:4byte +currentSpawnInfo__9dScGame_c = .bss:0x805B3860; // type:object size:0x2A +nextSpawnInfo__9dScGame_c = .bss:0x805B388C; // type:object size:0x2A data:byte lbl_805B38B8 = .bss:0x805B38B8; // type:object size:0x50 CsGame__lytItemCursor__STATE_INVISIBLE = .bss:0x805B3908; // type:object size:0x40 data:4byte CsGame__lytItemCursor__STATE_BOW = .bss:0x805B3948; // type:object size:0x40 data:4byte diff --git a/configure.py b/configure.py index ecf9cc61..7e451643 100644 --- a/configure.py +++ b/configure.py @@ -431,6 +431,8 @@ config.libs = [ Object(NonMatching, "d/a/d_a_insect.cpp"), Object(NonMatching, "d/d_cs_base.cpp"), Object(NonMatching, "d/d_cs_game.cpp"), + Object(Matching, "d/d_sc_title.cpp"), + Object(NonMatching, "d/d_sc_game.cpp"), Object(Matching, "d/lyt/d_lyt_common_arrow.cpp"), Object(NonMatching, "toBeSorted/file_manager.cpp"), Object(NonMatching, "toBeSorted/save_manager.cpp"), diff --git a/include/d/d_dylink.h b/include/d/d_dylink.h index 66122f8b..aadf32ea 100644 --- a/include/d/d_dylink.h +++ b/include/d/d_dylink.h @@ -5,7 +5,7 @@ class dDynamicModuleControl { public: - dDynamicModuleControl() {} + dDynamicModuleControl(): mPtr(nullptr) {} virtual ~dDynamicModuleControl(); void set(u16 *ptr, int count); diff --git a/include/d/d_fader.h b/include/d/d_fader.h index 300ea576..24e2cd39 100644 --- a/include/d/d_fader.h +++ b/include/d/d_fader.h @@ -33,11 +33,28 @@ public: mFadeOutType = fadeOutType; } + void setFadeInType(s32 fadeInType) { + mFadeInType = fadeInType; + } + + void setFadeOutType(s32 fadeOutType) { + mFadeOutType = fadeOutType; + } + void resetFrames() { mFadeInFrame = 30; mFadeOutFrame = 30; } + void setFrames(u16 fadeIn, u16 fadeOut) { + mFadeInFrame = fadeIn; + mFadeOutFrame = fadeOut; + } + + u16 getFadeOutFrame() const { + return mFadeOutFrame; + } + void setFadeInFrame(u16 frame) { mFadeInFrame = frame; } diff --git a/include/d/d_sc_game.h b/include/d/d_sc_game.h new file mode 100644 index 00000000..1bae3b7f --- /dev/null +++ b/include/d/d_sc_game.h @@ -0,0 +1,227 @@ +#ifndef D_SC_GAME_H +#define D_SC_GAME_H + +#include "common.h" +#include "d/a/d_a_base.h" +#include "d/d_dylink.h" +#include "d/d_fader.h" +#include "d/d_scene.h" +#include "egg/gfx/eggScreen.h" +#include "f/f_profile_name.h" +#include "m/m2d.h" +#include "m/m_angle.h" +#include "m/m_vec.h" +#include "s/s_FPhase.h" +#include "s/s_State.hpp" +#include "sized_string.h" +#include "toBeSorted/arc_managers/layout_arc_manager.h" + +class ScGameScreen : public m2d::Base_c { +public: + ScGameScreen(u8 priority) { + setPriority(priority); + } + +private: + /* 0x10 */ EGG::Screen mScreen; +}; + +class ScGameScreenTargeting : public ScGameScreen { +public: + ScGameScreenTargeting(u8 priority) : ScGameScreen(priority), mLetterboxAmount(0.0f) {} + +private: + f32 mLetterboxAmount; +}; + +struct SpawnInfo { + SpawnInfo() { + reset(); + } + + SpawnInfo(const SpawnInfo &other) { + *this = other; + } + + SpawnInfo &operator=(const SpawnInfo &other) { + setData( + other.stageName, other.room, other.layer, other.entrance, other.night, other.trial, other.transitionType, + other.transitionFadeFrames & 0xFF, other.unk + ); + return *this; + } + + void reset() { + setData("", 0, 0, 0, 0, 0, 0, 0xf, 0xff); + } + + /* 0x00 */ SizedString<32> stageName; + /* 0x20 */ u16 transitionFadeFrames; + /* 0x22 */ s8 room; + /* 0x23 */ u8 layer; + /* 0x24 */ s8 entrance; + /* 0x25 */ u8 night; + /* 0x26 */ u8 trial; + /* 0x27 */ s8 transitionType; + /* 0x28 */ s8 unk; + + enum DayNight { + DAY, + NIGHT, + RETAIN_TOD, + }; + + enum Trial { + NO_TRIAL, + TRIAL, + RETAIN_TRIAL, + }; + + DayNight getTimeOfDay() { + return (DayNight)night; + } + + Trial getTrial() { + return (Trial)trial; + } + + bool isNight() { + return getTimeOfDay() == NIGHT; + } + + void setData( + const char *i_stageName, u8 i_roomid, u8 i_layer, u8 i_entrance, s32 i_night, s32 i_trial, u8 i_transitionType, + u16 i_fadeFrames, s8 i_field0x28 + ); +}; + +struct SpawnInfoExt : public SpawnInfo { + /* 0x2C */ mVec3_c mType0Pos; + /* 0x38 */ s16 mType0RotY; + + void setSpawnData(const char *i_stageName, u8 i_roomid, u8 i_layer, u8 i_entrance, const mVec3_c &pos, mAng rot); +}; + +struct LinkReloadInfo { + LinkReloadInfo() : mType0CsFlag(0) {} + void set(u8 roomid, const mVec3_c &pos, mAng rot, u32 flags); + + /* 0x00 */ mVec3_c mPosition; + /* 0x0C */ mAng mRotY; + /* 0x0E */ u8 mRoomId; + /* 0x0F */ u8 mType0CsFlag; + /* 0x10 */ u32 mUnkFlags; +}; + +class dScGame_c : public dScene_c { +public: + dScGame_c(); + virtual ~dScGame_c() { + sInstance = nullptr; + } + + virtual int create() override; + virtual int doDelete() override; + virtual int execute() override; + virtual int draw() override; + virtual void deleteReady() override; + + void triggerExit(s32 room, u8 exitIndex, s32 forcedNight = 2, s32 forcedTrial = 2); + // void triggerEntrance(const char *stageName, u8 room, ); + const LinkReloadInfo &getLinkReloadInfo() const; + + static void copySpawnNextToCurrent(); + + STATE_VIRTUAL_FUNC_DECLARE(dScGame_c, Stanby); // sic + STATE_VIRTUAL_FUNC_DECLARE(dScGame_c, Action); + + static bool isCurrentStage(const char *stageName); + + static SpawnInfo currentSpawnInfo; + static SpawnInfo nextSpawnInfo; + static dScGame_c *sInstance; + + static dScGame_c *GetInstance() { + 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); + void clearSpawnInfo(); + const SpawnInfoExt &getSpawnInfo() const; + +protected: + static u32 sUpdateFrameCount; + static u8 sCurrentLayer; + static u8 sReloaderType; + static bool sCopyFileBToCurrentAfterRespawn; + static bool sDoSomethingWithFileAOnTransition; + static bool sPreventClearingSomeFlag; + + static void someGfxThingCallback(); + void somethingWithScreen(); + bool attemptDelete(); + + static void actuallyTriggerEntrance( + const char *stageName, u8 roomid, u8 layer, u8 entrance, int forcedNight, int forcedTrial, u8 transitionType, + u16 transitionFadeFrames, s8 field0x28 + ); + + void setFadeInType(u8 transitionType) { + mFader.setFadeInType(transitionType); + } + + void setFadeOutType(u8 transitionType) { + mFader.setFadeOutType(transitionType); + } + + void setFaderFrames(u16 transitionFadeFrames) { + mFader.setFrames(transitionFadeFrames, transitionFadeFrames); + } + + void setBeedleShopState(u8 state) { + mBeedleShopState = state; + } + + void resetLinkState() { + mInitialSpeedAfterLoadZone = 0.0f; + mStaminaAmount = -1; + mItemToUseOnReload = -1; + mActionIndex = -1; + } + + sFPhaseBase::sFPhaseState cb1(); + sFPhaseBase::sFPhaseState cb2(); + sFPhaseBase::sFPhaseState cb3(); + + static sFPhase::phaseCallback sCallbacks[]; + + /* 0x068 */ sFPhase mPhases; + /* 0x07C */ STATE_MGR_DECLARE(dScGame_c); + /* 0x0B8 */ dDynamicModuleControl mRelCtrl; + /* 0x0C4 */ LayoutArcControl mLayoutCtrl; + /* 0x0D0 */ dFader_c mFader; + + /* 0x0F8 */ ScGameScreenTargeting mScreen1; + /* 0x194 */ ScGameScreen mScreen2; + /* 0x228 */ UNKWORD field_0x228; + /* 0x22C */ u8 _0x22C[0x230 - 0x22C]; + /* 0x230 */ dAcRefBase_c mStageMgrRef; + /* 0x23C */ u16 mReloadTrigger; + /* 0x23E */ u16 field_0x23E; + /* 0x240 */ SpawnInfoExt mSpawnInfo; + /* 0x27C */ LinkReloadInfo mReloadInfo; + /* 0x290 */ f32 mInitialSpeedAfterLoadZone; + /* 0x294 */ s32 mStaminaAmount; + /* 0x298 */ s8 mItemToUseOnReload; + /* 0x299 */ s8 mBeedleShopState; + /* 0x29A */ u16 mActionIndex; + /* 0x29C */ s32 mLastAreaType; + /* 0x2A0 */ u8 mType0PosFlag; + /* 0x2A1 */ u8 field_0x2A1; + /* 0x2A2 */ u8 mSavePromptFlag; + /* 0x2A3 */ bool mPreventSaveRespawnInfo; +}; + +#endif diff --git a/include/d/d_sc_title.h b/include/d/d_sc_title.h new file mode 100644 index 00000000..fbb869ab --- /dev/null +++ b/include/d/d_sc_title.h @@ -0,0 +1,40 @@ +#ifndef D_SC_TITLE_H +#define D_SC_TITLE_H + +#include "d/d_sc_game.h" +#include "s/s_FPhase.h" +#include "s/s_State.hpp" + +class dScTitle_c : public dScGame_c { +public: + dScTitle_c(); + virtual ~dScTitle_c(); + + STATE_VIRTUAL_OVERRIDE_FUNC_DECLARE(dScTitle_c, dScGame_c, Stanby); + STATE_VIRTUAL_OVERRIDE_FUNC_DECLARE(dScTitle_c, dScGame_c, Action); + + static dScTitle_c *sInstance; + + static void loadTitleScreen(u32 params); + static void setSomethingSkbRelated(); + +private: + static bool sPreventEmptyFilesTitle; + static bool checkAllSaveFilesEmpty(); + + virtual int create() override; + virtual int execute() override; + virtual int doDelete() override; + virtual int draw() override; + + static void *dvdCallback(void *data); + + static sFPhase::phaseCallback sCallbacks[]; + + /* 0x2A4 */ mDvd_toMainRam_normal_c *mpSkbArc; + /* 0x2A8 */ mDvd_toMainRam_normal_c *mpSkbFont; + /* 0x2AC */ u8 field_0x2AC; + /* 0x2AD */ u8 field_0x2AD; +}; + +#endif diff --git a/include/d/d_sys.h b/include/d/d_sys.h index f3993b8c..02a9c127 100644 --- a/include/d/d_sys.h +++ b/include/d/d_sys.h @@ -2,10 +2,12 @@ #define D_SYS_H #include "common.h" +#include "m/m_color.h" namespace dSys { void setFrameRate(u32); +void setClearColor(mColor clr); } // namespace dSys_c diff --git a/include/m/m_color.h b/include/m/m_color.h index 45e1375e..95418195 100644 --- a/include/m/m_color.h +++ b/include/m/m_color.h @@ -7,6 +7,7 @@ struct mColor : public nw4r::ut::Color { mColor() : nw4r::ut::Color() {} mColor(int red, int green, int blue, int alpha) : nw4r::ut::Color(red, green, blue, alpha) {} + mColor(int hex) : nw4r::ut::Color(hex) {} }; #endif diff --git a/include/toBeSorted/arc_managers/layout_arc_manager.h b/include/toBeSorted/arc_managers/layout_arc_manager.h index 8555c732..daa36261 100644 --- a/include/toBeSorted/arc_managers/layout_arc_manager.h +++ b/include/toBeSorted/arc_managers/layout_arc_manager.h @@ -1,6 +1,7 @@ #ifndef LAYOUT_ARC_MANAGER_H #define LAYOUT_ARC_MANAGER_H +#include "common.h" #include "d/d_rawarchive.h" #include "egg/core/eggHeap.h" @@ -21,7 +22,7 @@ public: bool loadLayoutArcFromDisk(const char *object, EGG::Heap *heap); int ensureLoaded1(const char *object); - void ensureLoaded2(const char *object); + int ensureLoaded2(const char *object); bool hasEntry(const char *object); bool decrement(const char *path); void *getData(const char *oarcName, const char *fileName); @@ -31,4 +32,17 @@ private: dRawArcTable_c mArcTable; }; +class LayoutArcControl { +public: + LayoutArcControl() : mLayoutArcs(nullptr), mNumArcs(0) {} + virtual ~LayoutArcControl(); + void set(const char *const *layoutArcs, s32 numArcs); + void load(EGG::Heap *heap); + void release(); + +private: + const char **mLayoutArcs; + s32 mNumArcs; +}; + #endif diff --git a/include/toBeSorted/file_manager.h b/include/toBeSorted/file_manager.h index 1bfdb845..882910c7 100644 --- a/include/toBeSorted/file_manager.h +++ b/include/toBeSorted/file_manager.h @@ -270,14 +270,14 @@ public: /* 80011280 */ u32 calcFileCRC(const void *data, u32 length); /* 80011290 */ void updateEmptyFiles(); /* 800112D0 */ void updateEmptyFileFlags(); - /* 80011370 */ bool isFileEmpty(int fileNum); + /* 80011370 */ bool isFileEmpty(u8 fileNum); /* 80011390 */ bool isFileDirty(int fileNum); /* 800113B0 */ u8 get_0xA84C(); /* 800113C0 */ bool checkRegionCode(); /* 80011440 */ bool checkFileCRC(u8 fileNum); /* 80011490 */ bool isFileInactive() const; /* 80011500 */ void setPlayerInfoFileA(); - /* 800115E0 */ void setT3Info(mVec3_c *pos, mAng3_c *rot); + /* 800115E0 */ void setT3Info(const mVec3_c &pos, const mAng3_c &rot); /* 800116C0 */ static void getRegionVersion(char *out); // /* 800116F0 */ void sinit(); diff --git a/include/toBeSorted/minigame_mgr.h b/include/toBeSorted/minigame_mgr.h new file mode 100644 index 00000000..e83c7364 --- /dev/null +++ b/include/toBeSorted/minigame_mgr.h @@ -0,0 +1,33 @@ +#ifndef MINIGAME_MGR_H +#define MINIGAME_MGR_H + +class MinigameManager { +public: + enum Minigame { + NONE, + BAMBOO_CUTTING, + FUN_FUN_ISLAND, + THRILL_DIGGER, + PUMPKIN_CARRY, + INSECT_CAPTURE, + PUMPKIN_ARCHERY, + ROLLERCOASTER, + TRIAL_TIME_ATTACK, + BOSS_RUSH, + HOUSE_CLEANING, + SPIRAL_CHARGE_TUTORIAL, + HARP_PLAYING, + }; + static bool isInMinigameState(Minigame game); + + static void create(); + static void destroy(); + static void execute(); +private: + MinigameManager() {} + virtual ~MinigameManager() {} + + static MinigameManager *sInstance; +}; + +#endif diff --git a/include/toBeSorted/music_mgrs.h b/include/toBeSorted/music_mgrs.h index a3fceb86..3c1c9c87 100644 --- a/include/toBeSorted/music_mgrs.h +++ b/include/toBeSorted/music_mgrs.h @@ -1,7 +1,13 @@ #ifndef MUSIC_MGRS_H #define MUSIC_MGRS_H +#include "common.h" + extern "C" void *BGM_MGR; extern "C" void fn_8035E000(); +extern "C" void fn_8035E310(void *); + +extern "C" void *ENEMY_SOUND_MGR; +extern "C" void fn_80362150(void *, u16); #endif diff --git a/include/toBeSorted/reload_color_fader.h b/include/toBeSorted/reload_color_fader.h index e8284b90..4bd58227 100644 --- a/include/toBeSorted/reload_color_fader.h +++ b/include/toBeSorted/reload_color_fader.h @@ -6,6 +6,7 @@ class ReloadColorFader { public: static ReloadColorFader *GetInstance(); void fn_80067ED0(); + void fn_80067EF0(s32); void fn_80067F00(); void fn_80067F50(); diff --git a/include/toBeSorted/scgame.h b/include/toBeSorted/scgame.h deleted file mode 100644 index 72a9835d..00000000 --- a/include/toBeSorted/scgame.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef SCGAME_H -#define SCGAME_H - -#include "common.h" -#include "sized_string.h" - -struct SpawnInfo { - /* 0x00 */ SizedString<32> stageName; - /* 0x20 */ s16 transitionFadeFrames; - /* 0x22 */ s8 room; - /* 0x23 */ u8 layer; - /* 0x24 */ s8 entrance; - /* 0x25 */ s8 night; - /* 0x26 */ s8 trial; - /* 0x27 */ s8 transitionType; - /* 0x28 */ s32 unk; - - bool isNight() { - return night == 1; - } -}; - -class ScGame { -public: - static SpawnInfo currentSpawnInfo; - static SpawnInfo nextSpawnInfo; - static ScGame *sInstance; - - static bool isCurrentStage(const char *stageName); - void triggerExit(s32 room, u8 exitIndex, s32 forcedNight = 2, s32 forcedTrial = 2); -}; - -#endif diff --git a/include/toBeSorted/some_gxf_thing.h b/include/toBeSorted/some_gxf_thing.h new file mode 100644 index 00000000..af718c16 --- /dev/null +++ b/include/toBeSorted/some_gxf_thing.h @@ -0,0 +1,28 @@ +#ifndef SOME_GFX_THING_H +#define SOME_GFX_THING_H + +#include "common.h" + +class SomeGfxThing; +extern SomeGfxThing *SOME_GFX_THING; + +class SomeGfxThing { +public: + typedef void (*drawCallback)(void); + static void setDrawCallback(drawCallback cb) { + SOME_GFX_THING->mDrawCb = cb; + } + + static void setField0x09(u8 val) { + SOME_GFX_THING->field_0x09 = val; + } + +private: + u8 _0x00[0x04 - 0x00]; + drawCallback mDrawCb; + u8 field_0x08; + u8 field_0x09; +}; + + +#endif diff --git a/include/toBeSorted/stage_manager.h b/include/toBeSorted/stage_manager.h new file mode 100644 index 00000000..0e406d57 --- /dev/null +++ b/include/toBeSorted/stage_manager.h @@ -0,0 +1,20 @@ +#ifndef STAGE_MANAGER_H +#define STAGE_MANAGER_H + +#include "d/d_base.h" + +class dStageMgr_c : dBase_c { +public: + bool isAreaTypeDungeon() const; + bool isAreaTypeSky() const; + s32 getAreaType() const; + + static dStageMgr_c *GetInstance() { + return sInstance; + } + +private: + static dStageMgr_c *sInstance; +}; + +#endif diff --git a/src/REL/d/a/obj/d_a_obj_sun_light.cpp b/src/REL/d/a/obj/d_a_obj_sun_light.cpp index 8922d5f0..6f141c95 100644 --- a/src/REL/d/a/obj/d_a_obj_sun_light.cpp +++ b/src/REL/d/a/obj/d_a_obj_sun_light.cpp @@ -1,9 +1,9 @@ #include "d/a/obj/d_a_obj_sun_light.h" +#include "d/d_sc_game.h" #include "nw4r/g3d/res/g3d_resfile.h" #include "toBeSorted/arc_managers/current_stage_arc_manager.h" #include "toBeSorted/room_manager.h" -#include "toBeSorted/scgame.h" SPECIAL_ACTOR_PROFILE(OBJ_SUN_LIGHT, dAcOsunLight_c, fProfile::OBJ_SUN_LIGHT, 0x0219, 0, 3); @@ -58,7 +58,5 @@ void dAcOsunLight_c::executeState_Wait() {} void dAcOsunLight_c::finalizeState_Wait() {} bool dAcOsunLight_c::isDay() { - // return !ScGame::currentSpawnInfo.isNight(); - // TODO TempFix? - return !(u8)ScGame::currentSpawnInfo.night; + return dScGame_c::currentSpawnInfo.getTimeOfDay() == SpawnInfo::DAY; } diff --git a/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp b/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp index 618eaf3b..a57d07c3 100644 --- a/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp +++ b/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp @@ -2,11 +2,11 @@ #include "d/a/d_a_item.h" #include "d/col/cc/d_cc_s.h" +#include "d/d_sc_game.h" #include "d/flag/storyflag_manager.h" #include "toBeSorted/attention.h" #include "toBeSorted/event.h" #include "toBeSorted/event_manager.h" -#include "toBeSorted/scgame.h" SPECIAL_ACTOR_PROFILE(OBJ_TOD3_STONE, dAcOtoD3StoneFigure_c, fProfile::OBJ_TOD3_STONE, 0x1B3, 0, 0); @@ -117,14 +117,14 @@ int dAcOtoD3StoneFigure_c::actorExecute() { } int dAcOtoD3StoneFigure_c::draw() { - if (ScGame::currentSpawnInfo.layer != 0x12) { + if (dScGame_c::currentSpawnInfo.layer != 0x12) { drawModelType1(&mMdl); } return SUCCEEDED; } void dAcOtoD3StoneFigure_c::initializeState_OneEye() { - if (ScGame::currentSpawnInfo.night == 1) { + if (dScGame_c::currentSpawnInfo.getTimeOfDay() == SpawnInfo::NIGHT) { rotation.y.mVal += -0x8000; updateMatrix(); mMdl.setLocalMtx(mWorldMtx); @@ -133,9 +133,9 @@ void dAcOtoD3StoneFigure_c::initializeState_OneEye() { void dAcOtoD3StoneFigure_c::executeState_OneEye() { if (EventManager::isInEvent(this, "D3OpenStart")) { - ScGame::sInstance->triggerExit(roomid, mExitId); + dScGame_c::sInstance->triggerExit(roomid, mExitId); } else { - if (hasStoneOfTrials() && ScGame::currentSpawnInfo.night != 1) { + if (hasStoneOfTrials() && dScGame_c::currentSpawnInfo.getTimeOfDay() != SpawnInfo::NIGHT) { // These are interaction related -0.0f; AttentionManager::sInstance->addExamineTalkTarget(*this, 1, 300.0f, 50.0f, -100.0f, 100.0f); diff --git a/src/REL/d/d_s_boot.cpp b/src/REL/d/d_s_boot.cpp index 4942cc38..996fe31f 100644 --- a/src/REL/d/d_s_boot.cpp +++ b/src/REL/d/d_s_boot.cpp @@ -23,6 +23,7 @@ #include "toBeSorted/arc_managers/layout_arc_manager.h" #include "toBeSorted/arc_managers/oarc_manager.h" #include "toBeSorted/hbm.h" +#include "toBeSorted/some_gxf_thing.h" #include "toBeSorted/reload_color_fader.h" sFPhase::phaseCallback dScBoot_c::sCallbacks[] = {&dScBoot_c::cb1, &dScBoot_c::cb2, &dScBoot_c::cb3, @@ -44,7 +45,6 @@ extern "C" const char *getEventFlowFileNameByIndex(int, int); extern "C" const char *getUsedLanguageString(); extern "C" u8 fn_80054F30(); extern "C" nw4r::ut::ResFont *lbl_805750D8; -extern "C" u8 *SOME_GFX_THING; sFPhaseBase::sFPhaseState dScBoot_c::cb1() { LayoutArcManager::sInstance->loadLayoutArcFromDisk("cursor", mHeap::g_archiveHeap); @@ -520,7 +520,7 @@ void dScBoot_c::executeState_Strap() { void dScBoot_c::finalizeState_Strap() { // TODO - SOME_GFX_THING[9] = 1; + SomeGfxThing::setField0x09(1); } void dScBoot_c::initializeState_Connect() { diff --git a/src/REL/d/t/d_t_genki_dws_tgt.cpp b/src/REL/d/t/d_t_genki_dws_tgt.cpp index bdee8025..ef184152 100644 --- a/src/REL/d/t/d_t_genki_dws_tgt.cpp +++ b/src/REL/d/t/d_t_genki_dws_tgt.cpp @@ -1,16 +1,15 @@ #include "d/t/d_t_genki_dws_tgt.h" -#include "toBeSorted/room_manager.h" +#include "d/d_sc_game.h" #include "d/flag/sceneflag_manager.h" #include "d/flag/storyflag_manager.h" -#include "toBeSorted/scgame.h" - +#include "toBeSorted/room_manager.h" SPECIAL_ACTOR_PROFILE(TAG_GENKI_DOWSING_TARGET, dTgGenkiDwsTgt_c, fProfile::TAG_GENKI_DOWSING_TARGET, 0x02A5, 0, 0); int dTgGenkiDwsTgt_c::create() { u16 batQuestActivated = StoryflagManager::sInstance->getCounterOrFlag(304); - if (batQuestActivated == 0 || !ScGame::sInstance->currentSpawnInfo.isNight()) { + if (batQuestActivated == 0 || !dScGame_c::sInstance->currentSpawnInfo.isNight()) { return FAILED; } diff --git a/src/d/a/d_a_base.cpp b/src/d/a/d_a_base.cpp index 600ae9c3..b4bed28c 100644 --- a/src/d/a/d_a_base.cpp +++ b/src/d/a/d_a_base.cpp @@ -3,6 +3,7 @@ #include "d/a/d_a_player.h" #include "d/a/obj/d_a_obj_base.h" #include "d/d_heap.h" +#include "d/d_sc_game.h" #include "d/flag/enemyflag_manager.h" #include "f/f_list_nd.h" #include "m/m_vec.h" @@ -10,7 +11,6 @@ #include "toBeSorted/event_manager.h" #include "toBeSorted/file_manager.h" #include "toBeSorted/room_manager.h" -#include "toBeSorted/scgame.h" #include "toBeSorted/special_item_drop_mgr.h" // .sdata @@ -232,7 +232,7 @@ bool dAcBase_c::restorePosRotFromCopy() { // 8002cf10 u32 dAcBase_c::itemDroppingAndGivingRelated(mVec3_c *spawnPos, int subtype) { - if (ScGame::currentSpawnInfo.trial == 1) { + if (dScGame_c::currentSpawnInfo.getTrial() == SpawnInfo::TRIAL) { return 0; } diff --git a/src/d/col/bg/d_bg_s.cpp b/src/d/col/bg/d_bg_s.cpp index 7b43718f..b23d869e 100644 --- a/src/d/col/bg/d_bg_s.cpp +++ b/src/d/col/bg/d_bg_s.cpp @@ -10,8 +10,8 @@ #include "d/col/c/c_bg_s_shdw_draw.h" #include "d/col/c/c_m3d.h" #include "d/col/c/c_partition.h" +#include "d/d_sc_game.h" #include "toBeSorted/arc_managers/oarc_manager.h" -#include "toBeSorted/scgame.h" const char *MAP_SOLID_MATERIAL_NAMES[31] = { 0, @@ -409,7 +409,7 @@ void dBgS::Ct() { mInSkyKeep = false; for (int i = 0; i < 8; ++i) { - if (ScGame::isCurrentStage(SKYKEEP_STAGE_NAMES[i])) { + if (dScGame_c::isCurrentStage(SKYKEEP_STAGE_NAMES[i])) { mInSkyKeep = true; return; } @@ -575,7 +575,7 @@ int dBgS::GetPolyAtt1(cBgS_PolyInfo const &info) { // TODO: Map to Enums And Cleanup?? int dBgS::GetMapCode(int att0, int att1, bool bAlt) { - if (bAlt && ScGame::currentSpawnInfo.trial == 1) { + if (bAlt && dScGame_c::currentSpawnInfo.getTrial() == SpawnInfo::TRIAL) { return 0x1E; } if (att0 == 4 && att1 == 1) { diff --git a/src/d/col/bg/d_bg_w.cpp b/src/d/col/bg/d_bg_w.cpp index 77695657..4c2ef77d 100644 --- a/src/d/col/bg/d_bg_w.cpp +++ b/src/d/col/bg/d_bg_w.cpp @@ -6,7 +6,7 @@ #include "d/col/c/c_bg_s_chk.h" #include "d/col/c/c_bg_s_lin_chk.h" #include "d/col/c/c_bg_s_shdw_draw.h" -#include "toBeSorted/scgame.h" +#include "d/d_sc_game.h" bool cBgW::sLineCheck; bool cBgW::sGndCheck; @@ -855,7 +855,7 @@ bool dBgW::GetMapCode(int polyIdx, int *pOut) { bool target = GetZTargetThrough(info); if (att0 >= 0x20) { *pOut = dBgS::GetMapCode(att0 - 0x20, att1, target); - if (Chk0x24_0x20() && ScGame::currentSpawnInfo.trial == 1) { + if (Chk0x24_0x20() && dScGame_c::currentSpawnInfo.getTrial() == SpawnInfo::TRIAL) { *pOut = 0x1E; } return false; diff --git a/src/d/col/bg/d_bg_w_kcol.cpp b/src/d/col/bg/d_bg_w_kcol.cpp index 5da42405..ce27c650 100644 --- a/src/d/col/bg/d_bg_w_kcol.cpp +++ b/src/d/col/bg/d_bg_w_kcol.cpp @@ -3,7 +3,7 @@ #include "d/col/bg/d_bg_s.h" #include "d/col/bg/d_bg_s_gnd_chk.h" #include "d/col/bg/d_bg_s_lin_chk.h" -#include "toBeSorted/scgame.h" +#include "d/d_sc_game.h" char STAGE_FS_A[] = "D201"; char STAGE_FS_B[] = "D201_1"; @@ -518,7 +518,7 @@ void dBgWKCol::DrawOnMap(int idx, bool param2) { if (param2) { // FS Room 9 /* Spiral Staircase */ - if (GetRoomId() == 9 && (ScGame::isCurrentStage(STAGE_FS_A) || ScGame::isCurrentStage(STAGE_FS_B))) { + if (GetRoomId() == 9 && (dScGame_c::isCurrentStage(STAGE_FS_A) || dScGame_c::isCurrentStage(STAGE_FS_B))) { int all = mMapRelated[idx].mCount; mVec3_c AB, CA, BC; mVec3_c v0, v1, v2; @@ -646,13 +646,13 @@ void dBgWKCol::DrawOnMap(int idx, bool param2) { f32 yPos = (bnd->GetMinP()->y + bnd->GetMaxP()->y) * 0.5f; // Sandship - if (GetRoomId() == 15 && ScGame::isCurrentStage(STAGE_SSH)) { + if (GetRoomId() == 15 && dScGame_c::isCurrentStage(STAGE_SSH)) { yPos = 0.0f; } if (idx == 0x12 /* Abyss `Common/tex/naraku.bti`)*/) { yPos -= 1.0f; } - if (ScGame::isCurrentStage(STAGE_FS_A) || ScGame::isCurrentStage(STAGE_FS_B)) { + if (dScGame_c::isCurrentStage(STAGE_FS_A) || dScGame_c::isCurrentStage(STAGE_FS_B)) { int room = GetRoomId(); /* FS Room 9 - Spiral Staircse */ if (room == 9) { diff --git a/src/d/col/cc/d_cc_s.cpp b/src/d/col/cc/d_cc_s.cpp index 8889c876..01f1d9e2 100644 --- a/src/d/col/cc/d_cc_s.cpp +++ b/src/d/col/cc/d_cc_s.cpp @@ -6,6 +6,7 @@ #include "d/col/c/c_m3d_g_aab.h" #include "f/f_base.h" #include "rvl/MTX/mtx.h" +#include "toBeSorted/stage_manager.h" dCcS *dCcS::sInstance; @@ -167,11 +168,11 @@ void dCcS::ClearArea() { mAreaCount = 0; } -extern "C" void *STAGE_MANAGER; + extern "C" bool fn_8019A7A0(void *stg, f32 *, f32 *); void dCcS::AdjustHitPos() { f32 x, z; - if (STAGE_MANAGER && fn_8019A7A0(STAGE_MANAGER, &x, &z)) { + if (dStageMgr_c::GetInstance() != nullptr && fn_8019A7A0(dStageMgr_c::GetInstance(), &x, &z)) { for (cCcD_Obj **obj = mpObj; obj < mpObj + mObjCount; ++obj) { (*obj)->AdjustHitPos(x, z); (*obj)->GetShapeAttr()->TranslateXZ(x, z); diff --git a/src/d/d_sc_game.cpp b/src/d/d_sc_game.cpp new file mode 100644 index 00000000..d85b57a6 --- /dev/null +++ b/src/d/d_sc_game.cpp @@ -0,0 +1,325 @@ +#include "d/d_sc_game.h" + +#include "common.h" +#include "d/d_base.h" +#include "d/flag/storyflag_manager.h" +#include "f/f_base.h" +#include "f/f_profile_name.h" +#include "m/m_fader_base.h" +#include "m/m_vec.h" +#include "s/s_FPhase.h" +#include "s/s_State.hpp" +#include "toBeSorted/arc_managers/layout_arc_manager.h" +#include "toBeSorted/arc_managers/oarc_manager.h" +#include "toBeSorted/file_manager.h" +#include "toBeSorted/minigame_mgr.h" +#include "toBeSorted/music_mgrs.h" +#include "toBeSorted/room_manager.h" +#include "toBeSorted/some_gxf_thing.h" +#include "toBeSorted/stage_manager.h" + +#include + +SPECIAL_BASE_PROFILE(GAME, dScGame_c, fProfile::GAME, 0x4, 0x6F9); + +STATE_VIRTUAL_DEFINE(dScGame_c, Stanby); +STATE_VIRTUAL_DEFINE(dScGame_c, Action); + +SpawnInfo dScGame_c::currentSpawnInfo; +SpawnInfo dScGame_c::nextSpawnInfo(dScGame_c::currentSpawnInfo); + +dScGame_c *dScGame_c::sInstance; +u32 dScGame_c::sUpdateFrameCount; +u8 dScGame_c::sCurrentLayer; +u8 dScGame_c::sReloaderType; +bool dScGame_c::sCopyFileBToCurrentAfterRespawn; +bool dScGame_c::sDoSomethingWithFileAOnTransition; +bool dScGame_c::sPreventClearingSomeFlag; + +sFPhase::phaseCallback dScGame_c::sCallbacks[] = { + &dScGame_c::cb1, &dScGame_c::cb2, &dScGame_c::cb3, nullptr +}; + +void dScGame_c::someGfxThingCallback() { + dScGame_c *scGame = dScGame_c::GetInstance(); + scGame->somethingWithScreen(); + scGame->mFader.draw(); +} + +dScGame_c::dScGame_c() + : mPhases(this, sCallbacks), + mStateMgr(*this), + mStageMgrRef(nullptr), + mScreen1(0x85), + mScreen2(0x89), + field_0x228(0), + mReloadTrigger(fProfile::PROFILE_MAX) { + resetLinkState(); + mBeedleShopState = 0; + mLastAreaType = 6; + mType0PosFlag = 0; + mSavePromptFlag = false; + mPreventSaveRespawnInfo = true; + sInstance = this; + currentSpawnInfo.reset(); +} + +int dScGame_c::create() { + sFPhaseBase::sFPhaseState phaseResult = mPhases.step(); + if (phaseResult != sFPhaseBase::PHASE_ALL_DONE) { + return NOT_READY; + } + + SomeGfxThing::setDrawCallback(someGfxThingCallback); + return SUCCEEDED; +} + +int dScGame_c::doDelete() { + MinigameManager::destroy(); + mRelCtrl.do_unlink(); + mLayoutCtrl.release(); + + return SUCCEEDED; +} + +int dScGame_c::execute() { + mFader.calc(); + mStateMgr.executeState(); + MinigameManager::execute(); + + return SUCCEEDED; +} + +int dScGame_c::draw() { + mScreen1.addToDrawList(); + mScreen2.addToDrawList(); + + return SUCCEEDED; +} + +void dScGame_c::deleteReady() { + SomeGfxThing::setDrawCallback(nullptr); +} + +sFPhaseBase::sFPhaseState dScGame_c::cb1() { + mFader.create(); + mFader.setFrames(15, 15); + mFader.setTypes(1, 1); + mFader.initForLyt(); + mRelCtrl.do_link(); + mLayoutCtrl.load(nullptr); + + return sFPhaseBase::PHASE_NEXT; +} + +sFPhaseBase::sFPhaseState dScGame_c::cb2() { + if (!mRelCtrl.do_link()) { + return sFPhaseBase::PHASE_RETRY; + } + + if (OarcManager::sInstance->ensureAllEntriesLoaded()) { + return sFPhaseBase::PHASE_RETRY; + } + + if (LayoutArcManager::sInstance->ensureAllEntriesLoaded()) { + return sFPhaseBase::PHASE_RETRY; + } + + MinigameManager::create(); + setReloadTrigger(fProfile::STAGE_MANAGER); + mStateMgr.changeState(StateID_Stanby); + return sFPhaseBase::PHASE_NEXT; +} + +sFPhaseBase::sFPhaseState dScGame_c::cb3() { + if (checkChildProcessCreateState()) { + return sFPhaseBase::PHASE_RETRY; + } + return sFPhaseBase::PHASE_NEXT; +} + +void dScGame_c::initializeState_Stanby() { + setProcControlFlag(ROOT_DISABLE_EXECUTE | ROOT_DISABLE_DRAW); + if (mReloadTrigger == fProfile::STAGE_MANAGER) { + copySpawnNextToCurrent(); + } + dBase_c *base = dBase_c::createBase(mReloadTrigger, this, 0, OTHER); + mStageMgrRef.link(base); + mReloadTrigger = fProfile::PROFILE_MAX; +} + +void dScGame_c::executeState_Stanby() { + mStateMgr.changeState(StateID_Action); +} + +void dScGame_c::finalizeState_Stanby() {} + +void dScGame_c::initializeState_Action() { + mFader.fadeIn(); +} + +void dScGame_c::executeState_Action() { + if (mFader.isStatus(mFaderBase_c::FADED_OUT)) { + if (attemptDelete()) { + mStateMgr.changeState(StateID_Stanby); + } + } else if (mReloadTrigger != fProfile::PROFILE_MAX) { + mFader.fadeOut(); + fn_80362150(ENEMY_SOUND_MGR, mFader.getFadeOutFrame()); + } +} + +void dScGame_c::finalizeState_Action() {} + +void dScGame_c::somethingWithScreen() {} + +void dScGame_c::setRespawnInfo(const mVec3_c &linkPos, const mAng3_c &linkRot, bool unk) { + bool isInThunderDragonTrial = MinigameManager::isInMinigameState(MinigameManager::TRIAL_TIME_ATTACK) || + MinigameManager::isInMinigameState(MinigameManager::BOSS_RUSH) ? + true : + false; + bool isInHordeFight = isCurrentStage("F403") && !StoryflagManager::sInstance->getFlag(134); + s32 areaType = dStageMgr_c::GetInstance()->getAreaType(); + if (mPreventSaveRespawnInfo != true && !isInThunderDragonTrial && !isInHordeFight && + (areaType != 2 && !isCurrentStage("B100_1") && !sPreventClearingSomeFlag && + (areaType != 1 || (mLastAreaType != 1 && mLastAreaType != 2)))) { + FileManager::sInstance->setT3Info(linkPos, linkRot); + if (mLastAreaType != 5 && unk) { + StoryflagManager::sInstance->unsetFlag(752); + } + } + + if (!isInThunderDragonTrial && isCurrentStage("B400") && mLastAreaType != 2) { + FileManager::sInstance->copyCurrentToFileB(); + } + sPreventClearingSomeFlag = 0; + mPreventSaveRespawnInfo = false; + mLastAreaType = areaType; +} + +const LinkReloadInfo &dScGame_c::getLinkReloadInfo() const { + return mReloadInfo; +} + +bool dScGame_c::attemptDelete() { + if (mStageMgrRef.p_owner == nullptr) { + return true; + } else { + if (!mStageMgrRef.p_owner->delete_request) { + mStageMgrRef.p_owner->deleteRequest(); + } + return false; + } +} + +bool dScGame_c::setReloadTrigger(fProfile::PROFILE_NAME_e trigger) { + if (mReloadTrigger != fProfile::PROFILE_MAX) { + return false; + } + mReloadTrigger = trigger; + return true; +} + +void dScGame_c::setSpawnInfo(u8 roomid, const mVec3_c &pos, mAng rot) { + mSpawnInfo.setSpawnData(currentSpawnInfo.stageName, roomid, sCurrentLayer, 0, pos, rot); +} + +const SpawnInfoExt &dScGame_c::getSpawnInfo() const { + return mSpawnInfo; +} + +void dScGame_c::clearSpawnInfo() { + mSpawnInfo.setSpawnData("", 0, 0, 0, mVec3_c::Zero, 0); +} + +extern "C" void processEventFlags(); +void dScGame_c::triggerExit(s32 room, u8 exitIndex, s32 forcedNight, s32 forcedTrial) { + processEventFlags(); + // TODO +} + +void SpawnInfoExt::setSpawnData( + const char *i_stageName, u8 i_roomid, u8 i_layer, u8 i_entrance, const mVec3_c &pos, mAng rot +) { + setData( + i_stageName, i_roomid, i_layer, i_entrance, dScGame_c::currentSpawnInfo.night, + dScGame_c::currentSpawnInfo.trial, 0, 15, -1 + ); + mType0Pos = pos; + mType0RotY = rot; +} + +void LinkReloadInfo::set(u8 roomid, const mVec3_c &pos, mAng rot, u32 flags) { + mRoomId = roomid; + mPosition = pos; + mRotY = rot; + mUnkFlags = flags; + mType0CsFlag = 1; +} + +bool dScGame_c::isCurrentStage(const char *stage) { + return dScGame_c::currentSpawnInfo.stageName == stage; +} + +extern "C" void fn_801BB9C0(); +extern "C" void *lbl_80575688; +extern "C" void fn_801909A0(void *); +extern "C" void maybeResetSkykeepPuzzle(bool); + +void dScGame_c::copySpawnNextToCurrent() { + if (sDoSomethingWithFileAOnTransition == true) { + fn_801BB9C0(); + sDoSomethingWithFileAOnTransition = false; + } + if (std::strncmp(currentSpawnInfo.stageName, nextSpawnInfo.stageName, 2)) { + fn_801909A0(lbl_80575688); + } + currentSpawnInfo = nextSpawnInfo; + sCurrentLayer = currentSpawnInfo.layer; + maybeResetSkykeepPuzzle(false); +} + +void dScGame_c::actuallyTriggerEntrance( + const char *stageName, u8 roomid, u8 layer, u8 entrance, int forcedNight, int forcedTrial, u8 transitionType, + u16 transitionFadeFrames, s8 field0x28 +) { + s32 trial, night; + if (forcedTrial == 2) { + trial = currentSpawnInfo.trial; + } else { + trial = forcedTrial; + } + + if (forcedNight == 2) { + night = currentSpawnInfo.night; + } else { + night = forcedNight; + } + + nextSpawnInfo.setData( + stageName, roomid, layer, entrance, night, trial, transitionType, transitionFadeFrames, field0x28 + ); + + if (dScGame_c::GetInstance() != nullptr) { + dScGame_c::GetInstance()->setFadeInType(transitionType); + dScGame_c::GetInstance()->setFadeOutType(transitionType); + dScGame_c::GetInstance()->setFaderFrames(transitionFadeFrames); + dScGame_c::GetInstance()->resetLinkState(); + dScGame_c::GetInstance()->setBeedleShopState(0); + } +} + +void SpawnInfo::setData( + const char *i_stageName, u8 i_roomid, u8 i_layer, u8 i_entrance, s32 i_night, s32 i_trial, u8 i_transitionType, + u16 i_fadeFrames, s8 i_field0x28 +) { + stageName = i_stageName; + room = i_roomid; + layer = i_layer; + entrance = i_entrance; + night = i_night; + trial = i_trial; + transitionType = i_transitionType; + transitionFadeFrames = i_fadeFrames; + unk = i_field0x28; +} diff --git a/src/d/d_sc_title.cpp b/src/d/d_sc_title.cpp new file mode 100644 index 00000000..07f227a2 --- /dev/null +++ b/src/d/d_sc_title.cpp @@ -0,0 +1,218 @@ +#include "d/d_sc_title.h" + +#include "common.h" +#include "d/d_heap.h" +#include "d/d_sc_game.h" +#include "d/d_sys.h" +#include "f/f_base.h" +#include "f/f_profile_name.h" +#include "m/m_color.h" +#include "m/m_dvd.h" +#include "s/s_State.hpp" +#include "sized_string.h" +#include "toBeSorted/arc_managers/layout_arc_manager.h" +#include "toBeSorted/file_manager.h" +#include "toBeSorted/music_mgrs.h" +#include "toBeSorted/reload_color_fader.h" + +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; +} + +static u16 sModulesToLoad[] = { + // ??? not sure what these correspond to + 0x229, 0x2B0, 0x2B6, 0x2AF, 0x2B7, +}; + +static const char *sLayoutArcsToLoad[] = { + "Title2D", +}; + +STATE_VIRTUAL_DEFINE(dScTitle_c, Stanby); +STATE_VIRTUAL_DEFINE(dScTitle_c, Action); + +extern "C" void *lbl_80575688; +extern "C" void fn_801907F0(void *); +extern "C" void *lbl_805750D8; +extern "C" void fn_80052D50(void *); + +dScTitle_c::dScTitle_c() { + sInstance = this; + mRelCtrl.set(sModulesToLoad, ARRAY_LENGTH(sModulesToLoad)); + mLayoutCtrl.set(sLayoutArcsToLoad, ARRAY_LENGTH(sLayoutArcsToLoad)); + fn_801907F0(lbl_80575688); + if (checkAllSaveFilesEmpty() == true) { + actuallyTriggerEntrance("F000", 0, 26, 55, 0, 0, 0, 15, -1); + } else { + actuallyTriggerEntrance("F000", 0, 28, 48, 0, 0, 0, 15, -1); + } + FileManager::sInstance->clearTempFileData(); + FileManager::sInstance->initFile(1); + fn_80052D50(lbl_805750D8); + lbl_80575787 = 0; + field_0x2AC = 0; +} + +dScTitle_c::~dScTitle_c() { + sInstance = nullptr; +} + +extern "C" u32 TITLE_SCREEN_CHANGE; +extern "C" void fn_80059450(); +extern "C" void fn_80058C90(s32); +extern "C" void fn_80015E40(); +extern "C" const char *getUsedLanguageString(); + +static const char *const sFileSelect = "FileSelect"; +static const char *const sSkb = "SoftwareKeyboard"; + +int dScTitle_c::create() { + int ret = dScGame_c::create(); + if (ret == SUCCEEDED && ReloadColorFader::GetInstance()->field_0x0C == 1) { + if (field_0x2AC == 0) { + ReloadColorFader::GetInstance()->fn_80067EF0(0); + if (checkAllSaveFilesEmpty() != true) { + TITLE_SCREEN_CHANGE = 0; + } + field_0x2AC = 1; + ret = NOT_READY; + } else { + ReloadColorFader::GetInstance()->fn_80067EF0(1); + } + } + + if (ret == SUCCEEDED) { + dSys::setFrameRate(2); + dSys::setClearColor(mColor(0x00000000)); + fn_80059450(); + fn_80058C90(0); + fn_80015E40(); + field_0x2AD = 0; + LayoutArcManager::sInstance->loadLayoutArcFromDisk(sFileSelect, nullptr); + LayoutArcManager::sInstance->loadLayoutArcFromDisk(sSkb, nullptr); + mDvd_toMainRam_normal_c::create2(&mpSkbArc, "/SKB/sofkeybd.arc", 0, dHeap::work2Heap.heap); + SizedString<128> fntPath; + fntPath.sprintf("/US/Font/%s/%s", getUsedLanguageString(), "normal_02.brfnt"); + mDvd_toMainRam_normal_c::create2(&mpSkbFont, fntPath, 0, dHeap::work2Heap.heap); + fn_8035E310(BGM_MGR); + } + + return ret; +} + +int dScTitle_c::execute() { + mFader.calc(); + mStateMgr.executeState(); + return SUCCEEDED; +} + +extern "C" void fn_80015E80(); + +int dScTitle_c::doDelete() { + // TODO return codes + int result; + result = LayoutArcManager::sInstance->ensureLoaded2(sFileSelect); + if (result != -2) { + if (result != 0) { + return NOT_READY; + } + LayoutArcManager::sInstance->decrement(sFileSelect); + } + + result = LayoutArcManager::sInstance->ensureLoaded2(sSkb); + if (result != -2) { + if (result != 0) { + return NOT_READY; + } + LayoutArcManager::sInstance->decrement(sSkb); + } + + // TODO here's the other half of the ::destroy fakematch... + if (mpSkbArc->mStatus != 0) { + mDvd_command_c::destroy((mDvd_command_c **)&mpSkbArc); + } else { + return NOT_READY; + } + + if (mpSkbFont->mStatus != 0) { + mDvd_command_c::destroy((mDvd_command_c **)&mpSkbFont); + } else { + return NOT_READY; + } + + dScGame_c::doDelete(); + fn_80015E80(); + return SUCCEEDED; +} + +int dScTitle_c::draw() { + dScGame_c::draw(); + return SUCCEEDED; +} + +extern "C" u32 TITLE_SCREEN_CHANGE; +void dScTitle_c::loadTitleScreen(u32 params) { + FileManager::sInstance->updateEmptyFiles(); + if (checkAllSaveFilesEmpty() == true && params != 1) { + params = 2; + } + TITLE_SCREEN_CHANGE = params; + setRootActor(fProfile::TITLE, params, 0, 0); + if (checkAllSaveFilesEmpty() == true) { + actuallyTriggerEntrance("F000", 0, 26, 55, 0, 0, 0, 15, -1); + } else { + actuallyTriggerEntrance("F000", 0, 28, 48, 0, 0, 0, 15, -1); + } + fn_80362150(ENEMY_SOUND_MGR, 30); +} + +void dScTitle_c::setSomethingSkbRelated() { + if (sInstance != nullptr) { + sInstance->field_0x2AD = 1; + } +} + +void dScTitle_c::initializeState_Stanby() { + dScGame_c::initializeState_Stanby(); +} + +void dScTitle_c::executeState_Stanby() { + dScGame_c::executeState_Stanby(); +} + +void dScTitle_c::finalizeState_Stanby() { + dScGame_c::finalizeState_Stanby(); +} + +void dScTitle_c::initializeState_Action() { + dScGame_c::initializeState_Action(); +} + +void dScTitle_c::executeState_Action() { + dScGame_c::executeState_Action(); +} + +void dScTitle_c::finalizeState_Action() { + dScGame_c::finalizeState_Action(); +} + +bool dScTitle_c::checkAllSaveFilesEmpty() { + FileManager *mgr = FileManager::sInstance; + bool allEmpty = true; + for (int i = 0; i < 3; i++) { + if (!mgr->isFileEmpty(i)) { + allEmpty = false; + break; + } + } + if (!sPreventEmptyFilesTitle && allEmpty == true) { + return true; + } + return false; +} diff --git a/src/d/lyt/meter/d_lyt_meter.cpp b/src/d/lyt/meter/d_lyt_meter.cpp index ef9eaf92..302892bd 100644 --- a/src/d/lyt/meter/d_lyt_meter.cpp +++ b/src/d/lyt/meter/d_lyt_meter.cpp @@ -1,11 +1,13 @@ // clang-format off #include "common.h" +#include "d/d_sc_game.h" +#include "d/d_sc_title.h" #include "d/lyt/d_lyt_area_caption.h" #include "d/lyt/d_lyt_meter_configuration.h" #include "d/lyt/d_window.h" #include "d/lyt/meter/d_lyt_meter.h" +#include "toBeSorted/stage_manager.h" #include "toBeSorted/arc_managers/layout_arc_manager.h" -#include "toBeSorted/scgame.h" // clang-format on static dLytMeterConfiguration_c sConf; @@ -277,7 +279,6 @@ void floats2() { dLytMeter_c::dLytMeter_c() {} #pragma dont_inline reset -extern "C" void *GLOBAL_TITLE_RELOADER; extern "C" void fn_800D97E0(int i); extern "C" void fn_800D9800(int i); extern "C" void fn_801B2D10(void *); @@ -322,10 +323,6 @@ static const d2d::LytBrlanMapping meterBrlanMap[] = { {"basicPosition_00_rupyPosition.brlan", "G_rupyPosi_00"}, }; -extern "C" void *STAGE_MANAGER; -extern "C" bool StageManager__isAreaTypeSky(void *stageMgr); -extern "C" bool StageManager__isAreaTypeDungeon(void *stageMgr); - bool dLytMeter_c::build(d2d::ResAccIf_c *resAcc) { mLyt.setResAcc(resAcc); mLyt.build("basicPosition_00.brlyt", nullptr); @@ -341,7 +338,7 @@ bool dLytMeter_c::build(d2d::ResAccIf_c *resAcc) { // out G_shield_00 mShield.setContainerGroup(&mAnmGroups[28]); - if (GLOBAL_TITLE_RELOADER == nullptr) { + if (dScTitle_c::sInstance == nullptr) { mp1Button = new dLytMeter1Button_c(); mp2Button = new dLytMeter2Button_c(); } else { @@ -406,7 +403,7 @@ bool dLytMeter_c::build(d2d::ResAccIf_c *resAcc) { mpTimerPart2 = nullptr; } - if (GLOBAL_TITLE_RELOADER == nullptr && StageManager__isAreaTypeSky(STAGE_MANAGER)) { + if (dScTitle_c::sInstance == nullptr && dStageMgr_c::GetInstance()->isAreaTypeSky()) { mpSkyGauge = new dLytSkyGauge_c(); mpSkyGauge->build(resAcc); @@ -417,38 +414,38 @@ bool dLytMeter_c::build(d2d::ResAccIf_c *resAcc) { mpBirdGauge = nullptr; } - if (ScGame::currentSpawnInfo.stageName == "F401") { + if (dScGame_c::currentSpawnInfo.stageName == "F401") { mpBossGauge = new dLytBossGauge_c(); mpBossGauge->build(); } else { mpBossGauge = nullptr; } - if (ScGame::isCurrentStage("F200") || ScGame::isCurrentStage("F210") || ScGame::isCurrentStage("F211")) { + if (dScGame_c::isCurrentStage("F200") || dScGame_c::isCurrentStage("F210") || dScGame_c::isCurrentStage("F211")) { mpKakeraKey = new dLytMeterKakeraKey_c(); mpKakeraKey->build(resAcc); } else { mpKakeraKey = nullptr; } - if (!StageManager__isAreaTypeDungeon(STAGE_MANAGER) || ScGame::currentSpawnInfo.stageName == "F100_1" || - ScGame::currentSpawnInfo.stageName == "F103_1") { + if (!dStageMgr_c::GetInstance()->isAreaTypeDungeon() || dScGame_c::currentSpawnInfo.stageName == "F100_1" || + dScGame_c::currentSpawnInfo.stageName == "F103_1") { mpBossKey = nullptr; } else { mpBossKey = new dLytMeterBossKey_c(); mpBossKey->build(resAcc); } - if (StageManager__isAreaTypeDungeon(STAGE_MANAGER) && - (!(ScGame::currentSpawnInfo.stageName == "F100_1") && !(ScGame::currentSpawnInfo.stageName == "F103_1")) || - ScGame::currentSpawnInfo.stageName == "F302" || ScGame::currentSpawnInfo.stageName == "F302") { + if (dStageMgr_c::GetInstance()->isAreaTypeDungeon() && + (!(dScGame_c::currentSpawnInfo.stageName == "F100_1") && !(dScGame_c::currentSpawnInfo.stageName == "F103_1")) || + dScGame_c::currentSpawnInfo.stageName == "F302" || dScGame_c::currentSpawnInfo.stageName == "F302") { mpSmallKey = new dLytMeterSmallKey_c(); mpSmallKey->build(resAcc); } else { mpSmallKey = nullptr; } - if (GLOBAL_TITLE_RELOADER != nullptr) { + if (dScTitle_c::sInstance != nullptr) { mpDrink = nullptr; } else { mpDrink = new dLytMeterDrink_c(); @@ -597,7 +594,7 @@ dLytMeterContainer_c::dLytMeterContainer_c() { bool dLytMeterContainer_c::build() { void *data = LayoutArcManager::sInstance->getLoadedData("DoButton"); mResAcc.attach(data, ""); - if (GLOBAL_TITLE_RELOADER != nullptr) { + if (dScTitle_c::sInstance != nullptr) { mpEventSkip = nullptr; } else { mpEventSkip = new dLytMeterEventSkip_c(); @@ -609,7 +606,7 @@ bool dLytMeterContainer_c::build() { dLytAreaCaption_c::create(); mMeter.build(&mResAcc); - if (GLOBAL_TITLE_RELOADER != nullptr) { + if (dScTitle_c::sInstance != nullptr) { mpDoButton = nullptr; mpDoButtonRelated = nullptr; mpBirdRelated = nullptr; diff --git a/src/d/tg/d_t_switch.cpp b/src/d/tg/d_t_switch.cpp index 22e358fc..f3385cf8 100644 --- a/src/d/tg/d_t_switch.cpp +++ b/src/d/tg/d_t_switch.cpp @@ -1,9 +1,9 @@ #include "d/t/d_t_switch.h" +#include "d/d_sc_game.h" #include "d/flag/sceneflag_manager.h" #include "s/s_Math.h" #include "toBeSorted/event.h" -#include "toBeSorted/scgame.h" SPECIAL_ACTOR_PROFILE(SW_TAG, dTgSw_c, fProfile::SW_TAG, 0x24, 0, 0); @@ -35,7 +35,7 @@ int dTgSw_c::create() { mTrigSceneFlagIdEnd += (params >> 0x1C); } - if (ScGame::isCurrentStage("D201")) { + if (dScGame_c::isCurrentStage("D201")) { if (roomid == 4) { if (!SceneflagManager::sInstance->checkBoolFlag(roomid, 0x2F)) { SceneflagManager::sInstance->unsetFlag(roomid, mSetSceneFlagId); @@ -107,7 +107,7 @@ bool dTgSw_c::isPuzzleSolved() { } bool dTgSw_c::isLmfBossKeyPuzzle() { - return ScGame::isCurrentStage("D300_1") && roomid == 8 && mSetSceneFlagId == 0x1C; + return dScGame_c::isCurrentStage("D300_1") && roomid == 8 && mSetSceneFlagId == 0x1C; } void dTgSw_c::initializeState_OnWait() { diff --git a/src/toBeSorted/arc_managers/layout_arc_manager.cpp b/src/toBeSorted/arc_managers/layout_arc_manager.cpp index b94dec1a..fd146e26 100644 --- a/src/toBeSorted/arc_managers/layout_arc_manager.cpp +++ b/src/toBeSorted/arc_managers/layout_arc_manager.cpp @@ -28,8 +28,8 @@ int LayoutArcManager::ensureLoaded1(const char *object) { return mArcTable.ensureLoadedMaybe2(object); } -void LayoutArcManager::ensureLoaded2(const char *object) { - mArcTable.ensureLoadedMaybe(object); +int LayoutArcManager::ensureLoaded2(const char *object) { + return mArcTable.ensureLoadedMaybe(object); } bool LayoutArcManager::hasEntry(const char *object) { diff --git a/src/toBeSorted/file_manager.cpp b/src/toBeSorted/file_manager.cpp index 30853c27..8554415a 100644 --- a/src/toBeSorted/file_manager.cpp +++ b/src/toBeSorted/file_manager.cpp @@ -447,7 +447,7 @@ extern "C" void fn_800C01F0(); // todo flag managers } } } -/* 80011370 */ bool FileManager::isFileEmpty(int fileNum) {} +/* 80011370 */ bool FileManager::isFileEmpty(u8 fileNum) {} /* 80011390 */ bool FileManager::isFileDirty(int fileNum) {} /* 800113B0 */ u8 FileManager::get_0xA84C() {} /* 800113C0 */ bool FileManager::checkRegionCode() {} @@ -464,5 +464,5 @@ bool FileManager::isFileInactive() const { return false; } /* 80011500 */ void FileManager::setPlayerInfoFileA() {} -/* 800115E0 */ void FileManager::setT3Info(mVec3_c *pos, mAng3_c *rot) {} +/* 800115E0 */ void FileManager::setT3Info(const mVec3_c &pos, const mAng3_c &rot) {} /* 800116C0 */ void FileManager::getRegionVersion(char *out) {} diff --git a/src/toBeSorted/scgame.cpp b/src/toBeSorted/scgame.cpp deleted file mode 100644 index 47c8875e..00000000 --- a/src/toBeSorted/scgame.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "toBeSorted/scgame.h" - -SpawnInfo ScGame::currentSpawnInfo = {}; -SpawnInfo ScGame::nextSpawnInfo = {}; -ScGame* ScGame::sInstance = nullptr; diff --git a/src/toBeSorted/time_area_mgr.cpp b/src/toBeSorted/time_area_mgr.cpp index 4c79ef7a..6a177e74 100644 --- a/src/toBeSorted/time_area_mgr.cpp +++ b/src/toBeSorted/time_area_mgr.cpp @@ -1,8 +1,8 @@ #include "toBeSorted/time_area_mgr.h" #include "d/d_heap.h" +#include "d/d_sc_game.h" #include "nw4r/g3d/g3d_obj.h" -#include "toBeSorted/scgame.h" dTimeAreaMgr_c::dTimeAreaMgr_c() { sInstance = this; @@ -17,7 +17,7 @@ bool dTimeAreaMgr_c::init() { mProcA.create(&mAllocator); mProcB.create(&mAllocator); mAllocator.adjustFrmHeap(); - mIsInLanayruMiningFacility = ScGame::isCurrentStage("D300") || ScGame::isCurrentStage("D300_1"); + mIsInLanayruMiningFacility = dScGame_c::isCurrentStage("D300") || dScGame_c::isCurrentStage("D300_1"); return true; }