Work on Z2AudioLib (#2032)

This commit is contained in:
hatal175
2024-01-13 15:41:29 +02:00
committed by GitHub
parent 6260020b3e
commit ead852383f
42 changed files with 853 additions and 1572 deletions
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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"
}
+4 -4
View File
@@ -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"
}
+260 -85
View File
@@ -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 */
+90 -139
View File
@@ -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
+438 -106
View File
@@ -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) {