summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2024-01-13 15:41:29 +0200
committerGitHub <noreply@github.com>2024-01-13 05:41:29 -0800
commitead852383fef10f3a7876af7f280d9707ac9e3ef (patch)
treea0c0ab1d2ffac1788bffefcf511183de62efad22 /libs
parent6260020b3e40a5227572f4a129ddf5f970f7b72c (diff)
Work on Z2AudioLib (#2032)
Diffstat (limited to 'libs')
-rw-r--r--libs/JSystem/JAudio2/JAISeqMgr.cpp2
-rw-r--r--libs/JSystem/JAudio2/JAIStreamMgr.cpp2
-rw-r--r--libs/JSystem/JAudio2/JAUSoundTable.cpp2
-rw-r--r--libs/Z2AudioLib/Z2EnvSeMgr.cpp2
-rw-r--r--libs/Z2AudioLib/Z2LinkMgr.cpp8
-rw-r--r--libs/Z2AudioLib/Z2SoundInfo.cpp345
-rw-r--r--libs/Z2AudioLib/Z2SoundStarter.cpp229
-rw-r--r--libs/Z2AudioLib/Z2SpeechMgr2.cpp544
8 files changed, 796 insertions, 338 deletions
diff --git a/libs/JSystem/JAudio2/JAISeqMgr.cpp b/libs/JSystem/JAudio2/JAISeqMgr.cpp
index 041608e4c8..d76ba7b0c7 100644
--- a/libs/JSystem/JAudio2/JAISeqMgr.cpp
+++ b/libs/JSystem/JAudio2/JAISeqMgr.cpp
@@ -185,7 +185,7 @@ extern "C" asm void func_802A1AF4(void* _this) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void JAISeqMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1,
+asm int JAISeqMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2) {
nofralloc
#include "asm/JSystem/JAudio2/JAISeqMgr/func_802A1B48.s"
diff --git a/libs/JSystem/JAudio2/JAIStreamMgr.cpp b/libs/JSystem/JAudio2/JAIStreamMgr.cpp
index b3772bb516..fa02145a0d 100644
--- a/libs/JSystem/JAudio2/JAIStreamMgr.cpp
+++ b/libs/JSystem/JAudio2/JAIStreamMgr.cpp
@@ -107,7 +107,7 @@ asm JAIStreamMgr::JAIStreamMgr(bool param_0) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void JAIStreamMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1,
+asm int JAIStreamMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2) {
nofralloc
#include "asm/JSystem/JAudio2/JAIStreamMgr/func_802A3C3C.s"
diff --git a/libs/JSystem/JAudio2/JAUSoundTable.cpp b/libs/JSystem/JAudio2/JAUSoundTable.cpp
index 1deb81f88c..2637181597 100644
--- a/libs/JSystem/JAudio2/JAUSoundTable.cpp
+++ b/libs/JSystem/JAudio2/JAUSoundTable.cpp
@@ -32,7 +32,7 @@ u8 JAUSoundTable::getTypeID(JAISoundID param_0) const {
}
/* 802A728C-802A73D4 2A1BCC 0148+00 0/0 7/7 0/0 .text getData__13JAUSoundTableCF10JAISoundID */
-void* JAUSoundTable::getData(JAISoundID param_0) const {
+JAUSoundTableItem* JAUSoundTable::getData(JAISoundID param_0) const {
if (param_0.isAnonymous()) {
return NULL;
}
diff --git a/libs/Z2AudioLib/Z2EnvSeMgr.cpp b/libs/Z2AudioLib/Z2EnvSeMgr.cpp
index 00dc4475cf..58e18f4b9a 100644
--- a/libs/Z2AudioLib/Z2EnvSeMgr.cpp
+++ b/libs/Z2AudioLib/Z2EnvSeMgr.cpp
@@ -1022,7 +1022,7 @@ asm void Z2EnvSeMgr::setFogWipeWidth(f32 param_0) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void Z2EnvSeMgr::getFogDensity() {
+asm f32 Z2EnvSeMgr::getFogDensity() {
nofralloc
#include "asm/Z2AudioLib/Z2EnvSeMgr/getFogDensity__10Z2EnvSeMgrFv.s"
}
diff --git a/libs/Z2AudioLib/Z2LinkMgr.cpp b/libs/Z2AudioLib/Z2LinkMgr.cpp
index 66eb887cf2..11fc245054 100644
--- a/libs/Z2AudioLib/Z2LinkMgr.cpp
+++ b/libs/Z2AudioLib/Z2LinkMgr.cpp
@@ -19,7 +19,7 @@ struct Z2SoundObjCoach {
/* 802C54FC */ void init(Vec*, u8);
/* 802C551C */ void startWheelSound(f32);
/* 802C56C0 */ void startFireSound(u16);
- /* 802C57C0 */ void startSound(JAISoundID, u32, s8);
+ /* 802C57C0 */ int startSound(JAISoundID, u32, s8);
};
//
@@ -634,7 +634,7 @@ SECTION_SDATA2 static f32 lit_4399 = 9.0f / 10.0f;
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void Z2LinkSoundStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
+asm int Z2LinkSoundStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2, u32 param_3,
f32 param_4, f32 param_5, f32 param_6, f32 param_7,
f32 param_8, u32 param_9) {
@@ -697,7 +697,7 @@ Z2RideSoundStarter::Z2RideSoundStarter(Z2CreatureRide* ride) : Z2SoundStarter(fa
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void Z2RideSoundStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
+asm int Z2RideSoundStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2, u32 param_3,
f32 param_4, f32 param_5, f32 param_6, f32 param_7,
f32 param_8, u32 param_9) {
@@ -777,7 +777,7 @@ asm void Z2SoundObjCoach::startFireSound(u16 param_0) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void Z2SoundObjCoach::startSound(JAISoundID param_0, u32 param_1, s8 param_2) {
+asm int Z2SoundObjCoach::startSound(JAISoundID param_0, u32 param_1, s8 param_2) {
nofralloc
#include "asm/Z2AudioLib/Z2LinkMgr/startSound__15Z2SoundObjCoachF10JAISoundIDUlSc.s"
}
diff --git a/libs/Z2AudioLib/Z2SoundInfo.cpp b/libs/Z2AudioLib/Z2SoundInfo.cpp
index 0f32a5d244..5e5267f9e6 100644
--- a/libs/Z2AudioLib/Z2SoundInfo.cpp
+++ b/libs/Z2AudioLib/Z2SoundInfo.cpp
@@ -4,7 +4,11 @@
//
#include "Z2AudioLib/Z2SoundInfo.h"
+#include "Z2AudioLib/Z2Calc.h"
#include "JSystem/JAudio2/JAISeq.h"
+#include "JSystem/JAudio2/JAISe.h"
+#include "JSystem/JAudio2/JAISoundChild.h"
+#include "JSystem/JAudio2/JAIStream.h"
#include "JSystem/JAudio2/JAUAudibleParam.h"
#include "JSystem/JAudio2/JAUSoundTable.h"
#include "JSystem/JUtility/JUTAssert.h"
@@ -15,13 +19,13 @@
// Types:
//
-struct Z2Calc {
- /* 802A968C */ void linearTransform(f32, f32, f32, f32, f32, bool);
- /* 802A98D4 */ void getRandom_0_1();
-};
-
struct JAUStdSoundTableType {
static u32 STRM_CH_SHIFT;
+ struct StringOffset {
+ static inline const char* getString(const void* addr, u32 offset) {
+ return (const char*)addr + offset;
+ }
+ };
};
//
@@ -71,20 +75,21 @@ extern "C" extern void* __vt__12JAUSoundInfo[4 + 1 /* padding */];
extern "C" extern u8 data_80450B58[4];
extern "C" extern u8 __OSReport_disable;
-//
-// Declarations:
-//
-
/* 802BB00C-802BB090 2B594C 0084+00 2/1 0/0 0/0 .text
* getBgmSeqResourceID__11Z2SoundInfoCF10JAISoundID */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm u16 Z2SoundInfo::getBgmSeqResourceID(JAISoundID param_0) const {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundInfo/getBgmSeqResourceID__11Z2SoundInfoCF10JAISoundID.s"
+u16 Z2SoundInfo::getBgmSeqResourceID(JAISoundID param_0) const {
+ JUT_ASSERT(20, isValid());
+ JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_0);
+ u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_0);
+
+ if (data != NULL) {
+ switch ((typeID & 0xf0)) {
+ case 0x60:
+ return data->mResourceId;
+ }
+ }
+ return 0xffff;
}
-#pragma pop
/* 802BB090-802BB0D8 2B59D0 0048+00 1/0 0/0 0/0 .text getSoundType__11Z2SoundInfoCF10JAISoundID */
u32 Z2SoundInfo::getSoundType(JAISoundID param_0) const {
@@ -105,35 +110,140 @@ int Z2SoundInfo::getCategory(JAISoundID param_0) const {
}
/* 802BB0E0-802BB158 2B5A20 0078+00 1/0 0/0 0/0 .text getPriority__11Z2SoundInfoCF10JAISoundID */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm u32 Z2SoundInfo::getPriority(JAISoundID param_0) const {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundInfo/getPriority__11Z2SoundInfoCF10JAISoundID.s"
+u32 Z2SoundInfo::getPriority(JAISoundID param_0) const {
+ JUT_ASSERT(63, isValid());
+ JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_0);
+ u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_0);
+
+ if (data != NULL && (typeID & 0x40) != 0) {
+ return data->mPriority;
+ }
+ return 0;
}
-#pragma pop
/* 802BB158-802BB448 2B5A98 02F0+00 0/0 1/1 0/0 .text getAudibleSwFull__11Z2SoundInfoF10JAISoundID
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm u32 Z2SoundInfo::getAudibleSwFull(JAISoundID param_0) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundInfo/getAudibleSwFull__11Z2SoundInfoF10JAISoundID.s"
+JAUAudibleParam Z2SoundInfo::getAudibleSwFull(JAISoundID param_0) {
+ JAUAudibleParam local_28;
+ JUT_ASSERT(82, isValid());
+ switch (JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_0)) {
+ case 81:
+ local_28.field_0x0.bytes.b0_0 = (u32)getSwBit(param_0) >> 8;
+ if ((getSwBit(param_0) & 1) != 0) {
+ local_28.field_0x0.bytes.b0_4 = 0;
+ } else {
+ local_28.field_0x0.bytes.b0_4 = 1;
+ }
+ if ((getSwBit(param_0) & 2) != 0) {
+ local_28.field_0x0.bytes.b0_5 = 0;
+ } else {
+ local_28.field_0x0.bytes.b0_5 = 1;
+ }
+ if ((getSwBit(param_0) & 4) != 0) {
+ local_28.field_0x0.bytes.b0_6 = 0;
+ } else {
+ local_28.field_0x0.bytes.b0_6 = 1;
+ }
+ if ((getSwBit(param_0) & 0x800000) != 0) {
+ local_28.field_0x0.bytes.b0_7 = 1;
+ } else {
+ local_28.field_0x0.bytes.b0_7 = 0;
+ }
+ if ((getSwBit(param_0) & 0x1000) != 0) {
+ local_28.field_0x0.bytes.b1_0 = 0;
+ } else {
+ local_28.field_0x0.bytes.b1_0 = 1;
+ }
+ if ((getSwBit(param_0) & 0x2000) != 0) {
+ local_28.field_0x0.bytes.b1_1 = 0;
+ } else {
+ local_28.field_0x0.bytes.b1_1 = 1;
+ }
+
+ int iVar1;
+ int uVar7 = 0;
+ if ((getSwBit(param_0) & 0x80000) != 0) {
+ uVar7 = 8;
+ }
+
+ iVar1 = (getSwBit(param_0) >> 16) & 0x7;
+ iVar1 += (getSwBit(param_0) >> 16) & 0x70;
+ iVar1 += (getSwBit(param_0) >> 16) & 0xf00;
+ local_28.field_0x0.bytes.b1_2_7 = uVar7;
+ local_28.field_0x0.half.f1 = iVar1;
+ break;
+ default:
+ local_28.field_0x0.bytes.b0_0 = 0;
+ local_28.field_0x0.bytes.b0_4 = 1;
+ local_28.field_0x0.bytes.b0_5 = 1;
+ local_28.field_0x0.bytes.b0_6 = 1;
+ local_28.field_0x0.bytes.b0_7 = 0;
+ local_28.field_0x0.bytes.b1_0 = 1;
+ local_28.field_0x0.bytes.b1_1 = 1;
+ local_28.field_0x0.bytes.b1_2_7 = 0;
+ local_28.field_0x0.half.f1 = 0;
+ break;
+ }
+ return local_28;
}
-#pragma pop
/* 802BB448-802BB6DC 2B5D88 0294+00 2/1 0/0 0/0 .text getAudibleSw__11Z2SoundInfoCF10JAISoundID */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundInfo::getAudibleSw(JAISoundID param_0) const {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundInfo/getAudibleSw__11Z2SoundInfoCF10JAISoundID.s"
+u16 Z2SoundInfo::getAudibleSw(JAISoundID param_0) const {
+ JAUAudibleParam local_28;
+ JUT_ASSERT(184, isValid());
+ switch (JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_0)) {
+ case 81:
+ local_28.field_0x0.bytes.b0_0 = (u32)getSwBit(param_0) >> 8;
+ if ((getSwBit(param_0) & 1) != 0) {
+ local_28.field_0x0.bytes.b0_4 = 0;
+ } else {
+ local_28.field_0x0.bytes.b0_4 = 1;
+ }
+ if ((getSwBit(param_0) & 2) != 0) {
+ local_28.field_0x0.bytes.b0_5 = 0;
+ } else {
+ local_28.field_0x0.bytes.b0_5 = 1;
+ }
+ if ((getSwBit(param_0) & 4) != 0) {
+ local_28.field_0x0.bytes.b0_6 = 0;
+ } else {
+ local_28.field_0x0.bytes.b0_6 = 1;
+ }
+ if ((getSwBit(param_0) & 0x800000) != 0) {
+ local_28.field_0x0.bytes.b0_7 = 1;
+ } else {
+ local_28.field_0x0.bytes.b0_7 = 0;
+ }
+ if ((getSwBit(param_0) & 0x1000) != 0) {
+ local_28.field_0x0.bytes.b1_0 = 0;
+ } else {
+ local_28.field_0x0.bytes.b1_0 = 1;
+ }
+ if ((getSwBit(param_0) & 0x2000) != 0) {
+ local_28.field_0x0.bytes.b1_1 = 0;
+ } else {
+ local_28.field_0x0.bytes.b1_1 = 1;
+ }
+
+ int iVar1;
+ int uVar7 = 0;
+ if ((getSwBit(param_0) & 0x80000) != 0) {
+ uVar7 = 8;
+ }
+
+ iVar1 = (getSwBit(param_0) >> 16) & 0x7;
+ iVar1 += (getSwBit(param_0) >> 16) & 0x70;
+ iVar1 += (getSwBit(param_0) >> 16) & 0xf00;
+ local_28.field_0x0.bytes.b1_2_7 = uVar7;
+ local_28.field_0x0.half.f1 = iVar1;
+ break;
+ default:
+ local_28.field_0x0.half.f0 = 0xffff;
+ local_28.field_0x0.half.f1 = 0xffff;
+ break;
+ }
+ return local_28.field_0x0.half.f0;
}
-#pragma pop
/* ############################################################################################## */
/* 80455A68-80455A6C 004068 0004+00 1/1 0/0 0/0 .sdata2 @963 */
@@ -171,6 +281,39 @@ SECTION_SDATA2 static f64 lit_973 = 4503599627370496.0 /* cast u32 to float */;
/* 802BB6DC-802BB8B4 2B601C 01D8+00 1/0 0/0 0/0 .text
* getSeInfo__11Z2SoundInfoCF10JAISoundIDP5JAISe */
+// Matches with literals
+#ifdef NONMATCHING
+void Z2SoundInfo::getSeInfo(JAISoundID param_1, JAISe* param_2) const {
+ getSoundInfo_(param_1, param_2);
+ JUT_ASSERT(292, isValid());
+ JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_1);
+ u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_1);
+ if (data == NULL) {
+ return;
+ }
+ switch(typeID) {
+ case 81:
+ param_2->getProperty().field_0x8 *= data->field_0x8;
+ u32 uStack_6c = (getSwBit(param_1) & 0xf0) >> 4;
+ if (uStack_6c > 8) {
+ f32 dVar18 = Z2Calc::getRandom_0_1();
+ f32 dVar19 = Z2Calc::linearTransform(uStack_6c, 8.0f, 15.0f, 16.0f, 24.0f, true);
+ dVar19 = dVar19 / 48.0f * dVar18;
+ param_2->getProperty().field_0x8 += dVar19;
+ } else {
+ f32 dVar18 = Z2Calc::getRandom_0_1();
+ dVar18 = (uStack_6c / 48.0f) * dVar18;
+ param_2->getProperty().field_0x8 += dVar18;
+ }
+ u32 uVar1 = (u32)getSwBit(param_1) >> 0x1c;
+ if (uVar1 != 0) {
+ f32 dVar18 = (uVar1 / 15.0f) * Z2Calc::getRandom_0_1();
+ param_2->getProperty().field_0x0 -= dVar18 < 0.0f ? 0.0f : (dVar18 > 1.0f ? 1.0f : dVar18);
+ }
+ break;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -179,6 +322,7 @@ asm void Z2SoundInfo::getSeInfo(JAISoundID param_0, JAISe* param_1) const {
#include "asm/Z2AudioLib/Z2SoundInfo/getSeInfo__11Z2SoundInfoCF10JAISoundIDP5JAISe.s"
}
#pragma pop
+#endif
/* 802BB8B4-802BB8E0 2B61F4 002C+00 1/0 0/0 0/0 .text
* getSeqInfo__11Z2SoundInfoCF10JAISoundIDP6JAISeq */
@@ -195,6 +339,47 @@ SECTION_SDATA2 static f32 lit_1010 = 0.5f;
/* 802BB8E0-802BBA10 2B6220 0130+00 1/0 0/0 0/0 .text
* getStreamInfo__11Z2SoundInfoCF10JAISoundIDP9JAIStream */
+// regalloc
+#ifdef NONMATCHING
+void Z2SoundInfo::getStreamInfo(JAISoundID param_1, JAIStream* param_2) const {
+ int numChild;
+ JAUSoundTableItem* data;
+ getSoundInfo_(param_1, param_2);
+ JUT_ASSERT(349, isValid());
+ switch (JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_1) & 0xf0) {
+ case 0x70:
+ int chShift;
+ u32 uVar1;
+ s32 iVar4;
+ u16 uVar3;
+ data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_1);
+ JUT_ASSERT(356, data);
+ uVar1 = data->mResourceId;
+ numChild = param_2->getNumChild();
+ iVar4 = 0;
+ chShift = JAUStdSoundTableType::STRM_CH_SHIFT;
+ for (uVar3 = uVar1; iVar4 < numChild && uVar3 != 0; uVar3 >>= chShift, iVar4++) {
+ u32 uVar2 = uVar3 & 3;
+ if (uVar2 != 0) {
+ JAISoundChild* child = param_2->getChild(iVar4);
+ if (child != NULL) {
+ switch (uVar2) {
+ case 1:
+ child->mMove.mParams.mPan = 0.5f;
+ break;
+ case 2:
+ child->mMove.mParams.mPan = 0.0f;
+ break;
+ case 3:
+ child->mMove.mParams.mPan = 1.0f;
+ break;
+ }
+ }
+ }
+ }
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -203,17 +388,24 @@ asm void Z2SoundInfo::getStreamInfo(JAISoundID param_0, JAIStream* param_1) cons
#include "asm/Z2AudioLib/Z2SoundInfo/getStreamInfo__11Z2SoundInfoCF10JAISoundIDP9JAIStream.s"
}
#pragma pop
+#endif
/* 802BBA10-802BBA88 2B6350 0078+00 1/1 0/0 0/0 .text
* getStreamFilePath__11Z2SoundInfoF10JAISoundID */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm const char* Z2SoundInfo::getStreamFilePath(JAISoundID param_0) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundInfo/getStreamFilePath__11Z2SoundInfoF10JAISoundID.s"
+const char* Z2SoundInfo::getStreamFilePath(JAISoundID param_1) {
+ JUT_ASSERT(387, isValid());
+ switch (JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_1) & 0xf0) {
+ case 0x70:
+ JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_1);
+ JUT_ASSERT(394, data);
+ const void* resource = JASGlobalInstance<JAUSoundTable>::getInstance()->getResource();
+ JUT_ASSERT(398, resource);
+ return JAUStdSoundTableType::StringOffset::getString(resource, data->field_0x4);
+ default:
+ return NULL;
+ break;
+ }
}
-#pragma pop
/* 802BBA88-802BBAC8 2B63C8 0040+00 2/1 0/0 0/0 .text
* getStreamFileEntry__11Z2SoundInfoF10JAISoundID */
@@ -223,14 +415,18 @@ s32 Z2SoundInfo::getStreamFileEntry(JAISoundID param_0) {
}
/* 802BBAC8-802BBB48 2B6408 0080+00 3/3 4/4 0/0 .text getSwBit__11Z2SoundInfoCF10JAISoundID */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm int Z2SoundInfo::getSwBit(JAISoundID param_0) const {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundInfo/getSwBit__11Z2SoundInfoCF10JAISoundID.s"
+int Z2SoundInfo::getSwBit(JAISoundID param_1) const {
+ JUT_ASSERT(418, isValid());
+ JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_1);
+ u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_1);
+ if (data != NULL) {
+ switch(typeID) {
+ case 81:
+ return data->field_0x4;
+ }
+ }
+ return 0xffffffff;
}
-#pragma pop
/* ############################################################################################## */
/* 80455A98-80455AA0 004098 0004+04 1/1 0/0 0/0 .sdata2 @1070 */
@@ -242,6 +438,17 @@ SECTION_SDATA2 static f32 lit_1070[1 + 1 /* padding */] = {
/* 802BBB48-802BBBE0 2B6488 0098+00 3/3 0/0 0/0 .text
* getSoundInfo___11Z2SoundInfoCF10JAISoundIDP8JAISound */
+// Matches with literals
+#ifdef NONMATCHING
+void Z2SoundInfo::getSoundInfo_(JAISoundID param_1, JAISound* param_2) const {
+ JUT_ASSERT(440, isValid());
+ JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_1);
+ u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_1);
+ if (data != NULL && (typeID & 0x40) != 0) {
+ param_2->getProperty().field_0x0 = (1.0f / 127.0f) * data->field_0x1;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -250,42 +457,10 @@ asm void Z2SoundInfo::getSoundInfo_(JAISoundID param_0, JAISound* param_1) const
#include "asm/Z2AudioLib/Z2SoundInfo/getSoundInfo___11Z2SoundInfoCF10JAISoundIDP8JAISound.s"
}
#pragma pop
-
-/* ############################################################################################## */
-/* 803CAC48-803CAC98 027D68 0050+00 1/1 2/2 0/0 .data __vt__11Z2SoundInfo */
-SECTION_DATA extern void* __vt__11Z2SoundInfo[20] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)getSoundType__11Z2SoundInfoCF10JAISoundID,
- (void*)getCategory__11Z2SoundInfoCF10JAISoundID,
- (void*)getPriority__11Z2SoundInfoCF10JAISoundID,
- (void*)getSeInfo__11Z2SoundInfoCF10JAISoundIDP5JAISe,
- (void*)getSeqInfo__11Z2SoundInfoCF10JAISoundIDP6JAISeq,
- (void*)getStreamInfo__11Z2SoundInfoCF10JAISoundIDP9JAIStream,
- (void*)__dt__11Z2SoundInfoFv,
- (void*)NULL,
- (void*)NULL,
- (void*)func_802BBCC4,
- (void*)func_802BBCBC,
- (void*)NULL,
- (void*)NULL,
- (void*)func_802BBCD4,
- (void*)func_802BBCCC,
- (void*)getAudibleSw__11Z2SoundInfoCF10JAISoundID,
- (void*)getBgmSeqResourceID__11Z2SoundInfoCF10JAISoundID,
- (void*)getStreamFileEntry__11Z2SoundInfoF10JAISoundID,
-};
+#endif
/* 802BBBE0-802BBCBC 2B6520 00DC+00 2/1 0/0 0/0 .text __dt__11Z2SoundInfoFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-extern "C" asm void __dt__11Z2SoundInfoFv() {
- // asm Z2SoundInfo::~Z2SoundInfo() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundInfo/__dt__11Z2SoundInfoFv.s"
-}
-#pragma pop
+Z2SoundInfo::~Z2SoundInfo() {}
/* 802BBCBC-802BBCC4 2B65FC 0008+00 1/0 0/0 0/0 .text
* @4@getBgmSeqResourceID__11Z2SoundInfoCF10JAISoundID */
diff --git a/libs/Z2AudioLib/Z2SoundStarter.cpp b/libs/Z2AudioLib/Z2SoundStarter.cpp
index c9c4416c99..5461fa21e5 100644
--- a/libs/Z2AudioLib/Z2SoundStarter.cpp
+++ b/libs/Z2AudioLib/Z2SoundStarter.cpp
@@ -1,163 +1,114 @@
//
-// Generated By: dol2asm
-// Translation Unit: Z2SoundStarter
+// Z2SoundStarter
//
#include "Z2AudioLib/Z2SoundStarter.h"
-#include "dol2asm.h"
-
-//
-// Types:
-//
-
-struct Z2EnvSeMgr {
- /* 802C93E4 */ void getFogDensity();
-};
-
-struct Z2AudioMgr {
- static u8 mAudioMgrPtr[4 + 4 /* padding */];
-};
-
-//
-// Forward References:
-//
-
-extern "C" void __ct__14Z2SoundStarterFb();
-extern "C" void func_802AABF4();
-extern "C" void func_802AAC3C();
-extern "C" void setPortData__14Z2SoundStarterFP14JAISoundHandleUlUsSc();
-extern "C" void getPortData__14Z2SoundStarterFP14JAISoundHandleUlSc();
-extern "C" void __dt__14Z2SoundStarterFv();
-
-//
-// External References:
-//
-
-extern "C" void openChild__8JASTrackFUl();
-extern "C" void writePort__8JASTrackFUlUs();
-extern "C" void readPort__8JASTrackFUl();
-extern "C" void moveVolume__18JAISoundParamsMoveFfUl();
-extern "C" void movePitch__18JAISoundParamsMoveFfUl();
-extern "C" void moveFxMix__18JAISoundParamsMoveFfUl();
-extern "C" void movePan__18JAISoundParamsMoveFfUl();
-extern "C" void moveDolby__18JAISoundParamsMoveFfUl();
-extern "C" void __ct__15JAISoundStarterFb();
-extern "C" void __dt__15JAISoundStarterFv();
-extern "C" void getFogDensity__10Z2EnvSeMgrFv();
-extern "C" void __dl__FPv();
-extern "C" void _savegpr_26();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_26();
-extern "C" void _restgpr_29();
-extern "C" extern u8 data_80450B3C[4];
-extern "C" extern u8 data_80450B7C[4];
-extern "C" extern u8 data_80450B80[4];
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-extern "C" extern u8 __OSReport_disable;
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
-/* 803C9D80-803C9D98 026EA0 0014+04 2/2 6/6 0/0 .data __vt__14Z2SoundStarter */
-SECTION_DATA extern void* __vt__14Z2SoundStarter[5 + 1 /* padding */] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__14Z2SoundStarterFv,
- (void*)func_802AABF4,
- (void*)func_802AAC3C,
- /* padding */
- NULL,
-};
+#include "Z2AudioLib/Z2EnvSeMgr.h"
+#include "Z2AudioLib/Z2AudioMgr.h"
+#include "JSystem/JUtility/JUTAssert.h"
/* 802AAB94-802AABF4 2A54D4 0060+00 0/0 4/4 0/0 .text __ct__14Z2SoundStarterFb */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm Z2SoundStarter::Z2SoundStarter(bool param_0) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundStarter/__ct__14Z2SoundStarterFb.s"
+Z2SoundStarter::Z2SoundStarter(bool param_0) : JAISoundStarter(param_0), JASGlobalInstance<Z2SoundStarter>(param_0) {
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 80455858-8045585C 003E58 0004+00 2/2 0/0 0/0 .sdata2 @3597 */
-SECTION_SDATA2 static u8 lit_3597[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-
-/* 8045585C-80455860 003E5C 0004+00 2/2 0/0 0/0 .sdata2 @3598 */
-SECTION_SDATA2 static f32 lit_3598 = 1.0f;
-
-/* 80455860-80455864 003E60 0004+00 2/2 0/0 0/0 .sdata2 @3599 */
-SECTION_SDATA2 static f32 lit_3599 = -1.0f;
/* 802AABF4-802AAC3C 2A5534 0048+00 1/0 5/0 0/0 .text
* startSound__14Z2SoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
- JGeometry::TVec3<f32> const* param_2) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundStarter/func_802AABF4.s"
+int Z2SoundStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
+ JGeometry::TVec3<f32> const* param_2) {
+ return Z2SoundStarter::startSound(param_0, param_1, param_2, 0, 0.0f, 1.0f, 1.0f, -1.0f, -1.0f,
+ 0);
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 80455864-80455868 003E64 0004+00 1/1 0/0 0/0 .sdata2 @3713 */
-SECTION_SDATA2 static f32 lit_3713 = 0.5f;
-
-/* 80455868-80455870 003E68 0008+00 1/1 0/0 0/0 .sdata2 @3717 */
-SECTION_SDATA2 static f64 lit_3717 = 4503599627370496.0 /* cast u32 to float */;
/* 802AAC3C-802AAEDC 2A557C 02A0+00 2/1 2/2 0/0 .text
* startSound__14Z2SoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f>UlfffffUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
- JGeometry::TVec3<f32> const* param_2, u32 param_3, f32 param_4,
- f32 param_5, f32 param_6, f32 param_7, f32 param_8,
- u32 param_9) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundStarter/func_802AAC3C.s"
+int Z2SoundStarter::startSound(JAISoundID param_1, JAISoundHandle* handlePtr,
+ JGeometry::TVec3<f32> const* param_3, u32 param_4, f32 param_5,
+ f32 param_6, f32 param_7, f32 param_8, f32 param_9, u32 param_10) {
+ JUT_ASSERT(45, handlePtr);
+ if (param_4 == 6) {
+ switch ((u32)param_1) {
+ case 0x6002b:
+ // TODO: Fix JAISoundID fake match
+ param_1.stackCopyHelper(0x6002e);
+ break;
+ case 0x6002c:
+ param_1.stackCopyHelper(0x6002f);
+ break;
+ case 0x6002d:
+ param_1.stackCopyHelper(0x60030);
+ break;
+ }
+ }
+ if (param_1.mId.mBytes.b1 != 0 && param_1.mId.mBytes.b1 != 9) {
+ if (Z2GetSceneMgr()->isInDarkness()) {
+ param_5 = 1.0f;
+ } else {
+ f32 ratio = Z2GetStatusMgr()->getCameraInWaterDepthRatio();
+ f32 uStack_8c = ratio > 0.0f;
+ if (uStack_8c) {
+ param_5 = uStack_8c;
+ } else {
+ param_5 += 0.5f * Z2GetEnvSeMgr()->getFogDensity();
+ if (param_5 > 1.0f) {
+ param_5 = 1.0f;
+ }
+ }
+ }
+ }
+ int startSoundRes = Z2GetAudioMgr()->startSound(param_1, handlePtr, param_3);
+ if (*handlePtr) {
+ if (param_4 != 0) {
+ setPortData(handlePtr, 6, param_4, -1);
+ }
+ if (param_5 > 0.0f) {
+ (*handlePtr)->getAuxiliary().moveFxMix(param_5, param_10);
+ }
+ if (param_6 != 1.0f) {
+ (*handlePtr)->getAuxiliary().movePitch(param_6, param_10);
+ }
+ if (param_7 != 1.0f) {
+ (*handlePtr)->getAuxiliary().moveVolume(param_7, param_10);
+ }
+ if (param_8 != -1.0f) {
+ (*handlePtr)->getAuxiliary().movePan(param_8, param_10);
+ }
+ if (param_9 != -1.0f) {
+ (*handlePtr)->getAuxiliary().moveDolby(param_9, param_10);
+ }
+ }
+ return startSoundRes;
}
-#pragma pop
/* 802AAEDC-802AAF74 2A581C 0098+00 1/1 10/10 0/0 .text
* setPortData__14Z2SoundStarterFP14JAISoundHandleUlUsSc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundStarter::setPortData(JAISoundHandle* param_0, u32 param_1, u16 param_2,
- s8 param_3) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundStarter/setPortData__14Z2SoundStarterFP14JAISoundHandleUlUsSc.s"
+void Z2SoundStarter::setPortData(JAISoundHandle* param_1, u32 param_2, u16 param_3, s8 param_4) {
+ if (param_1 != NULL && *param_1) {
+ JASTrack* track = param_1->getSound()->getTrack();
+ if (param_4 != -1) {
+ if (track->getChild(param_4) == NULL) {
+ track->openChild(param_4);
+ }
+ track = track->getChild(param_4);
+ }
+ JUT_ASSERT(122, track);
+ track->writePort(param_2, param_3);
+ }
}
-#pragma pop
/* 802AAF74-802AAFF0 2A58B4 007C+00 0/0 1/1 0/0 .text
* getPortData__14Z2SoundStarterFP14JAISoundHandleUlSc */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundStarter::getPortData(JAISoundHandle* param_0, u32 param_1, s8 param_2) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundStarter/getPortData__14Z2SoundStarterFP14JAISoundHandleUlSc.s"
+u16 Z2SoundStarter::getPortData(JAISoundHandle* param_1, u32 param_2, s8 param_3) {
+ if (param_1 != NULL && *param_1) {
+ JASTrack* track;
+ if (param_3 == -1) {
+ track = param_1->getSound()->getTrack();
+ } else {
+ track = param_1->getSound()->getChildTrack(param_3);
+ }
+ JUT_ASSERT(140, track);
+ return track->readPort(param_2);
+ }
+ return 0;
}
-#pragma pop
-/* 802AAFF0-802AB07C 2A5930 008C+00 1/0 0/0 0/0 .text __dt__14Z2SoundStarterFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm Z2SoundStarter::~Z2SoundStarter() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundStarter/__dt__14Z2SoundStarterFv.s"
-}
-#pragma pop
+
diff --git a/libs/Z2AudioLib/Z2SpeechMgr2.cpp b/libs/Z2AudioLib/Z2SpeechMgr2.cpp
index f4b53cdaab..6d2b9259ae 100644
--- a/libs/Z2AudioLib/Z2SpeechMgr2.cpp
+++ b/libs/Z2AudioLib/Z2SpeechMgr2.cpp
@@ -4,15 +4,25 @@
//
#include "Z2AudioLib/Z2SpeechMgr2.h"
+#include "Z2AudioLib/Z2SeqMgr.h"
+#include "Z2AudioLib/Z2EnvSeMgr.h"
+#include "Z2AudioLib/Z2AudioMgr.h"
+#include "JSystem/J3DU/J3DUD.h"
#include "dol2asm.h"
//
// Types:
//
-struct Z2SeqMgr {
- /* 802AF49C */ void subBgmStart(u32);
-};
+typedef struct {
+ u8** field_0x0;
+ u8** field_0x4;
+ u8 field_0x8;
+ u8 field_0x9;
+ u8 field_0xa;
+ u8 field_0xb;
+
+} sPrmStruct;
struct Z2MdnPrm {
static u8 const sReply[100];
@@ -39,7 +49,7 @@ struct Z2MdnPrm {
static u8 const sDeside[100];
static u8 const sAfford[104];
static u8 const sAffordTail[12];
- static void* const sPrm[51];
+ static sPrmStruct const sPrm[17];
static u8 sBoringTail[6 + 2 /* padding */];
static u8 sOrderTail[6 + 2 /* padding */];
static u8 sResentTail[5 + 3 /* padding */];
@@ -52,14 +62,6 @@ struct Z2MdnPrm {
static u8 sDesideTail[8];
};
-struct Z2EnvSeMgr {
- /* 802C93E4 */ void getFogDensity();
-};
-
-struct Z2AudioMgr {
- static u8 mAudioMgrPtr[4 + 4 /* padding */];
-};
-
//
// Forward References:
//
@@ -152,14 +154,17 @@ extern "C" extern u8 __OSReport_disable;
//
/* 802CBC60-802CBCEC 2C65A0 008C+00 0/0 1/1 0/0 .text __ct__12Z2SpeechMgr2Fv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm Z2SpeechMgr2::Z2SpeechMgr2() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SpeechMgr2/__ct__12Z2SpeechMgr2Fv.s"
+Z2SpeechMgr2::Z2SpeechMgr2() : JASGlobalInstance<Z2SpeechMgr2>(true), random(0) {
+ field_0x3f8 = 0;
+ field_0x3fa = -1;
+ field_0x3fc = 0;
+ field_0x3fe = 0;
+ field_0x3ff = 0;
+ field_0x401 = 0;
+ for (int i = 0; i < 64; i++) {
+ field_0x402[i] = -1;
+ }
}
-#pragma pop
/* ############################################################################################## */
/* 803CBD08-803CBED0 -00001 01C8+00 1/1 0/0 0/0 .data @3729 */
@@ -312,17 +317,152 @@ SECTION_DATA extern void* __vt__15Z2SpeechStarter[5] = {
};
/* 802CBCEC-802CBD88 2C662C 009C+00 1/0 0/0 0/0 .text __dt__15Z2SpeechStarterFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm Z2SpeechStarter::~Z2SpeechStarter() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SpeechMgr2/__dt__15Z2SpeechStarterFv.s"
-}
-#pragma pop
+Z2SpeechStarter::~Z2SpeechStarter() {}
/* 802CBD88-802CBF60 2C66C8 01D8+00 1/0 1/1 0/0 .text setString__12Z2SpeechMgr2FPCUssUcUs
*/
+// Matches with literals
+#ifdef NONMATCHING
+void Z2SpeechMgr2::setString(u16 const* param_1, s16 param_2, u8 param_3, u16 param_4) {
+ switch (param_3) {
+ case 0x13:
+ case 0x15:
+ field_0x3fe = 1;
+ break;
+ case 0x12:
+ case 0x14:
+ field_0x3fe = 2;
+ break;
+ case 4:
+ case '\a':
+ case '\n':
+ case 0x16:
+ case 0x19:
+ case 0x1d:
+ case '!':
+ case '$':
+ case ')':
+ case ',':
+ case '-':
+ case '2':
+ case '3':
+ case '?':
+ case '@':
+ case 'A':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'Y':
+ case 'Z':
+ case '[':
+ case '\\':
+ case '`':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ field_0x3fe = 12;
+ break;
+ case 0x1e:
+ case 0x1f:
+ case '\"':
+ case '%':
+ case '\'':
+ case '=':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ field_0x3fe = 13;
+ break;
+ case '7':
+ case '8':
+ case '9':
+ case ':':
+ case ';':
+ case '<':
+ case 'l':
+ case 'm':
+ field_0x3fe = 14;
+ break;
+ case '/':
+ field_0x3fe = 15;
+ break;
+ case 0x0f:
+ case 0x10:
+ case '4':
+ case '5':
+ case '6':
+ case 'p':
+ field_0x3fe = 16;
+ break;
+ case 0x0e:
+ case 'B':
+ case 'D':
+ field_0x3fe = 17;
+ break;
+ case '\f':
+ field_0x3fe = 18;
+ break;
+ case '\t':
+ case '&':
+ case 'o':
+ field_0x3fe = 30;
+ break;
+ case '\b':
+ field_0x3fe = 31;
+ break;
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ field_0x3fe = 99;
+ return;
+ case 'q':
+ default:
+ field_0x3fe = 11;
+ break;
+ }
+ if ((field_0x3fe == 1) || (field_0x3fe == 2)) {
+ if (param_4 == 0) {
+ field_0x3fc = 0;
+ } else {
+ if (param_4 > 0x11) {
+ if ((field_0x3fe == 21) || (field_0x3fe == 20)) {
+ field_0x3fc = 0;
+ }
+ } else {
+ field_0x3fc = param_4 - 1;
+ }
+ }
+ } else {
+ field_0x3fc = param_4;
+ }
+ for (int i = 0; i < 500; i++) {
+ field_0x10[i] = 0;
+ }
+
+ if (param_2 > 500) {
+ field_0x3f8 = 500;
+ JUT_WARN(387, "TOO MANY TEXT : now(%d) > max(%d)", param_2, 500);
+ } else {
+ field_0x3f8 = param_2;
+ }
+ for (int i = 0; i < field_0x3f8; i++) {
+ field_0x10[i] = param_1[i];
+ }
+ field_0x3fa = 0;
+ field_0x3ff = 0;
+ field_0x400 = 0;
+ field_0x401 = 0;
+ for (int i = 0; i < 64; i++) {
+ field_0x402[i] = -1;
+ }
+ selectUnit(false);
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -331,6 +471,7 @@ asm void Z2SpeechMgr2::setString(u16 const* param_0, s16 param_1, u8 param_2, u1
#include "asm/Z2AudioLib/Z2SpeechMgr2/setString__12Z2SpeechMgr2FPCUssUcUs.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 80455EE0-80455EE8 0044E0 0006+02 1/0 0/0 0/0 .sdata2 sBoringTail__8Z2MdnPrm */
@@ -454,6 +595,72 @@ SECTION_SDATA2 static f32 lit_3837 = 1.0f;
SECTION_SDATA2 static f32 lit_3838 = -1.0f;
/* 802CBF60-802CC190 2C68A0 0230+00 1/0 2/2 0/0 .text setTextCount__12Z2SpeechMgr2Fs */
+// Matches with literals
+#ifdef NONMATCHING
+void Z2SpeechMgr2::setTextCount(s16 param_0) {
+ if (field_0x3fe != 0x63) {
+ field_0x3ff = 0x0;
+ param_0 = (param_0 == 0) ? 0 : param_0 - 1;
+ bool bVar1 = false;
+ if (field_0x3fa == 0 && param_0 >= field_0x3f8) {
+ bVar1 = true;
+ }
+ field_0x3fa = param_0;
+ if (field_0x3fa >= field_0x3f8) {
+ field_0x3fa = field_0x3f8;
+ }
+ if ((field_0x3fe == 1) || (field_0x3fe == 2)) {
+ if (!field_0x0.isSoundAttached()) {
+ speakOneWord(false);
+ }
+ } else if (bVar1) {
+ if (field_0x3fc == 0) {
+ mSpeech.startSound(0x7a, &field_0x4, NULL, 0, 0.0f, 1.0f, 1.0f, -1.0f,
+ -1.0f, 0);
+ }
+ } else {
+ if (!isNonVerbal() ) {
+ JAISoundID aJStack_18;
+ switch (field_0x3fe) {
+ case 0xb:
+ // TODO: Fix JAISoundID fake match
+ aJStack_18.stackCopyHelper(0x7b);
+ break;
+ case 0xc:
+ aJStack_18.stackCopyHelper(0x7c);
+ break;
+ case 0xd:
+ aJStack_18.stackCopyHelper(0x7d);
+ break;
+ case 0xe:
+ aJStack_18.stackCopyHelper(0x7e);
+ break;
+ case 0xf:
+ aJStack_18.stackCopyHelper(0x7f);
+ break;
+ case 0x10:
+ aJStack_18.stackCopyHelper(0x80);
+ break;
+ case 0x11:
+ aJStack_18.stackCopyHelper(0x81);
+ break;
+ case 0x12:
+ aJStack_18.stackCopyHelper(0x82);
+ break;
+ case 0x1e:
+ aJStack_18.stackCopyHelper(0x83);
+ break;
+ case 0x1f:
+ aJStack_18.stackCopyHelper(0x84);
+ break;
+ }
+ mSpeech.startSound(aJStack_18, &field_0x4, NULL, 0, 0.0f, 1.0f, 1.0f, -1.0f, -1.0f,
+ 0);
+ }
+ }
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -462,6 +669,7 @@ asm void Z2SpeechMgr2::setTextCount(s16 param_0) {
#include "asm/Z2AudioLib/Z2SpeechMgr2/setTextCount__12Z2SpeechMgr2Fs.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 80455F3C-80455F40 00453C 0004+00 2/2 0/0 0/0 .sdata2 @3885 */
@@ -471,6 +679,29 @@ SECTION_SDATA2 static f32 lit_3885 = 127.0f;
SECTION_SDATA2 static f64 lit_3887 = 4503601774854144.0 /* cast s32 to float */;
/* 802CC190-802CC2FC 2C6AD0 016C+00 1/1 1/1 0/0 .text speakOneWord__12Z2SpeechMgr2Fb */
+// Matches with literals
+#ifdef NONMATCHING
+void Z2SpeechMgr2::speakOneWord(bool param_0) {
+ if (Z2GetSceneMgr()->isSceneExist() && (field_0x3fe == 1 || field_0x3fe == 2) &&
+ field_0x400 == 0 && field_0x3ff <= 30)
+ {
+ if (field_0x3fa >= field_0x3f8) {
+ selectTail();
+ field_0x400 = 1;
+ } else if (isNonVerbal()) {
+ return;
+ }
+ u32 sound = field_0x3fc + 0x500a1;
+ f32 fVar1 = Z2GetSceneMgr()->getRoomReverb() / 127.0f;
+ mSpeech.startSound(sound, &field_0x0, NULL, 0,
+ fVar1, 1.0f, 1.0f, -1.0f, -1.0f, 0);
+ mSpeech.setPortData(&field_0x0, 8, field_0x402[field_0x401 - 1] + 1, -1);
+ if (field_0x400 == 0) {
+ selectUnit(param_0);
+ }
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -479,47 +710,95 @@ asm void Z2SpeechMgr2::speakOneWord(bool param_0) {
#include "asm/Z2AudioLib/Z2SpeechMgr2/speakOneWord__12Z2SpeechMgr2Fb.s"
}
#pragma pop
+#endif
/* 802CC2FC-802CC4C0 2C6C3C 01C4+00 2/2 0/0 0/0 .text isNonVerbal__12Z2SpeechMgr2Fv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SpeechMgr2::isNonVerbal() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SpeechMgr2/isNonVerbal__12Z2SpeechMgr2Fv.s"
+bool Z2SpeechMgr2::isNonVerbal() {
+ switch(field_0x10[field_0x3fa]) {
+ case 0:
+ case 0x20:
+ case 0x21:
+ case 0x22:
+ case 0x23:
+ case 0x24:
+ case 0x25:
+ case 0x26:
+ case 0x27:
+ case 0x28:
+ case 0x29:
+ case 0x2a:
+ case 0x2b:
+ case 0x2c:
+ case 0x2d:
+ case 0x2e:
+ case 0x2f:
+ case 0x3a:
+ case 0x3b:
+ case 0x3c:
+ case 0x3d:
+ case 0x3e:
+ case 0x3f:
+ case 0x4b:
+ case 0x4c:
+ case 0x4d:
+ case 0x4e:
+ case 0x4f:
+ case 0x5b:
+ case 0x5c:
+ case 0x5d:
+ case 0x5e:
+ case 0x5f:
+ case 0x813f:
+ case 0x8140:
+ case 0x8141:
+ case 0x8142:
+ case 0x8143:
+ case 0x8144:
+ case 0x8145:
+ case 0x8146:
+ case 0x8147:
+ case 0x8148:
+ case 0x8149:
+ case 0x814a:
+ case 0x814b:
+ case 0x8151:
+ case 0x815e:
+ case 0x8162:
+ case 0x8166:
+ case 0x8168:
+ case 0x8169:
+ case 0x816a:
+ case 0x816d:
+ case 0x816e:
+ case 0x816f:
+ case 0x8170:
+ case 0x8171:
+ case 0x8172:
+ case 0x8175:
+ case 0x8176:
+ case 0x817b:
+ case 0x817c:
+ case 0x8181:
+ case 0x818f:
+ case 0x8190:
+ case 0x8193:
+ case 0x8194:
+ case 0x8195:
+ case 0x8196:
+ return true;
+ }
+
+ if(field_0x10[field_0x3fa] == 10) {
+ switch (field_0x3fe) {
+ case 1:
+ case 2:
+ return false;
+ default:
+ return true;
+ }
+ }
+ return false;
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 80455EE0-80455EE8 0044E0 0006+02 1/0 0/0 0/0 .sdata2 sBoringTail__8Z2MdnPrm */
-extern "C" u8 sBoringTail__8Z2MdnPrm[6 + 2 /* padding */];
-
-/* 80455EE8-80455EF0 0044E8 0006+02 1/0 0/0 0/0 .sdata2 sOrderTail__8Z2MdnPrm */
-extern "C" u8 sOrderTail__8Z2MdnPrm[6 + 2 /* padding */];
-
-/* 80455EF0-80455EF8 0044F0 0005+03 1/0 0/0 0/0 .sdata2 sResentTail__8Z2MdnPrm */
-extern "C" u8 sResentTail__8Z2MdnPrm[5 + 3 /* padding */];
-
-/* 80455EF8-80455F00 0044F8 0008+00 1/0 0/0 0/0 .sdata2 sCheerfulTail__8Z2MdnPrm */
-extern "C" u8 sCheerfulTail__8Z2MdnPrm[8];
-
-/* 80455F00-80455F08 004500 0005+03 1/0 0/0 0/0 .sdata2 sConfusedTail__8Z2MdnPrm */
-extern "C" u8 sConfusedTail__8Z2MdnPrm[5 + 3 /* padding */];
-
-/* 80455F08-80455F10 004508 0007+01 1/0 0/0 0/0 .sdata2 sHostilityTail__8Z2MdnPrm */
-extern "C" u8 sHostilityTail__8Z2MdnPrm[7 + 1 /* padding */];
-
-/* 80455F10-80455F18 004510 0008+00 1/0 0/0 0/0 .sdata2 sTiredTail__8Z2MdnPrm */
-extern "C" u8 sTiredTail__8Z2MdnPrm[8];
-
-/* 80455F18-80455F20 004518 0007+01 1/0 0/0 0/0 .sdata2 sSeriousTail__8Z2MdnPrm */
-extern "C" u8 sSeriousTail__8Z2MdnPrm[7 + 1 /* padding */];
-
-/* 80455F20-80455F28 004520 0007+01 1/0 0/0 0/0 .sdata2 sReplybTail__8Z2MdnPrm */
-extern "C" u8 sReplybTail__8Z2MdnPrm[7 + 1 /* padding */];
-
-/* 80455F28-80455F30 004528 0008+00 1/0 0/0 0/0 .sdata2 sDesideTail__8Z2MdnPrm */
-extern "C" u8 sDesideTail__8Z2MdnPrm[8];
/* 8039C260-8039C2C4 0288C0 0064+00 1/0 0/0 0/0 .rodata sReply__8Z2MdnPrm */
SECTION_RODATA u8 const Z2MdnPrm::sReply[100] = {
@@ -1549,24 +1828,24 @@ SECTION_RODATA u8 const Z2MdnPrm::sAffordTail[12] = {
COMPILER_STRIP_GATE(0x8039C980, &Z2MdnPrm::sAffordTail);
/* 8039C98C-8039CA58 -00001 00CC+00 2/2 0/0 0/0 .rodata sPrm__8Z2MdnPrm */
-SECTION_RODATA void* const Z2MdnPrm::sPrm[51] = {
- (void*)&Z2MdnPrm::sReply, (void*)&Z2MdnPrm::sReplyTail, (void*)0x32060400,
- (void*)&Z2MdnPrm::sJoke, (void*)&Z2MdnPrm::sJokeTail, (void*)0x32030700,
- (void*)&Z2MdnPrm::sSexy, (void*)&Z2MdnPrm::sSexyTail, (void*)0x32030700,
- (void*)&Z2MdnPrm::sRidicule, (void*)&Z2MdnPrm::sRidiculeTail, (void*)0x32030700,
- (void*)&Z2MdnPrm::sBoring, (void*)&Z2MdnPrm::sBoringTail, (void*)0x36010500,
- (void*)&Z2MdnPrm::sIrritated, (void*)&Z2MdnPrm::sIrritatedTail, (void*)0x2F030700,
- (void*)&Z2MdnPrm::sOrder, (void*)&Z2MdnPrm::sOrderTail, (void*)0x39020400,
- (void*)&Z2MdnPrm::sResent, (void*)&Z2MdnPrm::sResentTail, (void*)0x35020300,
- (void*)&Z2MdnPrm::sCheerful, (void*)&Z2MdnPrm::sCheerfulTail, (void*)0x35010700,
- (void*)&Z2MdnPrm::sConfused, (void*)&Z2MdnPrm::sConfusedTail, (void*)0x35030200,
- (void*)&Z2MdnPrm::sHostility, (void*)&Z2MdnPrm::sHostilityTail, (void*)0x34020500,
- (void*)&Z2MdnPrm::sTired, (void*)&Z2MdnPrm::sTiredTail, (void*)0x35030500,
- (void*)&Z2MdnPrm::sSerious, (void*)&Z2MdnPrm::sSeriousTail, (void*)0x35020500,
- (void*)&Z2MdnPrm::sReplyb, (void*)&Z2MdnPrm::sReplybTail, (void*)0x2A040300,
- (void*)&Z2MdnPrm::sApologize, (void*)&Z2MdnPrm::sApologizeTail, (void*)0x32040500,
- (void*)&Z2MdnPrm::sDeside, (void*)&Z2MdnPrm::sDesideTail, (void*)0x32010700,
- (void*)&Z2MdnPrm::sAfford, (void*)&Z2MdnPrm::sAffordTail, (void*)0x34020A00,
+SECTION_RODATA sPrmStruct const Z2MdnPrm::sPrm[17] = {
+ { (u8**)&Z2MdnPrm::sReply, (u8**)&Z2MdnPrm::sReplyTail, 0x32, 0x06, 0x04, 0x00},
+ { (u8**)&Z2MdnPrm::sJoke, (u8**)&Z2MdnPrm::sJokeTail, 0x32, 0x03, 0x07, 0x00},
+ { (u8**)&Z2MdnPrm::sSexy, (u8**)&Z2MdnPrm::sSexyTail, 0x32, 0x03, 0x07, 0x00},
+ { (u8**)&Z2MdnPrm::sRidicule, (u8**)&Z2MdnPrm::sRidiculeTail, 0x32, 0x03, 0x07, 0x00},
+ { (u8**)&Z2MdnPrm::sBoring, (u8**)&Z2MdnPrm::sBoringTail, 0x36, 0x01, 0x05, 0x00},
+ { (u8**)&Z2MdnPrm::sIrritated, (u8**)&Z2MdnPrm::sIrritatedTail, 0x2F, 0x03, 0x07, 0x00},
+ { (u8**)&Z2MdnPrm::sOrder, (u8**)&Z2MdnPrm::sOrderTail, 0x39, 0x02, 0x04, 0x00},
+ { (u8**)&Z2MdnPrm::sResent, (u8**)&Z2MdnPrm::sResentTail, 0x35, 0x02, 0x03, 0x00},
+ { (u8**)&Z2MdnPrm::sCheerful, (u8**)&Z2MdnPrm::sCheerfulTail, 0x35, 0x01, 0x07, 0x00},
+ { (u8**)&Z2MdnPrm::sConfused, (u8**)&Z2MdnPrm::sConfusedTail, 0x35, 0x03, 0x02, 0x00},
+ { (u8**)&Z2MdnPrm::sHostility, (u8**)&Z2MdnPrm::sHostilityTail, 0x34, 0x02, 0x05, 0x00},
+ { (u8**)&Z2MdnPrm::sTired, (u8**)&Z2MdnPrm::sTiredTail, 0x35, 0x03, 0x05, 0x00},
+ { (u8**)&Z2MdnPrm::sSerious, (u8**)&Z2MdnPrm::sSeriousTail, 0x35, 0x02, 0x05, 0x00},
+ { (u8**)&Z2MdnPrm::sReplyb, (u8**)&Z2MdnPrm::sReplybTail, 0x2A, 0x04, 0x03, 0x00},
+ { (u8**)&Z2MdnPrm::sApologize, (u8**)&Z2MdnPrm::sApologizeTail, 0x32, 0x04, 0x05, 0x00},
+ { (u8**)&Z2MdnPrm::sDeside, (u8**)&Z2MdnPrm::sDesideTail, 0x32, 0x01, 0x07, 0x00},
+ { (u8**)&Z2MdnPrm::sAfford, (u8**)&Z2MdnPrm::sAffordTail, 0x34, 0x02, 0x0A, 0x00},
};
COMPILER_STRIP_GATE(0x8039C98C, &Z2MdnPrm::sPrm);
@@ -1576,7 +1855,61 @@ SECTION_SDATA2 static f64 lit_4083 = 4503599627370496.0 /* cast u32 to float */;
/* 80456BA8-80456BAC 000048 0002+02 1/1 0/0 0/0 .sbss2 @4003 */
SECTION_SBSS2 static u8 lit_4003[2 + 2 /* padding */];
+typedef struct {
+ u8 field_0x0;
+ u8 field_0x1;
+} Z2ConnectCost;
+
/* 802CC4C0-802CC738 2C6E00 0278+00 2/2 0/0 0/0 .text selectUnit__12Z2SpeechMgr2Fb */
+// This one is a mess
+#ifdef NONMATCHING
+void Z2SpeechMgr2::selectUnit(bool param_0) {
+ Z2ConnectCost local_3c[5];
+ if (field_0x401 >= 64) {
+ field_0x0->stop();
+ } else {
+ s32 ZVar2 = random.get_uint8(Z2MdnPrm::sPrm[field_0x3fc].field_0x8);
+ if (field_0x401 != 0 && param_0) {
+ u8 cVar5 = 0;
+ ZVar2 = field_0x402[field_0x401 - 1];
+ do {
+ bool bVar1;
+ int ZVar3;
+ do {
+ do {
+ bVar1 = false;
+ ZVar3 = random.get_uint8(Z2MdnPrm::sPrm[field_0x3fc].field_0x8);
+ for (int iVar4 = 0; iVar4 < field_0x401; iVar4++) {
+ if (ZVar3 == field_0x402[iVar4]) {
+ bVar1 = true;
+ break;
+ }
+ }
+ } while (bVar1);
+ for (int iVar4 = 0; iVar4 < cVar5; iVar4++) {
+ if (ZVar3 == local_3c[iVar4].field_0x0) {
+ bVar1 = true;
+ break;
+ }
+ }
+ } while (bVar1);
+ local_3c[1].field_0x1 = J3DUD::JMAAbs((*Z2MdnPrm::sPrm[field_0x3fc].field_0x0)[ZVar3 * 2] - (*Z2MdnPrm::sPrm[field_0x3fc].field_0x0)[ZVar3 * 2 + 1]);
+ local_3c[2].field_0x0 = ZVar3;
+ local_3c[cVar5] = local_3c[2];
+ cVar5++;
+ } while (cVar5 != 5);
+ for (int iVar4 = 0; /*ZVar2 = local_3c[0],*/ iVar4 < 5; iVar4++) {
+ if (local_3c[iVar4].field_0x1 < local_3c[0].field_0x0) {
+ local_3c[0].field_0x1 = local_3c[iVar4].field_0x1;
+ local_3c[0].field_0x0 = local_3c[iVar4].field_0x0;
+ }
+ }
+ }
+ field_0x402[field_0x401 - 1] = ZVar2;
+ field_0x401++;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -1585,6 +1918,7 @@ asm void Z2SpeechMgr2::selectUnit(bool param_0) {
#include "asm/Z2AudioLib/Z2SpeechMgr2/selectUnit__12Z2SpeechMgr2Fb.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 80456BAC-80456BB0 00004C 0002+02 1/1 0/0 0/0 .sbss2 @4104 */
@@ -1601,14 +1935,21 @@ asm void Z2SpeechMgr2::selectTail() {
#pragma pop
/* 802CC9D0-802CCA18 2C7310 0048+00 0/0 1/1 0/0 .text framework__12Z2SpeechMgr2Fv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SpeechMgr2::framework() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SpeechMgr2/framework__12Z2SpeechMgr2Fv.s"
+void Z2SpeechMgr2::framework() {
+ switch (field_0x3fe) {
+ case 1:
+ case 2:
+ if (field_0x0) {
+ field_0x3ff++;
+ if (field_0x3ff > 30) {
+ return;
+ }
+ } else {
+ field_0x3fa = 0;
+ }
+ break;
+ }
}
-#pragma pop
/* 802CCA18-802CCF88 2C7358 0570+00 0/0 2/2 0/0 .text playOneShotVoice__12Z2SpeechMgr2FUcUsP3VecSc
*/
@@ -1622,24 +1963,15 @@ asm void Z2SpeechMgr2::playOneShotVoice(u8 param_0, u16 param_1, Vec* param_2, s
#pragma pop
/* 802CCF88-802CCFB8 2C78C8 0030+00 0/0 1/1 0/0 .text isMidnaSpeak__12Z2SpeechMgr2Fv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SpeechMgr2::isMidnaSpeak() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SpeechMgr2/isMidnaSpeak__12Z2SpeechMgr2Fv.s"
+bool Z2SpeechMgr2::isMidnaSpeak() {
+ if ((field_0x3fe == 1 || field_0x3fe == 2) && field_0x0) {
+ return true;
+ }
+ return false;
}
-#pragma pop
/* 802CCFB8-802CCFF8 2C78F8 0040+00 1/1 0/0 0/0 .text __ct__15Z2SpeechStarterFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm Z2SpeechStarter::Z2SpeechStarter() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SpeechMgr2/__ct__15Z2SpeechStarterFv.s"
-}
-#pragma pop
+Z2SpeechStarter::Z2SpeechStarter() : Z2SoundStarter(false) {}
/* ############################################################################################## */
/* 80455F50-80455F54 004550 0004+00 1/1 0/0 0/0 .sdata2 @4571 */
@@ -1653,7 +1985,7 @@ SECTION_SDATA2 static f32 lit_4572 = 0.5f;
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void Z2SpeechStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
+asm int Z2SpeechStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2, u32 param_3, f32 param_4,
f32 param_5, f32 param_6, f32 param_7, f32 param_8,
u32 param_9) {