diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 0d0ea4de..37d1b4f2 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -94518,54 +94518,54 @@ 0x0000007101273b38,sub_7101273B38,68, 0x0000007101273b7c,sub_7101273B7C,168, 0x0000007101273c24,DemoASLoader::finishLoad,212, -0x0000007101273cf8,registerBdemoResourceFactory,288, +0x0000007101273cf8,registerBdemoResourceFactory,288,_ZN4ksys3res4Demo15registerFactoryEPN4sead4HeapE 0x0000007101273e18,ResourceBdemo::doCreate,6656,_ZN4ksys3res4Demo9doCreate_EPhjPN4sead4HeapE 0x0000007101275818,sub_7101275818,292,_ZN4ksys3res4DemoD2Ev 0x000000710127593c,sub_710127593C,324,_ZN4ksys3res4DemoD0Ev 0x0000007101275a80,sub_7101275A80,300,_ZThn32_N4ksys3res4DemoD1Ev 0x0000007101275bac,sub_7101275BAC,328,_ZThn32_N4ksys3res4DemoD0Ev 0x0000007101275cf4,ResourceBdemo::ctor,1364,_ZN4ksys3res4DemoC1Ev -0x0000007101276248,sub_7101276248,356, -0x00000071012763ac,sub_71012763AC,364, -0x0000007101276518,sub_7101276518,132, -0x000000710127659c,sub_710127659C,92, -0x00000071012765f8,EntryFactoryBdemo::newResource_,152, -0x0000007101276690,EntryFactoryBdemo::getResourceSize,8, -0x0000007101276698,EntryFactoryBdemo::getLoadDataAlignment,8, +0x0000007101276248,sub_7101276248,356,_ZN4ksys3res12EntryFactoryINS0_4DemoEED2Ev +0x00000071012763ac,sub_71012763AC,364,_ZN4ksys3res12EntryFactoryINS0_4DemoEED0Ev +0x0000007101276518,sub_7101276518,132,_ZNK4ksys3res12EntryFactoryINS0_4DemoEE27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE? +0x000000710127659c,sub_710127659C,92,_ZNK4ksys3res12EntryFactoryINS0_4DemoEE18getRuntimeTypeInfoEv +0x00000071012765f8,EntryFactoryBdemo::newResource_,152,_ZN4ksys3res12EntryFactoryINS0_4DemoEE12newResource_EPN4sead4HeapEi +0x0000007101276690,EntryFactoryBdemo::getResourceSize,8,_ZNK4ksys3res12EntryFactoryINS0_4DemoEE15getResourceSizeEv +0x0000007101276698,EntryFactoryBdemo::getLoadDataAlignment,8,_ZNK4ksys3res12EntryFactoryINS0_4DemoEE20getLoadDataAlignmentEv 0x00000071012766a0,sub_71012766A0,132, 0x0000007101276724,j__ZdlPv_1274,4, -0x0000007101276728,registerBfevflResourceFactory,268, -0x0000007101276834,ResourceBfevfl::doCreate,40, -0x000000710127685c,ResourceBfevfl::onDestroy,44, -0x0000007101276888,j_j__ZN4sead14DirectResourceD2Ev_4,4, -0x000000710127688c,sub_710127688C,8, -0x0000007101276894,ResourceBfevfl::dtorDelete,36, -0x00000071012768b8,sub_71012768B8,40, -0x00000071012768e0,registerBfevtmResourceFactory,268, -0x00000071012769ec,ResourceBfevtm::doCreate,40, -0x0000007101276a14,ResourceBfevtm::a,44, -0x0000007101276a40,j_j__ZN4sead14DirectResourceD2Ev_5,4, -0x0000007101276a44,sub_7101276A44,8, -0x0000007101276a4c,ResourceBfevtm::dtorDelete,36, -0x0000007101276a70,sub_7101276A70,40, -0x0000007101276a98,ResourceBfevfl::rtti1,132, -0x0000007101276b1c,ResourceBfevfl::rtti2,92, -0x0000007101276b78,ResourceBfevtm::rtti1,132, -0x0000007101276bfc,ResourceBfevtm::rtti2,92, -0x0000007101276c58,sub_7101276C58,68, -0x0000007101276c9c,sub_7101276C9C,76, -0x0000007101276ce8,sub_7101276CE8,132, -0x0000007101276d6c,sub_7101276D6C,92, -0x0000007101276dc8,sub_7101276DC8,180, -0x0000007101276e7c,sub_7101276E7C,8, -0x0000007101276e84,sub_7101276E84,8, -0x0000007101276e8c,sub_7101276E8C,68, -0x0000007101276ed0,sub_7101276ED0,76, -0x0000007101276f1c,sub_7101276F1C,132, -0x0000007101276fa0,sub_7101276FA0,92, -0x0000007101276ffc,sub_7101276FFC,180, -0x00000071012770b0,sub_71012770B0,8, -0x00000071012770b8,sub_71012770B8,8, +0x0000007101276728,registerBfevflResourceFactory,268,_ZN4ksys3res14EventFlowchart15registerFactoryEPN4sead4HeapE +0x0000007101276834,ResourceBfevfl::doCreate,40,_ZN4ksys3res14EventFlowchart9doCreate_EPhjPN4sead4HeapE +0x000000710127685c,ResourceBfevfl::onDestroy,44,_ZN4ksys3res14EventFlowchart10onDestroy_Ev +0x0000007101276888,j_j__ZN4sead14DirectResourceD2Ev_4,4,_ZN4ksys3res14EventFlowchartD1Ev +0x000000710127688c,sub_710127688C,8,_ZThn32_N4ksys3res14EventFlowchartD1Ev +0x0000007101276894,ResourceBfevfl::dtorDelete,36,_ZN4ksys3res14EventFlowchartD0Ev +0x00000071012768b8,sub_71012768B8,40,_ZThn32_N4ksys3res14EventFlowchartD0Ev +0x00000071012768e0,registerBfevtmResourceFactory,268,_ZN4ksys3res13EventTimeline15registerFactoryEPN4sead4HeapE +0x00000071012769ec,ResourceBfevtm::doCreate,40,_ZN4ksys3res13EventTimeline9doCreate_EPhjPN4sead4HeapE +0x0000007101276a14,ResourceBfevtm::a,44,_ZN4ksys3res13EventTimeline10onDestroy_Ev +0x0000007101276a40,j_j__ZN4sead14DirectResourceD2Ev_5,4,_ZN4ksys3res13EventTimelineD1Ev +0x0000007101276a44,sub_7101276A44,8,_ZThn32_N4ksys3res13EventTimelineD1Ev +0x0000007101276a4c,ResourceBfevtm::dtorDelete,36,_ZN4ksys3res13EventTimelineD0Ev +0x0000007101276a70,sub_7101276A70,40,_ZThn32_N4ksys3res13EventTimelineD0Ev +0x0000007101276a98,ResourceBfevfl::rtti1,132,_ZNK4ksys3res14EventFlowchart27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE +0x0000007101276b1c,ResourceBfevfl::rtti2,92,_ZNK4ksys3res14EventFlowchart18getRuntimeTypeInfoEv +0x0000007101276b78,ResourceBfevtm::rtti1,132,_ZNK4ksys3res13EventTimeline27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE +0x0000007101276bfc,ResourceBfevtm::rtti2,92,_ZNK4ksys3res13EventTimeline18getRuntimeTypeInfoEv +0x0000007101276c58,sub_7101276C58,68,_ZN4ksys3res12EntryFactoryINS0_14EventFlowchartEED2Ev +0x0000007101276c9c,sub_7101276C9C,76,_ZN4ksys3res12EntryFactoryINS0_14EventFlowchartEED0Ev +0x0000007101276ce8,sub_7101276CE8,132,_ZNK4ksys3res12EntryFactoryINS0_14EventFlowchartEE27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE +0x0000007101276d6c,sub_7101276D6C,92,_ZNK4ksys3res12EntryFactoryINS0_14EventFlowchartEE18getRuntimeTypeInfoEv +0x0000007101276dc8,sub_7101276DC8,180,_ZN4ksys3res12EntryFactoryINS0_14EventFlowchartEE12newResource_EPN4sead4HeapEi +0x0000007101276e7c,sub_7101276E7C,8,_ZNK4ksys3res12EntryFactoryINS0_14EventFlowchartEE15getResourceSizeEv +0x0000007101276e84,sub_7101276E84,8,_ZNK4ksys3res12EntryFactoryINS0_14EventFlowchartEE20getLoadDataAlignmentEv +0x0000007101276e8c,sub_7101276E8C,68,_ZN4ksys3res12EntryFactoryINS0_13EventTimelineEED2Ev +0x0000007101276ed0,sub_7101276ED0,76,_ZN4ksys3res12EntryFactoryINS0_13EventTimelineEED0Ev +0x0000007101276f1c,sub_7101276F1C,132,_ZNK4ksys3res12EntryFactoryINS0_13EventTimelineEE27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE +0x0000007101276fa0,sub_7101276FA0,92,_ZNK4ksys3res12EntryFactoryINS0_13EventTimelineEE18getRuntimeTypeInfoEv +0x0000007101276ffc,sub_7101276FFC,180,_ZN4ksys3res12EntryFactoryINS0_13EventTimelineEE12newResource_EPN4sead4HeapEi +0x00000071012770b0,sub_71012770B0,8,_ZNK4ksys3res12EntryFactoryINS0_13EventTimelineEE15getResourceSizeEv +0x00000071012770b8,sub_71012770B8,8,_ZNK4ksys3res12EntryFactoryINS0_13EventTimelineEE20getLoadDataAlignmentEv 0x00000071012770c0,nullsub_4753,4, 0x00000071012770c4,EventMgrDebug::ctor,144, 0x0000007101277154,evt::initDebugStuff,6872, diff --git a/src/KingSystem/Resource/CMakeLists.txt b/src/KingSystem/Resource/CMakeLists.txt index 42c9f5e2..d6023a99 100644 --- a/src/KingSystem/Resource/CMakeLists.txt +++ b/src/KingSystem/Resource/CMakeLists.txt @@ -196,4 +196,6 @@ target_sources(uking PRIVATE Event/resResourceDemo.cpp Event/resResourceDemo.h + Event/resResourceEventFlow.cpp + Event/resResourceEventFlow.h ) diff --git a/src/KingSystem/Resource/Event/resResourceDemo.cpp b/src/KingSystem/Resource/Event/resResourceDemo.cpp index ff2bf96f..81b245ca 100644 --- a/src/KingSystem/Resource/Event/resResourceDemo.cpp +++ b/src/KingSystem/Resource/Event/resResourceDemo.cpp @@ -1,7 +1,20 @@ #include "KingSystem/Resource/Event/resResourceDemo.h" +#include "KingSystem/Resource/resEntryFactory.h" +#include "KingSystem/Resource/resSystem.h" namespace ksys::res { +void Demo::registerFactory(sead::Heap* heap) { + auto* rm = sead::ResourceMgr::instance(); + if (!rm) + return; + + if (rm->getDefaultFactory() != rm->findFactory("bdemo")) + return; + + res::registerEntryFactory(new (heap) EntryFactory(1.0, sizeof(Demo)), "bdemo"); +} + Demo::Demo() : agl::utl::IParameterIO(".bdemo", 0) {} void Demo::doCreate_(u8* buffer, u32, sead::Heap*) { diff --git a/src/KingSystem/Resource/Event/resResourceDemo.h b/src/KingSystem/Resource/Event/resResourceDemo.h index 68d02b22..ba09a439 100644 --- a/src/KingSystem/Resource/Event/resResourceDemo.h +++ b/src/KingSystem/Resource/Event/resResourceDemo.h @@ -12,6 +12,8 @@ class Demo : public sead::DirectResource, public agl::utl::IParameterIO { public: Demo(); + static void registerFactory(sead::Heap* heap); + void doCreate_(u8* buffer, u32 bufferSize, sead::Heap* heap) override; agl::utl::ParameterObj mDemoSettingObj; diff --git a/src/KingSystem/Resource/Event/resResourceEventFlow.cpp b/src/KingSystem/Resource/Event/resResourceEventFlow.cpp new file mode 100644 index 00000000..13ce2bbd --- /dev/null +++ b/src/KingSystem/Resource/Event/resResourceEventFlow.cpp @@ -0,0 +1,44 @@ +#include "KingSystem/Resource/Event/resResourceEventFlow.h" +#include +#include "KingSystem/Resource/resEntryFactory.h" +#include "KingSystem/Resource/resSystem.h" + +namespace ksys::res { + +void EventFlowchart::registerFactory(sead::Heap* heap) { + registerEntryFactory(new (heap) EntryFactory(1.0, sizeof(EventFlowchart)), + "bfevfl"); +} + +void EventFlowchart::doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) { + m_res = evfl::ResEventFlowFile::ResCast(buffer); +} + +void EventFlowchart::onDestroy_() { + if (m_res) { + m_res->Unrelocate(); + m_res = nullptr; + } +} + +EventFlowchart::~EventFlowchart() = default; + +void EventTimeline::registerFactory(sead::Heap* heap) { + registerEntryFactory(new (heap) EntryFactory(1.0, sizeof(EventTimeline)), + "bfevtm"); +} + +void EventTimeline::doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) { + m_res = evfl::ResEventFlowFile::ResCast(buffer); +} + +void EventTimeline::onDestroy_() { + if (m_res) { + m_res->Unrelocate(); + m_res = nullptr; + } +} + +EventTimeline::~EventTimeline() = default; + +} // namespace ksys::res diff --git a/src/KingSystem/Resource/Event/resResourceEventFlow.h b/src/KingSystem/Resource/Event/resResourceEventFlow.h new file mode 100644 index 00000000..64aa33d7 --- /dev/null +++ b/src/KingSystem/Resource/Event/resResourceEventFlow.h @@ -0,0 +1,47 @@ +#pragma once + +#include "KingSystem/Resource/resResource.h" + +namespace evfl { +struct ResEventFlowFile; +} + +namespace ksys::res { + +class EventFlowchart : public Resource { + SEAD_RTTI_OVERRIDE(EventFlowchart, Resource) + +public: + EventFlowchart() = default; + ~EventFlowchart() override; + + static void registerFactory(sead::Heap* heap); + + evfl::ResEventFlowFile* getRes() const { return m_res; } + +private: + void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) override; + void onDestroy_() override; + + evfl::ResEventFlowFile* m_res = nullptr; +}; + +class EventTimeline : public Resource { + SEAD_RTTI_OVERRIDE(EventTimeline, Resource) + +public: + EventTimeline() = default; + ~EventTimeline() override; + + static void registerFactory(sead::Heap* heap); + + evfl::ResEventFlowFile* getRes() const { return m_res; } + +private: + void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) override; + void onDestroy_() override; + + evfl::ResEventFlowFile* m_res = nullptr; +}; + +} // namespace ksys::res