summaryrefslogtreecommitdiff
path: root/libs/Z2AudioLib/Z2SoundObject.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2021-06-12 15:22:36 -0700
committerGitHub <noreply@github.com>2021-06-12 18:22:36 -0400
commit4448c08ac082e8f569f2b4c0dd9e5f4d91dec093 (patch)
tree8778c90e82d9b79e70ff998082a83ab8391edb68 /libs/Z2AudioLib/Z2SoundObject.cpp
parent5be309a186d35e952080d73cc9584a8345d9e029 (diff)
move / fix bunch of stuff (#133)
* fix some class structures / d_event wip * d_event wip * move gamepad stuff * move m_Do_main * move d_bomb / partial m_Do_reset * format * remove asm * add Z2SoundID enum * move some Z2 classes * fix * move more Z2 stuff * fix fopAc_ac_c more
Diffstat (limited to 'libs/Z2AudioLib/Z2SoundObject.cpp')
-rw-r--r--libs/Z2AudioLib/Z2SoundObject.cpp103
1 files changed, 61 insertions, 42 deletions
diff --git a/libs/Z2AudioLib/Z2SoundObject.cpp b/libs/Z2AudioLib/Z2SoundObject.cpp
index 8e97138e3f..c7046fb050 100644
--- a/libs/Z2AudioLib/Z2SoundObject.cpp
+++ b/libs/Z2AudioLib/Z2SoundObject.cpp
@@ -116,7 +116,7 @@ extern "C" void _restgpr_29();
extern "C" extern u32 __float_max;
extern "C" extern u8 data_80450B4C[4];
extern "C" extern u8 data_80450B60[4];
-extern "C" extern u8 data_80450B74[4];
+extern "C" extern Z2SoundStarter* data_80450B74;
extern "C" extern u8 data_80450B88[4];
//
@@ -184,38 +184,35 @@ SECTION_DATA extern void* __vt__14Z2SoundObjBase[8] = {
(void*)startLevelSound__14Z2SoundObjBaseF10JAISoundIDUlSc,
};
-/* 802BDEF0-802BDF48 2B8830 0058+00 3/3 2/2 0/0 .text __ct__14Z2SoundObjBaseFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm Z2SoundObjBase::Z2SoundObjBase() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundObject/__ct__14Z2SoundObjBaseFv.s"
+Z2SoundObjBase::Z2SoundObjBase() {
+ //! @note initializer list doesn't work since fields were initialized out of
+ //! structure layout order, indicating original code didn't use initializer list.
+ mSoundPos = NULL;
+ mIsInitialized = false;
+ mSoundStarter = data_80450B74; // sInstance
+ field_0x1c = 0;
+ field_0x1e = 0;
}
-#pragma pop
-/* 802BDF48-802BDFB0 2B8888 0068+00 1/1 3/3 15/15 .text __dt__14Z2SoundObjBaseFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm Z2SoundObjBase::~Z2SoundObjBase() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundObject/__dt__14Z2SoundObjBaseFv.s"
+Z2SoundObjBase::~Z2SoundObjBase() {
+ deleteObject();
}
-#pragma pop
-/* 802BDFB0-802BDFF8 2B88F0 0048+00 5/4 2/2 0/0 .text init__14Z2SoundObjBaseFP3VecUc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundObjBase::init(Vec* param_0, u8 param_1) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundObject/init__14Z2SoundObjBaseFP3VecUc.s"
+void Z2SoundObjBase::init(Vec* pSoundPos, u8 pNumHandles) {
+ initHandlesPool(pNumHandles);
+ mSoundPos = pSoundPos;
+ mIsInitialized = true;
}
-#pragma pop
/* 802BDFF8-802BE038 2B8938 0040+00 1/1 8/8 61/61 .text deleteObject__14Z2SoundObjBaseFv
*/
+// issue from using temp virtuals i think
+#ifdef NONMATCHING
+void Z2SoundObjBase::deleteObject() {
+ dispose();
+ deleteHandlesPool();
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -224,18 +221,37 @@ asm void Z2SoundObjBase::deleteObject() {
#include "asm/Z2AudioLib/Z2SoundObject/deleteObject__14Z2SoundObjBaseFv.s"
}
#pragma pop
-
-/* 802BE038-802BE070 2B8978 0038+00 4/1 3/0 0/0 .text framework__14Z2SoundObjBaseFUlSc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundObjBase::framework(u32 param_0, s8 param_1) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundObject/framework__14Z2SoundObjBaseFUlSc.s"
+#endif
+
+void Z2SoundObjBase::framework(u32 p1, s8 p2) {
+ if (mIsInitialized) {
+ field_0x1c = p1;
+ field_0x1e = p2;
+ setPos(*(JGeometry::TVec3<f32>*)mSoundPos);
+ }
}
-#pragma pop
/* 802BE070-802BE104 2B89B0 0094+00 5/0 3/0 0/0 .text dispose__14Z2SoundObjBaseFv */
+// sInstance stuff
+#ifdef NONMATCHING
+void Z2SoundObjBase::dispose() {
+ JAISoundHandle* handle;
+ JSULink<Z2SoundHandlePool>* link;
+ for (link = getFirst(); link != NULL; link = link->getNext()) {
+ handle = link->getObject();
+ if (handle != NULL && (bool)*handle) {
+ u32 swBit = lbl_80450B4C->getSwBit((*handle)->getID());
+ if ((swBit & 0x8000) != 0) {
+ handle->releaseSound();
+ } else {
+ (*handle)->stop();
+ }
+ }
+ }
+
+ mIsInitialized = false;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -244,9 +260,17 @@ asm void Z2SoundObjBase::dispose() {
#include "asm/Z2AudioLib/Z2SoundObject/dispose__14Z2SoundObjBaseFv.s"
}
#pragma pop
+#endif
/* 802BE104-802BE144 2B8A44 0040+00 5/0 3/0 0/0 .text
* stopOK__14Z2SoundObjBaseFR17Z2SoundHandlePool */
+
+// sInstance stuff
+#ifdef NONMATCHING
+bool Z2SoundObjBase::stopOK(Z2SoundHandlePool& pSoundHandlePool) {
+ return !(lbl_80450B4C->getSwBit(pSoundHandlePool->getID()) & 0x8000);
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -255,6 +279,7 @@ asm bool Z2SoundObjBase::stopOK(Z2SoundHandlePool& param_0) {
#include "asm/Z2AudioLib/Z2SoundObject/stopOK__14Z2SoundObjBaseFR17Z2SoundHandlePool.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 80455B38-80455B3C 004138 0004+00 5/5 0/0 0/0 .sdata2 @3559 */
@@ -401,15 +426,9 @@ asm Z2SoundObjSimple::Z2SoundObjSimple() {
}
#pragma pop
-/* 802BE880-802BE8A0 2B91C0 0020+00 1/0 0/0 0/0 .text init__16Z2SoundObjSimpleFP3VecUc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundObjSimple::init(Vec* param_0, u8 param_1) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundObject/init__16Z2SoundObjSimpleFP3VecUc.s"
+void Z2SoundObjSimple::init(Vec* pSoundPos, u8 pNumHandles) {
+ Z2SoundObjBase::init(pSoundPos, pNumHandles);
}
-#pragma pop
/* ############################################################################################## */
/* 80455B50-80455B54 004150 0004+00 4/4 0/0 0/0 .sdata2 @3821 */