diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d166a6d..3da992cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,9 @@ target_link_libraries(uking PUBLIC agl) add_subdirectory(lib/aal) target_link_libraries(uking PRIVATE aal) +add_subdirectory(lib/gsys) +target_link_libraries(uking PRIVATE gsys) + add_subdirectory(lib/EventFlow) target_link_libraries(uking PRIVATE evfl) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index ddb2066f..01c761aa 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -69725,15 +69725,15 @@ Address,Quality,Size,Name 0x0000007100c4efdc,U,001068, 0x0000007100c4f408,U,000008, 0x0000007100c4f410,U,000840, -0x0000007100c4f758,U,002596,_ZN4gsys14ParticleConfigC2Ev +0x0000007100c4f758,O,002596,_ZN4gsys14ParticleConfigC1Ev 0x0000007100c5017c,m,000400,_ZN3agl3utl9ParameterIN4sead15FixedSafeStringILi64EEEEC1ERKS4_RKNS2_14SafeStringBaseIcEESB_PNS0_13IParameterObjE -0x0000007100c5030c,U,000064,_ZN4gsys14ParticleConfig12applyResouceEPKv -0x0000007100c5034c,U,000264, -0x0000007100c50454,U,000008,_ZN4gsys14ParticleConfig10initializeEPN4sead4HeapES3_ -0x0000007100c5045c,U,000116, -0x0000007100c504d0,U,000004,j__ZdlPv_815 -0x0000007100c504d4,U,000120, -0x0000007100c5054c,U,000008, +0x0000007100c5030c,O,000064,_ZN4gsys14ParticleConfig12applyResouceEPKv +0x0000007100c5034c,m,000264,_ZNK4gsys14ParticleConfig15getLightMapNameEj +0x0000007100c50454,O,000008,_ZN4gsys14ParticleConfig10initializeEPN4sead4HeapES3_ +0x0000007100c5045c,O,000116,_ZN4gsys14ParticleConfigD2Ev +0x0000007100c504d0,O,000004,_ZN4gsys14ParticleConfigD0Ev +0x0000007100c504d4,O,000120,_ZThn8_N4gsys14ParticleConfigD1Ev +0x0000007100c5054c,O,000008,_ZThn8_N4gsys14ParticleConfigD0Ev 0x0000007100c50554,U,000824,_ZN4gsys15ParticleDrawArgC2Ei 0x0000007100c5088c,U,000392,_ZN4gsys15ParticleDrawArgD2Ev 0x0000007100c50a14,U,000036, diff --git a/lib/gsys/.clang-format b/lib/gsys/.clang-format new file mode 100644 index 00000000..ef862606 --- /dev/null +++ b/lib/gsys/.clang-format @@ -0,0 +1,74 @@ +--- +Language: Cpp +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: Never +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: Inline +AllowShortIfStatementsOnASingleLine: Never +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: Yes +BinPackArguments: true +BinPackParameters: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Attach +BreakBeforeTernaryOperators: false +BreakConstructorInitializersBeforeComma: false +ColumnLimit: 100 +CommentPragmas: '^ (IWYU pragma:|NOLINT)' +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ForEachMacros: [] +IncludeCategories: + - Regex: '^<[Ww]indows\.h>$' + Priority: 1 + - Regex: '^<' + Priority: 2 + - Regex: '^"' + Priority: 3 +IndentCaseLabels: false +IndentWidth: 4 +IndentWrappedFunctionNames: false +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBlockIndentWidth: 4 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Left +ReflowComments: true +SortIncludes: true +SpaceAfterCStyleCast: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: c++17 +TabWidth: 4 +UseTab: Never +... diff --git a/lib/gsys/CMakeLists.txt b/lib/gsys/CMakeLists.txt new file mode 100644 index 00000000..1c8707f4 --- /dev/null +++ b/lib/gsys/CMakeLists.txt @@ -0,0 +1,22 @@ +project(gsys CXX ASM) + +add_library(gsys OBJECT + include/gsys/gsysORUtil.h + include/gsys/gsysParticleConfig.h + src/gsys/gsysParticleConfig.cpp +) + +target_compile_options(gsys PRIVATE -fno-exceptions) +target_compile_options(gsys PRIVATE -fno-strict-aliasing) +target_compile_options(gsys PRIVATE -Wno-invalid-offsetof) +target_include_directories(gsys PUBLIC include/) + +if(NOT TARGET sead) + add_subdirectory(../sead) +endif() +target_link_libraries(gsys PUBLIC sead) + +if(NOT TARGET agl) + add_subdirectory(../agl) +endif() +target_link_libraries(gsys PUBLIC agl) diff --git a/lib/gsys/include/gsys/gsysORUtil.h b/lib/gsys/include/gsys/gsysORUtil.h new file mode 100644 index 00000000..83fa18dc --- /dev/null +++ b/lib/gsys/include/gsys/gsysORUtil.h @@ -0,0 +1,19 @@ +#pragma once + +namespace sead { +class Heap; + +namespace hostio { +class Node; +} +} // namespace sead + +namespace gsys::ORUtil { + +enum class Icon { + _b = 0xB, +}; + +void setNodeMetaIcon(sead::hostio::Node* node, Icon icon, sead::Heap* heap); + +} // namespace gsys::ORUtil diff --git a/lib/gsys/include/gsys/gsysParticleConfig.h b/lib/gsys/include/gsys/gsysParticleConfig.h new file mode 100644 index 00000000..806f7d3b --- /dev/null +++ b/lib/gsys/include/gsys/gsysParticleConfig.h @@ -0,0 +1,37 @@ +#pragma once + +#include +#include +#include +#include + +namespace gsys { + +class ParticleConfig : public sead::hostio::Node, public agl::utl::IParameterIO { +public: + ParticleConfig(); + const char* getLightMapName(unsigned int index) const; + void initialize(sead::Heap* heap, sead::Heap* hio_heap); + void applyResouce(const void* data); + +private: + [[maybe_unused]] agl::utl::IParameterObj _1d8; // unused + [[maybe_unused]] short _208 = 0; // unused + [[maybe_unused]] sead::FixedSafeString<0x40> _210; // unused + agl::utl::ParameterObj mData2; + agl::utl::Parameter mGpuParticleHeapSize; + agl::utl::Parameter mEffectModelHeapSize; + agl::utl::Parameter mPtclEmitCallbackHeapSize; + agl::utl::Parameter mEnableParticleLinearDepth; + agl::utl::Parameter mEnableBatchProcessStreamOut; + agl::utl::Parameter> mLightMapName0; + agl::utl::Parameter> mLightMapName1; + agl::utl::Parameter> mLightMapName2; + agl::utl::Parameter> mLightMapName3; + agl::utl::Parameter> mLightMapName4; + agl::utl::Parameter> mLightMapName5; + agl::utl::Parameter> mLightMapName6; + agl::utl::Parameter> mLightMapName7; +}; + +} // namespace gsys diff --git a/lib/gsys/src/gsys/gsysParticleConfig.cpp b/lib/gsys/src/gsys/gsysParticleConfig.cpp new file mode 100644 index 00000000..6b882551 --- /dev/null +++ b/lib/gsys/src/gsys/gsysParticleConfig.cpp @@ -0,0 +1,67 @@ +#include "gsys/gsysParticleConfig.h" + +#include "gsys/gsysORUtil.h" + +namespace gsys { + +ParticleConfig::ParticleConfig() + : IParameterIO("ptclconf", 0), + mGpuParticleHeapSize(0x100000, "gpu_particle_heap_size", "GpuParticleHeapSize", &mData2), + mEffectModelHeapSize(0x20000, "EffectModelHeapSize", "effect_model_heap_size", &mData2), + mPtclEmitCallbackHeapSize(0x10000, "ptcl_emit_callback_heap_size", "PtclEmitCallbackHeapSize", + &mData2), + mEnableParticleLinearDepth(true, "enable_particle_lineardepth", "EnableParticleLinearDepth", + &mData2), + mEnableBatchProcessStreamOut(true, "enable_batck_process_streamout", + "EnableBatchProcessStreamOut", &mData2), // typo: batck + mLightMapName0(sead::FixedSafeString<0x40>("Default"), "light_map_name_0", "ライトマップ0", + &mData2), + mLightMapName1(sead::FixedSafeString<0x40>("Default"), "light_map_name_1", "ライトマップ1", + &mData2), + mLightMapName2(sead::FixedSafeString<0x40>("Default"), "light_map_name_2", "ライトマップ2", + &mData2), + mLightMapName3(sead::FixedSafeString<0x40>("Default"), "light_map_name_3", "ライトマップ3", + &mData2), + mLightMapName4(sead::FixedSafeString<0x40>("Default"), "light_map_name_4", "ライトマップ4", + &mData2), + mLightMapName5(sead::FixedSafeString<0x40>("Default"), "light_map_name_5", "ライトマップ5", + &mData2), + mLightMapName6(sead::FixedSafeString<0x40>("Default"), "light_map_name_6", "ライトマップ6", + &mData2), + mLightMapName7(sead::FixedSafeString<0x40>("Default"), "light_map_name_7", "ライトマップ7", + &mData2) { + addObj(&mData2, "ParticleConfig"); +} + +const char* ParticleConfig::getLightMapName(unsigned int index) const { + switch (index) { + case 0: + return mLightMapName0->cstr(); + case 1: + return mLightMapName1->cstr(); + case 2: + return mLightMapName2->cstr(); + case 3: + return mLightMapName3->cstr(); + case 4: + return mLightMapName4->cstr(); + case 5: + return mLightMapName5->cstr(); + case 6: + return mLightMapName6->cstr(); + case 7: + return mLightMapName7->cstr(); + default: + return ""; + } +} + +void ParticleConfig::initialize(sead::Heap* heap, sead::Heap* hio_heap) { + ORUtil::setNodeMetaIcon(this, ORUtil::Icon::_b, hio_heap); +} + +void ParticleConfig::applyResouce(const void* data) { + applyResParameterArchive(agl::utl::ResParameterArchive{data}); +} + +} // namespace gsys