diff --git a/config/RSBE01_02/rels/sora_adv_menu_game_over/symbols.txt b/config/RSBE01_02/rels/sora_adv_menu_game_over/symbols.txt index 9ce3e4b..744a6f7 100644 --- a/config/RSBE01_02/rels/sora_adv_menu_game_over/symbols.txt +++ b/config/RSBE01_02/rels/sora_adv_menu_game_over/symbols.txt @@ -1,4 +1,4 @@ -fn_33_0 = .text:0x00000000; // type:function size:0x44 +create__17muAdvGameOverTaskFPC22muAdvGameOverTaskParam = .text:0x00000000; // type:function size:0x44 fn_33_44 = .text:0x00000044; // type:function size:0x418 fn_33_45C = .text:0x0000045C; // type:function size:0xCC fn_33_528 = .text:0x00000528; // type:function size:0xC0 @@ -13,7 +13,7 @@ fn_33_E50 = .text:0x00000E50; // type:function size:0xCEC fn_33_1B3C = .text:0x00001B3C; // type:function size:0x330 fn_33_1E6C = .text:0x00001E6C; // type:function size:0x294 fn_33_2100 = .text:0x00002100; // type:function size:0x384 -fn_33_2484 = .text:0x00002484; // type:function size:0x60 +getSelection__17muAdvGameOverTaskCFv = .text:0x00002484; // type:function size:0x60 fn_33_24E4 = .text:0x000024E4; // type:function size:0xF0 fn_33_25D4 = .text:0x000025D4; // type:function size:0x4DC fn_33_2AB0 = .text:0x00002AB0; // type:function size:0x30 diff --git a/config/RSBE01_02/rels/sora_adv_stage/symbols.txt b/config/RSBE01_02/rels/sora_adv_stage/symbols.txt index e6dbf35..a44863e 100644 --- a/config/RSBE01_02/rels/sora_adv_stage/symbols.txt +++ b/config/RSBE01_02/rels/sora_adv_stage/symbols.txt @@ -1397,7 +1397,7 @@ fn_40_467B8 = .text:0x000467B8; // type:function size:0xD4 fn_40_4688C = .text:0x0004688C; // type:function size:0x280 fn_40_46B0C = .text:0x00046B0C; // type:function size:0x790 fn_40_4729C = .text:0x0004729C; // type:function size:0x2A8 -fn_40_47544 = .text:0x00047544; // type:function size:0x88 +create__13muAdvSaveTaskFPC18muAdvSaveTaskParamQ25Heaps8HeapTypeUl = .text:0x00047544; // type:function size:0x88 fn_40_475CC = .text:0x000475CC; // type:function size:0x58 fn_40_47624 = .text:0x00047624; // type:function size:0x8 fn_40_4762C = .text:0x0004762C; // type:function size:0x8C @@ -1405,14 +1405,14 @@ fn_40_476B8 = .text:0x000476B8; // type:function size:0xD4 fn_40_4778C = .text:0x0004778C; // type:function size:0x2D8 fn_40_47A64 = .text:0x00047A64; // type:function size:0xC fn_40_47A70 = .text:0x00047A70; // type:function size:0xB4 -fn_40_47B24 = .text:0x00047B24; // type:function size:0x6C +create__13muAdvLoadTaskFPC18muAdvLoadTaskParam = .text:0x00047B24; // type:function size:0x6C fn_40_47B90 = .text:0x00047B90; // type:function size:0x8 fn_40_47B98 = .text:0x00047B98; // type:function size:0x98 fn_40_47C30 = .text:0x00047C30; // type:function size:0x150 fn_40_47D80 = .text:0x00047D80; // type:function size:0x58 fn_40_47DD8 = .text:0x00047DD8; // type:function size:0x4 fn_40_47DDC = .text:0x00047DDC; // type:function size:0x4 -fn_40_47DE0 = .text:0x00047DE0; // type:function size:0x8 +isLoaded__13muAdvLoadTaskCFv = .text:0x00047DE0; // type:function size:0x8 fn_40_47DE8 = .text:0x00047DE8; // type:function size:0x8 fn_40_47DF0 = .text:0x00047DF0; // type:function size:0x8 fn_40_47DF8 = .text:0x00047DF8; // type:function size:0x58 diff --git a/config/RSBE01_02/rels/sora_melee/splits.txt b/config/RSBE01_02/rels/sora_melee/splits.txt index de77daf..75a009b 100644 --- a/config/RSBE01_02/rels/sora_melee/splits.txt +++ b/config/RSBE01_02/rels/sora_melee/splits.txt @@ -24,6 +24,10 @@ mo_melee/sora_melee/so/so_controller_module_link_ref.cpp: .rodata start:0x00000748 end:0x0000075C .data start:0x00005ED8 end:0x00006050 +mo_melee/sora_melee/so/so_heap_module_impl.cpp: + .text start:0x000649FC end:0x00064A90 + .data start:0x00007328 end:0x000073A8 + mo_melee/sora_melee/so/so_resource_module_impl.cpp: .text start:0x0006F850 end:0x0006FCF4 .data start:0x00008028 end:0x000080F8 diff --git a/config/RSBE01_02/rels/sora_melee/symbols.txt b/config/RSBE01_02/rels/sora_melee/symbols.txt index 396567f..0236f86 100644 --- a/config/RSBE01_02/rels/sora_melee/symbols.txt +++ b/config/RSBE01_02/rels/sora_melee/symbols.txt @@ -2248,14 +2248,14 @@ fn_27_64930 = .text:0x00064930; // type:function size:0xB8 fn_27_649E8 = .text:0x000649E8; // type:function size:0x4 fn_27_649EC = .text:0x000649EC; // type:function size:0x8 fn_27_649F4 = .text:0x000649F4; // type:function size:0x8 -fn_27_649FC = .text:0x000649FC; // type:function size:0x28 -fn_27_64A24 = .text:0x00064A24; // type:function size:0x40 -fn_27_64A64 = .text:0x00064A64; // type:function size:0x8 -fn_27_64A6C = .text:0x00064A6C; // type:function size:0x8 -fn_27_64A74 = .text:0x00064A74; // type:function size:0x8 -fn_27_64A7C = .text:0x00064A7C; // type:function size:0x8 -fn_27_64A84 = .text:0x00064A84; // type:function size:0x8 -fn_27_64A8C = .text:0x00064A8C; // type:function size:0x4 +__ct__16soHeapModuleImplFQ25Heaps8HeapTypeQ25Heaps8HeapTypeQ25Heaps8HeapTypel = .text:0x000649FC; // type:function size:0x28 +__dt__16soHeapModuleImplFv = .text:0x00064A24; // type:function size:0x40 +getSlotNo__16soHeapModuleImplCFv = .text:0x00064A64; // type:function size:0x8 +getNWMotionInstanceHeap__16soHeapModuleImplCFv = .text:0x00064A6C; // type:function size:0x8 +getNWModelInstanceHeap__16soHeapModuleImplCFv = .text:0x00064A74; // type:function size:0x8 +setInstanceHeap__16soHeapModuleImplFQ25Heaps8HeapType = .text:0x00064A7C; // type:function size:0x8 +getInstanceHeap__16soHeapModuleImplCFv = .text:0x00064A84; // type:function size:0x8 +setInstanceHeap__12soHeapModuleFQ25Heaps8HeapType = .text:0x00064A8C; // type:function size:0x4 fn_27_64A90 = .text:0x00064A90; // type:function size:0x60 fn_27_64AF0 = .text:0x00064AF0; // type:function size:0x64 fn_27_64B54 = .text:0x00064B54; // type:function size:0xD4 @@ -28648,13 +28648,13 @@ lbl_27_data_72F8 = .data:0x000072F8; // type:object size:0x10 lbl_27_data_7308 = .data:0x00007308; // type:object size:0x8 lbl_27_data_7310 = .data:0x00007310; // type:object size:0xC lbl_27_data_731C = .data:0x0000731C; // type:object size:0xC -lbl_27_data_7328 = .data:0x00007328; // type:object size:0x24 +__vt__16soHeapModuleImpl = .data:0x00007328; // type:object size:0x24 lbl_27_data_734C = .data:0x0000734C; // type:object size:0x11 data:string lbl_27_data_7360 = .data:0x00007360; // type:object size:0x18 -lbl_27_data_7378 = .data:0x00007378; // type:object size:0x8 +__RTTI__16soHeapModuleImpl = .data:0x00007378; // type:object size:0x8 lbl_27_data_7380 = .data:0x00007380; // type:object size:0xD data:string lbl_27_data_7390 = .data:0x00007390; // type:object size:0x10 -lbl_27_data_73A0 = .data:0x000073A0; // type:object size:0x8 +__RTTI__12soHeapModule = .data:0x000073A0; // type:object size:0x8 lbl_27_data_73A8 = .data:0x000073A8; // type:object size:0x6 data:string lbl_27_data_73B0 = .data:0x000073B0; // type:object size:0x64 lbl_27_data_7414 = .data:0x00007414; // type:object size:0xF data:string diff --git a/config/RSBE01_02/rels/sora_scene/splits.txt b/config/RSBE01_02/rels/sora_scene/splits.txt index 908fca5..23700f9 100644 --- a/config/RSBE01_02/rels/sora_scene/splits.txt +++ b/config/RSBE01_02/rels/sora_scene/splits.txt @@ -40,6 +40,10 @@ mo_scene/sora_scene/sc_adv_selchar.cpp: .text start:0x0001BFDC end:0x0001C084 .data start:0x00005D50 end:0x00005DA0 +mo_scene/sora_scene/sc_adv_saveload.cpp: + .text start:0x0001C084 end:0x0001C4A8 + .data start:0x00005DA0 end:0x00005E48 + mo_scene/sora_scene/sc_adv_diff.cpp: .text start:0x0001C4A8 end:0x0001C668 .rodata start:0x000008C0 end:0x000008D0 @@ -49,6 +53,10 @@ mo_scene/sora_scene/sc_adv_result.cpp: .text start:0x0001FDEC end:0x0002006C .data start:0x00006488 end:0x000064E8 +mo_scene/sora_scene/sc_adv_gameover.cpp: + .text start:0x000207B4 end:0x00020B2C + .data start:0x00006600 end:0x000067E8 + mo_scene/mo_scene.cpp: .text start:0x0003D4B8 end:0x0003D588 .data start:0x00009C30 end:0x00009C3D diff --git a/config/RSBE01_02/rels/sora_scene/symbols.txt b/config/RSBE01_02/rels/sora_scene/symbols.txt index 5f8bb53..15de12a 100644 --- a/config/RSBE01_02/rels/sora_scene/symbols.txt +++ b/config/RSBE01_02/rels/sora_scene/symbols.txt @@ -40,8 +40,8 @@ fn_1_4A44 = .text:0x00004A44; // type:function size:0x440 fn_1_4E84 = .text:0x00004E84; // type:function size:0x30 fn_1_4EB4 = .text:0x00004EB4; // type:function size:0x34 fn_1_4EE8 = .text:0x00004EE8; // type:function size:0xFC -fn_1_4FE4 = .text:0x00004FE4; // type:function size:0x34 -fn_1_5018 = .text:0x00005018; // type:function size:0x40 +__ct__16muMenuControllerFv = .text:0x00004FE4; // type:function size:0x34 +__dt__16muMenuControllerFv = .text:0x00005018; // type:function size:0x40 fn_1_5058 = .text:0x00005058; // type:function size:0x58 fn_1_50B0 = .text:0x000050B0; // type:function size:0x10 fn_1_50C0 = .text:0x000050C0; // type:function size:0xD0 @@ -360,16 +360,16 @@ create__12scAdvSelCharFv = .text:0x0001BFDC; // type:function size:0x48 start__12scAdvSelCharFv = .text:0x0001C024; // type:function size:0x4 process__12scAdvSelCharFv = .text:0x0001C028; // type:function size:0x54 exit__12scAdvSelCharFv = .text:0x0001C07C; // type:function size:0x8 -fn_1_1C084 = .text:0x0001C084; // type:function size:0x8C -fn_1_1C110 = .text:0x0001C110; // type:function size:0x4 -fn_1_1C114 = .text:0x0001C114; // type:function size:0xEC -fn_1_1C200 = .text:0x0001C200; // type:function size:0x84 -fn_1_1C284 = .text:0x0001C284; // type:function size:0x48 -fn_1_1C2CC = .text:0x0001C2CC; // type:function size:0x8C -fn_1_1C358 = .text:0x0001C358; // type:function size:0x4 -fn_1_1C35C = .text:0x0001C35C; // type:function size:0xAC -fn_1_1C408 = .text:0x0001C408; // type:function size:0x58 -fn_1_1C460 = .text:0x0001C460; // type:function size:0x48 +create__9scAdvSaveFv = .text:0x0001C084; // type:function size:0x8C +setModule__9scAdvSaveFv = .text:0x0001C110; // type:function size:0x4 +start__9scAdvSaveFv = .text:0x0001C114; // type:function size:0xEC +process__9scAdvSaveFv = .text:0x0001C200; // type:function size:0x84 +exit__9scAdvSaveFv = .text:0x0001C284; // type:function size:0x48 +create__9scAdvLoadFv = .text:0x0001C2CC; // type:function size:0x8C +setModule__9scAdvLoadFv = .text:0x0001C358; // type:function size:0x4 +start__9scAdvLoadFv = .text:0x0001C35C; // type:function size:0xAC +process__9scAdvLoadFv = .text:0x0001C408; // type:function size:0x58 +exit__9scAdvLoadFv = .text:0x0001C460; // type:function size:0x48 create__9scAdvDiffFv = .text:0x0001C4A8; // type:function size:0x50 setModule__9scAdvDiffFv = .text:0x0001C4F8; // type:function size:0x10 start__9scAdvDiffFv = .text:0x0001C508; // type:function size:0x60 @@ -415,11 +415,11 @@ fn_1_204F4 = .text:0x000204F4; // type:function size:0x4C fn_1_20540 = .text:0x00020540; // type:function size:0xC8 fn_1_20608 = .text:0x00020608; // type:function size:0xF8 fn_1_20700 = .text:0x00020700; // type:function size:0xB4 -fn_1_207B4 = .text:0x000207B4; // type:function size:0xD8 -fn_1_2088C = .text:0x0002088C; // type:function size:0x10 -fn_1_2089C = .text:0x0002089C; // type:function size:0xF4 -fn_1_20990 = .text:0x00020990; // type:function size:0xE8 -fn_1_20A78 = .text:0x00020A78; // type:function size:0xB4 +create__13scAdvGameoverFv = .text:0x000207B4; // type:function size:0xD8 +setModule__13scAdvGameoverFv = .text:0x0002088C; // type:function size:0x10 +start__13scAdvGameoverFv = .text:0x0002089C; // type:function size:0xF4 +process__13scAdvGameoverFv = .text:0x00020990; // type:function size:0xE8 +exit__13scAdvGameoverFv = .text:0x00020A78; // type:function size:0xB4 sqRegistSequence__Fv = .text:0x00020B2C; // type:function size:0x20C sqSystemSetStartSequence__Fb = .text:0x00020D38; // type:function size:0x58 fn_1_20D90 = .text:0x00020D90; // type:function size:0x48 @@ -986,7 +986,8 @@ lbl_1_data_780 = .data:0x00000780; // type:object size:0x18 lbl_1_data_798 = .data:0x00000798; // type:object size:0x8 lbl_1_data_7A0 = .data:0x000007A0; // type:object size:0x7 data:string lbl_1_data_7A8 = .data:0x000007A8; // type:object size:0x10 -lbl_1_data_7B8 = .data:0x000007B8; // type:object size:0x30 +__RTTI__6muMenu = .data:0x000007B8; // type:object size:0x8 +lbl_1_data_7C0 = .data:0x000007C0; // type:object size:0x28 lbl_1_data_7E8 = .data:0x000007E8; // type:object size:0xB70 jumptable_1_data_1358 = .data:0x00001358; // type:object size:0x28 scope:local lbl_1_data_1380 = .data:0x00001380; // type:object size:0x1C data:string @@ -1338,14 +1339,14 @@ lbl_1_data_5D88 = .data:0x00005D88; // type:object size:0x10 scope:local __RTTI__12scAdvSelChar = .data:0x00005D98; // type:object size:0x8 lbl_1_data_5DA0 = .data:0x00005DA0; // type:object size:0xA data:string lbl_1_data_5DAC = .data:0x00005DAC; // type:object size:0xA data:string -lbl_1_data_5DB8 = .data:0x00005DB8; // type:object size:0x1C +__vt__9scAdvLoad = .data:0x00005DB8; // type:object size:0x1C lbl_1_data_5DD4 = .data:0x00005DD4; // type:object size:0xA data:string lbl_1_data_5DE0 = .data:0x00005DE0; // type:object size:0x18 -lbl_1_data_5DF8 = .data:0x00005DF8; // type:object size:0x8 -lbl_1_data_5E00 = .data:0x00005E00; // type:object size:0x1C +__RTTI__9scAdvLoad = .data:0x00005DF8; // type:object size:0x8 +__vt__9scAdvSave = .data:0x00005E00; // type:object size:0x1C lbl_1_data_5E1C = .data:0x00005E1C; // type:object size:0xA data:string lbl_1_data_5E28 = .data:0x00005E28; // type:object size:0x18 -lbl_1_data_5E40 = .data:0x00005E40; // type:object size:0x8 +__RTTI__9scAdvSave = .data:0x00005E40; // type:object size:0x8 lbl_1_data_5E48 = .data:0x00005E48; // type:object size:0xA data:string lbl_1_data_5E54 = .data:0x00005E54; // type:object size:0x1D data:string lbl_1_data_5E74 = .data:0x00005E74; // type:object size:0xA data:string @@ -1419,10 +1420,11 @@ lbl_1_data_65EC = .data:0x000065EC; // type:object size:0xC lbl_1_data_65F8 = .data:0x000065F8; // type:object size:0x8 lbl_1_data_6600 = .data:0x00006600; // type:object size:0xE data:string lbl_1_data_6610 = .data:0x00006610; // type:object size:0xA8 -lbl_1_data_66B8 = .data:0x000066B8; // type:object size:0x18 +__vt__13scAdvGameover = .data:0x000066B8; // type:object size:0x18 lbl_1_data_66D0 = .data:0x000066D0; // type:object size:0xE data:string lbl_1_data_66E0 = .data:0x000066E0; // type:object size:0x10 -lbl_1_data_66F0 = .data:0x000066F0; // type:object size:0xF8 +__RTTI__13scAdvGameover = .data:0x000066F0; // type:object size:0x8 +lbl_1_data_66F8 = .data:0x000066F8; // type:object size:0xF0 lbl_1_data_67E8 = .data:0x000067E8; // type:object size:0x7 data:string lbl_1_data_67F0 = .data:0x000067F0; // type:object size:0x1D0 jumptable_1_data_69C0 = .data:0x000069C0; // type:object size:0x24 scope:local diff --git a/config/RSBE01_02/symbols.txt b/config/RSBE01_02/symbols.txt index d2c7655..3b6c8a3 100644 --- a/config/RSBE01_02/symbols.txt +++ b/config/RSBE01_02/symbols.txt @@ -4378,10 +4378,10 @@ fn_800AEC70 = .text:0x800AEC70; // type:function size:0xB0 fn_800AED20 = .text:0x800AED20; // type:function size:0x110 fn_800AEE30 = .text:0x800AEE30; // type:function size:0x124 fn_800AEF54 = .text:0x800AEF54; // type:function size:0x134 -init__6muMenuFiii = .text:0x800AF088; // type:function size:0x4 -start__6muMenuFiii = .text:0x800AF08C; // type:function size:0x64 -process__6muMenuFiii = .text:0x800AF0F0; // type:function size:0x50 -exit__6muMenuFiii = .text:0x800AF140; // type:function size:0x8 +init__6muMenuFv = .text:0x800AF088; // type:function size:0x4 +start__6muMenuFv = .text:0x800AF08C; // type:function size:0x64 +process__6muMenuFv = .text:0x800AF0F0; // type:function size:0x50 +exit__6muMenuFv = .text:0x800AF140; // type:function size:0x8 exchangeMuCharKindToGmCharacterKind__6muMenuFiii = .text:0x800AF148; // type:function size:0x18 exchangeGmCharacterKindToMuCharKind__6muMenuFiii = .text:0x800AF160; // type:function size:0xF8 exchangeMuCharKindToMuSelchkind__6muMenuFiii = .text:0x800AF258; // type:function size:0xC4 @@ -6500,11 +6500,11 @@ fn_8015B228 = .text:0x8015B228; // type:function size:0x8 fn_8015B230 = .text:0x8015B230; // type:function size:0x19C fn_8015B3CC = .text:0x8015B3CC; // type:function size:0xF0 fn_8015B4BC = .text:0x8015B4BC; // type:function size:0x34 -fn_8015B4F0 = .text:0x8015B4F0; // type:function size:0xA8 +create__10adAutoSaveFb = .text:0x8015B4F0; // type:function size:0xA8 fn_8015B598 = .text:0x8015B598; // type:function size:0x60 fn_8015B5F8 = .text:0x8015B5F8; // type:function size:0x284 fn_8015B87C = .text:0x8015B87C; // type:function size:0x220 -fn_8015BA9C = .text:0x8015BA9C; // type:function size:0x14 +isAlive__10adAutoSaveFv = .text:0x8015BA9C; // type:function size:0x14 __ct__15stDataContainerFP19stDataContainerData = .text:0x8015BAB0; // type:function size:0x1C __dt__15stDataContainerFv = .text:0x8015BACC; // type:function size:0x40 getData__15stDataContainerFUl = .text:0x8015BB0C; // type:function size:0x6C @@ -25444,7 +25444,7 @@ lbl_80455448 = .data:0x80455448; // type:object size:0x10 lbl_80455458 = .data:0x80455458; // type:object size:0x280 data:byte lbl_804556D8 = .data:0x804556D8; // type:object size:0x3D0 lbl_80455AA8 = .data:0x80455AA8; // type:object size:0x1C0 -lbl_80455C68 = .data:0x80455C68; // type:object size:0x1C +__vt__6muMenu = .data:0x80455C68; // type:object size:0x1C lbl_80455C84 = .data:0x80455C84; // type:object size:0xC lbl_80455C90 = .data:0x80455C90; // type:object size:0xB data:string lbl_80455C9C = .data:0x80455C9C; // type:object size:0x64 @@ -29297,7 +29297,7 @@ lbl_8059DEE0 = .sdata:0x8059DEE0; // type:object size:0x8 __RTTI__22cmMeleeFixedController = .sdata:0x8059DEE8; // type:object size:0x8 scope:weak lbl_8059DEF0 = .sdata:0x8059DEF0; // type:object size:0x8 lbl_8059DEF8 = .sdata:0x8059DEF8; // type:object size:0x7 data:string -lbl_8059DF00 = .sdata:0x8059DF00; // type:object size:0x8 +__RTTI__6muMenu = .sdata:0x8059DF00; // type:object size:0x8 lbl_8059DF08 = .sdata:0x8059DF08; // type:object size:0x8 data:string lbl_8059DF10 = .sdata:0x8059DF10; // type:object size:0x8 lbl_8059DF18 = .sdata:0x8059DF18; // type:object size:0x8 diff --git a/configure.py b/configure.py index bdb75a3..b6cca20 100755 --- a/configure.py +++ b/configure.py @@ -784,6 +784,7 @@ def MatchingFor(*versions): Object(Matching, "mo_melee/sora_melee/so/model/so_model_module_impl_variable.cpp"), Object(Matching, "mo_melee/sora_melee/so/anim/so_anim_chr.cpp"), Object(Matching, "mo_melee/sora_melee/so/so_controller_module_link_ref.cpp"), + Object(Matching, "mo_melee/sora_melee/so/so_heap_module_impl.cpp"), Object(Matching, "mo_melee/sora_melee/so/so_resource_module_impl.cpp"), Object(Matching, "mo_melee/sora_melee/so/so_general_work.cpp"), Object(Matching, "mo_melee/sora_melee/so/so_general_work_abstract.cpp"), @@ -982,8 +983,10 @@ def MatchingFor(*versions): Object(Matching, "mo_scene/sora_scene/sc_seal_disp.cpp"), Object(Matching, "mo_scene/sora_scene/sc_net_time_result.cpp"), Object(Matching, "mo_scene/sora_scene/sc_adv_selchar.cpp"), + Object(Matching, "mo_scene/sora_scene/sc_adv_saveload.cpp"), Object(Matching, "mo_scene/sora_scene/sc_adv_diff.cpp"), Object(Matching, "mo_scene/sora_scene/sc_adv_result.cpp"), + Object(NonMatching, "mo_scene/sora_scene/sc_adv_gameover.cpp"), Object(Matching, "mo_scene/mo_scene.cpp"), ], }, diff --git a/include/lib/BrawlHeaders b/include/lib/BrawlHeaders index 4af9a64..8587c76 160000 --- a/include/lib/BrawlHeaders +++ b/include/lib/BrawlHeaders @@ -1 +1 @@ -Subproject commit 4af9a6497996f33a1837c1010c04a414df1996f6 +Subproject commit 8587c76129abbcdd29c0dc209f01fcc79fbba255 diff --git a/src/mo_melee/sora_melee/so/so_heap_module_impl.cpp b/src/mo_melee/sora_melee/so/so_heap_module_impl.cpp new file mode 100644 index 0000000..0fc0475 --- /dev/null +++ b/src/mo_melee/sora_melee/so/so_heap_module_impl.cpp @@ -0,0 +1,12 @@ +#include +#include +#include + +soHeapModuleImpl::soHeapModuleImpl(Heaps::HeapType instHeap, + Heaps::HeapType modelInstHeap, Heaps::HeapType motionInstHeap, + s32 heapSlotNo) { + m_instanceHeap = instHeap; + m_modelInstanceHeap = modelInstHeap; + m_motionInstanceHeap = motionInstHeap; + m_heapSlotNo = heapSlotNo; +} diff --git a/src/mo_scene/sora_scene/sc_adv_diff.cpp b/src/mo_scene/sora_scene/sc_adv_diff.cpp index feb2840..1322682 100644 --- a/src/mo_scene/sora_scene/sc_adv_diff.cpp +++ b/src/mo_scene/sora_scene/sc_adv_diff.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include diff --git a/src/mo_scene/sora_scene/sc_adv_gameover.cpp b/src/mo_scene/sora_scene/sc_adv_gameover.cpp new file mode 100644 index 0000000..cca53ba --- /dev/null +++ b/src/mo_scene/sora_scene/sc_adv_gameover.cpp @@ -0,0 +1,93 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +scAdvGameover* scAdvGameover::create() { + return new (Heaps::GlobalMode) scAdvGameover("scAdvGameover"); +} + +void scAdvGameover::setModule() { + setLoadModule("sora_adv_menu_game_over.rel", false); +} + +struct UnkParam { + union { + bool asBool; + u32 asInt; + } unk0; + u32 unk4; +}; + +void scAdvGameover::start() { + UnkParam stack18; + UnkParam stack10; + UnkParam stack8; + muAdvGameOverTaskParam param = { }; + param.unk0 = unkC; + if (g_GameGlobal->m_advData) { + stack10.unk0.asInt = g_GameGlobal->m_advData->m_record.unk4928; + stack10.unk4 = g_GameGlobal->m_advData->m_record.unk492C; + } else { + stack18.unk0.asBool = false; + stack18.unk4 = -1; + stack10 = stack18; + } + stack8 = stack10; + param.unk4 = stack8.unk4; + param.unk8 = &unk60; + param.unkC = &unk4C; + param.unk10 = &unk74; + param.unk14 = &unk10; + param.unk18 = &unk24; + param.unk1C = &unk38; + m_task = muAdvGameOverTask::create(¶m); + g_gfApplication->unkD0.endKeepScreen(); +} + +s32 scAdvGameover::process() { + if (m_task && m_task->unk1AC) { + s32 r30 = 0; + switch (m_task->getSelection()) { + case 0: + OSReport("Gameover retry selected.\n"); + r30 = 0; + break; + case 4: + OSReport("Gameover quit with save selected.\n"); + r30 = 2; + break; + case 5: + OSReport("Gameover quit with no save selected.\n"); + r30 = 3; + break; + case 2: + OSReport("Gameover go to map selected.\n"); + r30 = 1; + break; + default: + break; + } + gfSceneManager* mgr = gfSceneManager::getInstance(); + mgr->unk1 = r30; + mgr->processStep = 2; + } + return 0; +} + +s32 scAdvGameover::exit() { + unk10.remove(); + unk24.remove(); + unk38.remove(); + unk60.remove(); + unk4C.remove(); + unk74.remove(); + m_task->exit(); + m_task = nullptr; + return 0; +} diff --git a/src/mo_scene/sora_scene/sc_adv_saveload.cpp b/src/mo_scene/sora_scene/sc_adv_saveload.cpp new file mode 100644 index 0000000..6457468 --- /dev/null +++ b/src/mo_scene/sora_scene/sc_adv_saveload.cpp @@ -0,0 +1,120 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +scAdvSave* scAdvSave::create() { + return new (Heaps::GlobalMode) scAdvSave("scAdvSave"); +} + +void scAdvSave::setModule() { } + +struct UnkParam { + union { + bool asBool; + u32 asInt; + } unk0; + u32 unk4; +}; + +void scAdvSave::start() { + UnkParam stack20; + UnkParam stack18; + UnkParam stack10; + if (g_GameGlobal->m_advData) { + stack18.unk0.asInt = g_GameGlobal->m_advData->m_record.unk4928; + stack18.unk4 = g_GameGlobal->m_advData->m_record.unk492C; + } else { + stack20.unk0.asBool = false; + stack20.unk4 = -1; + stack18 = stack20; + } + stack10 = stack18; + muAdvSaveTaskParam param; + param.unk0 = stack10.unk4; + s32 layout = gfSceneManager::getInstance()->m_memoryLayout; + if (layout == 0) { + muAdvSaveTask* task = muAdvSaveTask::create(¶m, Heaps::MenuInstance, 43); + if (m_task) { + m_task->exit(); + } + m_task = task; + } else if (layout == 1) { + m_autosave = adAutoSave::create(false); + } else { + m_autosave = adAutoSave::create(true); + } +} + +s32 scAdvSave::process() { + if (gfSceneManager::getInstance()->m_memoryLayout == 0) { + if (m_task->unk1B8 == 1) { + gfSceneManager* mgr = gfSceneManager::getInstance(); + mgr->unk1 = 0; + mgr->processStep = 2; + } + } else if (!adAutoSave::isAlive()) { + gfSceneManager* mgr = gfSceneManager::getInstance(); + mgr->unk1 = 0; + mgr->processStep = 2; + } + return 0; +} + +s32 scAdvSave::exit() { + if (m_task) { + m_task->exit(); + } + m_task = nullptr; + return 0; +} + +scAdvLoad* scAdvLoad::create() { + return new (Heaps::GlobalMode) scAdvLoad("scAdvLoad"); +} + +void scAdvLoad::setModule() { } + +void scAdvLoad::start() { + UnkParam stack20; + UnkParam stack18; + UnkParam stack10; + if (g_GameGlobal->m_advData) { + stack18.unk0.asInt = g_GameGlobal->m_advData->m_record.unk4928; + stack18.unk4 = g_GameGlobal->m_advData->m_record.unk492C; + } else { + stack20.unk0.asBool = false; + stack20.unk4 = -1; + stack18 = stack20; + } + stack10 = stack18; + muAdvLoadTaskParam param; + param.unk0 = stack10.unk4; + muAdvLoadTask* task = muAdvLoadTask::create(¶m); + if (m_task) { + m_task->exit(); + } + m_task = task; +} + +s32 scAdvLoad::process() { + if (m_task->unk1B8 == 1) { + bool isLoaded = m_task->isLoaded(); + gfSceneManager* mgr = gfSceneManager::getInstance(); + mgr->unk1 = isLoaded; + mgr->processStep = 2; + } + return 0; +} + +s32 scAdvLoad::exit() { + if (m_task) { + m_task->exit(); + } + m_task = nullptr; + return 0; +}