diff --git a/config/RSBE01_02/rels/sora_melee/symbols.txt b/config/RSBE01_02/rels/sora_melee/symbols.txt index 2cff4a1..396567f 100644 --- a/config/RSBE01_02/rels/sora_melee/symbols.txt +++ b/config/RSBE01_02/rels/sora_melee/symbols.txt @@ -23442,8 +23442,8 @@ fn_27_2C33C4 = .text:0x002C33C4; // type:function size:0x1EC fn_27_2C35B0 = .text:0x002C35B0; // type:function size:0x9C fn_27_2C364C = .text:0x002C364C; // type:function size:0x224 fn_27_2C3870 = .text:0x002C3870; // type:function size:0x774 -fn_27_2C3FE4 = .text:0x002C3FE4; // type:function size:0x104 -fn_27_2C40E8 = .text:0x002C40E8; // type:function size:0x1C +create__13muAdvSealTaskFPC18muAdvSealTaskParamP9gfArchive = .text:0x002C3FE4; // type:function size:0x104 +getResourcePackData__13muAdvSealTaskFPPCcPUl = .text:0x002C40E8; // type:function size:0x1C fn_27_2C4104 = .text:0x002C4104; // type:function size:0x378 fn_27_2C447C = .text:0x002C447C; // type:function size:0x2D4 fn_27_2C4750 = .text:0x002C4750; // type:function size:0x314 diff --git a/config/RSBE01_02/rels/sora_scene/splits.txt b/config/RSBE01_02/rels/sora_scene/splits.txt index 8fcaeee..289937d 100644 --- a/config/RSBE01_02/rels/sora_scene/splits.txt +++ b/config/RSBE01_02/rels/sora_scene/splits.txt @@ -27,6 +27,11 @@ mo_scene/sora_scene/sc_seal_list.cpp: .text start:0x00007070 end:0x00007230 .data start:0x000017F0 end:0x000018D8 +mo_scene/sora_scene/sc_seal_disp.cpp: + .text start:0x00007230 end:0x000074B4 + .rodata start:0x00000018 end:0x00000020 + .data start:0x000018D8 end:0x00001920 + mo_scene/sora_scene/sc_net_time_result.cpp: .text start:0x0000C824 end:0x0000C9C4 .data start:0x000040D0 end:0x00004140 diff --git a/config/RSBE01_02/rels/sora_scene/symbols.txt b/config/RSBE01_02/rels/sora_scene/symbols.txt index 7509d99..5a54921 100644 --- a/config/RSBE01_02/rels/sora_scene/symbols.txt +++ b/config/RSBE01_02/rels/sora_scene/symbols.txt @@ -103,11 +103,11 @@ start__10scSealListFv = .text:0x000070B8; // type:function size:0x68 process__10scSealListFv = .text:0x00007120; // type:function size:0x44 exit__10scSealListFv = .text:0x00007164; // type:function size:0x48 setModule__10scSealListFv = .text:0x000071AC; // type:function size:0x84 -fn_1_7230 = .text:0x00007230; // type:function size:0x60 -fn_1_7290 = .text:0x00007290; // type:function size:0x4 -fn_1_7294 = .text:0x00007294; // type:function size:0xBC -fn_1_7350 = .text:0x00007350; // type:function size:0xBC -fn_1_740C = .text:0x0000740C; // type:function size:0xA8 +create__10scSealDispFv = .text:0x00007230; // type:function size:0x60 +setModule__10scSealDispFv = .text:0x00007290; // type:function size:0x4 +start__10scSealDispFv = .text:0x00007294; // type:function size:0xBC +process__10scSealDispFv = .text:0x00007350; // type:function size:0xBC +exit__10scSealDispFv = .text:0x0000740C; // type:function size:0xA8 fn_1_74B4 = .text:0x000074B4; // type:function size:0x48 fn_1_74FC = .text:0x000074FC; // type:function size:0x1CC fn_1_76C8 = .text:0x000076C8; // type:function size:0x68 @@ -1035,10 +1035,10 @@ lbl_1_data_189C = .data:0x0000189C; // type:object size:0xC scope:local __RTTI__10scSealList = .data:0x000018A8; // type:object size:0x8 lbl_1_data_18B0 = .data:0x000018B0; // type:object size:0x28 lbl_1_data_18D8 = .data:0x000018D8; // type:object size:0xB data:string -lbl_1_data_18E8 = .data:0x000018E8; // type:object size:0x18 +__vt__10scSealDisp = .data:0x000018E8; // type:object size:0x18 lbl_1_data_1900 = .data:0x00001900; // type:object size:0xB data:string lbl_1_data_190C = .data:0x0000190C; // type:object size:0xC -lbl_1_data_1918 = .data:0x00001918; // type:object size:0x8 +__RTTI__10scSealDisp = .data:0x00001918; // type:object size:0x8 lbl_1_data_1920 = .data:0x00001920; // type:object size:0x88 lbl_1_data_19A8 = .data:0x000019A8; // type:object size:0x18 lbl_1_data_19C0 = .data:0x000019C0; // type:object size:0xE data:string diff --git a/configure.py b/configure.py index e815441..ca24f52 100755 --- a/configure.py +++ b/configure.py @@ -979,6 +979,7 @@ def MatchingFor(*versions): Object(Matching, "mo_scene/sora_scene/sc_tutorial.cpp"), Object(Matching, "mo_scene/sora_scene/sc_staffroll.cpp"), Object(Matching, "mo_scene/sora_scene/sc_seal_list.cpp"), + 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_diff.cpp"), diff --git a/include/lib/BrawlHeaders b/include/lib/BrawlHeaders index 9fc7059..24e4dfb 160000 --- a/include/lib/BrawlHeaders +++ b/include/lib/BrawlHeaders @@ -1 +1 @@ -Subproject commit 9fc705900a47521be14cb98e1d8ad9c6b0f2cbbe +Subproject commit 24e4dfb5617cd17b1742024aa474fee4b7f4f0df diff --git a/src/mo_scene/sora_scene/sc_seal_disp.cpp b/src/mo_scene/sora_scene/sc_seal_disp.cpp new file mode 100644 index 0000000..8d48e07 --- /dev/null +++ b/src/mo_scene/sora_scene/sc_seal_disp.cpp @@ -0,0 +1,66 @@ +#include +#include +#include +#include +#include +#include +#include + +scSealDisp* scSealDisp::create() { + return new (Heaps::GlobalMode) scSealDisp("scSealDisp"); +} + +void scSealDisp::setModule() { } + +static const muAdvSealTaskParam g_TaskParam = { 0x1000000, 0 }; + +void scSealDisp::start() { + const char* path; + u32 size; + + m_archive = new (Heaps::MenuResource) gfArchive; + m_loader = new (Heaps::MenuResource) gfResourceLoader; + muAdvSealTask::getResourcePackData(&path, &size); + m_loader->loadResourceMemSizeOrder(Heaps::MenuResource, path, m_archive, size); + m_state = 0; +} + +s32 scSealDisp::process() { + switch (m_state) { + case 0: + if (m_loader->isLoaded()) { + muAdvSealTaskParam param = g_TaskParam; + m_task = muAdvSealTask::create(¶m, m_archive); + m_state = 1; + } + break; + case 1: + if (m_task && m_task->unk40) { + gfSceneManager* mgr = gfSceneManager::getInstance(); + mgr->unk1 = 0; + mgr->processStep = 2; + m_state = -1; + } + break; + default: + break; + } + return 0; +} + +s32 scSealDisp::exit() { + if (m_task) { + m_task->exit(); + m_task = nullptr; + } + if (m_archive) { + delete m_archive; + m_archive = nullptr; + } + if (m_loader) { + delete m_loader; + m_loader = nullptr; + } + m_state = -1; + return 0; +} diff --git a/src/sora/gf/gf_resource_loader.cpp b/src/sora/gf/gf_resource_loader.cpp index cbd34df..38c9d0a 100644 --- a/src/sora/gf/gf_resource_loader.cpp +++ b/src/sora/gf/gf_resource_loader.cpp @@ -12,9 +12,9 @@ void* gfResourceLoader::load(HeapType heapTy, const char* path, gfArchive* archi m_rsrcPtr = gfHeapManager::alloc(heapTy, m_allocSize); m_compressedRsrcPtr = static_cast(m_rsrcPtr) + m_allocSize - gfFileIO::getFileSize(path); if (m_doCachedRead) { - readRequestCached(path, m_compressedRsrcPtr, 0, 0); + m_handle.readRequestCached(path, m_compressedRsrcPtr, 0, 0); } else { - readRequest(path, m_compressedRsrcPtr, 0, 0); + m_handle.readRequest(path, m_compressedRsrcPtr, 0, 0); } m_heapTy = heapTy; m_isLoaded = false; @@ -34,7 +34,7 @@ bool gfResourceLoader::isLoaded() { if (m_isLoaded == true) { return true; } - if (!isReady()) { + if (!m_handle.isReady()) { return false; } m_rsrcSize = CXGetUncompressedSize(m_compressedRsrcPtr);