From 5c56a3464646103c43b4163d5ff4c73605343d47 Mon Sep 17 00:00:00 2001 From: Narr the Reg <5944268+german77@users.noreply.github.com> Date: Mon, 4 May 2026 21:42:55 -0600 Subject: [PATCH 1/2] g3d: Add barebone header for BoneVisibilityAnimObj --- lib/g3d/include/nn/g3d/AnimObj.h | 107 ++++++++++++++++++ .../include/nn/g3d/BoneVisibilityAnimObj.h | 22 ++++ 2 files changed, 129 insertions(+) create mode 100644 lib/g3d/include/nn/g3d/AnimObj.h create mode 100644 lib/g3d/include/nn/g3d/BoneVisibilityAnimObj.h diff --git a/lib/g3d/include/nn/g3d/AnimObj.h b/lib/g3d/include/nn/g3d/AnimObj.h new file mode 100644 index 00000000..bc41cf4c --- /dev/null +++ b/lib/g3d/include/nn/g3d/AnimObj.h @@ -0,0 +1,107 @@ +#pragma once + +#include + +namespace nn::g3d { +class AnimFrameCache; +class ModelObj; +class ResModel; + +class AnimBindTable { +public: + void Initialize(u32*, s32); + void ClearAll(s32); + void BindAll(u16); + +private: + u32* _0; + s16 _8; + s16 _a; + s16 _c; + s16 _e; +}; +static_assert(sizeof(AnimBindTable) == 0x10); + +class AnimFrameCtrl { +public: + using PlayFunc = f32 (*)(f32, f32, f32, void*); + + void Initialize(f32, f32, PlayFunc); + static f32 PlayOneTime(f32, f32, f32, void*); + static f32 PlayLoop(f32, f32, f32, void*); + + void update() { mFrame = mPlayFunc(mFrame + mFrameRate, _4, mFrameMax, _18); } + + f32 getFrame() const { return mFrame; } + + void setFrame(f32 frame) { mFrame = mPlayFunc(frame, _4, mFrameMax, _18); } + + f32 getFrameMax() const { return mFrameMax; } + + f32 getFrameRate() const { return mFrameRate; } + + void setFrameRate(f32 rate) { mFrameRate = rate; } + + bool isEnd() const { return mFrameMax <= mFrame; } + + bool isOneTime() const { return mPlayFunc == PlayOneTime; } + +private: + f32 mFrame; + f32 _4; + f32 mFrameMax; + f32 mFrameRate; + PlayFunc mPlayFunc; + void* _18; +}; +static_assert(sizeof(AnimFrameCtrl) == 0x20); + +class AnimContext { +public: + void Initialize(AnimFrameCache*, s32); + +private: + AnimFrameCache* mAnimFrameCache; + s32 _8; + s32 _c; + s32 _10; +}; +static_assert(sizeof(AnimContext) == 0x18); + +class AnimObj { +public: + enum class BindFlag; + + virtual ~AnimObj(); + + virtual void ClearResult(); + virtual void Calculate(); + virtual s32 Bind(const ResModel*); + virtual s32 Bind(const ModelObj*); + virtual void BindFast(const ResModel*); + virtual void ApplyTo(ModelObj*) const; + + void ResetFrameCtrl(s32, bool); + + AnimFrameCtrl* getFrameCtrlPtr() const { return mFrameCtrlPtr; } + +private: + AnimFrameCtrl* mFrameCtrlPtr; + AnimFrameCtrl mFrameCtrl; + AnimContext mAnimContext; + void* _48; + void* _50; +}; +static_assert(sizeof(AnimObj) == 0x58); + +class ModelAnimObj : public AnimObj { +public: + void SetBindFlagImpl(s32, AnimObj::BindFlag); + const AnimObj::BindFlag& GetBindFlagImpl(s32) const; + +private: + AnimBindTable mBindTable; +}; +static_assert(sizeof(ModelAnimObj) == 0x68); + +} // namespace nn::g3d diff --git a/lib/g3d/include/nn/g3d/BoneVisibilityAnimObj.h b/lib/g3d/include/nn/g3d/BoneVisibilityAnimObj.h new file mode 100644 index 00000000..5fb991d7 --- /dev/null +++ b/lib/g3d/include/nn/g3d/BoneVisibilityAnimObj.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +namespace nn::g3d { + +class BoneVisibilityAnimObj : public ModelAnimObj { +public: + void ClearResult() override; + void Calculate() override; + s32 Bind(const ResModel*) override; + s32 Bind(const ModelObj*) override; + void BindFast(const ResModel*) override; + void ApplyTo(ModelObj*) const override; + +private: + char filler_68[0x18]; +}; +static_assert(sizeof(BoneVisibilityAnimObj) == 0x80); + +} // namespace nn::g3d From c6568f447b9025337df587395ba912dec6ad8cb2 Mon Sep 17 00:00:00 2001 From: Pistonight Date: Wed, 23 Sep 2026 00:33:21 -0700 Subject: [PATCH 2/2] g3d: apply migration --- lib/g3d/CMakeLists.txt | 22 +++--- .../nn/g3d/{AnimObj.h => g3d_AnimObj.h} | 67 ++++++++++--------- ...yAnimObj.h => g3d_BoneVisibilityAnimObj.h} | 7 +- 3 files changed, 49 insertions(+), 47 deletions(-) rename lib/g3d/include/nn/g3d/{AnimObj.h => g3d_AnimObj.h} (51%) rename lib/g3d/include/nn/g3d/{BoneVisibilityAnimObj.h => g3d_BoneVisibilityAnimObj.h} (73%) diff --git a/lib/g3d/CMakeLists.txt b/lib/g3d/CMakeLists.txt index 45c330fe..3d34ca6b 100644 --- a/lib/g3d/CMakeLists.txt +++ b/lib/g3d/CMakeLists.txt @@ -4,20 +4,22 @@ find_nnsdk() find_nnsdk_module(nn_gfx) set(NN_G3D_HEADERS - include/nn/g3d/g3d_ResMaterial.h - include/nn/g3d/g3d_ResLightAnim.h - include/nn/g3d/g3d_SkeletonObj.h - include/nn/g3d/g3d_ResFogAnim.h + include/nn/g3d/g3d_AnimObj.h + include/nn/g3d/g3d_BindFuncTable.h + include/nn/g3d/g3d_BoneVisibilityAnimObj.h + include/nn/g3d/g3d_ModelObj.h include/nn/g3d/g3d_ResFile.h + include/nn/g3d/g3d_ResFogAnim.h + include/nn/g3d/g3d_ResLightAnim.h include/nn/g3d/g3d_ResMaterialAnim.h - include/nn/g3d/g3d_ResSkeletalAnim.h - include/nn/g3d/g3d_ResShapeAnim.h - include/nn/g3d/g3d_ViewVolume.h + include/nn/g3d/g3d_ResMaterial.h + include/nn/g3d/g3d_ResModel.h include/nn/g3d/g3d_ResSceneAnim.h + include/nn/g3d/g3d_ResShapeAnim.h + include/nn/g3d/g3d_ResSkeletalAnim.h include/nn/g3d/g3d_ResSkeleton.h - include/nn/g3d/g3d_ModelObj.h - include/nn/g3d/g3d_BindFuncTable.h - include/nn/g3d/g3d_ResModel.h + include/nn/g3d/g3d_SkeletonObj.h + include/nn/g3d/g3d_ViewVolume.h include/nn/g3d/g3d_World.h ) diff --git a/lib/g3d/include/nn/g3d/AnimObj.h b/lib/g3d/include/nn/g3d/g3d_AnimObj.h similarity index 51% rename from lib/g3d/include/nn/g3d/AnimObj.h rename to lib/g3d/include/nn/g3d/g3d_AnimObj.h index bc41cf4c..78359325 100644 --- a/lib/g3d/include/nn/g3d/AnimObj.h +++ b/lib/g3d/include/nn/g3d/g3d_AnimObj.h @@ -1,56 +1,57 @@ #pragma once -#include +#include + +#include +#include namespace nn::g3d { class AnimFrameCache; -class ModelObj; -class ResModel; class AnimBindTable { public: - void Initialize(u32*, s32); - void ClearAll(s32); - void BindAll(u16); + void Initialize(uint32_t*, int32_t); + void ClearAll(int32_t); + void BindAll(uint16_t); private: - u32* _0; - s16 _8; - s16 _a; - s16 _c; - s16 _e; + uint32_t* _0; + int16_t _8; + int16_t _a; + int16_t _c; + int16_t _e; }; static_assert(sizeof(AnimBindTable) == 0x10); class AnimFrameCtrl { public: - using PlayFunc = f32 (*)(f32, f32, f32, void*); + using PlayFunc = float (*)(float, float, float, void*); - void Initialize(f32, f32, PlayFunc); - static f32 PlayOneTime(f32, f32, f32, void*); - static f32 PlayLoop(f32, f32, f32, void*); + void Initialize(float, float, PlayFunc); + static float PlayOneTime(float, float, float, void*); + static float PlayLoop(float, float, float, void*); void update() { mFrame = mPlayFunc(mFrame + mFrameRate, _4, mFrameMax, _18); } - f32 getFrame() const { return mFrame; } + float getFrame() const { return mFrame; } - void setFrame(f32 frame) { mFrame = mPlayFunc(frame, _4, mFrameMax, _18); } + void setFrame(float frame) { mFrame = mPlayFunc(frame, _4, mFrameMax, _18); } - f32 getFrameMax() const { return mFrameMax; } + float getFrameMax() const { return mFrameMax; } - f32 getFrameRate() const { return mFrameRate; } + float getFrameRate() const { return mFrameRate; } - void setFrameRate(f32 rate) { mFrameRate = rate; } + void setFrameRate(float rate) { mFrameRate = rate; } bool isEnd() const { return mFrameMax <= mFrame; } bool isOneTime() const { return mPlayFunc == PlayOneTime; } private: - f32 mFrame; - f32 _4; - f32 mFrameMax; - f32 mFrameRate; + float mFrame; + float _4; + float mFrameMax; + float mFrameRate; PlayFunc mPlayFunc; void* _18; }; @@ -58,13 +59,13 @@ static_assert(sizeof(AnimFrameCtrl) == 0x20); class AnimContext { public: - void Initialize(AnimFrameCache*, s32); + void Initialize(AnimFrameCache*, int32_t); private: AnimFrameCache* mAnimFrameCache; - s32 _8; - s32 _c; - s32 _10; + int32_t _8; + int32_t _c; + int32_t _10; }; static_assert(sizeof(AnimContext) == 0x18); @@ -76,12 +77,12 @@ class AnimObj { virtual void ClearResult(); virtual void Calculate(); - virtual s32 Bind(const ResModel*); - virtual s32 Bind(const ModelObj*); + virtual int32_t Bind(const ResModel*); + virtual int32_t Bind(const ModelObj*); virtual void BindFast(const ResModel*); virtual void ApplyTo(ModelObj*) const; - void ResetFrameCtrl(s32, bool); + void ResetFrameCtrl(int32_t, bool); AnimFrameCtrl* getFrameCtrlPtr() const { return mFrameCtrlPtr; } @@ -96,8 +97,8 @@ static_assert(sizeof(AnimObj) == 0x58); class ModelAnimObj : public AnimObj { public: - void SetBindFlagImpl(s32, AnimObj::BindFlag); - const AnimObj::BindFlag& GetBindFlagImpl(s32) const; + void SetBindFlagImpl(int32_t, AnimObj::BindFlag); + const AnimObj::BindFlag& GetBindFlagImpl(int32_t) const; private: AnimBindTable mBindTable; diff --git a/lib/g3d/include/nn/g3d/BoneVisibilityAnimObj.h b/lib/g3d/include/nn/g3d/g3d_BoneVisibilityAnimObj.h similarity index 73% rename from lib/g3d/include/nn/g3d/BoneVisibilityAnimObj.h rename to lib/g3d/include/nn/g3d/g3d_BoneVisibilityAnimObj.h index 5fb991d7..09dcebb0 100644 --- a/lib/g3d/include/nn/g3d/BoneVisibilityAnimObj.h +++ b/lib/g3d/include/nn/g3d/g3d_BoneVisibilityAnimObj.h @@ -1,7 +1,6 @@ #pragma once -#include -#include +#include namespace nn::g3d { @@ -9,8 +8,8 @@ class BoneVisibilityAnimObj : public ModelAnimObj { public: void ClearResult() override; void Calculate() override; - s32 Bind(const ResModel*) override; - s32 Bind(const ModelObj*) override; + int32_t Bind(const ResModel*) override; + int32_t Bind(const ModelObj*) override; void BindFast(const ResModel*) override; void ApplyTo(ModelObj*) const override;