diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 569d39e1..e6e2c45c 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -92876,12 +92876,12 @@ 0x00000071011fa294,sub_71011FA294,100, 0x00000071011fa2f8,sub_71011FA2F8,108, 0x00000071011fa364,Sound::createInstance,464, -0x00000071011fa534,sub_71011FA534,100, -0x00000071011fa598,sub_71011FA598,108, -0x00000071011fa604,SoundResource::createInstance,152, -0x00000071011fa69c,sub_71011FA69C,104, -0x00000071011fa704,sub_71011FA704,100, -0x00000071011fa768,SoundResource::init,176, +0x00000071011fa534,sub_71011FA534,100,_ZN4ksys3snd13SoundResource18SingletonDisposer_D1Ev +0x00000071011fa598,sub_71011FA598,108,_ZN4ksys3snd13SoundResource18SingletonDisposer_D0Ev +0x00000071011fa604,SoundResource::createInstance,152,_ZN4ksys3snd13SoundResource14createInstanceEPN4sead4HeapE +0x00000071011fa69c,sub_71011FA69C,104,_ZN4ksys3snd13SoundResourceD1Ev +0x00000071011fa704,sub_71011FA704,100,_ZN4ksys3snd13SoundResourceD0Ev +0x00000071011fa768,SoundResource::init,176,_ZN4ksys3snd13SoundResource4initEPN4sead4HeapES4_b 0x00000071011fa818,sub_71011FA818,72, 0x00000071011fa860,sub_71011FA860,728, 0x00000071011fab38,sub_71011FAB38,68, diff --git a/src/KingSystem/Sound/CMakeLists.txt b/src/KingSystem/Sound/CMakeLists.txt index 7fdd69c1..b10f005e 100644 --- a/src/KingSystem/Sound/CMakeLists.txt +++ b/src/KingSystem/Sound/CMakeLists.txt @@ -1,5 +1,6 @@ target_sources(uking PRIVATE sndInfoData.cpp sndInfoData.h + sndResource.cpp sndResource.h ) diff --git a/src/KingSystem/Sound/sndResource.cpp b/src/KingSystem/Sound/sndResource.cpp new file mode 100644 index 00000000..df3f6b7d --- /dev/null +++ b/src/KingSystem/Sound/sndResource.cpp @@ -0,0 +1,26 @@ +#include "KingSystem/Sound/sndResource.h" +#include +#include +#include + +namespace ksys::snd { + +SEAD_SINGLETON_DISPOSER_IMPL(SoundResource) + +SoundResource::~SoundResource() { + mSoundResourceHeap->destroy(); + _30->destroy(); + if (mSoundDebugHeap) + mSoundDebugHeap->destroy(); +} + +void SoundResource::init(sead::Heap* heap, sead::Heap* debug_heap, bool extra_large) { + mSoundResourceHeap = + sead::FrameHeap::create(extra_large ? 0x9583000 : 0x6383000, "SoundResource", heap, 0x1000, + sead::FrameHeap::cHeapDirection_Forward, false); + if (debug_heap) + mSoundDebugHeap = sead::ExpHeap::create(0x1E00000u, "SoundDebug", debug_heap, 0x1000, + sead::ExpHeap::cHeapDirection_Forward, false); +} + +} // namespace ksys::snd \ No newline at end of file diff --git a/src/KingSystem/Sound/sndResource.h b/src/KingSystem/Sound/sndResource.h index 31a502fa..62d00efd 100644 --- a/src/KingSystem/Sound/sndResource.h +++ b/src/KingSystem/Sound/sndResource.h @@ -5,19 +5,19 @@ namespace ksys::snd { -// FIXME: incomplete class SoundResource { SEAD_SINGLETON_DISPOSER(SoundResource) SoundResource() = default; virtual ~SoundResource(); public: + void init(sead::Heap* heap, sead::Heap* debug_heap, bool extra_large); sead::Heap* getSoundDebugHeap() const { return mSoundDebugHeap; } private: - sead::Heap* mSoundResourceHeap; - void* _30; - sead::Heap* mSoundDebugHeap; + sead::Heap* mSoundResourceHeap = nullptr; + sead::Heap* _30 = nullptr; // TODO find out what this does + sead::Heap* mSoundDebugHeap = nullptr; }; KSYS_CHECK_SIZE_NX150(SoundResource, 0x40);