From c3d665f1c16ec4312186102ee084a3a721e897c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Fri, 13 Nov 2020 01:04:02 +0100 Subject: [PATCH] ksys/res: Add ModelList (incomplete) --- data/data_symbols.csv | 14 +++ data/uking_functions.csv | 4 +- lib/sead | 2 +- src/KingSystem/Resource/CMakeLists.txt | 2 + src/KingSystem/Resource/resResource.h | 2 +- .../Resource/resResourceModelList.cpp | 7 ++ .../Resource/resResourceModelList.h | 114 ++++++++++++++++++ 7 files changed, 141 insertions(+), 4 deletions(-) create mode 100644 src/KingSystem/Resource/resResourceModelList.cpp create mode 100644 src/KingSystem/Resource/resResourceModelList.h diff --git a/data/data_symbols.csv b/data/data_symbols.csv index 9dbc0bee..94e6e41d 100644 --- a/data/data_symbols.csv +++ b/data/data_symbols.csv @@ -1,5 +1,19 @@ 0x00000071023556B0,_ZTVN4sead14SafeStringBaseIcEE +0x0000007102356AF0,_ZTVN4sead22BufferedSafeStringBaseIcEE 0x000000710246F9E0,_ZN4ksys3gdt6detail13sCommonFlags0E 0x00000071024709E0,_ZN4ksys3gdt6detail13sCommonFlags1E 0x00000071024719E0,_ZN4ksys3gdt6detail13sCommonFlags2E 0x00000071024729E0,_ZN4ksys3gdt6detail13sCommonFlags3E +0x00000071024C0F18,_ZTVN3agl3utl13ParameterBaseE +0x00000071024C1060,_ZTVN3agl3utl9ParameterIbEE +0x00000071024C1100,_ZTVN3agl3utl9ParameterIfEE +0x00000071024C11A0,_ZTVN3agl3utl9ParameterIiEE +0x00000071024C1240,_ZTVN3agl3utl9ParameterIjEE +0x00000071024C12E0,_ZTVN3agl3utl9ParameterIN4sead7Vector2IfEEEE +0x00000071024C1380,_ZTVN3agl3utl9ParameterIN4sead7Vector3IfEEEE +0x00000071024C1420,_ZTVN3agl3utl9ParameterIN4sead7Vector4IfEEEE +0x00000071024C14E0,_ZTVN3agl3utl9ParameterIN4sead7Color4fEEE +0x00000071024C1560,_ZTVN3agl3utl9ParameterIN4sead4QuatIfEEEE +0x00000071024C1600,_ZTVN3agl3utl9ParameterIN4sead15FixedSafeStringILi64EEEEE +0x00000071024C16A0,_ZTVN3agl3utl9ParameterIN4sead15FixedSafeStringILi256EEEEE +0x00000071024C1740,_ZTVN3agl3utl9ParameterIN4sead14SafeStringBaseIcEEEE diff --git a/data/uking_functions.csv b/data/uking_functions.csv index e2693cc7..397ab62c 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -91525,8 +91525,8 @@ 0x00000071011ae2bc,sub_71011AE2BC,8, 0x00000071011ae2c4,sub_71011AE2C4,372, 0x00000071011ae438,sub_71011AE438,212, -0x00000071011ae50c,Bmodellist::ctor,596, -0x00000071011ae760,BmodellistSub::ctor,404, +0x00000071011ae50c,Bmodellist::ctor,596,_ZN4ksys3res9ModelListC1Ev +0x00000071011ae760,BmodellistSub::ctor,404,_ZN4ksys3res9ModelList9AttentionC2Ev 0x00000071011ae8f4,sub_71011AE8F4,972, 0x00000071011aecc0,sub_71011AECC0,8, 0x00000071011aecc8,sub_71011AECC8,8, diff --git a/lib/sead b/lib/sead index 29da026c..6d0d19ac 160000 --- a/lib/sead +++ b/lib/sead @@ -1 +1 @@ -Subproject commit 29da026c05155b3432eed35f89818bf474894b2b +Subproject commit 6d0d19ac628c26622c75c38dde8e1cbd93f3a854 diff --git a/src/KingSystem/Resource/CMakeLists.txt b/src/KingSystem/Resource/CMakeLists.txt index 02d43598..9ec73441 100644 --- a/src/KingSystem/Resource/CMakeLists.txt +++ b/src/KingSystem/Resource/CMakeLists.txt @@ -150,6 +150,8 @@ target_sources(uking PRIVATE resResourceLifeCondition.h resResourceLod.cpp resResourceLod.h + resResourceModelList.cpp + resResourceModelList.h resResourceRecipe.cpp resResourceRecipe.h resResourceShop.cpp diff --git a/src/KingSystem/Resource/resResource.h b/src/KingSystem/Resource/resResource.h index d8613219..675fe739 100644 --- a/src/KingSystem/Resource/resResource.h +++ b/src/KingSystem/Resource/resResource.h @@ -21,7 +21,7 @@ public: Resource(); ~Resource() override; - void doCreate_(u8* buffer, u32 bufferSize, sead::Heap* heap) override; + void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) override; virtual bool needsParse() const { return false; } virtual bool m2_() { return true; } diff --git a/src/KingSystem/Resource/resResourceModelList.cpp b/src/KingSystem/Resource/resResourceModelList.cpp new file mode 100644 index 00000000..b5d6ed03 --- /dev/null +++ b/src/KingSystem/Resource/resResourceModelList.cpp @@ -0,0 +1,7 @@ +#include "KingSystem/Resource/resResourceModelList.h" + +namespace ksys::res { + +ModelList::ModelList() : ParamIO("modellist", 0) {} + +} // namespace ksys::res diff --git a/src/KingSystem/Resource/resResourceModelList.h b/src/KingSystem/Resource/resResourceModelList.h new file mode 100644 index 00000000..58038559 --- /dev/null +++ b/src/KingSystem/Resource/resResourceModelList.h @@ -0,0 +1,114 @@ +#pragma once + +#include +#include +#include +#include +#include "KingSystem/Resource/resResource.h" +#include "KingSystem/Utils/ParamIO.h" + +namespace ksys::res { + +// FIXME: incomplete +class ModelList : public ParamIO, public Resource { + SEAD_RTTI_OVERRIDE(ModelList, Resource) +public: + struct ControllerInfo { + agl::utl::Parameter _2b0; + agl::utl::Parameter _2d8; + agl::utl::ParameterObj mControllerInfo; + agl::utl::Parameter mBaseScale; + agl::utl::Parameter _358; + agl::utl::Parameter _380; + agl::utl::Parameter _3a0; + agl::utl::Parameter _3c8; + agl::utl::Parameter _3e8; + }; + KSYS_CHECK_SIZE_NX150(ControllerInfo, 0x160); + + struct Attention { + agl::utl::Parameter _0; + agl::utl::Parameter _20; + agl::utl::Parameter _48; + agl::utl::Parameter _70; + agl::utl::Parameter _90; + agl::utl::Parameter _b0; + agl::utl::Parameter _d8; + agl::utl::Parameter _100; + agl::utl::Parameter _128; + agl::utl::Parameter _150; + agl::utl::Parameter _178; + agl::utl::Parameter _1a0; + agl::utl::Parameter _1c8; + agl::utl::Parameter _1f0; + agl::utl::Parameter _210; + agl::utl::Parameter _238; + agl::utl::Parameter _260; + agl::utl::Parameter _280; + agl::utl::Parameter _2a8; + agl::utl::ParameterObj _2d0; + }; + KSYS_CHECK_SIZE_NX150(Attention, 0x300); + + struct Unit { + agl::utl::Parameter unit_name; + agl::utl::Parameter bind_bone; + agl::utl::ParameterObj obj; + }; + KSYS_CHECK_SIZE_NX150(Unit, 0x80); + + struct ModelData { + agl::utl::Parameter folder; + agl::utl::ParameterObj base_obj; + sead::Buffer units; + agl::utl::ParameterList unit_list; + agl::utl::ParameterList list; + }; + KSYS_CHECK_SIZE_NX150(ModelData, 0xf8); + + // Misspelling of "partical", which is a misspelling of "particle"? + struct Partial { + agl::utl::Parameter bone; + agl::utl::Parameter bind_flag; + agl::utl::Parameter recursible; + agl::utl::ParameterObj obj; + }; + KSYS_CHECK_SIZE_NX150(Partial, 0x98); + + struct AnmTarget { + agl::utl::Parameter num_as_slot; + agl::utl::Parameter is_partical_enable; + agl::utl::Parameter target_type; + agl::utl::ParameterObj base_obj; + sead::Buffer partials; + agl::utl::ParameterList partial_list; + agl::utl::ParameterList list; + }; + KSYS_CHECK_SIZE_NX150(AnmTarget, 0x130); + + ModelList(); + ~ModelList() override; + + void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) override; + bool needsParse() const override { return true; } + bool parse_(u8* data, size_t size, sead::Heap* heap) override; + + const ControllerInfo& getControllerInfo() const { return mControllerInfo.ref(); } + const Attention& getAttention() const { return mAttention.ref(); } + const sead::Buffer& getModelData() const { return mModelData; } + const sead::Buffer& getAnmTargets() const { return mAnmTargets; } + bool is7C8() const { return _7c8; } + +private: + sead::StorageFor mControllerInfo{sead::ZeroInitializeTag{}}; + sead::StorageFor mAttention{sead::ZeroInitializeTag{}}; + u8* mRawData{}; + sead::Buffer mModelData; + agl::utl::ParameterList mModelDataList; + sead::Buffer mAnmTargets; + agl::utl::ParameterList mAnmTargetList; + bool _7c8 = false; +}; +KSYS_CHECK_SIZE_NX150(ModelList, 0x7d0); + +} // namespace ksys::res