Z2AudioLib work (#2339)

* Z2LinkMgr work, Z2AudioArcLoader matching

* Z2SeMgr matching

* Z2SpeechMgr2 almost done, Z2SoundHandles matching
This commit is contained in:
Caroline Madsen
2025-03-22 02:03:43 -04:00
committed by GitHub
parent cf87a207b6
commit 5a7b9f62d6
43 changed files with 1832 additions and 1194 deletions
+1 -1
View File
@@ -30,7 +30,7 @@ bool Z2AudioArcLoader::readCommandMore(u32 param_0) {
// NONMATCHING regalloc
void Z2AudioArcLoader::readBFCA(void const* param_0) {
JKRHeap* heap = JAUSectionHeap::getInstance()->getHeap();
JKRArchive* archive = JKRArchive::mount((void*)param_0, JKRGetCurrentHeap(), JKRArchive::MOUNT_DIRECTION_TAIL);
JKRArchive* archive = JKRMountArchive((void*)param_0, JKRGetCurrentHeap(), JKRArchive::MOUNT_DIRECTION_TAIL);
Z2GetFxLineMgr()->initDataArc(archive, heap);
JKRUnmountArchive(archive);
}
+10 -9
View File
@@ -4,6 +4,7 @@
*/
#include "Z2AudioLib/Z2Creature.h"
#include "SSystem/SComponent/c_xyz.h"
#include "Z2AudioLib/Z2Param.h"
#include "Z2AudioLib/Z2Calc.h"
#include "Z2AudioLib/Z2AudioMgr.h"
@@ -180,7 +181,7 @@ Z2SoundHandlePool* Z2Creature::startCreatureSound(JAISoundID i_soundID, u32 para
return mSoundObjSimple1.startSound(i_soundID, param_1, 0);
default:
Z2SoundHandlePool* handle = mSoundObjAnime.startSound(i_soundID, param_1, param_2);
if (handle != NULL && *handle != NULL) {
if (handle != NULL && *handle) {
switch (i_soundID) {
case Z2SE_FAIRY_S_FLY:
f32 pitch = Z2Calc::getParamByExp((f32)param_1, 30.0f, 100.0f, 0.3f,
@@ -199,12 +200,12 @@ Z2SoundHandlePool* Z2Creature::startCreatureSound(JAISoundID i_soundID, u32 para
* startCreatureSoundLevel__10Z2CreatureF10JAISoundIDUlSc */
Z2SoundHandlePool* Z2Creature::startCreatureSoundLevel(JAISoundID i_soundID, u32 param_1, s8 param_2) {
switch (i_soundID) {
case 0x600d6:
case Z2SE_FAIRY_S_LV:
Z2GetAudioMgr()->seStartLevel(i_soundID, mpPos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
return NULL;
default:
Z2SoundHandlePool* handle = mSoundObjAnime.startLevelSound(i_soundID, param_1, param_2);
if (handle != NULL && *handle != NULL) {
if (handle != NULL && *handle) {
if (i_soundID == Z2SE_YM_SNOBO_RIDE || i_soundID == Z2SE_YW_SNOBO_RIDE) {
f32 volume = 0.0f;
if (param_1 != 0) {
@@ -486,7 +487,7 @@ Z2SoundHandlePool* Z2CreatureEnemy::startCreatureSoundLevel(JAISoundID i_soundID
switch (mEnemyID) {
case Z2_ENEMY_FZ:
if (handle != NULL && *handle != NULL && i_soundID == Z2SE_EN_FZ_MOVE) {
if (handle != NULL && *handle && i_soundID == Z2SE_EN_FZ_MOVE) {
f32 volume = Z2Calc::getParamByExp(param_1, 1.0f, 50.0f, 0.4f, 0.1f, 1.1f,
Z2Calc::CURVE_SIGN_1);
(*handle)->getAuxiliary().moveVolume(volume, 0);
@@ -496,7 +497,7 @@ Z2SoundHandlePool* Z2CreatureEnemy::startCreatureSoundLevel(JAISoundID i_soundID
Z2_E_sw_modPitch(handle, param_1);
break;
case Z2_ENEMY_RB:
if (handle != NULL && *handle != NULL && i_soundID == Z2SE_EN_RB_MOVE) {
if (handle != NULL && *handle && i_soundID == Z2SE_EN_RB_MOVE) {
f32 volume = Z2Calc::getParamByExp(param_1, 4.0f, 35.0f, 0.6f, 0.7f, 1.0f,
Z2Calc::CURVE_SIGN_1);
f32 pitch = Z2Calc::getParamByExp(param_1, 4.0f, 35.0f, 0.4f, 0.8f, 1.0f,
@@ -507,7 +508,7 @@ Z2SoundHandlePool* Z2CreatureEnemy::startCreatureSoundLevel(JAISoundID i_soundID
}
// no break
default:
if (handle != NULL && *handle != NULL && i_soundID == Z2SE_EN_PH_PROPELLER) {
if (handle != NULL && *handle && i_soundID == Z2SE_EN_PH_PROPELLER) {
f32 volume = Z2Calc::getParamByExp(param_1, 0.0f, 30.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_1);
f32 pitch = Z2Calc::getParamByExp(param_1, 4000.0f, 13000.0f, 0.4f, 0.8f, 1.2f,
@@ -856,7 +857,7 @@ Z2SoundHandlePool* Z2CreatureFM::startChainSoundLevel(JAISoundID i_soundID, u8 p
switch (param_1) {
case 0:
handle = field_0xa4.startLevelSound(i_soundID, param_3, param_4);
if (handle != NULL && *handle != NULL) {
if (handle != NULL && *handle) {
if (param_2 > 30.0f) {
pitch = 1.06f;
} else {
@@ -872,7 +873,7 @@ Z2SoundHandlePool* Z2CreatureFM::startChainSoundLevel(JAISoundID i_soundID, u8 p
return NULL;
case 1:
handle = field_0xa4.startLevelSound(i_soundID, param_3, param_4);
if (handle != NULL && *handle != NULL) {
if (handle != NULL && *handle) {
if (param_2 > 30.0f) {
pitch = 1.06f;
} else {
@@ -1052,7 +1053,7 @@ Z2SoundHandlePool* Z2CreatureOI::startTentacleSoundLevel(JAISoundID i_soundID, u
f32 param_2, u32 param_3, s8 param_4) {
Z2SoundHandlePool* handle =
mTentacleSounds[param_1].startLevelSound(i_soundID, param_3, param_4);
if (handle != NULL && *handle != NULL) {
if (handle != NULL && *handle) {
f32 volume = Z2Calc::getParamByExp(param_2, 0.0f, 60.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_1);
f32 pitch = Z2Calc::getParamByExp(param_2, 0.0f, 60.0f, 0.4f, 0.9f, 1.1f,
+20 -16
View File
@@ -211,20 +211,20 @@ Z2EnvSeMgr::Z2EnvSeMgr()
field_0x39 = 0;
field_0x2e8.setParam(0.1f, 0.007823764f, 0.06f);
field_0x2f8.setParam(0.2f, 0.007823764f, 0.06f);
field_0x90.setParam(0.1f, 0.02630252f, 0.005f);
field_0xa0.setParam(0.9f, 0.02331011f, 0.003f);
field_0xb0.setParam(0.2f, 0.006385157f, 0.004f);
field_0x90.setParam(0.1f, 0.026302524f, 0.005f);
field_0xa0.setParam(0.9f, 0.023310114f, 0.003f);
field_0xb0.setParam(0.2f, 0.0063851574f, 0.004f);
field_0xc0.setParam(0.8f, 0.006188805f, 0.0045f);
field_0xd0.setParam(0.3f, 0.05343298f, 0.002f);
field_0xe0.setParam(0.7f, 0.04256627f, 0.0025f);
field_0xf0.setParam(0.4f, 0.01293395f, 0.006f);
field_0x100.setParam(0.6f, 0.01215741f, 0.0065f);
field_0x18c.setParam(0.1f, 0.02331011f, 0.005f);
field_0x19c.setParam(0.5f, 0.05343298f, 0.0025f);
field_0xd0.setParam(0.3f, 0.053432982f, 0.002f);
field_0xe0.setParam(0.7f, 0.042566273f, 0.0025f);
field_0xf0.setParam(0.4f, 0.012933955f, 0.006f);
field_0x100.setParam(0.6f, 0.012157413f, 0.0065f);
field_0x18c.setParam(0.1f, 0.023310114f, 0.005f);
field_0x19c.setParam(0.5f, 0.053432982f, 0.0025f);
field_0x64.setVolumeScale(1.0f);
mWolfSmellSeMgr.setVolumeScale(1.0f);
field_0x120.setParam(0.5f, 0.02092357f, 0.001f);
field_0x130.setParam(0.1f, 0.003790878f, 0.005f);
field_0x120.setParam(0.5f, 0.020923574f, 0.001f);
field_0x130.setParam(0.1f, 0.0037908785f, 0.005f);
}
/* 802C6540-802C66B0 2C0E80 0170+00 0/0 1/1 0/0 .text __dt__10Z2EnvSeMgrFv */
@@ -968,7 +968,7 @@ void Z2EnvSeMgr::setHyrulSewerOpen(bool param_0) {
}
/* 802C8300-802C8730 2C2C40 0430+00 2/1 1/1 0/0 .text startRiverSe__10Z2EnvSeMgrFSc */
// NONMATCHING missing branch and JAISound stack issues
// NONMATCHING JAISound stack issues
bool Z2EnvSeMgr::startRiverSe(s8 param_1) {
if (Z2GetStatusMgr()->mCameraMapInfo == 6) {
switch (Z2GetSceneMgr()->getCurrentSceneNum()) {
@@ -979,16 +979,20 @@ bool Z2EnvSeMgr::startRiverSe(s8 param_1) {
case 0x10:
if (Z2GetStatusMgr()->mPolygonPosition.y < -14500.0f) {
break;
}
}
case 8:
default:
registRiverSePos(&Z2GetStatusMgr()->mPolygonPosition);
break;
// fake match: should be 2000.0f according to debug, but that generates an extra entry in sdata2
if (Z2GetStatusMgr()->mPolygonPosition.y < -14500.0f) {
break;
}
case 0x15:
case 0x1e:
case 0x1f:
case 0x2e:
break;
default:
registRiverSePos(&Z2GetStatusMgr()->mPolygonPosition);
break;
}
}
if (mRiverSeMgr.getPosCount() < 0) {
+384 -77
View File
@@ -4,18 +4,7 @@
//
#include "Z2AudioLib/Z2LinkMgr.h"
#include "Z2AudioLib/Z2Creature.h"
#include "d/d_com_inf_game.h"
#include "dol2asm.h"
#include "global.h"
struct Z2SoundObjCoach {
/* 802C54B8 */ Z2SoundObjCoach();
/* 802C54FC */ void init(Vec*, u8);
/* 802C551C */ void startWheelSound(f32);
/* 802C56C0 */ void startFireSound(u16);
/* 802C57C0 */ int startSound(JAISoundID, u32, s8);
};
/* 802C321C-802C3220 2BDB5C 0004+00 0/0 1/1 0/0 .text setLinkGroupInfo__14Z2CreatureLinkFUc */
void Z2CreatureLink::setLinkGroupInfo(u8) {}
@@ -355,14 +344,113 @@ JAISoundHandle* Z2CreatureLink::startLinkSoundLevel(JAISoundID i_soundID, u32 pa
/* 802C4320-802C45B0 2BEC60 0290+00 1/1 1/1 0/0 .text
* startLinkVoice__14Z2CreatureLinkF10JAISoundIDSc */
void Z2CreatureLink::startLinkVoice(JAISoundID param_0, s8 param_1) {
// NONMATCHING
Z2SoundHandlePool* Z2CreatureLink::startLinkVoice(JAISoundID i_soundID, s8 param_1) {
if (mLinkState == 1) {
switch (i_soundID) {
case Z2SE_WL_V_BREATH_WAIT:
case Z2SE_WL_V_BREATH_TIRED:
case Z2SE_WL_V_BREATH_SIT:
if (Z2GetStatusMgr()->getDemoStatus() == 2 || !Z2GetSceneMgr()->isInGame()) {
return NULL;
}
// fallthrough
case Z2SE_WL_V_BREATH_WALK:
case Z2SE_WL_V_BREATH_RUN:
if (field_0xc1 < 5) {
return NULL;
}
field_0xc1 = 0;
break;
case Z2SE_WL_V_BITE_ATTACK:
if (mSoundObjSimple1.getHandleSoundID(Z2SE_WL_V_BITE_THROAT) != NULL) {
return NULL;
}
break;
}
} else {
if (i_soundID == Z2SE_AL_V_ATTACK_RUN) {
if (field_0xc1 < 10) {
return NULL;
}
field_0xc1 = 0;
}
if (mMarkState != 3 && Z2GetSoundObjMgr()->getEnemyNumNear() == 0
&& !Z2GetSoundObjMgr()->isForceBattle())
{
switch (i_soundID) {
case Z2SE_AL_V_ATTACK_S:
i_soundID = Z2SE_AL_V_ATTACK_S_FREE;
break;
case Z2SE_AL_V_ATTACK_M:
case Z2SE_AL_V_TATE_OSHI:
i_soundID = Z2SE_AL_V_ATTACK_M_FREE;
break;
case Z2SE_AL_V_ATTACK_L:
i_soundID = Z2SE_AL_V_ATTACK_L_FREE;
break;
case Z2SE_AL_V_KAITEN:
i_soundID = Z2SE_AL_V_KAITEN_FREE;
break;
case Z2SE_AL_V_BACKTEN:
case Z2SE_AL_V_SOTOMO_ROLL:
i_soundID = Z2SE_AL_V_BACKTEN_FREE;
break;
case Z2SE_AL_V_ATTACK_RUN:
i_soundID = Z2SE_AL_V_ATTACK_RUN_FREE;
break;
}
} else {
if (i_soundID == Z2SE_AL_V_JUMP_S) {
i_soundID = Z2SE_AL_V_BACKTEN;
}
}
if (isInWater()) {
i_soundID = Z2SE_AL_V_UNDER_WATER;
}
}
return startCreatureVoice(i_soundID, param_1);
}
/* 802C45B0-802C46F0 2BEEF0 0140+00 0/0 1/1 0/0 .text
* startLinkVoiceLevel__14Z2CreatureLinkF10JAISoundIDSc */
void Z2CreatureLink::startLinkVoiceLevel(JAISoundID param_0, s8 param_1) {
// NONMATCHING
Z2SoundHandlePool* Z2CreatureLink::startLinkVoiceLevel(JAISoundID i_soundID, s8 param_1) {
if (mLinkState == 1) {
switch (i_soundID) {
case Z2SE_WL_V_ROAR:
f32 volume = 0.0f;
u8 port_data = 0;
switch (mMarkState) {
case 0:
volume = 1.0f;
port_data = 2;
break;
case 1:
volume = 0.3f;
port_data = 1;
break;
case 2:
volume = 0.5f;
port_data = 1;
break;
case 3:
volume = 0.8f;
port_data = 2;
break;
}
Z2SoundHandlePool* handle = startCreatureVoiceLevel(Z2SE_WL_V_ROAR, param_1);
if (handle != NULL && *handle) {
(*handle)->getAuxiliary().moveVolume(volume, 0);
Z2GetSoundStarter()->setPortData(handle, 8, port_data, -1);
}
return handle;
}
}
return startCreatureVoiceLevel(i_soundID, param_1);
}
/* 802C46F0-802C4784 2BF030 0094+00 0/0 2/2 0/0 .text
@@ -401,15 +489,26 @@ Z2SoundHandlePool* Z2CreatureLink::startCollisionSE(u32 hitID, u32 mapinfo) {
return mSoundObjAnime.startCollisionSE(hitID, mapinfo, NULL);
}
/* ############################################################################################## */
/* 80455D18-80455D1C 004318 0004+00 1/1 0/0 0/0 .sdata2 @4178 */
SECTION_SDATA2 static f32 lit_4178 = 100.0f;
/* 802C4814-802C48D8 2BF154 00C4+00 0/0 4/4 2/2 .text
* startHitItemSE__14Z2CreatureLinkFUlUlP14Z2SoundObjBasef */
int Z2CreatureLink::startHitItemSE(u32 param_0, u32 param_1, Z2SoundObjBase* param_2,
f32 speed) {
// NONMATCHING
Z2SoundHandlePool* Z2CreatureLink::startHitItemSE(u32 i_soundID, u32 param_1,
Z2SoundObjBase* param_2, f32 speed) {
if (param_2 == NULL) {
param_2 = &mSoundObjSimple2;
}
if (i_soundID == Z2SE_HIT_SHIELD_ATTACK) {
return mSoundObjAnime.startCollisionSE(i_soundID, param_1, NULL);
}
Z2SoundHandlePool* handle = param_2->startCollisionSE(i_soundID, param_1, NULL);
if (speed >= 0.0f && handle != NULL && *handle) {
if (speed >= 100.0f) {
speed = 100.0f;
}
(*handle)->getAuxiliary().moveVolume(speed / 100.0f, 0);
}
return handle;
}
/* 802C48D8-802C48E8 2BF218 0010+00 0/0 1/1 0/0 .text setResumeAttack__14Z2CreatureLinkFb
@@ -421,17 +520,158 @@ void Z2CreatureLink::setResumeAttack(bool i_resumeAttack) {
/* 802C48E8-802C4928 2BF228 0040+00 1/1 0/0 0/0 .text __ct__18Z2LinkSoundStarterFv */
Z2LinkSoundStarter::Z2LinkSoundStarter() : Z2SoundStarter(false) {}
/* ############################################################################################## */
/* 80455D1C-80455D20 00431C 0004+00 2/2 0/0 0/0 .sdata2 @4399 */
SECTION_SDATA2 static f32 lit_4399 = 9.0f / 10.0f;
/* 802C4928-802C4FFC 2BF268 06D4+00 2/0 0/0 0/0 .text
* startSound__18Z2LinkSoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f>UlfffffUl */
bool 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) {
// NONMATCHING
// NONMATCHING stack alloc
bool Z2LinkSoundStarter::startSound(JAISoundID i_soundID, 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) {
bool bVar2 = false;
bool bVar3 = false;
if (Z2GetLink()->isInWater() && Z2GetStatusMgr()->getCameraInWaterDepthRatio() > 0.0f) {
switch (i_soundID) {
case Z2SE_AL_SWIM:
case Z2SE_AL_DIVE_SWIM:
i_soundID = Z2SE_AL_SWIM_UNDERWATER;
break;
case Z2SE_AL_SWORD_SWING_S:
case Z2SE_AL_FINISH_SWING1:
case Z2SE_AL_FINISH_SWING2:
case Z2SE_AL_WAIT_SWORD_SWING:
i_soundID = Z2SE_AL_WATER_STROKE_S;
break;
case Z2SE_AL_SWORD_SWING_L:
i_soundID = Z2SE_AL_WATER_STROKE_L;
break;
case Z2SE_AL_SWORD_THRUST:
i_soundID = Z2SE_AL_WATER_STROKE_FAST;
break;
case Z2SE_AL_KAITENGIRI:
i_soundID = Z2SE_AL_WATER_STROKE_CIRCLE;
break;
}
}
if (i_soundID.mId.mBytes.b1 == 3 && param_3 > 26) {
if (param_3 == 44) {
param_3 = 23;
} else {
param_3 = 0;
}
}
switch (i_soundID) {
case Z2SE_AL_INTO_WATER:
case Z2SE_AL_DIVE_INTO_WATER:
case Z2SE_WL_INTO_WATER:
if (Z2GetLink()->mSoundObjSimple1.isActive()) {
Z2GetLink()->mSoundObjSimple1.stopAllSounds(1);
}
break;
case Z2SE_FN_WALK_DUMMY:
case Z2SE_FN_LADDER_CLIMB:
case Z2SE_FN_LADDER_DOWN:
bVar2 = true;
// fallthrough
case Z2SE_GORON_FOOTNOTE:
case Z2SE_FN_GOB_JUMP:
if (Z2GetLink()->mLinkBootsType == 1) {
i_soundID = Z2SE_FN_WALK_HEAVY;
if (Z2GetLink()->mMagnetized) {
param_3 = 127;
}
}
bVar3 = true;
break;
case Z2SE_FN_JUMP_DUMMY:
bVar2 = true;
bVar3 = true;
if (Z2GetLink()->mLinkBootsType == 1) {
i_soundID = Z2SE_FN_JUMP_HEAVY;
if (Z2GetLink()->mMagnetized) {
param_3 = 127;
}
}
if (Z2GetLink()->mSoundObjSimple1.getHandleSoundID(Z2SE_AL_V_FALL) != NULL) {
Z2GetLink()->startLinkVoice(Z2SE_AL_V_FOOT_MISS, -1);
}
break;
case Z2SE_FN_BOUND_DUMMY:
case Z2SE_FN_HAND_DUMMY:
bVar2 = true;
break;
case Z2SE_BODY_FALL_DOWN:
if (Z2GetLink()->mSoundObjSimple1.getHandleSoundID(Z2SE_AL_V_FALL) != NULL) {
Z2GetLink()->startLinkVoice(Z2SE_AL_V_LANDING_FAIL, -1);
}
break;
case Z2SE_OBJ_ARROW_SHOT_NORMAL:
case Z2SE_OBJ_ARROW_SHOT_GAIN:
case Z2SE_OBJ_ARROWBOMB_SHOT:
case Z2SE_OBJ_ARROWBOMB_SHOTGAIN:
Z2SoundHandlePool* handle = Z2GetLink()->mSoundObjAnime.getHandleSoundID(Z2SE_AL_DRAW_BOW);
if (handle != NULL) {
(*handle)->stop(0);
}
break;
}
if (Z2GetLink()->mSinkDepth > 0) {
switch (i_soundID) {
case Z2SE_FN_WALK_DUMMY:
case Z2SE_FN_JUMP_DUMMY:
case Z2SE_FN_BOUND_DUMMY:
case Z2SE_FN_HAND_DUMMY:
case Z2SE_FN_WALK_HEAVY:
case Z2SE_FN_JUMP_HEAVY:
case Z2SE_WL_WALK_L_DUMMY:
case Z2SE_WL_WALK_R_DUMMY:
case Z2SE_WL_RUN_L_DUMMY:
case Z2SE_WL_RUN_R_DUMMY:
if (param_3 == 3) {
param_5 *= Z2Calc::linearTransform(Z2GetLink()->mSinkDepth,
0.0f, 127.0f, 1.0f, 0.5f, true);
} else if (param_3 == 25) {
param_5 *= Z2Calc::linearTransform(Z2GetLink()->mSinkDepth,
0.0f, 23.0f, 1.0f, 0.7f, true);
}
break;
}
}
bool ret = Z2SoundStarter::startSound(i_soundID, param_1, param_2, param_3, param_4, param_5,
param_6, param_7, param_8, param_9);
if (bVar2 && Z2GetSceneMgr()->getDemoSeWaveNum() != 114) {
if (Z2GetLink()->mFlag5) {
Z2GetLink()->startLinkSound(Z2SE_AL_SWORD_SHIELD_ADD, 0, param_4 * 127.0f);
}
if (Z2GetLink()->mUsingIronBall) {
Z2GetLink()->startLinkSound(Z2SE_AL_IB_CHAIN_ADD, 0, param_4 * 127.0f);
}
if (Z2GetLink()->mKanteraState != 0) {
Z2SoundHandlePool* handle =
Z2GetLink()->mKantera.startSound(Z2SE_AL_KANTERA_SWING_ADD, 0, param_4 * 127.0f);
if (Z2GetLink()->mKanteraState == 2 && handle != NULL && *handle) {
(*handle)->getAuxiliary().moveVolume(0.6f, 0);
(*handle)->getAuxiliary().movePitch(0.9f, 0);
}
}
}
if (bVar3) {
if (Z2GetLink()->mLinkState == 4) {
Z2GetLink()->startLinkSound(Z2SE_FN_ARMER_LIGHT_ADD, 0, param_4 * 127.0f);
} else if (Z2GetLink()->mLinkState == 5) {
Z2GetLink()->startLinkSound(Z2SE_FN_ARMER_HEAVY_ADD, 0, param_4 * 127.0f);
}
}
return ret;
}
/* 802C4FFC-802C5078 2BF93C 007C+00 0/0 0/0 3/3 .text __ct__14Z2CreatureRideFv */
@@ -441,14 +681,9 @@ Z2CreatureRide::Z2CreatureRide() : Z2RideSoundStarter(this) {
setSoundStarter(this);
}
/* 802C5078-802C5114 2BF9B8 009C+00 1/0 0/0 0/0 .text __dt__18Z2RideSoundStarterFv */
inline Z2RideSoundStarter::~Z2RideSoundStarter() {
// NONMATCHING
}
/* 802C5114-802C51EC 2BFA54 00D8+00 2/1 0/0 2/2 .text __dt__14Z2CreatureRideFv */
Z2CreatureRide::~Z2CreatureRide() {
// NONMATCHING
deleteObject();
}
/* 802C51EC-802C520C 2BFB2C 0020+00 1/0 0/0 0/0 .text deleteObject__14Z2CreatureRideFv */
@@ -475,61 +710,133 @@ Z2RideSoundStarter::Z2RideSoundStarter(Z2CreatureRide* ride) : Z2SoundStarter(fa
/* 802C5284-802C54B8 2BFBC4 0234+00 2/0 0/0 0/0 .text
* startSound__18Z2RideSoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f>UlfffffUl */
bool 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) {
// NONMATCHING
// NONMATCHING regalloc / extra load
bool Z2RideSoundStarter::startSound(JAISoundID i_soundID, 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) {
if (!Z2GetSceneMgr()->isInGame()) {
return false;
}
u8 uVar3 = 0;
switch (i_soundID) {
case Z2SE_HS_WALK_L_DUMMY:
case Z2SE_HS_WALK_R_DUMMY:
case Z2SE_HS_TROT_L_DUMMY:
case Z2SE_HS_TROT_R_DUMMY:
case Z2SE_HS_GALLOP_L_DUMMY:
uVar3 = 1;
break;
case Z2SE_WB_FRONT_L_DUMMY:
case Z2SE_WB_FRONT_R_DUMMY:
case Z2SE_WB_REAR_L_DUMMY:
uVar3 = 2;
break;
}
bool ret = Z2SoundStarter::startSound(i_soundID, param_1, param_2, param_3, param_4, param_5,
param_6, param_7, param_8, param_9);
if (mRide->isLinkRiding() && uVar3 != 0) {
if (Z2GetLink()->mFlag5) {
Z2GetLink()->startLinkSound(Z2SE_AL_SWORD_SHIELD_ADD, 0, param_4 * 127.0f);
}
if (Z2GetLink()->mKanteraState != 0) {
Z2SoundHandlePool* handle =
Z2GetLink()->mKantera.startSound(Z2SE_AL_KANTERA_SWING_ADD, 0, param_4 * 127.0f);
if (Z2GetLink()->mKanteraState == 2 && handle != NULL && *handle) {
(*handle)->getAuxiliary().moveVolume(0.6f, 0);
(*handle)->getAuxiliary().movePitch(0.9f, 0);
}
}
switch (uVar3) {
case 1:
Z2GetLink()->startLinkSound(Z2SE_AL_HARNESS_ADD_HS, 0, param_4 * 127.0f);
break;
case 2:
Z2GetLink()->startLinkSound(Z2SE_AL_HARNESS_ADD_WB, 0, param_4 * 127.0f);
break;
}
}
return ret;
}
/* 802C54B8-802C54FC 2BFDF8 0044+00 0/0 0/0 1/1 .text __ct__15Z2SoundObjCoachFv */
Z2SoundObjCoach::Z2SoundObjCoach() {
// NONMATCHING
field_0x20 = 0.0f;
}
/* 802C54FC-802C551C 2BFE3C 0020+00 1/0 0/0 0/0 .text init__15Z2SoundObjCoachFP3VecUc */
void Z2SoundObjCoach::init(Vec* param_0, u8 param_1) {
// NONMATCHING
void Z2SoundObjCoach::init(Vec* i_soundPos, u8 i_numHandles) {
Z2SoundObjBase::init(i_soundPos, i_numHandles);
}
/* ############################################################################################## */
/* 80455D20-80455D24 004320 0004+00 1/1 0/0 0/0 .sdata2 @4621 */
SECTION_SDATA2 static f32 lit_4621 = 2.0f;
/* 80455D24-80455D28 004324 0004+00 1/1 0/0 0/0 .sdata2 @4622 */
SECTION_SDATA2 static f32 lit_4622 = 35.0f;
/* 80455D28-80455D2C 004328 0004+00 1/1 0/0 0/0 .sdata2 @4623 */
SECTION_SDATA2 static f32 lit_4623 = 22.0f / 25.0f;
/* 80455D2C-80455D30 00432C 0004+00 3/3 0/0 0/0 .sdata2 @4624 */
SECTION_SDATA2 static f32 lit_4624 = 1.25f;
/* 80455D30-80455D34 004330 0004+00 2/2 0/0 0/0 .sdata2 @4625 */
SECTION_SDATA2 static f32 lit_4625 = 50.0f;
/* 802C551C-802C56C0 2BFE5C 01A4+00 0/0 0/0 1/1 .text startWheelSound__15Z2SoundObjCoachFf */
void Z2SoundObjCoach::startWheelSound(f32 param_0) {
// NONMATCHING
Z2SoundHandlePool* Z2SoundObjCoach::startWheelSound(f32 param_0) {
Z2SoundHandlePool* handle = NULL;
if (!(param_0 < 2.0f)) {
if (param_0 < 35.0f) {
handle = startLevelSound(Z2SE_COACH_WHEEL_ROLL_A, 0, -1);
if (handle != NULL && *handle) {
f32 pitch = Z2Calc::getParamByExp(param_0, 0.0f, 35.0f, 0.25f, 0.88f, 1.25f,
Z2Calc::CURVE_SIGN_1);
(*handle)->getAuxiliary().movePitch(pitch, 0);
f32 volume = Z2Calc::getParamByExp(param_0, 0.0f, 35.0f, 0.3f, 0.7f, 1.0f,
Z2Calc::CURVE_SIGN_1);
(*handle)->getAuxiliary().moveVolume(volume, 0);
}
} else {
handle = startLevelSound(Z2SE_COACH_WHEEL_ROLL_B, 0, -1);
if (handle != NULL && *handle) {
f32 pitch = Z2Calc::getParamByExp(param_0, 35.0f, 50.0f, 0.25f, 0.88f, 1.25f,
Z2Calc::CURVE_SIGN_1);
(*handle)->getAuxiliary().movePitch(pitch, 0);
f32 volume = Z2Calc::getParamByExp(param_0, 35.0f, 50.0f, 0.3f, 0.8f, 1.0f,
Z2Calc::CURVE_SIGN_1);
(*handle)->getAuxiliary().moveVolume(volume, 0);
}
}
}
field_0x20 = param_0;
return handle;
}
/* ############################################################################################## */
/* 80455D34-80455D38 004334 0004+00 1/1 0/0 0/0 .sdata2 @4645 */
SECTION_SDATA2 static f32 lit_4645 = 1500.0f;
/* 80455D38-80455D3C 004338 0004+00 2/2 0/0 0/0 .sdata2 @4646 */
SECTION_SDATA2 static f32 lit_4646 = 1.0f / 5.0f;
/* 80455D3C-80455D40 00433C 0004+00 2/2 0/0 0/0 .sdata2 @4647 */
SECTION_SDATA2 static f32 lit_4647 = 17.0f / 20.0f;
/* 802C56C0-802C57C0 2C0000 0100+00 0/0 0/0 1/1 .text startFireSound__15Z2SoundObjCoachFUs */
void Z2SoundObjCoach::startFireSound(u16 param_0) {
// NONMATCHING
Z2SoundHandlePool* Z2SoundObjCoach::startFireSound(u16 param_0) {
Z2SoundHandlePool* handle = startLevelSound(Z2SE_COACH_FIRE, 0, -1);
if (handle != NULL && *handle) {
f32 pitch = Z2Calc::getParamByExp(param_0, 0.0f, 1500.0f, 0.2f, 0.85f, 1.25f,
Z2Calc::CURVE_SIGN_1);
(*handle)->getAuxiliary().movePitch(pitch, 0);
f32 volume = Z2Calc::getParamByExp(param_0, 0.0f, 1500.0f, 0.2f, 0.6f, 1.0f,
Z2Calc::CURVE_SIGN_1);
(*handle)->getAuxiliary().moveVolume(volume, 0);
}
return handle;
}
/* 802C57C0-802C588C 2C0100 00CC+00 1/0 0/0 0/0 .text
* startSound__15Z2SoundObjCoachF10JAISoundIDUlSc */
int Z2SoundObjCoach::startSound(JAISoundID param_0, u32 param_1, s8 param_2) {
// NONMATCHING
Z2SoundHandlePool* Z2SoundObjCoach::startSound(JAISoundID i_soundID, u32 param_1, s8 param_2) {
Z2SoundHandlePool* handle = Z2SoundObjBase::startSound(i_soundID, param_1, param_2);
if (handle != NULL && *handle && i_soundID == Z2SE_COACH_SHAKE) {
f32 pitch = Z2Calc::getParamByExp(field_0x20, 0.0f, 50.0f, 0.2f, 0.85f, 1.25f,
Z2Calc::CURVE_SIGN_1);
(*handle)->getAuxiliary().movePitch(pitch, 0);
f32 volume = Z2Calc::getParamByExp(field_0x20, 0.0f, 50.0f, 0.2f, 0.8f, 1.0f,
Z2Calc::CURVE_SIGN_1);
(*handle)->getAuxiliary().moveVolume(volume, 0);
}
return handle;
}
-4
View File
@@ -167,7 +167,3 @@ u8 struct_80451341;
u8 struct_80451342;
u8 pad_80451344[4];
#pragma pop
/* 80451348-80451350 000848 0008+00 0/0 4/4 0/0 .sbss None */
extern u8 data_80451348[8];
u8 data_80451348[8];
+371 -174
View File
@@ -6,49 +6,14 @@
#include "Z2AudioLib/Z2SeMgr.h"
#include "Z2AudioLib/Z2Audience.h"
#include "Z2AudioLib/Z2Calc.h"
#include "Z2AudioLib/Z2LinkMgr.h"
#include "Z2AudioLib/Z2SoundMgr.h"
#include "Z2AudioLib/Z2SceneMgr.h"
#include "Z2AudioLib/Z2SpeechMgr2.h"
#include "Z2AudioLib/Z2StatusMgr.h"
#include "Z2AudioLib/Z2Param.h"
#include "Z2AudioLib/Z2SeqMgr.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void __ct__7Z2SeMgrFv();
extern "C" void __ct__12Z2MultiSeObjFv();
extern "C" void initSe__7Z2SeMgrFv();
extern "C" void resetModY__7Z2SeMgrFv();
extern "C" void modHeightAtCamera__7Z2SeMgrFPPC3Vec();
extern "C" void incrCrowdSize__7Z2SeMgrFv();
extern "C" void decrCrowdSize__7Z2SeMgrFv();
extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
extern "C" void seStop__7Z2SeMgrF10JAISoundIDUl();
extern "C" void seStopAll__7Z2SeMgrFUl();
extern "C" void seMoveVolumeAll__7Z2SeMgrFfUl();
extern "C" void messageSePlay__7Z2SeMgrFUsP3VecSc();
extern "C" void talkInSe__7Z2SeMgrFv();
extern "C" void talkOutSe__7Z2SeMgrFv();
extern "C" void menuInSe__7Z2SeMgrFv();
extern "C" void setLevObjSE__7Z2SeMgrFUlP3VecSc();
extern "C" void setMultiTriggerSE__7Z2SeMgrFUlP3VecSc();
extern "C" void processSeFramework__7Z2SeMgrFv();
extern "C" void isLevelSe__7Z2SeMgrF10JAISoundID();
extern "C" void isSoundCulling__7Z2SeMgrF10JAISoundID();
extern "C" void __ct__12Z2MultiSeMgrFv();
extern "C" void __dt__12Z2MultiSeMgrFv();
extern "C" void registMultiSePos__12Z2MultiSeMgrFP3Vec();
extern "C" void resetMultiSePos__12Z2MultiSeMgrFv();
extern "C" void getPanPower__12Z2MultiSeMgrFv();
extern "C" void getDolbyPower__12Z2MultiSeMgrFv();
//
// Declarations:
//
#include "JSystem/J3DU/J3DUD.h"
/* 802AB64C-802AB710 2A5F8C 00C4+00 0/0 1/1 0/0 .text __ct__7Z2SeMgrFv */
Z2SeMgr::Z2SeMgr() : JASGlobalInstance(this), mSoundHandles(mSoundHandle, 0x18) {
@@ -145,12 +110,12 @@ void Z2SeMgr::decrCrowdSize() {
/* 802AB984-802AC50C 2A62C4 0B88+00 1/1 196/196 549/549 .text
* seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc */
// NONMATCHING something is wrong with the switch, also isMovieDemo needs to not get inlined
bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_reverb,
f32 i_pitch, f32 i_volume, f32 i_pan, f32 i_dolby, u8 param_8) {
if (i_soundID == 0xffffffff) {
return false;
}
if (param_8 != 1) {
switch (i_soundID) {
case Z2SE_OBJ_L8_STAIR_ON:
@@ -165,6 +130,7 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_
return false;
}
}
switch (i_soundID) {
case Z2SE_QUIT_GAME:
Z2GetStatusMgr()->menuOut();
@@ -177,7 +143,7 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_
seStop(JA_SE_OBJ_STN_DOOR_MOVE_D, 0);
break;
case JA_SE_OBJ_STN_DOOR_STOP_D:
seStop(JA_SE_OBJ_STN_DOOR_STOP_D, 0);
seStop(JA_SE_OBJ_STN_DOOR_MOVE_U, 0);
seStop(JA_SE_OBJ_STN_DOOR_MOVE_D, 0);
break;
case JA_SE_OBJ_STN_DOOR_MOVE_D:
@@ -185,6 +151,7 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_
seStop(JA_SE_OBJ_STN_DOOR_MOVE_U, 0);
seStop(JA_SE_OBJ_STN_DOOR_MOVE_D, 0);
break;
case Z2SE_OBJ_WOOD_DOOR_ROLLOPEN:
case Z2SE_OBJ_WOOD_DOOR_ROLLOPEN2:
case Z2SE_OBJ_WOOD_DR_OP_MDN:
case Z2SE_OBJ_WOOD_DR_OP_MDN_FX:
@@ -193,11 +160,10 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLCLOSE, 0);
break;
case Z2SE_OBJ_WOOD_DOOR_CLOSE_STOP:
seStop(Z2SE_OBJ_WOOD_DOOR_CLOSE_STOP, 0);
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLOPEN, 0);
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLOPEN2, 0);
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLCLOSE, 0);
break;
case Z2SE_OBJ_WOOD_DOOR_ROLLOPEN:
case Z2SE_OBJ_WOOD_DOOR_ROLLCLOSE:
case Z2SE_OBJ_WOOD_DOOR_OPEN_STOP:
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLOPEN, 0);
@@ -314,12 +280,13 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 41.0f, 0.4f, 0.3f, 1.0f,
Z2Calc::CURVE_SIGN_2);
break;
case Z2SE_OBJ_L8_B_FOG_FLY:
case Z2SE_OBJ_L8_B_FOG_FLY: {
Vec tmp = Z2GetAudience()->getAudioCamPos(0);
if (i_pos->y > tmp.y) {
return false;
}
break;
}
case Z2SE_OBJ_BLN_BREAK_S:
case Z2SE_OBJ_BLN_BREAK_M:
case Z2SE_OBJ_BLN_BREAK_L:
@@ -354,157 +321,387 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_
i_soundID = Z2SE_OBJ_DARK_GATE_RIPPLE_WLF;
}
break;
case Z2SE_OBJ_ARMOR_SWING:
case Z2SE_OBJ_ARMOR_HIT:
break;
}
if (isLevelSe(i_soundID)) {
return seStartLevel(i_soundID, i_pos, param_2, i_reverb, i_pitch,
i_volume, i_pan, i_dolby, param_8);
}
if (isSoundCulling(i_soundID)) {
return false;
}
JAISoundHandle* handle = mSoundHandles.getFreeHandle();
if (handle == NULL) {
return false;
}
return Z2GetSoundStarter()->startSound(i_soundID, handle, (JGeometry::TVec3<f32>*)i_pos,
param_2, i_reverb / 127.0f,
i_pitch, i_volume, i_pan, i_dolby, 0);
}
/* ############################################################################################## */
/* 803C9D98-803C9DF8 -00001 0060+00 1/1 0/0 0/0 .data @4619 */
SECTION_DATA static void* lit_4619[24] = {
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF78),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF78),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF78),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF78),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF84),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF90),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF9C),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFA8),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFB4),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFC0),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFCC),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFD8),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1028),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1028),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1028),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1028),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1028),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1028),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFE4),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFF0),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFFC),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1008),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1014),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1020),
};
/* 804558E8-804558EC 003EE8 0004+00 1/1 0/0 0/0 .sdata2 @4586 */
SECTION_SDATA2 static f32 lit_4586 = 25.0f;
/* 804558EC-804558F0 003EEC 0004+00 1/1 0/0 0/0 .sdata2 @4587 */
SECTION_SDATA2 static f32 lit_4587 = 1.0f / 10.0f;
/* 804558F0-804558F4 003EF0 0004+00 1/1 0/0 0/0 .sdata2 @4588 */
SECTION_SDATA2 static f32 lit_4588 = 10.0f;
/* 804558F4-804558F8 003EF4 0004+00 1/1 0/0 0/0 .sdata2 @4589 */
SECTION_SDATA2 static f32 lit_4589 = 2.0f;
/* 804558F8-80455900 003EF8 0004+04 2/2 0/0 0/0 .sdata2 @4590 */
SECTION_SDATA2 static f32 lit_4590[1 + 1 /* padding */] = {
13.0f / 10.0f,
/* padding */
0.0f,
};
/* 80455900-80455908 003F00 0008+00 1/1 0/0 0/0 .sdata2 @4591 */
SECTION_SDATA2 static f64 lit_4591 = 0.7;
/* 80455908-80455910 003F08 0008+00 1/1 0/0 0/0 .sdata2 @4592 */
SECTION_SDATA2 static f64 lit_4592 = 0.0006;
/* 80455910-80455918 003F10 0008+00 1/1 0/0 0/0 .sdata2 @4593 */
SECTION_SDATA2 static f64 lit_4593 = 1.0;
/* 80455918-80455920 003F18 0008+00 1/1 0/0 0/0 .sdata2 @4594 */
SECTION_SDATA2 static f64 lit_4594 = 0.0015;
/* 80455920-80455928 003F20 0008+00 1/1 0/0 0/0 .sdata2 @4595 */
SECTION_SDATA2 static f64 lit_4595 = 0.005;
/* 80455928-80455930 003F28 0008+00 1/1 0/0 0/0 .sdata2 @4596 */
SECTION_SDATA2 static f64 lit_4596 = 0.3;
/* 80455930-80455938 003F30 0008+00 1/1 0/0 0/0 .sdata2 @4597 */
SECTION_SDATA2 static f64 lit_4597 = 0.001;
/* 80455938-8045593C 003F38 0004+00 1/1 0/0 0/0 .sdata2 @4598 */
SECTION_SDATA2 static f32 lit_4598 = 4000.0f;
/* 8045593C-80455940 003F3C 0004+00 1/1 0/0 0/0 .sdata2 @4599 */
SECTION_SDATA2 static f32 lit_4599 = 3500.0f;
/* 80455940-80455944 003F40 0004+00 1/1 0/0 0/0 .sdata2 @4600 */
SECTION_SDATA2 static f32 lit_4600 = 26.0f;
/* 80455944-80455948 003F44 0004+00 1/1 0/0 0/0 .sdata2 @4601 */
SECTION_SDATA2 static f32 lit_4601 = 3.0f / 5.0f;
/* 80455948-8045594C 003F48 0004+00 1/1 0/0 0/0 .sdata2 @4602 */
SECTION_SDATA2 static f32 lit_4602 = 64.0f;
/* 8045594C-80455950 003F4C 0004+00 1/1 0/0 0/0 .sdata2 @4603 */
SECTION_SDATA2 static f32 lit_4603 = 4500.0f;
/* 80455950-80455954 003F50 0004+00 1/1 0/0 0/0 .sdata2 @4604 */
SECTION_SDATA2 static f32 lit_4604 = 40.0f;
/* 80455954-80455958 003F54 0004+00 1/1 0/0 0/0 .sdata2 @4605 */
SECTION_SDATA2 static f32 lit_4605 = 120.0f;
/* 80455958-80455960 003F58 0004+04 1/1 0/0 0/0 .sdata2 @4606 */
SECTION_SDATA2 static f32 lit_4606[1 + 1 /* padding */] = {
5.0f,
/* padding */
0.0f,
};
/* 80455960-80455968 003F60 0008+00 1/1 0/0 0/0 .sdata2 @4607 */
SECTION_SDATA2 static f64 lit_4607 = 0.5;
/* 80455968-80455970 003F68 0008+00 1/1 0/0 0/0 .sdata2 @4608 */
SECTION_SDATA2 static f64 lit_4608 = 3.0;
/* 80455970-80455978 003F70 0008+00 1/1 0/0 0/0 .sdata2 @4609 */
SECTION_SDATA2 static u8 lit_4609[8] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 80455978-8045597C 003F78 0004+00 1/1 0/0 0/0 .sdata2 @4610 */
SECTION_SDATA2 static f32 lit_4610 = 2000.0f;
/* 8045597C-80455980 003F7C 0004+00 1/1 0/0 0/0 .sdata2 @4611 */
SECTION_SDATA2 static f32 lit_4611 = 5000.0f;
/* 80455980-80455984 003F80 0004+00 1/1 0/0 0/0 .sdata2 @4612 */
SECTION_SDATA2 static f32 lit_4612 = 9.0f / 20.0f;
/* 80455984-80455988 003F84 0004+00 1/1 0/0 0/0 .sdata2 @4613 */
SECTION_SDATA2 static f32 lit_4613 = 50.0f;
/* 80455988-8045598C 003F88 0004+00 1/1 0/0 0/0 .sdata2 @4614 */
SECTION_SDATA2 static f32 lit_4614 = 600.0f;
/* 8045598C-80455990 003F8C 0004+00 1/1 0/0 0/0 .sdata2 @4615 */
SECTION_SDATA2 static f32 lit_4615 = 90.0f;
/* 802AC50C-802AD8B0 2A6E4C 13A4+00 3/2 19/19 199/199 .text
* seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc */
bool Z2SeMgr::seStartLevel(JAISoundID param_0, Vec const* param_1, u32 param_2, s8 param_3,
f32 param_4, f32 param_5, f32 param_6, f32 param_7, u8 param_8) {
// NONMATCHING
bool Z2SeMgr::seStartLevel(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_reverb,
f32 i_pitch, f32 i_volume, f32 i_pan, f32 i_dolby, u8 param_8) {
if (param_8 != 1) {
switch (i_soundID) {
case Z2SE_OBJ_FIRE_BURNING:
if (Z2GetStatusMgr()->getDemoStatus() == 2 || !Z2GetSceneMgr()->isInGame()) {
return false;
}
// fallthrough
case Z2SE_FAIRY_S_LV:
case Z2SE_EN_ZZ_MV:
case Z2SE_OBJ_L8_L_BALL_SW:
case Z2SE_OBJ_GANON_BARRIER:
case Z2SE_OBJ_CRVN_BURNING:
setLevObjSE(i_soundID, const_cast<Vec*>(i_pos), i_reverb);
return false;
}
}
switch (i_soundID) {
case Z2SE_OBJ_FLAG_TRAILING:
i_volume = Z2Calc::getParamByExp(param_2, 25.0f, 127.0f, 0.4f, 0.1f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 25.0f, 127.0f, 0.4f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_BRIDGE_TRAILING:
case Z2SE_OBJ_BROKENBRIDGE:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 0.4f, 0.1f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 0.4f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_BOOMSHTR_SWITCH:
if (param_2 < 10) {
param_2 = 10;
}
i_volume = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_1);
i_pitch = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_1);
break;
case Z2SE_OBJ_FAN_WIND_S:
modHeightAtCamera(&i_pos);
break;
case Z2SE_OBJ_FAN_ROLL_S:
case Z2SE_OBJ_FAN_ROLL_M:
case Z2SE_OBJ_FAN_ROLL_L:
if (param_2 < 10) {
param_2 = 10;
}
i_volume = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_1);
i_pitch = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_1);
break;
case Z2SE_OBJ_AMI_ROLL:
if (param_2 < 10) {
param_2 = 10;
}
i_volume = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_1);
i_pitch = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_1);
break;
case Z2SE_OBJ_BRDG_MOVE:
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 2.0f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_1);
break;
case Z2SE_ENV_WIND_SARUDAN:
i_volume = Z2Calc::getParamByExp(param_2, 25.0f, 127.0f, 0.4f, 0.4f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 25.0f, 127.0f, 0.4f, 0.8f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_CHANDLV9_SWING:
if (param_2 < 10) {
param_2 = 10;
}
i_volume = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_1);
i_pitch = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_1);
break;
case Z2SE_OBJ_BOMB_HOUSE_BURN:
if (param_2 > 300) {
seStartLevel(Z2SE_OBJ_BOMB_HOUSE_BURN_S, NULL, param_2, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
}
if (param_2 > 500) {
i_volume = 1.0f;
i_pitch = 1.3f;
} else {
i_volume = param_2 * 0.0006 + 0.7;
i_pitch = param_2 * 0.0006 + 1.0;
}
break;
case Z2SE_OBJ_BOMB_HOUSE_BURN_S:
if (param_2 > 500) {
i_volume = 1.0f;
i_pitch = (param_2 - 500) * 0.0015 + 1.0;
} else if (param_2 < 300) {
i_volume = 0.0f;
} else {
i_volume = (param_2 - 300) * 0.005;
}
break;
case Z2SE_OBJ_WTR_CLMN_UP:
if (param_2 <= 500) {
i_pitch = 0.8f;
} else if (param_2 > 500 && param_2 <= 1000) {
i_pitch = 1.0f;
} else if (param_2 > 1000 && param_2 <= 1500) {
i_pitch = 1.0f;
} else {
i_pitch = 1.2f;
}
modHeightAtCamera(&i_pos);
break;
case Z2SE_OBJ_WTR_CLMN_DOWN:
if (param_2 > 700) {
i_pitch = 1.0f;
} else {
i_pitch = param_2 * 0.001 + 0.3;
}
modHeightAtCamera(&i_pos);
break;
case Z2SE_OBJ_STN_SPRL_RAIL:
case Z2SE_OBJ_STN_SPRL_RAIL_DW:
modHeightAtCamera(&i_pos);
break;
case Z2SE_OBJ_SPNR_GEAR_S:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 4000.0f, 0.4f, 0.3f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 4000.0f, 0.4f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_SPNR_GEAR_L:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 3500.0f, 0.4f, 0.3f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 3500.0f, 0.4f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_TOGE_SPIN:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 26.0f, 0.4f, 0.6f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 26.0f, 0.4f, 0.8f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_STN_WL_RL:
case Z2SE_OBJ_STN_WL_RL_OP:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 64.0f, 0.4f, 0.3f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 64.0f, 0.4f, 0.6f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_SPNR_SW_RL:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 4500.0f, 0.4f, 0.6f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 4500.0f, 0.4f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_TOGE_ROLL_MV:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 40.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 40.0f, 0.4f, 0.8f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_L8_L_TORCH_SW:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 120.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 120.0f, 0.4f, 0.9f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_L8_B_FOG_STAY:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 100.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_L8_B_FALL_S:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 100.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_L8_B_FALL_L:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 100.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_L8_L_LIFT_MV:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 5.0f, 0.4f, 0.5f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 5.0f, 0.4f, 0.7f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_AMATA_CRK:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 400.0f, 0.4f, 0.5f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 400.0f, 0.4f, 0.8f, 1.1f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_HYRULE_BARRIER:
if (Z2GetSceneMgr()->getCurrentSceneNum() != 0x16) {
break;
}
// fallthrough
case Z2SE_OBJ_DARK_GATE:
if (!Z2GetSceneMgr()->isInDarkness() && i_pos != NULL
&& Z2GetLink() != NULL && Z2GetLink()->getCurrentPos() != NULL)
{
f32 dist = sqrtf(VECSquareDistance(i_pos, Z2GetLink()->getCurrentPos()));
f32 gate_volume = 1.0f;
if (dist < 2000.0f) {
gate_volume = 0.0f;
} else if (dist < 4000.0f) {
gate_volume = Z2Calc::getParamByExp(dist, 2000.0f, 5000.0f, 0.45f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
}
Z2GetSeqMgr()->setTwilightGateVol(gate_volume);
}
break;
case Z2SE_OBJ_HASU_WTR:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 50.0f, 0.4f, 0.5f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_ENV_PEOPLE_CROWD: {
f32 scale = 1.0f;
if (Z2GetSceneMgr()->getCurrentRoomNum() == 3) {
scale = Z2Calc::linearTransform(J3DUD::JMAAbs(Z2GetLink()->getCurrentPos()->x),
600.0f, 3500.0f, 1.0f, 0.1f, false);
}
switch (Z2GetStatusMgr()->getHour()) {
case 0:
case 1:
case 2:
case 3:
scale *= 0.1f;
break;
case 4:
scale *= 0.2f;
break;
case 5:
scale *= 0.3f;
break;
case 6:
scale *= 0.4f;
break;
case 7:
scale *= 0.5f;
break;
case 8:
scale *= 0.6f;
break;
case 9:
scale *= 0.7f;
break;
case 10:
scale *= 0.8f;
break;
case 11:
scale *= 0.9f;
break;
case 18:
scale *= 0.9f;
break;
case 19:
scale *= 0.8f;
break;
case 20:
scale *= 0.7f;
break;
case 21:
scale *= 0.5f;
break;
case 22:
scale *= 0.4f;
break;
case 23:
scale *= 0.2f;
break;
}
i_volume = Z2Calc::getParamByExp(mCrowdSize * scale, 5.0f, 90.0f, 0.2f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
}
case Z2SE_AL_COPYROD_WAIT:
param_2++;
break;
}
for (int i = 0; i < 24; i++) {
if (mSoundHandles[i] && mSoundHandles[i]->getID() == i_soundID
&& i_pos == (Vec*)mSoundHandles[i]->getUserData())
{
if (param_8 == 1) {
i_volume = Z2GetAudience()->calcOffMicSound(i_volume);
}
mSoundHandles[i]->updateLifeTime(1);
if (i_pos != NULL) {
mSoundHandles[i]->setPos((JGeometry::TVec3<f32>)*i_pos);
}
if (param_2 != 0) {
JAISoundHandle* handle = &mSoundHandles[i];
Z2GetSoundStarter()->setPortData(handle, 6, param_2, -1);
}
if (i_reverb != 0) {
mSoundHandles[i]->getAuxiliary().moveFxMix(i_reverb / 127.0f, 0);
}
if (i_pitch != 1.0f) {
mSoundHandles[i]->getAuxiliary().movePitch(i_pitch, 0);
}
if (i_volume != 1.0f) {
mSoundHandles[i]->getAuxiliary().moveVolume(i_volume, 0);
}
if (i_pan != -1.0f) {
mSoundHandles[i]->getAuxiliary().movePan(i_pan, 0);
}
if (i_dolby != -1.0f) {
mSoundHandles[i]->getAuxiliary().moveDolby(i_dolby, 0);
}
return true;
}
}
if (isSoundCulling(i_soundID)) {
return false;
}
JAISoundHandle* handle = mSoundHandles.getFreeHandle();
if (handle == NULL) {
return false;
}
bool ret = Z2GetSoundStarter()->startSound(i_soundID, handle, (JGeometry::TVec3<f32>*)i_pos,
param_2, i_reverb / 127.0f, i_pitch, i_volume,
i_pan, i_dolby, false);
if (handle != NULL && *handle) {
if (i_soundID == Z2SE_OBJ_BOMB_HOUSE_BURN) {
Z2GetSeqMgr()->bgmStart(Z2BGM_EVENT02, 0, 0);
}
if (param_8 == 1) {
Z2GetAudience()->calcOffMicSound(i_volume);
}
(*handle)->setUserData((u32)i_pos);
if (ret) {
(*handle)->setLifeTime(1, false);
}
}
return ret;
}
/* 802AD8B0-802AD94C 2A81F0 009C+00 1/1 0/0 4/4 .text seStop__7Z2SeMgrF10JAISoundIDUl */
+1 -1
View File
@@ -4,7 +4,7 @@
//
#include "Z2AudioLib/Z2SeqMgr.h"
#include "Z2AudioLib/Z2Creature.h"
#include "Z2AudioLib/Z2LinkMgr.h"
#include "Z2AudioLib/Z2Param.h"
#include "Z2AudioLib/Z2SceneMgr.h"
#include "Z2AudioLib/Z2SoundMgr.h"
-3
View File
@@ -19,7 +19,6 @@ void Z2SoundHandles::initHandlesPool(u8 pNumHandles) {
}
/* 802AB120-802AB200 2A5A60 00E0+00 1/1 1/1 0/0 .text deleteHandlesPool__14Z2SoundHandlesFv */
// NONMATCHING JASPoolAllocObject<_> locations
void Z2SoundHandles::deleteHandlesPool() {
JSULink<Z2SoundHandlePool>* link;
while (link = getFirst(), link != NULL) {
@@ -60,7 +59,6 @@ Z2SoundHandlePool* Z2SoundHandles::getHandleUserData(u32 pUserData) {
/* 802AB2D8-802AB3D0 2A5C18 00F8+00 0/0 3/3 0/0 .text getFreeHandle__14Z2SoundHandlesFv
*/
// NONMATCHING JASPoolAllocObject<_> locations
Z2SoundHandlePool* Z2SoundHandles::getFreeHandle() {
JSULink<Z2SoundHandlePool>* link;
for (link = getFirst(); link != NULL; link = link->getNext()) {
@@ -133,7 +131,6 @@ bool Z2SoundHandles::isActive() const {
/* 802AB538-802AB64C 2A5E78 0114+00 0/0 1/1 0/0 .text
* setPos__14Z2SoundHandlesFRCQ29JGeometry8TVec3<f> */
// NONMATCHING JASPoolAllocObject<_> locations
void Z2SoundHandles::setPos(JGeometry::TVec3<f32> const& param_0) {
JSULink<Z2SoundHandlePool>* link;
for (link = getFirst(); link != NULL; link = link->getNext()) {
+1
View File
@@ -8,6 +8,7 @@
#include "Z2AudioLib/Z2SeqMgr.h"
#include "Z2AudioLib/Z2Calc.h"
#include "Z2AudioLib/Z2SceneMgr.h"
#include "Z2AudioLib/Z2LinkMgr.h"
/* 802BF920-802BF980 2BA260 0060+00 0/0 1/1 0/0 .text __ct__13Z2SoundObjMgrFv */
Z2SoundObjMgr::Z2SoundObjMgr() : JASGlobalInstance<Z2SoundObjMgr>(this) {
File diff suppressed because it is too large Load Diff