diff options
| author | hatal175 <hatal175@users.noreply.github.com> | 2024-01-13 15:41:29 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-13 05:41:29 -0800 |
| commit | ead852383fef10f3a7876af7f280d9707ac9e3ef (patch) | |
| tree | a0c0ab1d2ffac1788bffefcf511183de62efad22 /libs | |
| parent | 6260020b3e40a5227572f4a129ddf5f970f7b72c (diff) | |
Work on Z2AudioLib (#2032)
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/JSystem/JAudio2/JAISeqMgr.cpp | 2 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAIStreamMgr.cpp | 2 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAUSoundTable.cpp | 2 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2EnvSeMgr.cpp | 2 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2LinkMgr.cpp | 8 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2SoundInfo.cpp | 345 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2SoundStarter.cpp | 229 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2SpeechMgr2.cpp | 544 |
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) { |
