diff options
Diffstat (limited to 'src/Z2AudioLib')
| -rw-r--r-- | src/Z2AudioLib/Z2Audience.cpp | 549 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2AudioArcLoader.cpp | 70 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2AudioMgr.cpp | 161 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2Calc.cpp | 164 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2Creature.cpp | 688 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2EnvSeMgr.cpp | 754 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2FxLineMgr.cpp | 121 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2LinkMgr.cpp | 373 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2Param.cpp | 52 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2SceneMgr.cpp | 471 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2SeMgr.cpp | 691 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2SeqMgr.cpp | 1400 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2SoundHandles.cpp | 121 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2SoundInfo.cpp | 271 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2SoundMgr.cpp | 318 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2SoundObjMgr.cpp | 260 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2SoundObject.cpp | 587 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2SoundStarter.cpp | 111 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2SpeechMgr2.cpp | 389 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2StatusMgr.cpp | 219 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2WolfHowlMgr.cpp | 553 |
21 files changed, 4503 insertions, 3820 deletions
diff --git a/src/Z2AudioLib/Z2Audience.cpp b/src/Z2AudioLib/Z2Audience.cpp index 8a200729ba..a2491c9762 100644 --- a/src/Z2AudioLib/Z2Audience.cpp +++ b/src/Z2AudioLib/Z2Audience.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2Audience -// - #include "Z2AudioLib/Z2Audience.h" #include "Z2AudioLib/Z2SoundInfo.h" #include "Z2AudioLib/Z2Calc.h" @@ -15,134 +10,146 @@ /* 802BBCDC-802BBD18 2B661C 003C+00 1/1 0/0 0/0 .text * calc__15Z2AudibleAbsPosFRCQ29JGeometry8TVec3<f> */ -void Z2AudibleAbsPos::calc(JGeometry::TVec3<f32> const& param_0) { - field_0xc.sub(param_0, field_0x0); - field_0x0.set(param_0); +void Z2AudibleAbsPos::calc(const JGeometry::TVec3<f32>& pos) { + velocity_.sub(pos, field_0x0); + field_0x0.set(pos); } /* 802BBD18-802BBD94 2B6658 007C+00 1/1 0/0 0/0 .text * init__15Z2AudibleAbsPosFPQ29JGeometry8TVec3<f>RCQ29JGeometry8TVec3<f>PCQ29JGeometry8TVec3<f> */ -void Z2AudibleAbsPos::init(JGeometry::TVec3<f32>* param_0, JGeometry::TVec3<f32> const& param_1, - JGeometry::TVec3<f32> const* param_2) { +void Z2AudibleAbsPos::init(JGeometry::TVec3<f32>* param_0, const JGeometry::TVec3<f32>& param_1, + const JGeometry::TVec3<f32>* param_2) { param_0->set(param_1); + if (param_2 != NULL) { field_0x0.set(*param_2); - field_0xc.sub(param_1, field_0x0); - return; + velocity_.sub(param_1, field_0x0); + } else { + field_0x0.set(param_1); + velocity_.zero(); } - field_0x0.set(param_1); - field_0xc.zero(); } /* 802BBD94-802BBE74 2B66D4 00E0+00 1/1 0/0 0/0 .text * __ct__9Z2AudibleFRCQ29JGeometry8TVec3<f>PCQ29JGeometry8TVec3<f>Ulb */ -Z2Audible::Z2Audible(JGeometry::TVec3<f32> const& param_0, JGeometry::TVec3<f32> const* param_1, - u32 param_2, bool param_3) { - field_0x10.field_0x0.raw = 0xffffffff; - field_0x14.init(&mPos, param_0, param_1); +Z2Audible::Z2Audible(const JGeometry::TVec3<f32>& pos, const JGeometry::TVec3<f32>* param_1, + u32 channel, bool param_3) { + mParam.field_0x0.raw = 0xFFFFFFFF; + mAbsPos.init(&mPos, pos, param_1); + for (int i = 0; i < 1; i++) { - if ((param_2 & (1 << i)) == 0) { - field_0x2c[i].init(); + if ((channel & (1 << i)) == 0) { + mChannel[i].init(); } } + for (int i = 0; i < 1; i = i + 1) { field_0x64[i] = 0.0f; } } - /* 802BBE74-802BBE98 2B67B4 0024+00 1/1 0/0 0/0 .text __ct__16Z2AudibleChannelFv */ -Z2AudibleChannel::Z2AudibleChannel() { -} - +Z2AudibleChannel::Z2AudibleChannel() {} /* 802BBE98-802BBED0 2B67D8 0038+00 1/0 0/0 0/0 .text calc__9Z2AudibleFv */ void Z2Audible::calc() { if (isDoppler()) { - field_0x14.calc(mPos); + mAbsPos.calc(mPos); } } /* 802BBED0-802BBEE4 2B6810 0014+00 1/0 0/0 0/0 .text getOuterParams__9Z2AudibleFi */ -JASSoundParams* Z2Audible::getOuterParams(int param_0) { - return &field_0x2c[param_0].field_0x0; +JASSoundParams* Z2Audible::getOuterParams(int index) { + JUT_ASSERT(80, index >= 0); + JUT_ASSERT(81, index < 1); + return &mChannel[index].mParams; } /* 802BBEE4-802BC204 2B6824 0320+00 1/1 0/0 0/0 .text * setOuterParams__9Z2AudibleFRC14JASSoundParamsRC14JASSoundParamsi */ -void Z2Audible::setOuterParams(JASSoundParams const& param_0, JASSoundParams const& param_1, - int index) { +void Z2Audible::setOuterParams(const JASSoundParams& outParams, const JASSoundParams& inParams, + int index) { JUT_ASSERT(89, index >= 0); JUT_ASSERT(90, index < 1); - Z2AudibleChannel* this_01 = &field_0x2c[index]; - u8 iStack_94 = (field_0x10.field_0x0.half.f1 & 0xf00) >> 8; + + Z2AudibleChannel* channel = &mChannel[index]; + u8 iStack_94 = (mParam.field_0x0.half.f1 & 0xf00) >> 8; if (iStack_94 == 0) { - this_01->field_0x0.combine(param_0, param_1); + channel->mParams.combine(outParams, inParams); return; } - if (this_01->field_0x28 < 0.0f) { - this_01->field_0x28 = 1.0f; - this_01->mPan = param_1.mPan; - this_01->mDolby = param_1.mDolby; - this_01->field_0x0.combine(param_0, param_1); + if (channel->field_0x28 < 0.0f) { + channel->field_0x28 = 1.0f; + channel->mPan = inParams.mPan; + channel->mDolby = inParams.mDolby; + channel->mParams.combine(outParams, inParams); return; } - JASSoundParams local_b0; - local_b0.mFxMix = param_1.mFxMix; - local_b0.mPitch = param_1.mPitch; + JASSoundParams params; + params.mFxMix = inParams.mFxMix; + params.mPitch = inParams.mPitch; JGeometry::TVec2<f32> local_b8; - local_b8.x = param_1.mPan - this_01->mPan; - local_b8.y = param_1.mDolby - this_01->mDolby; - f32 dVar9 = param_1.mVolume * local_b8.length(); + local_b8.x = inParams.mPan - channel->mPan; + local_b8.y = inParams.mDolby - channel->mDolby; + + f32 dVar9 = inParams.mVolume * local_b8.length(); f32 dVar10 = 1.0f; f32 dVar12 = Z2Calc::linearTransform(iStack_94, 0.0f, 15.0f, 1.0f, 0.3f, true); - if (param_1.mVolume > dVar12 && dVar9 > 0.001f) { + if (inParams.mVolume > dVar12 && dVar9 > 0.001f) { dVar10 = Z2Calc::getParamByExp(dVar9, 0.3f, 0.001f, 0.1f, dVar12, 1.0f, - Z2Calc::CURVE_SIGN_1); + Z2Calc::CURVE_POSITIVE); if (dVar10 < 0.0f) { dVar10 = 0.0f; } } - f32 dVar15 = dVar10 - this_01->field_0x28; + + f32 dVar15 = dVar10 - channel->field_0x28; f32 dVar11 = 1.0f; if (dVar15 > 0.0f) { - dVar11 = Z2Calc::getParamByExp(J3DUD::JMAAbs(dVar15), 1.0f, 0.0f, 0.1f, 0.1f, 0.5f, Z2Calc::CURVE_SIGN_1); + dVar11 = Z2Calc::getParamByExp(J3DUD::JMAAbs(dVar15), 1.0f, 0.0f, 0.1f, 0.1f, 0.5f, Z2Calc::CURVE_POSITIVE); } else { - dVar11 = Z2Calc::getParamByExp(J3DUD::JMAAbs(dVar15), -1.0f, 0.0f, 0.1f, 1.0f / 30.0f, 0.5f, Z2Calc::CURVE_SIGN_1); + dVar11 = Z2Calc::getParamByExp(J3DUD::JMAAbs(dVar15), -1.0f, 0.0f, 0.1f, 1.0f / 30.0f, 0.5f, Z2Calc::CURVE_POSITIVE); } - dVar10 = this_01->field_0x28 + (dVar15 * dVar11); + + dVar10 = channel->field_0x28 + (dVar15 * dVar11); if (dVar10 < 0.0f) { dVar10 = 0.0f; } else if (dVar10 > 1.0f) { dVar10 = 1.0f; } - local_b0.mVolume = param_1.mVolume * dVar10; - this_01->field_0x28 = dVar10; - f32 dVar13 = Z2Calc::getParamByExp(local_b0.mVolume * J3DUD::JMAAbs(local_b8.x), 1.0f, 0.0f, 0.1f, - 1.0f / 30.0f, 1.0 / 3.0f, Z2Calc::CURVE_SIGN_1); - f32 dVar14 = Z2Calc::getParamByExp(local_b0.mVolume * J3DUD::JMAAbs(local_b8.y), 1.0f, + + params.mVolume = inParams.mVolume * dVar10; + channel->field_0x28 = dVar10; + + f32 dVar13 = Z2Calc::getParamByExp(params.mVolume * J3DUD::JMAAbs(local_b8.x), 1.0f, 0.0f, 0.1f, + 1.0f / 30.0f, 1.0 / 3.0f, Z2Calc::CURVE_POSITIVE); + f32 dVar14 = Z2Calc::getParamByExp(params.mVolume * J3DUD::JMAAbs(local_b8.y), 1.0f, 0.0f, 0.1f, - 1.0f / 30.0f, 1.0f / 3.0f, Z2Calc::CURVE_SIGN_1); + 1.0f / 30.0f, 1.0f / 3.0f, Z2Calc::CURVE_POSITIVE); if (dVar13 > 1.0f / 3.0f) { dVar13 = 1.0f / 3.0f; } if (dVar14 > 1.0f / 3.0f) { dVar14 = 1.0f / 3.0f; } - local_b0.mPan = this_01->mPan + (local_b8.x * dVar13); - local_b0.mDolby = this_01->mDolby + (local_b8.y * dVar14); - local_b0.clamp(); - this_01->field_0x0.combine(param_0, local_b0); - this_01->mPan = local_b0.mPan; - this_01->mDolby = local_b0.mDolby; + + params.mPan = channel->mPan + (local_b8.x * dVar13); + params.mDolby = channel->mDolby + (local_b8.y * dVar14); + params.clamp(); + + channel->mParams.combine(outParams, params); + channel->mPan = params.mPan; + channel->mDolby = params.mDolby; } /* 802BC204-802BC218 2B6B44 0014+00 4/4 0/0 0/0 .text getChannel__9Z2AudibleFi */ -Z2AudibleChannel* Z2Audible::getChannel(int param_0) { - return &field_0x2c[param_0]; +Z2AudibleChannel* Z2Audible::getChannel(int index) { + JUT_ASSERT(220, index >= 0); + JUT_ASSERT(221, index < 1); + return &mChannel[index]; } /* 802BC218-802BC248 2B6B58 0030+00 3/3 0/0 0/0 .text getDistVolBit__9Z2AudibleFv */ @@ -156,6 +163,7 @@ u32 Z2Audible::getDistVolBit() { return ((int)(uVar1 & 0x70) >> 4) + 7; } } + return 0; } @@ -178,6 +186,7 @@ void Z2Audience3DSetting::init() { field_0x64 = 0xff; field_0x5c = Z2Param::SONIC_SPEED; field_0x60 = 1.5f; + initVolumeDist(); initDolbyDist(); } @@ -188,9 +197,11 @@ void Z2Audience3DSetting::initVolumeDist() { field_0x0[0] = Z2Param::DISTANCE_MAX; field_0x3c = Z2Param::MAX_VOLUME_DISTANCE; + calcVolumeFactorAll(); calcPriorityFactorAll(); calcFxMixFactorAll(); + mVolumeDistInit = true; } @@ -200,14 +211,17 @@ static f32 cNearFarRatio = Z2Param::MAX_VOLUME_DISTANCE / Z2Param::DISTANCE_MAX; /* 802BC4D0-802BC6A4 2B6E10 01D4+00 1/1 0/0 0/0 .text updateVolumeDist__19Z2Audience3DSettingFf */ void Z2Audience3DSetting::updateVolumeDist(f32 param_0) { field_0x0[0] = param_0; + if (param_0 > Z2Param::DISTANCE_MAX) { field_0x3c = cNearFarRatio * param_0; } else { field_0x3c = Z2Param::MAX_VOLUME_DISTANCE; } + calcVolumeFactorAll(); calcPriorityFactorAll(); calcFxMixFactorAll(); + mVolumeDistInit = false; } @@ -229,14 +243,17 @@ void Z2Audience3DSetting::updateDolbyDist(f32 param_0, f32 param_1) { } else { field_0x44 = Z2Param::DOLBY_FLONT_DISTANCE_MAX; } + if (param_1 < 2.0f * field_0x44) { param_1 = 2.0f * field_0x44; } + if (param_1 > Z2Param::DOLBY_BEHIND_DISTANCE_MAX) { field_0x48 = param_1; } else { field_0x48 = Z2Param::DOLBY_BEHIND_DISTANCE_MAX; } + mDolbyDistInit = false; } @@ -263,26 +280,27 @@ void Z2AudioCamera::init() { /* 802BC7DC-802BC8AC 2B711C 00D0+00 2/2 0/0 0/0 .text setCameraState__13Z2AudioCameraFPA4_CfR3Vecb */ -void Z2AudioCamera::setCameraState(f32 const (*param_0)[4], Vec& param_1, bool param_2) { +void Z2AudioCamera::setCameraState(f32 const (*param_0)[4], Vec& pos, bool param_2) { field_0x0.set(param_0); if (param_2) { - mPos.set(param_1); + mPos.set(pos); field_0x48.set(mPos); mVel.zero(); } else { field_0x48.set(mPos); - mPos.set(param_1); + mPos.set(pos); mVel.sub(mPos, field_0x48); } } /* 802BC8AC-802BCBEC 2B71EC 0340+00 1/1 0/0 0/0 .text * setCameraState__13Z2AudioCameraFPA4_fR3VecR3Vecffbb */ -void Z2AudioCamera::setCameraState(f32 (*param_0)[4], Vec& param_1, Vec& param_2, f32 param_3, - f32 param_4, bool param_5, bool param_6) { +void Z2AudioCamera::setCameraState(f32 (*param_0)[4], Vec& pos, Vec& param_2, f32 param_3, + f32 param_4, bool param_5, bool param_6) { JGeometry::TVec3<f32> aTStack_c0; - VECSubtract(¶m_2, ¶m_1, aTStack_c0); + VECSubtract(¶m_2, &pos, (Vec*)&aTStack_c0); mCamDist = aTStack_c0.length(); + f32 dVar10 = 0.5f * param_3; mFovySin = JMASinDegree(dVar10); f32 fVar8 = JMACosDegree(dVar10); @@ -302,8 +320,7 @@ void Z2AudioCamera::setCameraState(f32 (*param_0)[4], Vec& param_1, Vec& param_2 } if (mSetMainCamera && mTargetVolume > 0.0f) { - if (dVar11 > (Z2Param::DISTANCE_MAX * (1.0f - mTargetVolume))) - { + if (dVar11 > (Z2Param::DISTANCE_MAX * (1.0f - mTargetVolume))) { Z2GetAudience()->getSetting()->updateVolumeDist(dVar11 / (1.0f - mTargetVolume)); } else { Z2GetAudience()->getSetting()->initVolumeDist(); @@ -327,30 +344,36 @@ void Z2AudioCamera::setCameraState(f32 (*param_0)[4], Vec& param_1, Vec& param_2 Z2GetAudience()->getSetting()->updateDolbyDist(mCamDist - mDolbyCenterZ, mCamDist + mDolbyCenterZ); } } - setCameraState(param_0, param_1, param_6); + + setCameraState(param_0, pos, param_6); } /* 802BCBEC-802BCC7C 2B752C 0090+00 2/2 0/0 0/0 .text * convertAbsToRel__13Z2AudioCameraFP9Z2Audiblei */ -void Z2AudioCamera::convertAbsToRel(Z2Audible* param_0, int param_1) { - Z2AudibleChannel* iVar2 = param_0->getChannel(param_1); - if (iVar2 == NULL) { +void Z2AudioCamera::convertAbsToRel(Z2Audible* audible, int channelNum) { + JUT_ASSERT(508, audible); + JUT_ASSERT(509, channelNum >= 0); + JUT_ASSERT(510, channelNum < 1); + + Z2AudibleChannel* channel = audible->getChannel(channelNum); + if (channel == NULL) { return; } - Z2AudibleRelPos* relPos = &iVar2->field_0x14; - MTXMultVec(field_0x0, param_0->mPos, relPos->field_0x00); + + Z2AudibleRelPos* relPos = &channel->field_0x14; + MTXMultVec(field_0x0, (Vec*)&audible->getPos(), (Vec*)&relPos->field_0x00); relPos->field_0xC = relPos->field_0x00.length(); - JGeometry::TVec3<f32> aTStack_38; - JGeometry::setTVec3f(*(Vec*)&relPos->field_0x00, *(Vec*)&aTStack_38); + + JGeometry::TVec3<f32> aTStack_38(relPos->field_0x00); aTStack_38.z += mVolCenterZ; relPos->field_0x10 = aTStack_38.length(); } /* 802BCC7C-802BCCC0 2B75BC 0044+00 2/2 0/0 0/0 .text convertAbsToRel__13Z2AudioCameraCFR3VecP3Vec */ -bool Z2AudioCamera::convertAbsToRel(Vec& param_0, Vec* param_1) const { - MTXMultVec(field_0x0, ¶m_0, param_1); - return isInSight(*param_1); +bool Z2AudioCamera::convertAbsToRel(Vec& src, Vec* dst) const { + MTXMultVec(field_0x0, &src, dst); + return isInSight(*dst); } /* 802BCCC0-802BCD28 2B7600 0068+00 1/1 0/0 0/0 .text isInSight__13Z2AudioCameraCFR3Vec @@ -360,15 +383,11 @@ bool Z2AudioCamera::isInSight(Vec& param_0) const { return false; } - f32 zabs = J3DUD::JMAAbs(param_0.z); - f32 xabs = J3DUD::JMAAbs(param_0.x); - - if (xabs > field_0x68 * zabs) { + if (J3DUD::JMAAbs(param_0.x) > field_0x68 * J3DUD::JMAAbs(param_0.z)) { return false; } - f32 yabs = J3DUD::JMAAbs(param_0.y); - if (yabs > field_0x6c * zabs) { + if (J3DUD::JMAAbs(param_0.y) > field_0x6c * J3DUD::JMAAbs(param_0.z)) { return false; } @@ -385,67 +404,75 @@ Z2SpotMic::Z2SpotMic() { mIgnoreIfOut = true; mMicOn = true; field_0x1c = 255.0f / (field_0x4 - field_0x0); - clearMicState(0); + + for (int i = 0; i < 1; i++) { + clearMicState(i); + } } /* 802BCDA8-802BCDE8 2B76E8 0040+00 2/2 0/0 0/0 .text clearMicState__9Z2SpotMicFi */ -void Z2SpotMic::clearMicState(int param_0) { - field_0x10[param_0] = NULL; - field_0x18[param_0] = field_0xc; - field_0x26[param_0] = 0; - calcVolumeFactor(param_0); +void Z2SpotMic::clearMicState(int camID) { + field_0x10[camID] = NULL; + field_0x18[camID] = field_0xc; + field_0x26[camID] = 0; + calcVolumeFactor(camID); } /* 802BCDE8-802BCE14 2B7728 002C+00 2/2 0/0 0/0 .text calcVolumeFactor__9Z2SpotMicFi */ -void Z2SpotMic::calcVolumeFactor(int param_0) { - field_0x20[param_0] = (field_0x8 - field_0x18[param_0]) / (field_0x4 - field_0x0); +void Z2SpotMic::calcVolumeFactor(int camID) { + field_0x20[camID] = (field_0x8 - field_0x18[camID]) / (field_0x4 - field_0x0); } /* 802BCE14-802BCF5C 2B7754 0148+00 1/1 0/0 0/0 .text setMicState__9Z2SpotMicFP13Z2AudioCamerai */ -void Z2SpotMic::setMicState(Z2AudioCamera* param_0, int param_1) { - if (mMicOn && mPosPtr != 0 && param_0 != NULL) { - clearMicState(param_1); +void Z2SpotMic::setMicState(Z2AudioCamera* camera, int camID) { + JUT_ASSERT(622, camID >= 0); + JUT_ASSERT(623, camID < 1); + + if (mMicOn && mPosPtr != 0 && camera != NULL) { + clearMicState(camID); JGeometry::TVec3<f32> aVStack_58; - field_0x26[param_1] = param_0->convertAbsToRel(*mPosPtr, aVStack_58); - if (!mIgnoreIfOut || field_0x26[param_1]) { - field_0x10[param_1] = param_0; - aVStack_58.z = aVStack_58[0].z + param_0->getVolCenterZ(); + field_0x26[camID] = camera->convertAbsToRel(*mPosPtr, (Vec*)&aVStack_58); + if (!mIgnoreIfOut || field_0x26[camID]) { + field_0x10[camID] = camera; + aVStack_58.z += camera->getVolCenterZ(); + f32 dVar10 = aVStack_58.length(); f32 dVar11 = Z2GetAudience()->getSetting()->field_0x0[0]; f32 dVar12 = Z2GetAudience()->getSetting()->field_0x3c; if (dVar10 > dVar11) { - field_0x18[param_1] = field_0xc; + field_0x18[camID] = field_0xc; } else { if (dVar10 < dVar12) { - field_0x18[param_1] = 1.0f; + field_0x18[camID] = 1.0f; } else { - field_0x18[param_1] = JGeometry::TUtil<f32>::clamp( + field_0x18[camID] = JGeometry::TUtil<f32>::clamp( 1.0f + ((field_0xc - 1.0f) / (dVar11 - dVar12)) * (dVar10 - dVar12), 0.0f, 1.0f); } } - calcVolumeFactor(param_1); + + calcVolumeFactor(camID); } } } /* 802BCF5C-802BCFE4 2B789C 0088+00 2/2 0/0 0/0 .text calcMicDist__9Z2SpotMicFP9Z2Audible */ -f32 Z2SpotMic::calcMicDist(Z2Audible* param_0) { +f32 Z2SpotMic::calcMicDist(Z2Audible* audible) { if (!mMicOn) { return 0.0f; } if (mPosPtr == NULL) { return 0.0f; } - if (param_0 == NULL) { + if (audible == NULL) { return 0.0f; } JGeometry::TVec3<f32> aTStack_1c; - JGeometry::TVec3<f32> aTStack_28; - JGeometry::setTVec3f(*mPosPtr, *(Vec*)&aTStack_28); - aTStack_1c.sub(param_0->getPos(), aTStack_28); + JGeometry::TVec3<f32> aTStack_28(*mPosPtr); + + aTStack_1c.sub(audible->getPos(), aTStack_28); return aTStack_1c.length(); } @@ -463,7 +490,10 @@ u32 Z2SpotMic::calcMicPriority(f32 param_0) { } /* 802BD03C-802BD130 2B797C 00F4+00 1/1 0/0 0/0 .text calcMicVolume__9Z2SpotMicFfif */ -f32 Z2SpotMic::calcMicVolume(f32 param_0, int param_1, f32 param_2) { +f32 Z2SpotMic::calcMicVolume(f32 param_0, int camID, f32 param_2) { + JUT_ASSERT(687, camID >= 0); + JUT_ASSERT(688, camID < 1); + if (mMicOn == NULL) { return param_2; } @@ -472,11 +502,11 @@ f32 Z2SpotMic::calcMicVolume(f32 param_0, int param_1, f32 param_2) { return param_2; } - if (field_0x10[param_1] == NULL) { + if (field_0x10[camID] == NULL) { return param_2; } - if (mIgnoreIfOut && field_0x26[param_1] == 0) { + if (mIgnoreIfOut && field_0x26[camID] == 0) { return param_2; } @@ -484,17 +514,17 @@ f32 Z2SpotMic::calcMicVolume(f32 param_0, int param_1, f32 param_2) { return -1.0f; } - if (param_2 >= field_0x18[param_1]) { + if (param_2 >= field_0x18[camID]) { return param_2; } if (param_0 < field_0x0) { - return field_0x18[param_1]; + return field_0x18[camID]; } f32 dVar7 = JGeometry::TUtil<f32>::clamp( - field_0x18[param_1] + field_0x20[param_1] * (param_0 - field_0x0), - field_0x8, field_0x18[param_1]); + field_0x18[camID] + field_0x20[camID] * (param_0 - field_0x0), + field_0x8, field_0x18[camID]); if (param_2 < dVar7) { param_2 = dVar7; } @@ -503,96 +533,104 @@ f32 Z2SpotMic::calcMicVolume(f32 param_0, int param_1, f32 param_2) { /* 802BD130-802BD1FC 2B7A70 00CC+00 0/0 1/1 0/0 .text __ct__10Z2AudienceFv */ Z2Audience::Z2Audience() : JASGlobalInstance<Z2Audience>(true), field_0x4(1.0f), field_0x8(0x7f) { - mMaxChannels = 1; + mNumPlayers = 1; mUsingOffMicVol = false; mAudioCamera[0].init(); - mAudioCamera[0].setMainCamera(); + mAudioCamera[0].setMainCamera(true); mLinkMic = mSpotMic; } /* 802BD1FC-802BD288 2B7B3C 008C+00 1/0 1/1 0/0 .text __dt__10Z2AudienceFv */ Z2Audience::~Z2Audience() { - //JUT_ASSERT(751, !isActive()); + // JUT_ASSERT(751, !isActive()); // TODO: need to setup rest of JASMemPool stuff } /* 802BD2DC-802BD338 2B7C1C 005C+00 0/0 1/1 0/0 .text * setAudioCamera__10Z2AudienceFPA4_fR3VecR3Vecffbib */ -void Z2Audience::setAudioCamera(f32 (*param_0)[4], Vec& param_1, Vec& param_2, f32 param_3, - f32 param_4, bool param_5, int param_6, bool param_7) { - mAudioCamera[param_6].setCameraState(param_0, param_1, param_2, param_3, param_4, param_5, param_7); - mLinkMic->setMicState(&mAudioCamera[param_6], param_6); +void Z2Audience::setAudioCamera(f32 (*param_0)[4], Vec& pos, Vec& param_2, f32 param_3, + f32 param_4, bool param_5, int camID, bool param_7) { + JUT_ASSERT(687, camID >= 0); + JUT_ASSERT(688, camID < mNumPlayers); + mAudioCamera[camID].setCameraState(param_0, pos, param_2, param_3, param_4, param_5, param_7); + mLinkMic->setMicState(&mAudioCamera[camID], camID); } /* 802BD338-802BD4D4 2B7C78 019C+00 1/0 0/0 0/0 .text * newAudible__10Z2AudienceFRCQ29JGeometry8TVec3<f>10JAISoundIDPCQ29JGeometry8TVec3<f>Ul */ -JAIAudible* Z2Audience::newAudible(JGeometry::TVec3<f32> const& param_0, JAISoundID param_1, - JGeometry::TVec3<f32> const* param_2, u32 param_3) { - u32 uVar4 = param_3 | ~((1 << mMaxChannels) + -1); - if (uVar4 == 0xffffffff) { +JAIAudible* Z2Audience::newAudible(const JGeometry::TVec3<f32>& pos, JAISoundID soundID, + const JGeometry::TVec3<f32>* param_2, u32 param_3) { + u32 channelNum = param_3 | ~((1 << mNumPlayers) + -1); + if (channelNum == 0xFFFFFFFF) { + JUT_WARN(826, "%s", "You masked all audible channels !"); return NULL; } - JAUAudibleParam local_34 = Z2GetSoundInfo()->getAudibleSwFull(param_1); - bool x = local_34.field_0x0.bytes.b0_0 != 0; - Z2Audible* this_01 = new Z2Audible(param_0, param_2, uVar4, x); - if (this_01 == NULL) { + + JAUAudibleParam params = Z2GetSoundInfo()->getAudibleSwFull(soundID); + bool x = params.field_0x0.bytes.b0_0 != 0; + + Z2Audible* audible = new Z2Audible(pos, param_2, channelNum, x); + if (audible == NULL) { return NULL; } - this_01->setAudibleParam(local_34); - for (int iVar5 = 0; iVar5 < mMaxChannels; iVar5++) { - Z2AudibleChannel* iVar2 = this_01->getChannel(iVar5); - if (iVar2 != NULL) { - u32 local_38 = this_01->getDistVolBit(); - mAudioCamera[iVar5].convertAbsToRel(this_01, iVar5); - calcDeltaPriority_(iVar2->field_0x14.field_0x10, local_38, false); + audible->setAudibleParam(params); + + for (int i = 0; i < mNumPlayers; i++) { + Z2AudibleChannel* channel = audible->getChannel(i); + if (channel != NULL) { + u32 distVolBit = audible->getDistVolBit(); + mAudioCamera[i].convertAbsToRel(audible, i); + calcDeltaPriority_(channel->field_0x14.field_0x10, distVolBit, false); } } - for (int iVar5 = 0; iVar5 < 1; iVar5++) { - if (mSpotMic[iVar5].isOn()) { - this_01->field_0x64[iVar5] = mSpotMic[iVar5].calcMicDist(this_01); + + for (int i = 0; i < 1; i++) { + if (mSpotMic[i].isOn()) { + audible->field_0x64[i] = mSpotMic[i].calcMicDist(audible); } } - return this_01; + return audible; } /* 802BD4D4-802BD510 2B7E14 003C+00 1/0 0/0 0/0 .text deleteAudible__10Z2AudienceFP10JAIAudible */ -void Z2Audience::deleteAudible(JAIAudible* param_0) { - delete param_0; +void Z2Audience::deleteAudible(JAIAudible* audible) { + delete audible; } /* 802BD510-802BD5B8 2B7E50 00A8+00 1/0 0/0 0/0 .text __dt__9Z2AudibleFv */ -Z2Audible::~Z2Audible() { -} +Z2Audible::~Z2Audible() {} /* 802BD5B8-802BD704 2B7EF8 014C+00 1/0 0/0 0/0 .text calcPriority__10Z2AudienceFP10JAIAudible */ -u32 Z2Audience::calcPriority(JAIAudible* param_0) { - Z2Audible* z2Audible = (Z2Audible*)param_0; - if (!z2Audible->getAudibleParam()->field_0x0.bytes.b0_4) { - for (int i = 0; i < mMaxChannels; i++) { - mAudioCamera[i].convertAbsToRel(z2Audible, i); +u32 Z2Audience::calcPriority(JAIAudible* audible) { + Z2Audible* Z2audible = (Z2Audible*)audible; + + if (!Z2audible->getAudibleParam()->field_0x0.bytes.b0_4) { + for (int i = 0; i < mNumPlayers; i++) { + mAudioCamera[i].convertAbsToRel(Z2audible, i); } return 0; } u32 deltaPriority[1]; - u32 rv = 0xffffffff; - for (int i = 0; i < mMaxChannels; i++) { - Z2AudibleChannel* iVar4 = (z2Audible)->getChannel(i); - if (iVar4 != NULL) { - mAudioCamera[i].convertAbsToRel(z2Audible, i); - u32 distvolBit = z2Audible->getDistVolBit(); - const JAUAudibleParam* puVar1 = z2Audible->getAudibleParam(); - deltaPriority[i] = calcDeltaPriority_(iVar4->field_0x14.field_0x10, distvolBit, puVar1->field_0x0.bytes.b0_7); + u32 rv = 0xFFFFFFFF; + for (int i = 0; i < mNumPlayers; i++) { + Z2AudibleChannel* channel = (Z2audible)->getChannel(i); + if (channel != NULL) { + mAudioCamera[i].convertAbsToRel(Z2audible, i); + u32 distvolBit = Z2audible->getDistVolBit(); + const JAUAudibleParam* puVar1 = Z2audible->getAudibleParam(); + deltaPriority[i] = calcDeltaPriority_(channel->field_0x14.field_0x10, distvolBit, puVar1->field_0x0.bytes.b0_7); if (deltaPriority[i] < rv) { rv = deltaPriority[i]; } } } + for (int i = 0; i < 1; i++) { if (mSpotMic[i].isOn()) { - z2Audible->field_0x64[i] = mSpotMic[i].calcMicDist(z2Audible); - u32 micPriority = mSpotMic[i].calcMicPriority(z2Audible->field_0x64[i]); + Z2audible->field_0x64[i] = mSpotMic[i].calcMicDist(Z2audible); + u32 micPriority = mSpotMic[i].calcMicPriority(Z2audible->field_0x64[i]); if (micPriority < rv) { rv = micPriority; } @@ -613,63 +651,63 @@ f32 Z2Audience::calcOffMicSound(f32 param_0) { /* 802BD71C-802BD90C 2B805C 01F0+00 1/0 0/0 0/0 .text * mixChannelOut__10Z2AudienceFRC14JASSoundParamsP10JAIAudiblei */ -void Z2Audience::mixChannelOut(JASSoundParams const& param_0, JAIAudible* param_1, - int param_2) { - Z2Audible* z2Audible = (Z2Audible*)param_1; - Z2AudibleChannel* pZVar5 = z2Audible->getChannel(param_2); - if (pZVar5 == NULL) { +void Z2Audience::mixChannelOut(const JASSoundParams& outParams, JAIAudible* audible, int channelNum) { + Z2Audible* Z2audible = (Z2Audible*)audible; + Z2AudibleChannel* channel = Z2audible->getChannel(channelNum); + if (channel == NULL) { return; } JASSoundParams local_60; - u32 iVar6 = z2Audible->getDistVolBit(); - if (z2Audible->getAudibleParam()->field_0x0.bytes.b0_5) { - local_60.mVolume = calcVolume_(pZVar5->field_0x14.field_0x10, iVar6); - f32 dVar9 = mLinkMic->calcMicVolume(z2Audible->field_0x64[0], param_2, local_60.mVolume); + u32 distVolBit = Z2audible->getDistVolBit(); + if (Z2audible->getAudibleParam()->field_0x0.bytes.b0_5) { + local_60.mVolume = calcVolume_(channel->field_0x14.field_0x10, distVolBit); + f32 dVar9 = mLinkMic->calcMicVolume(Z2audible->field_0x64[0], channelNum, local_60.mVolume); if (dVar9 < 0.0f) { dVar9 = calcOffMicSound(local_60.mVolume); } local_60.mVolume = dVar9; - JAUAudibleParam* puVar7 = z2Audible->getAudibleParam(); - if ((puVar7->field_0x0.bytes.b1_2_7 & 8) && (local_60.mVolume <= 0.2f)) { + + JAUAudibleParam* params = Z2audible->getAudibleParam(); + if ((params->field_0x0.bytes.b1_2_7 & 8) && (local_60.mVolume <= 0.2f)) { local_60.mVolume = 0.2f; } } else { local_60.mVolume = 1.0f; } - if (z2Audible->getAudibleParam()->field_0x0.bytes.b1_1 && mMaxChannels == 1) { - local_60.mDolby = calcRelPosDolby(*(Vec*)&pZVar5->field_0x14.field_0x00, param_2); + if (Z2audible->getAudibleParam()->field_0x0.bytes.b1_1 && mNumPlayers == 1) { + local_60.mDolby = calcRelPosDolby(*(Vec*)&channel->field_0x14.field_0x00, channelNum); } else { local_60.mDolby = 0.5f; } - if (z2Audible->getAudibleParam()->field_0x0.bytes.b1_0) { - if (mMaxChannels > 2) { + if (Z2audible->getAudibleParam()->field_0x0.bytes.b1_0) { + if (mNumPlayers > 2) { f32 fVar1; - if (param_2 & 1) { + if (channelNum & 1) { fVar1 = 1.0f; } else { fVar1 = 0.0f; } local_60.mPan = fVar1; } else { - local_60.mPan = calcRelPosPan(*(Vec*)&pZVar5->field_0x14.field_0x00, param_2); + local_60.mPan = calcRelPosPan(*(Vec*)&channel->field_0x14.field_0x00, channelNum); } } else { local_60.mPan = 0.5f; } - local_60.mPitch = calcPitch_(pZVar5, z2Audible, &mAudioCamera[param_2]); + local_60.mPitch = calcPitch_(channel, Z2audible, &mAudioCamera[channelNum]); f32 dVar9; - if (z2Audible->getAudibleParam()->field_0x0.bytes.b0_6) { - dVar9 = calcFxMix_(pZVar5->field_0x14.field_0xC, iVar6); + if (Z2audible->getAudibleParam()->field_0x0.bytes.b0_6) { + dVar9 = calcFxMix_(channel->field_0x14.field_0xC, distVolBit); } else { dVar9 = 0.0f; } local_60.mFxMix = dVar9; local_60.clamp(); - z2Audible->setOuterParams(param_0, local_60, param_2); + Z2audible->setOuterParams(outParams, local_60, channelNum); } @@ -678,38 +716,41 @@ void Z2Audience::setTargetVolume(f32 volume, int index) { mAudioCamera[index].setTargetVolume(volume); } - /* 802BD92C-802BD95C 2B826C 0030+00 0/0 4/4 0/0 .text convertAbsToRel__10Z2AudienceFR3VecP3Veci */ -bool Z2Audience::convertAbsToRel(Vec& param_0, Vec* param_1, int param_2) { - return mAudioCamera[param_2].convertAbsToRel(param_0, param_1); +bool Z2Audience::convertAbsToRel(Vec& src, Vec* dst, int camID) { + JUT_ASSERT(1036, camID >= 0); + JUT_ASSERT(1037, camID < mNumPlayers); + return getAudioCamera(camID)->convertAbsToRel(src, dst); } /* 802BD95C-802BDA44 2B829C 00E8+00 0/0 3/3 0/0 .text calcRelPosVolume__10Z2AudienceFRC3Vecfi */ -f32 Z2Audience::calcRelPosVolume(Vec const& param_0, f32 param_1, int param_2) { - JGeometry::TVec3<f32> aTStack_3c; - JGeometry::setTVec3f(param_0, *(Vec*)&aTStack_3c); - aTStack_3c.z += mAudioCamera[param_2].getVolCenterZ(); +f32 Z2Audience::calcRelPosVolume(const Vec& param_0, f32 param_1, int camID) { + JGeometry::TVec3<f32> aTStack_3c(param_0); + aTStack_3c.z += mAudioCamera[camID].getVolCenterZ(); aTStack_3c.y *= 1.5f; - f32 this_00 = aTStack_3c.length(); - if (this_00 > mSetting.field_0x0[0] * param_1) { + + f32 len = aTStack_3c.length(); + if (len > mSetting.field_0x0[0] * param_1) { return mSetting.field_0x40; } - if (this_00 < mSetting.field_0x3c) { + if (len < mSetting.field_0x3c) { return 1.0f; } + return JGeometry::TUtil<f32>::clamp( 1.0f + ((mSetting.field_0x40 - 1.0f) / ((mSetting.field_0x0[0] * param_1) - mSetting.field_0x3c)) * - (this_00 - mSetting.field_0x3c), + (len - mSetting.field_0x3c), 0.0f, 1.0f); } /* 802BDA44-802BDB44 2B8384 0100+00 1/1 3/3 0/0 .text calcRelPosPan__10Z2AudienceFRC3Veci */ -f32 Z2Audience::calcRelPosPan(Vec const& param_0, int param_1) { +f32 Z2Audience::calcRelPosPan(const Vec& param_0, int camID) { Vec local_54 = param_0; local_54.y = 0.0f; + f32 dVar6 = VECMag(&local_54); if (dVar6 < 0.1f) { return 0.5f; @@ -717,17 +758,18 @@ f32 Z2Audience::calcRelPosPan(Vec const& param_0, int param_1) { dVar6 = (0.5f + mSetting.field_0x58 * (local_54.x / dVar6)); if (local_54.z <= 0.0f) { - f32 dVar7 = mAudioCamera[param_1].getFovySin(); + f32 fovySin = mAudioCamera[camID].getFovySin(); if (dVar6 < 0.5f) { dVar6 = Z2Calc::getParamByExp( dVar6, 0.0f, 0.5f, - dVar7, 0.0f, 0.5f, Z2Calc::CURVE_SIGN_1); + fovySin, 0.0f, 0.5f, Z2Calc::CURVE_POSITIVE); } else { dVar6 = Z2Calc::getParamByExp( dVar6, 0.5f, 1.0f, - dVar7, 0.5f, 1.0f, Z2Calc::CURVE_SIGN_0); + fovySin, 0.5f, 1.0f, Z2Calc::CURVE_NEGATIVE); } } + if (dVar6 > 1.0f) { return 1.0f; } @@ -735,33 +777,37 @@ f32 Z2Audience::calcRelPosPan(Vec const& param_0, int param_1) { if (dVar6 < 0.0f) { return 0.0f; } + return dVar6; } /* 802BDB44-802BDBDC 2B8484 0098+00 1/1 3/3 0/0 .text calcRelPosDolby__10Z2AudienceFRC3Veci */ -f32 Z2Audience::calcRelPosDolby(Vec const& param_0, int param_1) { - f32 fVar1 = param_0.z + mAudioCamera[param_1].getDolbyCenterZ(); +f32 Z2Audience::calcRelPosDolby(const Vec& param_0, int camID) { + f32 fVar1 = param_0.z + mAudioCamera[camID].getDolbyCenterZ(); if (fVar1 > mSetting.field_0x48) { return 1.0f; } + if (fVar1 < mSetting.field_0x44) { return 0.0f; } + if (fVar1 < 0.0f) { return Z2Calc::getParamByExp( fVar1, mSetting.field_0x44, 0.0f, 0.3f, 0.0f, - mSetting.field_0x4c, Z2Calc::CURVE_SIGN_1); + mSetting.field_0x4c, Z2Calc::CURVE_POSITIVE); } + return Z2Calc::getParamByExp( fVar1, 0.0f, mSetting.field_0x48, 0.3f, mSetting.field_0x4c, - 1.0f, Z2Calc::CURVE_SIGN_0); + 1.0f, Z2Calc::CURVE_NEGATIVE); } /* 802BDBDC-802BDC44 2B851C 0068+00 1/1 0/0 0/0 .text calcVolume___10Z2AudienceCFfi */ -f32 Z2Audience::calcVolume_(f32 param_0, int param_1) const { - if (param_0 > mSetting.field_0x0[param_1]) { +f32 Z2Audience::calcVolume_(f32 param_0, int distVolBit) const { + if (param_0 > mSetting.field_0x0[distVolBit]) { return mSetting.field_0x40; } @@ -769,20 +815,12 @@ f32 Z2Audience::calcVolume_(f32 param_0, int param_1) const { return 1.0f; } - f32 volume = 1.0f + mSetting.field_0x70[param_1] * (param_0 - mSetting.field_0x3c); - if (volume < 0.0f) { - return 0.0f; - } - - if (volume > 1.0f) { - return 1.0f; - } - return volume; + return JGeometry::TUtil<f32>::clamp((mSetting.field_0x70[distVolBit] * (param_0 - mSetting.field_0x3c)) + 1.0f, 0.0f, 1.0f); } /* 802BDC44-802BDCB0 2B8584 006C+00 2/2 0/0 0/0 .text calcDeltaPriority___10Z2AudienceCFfib */ -u32 Z2Audience::calcDeltaPriority_(f32 param_0, int param_1, bool param_2) const { - if (param_0 > mSetting.field_0x0[param_1]) { +u32 Z2Audience::calcDeltaPriority_(f32 param_0, int distVolBit, bool param_2) const { + if (param_0 > mSetting.field_0x0[distVolBit]) { if (param_2) { return -1; } @@ -793,83 +831,66 @@ u32 Z2Audience::calcDeltaPriority_(f32 param_0, int param_1, bool param_2) const return 0; } - return mSetting.field_0xac[param_1] * (param_0 - mSetting.field_0x3c); + return mSetting.field_0xac[distVolBit] * (param_0 - mSetting.field_0x3c); } /* 802BDCB0-802BDD00 2B85F0 0050+00 1/1 0/0 0/0 .text * calcPitchDoppler___10Z2AudienceCFRCQ29JGeometry8TVec3<f>RCQ29JGeometry8TVec3<f>RCQ29JGeometry8TVec3<f>f */ -f32 Z2Audience::calcPitchDoppler_(JGeometry::TVec3<f32> const& param_0, - JGeometry::TVec3<f32> const& param_1, - JGeometry::TVec3<f32> const& param_2, f32 param_3) const { +f32 Z2Audience::calcPitchDoppler_(const JGeometry::TVec3<f32>& param_0, + const JGeometry::TVec3<f32>& param_1, + const JGeometry::TVec3<f32>& param_2, f32 param_3) const { f32 dVar8 = param_0.dot(param_1); f32 dVar7 = param_0.dot(param_2); return (mSetting.field_0x5c + param_3 * dVar8) / (mSetting.field_0x5c + param_3 * dVar7); } /* 802BDD00-802BDD48 2B8640 0048+00 1/1 0/0 0/0 .text calcFxMix___10Z2AudienceCFfi */ -f32 Z2Audience::calcFxMix_(f32 param_0, int param_1) const { - if (param_0 > mSetting.field_0x0[param_1]) { +f32 Z2Audience::calcFxMix_(f32 param_0, int distVolBit) const { + if (param_0 > mSetting.field_0x0[distVolBit]) { return mSetting.field_0x54; } if (param_0 < mSetting.field_0x3c) { return mSetting.field_0x50; } - return mSetting.field_0x50 + mSetting.field_0xe8[param_1] * (param_0 - mSetting.field_0x3c); + return mSetting.field_0x50 + mSetting.field_0xe8[distVolBit] * (param_0 - mSetting.field_0x3c); } /* 802BDD48-802BDED4 2B8688 018C+00 1/1 0/0 0/0 .text * calcPitch___10Z2AudienceCFP16Z2AudibleChannelPC9Z2AudiblePC13Z2AudioCamera */ -f32 Z2Audience::calcPitch_(Z2AudibleChannel* param_0, Z2Audible const* param_1, - Z2AudioCamera const* param_2) const { - JAUAudibleParam audParam = *param_1->getAudibleParam(); +f32 Z2Audience::calcPitch_(Z2AudibleChannel* channel, const Z2Audible* audible, const Z2AudioCamera* camera) const { + JAUAudibleParam audParam = *audible->getAudibleParam(); if ((*(u8*)&audParam.field_0x0.raw >> 4) & 0xf) { JGeometry::TVec3<f32> aTStack_4c; - aTStack_4c.normalize(param_0->field_0x14.field_0x00); - JAUAudibleParam audParam = *param_1->getAudibleParam(); - f32 dVar7 = audParam.getDopplerPower(); - dVar7 = calcPitchDoppler_(aTStack_4c, *param_2->getVel(), *param_1->getVel(), dVar7); - if (param_0->field_0x34 > 0.0f) { - if (param_0->field_0x34 > (dVar7 * mSetting.field_0x60)) { - return param_0->field_0x34; + aTStack_4c.normalize(channel->field_0x14.field_0x00); + JAUAudibleParam audParam = *audible->getAudibleParam(); + + f32 doppler = audParam.getDopplerPower(); + doppler = calcPitchDoppler_(aTStack_4c, *camera->getVel(), *audible->getVel(), doppler); + + if (channel->field_0x34 > 0.0f) { + if (channel->field_0x34 > (doppler * mSetting.field_0x60)) { + return channel->field_0x34; } - if (dVar7 > (param_0->field_0x34 * mSetting.field_0x60)) { - return param_0->field_0x34; + if (doppler > (channel->field_0x34 * mSetting.field_0x60)) { + return channel->field_0x34; } - param_0->field_0x34 = dVar7; - return dVar7; - } - if (dVar7 > 0.0f) { - param_0->field_0x34 = dVar7; - return dVar7; + channel->field_0x34 = doppler; + return doppler; + } + + if (doppler > 0.0f) { + channel->field_0x34 = doppler; + return doppler; } + return 1.0f; } + return 1.0f; } - /* 802BDED4-802BDEDC 2B8814 0008+00 1/0 0/0 0/0 .text getMaxChannels__10Z2AudienceFv */ int Z2Audience::getMaxChannels() { - return mMaxChannels; -} - -static void dummyMempool() { - + return mNumPlayers; } - - - -// padding (???) -s8 data_80451355; -s8 data_80451356; -s8 data_80451357; - -/* ############################################################################################## */ -/* 80451358-80451360 -00001 0008+00 0/0 1/1 0/0 .sbss None */ -/* 80451358 0001+00 data_80451358 None */ -/* 80451359 0007+00 data_80451359 None */ -// extern u8 struct_80451358[8]; -// u8 struct_80451358[8]; -s8 data_80451358; -s8 data_80451359; diff --git a/src/Z2AudioLib/Z2AudioArcLoader.cpp b/src/Z2AudioLib/Z2AudioArcLoader.cpp index 6e1a38d8b9..6281f1d197 100644 --- a/src/Z2AudioLib/Z2AudioArcLoader.cpp +++ b/src/Z2AudioLib/Z2AudioArcLoader.cpp @@ -1,41 +1,81 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2AudioArcLoader -// - #include "Z2AudioLib/Z2AudioArcLoader.h" #include "JSystem/JAudio2/JAUSectionHeap.h" +#include "JSystem/JAudio2/JAUSoundTable.h" #include "JSystem/JKernel/JKRArchive.h" #include "JSystem/JKernel/JKRHeap.h" #include "Z2AudioLib/Z2FxLineMgr.h" +#include "m_Do/m_Do_ext.h" /* 802A9A34-802A9A70 2A4374 003C+00 0/0 1/1 0/0 .text __ct__16Z2AudioArcLoaderFP10JAUSection */ -Z2AudioArcLoader::Z2AudioArcLoader(JAUSection* param_0) : JAUAudioArcLoader(param_0) { - /* empty function */ -} +Z2AudioArcLoader::Z2AudioArcLoader(JAUSection* section) : JAUAudioArcLoader(section) {} /* 802A9A70-802A9AC8 2A43B0 0058+00 1/0 0/0 0/0 .text readCommandMore__16Z2AudioArcLoaderFUl */ -bool Z2AudioArcLoader::readCommandMore(u32 param_0) { +bool Z2AudioArcLoader::readCommandMore(u32 command) { bool rv = false; - switch (param_0) { + u32 read = 0; + + switch (command) { case 'bfca': - readBFCA(getContent_(readU32_())); + read = readU32_(); + readBFCA(getContent_(read)); rv = true; break; } + return rv; } /* 802A9AC8-802A9B54 2A4408 008C+00 1/1 0/0 0/0 .text readBFCA__16Z2AudioArcLoaderFPCv */ -void Z2AudioArcLoader::readBFCA(void const* param_0) { +void Z2AudioArcLoader::readBFCA(const void* addr) { + JUT_ASSERT(76, addr); + JKRHeap* heap = JAUSectionHeap::getInstance()->getHeap(); - JKRArchive* archive = JKRMountArchive((void*)param_0, JKRGetCurrentHeap(), JKRArchive::MOUNT_DIRECTION_TAIL); + JUT_ASSERT(78, heap); + JUT_ASSERT(79, Z2GetFxLineMgr()); + + JKRArchive* archive = JKRMountArchive((void*)addr, JKRGetCurrentHeap(), JKRArchive::MOUNT_DIRECTION_TAIL); Z2GetFxLineMgr()->initDataArc(archive, heap); JKRUnmountArchive(archive); } /* 802A9B54-802A9B58 2A4494 0004+00 1/0 0/0 0/0 .text readBSTN__16Z2AudioArcLoaderFPCvUl */ -void Z2AudioArcLoader::readBSTN(void const* param_0, u32 param_1) { - /* empty function */ +void Z2AudioArcLoader::readBSTN(const void* addr, u32 param_1) { +#if VERSION == VERSION_SHIELD_DEBUG + JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance(); + JUT_ASSERT(97, sectionHeap); + + JUT_ASSERT(99, sectionHeap->isOpen()); + JUT_ASSERT(100, sectionHeap->isBuilding()); + JUT_ASSERT(101, addr); + + JUT_ASSERT(103, sectionHeap->getSectionHeapData().soundNameTable == 0); + + JKRHeap* heap = JKRHeap::getCurrentHeap(); + JKRHeap* gameHeap = (JKRHeap*)mDoExt_getGameHeap(); + JKRSetCurrentHeap(gameHeap); + + u8* bstnDst = (u8*)addr; + if (param_1 != 0) { + bstnDst = new (gameHeap, 4) u8[param_1]; + if (bstnDst != NULL) { + memcpy(bstnDst, addr, param_1); + } + + JUT_ASSERT(122, bstnDst); + } + + JAUSoundNameTable* soundNameTable = new (gameHeap, 0) JAUSoundNameTable(true); + JUT_ASSERT(125, soundNameTable); + + soundNameTable->init(bstnDst); + + JAUSectionHeap::TSectionHeapData& sectionHeapData = (JAUSectionHeap::TSectionHeapData&)sectionHeap->getSectionHeapData(); + sectionHeapData.soundNameTable = soundNameTable; + + JAUSection::TSectionData& sectionData = (JAUSection::TSectionData&)sectionHeap->getSectionData(); + sectionData.mBstnDst = bstnDst; + + JKRSetCurrentHeap(heap); +#endif } diff --git a/src/Z2AudioLib/Z2AudioMgr.cpp b/src/Z2AudioLib/Z2AudioMgr.cpp index 7366ea5094..15039ca082 100644 --- a/src/Z2AudioLib/Z2AudioMgr.cpp +++ b/src/Z2AudioLib/Z2AudioMgr.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2AudioMgr -// - #include "Z2AudioLib/Z2AudioMgr.h" #include "JSystem/JAudio2/JASAiCtrl.h" #include "JSystem/JAudio2/JASDriverIF.h" @@ -11,13 +6,15 @@ #include "JSystem/JAudio2/JAUInitializer.h" #include "JSystem/JAudio2/JAUSectionHeap.h" #include "JSystem/JAudio2/JAUStreamAramMgr.h" +#include "JSystem/JAudio2/JAUSeqCollection.h" #include "JSystem/JKernel/JKRSolidHeap.h" #include "Z2AudioLib/Z2AudioArcLoader.h" #include "Z2AudioLib/Z2Param.h" #include "Z2AudioLib/Z2SoundHandles.h" -#include "stdio.h" -#include "stdlib.h" -#include "dolphin/os.h" + +#if PLATFORM_WII || PLATFORM_SHIELD +#include "Z2AudioLib/Z2AudioCS.h" +#endif /* 80451368-80451370 000868 0004+04 1/1 251/251 900/900 .sbss mAudioMgrPtr__10Z2AudioMgr */ @@ -32,45 +29,46 @@ Z2AudioMgr::Z2AudioMgr() : mSoundStarter(true) { /* 802CD34C-802CD7F8 2C7C8C 04AC+00 0/0 1/1 0/0 .text * init__10Z2AudioMgrFP12JKRSolidHeapUlPvP10JKRArchive */ -void Z2AudioMgr::init(JKRSolidHeap* param_0, u32 param_1, void* param_2, JKRArchive* param_3) { - JAU_JASInitializer stack_60; - stack_60.field_0x04 = param_1; - stack_60.field_0x1c = 0x8c; - stack_60.field_0x2c = 1.3f; - stack_60.field_0x30 = "Audiores/Waves/"; - stack_60.initJASystem(param_0); - - JAU_JAIInitializer stack_90; - stack_90.field_0x0 = 0x4e; - stack_90.field_0x4 = 4; - stack_90.field_0xc = 0x30; - stack_90.initJAInterface(); +// NONMATCHING JASPoolAllocObject<_> locations +void Z2AudioMgr::init(JKRSolidHeap* heap, u32 memSize, void* baaData, JKRArchive* seqArc) { + JAU_JASInitializer JASInitializer; + JASInitializer.audioMemSize_ = memSize; + JASInitializer.field_0x1c = 140; + JASInitializer.dspLevel_ = 1.3f; + JASInitializer.waveArcDir_ = "Audiores/Waves/"; + JASInitializer.initJASystem(heap); + + JAU_JAIInitializer JAIInitializer; + JAIInitializer.field_0x0 = 78; + JAIInitializer.field_0x4 = 4; + JAIInitializer.field_0xc = 48; + JAIInitializer.initJAInterface(); - JAISeMgr *seMgr = mSoundMgr.getSeMgr(); - - JAISeCategoryArrangement stack_80; - stack_80.mItems[0].mMaxActiveSe = 4; - stack_80.mItems[0].mMaxInactiveSe = 2; - stack_80.mItems[1].mMaxActiveSe = 2; - stack_80.mItems[1].mMaxInactiveSe = 1; - stack_80.mItems[2].mMaxActiveSe = 6; - stack_80.mItems[2].mMaxInactiveSe = 3; - stack_80.mItems[3].mMaxActiveSe = 16; - stack_80.mItems[3].mMaxInactiveSe = 8; - stack_80.mItems[4].mMaxActiveSe = 8; - stack_80.mItems[4].mMaxInactiveSe = 4; - stack_80.mItems[5].mMaxActiveSe = 6; - stack_80.mItems[5].mMaxInactiveSe = 3; - stack_80.mItems[6].mMaxActiveSe = 6; - stack_80.mItems[6].mMaxInactiveSe = 3; - stack_80.mItems[7].mMaxActiveSe = 12; - stack_80.mItems[7].mMaxInactiveSe = 8; - stack_80.mItems[8].mMaxActiveSe = 10; - stack_80.mItems[8].mMaxInactiveSe = 5; - stack_80.mItems[9].mMaxActiveSe = 8; - stack_80.mItems[9].mMaxInactiveSe = 4; - - seMgr->setCategoryArrangement(stack_80); + JAISeMgr* seMgr = mSoundMgr.getSeMgr(); + + JAISeCategoryArrangement categoryArrangement; + categoryArrangement.mItems[0].mMaxActiveSe = 4; + categoryArrangement.mItems[0].mMaxInactiveSe = 2; + categoryArrangement.mItems[1].mMaxActiveSe = 2; + categoryArrangement.mItems[1].mMaxInactiveSe = 1; + categoryArrangement.mItems[2].mMaxActiveSe = 6; + categoryArrangement.mItems[2].mMaxInactiveSe = 3; + categoryArrangement.mItems[3].mMaxActiveSe = 16; + categoryArrangement.mItems[3].mMaxInactiveSe = 8; + categoryArrangement.mItems[4].mMaxActiveSe = 8; + categoryArrangement.mItems[4].mMaxInactiveSe = 4; + categoryArrangement.mItems[5].mMaxActiveSe = 6; + categoryArrangement.mItems[5].mMaxInactiveSe = 3; + categoryArrangement.mItems[6].mMaxActiveSe = 6; + categoryArrangement.mItems[6].mMaxInactiveSe = 3; + categoryArrangement.mItems[7].mMaxActiveSe = 12; + categoryArrangement.mItems[7].mMaxInactiveSe = 8; + categoryArrangement.mItems[8].mMaxActiveSe = 10; + categoryArrangement.mItems[8].mMaxInactiveSe = 5; + categoryArrangement.mItems[9].mMaxActiveSe = 8; + categoryArrangement.mItems[9].mMaxInactiveSe = 4; + seMgr->setCategoryArrangement(categoryArrangement); + seMgr->getCategory(0)->getParams()->moveVolume(Z2Param::VOL_SE_SYSTEM_DEFAULT, 0); seMgr->getCategory(1)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_VOICE_DEFAULT, 0); seMgr->getCategory(2)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_MOTION_DEFAULT, 0); @@ -81,33 +79,48 @@ void Z2AudioMgr::init(JKRSolidHeap* param_0, u32 param_1, void* param_2, JKRArch seMgr->getCategory(7)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT, 0); seMgr->getCategory(8)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT, 0); seMgr->getCategory(9)->getParams()->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_DEFAULT, 0); + seMgr->getParams()->moveVolume(1.0f, 0); JAISeqMgr* seqMgr = mSoundMgr.getSeqMgr(); seqMgr->getParams()->moveVolume(Z2Param::VOL_BGM_DEFAULT, 0); + JAIStreamMgr* streamMgr = mSoundMgr.getStreamMgr(); - JAUStreamStaticAramMgr_<1>* streamStaticAramMgr = new(param_0, 0) JAUStreamStaticAramMgr_<1>(); + JAUStreamStaticAramMgr_<1>* streamStaticAramMgr = new(heap, 0) JAUStreamStaticAramMgr_<1>(); streamStaticAramMgr->reserveAram(NULL, 0, 0x14); streamMgr->setStreamAramMgr(streamStaticAramMgr); streamMgr->getParams()->moveVolume(Z2Param::VOL_BGM_DEFAULT, 0); + JASPoolAllocObject<Z2Audible>::newMemPool(0x4e); mSoundMgr.getSeMgr()->setAudience(&mAudience); mSoundMgr.getSeqMgr()->setAudience(&mAudience); + + #if PLATFORM_WII || PLATFORM_SHIELD + Z2AudioCS::newSpkSoundMemPool(); + #endif + JASPoolAllocObject<Z2SoundHandlePool>::newMemPool(0x4e); - // OSReport("[Z2AudioMgr::init]before Create Section: %d\n", param_0->getFreeSize()); + OS_REPORT("[Z2AudioMgr::init]before Create Section: %d\n", heap->getFreeSize()); JAUSectionHeap* sectionHeap = JAUNewSectionHeap(true); - sectionHeap->setSeqDataArchive(param_3); - size_t resMaxSize = JASResArcLoader::getResMaxSize(param_3); - sectionHeap->newDynamicSeqBlock(0xe00); - sectionHeap->newDynamicSeqBlock(0x17e0); + sectionHeap->setSeqDataArchive(seqArc); + size_t resMaxSize = JASResArcLoader::getResMaxSize(seqArc); + sectionHeap->newDynamicSeqBlock(0xE00); + sectionHeap->newDynamicSeqBlock(0x17E0); sectionHeap->newDynamicSeqBlock(0x5380); sectionHeap->newDynamicSeqBlock(resMaxSize); - Z2AudioArcLoader stack_a0(sectionHeap); - bool baaLoadResult = stack_a0.load(param_2); + + Z2AudioArcLoader audioArcLoader(sectionHeap); + bool baaLoadResult = audioArcLoader.load(baaData); JUT_ASSERT(252, baaLoadResult); + + #if DEBUG + seMgr->setSeqDataMgr(mDebugSys.initSeSeqDataMgr(((JAUSeqDataMgr_SeqCollection*)sectionHeap->getSeSeqDataMgr())->getResource())); + #else seMgr->setSeqDataMgr(sectionHeap->getSeSeqDataMgr()); + #endif seqMgr->setSeqDataMgr(sectionHeap->getSeqSeqDataMgr()); + if (sectionHeap->getStreamDataMgr()) { // The following is to force stack reg to be r31 in dbg: int unused; @@ -115,15 +128,21 @@ void Z2AudioMgr::init(JKRSolidHeap* param_0, u32 param_1, void* param_2, JKRArch } else { streamMgr->setStreamDataMgr(&mSoundInfo); } + sectionHeap->finishBuild(); initSe(); JASSeqParser::registerSeqCallback(seqCallback); + + #if DEBUG + mDebugSys.initSoundHioNode(); + mDebugSys.initJAW(); + #endif } /* 802CD888-802CD8B4 2C81C8 002C+00 0/0 5/5 0/0 .text setOutputMode__10Z2AudioMgrFUl */ void Z2AudioMgr::setOutputMode(u32 mode) { if (mode <= 2) { - JASDriver::setOutputMode(mode); + JAISetOutputMode(mode); } } @@ -134,11 +153,16 @@ void Z2AudioMgr::zeldaGFrameWork() { processSeFramework(); processBgmFramework(); processHeartGaugeSound(); + + #if DEBUG + mDebugSys.debugframework(); + #endif } /* 802CD904-802CD974 2C8244 0070+00 0/0 1/1 0/0 .text gframeProcess__10Z2AudioMgrFv */ void Z2AudioMgr::gframeProcess() { zeldaGFrameWork(); + if (mResettingFlag && mAudioReseter.checkDone()) { if (!field_0x519) { mSoundMgr.stopSync(); @@ -151,6 +175,8 @@ void Z2AudioMgr::gframeProcess() { /* 802CD974-802CD9CC 2C82B4 0058+00 0/0 3/3 0/0 .text resetProcess__10Z2AudioMgrFUlb */ void Z2AudioMgr::resetProcess(u32 param_0, bool param_1) { + JUT_ASSERT(413, !mResettingFlag); + mAudioReseter.start(param_0 * JASDriver::getSubFrames(), param_1); field_0x519 = param_1; mResettingFlag = true; @@ -158,6 +184,9 @@ void Z2AudioMgr::resetProcess(u32 param_0, bool param_1) { /* 802CD9CC-802CDA6C 2C830C 00A0+00 0/0 1/1 0/0 .text resetRecover__10Z2AudioMgrFv */ void Z2AudioMgr::resetRecover() { + JUT_ASSERT(427, mResettingFlag); + JUT_ASSERT(428, mAudioReseter.checkDone()); + mAudioReseter.resume(); mSoundMgr.initParams(); mResettingFlag = false; @@ -172,18 +201,26 @@ void Z2AudioMgr::resetRecover() { /* 802CDA6C-802CDB1C 2C83AC 00B0+00 0/0 2/2 0/0 .text hasReset__10Z2AudioMgrCFv */ bool Z2AudioMgr::hasReset() const { - return mResettingFlag && mAudioReseter.checkDone() - && (field_0x519 - || (mSoundMgr.getSeMgr()->getNumActiveSe() == 0 - && mSoundMgr.getSeqMgr()->getNumActiveSeqs() == 0)); + return mResettingFlag && mAudioReseter.checkDone() && + (field_0x519 || (mSoundMgr.getSeMgr()->getNumActiveSe() == 0 && mSoundMgr.getSeqMgr()->getNumActiveSeqs() == 0)); } /* 802CDB1C-802CDB68 2C845C 004C+00 1/0 1/0 0/0 .text * startSound__10Z2AudioMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */ -bool Z2AudioMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1, - JGeometry::TVec3<f32> const* param_2) { +bool Z2AudioMgr::startSound(JAISoundID soundID, JAISoundHandle* handle, + const JGeometry::TVec3<f32>* posPtr) { + if (mResettingFlag) { + return 0; + } + + return mSoundMgr.startSound(soundID, handle, posPtr); +} + +bool Z2AudioMgr::startLevelSound(JAISoundID soundID, JAISoundHandle* handle, + const JGeometry::TVec3<f32>* posPtr) { if (mResettingFlag) { return 0; } - return mSoundMgr.startSound(param_0, param_1, param_2); + + return mSoundMgr.startSound(soundID, handle, posPtr); } diff --git a/src/Z2AudioLib/Z2Calc.cpp b/src/Z2AudioLib/Z2Calc.cpp index eb12401057..9ba1fb58ec 100644 --- a/src/Z2AudioLib/Z2Calc.cpp +++ b/src/Z2AudioLib/Z2Calc.cpp @@ -1,138 +1,112 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2Calc -// - #include "Z2AudioLib/Z2Calc.h" #include "JSystem/JMath/random.h" -#include "math.h" -#include "dol2asm.h" +#include <math.h> /* 802A968C-802A96F4 2A3FCC 0068+00 1/1 16/16 0/0 .text linearTransform__6Z2CalcFfffffb */ -f32 Z2Calc::linearTransform(f32 param1, f32 param2, f32 param3, f32 param4, f32 param5, - bool param6) { - f32 temp; - - temp = param4 + (param1 - param2) * ((param5 - param4) / (param3 - param2)); - - if (param6) { - return temp; - } else if (param4 < param5) { - if (temp > param5) { - return param5; - } else if (temp < param4) { - return param4; - } else { - return temp; - } - } else if (temp > param4) { - return param4; - } else if (temp < param5) { - return param5; +f32 Z2Calc::linearTransform(f32 inValue, f32 inMin, f32 inMax, f32 outMin, f32 outMax, bool noClamp) { + f32 transformed = outMin + ((inValue - inMin) * ((outMax - outMin) / (inMax - inMin))); + if (noClamp) { + return transformed; + } + + if (outMin < outMax) { + return transformed > outMax ? outMax : + transformed < outMin ? outMin : + transformed; } else { - return temp; + return transformed > outMin ? outMin : + transformed < outMax ? outMax : + transformed; } } -/* ############################################################################################## */ /* 80455820-80455824 003E20 0004+00 0/0 1/1 0/0 .sdata2 cEqualCSlope__6Z2Calc */ -SECTION_SDATA2 f32 Z2Calc::cEqualCSlope = 1.0f; +const f32 Z2Calc::cEqualCSlope = 1.0f; /* 80455824-80455828 003E24 0004+00 0/0 1/1 0/0 .sdata2 cEqualPSlope__6Z2Calc */ -SECTION_SDATA2 f32 Z2Calc::cEqualPSlope = 0.5f; +const f32 Z2Calc::cEqualPSlope = 0.5f; /* 802A96F4-802A9814 2A4034 0120+00 0/0 29/29 0/0 .text * getParamByExp__6Z2CalcFffffffQ26Z2Calc9CurveSign */ -f32 Z2Calc::getParamByExp(f32 f1, f32 f2, f32 f3, f32 f4, f32 f5, f32 f6, Z2Calc::CurveSign sign) { - f32 out; - if (sign == Z2Calc::CURVE_SIGN_1) { - f32 tmp = exp(Z2Calc::linearTransform(f1, f2, f3, 0.0f, f4, true)); - out = Z2Calc::linearTransform(tmp, 1.0f, exp(f4), f5, f6, true); - } else if (sign == Z2Calc::CURVE_SIGN_0) { - f32 tmp = exp(Z2Calc::linearTransform(f1, f2, f3, f4, 0.0f, true)); - out = Z2Calc::linearTransform(tmp, exp(f4), 1.0f, f5, f6, true); +f32 Z2Calc::getParamByExp(f32 value, f32 inMin, f32 inMax, f32 exponent, f32 outMin, f32 outMax, Z2Calc::CurveSign curveSign) { + if (curveSign == Z2Calc::CURVE_POSITIVE) { + value = linearTransform(value, inMin, inMax, 0.0f, exponent, true); + value = expf(value); + value = linearTransform(value, 1.0f, expf(exponent), outMin, outMax, true); + } else if (curveSign == Z2Calc::CURVE_NEGATIVE) { + value = linearTransform(value, inMin, inMax, exponent, 0.0f, true); + value = expf(value); + value = linearTransform(value, expf(exponent), 1.0f, outMin, outMax, true); } else { - out = Z2Calc::linearTransform(f1, f2, f3, f5, f6, false); - } - if (out > f6) { - return f6; + value = linearTransform(value, inMin, inMax, outMin, outMax, false); } - if (out < f5) { - return f5; - } - return out; + + return value > outMax ? outMax : + value < outMin ? outMin : + value; } /* 802A9814-802A98D4 2A4154 00C0+00 0/0 2/2 0/0 .text getRandom__6Z2CalcFfff */ -f32 Z2Calc::getRandom(f32 f1, f32 f2, f32 f3) { - f32 tmp = 2.0f * f3; - f32 tmp2 = (1.0f - f3) * -2.0f; - f1 *= Z2Calc::getRandom_0_1() < f3 ? tmp : tmp2; - f32 tmp3 = pow(Z2Calc::getRandom_0_1(), f2); - return tmp3 * f1; +f32 Z2Calc::getRandom(f32 magnitude, f32 exponent, f32 bias) { + f32 posBias = 2.0f * bias; + f32 negBias = (1.0f - bias) * -2.0f; + magnitude *= Z2Calc::getRandom_0_1() < bias ? posBias : negBias; + + f32 exprnd = pow(Z2Calc::getRandom_0_1(), exponent); + return exprnd * magnitude; } /* 802A98D4-802A9944 2A4214 0070+00 1/1 1/1 0/0 .text getRandom_0_1__6Z2CalcFv */ -f32 Z2Calc::getRandom_0_1(void) { - static JMath::TRandom_fast_ oRandom(0); +f32 Z2Calc::getRandom_0_1() { + static JMath::TRandom_<JMath::TRandom_fast_> oRandom(0); return oRandom.get_ufloat_1(); } /* 802A9944-802A9958 2A4284 0014+00 0/0 1/1 0/0 .text setParam__Q26Z2Calc8FNoise1fFfff */ -void Z2Calc::FNoise1f::setParam(f32 param1, f32 param2, f32 param3) { - this->unk0 = param1; - this->unk4 = param1; - this->unk12 = param2; - this->unk8 = param3; +void Z2Calc::FNoise1f::setParam(f32 value, f32 threshold, f32 step) { + value_ = value; + targetValue_ = value; + threshold_ = threshold; + step_ = step; } /* 802A9958-802A99A0 2A4298 0048+00 1/1 0/0 0/0 .text tau__Q26Z2Calc8FNoise1fFf */ -f32 Z2Calc::FNoise1f::tau(f32 param1) { - f32 temp1; - f32 temp2; - - temp1 = param1; - temp2 = temp1 + (temp1 * temp1); - - if (temp2 > 1.0f) { - temp2 = temp2 - 1.0f; - - if (temp1 < this->unk12) { - temp2 = temp2 + this->unk12; +f32 Z2Calc::FNoise1f::tau(f32 input) { + f32 var_f30 = 1.0f; + + f32 result = input + (input * input); + if (result > var_f30) { + result = result - var_f30; + if (input < threshold_) { + result += threshold_; } + return result; + } - return temp2; - } else if (temp1 < this->unk12) { - temp2 = temp2 + this->unk12; + if (input < threshold_) { + result += threshold_; } - return temp2; + + return result; } /* 802A99A0-802A9A34 2A42E0 0094+00 0/0 5/5 0/0 .text calcNoise1f__Q26Z2Calc8FNoise1fFv */ -f32 Z2Calc::FNoise1f::calcNoise1f(void) { - f32 temp1; - f32 temp2; - - temp1 = this->unk0; - - if (this->unk0 < this->unk4) { - this->unk0 = temp1 + this->unk8; - - if (this->unk0 < this->unk4) { - return this->unk0; +f32 Z2Calc::FNoise1f::calcNoise1f() { + if (value_ < targetValue_) { + value_ += step_; + if (value_ < targetValue_) { + return value_; } } else { - this->unk0 = temp1 - this->unk8; - - if (this->unk0 > this->unk4) { - return this->unk0; + value_ -= step_; + if (value_ > targetValue_) { + return value_; } } - this->unk0 = this->unk4; - temp2 = tau(this->unk0); - this->unk4 = temp2; - return this->unk0; + value_ = targetValue_; + targetValue_ = tau(value_); + return value_; } diff --git a/src/Z2AudioLib/Z2Creature.cpp b/src/Z2AudioLib/Z2Creature.cpp index d5f057b102..fb7023503f 100644 --- a/src/Z2AudioLib/Z2Creature.cpp +++ b/src/Z2AudioLib/Z2Creature.cpp @@ -1,10 +1,4 @@ -/** - * Z2Creature.cpp - * Z2AudioLib - Creatures - */ - #include "Z2AudioLib/Z2Creature.h" -#include "SSystem/SComponent/c_xyz.h" #include "Z2AudioLib/Z2Param.h" #include "Z2AudioLib/Z2Calc.h" #include "Z2AudioLib/Z2AudioMgr.h" @@ -117,50 +111,52 @@ Z2Creature::~Z2Creature() { /* 802C04E8-802C0530 2BAE28 0048+00 4/2 2/2 0/0 .text deleteObject__10Z2CreatureFv */ void Z2Creature::deleteObject() { - mSoundObjAnime.mpAnimation = NULL; + mSoundObjAnime.stopAnime(); mSoundObjAnime.deleteObject(); mSoundObjSimple1.deleteObject(); mSoundObjSimple2.deleteObject(); } /* 802C0530-802C05B0 2BAE70 0080+00 5/5 1/1 125/125 .text init__10Z2CreatureFP3VecP3VecUcUc */ -void Z2Creature::init(Vec* param_0, Vec* param_1, u8 param_2, u8 param_3) { - if (param_0) { - mSoundObjAnime.init(param_0, param_2); - mpPos = param_0; +void Z2Creature::init(Vec* animePosPtr, Vec* simplePosPtr, u8 animeHandleNum, u8 simpleHandleNum) { + if (animePosPtr) { + mSoundObjAnime.init(animePosPtr, animeHandleNum); + mpPos = animePosPtr; } - if (param_1) { - mSoundObjSimple1.init(param_1, param_3); + + if (simplePosPtr) { + mSoundObjSimple1.init(simplePosPtr, simpleHandleNum); } } /* 802C05B0-802C0618 2BAEF0 0068+00 2/2 1/1 0/0 .text init__10Z2CreatureFP3VecP3VecP3VecUcUcUc */ -void Z2Creature::init(Vec* param_0, Vec* param_1, Vec* param_2, u8 param_3, u8 param_4, - u8 param_5) { - init(param_0, param_1, param_3, param_4); - if (param_2) { - mSoundObjSimple2.init(param_2, param_5); +void Z2Creature::init(Vec* animePosPtr, Vec* simplePosPtr, Vec* simple2PosPtr, u8 animeHandleNum, u8 simpleHandleNum, + u8 simple2HandleNum) { + init(animePosPtr, simplePosPtr, animeHandleNum, simpleHandleNum); + + if (simple2PosPtr) { + mSoundObjSimple2.init(simple2PosPtr, simple2HandleNum); } } /* 802C0618-802C0628 2BAF58 0010+00 7/0 2/0 0/0 .text * setSoundStarter__10Z2CreatureFP14Z2SoundStarter */ -void Z2Creature::setSoundStarter(Z2SoundStarter* i_starter) { - mSoundObjAnime.setSoundStarter(i_starter); - mSoundObjSimple1.setSoundStarter(i_starter); - mSoundObjSimple2.setSoundStarter(i_starter); +void Z2Creature::setSoundStarter(Z2SoundStarter* soundStarter) { + mSoundObjAnime.setSoundStarter(soundStarter); + mSoundObjSimple1.setSoundStarter(soundStarter); + mSoundObjSimple2.setSoundStarter(soundStarter); } /* 802C0628-802C064C 2BAF68 0024+00 0/0 4/4 2/2 .text initAnime__10Z2CreatureFPvbff */ -void Z2Creature::initAnime(void* param_0, bool param_1, f32 param_2, f32 param_3) { - mSoundObjAnime.initAnime(param_0, param_1, param_2, param_3); +void Z2Creature::initAnime(void* animation, bool param_1, f32 startFrame, f32 param_3) { + mSoundObjAnime.initAnime(animation, param_1, startFrame, param_3); } /* 802C064C-802C06D0 2BAF8C 0084+00 7/3 2/1 0/0 .text framework__10Z2CreatureFUlSc */ -void Z2Creature::framework(u32 param_0, s8 param_1) { - mSoundObjAnime.framework(param_0, param_1); - mSoundObjSimple1.framework(param_0, param_1); - mSoundObjSimple2.framework(param_0, param_1); +void Z2Creature::framework(u32 mapinfo, s8 reverb) { + mSoundObjAnime.framework(mapinfo, reverb); + mSoundObjSimple1.framework(mapinfo, reverb); + mSoundObjSimple2.framework(mapinfo, reverb); } /* 802C06D0-802C06F4 2BB010 0024+00 0/0 3/3 2/2 .text updateAnime__10Z2CreatureFff */ @@ -175,115 +171,118 @@ void Z2Creature::stopAnime() { /* 802C0720-802C087C 2BB060 015C+00 4/0 2/0 0/0 .text * startCreatureSound__10Z2CreatureF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2Creature::startCreatureSound(JAISoundID i_soundID, u32 param_1, s8 param_2) { - switch (i_soundID) { - case Z2SE_KOSARU_V_KAGO_WAIT: - return mSoundObjSimple1.startSound(i_soundID, param_1, 0); - default: - Z2SoundHandlePool* handle = mSoundObjAnime.startSound(i_soundID, param_1, param_2); - 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, - 0.8f, 1.2f, Z2Calc::CURVE_SIGN_0); - f32 volume = Z2Calc::getParamByExp((f32)param_1, 30.0f, 100.0f, 0.3f, - 0.5f, 1.0f, Z2Calc::CURVE_SIGN_0); - (*handle)->getAuxiliary().moveVolume(volume, 0); - (*handle)->getAuxiliary().movePitch(pitch, 0); - } +Z2SoundHandlePool* Z2Creature::startCreatureSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + switch (soundID) { + case Z2SE_KOSARU_V_KAGO_WAIT: + return mSoundObjSimple1.startSound(soundID, mapinfo, 0); + default: + Z2SoundHandlePool* handle = mSoundObjAnime.startSound(soundID, mapinfo, reverb); + if (handle != NULL && *handle) { + switch (soundID) { + case Z2SE_FAIRY_S_FLY: + f32 pitch = Z2Calc::getParamByExp((f32)mapinfo, 30.0f, 100.0f, 0.3f, + 0.8f, 1.2f, Z2Calc::CURVE_NEGATIVE); + f32 volume = Z2Calc::getParamByExp((f32)mapinfo, 30.0f, 100.0f, 0.3f, + 0.5f, 1.0f, Z2Calc::CURVE_NEGATIVE); + (*handle)->getAuxiliary().moveVolume(volume, 0); + (*handle)->getAuxiliary().movePitch(pitch, 0); } - return handle; + } + return handle; } } /* 802C087C-802C0A4C 2BB1BC 01D0+00 4/0 2/0 0/0 .text * startCreatureSoundLevel__10Z2CreatureF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2Creature::startCreatureSoundLevel(JAISoundID i_soundID, u32 param_1, s8 param_2) { - switch (i_soundID) { - 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) { - if (i_soundID == Z2SE_YM_SNOBO_RIDE || i_soundID == Z2SE_YW_SNOBO_RIDE) { - f32 volume = 0.0f; - if (param_1 != 0) { - volume = Z2Calc::getParamByExp((f32)param_1, 0.0f, 92.0f, 0.25f, - 0.4f, 1.0f, Z2Calc::CURVE_SIGN_0); - } - f32 pitch = Z2Calc::getParamByExp((f32)param_1, 0.0f, 92.0f, 0.3f, - 0.5f, 1.2f, Z2Calc::CURVE_SIGN_0); - - (*handle)->getAuxiliary().moveVolume(volume, 0); - (*handle)->getAuxiliary().movePitch(pitch, 0); - } else if (i_soundID == Z2SE_ZRZ_MV) { - (*handle)->getAuxiliary().moveVolume((f32)param_1 / 100.0f, 0); +Z2SoundHandlePool* Z2Creature::startCreatureSoundLevel(JAISoundID soundID, u32 mapinfo, s8 reverb) { + switch (soundID) { + case Z2SE_FAIRY_S_LV: + Z2GetAudioMgr()->seStartLevel(soundID, mpPos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + return NULL; + default: + Z2SoundHandlePool* handle = mSoundObjAnime.startLevelSound(soundID, mapinfo, reverb); + if (handle != NULL && *handle) { + if (soundID == Z2SE_YM_SNOBO_RIDE || soundID == Z2SE_YW_SNOBO_RIDE) { + f32 volume = 0.0f; + if (mapinfo != 0) { + volume = Z2Calc::getParamByExp((f32)mapinfo, 0.0f, 92.0f, 0.25f, + 0.4f, 1.0f, Z2Calc::CURVE_NEGATIVE); } + f32 pitch = Z2Calc::getParamByExp((f32)mapinfo, 0.0f, 92.0f, 0.3f, + 0.5f, 1.2f, Z2Calc::CURVE_NEGATIVE); + + (*handle)->getAuxiliary().moveVolume(volume, 0); + (*handle)->getAuxiliary().movePitch(pitch, 0); + } else if (soundID == Z2SE_ZRZ_MV) { + f32 volume = (f32)mapinfo / 100.0f; + (*handle)->getAuxiliary().moveVolume(volume, 0); } - return handle; + } + return handle; } } /* 802C0A4C-802C0AF8 2BB38C 00AC+00 4/1 2/0 0/0 .text * startCreatureVoice__10Z2CreatureF10JAISoundIDSc */ -Z2SoundHandlePool* Z2Creature::startCreatureVoice(JAISoundID i_soundID, s8 param_1) { - switch (i_soundID) { - case Z2SE_MDN_V_FLY_OUT: - case Z2SE_MDN_V_MGN_TAME: - case Z2SE_MDN_V_CLINGST: - case Z2SE_MDN_V_LV_PANIC: - case Z2SE_MDN_V_HIT: - case Z2SE_MDN_V_LOOKABOUT_1: - case Z2SE_MDN_V_WLSWIMDIE: - case Z2SE_MDN_V_WAITD: - case Z2SE_MDN_V_SWAITA: - case Z2SE_MDN_V_SWAITB_1: - case Z2SE_MDN_V_SWAITB_3: - case Z2SE_MDN_V_SWAITC: - case Z2SE_MDN_V_SWAITD: - case Z2SE_MDN_V_LEADSWAIT: - case Z2SE_MDN_V_HIP: - case Z2SE_MDN_V_WLDIEA: - case Z2SE_MDN_V_ENTRANCE: - case Z2SE_MDN_V_DOOROP: - case Z2SE_MDN_V_ROPEWAIT_1: - case Z2SE_MDN_V_ROPEWAIT_2: - case Z2SE_MDN_V_ROPEFALTER: - case Z2SE_MDN_V_WAITTP: - if (Z2GetSpeechMgr2()->isMidnaSpeak()) { - return NULL; - } +Z2SoundHandlePool* Z2Creature::startCreatureVoice(JAISoundID soundID, s8 reverb) { + switch (soundID) { + case Z2SE_MDN_V_FLY_OUT: + case Z2SE_MDN_V_MGN_TAME: + case Z2SE_MDN_V_CLINGST: + case Z2SE_MDN_V_LV_PANIC: + case Z2SE_MDN_V_HIT: + case Z2SE_MDN_V_LOOKABOUT_1: + case Z2SE_MDN_V_WLSWIMDIE: + case Z2SE_MDN_V_WAITD: + case Z2SE_MDN_V_SWAITA: + case Z2SE_MDN_V_SWAITB_1: + case Z2SE_MDN_V_SWAITB_3: + case Z2SE_MDN_V_SWAITC: + case Z2SE_MDN_V_SWAITD: + case Z2SE_MDN_V_LEADSWAIT: + case Z2SE_MDN_V_HIP: + case Z2SE_MDN_V_WLDIEA: + case Z2SE_MDN_V_ENTRANCE: + case Z2SE_MDN_V_DOOROP: + case Z2SE_MDN_V_ROPEWAIT_1: + case Z2SE_MDN_V_ROPEWAIT_2: + case Z2SE_MDN_V_ROPEFALTER: + case Z2SE_MDN_V_WAITTP: + if (Z2GetSpeechMgr2()->isMidnaSpeak()) { + return NULL; + } } - return mSoundObjSimple1.startSound(i_soundID, 0, param_1); + + return mSoundObjSimple1.startSound(soundID, 0, reverb); } /* 802C0AF8-802C0B70 2BB438 0078+00 3/0 2/0 0/0 .text * startCreatureVoiceLevel__10Z2CreatureF10JAISoundIDSc */ -Z2SoundHandlePool* Z2Creature::startCreatureVoiceLevel(JAISoundID i_soundID, s8 param_1) { - if (i_soundID == Z2SE_MDN_V_WAITD) { +Z2SoundHandlePool* Z2Creature::startCreatureVoiceLevel(JAISoundID soundID, s8 reverb) { + if (soundID == Z2SE_MDN_V_WAITD) { if (Z2GetStatusMgr()->getDemoStatus() == 2 || !Z2GetSceneMgr()->isInGame()) { return NULL; } } - return mSoundObjSimple1.startLevelSound((u32)i_soundID, 0, param_1); + + return mSoundObjSimple1.startLevelSound((u32)soundID, 0, reverb); } /* 802C0B70-802C0BAC 2BB4B0 003C+00 4/0 2/0 0/0 .text * startCreatureExtraSound__10Z2CreatureF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2Creature::startCreatureExtraSound(JAISoundID param_0, u32 param_1, s8 param_2) { - return mSoundObjSimple2.startSound(param_0, param_1, param_2); +Z2SoundHandlePool* Z2Creature::startCreatureExtraSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + return mSoundObjSimple2.startSound(soundID, mapinfo, reverb); } /* 802C0BAC-802C0BE8 2BB4EC 003C+00 4/0 2/0 0/0 .text * startCreatureExtraSoundLevel__10Z2CreatureF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2Creature::startCreatureExtraSoundLevel(JAISoundID param_0, u32 param_1, s8 param_2) { - return mSoundObjSimple2.startLevelSound(param_0, param_1, param_2); +Z2SoundHandlePool* Z2Creature::startCreatureExtraSoundLevel(JAISoundID soundID, u32 mapinfo, s8 reverb) { + return mSoundObjSimple2.startLevelSound(soundID, mapinfo, reverb); } /* 802C0BE8-802C0C10 2BB528 0028+00 4/0 2/0 0/0 .text startCollisionSE__10Z2CreatureFUlUl */ -Z2SoundHandlePool* Z2Creature::startCollisionSE(u32 param_0, u32 param_1) { - return mSoundObjAnime.startCollisionSE(param_0, param_1, NULL); +Z2SoundHandlePool* Z2Creature::startCollisionSE(u32 hitID, u32 mapinfo) { + return mSoundObjAnime.startCollisionSE(hitID, mapinfo, NULL); } /* 802C0C10-802C0C6C 2BB550 005C+00 0/0 0/0 12/12 .text __ct__17Z2CreatureCitizenFv */ @@ -292,18 +291,14 @@ Z2CreatureCitizen::Z2CreatureCitizen() : mCitizenID(-1), field_0xa1(-1), mLinkSearch(false) -{ - /* empty function */ -} +{} /* 802C0C6C-802C0CE4 2BB5AC 0078+00 0/0 0/0 12/12 .text __dt__17Z2CreatureCitizenFv */ -Z2CreatureCitizen::~Z2CreatureCitizen() { - /* empty function */ -} +Z2CreatureCitizen::~Z2CreatureCitizen() {} /* 802C0CE4-802C0D04 2BB624 0020+00 0/0 2/2 7/7 .text init__17Z2CreatureCitizenFP3VecP3VecUcUc */ -void Z2CreatureCitizen::init(Vec* param_0, Vec* param_1, u8 param_2, u8 param_3) { - Z2Creature::init(param_0, param_1, param_2, param_3); +void Z2CreatureCitizen::init(Vec* animePosPtr, Vec* simplePosPtr, u8 animeHandleNum, u8 simpleHandleNum) { + Z2Creature::init(animePosPtr, simplePosPtr, animeHandleNum, simpleHandleNum); } /* 802C0D04-802C0D48 2BB644 0044+00 1/0 0/0 0/0 .text deleteObject__17Z2CreatureCitizenFv */ @@ -311,6 +306,7 @@ void Z2CreatureCitizen::deleteObject() { if (mLinkSearch == false) { Z2GetSeMgr()->decrCrowdSize(); } + Z2Creature::deleteObject(); } @@ -320,24 +316,24 @@ void Z2CreatureCitizen::setMdlType(s8 param_0, bool param_1, bool param_2) { s8 b = param_1 ? 0x40 : 0; s8 c = param_2 ? 0x80 : 0; mCitizenID = a + c + b; + if (!param_2) { Z2GetSeMgr()->incrCrowdSize(); } + if (param_0 == 0) { field_0xa1 = data_80451358; - data_80451358 = !data_80451358; - } - else if (param_0 == 1) { + data_80451358 = !data_80451358 ? 1 : 0; + } else if (param_0 == 1) { field_0xa1 = data_80451359; - data_80451359 = !data_80451359; + data_80451359 = !data_80451359 ? 1 : 0; } } /* 802C0E18-802C0ED8 2BB758 00C0+00 0/0 0/0 21/21 .text playVoice__17Z2CreatureCitizenFi */ void Z2CreatureCitizen::playVoice(int i_sound) { - u32 tmp = mCitizenID; - u32 sound_id = Z2SE_MAN_A1_V_AWAY + 6 * tmp + i_sound; + u32 sound_id = Z2SE_MAN_A1_V_AWAY + 6 * (s8)mCitizenID + i_sound; switch (mCitizenID) { case 0: case 1: @@ -346,6 +342,7 @@ void Z2CreatureCitizen::playVoice(int i_sound) { } break; } + mSoundObjSimple1.startSound(sound_id, 0, -1); if ((i_sound == 0 || i_sound == 2) && !mLinkSearch) { Z2GetSeMgr()->decrCrowdSize(); @@ -355,8 +352,8 @@ void Z2CreatureCitizen::playVoice(int i_sound) { /* 802C0ED8-802C0F64 2BB818 008C+00 1/0 0/0 0/0 .text * startCreatureVoice__17Z2CreatureCitizenF10JAISoundIDSc */ -Z2SoundHandlePool* Z2CreatureCitizen::startCreatureVoice(JAISoundID i_soundID, s8 param_1) { - switch (i_soundID) { +Z2SoundHandlePool* Z2CreatureCitizen::startCreatureVoice(JAISoundID soundID, s8 reverb) { + switch (soundID) { case Z2SE_KIU_V_FEAR: case Z2SE_HANA_V_FEAR: case Z2SE_MICH_V_FEAR: @@ -366,7 +363,8 @@ Z2SoundHandlePool* Z2CreatureCitizen::startCreatureVoice(JAISoundID i_soundID, s } break; } - return Z2Creature::startCreatureVoice(i_soundID, -1); + + return Z2Creature::startCreatureVoice(soundID, -1); } /* 802C0F64-802C0FC4 2BB8A4 0060+00 2/2 0/0 100/100 .text __ct__15Z2CreatureEnemyFv */ @@ -376,19 +374,19 @@ Z2CreatureEnemy::Z2CreatureEnemy() : field_0xa1(1), mLinkSearch(false), field_0xa3(0) -{ - /* empty function */ -} +{} /* 802C0FC4-802C1094 2BB904 00D0+00 3/2 0/0 0/0 .text deleteObject__15Z2CreatureEnemyFv */ void Z2CreatureEnemy::deleteObject() { - if (mEnemyID == 0x2c) { - Z2GetSeqMgr()->unMuteSceneBgm(0x21); + if (mEnemyID == Z2_ENEMY_GB) { + Z2GetSeqMgr()->unMuteSceneBgm(33); } + if (getSupervisor() != NULL) { Z2GetSoundObjMgr()->removeEnemy(this); } + mSoundObjAnime.stopAnime(); mSoundObjAnime.deleteObject(); mSoundObjSimple1.deleteObject(); @@ -396,71 +394,79 @@ void Z2CreatureEnemy::deleteObject() { } /* 802C1094-802C10B4 2BB9D4 0020+00 0/0 0/0 98/98 .text init__15Z2CreatureEnemyFP3VecP3VecUcUc */ -void Z2CreatureEnemy::init(Vec* param_0, Vec* param_1, u8 param_2, u8 param_3) { - Z2Creature::init(param_0, param_1, param_2, param_3); +void Z2CreatureEnemy::init(Vec* animePosPtr, Vec* simplePosPtr, u8 animeHandleNum, u8 simpleHandleNum) { + Z2Creature::init(animePosPtr, simplePosPtr, animeHandleNum, simpleHandleNum); } /* 802C10B4-802C10D4 2BB9F4 0020+00 0/0 0/0 3/3 .text init__15Z2CreatureEnemyFP3VecP3VecP3VecUcUcUc */ -void Z2CreatureEnemy::init(Vec* param_0, Vec* param_1, Vec* param_2, u8 param_3, u8 param_4, - u8 param_5) { - Z2Creature::init(param_0, param_1, param_2, param_3, param_4, param_5); +void Z2CreatureEnemy::init(Vec* animePosPtr, Vec* simplePosPtr, Vec* simple2PosPtr, u8 animeHandleNum, u8 simpleHandleNum, + u8 simple2HandleNum) { + Z2Creature::init(animePosPtr, simplePosPtr, simple2PosPtr, animeHandleNum, simpleHandleNum, simple2HandleNum); } /* 802C10D4-802C110C 2BBA14 0038+00 1/0 0/0 0/0 .text framework__15Z2CreatureEnemyFUlSc */ -void Z2CreatureEnemy::framework(u32 param_0, s8 param_1) { +void Z2CreatureEnemy::framework(u32 mapinfo, s8 reverb) { if (field_0xa1 < 1) { - field_0xa1 += 1; + field_0xa1++; } - Z2Creature::framework(param_0, param_1); + + Z2Creature::framework(mapinfo, reverb); } /* 802C110C-802C136C 2BBA4C 0260+00 4/0 0/0 0/0 .text * startCreatureSound__15Z2CreatureEnemyF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2CreatureEnemy::startCreatureSound(JAISoundID i_soundID, u32 param_1, s8 param_2) { - Z2SoundHandlePool* handle = mSoundObjAnime.startSound(i_soundID, param_1, param_2); +Z2SoundHandlePool* Z2CreatureEnemy::startCreatureSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + Z2SoundHandlePool* handle = mSoundObjAnime.startSound(soundID, mapinfo, reverb); switch (mEnemyID) { case Z2_ENEMY_SF: - if (i_soundID == Z2SE_EN_SF_BREAK_DOWN) { + if (soundID == Z2SE_EN_SF_BREAK_DOWN) { field_0xa3 = 1; Z2GetSoundObjMgr()->getEnemyList()->remove(this); - } else if (field_0xa3 != 0 && i_soundID == Z2SE_EN_SF_BUILD_UP) { + } else if (field_0xa3 != 0 && soundID == Z2SE_EN_SF_BUILD_UP) { field_0xa3 = 0; Z2GetSoundObjMgr()->getEnemyList()->append(this); } break; case Z2_ENEMY_FZ: - if (handle != NULL && handle->isSoundAttached() && i_soundID == Z2SE_EN_FZ_BOUND) { - f32 volume = Z2Calc::linearTransform(param_1, 10.0f, 50.0f, 0.1f, 1.0f, false); - f32 pitch = Z2Calc::linearTransform(param_1, 10.0f, 50.0f, 0.8f, 1.2f, false); + if (handle != NULL && *handle && soundID == Z2SE_EN_FZ_BOUND) { + f32 volume = Z2Calc::linearTransform(mapinfo, 10.0f, 50.0f, 0.1f, 1.0f, false); + f32 pitch = Z2Calc::linearTransform(mapinfo, 10.0f, 50.0f, 0.8f, 1.2f, false); (*handle)->getAuxiliary().moveVolume(volume, 0); (*handle)->getAuxiliary().movePitch(pitch, 0); } break; - case Z2_ENEMY_MS: - Z2_E_ms_modVol(handle, mSoundObjAnime.field_0x1c); + case Z2_ENEMY_MS: { + u32 var_r24 = mSoundObjAnime.field_0x1c; + Z2_E_ms_modVol(handle, var_r24); break; + } case Z2_ENEMY_SW: - Z2_E_sw_modPitch(handle, param_1); + Z2_E_sw_modPitch(handle, mapinfo); break; - case Z2_ENEMY_MM: - Z2_E_mm_modPitch(handle, mSoundObjAnime.field_0x1c); + case Z2_ENEMY_MM: { + u32 var_r23 = mSoundObjAnime.field_0x1c; + Z2_E_mm_modPitch(handle, var_r23); break; + } case Z2_ENEMY_SM2: - if (i_soundID == Z2SE_EN_SM_HIT) { + if (soundID == Z2SE_EN_SM_HIT) { field_0xa3 = 1; - Z2GetSeqMgr()->setBattleLastHit(struct_80450869); + Z2GetSeqMgr()->setBattleLastHit(Z2Param::ENDING_BLOW_VOL_LOWER_TIME); } break; } - switch (i_soundID) { - case Z2SE_EN_ZAN_YO_LAND: - Z2_B_zan_modPitch(handle, mSoundObjAnime.field_0x1c); + switch (soundID) { + case Z2SE_EN_ZAN_YO_LAND: { + u32 var_r22 = mSoundObjAnime.field_0x1c; + Z2_B_zan_modPitch(handle, var_r22); break; + } case Z2SE_EN_ZAN_YO_FLOAT_WAIT: - if (mSoundObjAnime.field_0x1c > 100) { + u32 var_r21 = mSoundObjAnime.field_0x1c; + if (var_r21 > 100) { return NULL; } break; @@ -471,9 +477,9 @@ Z2SoundHandlePool* Z2CreatureEnemy::startCreatureSound(JAISoundID i_soundID, u32 /* 802C136C-802C168C 2BBCAC 0320+00 2/0 0/0 0/0 .text * startCreatureSoundLevel__15Z2CreatureEnemyF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2CreatureEnemy::startCreatureSoundLevel(JAISoundID i_soundID, u32 param_1, s8 param_2) { - if (i_soundID == 0x7FFFF) { - cXyz pos; +Z2SoundHandlePool* Z2CreatureEnemy::startCreatureSoundLevel(JAISoundID soundID, u32 mapinfo, s8 reverb) { + if (soundID == 0x7FFFF) { + Vec pos; Z2GetAudience()->convertAbsToRel(*mpPos, &pos, 0); f32 volume = Z2GetAudience()->calcRelPosVolume(pos, 2.0f, 0); f32 pan = Z2GetAudience()->calcRelPosPan(pos, 0); @@ -483,36 +489,36 @@ Z2SoundHandlePool* Z2CreatureEnemy::startCreatureSoundLevel(JAISoundID i_soundID return NULL; } - Z2SoundHandlePool* handle = mSoundObjAnime.startLevelSound(i_soundID, param_1, param_2); + Z2SoundHandlePool* handle = mSoundObjAnime.startLevelSound(soundID, mapinfo, reverb); switch (mEnemyID) { case Z2_ENEMY_FZ: - 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); + if (handle != NULL && *handle && soundID == Z2SE_EN_FZ_MOVE) { + f32 volume = Z2Calc::getParamByExp(mapinfo, 1.0f, 50.0f, 0.4f, 0.1f, 1.1f, + Z2Calc::CURVE_POSITIVE); (*handle)->getAuxiliary().moveVolume(volume, 0); } break; case Z2_ENEMY_SW: - Z2_E_sw_modPitch(handle, param_1); + Z2_E_sw_modPitch(handle, mapinfo); break; case Z2_ENEMY_RB: - 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, - Z2Calc::CURVE_SIGN_1); + if (handle != NULL && *handle && soundID == Z2SE_EN_RB_MOVE) { + f32 volume = Z2Calc::getParamByExp(mapinfo, 4.0f, 35.0f, 0.6f, 0.7f, 1.0f, + Z2Calc::CURVE_POSITIVE); + f32 pitch = Z2Calc::getParamByExp(mapinfo, 4.0f, 35.0f, 0.4f, 0.8f, 1.0f, + Z2Calc::CURVE_POSITIVE); (*handle)->getAuxiliary().moveVolume(volume, 0); (*handle)->getAuxiliary().movePitch(pitch, 0); break; } - // no break + // fallthrough default: - 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, - Z2Calc::CURVE_SIGN_1); + if (handle != NULL && *handle && soundID == Z2SE_EN_PH_PROPELLER) { + f32 volume = Z2Calc::getParamByExp(mapinfo, 0.0f, 30.0f, 0.4f, 0.0f, 1.0f, + Z2Calc::CURVE_POSITIVE); + f32 pitch = Z2Calc::getParamByExp(mapinfo, 4000.0f, 13000.0f, 0.4f, 0.8f, 1.2f, + Z2Calc::CURVE_POSITIVE); (*handle)->getAuxiliary().moveVolume(volume, 0); (*handle)->getAuxiliary().movePitch(pitch, 0); } @@ -524,7 +530,7 @@ Z2SoundHandlePool* Z2CreatureEnemy::startCreatureSoundLevel(JAISoundID i_soundID /* 802C168C-802C1948 2BBFCC 02BC+00 4/0 0/0 0/0 .text * startCreatureVoice__15Z2CreatureEnemyF10JAISoundIDSc */ -Z2SoundHandlePool* Z2CreatureEnemy::startCreatureVoice(JAISoundID i_soundID, s8 param_1) { +Z2SoundHandlePool* Z2CreatureEnemy::startCreatureVoice(JAISoundID soundID, s8 reverb) { if (Z2GetSeqMgr()->getMainBgmID() == Z2BGM_BOSS_ZANT) { switch (Z2GetSeqMgr()->mBgmStatus) { case 0: @@ -532,88 +538,95 @@ Z2SoundHandlePool* Z2CreatureEnemy::startCreatureVoice(JAISoundID i_soundID, s8 break; case 2: case 3: - switch (i_soundID) { + switch (soundID) { case Z2SE_EN_ZAN_V_ATK_BALL: - i_soundID = Z2SE_EN_ZAN_V_ATK_BALL_MG; + soundID = Z2SE_EN_ZAN_V_ATK_BALL_MG; break; case Z2SE_EN_ZAN_V_DMG: - i_soundID = Z2SE_EN_ZAN_V_DMG_MG; + soundID = Z2SE_EN_ZAN_V_DMG_MG; break; } break; case 4: case 5: - switch (i_soundID) { + switch (soundID) { case Z2SE_EN_ZAN_V_ATK_BALL: - i_soundID = Z2SE_EN_ZAN_V_ATK_BALL_OI; + soundID = Z2SE_EN_ZAN_V_ATK_BALL_OI; break; case Z2SE_EN_ZAN_V_DMG: - i_soundID = Z2SE_EN_ZAN_V_DMG_OI; + soundID = Z2SE_EN_ZAN_V_DMG_OI; break; } break; case 6: case 7: - switch (i_soundID) { + switch (soundID) { case Z2SE_EN_ZAN_V_ATK_BALL: - i_soundID = Z2SE_EN_ZAN_V_ATK_BALL_MK; + soundID = Z2SE_EN_ZAN_V_ATK_BALL_MK; break; case Z2SE_EN_ZAN_V_DMG: - i_soundID = Z2SE_EN_ZAN_V_DMG_MK; + soundID = Z2SE_EN_ZAN_V_DMG_MK; break; } break; case 8: case 9: - switch (i_soundID) { + switch (soundID) { case Z2SE_EN_ZAN_V_DMG: - i_soundID = Z2SE_EN_ZAN_V_DMG_YO; + soundID = Z2SE_EN_ZAN_V_DMG_YO; break; } break; case 10: case 11: - switch (i_soundID) { + switch (soundID) { case Z2SE_EN_ZAN_V_DMG: - i_soundID = Z2SE_EN_ZAN_V_DMG_CTL; + soundID = Z2SE_EN_ZAN_V_DMG_CTL; break; } break; } } - u32 var1 = 0; - if (mEnemyID == 7) { - var1 = 1; + u32 mapinfo = 0; + if (mEnemyID == Z2_ENEMY_RDY) { + mapinfo = 1; } - Z2SoundHandlePool* handle = mSoundObjSimple1.startSound(i_soundID, var1, param_1); + + Z2SoundHandlePool* handle = mSoundObjSimple1.startSound(soundID, mapinfo, reverb); switch (mEnemyID) { case Z2_ENEMY_SH: - if (i_soundID == Z2SE_EN_SH_V_DEAD) { + if (soundID == Z2SE_EN_SH_V_DEAD) { field_0xa3 = 1; - Z2GetSeqMgr()->setBattleLastHit(struct_80450869); + Z2GetSeqMgr()->setBattleLastHit(Z2Param::ENDING_BLOW_VOL_LOWER_TIME); } break; case Z2_ENEMY_BS: - if (i_soundID == Z2SE_EN_BS_V_DEAD) { + if (soundID == Z2SE_EN_BS_V_DEAD) { field_0xa3 = 1; - Z2GetSeqMgr()->setBattleLastHit(struct_80450869); + Z2GetSeqMgr()->setBattleLastHit(Z2Param::ENDING_BLOW_VOL_LOWER_TIME); } break; - case Z2_ENEMY_MS: - Z2_E_ms_modVol(handle, mSoundObjSimple1.field_0x1c); - break; - case Z2_ENEMY_SW: - Z2_E_sw_modPitch(handle, mSoundObjSimple1.field_0x1c); + case Z2_ENEMY_MS: { + u32 var_r26 = mSoundObjSimple1.field_0x1c; + Z2_E_ms_modVol(handle, var_r26); break; - case Z2_ENEMY_MM: - Z2_E_mm_modPitch(handle, mSoundObjSimple1.field_0x1c); + } + case Z2_ENEMY_SW: { + u32 var_r25 = mSoundObjSimple1.field_0x1c; + Z2_E_sw_modPitch(handle, var_r25); break; } + case Z2_ENEMY_MM: { + u32 var_r24 = mSoundObjSimple1.field_0x1c; + Z2_E_mm_modPitch(handle, var_r24); + } + } - if (i_soundID == Z2SE_EN_ZAN_YO_V_KENKEN) { - Z2_B_zan_modPitch(handle, mSoundObjSimple1.field_0x1c); + if (soundID == Z2SE_EN_ZAN_YO_V_KENKEN) { + u32 var_r23 = mSoundObjSimple1.field_0x1c; + Z2_B_zan_modPitch(handle, var_r23); } return handle; @@ -621,43 +634,41 @@ Z2SoundHandlePool* Z2CreatureEnemy::startCreatureVoice(JAISoundID i_soundID, s8 /* 802C1948-802C199C 2BC288 0054+00 3/0 0/0 0/0 .text * startCreatureVoiceLevel__15Z2CreatureEnemyF10JAISoundIDSc */ -Z2SoundHandlePool* Z2CreatureEnemy::startCreatureVoiceLevel(JAISoundID i_soundID, s8 param_1) { - u32 var1 = 0; +Z2SoundHandlePool* Z2CreatureEnemy::startCreatureVoiceLevel(JAISoundID soundID, s8 reverb) { + u32 mapinfo = 0; if (mEnemyID == Z2_ENEMY_RDY) { - var1 = 1; + mapinfo = 1; } - return mSoundObjSimple1.startLevelSound(i_soundID, var1, param_1); + return mSoundObjSimple1.startLevelSound(soundID, mapinfo, reverb); } /* 802C199C-802C19D8 2BC2DC 003C+00 3/0 0/0 0/0 .text * startCreatureExtraSound__15Z2CreatureEnemyF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2CreatureEnemy::startCreatureExtraSound(JAISoundID i_soundID, u32 param_1, - s8 param_2) { - return mSoundObjSimple2.startSound(i_soundID, param_1, param_2); +Z2SoundHandlePool* Z2CreatureEnemy::startCreatureExtraSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + return mSoundObjSimple2.startSound(soundID, mapinfo, reverb); } /* 802C19D8-802C1A14 2BC318 003C+00 3/0 0/0 0/0 .text * startCreatureExtraSoundLevel__15Z2CreatureEnemyF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2CreatureEnemy::startCreatureExtraSoundLevel(JAISoundID i_soundID, u32 param_1, - s8 param_2) { - return mSoundObjSimple2.startLevelSound(i_soundID, param_1, param_2); +Z2SoundHandlePool* Z2CreatureEnemy::startCreatureExtraSoundLevel(JAISoundID soundID, u32 mapinfo, s8 reverb) { + return mSoundObjSimple2.startLevelSound(soundID, mapinfo, reverb); } /* 802C1A14-802C1B7C 2BC354 0168+00 4/0 0/0 0/0 .text startCollisionSE__15Z2CreatureEnemyFUlUl */ -Z2SoundHandlePool* Z2CreatureEnemy::startCollisionSE(u32 param_0, u32 param_1) { +Z2SoundHandlePool* Z2CreatureEnemy::startCollisionSE(u32 hitID, u32 mapinfo) { u8 var1; switch (mEnemyID) { case Z2_ENEMY_WS: field_0xa3 = 1; - Z2GetSeqMgr()->setBattleLastHit(struct_80450869); - return mSoundObjAnime.startCollisionSE(param_0, param_1, NULL); + Z2GetSeqMgr()->setBattleLastHit(Z2Param::ENDING_BLOW_VOL_LOWER_TIME); + return mSoundObjAnime.startCollisionSE(hitID, mapinfo, NULL); case Z2_ENEMY_BI: if (getSupervisor() != NULL) { Z2GetSoundObjMgr()->removeEnemy(this); } - return mSoundObjAnime.startCollisionSE(param_0, param_1, NULL); + return mSoundObjAnime.startCollisionSE(hitID, mapinfo, NULL); default: - switch (param_1) { + switch (mapinfo) { case 0x1e: case 0x1f: case 0x22: @@ -668,61 +679,60 @@ Z2SoundHandlePool* Z2CreatureEnemy::startCollisionSE(u32 param_0, u32 param_1) { case 0x2a: case 0x2d: case 0x34: - Z2GetSeqMgr()->setBattleSeqState(2); + Z2GetSeqMgr()->onEnemyDamage(); break; case 0x20: case 0x24: field_0xa3 = 1; - var1 = struct_80450869; - if (param_0 == Z2SE_HIT_SWORD || param_0 == Z2SE_HIT_SWORD_STAB - || param_0 == Z2SE_HIT_WOLFBITE) { - var1 = 0x14; + var1 = Z2Param::ENDING_BLOW_VOL_LOWER_TIME; + if (hitID == Z2SE_HIT_SWORD || hitID == Z2SE_HIT_SWORD_STAB || hitID == Z2SE_HIT_WOLFBITE) { + var1 = 20; } Z2GetSeqMgr()->setBattleLastHit(var1); break; case 0x21: - if (mEnemyID == 0x2b) { + if (mEnemyID == Z2_ENEMY_HB) { field_0xa3 = 1; - Z2GetSeqMgr()->setBattleLastHit(struct_80450869); - } else if (mEnemyID == 0x16) { - Z2GetSeqMgr()->setBattleSeqState(2); + Z2GetSeqMgr()->setBattleLastHit(Z2Param::ENDING_BLOW_VOL_LOWER_TIME); + } else if (mEnemyID == Z2_ENEMY_DB) { + Z2GetSeqMgr()->onEnemyDamage(); } break; } - return mSoundObjAnime.startCollisionSE(param_0, param_1, NULL); + + return mSoundObjAnime.startCollisionSE(hitID, mapinfo, NULL); } } /* 802C1B7C-802C1B90 2BC4BC 0014+00 0/0 0/0 55/55 .text setLinkSearch__15Z2CreatureEnemyFb */ -void Z2CreatureEnemy::setLinkSearch(bool b_search) { - if (field_0xa3 != 0) { - return; +void Z2CreatureEnemy::setLinkSearch(bool isLinkSearch) { + if (field_0xa3 == 0) { + mLinkSearch = isLinkSearch; } - mLinkSearch = b_search; } /* 802C1B90-802C1BE8 2BC4D0 0058+00 0/0 0/0 72/72 .text setEnemyName__15Z2CreatureEnemyFPCc */ -void Z2CreatureEnemy::setEnemyName(char const* i_name) { - if (i_name == NULL) { +void Z2CreatureEnemy::setEnemyName(const char* enemyName) { + if (enemyName == NULL) { field_0xa1 = -1; } else { - mEnemyID = Z2GetSoundObjMgr()->getEnemyID(i_name, this); + mEnemyID = Z2GetSoundObjMgr()->getEnemyID(enemyName, this); } } /* 802C1BE8-802C1C24 2BC528 003C+00 0/0 0/0 1/1 .text __ct__16Z2CreatureSumomoFv */ -Z2CreatureSumomo::Z2CreatureSumomo() { - /* empty function */ -} +Z2CreatureSumomo::Z2CreatureSumomo() {} /* 802C1C24-802C1CA0 2BC564 007C+00 0/0 0/0 8/8 .text playSumomoBgm__16Z2CreatureSumomoFUl */ -void Z2CreatureSumomo::playSumomoBgm(u32 param_0) { +void Z2CreatureSumomo::playSumomoBgm(u32 dist) { if (Z2GetSeqMgr()->getSubBgmID() != Z2BGM_SUMOMO) { - if (param_0 < 700) { + if (dist < 700) { Z2GetSeqMgr()->subBgmStart(Z2BGM_SUMOMO); + OS_REPORT("SUMOMO_BGM_START dist:%d\n", dist); } - } else if (param_0 >= 1000 && Z2GetStatusMgr()->getDemoStatus() != 6) { + } else if (dist >= 1000 && Z2GetStatusMgr()->getDemoStatus() != 6) { Z2GetSeqMgr()->subBgmStop(); + OS_REPORT("SUMOMO_BGM_STOP dist:%d\n", dist); } } @@ -731,32 +741,31 @@ void Z2CreatureSumomo::playSumomoBgm(u32 param_0) { void Z2CreatureSumomo::deleteObject() { if (Z2GetSeqMgr()->getSubBgmID() == Z2BGM_SUMOMO && Z2GetStatusMgr()->getDemoStatus() != 6) { Z2GetSeqMgr()->subBgmStop(); + OS_REPORT("SUMOMO_BGM_STOP (DELETE)\n"); } + Z2Creature::deleteObject(); } /* 802C1D10-802C1D4C 2BC650 003C+00 0/0 0/0 3/3 .text __ct__18Z2SoundObjBeeGroupFv */ -Z2SoundObjBeeGroup::Z2SoundObjBeeGroup() { - /* empty function */ -} +Z2SoundObjBeeGroup::Z2SoundObjBeeGroup() {} /* 802C1D4C-802C1D6C 2BC68C 0020+00 1/0 0/0 0/0 .text init__18Z2SoundObjBeeGroupFP3VecUc */ -void Z2SoundObjBeeGroup::init(Vec* param_0, u8 param_1) { - Z2SoundObjBase::init(param_0, param_1); +void Z2SoundObjBeeGroup::init(Vec* posPtr, u8 handleNum) { + Z2SoundObjBase::init(posPtr, handleNum); } /* 802C1D6C-802C1F54 2BC6AC 01E8+00 0/0 0/0 2/2 .text * playBeeGroupSound__18Z2SoundObjBeeGroupF10JAISoundIDUc */ -void Z2SoundObjBeeGroup::playBeeGroupSound(JAISoundID i_soundID, u8 param_1) { +void Z2SoundObjBeeGroup::playBeeGroupSound(JAISoundID soundID, u8 param_1) { if (param_1 == 0) { return; } - u32 sound_id = (u32)i_soundID; JAISoundID sound_id2; - switch (sound_id) { + switch ((u32)soundID) { case Z2SE_EN_BE_STAY: sound_id2 = Z2SE_EN_BE_STAY_GROUP; break; @@ -774,7 +783,7 @@ void Z2SoundObjBeeGroup::playBeeGroupSound(JAISoundID i_soundID, u8 param_1) { break; } - Z2SoundHandlePool* handle1 = startLevelSound(sound_id, 0, -1); + Z2SoundHandlePool* handle1 = startLevelSound((u32)soundID, 0, -1); Z2SoundHandlePool* handle2 = startLevelSound(sound_id2, 0, -1); if (handle1 != NULL && *handle1 != NULL) { @@ -788,9 +797,7 @@ void Z2SoundObjBeeGroup::playBeeGroupSound(JAISoundID i_soundID, u8 param_1) { } /* 802C1F54-802C1FB0 2BC894 005C+00 0/0 0/0 1/1 .text __ct__12Z2CreatureFMFv */ -Z2CreatureFM::Z2CreatureFM() { - /* empty function */ -} +Z2CreatureFM::Z2CreatureFM() {} /* 802C1FB0-802C1FFC 2BC8F0 004C+00 1/0 0/0 0/0 .text deleteObject__12Z2CreatureFMFv */ void Z2CreatureFM::deleteObject() { @@ -803,10 +810,10 @@ void Z2CreatureFM::deleteObject() { /* 802C1FFC-802C20E8 2BC93C 00EC+00 0/0 0/0 1/1 .text * init__12Z2CreatureFMFP3VecP3VecP3VecP3VecP3VecP3VecUcUcUcUcUcUc */ -void Z2CreatureFM::init(Vec* param_0, Vec* param_1, Vec* param_2, Vec* param_3, Vec* param_4, - Vec* param_5, u8 param_6, u8 param_7, u8 param_8, u8 param_9, +void Z2CreatureFM::init(Vec* animePosPtr, Vec* simplePosPtr, Vec* param_2, Vec* param_3, Vec* param_4, + Vec* param_5, u8 animeHandleNum, u8 simpleHandleNum, u8 param_8, u8 param_9, u8 param_10, u8 param_11) { - Z2Creature::init(param_0, param_1, param_6, param_7); + Z2Creature::init(animePosPtr, simplePosPtr, animeHandleNum, simpleHandleNum); if (param_2 != NULL) { field_0xa4.init(param_2, param_8); } @@ -822,27 +829,27 @@ void Z2CreatureFM::init(Vec* param_0, Vec* param_1, Vec* param_2, Vec* param_3, } /* 802C20E8-802C2194 2BCA28 00AC+00 1/0 0/0 0/0 .text framework__12Z2CreatureFMFUlSc */ -void Z2CreatureFM::framework(u32 param_0, s8 param_1) { - Z2Creature::framework(param_0, param_1); - field_0xa4.framework(param_0, param_1); - field_0xc4.framework(param_0, param_1); - field_0xe4.framework(param_0, param_1); - field_0x104.framework(param_0, param_1); +void Z2CreatureFM::framework(u32 mapinfo, s8 reverb) { + Z2Creature::framework(mapinfo, reverb); + field_0xa4.framework(mapinfo, reverb); + field_0xc4.framework(mapinfo, reverb); + field_0xe4.framework(mapinfo, reverb); + field_0x104.framework(mapinfo, reverb); } /* 802C2194-802C2290 2BCAD4 00FC+00 0/0 0/0 1/1 .text * startChainSound__12Z2CreatureFMF10JAISoundIDUcfUlSc */ -Z2SoundHandlePool* Z2CreatureFM::startChainSound(JAISoundID i_soundID, u8 param_1, f32 param_2, - u32 param_3, s8 param_4) { +Z2SoundHandlePool* Z2CreatureFM::startChainSound(JAISoundID soundID, u8 param_1, f32 param_2, + u32 mapinfo, s8 reverb) { switch (param_1) { case 0: - return field_0xa4.startSound(i_soundID, param_3, param_4); + return field_0xa4.startSound(soundID, mapinfo, reverb); case 1: - return field_0xc4.startSound(i_soundID, param_3, param_4); + return field_0xc4.startSound(soundID, mapinfo, reverb); case 2: - return field_0xe4.startSound(i_soundID, param_3, param_4); + return field_0xe4.startSound(soundID, mapinfo, reverb); case 3: - return field_0x104.startSound(i_soundID, param_3, param_4); + return field_0x104.startSound(soundID, mapinfo, reverb); default: return NULL; } @@ -850,13 +857,13 @@ Z2SoundHandlePool* Z2CreatureFM::startChainSound(JAISoundID i_soundID, u8 param_ /* 802C2290-802C24B0 2BCBD0 0220+00 0/0 0/0 1/1 .text * startChainSoundLevel__12Z2CreatureFMF10JAISoundIDUcfUlSc */ -Z2SoundHandlePool* Z2CreatureFM::startChainSoundLevel(JAISoundID i_soundID, u8 param_1, f32 param_2, - u32 param_3, s8 param_4) { +Z2SoundHandlePool* Z2CreatureFM::startChainSoundLevel(JAISoundID soundID, u8 param_1, f32 param_2, + u32 mapinfo, s8 reverb) { Z2SoundHandlePool* handle; f32 pitch; switch (param_1) { case 0: - handle = field_0xa4.startLevelSound(i_soundID, param_3, param_4); + handle = field_0xa4.startLevelSound(soundID, mapinfo, reverb); if (handle != NULL && *handle) { if (param_2 > 30.0f) { pitch = 1.06f; @@ -872,7 +879,7 @@ Z2SoundHandlePool* Z2CreatureFM::startChainSoundLevel(JAISoundID i_soundID, u8 p } return NULL; case 1: - handle = field_0xa4.startLevelSound(i_soundID, param_3, param_4); + handle = field_0xa4.startLevelSound(soundID, mapinfo, reverb); if (handle != NULL && *handle) { if (param_2 > 30.0f) { pitch = 1.06f; @@ -888,9 +895,9 @@ Z2SoundHandlePool* Z2CreatureFM::startChainSoundLevel(JAISoundID i_soundID, u8 p } return NULL; case 2: - return field_0xe4.startLevelSound(i_soundID, param_3, param_4); + return field_0xe4.startLevelSound(soundID, mapinfo, reverb); case 3: - return field_0x104.startLevelSound(i_soundID, param_3, param_4); + return field_0x104.startLevelSound(soundID, mapinfo, reverb); default: return NULL; } @@ -898,26 +905,25 @@ Z2SoundHandlePool* Z2CreatureFM::startChainSoundLevel(JAISoundID i_soundID, u8 p /* 802C24B0-802C24D0 2BCDF0 0020+00 0/0 0/0 1/1 .text init__13Z2CreatureGobFP3VecP3VecP3VecUcUcUc */ -void Z2CreatureGob::init(Vec* param_0, Vec* param_1, Vec* param_2, u8 param_3, u8 param_4, - u8 param_5) { - Z2Creature::init(param_0, param_1, param_2, param_3, param_4, param_5); +void Z2CreatureGob::init(Vec* animePosPtr, Vec* simplePosPtr, Vec* simple2PosPtr, u8 animeHandleNum, u8 simpleHandleNum, + u8 simple2HandleNum) { + Z2Creature::init(animePosPtr, simplePosPtr, simple2PosPtr, animeHandleNum, simpleHandleNum, simple2HandleNum); } /* 802C24D0-802C2578 2BCE10 00A8+00 1/0 0/0 0/0 .text * startCreatureVoiceLevel__13Z2CreatureGobF10JAISoundIDSc */ -Z2SoundHandlePool* Z2CreatureGob::startCreatureVoiceLevel(JAISoundID i_soundID, s8 param_1) { +Z2SoundHandlePool* Z2CreatureGob::startCreatureVoiceLevel(JAISoundID soundID, s8 reverb) { if (mSoundObjSimple1.getHandleSoundID(Z2SE_EN_GOB_V_DAMAGE) != NULL || mSoundObjSimple1.getHandleSoundID(Z2SE_EN_GOB_V_STOMACH) != NULL) { return NULL; } - return mSoundObjSimple1.startLevelSound(i_soundID, 0, param_1); + + return mSoundObjSimple1.startLevelSound(soundID, 0, reverb); } /* 802C2578-802C25EC 2BCEB8 0074+00 0/0 0/0 1/1 .text __ct__12Z2CreatureOIFv */ -Z2CreatureOI::Z2CreatureOI() { - /* empty function */ -} +Z2CreatureOI::Z2CreatureOI() {} /* 802C25EC-802C2670 2BCF2C 0084+00 1/0 0/0 0/0 .text deleteObject__12Z2CreatureOIFv */ void Z2CreatureOI::deleteObject() { @@ -977,35 +983,34 @@ void Z2CreatureOI::init(Vec* param_0, Vec* param_1, Vec* param_2, Vec* param_3, } /* 802C2864-802C29D4 2BD1A4 0170+00 1/0 0/0 0/0 .text framework__12Z2CreatureOIFUlSc */ -void Z2CreatureOI::framework(u32 param_0, s8 param_1) { - Z2Creature::framework(param_0, param_1); - field_0xa4.framework(param_0, param_1); - field_0xc4.framework(param_0, param_1); - field_0xe4.framework(param_0, param_1); - mTentacleSounds[0].framework(param_0, param_1); - mTentacleSounds[1].framework(param_0, param_1); - mTentacleSounds[2].framework(param_0, param_1); - mTentacleSounds[3].framework(param_0, param_1); - mTentacleSounds[4].framework(param_0, param_1); - mTentacleSounds[5].framework(param_0, param_1); - mTentacleSounds[6].framework(param_0, param_1); - mTentacleSounds[7].framework(param_0, param_1); +void Z2CreatureOI::framework(u32 mapinfo, s8 reverb) { + Z2Creature::framework(mapinfo, reverb); + field_0xa4.framework(mapinfo, reverb); + field_0xc4.framework(mapinfo, reverb); + field_0xe4.framework(mapinfo, reverb); + mTentacleSounds[0].framework(mapinfo, reverb); + mTentacleSounds[1].framework(mapinfo, reverb); + mTentacleSounds[2].framework(mapinfo, reverb); + mTentacleSounds[3].framework(mapinfo, reverb); + mTentacleSounds[4].framework(mapinfo, reverb); + mTentacleSounds[5].framework(mapinfo, reverb); + mTentacleSounds[6].framework(mapinfo, reverb); + mTentacleSounds[7].framework(mapinfo, reverb); } /* 802C29D4-802C2C84 2BD314 02B0+00 1/0 0/0 0/0 .text * startCreatureSoundLevel__12Z2CreatureOIF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2CreatureOI::startCreatureSoundLevel(JAISoundID i_soundID, u32 param_1, - s8 param_2) { - if (i_soundID == Z2SE_EN_OI_MOVE) { - Z2SoundHandlePool* handle1 = mSoundObjAnime.startLevelSound(i_soundID, param_1, param_2); - Z2SoundHandlePool* handle2 = field_0xa4.startLevelSound(i_soundID, param_1, param_2); - Z2SoundHandlePool* handle3 = field_0xc4.startLevelSound(i_soundID, param_1, param_2); - Z2SoundHandlePool* handle4 = field_0xe4.startLevelSound(i_soundID, param_1, param_2); - - f32 volume = Z2Calc::getParamByExp(param_1, 0.0f, 42.0f, 0.4f, 0.0f, 1.0f, - Z2Calc::CURVE_SIGN_1); - f32 pitch = Z2Calc::getParamByExp(param_1, 0.0f, 42.0f, 0.4f, 0.9f, 1.1f, - Z2Calc::CURVE_SIGN_1); +Z2SoundHandlePool* Z2CreatureOI::startCreatureSoundLevel(JAISoundID soundID, u32 mapinfo, s8 reverb) { + if (soundID == Z2SE_EN_OI_MOVE) { + Z2SoundHandlePool* handle1 = mSoundObjAnime.startLevelSound(soundID, mapinfo, reverb); + Z2SoundHandlePool* handle2 = field_0xa4.startLevelSound(soundID, mapinfo, reverb); + Z2SoundHandlePool* handle3 = field_0xc4.startLevelSound(soundID, mapinfo, reverb); + Z2SoundHandlePool* handle4 = field_0xe4.startLevelSound(soundID, mapinfo, reverb); + + f32 volume = Z2Calc::getParamByExp(mapinfo, 0.0f, 42.0f, 0.4f, 0.0f, 1.0f, + Z2Calc::CURVE_POSITIVE); + f32 pitch = Z2Calc::getParamByExp(mapinfo, 0.0f, 42.0f, 0.4f, 0.9f, 1.1f, + Z2Calc::CURVE_POSITIVE); if (handle1 != NULL && *handle1 != NULL) { (*handle1)->getAuxiliary().moveVolume(volume, 0); @@ -1036,28 +1041,27 @@ Z2SoundHandlePool* Z2CreatureOI::startCreatureSoundLevel(JAISoundID i_soundID, u return NULL; } } else { - return mSoundObjAnime.startLevelSound(i_soundID, param_1, param_2); + return mSoundObjAnime.startLevelSound(soundID, mapinfo, reverb); } } /* 802C2C84-802C2CD4 2BD5C4 0050+00 0/0 0/0 1/1 .text * startTentacleSound__12Z2CreatureOIF10JAISoundIDUcUlSc */ -Z2SoundHandlePool* Z2CreatureOI::startTentacleSound(JAISoundID i_soundID, u8 param_1, u32 param_2, - s8 param_3) { - return mTentacleSounds[param_1].startSound(i_soundID, param_2, param_3); +Z2SoundHandlePool* Z2CreatureOI::startTentacleSound(JAISoundID soundID, u8 tentacleIndex, u32 mapinfo, s8 reverb) { + return mTentacleSounds[tentacleIndex].startSound(soundID, mapinfo, reverb); } /* 802C2CD4-802C2DE0 2BD614 010C+00 0/0 0/0 1/1 .text * startTentacleSoundLevel__12Z2CreatureOIF10JAISoundIDUcfUlSc */ -Z2SoundHandlePool* Z2CreatureOI::startTentacleSoundLevel(JAISoundID i_soundID, u8 param_1, - f32 param_2, u32 param_3, s8 param_4) { - Z2SoundHandlePool* handle = - mTentacleSounds[param_1].startLevelSound(i_soundID, param_3, param_4); +Z2SoundHandlePool* Z2CreatureOI::startTentacleSoundLevel(JAISoundID soundID, u8 tentacleIndex, + f32 param_2, u32 mapinfo, s8 reverb) { + Z2SoundHandlePool* handle = NULL; + handle = mTentacleSounds[tentacleIndex].startLevelSound(soundID, mapinfo, reverb); if (handle != NULL && *handle) { f32 volume = Z2Calc::getParamByExp(param_2, 0.0f, 60.0f, 0.4f, 0.0f, 1.0f, - Z2Calc::CURVE_SIGN_1); + Z2Calc::CURVE_POSITIVE); f32 pitch = Z2Calc::getParamByExp(param_2, 0.0f, 60.0f, 0.4f, 0.9f, 1.1f, - Z2Calc::CURVE_SIGN_1); + Z2Calc::CURVE_POSITIVE); (*handle)->getAuxiliary().moveVolume(volume, 0); (*handle)->getAuxiliary().movePitch(pitch, 0); return handle; @@ -1067,10 +1071,10 @@ Z2SoundHandlePool* Z2CreatureOI::startTentacleSoundLevel(JAISoundID i_soundID, u } /* 802C2DE0-802C2E54 2BD720 0074+00 3/3 0/0 0/0 .text Z2_E_sw_modPitch__FP17Z2SoundHandlePoolUl */ -static void Z2_E_sw_modPitch(Z2SoundHandlePool* i_handle, u32 param_1) { - if (i_handle != NULL && *i_handle != NULL) { +static void Z2_E_sw_modPitch(Z2SoundHandlePool* handle, u32 mapinfo) { + if (handle != NULL && *handle != NULL) { f32 pitch = 1.0f; - switch (param_1) { + switch (mapinfo) { case 1: pitch = 1.1f; break; @@ -1078,41 +1082,47 @@ static void Z2_E_sw_modPitch(Z2SoundHandlePool* i_handle, u32 param_1) { pitch = 0.8f; break; } - (*i_handle)->getAuxiliary().movePitch(pitch, 0); + (*handle)->getAuxiliary().movePitch(pitch, 0); } } /* 802C2E54-802C2E9C 2BD794 0048+00 2/2 0/0 0/0 .text Z2_E_ms_modVol__FP17Z2SoundHandlePoolUl */ -static void Z2_E_ms_modVol(Z2SoundHandlePool* i_handle, u32 param_1) { - if (i_handle != NULL && *i_handle != NULL && param_1 == 1) { - (*i_handle)->getAuxiliary().moveVolume(0.2f, 0); +static void Z2_E_ms_modVol(Z2SoundHandlePool* handle, u32 mapinfo) { + if (handle != NULL && *handle != NULL) { + f32 var_f31 = 0.2f; + if (mapinfo == 1) { + (*handle)->getAuxiliary().moveVolume(var_f31, 0); + } } } /* 802C2E9C-802C2EE4 2BD7DC 0048+00 2/2 0/0 0/0 .text Z2_E_mm_modPitch__FP17Z2SoundHandlePoolUl */ -static void Z2_E_mm_modPitch(Z2SoundHandlePool* i_handle, u32 param_1) { - if (i_handle != NULL && *i_handle != NULL && param_1 == 3) { - (*i_handle)->getAuxiliary().movePitch(0.7f, 0); +static void Z2_E_mm_modPitch(Z2SoundHandlePool* handle, u32 mapinfo) { + if (handle != NULL && *handle != NULL) { + f32 var_f31 = 0.7f; + if (mapinfo == 3) { + (*handle)->getAuxiliary().movePitch(var_f31, 0); + } } } /* 802C2EE4-802C3040 2BD824 015C+00 2/2 0/0 0/0 .text Z2_B_zan_modPitch__FP17Z2SoundHandlePoolUl */ -static void Z2_B_zan_modPitch(Z2SoundHandlePool* i_handle, u32 param_1) { - if (i_handle != NULL && *i_handle != NULL) { - f32 pitch; +static void Z2_B_zan_modPitch(Z2SoundHandlePool* handle, u32 mapinfo) { + if (handle != NULL && *handle != NULL) { + f32 pitch = 1.0f; f32 volume = 1.0f; - if (param_1 > 400) { + if (mapinfo > 400) { pitch = 0.5f; - } else if (param_1 > 100) { - pitch = Z2Calc::getParamByExp(400 - param_1, 0.0f, 300.0f, 0.4f, 0.5f, 1.0f, - Z2Calc::CURVE_SIGN_0); + } else if (mapinfo > 100) { + pitch = Z2Calc::getParamByExp(400 - mapinfo, 0.0f, 300.0f, 0.4f, 0.5f, 1.0f, + Z2Calc::CURVE_NEGATIVE); } else { - pitch = Z2Calc::getParamByExp(100 - param_1, 0.0f, 50.0f, 0.4f, 1.0f, 1.5f, - Z2Calc::CURVE_SIGN_0); - volume = Z2Calc::getParamByExp(param_1, 50.0f, 100.0f, 0.4f, 0.4f, 1.0f, - Z2Calc::CURVE_SIGN_0); + pitch = Z2Calc::getParamByExp(100 - mapinfo, 0.0f, 50.0f, 0.4f, 1.0f, 1.5f, + Z2Calc::CURVE_NEGATIVE); + volume = Z2Calc::getParamByExp(mapinfo, 50.0f, 100.0f, 0.4f, 0.4f, 1.0f, + Z2Calc::CURVE_NEGATIVE); } - (*i_handle)->getAuxiliary().movePitch(pitch, 0); - (*i_handle)->getAuxiliary().moveVolume(volume, 0); + (*handle)->getAuxiliary().movePitch(pitch, 0); + (*handle)->getAuxiliary().moveVolume(volume, 0); } } diff --git a/src/Z2AudioLib/Z2EnvSeMgr.cpp b/src/Z2AudioLib/Z2EnvSeMgr.cpp index f996afc50a..11917dda9c 100644 --- a/src/Z2AudioLib/Z2EnvSeMgr.cpp +++ b/src/Z2AudioLib/Z2EnvSeMgr.cpp @@ -1,23 +1,98 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2EnvSeMgr -// - #include "Z2AudioLib/Z2EnvSeMgr.h" #include "Z2AudioLib/Z2Calc.h" #include "JSystem/JAudio2/JASCalc.h" -#include "Z2AudioLib/Z2Creature.h" #include "d/d_save.h" #include "d/d_com_inf_game.h" #ifdef DEBUG -// Should be in data section -static char sSpotName[144] = {0}; +static const char* sSpotName[] = { + "F_SP00", + "F_SP103", + "R_SP01", + "F_SP104", + "R_SP107", + "F_SP108", + "R_SP108", + "F_SP117", + "F_SP109", + "R_SP109", + "R_SP209", + "F_SP110", + "R_SP110", + "F_SP111", + "F_SP128", + "R_SP128", + "F_SP115", + "F_SP112", + "F_SP126", + "F_SP127", + "R_SP127", + "F_SP113", + "F_SP116", + "R_SP116", + "R_SP160", + "R_SP161", + "F_SP114", + "F_SP118", + "F_SP124", + "F_SP125", + "F_SP121", + "F_SP122", + "F_SP123", + "F_SP200", + "F_SP102", + "", + "R_SP300", + "R_SP301", + "T_ENEMY", + "D_MN54", + "D_MN05", + "D_MN05B", + "D_MN05A", + "D_MN04", + "D_MN04B", + "D_MN04A", + "D_MN01", + "D_MN01B", + "D_MN01A", + "D_MN10", + "D_MN10B", + "D_MN10A", + "D_MN11", + "D_MN11B", + "D_MN11A", + "D_MN06", + "D_MN06B", + "D_MN06A", + "D_MN07", + "D_MN07B", + "D_MN07A", + "D_MN08", + "D_MN08B", + "D_MN08C", + "D_MN08A", + "D_MN08D", + "D_MN09", + "D_MN09A", + "D_MN09B", + "D_MN09C", + "D_SB00", + "D_SB01", + "D_SB02", + "D_SB03", + "D_SB04", + "D_SB05", + "D_SB06", + "D_SB07", + "D_SB08", + "D_SB09", + "D_SB10", +}; #endif /* 802C589C-802C58AC 2C01DC 0010+00 3/3 0/0 0/0 .text __ct__11Z2EnvSeBaseFP3Vec */ -Z2EnvSeBase::Z2EnvSeBase(Vec* param_0) { - mPos = param_0; +Z2EnvSeBase::Z2EnvSeBase(Vec* posPtr) { + mPos = posPtr; } /* 802C58AC-802C5908 2C01EC 005C+00 3/3 0/0 0/0 .text __dt__11Z2EnvSeBaseFv */ @@ -25,22 +100,22 @@ Z2EnvSeBase::~Z2EnvSeBase() {} /* 802C5908-802C5AB4 2C0248 01AC+00 2/2 0/0 0/0 .text * startEnvSe__11Z2EnvSeBaseF10JAISoundIDfffffUl */ -bool Z2EnvSeBase::startEnvSe(JAISoundID param_1, f32 param_2, f32 param_3, f32 param_4, f32 param_5, - f32 param_6, u32 param_7) { +bool Z2EnvSeBase::startEnvSe(JAISoundID soundID, f32 fxMix, f32 volume, f32 pan, f32 dolby, f32 pitch, u32 moveSteps) { if (Z2GetStatusMgr()->isPaused()) { - param_3 *= 0.33f; + volume *= 0.33f; } + f32 dVar16 = 1.0f; - bool uStack_44 = Z2GetStatusMgr()->getCameraInWaterDepth() > 0.0f; - f32 fVar1 = uStack_44; + f32 fVar1 = Z2GetStatusMgr()->getCameraInWaterDepth() > 0.0f; if (fVar1) { dVar16 = Z2Calc::getParamByExp( fVar1, 1500.0f, 0.0f, 0.1f, 0.0f, - dVar16, Z2Calc::CURVE_SIGN_0); - param_3 *= dVar16; + 1.0f, Z2Calc::CURVE_NEGATIVE); + volume *= dVar16; } - bool rv = Z2GetSoundStarter()->startSound(param_1, &mHandle, (JGeometry::TVec3<f32>*)mPos, 0, param_2, param_6, param_3, param_4, param_5, param_7); + + bool rv = Z2GetSoundStarter()->startSound(soundID, &mHandle, (JGeometry::TVec3<f32>*)mPos, 0, fxMix, pitch, volume, pan, dolby, moveSteps); if (mHandle) { if (dVar16 < 1.0f) { Z2GetSoundMgr()->setIIR(mHandle.getSound(), JASCalc::CUTOFF_TO_IIR_TABLE[64]); @@ -48,27 +123,29 @@ bool Z2EnvSeBase::startEnvSe(JAISoundID param_1, f32 param_2, f32 param_3, f32 p Z2GetSoundMgr()->setIIR(mHandle.getSound(), JASCalc::CUTOFF_TO_IIR_TABLE[127]); } } + return rv; } /* 802C5AB4-802C5C9C 2C03F4 01E8+00 9/9 0/0 0/0 .text * startEnvSeLevel__11Z2EnvSeBaseF10JAISoundIDfffffUl */ -bool Z2EnvSeBase::startEnvSeLevel(JAISoundID param_1, f32 param_2, f32 param_3, f32 param_4, - f32 param_5, f32 param_6, u32 param_7) { +bool Z2EnvSeBase::startEnvSeLevel(JAISoundID soundID, f32 fxMix, f32 volume, f32 pan, + f32 dolby, f32 pitch, u32 moveSteps) { if (Z2GetStatusMgr()->isPaused()) { - param_3 *= 0.33f; + volume *= 0.33f; } + f32 dVar16 = 1.0f; - bool uStack_44 = Z2GetStatusMgr()->getCameraInWaterDepth() > 0.0f; - f32 fVar1 = uStack_44; + f32 fVar1 = Z2GetStatusMgr()->getCameraInWaterDepth() > 0.0f; if (fVar1) { dVar16 = Z2Calc::getParamByExp( fVar1, 1500.0f, 0.0f, 0.1f, 0.0f, - dVar16, Z2Calc::CURVE_SIGN_0); - param_3 *= dVar16; + 1.0f, Z2Calc::CURVE_NEGATIVE); + volume *= dVar16; } - bool rv = Z2GetSoundStarter()->startLevelSound(param_1, &mHandle, (JGeometry::TVec3<f32>*)mPos); + + bool rv = Z2GetSoundStarter()->startLevelSound(soundID, &mHandle, (JGeometry::TVec3<f32>*)mPos); if (mHandle) { if (dVar16 < 1.0f) { Z2GetSoundMgr()->setIIR(mHandle.getSound(), JASCalc::CUTOFF_TO_IIR_TABLE[64]); @@ -76,21 +153,23 @@ bool Z2EnvSeBase::startEnvSeLevel(JAISoundID param_1, f32 param_2, f32 param_3, Z2GetSoundMgr()->setIIR(mHandle.getSound(), JASCalc::CUTOFF_TO_IIR_TABLE[127]); } - mHandle->getAuxiliary().moveVolume(param_3, param_7); - mHandle->getAuxiliary().movePan(param_4, param_7); - mHandle->getAuxiliary().moveDolby(param_5, param_7); - mHandle->getAuxiliary().moveFxMix(param_2, param_7); - mHandle->getAuxiliary().movePitch(param_6, param_7); + mHandle->getAuxiliary().moveVolume(volume, moveSteps); + mHandle->getAuxiliary().movePan(pan, moveSteps); + mHandle->getAuxiliary().moveDolby(dolby, moveSteps); + mHandle->getAuxiliary().moveFxMix(fxMix, moveSteps); + mHandle->getAuxiliary().movePitch(pitch, moveSteps); } + return rv; } /* 802C5C9C-802C5D1C 2C05DC 0080+00 1/1 0/0 0/0 .text __ct__10Z2EnvSeDirFP3Vec */ -Z2EnvSeDir::Z2EnvSeDir(Vec* param_0) { - field_0x8 = 0.5f; - field_0xc = 0.5f; - if (param_0) { - setPanDir(param_0); +Z2EnvSeDir::Z2EnvSeDir(Vec* dir) { + mPan = 0.5f; + mDolby = 0.5f; + + if (dir) { + setPanDir(dir); } else { mPanDir = Z2Calc::cNullVec; } @@ -101,6 +180,7 @@ Z2EnvSeDir::~Z2EnvSeDir() {} /* 802C5D70-802C5D9C 2C06B0 002C+00 2/2 0/0 0/0 .text setPanDir__10Z2EnvSeDirFP3Vec */ void Z2EnvSeDir::setPanDir(Vec* dir) { + JUT_ASSERT(249, dir); mPanDir.x = dir->x * -1000.0f; mPanDir.y = dir->y * -1000.0f; mPanDir.z = dir->z * -1000.0f; @@ -114,25 +194,28 @@ void Z2EnvSeDir::calcPan(f32 param_0) { (*getHandle())->getAuxiliary().moveDolby(0.5f, 0); } else { Z2GetAudience()->convertAbsToRel(mPanDir, &mPanDir, 0); - JMAFastVECNormalize(&mPanDir, &mPanDir); - field_0x8 = Z2GetAudience()->calcRelPosPan(mPanDir, 0); - field_0xc = Z2GetAudience()->calcRelPosDolby(mPanDir, 0); - (*getHandle())->getAuxiliary().movePan(field_0x8, 0); - (*getHandle())->getAuxiliary().moveDolby(field_0xc, 0); + JMath::fastVECNormalize(&mPanDir, &mPanDir); + + mPan = Z2GetAudience()->calcRelPosPan(mPanDir, 0); + mDolby = Z2GetAudience()->calcRelPosDolby(mPanDir, 0); + + (*getHandle())->getAuxiliary().movePan(mPan, 0); + (*getHandle())->getAuxiliary().moveDolby(mDolby, 0); } } } /* 802C5E90-802C5ECC 2C07D0 003C+00 1/1 0/0 0/0 .text * startEnvSeDirLevel__10Z2EnvSeDirF10JAISoundIDff */ -bool Z2EnvSeDir::startEnvSeDirLevel(JAISoundID param_1, f32 param_2, f32 param_3) { - return Z2EnvSeBase::startEnvSeLevel(param_1, param_2, param_3, field_0x8, field_0xc, 1.0f, 0); +bool Z2EnvSeDir::startEnvSeDirLevel(JAISoundID soundID, f32 fxMix, f32 volume) { + f32 var_f31 = mDolby; + return Z2EnvSeBase::startEnvSeLevel(soundID, fxMix, volume, mPan, mDolby, 1.0f, 0); } /* 802C5ECC-802C5F28 2C080C 005C+00 1/1 0/0 0/0 .text __ct__14Z2EnvSeAutoPanFv */ Z2EnvSeAutoPan::Z2EnvSeAutoPan() { - field_0x8 = 0.5f; - field_0xc = 0.5f; + mPan = 0.5f; + mDolby = 0.5f; field_0x10 = 0.0018554000416770577f; field_0x14 = 0.0008553999941796064f; field_0x18 = 1; @@ -143,10 +226,10 @@ Z2EnvSeAutoPan::Z2EnvSeAutoPan() { Z2EnvSeAutoPan::~Z2EnvSeAutoPan() {} /* 802C5F7C-802C5F98 2C08BC 001C+00 2/2 0/0 0/0 .text setPanParam__14Z2EnvSeAutoPanFffbbff */ -void Z2EnvSeAutoPan::setPanParam(f32 param_1, f32 param_2, bool param_3, bool param_4, f32 param_5, +void Z2EnvSeAutoPan::setPanParam(f32 pan, f32 dolby, bool param_3, bool param_4, f32 param_5, f32 param_6) { - field_0x8 = param_1; - field_0xc = param_2; + mPan = pan; + mDolby = dolby; field_0x10 = param_5; field_0x14 = param_6; field_0x18 = param_3; @@ -156,54 +239,57 @@ void Z2EnvSeAutoPan::setPanParam(f32 param_1, f32 param_2, bool param_3, bool pa /* 802C5F98-802C60E0 2C08D8 0148+00 2/2 0/0 0/0 .text calcPan__14Z2EnvSeAutoPanFv */ void Z2EnvSeAutoPan::calcPan() { if (field_0x18) { - field_0x8 += field_0x10; - if (field_0x8 > 1.0f) { - field_0x8 = 2.0f - field_0x8; + mPan += field_0x10; + if (mPan > 1.0f) { + mPan = 2.0f - mPan; field_0x18 = false; } } else { - field_0x8 = field_0x8 - field_0x10; - if (field_0x8 < 0.0f) { - field_0x8 *= -1.0f; + mPan -= field_0x10; + if (mPan < 0.0f) { + mPan *= -1.0f; field_0x18 = true; } } + if (field_0x19) { - field_0xc = field_0xc + field_0x14; - if (field_0xc > 1.0f) { - field_0xc = 2.0f - field_0xc; + mDolby += field_0x14; + if (mDolby > 1.0f) { + mDolby = 2.0f - mDolby; field_0x19 = false; } } else { - field_0xc = field_0xc - field_0x14; - if (field_0xc < 0.0f) { - field_0xc *= -1.0f; + mDolby -= field_0x14; + if (mDolby < 0.0f) { + mDolby *= -1.0f; field_0x19 = true; } } + if (*getHandle()) { - (*getHandle())->getAuxiliary().movePan(field_0x8, 0); - (*getHandle())->getAuxiliary().moveDolby(field_0xc, 0); + (*getHandle())->getAuxiliary().movePan(mPan, 0); + (*getHandle())->getAuxiliary().moveDolby(mDolby, 0); } } /* 802C60E0-802C611C 2C0A20 003C+00 2/2 0/0 0/0 .text * startEnvSeAutoPanLevel__14Z2EnvSeAutoPanF10JAISoundIDfff */ -bool Z2EnvSeAutoPan::startEnvSeAutoPanLevel(JAISoundID param_1, f32 param_2, f32 param_3, - f32 param_4) { - return Z2EnvSeBase::startEnvSeLevel(param_1, param_2, param_3, field_0x8, field_0xc, param_4, - 0); +bool Z2EnvSeAutoPan::startEnvSeAutoPanLevel(JAISoundID soundID, f32 fxMix, f32 volume, + f32 pitch) { + f32 var_f31 = mDolby; + return Z2EnvSeBase::startEnvSeLevel(soundID, fxMix, volume, mPan, mDolby, pitch, 0); } /* 802C611C-802C6540 2C0A5C 0424+00 0/0 1/1 0/0 .text __ct__10Z2EnvSeMgrFv */ Z2EnvSeMgr::Z2EnvSeMgr() - : JASGlobalInstance<Z2EnvSeMgr>(this), field_0x38(), field_0x48(1.0f), field_0x4c(1.0f), + : JASGlobalInstance<Z2EnvSeMgr>(true), field_0x38(), field_0x48(1.0f), field_0x4c(1.0f), field_0x50(1.0f), field_0x140(), mSnowPower(), mWindType(), field_0x188(), field_0x1ac(1.0f), field_0x1b0(1.0f), field_0x1b4(1.0f), field_0x1b8(), field_0x1e0(), field_0x1e4(1.0f), field_0x1e8(1.0f), field_0x1ec(1.0f), field_0x214(), field_0x218(1.0f), field_0x21c(1.0f), field_0x220(1.0f), field_0x248(), field_0x24c(1.0f), field_0x250(1.0f), field_0x254(1.0f), field_0x27c(), field_0x280(1.0f), field_0x284(1.0f), field_0x288(1.0f), field_0x2b0(), - field_0x2b4(1.0f), field_0x2b8(1.0f), field_0x2bc(1.0f), field_0x2e4(), mFogDensity() { + field_0x2b4(1.0f), field_0x2b8(1.0f), field_0x2bc(1.0f), field_0x2e4(), mFogDensity() +{ field_0x3c.x = 0.0f; field_0x3c.y = 0.0f; field_0x3c.z = 0.0f; @@ -243,51 +329,58 @@ void Z2EnvSeMgr::framework() { && !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[250]))) { int lVar12 = 0; - if (sceneNum == 0x17 || sceneNum == 0x18 || (sceneNum == 0x19)) { + if (sceneNum == Z2SCENE_CASTLE_TOWN_INTERIOR || sceneNum == Z2SCENE_CASTLE_TOWN_SHOPS || (sceneNum == Z2SCENE_STAR_TENT)) { lVar12 = 1; } startRainSe(lVar12, 100); } + field_0x64.resetMultiSePos(); } - if (sceneNum == 0x2e) { + + if (sceneNum == Z2SCENE_LAKEBED_TEMPLE) { startLv3WaterSe(-1); field_0x140 = 0; } + if (Z2GetSceneMgr()->isSceneExist()) { playSceneEnvSe(); if (field_0x140 > 0 && mSnowPower == 0) { - JAISoundHandle* pJVar8 = field_0x80.getHandle(); - if (*pJVar8) { - (*pJVar8)->updateLifeTime(field_0x140); + JAISoundHandle* handle = field_0x80.getHandle(); + if (*handle) { + (*handle)->updateLifeTime(field_0x140); } - pJVar8 = field_0x88.getHandle(); - if (*pJVar8) { - (*pJVar8)->updateLifeTime(field_0x140); + handle = field_0x88.getHandle(); + if (*handle) { + (*handle)->updateLifeTime(field_0x140); } field_0x140 = 0; } } - if (mFogDensity > 0.0f) - { + + if (mFogDensity > 0.0f) { mFogDensity -= 0.01f; if (mFogDensity < 0.0f) { mFogDensity = 0.0f; } } + if (field_0x1b8 > 0 && field_0x1b8 < 100) { field_0x1b8++; } else if (field_0x1b8 < 0 && field_0x1b8 > -100) { field_0x1b8--; } + if (mSnowPower > 0) { mSnowPower--; } + if (Z2GetLink() != NULL) { - if (Z2GetLink()->isWolfSmellOpen() != 0) { - if (field_0x2e4 < 0x1e) { + if (Z2GetLink()->isWolfSmellOpen()) { + if (field_0x2e4 < 30) { field_0x2e4++; } + if (mWolfSmellSeMgr.getPosCount() >= 0) { f32 maxVolume = mWolfSmellSeMgr.getMaxVolume(); field_0x2dc.startEnvSeLevel(Z2SE_ENV_SCENT_GRAVE, 0.0f, @@ -297,15 +390,14 @@ void Z2EnvSeMgr::framework() { return; } } + if (field_0x2e4 != 0) { field_0x2e4--; } } /* 802C6998-802C699C 2C12D8 0004+00 0/0 1/1 0/0 .text resetScene__10Z2EnvSeMgrFv */ -void Z2EnvSeMgr::resetScene() { - /* empty function */ -} +void Z2EnvSeMgr::resetScene() {} /* 802C699C-802C6AC0 2C12DC 0124+00 0/0 1/1 0/0 .text resetSceneInner__10Z2EnvSeMgrFv */ void Z2EnvSeMgr::resetSceneInner() { @@ -322,6 +414,7 @@ void Z2EnvSeMgr::resetSceneInner() { field_0x3c.y = 0.0f; field_0x3c.z = 0.0f; } + field_0x140 = 0; mWindType = WIND_TYPE_0; field_0x188 = 0; @@ -349,6 +442,7 @@ void Z2EnvSeMgr::resetSceneInner() { field_0x2b4 = 1.0f; field_0x2b8 = 1.0f; field_0x2bc = 1.0f; + mRiverSeMgr.resetMultiSePos(); mFallSeMgr.resetMultiSePos(); mEtcSeMgr.resetMultiSePos(); @@ -361,50 +455,52 @@ void Z2EnvSeMgr::resetSceneInner() { /* 802C6AC0-802C6C1C 2C1400 015C+00 0/0 1/1 0/0 .text initSceneEnvSe__10Z2EnvSeMgrFlScf */ -void Z2EnvSeMgr::initSceneEnvSe(s32 param_1, s8 param_2, f32 param_3) { +void Z2EnvSeMgr::initSceneEnvSe(s32 sceneID, s8 room, f32 param_3) { field_0x60 = -1.0f; if (-1.0f == param_3) { return; } + u8 r6 = 100.0f * param_3; u8 uVar3 = 0; - switch(param_1) { - case 0x1e: - switch(param_2) { - case 0xd: + + switch(sceneID) { + case Z2SCENE_HYRULE_FIELD: + switch(room) { + case 13: uVar3 = 10; break; case 7: case 9: - case 0xb: - case 0xc: + case 11: + case 12: uVar3 = 2; break; case 8: - case 0xa: + case 10: default: uVar3 = 6; break; } break; - case 0x1f: - switch(param_2) { + case Z2SCENE_CASTLE_TOWN_GATES: + switch(room) { case 8: - case 0x10: + case 16: uVar3 = 6; break; - case 0x11: + case 17: uVar3 = 10; break; } break; - case 0x20: + case Z2SCENE_HYLIA_BRIDGE_BATTLE: uVar3 = 10; break; - case 0x22: + case Z2SCENE_ELDIN_BRIDGE_BATTLE: uVar3 = 6; break; - case 0x45: + case Z2SCENE_FINAL_BATTLE_CUTSCENE: uVar3 = 7; break; } @@ -429,23 +525,27 @@ void Z2EnvSeMgr::initStaticEnvSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4, f32 dVar7; f32 dVar6; f32 fVar1; + if (-1.0f == field_0x60) { if (param_2 >= 100) { dVar7 = 1.0f; } else { dVar7 = 0.01f * param_2; } + if (param_3 == 0xff) { dVar6 = 1.0f; } else { dVar6 = 0.01f * param_3; } + if (param_4 == 0xff) { fVar1 = 0.0f; } else { field_0x3c = *param_5; fVar1 = 0.1f * param_4; } + if (field_0x38 != 0 && field_0x38 == param_1) { field_0x39 = 100; if (dVar7 != field_0x48) { @@ -455,6 +555,7 @@ void Z2EnvSeMgr::initStaticEnvSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4, field_0x48 = dVar7; field_0x54 = 0.0f; } + if (dVar6 != field_0x4c) { field_0x58 = (dVar6 - field_0x4c) / 100.0f; @@ -462,6 +563,7 @@ void Z2EnvSeMgr::initStaticEnvSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4, field_0x4c = dVar6; field_0x58 = 0.0f; } + if (fVar1 != field_0x50) { field_0x5c = (fVar1 - field_0x50) / 100.0f; @@ -477,6 +579,7 @@ void Z2EnvSeMgr::initStaticEnvSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4, field_0x58 = 0.0f; field_0x5c = 0.0f; } + switch (param_1) { case 1: field_0x0.setPanParam( @@ -561,15 +664,17 @@ void Z2EnvSeMgr::initStaticEnvSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4, 1.0f, false, true, 0.0018554000416770577f, 0.0008553999941796064f); } + field_0x38 = param_1; } } /* 802C70C8-802C780C 2C1A08 0744+00 2/1 1/1 0/0 .text startStaticEnvSe__10Z2EnvSeMgrFSc */ -bool Z2EnvSeMgr::startStaticEnvSe(s8 param_1) { +bool Z2EnvSeMgr::startStaticEnvSe(s8 reverb) { field_0x1b8 = 100; - f32 local_90 = param_1 / 127.0f; + + f32 local_90 = reverb / 127.0f; if (field_0x39 != 0) { field_0x48 += field_0x54; field_0x4c += field_0x58; @@ -581,26 +686,30 @@ bool Z2EnvSeMgr::startStaticEnvSe(s8 param_1) { field_0x5c = 0.0f; } } + field_0x0.calcPan(); field_0x1c.calcPan(); + JAISoundID aJStack_94; - JAISoundID aJStack_98 = 0xffffffff; + JAISoundID aJStack_98 = 0xFFFFFFFF; f32 local_9c = 1.0f; if (0.0f != field_0x50) { Vec VStack_8c; Z2GetAudience()->convertAbsToRel(field_0x3c, &VStack_8c, 0); local_9c = Z2GetAudience()->calcRelPosVolume(VStack_8c, field_0x50, 0); } + f32 dVar22 = field_0x48 * local_9c; f32 dVar21 = field_0x48 * local_9c; f32 dVar20 = field_0x4c; f32 dVar18 = field_0x4c; - u8 bVar15 = Z2GetStatusMgr()->getHour(); + u8 hour = Z2GetStatusMgr()->getHour(); + switch (field_0x38) { case 0: return false; case 1: - if (bVar15 >= 6 && bVar15 <= 18) { + if (hour >= 6 && hour <= 18) { aJStack_94 = Z2SE_ENV_FOREST_DAY; aJStack_98 = Z2SE_ENV_FORESTWIND; dVar21 *= 0.7f; @@ -610,7 +719,7 @@ bool Z2EnvSeMgr::startStaticEnvSe(s8 param_1) { } break; case 2: - if (bVar15 >= 6 && bVar15 <= 18) { + if (hour >= 6 && hour <= 18) { dVar22 *= 0.7f; dVar21 *= 0.7f; } @@ -630,36 +739,36 @@ bool Z2EnvSeMgr::startStaticEnvSe(s8 param_1) { dVar22 *= Z2Calc::getParamByExp(mSnowPower, 64.0f, 127.0f, 0.4f, 0.35f, - 1.0f, Z2Calc::CURVE_SIGN_1); + 1.0f, Z2Calc::CURVE_POSITIVE); dVar20 *= Z2Calc::getParamByExp(mSnowPower, 64.0f, 127.0f, 0.4f, 1.15f, - 1.6f, Z2Calc::CURVE_SIGN_1); + 1.6f, Z2Calc::CURVE_POSITIVE); dVar21 *= Z2Calc::getParamByExp(mSnowPower, 64.0f, 127.0f, 0.3f, 0.2f, - 1.0f, Z2Calc::CURVE_SIGN_1); + 1.0f, Z2Calc::CURVE_POSITIVE); dVar18 *= Z2Calc::getParamByExp(mSnowPower, 127.0f, 64.0f, 0.4f, 0.65f, - 0.9f, Z2Calc::CURVE_SIGN_0); + 0.9f, Z2Calc::CURVE_NEGATIVE); } else { dVar22 *= Z2Calc::getParamByExp(mSnowPower, 0.0f, 64.0f, 0.4f, 0.2f, - 0.35f, Z2Calc::CURVE_SIGN_0); + 0.35f, Z2Calc::CURVE_NEGATIVE); dVar20 *= Z2Calc::getParamByExp(mSnowPower, 0.0f, 64.0f, 0.3f, 1.0f, - 1.15f, Z2Calc::CURVE_SIGN_0); + 1.15f, Z2Calc::CURVE_NEGATIVE); dVar21 *= Z2Calc::getParamByExp(mSnowPower, 0.0f, 64.0f, 0.3f, 0.1f, - 0.2f, Z2Calc::CURVE_SIGN_0); + 0.2f, Z2Calc::CURVE_NEGATIVE); dVar18 *= ::Z2Calc::getParamByExp(mSnowPower, 64.0f, 0.0f, 0.4f, 0.9f, - 1.0f, Z2Calc::CURVE_SIGN_1); + 1.0f, Z2Calc::CURVE_POSITIVE); } break; case 11: @@ -670,7 +779,7 @@ bool Z2EnvSeMgr::startStaticEnvSe(s8 param_1) { aJStack_98 = Z2SE_ENV_WINDTAG_SLOW; break; case 6: - if (bVar15 >= 6 && bVar15 <= 18) { + if (hour >= 6 && hour <= 18) { dVar22 *= 0.1f; dVar21 *= 0.12f; } else { @@ -681,7 +790,7 @@ bool Z2EnvSeMgr::startStaticEnvSe(s8 param_1) { aJStack_98 = Z2SE_ENV_FIELD_WIND_R; break; case 10: - if (bVar15 >= 6 && bVar15 <= 18) { + if (hour >= 6 && hour <= 18) { dVar22 *= 0.1f; dVar21 *= 0.6f; } else { @@ -707,51 +816,51 @@ bool Z2EnvSeMgr::startStaticEnvSe(s8 param_1) { default: return false; } + dVar22 *= 1.0f - getFogDensity(); dVar21 *= 1.0f - getFogDensity(); if (Z2GetSceneMgr()->isInDarkness()) { dVar22 *= 0.75f; dVar21 *= 0.75f; } - JAISoundHandle* pJVar10 = field_0x0.getHandle(); - if (*pJVar10) { - if ((u32)(*pJVar10)->getID() != (u32)aJStack_94) { - (*pJVar10)->stop(0x1e); - (*pJVar10)->releaseHandle(); + + JAISoundHandle* handle = field_0x0.getHandle(); + if (*handle) { + if ((u32)(*handle)->getID() != (u32)aJStack_94) { + (*handle)->stop(30); + (*handle)->releaseHandle(); } } - pJVar10 = field_0x1c.getHandle(); - if (*pJVar10) { - if ((u32)(*pJVar10)->getID() != (u32)aJStack_98) { - (*pJVar10)->stop(0x1e); - (*pJVar10)->releaseHandle(); + + handle = field_0x1c.getHandle(); + if (*handle) { + if ((u32)(*handle)->getID() != (u32)aJStack_98) { + (*handle)->stop(30); + (*handle)->releaseHandle(); } } - bool iVar9 = field_0x0.startEnvSeAutoPanLevel(aJStack_94, local_90, - dVar22, dVar20); - bool iVar11 = field_0x1c.startEnvSeAutoPanLevel(aJStack_98, - local_90, dVar21, dVar18); + + bool iVar9 = field_0x0.startEnvSeAutoPanLevel(aJStack_94, local_90, dVar22, dVar20); + bool iVar11 = field_0x1c.startEnvSeAutoPanLevel(aJStack_98, local_90, dVar21, dVar18); + if (field_0x38 == 4) { - JAISoundHandle* pJVar10 = field_0x0.getHandle(); - JAISoundHandle* this_02 = field_0x1c.getHandle(); - if (*pJVar10) { - Z2GetSoundStarter()->setPortData(pJVar10, 6, mSnowPower, -1); + JAISoundHandle* handle = field_0x0.getHandle(); + JAISoundHandle* handle2 = field_0x1c.getHandle(); + if (*handle) { + Z2GetSoundStarter()->setPortData(handle, 6, mSnowPower, -1); } - if (*this_02) { - Z2GetSoundStarter()->setPortData(this_02, 6, mSnowPower, -1); + if (*handle2) { + Z2GetSoundStarter()->setPortData(handle2, 6, mSnowPower, -1); } } - bool rv = 0; - if (iVar9 && iVar11) { - rv = 1; - } - return rv; + + return iVar9 && iVar11; } /* 802C780C-802C7830 2C214C 0024+00 0/0 1/1 0/0 .text registWindowPos__10Z2EnvSeMgrFP3Vec */ -void Z2EnvSeMgr::registWindowPos(Vec* param_0) { - field_0x64.registMultiSePos(param_0); +void Z2EnvSeMgr::registWindowPos(Vec* posPtr) { + field_0x64.registMultiSePos(posPtr); } /* 802C7830-802C7CF4 2C2170 04C4+00 1/1 1/1 0/0 .text startRainSe__10Z2EnvSeMgrFlSc */ @@ -759,12 +868,15 @@ bool Z2EnvSeMgr::startRainSe(s32 param_1, s8 param_2) { if (mSnowPower > 0) { return false; } + mSnowPower = 1; + JAISoundID aJStack_118 = 0xffffffff; JAISoundID aJStack_11c = 0xffffffff; JAISoundID aJStack_120 = 0xffffffff; f32 dVar21 = param_2 / 127.0f; s8 unaff_r29; + switch (param_1) { case 0: aJStack_118 = Z2SE_ENV_RAIN_NORMAL_L; @@ -787,60 +899,49 @@ bool Z2EnvSeMgr::startRainSe(s32 param_1, s8 param_2) { } if (field_0x64.getPosCount() < 0) { - f32 dVar13 = - Z2Calc::linearTransform(field_0x90.calcNoise1f(), 0.0f, 1.0f, 0.7f, 1.0f, true); - f32 dVar14 = - Z2Calc::linearTransform(field_0xa0.calcNoise1f(), 0.0f, 1.0f, 0.7f, 1.0f, true); - f32 dVar15 = - Z2Calc::linearTransform(field_0xd0.calcNoise1f(), 0.0f, 1.0f, 0.8f, 1.1f, true); - f32 dVar16 = - Z2Calc::linearTransform(field_0xe0.calcNoise1f(), 0.0f, 1.0f, 0.8f, 1.1f, true); - f32 dVar17 = Z2Calc::getParamByExp(field_0xb0.calcNoise1f(), 0.0f, 1.0f, 0.3f, 0.0f, 0.3f, - Z2Calc::CURVE_SIGN_1); - f32 dVar18 = Z2Calc::getParamByExp(field_0xc0.calcNoise1f(), 0.0f, 1.0f, 0.3f, 1.0f, 0.7f, - Z2Calc::CURVE_SIGN_1); - f32 dVar19 = Z2Calc::getParamByExp(field_0xf0.calcNoise1f(), 0.0f, 1.0f, 0.3f, 0.0f, 1.0f, - Z2Calc::CURVE_SIGN_1); - f32 dVar20 = Z2Calc::getParamByExp(field_0x100.calcNoise1f(), 0.0f, 1.0f, 0.3f, 0.0f, 1.0f, - Z2Calc::CURVE_SIGN_1); + f32 dVar13 = Z2Calc::linearTransform(field_0x90.calcNoise1f(), 0.0f, 1.0f, 0.7f, 1.0f, true); + f32 dVar14 = Z2Calc::linearTransform(field_0xa0.calcNoise1f(), 0.0f, 1.0f, 0.7f, 1.0f, true); + f32 dVar15 = Z2Calc::linearTransform(field_0xd0.calcNoise1f(), 0.0f, 1.0f, 0.8f, 1.1f, true); + f32 dVar16 = Z2Calc::linearTransform(field_0xe0.calcNoise1f(), 0.0f, 1.0f, 0.8f, 1.1f, true); + f32 dVar17 = Z2Calc::getParamByExp(field_0xb0.calcNoise1f(), 0.0f, 1.0f, 0.3f, 0.0f, 0.3f, Z2Calc::CURVE_POSITIVE); + f32 dVar18 = Z2Calc::getParamByExp(field_0xc0.calcNoise1f(), 0.0f, 1.0f, 0.3f, 1.0f, 0.7f, Z2Calc::CURVE_POSITIVE); + f32 dVar19 = Z2Calc::getParamByExp(field_0xf0.calcNoise1f(), 0.0f, 1.0f, 0.3f, 0.0f, 1.0f, Z2Calc::CURVE_POSITIVE); + f32 dVar20 = Z2Calc::getParamByExp(field_0x100.calcNoise1f(), 0.0f, 1.0f, 0.3f, 0.0f, 1.0f, Z2Calc::CURVE_POSITIVE); + if (Z2GetSceneMgr()->isInDarkness()) { dVar13 *= 0.5f; dVar14 *= 0.5f; } - JAISoundHandle* pJVar8 = field_0x80.getHandle(); - if (*pJVar8) { - if ((*pJVar8)->getID() != (u32)aJStack_118) { - (*pJVar8)->stop(0x1e); - (*pJVar8)->releaseHandle(); + + JAISoundHandle* handle = field_0x80.getHandle(); + if (*handle) { + if ((*handle)->getID() != (u32)aJStack_118) { + (*handle)->stop(30); + (*handle)->releaseHandle(); } } - pJVar8 = field_0x88.getHandle(); - if (*pJVar8) { - if ((*pJVar8)->getID() != (u32)aJStack_11c) { - (*pJVar8)->stop(0x1e); - (*pJVar8)->releaseHandle(); + + handle = field_0x88.getHandle(); + if (*handle) { + if ((*handle)->getID() != (u32)aJStack_11c) { + (*handle)->stop(30); + (*handle)->releaseHandle(); } } - bool iVar7 = - field_0x80.startEnvSeLevel(aJStack_118, dVar21, dVar13, dVar17, dVar19, dVar15, 0); - bool iVar9 = - field_0x88.startEnvSeLevel(aJStack_11c, dVar21, dVar14, dVar18, dVar20, dVar16, 0); - bool uVar5 = 0; - if (iVar7 && iVar9) { - uVar5 = 1; - } - return uVar5; + bool iVar7 = field_0x80.startEnvSeLevel(aJStack_118, dVar21, dVar13, dVar17, dVar19, dVar15, 0); + bool iVar9 = field_0x88.startEnvSeLevel(aJStack_11c, dVar21, dVar14, dVar18, dVar20, dVar16, 0); + return iVar7 && iVar9; } f32 dVar13 = Z2Calc::linearTransform(field_0x90.calcNoise1f(), 0.0f, 1.0f, 0.7f, 1.0f, true); f32 dVar14 = Z2Calc::linearTransform(field_0xd0.calcNoise1f(), 0.0f, 1.0f, 0.8f, 1.1f, true); - JAISoundHandle* pJVar8 = field_0x80.getHandle(); - if (*pJVar8) { - if ((*pJVar8)->getID() != (u32)aJStack_120) { - (*pJVar8)->stop(0x1e); - (*pJVar8)->releaseHandle(); + JAISoundHandle* handle = field_0x80.getHandle(); + if (*handle) { + if ((*handle)->getID() != (u32)aJStack_120) { + (*handle)->stop(30); + (*handle)->releaseHandle(); } } @@ -858,8 +959,7 @@ void Z2EnvSeMgr::startNearThunderSe(s8 param_1) { dVar10 += 0.5f; f32 dVar8 = Z2Calc::getRandom(0.25f, Z2Calc::cEqualCSlope, Z2Calc::cEqualPSlope); dVar8 += 0.5f; - field_0x118.startEnvSe(Z2SE_ENV_THUNDER_NEAR, param_1 / 127.0f, 1.0f, dVar10, dVar8, 1.0f, - 0); + field_0x118.startEnvSe(Z2SE_ENV_THUNDER_NEAR, param_1 / 127.0f, 1.0f, dVar10, dVar8, 1.0f, 0); } else { f32 maxVolume = field_0x64.getMaxVolume(); field_0x118.startEnvSe(Z2SE_ENV_THUND_NEAR_WIN, param_1 / 127.0f, maxVolume, @@ -868,20 +968,20 @@ void Z2EnvSeMgr::startNearThunderSe(s8 param_1) { } /* 802C7E68-802C7FB4 2C27A8 014C+00 0/0 2/2 0/0 .text startFarThunderSe__10Z2EnvSeMgrFP3VecSc */ -void Z2EnvSeMgr::startFarThunderSe(Vec* param_1, s8 param_2) { +void Z2EnvSeMgr::startFarThunderSe(Vec* posPtr, s8 reverb) { if (field_0x64.getPosCount() < 0) { - field_0x110.setPos(param_1); - field_0x110.startEnvSe(Z2SE_ENV_THUNDER_FAR, param_2 / 127.0f, 1.0f, 0.5f, 0.0f, 1.0f, 0); + field_0x110.setPos(posPtr); + field_0x110.startEnvSe(Z2SE_ENV_THUNDER_FAR, reverb / 127.0f, 1.0f, 0.5f, 0.0f, 1.0f, 0); } else { f32 maxVolume = field_0x64.getMaxVolume(); - field_0x110.startEnvSe(Z2SE_ENV_THUND_FAR_WIN, param_2 / 127.0f, maxVolume, + field_0x110.startEnvSe(Z2SE_ENV_THUND_FAR_WIN, reverb / 127.0f, maxVolume, field_0x64.getPanPower(), field_0x64.getDolbyPower(), 1.0f, 0); } } /* 802C7FB4-802C7FBC -00001 0008+00 0/0 0/0 0/0 .text setSnowPower__10Z2EnvSeMgrFSc */ -void Z2EnvSeMgr::setSnowPower(s8 param_0) { - mSnowPower = param_0; +void Z2EnvSeMgr::setSnowPower(s8 power) { + mSnowPower = power; } /* 802C7FBC-802C7FC8 2C28FC 000C+00 0/0 1/1 1/1 .text initStrongWindSe__10Z2EnvSeMgrFv */ @@ -890,18 +990,19 @@ void Z2EnvSeMgr::initStrongWindSe() { } /* 802C7FC8-802C800C 2C2908 0044+00 0/0 1/1 1/1 .text setWindDirection__10Z2EnvSeMgrFP3Vec */ -void Z2EnvSeMgr::setWindDirection(Vec* param_0) { +void Z2EnvSeMgr::setWindDirection(Vec* dir) { if (mWindType == WIND_TYPE_3) { field_0x144.setPanDir(const_cast<Vec*>(&Z2Calc::cNullVec)); } else { - field_0x144.setPanDir(param_0); + field_0x144.setPanDir(dir); } } /* 802C800C-802C80F8 2C294C 00EC+00 0/0 1/1 1/1 .text startStrongWindSe__10Z2EnvSeMgrFSc */ -bool Z2EnvSeMgr::startStrongWindSe(s8 param_1) { +bool Z2EnvSeMgr::startStrongWindSe(s8 reverb) { field_0x144.calcPan(1.0f); + JAISoundID aJStack_24 = 0xffffffff; switch (mWindType) { case WIND_TYPE_1: @@ -917,7 +1018,8 @@ bool Z2EnvSeMgr::startStrongWindSe(s8 param_1) { return false; } - return field_0x144.startEnvSeDirLevel(aJStack_24, param_1 / 127.0f, 1.0f); + f32 fxMix = reverb / 127.0f; + return field_0x144.startEnvSeDirLevel(aJStack_24, fxMix, 1.0f); } /* 802C80F8-802C8234 2C2A38 013C+00 0/0 1/1 0/0 .text initRiverSe__10Z2EnvSeMgrFUcUcUcUc @@ -929,16 +1031,19 @@ void Z2EnvSeMgr::initRiverSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) { } else { field_0x1ac = 0.01f * param_2; } + if (param_3 == 0xff) { field_0x1b0 = 1.0f; } else { field_0x1b0 = 0.01f * param_3; } + if (param_4 == 0xff) { field_0x1b4 = 1.0f; } else { field_0x1b4 = 0.1f * param_4; } + switch (param_1) { case 1: mRiverSeMgr.setVolumeScale(1.5f * field_0x1b4); @@ -956,14 +1061,21 @@ void Z2EnvSeMgr::initRiverSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) { } /* 802C8234-802C8258 2C2B74 0024+00 1/1 1/1 0/0 .text registRiverSePos__10Z2EnvSeMgrFP3Vec */ -void Z2EnvSeMgr::registRiverSePos(Vec* param_0) { - mRiverSeMgr.registMultiSePos(param_0); +void Z2EnvSeMgr::registRiverSePos(Vec* posPtr) { + f32 var_f31; + if (posPtr != NULL) { + + } else { + var_f31 = posPtr->z; + } + + mRiverSeMgr.registMultiSePos(posPtr); } /* 802C8258-802C8300 2C2B98 00A8+00 0/0 0/0 1/1 .text setHyrulSewerOpen__10Z2EnvSeMgrFb */ -void Z2EnvSeMgr::setHyrulSewerOpen(bool param_0) { - if (param_0) { +void Z2EnvSeMgr::setHyrulSewerOpen(bool isSewerOpen) { + if (isSewerOpen) { field_0x1b8 = 1; Z2GetSeMgr()->seStart(Z2SE_ENV_SEWER_FILL, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } else { @@ -975,16 +1087,16 @@ void Z2EnvSeMgr::setHyrulSewerOpen(bool param_0) { /* 802C8300-802C8730 2C2C40 0430+00 2/1 1/1 0/0 .text startRiverSe__10Z2EnvSeMgrFSc */ bool Z2EnvSeMgr::startRiverSe(s8 param_1) { #ifdef DEBUG - char* spotName = sSpotName; + const char** spotName = sSpotName; #endif if (Z2GetStatusMgr()->mCameraMapInfo == 6) { switch (Z2GetSceneMgr()->getCurrentSceneNum()) { - case 5: + case Z2SCENE_FARON_WOODS: if (Z2GetSceneMgr()->getCurrentRoomNum() != 1) { break; } - case 0x10: + case Z2SCENE_LAKE_HYLIA: if (Z2GetStatusMgr()->mPolygonPosition.y < -14500.0f) { break; } @@ -992,16 +1104,17 @@ bool Z2EnvSeMgr::startRiverSe(s8 param_1) { if ((Z2GetStatusMgr()->mPolygonPosition.y > 2000.0f)) { break; } - case 0x15: - case 0x1e: - case 0x1f: - case 0x2e: + case Z2SCENE_ZORAS_DOMAIN: + case Z2SCENE_HYRULE_FIELD: + case Z2SCENE_CASTLE_TOWN_GATES: + case Z2SCENE_LAKEBED_TEMPLE: break; default: registRiverSePos(&Z2GetStatusMgr()->mPolygonPosition); break; } } + if (mRiverSeMgr.getPosCount() < 0) { return false; } @@ -1080,16 +1193,19 @@ void Z2EnvSeMgr::initFallSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) { } else { field_0x1e4 = 0.01f * param_2; } + if (param_3 == 0xff) { field_0x1e8 = 1.0f; } else { field_0x1e8 = 0.01f * param_3; } + if (param_4 == 0xff) { field_0x1ec = 1.0f; } else { field_0x1ec = 0.1f * param_4; } + switch (param_1) { case 8: mFallSeMgr.setVolumeScale(3.0f * field_0x1ec); @@ -1108,40 +1224,49 @@ void Z2EnvSeMgr::initFallSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) { /* 802C886C-802C8890 2C31AC 0024+00 0/0 1/1 0/0 .text registFallSePos__10Z2EnvSeMgrFP3Vec */ -void Z2EnvSeMgr::registFallSePos(Vec* param_0) { - mFallSeMgr.registMultiSePos(param_0); +void Z2EnvSeMgr::registFallSePos(Vec* posPtr) { + f32 var_f31; + if (posPtr != NULL) { + + } else { + var_f31 = posPtr->z; + } + + mFallSeMgr.registMultiSePos(posPtr); } /* 802C8890-802C8A90 2C31D0 0200+00 1/1 1/1 0/0 .text startFallSe__10Z2EnvSeMgrFSc */ -bool Z2EnvSeMgr::startFallSe(s8 param_1) { +bool Z2EnvSeMgr::startFallSe(s8 reverb) { if (mFallSeMgr.getPosCount() < 0) { return false; } - JAISoundID aJStack_80 = 0xffffffff; - f32 dVar14 = param_1 / 127.0f; - f32 dVar13 = ((field_0x1e4 * mFallSeMgr.getMaxVolume()) * - Z2Calc::linearTransform(field_0x90.calcNoise1f(), 0.0f, 1.0f, 0.7f, 1.0f, true)); - f32 dVar15 = (field_0x1e8 * - Z2Calc::linearTransform(field_0xd0.calcNoise1f(), 0.0f, 1.0f, 0.8f, 1.1f, true)); - f32 dVar11 = mFallSeMgr.getPanPower(); - f32 dVar12 = mFallSeMgr.getDolbyPower(); + + JAISoundID soundID = 0xffffffff; + bool rv = false; + + f32 fxMix = reverb / 127.0f; + f32 volume = ((field_0x1e4 * mFallSeMgr.getMaxVolume()) * Z2Calc::linearTransform(field_0x90.calcNoise1f(), 0.0f, 1.0f, 0.7f, 1.0f, true)); + f32 pitch = (field_0x1e8 * Z2Calc::linearTransform(field_0xd0.calcNoise1f(), 0.0f, 1.0f, 0.8f, 1.1f, true)); + f32 pan = mFallSeMgr.getPanPower(); + f32 dolby = mFallSeMgr.getDolbyPower(); + switch (field_0x1e0) { case 8: - aJStack_80 = Z2SE_ENV_WATERFALL_NORMAL; + soundID = Z2SE_ENV_WATERFALL_NORMAL; break; case 9: - aJStack_80 = Z2SE_ENV_FALL_LV1BOSS; + soundID = Z2SE_ENV_FALL_LV1BOSS; break; case 10: - aJStack_80 = Z2SE_ENV_SPIRIT_FALL; - dVar15 *= 0.75f; + soundID = Z2SE_ENV_SPIRIT_FALL; + pitch *= 0.75f; break; case 11: - aJStack_80 = Z2SE_ENV_SAND_FALL; + soundID = Z2SE_ENV_SAND_FALL; break; } - bool rv = field_0x1d8.startEnvSeLevel(aJStack_80, dVar14, dVar13, dVar11, dVar12, dVar15, 0); + rv = field_0x1d8.startEnvSeLevel(soundID, fxMix, volume, pan, dolby, pitch, 0); mFallSeMgr.resetMultiSePos(); return rv; } @@ -1154,16 +1279,19 @@ void Z2EnvSeMgr::initEtcSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) { } else { field_0x218 = 0.01f * param_2; } + if (param_3 == 0xff) { field_0x21c = 1.0f; } else { field_0x21c = 0.01f * param_3; } + if (param_4 == 0xff) { field_0x220 = 1.0f; } else { field_0x220 = 0.1f * param_4; } + switch (param_1) { case 17: mEtcSeMgr.setVolumeScale(2.0f * field_0x220); @@ -1193,13 +1321,17 @@ void Z2EnvSeMgr::initEtcSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) { /* 802C8C24-802C8C48 2C3564 0024+00 1/1 1/1 0/0 .text registEtcSePos__10Z2EnvSeMgrFP3Vec */ -void Z2EnvSeMgr::registEtcSePos(Vec* param_0) { - mEtcSeMgr.registMultiSePos(param_0); +void Z2EnvSeMgr::registEtcSePos(Vec* posPtr) { + mEtcSeMgr.registMultiSePos(posPtr); } /* 802C8C48-802C92C8 2C3588 0680+00 2/1 1/1 0/0 .text startEtcSe__10Z2EnvSeMgrFSc */ -bool Z2EnvSeMgr::startEtcSe(s8 param_1) { - f32 dVar17 = param_1 / 127.0f; +bool Z2EnvSeMgr::startEtcSe(s8 reverb) { + #ifdef DEBUG + const char** spotName = sSpotName; + #endif + + f32 dVar17 = reverb / 127.0f; f32 dVar19 = (field_0x218 * mEtcSeMgr.getMaxVolume()); f32 dVar14 = mEtcSeMgr.getPanPower(); f32 dVar15 = mEtcSeMgr.getDolbyPower(); @@ -1207,6 +1339,7 @@ bool Z2EnvSeMgr::startEtcSe(s8 param_1) { f32 dVar18 = field_0x21c; f32 local_90, local_98, local_9c, local_a0; bool iVar5, iVar6, iVar7, iVar8; + switch (field_0x214) { case 0x11: local_90 = Z2Calc::linearTransform(field_0x120.calcNoise1f(), 0.0f, 1.0f, 0.01f, 1.0f, @@ -1221,11 +1354,7 @@ bool Z2EnvSeMgr::startEtcSe(s8 param_1) { iVar6 = field_0x0.startEnvSeAutoPanLevel(JA_SE_ATM_WIND_1, dVar17, local_90, dVar18); iVar7 = field_0x1c.startEnvSeAutoPanLevel(JA_SE_ATM_WIND_1, dVar17, 0.7f * local_90, (0.8f * dVar18)); - iVar5 = false; - if (iVar8 && iVar6 && iVar7) { - iVar5 = true; - } - rv = iVar5; + rv = iVar8 && iVar6 && iVar7; break; case 0x12: local_90 = ::Z2Calc::linearTransform(field_0x120.calcNoise1f(), 0.0f, 1.0f, 0.4f, 0.8f, @@ -1291,9 +1420,9 @@ bool Z2EnvSeMgr::startEtcSe(s8 param_1) { break; case 0x10: local_98 = Z2Calc::getParamByExp(getFogDensity(), 0.4f, 1.0f, 0.2f, 0.2f, 1.0f, - Z2Calc::CURVE_SIGN_0); + Z2Calc::CURVE_NEGATIVE); local_9c = Z2Calc::getParamByExp(getFogDensity(), 0.4f, 1.0f, 0.2f, 0.75f, 1.0f, - Z2Calc::CURVE_SIGN_0); + Z2Calc::CURVE_NEGATIVE); local_a0 = field_0x2e8.calcNoise1f(); rv = field_0x240.startEnvSeLevel(Z2SE_ENV_PUPPET_FOG_L, 0.3f, (dVar19 * ((0.332f + 0.668f * local_a0) * local_98)), @@ -1306,37 +1435,40 @@ bool Z2EnvSeMgr::startEtcSe(s8 param_1) { default: return false; } + mEtcSeMgr.resetMultiSePos(); return rv; } /* 802C92C8-802C92EC 2C3C08 0024+00 0/0 0/0 1/1 .text registWolfSmellSePos__10Z2EnvSeMgrFP3Vec */ -void Z2EnvSeMgr::registWolfSmellSePos(Vec* param_0) { - mWolfSmellSeMgr.registMultiSePos(param_0); +void Z2EnvSeMgr::registWolfSmellSePos(Vec* posPtr) { + mWolfSmellSeMgr.registMultiSePos(posPtr); } /* 802C92EC-802C93A0 2C3C2C 00B4+00 0/0 0/0 1/1 .text startFogWipeTrigger__10Z2EnvSeMgrFP3Vec */ -bool Z2EnvSeMgr::startFogWipeTrigger(Vec* param_0) { +void Z2EnvSeMgr::startFogWipeTrigger(Vec* pos) { + JUT_ASSERT(1919, pos); + if (*field_0x240.getHandle()) { f32 fogDensity = getFogDensity(); u32 fogDensity2 = 340.0f * getFogDensity(); - return Z2GetSoundStarter()->startSound(Z2SE_ENV_FOG_WIPE, field_0x20c.getHandle(), - (JGeometry::TVec3<f32>*)param_0, fogDensity2, 0.3f, + Z2GetSoundStarter()->startSound(Z2SE_ENV_FOG_WIPE, field_0x20c.getHandle(), + (JGeometry::TVec3<f32>*)pos, fogDensity2, 0.3f, 1.0f, fogDensity, -1.0f, -1.0f, 0); } - //! @bug does not always return a value } /* 802C93A0-802C93E4 2C3CE0 0044+00 0/0 0/0 1/1 .text setFogWipeWidth__10Z2EnvSeMgrFf */ -void Z2EnvSeMgr::setFogWipeWidth(f32 param_0) { - mFogDensity = Z2Calc::linearTransform(param_0, 0.0f, 1.0f, 1.0f, 0.4f, true); +void Z2EnvSeMgr::setFogWipeWidth(f32 width) { + mFogDensity = Z2Calc::linearTransform(width, 0.0f, 1.0f, 1.0f, 0.4f, true); } /* 802C93E4-802C9400 2C3D24 001C+00 3/3 2/2 0/0 .text getFogDensity__10Z2EnvSeMgrFv */ f32 Z2EnvSeMgr::getFogDensity() { - if (field_0x214 == 0x10) { + if (field_0x214 == 16) { return mFogDensity; } + return 0.0f; } @@ -1352,16 +1484,15 @@ bool Z2EnvSeMgr::startFogSe() { f32 dVar12 = 0.5f - (dVar10 * fVar2) / 2; int iVar1 = 20; f32 fVar3 = 0.5f; - bool iVar6 = - field_0x240.startEnvSeLevel(Z2SE_ENV_PUPPET_FOG_L, iVar1, dVar14, dVar12, fVar3, dVar13, 0); + bool iVar6 = field_0x240.startEnvSeLevel(Z2SE_ENV_PUPPET_FOG_L, iVar1, dVar14, dVar12, fVar3, dVar13, 0); + dVar10 = field_0x2f8.calcNoise1f(); dVar14 = (ratio + ((1.0f - ratio) * dVar10)); dVar13 = ((1.0f - fVar1) + dVar10 * fVar1); dVar12 = (0.5f + (dVar10 * fVar2) / 2); iVar1 = 20; fVar3 = 0.5f; - iVar5 = field_0x274.startEnvSeLevel(Z2SE_ENV_PUPPET_FOG_R, iVar1, dVar14, dVar12, fVar3, - dVar13, 0); + iVar5 = field_0x274.startEnvSeLevel(Z2SE_ENV_PUPPET_FOG_R, iVar1, dVar14, dVar12, fVar3, dVar13, 0); return (iVar6 && iVar5); } @@ -1396,11 +1527,13 @@ void Z2EnvSeMgr::initLv3WaterSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) } else { field_0x24c = 0.01f * param_2; } + if (param_3 == 0xff) { field_0x250 = 1.0f; } else { field_0x250 = 0.01f * param_3; } + if (param_4 == 0xff) { field_0x254 = 1.0f; } else { @@ -1415,16 +1548,19 @@ void Z2EnvSeMgr::initLv3WaterSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) } else { field_0x280 = 0.01f * param_2; } + if (param_3 == 0xff) { field_0x284 = 1.0f; } else { field_0x284 = 0.01f * param_3; } + if (param_4 == 0xff) { field_0x288 = 1.0f; } else { field_0x288 = 0.1f * param_4; } + field_0x258.setVolumeScale(2.0f * field_0x288); break; case 116: @@ -1434,16 +1570,19 @@ void Z2EnvSeMgr::initLv3WaterSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) } else { field_0x280 = 0.01f * param_2; } + if (param_3 == 0xff) { field_0x284 = 1.0f; } else { field_0x284 = 0.01f * param_3; } + if (param_4 == 0xff) { field_0x288 = 1.0f; } else { field_0x288 = 0.1f * param_4; } + field_0x258.setVolumeScale(1.5f * field_0x288); break; case 112: @@ -1453,16 +1592,19 @@ void Z2EnvSeMgr::initLv3WaterSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) } else { field_0x2b4 = 0.01f *param_2; } + if (param_3 == 0xff) { field_0x2b8 = 1.0f; } else { field_0x2b8 = 0.01f * param_3; } + if (param_4 == 0xff) { field_0x2bc = 1.0f; } else { field_0x2bc = 0.1f * param_4; } + field_0x28c.setVolumeScale(2.0f * field_0x2bc); break; case 117: @@ -1472,39 +1614,45 @@ void Z2EnvSeMgr::initLv3WaterSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) } else { field_0x2b4 = 0.01f * param_2; } + if (param_3 == 0xff) { field_0x2b8 = 1.0f; } else { field_0x2b8 = 0.01f * param_3; } + if (param_4 == 0xff) { field_0x2bc = 1.0f; } else { field_0x2bc = 0.1f * param_4; } + field_0x28c.setVolumeScale(1.5f * field_0x2bc); break; - case 'w': + case 0x77: field_0x2b0 = param_1; if (param_2 >= 100) { field_0x2b4 = 1.0f; } else { field_0x2b4 = 0.01f * param_2; } + if (param_3 == 0xff) { field_0x2b8 = 1.0f; } else { field_0x2b8 = 0.01f * param_3; } + if (param_4 == 0xff) { field_0x2bc = 1.0f; } else { field_0x2bc = 0.1f * param_4; } + field_0x28c.setVolumeScale(3.0f * field_0x2bc); break; default: - if (Z2GetSceneMgr()->getCurrentSceneNum() == 46) { + if (Z2GetSceneMgr()->getCurrentSceneNum() == Z2SCENE_LAKEBED_TEMPLE) { switch (Z2GetSceneMgr()->getCurrentRoomNum()) { case 1: if (param_1 == 107) { @@ -1565,7 +1713,7 @@ void Z2EnvSeMgr::initLv3WaterSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) initFallSe(9, param_2, 0xa0, param_4); } break; - case 0xb: + case 11: if (param_1 == 100 || param_1 == 101) { initEtcSe(0x1e, param_2, param_3, param_4); } else if (param_1 == 103) { @@ -1574,14 +1722,14 @@ void Z2EnvSeMgr::initLv3WaterSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) initFallSe(9, param_2, 0x82, param_4); } break; - case 0xc: + case 12: if (param_1 == 103) { initLv3WaterSe(115, param_2, param_3, param_4); } else if (param_1 == 107) { initLv3WaterSe(111, param_2, 0x82, param_4); } break; - case 0xd: + case 13: if ((param_1 == 100) || (param_1 == 101)) { initEtcSe(0x1e, param_2, param_3, param_4); } else if (param_1 == 103) { @@ -1599,163 +1747,165 @@ void Z2EnvSeMgr::initLv3WaterSe(u8 param_1, u8 param_2, u8 param_3, u8 param_4) } /* 802C9F58-802CA794 2C4898 083C+00 2/0 1/1 0/0 .text registLv3WaterSePos__10Z2EnvSeMgrFUcP3Vec */ -void Z2EnvSeMgr::registLv3WaterSePos(u8 param_1, Vec* param_2) { +void Z2EnvSeMgr::registLv3WaterSePos(u8 param_1, Vec* posPtr) { switch (param_1) { case 110: case 115: - field_0x224.registMultiSePos(param_2); + field_0x224.registMultiSePos(posPtr); break; case 111: case 116: - field_0x258.registMultiSePos(param_2); + field_0x258.registMultiSePos(posPtr); break; case 112: case 117: case 119: - field_0x28c.registMultiSePos(param_2); + field_0x28c.registMultiSePos(posPtr); break; default: switch (Z2GetSceneMgr()->getCurrentRoomNum()) { case 1: if (param_1 == 107) { - mFallSeMgr.registMultiSePos(param_2); + mFallSeMgr.registMultiSePos(posPtr); } case 0: case 5: case 6: case 9: if (param_1 == 100) { - mEtcSeMgr.registMultiSePos(param_2); + mEtcSeMgr.registMultiSePos(posPtr); } break; case 2: if (param_1 == 100) { - mEtcSeMgr.registMultiSePos(param_2); + mEtcSeMgr.registMultiSePos(posPtr); } else if (param_1 == 103 && dComIfGs_isSaveSwitch(8)) { - field_0x224.registMultiSePos(param_2); + field_0x224.registMultiSePos(posPtr); } else if (param_1 == 104 && dComIfGs_isSaveSwitch(9)) { - field_0x224.registMultiSePos(param_2); + field_0x224.registMultiSePos(posPtr); } else if (param_1 == 105 && dComIfGs_isSaveSwitch(8) && dComIfGs_isSaveSwitch(3)) { - field_0x224.registMultiSePos(param_2); + field_0x224.registMultiSePos(posPtr); } else if (param_1 == 106 && dComIfGs_isSaveSwitch(9) && dComIfGs_isSaveSwitch(1)) { - field_0x224.registMultiSePos(param_2); + field_0x224.registMultiSePos(posPtr); } break; case 3: if (param_1 == 100 && !dComIfGs_isSaveSwitch(8) && !dComIfGs_isSaveSwitch(9)) { - mEtcSeMgr.registMultiSePos(param_2); + mEtcSeMgr.registMultiSePos(posPtr); } else if ((param_1 == 101 && dComIfGs_isSaveSwitch(8) && (!dComIfGs_isSaveSwitch(9))) || (!dComIfGs_isSaveSwitch(8) && dComIfGs_isSaveSwitch(9))) { - mEtcSeMgr.registMultiSePos(param_2); + mEtcSeMgr.registMultiSePos(posPtr); } else if (param_1 == 102 && dComIfGs_isSaveSwitch(8) && dComIfGs_isSaveSwitch(9)) { - mEtcSeMgr.registMultiSePos(param_2); + mEtcSeMgr.registMultiSePos(posPtr); } if (param_1 == 103 && dComIfGs_isSaveSwitch(8)) { - field_0x224.registMultiSePos(param_2); + field_0x224.registMultiSePos(posPtr); } if (param_1 == 104 && dComIfGs_isSaveSwitch(9)) { - field_0x224.registMultiSePos(param_2); + field_0x224.registMultiSePos(posPtr); } if (param_1 == 105 && dComIfGs_isSaveSwitch(8) && dComIfGs_isSaveSwitch(3)) { - field_0x28c.registMultiSePos(param_2); + field_0x28c.registMultiSePos(posPtr); } else if (param_1 == 107 && dComIfGs_isSaveSwitch(8) && !dComIfGs_isSaveSwitch(3)) { - field_0x258.registMultiSePos(param_2); + field_0x258.registMultiSePos(posPtr); } if (param_1 == 106 && dComIfGs_isSaveSwitch(9) && dComIfGs_isSaveSwitch(1)) { - field_0x28c.registMultiSePos(param_2); + field_0x28c.registMultiSePos(posPtr); } else if (param_1 == 108 && dComIfGs_isSaveSwitch(9) && !dComIfGs_isSaveSwitch(1)) { - field_0x258.registMultiSePos(param_2); + field_0x258.registMultiSePos(posPtr); } break; case 7: if (dComIfGs_isSaveSwitch(8)) { if (param_1 == 103) { - field_0x224.registMultiSePos(param_2); + field_0x224.registMultiSePos(posPtr); } else if (param_1 == 107) { - mFallSeMgr.registMultiSePos(param_2); + mFallSeMgr.registMultiSePos(posPtr); } } break; case 8: if (dComIfGs_isSaveSwitch(9) && dComIfGs_isSaveSwitch(1)) { if (param_1 == 101) { - mEtcSeMgr.registMultiSePos(param_2); + mEtcSeMgr.registMultiSePos(posPtr); } else if (param_1 == 103) { - field_0x224.registMultiSePos(param_2); + field_0x224.registMultiSePos(posPtr); } else if (param_1 == 107) { - field_0x258.registMultiSePos(param_2); + field_0x258.registMultiSePos(posPtr); } } else if (param_1 == 100) { - mEtcSeMgr.registMultiSePos(param_2); + mEtcSeMgr.registMultiSePos(posPtr); } break; case 10: if ((param_1 == 100) && dComIfGs_isSaveSwitch(0x31)) { - mEtcSeMgr.registMultiSePos(param_2); + mEtcSeMgr.registMultiSePos(posPtr); } else if (param_1 == 103 && dComIfGs_isSaveSwitch(0x31)) { - field_0x28c.registMultiSePos(param_2); + field_0x28c.registMultiSePos(posPtr); } else if (param_1 == 104 && (dComIfGs_isSaveSwitch(8))) { - field_0x258.registMultiSePos(param_2); + field_0x258.registMultiSePos(posPtr); } else if (param_1 == 107 && dComIfGs_isSaveSwitch(0x31)) { - mFallSeMgr.registMultiSePos(param_2); + mFallSeMgr.registMultiSePos(posPtr); } break; case 11: if (dComIfGs_isSaveSwitch(9)) { if (param_1 == 101) { - mEtcSeMgr.registMultiSePos(param_2); + mEtcSeMgr.registMultiSePos(posPtr); } else if (param_1 == 103) { - field_0x224.registMultiSePos(param_2); + field_0x224.registMultiSePos(posPtr); } else if (param_1 == 107) { - mFallSeMgr.registMultiSePos(param_2); + mFallSeMgr.registMultiSePos(posPtr); } } else if (param_1 == 100) { - mEtcSeMgr.registMultiSePos(param_2); + mEtcSeMgr.registMultiSePos(posPtr); } break; case 12: if (dComIfGs_isSaveSwitch(8) && dComIfGs_isSaveSwitch(3)) { if (param_1 == 103) { - field_0x224.registMultiSePos(param_2); + field_0x224.registMultiSePos(posPtr); } else if (param_1 == 107) { - field_0x258.registMultiSePos(param_2); + field_0x258.registMultiSePos(posPtr); } } break; case 13: if (dComIfGs_isSaveSwitch(0x30)) { if (param_1 == 101) { - mEtcSeMgr.registMultiSePos(param_2); + mEtcSeMgr.registMultiSePos(posPtr); } else if (param_1 == 103) { - field_0x28c.registMultiSePos(param_2); + field_0x28c.registMultiSePos(posPtr); } else if ((param_1 == 104) && (dComIfGs_isSaveSwitch(9))) { - field_0x258.registMultiSePos(param_2); + field_0x258.registMultiSePos(posPtr); } else if (param_1 == 107) { - mFallSeMgr.registMultiSePos(param_2); + mFallSeMgr.registMultiSePos(posPtr); } } else if (param_1 == 100) { - mEtcSeMgr.registMultiSePos(param_2); + mEtcSeMgr.registMultiSePos(posPtr); } } } } /* 802CA794-802CAAC0 2C50D4 032C+00 1/1 1/1 0/0 .text startLv3WaterSe__10Z2EnvSeMgrFSc */ -void Z2EnvSeMgr::startLv3WaterSe(s8 param_1) { - if (Z2GetSceneMgr()->getCurrentSceneNum() == 0x2e) { - if (param_1 >= 0) { - field_0x140 = param_1; +void Z2EnvSeMgr::startLv3WaterSe(s8 reverb) { + if (Z2GetSceneMgr()->getCurrentSceneNum() == Z2SCENE_LAKEBED_TEMPLE) { + if (reverb >= 0) { + field_0x140 = reverb; return; } - param_1 = field_0x140; + reverb = field_0x140; } + JAISoundID aJStack_60 = 0xffffffff; - f32 dVar12 = param_1 / 127.0f; + f32 dVar12 = reverb / 127.0f; f32 maxVolume; f32 panPower; f32 dolbyPower; + if (field_0x224.getPosCount() >= 0) { if (field_0x248 == 0x73) { aJStack_60 = Z2SE_ENV_WATER_WAY; @@ -1770,12 +1920,14 @@ void Z2EnvSeMgr::startLv3WaterSe(s8 param_1) { field_0x250, 0); field_0x224.resetMultiSePos(); } + if (field_0x258.getPosCount() >= 0) { if (field_0x27c == 0x74) { aJStack_60 = Z2SE_ENV_WATER_WAY; } else if (field_0x27c == 0x6f) { aJStack_60 = Z2SE_ENV_WATERFALL_CALM; } + maxVolume = field_0x280 * field_0x258.getMaxVolume(); panPower = field_0x258.getPanPower(); dolbyPower = field_0x258.getDolbyPower(); @@ -1784,6 +1936,7 @@ void Z2EnvSeMgr::startLv3WaterSe(s8 param_1) { field_0x284, 0); field_0x258.resetMultiSePos(); } + if (field_0x28c.getPosCount() >= 0) { if (field_0x2b0 == 0x75) { aJStack_60 = Z2SE_ENV_WATER_WAY_L; @@ -1800,7 +1953,8 @@ void Z2EnvSeMgr::startLv3WaterSe(s8 param_1) { field_0x2b8, 0); field_0x28c.resetMultiSePos(); } - startRiverSe(param_1); - startFallSe(param_1); - startEtcSe(param_1); + + startRiverSe(reverb); + startFallSe(reverb); + startEtcSe(reverb); } diff --git a/src/Z2AudioLib/Z2FxLineMgr.cpp b/src/Z2AudioLib/Z2FxLineMgr.cpp index c1a7d1645c..d0f9a1d9a0 100644 --- a/src/Z2AudioLib/Z2FxLineMgr.cpp +++ b/src/Z2AudioLib/Z2FxLineMgr.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2FxLineMgr -// - #include "Z2AudioLib/Z2FxLineMgr.h" #include "Z2AudioLib/Z2SceneMgr.h" #include "JSystem/JAudio2/JASDSPInterface.h" @@ -11,25 +6,40 @@ #include "JSystem/JSupport/JSUMemoryStream.h" /* 802BA7DC-802BA7FC 2B511C 0020+00 0/0 1/1 0/0 .text __ct__11Z2FxLineMgrFv */ -Z2FxLineMgr::Z2FxLineMgr() : JASGlobalInstance<Z2FxLineMgr>(this) { +Z2FxLineMgr::Z2FxLineMgr() : JASGlobalInstance<Z2FxLineMgr>(true) { mConfig = NULL; mLineID = -1; mFxDataNum = 0; mSetUnderWaterFx = false; + + #if DEBUG + mHIOEdit = NULL; + #endif } /* 802BA7FC-802BAC28 2B513C 042C+00 0/0 1/1 0/0 .text * initDataArc__11Z2FxLineMgrFP10JKRArchiveP7JKRHeap */ void Z2FxLineMgr::initDataArc(JKRArchive* arc, JKRHeap* heap) { + JUT_ASSERT(44, arc); + JUT_ASSERT(45, heap); + mFxLineBuffer[0] = new (heap, 0x20) u8[0x2800]; mFxLineBuffer[1] = new (heap, 0x20) u8[0x2800]; mFxLineBuffer[2] = new (heap, 0x20) u8[0x4B00]; mFxLineBuffer[3] = new (heap, 0x20) u8[0x4B00]; + + JUT_ASSERT(53, mFxLineBuffer[0]); + JUT_ASSERT(54, mFxLineBuffer[1]); + JUT_ASSERT(55, mFxLineBuffer[2]); + JUT_ASSERT(56, mFxLineBuffer[3]); + mFxDataNum = arc->countResource(); mConfig = new (heap, 0) Z2FxLineConfig[mFxDataNum]; + for (u8 i = 0; i < mFxDataNum; i++) { void* res = arc->getResource(i); u32 size = (arc->getResSize(res) + 0x1f) & ~0x1f; + JSUMemoryInputStream stream(res, size); stream >> mConfig[i].field_0x0; stream >> mConfig[i].field_0x1; @@ -61,23 +71,29 @@ void Z2FxLineMgr::initDataArc(JKRArchive* arc, JKRHeap* heap) { stream >> mConfig[i].field_0x20[7]; JKRFree(res); } + setLineID(-1, false, false); setLineID(-1, true, false); } /* 802BAC28-802BAC74 2B5568 004C+00 4/4 0/0 0/0 .text setLineID__11Z2FxLineMgrFScbb */ void Z2FxLineMgr::setLineID(s8 fxID, bool param_1, bool param_2) { + JUT_ASSERT(109, fxID < mFxDataNum); + if (fxID < 0) { mLineID = 0; } else { mLineID = fxID; } + setLine(&mConfig[mLineID], param_1, param_2); } /* 802BAC74-802BAE1C 2B55B4 01A8+00 1/1 0/0 0/0 .text setLine__11Z2FxLineMgrFP14Z2FxLineConfigbb */ void Z2FxLineMgr::setLine(Z2FxLineConfig* config, bool param_1, bool param_2) { + JUT_ASSERT(121, config); + u8 buf1 = 0; u8 buf2 = 1; if (param_1) { @@ -86,6 +102,7 @@ void Z2FxLineMgr::setLine(Z2FxLineConfig* config, bool param_1, bool param_2) { } if (mFxLineBuffer[buf1] == NULL || mFxLineBuffer[buf2] == NULL) { + OS_REPORT("[Z2FxLineMgr::setLine] FxBuffer is NOT CREATED!!\n"); return; } @@ -93,6 +110,7 @@ void Z2FxLineMgr::setLine(Z2FxLineConfig* config, bool param_1, bool param_2) { dsp_config.field_0x0 = config->field_0x0; dsp_config.field_0x2 = config->field_0x1; dsp_config.field_0x6 = config->field_0x2; + if (param_2) { dsp_config.field_0x4 = 0; dsp_config.field_0x8 = 0; @@ -100,6 +118,7 @@ void Z2FxLineMgr::setLine(Z2FxLineConfig* config, bool param_1, bool param_2) { dsp_config.field_0x4 = config->field_0x4; dsp_config.field_0x8 = config->field_0x6; } + dsp_config.field_0xc = config->field_0x3; dsp_config.field_0x10[0] = config->field_0x8[0]; dsp_config.field_0x10[1] = config->field_0x8[1]; @@ -114,6 +133,7 @@ void Z2FxLineMgr::setLine(Z2FxLineConfig* config, bool param_1, bool param_2) { dsp_config.field_0x0 = config->field_0x18; dsp_config.field_0x2 = config->field_0x19; dsp_config.field_0x6 = config->field_0x1a; + if (param_2) { dsp_config.field_0x4 = 0; dsp_config.field_0x8 = 0; @@ -121,6 +141,7 @@ void Z2FxLineMgr::setLine(Z2FxLineConfig* config, bool param_1, bool param_2) { dsp_config.field_0x4 = config->field_0x1c; dsp_config.field_0x8 = config->field_0x1e; } + dsp_config.field_0xc = config->field_0x1b; dsp_config.field_0x10[0] = config->field_0x20[0]; dsp_config.field_0x10[1] = config->field_0x20[1]; @@ -139,84 +160,86 @@ void Z2FxLineMgr::setFxForceOff(bool param_0) { } /* 802BAE48-802BAEB8 2B5788 0070+00 0/0 1/1 0/0 .text setUnderWaterFx__11Z2FxLineMgrFb */ -void Z2FxLineMgr::setUnderWaterFx(bool param_0) { - if (mSetUnderWaterFx != param_0) { - if (param_0) { +void Z2FxLineMgr::setUnderWaterFx(bool isUnderWaterFx) { + if (mSetUnderWaterFx != isUnderWaterFx) { + if (isUnderWaterFx) { + OS_REPORT("[Z2FxLineMgr::setUnderWaterFx] → underWaterFx!\n"); setLineID(12, true, false); } else { + OS_REPORT("[Z2FxLineMgr::setUnderWaterFx] → sceneFx!\n"); setSceneFx(Z2GetSceneMgr()->getCurrentSceneNum()); } - mSetUnderWaterFx = param_0; + mSetUnderWaterFx = isUnderWaterFx; } } /* 802BAEB8-802BB00C 2B57F8 0154+00 2/1 1/1 0/0 .text setSceneFx__11Z2FxLineMgrFl */ -void Z2FxLineMgr::setSceneFx(s32 sceneNum) { +void Z2FxLineMgr::setSceneFx(s32 sceneNo) { if (Z2GetSceneMgr()->isInDarkness()) { setLineID(11, true, false); } else { - switch (sceneNum) { - case SPOT_SHADES_REALM: + switch (sceneNo) { + case Z2SCENE_SHADES_REALM: setLineID(9, true, false); break; - case SPOT_KAKARIKO_VILLAGE: - case SPOT_DEATH_MOUNTAIN: - case SPOT_HIDDEN_VILLAGE: - case SPOT_ZORAS_RIVER: - case SPOT_HYRULE_FIELD: + case Z2SCENE_KAKARIKO_VILLAGE: + case Z2SCENE_DEATH_MOUNTAIN: + case Z2SCENE_HIDDEN_VILLAGE: + case Z2SCENE_ZORAS_RIVER: + case Z2SCENE_HYRULE_FIELD: setLineID(10, true, false); break; - case SPOT_SACRED_GROVE: - case SPOT_FOREST_TEMPLE: - case SPOT_FOREST_TEMPLE_MINIBOSS: - case SPOT_FOREST_TEMPLE_BOSS: - case SPOT_GORGE_LANTERN_CAVE: - case SPOT_LAKE_LANTERN_CAVE: - case SPOT_FARON_WOODS_CAVE: + case Z2SCENE_SACRED_GROVE: + case Z2SCENE_FOREST_TEMPLE: + case Z2SCENE_FOREST_TEMPLE_MINIBOSS: + case Z2SCENE_FOREST_TEMPLE_BOSS: + case Z2SCENE_GORGE_LANTERN_CAVE: + case Z2SCENE_LAKE_LANTERN_CAVE: + case Z2SCENE_FARON_WOODS_CAVE: if (Z2GetSceneMgr()->getCurrentRoomNum() == 2) { return; } // fallthrough - case SPOT_FARON_WOODS: + case Z2SCENE_FARON_WOODS: setLineID(1, true, false); break; - case SPOT_GORON_MINES: - case SPOT_GORON_MINES_MINIBOSS: - case SPOT_GORON_MINES_BOSS: - case SPOT_ELDIN_MAGNET_CAVE: + case Z2SCENE_GORON_MINES: + case Z2SCENE_GORON_MINES_MINIBOSS: + case Z2SCENE_GORON_MINES_BOSS: + case Z2SCENE_ELDIN_MAGNET_CAVE: setLineID(2, true, false); break; - case SPOT_LAKE_HYLIA: - case SPOT_LAKEBED_TEMPLE: - case SPOT_LAKEBED_TEMPLE_MINIBOSS: - case SPOT_LAKEBED_TEMPLE_BOSS: + case Z2SCENE_LAKE_HYLIA: + case Z2SCENE_LAKEBED_TEMPLE: + case Z2SCENE_LAKEBED_TEMPLE_MINIBOSS: + case Z2SCENE_LAKEBED_TEMPLE_BOSS: if (Z2GetSceneMgr()->getCurrentRoomNum() == 1) { setLineID(3, true, false); } break; - case SPOT_ARBITERS_GROUNDS: - case SPOT_ARBITERS_GROUNDS_MINIBOSS: - case SPOT_ARBITERS_GROUNDS_BOSS: + case Z2SCENE_ARBITERS_GROUNDS: + case Z2SCENE_ARBITERS_GROUNDS_MINIBOSS: + case Z2SCENE_ARBITERS_GROUNDS_BOSS: setLineID(4, true, false); break; - case SPOT_SNOWPEAK_RUINS: - case SPOT_SNOWPEAK_RUINS_MINIBOSS: - case SPOT_SNOWPEAK_RUINS_BOSS: - case SPOT_ICE_BLOCK_PUZZLE: + case Z2SCENE_SNOWPEAK_RUINS: + case Z2SCENE_SNOWPEAK_RUINS_MINIBOSS: + case Z2SCENE_SNOWPEAK_RUINS_BOSS: + case Z2SCENE_ICE_BLOCK_PUZZLE: setLineID(5, true, false); break; - case SPOT_TEMPLE_OF_TIME: - case SPOT_TEMPLE_OF_TIME_MINIBOSS: - case SPOT_TEMPLE_OF_TIME_BOSS: + case Z2SCENE_TEMPLE_OF_TIME: + case Z2SCENE_TEMPLE_OF_TIME_MINIBOSS: + case Z2SCENE_TEMPLE_OF_TIME_BOSS: setLineID(6, true, false); break; - case SPOT_CITY_IN_THE_SKY: - case SPOT_CITY_IN_THE_SKY_MINIBOSS: - case SPOT_CITY_IN_THE_SKY_BOSS: + case Z2SCENE_CITY_IN_THE_SKY: + case Z2SCENE_CITY_IN_THE_SKY_MINIBOSS: + case Z2SCENE_CITY_IN_THE_SKY_BOSS: setLineID(7, true, false); break; - case SPOT_HYRULE_CASTLE: - case SPOT_FINAL_BATTLE_THRONE_ROOM: + case Z2SCENE_HYRULE_CASTLE: + case Z2SCENE_FINAL_BATTLE_THRONE_ROOM: setLineID(8, true, false); break; default: diff --git a/src/Z2AudioLib/Z2LinkMgr.cpp b/src/Z2AudioLib/Z2LinkMgr.cpp index 9d4ac0ca88..d916aa34af 100644 --- a/src/Z2AudioLib/Z2LinkMgr.cpp +++ b/src/Z2AudioLib/Z2LinkMgr.cpp @@ -1,23 +1,21 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2LinkMgr -// - #include "Z2AudioLib/Z2LinkMgr.h" -#include "Z2AudioLib/Z2AudioCS.h" #include "d/d_com_inf_game.h" +#if PLATFORM_WII || PLATFORM_SHIELD +#include "Z2AudioLib/Z2AudioCS.h" +#endif + /* 802C321C-802C3220 2BDB5C 0004+00 0/0 1/1 0/0 .text setLinkGroupInfo__14Z2CreatureLinkFUc */ void Z2CreatureLink::setLinkGroupInfo(u8) {} /* 802C3220-802C3228 -00001 0008+00 0/0 0/0 0/0 .text setLinkHp__14Z2CreatureLinkFll */ -void Z2CreatureLink::setLinkHp(s32 i_hp, s32) { - mLinkHp = i_hp; +void Z2CreatureLink::setLinkHp(s32 linkHp, s32) { + mLinkHp = linkHp; } /* 802C3228-802C328C 2BDB68 0064+00 0/0 1/1 0/0 .text setLinkSwordType__14Z2CreatureLinkFll */ -void Z2CreatureLink::setLinkSwordType(s32 i_swordType, s32 param_1) { - mLinkSwordType = i_swordType; +void Z2CreatureLink::setLinkSwordType(s32 swordType, s32 param_1) { + mLinkSwordType = swordType; mFlag3 = param_1 == 1; if (mLinkSwordType != 0) { @@ -31,8 +29,8 @@ void Z2CreatureLink::setLinkSwordType(s32 i_swordType, s32 param_1) { } /* 802C328C-802C32F0 2BDBCC 0064+00 0/0 1/1 0/0 .text setLinkShieldType__14Z2CreatureLinkFll */ -void Z2CreatureLink::setLinkShieldType(s32 i_shieldType, s32 param_1) { - mLinkShieldType = i_shieldType; +void Z2CreatureLink::setLinkShieldType(s32 shieldType, s32 param_1) { + mLinkShieldType = shieldType; mFlag4 = param_1 == 1; if (mLinkSwordType != 0) { @@ -46,8 +44,8 @@ void Z2CreatureLink::setLinkShieldType(s32 i_shieldType, s32 param_1) { } /* 802C32F0-802C333C 2BDC30 004C+00 0/0 1/1 0/0 .text setLinkBootsType__14Z2CreatureLinkFl */ -void Z2CreatureLink::setLinkBootsType(s32 i_bootsType) { - mLinkBootsType = i_bootsType; +void Z2CreatureLink::setLinkBootsType(s32 bootsType) { + mLinkBootsType = bootsType; if (Z2GetSceneMgr()->isSceneExist()) { startLinkSound(Z2SE_AL_CHANGE_BOOTS, 0, -1); @@ -102,10 +100,10 @@ void Z2CreatureLink::deleteObject() { } /* 802C3638-802C3710 2BDF78 00D8+00 0/0 1/1 0/0 .text init__14Z2CreatureLinkFP3VecP3VecP3Vec */ -void Z2CreatureLink::init(Vec* param_0, Vec* param_1, Vec* param_2) { +void Z2CreatureLink::init(Vec* animePosPtr, Vec* simplePosPtr, Vec* simple2PosPtr) { OS_REPORT("[Z2CreatureLink::init]"); - Z2Creature::init(param_0, param_1, param_2, 6, 1, 2); + Z2Creature::init(animePosPtr, simplePosPtr, simple2PosPtr, 6, 1, 2); Z2GetAudience()->getLinkMic()->setPosPtr(getCurrentPos()); field_0xc1 = 0xFF; @@ -117,7 +115,7 @@ void Z2CreatureLink::init(Vec* param_0, Vec* param_1, Vec* param_2) { mRiding = false; mMagnetized = false; mUsingIronBall = false; - field_0xb4 = *param_0; + field_0xb4 = *animePosPtr; mMoveSpeed = 0; mMovingTime = 0; mSinkDepth = -1; @@ -125,9 +123,9 @@ void Z2CreatureLink::init(Vec* param_0, Vec* param_1, Vec* param_2) { /* 802C3710-802C374C 2BE050 003C+00 0/0 1/1 0/0 .text initKantera__14Z2CreatureLinkFP3Vec */ -void Z2CreatureLink::initKantera(Vec* i_pos) { +void Z2CreatureLink::initKantera(Vec* posPtr) { mKanteraState = 0; - mKantera.init(i_pos, 2); + mKantera.init(posPtr, 2); } /* 802C374C-802C3778 2BE08C 002C+00 1/1 1/1 0/0 .text deleteKantera__14Z2CreatureLinkFv @@ -138,16 +136,16 @@ void Z2CreatureLink::deleteKantera() { } /* 802C3778-802C3780 -00001 0008+00 0/0 0/0 0/0 .text setKanteraState__14Z2CreatureLinkFUc */ -void Z2CreatureLink::setKanteraState(u8 i_state) { - mKanteraState = i_state; +void Z2CreatureLink::setKanteraState(u8 state) { + mKanteraState = state; } /* 802C3780-802C3A64 2BE0C0 02E4+00 1/0 0/0 0/0 .text framework__14Z2CreatureLinkFUlSc */ -void Z2CreatureLink::framework(u32 param_0, s8 param_1) { - Z2Creature::framework(param_0, param_1); +void Z2CreatureLink::framework(u32 mapinfo, s8 reverb) { + Z2Creature::framework(mapinfo, reverb); if (mKantera.isAlive()) { - mKantera.framework(param_0, param_1); + mKantera.framework(mapinfo, reverb); } if (field_0xc1 != 0xFF) { @@ -194,39 +192,53 @@ void Z2CreatureLink::framework(u32 param_0, s8 param_1) { /* 802C3A64-802C3A6C -00001 0008+00 0/0 0/0 0/0 .text setSinkDepth__14Z2CreatureLinkFSc */ -void Z2CreatureLink::setSinkDepth(s8 i_sinkDepth) { - mSinkDepth = i_sinkDepth; +void Z2CreatureLink::setSinkDepth(s8 sinkDepth) { + mSinkDepth = sinkDepth; } /* 802C3A6C-802C3AEC 2BE3AC 0080+00 0/0 4/4 0/0 .text setRiding__14Z2CreatureLinkFb */ -void Z2CreatureLink::setRiding(bool i_isRiding) { - if (mRiding != i_isRiding) { - if (i_isRiding) { +void Z2CreatureLink::setRiding(bool isRiding) { + if (mRiding != isRiding) { + if (isRiding) { + OS_REPORT("[Z2CreatureLink::setRiding] true targetVol = 0.35f\n"); Z2GetAudience()->setTargetVolume(0.35f, 0); } else { + OS_REPORT("[Z2CreatureLink::setRiding] false targetVol = 0.0f\n"); Z2GetAudience()->setTargetVolume(0.0f, 0); } - mRiding = i_isRiding; + mRiding = isRiding; } } /* 802C3AEC-802C3AFC 2BE42C 0010+00 0/0 5/5 0/0 .text setMagnetized__14Z2CreatureLinkFb */ -void Z2CreatureLink::setMagnetized(bool i_isMagnetized) { - mMagnetized = i_isMagnetized; +void Z2CreatureLink::setMagnetized(bool isMagnetized) { + mMagnetized = isMagnetized; } /* 802C3AFC-802C3BD4 2BE43C 00D8+00 0/0 2/2 0/0 .text setWolfEyeOpen__14Z2CreatureLinkFb */ -void Z2CreatureLink::setWolfEyeOpen(bool i_wolfEyeOpen) { - mWolfEyeOpen = i_wolfEyeOpen; +void Z2CreatureLink::setWolfEyeOpen(bool wolfEyeOpen) { + mWolfEyeOpen = wolfEyeOpen; if (mWolfEyeOpen) { + #if PLATFORM_WII || PLATFORM_SHIELD + if (Z2GetSceneMgr()->isSceneExist()) { + Z2AudioCS::start(0x55, 0); + } + #endif + Z2GetSeMgr()->seStart(Z2SE_WOLF_SENSE_OPEN_START, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); Z2GetFxLineMgr()->setFxForceOff(true); Z2GetSoundObjMgr()->setGhostEnemyState(32); } else { + #if PLATFORM_WII || PLATFORM_SHIELD + if (Z2GetSceneMgr()->isSceneExist()) { + Z2AudioCS::start(0x56, 0); + } + #endif + Z2GetSeMgr()->seStart(Z2SE_WOLF_SENSE_CLOSE, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); Z2GetFxLineMgr()->setFxForceOff(false); Z2GetSoundObjMgr()->setGhostEnemyState(16); @@ -235,11 +247,10 @@ void Z2CreatureLink::setWolfEyeOpen(bool i_wolfEyeOpen) { /* 802C3BD4-802C3E68 2BE514 0294+00 3/3 3/3 0/0 .text * startLinkSound__14Z2CreatureLinkF10JAISoundIDUlSc */ -// stopSound seems to store to the stack twice -Z2SoundHandlePool* Z2CreatureLink::startLinkSound(JAISoundID i_soundID, u32 param_1, s8 param_2) { - Z2SoundHandlePool* var_r30 = startCreatureSound(i_soundID, param_1, param_2); +Z2SoundHandlePool* Z2CreatureLink::startLinkSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + Z2SoundHandlePool* handle = startCreatureSound(soundID, mapinfo, reverb); - switch (i_soundID) { + switch (soundID) { case Z2SE_AL_DAMAGE_NORMAL: case Z2SE_AL_DAMAGE_LARGE: case Z2SE_AL_FREEZE: @@ -249,35 +260,35 @@ Z2SoundHandlePool* Z2CreatureLink::startLinkSound(JAISoundID i_soundID, u32 para mSoundObjAnime.stopSound(Z2SE_AL_HS_OPEN, 0); break; case Z2SE_AL_SINK_SAND_OUT: - if (var_r30 != NULL && *var_r30) { - f32 var_f31 = Z2Calc::linearTransform(mSinkDepth, 32.0f, 127.0f, 0.4f, 1.0f, false); - f32 var_f30 = Z2Calc::linearTransform(mSinkDepth, 32.0f, 127.0f, 1.0f, 0.7f, false); + if (handle != NULL && *handle) { + f32 volume = Z2Calc::linearTransform(mSinkDepth, 32.0f, 127.0f, 0.4f, 1.0f, false); + f32 pitch = Z2Calc::linearTransform(mSinkDepth, 32.0f, 127.0f, 1.0f, 0.7f, false); - (*var_r30)->getAuxiliary().moveVolume(var_f31, 0); - (*var_r30)->getAuxiliary().movePitch(var_f30, 0); + (*handle)->getAuxiliary().moveVolume(volume, 0); + (*handle)->getAuxiliary().movePitch(pitch, 0); } break; case Z2SE_AL_SINK_SNOW_OUT: - if (var_r30 != NULL && *var_r30) { - f32 var_f29 = Z2Calc::linearTransform(mSinkDepth, 0.0f, 23.0f, 0.5f, 1.0f, false); - f32 var_f28 = Z2Calc::linearTransform(mSinkDepth, 0.0f, 23.0f, 1.0f, 0.7f, false); + if (handle != NULL && *handle) { + f32 volume = Z2Calc::linearTransform(mSinkDepth, 0.0f, 23.0f, 0.5f, 1.0f, false); + f32 pitch = Z2Calc::linearTransform(mSinkDepth, 0.0f, 23.0f, 1.0f, 0.7f, false); - (*var_r30)->getAuxiliary().moveVolume(var_f29, 0); - (*var_r30)->getAuxiliary().movePitch(var_f28, 0); + (*handle)->getAuxiliary().moveVolume(volume, 0); + (*handle)->getAuxiliary().movePitch(pitch, 0); } break; } - return var_r30; + return handle; } /* 802C3E68-802C4320 2BE7A8 04B8+00 1/1 3/3 0/0 .text * startLinkSoundLevel__14Z2CreatureLinkF10JAISoundIDUlSc */ -JAISoundHandle* Z2CreatureLink::startLinkSoundLevel(JAISoundID i_soundID, u32 param_1, s8 param_2) { - #if VERSION == VERSION_SHIELD_DEBUG +JAISoundHandle* Z2CreatureLink::startLinkSoundLevel(JAISoundID soundID, u32 mapinfo, s8 reverb) { + #if PLATFORM_WII || PLATFORM_SHIELD if (Z2GetSceneMgr()->isSceneExist()) { int iVar3 = -1; - switch((u32)i_soundID) { + switch((u32)soundID) { case Z2SE_AL_REEL_SLOW_LOOP: iVar3 = 0x16; break; @@ -296,81 +307,81 @@ JAISoundHandle* Z2CreatureLink::startLinkSoundLevel(JAISoundID i_soundID, u32 pa } #endif - if (i_soundID == Z2SE_AL_LIGHTNING_SW_GLOW && (Z2GetStatusMgr()->getDemoStatus() == 2 || !Z2GetSceneMgr()->isInGame())) { + if (soundID == Z2SE_AL_LIGHTNING_SW_GLOW && (Z2GetStatusMgr()->getDemoStatus() == 2 || !Z2GetSceneMgr()->isInGame())) { return NULL; } - Z2SoundHandlePool* temp_r3 = startCreatureSoundLevel((u32)i_soundID, param_1, param_2); - if (temp_r3 != NULL && *temp_r3) { - f32 var_f31 = 1.0f; - f32 var_f30 = 1.0f; - int var_r30 = 0; + Z2SoundHandlePool* handle = startCreatureSoundLevel((u32)soundID, mapinfo, reverb); + if (handle != NULL && *handle) { + f32 volume = 1.0f; + f32 pitch = 1.0f; + int volumeMoveSteps = 0; - switch (i_soundID) { + switch (soundID) { case Z2SE_AL_SINK_SAND_LEVEL: if (mSinkDepth > 0) { - var_f31 = Z2Calc::linearTransform(mSinkDepth, 0.0f, 127.0f, 0.4f, 1.0f, true); - var_f30 = Z2Calc::linearTransform(mSinkDepth, 0.0f, 127.0f, 1.0f, 0.7f, true); + volume = Z2Calc::linearTransform(mSinkDepth, 0.0f, 127.0f, 0.4f, 1.0f, true); + pitch = Z2Calc::linearTransform(mSinkDepth, 0.0f, 127.0f, 1.0f, 0.7f, true); } break; case Z2SE_AL_SINK_SNOW_LEVEL: if (mSinkDepth > 0) { - var_f31 = Z2Calc::linearTransform(mSinkDepth, 0.0f, 23.0f, 0.7f, 1.0f, true); - var_f30 = Z2Calc::linearTransform(mSinkDepth, 0.0f, 23.0f, 1.0f, 0.7f, true); + volume = Z2Calc::linearTransform(mSinkDepth, 0.0f, 23.0f, 0.7f, 1.0f, true); + pitch = Z2Calc::linearTransform(mSinkDepth, 0.0f, 23.0f, 1.0f, 0.7f, true); } break; case Z2SE_AL_SPINNER_RIDE: - var_f30 = Z2Calc::getParamByExp(mMoveSpeed, 0.0f, 30.0f, 0.3f, 0.8f, 1.0f, Z2Calc::CURVE_SIGN_0); + pitch = Z2Calc::getParamByExp(mMoveSpeed, 0.0f, 30.0f, 0.3f, 0.8f, 1.0f, Z2Calc::CURVE_NEGATIVE); if (mMoveSpeed == 0 && mMovingTime > 120) { - var_f31 = Z2Calc::getParamByExp(mMovingTime, 180.0f, 120.0f, 0.6f, 0.0f, 0.4f, Z2Calc::CURVE_SIGN_0); + volume = Z2Calc::getParamByExp(mMovingTime, 180.0f, 120.0f, 0.6f, 0.0f, 0.4f, Z2Calc::CURVE_NEGATIVE); } else { - var_f31 = Z2Calc::getParamByExp(mMoveSpeed, 0.0f, 30.0f, 0.6f, 0.4f, 1.0f, Z2Calc::CURVE_SIGN_0); + volume = Z2Calc::getParamByExp(mMoveSpeed, 0.0f, 30.0f, 0.6f, 0.4f, 1.0f, Z2Calc::CURVE_NEGATIVE); } break; case Z2SE_AL_SPINNER_RAIL: - var_f30 = Z2Calc::getParamByExp(mMoveSpeed, 0.0f, 80.0f, 0.3f, 0.8f, 1.2f, Z2Calc::CURVE_SIGN_0); + pitch = Z2Calc::getParamByExp(mMoveSpeed, 0.0f, 80.0f, 0.3f, 0.8f, 1.2f, Z2Calc::CURVE_NEGATIVE); break; case Z2SE_AL_SNOBO_RIDE: case Z2SE_AL_SNOBO_BREAK: /* dSv_event_flag_c::F_0266 - Snowpeak Ruins - Snowpeak Ruins clear */ if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[266]) && Z2GetSeqMgr()->getSubBgmID() != Z2BGM_SNOW_BOARD) { - var_f31 = 0.0f; - var_r30 = 0; + volume = 0.0f; + volumeMoveSteps = 0; } else if (mMoveSpeed == 0) { - var_f31 = 0.0f; - var_r30 = 10; + volume = 0.0f; + volumeMoveSteps = 10; } else { - var_f31 = Z2Calc::getParamByExp(mMoveSpeed, 0.0f, 80.0f, 0.25f, 0.4f, 1.0f, Z2Calc::CURVE_SIGN_0); + volume = Z2Calc::getParamByExp(mMoveSpeed, 0.0f, 80.0f, 0.25f, 0.4f, 1.0f, Z2Calc::CURVE_NEGATIVE); } - var_f30 = Z2Calc::getParamByExp(mMoveSpeed, 0.0f, 80.0f, 0.3f, 0.5f, 1.1f, Z2Calc::CURVE_SIGN_0); + pitch = Z2Calc::getParamByExp(mMoveSpeed, 0.0f, 80.0f, 0.3f, 0.5f, 1.1f, Z2Calc::CURVE_NEGATIVE); break; case Z2SE_AL_LIGHTNING_SW_GLOW: - f32 temp_f1_2 = (*temp_r3)->getAuxiliary().mTransition.mVolume.mDest; + f32 temp_f1_2 = (*handle)->getAuxiliary().transition_.volume_.targetValue_; if (Z2GetStatusMgr()->getDemoStatus() == 2 && temp_f1_2 != 0.3f) { - var_f31 = 0.3f; - var_r30 = 45; + volume = 0.3f; + volumeMoveSteps = 45; } else if (temp_f1_2 != 1.0f) { - var_f31 = 1.0f; - var_r30 = 45; + volume = 1.0f; + volumeMoveSteps = 45; } break; } - (*temp_r3)->getAuxiliary().moveVolume(var_f31, var_r30); - (*temp_r3)->getAuxiliary().movePitch(var_f30, 0); + (*handle)->getAuxiliary().moveVolume(volume, volumeMoveSteps); + (*handle)->getAuxiliary().movePitch(pitch, 0); } - return temp_r3; + return handle; } /* 802C4320-802C45B0 2BEC60 0290+00 1/1 1/1 0/0 .text * startLinkVoice__14Z2CreatureLinkF10JAISoundIDSc */ -Z2SoundHandlePool* Z2CreatureLink::startLinkVoice(JAISoundID i_soundID, s8 param_1) { +Z2SoundHandlePool* Z2CreatureLink::startLinkVoice(JAISoundID soundID, s8 reverb) { if (mLinkState == 1) { - switch (i_soundID) { + switch (soundID) { case Z2SE_WL_V_BREATH_WAIT: case Z2SE_WL_V_BREATH_TIRED: case Z2SE_WL_V_BREATH_SIT: @@ -392,57 +403,56 @@ Z2SoundHandlePool* Z2CreatureLink::startLinkVoice(JAISoundID i_soundID, s8 param break; } } else { - if (i_soundID == Z2SE_AL_V_ATTACK_RUN) { + if (soundID == Z2SE_AL_V_ATTACK_RUN) { if (field_0xc1 < 10) { return NULL; } field_0xc1 = 0; } - if (mMarkState != 3 && Z2GetSoundObjMgr()->getEnemyNumNear() == 0 - && !Z2GetSoundObjMgr()->isForceBattle()) + if (mMarkState != 3 && Z2GetSoundObjMgr()->getEnemyNumNear() == 0 && !Z2GetSoundObjMgr()->isForceBattle()) { - switch (i_soundID) { + switch (soundID) { case Z2SE_AL_V_ATTACK_S: - i_soundID = Z2SE_AL_V_ATTACK_S_FREE; + 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; + soundID = Z2SE_AL_V_ATTACK_M_FREE; break; case Z2SE_AL_V_ATTACK_L: - i_soundID = Z2SE_AL_V_ATTACK_L_FREE; + soundID = Z2SE_AL_V_ATTACK_L_FREE; break; case Z2SE_AL_V_KAITEN: - i_soundID = Z2SE_AL_V_KAITEN_FREE; + 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; + soundID = Z2SE_AL_V_BACKTEN_FREE; break; case Z2SE_AL_V_ATTACK_RUN: - i_soundID = Z2SE_AL_V_ATTACK_RUN_FREE; + soundID = Z2SE_AL_V_ATTACK_RUN_FREE; break; } } else { - if (i_soundID == Z2SE_AL_V_JUMP_S) { - i_soundID = Z2SE_AL_V_BACKTEN; + if (soundID == Z2SE_AL_V_JUMP_S) { + soundID = Z2SE_AL_V_BACKTEN; } } if (isInWater()) { - i_soundID = Z2SE_AL_V_UNDER_WATER; + soundID = Z2SE_AL_V_UNDER_WATER; } } - return startCreatureVoice(i_soundID, param_1); + return startCreatureVoice(soundID, reverb); } /* 802C45B0-802C46F0 2BEEF0 0140+00 0/0 1/1 0/0 .text * startLinkVoiceLevel__14Z2CreatureLinkF10JAISoundIDSc */ -Z2SoundHandlePool* Z2CreatureLink::startLinkVoiceLevel(JAISoundID i_soundID, s8 param_1) { +Z2SoundHandlePool* Z2CreatureLink::startLinkVoiceLevel(JAISoundID soundID, s8 reverb) { if (mLinkState == 1) { - switch (i_soundID) { + switch (soundID) { case Z2SE_WL_V_ROAR: f32 volume = 0.0f; u8 port_data = 0; @@ -465,7 +475,7 @@ Z2SoundHandlePool* Z2CreatureLink::startLinkVoiceLevel(JAISoundID i_soundID, s8 break; } - Z2SoundHandlePool* handle = startCreatureVoiceLevel(Z2SE_WL_V_ROAR, param_1); + Z2SoundHandlePool* handle = startCreatureVoiceLevel(Z2SE_WL_V_ROAR, reverb); if (handle != NULL && *handle) { (*handle)->getAuxiliary().moveVolume(volume, 0); Z2GetSoundStarter()->setPortData(handle, 8, port_data, -1); @@ -474,23 +484,33 @@ Z2SoundHandlePool* Z2CreatureLink::startLinkVoiceLevel(JAISoundID i_soundID, s8 } } - return startCreatureVoiceLevel(i_soundID, param_1); + return startCreatureVoiceLevel(soundID, reverb); } /* 802C46F0-802C4784 2BF030 0094+00 0/0 2/2 0/0 .text * startLinkSwordSound__14Z2CreatureLinkF10JAISoundIDUlSc */ -void Z2CreatureLink::startLinkSwordSound(JAISoundID i_soundID, u32 id, s8 ch) { - u32 soundID = i_soundID; +void Z2CreatureLink::startLinkSwordSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + u32 sound_ID = soundID; // fakematch - switch (soundID) { + switch (sound_ID) { case Z2SE_SWORD_POWER_COME: - startCreatureExtraSoundLevel(soundID, id, ch); + #if PLATFORM_WII || PLATFORM_SHIELD + if (Z2GetSceneMgr()->isSceneExist()) { + Z2AudioCS::startLevel(0x2F, 0); + } + #endif + startCreatureExtraSoundLevel(sound_ID, mapinfo, reverb); break; case Z2SE_WOLF_POWER_COME: - startCreatureExtraSoundLevel(soundID, id, ch); + #if PLATFORM_WII || PLATFORM_SHIELD + if (Z2GetSceneMgr()->isSceneExist()) { + Z2AudioCS::startLevel(0x6B, 0); + } + #endif + startCreatureExtraSoundLevel(sound_ID, mapinfo, reverb); break; default: - startCreatureExtraSound(soundID, id, ch); + startCreatureExtraSound(sound_ID, mapinfo, reverb); break; } } @@ -515,30 +535,33 @@ Z2SoundHandlePool* Z2CreatureLink::startCollisionSE(u32 hitID, u32 mapinfo) { /* 802C4814-802C48D8 2BF154 00C4+00 0/0 4/4 2/2 .text * startHitItemSE__14Z2CreatureLinkFUlUlP14Z2SoundObjBasef */ -Z2SoundHandlePool* Z2CreatureLink::startHitItemSE(u32 i_soundID, u32 param_1, - Z2SoundObjBase* param_2, f32 speed) { - if (param_2 == NULL) { - param_2 = &mSoundObjSimple2; +Z2SoundHandlePool* Z2CreatureLink::startHitItemSE(u32 soundID, u32 mapinfo, Z2SoundObjBase* other, f32 speed) { + if (other == NULL) { + other = &mSoundObjSimple2; } - if (i_soundID == Z2SE_HIT_SHIELD_ATTACK) { - return mSoundObjAnime.startCollisionSE(i_soundID, param_1, NULL); + if (soundID == Z2SE_HIT_SHIELD_ATTACK) { + return mSoundObjAnime.startCollisionSE(soundID, mapinfo, NULL); } - Z2SoundHandlePool* handle = param_2->startCollisionSE(i_soundID, param_1, NULL); + Z2SoundHandlePool* handle = other->startCollisionSE(soundID, mapinfo, NULL); if (speed >= 0.0f && handle != NULL && *handle) { + OS_REPORT("[Z2CreatureLink::startHitItemSE] speed:%.3f\n", speed); if (speed >= 100.0f) { speed = 100.0f; } - (*handle)->getAuxiliary().moveVolume(speed / 100.0f, 0); + + f32 volume = speed / 100.0f; + (*handle)->getAuxiliary().moveVolume(volume, 0); } + return handle; } /* 802C48D8-802C48E8 2BF218 0010+00 0/0 1/1 0/0 .text setResumeAttack__14Z2CreatureLinkFb */ -void Z2CreatureLink::setResumeAttack(bool i_resumeAttack) { - mResumeAttack = i_resumeAttack; +void Z2CreatureLink::setResumeAttack(bool resumeAttack) { + mResumeAttack = resumeAttack; } /* 802C48E8-802C4928 2BF228 0040+00 1/1 0/0 0/0 .text __ct__18Z2LinkSoundStarterFv */ @@ -546,47 +569,47 @@ Z2LinkSoundStarter::Z2LinkSoundStarter() : Z2SoundStarter(false) {} /* 802C4928-802C4FFC 2BF268 06D4+00 2/0 0/0 0/0 .text * startSound__18Z2LinkSoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f>UlfffffUl */ -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 Z2LinkSoundStarter::startSound(JAISoundID soundID, JAISoundHandle* handle, + const JGeometry::TVec3<f32>* posPtr, u32 mapinfo, + f32 fxMix, f32 pitch, f32 volume, f32 pan, + f32 dolby, u32 moveSteps) { bool bVar2 = false; bool bVar3 = false; if (Z2GetLink()->isInWater() && Z2GetStatusMgr()->getCameraInWaterDepthRatio() > 0.0f) { - switch (i_soundID) { + switch (soundID) { case Z2SE_AL_SWIM: case Z2SE_AL_DIVE_SWIM: - i_soundID = Z2SE_AL_SWIM_UNDERWATER; + 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; + soundID = Z2SE_AL_WATER_STROKE_S; break; case Z2SE_AL_SWORD_SWING_L: - i_soundID = Z2SE_AL_WATER_STROKE_L; + soundID = Z2SE_AL_WATER_STROKE_L; break; case Z2SE_AL_SWORD_THRUST: - i_soundID = Z2SE_AL_WATER_STROKE_FAST; + soundID = Z2SE_AL_WATER_STROKE_FAST; break; case Z2SE_AL_KAITENGIRI: - i_soundID = Z2SE_AL_WATER_STROKE_CIRCLE; + soundID = Z2SE_AL_WATER_STROKE_CIRCLE; break; } } - if (i_soundID.mId.mBytes.b1 == 3 && param_3 > 26) { - if (param_3 == 44) { - param_3 = 23; + if (soundID.id_.info.type.parts.groupID == 3 && mapinfo > 26) { + if (mapinfo == 44) { + mapinfo = 23; } else { JUT_WARN_DEVICE(929, 1, "%s", "mapinfo > 26\n"); - param_3 = 0; + mapinfo = 0; } } - switch (i_soundID) { + switch (soundID) { case Z2SE_AL_INTO_WATER: case Z2SE_AL_DIVE_INTO_WATER: case Z2SE_WL_INTO_WATER: @@ -602,9 +625,9 @@ bool Z2LinkSoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* param_ case Z2SE_GORON_FOOTNOTE: case Z2SE_FN_GOB_JUMP: if (Z2GetLink()->mLinkBootsType == 1) { - i_soundID = Z2SE_FN_WALK_HEAVY; + soundID = Z2SE_FN_WALK_HEAVY; if (Z2GetLink()->mMagnetized) { - param_3 = 127; + mapinfo = 127; } } bVar3 = true; @@ -613,9 +636,9 @@ bool Z2LinkSoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* param_ bVar2 = true; bVar3 = true; if (Z2GetLink()->mLinkBootsType == 1) { - i_soundID = Z2SE_FN_JUMP_HEAVY; + soundID = Z2SE_FN_JUMP_HEAVY; if (Z2GetLink()->mMagnetized) { - param_3 = 127; + mapinfo = 127; } } if (Z2GetLink()->mSoundObjSimple1.getHandleSoundID(Z2SE_AL_V_FALL) != NULL) { @@ -640,7 +663,7 @@ bool Z2LinkSoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* param_ } if (Z2GetLink()->mSinkDepth > 0) { - switch (i_soundID) { + switch (soundID) { case Z2SE_FN_WALK_DUMMY: case Z2SE_FN_JUMP_DUMMY: case Z2SE_FN_BOUND_DUMMY: @@ -651,32 +674,32 @@ bool Z2LinkSoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* param_ 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, + if (mapinfo == 3) { + pitch *= Z2Calc::linearTransform(Z2GetLink()->mSinkDepth, 0.0f, 127.0f, 1.0f, 0.5f, true); - } else if (param_3 == 25) { - param_5 *= Z2Calc::linearTransform(Z2GetLink()->mSinkDepth, + } else if (mapinfo == 25) { + pitch *= 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); + bool ret = Z2SoundStarter::startSound(soundID, handle, posPtr, mapinfo, fxMix, pitch, + volume, pan, dolby, moveSteps); if (bVar2 && Z2GetSceneMgr()->getDemoSeWaveNum() != 114) { if (Z2GetLink()->mFlag5) { - Z2GetLink()->startLinkSound(Z2SE_AL_SWORD_SHIELD_ADD, 0, param_4 * 127.0f); + Z2GetLink()->startLinkSound(Z2SE_AL_SWORD_SHIELD_ADD, 0, fxMix * 127.0f); } if (Z2GetLink()->mUsingIronBall) { - Z2GetLink()->startLinkSound(Z2SE_AL_IB_CHAIN_ADD, 0, param_4 * 127.0f); + Z2GetLink()->startLinkSound(Z2SE_AL_IB_CHAIN_ADD, 0, fxMix * 127.0f); } if (Z2GetLink()->mKanteraState != 0) { Z2SoundHandlePool* handle = - Z2GetLink()->mKantera.startSound(Z2SE_AL_KANTERA_SWING_ADD, 0, param_4 * 127.0f); + Z2GetLink()->mKantera.startSound(Z2SE_AL_KANTERA_SWING_ADD, 0, fxMix * 127.0f); if (Z2GetLink()->mKanteraState == 2 && handle != NULL && *handle) { (*handle)->getAuxiliary().moveVolume(0.6f, 0); (*handle)->getAuxiliary().movePitch(0.9f, 0); @@ -686,9 +709,9 @@ bool Z2LinkSoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* param_ if (bVar3) { if (Z2GetLink()->getLinkState() == 4) { - Z2GetLink()->startLinkSound(Z2SE_FN_ARMER_LIGHT_ADD, 0, param_4 * 127.0f); + Z2GetLink()->startLinkSound(Z2SE_FN_ARMER_LIGHT_ADD, 0, fxMix * 127.0f); } else if (Z2GetLink()->getLinkState() == 5) { - Z2GetLink()->startLinkSound(Z2SE_FN_ARMER_HEAVY_ADD, 0, param_4 * 127.0f); + Z2GetLink()->startLinkSound(Z2SE_FN_ARMER_HEAVY_ADD, 0, fxMix * 127.0f); } } @@ -713,8 +736,8 @@ void Z2CreatureRide::deleteObject() { } /* 802C520C-802C522C 2BFB4C 0020+00 0/0 0/0 3/3 .text init__14Z2CreatureRideFP3VecP3VecUcUc */ -void Z2CreatureRide::init(Vec* param_0, Vec* param_1, u8 param_2, u8 param_3) { - Z2Creature::init(param_0, param_1, param_2, param_3); +void Z2CreatureRide::init(Vec* animePosPtr, Vec* simplePosPtr, u8 animeHandleNum, u8 simpleHandleNum) { + Z2Creature::init(animePosPtr, simplePosPtr, animeHandleNum, simpleHandleNum); } /* 802C522C-802C5234 -00001 0008+00 0/0 0/0 0/0 .text setLinkRiding__14Z2CreatureRideFb @@ -727,20 +750,21 @@ void Z2CreatureRide::setLinkRiding(bool isRiding) { */ Z2RideSoundStarter::Z2RideSoundStarter(Z2CreatureRide* ride) : Z2SoundStarter(false) { mRide = ride; + JUT_ASSERT(1294, ride); } /* 802C5284-802C54B8 2BFBC4 0234+00 2/0 0/0 0/0 .text * startSound__18Z2RideSoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f>UlfffffUl */ -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) { +bool Z2RideSoundStarter::startSound(JAISoundID soundID, JAISoundHandle* handle, + const JGeometry::TVec3<f32>* posPtr, u32 mapinfo, + f32 fxMix, f32 pitch, f32 volume, f32 pan, + f32 dolby, u32 moveSteps) { if (!Z2GetSceneMgr()->isInGame()) { return false; } u8 uVar3 = 0; - switch (i_soundID) { + switch (soundID) { case Z2SE_HS_WALK_L_DUMMY: case Z2SE_HS_WALK_R_DUMMY: case Z2SE_HS_TROT_L_DUMMY: @@ -755,17 +779,17 @@ bool Z2RideSoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* param_ break; } - bool ret = Z2SoundStarter::startSound((u32)i_soundID, param_1, param_2, param_3, param_4, param_5, - param_6, param_7, param_8, param_9); + bool ret = Z2SoundStarter::startSound((u32)soundID, handle, posPtr, mapinfo, fxMix, pitch, + volume, pan, dolby, moveSteps); if (mRide->isLinkRiding() && uVar3 != 0) { if (Z2GetLink()->mFlag5) { - Z2GetLink()->startLinkSound(Z2SE_AL_SWORD_SHIELD_ADD, 0, param_4 * 127.0f); + Z2GetLink()->startLinkSound(Z2SE_AL_SWORD_SHIELD_ADD, 0, fxMix * 127.0f); } if (Z2GetLink()->mKanteraState != 0) { Z2SoundHandlePool* handle = - Z2GetLink()->mKantera.startSound(Z2SE_AL_KANTERA_SWING_ADD, 0, param_4 * 127.0f); + Z2GetLink()->mKantera.startSound(Z2SE_AL_KANTERA_SWING_ADD, 0, fxMix * 127.0f); if (Z2GetLink()->mKanteraState == 2 && handle != NULL && *handle) { (*handle)->getAuxiliary().moveVolume(0.6f, 0); (*handle)->getAuxiliary().movePitch(0.9f, 0); @@ -774,11 +798,10 @@ bool Z2RideSoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* param_ switch (uVar3) { case 1: - Z2GetLink()->startLinkSound(Z2SE_AL_HARNESS_ADD_HS, 0, param_4 * 127.0f); + Z2GetLink()->startLinkSound(Z2SE_AL_HARNESS_ADD_HS, 0, fxMix * 127.0f); break; - case 2: - Z2GetLink()->startLinkSound(Z2SE_AL_HARNESS_ADD_WB, 0, param_4 * 127.0f); + Z2GetLink()->startLinkSound(Z2SE_AL_HARNESS_ADD_WB, 0, fxMix * 127.0f); break; } } @@ -792,8 +815,8 @@ Z2SoundObjCoach::Z2SoundObjCoach() { } /* 802C54FC-802C551C 2BFE3C 0020+00 1/0 0/0 0/0 .text init__15Z2SoundObjCoachFP3VecUc */ -void Z2SoundObjCoach::init(Vec* i_soundPos, u8 i_numHandles) { - Z2SoundObjBase::init(i_soundPos, i_numHandles); +void Z2SoundObjCoach::init(Vec* posPtr, u8 handleNum) { + Z2SoundObjBase::init(posPtr, handleNum); } /* 802C551C-802C56C0 2BFE5C 01A4+00 0/0 0/0 1/1 .text startWheelSound__15Z2SoundObjCoachFf */ @@ -805,20 +828,20 @@ Z2SoundHandlePool* Z2SoundObjCoach::startWheelSound(f32 param_0) { 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); + Z2Calc::CURVE_POSITIVE); (*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); + Z2Calc::CURVE_POSITIVE); (*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); + Z2Calc::CURVE_POSITIVE); (*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); + Z2Calc::CURVE_POSITIVE); (*handle)->getAuxiliary().moveVolume(volume, 0); } } @@ -834,10 +857,10 @@ Z2SoundHandlePool* Z2SoundObjCoach::startFireSound(u16 param_0) { if (handle != NULL && *handle) { f32 pitch = Z2Calc::getParamByExp(param_0, 0.0f, 1500.0f, 0.2f, 0.85f, 1.25f, - Z2Calc::CURVE_SIGN_1); + Z2Calc::CURVE_POSITIVE); (*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); + Z2Calc::CURVE_POSITIVE); (*handle)->getAuxiliary().moveVolume(volume, 0); } @@ -846,15 +869,15 @@ Z2SoundHandlePool* Z2SoundObjCoach::startFireSound(u16 param_0) { /* 802C57C0-802C588C 2C0100 00CC+00 1/0 0/0 0/0 .text * startSound__15Z2SoundObjCoachF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2SoundObjCoach::startSound(JAISoundID i_soundID, u32 param_1, s8 param_2) { - Z2SoundHandlePool* handle = Z2SoundObjBase::startSound(i_soundID, param_1, param_2); +Z2SoundHandlePool* Z2SoundObjCoach::startSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + Z2SoundHandlePool* handle = Z2SoundObjBase::startSound(soundID, mapinfo, reverb); - if (handle != NULL && *handle && i_soundID == Z2SE_COACH_SHAKE) { + if (handle != NULL && *handle && soundID == Z2SE_COACH_SHAKE) { f32 pitch = Z2Calc::getParamByExp(field_0x20, 0.0f, 50.0f, 0.2f, 0.85f, 1.25f, - Z2Calc::CURVE_SIGN_1); + Z2Calc::CURVE_POSITIVE); (*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); + Z2Calc::CURVE_POSITIVE); (*handle)->getAuxiliary().moveVolume(volume, 0); } diff --git a/src/Z2AudioLib/Z2Param.cpp b/src/Z2AudioLib/Z2Param.cpp index a720929182..5b71d16a38 100644 --- a/src/Z2AudioLib/Z2Param.cpp +++ b/src/Z2AudioLib/Z2Param.cpp @@ -5,7 +5,6 @@ #include "Z2AudioLib/Z2Param.h" -/* ############################################################################################## */ /* 804507D8-804507DC 000258 0004+00 0/0 4/4 0/0 .sdata DISTANCE_MAX__7Z2Param */ f32 Z2Param::DISTANCE_MAX = 2000.0f; @@ -123,28 +122,31 @@ f32 Z2Param::VOL_SE_OBJECT_PAUSING = 72.0f / 127.0f; f32 Z2Param::VOL_SE_ATMOSPHERE_PAUSING = 72.0f / 127.0f; /* 80450860-80450864 -00001 0004+00 0/0 15/15 0/0 .sdata None */ -u8 struct_80450860 = 0x21; -u8 struct_80450861 = 0x3C; -u8 struct_80450862 = 0x3C; -u8 struct_80450863 = 0x1E; +u8 Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME = 33; + +u8 Z2Param::BGM_CROSS_FADEIN_TIME = 60; + +u8 Z2Param::BGM_CROSS_FADEOUT_TIME = 60; + +u8 Z2Param::BATTLE_BGM_WAIT_TIME = 30; /* 80450864-80450868 -00001 0004+00 0/0 2/2 0/0 .sdata None */ -#pragma push -#pragma force_active on -u8 struct_80450864 = 0x14; -u8 struct_80450865 = 0x1E; -u8 struct_80450866 = 0x0A; -u8 struct_80450867 = 0x1E; -#pragma pop +u8 Z2Param::FOUND_TRACK_FI_TIME = 20; + +u8 Z2Param::FOUND_TRACK_FO_TIME = 30; + +u8 Z2Param::CLOSE_BATTLE_TRACK_FI_TIME = 10; + +u8 Z2Param::CLOSE_BATTLE_TRACK_FO_TIME = 30; /* 80450868-8045086C -00001 0004+00 0/0 5/5 0/0 .sdata None */ -#pragma push -#pragma force_active on -u8 struct_80450868 = 0x01; -u8 struct_80450869 = 0x0A; -u8 struct_8045086A = 0x1E; -u8 struct_8045086B = 0x14; -#pragma pop +u8 Z2Param::ENDING_BLOW_VOL_DOWN_TIME = 1; + +u8 Z2Param::ENDING_BLOW_VOL_LOWER_TIME = 10; + +u8 Z2Param::ENDING_BLOW_VOL_LOWER_RECOVER_TIME = 30; + +u8 Z2Param::ENDING_BLOW_MIN_FINISH_TIME = 20; /* 8045086C-80450870 0002EC 0004+00 0/0 3/3 0/0 .sdata None */ u8 data_8045086C = 1; @@ -158,12 +160,10 @@ f32 Z2Param::ENEMY_LASTHIT_MUTE_VOLUME; /* 80451340-80451348 -00001 0008+00 0/0 2/2 0/0 .sbss None */ /* 80451340 0001+00 data_80451340 None */ +u8 Z2Param::DARK_SE_FILTER_ON; + /* 80451341 0001+00 data_80451341 None */ +u8 Z2Param::DARK_SE_LOW_PASS_FILTER_SETTING; + /* 80451342 0006+00 data_80451342 None */ -#pragma push -#pragma force_active on -u8 struct_80451340; -u8 struct_80451341; -u8 struct_80451342; -u8 pad_80451344[4]; -#pragma pop +u8 Z2Param::SYSTEM_SE_USE_DARK_SE_SETTING; diff --git a/src/Z2AudioLib/Z2SceneMgr.cpp b/src/Z2AudioLib/Z2SceneMgr.cpp index 4b07ca8cce..14751161b0 100644 --- a/src/Z2AudioLib/Z2SceneMgr.cpp +++ b/src/Z2AudioLib/Z2SceneMgr.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2SceneMgr -// - #include "JSystem/JAudio2/JASBasicWaveBank.h" #include "JSystem/JAudio2/JAUSectionHeap.h" #include "JSystem/JAudio2/JAUSoundTable.h" @@ -16,7 +11,7 @@ #include "d/d_com_inf_game.h" /* 802B6840-802B68B0 2B1180 0070+00 0/0 1/1 0/0 .text __ct__10Z2SceneMgrFv */ -Z2SceneMgr::Z2SceneMgr(void) : JASGlobalInstance<Z2SceneMgr>(this) { +Z2SceneMgr::Z2SceneMgr() : JASGlobalInstance<Z2SceneMgr>(true) { sceneNum = -1; BGM_ID = -1; roomNum = -1; @@ -36,14 +31,16 @@ Z2SceneMgr::Z2SceneMgr(void) : JASGlobalInstance<Z2SceneMgr>(this) { field_0x1b = false; sceneExist = 0; inGame = 0; - inDarkness = false; + inDarkness_ = false; load1stWait = 0; } /* 802B68B0-802B68E0 2B11F0 0030+00 0/0 1/1 0/0 .text setInDarkness__10Z2SceneMgrFb */ -void Z2SceneMgr::setInDarkness(bool param_0) { - inDarkness = param_0; - if (!param_0) { +void Z2SceneMgr::setInDarkness(bool inDarkness) { + OS_REPORT("[Z2SceneMgr::setInDarkness] inDarkness = %d\n", inDarkness); + + inDarkness_ = inDarkness; + if (!inDarkness) { Z2GetSoundMgr()->resetFilterAll(); } } @@ -133,14 +130,14 @@ static char* sSpotName[81] = { }; /* 802B68E0-802B697C 2B1220 009C+00 3/3 2/2 2/2 .text setSceneExist__10Z2SceneMgrFb */ -void Z2SceneMgr::setSceneExist(bool param_1) { - sceneExist = param_1; +void Z2SceneMgr::setSceneExist(bool isSceneExist) { + sceneExist = isSceneExist; timer = 0; JAISeMgr* seMgr = Z2GetSoundMgr()->getSeMgr(); - if (param_1) { - inGame = 1; + if (isSceneExist) { + inGame = true; if (requestDemoWave == 0x85) { seMgr->getCategory(9)->getParams()->moveVolume(0.0f, 0); @@ -155,7 +152,9 @@ void Z2SceneMgr::setSceneExist(bool param_1) { } /* 802B697C-802B6A18 2B12BC 009C+00 0/0 1/1 0/0 .text setFadeOutStart__10Z2SceneMgrFUc */ -void Z2SceneMgr::setFadeOutStart(u8 param_0) { +void Z2SceneMgr::setFadeOutStart(u8 fadeType) { + OS_REPORT("[Z2SceneMgr::setFadeOutStart] fadeType = %d\n", fadeType); + setSceneExist(false); Z2GetSeqMgr()->bgmAllMute(33, 3.0f / 10.0f); Z2GetSeMgr()->seMoveVolumeAll(0.0f, 33); @@ -165,43 +164,51 @@ void Z2SceneMgr::setFadeOutStart(u8 param_0) { } /* 802B6A18-802B6AF8 2B1358 00E0+00 0/0 1/1 0/0 .text setFadeInStart__10Z2SceneMgrFUc */ -void Z2SceneMgr::setFadeInStart(u8 param_0) { +void Z2SceneMgr::setFadeInStart(u8 fadeType) { + OS_REPORT("[Z2SceneMgr::setFadeInStart] fadeType = %d\n", fadeType); + if (requestDemoWave == 0x7f) { Z2GetSeMgr()->seMoveVolumeAll(0.0f, 0); } else { Z2GetSeMgr()->seMoveVolumeAll(1.0f, 33); if (requestDemoWave == 0x85) { - JAISeMgr* seMgr = Z2GetSoundMgr()->getSeMgr(); - seMgr->getCategory(9)->getParams()->moveVolume(0.0f, 0); + Z2GetSoundMgr()->getSeMgr()->getCategory(9)->getParams()->moveVolume(0.0f, 0); } } + Z2GetSeqMgr()->setTwilightGateVol(1.0f); Z2GetStatusMgr()->menuOut(); if (!field_0x1a) { - Z2GetSeqMgr()->bgmAllMute(33, 1.0f); + Z2GetSeqMgr()->bgmAllUnMute(33); } inGame = true; } /* 802B6AF8-802B995C 2B1438 2E64+00 8/0 1/1 0/0 .text setSceneName__10Z2SceneMgrFPcll */ -void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { +// NONMATCHING JSULink<JAIStream>::getNext() inlining +void Z2SceneMgr::setSceneName(char* spot, s32 room, s32 layer) { + OS_REPORT("[Z2SceneMgr::setSceneName] spot = %s, room = %d, layer = %d\n", spot, room, layer); JAISoundID bgm_id = -1; JAISound* sound; - int spot = 0; + + int spotNo = 0; + u8 se_wave1 = 0; u8 se_wave2 = 0; u8 bgm_wave1 = 0; u8 bgm_wave2 = 0; u8 demo_wave = 0; + bool bVar6 = false; bool height_vol_mod = false; bool field_bgm_play = false; bool time_proc_vol_mod = false; bool bVar2 = false; field_0x1b = false; + f32 fVar1 = -1.0f; Z2GetSeqMgr()->resetBattleBgmParams(); @@ -210,23 +217,25 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSeMgr()->resetCrowdSize(); Z2GetSoundObjMgr()->setGhostEnemyState(0); Z2GetSeMgr()->resetModY(); + if (Z2GetStatusMgr()->getDemoStatus() == 8) { Z2GetStatusMgr()->setDemoName("force_end"); } - if (spotName != NULL) { - for (spot = 0; spot < ARRAY_SIZE(sSpotName); spot++) { - if (!strcmp(spotName, sSpotName[spot])) { + if (spot != NULL) { + for (spotNo = 0; spotNo < ARRAY_SIZE(sSpotName); spotNo++) { + if (strcmp(spot, sSpotName[spotNo]) == 0) { break; } } - if (spot == ARRAY_SIZE(sSpotName)) { - spot = SPOT_NONE; + + if (spotNo == ARRAY_SIZE(sSpotName)) { + spotNo = Z2SCENE_NONE; } } - switch (spot) { - case SPOT_ENEMY_TEST: + switch (spotNo) { + case Z2SCENE_ENEMY_TEST: bgm_wave2 = 2; if (room < 30) { se_wave1 = 0x8a; @@ -234,8 +243,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave1 = 0x8b; } break; - - case SPOT_ORDON_RANCH: + case Z2SCENE_ORDON_RANCH: if (layer == 1) { if (dComIfGs_isSaveSwitch(0x67)) { bgm_id = Z2BGM_TOAL_NIGHT; @@ -251,14 +259,15 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { bgm_wave2 = 2; time_proc_vol_mod = true; } + se_wave1 = 0x26; se_wave2 = 0x25; field_0x1b = true; break; - - case SPOT_ORDON_VILLAGE: + case Z2SCENE_ORDON_VILLAGE: field_0x1b = true; se_wave1 = 0x26; + if (room == 0) { se_wave2 = 0x27; switch (layer) { @@ -336,9 +345,9 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } } break; - - case SPOT_ORDON_INTERIOR: + case Z2SCENE_ORDON_INTERIOR: se_wave1 = 0x26; + switch (room) { case 0: bgm_id = Z2BGM_INDOOR; @@ -417,10 +426,10 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } field_0x1b = true; break; - - case SPOT_ORDON_SPRING: + case Z2SCENE_ORDON_SPRING: se_wave1 = 0x26; se_wave2 = 0x2d; + switch (layer) { case 4: field_0x1b = false; @@ -469,10 +478,9 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { break; } break; - - case SPOT_TWILIGHT_HYRULE_CASTLE: + case Z2SCENE_TWILIGHT_HYRULE_CASTLE: se_wave1 = 0x2e; - if (inDarkness) { + if (inDarkness_) { se_wave2 = 0x30; if (room == 0) { if (layer == 11) { @@ -506,18 +514,16 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave2 = 0x2f; } break; - - case SPOT_CASTLE_THRONE_ROOM: + case Z2SCENE_CASTLE_THRONE_ROOM: if (layer == 8) { demo_wave = 0x68; } else if (layer == 9) { demo_wave = 0x7f; } break; - - case SPOT_CORO_SHOP: + case Z2SCENE_CORO_SHOP: se_wave1 = 0x31; - if (inDarkness) { + if (inDarkness_) { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0xe; se_wave2 = 0x33; @@ -535,15 +541,14 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } } break; - - case SPOT_FARON_WOODS: + case Z2SCENE_FARON_WOODS: se_wave1 = 0x31; if (layer == 11) { demo_wave = 0x6c; - inDarkness = false; + inDarkness_ = false; } else if (layer == 9) { demo_wave = 0x6a; - } else if (inDarkness) { + } else if (inDarkness_) { if (layer == 7) { demo_wave = 0x78; } else if (layer == 8) { @@ -584,7 +589,8 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { bgm_id = Z2BGM_FILONE_FOREST; bgm_wave1 = 0xf; time_proc_vol_mod = true; - if (room == 0xe) { + + if (room == 14) { Z2GetSeqMgr()->changeBgmStatus(1); } else { Z2GetSeqMgr()->changeBgmStatus(0); @@ -593,13 +599,12 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } } break; - - case SPOT_KAKARIKO_VILLAGE: + case Z2SCENE_KAKARIKO_VILLAGE: se_wave1 = 0x34; if (layer == 8) { demo_wave = 0x6e; - inDarkness = false; - } else if (inDarkness) { + inDarkness_ = false; + } else if (inDarkness_) { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0xe; se_wave2 = 0x36; @@ -655,10 +660,9 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } } break; - - case SPOT_KAKARIKO_INTERIOR: + case Z2SCENE_KAKARIKO_INTERIOR: se_wave1 = 0x34; - if (inDarkness) { + if (inDarkness_) { se_wave2 = 0x36; if (room == 0 && layer == 8) { demo_wave = 0x6d; @@ -722,10 +726,9 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave2 = 0x86; } break; - - case SPOT_SANCTUARY_BASEMENT: + case Z2SCENE_SANCTUARY_BASEMENT: se_wave1 = 0x34; - if (inDarkness) { + if (inDarkness_) { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0xe; se_wave2 = 0x36; @@ -736,10 +739,9 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSeqMgr()->muteSceneBgm(30, 0.5f); } break; - - case SPOT_KAKARIKO_GRAVEYARD: + case Z2SCENE_KAKARIKO_GRAVEYARD: se_wave1 = 0x34; - if (inDarkness) { + if (inDarkness_) { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0xe; se_wave2 = 0x36; @@ -757,14 +759,13 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave2 = 0x37; } break; - - case SPOT_DEATH_MOUNTAIN: + case Z2SCENE_DEATH_MOUNTAIN: se_wave1 = 0x34; if (layer == 8) { demo_wave = 0x7f; se_wave1 = 0; se_wave2 = 0; - } else if (inDarkness) { + } else if (inDarkness_) { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0xe; se_wave2 = 0x39; @@ -778,8 +779,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } } break; - - case SPOT_HIDDEN_VILLAGE: + case Z2SCENE_HIDDEN_VILLAGE: if (layer == 0) { Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); if (dComIfGs_isSwitch(0x2e, 0) && !dComIfGs_isSwitch(0x11, 0)) { @@ -793,16 +793,14 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave1 = 0x34; se_wave2 = 0x4f; break; - - case SPOT_IMPAZ_HOUSE: + case Z2SCENE_IMPAZ_HOUSE: bgm_id = Z2BGM_INDOOR; bgm_wave1 = 8; se_wave1 = 0x34; se_wave2 = 0x4f; field_0x1b = true; break; - - case SPOT_SUMO_HALL: + case Z2SCENE_SUMO_HALL: if (layer == 8) { demo_wave = 0x7f; se_wave1 = 0; @@ -815,19 +813,18 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave2 = 0x3a; } break; - - case SPOT_LAKE_HYLIA: + case Z2SCENE_LAKE_HYLIA: se_wave1 = 0x3b; if (layer == 8) { demo_wave = 0x72; - inDarkness = false; + inDarkness_ = false; } else if (room == 1 && layer == 9) { demo_wave = 0x74; } else if (layer == 10 || layer == 11) { demo_wave = 0x7f; se_wave1 = 0; se_wave2 = 0; - } else if (inDarkness) { + } else if (inDarkness_) { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0xe; se_wave2 = 0x3d; @@ -850,14 +847,13 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave2 = 0x3c; } break; - - case SPOT_UPPER_ZORAS_RIVER: + case Z2SCENE_UPPER_ZORAS_RIVER: se_wave1 = 0x55; if (layer == 8) { demo_wave = 0x7f; se_wave1 = 0; se_wave2 = 0; - } else if (inDarkness) { + } else if (inDarkness_) { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0xe; se_wave2 = 0x3f; @@ -867,8 +863,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { height_vol_mod = true; } break; - - case SPOT_FISHING_POND: + case Z2SCENE_FISHING_POND: if (layer == 8) { demo_wave = 0x7f; se_wave1 = 0; @@ -882,18 +877,16 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { time_proc_vol_mod = true; } break; - - case SPOT_HENA_CABIN: + case Z2SCENE_HENA_CABIN: se_wave1 = 0x3b; bgm_id = Z2BGM_INDOOR; bgm_wave1 = 8; bgm_wave2 = 0x47; se_wave2 = 0x3e; break; - - case SPOT_ZORAS_RIVER: + case Z2SCENE_ZORAS_RIVER: se_wave1 = 0x55; - if (inDarkness) { + if (inDarkness_) { bgm_id = Z2BGM_CARGO_GAME_TW; bgm_wave1 = 0x24; se_wave2 = 0x41; @@ -911,8 +904,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave2 = 0x40; } break; - - case SPOT_ZORAS_DOMAIN: + case Z2SCENE_ZORAS_DOMAIN: se_wave1 = 0x3b; if (layer == 8 || layer == 9) { demo_wave = 0x82; @@ -920,7 +912,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave1 = 0; se_wave2 = 0; demo_wave = 0x7f; - } else if (inDarkness) { + } else if (inDarkness_) { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0x0e; bgm_wave2 = 0x2c; @@ -933,12 +925,11 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { time_proc_vol_mod = true; } break; - - case SPOT_CASTLE_TOWN: + case Z2SCENE_CASTLE_TOWN: se_wave1 = 0x42; if (layer == 8) { demo_wave = 0x68; - } else if (inDarkness) { + } else if (inDarkness_) { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0xe; se_wave2 = 0x44; @@ -961,14 +952,13 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } } break; - - case SPOT_CASTLE_TOWN_INTERIOR: + case Z2SCENE_CASTLE_TOWN_INTERIOR: if (room == 6) { se_wave1 = 0x2e; se_wave2 = 0x2f; } else { se_wave1 = 0x42; - if (inDarkness) { + if (inDarkness_) { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0xe; se_wave2 = 0x44; @@ -989,10 +979,10 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } } break; - - case SPOT_CASTLE_TOWN_SHOPS: + case Z2SCENE_CASTLE_TOWN_SHOPS: se_wave1 = 0x42; se_wave2 = 0x5b; + switch (room) { case 0: if (layer == 1) { @@ -1027,8 +1017,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { break; } break; - - case SPOT_STAR_TENT: + case Z2SCENE_STAR_TENT: se_wave1 = 0x42; se_wave2 = 0x87; /* dSv_event_flag_c::F_289 - Castle Town - Heard conversation about entering Star Game 1 */ @@ -1037,11 +1026,11 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } bgm_wave1 = 0x46; break; - - case SPOT_SACRED_GROVE: + case Z2SCENE_SACRED_GROVE: se_wave1 = 0x31; bgm_wave2 = 0x1b; se_wave2 = 0x45; + if (room == 3) { bgm_id = Z2BGM_HOLY_FOREST; bgm_wave1 = 0x2a; @@ -1066,8 +1055,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } } break; - - case SPOT_SNOWPEAK: + case Z2SCENE_SNOWPEAK: if (layer == 8) { se_wave1 = 0; se_wave2 = 0; @@ -1081,8 +1069,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } height_vol_mod = true; break; - - case SPOT_GERUDO_DESERT: + case Z2SCENE_GERUDO_DESERT: se_wave1 = 0x48; se_wave2 = 0x49; if (layer == 8 || layer == 9 || layer == 10) { @@ -1096,8 +1083,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { bgm_wave1 = 0x1f; } break; - - case SPOT_ARBITERS_GROUNDS_EXTERIOR: + case Z2SCENE_ARBITERS_GROUNDS_EXTERIOR: if (room == 1) { Z2GetSoundObjMgr()->setForceBattleArea(true, 1000, 2000, 9000); bgm_wave1 = 0x3d; @@ -1106,8 +1092,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave1 = 0x48; se_wave2 = 0x49; break; - - case SPOT_MIRROR_CHAMBER: + case Z2SCENE_MIRROR_CHAMBER: switch (layer) { case 7: case 8: @@ -1131,8 +1116,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave1 = 0x48; se_wave2 = 0x49; break; - - case SPOT_HYRULE_FIELD: + case Z2SCENE_HYRULE_FIELD: se_wave1 = 0x4a; if (room == 10 && layer == 11) { demo_wave = 0x74; @@ -1149,13 +1133,14 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { field_0x1b = true; fVar1 = 1.0f; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); - } else if (inDarkness) { + } else if (inDarkness_) { if (layer == 12) { demo_wave = 0x6a; } else { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0xe; } + se_wave2 = 0x4c; if (room == 13 && layer == 14) { bgm_wave2 = 0x1c; @@ -1167,6 +1152,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } else { bgm_id = Z2BGM_FIELD_LINK_NIGHT; } + bgm_wave1 = 0x19; switch (room) { case 2: @@ -1220,8 +1206,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } } break; - - case SPOT_CASTLE_TOWN_GATES: + case Z2SCENE_CASTLE_TOWN_GATES: se_wave1 = 0x4a; if (layer == 8) { demo_wave = 0x73; @@ -1233,7 +1218,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave1 = 0; se_wave2 = 0; demo_wave = 0x7f; - } else if (inDarkness) { + } else if (inDarkness_) { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0xe; se_wave2 = 0x4c; @@ -1248,6 +1233,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave2 = 0x89; fVar1 = 1.0f; } + field_bgm_play = true; if (Z2GetStatusMgr()->checkDayTime()) { bgm_id = Z2BGM_FIELD_LINK_DAY; @@ -1257,8 +1243,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { bgm_wave1 = 0x19; } break; - - case SPOT_HYLIA_BRIDGE_BATTLE: + case Z2SCENE_HYLIA_BRIDGE_BATTLE: se_wave1 = 0x54; bgm_wave1 = 0x3d; se_wave2 = 0x4e; @@ -1266,8 +1251,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); break; - - case SPOT_ELDIN_BRIDGE_BATTLE: + case Z2SCENE_ELDIN_BRIDGE_BATTLE: se_wave1 = 0x4a; if (layer == 11) { se_wave1 = 0; @@ -1286,8 +1270,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); } break; - - case SPOT_SHADES_REALM: + case Z2SCENE_SHADES_REALM: se_wave1 = 0x4a; if (dComIfGs_getStartPoint() == 2) { bgm_wave2 = 0x50; @@ -1304,12 +1287,13 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } else { bgm_wave1 = 0x44; } + se_wave2 = 0x5d; field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); break; - case SPOT_FOREST_TEMPLE: + case Z2SCENE_FOREST_TEMPLE: bgm_id = Z2BGM_DUNGEON_FOREST; bgm_wave1 = 0xa; bgm_wave2 = 0x40; @@ -1317,8 +1301,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave2 = 2; Z2GetSeqMgr()->changeBgmStatus(room); break; - - case SPOT_FOREST_TEMPLE_MINIBOSS: + case Z2SCENE_FOREST_TEMPLE_MINIBOSS: bgm_id = Z2BGM_DUNGEON_FOREST; bgm_wave1 = 0xa; bgm_wave2 = 0xb; @@ -1326,10 +1309,9 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave2 = 3; field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); - Z2GetSeqMgr()->unMuteSceneBgm(struct_80450860); + Z2GetSeqMgr()->unMuteSceneBgm(Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME); break; - - case SPOT_FOREST_TEMPLE_BOSS: + case Z2SCENE_FOREST_TEMPLE_BOSS: se_wave1 = 1; if (dComIfGs_isStageSwitch(2, 1)) { bgm_id = Z2BGM_DUNGEON_FOREST; @@ -1343,10 +1325,9 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); } - Z2GetSeqMgr()->unMuteSceneBgm(struct_80450860); + Z2GetSeqMgr()->unMuteSceneBgm(Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME); break; - - case SPOT_GORON_MINES: + case Z2SCENE_GORON_MINES: bgm_id = Z2BGM_DUNGEON_LV2; bgm_wave1 = 0x13; bgm_wave2 = 0x3c; @@ -1354,8 +1335,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave1 = 5; se_wave2 = 6; break; - - case SPOT_GORON_MINES_MINIBOSS: + case Z2SCENE_GORON_MINES_MINIBOSS: bgm_id = Z2BGM_DUNGEON_LV2; bgm_wave1 = 0x13; se_wave1 = 5; @@ -1364,8 +1344,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); break; - - case SPOT_GORON_MINES_BOSS: + case Z2SCENE_GORON_MINES_BOSS: se_wave1 = 5; if (dComIfGs_isStageSwitch(3, 0x7c)) { bgm_id = Z2BGM_DUNGEON_LV2; @@ -1380,16 +1359,14 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); } break; - - case SPOT_LAKEBED_TEMPLE: + case Z2SCENE_LAKEBED_TEMPLE: bgm_id = Z2BGM_DUNGEON_LV3; bgm_wave1 = 0x15; bgm_wave2 = 0x40; se_wave1 = 9; se_wave2 = 0xa; break; - - case SPOT_LAKEBED_TEMPLE_MINIBOSS: + case Z2SCENE_LAKEBED_TEMPLE_MINIBOSS: bgm_id = Z2BGM_DUNGEON_LV3; bgm_wave1 = 0x15; bgm_wave2 = 0x17; @@ -1398,8 +1375,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); break; - - case SPOT_LAKEBED_TEMPLE_BOSS: + case Z2SCENE_LAKEBED_TEMPLE_BOSS: se_wave1 = 9; if (dComIfGs_isStageSwitch(4, 0xe)) { bgm_id = Z2BGM_DUNGEON_LV3; @@ -1414,8 +1390,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); } break; - - case SPOT_ARBITERS_GROUNDS: + case Z2SCENE_ARBITERS_GROUNDS: bgm_id = Z2BGM_DUNGEON_LV4; bgm_wave1 = 0x1a; bgm_wave2 = 0x41; @@ -1425,8 +1400,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); } break; - - case SPOT_ARBITERS_GROUNDS_MINIBOSS: + case Z2SCENE_ARBITERS_GROUNDS_MINIBOSS: bgm_id = Z2BGM_DUNGEON_LV4; bgm_wave1 = 0x1a; bgm_wave2 = 0x22; @@ -1435,8 +1409,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); break; - - case SPOT_ARBITERS_GROUNDS_BOSS: + case Z2SCENE_ARBITERS_GROUNDS_BOSS: se_wave1 = 0xd; if (dComIfGs_isStageSwitch(0xa, 0xa)) { bgm_id = Z2BGM_DUNGEON_LV4; @@ -1451,8 +1424,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); } break; - - case SPOT_SNOWPEAK_RUINS: + case Z2SCENE_SNOWPEAK_RUINS: bgm_id = Z2BGM_DUNGEON_LV5; bgm_wave1 = 0x1d; bgm_wave2 = 0x40; @@ -1460,8 +1432,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave2 = 0x12; Z2GetSeqMgr()->changeBgmStatus(room); break; - - case SPOT_SNOWPEAK_RUINS_MINIBOSS: + case Z2SCENE_SNOWPEAK_RUINS_MINIBOSS: bgm_id = Z2BGM_DUNGEON_LV5; bgm_wave1 = 0x1d; bgm_wave2 = 0x38; @@ -1471,8 +1442,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); Z2GetSeqMgr()->changeBgmStatus(room); break; - - case SPOT_SNOWPEAK_RUINS_BOSS: + case Z2SCENE_SNOWPEAK_RUINS_BOSS: Z2GetSeqMgr()->unMuteSceneBgm(60); se_wave1 = 0x11; if (dComIfGs_isStageSwitch(8, 0x19)) { @@ -1488,16 +1458,14 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); } break; - - case SPOT_TEMPLE_OF_TIME: + case Z2SCENE_TEMPLE_OF_TIME: bgm_id = Z2BGM_DUNGEON_LV6; bgm_wave1 = 0x26; bgm_wave2 = 0x40; se_wave1 = 0x15; se_wave2 = 0x16; break; - - case SPOT_TEMPLE_OF_TIME_MINIBOSS: + case Z2SCENE_TEMPLE_OF_TIME_MINIBOSS: bgm_id = Z2BGM_DUNGEON_LV6; bgm_wave1 = 0x26; bgm_wave2 = 0x3f; @@ -1506,8 +1474,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); break; - - case SPOT_TEMPLE_OF_TIME_BOSS: + case Z2SCENE_TEMPLE_OF_TIME_BOSS: se_wave1 = 0x15; if (dComIfGs_isStageSwitch(7, 0x18)) { bgm_id = Z2BGM_DUNGEON_LV6; @@ -1522,8 +1489,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); } break; - - case SPOT_CITY_IN_THE_SKY: + case Z2SCENE_CITY_IN_THE_SKY: if (room == 16) { bgm_id = Z2BGM_OBACHAN; bgm_wave1 = 0x40; @@ -1534,8 +1500,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave1 = 0x19; se_wave2 = 0x1a; break; - - case SPOT_CITY_IN_THE_SKY_MINIBOSS: + case Z2SCENE_CITY_IN_THE_SKY_MINIBOSS: bgm_id = Z2BGM_DUNGEON_LV7; bgm_wave1 = 0x27; bgm_wave2 = 0x43; @@ -1544,8 +1509,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); break; - - case SPOT_CITY_IN_THE_SKY_BOSS: + case Z2SCENE_CITY_IN_THE_SKY_BOSS: se_wave1 = 0x19; if (dComIfGs_isStageSwitch(0x16, 0x25)) { bgm_id = Z2BGM_DUNGEON_LV7; @@ -1560,8 +1524,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); } break; - - case SPOT_PALACE_OF_TWILIGHT: + case Z2SCENE_PALACE_OF_TWILIGHT: if (layer == 8) { if (room == 0 || room == 9) { demo_wave = 0x77; @@ -1579,9 +1542,8 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { se_wave1 = 0x1d; se_wave2 = 0x1e; break; - - case SPOT_PALACE_OF_TWILIGHT_MINIBOSS_A: - case SPOT_PALACE_OF_TWILIGHT_MINIBOSS_B: + case Z2SCENE_PALACE_OF_TWILIGHT_MINIBOSS_A: + case Z2SCENE_PALACE_OF_TWILIGHT_MINIBOSS_B: bgm_id = Z2BGM_DUNGEON_LV8; bgm_wave1 = 0x28; bgm_wave2 = 0x48; @@ -1590,8 +1552,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); break; - - case SPOT_PALACE_OF_TWILIGHT_THRONE_ROOM: + case Z2SCENE_PALACE_OF_TWILIGHT_THRONE_ROOM: if (layer == 8) { demo_wave = 0x81; } else if (layer == 9) { @@ -1611,19 +1572,19 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { } } break; - - case SPOT_PALACE_OF_TWILIGHT_BOSS: + case Z2SCENE_PALACE_OF_TWILIGHT_BOSS: se_wave1 = 0x1d; bgm_wave1 = 0x39; se_wave2 = 0x20; + if (room == 50) { - inDarkness = true; + inDarkness_ = true; } + field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); break; - - case SPOT_HYRULE_CASTLE: + case Z2SCENE_HYRULE_CASTLE: if (room >= 1 && room <= 6) { bgm_id = 0x2000040; bgm_wave2 = 0x58; @@ -1635,13 +1596,13 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSeqMgr()->bgmStop(45, 0); bgm_wave2 = 0x3d; } + se_wave1 = 0x21; se_wave2 = 0x22; field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); break; - - case SPOT_FINAL_BATTLE_THRONE_ROOM: + case Z2SCENE_FINAL_BATTLE_THRONE_ROOM: if (room == 50) { if (layer == 8) { demo_wave = 0x7b; @@ -1657,20 +1618,19 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { demo_wave = 0x7c; } } + se_wave1 = 0x56; field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); break; - - case SPOT_FINAL_BATTLE_FIELD: + case Z2SCENE_FINAL_BATTLE_FIELD: bgm_wave1 = 0x4b; se_wave2 = 0x63; se_wave1 = 0x8c; field_0x1b = true; Z2GetSoundObjMgr()->setForceBattleArea(true, 700, 1100, 1500); break; - - case SPOT_FINAL_BATTLE_CUTSCENE: + case Z2SCENE_FINAL_BATTLE_CUTSCENE: if (layer == 8) { demo_wave = 0x7c; fVar1 = 0.1f; @@ -1683,53 +1643,46 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { demo_wave = 0x7f; } break; - - case SPOT_LIGHT_SPIRIT_CHAMBER: + case Z2SCENE_LIGHT_SPIRIT_CHAMBER: demo_wave = 0x7c; break; - - case SPOT_CAVE_OF_ORDEALS: + case Z2SCENE_CAVE_OF_ORDEALS: se_wave2 = 0x51; if (room != 49 || layer < 5 || layer > 8) { bgm_id = Z2BGM_SUB_DUNGEON; bgm_wave1 = 0x45; } break; - - case SPOT_ICE_BLOCK_PUZZLE: + case Z2SCENE_ICE_BLOCK_PUZZLE: se_wave1 = 0x11; se_wave2 = 0x12; bgm_id = Z2BGM_SUB_DUNGEON; bgm_wave1 = 0x45; break; - - case SPOT_GORGE_LANTERN_CAVE: - case SPOT_LAKE_LANTERN_CAVE: + case Z2SCENE_GORGE_LANTERN_CAVE: + case Z2SCENE_LAKE_LANTERN_CAVE: se_wave2 = 0x52; bgm_id = Z2BGM_SUB_DUNGEON; bgm_wave1 = 0x45; break; - - case SPOT_ELDIN_MAGNET_CAVE: + case Z2SCENE_ELDIN_MAGNET_CAVE: se_wave1 = 5; se_wave2 = 6; bgm_id = Z2BGM_SUB_DUNGEON; bgm_wave1 = 0x45; break; - - case SPOT_GROTTO_GRASS_1: - case SPOT_GROTTO_GRASS_2: - case SPOT_GROTTO_ROCK_1: - case SPOT_GROTTO_ROCK_2: - case SPOT_GROTTO_POND: + case Z2SCENE_GROTTO_GRASS_1: + case Z2SCENE_GROTTO_GRASS_2: + case Z2SCENE_GROTTO_ROCK_1: + case Z2SCENE_GROTTO_ROCK_2: + case Z2SCENE_GROTTO_POND: se_wave2 = 0x50; bgm_id = Z2BGM_SUB_DUNGEON; bgm_wave1 = 0x45; break; - - case SPOT_FARON_WOODS_CAVE: + case Z2SCENE_FARON_WOODS_CAVE: se_wave2 = 0x53; - if (inDarkness) { + if (inDarkness_) { bgm_id = Z2BGM_TWILIGHT; bgm_wave1 = 0xe; } else { @@ -1743,25 +1696,24 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[104]) /* dSv_event_flag_c::F_0250 - Cutscene - [cutscene: 21] reunion with Zelda / Midna revived (Hyrule Castle barrier appears) */ && !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[250]) - && demo_wave == 0 && spot != SPOT_ELDIN_BRIDGE_BATTLE) + && demo_wave == 0 && spotNo != Z2SCENE_ELDIN_BRIDGE_BATTLE) { bgm_wave1 = 0x36; - if (spot == SPOT_CASTLE_TOWN_SHOPS && room == 5) { + if (spotNo == Z2SCENE_CASTLE_TOWN_SHOPS && room == 5) { bgm_id = -1; } else { bgm_id = Z2BGM_MIDNA_SOS; - if ((spot == SPOT_CASTLE_TOWN_INTERIOR && room == 5) - || spot == SPOT_CASTLE_TOWN_SHOPS || spot == SPOT_STAR_TENT) + if ((spotNo == Z2SCENE_CASTLE_TOWN_INTERIOR && room == 5) + || spotNo == Z2SCENE_CASTLE_TOWN_SHOPS || spotNo == Z2SCENE_STAR_TENT) { Z2GetSeqMgr()->muteSceneBgm(33, 0.5f); } else { Z2GetSeqMgr()->unMuteSceneBgm(33); } } + time_proc_vol_mod = false; - } else if (sceneNum == SPOT_CASTLE_TOWN_SHOPS && roomNum == 1 - && !(spot == SPOT_CASTLE_TOWN && room == 3)) - { + } else if (sceneNum == Z2SCENE_CASTLE_TOWN_SHOPS && roomNum == 1 && !(spotNo == Z2SCENE_CASTLE_TOWN && room == 3)) { bgm_id = Z2BGM_FORTUNE; bgm_wave1 = 0x37; Z2GetSeqMgr()->changeBgmStatus(1); @@ -1774,7 +1726,7 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { JSULink<JAIStream>* stream; for (stream = stream_list->getFirst(); stream != NULL; stream = stream->getNext()) { if (bVar2 || sound_table->getTypeID(stream->getObject()->getID()) != 0x71) { - stream->getObject()->stop(struct_80450860); + stream->getObject()->stop(Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME); } } } @@ -1782,15 +1734,16 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { Z2GetSeqMgr()->setHeightVolMod(height_vol_mod, 30); Z2GetSeqMgr()->setTimeProcVolMod(time_proc_vol_mod, 0); Z2GetSeqMgr()->setFieldBgmPlay(field_bgm_play); - Z2GetEnvSeMgr()->initSceneEnvSe(spot, room, fVar1); + Z2GetEnvSeMgr()->initSceneEnvSe(spotNo, room, fVar1); - if (sceneNum != spot || bgm_id != BGM_ID || se_wave1 != loadedSeWave_1 + if (sceneNum != spotNo || bgm_id != BGM_ID || se_wave1 != loadedSeWave_1 || se_wave2 != loadedSeWave_2 || bgm_wave1 != loadedBgmWave_1 || bgm_wave2 != loadedBgmWave_2 || demo_wave != loadedDemoWave) { - sceneNum = spot; + sceneNum = spotNo; sceneChange(bgm_id, se_wave1, se_wave2, bgm_wave1, bgm_wave2, demo_wave, false); } + roomNum = room; } @@ -1798,6 +1751,9 @@ void Z2SceneMgr::setSceneName(char* spotName, s32 room, s32 layer) { * sceneChange__10Z2SceneMgrF10JAISoundIDUcUcUcUcUcb */ void Z2SceneMgr::sceneChange(JAISoundID bgm, u8 seWave1, u8 seWave2, u8 bgmWave1, u8 bgmWave2, u8 demoWave, bool param_6) { + OS_REPORT("[Z2SceneMgr::sceneChange] bgm:0x%08x, SeWave1:%d, SeWave2:%d BgmWave1:%d BgmWave2:%d demoWave:%d (%d)\n", + *(u32*)&bgm, seWave1, seWave2, bgmWave1, bgmWave2, demoWave, param_6); + if (bgm != BGM_ID) { if (Z2GetSeqMgr()->getMainBgmID() == bgm) { field_0x1a = false; @@ -1843,7 +1799,7 @@ void Z2SceneMgr::framework() { if (timer < 10000) { timer++; } - if (!field_0x1b && Z2GetStatusMgr()->getDemoStatus() != 3 && timer == struct_80450863) { + if (!field_0x1b && Z2GetStatusMgr()->getDemoStatus() != 3 && timer == Z2Param::BATTLE_BGM_WAIT_TIME) { Z2GetSeqMgr()->setBattleBgmOff(false); } } else { @@ -1854,6 +1810,8 @@ void Z2SceneMgr::framework() { /* 802B9D40-802B9D98 2B4680 0058+00 0/0 1/1 0/0 .text load1stDynamicWave__10Z2SceneMgrFv */ void Z2SceneMgr::load1stDynamicWave() { + OS_REPORT("[Z2SceneMgr::load1stDynamicWave] load1stWait:%d\n", load1stWait); + timer = 0; Z2GetSoundObjMgr()->deleteEnemyAll(); setSceneExist(false); @@ -1864,6 +1822,8 @@ void Z2SceneMgr::load1stDynamicWave() { /* 802B9D98-802B9FC8 2B46D8 0230+00 2/2 0/0 0/0 .text _load1stWaveInner_1__10Z2SceneMgrFv */ void Z2SceneMgr::_load1stWaveInner_1() { + OS_REPORT("[Z2SceneMgr::_load1stWaveInner_1] requestSe:%d loadedSe:%d\n", requestSeWave_1, loadedSeWave_1); + Z2GetSeMgr()->seStopAll(0); Z2GetEnvSeMgr()->resetSceneInner(); /* dSv_event_flag_c::M_071 - Cutscene - [cutscene: 20] Zant appears (during Midna's desperate hour) */ @@ -1903,7 +1863,8 @@ void Z2SceneMgr::_load1stWaveInner_1() { } if (field_0x1a && Z2GetSeqMgr()->checkBgmPlaying()) { - Z2GetSeqMgr()->bgmStop(0xf, 0); + OS_REPORT("[Z2SceneMgr::load1stDynamicWave]bgm StopCount = %d\n", 15); + Z2GetSeqMgr()->bgmStop(15, 0); load1stWait = -15; } else { _load1stWaveInner_2(); @@ -1913,6 +1874,8 @@ void Z2SceneMgr::_load1stWaveInner_1() { /* 802B9FC8-802BA09C 2B4908 00D4+00 2/2 0/0 0/0 .text _load1stWaveInner_2__10Z2SceneMgrFv */ void Z2SceneMgr::_load1stWaveInner_2() { + OS_REPORT("[Z2SceneMgr::_load1stWaveInner_2] requestBgm:%d loadedBgm:%d\n", requestBgmWave_1, loadedBgmWave_1); + if (loadedBgmWave_2 != 0 && requestBgmWave_2 != loadedBgmWave_2) { eraseBgmWave(loadedBgmWave_2); loadedBgmWave_2 = 0; @@ -1936,13 +1899,15 @@ void Z2SceneMgr::_load1stWaveInner_2() { /* 802BA09C-802BA120 2B49DC 0084+00 0/0 1/1 0/0 .text check1stDynamicWave__10Z2SceneMgrFv */ bool Z2SceneMgr::check1stDynamicWave() { - return load1stWait != 0 || getSeLoadStatus(requestSeWave_1) == 1 - || getBgmLoadStatus(requestBgmWave_1) == 1; + return load1stWait != 0 || getSeLoadStatus(requestSeWave_1) == 1 || getBgmLoadStatus(requestBgmWave_1) == 1; } /* 802BA120-802BA294 2B4A60 0174+00 0/0 2/2 0/0 .text load2ndDynamicWave__10Z2SceneMgrFv */ void Z2SceneMgr::load2ndDynamicWave() { + OS_REPORT("[Z2SceneMgr::load2ndDynamicWave] requestSe:%d, loadedSe:%d requestBgm:%d loadedBgm:%d requestDemo:%d loadedDemo:%d\n", + requestSeWave_2, loadedSeWave_2, requestBgmWave_2, loadedBgmWave_2, requestDemoWave, loadedDemoWave); + if (requestDemoWave != loadedDemoWave) { if (loadedSeWave_2 != 0 && eraseSeWave(loadedSeWave_2)) { loadedSeWave_2 = 0; @@ -1983,10 +1948,10 @@ void Z2SceneMgr::load2ndDynamicWave() { /* 802BA294-802BA56C 2B4BD4 02D8+00 1/0 2/2 0/0 .text sceneBgmStart__10Z2SceneMgrFv */ // NONMATCHING - extra BGM_ID load void Z2SceneMgr::sceneBgmStart() { - OS_REPORT("[Z2SceneMgr::sceneBgmStart] %08x", BGM_ID.mId.mFullId); - + OS_REPORT("[Z2SceneMgr::sceneBgmStart] %08x\n", *(u32*)&BGM_ID); inGame = true; - BOOL r28 = FALSE; + + int var_r28 = 0; setSceneExist(true); Z2GetStatusMgr()->setPauseFlag(0); @@ -1994,9 +1959,10 @@ void Z2SceneMgr::sceneBgmStart() { return; } - if (!BGM_ID.isAnonymous() && !r28 && Z2GetStatusMgr()->getDemoStatus() != 11) { + if (!BGM_ID.isAnonymous() && var_r28 == 0 && Z2GetStatusMgr()->getDemoStatus() != 11) { bool var; - switch (BGM_ID.mId.mBytes.b0) { + int section = BGM_ID.id_.info.type.parts.sectionID; + switch (section) { case 1: var = false; switch (Z2GetSeqMgr()->getSubBgmID()) { @@ -2017,7 +1983,7 @@ void Z2SceneMgr::sceneBgmStart() { case Z2BGM_DUNGEON_LV8: case Z2BGM_DUNGEON_LV9_02: case Z2BGM_SNOW_MOUNTAIN: - if (sceneNum == SPOT_CASTLE_TOWN_SHOPS) { + if (sceneNum == Z2SCENE_CASTLE_TOWN_SHOPS) { Z2GetSeqMgr()->changeBgmStatus(5); } else { Z2GetSeqMgr()->changeBgmStatus(roomNum); @@ -2030,27 +1996,27 @@ void Z2SceneMgr::sceneBgmStart() { Z2GetSeqMgr()->changeBgmStatus(0); break; case Z2BGM_CHURCH2: - if (sceneNum == SPOT_SANCTUARY_BASEMENT) { + if (sceneNum == Z2SCENE_SANCTUARY_BASEMENT) { Z2GetSeqMgr()->muteSceneBgm(0, 0.5f); } break; case Z2BGM_MIDNA_SOS: - if ((sceneNum == SPOT_CASTLE_TOWN_INTERIOR && roomNum == 5) - || sceneNum == SPOT_CASTLE_TOWN_SHOPS || sceneNum == SPOT_STAR_TENT) + if ((sceneNum == Z2SCENE_CASTLE_TOWN_INTERIOR && roomNum == 5) + || sceneNum == Z2SCENE_CASTLE_TOWN_SHOPS || sceneNum == Z2SCENE_STAR_TENT) { Z2GetSeqMgr()->muteSceneBgm(0, 0.5f); } break; case Z2BGM_TOAL_NIGHT: - if (sceneNum == SPOT_ORDON_INTERIOR && roomNum == 2) { + if (sceneNum == Z2SCENE_ORDON_INTERIOR && roomNum == 2) { Z2GetSeqMgr()->changeBgmStatus(2); } else { Z2GetSeqMgr()->changeBgmStatus(0); } break; case Z2BGM_FILONE_FOREST: - if (sceneNum == SPOT_CORO_SHOP - || (sceneNum == SPOT_FARON_WOODS && roomNum == 14)) + if (sceneNum == Z2SCENE_CORO_SHOP + || (sceneNum == Z2SCENE_FARON_WOODS && roomNum == 14)) { Z2GetSeqMgr()->changeBgmStatus(2); } else { @@ -2075,6 +2041,10 @@ void Z2SceneMgr::sceneBgmStart() { /* 802BA56C-802BA5C0 2B4EAC 0054+00 0/0 1/1 0/0 .text loadStaticWaves__10Z2SceneMgrFv */ void Z2SceneMgr::loadStaticWaves() { + OS_REPORT("[Z2SceneMgr::loadStaticWaves] 常駐シーン波形を読み込みます\n"); + #if PLATFORM_SHIELD + loadSceneWave(0, 2); + #endif loadSeWave(0); loadBgmWave(0); loadSeWave(0x58); @@ -2089,7 +2059,10 @@ BOOL Z2SceneMgr::checkFirstWaves() { /* 802BA5C8-802BA630 2B4F08 0068+00 2/2 0/0 0/0 .text eraseSeWave__10Z2SceneMgrFUl */ bool Z2SceneMgr::eraseSeWave(u32 wave) { - JASWaveBank* wave_bank = JAUSectionHeap::getInstance()->getWaveBankTable().getWaveBank(0); + JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance(); + JUT_ASSERT(2976, sectionHeap); + + JASWaveBank* wave_bank = sectionHeap->getWaveBankTable().getWaveBank(0); if (wave_bank != NULL) { JASWaveArc* wave_arc = wave_bank->getWaveArc(wave); if (wave_arc != NULL) { @@ -2101,7 +2074,10 @@ bool Z2SceneMgr::eraseSeWave(u32 wave) { /* 802BA630-802BA698 2B4F70 0068+00 2/2 0/0 0/0 .text eraseBgmWave__10Z2SceneMgrFUl */ bool Z2SceneMgr::eraseBgmWave(u32 wave) { - JASWaveBank* wave_bank = JAUSectionHeap::getInstance()->getWaveBankTable().getWaveBank(1); + JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance(); + JUT_ASSERT(2988, sectionHeap); + + JASWaveBank* wave_bank = sectionHeap->getWaveBankTable().getWaveBank(1); if (wave_bank != NULL) { JASWaveArc* wave_arc = wave_bank->getWaveArc(wave); if (wave_arc != NULL) { @@ -2113,7 +2089,10 @@ bool Z2SceneMgr::eraseBgmWave(u32 wave) { /* 802BA698-802BA704 2B4FD8 006C+00 1/1 0/0 0/0 .text getWaveLoadStatus__10Z2SceneMgrFUlUl */ s32 Z2SceneMgr::getWaveLoadStatus(u32 wave, u32 bank) { - JASWaveBank* wave_bank = JAUSectionHeap::getInstance()->getWaveBankTable().getWaveBank(bank); + JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance(); + JUT_ASSERT(3001, sectionHeap); + + JASWaveBank* wave_bank = sectionHeap->getWaveBankTable().getWaveBank(bank); if (wave_bank != NULL) { JASWaveArc* wave_arc = wave_bank->getWaveArc(wave); if (wave_arc != NULL) { @@ -2123,26 +2102,52 @@ s32 Z2SceneMgr::getWaveLoadStatus(u32 wave, u32 bank) { return 0; } +#if PLATFORM_SHIELD +bool Z2SceneMgr::loadSceneWave(u32 wave, u32 bank) { + JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance(); + JUT_ASSERT(3014, sectionHeap); + + JASWaveBank* wave_bank = sectionHeap->getWaveBankTable().getWaveBank(bank); + if (wave_bank != NULL) { + JASWaveArc* wave_arc = wave_bank->getWaveArc(wave); + if (wave_arc != NULL) { + return wave_arc->load(NULL); + } + } + return false; +} +#endif + /* 802BA704-802BA770 2B5044 006C+00 3/3 0/0 0/0 .text loadSeWave__10Z2SceneMgrFUl */ bool Z2SceneMgr::loadSeWave(u32 wave) { - JASWaveBank* wave_bank = JAUSectionHeap::getInstance()->getWaveBankTable().getWaveBank(0); + JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance(); + JUT_ASSERT(3030, sectionHeap); + + JASWaveBank* wave_bank = sectionHeap->getWaveBankTable().getWaveBank(0); if (wave_bank != NULL) { JASWaveArc* wave_arc = wave_bank->getWaveArc(wave); if (wave_arc != NULL) { return wave_arc->load(NULL); } } + + JUT_WARN_DEVICE(3038, 1, "Z2SceneMgr::cannot load SE wave:%d\n", wave); return false; } /* 802BA770-802BA7DC 2B50B0 006C+00 3/3 0/0 0/0 .text loadBgmWave__10Z2SceneMgrFUl */ bool Z2SceneMgr::loadBgmWave(u32 wave) { - JASWaveBank* wave_bank = JAUSectionHeap::getInstance()->getWaveBankTable().getWaveBank(1); + JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance(); + JUT_ASSERT(3047, sectionHeap); + + JASWaveBank* wave_bank = sectionHeap->getWaveBankTable().getWaveBank(1); if (wave_bank != NULL) { JASWaveArc* wave_arc = wave_bank->getWaveArc(wave); if (wave_arc != NULL) { return wave_arc->loadTail(NULL); } } + + JUT_WARN_DEVICE(3055, 1, "Z2SceneMgr::cannot load BGM wave:%d\n", wave); return false; } diff --git a/src/Z2AudioLib/Z2SeMgr.cpp b/src/Z2AudioLib/Z2SeMgr.cpp index cbb20a3614..f4f02fe6e9 100644 --- a/src/Z2AudioLib/Z2SeMgr.cpp +++ b/src/Z2AudioLib/Z2SeMgr.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2SeMgr -// - #include "Z2AudioLib/Z2SeMgr.h" #include "Z2AudioLib/Z2Audience.h" #include "Z2AudioLib/Z2Calc.h" @@ -16,7 +11,7 @@ #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) { +Z2SeMgr::Z2SeMgr() : JASGlobalInstance(true), mSoundHandles(mSoundHandle, 24) { field_0x3c0 = 0; field_0x3c1 = 0; field_0x3c2 = 0; @@ -31,24 +26,34 @@ Z2SeMgr::Z2SeMgr() : JASGlobalInstance(this), mSoundHandles(mSoundHandle, 0x18) } Z2MultiSeObj::Z2MultiSeObj() { - mSoundID = 0xFFFFFFFF; - field_0x20 = 0; + soundID_ = 0xFFFFFFFF; + reverb_ = 0; } /* 802AB750-802AB80C 2A6090 00BC+00 0/0 1/1 0/0 .text initSe__7Z2SeMgrFv */ void Z2SeMgr::initSe() { + #if VERSION == VERSION_SHIELD_DEBUG + dbg_field_0x68.releaseSound(); + dbg_field_0x6c = 0.5f; + dbg_field_0x70 = 0.0f; + dbg_field_0x74 = 0.0f; + dbg_field_0x78 = 0.0f; + #endif + for (u8 i = 0; i < 10; i++) { mLevelObjSe[i].resetMultiSePos(); - mLevelObjSe[i].mSoundID = 0xffffffff; - mLevelObjSe[i].field_0x20 = 0; + mLevelObjSe[i].soundID_ = 0xFFFFFFFF; + mLevelObjSe[i].reverb_ = 0; } + mLevelObjectSeCount = 0; for (u8 i = 0; i < 10; i++) { mMultiTriggerSe[i].resetMultiSePos(); - mMultiTriggerSe[i].mSoundID = 0xffffffff; - mMultiTriggerSe[i].field_0x20 = 0; + mMultiTriggerSe[i].soundID_ = 0xFFFFFFFF; + mMultiTriggerSe[i].reverb_ = 0; } + mMultiTriggerSeCount = 0; resetModY(); } @@ -61,7 +66,7 @@ void Z2SeMgr::resetModY() { /* 802AB830-802AB93C 2A6170 010C+00 1/1 0/0 0/0 .text modHeightAtCamera__7Z2SeMgrFPPC3Vec */ -void Z2SeMgr::modHeightAtCamera(Vec const** param_0) { +void Z2SeMgr::modHeightAtCamera(const Vec** param_0) { if (*param_0 != NULL) { int idx = 9999; for (int i = 0; i < 8; i++) { @@ -70,8 +75,9 @@ void Z2SeMgr::modHeightAtCamera(Vec const** param_0) { break; } } + if (idx == 9999) { - int i; + int i = 0; for (i = 0; i < 8; i++) { if (mModY[i] == NULL) { idx = i; @@ -79,15 +85,19 @@ void Z2SeMgr::modHeightAtCamera(Vec const** param_0) { break; } } + if (i == 8) { + JUT_WARN_DEVICE(126, 1, "%s", "Z2SeMgr: cannot mod cam_y"); return; } } + field_0x340[idx] = **param_0; Vec cam_pos = Z2GetAudience()->getAudioCamPos(0); if (field_0x340[idx].y > cam_pos.y) { field_0x340[idx].y = cam_pos.y; } + *param_0 = &field_0x340[idx]; } } @@ -110,14 +120,14 @@ void Z2SeMgr::decrCrowdSize() { /* 802AB984-802AC50C 2A62C4 0B88+00 1/1 196/196 549/549 .text * seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc */ -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) { +bool Z2SeMgr::seStart(JAISoundID soundID, const Vec* posPtr, u32 param_2, s8 reverb, + f32 pitch, f32 volume, f32 pan, f32 dolby, u8 param_8) { + if (soundID == 0xFFFFFFFF) { return false; } if (param_8 != 1) { - switch (i_soundID) { + switch (soundID) { case Z2SE_OBJ_L8_STAIR_ON: case Z2SE_OBJ_L8_STAIR_MV_UP: case Z2SE_OBJ_L8_STAIR_MV_DW: @@ -126,12 +136,12 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_ case Z2SE_OBJ_L8_L_BALL_SW_ON: case Z2SE_OBJ_L8_L_LIFT_ON: case Z2SE_OBJ_GANON_BARRIER_APPR: - setMultiTriggerSE(i_soundID, const_cast<Vec*>(i_pos), i_reverb); + setMultiTriggerSE(soundID, const_cast<Vec*>(posPtr), reverb); return false; } } - switch (i_soundID) { + switch (soundID) { case Z2SE_QUIT_GAME: Z2GetStatusMgr()->menuOut(); break; @@ -181,28 +191,26 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_ return false; } param_2 = param_2 * param_2; - i_volume = param_2 / 10000.0f; + volume = param_2 / 10000.0f; break; case Z2SE_OBJ_BOMB_BOUND: - if (i_volume >= 100.0f) { - i_volume = 100.0f; + if (volume >= 100.0f) { + volume = 100.0f; } - if (i_volume <= 0.0f) { + if (volume <= 0.0f) { return false; } - i_volume = (i_volume * i_volume) / 10000.0f; + volume = (volume * volume) / 10000.0f; break; case Z2SE_OBJ_KEY_BOUND: if (param_2 == 0) { return false; } - i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 100.0f, 0.2f, 0.0f, 1.0f, - Z2Calc::CURVE_SIGN_0); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 100.0f, 0.2f, 0.0f, 1.0f, + Z2Calc::CURVE_NEGATIVE); break; case Z2SE_MAGIC_METER_DEC: - if (mSoundHandles.getHandleSoundID(Z2SE_MAGIC_METER_DEC) != NULL - || mSoundHandles.getHandleSoundID(Z2SE_MAGIC_METER_FINISH) != NULL) - { + if (mSoundHandles.getHandleSoundID(Z2SE_MAGIC_METER_DEC) != NULL || mSoundHandles.getHandleSoundID(Z2SE_MAGIC_METER_FINISH) != NULL) { return false; } break; @@ -223,11 +231,11 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_ case Z2SE_OBJ_BOARD_BOUND: case Z2SE_OBJ_BOARD_PUT: if (param_2 < 90) { - i_volume = 0.7f; - i_pitch = 1.25f; + volume = 0.7f; + pitch = 1.25f; } else if (param_2 < 60) { - i_volume = 0.4f; - i_pitch = 1.5f; + volume = 0.4f; + pitch = 1.5f; } break; case Z2SE_SY_TALK_START: @@ -238,14 +246,14 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_ break; case Z2SE_SY_TALK_NEXT: if (Z2GetStatusMgr()->isMovieDemo()) { - i_soundID = Z2SE_SY_DEMO_MESSAGE_NEXT; + soundID = Z2SE_SY_DEMO_MESSAGE_NEXT; } break; case Z2SE_SY_TALK_WIN_CLOSE: if (Z2GetStatusMgr()->getDemoStatus() == 1) { - i_soundID = Z2SE_SY_TALK_END; + soundID = Z2SE_SY_TALK_END; } else if (Z2GetStatusMgr()->isMovieDemo()) { - i_soundID = Z2SE_SY_DEMO_MESSAGE_END; + soundID = Z2SE_SY_DEMO_MESSAGE_END; } break; case Z2SE_HP_GAUGE_INC: @@ -255,34 +263,34 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_ break; case Z2SE_OBJ_CHANDELIER_SWING: { Vec tmp = Z2GetAudience()->getAudioCamPos(0); - if (i_pos->y > tmp.y) { + if (posPtr->y > tmp.y) { return false; } break; } case Z2SE_OBJ_CHANDLV5_SWING: - i_volume = Z2Calc::getParamByExp(param_2, 35.0f, 261.0f, 0.4f, 0.05f, 1.0f, - Z2Calc::CURVE_SIGN_2); + volume = Z2Calc::getParamByExp(param_2, 35.0f, 261.0f, 0.4f, 0.05f, 1.0f, + Z2Calc::CURVE_LINEAR); break; case Z2SE_OBJ_IRONBALL_HIT: if (param_2 > 150) { - i_volume = 1.4f; + volume = 1.4f; } else { - i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 47.0f, 0.4f, 0.5f, 0.9f, - Z2Calc::CURVE_SIGN_2); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 47.0f, 0.4f, 0.5f, 0.9f, + Z2Calc::CURVE_LINEAR); } break; case Z2SE_OBJ_IRONBALL_HIT_SNOW: - i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 41.0f, 0.4f, 0.3f, 1.0f, - Z2Calc::CURVE_SIGN_2); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 41.0f, 0.4f, 0.3f, 1.0f, + Z2Calc::CURVE_LINEAR); break; case Z2SE_OBJ_IRONBALL_HIT_ICE: - i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 41.0f, 0.4f, 0.3f, 1.0f, - Z2Calc::CURVE_SIGN_2); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 41.0f, 0.4f, 0.3f, 1.0f, + Z2Calc::CURVE_LINEAR); break; case Z2SE_OBJ_L8_B_FOG_FLY: { Vec tmp = Z2GetAudience()->getAudioCamPos(0); - if (i_pos->y > tmp.y) { + if (posPtr->y > tmp.y) { return false; } break; @@ -296,29 +304,29 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_ seStart(param_2 + 0x8C, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); break; case Z2SE_OBJ_AMATA_ACTION: - 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 400.0f, 0.4f, 0.5f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 0.0f, 400.0f, 0.4f, 0.8f, 1.1f, + Z2Calc::CURVE_NEGATIVE); break; case Z2SE_OBJ_TOY_BONE_BOUND: - i_volume = Z2Calc::getParamByExp(param_2, 15.0f, 60.0f, 0.4f, 0.0f, 1.0f, - Z2Calc::CURVE_SIGN_1); + volume = Z2Calc::getParamByExp(param_2, 15.0f, 60.0f, 0.4f, 0.0f, 1.0f, + Z2Calc::CURVE_POSITIVE); break; case Z2SE_FN_ROPE_CREAK_ADD: param_2 = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 0.2f, 0.0f, 127.0f, - Z2Calc::CURVE_SIGN_0); - i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 0.2f, 0.2f, 1.0f, - Z2Calc::CURVE_SIGN_0); - i_pitch = Z2Calc::getParamByExp(param_2, 127.0f, 0.0f, 0.2f, 0.8f, 1.2f, - Z2Calc::CURVE_SIGN_1); + Z2Calc::CURVE_NEGATIVE); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 0.2f, 0.2f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 127.0f, 0.0f, 0.2f, 0.8f, 1.2f, + Z2Calc::CURVE_POSITIVE); break; case Z2SE_OBJ_DARK_GATE_RIPPLE: if (Z2GetSceneMgr()->getCurrentSceneNum() == 3) { - i_soundID = Z2SE_OBJ_DARK_GATE_RIPPLE_WLF; + soundID = Z2SE_OBJ_DARK_GATE_RIPPLE_WLF; } else if (Z2GetSceneMgr()->getCurrentSceneNum() == 30 && Z2GetSceneMgr()->getCurrentRoomNum() == 7) { - i_soundID = Z2SE_OBJ_DARK_GATE_RIPPLE_WLF; + soundID = Z2SE_OBJ_DARK_GATE_RIPPLE_WLF; } break; case Z2SE_OBJ_ARMOR_SWING: @@ -326,12 +334,12 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_ 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 (isLevelSe(soundID)) { + return seStartLevel(soundID, posPtr, param_2, reverb, pitch, + volume, pan, dolby, param_8); } - if (isSoundCulling(i_soundID)) { + if (isSoundCulling(soundID)) { return false; } @@ -340,17 +348,17 @@ bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_ 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); + return Z2GetSoundStarter()->startSound(soundID, handle, (JGeometry::TVec3<f32>*)posPtr, + param_2, reverb / 127.0f, + pitch, volume, pan, dolby, 0); } /* 802AC50C-802AD8B0 2A6E4C 13A4+00 3/2 19/19 199/199 .text * seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc */ -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) { +bool Z2SeMgr::seStartLevel(JAISoundID soundID, const Vec* posPtr, u32 param_2, s8 reverb, + f32 pitch, f32 volume, f32 pan, f32 dolby, u8 param_8) { if (param_8 != 1) { - switch (i_soundID) { + switch (soundID) { case Z2SE_OBJ_FIRE_BURNING: if (Z2GetStatusMgr()->getDemoStatus() == 2 || !Z2GetSceneMgr()->isInGame()) { return false; @@ -361,36 +369,36 @@ bool Z2SeMgr::seStartLevel(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, 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); + setLevObjSE(soundID, const_cast<Vec*>(posPtr), reverb); return false; } } - switch (i_soundID) { + switch (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); + volume = Z2Calc::getParamByExp(param_2, 25.0f, 127.0f, 0.4f, 0.1f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 25.0f, 127.0f, 0.4f, 0.7f, 1.2f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 0.4f, 0.1f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 0.4f, 0.7f, 1.2f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.0f, 1.0f, + Z2Calc::CURVE_POSITIVE); + pitch = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.7f, 1.2f, + Z2Calc::CURVE_POSITIVE); break; case Z2SE_OBJ_FAN_WIND_S: - modHeightAtCamera(&i_pos); + modHeightAtCamera(&posPtr); break; case Z2SE_OBJ_FAN_ROLL_S: case Z2SE_OBJ_FAN_ROLL_M: @@ -398,175 +406,174 @@ bool Z2SeMgr::seStartLevel(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, 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); + volume = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.0f, 1.0f, + Z2Calc::CURVE_POSITIVE); + pitch = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.7f, 1.2f, + Z2Calc::CURVE_POSITIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.0f, 1.0f, + Z2Calc::CURVE_POSITIVE); + pitch = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.7f, 1.2f, + Z2Calc::CURVE_POSITIVE); 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); + pitch = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 2.0f, 0.7f, 1.2f, + Z2Calc::CURVE_POSITIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 25.0f, 127.0f, 0.4f, 0.4f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 25.0f, 127.0f, 0.4f, 0.8f, 1.0f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.0f, 1.0f, + Z2Calc::CURVE_POSITIVE); + pitch = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.7f, 1.2f, + Z2Calc::CURVE_POSITIVE); 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; + volume = 1.0f; + pitch = 1.3f; } else { - i_volume = param_2 * 0.0006 + 0.7; - i_pitch = param_2 * 0.0006 + 1.0; + volume = param_2 * 0.0006 + 0.7; + 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; + volume = 1.0f; + pitch = (param_2 - 500) * 0.0015 + 1.0; } else if (param_2 < 300) { - i_volume = 0.0f; + volume = 0.0f; } else { - i_volume = (param_2 - 300) * 0.005; + volume = (param_2 - 300) * 0.005; } break; case Z2SE_OBJ_WTR_CLMN_UP: if (param_2 <= 500) { - i_pitch = 0.8f; + pitch = 0.8f; } else if (param_2 > 500 && param_2 <= 1000) { - i_pitch = 1.0f; + pitch = 1.0f; } else if (param_2 > 1000 && param_2 <= 1500) { - i_pitch = 1.0f; + pitch = 1.0f; } else { - i_pitch = 1.2f; + pitch = 1.2f; } - modHeightAtCamera(&i_pos); + modHeightAtCamera(&posPtr); break; case Z2SE_OBJ_WTR_CLMN_DOWN: if (param_2 > 700) { - i_pitch = 1.0f; + pitch = 1.0f; } else { - i_pitch = param_2 * 0.001 + 0.3; + pitch = param_2 * 0.001 + 0.3; } - modHeightAtCamera(&i_pos); + modHeightAtCamera(&posPtr); break; case Z2SE_OBJ_STN_SPRL_RAIL: case Z2SE_OBJ_STN_SPRL_RAIL_DW: - modHeightAtCamera(&i_pos); + modHeightAtCamera(&posPtr); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 4000.0f, 0.4f, 0.3f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 0.0f, 4000.0f, 0.4f, 0.7f, 1.2f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 3500.0f, 0.4f, 0.3f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 0.0f, 3500.0f, 0.4f, 0.7f, 1.2f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 26.0f, 0.4f, 0.6f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 0.0f, 26.0f, 0.4f, 0.8f, 1.2f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 64.0f, 0.4f, 0.3f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 0.0f, 64.0f, 0.4f, 0.6f, 1.2f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 4500.0f, 0.4f, 0.6f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 0.0f, 4500.0f, 0.4f, 0.7f, 1.2f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 40.0f, 0.4f, 0.0f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 0.0f, 40.0f, 0.4f, 0.8f, 1.2f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 120.0f, 0.4f, 0.0f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 0.0f, 120.0f, 0.4f, 0.9f, 1.0f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 100.0f, 0.4f, 0.0f, 1.0f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 100.0f, 0.4f, 0.0f, 1.0f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 100.0f, 0.4f, 0.0f, 1.0f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 5.0f, 0.4f, 0.5f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 0.0f, 5.0f, 0.4f, 0.7f, 1.0f, + Z2Calc::CURVE_NEGATIVE); 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 400.0f, 0.4f, 0.5f, 1.0f, + Z2Calc::CURVE_NEGATIVE); + pitch = Z2Calc::getParamByExp(param_2, 0.0f, 400.0f, 0.4f, 0.8f, 1.1f, + Z2Calc::CURVE_NEGATIVE); break; case Z2SE_OBJ_HYRULE_BARRIER: - if (Z2GetSceneMgr()->getCurrentSceneNum() != 0x16) { + if (Z2GetSceneMgr()->getCurrentSceneNum() != Z2SCENE_CASTLE_TOWN) { break; } // fallthrough case Z2SE_OBJ_DARK_GATE: - if (!Z2GetSceneMgr()->isInDarkness() && i_pos != NULL - && Z2GetLink() != NULL && Z2GetLink()->getCurrentPos() != NULL) + if (!Z2GetSceneMgr()->isInDarkness() && posPtr != NULL && Z2GetLink() != NULL && Z2GetLink()->getCurrentPos() != NULL) { - f32 dist = sqrtf(VECSquareDistance(i_pos, Z2GetLink()->getCurrentPos())); + f32 dist = sqrtf(VECSquareDistance(posPtr, 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); + Z2Calc::CURVE_NEGATIVE); } 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); + volume = Z2Calc::getParamByExp(param_2, 0.0f, 50.0f, 0.4f, 0.5f, 1.0f, + Z2Calc::CURVE_NEGATIVE); break; case Z2SE_ENV_PEOPLE_CROWD: { f32 scale = 1.0f; @@ -574,6 +581,7 @@ bool Z2SeMgr::seStartLevel(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, scale = Z2Calc::linearTransform(J3DUD::JMAAbs(Z2GetLink()->getCurrentPos()->x), 600.0f, 3500.0f, 1.0f, 0.1f, false); } + switch (Z2GetStatusMgr()->getHour()) { case 0: case 1: @@ -624,8 +632,8 @@ bool Z2SeMgr::seStartLevel(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, scale *= 0.2f; break; } - i_volume = Z2Calc::getParamByExp(mCrowdSize * scale, 5.0f, 90.0f, 0.2f, 0.0f, 1.0f, - Z2Calc::CURVE_SIGN_0); + volume = Z2Calc::getParamByExp(mCrowdSize * scale, 5.0f, 90.0f, 0.2f, 0.0f, 1.0f, + Z2Calc::CURVE_NEGATIVE); break; } case Z2SE_AL_COPYROD_WAIT: @@ -634,17 +642,15 @@ bool Z2SeMgr::seStartLevel(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, } for (int i = 0; i < 24; i++) { - if (mSoundHandles[i] && mSoundHandles[i]->getID() == i_soundID - && i_pos == (Vec*)mSoundHandles[i]->getUserData()) - { + if (mSoundHandles[i] && mSoundHandles[i]->getID() == soundID && posPtr == (Vec*)mSoundHandles[i]->getUserData()) { if (param_8 == 1) { - i_volume = Z2GetAudience()->calcOffMicSound(i_volume); + volume = Z2GetAudience()->calcOffMicSound(volume); } mSoundHandles[i]->updateLifeTime(1); - if (i_pos != NULL) { - mSoundHandles[i]->setPos((JGeometry::TVec3<f32>)*i_pos); + if (posPtr != NULL) { + mSoundHandles[i]->setPos((JGeometry::TVec3<f32>)*posPtr); } if (param_2 != 0) { @@ -652,27 +658,27 @@ bool Z2SeMgr::seStartLevel(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, Z2GetSoundStarter()->setPortData(handle, 6, param_2, -1); } - if (i_reverb != 0) { - mSoundHandles[i]->getAuxiliary().moveFxMix(i_reverb / 127.0f, 0); + if (reverb != 0) { + mSoundHandles[i]->getAuxiliary().moveFxMix(reverb / 127.0f, 0); } - if (i_pitch != 1.0f) { - mSoundHandles[i]->getAuxiliary().movePitch(i_pitch, 0); + if (pitch != 1.0f) { + mSoundHandles[i]->getAuxiliary().movePitch(pitch, 0); } - if (i_volume != 1.0f) { - mSoundHandles[i]->getAuxiliary().moveVolume(i_volume, 0); + if (volume != 1.0f) { + mSoundHandles[i]->getAuxiliary().moveVolume(volume, 0); } - if (i_pan != -1.0f) { - mSoundHandles[i]->getAuxiliary().movePan(i_pan, 0); + if (pan != -1.0f) { + mSoundHandles[i]->getAuxiliary().movePan(pan, 0); } - if (i_dolby != -1.0f) { - mSoundHandles[i]->getAuxiliary().moveDolby(i_dolby, 0); + if (dolby != -1.0f) { + mSoundHandles[i]->getAuxiliary().moveDolby(dolby, 0); } return true; } } - if (isSoundCulling(i_soundID)) { + if (isSoundCulling(soundID)) { return false; } @@ -681,20 +687,20 @@ bool Z2SeMgr::seStartLevel(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, 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); + bool ret = Z2GetSoundStarter()->startSound(soundID, handle, (JGeometry::TVec3<f32>*)posPtr, + param_2, reverb / 127.0f, pitch, volume, + pan, dolby, false); if (handle != NULL && *handle) { - if (i_soundID == Z2SE_OBJ_BOMB_HOUSE_BURN) { + if (soundID == Z2SE_OBJ_BOMB_HOUSE_BURN) { Z2GetSeqMgr()->bgmStart(Z2BGM_EVENT02, 0, 0); } if (param_8 == 1) { - Z2GetAudience()->calcOffMicSound(i_volume); + Z2GetAudience()->calcOffMicSound(volume); } - (*handle)->setUserData((uintptr_t)i_pos); + (*handle)->setUserData((uintptr_t)posPtr); if (ret) { (*handle)->setLifeTime(1, false); @@ -705,11 +711,11 @@ bool Z2SeMgr::seStartLevel(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, } /* 802AD8B0-802AD94C 2A81F0 009C+00 1/1 0/0 4/4 .text seStop__7Z2SeMgrF10JAISoundIDUl */ -void Z2SeMgr::seStop(JAISoundID i_soundID, u32 i_count) { - if (i_soundID != -1) { +void Z2SeMgr::seStop(JAISoundID soundID, u32 fadeTime) { + if (soundID != -1) { for (u8 i = 0; i < 24; i++) { - if (mSoundHandles[i] && mSoundHandles[i]->getID() == i_soundID) { - mSoundHandles[i]->stop(i_count); + if (mSoundHandles[i] && mSoundHandles[i]->getID() == soundID) { + mSoundHandles[i]->stop(fadeTime); mSoundHandles[i].releaseSound(); } } @@ -717,45 +723,38 @@ void Z2SeMgr::seStop(JAISoundID i_soundID, u32 i_count) { } /* 802AD94C-802AD9F4 2A828C 00A8+00 0/0 1/1 0/0 .text seStopAll__7Z2SeMgrFUl */ -void Z2SeMgr::seStopAll(u32 i_count) { - JAISeMgr* se_mgr = Z2GetSoundMgr()->getSeMgr(); - se_mgr->getCategory(0)->stop(i_count); - se_mgr->getCategory(1)->stop(i_count); - se_mgr->getCategory(2)->stop(i_count); - se_mgr->getCategory(3)->stop(i_count); - se_mgr->getCategory(4)->stop(i_count); - se_mgr->getCategory(5)->stop(i_count); - se_mgr->getCategory(6)->stop(i_count); - se_mgr->getCategory(7)->stop(i_count); - se_mgr->getCategory(8)->stop(i_count); - se_mgr->getCategory(9)->stop(i_count); +void Z2SeMgr::seStopAll(u32 fadeTime) { + JAISeMgr* seMgr = Z2GetSoundMgr()->getSeMgr(); + seMgr->getCategory(0)->stop(fadeTime); + seMgr->getCategory(1)->stop(fadeTime); + seMgr->getCategory(2)->stop(fadeTime); + seMgr->getCategory(3)->stop(fadeTime); + seMgr->getCategory(4)->stop(fadeTime); + seMgr->getCategory(5)->stop(fadeTime); + seMgr->getCategory(6)->stop(fadeTime); + seMgr->getCategory(7)->stop(fadeTime); + seMgr->getCategory(8)->stop(fadeTime); + seMgr->getCategory(9)->stop(fadeTime); } /* 802AD9F4-802ADB14 2A8334 0120+00 3/3 5/5 1/1 .text seMoveVolumeAll__7Z2SeMgrFfUl */ -void Z2SeMgr::seMoveVolumeAll(f32 i_volume, u32 i_count) { +void Z2SeMgr::seMoveVolumeAll(f32 volume, u32 moveTime) { if (Z2GetStatusMgr()->getDemoStatus() == 13) { - i_volume = 0.0f; + volume = 0.0f; } - JAISeMgr* se_mgr = Z2GetSoundMgr()->getSeMgr(); - se_mgr->getCategory(1)->getParams() - ->moveVolume(Z2Param::VOL_SE_LINK_VOICE_DEFAULT * i_volume, i_count); - se_mgr->getCategory(2)->getParams() - ->moveVolume(Z2Param::VOL_SE_LINK_MOTION_DEFAULT * i_volume, i_count); - se_mgr->getCategory(3)->getParams() - ->moveVolume(Z2Param::VOL_SE_LINK_FOOTNOTE_DEFAULT * i_volume, i_count); - se_mgr->getCategory(4)->getParams() - ->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT * i_volume, i_count); - se_mgr->getCategory(5)->getParams() - ->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT * i_volume, i_count); - se_mgr->getCategory(6)->getParams() - ->moveVolume(Z2Param::VOL_SE_CHAR_MOVE_DEFAULT * i_volume, i_count); - se_mgr->getCategory(7)->getParams() - ->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT * i_volume, i_count); - se_mgr->getCategory(8)->getParams() - ->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT * i_volume, i_count); + + JAISeMgr* seMgr = Z2GetSoundMgr()->getSeMgr(); + seMgr->getCategory(1)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_VOICE_DEFAULT * volume, moveTime); + seMgr->getCategory(2)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_MOTION_DEFAULT * volume, moveTime); + seMgr->getCategory(3)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_FOOTNOTE_DEFAULT * volume, moveTime); + seMgr->getCategory(4)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT * volume, moveTime); + seMgr->getCategory(5)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT * volume, moveTime); + seMgr->getCategory(6)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_MOVE_DEFAULT * volume, moveTime); + seMgr->getCategory(7)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT * volume, moveTime); + seMgr->getCategory(8)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT * volume, moveTime); + if (Z2GetStatusMgr()->getDemoStatus() != 12) { - se_mgr->getCategory(9)->getParams() - ->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_DEFAULT * i_volume, i_count); + seMgr->getCategory(9)->getParams()->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_DEFAULT * volume, moveTime); } } @@ -771,18 +770,20 @@ void Z2SeMgr::talkInSe() { if (Z2GetStatusMgr()->getDemoStatus() == 13) { seMoveVolumeAll(0.0f, 0); } - JAISeMgr* se_mgr = Z2GetSoundMgr()->getSeMgr(); - se_mgr->getCategory(0)->getParams()->moveVolume(Z2Param::VOL_SE_SYSTEM_TALKING, 2); - se_mgr->getCategory(1)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_VOICE_TALKING, 2); - se_mgr->getCategory(2)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_MOTION_TALKING, 2); - se_mgr->getCategory(3)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_FOOTNOTE_TALKING, 2); - se_mgr->getCategory(4)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_TALKING, 2); - se_mgr->getCategory(5)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_TALKING, 2); - se_mgr->getCategory(6)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_MOVE_TALKING, 2); - se_mgr->getCategory(7)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_TALKING, 2); - se_mgr->getCategory(8)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_TALKING, 2); + + JAISeMgr* seMgr = Z2GetSoundMgr()->getSeMgr(); + seMgr->getCategory(0)->getParams()->moveVolume(Z2Param::VOL_SE_SYSTEM_TALKING, 2); + seMgr->getCategory(1)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_VOICE_TALKING, 2); + seMgr->getCategory(2)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_MOTION_TALKING, 2); + seMgr->getCategory(3)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_FOOTNOTE_TALKING, 2); + seMgr->getCategory(4)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_TALKING, 2); + seMgr->getCategory(5)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_TALKING, 2); + seMgr->getCategory(6)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_MOVE_TALKING, 2); + seMgr->getCategory(7)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_TALKING, 2); + seMgr->getCategory(8)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_TALKING, 2); + if (Z2GetStatusMgr()->getDemoStatus() != 12) { - se_mgr->getCategory(9)->getParams()->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_TALKING, 2); + seMgr->getCategory(9)->getParams()->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_TALKING, 2); } } } @@ -793,18 +794,20 @@ void Z2SeMgr::talkOutSe() { if (Z2GetStatusMgr()->getDemoStatus() == 13) { seMoveVolumeAll(0.0f, 0); } - JAISeMgr* se_mgr = Z2GetSoundMgr()->getSeMgr(); - se_mgr->getCategory(0)->getParams()->moveVolume(Z2Param::VOL_SE_SYSTEM_DEFAULT, 2); - se_mgr->getCategory(1)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_VOICE_DEFAULT, 2); - se_mgr->getCategory(2)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_MOTION_DEFAULT, 2); - se_mgr->getCategory(3)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_FOOTNOTE_DEFAULT, 2); - se_mgr->getCategory(4)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT, 2); - se_mgr->getCategory(5)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT, 2); - se_mgr->getCategory(6)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_MOVE_DEFAULT, 2); - se_mgr->getCategory(7)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT, 2); - se_mgr->getCategory(8)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT, 2); + + JAISeMgr* seMgr = Z2GetSoundMgr()->getSeMgr(); + seMgr->getCategory(0)->getParams()->moveVolume(Z2Param::VOL_SE_SYSTEM_DEFAULT, 2); + seMgr->getCategory(1)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_VOICE_DEFAULT, 2); + seMgr->getCategory(2)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_MOTION_DEFAULT, 2); + seMgr->getCategory(3)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_FOOTNOTE_DEFAULT, 2); + seMgr->getCategory(4)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT, 2); + seMgr->getCategory(5)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT, 2); + seMgr->getCategory(6)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_MOVE_DEFAULT, 2); + seMgr->getCategory(7)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT, 2); + seMgr->getCategory(8)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT, 2); + if (Z2GetStatusMgr()->getDemoStatus() != 12) { - se_mgr->getCategory(9)->getParams()->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_DEFAULT, 2); + seMgr->getCategory(9)->getParams()->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_DEFAULT, 2); } } } @@ -815,48 +818,50 @@ void Z2SeMgr::menuInSe() { if (Z2GetStatusMgr()->getDemoStatus() == 13) { seMoveVolumeAll(0.0f, 0); } - JAISeMgr* se_mgr = Z2GetSoundMgr()->getSeMgr(); - se_mgr->getCategory(0)->getParams()->moveVolume(Z2Param::VOL_SE_SYSTEM_PAUSING, 2); - se_mgr->getCategory(1)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_VOICE_PAUSING, 2); - se_mgr->getCategory(2)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_MOTION_PAUSING, 2); - se_mgr->getCategory(3)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_FOOTNOTE_PAUSING, 2); - se_mgr->getCategory(4)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_PAUSING, 2); - se_mgr->getCategory(5)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_PAUSING, 2); - se_mgr->getCategory(6)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_MOVE_PAUSING, 2); - se_mgr->getCategory(7)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_PAUSING, 2); - se_mgr->getCategory(8)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_PAUSING, 2); + + JAISeMgr* seMgr = Z2GetSoundMgr()->getSeMgr(); + seMgr->getCategory(0)->getParams()->moveVolume(Z2Param::VOL_SE_SYSTEM_PAUSING, 2); + seMgr->getCategory(1)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_VOICE_PAUSING, 2); + seMgr->getCategory(2)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_MOTION_PAUSING, 2); + seMgr->getCategory(3)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_FOOTNOTE_PAUSING, 2); + seMgr->getCategory(4)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_PAUSING, 2); + seMgr->getCategory(5)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_PAUSING, 2); + seMgr->getCategory(6)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_MOVE_PAUSING, 2); + seMgr->getCategory(7)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_PAUSING, 2); + seMgr->getCategory(8)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_PAUSING, 2); + if (Z2GetStatusMgr()->getDemoStatus() != 12) { - se_mgr->getCategory(9)->getParams()->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_PAUSING, 2); + seMgr->getCategory(9)->getParams()->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_PAUSING, 2); } } } /* 802ADE5C-802ADFF4 2A879C 0198+00 1/1 0/0 0/0 .text setLevObjSE__7Z2SeMgrFUlP3VecSc */ -void Z2SeMgr::setLevObjSE(u32 i_soundID, Vec* i_pos, s8 param_2) { +void Z2SeMgr::setLevObjSE(u32 soundID, Vec* posPtr, s8 reverb) { u8 i = 0; for (; i < mLevelObjectSeCount; i++) { - if (mLevelObjSe[i].mSoundID == i_soundID) { + if (mLevelObjSe[i].soundID_ == soundID) { break; } } + if (i == mLevelObjectSeCount) { if (mLevelObjectSeCount == 10) { return; } - mLevelObjSe[i].mSoundID = i_soundID; + mLevelObjSe[i].soundID_ = soundID; mLevelObjectSeCount++; } + f32 volume_scale = 1.0f; Vec pos = {0.0f, 0.0f, -50.0f}; - if (i_pos != NULL) { - pos = *i_pos; + if (posPtr != NULL) { + pos = *posPtr; } else { - // fake match, should be something like pos = Z2GetAudience()->getAudioCamPos(); - Vec tmp; - JGeometry::setTVec3f(*(Vec*)Z2GetAudience()->mAudioCamera[0].getPos(), tmp); - pos = tmp; + pos = Z2GetAudience()->getAudioCamPos(0); } - switch (i_soundID) { + + switch (soundID) { case Z2SE_OBJ_FIRE_BURNING: volume_scale = 0.7f; break; @@ -867,39 +872,40 @@ void Z2SeMgr::setLevObjSE(u32 i_soundID, Vec* i_pos, s8 param_2) { case Z2SE_OBJ_L8_L_BALL_SW: break; } - mLevelObjSe[i].mVolumeScale = volume_scale; + + mLevelObjSe[i].setVolumeScale(volume_scale); mLevelObjSe[i].registMultiSePos((Vec*)&pos); - if (mLevelObjSe[i].field_0x20 < param_2) { - mLevelObjSe[i].field_0x20 = param_2; + if (mLevelObjSe[i].reverb_ < reverb) { + mLevelObjSe[i].reverb_ = reverb; } } /* 802ADFF4-802AE184 2A8934 0190+00 1/1 0/0 0/0 .text setMultiTriggerSE__7Z2SeMgrFUlP3VecSc */ -void Z2SeMgr::setMultiTriggerSE(u32 i_soundID, Vec* i_pos, s8 param_2) { +void Z2SeMgr::setMultiTriggerSE(u32 soundID, Vec* posPtr, s8 reverb) { u8 i = 0; for (; i < mMultiTriggerSeCount; i++) { - if (mMultiTriggerSe[i].mSoundID == i_soundID) { + if (mMultiTriggerSe[i].soundID_ == soundID) { break; } } + if (i == mMultiTriggerSeCount) { if (mMultiTriggerSeCount == 10) { return; } - mMultiTriggerSe[i].mSoundID = i_soundID; + mMultiTriggerSe[i].soundID_ = soundID; mMultiTriggerSeCount++; } + f32 volume_scale = 1.0f; Vec pos = {0.0f, 0.0f, -50.0f}; - if (i_pos != NULL) { - pos = *i_pos; + if (posPtr != NULL) { + pos = *posPtr; } else { - // fake match, should be something like pos = Z2GetAudience()->getAudioCamPos(); - Vec tmp; - JGeometry::setTVec3f(*(Vec*)Z2GetAudience()->mAudioCamera[0].getPos(), tmp); - pos = tmp; + pos = Z2GetAudience()->getAudioCamPos(0); } - switch (i_soundID) { + + switch (soundID) { case Z2SE_OBJ_L8_STAIR_ON: case Z2SE_OBJ_L8_STAIR_MV_UP: case Z2SE_OBJ_L8_STAIR_MV_DW: @@ -912,10 +918,11 @@ void Z2SeMgr::setMultiTriggerSE(u32 i_soundID, Vec* i_pos, s8 param_2) { volume_scale = 1.3f; break; } - mMultiTriggerSe[i].mVolumeScale = volume_scale; + + mMultiTriggerSe[i].setVolumeScale(volume_scale); mMultiTriggerSe[i].registMultiSePos((Vec*)&pos); - if (mMultiTriggerSe[i].field_0x20 < param_2) { - mMultiTriggerSe[i].field_0x20 = param_2; + if (mMultiTriggerSe[i].reverb_ < reverb) { + mMultiTriggerSe[i].reverb_ = reverb; } } @@ -924,72 +931,86 @@ void Z2SeMgr::processSeFramework() { if (Z2GetSceneMgr()->isSceneExist() && mCrowdSize != 0) { seStartLevel(Z2SE_ENV_PEOPLE_CROWD, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } + for (u8 i = 0; i < mLevelObjectSeCount; i++) { f32 volume = mLevelObjSe[i].getMaxVolume(); - seStartLevel(mLevelObjSe[i].mSoundID, NULL, 0, mLevelObjSe[i].field_0x20, 1.0f, + seStartLevel(mLevelObjSe[i].soundID_, NULL, 0, mLevelObjSe[i].reverb_, 1.0f, volume, mLevelObjSe[i].getPanPower(), mLevelObjSe[i].getDolbyPower(), 1); } + for (u8 i = 0; i < 10; i++) { mLevelObjSe[i].resetMultiSePos(); - mLevelObjSe[i].mSoundID = -1; - mLevelObjSe[i].field_0x20 = 0; + mLevelObjSe[i].soundID_ = -1; + mLevelObjSe[i].reverb_ = 0; } + mLevelObjectSeCount = 0; for (u8 i = 0; i < mMultiTriggerSeCount; i++) { f32 volume = mMultiTriggerSe[i].getMaxVolume(); - seStart(mMultiTriggerSe[i].mSoundID, NULL, 0, mMultiTriggerSe[i].field_0x20, 1.0f, + seStart(mMultiTriggerSe[i].soundID_, NULL, 0, mMultiTriggerSe[i].reverb_, 1.0f, volume, mMultiTriggerSe[i].getPanPower(), mMultiTriggerSe[i].getDolbyPower(), 1); } + for (u8 i = 0; i < 10; i++) { mMultiTriggerSe[i].resetMultiSePos(); - mMultiTriggerSe[i].mSoundID = -1; - mMultiTriggerSe[i].field_0x20 = 0; + mMultiTriggerSe[i].soundID_ = -1; + mMultiTriggerSe[i].reverb_ = 0; } + mMultiTriggerSeCount = 0; field_0x3c9 = 0; field_0x3ca = 0; field_0x3cb = 0; + if (field_0x3c2 != 0) { field_0x3c2--; } else { field_0x3c2 = 0; } + if (field_0x3c3 != 0) { field_0x3c3--; } else { field_0x3c3 = 0; } + if (field_0x3c4 != 0) { field_0x3c4--; } else { field_0x3c4 = 0; } + if (field_0x3c5 != 0) { field_0x3c5--; } else { field_0x3c5 = 0; } + if (field_0x3c0 != 0) { field_0x3c0--; } else { field_0x3c0 = 0; } + if (field_0x3c1 != 0) { field_0x3c1--; } else { field_0x3c1 = 0; } + if (field_0x3c6 != 0) { field_0x3c6--; } else { field_0x3c6 = 0; } + if (field_0x3c7 != 0) { field_0x3c7--; } else { field_0x3c7 = 0; } + if (field_0x3c8 != 0) { field_0x3c8--; } else { @@ -999,8 +1020,8 @@ void Z2SeMgr::processSeFramework() { /* 802AE524-802AE5B0 2A8E64 008C+00 1/1 0/0 0/0 .text isLevelSe__7Z2SeMgrF10JAISoundID */ -bool Z2SeMgr::isLevelSe(JAISoundID i_soundID) { - switch (i_soundID) { +bool Z2SeMgr::isLevelSe(JAISoundID soundID) { + switch (soundID) { case JA_SE_LK_MOVE_ROCK: case JA_SE_LK_MOVE_WBLOCK: case Z2SE_OBJ_FIRE_BURNING: @@ -1016,9 +1037,9 @@ bool Z2SeMgr::isLevelSe(JAISoundID i_soundID) { } /* 802AE5B0-802AEB04 2A8EF0 0554+00 2/2 3/3 0/0 .text isSoundCulling__7Z2SeMgrF10JAISoundID */ -bool Z2SeMgr::isSoundCulling(JAISoundID i_soundID) { +bool Z2SeMgr::isSoundCulling(JAISoundID soundID) { if (Z2GetSeqMgr()->isItemGetDemo()) { - switch (i_soundID) { + switch (soundID) { case Z2SE_HP_GAUGE_INC: case Z2SE_SY_TALK_NEXT: case Z2SE_SY_TALK_END: @@ -1041,7 +1062,8 @@ bool Z2SeMgr::isSoundCulling(JAISoundID i_soundID) { return true; } } - switch (i_soundID) { + + switch (soundID) { case Z2SE_MIDNA_APPEAR: case Z2SE_MIDNA_DISAPPEAR: if (!Z2GetSceneMgr()->isSceneExist()) { @@ -1097,15 +1119,15 @@ bool Z2SeMgr::isSoundCulling(JAISoundID i_soundID) { return true; } field_0x3ca = 1; - Z2GetSoundMgr()->multiVolumeSoundID(i_soundID, 0.5f); + Z2GetSoundMgr()->multiVolumeSoundID(soundID, 0.5f); break; case Z2SE_DARK_VANISH: if (field_0x3cb != 0) { return true; } field_0x3cb = 1; - Z2GetSoundMgr()->stopSoundID(i_soundID); - Z2GetSoundMgr()->multiVolumeSoundID(i_soundID, 0.5f); + Z2GetSoundMgr()->stopSoundID(soundID); + Z2GetSoundMgr()->multiVolumeSoundID(soundID, 0.5f); break; case Z2SE_EN_BS_V_DEAD: case Z2SE_EN_FZ_BOUND: @@ -1159,6 +1181,7 @@ bool Z2SeMgr::isSoundCulling(JAISoundID i_soundID) { case Z2SE_EN_BS_APPEAR: break; } + return false; } @@ -1170,52 +1193,57 @@ Z2MultiSeMgr::Z2MultiSeMgr() { Z2MultiSeMgr::~Z2MultiSeMgr() {} /* 802AEB70-802AECBC 2A94B0 014C+00 2/2 6/6 0/0 .text registMultiSePos__12Z2MultiSeMgrFP3Vec */ -s8 Z2MultiSeMgr::registMultiSePos(Vec* i_pos) { - if (i_pos == NULL) { +s8 Z2MultiSeMgr::registMultiSePos(Vec* posPtr) { + if (posPtr == NULL) { return 0; } - if (mPosCount < 0) { - mPosCount = 0; + + if (posCount_ < 0) { + posCount_ = 0; } + Vec rel_pos; - Z2GetAudience()->convertAbsToRel(*i_pos, &rel_pos, 0); - f32 volume = Z2GetAudience()->calcRelPosVolume(rel_pos, mVolumeScale, 0); + Z2GetAudience()->convertAbsToRel(*posPtr, &rel_pos, 0); + + f32 volume = Z2GetAudience()->calcRelPosVolume(rel_pos, volumeScale_, 0); if (volume <= 0.0f) { - return mPosCount; + return posCount_; } + f32 pan = Z2GetAudience()->calcRelPosPan(rel_pos, 0); f32 dolby = Z2GetAudience()->calcRelPosDolby(rel_pos, 0); f32 pow_l = (1.0f - pan) * volume; f32 pow_r = pan * volume; f32 pow_f = (1.0f - dolby) * volume; f32 pow_b = dolby * volume; - if (volume > mMaxVolume) { - mMaxVolume = volume; + if (volume > maxVolume_) { + maxVolume_ = volume; } - if (pow_l > mMaxPowL) { - mMaxPowL = pow_l; + if (pow_l > maxPowL_) { + maxPowL_ = pow_l; } - if (pow_r > mMaxPowR) { - mMaxPowR = pow_r; + if (pow_r > maxPowR_) { + maxPowR_ = pow_r; } - if (pow_f > mMaxPowF) { - mMaxPowF = pow_f; + if (pow_f > maxPowF_) { + maxPowF_ = pow_f; } - if (pow_b > mMaxPowB) { - mMaxPowB = pow_b; + if (pow_b > maxPowB_) { + maxPowB_ = pow_b; } - mPosCount++; - return mPosCount; + + posCount_++; + return posCount_; } -void Z2MultiSeMgr::resetMultiSePos(void) { - mPosCount = -1; - mMaxPowL = 0.0f; - mMaxPowR = 0.0f; - mMaxPowF = 0.0f; - mMaxPowB = 0.0f; - mMaxVolume = 0.0f; +void Z2MultiSeMgr::resetMultiSePos() { + posCount_ = -1; + maxPowL_ = 0.0f; + maxPowR_ = 0.0f; + maxPowF_ = 0.0f; + maxPowB_ = 0.0f; + maxVolume_ = 0.0f; } /* 802AECE0-802AEDC0 2A9620 00E0+00 1/1 8/8 0/0 .text getPanPower__12Z2MultiSeMgrFv */ @@ -1231,7 +1259,6 @@ f32 Z2MultiSeMgr::getPanPower() { } } - /* 802AEDC0-802AEEA0 2A9700 00E0+00 1/1 8/8 0/0 .text getDolbyPower__12Z2MultiSeMgrFv */ f32 Z2MultiSeMgr::getDolbyPower() { f32 pow_b = getMaxPowB(); diff --git a/src/Z2AudioLib/Z2SeqMgr.cpp b/src/Z2AudioLib/Z2SeqMgr.cpp index 82f91fd01e..da9f8b1ced 100644 --- a/src/Z2AudioLib/Z2SeqMgr.cpp +++ b/src/Z2AudioLib/Z2SeqMgr.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2SeqMgr -// - #include "Z2AudioLib/Z2SeqMgr.h" #include "Z2AudioLib/Z2LinkMgr.h" #include "Z2AudioLib/Z2Param.h" @@ -13,7 +8,90 @@ #include "Z2AudioLib/Z2Calc.h" #include "JSystem/JAudio2/JAISoundChild.h" #include "JSystem/JAudio2/JAISeq.h" -#include "dol2asm.h" + +static const char* sSpotName[] = { + "F_SP00", + "F_SP103", + "R_SP01", + "F_SP104", + "R_SP107", + "F_SP108", + "R_SP108", + "F_SP117", + "F_SP109", + "R_SP109", + "R_SP209", + "F_SP110", + "R_SP110", + "F_SP111", + "F_SP128", + "R_SP128", + "F_SP115", + "F_SP112", + "F_SP126", + "F_SP127", + "R_SP127", + "F_SP113", + "F_SP116", + "R_SP116", + "R_SP160", + "R_SP161", + "F_SP114", + "F_SP118", + "F_SP124", + "F_SP125", + "F_SP121", + "F_SP122", + "F_SP123", + "F_SP200", + "F_SP102", + "", + "R_SP300", + "R_SP301", + "T_ENEMY", + "D_MN54", + "D_MN05", + "D_MN05B", + "D_MN05A", + "D_MN04", + "D_MN04B", + "D_MN04A", + "D_MN01", + "D_MN01B", + "D_MN01A", + "D_MN10", + "D_MN10B", + "D_MN10A", + "D_MN11", + "D_MN11B", + "D_MN11A", + "D_MN06", + "D_MN06B", + "D_MN06A", + "D_MN07", + "D_MN07B", + "D_MN07A", + "D_MN08", + "D_MN08B", + "D_MN08C", + "D_MN08A", + "D_MN08D", + "D_MN09", + "D_MN09A", + "D_MN09B", + "D_MN09C", + "D_SB00", + "D_SB01", + "D_SB02", + "D_SB03", + "D_SB04", + "D_SB05", + "D_SB06", + "D_SB07", + "D_SB08", + "D_SB09", + "D_SB10", +}; /* 802AEEA0-802AF010 2A97E0 0170+00 0/0 1/1 0/0 .text __ct__8Z2SeqMgrFv */ Z2SeqMgr::Z2SeqMgr() : JASGlobalInstance<Z2SeqMgr>(true) { @@ -53,12 +131,12 @@ Z2SeqMgr::Z2SeqMgr() : JASGlobalInstance<Z2SeqMgr>(true) { } /* 802AF010-802AF408 2A9950 03F8+00 3/3 5/5 38/38 .text bgmStart__8Z2SeqMgrFUlUll */ -void Z2SeqMgr::bgmStart(u32 i_bgmID, u32 i_count, s32 param_2) { - switch (i_bgmID) { +void Z2SeqMgr::bgmStart(u32 bgmID, u32 fadeTime, s32 param_2) { + switch (bgmID) { case -1: return; case 0x200005D: - bgmAllUnMute(0x21); + bgmAllUnMute(33); bgmStreamPrepare(0x200005d); bgmStreamPlay(); return; @@ -67,13 +145,13 @@ void Z2SeqMgr::bgmStart(u32 i_bgmID, u32 i_count, s32 param_2) { mMainBgmMaster.forceIn(); break; case Z2BGM_GAME_OVER: - if (getMainBgmID() != i_bgmID) { + if (getMainBgmID() != bgmID) { Z2GetSceneMgr()->setInGame(false); Z2GetSceneMgr()->setSceneExist(false); setBattleBgmOff(true); Z2GetSoundMgr()->getSeqMgr()->stop(0); Z2GetSoundMgr()->getStreamMgr()->stop(0); - Z2GetSoundMgr()->startSound(i_bgmID, &mMainBgmHandle, NULL); + Z2GetSoundMgr()->startSound(bgmID, &mMainBgmHandle, NULL); mBgmStatus = 0xff; } return; @@ -81,7 +159,7 @@ void Z2SeqMgr::bgmStart(u32 i_bgmID, u32 i_count, s32 param_2) { if (Z2GetLink() != NULL && Z2GetLink()->getCurrentPos() != NULL && Z2GetLink()->getCurrentPos()->y > -10000.0f) { - i_bgmID = Z2BGM_RAKKA_HOUSE; + bgmID = Z2BGM_RAKKA_HOUSE; } break; case Z2BGM_VS_GANON_01: @@ -96,33 +174,37 @@ void Z2SeqMgr::bgmStart(u32 i_bgmID, u32 i_count, s32 param_2) { mStreamBgmMaster.forceIn(); } + #if !PLATFORM_SHIELD if (Z2GetStatusMgr()->getDemoStatus() == 9) { if (mMainBgmHandle) { mMainBgmHandle->stop(0); } + if (param_2 == 0) { if (mSubBgmHandle) { mSubBgmHandle->stop(0); } mMainBgmMaster.forceIn(); } - } else { + } else + #endif + { bgmStop(0, param_2); } - if (i_bgmID == Z2BGM_FIELD_LINK_DAY || i_bgmID == Z2BGM_FIELD_LINK_NIGHT) { + if (bgmID == Z2BGM_FIELD_LINK_DAY || bgmID == Z2BGM_FIELD_LINK_NIGHT) { fieldBgmStart(); } else { - Z2GetSoundMgr()->startSound(i_bgmID, &mMainBgmHandle, NULL); + Z2GetSoundMgr()->startSound(bgmID, &mMainBgmHandle, NULL); mBgmStatus = 0xff; } - if (param_2 == 0 && i_count != 0) { - mMainBgmMaster.fadeInFromOut(i_count); + if (param_2 == 0 && fadeTime != 0) { + mMainBgmMaster.fadeInFromOut(fadeTime); } - if (i_bgmID == Z2BGM_BOSS_SNOWWOMAN_1 || i_bgmID == Z2BGM_HORSE_BATTLE - || i_bgmID == Z2BGM_VS_GANON_02 || i_bgmID == Z2BGM_TOAL_VILLEGE) + if (bgmID == Z2BGM_BOSS_SNOWWOMAN_1 || bgmID == Z2BGM_HORSE_BATTLE + || bgmID == Z2BGM_VS_GANON_02 || bgmID == Z2BGM_TOAL_VILLEGE) { changeBgmStatus(0); } @@ -132,116 +214,53 @@ void Z2SeqMgr::bgmStart(u32 i_bgmID, u32 i_count, s32 param_2) { } else { field_0xa4.forceIn(); } + + #if DEBUG + if (bgmID == Z2BGM_HIDDEN_VILLAGE) { + OS_REPORT("[Z2SeqMgr::bgmStart] Z2BGM_HIDDEN_VILLAGE start(%d)\n", mMainBgmHandle.isSoundAttached()); + OS_REPORT(" mainBgmMasterVol::%.2f \n", mMainBgmMaster.get()); + OS_REPORT(" subBgmMasterVol::%.2f \n", mSubBgmMaster.get()); + OS_REPORT(" allBgmMasterVol::%.2f \n", mAllBgmMaster.get()); + OS_REPORT(" bgmPauseVol::%.2f \n", mBgmPause.get()); + OS_REPORT(" fanfareMuteVol::%.2f \n", mFanfareMute.get()); + OS_REPORT(" windStoneVol::%.2f \n", mWindStone.get()); + OS_REPORT(" twilightGateVol::%.2f \n", mTwilightGateVol); + } + #endif } /* 802AF408-802AF49C 2A9D48 0094+00 3/3 5/5 30/30 .text bgmStop__8Z2SeqMgrFUll */ -void Z2SeqMgr::bgmStop(u32 i_count, s32 param_1) { +void Z2SeqMgr::bgmStop(u32 fadeTime, s32 param_1) { if (mMainBgmHandle) { - mMainBgmHandle->stop(i_count); + mMainBgmHandle->stop(fadeTime); } + if (mStreamBgmHandle) { - mStreamBgmHandle->stop(i_count); + mStreamBgmHandle->stop(fadeTime); } + if (param_1 == 0) { if (mSubBgmHandle) { - mSubBgmHandle->stop(i_count); + mSubBgmHandle->stop(fadeTime); } mMainBgmMaster.forceIn(); } } -static void dummyString() { - DEAD_STRING("F_SP00"); - DEAD_STRING("F_SP103"); - DEAD_STRING("R_SP01"); - DEAD_STRING("F_SP104"); - DEAD_STRING("R_SP107"); - DEAD_STRING("F_SP108"); - DEAD_STRING("R_SP108"); - DEAD_STRING("F_SP117"); - DEAD_STRING("F_SP109"); - DEAD_STRING("R_SP109"); - DEAD_STRING("R_SP209"); - DEAD_STRING("F_SP110"); - DEAD_STRING("R_SP110"); - DEAD_STRING("F_SP111"); - DEAD_STRING("F_SP128"); - DEAD_STRING("R_SP128"); - DEAD_STRING("F_SP115"); - DEAD_STRING("F_SP112"); - DEAD_STRING("F_SP126"); - DEAD_STRING("F_SP127"); - DEAD_STRING("R_SP127"); - DEAD_STRING("F_SP113"); - DEAD_STRING("F_SP116"); - DEAD_STRING("R_SP116"); - DEAD_STRING("R_SP160"); - DEAD_STRING("R_SP161"); - DEAD_STRING("F_SP114"); - DEAD_STRING("F_SP118"); - DEAD_STRING("F_SP124"); - DEAD_STRING("F_SP125"); - DEAD_STRING("F_SP121"); - DEAD_STRING("F_SP122"); - DEAD_STRING("F_SP123"); - DEAD_STRING("F_SP200"); - DEAD_STRING("F_SP102"); - DEAD_STRING(""); - DEAD_STRING("R_SP300"); - DEAD_STRING("R_SP301"); - DEAD_STRING("T_ENEMY"); - DEAD_STRING("D_MN54"); - DEAD_STRING("D_MN05"); - DEAD_STRING("D_MN05B"); - DEAD_STRING("D_MN05A"); - DEAD_STRING("D_MN04"); - DEAD_STRING("D_MN04B"); - DEAD_STRING("D_MN04A"); - DEAD_STRING("D_MN01"); - DEAD_STRING("D_MN01B"); - DEAD_STRING("D_MN01A"); - DEAD_STRING("D_MN10"); - DEAD_STRING("D_MN10B"); - DEAD_STRING("D_MN10A"); - DEAD_STRING("D_MN11"); - DEAD_STRING("D_MN11B"); - DEAD_STRING("D_MN11A"); - DEAD_STRING("D_MN06"); - DEAD_STRING("D_MN06B"); - DEAD_STRING("D_MN06A"); - DEAD_STRING("D_MN07"); - DEAD_STRING("D_MN07B"); - DEAD_STRING("D_MN07A"); - DEAD_STRING("D_MN08"); - DEAD_STRING("D_MN08B"); - DEAD_STRING("D_MN08C"); - DEAD_STRING("D_MN08A"); - DEAD_STRING("D_MN08D"); - DEAD_STRING("D_MN09"); - DEAD_STRING("D_MN09A"); - DEAD_STRING("D_MN09B"); - DEAD_STRING("D_MN09C"); - DEAD_STRING("D_SB00"); - DEAD_STRING("D_SB01"); - DEAD_STRING("D_SB02"); - DEAD_STRING("D_SB03"); - DEAD_STRING("D_SB04"); - DEAD_STRING("D_SB05"); - DEAD_STRING("D_SB06"); - DEAD_STRING("D_SB07"); - DEAD_STRING("D_SB08"); - DEAD_STRING("D_SB09"); - DEAD_STRING("D_SB10"); -} - /* 802AF49C-802AF884 2A9DDC 03E8+00 3/2 6/6 65/65 .text subBgmStart__8Z2SeqMgrFUl */ -void Z2SeqMgr::subBgmStart(u32 i_bgmID) { - if (i_bgmID == -1) { +void Z2SeqMgr::subBgmStart(u32 bgmID) { + #if DEBUG + const char** spotName = sSpotName; + #endif + + if (bgmID == -1) { return; } - int count_in, count_out; - switch (i_bgmID) { + int fadeinTime = 0; + int fadeoutTime = 0; + + switch (bgmID) { case Z2BGM_ITEM_GET: case Z2BGM_ITEM_GET_MINI: case Z2BGM_OPEN_BOX: @@ -274,25 +293,25 @@ void Z2SeqMgr::subBgmStart(u32 i_bgmID) { if (getSubBgmID() == Z2BGM_OBACHAN) { subBgmStop(); } - mFanfareID = i_bgmID; + mFanfareID = bgmID; return; case Z2BGM_FACE_OFF_BATTLE: case Z2BGM_BOSS_OCTAEEL_D02: case Z2BGM_DRAGON_D02: case Z2BGM_FACE_OFF_BATTLE2: case Z2BGM_FACE_OFF_BATTLE3: - count_in = 0; - count_out = -1; + fadeinTime = 0; + fadeoutTime = -1; break; case Z2BGM_LUTERA1: case Z2BGM_BOSS_SNOWWOMAN_D1: Z2GetStatusMgr()->setDemoName("force_start"); - count_in = 0; - count_out = struct_80450862; + fadeinTime = 0; + fadeoutTime = Z2Param::BGM_CROSS_FADEOUT_TIME; break; case Z2BGM_TARO_RESCUE: - count_in = 0; - count_out = 120; + fadeinTime = 0; + fadeoutTime = 120; bgmStop(0, 0); break; case Z2BGM_OBACHAN: @@ -331,13 +350,13 @@ void Z2SeqMgr::subBgmStart(u32 i_bgmID) { case Z2BGM_GOMA_D01: case Z2BGM_MINIGAME_WIN01: case Z2BGM_MINIGAME_WIN02: - count_in = 0; - count_out = 1; + fadeinTime = 0; + fadeoutTime = 1; break; case Z2BGM_COWBOY_GAME: mAllBgmMaster.forceIn(); - count_in = 0; - count_out = 1; + fadeinTime = 0; + fadeoutTime = 1; break; case Z2BGM_SNOWBOARD_WIN: case Z2BGM_SNOWBOARD_LOSE: @@ -356,27 +375,27 @@ void Z2SeqMgr::subBgmStart(u32 i_bgmID) { case Z2BGM_HORSE_BATTLE: case Z2BGM_TN_MBOSS_LV9: mStreamBgmMaster.forceIn(); - count_in = 0; - count_out = 1; + fadeinTime = 0; + fadeoutTime = 1; break; case Z2BGM_MAGNE_GORON_D01: case Z2BGM_DEKUTOAD_D01: - count_in = 0; - count_out = 20; + fadeinTime = 0; + fadeoutTime = 20; break; case Z2BGM_IB_MBOSS_D01: case Z2BGM_GG_MBOSS_D01: - count_in = 0; - count_out = struct_80450862; + fadeinTime = 0; + fadeoutTime = Z2Param::BGM_CROSS_FADEOUT_TIME; break; default: - count_in = struct_80450861; - count_out = struct_80450862; + fadeinTime = Z2Param::BGM_CROSS_FADEIN_TIME; + fadeoutTime = Z2Param::BGM_CROSS_FADEOUT_TIME; break; } - if (i_bgmID == getSubBgmID()) { - if (i_bgmID == Z2BGM_SUMO || i_bgmID == Z2BGM_COWBOY_GAME) { + if (bgmID == getSubBgmID()) { + if (bgmID == Z2BGM_SUMO || bgmID == Z2BGM_COWBOY_GAME) { mSubBgmHandle->stop(0); mSubBgmHandle.releaseSound(); } else { @@ -388,10 +407,10 @@ void Z2SeqMgr::subBgmStart(u32 i_bgmID) { subBgmStopInner(); } - Z2GetSoundMgr()->startSound(i_bgmID, &mSubBgmHandle, NULL); + Z2GetSoundMgr()->startSound(bgmID, &mSubBgmHandle, NULL); mSubBgmStatus = 0xff; - switch (i_bgmID) { + switch (bgmID) { case Z2BGM_HORSE_BATTLE: case Z2BGM_FACE_OFF_BATTLE2: changeSubBgmStatus(0); @@ -408,119 +427,138 @@ void Z2SeqMgr::subBgmStart(u32 i_bgmID) { break; } - if (count_in != 0) { - mSubBgmMaster.fadeInFromOut(count_in); + if (fadeinTime != 0) { + mSubBgmMaster.fadeInFromOut(fadeinTime); } else { mSubBgmMaster.forceIn(); } - if (count_out >= 0) { - mMainBgmMaster.fadeOut(count_out); + if (fadeoutTime >= 0) { + mMainBgmMaster.fadeOut(fadeoutTime); } field_0xb8 = -1; + + #if DEBUG + if (bgmID == Z2BGM_HIDDEN_VIL_D1) { + OS_REPORT("[Z2SeqMgr::subBgmStart] HIDDEN_VIL_D01 start(%d)\n", mMainBgmHandle.isSoundAttached()); + OS_REPORT(" mainBgmMasterVol::%.2f \n", mMainBgmMaster.get()); + OS_REPORT(" subBgmMasterVol::%.2f \n", mSubBgmMaster.get()); + OS_REPORT(" allBgmMasterVol::%.2f \n", mAllBgmMaster.get()); + OS_REPORT(" bgmPauseVol::%.2f \n", mBgmPause.get()); + OS_REPORT(" fanfareMuteVol::%.2f \n", mFanfareMute.get()); + OS_REPORT(" windStoneVol::%.2f \n", mWindStone.get()); + OS_REPORT(" twilightGateVol::%.2f \n", mTwilightGateVol); + } + #endif } /* 802AF884-802AF9D0 2AA1C4 014C+00 4/3 4/4 42/42 .text subBgmStop__8Z2SeqMgrFv */ void Z2SeqMgr::subBgmStop() { switch (getSubBgmID()) { - case Z2BGM_ITEM_GET: - case Z2BGM_ITEM_GET_MINI: - case Z2BGM_OPEN_BOX: - case Z2BGM_ITEM_GET_ME: - case Z2BGM_HEART_GET: - case Z2BGM_FISHING_BARE: - case Z2BGM_FISHING_GET1: - case Z2BGM_FISHING_GET2: - case Z2BGM_FISHING_GET3: - case Z2BGM_ITEM_GET_INSECT: - case Z2BGM_ITEM_GET_SMELL: - case Z2BGM_ITEM_GET_POU: - case Z2BGM_SNOWBOARD_WIN: - case Z2BGM_SNOWBOARD_LOSE: - case Z2BGM_MINIGAME_WIN01: - case Z2BGM_MINIGAME_WIN02: - case Z2BGM_ITEM_GET_ME_S: - case Z2BGM_KOMONJO_GET_INTRO: - return; - case Z2BGM_LUTERA1: - case Z2BGM_BOSS_SNOWWOMAN_D1: - Z2GetStatusMgr()->setDemoName("force_end"); - field_0xb8 = 0; - break; - case Z2BGM_HIDDEN_VIL_D1: - bgmStart(Z2BGM_HIDDEN_VILLAGE, 0, 0); - // fallthrough - case Z2BGM_BOSSBABA_0: - case Z2BGM_MAGNE_GORON: - case Z2BGM_MAGNE_GORON_D01: - case Z2BGM_MAGNE_GORON_D02: - case Z2BGM_DEKUTOAD: - case Z2BGM_DEKUTOAD_D01: - case Z2BGM_BOSSFIREMAN_1: - case Z2BGM_SUMO_D1: - case Z2BGM_BOSS_OCTAEEL_D01: - case Z2BGM_BOSS_OCTAEEL_D02: - case Z2BGM_VARIANT: - case Z2BGM_DEATH_MOUNTAIN02: - case Z2BGM_SNOW_BOARD: - case Z2BGM_IB_MBOSS_D01: - case Z2BGM_SUMOMO: - case Z2BGM_RIVER_GAME: - case Z2BGM_GG_MBOSS_D01: - case Z2BGM_HARAGIGANT_D01: - case Z2BGM_HARAGIGANT_D02: - case Z2BGM_DRAGON_D01: - case Z2BGM_DRAGON_D02: - case Z2BGM_YAMIMUSHI_B_D01: - case Z2BGM_GOMA_D01: - case Z2BGM_FACE_OFF_BATTLE3: - case Z2BGM_RIVER_GAME_00: - field_0xb8 = 0; - break; - case Z2BGM_FISHING_HIT: - setBattleBgmOff(false); - mSubBgmHandle->stop(23); - field_0xb8 = 55; - break; - case Z2BGM_IB_MBOSS: - field_0xb8 = 420; - mSubBgmHandle->stop(45); - break; - case Z2BGM_TN_MBOSS: - field_0xb8 = 510; - mSubBgmHandle->stop(45); - break; - case Z2BGM_TN_MBOSS_LV9: - field_0xb8 = 360; - mSubBgmHandle->stop(45); - break; - case Z2BGM_GG_MBOSS: - case Z2BGM_P_ZANT: - field_0xb8 = 420; - mSubBgmHandle->stop(45); - break; - case Z2BGM_OBACHAN: - case Z2BGM_POSTMAN: - setBattleBgmOff(false); - // fallthrough - default: - field_0xb8 = 15; - break; + case Z2BGM_ITEM_GET: + case Z2BGM_ITEM_GET_MINI: + case Z2BGM_OPEN_BOX: + case Z2BGM_ITEM_GET_ME: + case Z2BGM_HEART_GET: + case Z2BGM_FISHING_BARE: + case Z2BGM_FISHING_GET1: + case Z2BGM_FISHING_GET2: + case Z2BGM_FISHING_GET3: + case Z2BGM_ITEM_GET_INSECT: + case Z2BGM_ITEM_GET_SMELL: + case Z2BGM_ITEM_GET_POU: + case Z2BGM_SNOWBOARD_WIN: + case Z2BGM_SNOWBOARD_LOSE: + case Z2BGM_MINIGAME_WIN01: + case Z2BGM_MINIGAME_WIN02: + case Z2BGM_ITEM_GET_ME_S: + case Z2BGM_KOMONJO_GET_INTRO: + return; + case Z2BGM_LUTERA1: + case Z2BGM_BOSS_SNOWWOMAN_D1: + Z2GetStatusMgr()->setDemoName("force_end"); + field_0xb8 = 0; + break; + case Z2BGM_HIDDEN_VIL_D1: + bgmStart(Z2BGM_HIDDEN_VILLAGE, 0, 0); + // fallthrough + case Z2BGM_BOSSBABA_0: + case Z2BGM_MAGNE_GORON: + case Z2BGM_MAGNE_GORON_D01: + case Z2BGM_MAGNE_GORON_D02: + case Z2BGM_DEKUTOAD: + case Z2BGM_DEKUTOAD_D01: + case Z2BGM_BOSSFIREMAN_1: + case Z2BGM_SUMO_D1: + case Z2BGM_BOSS_OCTAEEL_D01: + case Z2BGM_BOSS_OCTAEEL_D02: + case Z2BGM_VARIANT: + case Z2BGM_DEATH_MOUNTAIN02: + case Z2BGM_SNOW_BOARD: + case Z2BGM_IB_MBOSS_D01: + case Z2BGM_SUMOMO: + case Z2BGM_RIVER_GAME: + case Z2BGM_GG_MBOSS_D01: + case Z2BGM_HARAGIGANT_D01: + case Z2BGM_HARAGIGANT_D02: + case Z2BGM_DRAGON_D01: + case Z2BGM_DRAGON_D02: + case Z2BGM_YAMIMUSHI_B_D01: + case Z2BGM_GOMA_D01: + case Z2BGM_FACE_OFF_BATTLE3: + case Z2BGM_RIVER_GAME_00: + field_0xb8 = 0; + break; + case Z2BGM_FISHING_HIT: + setBattleBgmOff(false); + mSubBgmHandle->stop(23); + field_0xb8 = 55; + break; + case Z2BGM_IB_MBOSS: + field_0xb8 = 420; + mSubBgmHandle->stop(45); + break; + case Z2BGM_TN_MBOSS: + field_0xb8 = 510; + mSubBgmHandle->stop(45); + break; + case Z2BGM_TN_MBOSS_LV9: + field_0xb8 = 360; + mSubBgmHandle->stop(45); + break; + case Z2BGM_GG_MBOSS: + case Z2BGM_P_ZANT: + field_0xb8 = 420; + mSubBgmHandle->stop(45); + break; + case Z2BGM_OBACHAN: + case Z2BGM_POSTMAN: + setBattleBgmOff(false); + // fallthrough + default: + field_0xb8 = 15; + break; } -} + #if DEBUG + if (getSubBgmID() == Z2BGM_HIDDEN_VIL_D1) { + OS_REPORT("[Z2SeqMgr::subBgmStop] HIDDEN_VIL_D01 stop\n"); + } + #endif +} /* 802AF9D0-802AFB94 2AA310 01C4+00 2/2 0/0 0/0 .text subBgmStopInner__8Z2SeqMgrFv */ void Z2SeqMgr::subBgmStopInner() { if (field_0xb8 == -1) { return; } + if (!mSubBgmHandle) { return; } - int count = struct_80450862; + int fadeTime = Z2Param::BGM_CROSS_FADEOUT_TIME; switch (getSubBgmID()) { case Z2BGM_MAGNE_GORON: case Z2BGM_MAGNE_GORON_D01: @@ -529,37 +567,38 @@ void Z2SeqMgr::subBgmStopInner() { case Z2BGM_SUMO_D1: case Z2BGM_VARIANT: case Z2BGM_IB_MBOSS_D01: - count = 10; + fadeTime = 10; break; case Z2BGM_LUTERA1: - count = 50; + fadeTime = 50; break; case Z2BGM_RIVER_GAME: case Z2BGM_RIVER_GAME_00: - count = 33; + fadeTime = 33; setBattleBgmOff(false); break; case Z2BGM_SNOW_BOARD: - count = 90; + fadeTime = 90; setBattleBgmOff(false); break; } - mSubBgmHandle->stop(count); + mSubBgmHandle->stop(fadeTime); mSubBgmHandle.releaseSound(); - mMainBgmMaster.fadeIn(struct_80450862); + mMainBgmMaster.fadeIn(Z2Param::BGM_CROSS_FADEOUT_TIME); field_0xb8 = -1; } /* 802AFB94-802AFDEC 2AA4D4 0258+00 1/1 3/3 46/46 .text bgmStreamPrepare__8Z2SeqMgrFUl */ -void Z2SeqMgr::bgmStreamPrepare(u32 i_bgmID) { +void Z2SeqMgr::bgmStreamPrepare(u32 bgmID) { if (mStreamBgmHandle) { bgmStreamStop(0); } - Z2GetSoundMgr()->startSound(i_bgmID, &mStreamBgmHandle, NULL); + + Z2GetSoundMgr()->startSound(bgmID, &mStreamBgmHandle, NULL); mStreamBgmHandle->lockWhenPrepared(); - switch (i_bgmID) { + switch (bgmID) { case 0x2000010: mAllBgmMaster.forceIn(); // fallthrough @@ -570,7 +609,7 @@ void Z2SeqMgr::bgmStreamPrepare(u32 i_bgmID) { return; case 0x2000023: if (mMainBgmHandle) { - mMainBgmHandle->stop(struct_80450862); + mMainBgmHandle->stop(Z2Param::BGM_CROSS_FADEOUT_TIME); } return; case 0x2000038: @@ -592,7 +631,7 @@ void Z2SeqMgr::bgmStreamPrepare(u32 i_bgmID) { break; } - mStreamBgmMaster.fadeOut(struct_80450862); + mStreamBgmMaster.fadeOut(Z2Param::BGM_CROSS_FADEOUT_TIME); } @@ -610,79 +649,98 @@ void Z2SeqMgr::bgmStreamPlay() { if (mStreamBgmHandle) { mStreamBgmHandle->unlockIfLocked(); } + if (getStreamBgmID() == -1) { if (mMainBgmHandle) { mMainBgmHandle->stop(30); } - } else if (getStreamBgmID() == 0x2000000) { + } + + #if !PLATFORM_SHIELD + else if (getStreamBgmID() == 0x2000000) { if (mStreamBgmHandle) { mStreamBgmHandle->stop(); } bgmStart(Z2BGM_MENU_SELECT, 0, 0); } + #endif } /* 802AFEDC-802AFF8C 2AA81C 00B0+00 2/2 1/1 27/27 .text bgmStreamStop__8Z2SeqMgrFUl */ -void Z2SeqMgr::bgmStreamStop(u32 i_count) { +void Z2SeqMgr::bgmStreamStop(u32 fadeTime) { if (getStreamBgmID() == 0x200003f || getStreamBgmID() == 0x200005c) { Z2GetStatusMgr()->setDemoName("force_end"); } + if (mStreamBgmHandle) { - mStreamBgmHandle->stop(i_count); + mStreamBgmHandle->stop(fadeTime); } + mStreamBgmHandle.releaseSound(); } /* 802AFF8C-802B1DF4 2AA8CC 1E68+00 5/4 8/7 26/26 .text changeBgmStatus__8Z2SeqMgrFl */ -void Z2SeqMgr::changeBgmStatus(s32 param_0) { +void Z2SeqMgr::changeBgmStatus(s32 status) { if (!mMainBgmHandle) { return; } - u32 count = 0; + u32 moveTime = 0; bool mute; + + #if PLATFORM_SHIELD + f32 volume1 = 1.0f; + f32 volume2 = 1.0f; + f32 volume3 = 1.0f; + f32 volume4 = 1.0f; + #else f32 volume1, volume2, volume3, volume4; + #endif + switch (getMainBgmID()) { case Z2BGM_TOAL_VILLEGE: - if (param_0 == mBgmStatus) { + if (status == mBgmStatus) { return; } + if (mBgmStatus != 0xff) { - count = 60; + moveTime = 60; } - if (param_0 == 1) { + + if (status == 1) { volume1 = 0.65f; volume2 = 0.0f; volume3 = 1.0f; - count = 30; + moveTime = 30; } else { volume1 = 1.0f; volume2 = 1.0f; volume3 = 0.0f; } - setChildTrackVolume(&mMainBgmHandle, 0, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 1, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 2, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 3, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 4, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 5, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 6, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 7, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 8, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 9, volume3, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 10, volume3, count, -1.0f, -1.0f); + + setChildTrackVolume(&mMainBgmHandle, 0, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 1, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 2, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 3, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 4, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 5, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 6, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 7, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 8, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 9, volume3, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 10, volume3, moveTime, -1.0f, -1.0f); break; case Z2BGM_HORSE_BATTLE: - setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, 0, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, 0, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 13, 0.0f, 0, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 13, 0.0f, moveTime, -1.0f, -1.0f); break; case Z2BGM_DUNGEON_FOREST: mute = false; - switch (param_0) { + switch (status) { case 4: case 0xc: - muteSceneBgm(struct_80450860, 0.0f); + muteSceneBgm(Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME, 0.0f); // fallthrough case 7: mute = true; @@ -691,12 +749,13 @@ void Z2SeqMgr::changeBgmStatus(s32 param_0) { Z2GetSoundObjMgr()->setForceBattleArea(true, 1500, 5000, 10000); break; } + if (!mute) { - unMuteSceneBgm(struct_80450860); + unMuteSceneBgm(Z2Param::SCENE_CHANGE_BGM_FADEOUT_TIME); } break; case Z2BGM_DUNGEON_LV2: - switch (param_0) { + switch (status) { case 0xe: case 0x10: case 0x11: @@ -711,27 +770,30 @@ void Z2SeqMgr::changeBgmStatus(s32 param_0) { break; case Z2BGM_DUNGEON_LV5: if (mBgmStatus != 0xff) { - count = 45; + moveTime = 45; } - if (param_0 == 2 || param_0 == 1) { + + if (status == 2 || status == 1) { volume1 = 0.0f; volume2 = 1.0f; } else { volume1 = 1.0f; volume2 = 0.0f; } - setChildTrackVolume(&mMainBgmHandle, 0, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 1, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 2, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 3, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 4, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 8, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 9, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 10, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 11, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 12, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 13, volume2, count, -1.0f, -1.0f); - if (param_0 == 4) { + + setChildTrackVolume(&mMainBgmHandle, 0, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 1, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 2, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 3, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 4, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 8, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 9, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 10, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 11, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 12, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 13, volume2, moveTime, -1.0f, -1.0f); + + if (status == 4) { muteSceneBgm(60, 0.29f); } else { unMuteSceneBgm(60); @@ -739,78 +801,80 @@ void Z2SeqMgr::changeBgmStatus(s32 param_0) { break; case Z2BGM_CASTLE_TOWN: if (mBgmStatus != 0xff) { - count = 45; + moveTime = 45; } - switch (param_0) { + + switch (status) { case 0: case 1: case 5: - setChildTrackVolume(&mMainBgmHandle, 0, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 1, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 2, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 3, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 4, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 5, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 6, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 8, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 9, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 10, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, count, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 0, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 1, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 2, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 3, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 4, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 5, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 6, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 8, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f); break; case 2: - setChildTrackVolume(&mMainBgmHandle, 0, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 1, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 2, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 3, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 4, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 5, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 6, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 8, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 9, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 10, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, count, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 0, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 1, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 2, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 3, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 4, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 5, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 6, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 8, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f); break; case 3: - setChildTrackVolume(&mMainBgmHandle, 0, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 1, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 2, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 3, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 4, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 5, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 6, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 8, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 9, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 10, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 11, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 12, 1.0f, count, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 0, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 1, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 2, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 3, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 4, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 5, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 6, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 8, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 10, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 11, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 12, 1.0f, moveTime, -1.0f, -1.0f); break; case 4: - setChildTrackVolume(&mMainBgmHandle, 0, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 1, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 2, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 3, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 4, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 5, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 6, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 7, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 8, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 9, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 10, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, count, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 0, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 1, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 2, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 3, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 4, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 5, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 6, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 7, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 8, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 9, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f); break; } - if (param_0 == 5) { - muteSceneBgm(count, 0.35f); + + if (status == 5) { + muteSceneBgm(moveTime, 0.35f); mFlags.mHeightVolMod = false; } else { - unMuteSceneBgm(count); - if (param_0 < 2) { + unMuteSceneBgm(moveTime); + if (status < 2) { mFlags.mHeightVolMod = false; } else { mFlags.mHeightVolMod = true; @@ -819,37 +883,39 @@ void Z2SeqMgr::changeBgmStatus(s32 param_0) { break; case Z2BGM_HOLY_FOREST: if (mBgmStatus != 0xff) { - count = 45; + moveTime = 45; setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, 5, -1.0f, -1.0f); } else { setChildTrackVolume(&mMainBgmHandle, 7, 0.0f, 0, -1.0f, -1.0f); } - if (param_0 == 1) { + + if (status == 1) { volume1 = 0.6f; volume2 = 1.0f; } else { volume1 = 1.0f; volume2 = 0.0f; } - setChildTrackVolume(&mMainBgmHandle, 0, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 1, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 2, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 3, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 4, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 5, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 6, volume2, count, -1.0f, -1.0f); + + setChildTrackVolume(&mMainBgmHandle, 0, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 1, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 2, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 3, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 4, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 5, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 6, volume2, moveTime, -1.0f, -1.0f); break; case Z2BGM_LUTERA2: - if (param_0 == 0) { + if (status == 0) { muteSceneBgm(0, 0.5f); - } else if (param_0 == 1) { + } else if (status == 1) { unMuteSceneBgm(80); } break; case Z2BGM_DEMO08: - if (param_0 == 1) { + if (status == 1) { setChildTrackVolume(&mMainBgmHandle, 4, 1.0f, 90, -1.0f, -1.0f); - } else if (param_0 == 2) { + } else if (status == 2) { bgmStop(90, 0); } else { setChildTrackVolume(&mMainBgmHandle, 4, 0.0f, 0, -1.0f, -1.0f); @@ -859,7 +925,7 @@ void Z2SeqMgr::changeBgmStatus(s32 param_0) { } break; case Z2BGM_DEMO10: - if (param_0 == 1) { + if (status == 1) { setChildTrackVolume(&mMainBgmHandle, 0, 0.3f, 143, -1.0f, -1.0f); setChildTrackVolume(&mMainBgmHandle, 1, 0.3f, 143, -1.0f, -1.0f); setChildTrackVolume(&mMainBgmHandle, 2, 0.6f, 143, -1.0f, -1.0f); @@ -875,7 +941,7 @@ void Z2SeqMgr::changeBgmStatus(s32 param_0) { } break; case Z2BGM_BOSS_SNOWWOMAN_1: - if (param_0 == 1) { + if (status == 1) { setChildTrackVolume(&mMainBgmHandle, 9, 0.0f, 60, -1.0f, -1.0f); setChildTrackVolume(&mMainBgmHandle, 10, 1.0f, 60, -1.0f, -1.0f); setChildTrackVolume(&mMainBgmHandle, 11, 1.0f, 60, -1.0f, -1.0f); @@ -887,73 +953,67 @@ void Z2SeqMgr::changeBgmStatus(s32 param_0) { } break; case Z2BGM_DUNGEON_LV8: - if (param_0 == mBgmStatus) { + if (status == mBgmStatus) { return; } + if (mBgmStatus != 0xff) { - count = 45; + moveTime = 45; } - if (param_0 == 0 || param_0 == 0xb) { + + if (status == 0 || status == 0xb) { volume1 = 1.0f; volume2 = 0.0f; volume3 = 0.0f; volume4 = 0.0f; - } else if (param_0 >= 100) { + } else if (status >= 100) { volume1 = 0.0f; volume2 = 1.0f; - f32 volume; - if (param_0 < 200) { - volume = 1.0f; - } else if (param_0 > 3100) { - volume = 0.0f; - } else { - volume = Z2Calc::getParamByExp(param_0, 3100.0f, 200.0f, 0.3f, 0.0f, 1.0f, - Z2Calc::CURVE_SIGN_1); - } - volume3 = volume; - if (param_0 < 200) { - volume = 1.0f; - } else if (param_0 > 1600) { - volume = 0.0f; - } else { - volume = Z2Calc::getParamByExp(param_0, 1600.0f, 200.0f, 0.3f, 0.0f, 1.0f, - Z2Calc::CURVE_SIGN_1); - } - volume4 = volume; + + volume3 = status < 200 ? 1.0f : + status > 3100 ? 0.0f : + Z2Calc::getParamByExp(status, 3100.0f, 200.0f, 0.3f, 0.0f, 1.0f, + Z2Calc::CURVE_POSITIVE); + + volume4 = status < 200 ? 1.0f : + status > 1600 ? 0.0f : + Z2Calc::getParamByExp(status, 1600.0f, 200.0f, 0.3f, 0.0f, 1.0f, + Z2Calc::CURVE_POSITIVE); } else { volume1 = 0.0f; volume2 = 1.0f; volume3 = 0.0f; volume4 = 0.0f; } - setChildTrackVolume(&mMainBgmHandle, 2, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 3, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 4, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 5, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 6, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 7, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 8, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 9, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 10, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 11, volume3, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 12, volume3, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 13, volume4, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 14, volume4, count, -1.0f, -1.0f); + + setChildTrackVolume(&mMainBgmHandle, 2, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 3, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 4, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 5, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 6, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 7, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 8, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 9, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 10, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 11, volume3, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 12, volume3, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 13, volume4, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 14, volume4, moveTime, -1.0f, -1.0f); break; case Z2BGM_BOSS_ZANT: - if (param_0 == 0xd) { + if (status == 0xd) { mSceneBgm.move(0.3f, 134); } else { mSceneBgm.forceIn(); - if (param_0 > 6) { - param_0 = (param_0 - 7) * 2; + if (status > 6) { + status = (status - 7) * 2; } else { - param_0 = param_0 * 2 - 1; + status = status * 2 - 1; } } break; case Z2BGM_FORTUNE: - if (param_0 == 1) { + if (status == 1) { muteSceneBgm(45, 0.5f); } else { unMuteSceneBgm(45); @@ -961,201 +1021,214 @@ void Z2SeqMgr::changeBgmStatus(s32 param_0) { break; case Z2BGM_DUNGEON_LV9_02: if (mBgmStatus != 0xff) { - count = 30; + moveTime = 30; } - if (param_0 == 0xc) { + + if (status == 0xc) { volume4 = 1.0f; volume1 = 0.0f; volume2 = 0.5f; volume3 = 0.0f; - } else if (param_0 == 8) { + } else if (status == 8) { volume4 = 0.0f; volume1 = 0.5f; volume2 = 1.0f; volume3 = 0.8f; - } else if (param_0 > 3000) { - volume4 = Z2Calc::linearTransform(param_0, 3150.0f, 6150.0f, 1.0f, 0.0f, false); - volume1 = Z2Calc::linearTransform(param_0, 3150.0f, 6150.0f, 0.0f, 1.0f, false); - volume2 = Z2Calc::linearTransform(param_0, 3150.0f, 6150.0f, 0.5f, 1.0f, false); - volume3 = Z2Calc::linearTransform(param_0, 3150.0f, 6150.0f, 0.0f, 1.0f, false); - } - setChildTrackVolume(&mMainBgmHandle, 0, volume4, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 1, volume4, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 2, volume4, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 3, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 4, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 5, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 6, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 7, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 8, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 9, volume3, count, -1.0f, -1.0f); + } else if (status > 3000) { + volume4 = Z2Calc::linearTransform(status, 3150.0f, 6150.0f, 1.0f, 0.0f, false); + volume1 = Z2Calc::linearTransform(status, 3150.0f, 6150.0f, 0.0f, 1.0f, false); + volume2 = Z2Calc::linearTransform(status, 3150.0f, 6150.0f, 0.5f, 1.0f, false); + volume3 = Z2Calc::linearTransform(status, 3150.0f, 6150.0f, 0.0f, 1.0f, false); + } + + setChildTrackVolume(&mMainBgmHandle, 0, volume4, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 1, volume4, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 2, volume4, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 3, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 4, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 5, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 6, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 7, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 8, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 9, volume3, moveTime, -1.0f, -1.0f); break; case Z2BGM_VS_GANON_02: - if (param_0 == mBgmStatus) { + if (status == mBgmStatus) { return; } + if (mBgmStatus != 0xff) { - count = 45; + moveTime = 45; } - if (param_0 == 1) { + + if (status == 1) { volume1 = 0.0f; volume2 = 1.0f; } else { volume1 = 1.0f; volume2 = 0.0f; } - setChildTrackVolume(&mMainBgmHandle, 0, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 1, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 2, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 3, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 4, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 5, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 6, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 7, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 10, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 11, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 12, volume2, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 13, volume2, count, -1.0f, -1.0f); + + setChildTrackVolume(&mMainBgmHandle, 0, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 1, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 2, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 3, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 4, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 5, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 6, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 7, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 10, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 11, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 12, volume2, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 13, volume2, moveTime, -1.0f, -1.0f); break; case Z2BGM_TOAL_NIGHT: case Z2BGM_FILONE_FOREST: - if (param_0 == 1) { + if (status == 1) { muteSceneBgm(45, 0.5f); - } else if (param_0 == 2) { + } else if (status == 2) { muteSceneBgm(0, 0.5f); } else { unMuteSceneBgm(45); } break; case Z2BGM_VS_GANON_04: - if (param_0 == mBgmStatus) { + if (status == mBgmStatus) { return; } - if (param_0 >= 4) { - count = 50; - if (param_0 == 4) { + + if (status >= 4) { + moveTime = 50; + if (status == 4) { volume4 = 1.0f; volume1 = 0.0f; - } else if (param_0 == 5) { + } else if (status == 5) { volume4 = 0.0f; volume1 = 1.0f; - } else if (param_0 == 6) { + } else if (status == 6) { volume4 = 0.0f; volume1 = 0.0f; - } else if (param_0 == 7) { + } else if (status == 7) { volume4 = 0.0f; volume1 = 0.0f; - count = 0; - } else if (param_0 == 8) { + moveTime = 0; + } else if (status == 8) { volume4 = 1.0f; volume1 = 1.0f; - count = 0; + moveTime = 0; } - setChildTrackVolume(&mMainBgmHandle, 12, volume4, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 13, volume4, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 14, volume1, count, -1.0f, -1.0f); - setChildTrackVolume(&mMainBgmHandle, 15, volume1, count, -1.0f, -1.0f); + + setChildTrackVolume(&mMainBgmHandle, 12, volume4, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 13, volume4, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 14, volume1, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mMainBgmHandle, 15, volume1, moveTime, -1.0f, -1.0f); } break; } - Z2GetSoundStarter()->setPortData(&mMainBgmHandle, 9, param_0, -1); - mBgmStatus = param_0 & 0xff; + Z2GetSoundStarter()->setPortData(&mMainBgmHandle, 9, status, -1); + mBgmStatus = status & 0xff; } /* 802B1DF4-802B299C 2AC734 0BA8+00 2/2 3/3 31/31 .text changeSubBgmStatus__8Z2SeqMgrFl */ -void Z2SeqMgr::changeSubBgmStatus(s32 param_0) { +void Z2SeqMgr::changeSubBgmStatus(s32 status) { if (!mSubBgmHandle) { return; } - u32 count = 0; + u32 moveTime = 0; bool bvar2 = true; + switch (getSubBgmID()) { case Z2BGM_DEKUTOAD: - if (param_0 == 1 && mSubBgmStatus == 2) { + if (status == 1 && mSubBgmStatus == 2) { mSubBgmMaster.forceOut(); mDekuToadCount = 100; - } else if (param_0 == 3) { + } else if (status == 3) { mSubBgmMaster.forceOut(); mDekuToadCount = 30; } break; case Z2BGM_HORSE_BATTLE: - if (param_0 == mSubBgmStatus) { + if (status == mSubBgmStatus) { return; } - if (param_0 != 2) { + + if (status != 2) { bvar2 = false; if (mSubBgmStatus != 0xff) { - count = 40; + moveTime = 40; } } - if (param_0 == 1) { + + if (status == 1) { setChildTrackVolume(&mSubBgmHandle, 0, 0.0f, 60, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 1, 0.0f, 60, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 11, 1.0f, 60, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, 60, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 13, 1.0f, 60, -1.0f, -1.0f); } else { - setChildTrackVolume(&mSubBgmHandle, 0, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 1, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 13, 0.0f, count, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 0, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 1, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 13, 0.0f, moveTime, -1.0f, -1.0f); } break; case Z2BGM_FACE_OFF_BATTLE2: - if (param_0 == mSubBgmStatus) { + if (status == mSubBgmStatus) { return; } + bvar2 = false; if (mSubBgmStatus != 0xff) { - count = 30; + moveTime = 30; } - if (param_0 == 1) { + + if (status == 1) { setChildTrackVolume(&mSubBgmHandle, 0, 0.0f, 10, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, 10, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 11, 1.0f, 10, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, 10, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 13, 1.0f, 10, -1.0f, -1.0f); } else { - setChildTrackVolume(&mSubBgmHandle, 0, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 10, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 13, 0.0f, count, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 0, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 10, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 13, 0.0f, moveTime, -1.0f, -1.0f); } break; case Z2BGM_RODEO: - if (param_0 == mSubBgmStatus) { + if (status == mSubBgmStatus) { break; } - if (param_0 == 1) { + + if (status == 1) { if (mSubBgmStatus != 0xff) { - count = 60; + moveTime = 60; } - setChildTrackVolume(&mSubBgmHandle, 9, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 13, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 14, 0.0f, count, -1.0f, -1.0f); - } else if (param_0 == 2) { + setChildTrackVolume(&mSubBgmHandle, 9, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 13, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 14, 0.0f, moveTime, -1.0f, -1.0f); + } else if (status == 2) { if (mSubBgmStatus != 0xff) { - count = 20; + moveTime = 20; } - setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 10, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 11, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 13, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 14, 1.0f, count, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 10, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 11, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 13, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 14, 1.0f, moveTime, -1.0f, -1.0f); } break; case Z2BGM_VARIANT: - switch (param_0) { + switch (status) { case 1: switch (mSubBgmStatus) { case 2: @@ -1178,26 +1251,28 @@ void Z2SeqMgr::changeSubBgmStatus(s32 param_0) { } break; case Z2BGM_BATTLE_TWILIGHT: - if (mSubBgmStatus == param_0) { + if (mSubBgmStatus == status) { return; } + if (mSubBgmStatus != 0xff) { - count = 25; + moveTime = 25; } + bvar2 = false; - if (param_0 == 2) { - setChildTrackVolume(&mSubBgmHandle, 2, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 3, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 4, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 5, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 6, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 7, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 8, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, count, -1.0f, -1.0f); - } else if (param_0 == 3) { + if (status == 2) { + setChildTrackVolume(&mSubBgmHandle, 2, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 3, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 4, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 5, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 6, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 7, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 8, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f); + } else if (status == 3) { setChildTrackVolume(&mSubBgmHandle, 2, 0.0f, 0, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 3, 0.0f, 0, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 4, 0.0f, 0, -1.0f, -1.0f); @@ -1210,17 +1285,17 @@ void Z2SeqMgr::changeSubBgmStatus(s32 param_0) { setChildTrackVolume(&mSubBgmHandle, 11, 1.0f, 0, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, 0, -1.0f, -1.0f); } else { - setChildTrackVolume(&mSubBgmHandle, 2, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 3, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 4, 1.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 5, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 6, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 7, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 8, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, count, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 2, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 3, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 4, 1.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 5, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 6, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 7, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 8, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 11, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, moveTime, -1.0f, -1.0f); } break; case Z2BGM_BATTLE_NORMAL: @@ -1228,25 +1303,27 @@ void Z2SeqMgr::changeSubBgmStatus(s32 param_0) { } if (bvar2) { - Z2GetSoundStarter()->setPortData(&mSubBgmHandle, 9, param_0, -1); + Z2GetSoundStarter()->setPortData(&mSubBgmHandle, 9, status, -1); } - mSubBgmStatus = param_0 & 0xff; + + mSubBgmStatus = status & 0xff; } /* 802B299C-802B2A88 2AD2DC 00EC+00 0/0 1/1 0/0 .text onVariantBgmJumpEnd__8Z2SeqMgrFb */ void Z2SeqMgr::onVariantBgmJumpEnd(bool param_0) { if (param_0) { - u32 count = 0; + u32 moveTime = 0; if (mSubBgmStatus == 3) { - count = 45; + moveTime = 45; mSubBgmStatus = 1; } - setChildTrackVolume(&mSubBgmHandle, 8, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, count, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, count, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 8, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 9, 0.0f, moveTime, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 10, 0.0f, moveTime, -1.0f, -1.0f); } else { setChildTrackVolume(&mSubBgmHandle, 0, 1.0f, 0, -1.0f, -1.0f); } + Z2GetSoundMgr()->getSeqMgr()->calc(); Z2GetSoundMgr()->getSeqMgr()->mixOut(); } @@ -1258,7 +1335,7 @@ void Z2SeqMgr::changeFishingBgm(s32 param_0) { if (getSubBgmID() == Z2BGM_FISHING_HIT) { subBgmStop(); } - unMuteSceneBgm(struct_80450862); + unMuteSceneBgm(Z2Param::BGM_CROSS_FADEOUT_TIME); break; case 1: if (getSubBgmID() == Z2BGM_FISHING_HIT) { @@ -1281,11 +1358,10 @@ void Z2SeqMgr::changeFishingBgm(s32 param_0) { /* 802B2CA4-802B2D64 2AD5E4 00C0+00 0/0 1/1 0/0 .text talkInBgm__8Z2SeqMgrFv */ void Z2SeqMgr::talkInBgm() { - if (getStreamBgmID() == 0x2000038 || getStreamBgmID() == 0x200007c - || getMainBgmID() == Z2BGM_WCS_D01) - { + if (getStreamBgmID() == 0x2000038 || getStreamBgmID() == 0x200007c || getMainBgmID() == Z2BGM_WCS_D01) { return; } + mBgmPause.move(Z2Param::VOL_BGM_TALKING, 2); } @@ -1371,7 +1447,7 @@ void Z2SeqMgr::fanfareFramework() { } if (!isItemGetDemo() && mFanfareMute.getDest() != 1.0f) { - mFanfareMute.fadeIn(struct_80450861); + mFanfareMute.fadeIn(Z2Param::BGM_CROSS_FADEIN_TIME); } if (mFanfareCount != 0) { mFanfareCount--; @@ -1424,16 +1500,16 @@ void Z2SeqMgr::stopWolfHowlSong() { } /* 802B3318-802B3398 2ADC58 0080+00 0/0 1/1 0/0 .text setHeightVolMod__8Z2SeqMgrFbUl */ -void Z2SeqMgr::setHeightVolMod(bool i_value, u32 i_count) { - mFlags.mHeightVolMod = i_value; - if (!i_value) { - field_0x84.fadeIn(i_count); +void Z2SeqMgr::setHeightVolMod(bool isVolMod, u32 fadeTime) { + mFlags.mHeightVolMod = isVolMod; + if (!isVolMod) { + field_0x84.fadeIn(fadeTime); } } /* 802B3398-802B33A8 2ADCD8 0010+00 0/0 1/1 0/0 .text setTimeProcVolMod__8Z2SeqMgrFbUl */ -void Z2SeqMgr::setTimeProcVolMod(bool i_value, u32 i_count) { - mFlags.mTimeProcVolMod = i_value; +void Z2SeqMgr::setTimeProcVolMod(bool isVolMod, u32 fadeTime) { + mFlags.mTimeProcVolMod = isVolMod; } /* 80450870-80450874 0002F0 0004+00 1/1 0/0 0/0 .sdata sDeathMtBottom */ @@ -1453,7 +1529,7 @@ void Z2SeqMgr::processBgmFramework() { fieldBgmFramework(); if (!mStreamBgmHandle && mStreamBgmMaster.getDest() != 1.0f) { - mStreamBgmMaster.fadeIn(struct_80450861); + mStreamBgmMaster.fadeIn(Z2Param::BGM_CROSS_FADEIN_TIME); } if (field_0xb8 != -1) { @@ -1464,7 +1540,7 @@ void Z2SeqMgr::processBgmFramework() { field_0xb8 = -1; } } else if (!mSubBgmHandle && mMainBgmMaster.getDest() != 1.0f) { - mMainBgmMaster.fadeIn(struct_80450861); + mMainBgmMaster.fadeIn(Z2Param::BGM_CROSS_FADEIN_TIME); } if (mFlags.mTimeProcVolMod) { @@ -1483,7 +1559,7 @@ void Z2SeqMgr::processBgmFramework() { switch (getMainBgmID()) { case Z2BGM_DEATH_MOUNTAIN01: volume = Z2Calc::getParamByExp(link_y, sDeathMtTop, sDeathMtBottom, 0.3f, 0.0f, 1.0f, - Z2Calc::CURVE_SIGN_0); + Z2Calc::CURVE_NEGATIVE); field_0x84.move(volume, 0); break; case Z2BGM_RAKKA_HOUSE: @@ -1492,7 +1568,7 @@ void Z2SeqMgr::processBgmFramework() { field_0x84.forceIn(); } else if (link_y < -7500.0f) { volume = Z2Calc::getParamByExp(link_y, -10500.0f, -7500.0f, 0.3f, 0.0f, 1.0f, - Z2Calc::CURVE_SIGN_1); + Z2Calc::CURVE_POSITIVE); field_0x84.move(volume, 0); } break; @@ -1506,7 +1582,7 @@ void Z2SeqMgr::processBgmFramework() { field_0x84.forceOut(); } else if (depth > 0.0f) { volume = Z2Calc::getParamByExp(depth, sUnderWaterDepthMax, 0.0f, 0.3f, 0.1f, 1.0f, - Z2Calc::CURVE_SIGN_1); + Z2Calc::CURVE_POSITIVE); field_0x84.move(volume, 0); } else if (field_0x84.getDest() != 1.0f) { field_0x84.fadeIn(30); @@ -1518,7 +1594,7 @@ void Z2SeqMgr::processBgmFramework() { field_0x84.move(0.3f, 0); } else if (link_y > -13000.0f) { volume = Z2Calc::getParamByExp(link_y, -1500.0f, -13000.0f, 0.3f, 0.3f, 1.0f, - Z2Calc::CURVE_SIGN_0); + Z2Calc::CURVE_NEGATIVE); field_0x84.move(volume, 0); } else { field_0x84.forceIn(); @@ -1528,7 +1604,7 @@ void Z2SeqMgr::processBgmFramework() { field_0x84.fadeOut(30); } else if (link_y > -45000.0f) { volume = Z2Calc::getParamByExp(link_y, -3000.0f, -45000.0f, 0.3f, 0.0f, 1.0f, - Z2Calc::CURVE_SIGN_0); + Z2Calc::CURVE_NEGATIVE); field_0x84.move(volume, 0); } else { field_0x84.forceIn(); @@ -1538,7 +1614,7 @@ void Z2SeqMgr::processBgmFramework() { field_0x84.forceOut(); } else if (link_y > -1500.0f) { volume = Z2Calc::getParamByExp(link_y, 900.0f, -1500.0f, 0.3f, 0.0f, 0.3f, - Z2Calc::CURVE_SIGN_0); + Z2Calc::CURVE_NEGATIVE); field_0x84.move(volume, 0); } else { field_0x84.move(0.3f, 0); @@ -1574,86 +1650,98 @@ void Z2SeqMgr::processBgmFramework() { mWindStone.calc(); field_0xa4.calc(); - f32 base_vol = mAllBgmMaster.get() * mBgmPause.get() * mFanfareMute.get() - * mWindStone.get() * mTwilightGateVol; + f32 base_vol = mAllBgmMaster.get() * mBgmPause.get() * mFanfareMute.get() * mWindStone.get() * mTwilightGateVol; + if (mMainBgmHandle) { f32 volume = 1.0f; if (getMainBgmID() != Z2BGM_GAME_OVER) { - volume = base_vol * mMainBgmMaster.get() * mSceneBgm.get() - * mStreamBgmMaster.get() * field_0x84.get() * field_0xa4.get(); + volume = base_vol * mMainBgmMaster.get() * mSceneBgm.get() * mStreamBgmMaster.get() * field_0x84.get() * field_0xa4.get(); } mMainBgmHandle->getAuxiliary().moveVolume(volume, 0); } + if (mSubBgmHandle) { f32 volume = base_vol * mSubBgmMaster.get() * mStreamBgmMaster.get(); mSubBgmHandle->getAuxiliary().moveVolume(volume, 0); } + if (mStreamBgmHandle) { f32 volume = base_vol * mMainBgmMaster.get() * mSceneBgm.get(); mStreamBgmHandle->getAuxiliary().moveVolume(volume, 0); } + setWindStoneVol(1.0f, 30); } /* 802B3EAC-802B3F40 2AE7EC 0094+00 0/0 2/2 0/0 .text checkBgmIDPlaying__8Z2SeqMgrFUl */ -bool Z2SeqMgr::checkBgmIDPlaying(u32 i_bgmID) { - if (getMainBgmID() == i_bgmID) { +bool Z2SeqMgr::checkBgmIDPlaying(u32 bgmID) { + if (getMainBgmID() == bgmID) { return true; } - if (getSubBgmID() == i_bgmID) { + + if (getSubBgmID() == bgmID) { return true; } - if (getStreamBgmID() == i_bgmID) { + + if (getStreamBgmID() == bgmID) { return true; } + return false; } /* 802B3F40-802B3FEC 2AE880 00AC+00 1/1 0/0 0/0 .text * getChildTrackVolume__8Z2SeqMgrFP14JAISoundHandlei */ -f32 Z2SeqMgr::getChildTrackVolume(JAISoundHandle* i_handle, int i_track) { +f32 Z2SeqMgr::getChildTrackVolume(JAISoundHandle* handle, int trackId) { f32 volume = 0.0f; - if (*i_handle) { - JAISeq* seq = i_handle->getSound()->asSeq(); - if (seq != NULL && seq->getChildTrack(i_track) != NULL) { - JAISoundChild* child = seq->getChild(i_track); + if (*handle) { + JAISeq* seq = handle->getSound()->asSeq(); + if (seq != NULL && seq->getChildTrack(trackId) != NULL) { + JAISoundChild* child = seq->getChild(trackId); if (child != NULL) { - volume = child->mMove.mParams.mVolume; + volume = child->mMove.params_.mVolume; } } } + return volume; } /* 802B3FEC-802B4128 2AE92C 013C+00 9/9 2/2 0/0 .text * setChildTrackVolume__8Z2SeqMgrFP14JAISoundHandleifUlff */ -void Z2SeqMgr::setChildTrackVolume(JAISoundHandle* i_handle, int i_track, f32 i_volume, - u32 i_count, f32 i_pan, f32 i_dolby) { - if (!*i_handle) { +void Z2SeqMgr::setChildTrackVolume(JAISoundHandle* handle, int trackId, f32 volume, + u32 moveTime, f32 pan, f32 dolby) { + if (!*handle) { return; } - JAISeq* seq = (*i_handle)->asSeq(); + + JAISeq* seq = (*handle)->asSeq(); if (seq == NULL) { return; } - if (seq->getChildTrack(i_track) == NULL) { + + if (seq->getChildTrack(trackId) == NULL) { return; } - JAISoundChild* child = seq->getChild(i_track); + + JAISoundChild* child = seq->getChild(trackId); if (child == NULL) { return; } - if (i_volume > 1.0f) { - i_volume = 1.0f; - } else if (i_volume < 0.0f) { - i_volume = 0.0f; + + if (volume > 1.0f) { + volume = 1.0f; + } else if (volume < 0.0f) { + volume = 0.0f; } - child->mMove.moveVolume(i_volume, i_count); - if (i_pan != -1.0f) { - child->mMove.movePan(i_pan, i_count); + + child->mMove.moveVolume(volume, moveTime); + if (pan != -1.0f) { + child->mMove.movePan(pan, moveTime); } - if (i_dolby != -1.0f) { - child->mMove.moveDolby(i_dolby, i_count); + + if (dolby != -1.0f) { + child->mMove.moveDolby(dolby, moveTime); } } @@ -1666,46 +1754,47 @@ void Z2SeqMgr::resetBattleBgmParams() { } /* 802B4164-802B421C 2AEAA4 00B8+00 4/4 3/3 10/10 .text setBattleBgmOff__8Z2SeqMgrFb */ -void Z2SeqMgr::setBattleBgmOff(bool i_value) { - if (mFlags.mBattleBgmOff != i_value && i_value && +void Z2SeqMgr::setBattleBgmOff(bool isBgmOff) { + if (mFlags.mBattleBgmOff != isBgmOff && isBgmOff && (getSubBgmID() == Z2BGM_BATTLE_NORMAL || getSubBgmID() == Z2BGM_BATTLE_TWILIGHT)) { - stopBattleBgm(struct_80450862, struct_80450861); + stopBattleBgm(Z2Param::BGM_CROSS_FADEOUT_TIME, Z2Param::BGM_CROSS_FADEIN_TIME); } - mFlags.mBattleBgmOff = i_value; + + mFlags.mBattleBgmOff = isBgmOff; } /* 802B421C-802B43D0 2AEB5C 01B4+00 0/0 1/1 0/0 .text setBattleSearched__8Z2SeqMgrFb */ -void Z2SeqMgr::setBattleSearched(bool i_value) { +void Z2SeqMgr::setBattleSearched(bool isBattleSearched) { if (!mFlags.mBattleBgmOff && Z2GetSceneMgr()->isSceneExist() - && mFlags.mBattleSearched != i_value && mBattleSeqState != 3) + && mFlags.mBattleSearched != isBattleSearched && mBattleSeqState != 3) { if (getSubBgmID() == Z2BGM_BATTLE_NORMAL && mBattleSeqState == 1) { - if (i_value) { - setChildTrackVolume(&mSubBgmHandle, 2, 1.0f, struct_80450864, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 3, 1.0f, struct_80450864, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, struct_80450864, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 14, 1.0f, struct_80450864, -1.0f, -1.0f); + if (isBattleSearched) { + setChildTrackVolume(&mSubBgmHandle, 2, 1.0f, Z2Param::FOUND_TRACK_FI_TIME, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 3, 1.0f, Z2Param::FOUND_TRACK_FI_TIME, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, Z2Param::FOUND_TRACK_FI_TIME, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 14, 1.0f, Z2Param::FOUND_TRACK_FI_TIME, -1.0f, -1.0f); } else { - setChildTrackVolume(&mSubBgmHandle, 2, 0.0f, struct_80450865, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 3, 0.0f, struct_80450865, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, struct_80450865, -1.0f, -1.0f); - setChildTrackVolume(&mSubBgmHandle, 14, 0.0f, struct_80450865, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 2, 0.0f, Z2Param::FOUND_TRACK_FO_TIME, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 3, 0.0f, Z2Param::FOUND_TRACK_FO_TIME, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 12, 0.0f, Z2Param::FOUND_TRACK_FO_TIME, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, 14, 0.0f, Z2Param::FOUND_TRACK_FO_TIME, -1.0f, -1.0f); } } - mFlags.mBattleSearched = i_value; + mFlags.mBattleSearched = isBattleSearched; } } /* 802B43D0-802B43E0 2AED10 0010+00 3/3 0/0 0/0 .text setBattleDistIgnore__8Z2SeqMgrFb */ -void Z2SeqMgr::setBattleDistIgnore(bool i_value) { - mFlags.mBattleDistIgnore = i_value; +void Z2SeqMgr::setBattleDistIgnore(bool isBattleDistIgnore) { + mFlags.mBattleDistIgnore = isBattleDistIgnore; } /* 802B43E0-802B4498 2AED20 00B8+00 0/0 2/2 0/0 .text setBattleGhostMute__8Z2SeqMgrFb */ -void Z2SeqMgr::setBattleGhostMute(bool i_value) { +void Z2SeqMgr::setBattleGhostMute(bool isBattleGhostMute) { if (getSubBgmID() == Z2BGM_BATTLE_NORMAL) { - if (i_value) { + if (isBattleGhostMute) { mSubBgmMaster.move(1.0f, 5); } else { mSubBgmMaster.move(0.4f, 5); @@ -1714,26 +1803,27 @@ void Z2SeqMgr::setBattleGhostMute(bool i_value) { } /* 802B4498-802B4844 2AEDD8 03AC+00 0/0 1/1 0/0 .text setBattleDistState__8Z2SeqMgrFUc */ -void Z2SeqMgr::setBattleDistState(u8 i_state) { +void Z2SeqMgr::setBattleDistState(u8 state) { if (!mFlags.mBattleBgmOff && Z2GetSceneMgr()->isSceneExist()) { if (!mFlags.mBattleDistIgnore) { - if (i_state < 2 && mBattleSeqCount != 0) { + if (state < 2 && mBattleSeqCount != 0) { mBattleSeqCount = 0; - if (getSubBgmID() == Z2BGM_BATTLE_TWILIGHT - || getSubBgmID() == Z2BGM_BATTLE_NORMAL) + if (getSubBgmID() == Z2BGM_BATTLE_TWILIGHT || getSubBgmID() == Z2BGM_BATTLE_NORMAL) { mSubBgmHandle->getFader().fadeIn(10); mMainBgmMaster.fadeOut(10); } } + if ((Z2GetSoundObjMgr()->isTwilightBattle() && getSubBgmID() == Z2BGM_BATTLE_NORMAL) || (!Z2GetSoundObjMgr()->isTwilightBattle() && getSubBgmID() == Z2BGM_BATTLE_TWILIGHT)) { mSubBgmHandle->stop(30); mSubBgmHandle->releaseHandle(); } + if (Z2GetSoundObjMgr()->isTwilightBattle() || getSubBgmID() == Z2BGM_BATTLE_TWILIGHT) { - switch (i_state) { + switch (state) { case 0: if (mBattleSeqState == 0) { startBattleBgm(true); @@ -1751,47 +1841,45 @@ void Z2SeqMgr::setBattleDistState(u8 i_state) { break; } } else if (getMainBgmID() != Z2BGM_FIELD_LINK_DAY) { - switch (i_state) { + switch (state) { case 0: if (mBattleSeqState == 0) { startBattleBgm(true); } else if (mBattleSeqState == 1) { - setChildTrackVolume(&mSubBgmHandle, data_8045086C, 1.0f, struct_80450866, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, data_8045086C, 1.0f, Z2Param::CLOSE_BATTLE_TRACK_FI_TIME, -1.0f, -1.0f); } break; case 1: if (mBattleSeqState == 0) { startBattleBgm(true); } else if (mBattleSeqState == 1) { - setChildTrackVolume(&mSubBgmHandle, data_8045086C, 0.0f, struct_80450867, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, data_8045086C, 0.0f, Z2Param::CLOSE_BATTLE_TRACK_FO_TIME, -1.0f, -1.0f); } break; case 2: if (mBattleSeqState == 1) { - setChildTrackVolume(&mSubBgmHandle, data_8045086C, 0.0f, struct_80450867, -1.0f, -1.0f); + setChildTrackVolume(&mSubBgmHandle, data_8045086C, 0.0f, Z2Param::CLOSE_BATTLE_TRACK_FO_TIME, -1.0f, -1.0f); } break; case 3: if (mBattleSeqState == 1 || mBattleSeqState == 2) { - stopBattleBgm(struct_80450862, struct_80450861); + stopBattleBgm(Z2Param::BGM_CROSS_FADEOUT_TIME, Z2Param::BGM_CROSS_FADEIN_TIME); } break; } } } - mBattleDistState = i_state; + mBattleDistState = state; } } /* 802B4844-802B4AFC 2AF184 02B8+00 1/1 3/3 1/1 .text setBattleSeqState__8Z2SeqMgrFUc */ -void Z2SeqMgr::setBattleSeqState(u8 i_state) { - if (!mFlags.mBattleBgmOff && Z2GetSceneMgr()->isSceneExist() && mBattleSeqState != i_state) { - if (i_state == 0) { - stopBattleBgm(struct_80450862, struct_80450861); - } else if (getSubBgmID() == Z2BGM_BATTLE_NORMAL && - !(getMainBgmID() == Z2BGM_FIELD_LINK_DAY && !Z2GetSoundObjMgr()->isTwilightBattle())) - { - switch (i_state) { +void Z2SeqMgr::setBattleSeqState(u8 state) { + if (!mFlags.mBattleBgmOff && Z2GetSceneMgr()->isSceneExist() && mBattleSeqState != state) { + if (state == 0) { + stopBattleBgm(Z2Param::BGM_CROSS_FADEOUT_TIME, Z2Param::BGM_CROSS_FADEIN_TIME); + } else if (getSubBgmID() == Z2BGM_BATTLE_NORMAL && !(getMainBgmID() == Z2BGM_FIELD_LINK_DAY && !Z2GetSoundObjMgr()->isTwilightBattle())) { + switch (state) { case 2: if (mBattleSeqState == 1) { Z2GetSoundStarter()->setPortData(&mSubBgmHandle, 9, 1, -1); @@ -1801,6 +1889,7 @@ void Z2SeqMgr::setBattleSeqState(u8 i_state) { setChildTrackVolume(&mSubBgmHandle, 12, 1.0f, 0, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 14, 1.0f, 0, -1.0f, -1.0f); } + if (mBattleSeqCount != 0) { mBattleSeqCount = 0; mSubBgmHandle->getFader().fadeIn(10); @@ -1810,6 +1899,7 @@ void Z2SeqMgr::setBattleSeqState(u8 i_state) { case 3: mMainBgmMaster.forceOut(); mSubBgmMaster.forceIn(); + if (mBattleSeqState == 1) { Z2GetSoundStarter()->setPortData(&mSubBgmHandle, 9, 3, -1); } else if (mBattleSeqState == 2) { @@ -1817,18 +1907,19 @@ void Z2SeqMgr::setBattleSeqState(u8 i_state) { } break; } - mBattleSeqState = i_state; + + mBattleSeqState = state; } } } /* 802B4AFC-802B4BD0 2AF43C 00D4+00 0/0 4/4 0/0 .text setBattleLastHit__8Z2SeqMgrFUc */ -void Z2SeqMgr::setBattleLastHit(u8 param_0) { +void Z2SeqMgr::setBattleLastHit(u8 lastHit) { if (getSubBgmID() == Z2BGM_BATTLE_NORMAL) { setBattleDistIgnore(true); - mSubBgmMaster.move(Z2Param::ENEMY_LASTHIT_MUTE_VOLUME, struct_80450868); - field_0xc1 = struct_8045086B; - mBattleLastHit = param_0; + mSubBgmMaster.move(Z2Param::ENEMY_LASTHIT_MUTE_VOLUME, Z2Param::ENDING_BLOW_VOL_DOWN_TIME); + field_0xc1 = Z2Param::ENDING_BLOW_MIN_FINISH_TIME; + mBattleLastHit = lastHit; } } @@ -1843,6 +1934,7 @@ void Z2SeqMgr::battleBgmFramework() { } } } + if (!mFlags.mBattleBgmOff && Z2GetSceneMgr()->isSceneExist()) { Z2GetSoundObjMgr()->searchEnemy(); switch (getSubBgmID()) { @@ -1852,17 +1944,19 @@ void Z2SeqMgr::battleBgmFramework() { if (getMainBgmID() == Z2BGM_FIELD_LINK_DAY && !Z2GetSoundObjMgr()->isTwilightBattle()) { return; } + if (field_0xc1 != 0) { field_0xc1--; if (field_0xc1 < mBattleLastHit && mSubBgmMaster.getDest() != 1.0f) { - mSubBgmMaster.fadeIn(struct_8045086A); + mSubBgmMaster.fadeIn(Z2Param::ENDING_BLOW_VOL_LOWER_RECOVER_TIME); } + if (field_0xc1 == 0) { setBattleDistIgnore(false); if (Z2GetSoundObjMgr()->checkBattleFinish()) { setBattleSeqState(3); } else if (mSubBgmMaster.getDest() != 1.0f) { - mSubBgmMaster.fadeIn(struct_8045086A); + mSubBgmMaster.fadeIn(Z2Param::ENDING_BLOW_VOL_LOWER_RECOVER_TIME); } } } @@ -1872,13 +1966,13 @@ void Z2SeqMgr::battleBgmFramework() { setBattleDistIgnore(false); mFlags.mBattleSearched = 0; field_0xc1 = 0; - mBattleLastHit = struct_80450869; + mBattleLastHit = Z2Param::ENDING_BLOW_VOL_LOWER_TIME; } } } /* 802B4EB0-802B5204 2AF7F0 0354+00 1/1 0/0 0/0 .text startBattleBgm__8Z2SeqMgrFb */ -void Z2SeqMgr::startBattleBgm(bool i_fade) { +void Z2SeqMgr::startBattleBgm(bool isFadeIn) { if (!mFlags.mBattleBgmOff && Z2GetSceneMgr()->isSceneExist() && mBattleSeqState == 0 && (mFlags.mBattleDistIgnore || mBattleDistState <= 1)) { @@ -1886,24 +1980,28 @@ void Z2SeqMgr::startBattleBgm(bool i_fade) { if (Z2GetSceneMgr()->isInDarkness() || Z2GetSoundObjMgr()->isTwilightBattle()) { bgm_id = Z2BGM_BATTLE_TWILIGHT; } + u32 subBgmID = getSubBgmID(); if (subBgmID != bgm_id) { mBattleSeqState = 1; if (Z2GetSoundMgr()->startSound(bgm_id, &mSubBgmHandle, NULL)) { Z2GetSoundObjMgr()->setBattleInit(); mSubBgmStatus = 0xff; + s16 ivar2 = Z2GetLink()->getMoveSpeed() - 23; if (ivar2 < 0) { ivar2 = 0; } - if (ivar2 > struct_80450861) { - ivar2 = struct_80450861; + + if (ivar2 > Z2Param::BGM_CROSS_FADEIN_TIME) { + ivar2 = Z2Param::BGM_CROSS_FADEIN_TIME; } - u8 count_in, count_out; + + u8 fadeinTime, fadeoutTime; switch (bgm_id) { case Z2BGM_BATTLE_NORMAL: - count_in = struct_80450861 - ivar2; - count_out = struct_80450862 - ivar2 / 2; + fadeinTime = Z2Param::BGM_CROSS_FADEIN_TIME - ivar2; + fadeoutTime = Z2Param::BGM_CROSS_FADEOUT_TIME - ivar2 / 2; if (!mFlags.mBattleSearched) { setChildTrackVolume(&mSubBgmHandle, 2, 0.0f, 0, -1.0f, -1.0f); setChildTrackVolume(&mSubBgmHandle, 3, 0.0f, 0, -1.0f, -1.0f); @@ -1916,51 +2014,58 @@ void Z2SeqMgr::startBattleBgm(bool i_fade) { break; case Z2BGM_BATTLE_TWILIGHT: changeSubBgmStatus(Z2GetSoundObjMgr()->isTwilightBattle()); - count_in = 25 - ivar2 / 4; - count_out = 25 - ivar2 / 4; + fadeinTime = 25 - ivar2 / 4; + fadeoutTime = 25 - ivar2 / 4; break; } - if (i_fade) { - mSubBgmMaster.fadeInFromOut(count_in); + + if (isFadeIn) { + mSubBgmMaster.fadeInFromOut(fadeinTime); } else { mSubBgmMaster.forceIn(); } - mMainBgmMaster.fadeOut(count_out); + + mMainBgmMaster.fadeOut(fadeoutTime); } } } } /* 802B5204-802B545C 2AFB44 0258+00 3/3 1/1 0/0 .text stopBattleBgm__8Z2SeqMgrFUcUc */ -void Z2SeqMgr::stopBattleBgm(u8 param_0, u8 param_1) { +void Z2SeqMgr::stopBattleBgm(u8 subFadeoutTime, u8 mainFadeinTime) { if (mBattleSeqCount == 0) { s16 ivar6 = 0; if (Z2GetLink() != NULL) { ivar6 = Z2GetLink()->getMoveSpeed() - 23; } + if (ivar6 < 0) { ivar6 = 0; } - if (ivar6 > struct_80450861) { - ivar6 = struct_80450861; + + if (ivar6 > Z2Param::BGM_CROSS_FADEIN_TIME) { + ivar6 = Z2Param::BGM_CROSS_FADEIN_TIME; } + if (getSubBgmID() == Z2BGM_BATTLE_NORMAL) { - param_0 = struct_80450861 + ivar6; - param_1 = struct_80450862 + ivar6 / 2; - mSubBgmHandle->fadeOut(param_0); - mBattleSeqCount = param_0; + subFadeoutTime = Z2Param::BGM_CROSS_FADEIN_TIME + ivar6; + mainFadeinTime = Z2Param::BGM_CROSS_FADEOUT_TIME + ivar6 / 2; + mSubBgmHandle->fadeOut(subFadeoutTime); + mBattleSeqCount = subFadeoutTime; } else if (getSubBgmID() == Z2BGM_BATTLE_TWILIGHT) { if (mSubBgmStatus > 1) { - param_0 = struct_80450861 + ivar6 / 4; - param_1 = struct_80450861 + ivar6 / 4; + subFadeoutTime = Z2Param::BGM_CROSS_FADEIN_TIME + ivar6 / 4; + mainFadeinTime = Z2Param::BGM_CROSS_FADEIN_TIME + ivar6 / 4; } else { - param_0 = 25 + ivar6 / 4; - param_1 = 25 + ivar6 / 4; + subFadeoutTime = 25 + ivar6 / 4; + mainFadeinTime = 25 + ivar6 / 4; } - mSubBgmHandle->fadeOut(param_0); - mBattleSeqCount = param_0; + + mSubBgmHandle->fadeOut(subFadeoutTime); + mBattleSeqCount = subFadeoutTime; } - mMainBgmMaster.fadeIn(param_1); + + mMainBgmMaster.fadeIn(mainFadeinTime); mBattleDistState = 3; setBattleDistIgnore(false); mFlags.mBattleSearched = false; @@ -1974,6 +2079,7 @@ void Z2SeqMgr::fieldBgmStart() { Z2GetSoundMgr()->startSound(Z2BGM_FIELD_LINK_DAY, &mMainBgmHandle, NULL); changeBgmStatus(0); field_0xc4 = 0; + if (Z2GetLink()->isRiding()) { mFlags.mRiding = true; mRideCount = 0; @@ -2001,6 +2107,7 @@ void Z2SeqMgr::fieldRidingMute() { volume1 = 0.0f; volume2 = 1.0f; } + setChildTrackVolume(&mMainBgmHandle, 5, volume1, mRideCount, -1.0f, -1.0f); setChildTrackVolume(&mMainBgmHandle, 6, volume1, mRideCount, -1.0f, -1.0f); setChildTrackVolume(&mMainBgmHandle, 7, volume1, mRideCount, -1.0f, -1.0f); @@ -2034,8 +2141,10 @@ void Z2SeqMgr::onFieldBgmJumpEnd() { setChildTrackVolume(&mMainBgmHandle, 13, field_0xcc, 0, -1.0f, -1.0f); setChildTrackVolume(&mMainBgmHandle, 14, field_0xcc, 0, -1.0f, -1.0f); setChildTrackVolume(&mMainBgmHandle, 15, field_0xcc, 0, -1.0f, -1.0f); + Z2GetSoundMgr()->getSeqMgr()->calc(); Z2GetSoundMgr()->getSeqMgr()->mixOut(); + if (mRideCount != 0) { fieldRidingMute(); } @@ -2044,13 +2153,13 @@ void Z2SeqMgr::onFieldBgmJumpEnd() { /* 802B594C-802B5E80 2B028C 0534+00 2/1 0/0 0/0 .text fieldBgmFramework__8Z2SeqMgrFv */ void Z2SeqMgr::fieldBgmFramework() { if (Z2GetSceneMgr()->isSceneExist() && !Z2GetSceneMgr()->isInDarkness() - && (Z2GetSceneMgr()->getCurrentSceneNum() == 0x1e - || Z2GetSceneMgr()->getCurrentSceneNum() == 0x1f) + && (Z2GetSceneMgr()->getCurrentSceneNum() == Z2SCENE_HYRULE_FIELD || Z2GetSceneMgr()->getCurrentSceneNum() == Z2SCENE_CASTLE_TOWN_GATES) && mFlags.mFieldBgmPlay) { if (mRideCount != 0) { mRideCount--; } + if (getMainBgmID() == Z2BGM_FIELD_LINK_DAY) { field_0xc4 = Z2GetSoundStarter()->getPortData(&mMainBgmHandle, 10, -1); if (Z2GetStatusMgr()->isPaused()) { @@ -2063,10 +2172,12 @@ void Z2SeqMgr::fieldBgmFramework() { fieldRidingMute(); } } + if (field_0xc4 == 0 || field_0xc4 == 21 || field_0xc4 == 22 || field_0xc4 == 23 || field_0xc4 == 24) { return; } + if (Z2GetStatusMgr()->getDemoStatus() == 10) { switch (field_0xc4) { case 7: @@ -2115,8 +2226,7 @@ void Z2SeqMgr::fieldBgmFramework() { if (Z2GetLink()->getMovingTime() < 150) { switch (field_0xc4) { case 3: - if (mFlags.mRiding - && Z2GetSoundObjMgr()->getEnemyNumVeryFar() == 0) { + if (mFlags.mRiding && Z2GetSoundObjMgr()->getEnemyNumVeryFar() == 0) { changeBgmStatus(3); } break; @@ -2151,8 +2261,7 @@ void Z2SeqMgr::fieldBgmFramework() { } } } else { - if (field_0xc4 >= 7 && field_0xc4 <= 15 - && Z2GetStatusMgr()->getHour() >= 20) { + if (field_0xc4 >= 7 && field_0xc4 <= 15 && Z2GetStatusMgr()->getHour() >= 20) { mMainBgmHandle->stop(60); mMainBgmHandle.releaseSound(); } else { @@ -2193,6 +2302,7 @@ void Z2SeqMgr::fieldBgmFramework() { changeBgmStatus(8); field_0xc4 = 23; } + if (Z2GetLink()->isRiding()) { mFlags.mRiding = true; mRideCount = 0; @@ -2210,19 +2320,13 @@ void Z2SeqMgr::fieldBgmFramework() { } /* 802B5E80-802B5E84 2B07C0 0004+00 1/1 0/0 0/0 .text mbossBgmMuteProcess__8Z2SeqMgrFv */ -void Z2SeqMgr::mbossBgmMuteProcess() { - /* empty function */ -} +void Z2SeqMgr::mbossBgmMuteProcess() {} /* 802B5E84-802B5E88 2B07C4 0004+00 0/0 2/2 0/0 .text bgmSetSwordUsing__8Z2SeqMgrFl */ -void Z2SeqMgr::bgmSetSwordUsing(s32 param_0) { - /* empty function */ -} +void Z2SeqMgr::bgmSetSwordUsing(s32 param_0) {} /* 802B5E88-802B5E8C 2B07C8 0004+00 0/0 1/1 0/0 .text bgmNowBattle__8Z2SeqMgrFf */ -void Z2SeqMgr::bgmNowBattle(f32 param_0) { - /* empty function */ -} +void Z2SeqMgr::bgmNowBattle(f32 param_0) {} /* 802B5E8C-802B5ED4 2B07CC 0048+00 0/0 1/1 0/0 .text taktModeMute__8Z2SeqMgrFv */ void Z2SeqMgr::taktModeMute() { diff --git a/src/Z2AudioLib/Z2SoundHandles.cpp b/src/Z2AudioLib/Z2SoundHandles.cpp index 68804a6d01..d59433bb01 100644 --- a/src/Z2AudioLib/Z2SoundHandles.cpp +++ b/src/Z2AudioLib/Z2SoundHandles.cpp @@ -1,40 +1,38 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2SoundHandles -// - #include "Z2AudioLib/Z2SoundHandles.h" #include "JSystem/JAudio2/JAISoundInfo.h" Z2SoundHandles::Z2SoundHandles() { - mNumHandles = 0; + handleNum_ = 0; } Z2SoundHandles::~Z2SoundHandles() { deleteHandlesPool(); } -void Z2SoundHandles::initHandlesPool(u8 pNumHandles) { - mNumHandles = pNumHandles; +void Z2SoundHandles::initHandlesPool(u8 handleNum) { + handleNum_ = handleNum; } /* 802AB120-802AB200 2A5A60 00E0+00 1/1 1/1 0/0 .text deleteHandlesPool__14Z2SoundHandlesFv */ void Z2SoundHandles::deleteHandlesPool() { - JSULink<Z2SoundHandlePool>* link; - while (link = getFirst(), link != NULL) { - Z2SoundHandlePool* handle = link->getObject(); + JSULink<Z2SoundHandlePool>* i; + while (i = getFirst(), i != NULL) { + Z2SoundHandlePool* handle = i->getObject(); + JUT_ASSERT(48, handle->getSupervisor() == this); + remove(handle); delete handle; } - mNumHandles = 0; + + handleNum_ = 0; } -Z2SoundHandlePool* Z2SoundHandles::getHandleSoundID(JAISoundID pSoundId) { - JSULink<Z2SoundHandlePool>* link; - for (link = getFirst(); link != NULL; link = link->getNext()) { - Z2SoundHandlePool* handle = link->getObject(); +Z2SoundHandlePool* Z2SoundHandles::getHandleSoundID(JAISoundID soundID) { + JSULink<Z2SoundHandlePool>* i; + for (i = getFirst(); i != NULL; i = i->getNext()) { + Z2SoundHandlePool* handle = i->getObject(); if (handle->isSoundAttached()) { - if ((*handle)->getID() == pSoundId) { + if ((*handle)->getID() == soundID) { return handle; } } @@ -43,12 +41,12 @@ Z2SoundHandlePool* Z2SoundHandles::getHandleSoundID(JAISoundID pSoundId) { return NULL; } -Z2SoundHandlePool* Z2SoundHandles::getHandleUserData(u32 pUserData) { - JSULink<Z2SoundHandlePool>* link; - for (link = getFirst(); link != NULL; link = link->getNext()) { - Z2SoundHandlePool* handle = link->getObject(); +Z2SoundHandlePool* Z2SoundHandles::getHandleUserData(u32 userData) { + JSULink<Z2SoundHandlePool>* i; + for (i = getFirst(); i != NULL; i = i->getNext()) { + Z2SoundHandlePool* handle = i->getObject(); if (handle->isSoundAttached()) { - if ((*handle)->getUserData() == pUserData) { + if ((*handle)->getUserData() == userData) { return handle; } } @@ -60,21 +58,23 @@ Z2SoundHandlePool* Z2SoundHandles::getHandleUserData(u32 pUserData) { /* 802AB2D8-802AB3D0 2A5C18 00F8+00 0/0 3/3 0/0 .text getFreeHandle__14Z2SoundHandlesFv */ Z2SoundHandlePool* Z2SoundHandles::getFreeHandle() { - JSULink<Z2SoundHandlePool>* link; - for (link = getFirst(); link != NULL; link = link->getNext()) { - Z2SoundHandlePool* handle = link->getObject(); + JSULink<Z2SoundHandlePool>* i; + for (i = getFirst(); i != NULL; i = i->getNext()) { + Z2SoundHandlePool* handle = i->getObject(); if (!handle->isSoundAttached()) { return handle; } } - if (getNumHandles() < mNumHandles) - { + if (getNumHandles() < handleNum_) { Z2SoundHandlePool* handle = new Z2SoundHandlePool(); if (handle != NULL) { append(handle); + JUT_ASSERT(113, handle->getSupervisor() == this); return handle; } + + JUT_WARN_DEVICE(118, 1, "%s", "cannot Alloc Handle !!\n"); } return NULL; @@ -82,46 +82,52 @@ Z2SoundHandlePool* Z2SoundHandles::getFreeHandle() { /* 802AB3D0-802AB4A0 2A5D10 00D0+00 0/0 2/2 0/0 .text * getLowPrioSound__14Z2SoundHandlesF10JAISoundID */ -Z2SoundHandlePool* Z2SoundHandles::getLowPrioSound(JAISoundID pSoundId) { - JAISoundInfo* sound_info = JASGlobalInstance<JAISoundInfo>::getInstance(); - Z2SoundHandlePool* handle; - u32 low_prio = 0xffff; - Z2SoundHandlePool* low_prio_handle = NULL; - JSULink<Z2SoundHandlePool>* link; - for (link = getFirst(); link != NULL; link = link->getNext()) { - handle = link->getObject(); +Z2SoundHandlePool* Z2SoundHandles::getLowPrioSound(JAISoundID soundID) { + JAISoundInfo* soundInfo = JASGlobalInstance<JAISoundInfo>::getInstance(); + u32 low_prio = 0xFFFF; + Z2SoundHandlePool* rethandle = NULL; + + JSULink<Z2SoundHandlePool>* i; + for (i = getFirst(); i != NULL; i = i->getNext()) { + Z2SoundHandlePool* handle = i->getObject(); if (!handle->isSoundAttached()) { return handle; } - u32 prio = sound_info->getPriority(handle->getSound()->getID()); + + u32 prio = soundInfo->getPriority((*handle)->getID()); if (prio < low_prio) { low_prio = prio; - low_prio_handle = handle; + rethandle = handle; } } - if (sound_info->getPriority(pSoundId) >= low_prio) { - return low_prio_handle; + + #if DEBUG + if (rethandle != NULL) { + JUT_ASSERT(163, rethandle->getSupervisor() == this); + } + #endif + + if (soundInfo->getPriority(soundID) >= low_prio) { + return rethandle; } + return NULL; } -void Z2SoundHandles::stopAllSounds(u32 fadeout) { - JSULink<Z2SoundHandlePool>* link; - for (link = getFirst(); link != NULL; link = link->getNext()) { - JAISoundHandle* handle = link->getObject(); - //! @meme: explicit operator bool call required to match and be similar - //! to CHN_debug; could more concisely write handle->isSoundAttached - //! (for some reason cast-to-bool doesn't work?) - if (handle && handle->operator bool()) { - (*handle)->stop(fadeout); +void Z2SoundHandles::stopAllSounds(u32 fadeTime) { + JSULink<Z2SoundHandlePool>* i; + for (i = getFirst(); i != NULL; i = i->getNext()) { + JAISoundHandle* handle = i->getObject(); + if (handle && (*handle)) { + (*handle)->stop(fadeTime); } } } bool Z2SoundHandles::isActive() const { - JSULink<Z2SoundHandlePool>* link; - for (link = getFirst(); link != NULL; link = link->getNext()) { - if (link->getObject()->isSoundAttached()) { + JSULink<Z2SoundHandlePool>* i; + for (i = getFirst(); i != NULL; i = i->getNext()) { + if (i->getObject()->isSoundAttached()) { return true; } } @@ -131,12 +137,15 @@ bool Z2SoundHandles::isActive() const { /* 802AB538-802AB64C 2A5E78 0114+00 0/0 1/1 0/0 .text * setPos__14Z2SoundHandlesFRCQ29JGeometry8TVec3<f> */ -void Z2SoundHandles::setPos(JGeometry::TVec3<f32> const& param_0) { - JSULink<Z2SoundHandlePool>* link; - for (link = getFirst(); link != NULL; link = link->getNext()) { - Z2SoundHandlePool* handle = link->getObject(); +void Z2SoundHandles::setPos(const JGeometry::TVec3<f32>& pos) { + JSULink<Z2SoundHandlePool>* i; + for (i = getFirst(); i != NULL; i = i->getNext()) { + Z2SoundHandlePool* handle = i->getObject(); + JUT_ASSERT(209, handle); + JUT_ASSERT(210, handle->getSupervisor() == this); + if (handle->isSoundAttached()) { - handle->getSound()->setPos(param_0); + (*handle)->setPos(pos); } else { remove(handle); diff --git a/src/Z2AudioLib/Z2SoundInfo.cpp b/src/Z2AudioLib/Z2SoundInfo.cpp index 1dda9961a4..eba28a7d08 100644 --- a/src/Z2AudioLib/Z2SoundInfo.cpp +++ b/src/Z2AudioLib/Z2SoundInfo.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2SoundInfo -// - #include "Z2AudioLib/Z2SoundInfo.h" #include "JSystem/JAudio2/JAISeq.h" #include "JSystem/JAudio2/JAISe.h" @@ -11,7 +6,6 @@ #include "JSystem/JAudio2/JAUSoundTable.h" #include "JSystem/JUtility/JUTAssert.h" #include "Z2AudioLib/Z2Calc.h" -#include "dolphin/dvd.h" struct JAUStdSoundTableType { static const u32 STRM_CH_SHIFT; @@ -24,23 +18,24 @@ struct JAUStdSoundTableType { /* 802BB00C-802BB090 2B594C 0084+00 2/1 0/0 0/0 .text * getBgmSeqResourceID__11Z2SoundInfoCF10JAISoundID */ -u16 Z2SoundInfo::getBgmSeqResourceID(JAISoundID param_0) const { +u16 Z2SoundInfo::getBgmSeqResourceID(JAISoundID soundID) const { JUT_ASSERT(20, isValid()); - JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_0); - u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_0); + JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(soundID); + u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID); if (data != NULL) { switch ((typeID & 0xf0)) { case 0x60: - return data->mResourceId; + return (u16)data->mResourceId; } } + return 0xffff; } /* 802BB090-802BB0D8 2B59D0 0048+00 1/0 0/0 0/0 .text getSoundType__11Z2SoundInfoCF10JAISoundID */ -int Z2SoundInfo::getSoundType(JAISoundID param_0) const { - switch (param_0.mId.mBytes.b0) { +int Z2SoundInfo::getSoundType(JAISoundID soundID) const { + switch (soundID.id_.info.type.parts.sectionID) { case 0: return 0; case 1: @@ -48,178 +43,194 @@ int Z2SoundInfo::getSoundType(JAISoundID param_0) const { case 2: return 2; } + return -1; } /* 802BB0D8-802BB0E0 2B5A18 0008+00 1/0 0/0 0/0 .text getCategory__11Z2SoundInfoCF10JAISoundID */ -int Z2SoundInfo::getCategory(JAISoundID param_0) const { - return param_0.mId.mBytes.b1; +int Z2SoundInfo::getCategory(JAISoundID soundID) const { + return soundID.id_.info.type.parts.groupID; } /* 802BB0E0-802BB158 2B5A20 0078+00 1/0 0/0 0/0 .text getPriority__11Z2SoundInfoCF10JAISoundID */ -u32 Z2SoundInfo::getPriority(JAISoundID param_0) const { +u32 Z2SoundInfo::getPriority(JAISoundID soundID) const { JUT_ASSERT(63, isValid()); - JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_0); - u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_0); + JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(soundID); + u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID); if (data != NULL && (typeID & 0x40) != 0) { return data->mPriority; } + return 0; } /* 802BB158-802BB448 2B5A98 02F0+00 0/0 1/1 0/0 .text getAudibleSwFull__11Z2SoundInfoF10JAISoundID */ -JAUAudibleParam Z2SoundInfo::getAudibleSwFull(JAISoundID param_0) { - JAUAudibleParam local_28; +JAUAudibleParam Z2SoundInfo::getAudibleSwFull(JAISoundID soundID) { + JAUAudibleParam audibleParam; JUT_ASSERT(82, isValid()); int iVar1, uVar7; - switch (JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_0)) { + + u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID); + switch (typeID) { 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; + audibleParam.field_0x0.bytes.b0_0 = (u32)getSwBit(soundID) >> 8; + if ((getSwBit(soundID) & 1) != 0) { + audibleParam.field_0x0.bytes.b0_4 = 0; } else { - local_28.field_0x0.bytes.b0_4 = 1; + audibleParam.field_0x0.bytes.b0_4 = 1; } - if ((getSwBit(param_0) & 2) != 0) { - local_28.field_0x0.bytes.b0_5 = 0; + + if ((getSwBit(soundID) & 2) != 0) { + audibleParam.field_0x0.bytes.b0_5 = 0; } else { - local_28.field_0x0.bytes.b0_5 = 1; + audibleParam.field_0x0.bytes.b0_5 = 1; } - if ((getSwBit(param_0) & 4) != 0) { - local_28.field_0x0.bytes.b0_6 = 0; + + if ((getSwBit(soundID) & 4) != 0) { + audibleParam.field_0x0.bytes.b0_6 = 0; } else { - local_28.field_0x0.bytes.b0_6 = 1; + audibleParam.field_0x0.bytes.b0_6 = 1; } - if ((getSwBit(param_0) & 0x800000) != 0) { - local_28.field_0x0.bytes.b0_7 = 1; + + if ((getSwBit(soundID) & 0x800000) != 0) { + audibleParam.field_0x0.bytes.b0_7 = 1; } else { - local_28.field_0x0.bytes.b0_7 = 0; + audibleParam.field_0x0.bytes.b0_7 = 0; } - if ((getSwBit(param_0) & 0x1000) != 0) { - local_28.field_0x0.bytes.b1_0 = 0; + + if ((getSwBit(soundID) & 0x1000) != 0) { + audibleParam.field_0x0.bytes.b1_0 = 0; } else { - local_28.field_0x0.bytes.b1_0 = 1; + audibleParam.field_0x0.bytes.b1_0 = 1; } - if ((getSwBit(param_0) & 0x2000) != 0) { - local_28.field_0x0.bytes.b1_1 = 0; + + if ((getSwBit(soundID) & 0x2000) != 0) { + audibleParam.field_0x0.bytes.b1_1 = 0; } else { - local_28.field_0x0.bytes.b1_1 = 1; + audibleParam.field_0x0.bytes.b1_1 = 1; } uVar7 = 0; - if ((getSwBit(param_0) & 0x80000) != 0) { + if ((getSwBit(soundID) & 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; + iVar1 = (getSwBit(soundID) >> 16) & 0x7; + iVar1 += (getSwBit(soundID) >> 16) & 0x70; + iVar1 += (getSwBit(soundID) >> 16) & 0xf00; + audibleParam.field_0x0.bytes.b1_2_7 = uVar7; + audibleParam.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; + audibleParam.field_0x0.bytes.b0_0 = 0; + audibleParam.field_0x0.bytes.b0_4 = 1; + audibleParam.field_0x0.bytes.b0_5 = 1; + audibleParam.field_0x0.bytes.b0_6 = 1; + audibleParam.field_0x0.bytes.b0_7 = 0; + audibleParam.field_0x0.bytes.b1_0 = 1; + audibleParam.field_0x0.bytes.b1_1 = 1; + audibleParam.field_0x0.bytes.b1_2_7 = 0; + audibleParam.field_0x0.half.f1 = 0; break; } - return local_28; + + return audibleParam; } /* 802BB448-802BB6DC 2B5D88 0294+00 2/1 0/0 0/0 .text getAudibleSw__11Z2SoundInfoCF10JAISoundID */ -u16 Z2SoundInfo::getAudibleSw(JAISoundID param_0) const { - JAUAudibleParam local_28; +u16 Z2SoundInfo::getAudibleSw(JAISoundID soundID) const { + JAUAudibleParam audibleParam; JUT_ASSERT(184, isValid()); int iVar1, uVar7; - switch (JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_0)) { + + u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID); + switch (typeID) { 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; + audibleParam.field_0x0.bytes.b0_0 = (u32)getSwBit(soundID) >> 8; + if ((getSwBit(soundID) & 1) != 0) { + audibleParam.field_0x0.bytes.b0_4 = 0; } else { - local_28.field_0x0.bytes.b0_4 = 1; + audibleParam.field_0x0.bytes.b0_4 = 1; } - if ((getSwBit(param_0) & 2) != 0) { - local_28.field_0x0.bytes.b0_5 = 0; + + if ((getSwBit(soundID) & 2) != 0) { + audibleParam.field_0x0.bytes.b0_5 = 0; } else { - local_28.field_0x0.bytes.b0_5 = 1; + audibleParam.field_0x0.bytes.b0_5 = 1; } - if ((getSwBit(param_0) & 4) != 0) { - local_28.field_0x0.bytes.b0_6 = 0; + + if ((getSwBit(soundID) & 4) != 0) { + audibleParam.field_0x0.bytes.b0_6 = 0; } else { - local_28.field_0x0.bytes.b0_6 = 1; + audibleParam.field_0x0.bytes.b0_6 = 1; } - if ((getSwBit(param_0) & 0x800000) != 0) { - local_28.field_0x0.bytes.b0_7 = 1; + + if ((getSwBit(soundID) & 0x800000) != 0) { + audibleParam.field_0x0.bytes.b0_7 = 1; } else { - local_28.field_0x0.bytes.b0_7 = 0; + audibleParam.field_0x0.bytes.b0_7 = 0; } - if ((getSwBit(param_0) & 0x1000) != 0) { - local_28.field_0x0.bytes.b1_0 = 0; + + if ((getSwBit(soundID) & 0x1000) != 0) { + audibleParam.field_0x0.bytes.b1_0 = 0; } else { - local_28.field_0x0.bytes.b1_0 = 1; + audibleParam.field_0x0.bytes.b1_0 = 1; } - if ((getSwBit(param_0) & 0x2000) != 0) { - local_28.field_0x0.bytes.b1_1 = 0; + + if ((getSwBit(soundID) & 0x2000) != 0) { + audibleParam.field_0x0.bytes.b1_1 = 0; } else { - local_28.field_0x0.bytes.b1_1 = 1; + audibleParam.field_0x0.bytes.b1_1 = 1; } uVar7 = 0; - if ((getSwBit(param_0) & 0x80000) != 0) { + if ((getSwBit(soundID) & 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; + iVar1 = (getSwBit(soundID) >> 16) & 0x7; + iVar1 += (getSwBit(soundID) >> 16) & 0x70; + iVar1 += (getSwBit(soundID) >> 16) & 0xf00; + audibleParam.field_0x0.bytes.b1_2_7 = uVar7; + audibleParam.field_0x0.half.f1 = iVar1; break; default: - local_28.field_0x0.half.f0 = 0xffff; - local_28.field_0x0.half.f1 = 0xffff; + audibleParam.field_0x0.half.f0 = 0xffff; + audibleParam.field_0x0.half.f1 = 0xffff; break; } - return local_28.field_0x0.half.f0; + + return audibleParam.field_0x0.half.f0; } /* 802BB6DC-802BB8B4 2B601C 01D8+00 1/0 0/0 0/0 .text * getSeInfo__11Z2SoundInfoCF10JAISoundIDP5JAISe */ -void Z2SoundInfo::getSeInfo(JAISoundID param_1, JAISe* param_2) const { - getSoundInfo_(param_1, param_2); +void Z2SoundInfo::getSeInfo(JAISoundID soundID, JAISe* sePtr) const { + getSoundInfo_(soundID, sePtr); JUT_ASSERT(292, isValid()); - JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_1); - u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_1); + + JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(soundID); + u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID); if (data == NULL) { return; } + switch(typeID) { case 81: - param_2->getProperty().field_0x8 *= data->field_0x8; - u32 uStack_6c = (getSwBit(param_1) & 0xf0) >> 4; + sePtr->getProperty().field_0x8 *= data->field_0x8; + u32 uStack_6c = (getSwBit(soundID) & 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; + sePtr->getProperty().field_0x8 += Z2Calc::linearTransform(uStack_6c, 8.0f, 15.0f, 16.0f, 24.0f, true) / 48.0f * Z2Calc::getRandom_0_1(); } else { - f32 dVar18 = Z2Calc::getRandom_0_1(); - dVar18 = (uStack_6c / 48.0f) * dVar18; - param_2->getProperty().field_0x8 += dVar18; + sePtr->getProperty().field_0x8 += (uStack_6c / 48.0f) * Z2Calc::getRandom_0_1(); } - u32 uVar1 = (u32)getSwBit(param_1) >> 0x1c; + + u32 uVar1 = (u32)getSwBit(soundID) >> 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); + sePtr->getProperty().field_0x0 -= dVar18 < 0.0f ? 0.0f : (dVar18 > 1.0f ? 1.0f : dVar18); } break; } @@ -227,43 +238,46 @@ void Z2SoundInfo::getSeInfo(JAISoundID param_1, JAISe* param_2) const { /* 802BB8B4-802BB8E0 2B61F4 002C+00 1/0 0/0 0/0 .text * getSeqInfo__11Z2SoundInfoCF10JAISoundIDP6JAISeq */ -void Z2SoundInfo::getSeqInfo(JAISoundID param_0, JAISeq* param_1) const { - getSoundInfo_(param_0, param_1); +void Z2SoundInfo::getSeqInfo(JAISoundID soundID, JAISeq* seqPtr) const { + getSoundInfo_(soundID, seqPtr); } /* 80455A90-80455A94 004090 0004+00 1/1 0/0 0/0 .sdata2 STRM_CH_SHIFT__20JAUStdSoundTableType */ -u32 const JAUStdSoundTableType::STRM_CH_SHIFT = 2; +const u32 JAUStdSoundTableType::STRM_CH_SHIFT = 2; /* 802BB8E0-802BBA10 2B6220 0130+00 1/0 0/0 0/0 .text * getStreamInfo__11Z2SoundInfoCF10JAISoundIDP9JAIStream */ -void Z2SoundInfo::getStreamInfo(JAISoundID param_1, JAIStream* param_2) const { +void Z2SoundInfo::getStreamInfo(JAISoundID soundID, JAIStream* streamPtr) const { int numChild; JAUSoundTableItem* data; - getSoundInfo_(param_1, param_2); + getSoundInfo_(soundID, streamPtr); JUT_ASSERT(349, isValid()); - switch (JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_1) & 0xf0) { + + u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID); + switch (typeID & 0xf0) { case 0x70: u16 uVar1; s32 iVar4; - data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_1); + data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(soundID); JUT_ASSERT(356, data); + uVar1 = data->mResourceId; - numChild = param_2->getNumChild(); + numChild = streamPtr->getNumChild(); iVar4 = 0; for (; iVar4 < numChild && uVar1 != 0; uVar1 >>= JAUStdSoundTableType::STRM_CH_SHIFT, iVar4++) { u32 uVar2 = uVar1 & 3; if (uVar2 != 0) { - JAISoundChild* child = param_2->getChild(iVar4); + JAISoundChild* child = streamPtr->getChild(iVar4); if (child != NULL) { switch (uVar2) { case 1: - child->mMove.mParams.mPan = 0.5f; + child->mMove.params_.mPan = 0.5f; break; case 2: - child->mMove.mParams.mPan = 0.0f; + child->mMove.params_.mPan = 0.0f; break; case 3: - child->mMove.mParams.mPan = 1.0f; + child->mMove.params_.mPan = 1.0f; break; } } @@ -274,51 +288,54 @@ void Z2SoundInfo::getStreamInfo(JAISoundID param_1, JAIStream* param_2) const { /* 802BBA10-802BBA88 2B6350 0078+00 1/1 0/0 0/0 .text * getStreamFilePath__11Z2SoundInfoF10JAISoundID */ -const char* Z2SoundInfo::getStreamFilePath(JAISoundID param_1) { +const char* Z2SoundInfo::getStreamFilePath(JAISoundID soundID) { JUT_ASSERT(387, isValid()); JAUSoundTableItem* data; const void* resource; - switch (JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_1) & 0xf0) { + + switch (JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID) & 0xf0) { case 0x70: - data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_1); + data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(soundID); JUT_ASSERT(394, data); resource = JASGlobalInstance<JAUSoundTable>::getInstance()->getResource(); JUT_ASSERT(398, resource); return JAUStdSoundTableType::StringOffset::getString(resource, data->field_0x4); default: return NULL; - break; } } /* 802BBA88-802BBAC8 2B63C8 0040+00 2/1 0/0 0/0 .text * getStreamFileEntry__11Z2SoundInfoF10JAISoundID */ -s32 Z2SoundInfo::getStreamFileEntry(JAISoundID param_0) { - const char* path = getStreamFilePath(param_0); +s32 Z2SoundInfo::getStreamFileEntry(JAISoundID soundID) { + const char* path = getStreamFilePath(soundID); return !path ? -1 : DVDConvertPathToEntrynum(path); } /* 802BBAC8-802BBB48 2B6408 0080+00 3/3 4/4 0/0 .text getSwBit__11Z2SoundInfoCF10JAISoundID */ -int Z2SoundInfo::getSwBit(JAISoundID param_1) const { +int Z2SoundInfo::getSwBit(JAISoundID soundID) const { JUT_ASSERT(418, isValid()); - JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_1); - u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_1); + JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(soundID); + + u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID); if (data != NULL) { switch(typeID) { case 81: return data->field_0x4; } } - return 0xffffffff; + + return 0xFFFFFFFF; } /* 802BBB48-802BBBE0 2B6488 0098+00 3/3 0/0 0/0 .text * getSoundInfo___11Z2SoundInfoCF10JAISoundIDP8JAISound */ -void Z2SoundInfo::getSoundInfo_(JAISoundID param_1, JAISound* param_2) const { +void Z2SoundInfo::getSoundInfo_(JAISoundID soundID, JAISound* soundPtr) const { JUT_ASSERT(440, isValid()); - JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(param_1); - u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(param_1); + JAUSoundTableItem* data = JASGlobalInstance<JAUSoundTable>::getInstance()->getData(soundID); + + u8 typeID = JASGlobalInstance<JAUSoundTable>::getInstance()->getTypeID(soundID); if (data != NULL && (typeID & 0x40) != 0) { - param_2->getProperty().field_0x0 = (1.0f / 127.0f) * data->field_0x1; + soundPtr->getProperty().field_0x0 = (1.0f / 127.0f) * data->field_0x1; } } diff --git a/src/Z2AudioLib/Z2SoundMgr.cpp b/src/Z2AudioLib/Z2SoundMgr.cpp index 1a6fb14478..9833ed9985 100644 --- a/src/Z2AudioLib/Z2SoundMgr.cpp +++ b/src/Z2AudioLib/Z2SoundMgr.cpp @@ -1,7 +1,3 @@ -// -// Translation Unit: Z2SoundMgr -// - #include "Z2AudioLib/Z2SoundMgr.h" #include "Z2AudioLib/Z2Param.h" #include "Z2AudioLib/Z2SceneMgr.h" @@ -9,19 +5,17 @@ #include "Z2AudioLib/Z2SeqMgr.h" #include "Z2AudioLib/Z2SeMgr.h" #include "Z2AudioLib/Z2SoundInfo.h" +#include "Z2AudioLib/Z2AudioCS.h" #include "JSystem/JAudio2/JASCalc.h" #include "JSystem/JAudio2/JASDriverIF.h" #include "JSystem/JAudio2/JAUSectionHeap.h" - -void dComIfGs_staffroll_next_go(); +#include "d/d_com_inf_game.h" /* 802A9BC8-802A9E80 2A4508 02B8+00 1/0 1/1 0/0 .text seqCallback__FP8JASTrackUs */ -u16 seqCallback(JASTrack* i_track, u16 param_1) { - JSUList<JAISe>* list; - switch (param_1) { +u16 seqCallback(JASTrack* track, u16 command) { + switch (command) { case 0x1000: - Z2GetSeqMgr()->setChildTrackVolume(Z2GetSeqMgr()->getSubBgmHandle(), - 3, 1.0f, 0, -1.0f, -1.0f); + Z2GetSeqMgr()->setChildTrackVolume(Z2GetSeqMgr()->getSubBgmHandle(), 3, 1.0f, 0, -1.0f, -1.0f); Z2GetSoundMgr()->getSeqMgr()->calc(); Z2GetSoundMgr()->getSeqMgr()->mixOut(); break; @@ -41,28 +35,32 @@ u16 seqCallback(JASTrack* i_track, u16 param_1) { Z2GetSeqMgr()->onVariantBgmJumpEnd(false); break; case 0x1006: - list = Z2GetSoundMgr()->getSeMgr()->getCategory(5)->getSeList(); - for (JSULink<JAISe>* link = list->getFirst(); link != NULL; link = link->getNext()) { - switch (link->getObject()->getID()) { - case Z2SE_GRO_MV_SINGING: - case Z2SE_GRR_MV_SINGING: - case Z2SE_CLERK_MV_SONG_HO: - case Z2SE_WAD_A_MV_DANCE: - case Z2SE_MCN_A_V_DANCE: - case Z2SE_WCN_A_V_DANCE: - link->getObject()->getTrack()->writePort(14, 1); - break; + for (JSULink<JAISe>* link = Z2GetSoundMgr()->getSeMgr()->getCategory(5)->getSeList()->getFirst(); link != NULL; link = link->getNext()) { + JAISe* se = link->getObject(); + switch (se->getID()) { + case Z2SE_GRO_MV_SINGING: + case Z2SE_GRR_MV_SINGING: + case Z2SE_CLERK_MV_SONG_HO: + case Z2SE_WAD_A_MV_DANCE: + case Z2SE_MCN_A_V_DANCE: + case Z2SE_WCN_A_V_DANCE: + JASTrack* track = se->getTrack(); + JUT_ASSERT(94, track); + track->writePort(14, 1); + break; } } break; case 0x1015: - list = Z2GetSoundMgr()->getSeMgr()->getCategory(5)->getSeList(); - for (JSULink<JAISe>* link = list->getFirst(); link != NULL; link = link->getNext()) { - switch (link->getObject()->getID()) { - case Z2SE_MCN_A_V_DANCE: - case Z2SE_WCN_A_V_DANCE: - link->getObject()->getTrack()->writePort(14, 1); - break; + for (JSULink<JAISe>* link = Z2GetSoundMgr()->getSeMgr()->getCategory(5)->getSeList()->getFirst(); link != NULL; link = link->getNext()) { + JAISe* se = link->getObject(); + switch (se->getID()) { + case Z2SE_MCN_A_V_DANCE: + case Z2SE_WCN_A_V_DANCE: + JASTrack* track = se->getTrack(); + JUT_ASSERT(113, track); + track->writePort(14, 1); + break; } } break; @@ -76,123 +74,144 @@ u16 seqCallback(JASTrack* i_track, u16 param_1) { dComIfGs_staffroll_next_go(); break; } - if (param_1 >= 0x1009 && param_1 <= 0x1013) { + + if (command >= 0x1009 && command <= 0x1013) { JAISoundID sound_id = Z2SE_CSL_TOWN_BAND_VOCAL; - if (param_1 <= 0x100a) { + if (command <= 0x100a) { sound_id = Z2SE_CSL_TOWN_BAND_GT_1; - } else if (param_1 <= 0x100c) { + } else if (command <= 0x100c) { sound_id = Z2SE_CSL_TOWN_BAND_GT_2; - } else if (param_1 <= 0x100f) { + } else if (command <= 0x100f) { sound_id = Z2SE_CSL_TOWN_BAND_GT_3; - } else if (param_1 <= 0x1011) { + } else if (command <= 0x1011) { sound_id = Z2SE_CSL_TOWN_BAND_FLUTE; } - list = Z2GetSoundMgr()->getSeMgr()->getCategory(6)->getSeList(); - for (JSULink<JAISe>* link = list->getFirst(); link != NULL; link = link->getNext()) { - if (link->getObject()->getID() == sound_id) { - link->getObject()->getTrack()->writePort(14, param_1); + + for (JSULink<JAISe>* link = Z2GetSoundMgr()->getSeMgr()->getCategory(6)->getSeList()->getFirst(); link != NULL; link = link->getNext()) { + JAISe* se = link->getObject(); + if (se->getID() == sound_id) { + JASTrack* track = se->getTrack(); + JUT_ASSERT(159, track); + track->writePort(14, command); break; } } } + return 0; } /* 802A9E80-802A9EE8 2A47C0 0068+00 0/0 1/1 0/0 .text __ct__10Z2SoundMgrFv */ Z2SoundMgr::Z2SoundMgr() : - JASGlobalInstance<Z2SoundMgr>(this), - mSeMgr(true), - mSeqMgr(true), - mStreamMgr(true) + JASGlobalInstance<Z2SoundMgr>(true), + seMgr_(true), + seqMgr_(true), + streamMgr_(true) { - mSoundID.setAnonymous(); + soundID_.setAnonymous(); } /* 802A9EE8-802AA1B0 2A4828 02C8+00 1/0 0/0 0/0 .text * startSound__10Z2SoundMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */ -bool Z2SoundMgr::startSound(JAISoundID i_soundID, JAISoundHandle* i_handle, - JGeometry::TVec3<f32> const* i_pos) { - switch (Z2GetSoundInfo()->getSoundType(i_soundID)) { - case 0: - if (Z2GetSoundInfo()->getSwBit(i_soundID) & 8) { +bool Z2SoundMgr::startSound(JAISoundID soundID, JAISoundHandle* handle, const JGeometry::TVec3<f32>* posPtr) { + int soundType = Z2GetSoundInfo()->getSoundType(soundID); + switch (soundType) { + case 0: { + if (Z2GetSoundInfo()->getSwBit(soundID) & 8) { + OS_REPORT("[Z2SoundMgr::startSound] se seq Mute! id = %08x\n", *(u32*)&soundID); Z2GetSeqMgr()->bgmAllMute(3, 0.3f); - mSoundID = i_soundID; + soundID_ = soundID; + } + + #if PLATFORM_WII || PLATFORM_SHIELD + if ((u32)soundID == 12) { + Z2AudioCS::start(0, 0); + } else if ((u32)soundID == 13) { + Z2AudioCS::start(0x66, 0); } - return mSeMgr.startSound(i_soundID, i_handle, i_pos); + #endif + + bool result = seMgr_.startSound(soundID, handle, posPtr); + return result; + } case 1: - if (i_soundID == Z2BGM_LUTERA_DEMO) { + if (soundID == Z2BGM_LUTERA_DEMO) { Z2GetSeqMgr()->bgmStart(Z2BGM_LUTERA2, 0, 0); Z2GetSeqMgr()->unMuteSceneBgm(0); Z2GetSeqMgr()->changeBgmStatus(0); - return mSeMgr.startSound(Z2SE_NO_SOUND, i_handle, i_pos); + return seMgr_.startSound(Z2SE_NO_SOUND, handle, posPtr); } else { bool loaded = false; - JAUSectionHeap* heap = JASGlobalInstance<JAUSectionHeap>::getInstance(); - JAUSeqDataBlocks const& loaded_blocks = - heap->getSectionHeapData().seqDataBlocks.getLoadedBlocks(); - JSULink<JAUSeqDataBlock>* link; - for (link = loaded_blocks.getFirst(); link != NULL; link = link->getNext()) { - if (link->getObject()->field_0x10 == i_soundID) { + JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance(); + JUT_ASSERT(228, sectionHeap); + + for (JSULink<JAUSeqDataBlock>* link = sectionHeap->getSectionHeapData().seqDataBlocks.getLoadedBlocks().getFirst(); link != NULL; link = link->getNext()) { + if (link->getObject()->field_0x10 == soundID) { loaded = true; break; } } + if (!loaded) { - heap->releaseIdleDynamicSeqDataBlock(); - if (!heap->loadDynamicSeq(i_soundID, true)) { - JAUSeqDataBlocks const& free_blocks = - heap->getSectionHeapData().seqDataBlocks.getFreeBlocks(); - for (link = free_blocks.getFirst(); link != NULL; link = link->getNext()) { + u32 sp2C = sectionHeap->releaseIdleDynamicSeqDataBlock(); + if (!sectionHeap->loadDynamicSeq(soundID, true)) { + OS_REPORT("[Z2SoundMgr::startSound] FAILED!!! LOAD SEQ_DATA id: %08x\n", *(u32*)&soundID); + + for (JSULink<JAUSeqDataBlock>* link = sectionHeap->getSectionHeapData().seqDataBlocks.getFreeBlocks().getFirst(); link != NULL; link = link->getNext()) { + OS_REPORT(" freeSeqBlock: %d\n", link->getObject()->field_0x14.size); } } } - return mSeqMgr.startSound(i_soundID, i_handle, i_pos); + + return seqMgr_.startSound(soundID, handle, posPtr); } case 2: - if (i_soundID == 0x2000001 || i_soundID == 0x200004d) { - mStreamMgr.stop(180); - return mSeMgr.startSound(Z2SE_NO_SOUND, i_handle, i_pos); + if (soundID == 0x2000001 || soundID == 0x200004d) { + streamMgr_.stop(180); + return seMgr_.startSound(Z2SE_NO_SOUND, handle, posPtr); } - if (i_soundID == 0x2000005) { - mSeMgr.getCategory(9)->pause(false); - mSeMgr.getCategory(9)->getParams()->moveVolume(1.0f, 45); + if (soundID == 0x2000005) { + seMgr_.getCategory(9)->pause(false); + seMgr_.getCategory(9)->getParams()->moveVolume(1.0f, 45); } - return mStreamMgr.startSound(i_soundID, i_handle, i_pos); + return streamMgr_.startSound(soundID, handle, posPtr); default: char error[32]; - sprintf(error, "Unknown Sound-Type id :%08x\n", (u32)i_soundID); - return false; + sprintf(error, "Unknown Sound-Type id :%08x\n", *(u32*)&soundID); + JUT_WARN(277, "%s", error); } -} + return false; +} /* 802AA1B0-802AA270 2A4AF0 00C0+00 2/2 0/0 0/0 .text calc__10Z2SoundMgrFv */ void Z2SoundMgr::calc() { - mSeMgr.calc(); - if (!mSoundID.isAnonymous() && !isPlayingSoundID(mSoundID)) { + seMgr_.calc(); + if (!soundID_.isAnonymous() && !isPlayingSoundID(soundID_)) { if (Z2GetSceneMgr()->isSceneExist()) { Z2GetSeqMgr()->bgmAllUnMute(3); } - mSoundID.setAnonymous(); + soundID_.setAnonymous(); } - mSeqMgr.calc(); - mStreamMgr.calc(); + seqMgr_.calc(); + streamMgr_.calc(); } /* 802AA270-802AA33C 2A4BB0 00CC+00 1/1 2/2 0/0 .text setIIR__10Z2SoundMgrFP8JAISoundPCs */ -void Z2SoundMgr::setIIR(JAISound* param_0, s16 const* param_1) { - if (param_0 != NULL) { - JASTrack* track = param_0->getTrack(); +void Z2SoundMgr::setIIR(JAISound* sound, const s16* iir) { + if (sound != NULL) { + JASTrack* track = sound->getTrack(); + JUT_ASSERT(340, track); for (u32 i = 0; i < 4; i++) { JASTrack* child = track->getChild(i); if (child != NULL && child->getStatus() == 1) { - child->setIIR(param_1); + child->setIIR(iir); for (u32 j = 0; j < 4; j++) { JASTrack* child2 = child->getChild(j); if (child2 != NULL && child2->getStatus() == 1) { - child2->setIIR(param_1); + child2->setIIR(iir); } } } @@ -206,9 +225,10 @@ static s16 const cResetFilterTable[8] = { }; /* 802AA33C-802AA430 2A4C7C 00F4+00 1/1 0/0 0/0 .text setFilterOff__10Z2SoundMgrFP8JAISound */ -void Z2SoundMgr::setFilterOff(JAISound* param_0) { - if (param_0 != NULL) { - JASTrack* track = param_0->getTrack(); +void Z2SoundMgr::setFilterOff(JAISound* sound) { + if (sound != NULL) { + JASTrack* track = sound->getTrack(); + JUT_ASSERT(403, track); for (u32 i = 0; i < 4; i++) { JASTrack* child = track->getChild(i); if (child != NULL && child->getStatus() == 1) { @@ -229,16 +249,17 @@ void Z2SoundMgr::setFilterOff(JAISound* param_0) { /* 802AA430-802AA528 2A4D70 00F8+00 0/0 1/1 0/0 .text resetFilterAll__10Z2SoundMgrFv */ void Z2SoundMgr::resetFilterAll() { int i = 1; - if (struct_80451342 != 0) { + if (Z2Param::SYSTEM_SE_USE_DARK_SE_SETTING) { i = 0; } + for (; i < 9; i++) { - JAISeCategoryMgr* category = mSeMgr.getCategory(i); + JAISeCategoryMgr* category = seMgr_.getCategory(i); int se_count = category->getMaxActiveSe(); if (se_count > 0) { for (JSULink<JAISe>* link = category->getSeList()->getFirst(); link != NULL && se_count > 0 && !link->getObject()->isFarAway(); - link = link->getNext(), se_count--) + link = link->getNext(), --se_count) { setFilterOff(link->getObject()); } @@ -255,34 +276,36 @@ void Z2SoundMgr::resetFilterAll() { /* 802AA528-802AA67C 2A4E68 0154+00 2/2 0/0 0/0 .text mixOut__10Z2SoundMgrFv */ void Z2SoundMgr::mixOut() { - if (struct_80451340 != 0 && Z2GetSceneMgr()->isInDarkness()) { + if (Z2Param::DARK_SE_FILTER_ON && Z2GetSceneMgr()->isInDarkness()) { int i = 1; - if (struct_80451342 != 0) { + if (Z2Param::SYSTEM_SE_USE_DARK_SE_SETTING) { i = 0; } + for (; i < 9; i++) { - JAISeCategoryMgr* category = mSeMgr.getCategory(i); + JAISeCategoryMgr* category = seMgr_.getCategory(i); int se_count = category->getMaxActiveSe(); if (se_count > 0) { for (JSULink<JAISe>* link = category->getSeList()->getFirst(); link != NULL && se_count > 0 && !link->getObject()->isFarAway(); - link = link->getNext(), se_count--) + link = link->getNext(), --se_count) { - setIIR(link->getObject(), JASCalc::CUTOFF_TO_IIR_TABLE[struct_80451341]); + setIIR(link->getObject(), JASCalc::CUTOFF_TO_IIR_TABLE[Z2Param::DARK_SE_LOW_PASS_FILTER_SETTING]); } } else { for (JSULink<JAISe>* link = category->getSeList()->getFirst(); link != NULL && !link->getObject()->isFarAway(); link = link->getNext()) { - setIIR(link->getObject(), JASCalc::CUTOFF_TO_IIR_TABLE[struct_80451341]); + setIIR(link->getObject(), JASCalc::CUTOFF_TO_IIR_TABLE[Z2Param::DARK_SE_LOW_PASS_FILTER_SETTING]); } } } } - mSeMgr.mixOut(); - mSeqMgr.mixOut(); - mStreamMgr.mixOut(); + + seMgr_.mixOut(); + seqMgr_.mixOut(); + streamMgr_.mixOut(); } /* 802AA67C-802AA6B0 2A4FBC 0034+00 0/0 1/1 0/0 .text framework__10Z2SoundMgrFv */ @@ -293,45 +316,44 @@ void Z2SoundMgr::framework() { /* 802AA6B0-802AA7DC 2A4FF0 012C+00 0/0 1/1 0/0 .text pauseAllGameSound__10Z2SoundMgrFb */ -void Z2SoundMgr::pauseAllGameSound(bool i_pause) { - mSeMgr.getCategory(0)->pause(i_pause); - mSeMgr.getCategory(1)->pause(i_pause); - mSeMgr.getCategory(2)->pause(i_pause); - mSeMgr.getCategory(3)->pause(i_pause); - mSeMgr.getCategory(4)->pause(i_pause); - mSeMgr.getCategory(5)->pause(i_pause); - mSeMgr.getCategory(6)->pause(i_pause); - mSeMgr.getCategory(7)->pause(i_pause); - mSeMgr.getCategory(8)->pause(i_pause); - mSeMgr.getCategory(9)->pause(i_pause); - mSeqMgr.pause(i_pause); - mStreamMgr.pause(i_pause); - if (i_pause) { +void Z2SoundMgr::pauseAllGameSound(bool paused) { + seMgr_.getCategory(0)->pause(paused); + seMgr_.getCategory(1)->pause(paused); + seMgr_.getCategory(2)->pause(paused); + seMgr_.getCategory(3)->pause(paused); + seMgr_.getCategory(4)->pause(paused); + seMgr_.getCategory(5)->pause(paused); + seMgr_.getCategory(6)->pause(paused); + seMgr_.getCategory(7)->pause(paused); + seMgr_.getCategory(8)->pause(paused); + seMgr_.getCategory(9)->pause(paused); + seqMgr_.pause(paused); + streamMgr_.pause(paused); + + if (paused) { Z2GetSeMgr()->seMoveVolumeAll(0.0f, 10); - mSeqMgr.getParams()->moveVolume(0.0f, 10); - mStreamMgr.getParams()->moveVolume(0.0f, 10); - } - else { + seqMgr_.getParams()->moveVolume(0.0f, 10); + streamMgr_.getParams()->moveVolume(0.0f, 10); + } else { Z2GetSeMgr()->seMoveVolumeAll(1.0f, 10); - mSeqMgr.getParams()->moveVolume(1.0f, 10); - mStreamMgr.getParams()->moveVolume(1.0f, 10); + seqMgr_.getParams()->moveVolume(1.0f, 10); + streamMgr_.getParams()->moveVolume(1.0f, 10); } } - /* 802AA7DC-802AA84C 2A511C 0070+00 0/0 1/1 0/0 .text stopSoundID__10Z2SoundMgrF10JAISoundID */ -void Z2SoundMgr::stopSoundID(JAISoundID i_soundID) { - mSeMgr.stopSoundID(i_soundID); - mSeqMgr.stopSoundID(i_soundID); - mStreamMgr.stopSoundID(i_soundID); +void Z2SoundMgr::stopSoundID(JAISoundID soundID) { + seMgr_.stopSoundID(soundID); + seqMgr_.stopSoundID(soundID); + streamMgr_.stopSoundID(soundID); } /* 802AA84C-802AA8C8 2A518C 007C+00 0/0 1/1 0/0 .text stopSync__10Z2SoundMgrFv */ void Z2SoundMgr::stopSync() { stop(); - while (mSeMgr.getNumActiveSe() > 0 || mSeqMgr.getNumActiveSeqs() > 0) { + while (seMgr_.getNumActiveSe() > 0 || seqMgr_.getNumActiveSeqs() > 0) { calc(); - if (mSeMgr.getNumActiveSe() == 0 && mSeqMgr.getNumActiveSeqs() == 0) { + if (seMgr_.getNumActiveSe() == 0 && seqMgr_.getNumActiveSeqs() == 0) { break; } mixOut(); @@ -341,28 +363,29 @@ void Z2SoundMgr::stopSync() { /* 802AA8C8-802AA908 2A5208 0040+00 1/1 0/0 0/0 .text stop__10Z2SoundMgrFv */ void Z2SoundMgr::stop() { - mSeMgr.stop(); - mSeqMgr.stop(); - mStreamMgr.stop(); + seMgr_.stop(); + seqMgr_.stop(); + streamMgr_.stop(); } /* 802AA908-802AA9E8 2A5248 00E0+00 0/0 1/1 0/0 .text initParams__10Z2SoundMgrFv */ void Z2SoundMgr::initParams() { - mSeMgr.initParams(); - mSeqMgr.getParams()->init(); - mStreamMgr.getParams()->init(); -} + JUT_ASSERT(613, ! seMgr_.isActive()); + JUT_ASSERT(614, ! seqMgr_.isActive()); + seMgr_.initParams(); + seqMgr_.getParams()->init(); + streamMgr_.getParams()->init(); +} /* 802AA9E8-802AAAC4 2A5328 00DC+00 0/0 1/1 0/0 .text * multiVolumeSoundID__10Z2SoundMgrF10JAISoundIDf */ -void Z2SoundMgr::multiVolumeSoundID(JAISoundID i_soundID, f32 i_multi) { - if (!i_soundID.isAnonymous() && Z2GetSoundInfo()->getSoundType(i_soundID) == 0) { - JSUList<JAISe>* list = - mSeMgr.getCategory(Z2GetSoundInfo()->getCategory(i_soundID))->getSeList(); - for (JSULink<JAISe>* link = list->getFirst(); link != NULL; link = link->getNext()) { - if (link->getObject()->getID() == i_soundID) { - link->getObject()->getAuxiliary().mParams.mVolume *= i_multi; +void Z2SoundMgr::multiVolumeSoundID(JAISoundID soundID, f32 volume) { + if (!soundID.isAnonymous() && Z2GetSoundInfo()->getSoundType(soundID) == 0) { + int category = Z2GetSoundInfo()->getCategory(soundID); + for (JSULink<JAISe>* link = seMgr_.getCategory(category)->getSeList()->getFirst(); link != NULL; link = link->getNext()) { + if (link->getObject()->getID() == soundID) { + link->getObject()->getAuxiliary().params_.mVolume *= volume; } } } @@ -370,18 +393,19 @@ void Z2SoundMgr::multiVolumeSoundID(JAISoundID i_soundID, f32 i_multi) { /* 802AAAC4-802AAB94 2A5404 00D0+00 1/1 0/0 0/0 .text isPlayingSoundID__10Z2SoundMgrF10JAISoundID */ -bool Z2SoundMgr::isPlayingSoundID(JAISoundID i_soundID) { - if (i_soundID.isAnonymous()) { +bool Z2SoundMgr::isPlayingSoundID(JAISoundID soundID) { + if (soundID.isAnonymous()) { return false; } - if (Z2GetSoundInfo()->getSoundType(i_soundID) == 0) { - JSUList<JAISe>* list = - mSeMgr.getCategory(Z2GetSoundInfo()->getCategory(i_soundID))->getSeList(); - for (JSULink<JAISe>* link = list->getFirst(); link != NULL; link = link->getNext()) { - if (link->getObject()->getID() == i_soundID) { + + if (Z2GetSoundInfo()->getSoundType(soundID) == 0) { + int category = Z2GetSoundInfo()->getCategory(soundID); + for (JSULink<JAISe>* link = seMgr_.getCategory(category)->getSeList()->getFirst(); link != NULL; link = link->getNext()) { + if (link->getObject()->getID() == soundID) { return true; } } } + return false; } diff --git a/src/Z2AudioLib/Z2SoundObjMgr.cpp b/src/Z2AudioLib/Z2SoundObjMgr.cpp index 7bd01335d2..6b3d29964b 100644 --- a/src/Z2AudioLib/Z2SoundObjMgr.cpp +++ b/src/Z2AudioLib/Z2SoundObjMgr.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2SoundObjMgr -// - #include "Z2AudioLib/Z2SoundObjMgr.h" #include "Z2AudioLib/Z2Creature.h" #include "Z2AudioLib/Z2SeqMgr.h" @@ -11,9 +6,9 @@ #include "Z2AudioLib/Z2LinkMgr.h" /* 802BF920-802BF980 2BA260 0060+00 0/0 1/1 0/0 .text __ct__13Z2SoundObjMgrFv */ -Z2SoundObjMgr::Z2SoundObjMgr() : JASGlobalInstance<Z2SoundObjMgr>(this) { - mGhostEnemyState = 0; - mTwilightBattle = 0; +Z2SoundObjMgr::Z2SoundObjMgr() : JASGlobalInstance<Z2SoundObjMgr>(true) { + ghostEnemyState_ = 0; + twilightBattle_ = 0; setBattleInit(); setForceBattleArea(false, 700, 1100, 1500); } @@ -21,10 +16,10 @@ Z2SoundObjMgr::Z2SoundObjMgr() : JASGlobalInstance<Z2SoundObjMgr>(this) { /* 802BF980-802BF994 2BA2C0 0014+00 1/1 3/3 3/3 .text setForceBattleArea__13Z2SoundObjMgrFbUsUsUs */ void Z2SoundObjMgr::setForceBattleArea(bool forceBattle, u16 param_1, u16 param_2, u16 param_3) { - mForceBattle = forceBattle; - mEnemyArea.field_0x2 = param_1; - mEnemyArea.field_0x4 = param_2; - mEnemyArea.field_0x6 = param_3; + forceBattle_ = forceBattle; + enemyArea_.field_0x2 = param_1; + enemyArea_.field_0x4 = param_2; + enemyArea_.field_0x6 = param_3; } /* 80455B80-80455B84 004180 0004+00 1/1 0/0 0/0 .sdata2 sAreaDefault */ @@ -45,13 +40,13 @@ static Z2EnemyArea const sAreaSmall = {true, 300, 700, 1000}; /* 80455BA8-80455BAC 0041A8 0004+00 1/1 0/0 0/0 .sdata2 sAreaSmallFloating */ static Z2EnemyArea const sAreaSmallFloating = {false, 500, 800, 1200}; -struct EnemyInfo { +struct Z2EnemyInfo { char mName[8]; Z2EnemyArea mEnemyArea; }; /* 803CAD70-803CB170 027E90 0400+00 3/3 0/0 0/0 .data mEnemyInfo */ -static EnemyInfo mEnemyInfo[64] = { +static Z2EnemyInfo mEnemyInfo[64] = { {"Dummy", sAreaDefault}, {"E_s1", {true, 700, 1200, 2000}}, {"E_yk", sAreaSmallFloating}, @@ -120,72 +115,80 @@ static EnemyInfo mEnemyInfo[64] = { /* 802BF994-802BFFEC 2BA2D4 0658+00 1/0 1/1 0/0 .text searchEnemy__13Z2SoundObjMgrFv */ void Z2SoundObjMgr::searchEnemy() { - mTwilightBattle = 0; - Z2CreatureLink* link = Z2GetLink(); - if (link == 0) { + twilightBattle_ = 0; + + if (!Z2GetLink()) { Z2GetSeqMgr()->stopBattleBgm(1, 1); return; } bool bVar7 = false; bool local_96 = false; - bool iVar8 = false; + + bool isHolyForestBgm = false; if (Z2GetSeqMgr()->getMainBgmID() == Z2BGM_HOLY_FOREST) { - iVar8 = true; + isHolyForestBgm = true; } - u8 iVar16 = 0; + + u8 subBgmType = 0; if (Z2GetSeqMgr()->getSubBgmID() == Z2BGM_HORSE_BATTLE) { - iVar16 = 1; + subBgmType = 1; } else if (Z2GetSeqMgr()->getSubBgmID() == Z2BGM_FACE_OFF_BATTLE2) { - iVar16 = 2; + subBgmType = 2; } + field_0x14 = 0; - mEnemyNumNear = 0; + enemuNumNear_ = 0; field_0x16 = 0; - mEnemyNumVeryFar = 0; + enemuNumVeryFar_ = 0; field_0x1a = false; field_0x18 = 0; - f32 dVar18 = Z2Calc::getParamByExp( + + f32 linkDistScale = Z2Calc::getParamByExp( Z2GetLink()->getMoveSpeed(), 0.0f, 100.0f, 0.3f, 1.0f, 2.5f, - Z2Calc::CURVE_SIGN_1); - f32 dVar19 = 5000.0f; + Z2Calc::CURVE_POSITIVE); + f32 veryFarDist = 5000.0f; - for (JSULink<Z2CreatureEnemy>* local_8c = getFirst(); local_8c != NULL; local_8c = local_8c->getNext()) { - Z2CreatureEnemy* this_00 = local_8c->getObject(); - if (this_00 == NULL) { + for (JSULink<Z2CreatureEnemy>* i = getFirst(); i != NULL; i = i->getNext()) { + Z2CreatureEnemy* enemy = i->getObject(); + if (enemy == NULL) { + JUT_WARN_DEVICE(100, 1, "%s", "[Z2SoundObjMgr::searchEnemy] remain remove enemy\n"); continue; } - if (this_00->field_0xa1 < 1) { + + if (enemy->field_0xa1 < 1) { continue; } - bool bVar6 = false; - u8 enemyId = this_00->mEnemyID; + + bool isGhostEnemy = false; + + u8 enemyId = enemy->mEnemyID; switch (enemyId) { case Z2_ENEMY_SW: - if (Z2GetSceneMgr()->getCurrentSceneNum() == 0x1c) + if (Z2GetSceneMgr()->getCurrentSceneNum() == Z2SCENE_GERUDO_DESERT) continue; break; case Z2_ENEMY_CR: - if (Z2GetSceneMgr()->getCurrentSceneNum() == 0x1e) + if (Z2GetSceneMgr()->getCurrentSceneNum() == Z2SCENE_HYRULE_FIELD) continue; break; case Z2_ENEMY_NZ: case Z2_ENEMY_PO: case Z2_ENEMY_HP: - bVar6 = true; + isGhostEnemy = true; break; case Z2_ENEMY_RDB: - if (iVar16 == 0) + if (subBgmType == 0) continue; break; case Z2_ENEMY_WB: case Z2_ENEMY_RD: - if (iVar16 != 0) + if (subBgmType != 0) continue; #if VERSION == VERSION_GCN_JPN } @@ -208,77 +211,86 @@ void Z2SoundObjMgr::searchEnemy() { #endif if (!Z2GetLink()->isRiding()) break; - if (Z2GetLink()->getMoveSpeed() <= 0x26) + if (Z2GetLink()->getMoveSpeed() <= 38) break; continue; } - Vec* iVar10 = this_00->getCurrentPos(); - if (iVar10 != NULL) { - Vec* iVar14 = Z2GetLink()->getCurrentPos(); - if (iVar14 != NULL) { - Z2EnemyArea local_88 = mEnemyInfo[enemyId].mEnemyArea; - if (mForceBattle) { - local_88 = mEnemyArea; + + Vec* enemyPos = enemy->getCurrentPos(); + if (enemyPos != NULL) { + Vec* linkPos = Z2GetLink()->getCurrentPos(); + if (linkPos != NULL) { + Z2EnemyArea enemyArea = mEnemyInfo[enemyId].mEnemyArea; + if (forceBattle_) { + enemyArea = enemyArea_; } - f32 fVar2 = 2.0f; - if (local_88.field_0x0 == true) { - fVar2 = 4.0f; + + f32 y_scale = 2.0f; + if (enemyArea.field_0x0 == true) { + y_scale = 4.0f; } - Vec local_80 = {0.0f, 0.0f, 0.0f}; - VECSubtract(iVar10, iVar14, &local_80); - local_80.y *= fVar2; - f32 dVar20 = VECMag(&local_80); - if (dVar20 < local_88.field_0x6 * dVar18) { - if (bVar6) { + + Vec enemy_linkVec = {0.0f, 0.0f, 0.0f}; + VECSubtract(enemyPos, linkPos, &enemy_linkVec); + enemy_linkVec.y *= y_scale; + + f32 enemyDist = VECMag(&enemy_linkVec); + if (enemyDist < enemyArea.field_0x6 * linkDistScale) { + if (isGhostEnemy) { field_0x1a++; - if (dVar20 < local_88.field_0x4 * dVar18) { - mGhostEnemyState |= 1; - if (mGhostEnemyState >= 0x10) { - mEnemyNumNear++; - if (dVar20 < local_88.field_0x2 * dVar18) { + if (enemyDist < enemyArea.field_0x4 * linkDistScale) { + ghostEnemyState_ |= (u8)1; + if (ghostEnemyState_ >= 16) { + enemuNumNear_++; + if (enemyDist < enemyArea.field_0x2 * linkDistScale) { field_0x14++; } } } - if (mGhostEnemyState >= 0x11) { + + if (ghostEnemyState_ >= 17) { field_0x16++; - if (this_00->mLinkSearch) { + if (enemy->mLinkSearch) { local_96 = true; } } } else { field_0x16++; if (enemyId != 0 && enemyId < 9) { - if (mTwilightBattle == 0) { - mTwilightBattle = 1; + if (twilightBattle_ == 0) { + twilightBattle_ = 1; } - if (enemyId == 0x1 || enemyId == 0x5) { - mTwilightBattle = 2; + + if (enemyId == Z2_ENEMY_S1 || enemyId == Z2_ENEMY_YC) { + twilightBattle_ = 2; } - if (enemyId == 0x8) { - mTwilightBattle = 2; + + if (enemyId == Z2_ENEMY_YMB) { + twilightBattle_ = 2; } else { - Z2GetSeqMgr()->changeSubBgmStatus(mTwilightBattle); + Z2GetSeqMgr()->changeSubBgmStatus(twilightBattle_); } } - if (enemyId != 0x2c && this_00->mLinkSearch) { + + if (enemyId != Z2_ENEMY_GB && enemy->mLinkSearch) { local_96 = true; } - if (dVar20 < local_88.field_0x4 * dVar18) - { - mEnemyNumNear++; - if (dVar20 < local_88.field_0x2 * dVar18) - { + + if (enemyDist < enemyArea.field_0x4 * linkDistScale) { + enemuNumNear_++; + if (enemyDist < enemyArea.field_0x2 * linkDistScale) { field_0x14++; } } } } - if (dVar20 < dVar19 * dVar18) { - mEnemyNumVeryFar++; + + if (enemyDist < veryFarDist * linkDistScale) { + enemuNumVeryFar_++; } - if (this_00->field_0xa3 != 0) { + + if (enemy->field_0xa3 != 0) { bVar7 = true; field_0x18++; } @@ -286,108 +298,108 @@ void Z2SoundObjMgr::searchEnemy() { } } - if (mGhostEnemyState == 0x11) { + if (ghostEnemyState_ == 17) { if (field_0x1a >= field_0x16) { Z2GetSeqMgr()->setBattleGhostMute(false); } else { Z2GetSeqMgr()->setBattleGhostMute(true); } - } else if (mGhostEnemyState < 0x20 && field_0x1a == 0x0) { + } else if (ghostEnemyState_ < 32 && field_0x1a == 0) { setGhostEnemyState(0); } - if (iVar16 == 1) { - if (field_0x14 != 0x0) { + + if (subBgmType == 1) { + if (field_0x14 != 0) { Z2GetSeqMgr()->changeSubBgmStatus(1); } else { Z2GetSeqMgr()->changeSubBgmStatus(0); } - } else if (iVar16 == 2) { - if (mEnemyNumNear != 0x0) { + } else if (subBgmType == 2) { + if (enemuNumNear_ != 0) { Z2GetSeqMgr()->changeSubBgmStatus(1); } else { Z2GetSeqMgr()->changeSubBgmStatus(0); } - } else if (iVar8) { - if (field_0x16 != 0x0) { + } else if (isHolyForestBgm) { + if (field_0x16 != 0) { Z2GetSeqMgr()->changeBgmStatus(1); } else { Z2GetSeqMgr()->changeBgmStatus(0); } } else if (!bVar7) { Z2GetSeqMgr()->setBattleSearched(local_96); - if (field_0x14 != 0x0) { + + if (field_0x14 != 0) { Z2GetSeqMgr()->setBattleDistState(0); + } else if (enemuNumNear_ != 0) { + Z2GetSeqMgr()->setBattleDistState(1); + } else if (field_0x16 != 0) { + Z2GetSeqMgr()->setBattleDistState(2); } else { - if (mEnemyNumNear != 0x0) { - Z2GetSeqMgr()->setBattleDistState(1); - } else { - if (field_0x16 != 0x0) { - Z2GetSeqMgr()->setBattleDistState(2); - } else { - Z2GetSeqMgr()->setBattleDistState(3); - } - } + Z2GetSeqMgr()->setBattleDistState(3); } } } -void Z2SoundObjMgr::setGhostEnemyState(u8 p1) { - if (p1 == 0x20) { +void Z2SoundObjMgr::setGhostEnemyState(u8 state) { + if (state == 32) { if (field_0x1a >= field_0x16) { - JASGlobalInstance<Z2SeqMgr>::getInstance()->setBattleGhostMute(true); + Z2GetSeqMgr()->setBattleGhostMute(true); } } else { if (field_0x1a == false) { - mGhostEnemyState = 0; + ghostEnemyState_ = 0; return; } } - mGhostEnemyState = p1 + (mGhostEnemyState & 1); + ghostEnemyState_ = state + (ghostEnemyState_ & 1); } /* 802C0074-802C0100 2BA9B4 008C+00 0/0 1/1 0/0 .text * getEnemyID__13Z2SoundObjMgrFPCcP26JSULink<15Z2CreatureEnemy> */ -u8 Z2SoundObjMgr::getEnemyID(char const* param_0, JSULink<Z2CreatureEnemy>* param_1) { - if (param_0 != NULL) { - for (u8 uVar2 = 0; uVar2 < ARRAY_SIZEU(mEnemyInfo); uVar2++) { - if (strcmp(param_0, mEnemyInfo[(u32)uVar2].mName) == 0) { - append(param_1); - return uVar2; +u8 Z2SoundObjMgr::getEnemyID(const char* enemyName, JSULink<Z2CreatureEnemy>* enemyLink) { + if (enemyName != NULL) { + for (u8 i = 0; i < ARRAY_SIZEU(mEnemyInfo); i++) { + if (strcmp(enemyName, mEnemyInfo[(u32)i].mName) == 0) { + append(enemyLink); + return i; } } } + return Z2_ENEMY_NULL; } /* 802C0100-802C0120 2BAA40 0020+00 1/1 1/1 0/0 .text setBattleInit__13Z2SoundObjMgrFv */ void Z2SoundObjMgr::setBattleInit() { field_0x14 = 0; - mEnemyNumNear = 0; + enemuNumNear_ = 0; field_0x16 = 0; - mEnemyNumVeryFar = 0; + enemuNumVeryFar_ = 0; field_0x18 = 0; field_0x1a = false; } /* 802C0120-802C013C 2BAA60 001C+00 0/0 1/1 0/0 .text checkBattleFinish__13Z2SoundObjMgrFv */ bool Z2SoundObjMgr::checkBattleFinish() { - return mEnemyNumVeryFar - field_0x18 <= 0; + if (enemuNumVeryFar_ - field_0x18 > 0) { + return false; + } else { + return true; + } } /* 802C013C-802C0190 2BAA7C 0054+00 0/0 1/1 0/0 .text deleteEnemyAll__13Z2SoundObjMgrFv */ void Z2SoundObjMgr::deleteEnemyAll() { - JSULink<Z2CreatureEnemy>* link; + JSULink<Z2CreatureEnemy>* i; - // not moving the link pointer forward looks like a bug, but deleteObject() actually unlinks the - // enemy from its owning list - while (link = this->getFirst(), link != NULL) { - Z2CreatureEnemy* enemy = link->getObject(); + // not moving the pointer forward looks like a bug, but deleteObject() actually unlinks the enemy from its owning list + while (i = getFirst(), i != NULL) { + Z2CreatureEnemy* enemy = i->getObject(); if (enemy == NULL) { - // setWarningMessage_f((JUTAssertion *)0x1,(ulong)"Z2SoundObjMgr.cpp",(char - // *)0x16f,(int)&*fill*, - // "[Z2SoundObjMgr::searchEnemy] remain remove enemy\n",in_r8); + JUT_WARN_DEVICE(367, 1, "%s", "[Z2SoundObjMgr::searchEnemy] remain remove enemy\n"); } else { enemy->deleteObject(); } @@ -396,20 +408,22 @@ void Z2SoundObjMgr::deleteEnemyAll() { /* 802C0190-802C01E4 2BAAD0 0054+00 0/0 2/2 0/0 .text * removeEnemy__13Z2SoundObjMgrFP26JSULink<15Z2CreatureEnemy> */ -bool Z2SoundObjMgr::removeEnemy(JSULink<Z2CreatureEnemy>* param_0) { - if (param_0 == NULL) { +bool Z2SoundObjMgr::removeEnemy(JSULink<Z2CreatureEnemy>* enemyLink) { + if (enemyLink == NULL) { return false; } - Z2CreatureEnemy* enemy = param_0->getObject(); + Z2CreatureEnemy* enemy = enemyLink->getObject(); if (enemy->field_0xa3 != 0 && field_0x18 != 0) { field_0x18--; } - return remove(param_0); + + bool result = remove(enemyLink); + return result; } /* 802C01E4-802C01EC 2BAB24 0008+00 0/0 4/4 0/0 .text isTwilightBattle__13Z2SoundObjMgrFv */ u8 Z2SoundObjMgr::isTwilightBattle() { - return mTwilightBattle; + return twilightBattle_; } diff --git a/src/Z2AudioLib/Z2SoundObject.cpp b/src/Z2AudioLib/Z2SoundObject.cpp index e4422c37e5..308ef9e78e 100644 --- a/src/Z2AudioLib/Z2SoundObject.cpp +++ b/src/Z2AudioLib/Z2SoundObject.cpp @@ -1,61 +1,71 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2SoundObject -// - #include "Z2AudioLib/Z2SoundObject.h" +#include "Z2AudioLib/Z2SoundObjMgr.h" #include "Z2AudioLib/Z2Calc.h" #include "Z2AudioLib/Z2SeMgr.h" #include "Z2AudioLib/Z2SoundInfo.h" #include "Z2AudioLib/Z2SoundMgr.h" #include "Z2AudioLib/Z2SoundStarter.h" +#include "Z2AudioLib/Z2SceneMgr.h" #include "Z2AudioLib/Z2Audience.h" #include "JSystem/JAudio2/JAUSoundAnimator.h" -Z2SoundObjBase::Z2SoundObjBase() { - //! @note initializer list doesn't work since fields were initialized out of - //! structure layout order, indicating original code didn't use initializer list. - mSoundPos = NULL; - mIsInitialized = false; - mSoundStarter = JASGlobalInstance<Z2SoundStarter>::getInstance(); // sInstance +#if PLATFORM_WII || PLATFORM_SHIELD +#include "Z2AudioLib/Z2AudioCS.h" +#endif + +Z2SoundObjBase::Z2SoundObjBase() +#if VERSION == VERSION_SHIELD_DEBUG +: JSULink<Z2SoundObjBase>(this) +#endif +{ + pos_ = NULL; + alive_ = false; + soundStarter_ = Z2GetSoundStarter(); field_0x1c = 0; - field_0x1e = 0; + reverb_ = 0; } Z2SoundObjBase::~Z2SoundObjBase() { deleteObject(); } -void Z2SoundObjBase::init(Vec* pSoundPos, u8 pNumHandles) { - initHandlesPool(pNumHandles); - mSoundPos = (JGeometry::TVec3<f32>*)pSoundPos; - mIsInitialized = true; +void Z2SoundObjBase::init(Vec* posPtr, u8 handleNum) { + #if VERSION == VERSION_SHIELD_DEBUG + Z2GetSoundObjMgr()->getAllList()->append(this); + #endif + + initHandlesPool(handleNum); + pos_ = (JGeometry::TVec3<f32>*)posPtr; + alive_ = true; } /* 802BDFF8-802BE038 2B8938 0040+00 1/1 8/8 61/61 .text deleteObject__14Z2SoundObjBaseFv */ void Z2SoundObjBase::deleteObject() { + #if VERSION == VERSION_SHIELD_DEBUG + Z2GetSoundObjMgr()->getAllList()->remove(this); + #endif + dispose(); deleteHandlesPool(); } -void Z2SoundObjBase::framework(u32 p1, s8 reverb) { - if (mIsInitialized) { - field_0x1c = p1; - field_0x1e = reverb; - setPos(*mSoundPos); +void Z2SoundObjBase::framework(u32 param_0, s8 reverb) { + if (alive_) { + field_0x1c = param_0; + reverb_ = reverb; + setPos(*pos_); } } /* 802BE070-802BE104 2B89B0 0094+00 5/0 3/0 0/0 .text dispose__14Z2SoundObjBaseFv */ void Z2SoundObjBase::dispose() { JAISoundHandle* handle; - JSULink<Z2SoundHandlePool>* link; - for (link = getFirst(); link != NULL; link = link->getNext()) { - handle = link->getObject(); - if (handle != NULL && (bool)*handle) { - u32 swBit = JASGlobalInstance<Z2SoundInfo>::sInstance->getSwBit((*handle)->getID()); - if ((swBit & 0x8000) != 0) { + JSULink<Z2SoundHandlePool>* i; + for (i = getFirst(); i != NULL; i = i->getNext()) { + handle = i->getObject(); + if (handle != NULL && *handle) { + if ((Z2GetSoundInfo()->getSwBit((*handle)->getID()) & 0x8000) != 0) { handle->releaseSound(); } else { (*handle)->stop(); @@ -63,84 +73,122 @@ void Z2SoundObjBase::dispose() { } } - mIsInitialized = false; + alive_ = false; } /* 802BE104-802BE144 2B8A44 0040+00 5/0 3/0 0/0 .text * stopOK__14Z2SoundObjBaseFR17Z2SoundHandlePool */ -bool Z2SoundObjBase::stopOK(Z2SoundHandlePool& pSoundHandlePool) { - return !(JASGlobalInstance<Z2SoundInfo>::sInstance-> - getSwBit(pSoundHandlePool->getID()) & 0x8000); +bool Z2SoundObjBase::stopOK(Z2SoundHandlePool& handlePool) { + if ((Z2GetSoundInfo()->getSwBit(handlePool->getID()) & 0x8000) != 0) { + return false; + } else { + return true; + } } /* 802BE144-802BE2D4 2B8A84 0190+00 5/3 3/1 0/0 .text * startSound__14Z2SoundObjBaseF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2SoundObjBase::startSound(JAISoundID pSoundId, u32 param_1, s8 param_2) { - if (!mIsInitialized) { +Z2SoundHandlePool* Z2SoundObjBase::startSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + if (!alive_) { return NULL; } - if (JASGlobalInstance<Z2SeMgr>::getInstance()->isSoundCulling(pSoundId)) { + + if (Z2GetSeMgr()->isSoundCulling(soundID)) { return NULL; } - if (param_1 == 0) { - param_1 = (u32)field_0x1c; + + if (mapinfo == 0) { + mapinfo = (u32)field_0x1c; } - if (param_2 < 0) { - param_2 = field_0x1e; + + if (reverb < 0) { + reverb = reverb_; } - f32 local_0 = (f32)param_2 / 127.0f; - Z2SoundHandlePool* handle = getHandleSoundID(pSoundId); + + f32 fxMix = (f32)reverb / 127.0f; + + Z2SoundHandlePool* handle = getHandleSoundID(soundID); if (handle != NULL) { - if ((JASGlobalInstance<Z2SoundInfo>::getInstance()->getSwBit(pSoundId) & 0x4000) != 0) { + if ((Z2GetSoundInfo()->getSwBit(soundID) & 0x4000) != 0) { handle = NULL; } else { return NULL; } } + if (handle == NULL) { handle = getFreeHandle(); } + if (handle == NULL) { - handle = getLowPrioSound(pSoundId); + handle = getLowPrioSound(soundID); } + if (handle != NULL) { - mSoundStarter->startSound(pSoundId, handle, mSoundPos, param_1, local_0, + soundStarter_->startSound(soundID, handle, pos_, mapinfo, fxMix, 1.0f, 1.0f, -1.0f, -1.0f, 0); } + return handle; } /* 802BE2D4-802BE4A4 2B8C14 01D0+00 4/2 3/0 0/0 .text * startLevelSound__14Z2SoundObjBaseF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2SoundObjBase::startLevelSound(JAISoundID pSoundId, u32 param_1, s8 param_2) { - if (!mIsInitialized) { +Z2SoundHandlePool* Z2SoundObjBase::startLevelSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + if (!alive_) { return NULL; } - if (param_1 == 0) { - param_1 = (u32)field_0x1c; + + if (mapinfo == 0) { + mapinfo = (u32)field_0x1c; } - if (param_2 < 0) { - param_2 = field_0x1e; + + if (reverb < 0) { + reverb = reverb_; } - f32 local_0 = (f32)param_2 / 127.0f; - Z2SoundHandlePool* handle = getHandleSoundID(pSoundId); + + f32 fxMix = (f32)reverb / 127.0f; + + Z2SoundHandlePool* handle = getHandleSoundID(soundID); if (handle != NULL) { - handle->getSound()->updateLifeTime(1); - mSoundStarter->setPortData(handle, 6, (u16)param_1, -1); - handle->getSound()->getAuxiliary().moveFxMix(local_0, 0); + JUT_ASSERT_MSG(218, *handle, "handle exist, but (*handle) is not exist!!\n"); + (*handle)->updateLifeTime(1); + soundStarter_->setPortData(handle, 6, (u16)mapinfo, -1); + (*handle)->getAuxiliary().moveFxMix(fxMix, 0); } else { - if (JASGlobalInstance<Z2SeMgr>::getInstance()->isSoundCulling(pSoundId)) { + if (Z2GetSeMgr()->isSoundCulling(soundID)) { return NULL; } + handle = getFreeHandle(); if (handle == NULL) { - handle = getLowPrioSound(pSoundId); + handle = getLowPrioSound(soundID); } + if (handle != NULL) { - mSoundStarter->startSound(pSoundId, handle, mSoundPos, param_1, local_0, + soundStarter_->startSound(soundID, handle, pos_, mapinfo, fxMix, 1.0f, 1.0f, -1.0f, -1.0f, 0); - if (handle != NULL && handle->getSound() != NULL) { - handle->getSound()->setLifeTime(1, false); + if (handle != NULL && (*handle) != NULL) { + (*handle)->setLifeTime(1, false); + + #if PLATFORM_WII || PLATFORM_SHIELD + if (Z2GetSceneMgr()->isSceneExist()) { + switch (soundID) { + case Z2SE_BOOM_POWER_RESUME: + Z2AudioCS::start(0x12, 0); + break; + case Z2SE_BOOM_TORNADO: + Z2AudioCS::start(0x13, 0); + break; + case Z2SE_AL_SPINNER_RAIL: + Z2AudioCS::start(0x3C, 0); + break; + case Z2SE_WOLFATTACK_WIND_RUSH: + Z2AudioCS::start(0x58, 0); + break; + } + } + #endif } } } @@ -149,31 +197,35 @@ Z2SoundHandlePool* Z2SoundObjBase::startLevelSound(JAISoundID pSoundId, u32 para /* 802BE4A4-802BE5A0 2B8DE4 00FC+00 0/0 5/5 21/21 .text * startCollisionSE__14Z2SoundObjBaseFUlUlP14Z2SoundObjBase */ -Z2SoundHandlePool* Z2SoundObjBase::startCollisionSE(u32 pId, u32 pUserData, Z2SoundObjBase* pOther) { - if (pOther != NULL) { - return pOther->startCollisionSE(pId, pUserData, NULL); - } - if (53 < pUserData) { - pUserData = 0; - } - for (JSULink<JAISe>* link = - Z2GetSoundMgr()->getSeMgr()->getCategory(4)->getSeList()->getFirst(); - link != NULL; link = link->getNext()) { - if (pId == link->getObject()->getID() && pUserData == link->getObject()->getUserData()) { - link->getObject()->stop(); +Z2SoundHandlePool* Z2SoundObjBase::startCollisionSE(u32 hitID, u32 mapinfo, Z2SoundObjBase* other) { + if (other != NULL) { + return other->startCollisionSE(hitID, mapinfo, NULL); + } + + if (53 < mapinfo) { + JUT_WARN_DEVICE(297, 1, "%s", "mapinfo > 53\n"); + OS_REPORT("startCollisionSE Invalid MAPINFO:%d hitID:%08x\n", mapinfo, hitID); + mapinfo = 0; + } + + for (JSULink<JAISe>* i = Z2GetSoundMgr()->getSeMgr()->getCategory(4)->getSeList()->getFirst(); i != NULL; i = i->getNext()) { + JAISe* se = i->getObject(); + if (hitID == se->getID() && mapinfo == se->getUserData()) { + se->stop(); } } - Z2SoundHandlePool* handle = Z2SoundObjBase::startSound(JAISoundID(pId), pUserData, -1); - if (handle != NULL && handle->getSound() != NULL) { - handle->getSound()->setUserData(pUserData); - if (30 <= pUserData && pUserData <= 52) { - Z2Audible* audible = (Z2Audible*)handle->getSound()->getAudible(); + + Z2SoundHandlePool* handle = Z2SoundObjBase::startSound(JAISoundID(hitID), mapinfo, -1); + if (handle != NULL && (*handle) != NULL) { + (*handle)->setUserData(mapinfo); + if (30 <= mapinfo && mapinfo <= 52) { + Z2Audible* audible = (Z2Audible*)(*handle)->getAudible(); if (audible != NULL) { - JAUAudibleParam* param = audible->getAudibleParam(); - param->field_0x0.bytes.b1_2_7 = 8; + audible->getAudibleParam()->field_0x0.bytes.b1_2_7 = 8; } } } + return handle; } @@ -187,106 +239,107 @@ Z2DopplerSoundObjBase::Z2DopplerSoundObjBase() : Z2SoundObjBase() { Z2DopplerSoundObjBase::~Z2DopplerSoundObjBase() {} /* 802BE65C-802BE6B8 2B8F9C 005C+00 1/0 0/0 0/0 .text init__21Z2DopplerSoundObjBaseFP3VecUc */ -void Z2DopplerSoundObjBase::init(Vec* param_0, u8 param_1) { - Z2SoundObjBase::init(param_0, param_1); - if (mSoundPos != NULL) { - // field_0x20 = *mSoundPos; - JGeometry::setTVec3f(&mSoundPos->x, &field_0x20.x); - // field_0x2c = *mSoundPos; - JGeometry::setTVec3f(&mSoundPos->x, &field_0x2c.x); +void Z2DopplerSoundObjBase::init(Vec* posPtr, u8 handleNum) { + Z2SoundObjBase::init(posPtr, handleNum); + if (pos_ != NULL) { + field_0x20 = *pos_; + field_0x2c = *pos_; } } /* 802BE6B8-802BE714 2B8FF8 005C+00 2/0 0/0 0/0 .text framework__21Z2DopplerSoundObjBaseFUlSc */ -void Z2DopplerSoundObjBase::framework(u32 param_0, s8 param_1) { - Z2SoundObjBase::framework(param_0, param_1); - if (mSoundPos != NULL) { - // field_0x20 = field_0x2c; - JGeometry::setTVec3f(&field_0x2c.x, &field_0x20.x); - // field_0x2c = *mSoundPos; - JGeometry::setTVec3f(&mSoundPos->x, &field_0x2c.x); +void Z2DopplerSoundObjBase::framework(u32 param_0, s8 reverb) { + Z2SoundObjBase::framework(param_0, reverb); + if (pos_ != NULL) { + field_0x20 = field_0x2c; + field_0x2c = *pos_; } } /* 802BE714-802BE7AC 2B9054 0098+00 2/0 0/0 0/0 .text * startSound__21Z2DopplerSoundObjBaseF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2DopplerSoundObjBase::startSound(JAISoundID pSoundId, u32 param_1, s8 param_2) { - JGeometry::TVec3<f32>* pos = mSoundPos; - mSoundPos = NULL; - Z2SoundHandlePool* handle = Z2SoundObjBase::startSound(pSoundId, param_1, param_2); - if (pos != NULL && handle != NULL && handle->getSound() != NULL) { - if (handle->getSound()->acceptsNewAudible()) { - handle->getSound()->newAudible(*pos, &field_0x20, 0, NULL); +Z2SoundHandlePool* Z2DopplerSoundObjBase::startSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + JGeometry::TVec3<f32>* pos = pos_; + pos_ = NULL; + + Z2SoundHandlePool* handle = Z2SoundObjBase::startSound(soundID, mapinfo, reverb); + if (pos != NULL && handle != NULL && (*handle) != NULL) { + if ((*handle)->acceptsNewAudible()) { + (*handle)->newAudible(*pos, &field_0x20, 0, NULL); } } - mSoundPos = pos; + + pos_ = pos; return handle; } /* 802BE7AC-802BE844 2B90EC 0098+00 2/0 0/0 0/0 .text * startLevelSound__21Z2DopplerSoundObjBaseF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2DopplerSoundObjBase::startLevelSound(JAISoundID pSoundId, - u32 param_1, s8 param_2) { - JGeometry::TVec3<f32>* pos = mSoundPos; - mSoundPos = NULL; - Z2SoundHandlePool* handle = Z2SoundObjBase::startLevelSound(pSoundId, param_1, param_2); - if (pos != NULL && handle != NULL && handle->getSound() != NULL) { - if (handle->getSound()->acceptsNewAudible()) { - handle->getSound()->newAudible(*pos, &field_0x20, 0, NULL); +Z2SoundHandlePool* Z2DopplerSoundObjBase::startLevelSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + JGeometry::TVec3<f32>* pos = pos_; + pos_ = NULL; + + Z2SoundHandlePool* handle = Z2SoundObjBase::startLevelSound(soundID, mapinfo, reverb); + if (pos != NULL && handle != NULL && (*handle) != NULL) { + if ((*handle)->acceptsNewAudible()) { + (*handle)->newAudible(*pos, &field_0x20, 0, NULL); } } - mSoundPos = pos; + + pos_ = pos; return handle; } /* 802BE844-802BE880 2B9184 003C+00 0/0 8/8 65/65 .text __ct__16Z2SoundObjSimpleFv */ Z2SoundObjSimple::Z2SoundObjSimple() : Z2SoundObjBase() {} -void Z2SoundObjSimple::init(Vec* pSoundPos, u8 pNumHandles) { - Z2SoundObjBase::init(pSoundPos, pNumHandles); +void Z2SoundObjSimple::init(Vec* posPtr, u8 handleNum) { + Z2SoundObjBase::init(posPtr, handleNum); } /* 802BE8A0-802BE9B0 2B91E0 0110+00 1/0 0/0 0/0 .text * startSound__16Z2SoundObjSimpleF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2SoundObjSimple::startSound(JAISoundID pSoundId, u32 param_1, s8 param_2) { - Z2SoundHandlePool* handle = Z2SoundObjBase::startSound(pSoundId, param_1, param_2); - if (pSoundId == 0x200c7 && handle != NULL && handle->getSound() != NULL) { - f32 local_0 = Z2Calc::getParamByExp((f32)param_1, 0.0f, 127.0f, 0.2f, 0.4f, 1.0f, - Z2Calc::CURVE_SIGN_1); - f32 local_1 = Z2Calc::getParamByExp((f32)param_1, 0.0f, 127.0f, 0.2f, 0.6f, 1.2f, - Z2Calc::CURVE_SIGN_1); - handle->getSound()->getAuxiliary().movePitch(local_1, 0); - handle->getSound()->getAuxiliary().moveVolume(local_0, 0); +Z2SoundHandlePool* Z2SoundObjSimple::startSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + Z2SoundHandlePool* handle = Z2SoundObjBase::startSound(soundID, mapinfo, reverb); + + if (soundID == Z2SE_AL_UKI_POKOPOKO && handle != NULL && (*handle) != NULL) { + f32 volume = Z2Calc::getParamByExp((f32)mapinfo, 0.0f, 127.0f, 0.2f, 0.4f, 1.0f, Z2Calc::CURVE_POSITIVE); + f32 pitch = Z2Calc::getParamByExp((f32)mapinfo, 0.0f, 127.0f, 0.2f, 0.6f, 1.2f, Z2Calc::CURVE_POSITIVE); + (*handle)->getAuxiliary().movePitch(pitch, 0); + (*handle)->getAuxiliary().moveVolume(volume, 0); } + return handle; } /* 802BE9B0-802BEB38 2B92F0 0188+00 1/0 0/0 0/0 .text * startLevelSound__16Z2SoundObjSimpleF10JAISoundIDUlSc */ -Z2SoundHandlePool* Z2SoundObjSimple::startLevelSound(JAISoundID pSoundId, u32 param_1, s8 param_2) { - Z2SoundHandlePool* handle = Z2SoundObjBase::startLevelSound(pSoundId, param_1, param_2); - if (handle != NULL && handle->getSound() != NULL) { - f32 local_0 = 1.0f; - f32 local_1 = 1.0f; - switch (pSoundId) { - case 0x200c6: - local_1 = Z2Calc::getParamByExp((f32)param_1, 0.0f, 127.0f, 0.2f, 0.4f, 1.0f, - Z2Calc::CURVE_SIGN_1); - local_0 = Z2Calc::getParamByExp((f32)param_1, 0.0f, 127.0f, 0.2f, 0.6f, 1.2f, - Z2Calc::CURVE_SIGN_1); +Z2SoundHandlePool* Z2SoundObjSimple::startLevelSound(JAISoundID soundID, u32 mapinfo, s8 reverb) { + Z2SoundHandlePool* handle = Z2SoundObjBase::startLevelSound(soundID, mapinfo, reverb); + + if (handle != NULL && (*handle) != NULL) { + f32 pitch = 1.0f; + f32 volume = 1.0f; + switch (soundID) { + case Z2SE_AL_UKI_KURUKURU_LOOP: + volume = Z2Calc::getParamByExp((f32)mapinfo, 0.0f, 127.0f, 0.2f, 0.4f, 1.0f, Z2Calc::CURVE_POSITIVE); + pitch = Z2Calc::getParamByExp((f32)mapinfo, 0.0f, 127.0f, 0.2f, 0.6f, 1.2f, Z2Calc::CURVE_POSITIVE); break; - case 0x8025c: - if (param_1 > 100) { - local_0 = 2.0f; - } else if (param_1 > 21) { - local_0 = Z2Calc::getParamByExp((f32)param_1, 22.0f, 50.0f, 0.4f, 1.0f, 1.5f, - Z2Calc::CURVE_SIGN_0); + case Z2SE_OBJ_FLR_FALLING: + if (mapinfo > 100) { + pitch = 2.0f; + } else if (mapinfo > 21) { + pitch = Z2Calc::getParamByExp((f32)mapinfo, 22.0f, 50.0f, 0.4f, 1.0f, 1.5f, Z2Calc::CURVE_NEGATIVE); + } else { + pitch = 1.0f; } break; } - handle->getSound()->getAuxiliary().movePitch(local_0, 0); - handle->getSound()->getAuxiliary().moveVolume(local_1, 0); + + (*handle)->getAuxiliary().movePitch(pitch, 0); + (*handle)->getAuxiliary().moveVolume(volume, 0); } + return handle; } @@ -294,42 +347,44 @@ Z2SoundHandlePool* Z2SoundObjSimple::startLevelSound(JAISoundID pSoundId, u32 pa Z2SoundObjArrow::Z2SoundObjArrow() : Z2DopplerSoundObjBase() {} /* 802BEB74-802BEB94 2B94B4 0020+00 1/0 0/0 0/0 .text init__15Z2SoundObjArrowFP3VecUc */ -void Z2SoundObjArrow::init(Vec* param_0, u8 param_1) { - Z2SoundObjBase::init(param_0, param_1); +void Z2SoundObjArrow::init(Vec* posPtr, u8 handleNum) { + Z2SoundObjBase::init(posPtr, handleNum); } /* 802BEB94-802BEBDC 2B94D4 0048+00 0/0 2/2 0/0 .text __ct__15Z2SoundObjAnimeFv */ Z2SoundObjAnime::Z2SoundObjAnime() : Z2SoundObjBase() { - mpAnimation = NULL; - mReverse = false; + animation_ = NULL; + reverse_ = false; } /* 802BEBDC-802BEBFC 2B951C 0020+00 1/0 1/0 0/0 .text init__15Z2SoundObjAnimeFP3VecUc */ -void Z2SoundObjAnime::init(Vec* param_0, u8 param_1) { - Z2SoundObjBase::init(param_0, param_1); +void Z2SoundObjAnime::init(Vec* posPtr, u8 handleNum) { + Z2SoundObjBase::init(posPtr, handleNum); } /* 802BEBFC-802BED68 2B953C 016C+00 0/0 2/2 0/0 .text initAnime__15Z2SoundObjAnimeFPvbff */ -void Z2SoundObjAnime::initAnime(void* param_0, bool param_1, f32 param_2, f32 param_3) { +void Z2SoundObjAnime::initAnime(void* animation, bool param_1, f32 startFrame, f32 param_3) { ageSounds_(); - mpAnimation = (JAUSoundAnimation*)param_0; - if (mpAnimation != NULL) { - mReverse = !param_1; + animation_ = (JAUSoundAnimation*)animation; + if (animation_ != NULL) { + reverse_ = !param_1; field_0x3c = 0; - if (mReverse) { - mCurSoundIndex = mpAnimation->getNumSounds() - 1; - mCurSoundFrame = FLT_MAX; - setLoopFrame(0.0f, param_2); + + if (reverse_) { + curSoundIndex_ = animation_->getNumSounds() - 1; + curSoundFrame_ = FLT_MAX; + setLoopFrame(0.0f, startFrame); } else { - mCurSoundIndex = 0; - mCurSoundFrame = 0.0f; - setLoopFrame(param_2, 0.0f); + curSoundIndex_ = 0; + curSoundFrame_ = 0.0f; + setLoopFrame(startFrame, 0.0f); } - mCurSoundFrame = param_3; - mCurSoundIndex = mpAnimation->getStartSoundIndex(param_3); - if (mReverse && mCurSoundIndex > 0) { - mCurSoundIndex--; + + curSoundFrame_ = param_3; + curSoundIndex_ = animation_->getStartSoundIndex(param_3); + if (reverse_ && curSoundIndex_ > 0) { + curSoundIndex_--; } } } @@ -337,25 +392,24 @@ void Z2SoundObjAnime::initAnime(void* param_0, bool param_1, f32 param_2, f32 pa /* 802BED68-802BEED4 2B96A8 016C+00 1/1 0/0 0/0 .text ageSounds___15Z2SoundObjAnimeFv */ void Z2SoundObjAnime::ageSounds_() { for (int i = 0; i < getNumHandles(); i++) { - if (getHandle(i)->getSound() != NULL) { - switch (getHandle(i)->getSound()->getAnimationState()) { - case 0: - break; - case 1: - if (getHandle(i)->getSound()->hasLifeTime()) { - getHandle(i)->getSound()->stop(); + if ((*getHandle(i))) { + switch ((*getHandle(i))->getAnimationState()) { + case 0: + break; + case 1: + if ((*getHandle(i))->hasLifeTime()) { + (*getHandle(i))->stop(); + } else { + JAUSoundAnimationSound* animationSound = (JAUSoundAnimationSound*)(*getHandle(i))->getUserData(); + if (animationSound->stopsWhenAnimationChanges()) { + (*getHandle(i))->stop(); } else { - JAUSoundAnimationSound* sound = - (JAUSoundAnimationSound*)getHandle(i)->getSound()->getUserData(); - if (sound->stopsWhenAnimationChanges()) { - getHandle(i)->getSound()->stop(); - } else { - getHandle(i)->getSound()->setAnimationState(2); - } + (*getHandle(i))->setAnimationState(2); } - break; - case 2: - break; + } + break; + case 2: + break; } } } @@ -365,90 +419,93 @@ void Z2SoundObjAnime::ageSounds_() { */ void Z2SoundObjAnime::updateAnime(f32 param_0, f32 param_1) { for (int i = 0; i < getNumHandles(); i++) { - if (getHandle(i)->getSound() != NULL && getHandle(i)->getSound()->isAnimated()) { - getHandle(i)->getSound()->setPos(*mSoundPos); + if ((*getHandle(i)) && (*getHandle(i))->isAnimated()) { + (*getHandle(i))->setPos(*pos_); } } - if (mpAnimation == NULL || mpAnimation->getNumSounds() == 0) { + if (animation_ == NULL || animation_->getNumSounds() == 0) { return; } - if (!mReverse) { - if (param_0 < mCurSoundFrame) { - while (mCurSoundIndex < mEndSoundIndex) { - startSoundInner(*mSoundPos, param_1, mSoundStarter, field_0x1c, field_0x1e); + if (!reverse_) { + if (param_0 < curSoundFrame_) { + while (curSoundIndex_ < endSoundIndex_) { + startSoundInner(*pos_, param_1, soundStarter_, field_0x1c, reverb_); } - mCurSoundIndex = mStartSoundIndex; - mCurSoundFrame = param_0; - if (field_0x3c < 0xffff) { + curSoundIndex_ = startSoundIndex_; + curSoundFrame_ = param_0; + if (field_0x3c < 0xFFFF) { field_0x3c++; } } + updateSoundLifeTime_(param_0, param_1); - while (mCurSoundIndex < mpAnimation->getNumSounds() && - mpAnimation->getSound(mCurSoundIndex)->isNotingOn(param_0, false)) { - startSoundInner(*mSoundPos, param_1, mSoundStarter, field_0x1c, field_0x1e); + + while (curSoundIndex_ < animation_->getNumSounds() && animation_->getSound(curSoundIndex_)->isNotingOn(param_0, false)) { + startSoundInner(*pos_, param_1, soundStarter_, field_0x1c, reverb_); } } else { - if (param_0 > mCurSoundFrame) { - while (mCurSoundIndex >= mStartSoundIndex) { - startSoundInner(*mSoundPos, param_1, mSoundStarter, field_0x1c, field_0x1e); + if (param_0 > curSoundFrame_) { + while (curSoundIndex_ >= startSoundIndex_) { + startSoundInner(*pos_, param_1, soundStarter_, field_0x1c, reverb_); } - mCurSoundIndex = mEndSoundIndex - 1; - mCurSoundFrame = param_0; - if (field_0x3c < 0xffff) { + curSoundIndex_ = endSoundIndex_ - 1; + curSoundFrame_ = param_0; + if (field_0x3c < 0xFFFF) { field_0x3c++; } } + updateSoundLifeTime_(param_0, param_1); - while (mCurSoundIndex >= 0 && - mpAnimation->getSound(mCurSoundIndex)->isNotingOn(param_0, true)) { - startSoundInner(*mSoundPos, param_1, mSoundStarter, field_0x1c, field_0x1e); + + while (curSoundIndex_ >= 0 && animation_->getSound(curSoundIndex_)->isNotingOn(param_0, true)) { + startSoundInner(*pos_, param_1, soundStarter_, field_0x1c, reverb_); } } - mCurSoundFrame = param_0; + curSoundFrame_ = param_0; } /* 802BF304-802BF660 2B9C44 035C+00 1/1 0/0 0/0 .text updateSoundLifeTime___15Z2SoundObjAnimeFff */ void Z2SoundObjAnime::updateSoundLifeTime_(f32 param_0, f32 param_1) { - if (mpAnimation == NULL) { + if (animation_ == NULL) { return; } + for (int i = 0; i < getNumHandles(); i++) { - if (getHandle(i)->getSound() != NULL) { - switch (getHandle(i)->getSound()->getAnimationState()) { - case 0: - break; - case 1: { - JAUSoundAnimationSound* sound = - (JAUSoundAnimationSound*)getHandle(i)->getSound()->getUserData(); - bool bvar1 = param_1 == 0.0f && sound->stopsWhenSpeedIsZero(); - if (sound->setsLifeTime()) { - if (bvar1) { - getHandle(i)->getSound()->pause(true); - } else { - if (sound->isNoting(param_0)) { - getHandle(i)->getSound()->updateLifeTime(1); - getHandle(i)->getSound()->pause(false); - } else { - getHandle(i)->getSound()->stop(); - } - } + if ((*getHandle(i))) { + switch ((*getHandle(i))->getAnimationState()) { + case 0: + break; + case 1: { + JAUSoundAnimationSound* animationSound = (JAUSoundAnimationSound*)(*getHandle(i))->getUserData(); + JUT_ASSERT(696, animationSound); + + bool bvar1 = param_1 == 0.0f && animationSound->stopsWhenSpeedIsZero(); + if (animationSound->setsLifeTime()) { + if (bvar1) { + (*getHandle(i))->pause(true); } else { - if (bvar1) { - getHandle(i)->getSound()->stop(); - } else if (sound->stopsWhenNoteOff() && - sound->isNotingOff(param_0, mReverse)) { - getHandle(i)->getSound()->stop(); + if (animationSound->isNoting(param_0)) { + (*getHandle(i))->updateLifeTime(1); + (*getHandle(i))->pause(false); + } else { + (*getHandle(i))->stop(); } } - break; + } else { + if (bvar1) { + (*getHandle(i))->stop(); + } else if (animationSound->stopsWhenNoteOff() && animationSound->isNotingOff(param_0, reverse_)) { + (*getHandle(i))->stop(); + } } - case 2: - break; + break; + } + case 2: + break; } } } @@ -456,38 +513,44 @@ void Z2SoundObjAnime::updateSoundLifeTime_(f32 param_0, f32 param_1) { /* 802BF660-802BF890 2B9FA0 0230+00 1/1 0/0 0/0 .text * startSoundInner__15Z2SoundObjAnimeFRCQ29JGeometry8TVec3<f>fP14Z2SoundStarterUlSc */ -void Z2SoundObjAnime::startSoundInner(JGeometry::TVec3<f32> const& param_0, f32 param_1, - Z2SoundStarter* param_2, u32 param_3, s8 param_4) { - const JAUSoundAnimationSound* sound = mpAnimation->getSound(mCurSoundIndex); - u32 user_data = (u32)sound; - if (mReverse) { - mCurSoundIndex--; +void Z2SoundObjAnime::startSoundInner(const JGeometry::TVec3<f32>& pos, f32 param_1, + Z2SoundStarter* soundStarter, u32 mapinfo, s8 reverb) { + JUT_ASSERT(746, curSoundIndex_ >= 0); + JUT_ASSERT(747, curSoundIndex_ < animation_->getNumSounds()); + + const JAUSoundAnimationSound* animationSound = animation_->getSound(curSoundIndex_); + u32 user_data = (u32)animationSound; + if (reverse_) { + curSoundIndex_--; } else { - mCurSoundIndex++; + curSoundIndex_++; } - if (sound->field_0x1a > 0) { - param_3 = sound->field_0x1a; + + if (animationSound->field_0x1a > 0) { + mapinfo = animationSound->field_0x1a; } - if (playsSound(sound, param_0, param_1)) { - u32 id = getSoundID(sound, param_0, param_1); + + if (playsSound(animationSound, pos, param_1)) { + u32 id = getSoundID(animationSound, pos, param_1); if (!Z2GetSeMgr()->isSoundCulling(id)) { JAISoundHandle* handle = getHandleUserData(user_data); - if (handle != NULL && handle->getSound() != NULL && - handle->getSound()->getAnimationState() != 1) { + if (handle != NULL && (*handle) != NULL && (*handle)->getAnimationState() != 1) { handle = NULL; } + if (handle == NULL) { handle = getFreeHandle(); } + if (handle != NULL) { - param_2->startSound(id, handle, ¶m_0, param_3, (f32)param_4 / 127.0f, - sound->field_0x0c, (f32)sound->field_0x14 / 127.0f, - -1.0f, -1.0f, 0); - if (handle->getSound() != NULL) { - handle->getSound()->setAnimationState(1); - handle->getSound()->setUserData(user_data); - if (sound->setsLifeTime()) { - handle->getSound()->setLifeTime(1, false); + bool result = soundStarter->startSound(id, handle, &pos, mapinfo, (f32)reverb / 127.0f, + animationSound->field_0x0c, (f32)animationSound->field_0x14 / 127.0f, + -1.0f, -1.0f, 0); + if ((*handle) != NULL) { + (*handle)->setAnimationState(1); + (*handle)->setUserData(user_data); + if (animationSound->setsLifeTime()) { + (*handle)->setLifeTime(1, false); } } } @@ -497,32 +560,34 @@ void Z2SoundObjAnime::startSoundInner(JGeometry::TVec3<f32> const& param_0, f32 /* 802BF890-802BF898 2BA1D0 0008+00 1/1 0/0 0/0 .text * getSoundID__15Z2SoundObjAnimeFPC22JAUSoundAnimationSoundRCQ29JGeometry8TVec3<f>f */ -u32 Z2SoundObjAnime::getSoundID(JAUSoundAnimationSound const* i_sound, - JGeometry::TVec3<f32> const& param_1, f32 param_2) { - return i_sound->mSoundId; +u32 Z2SoundObjAnime::getSoundID(const JAUSoundAnimationSound* animationSound, + const JGeometry::TVec3<f32>& param_1, f32 param_2) { + return animationSound->mSoundId; } /* 802BF898-802BF920 2BA1D8 0088+00 1/1 0/0 0/0 .text * playsSound__15Z2SoundObjAnimeFPC22JAUSoundAnimationSoundRCQ29JGeometry8TVec3<f>f */ -bool Z2SoundObjAnime::playsSound(JAUSoundAnimationSound const* i_sound, - JGeometry::TVec3<f32> const& param_1, f32 param_2) { - if (i_sound->playsOnlyOnce()) { - if (field_0x3c != i_sound->field_0x16) { +bool Z2SoundObjAnime::playsSound(const JAUSoundAnimationSound* animationSound, + const JGeometry::TVec3<f32>& param_1, f32 param_2) { + (void)param_1; + (void)param_2; + + if (animationSound->playsOnlyOnce()) { + if (field_0x3c != animationSound->field_0x16) { return false; } } else { - if (i_sound->playsAtIntervals() && - i_sound->field_0x16 != field_0x3c % i_sound->field_0x19) { + if (animationSound->playsAtIntervals() && animationSound->field_0x16 != field_0x3c % animationSound->field_0x19) { return false; } } - if (mReverse) { - if (i_sound->playsOnlyForward()) { + if (reverse_) { + if (animationSound->playsOnlyForward()) { return false; } } else { - if (i_sound->playsOnlyReverse()) { + if (animationSound->playsOnlyReverse()) { return false; } } diff --git a/src/Z2AudioLib/Z2SoundStarter.cpp b/src/Z2AudioLib/Z2SoundStarter.cpp index 968248ab6a..fa8ca55990 100644 --- a/src/Z2AudioLib/Z2SoundStarter.cpp +++ b/src/Z2AudioLib/Z2SoundStarter.cpp @@ -1,110 +1,109 @@ -// -// Z2SoundStarter -// - #include "Z2AudioLib/Z2SoundStarter.h" #include "Z2AudioLib/Z2EnvSeMgr.h" #include "Z2AudioLib/Z2AudioMgr.h" /* 802AAB94-802AABF4 2A54D4 0060+00 0/0 4/4 0/0 .text __ct__14Z2SoundStarterFb */ -Z2SoundStarter::Z2SoundStarter(bool param_0) : JAISoundStarter(param_0), JASGlobalInstance<Z2SoundStarter>(param_0) { -} +Z2SoundStarter::Z2SoundStarter(bool setInstance) : + JAISoundStarter(setInstance), JASGlobalInstance<Z2SoundStarter>(setInstance) {} /* 802AABF4-802AAC3C 2A5534 0048+00 1/0 5/0 0/0 .text * startSound__14Z2SoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */ -bool Z2SoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* i_handlePtr, - JGeometry::TVec3<f32> const* i_pos) { - return Z2SoundStarter::startSound(i_soundID, i_handlePtr, i_pos, - 0, 0.0f, 1.0f, 1.0f, -1.0f, -1.0f, 0); +bool Z2SoundStarter::startSound(JAISoundID soundID, JAISoundHandle* handlePtr, const JGeometry::TVec3<f32>* posPtr) { + return Z2SoundStarter::startSound(soundID, handlePtr, posPtr, 0, 0.0f, 1.0f, 1.0f, -1.0f, -1.0f, 0); } /* 802AAC3C-802AAEDC 2A557C 02A0+00 2/1 2/2 0/0 .text * startSound__14Z2SoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f>UlfffffUl */ -bool Z2SoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* handlePtr, - JGeometry::TVec3<f32> const* i_pos, u32 param_4, f32 i_fxMix, - f32 i_pitch, f32 i_volume, f32 i_pan, f32 i_dolby, u32 i_count) { +bool Z2SoundStarter::startSound(JAISoundID soundID, JAISoundHandle* handlePtr, + const JGeometry::TVec3<f32>* posPtr, u32 mapinfo, f32 fxMix, + f32 pitch, f32 volume, f32 pan, f32 dolby, u32 moveSteps) { JUT_ASSERT(45, handlePtr); - if (param_4 == 6) { - switch (i_soundID) { + if (mapinfo == 6) { + switch (soundID) { case Z2SE_CM_BODYFALL_S: - i_soundID = Z2SE_CM_BODYFALL_ASASE_S; + soundID = Z2SE_CM_BODYFALL_ASASE_S; break; case Z2SE_CM_BODYFALL_M: - i_soundID = Z2SE_CM_BODYFALL_ASASE_M; + soundID = Z2SE_CM_BODYFALL_ASASE_M; break; case Z2SE_CM_BODYFALL_L: - i_soundID = Z2SE_CM_BODYFALL_ASASE_L; + soundID = Z2SE_CM_BODYFALL_ASASE_L; break; } } - if (i_soundID.mId.mBytes.b1 != 0 && i_soundID.mId.mBytes.b1 != 9) { + + if (soundID.id_.info.type.parts.groupID != 0 && soundID.id_.info.type.parts.groupID != 9) { if (Z2GetSceneMgr()->isInDarkness()) { - i_fxMix = 1.0f; + fxMix = 1.0f; } else { - f32 ratio = Z2GetStatusMgr()->getCameraInWaterDepthRatio(); - f32 uStack_8c = ratio > 0.0f; - if (uStack_8c) { - i_fxMix = uStack_8c; + f32 inWaterMix = Z2GetStatusMgr()->getCameraInWaterDepthRatio() > 0.0f; + if (inWaterMix) { + fxMix = inWaterMix; } else { - i_fxMix += 0.5f * Z2GetEnvSeMgr()->getFogDensity(); - if (i_fxMix > 1.0f) { - i_fxMix = 1.0f; + fxMix += 0.5f * Z2GetEnvSeMgr()->getFogDensity(); + if (fxMix > 1.0f) { + fxMix = 1.0f; } } } } - bool startSoundRes = Z2GetAudioMgr()->startSound(i_soundID, handlePtr, i_pos); + + bool startSoundRes = Z2GetAudioMgr()->startSound(soundID, handlePtr, posPtr); if (*handlePtr) { - if (param_4 != 0) { - setPortData(handlePtr, 6, param_4, -1); + if (mapinfo != 0) { + setPortData(handlePtr, 6, mapinfo, -1); } - if (i_fxMix > 0.0f) { - (*handlePtr)->getAuxiliary().moveFxMix(i_fxMix, i_count); + if (fxMix > 0.0f) { + (*handlePtr)->getAuxiliary().moveFxMix(fxMix, moveSteps); } - if (i_pitch != 1.0f) { - (*handlePtr)->getAuxiliary().movePitch(i_pitch, i_count); + if (pitch != 1.0f) { + (*handlePtr)->getAuxiliary().movePitch(pitch, moveSteps); } - if (i_volume != 1.0f) { - (*handlePtr)->getAuxiliary().moveVolume(i_volume, i_count); + if (volume != 1.0f) { + (*handlePtr)->getAuxiliary().moveVolume(volume, moveSteps); } - if (i_pan != -1.0f) { - (*handlePtr)->getAuxiliary().movePan(i_pan, i_count); + if (pan != -1.0f) { + (*handlePtr)->getAuxiliary().movePan(pan, moveSteps); } - if (i_dolby != -1.0f) { - (*handlePtr)->getAuxiliary().moveDolby(i_dolby, i_count); + if (dolby != -1.0f) { + (*handlePtr)->getAuxiliary().moveDolby(dolby, moveSteps); } } + return startSoundRes; } /* 802AAEDC-802AAF74 2A581C 0098+00 1/1 10/10 0/0 .text * setPortData__14Z2SoundStarterFP14JAISoundHandleUlUsSc */ -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); +void Z2SoundStarter::setPortData(JAISoundHandle* handlePtr, u32 portNum, u16 data, s8 childIndex) { + if (handlePtr != NULL && *handlePtr) { + JASTrack* track = handlePtr->getSound()->getTrack(); + if (childIndex != -1) { + if (track->getChild(childIndex) == NULL) { + track->openChild(childIndex); } - track = track->getChild(param_4); + track = track->getChild(childIndex); } + JUT_ASSERT(122, track); - track->writePort(param_2, param_3); + track->writePort(portNum, data); } } /* 802AAF74-802AAFF0 2A58B4 007C+00 0/0 1/1 0/0 .text * getPortData__14Z2SoundStarterFP14JAISoundHandleUlSc */ -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(); +u16 Z2SoundStarter::getPortData(JAISoundHandle* handlePtr, u32 portNum, s8 childIndex) { + if (handlePtr != NULL && *handlePtr) { + JASTrack* track = NULL; + if (childIndex == -1) { + track = handlePtr->getSound()->getTrack(); } else { - track = param_1->getSound()->getChildTrack(param_3); + track = handlePtr->getSound()->getChildTrack(childIndex); } + JUT_ASSERT(140, track); - return track->readPort(param_2); + return track->readPort(portNum); } + return 0; -}
\ No newline at end of file +} diff --git a/src/Z2AudioLib/Z2SpeechMgr2.cpp b/src/Z2AudioLib/Z2SpeechMgr2.cpp index a54db697bc..416651a221 100644 --- a/src/Z2AudioLib/Z2SpeechMgr2.cpp +++ b/src/Z2AudioLib/Z2SpeechMgr2.cpp @@ -1,7 +1,3 @@ -// -// Z2SpeechMgr2 -// - #include "Z2AudioLib/Z2SpeechMgr2.h" #include "Z2AudioLib/Z2AudioMgr.h" #include "Z2AudioLib/Z2EnvSeMgr.h" @@ -9,56 +5,76 @@ #include "Z2AudioLib/Z2SeMgr.h" #include "JSystem/JMath/JMath.h" -typedef struct { - const u8* field_0x0; - const u8* field_0x4; - u8 field_0x8; - u8 field_0x9; - u8 field_0xa; - u8 field_0xb; - -} sPrmStruct; - struct Z2MdnPrm { - static u8 const sReply[100]; + struct Unit { + u8 start; + u8 end; + }; + + struct Prm { + const Unit* main; + const u8* tail; + u8 mainNum; + u8 tailNum1; + u8 tailNum2; + }; + + static Unit const sReply[50]; static u8 const sReplyTail[10]; - static u8 const sJoke[100]; + + static Unit const sJoke[50]; static u8 const sJokeTail[10]; - static u8 const sSexy[100]; + + static Unit const sSexy[50]; static u8 const sSexyTail[10]; - static u8 const sRidicule[100]; + + static Unit const sRidicule[50]; static u8 const sRidiculeTail[10]; - static u8 const sBoring[108]; - static u8 const sIrritated[94]; - static u8 const sIrritatedTail[10]; - static u8 const sOrder[114]; - static u8 const sResent[106]; - static u8 const sCheerful[106]; - static u8 const sConfused[106]; - static u8 const sHostility[104]; - static u8 const sTired[106]; - static u8 const sSerious[106]; - static u8 const sReplyb[84]; - static u8 const sApologize[100]; - static u8 const sApologizeTail[9]; - static u8 const sDeside[100]; - static u8 const sAfford[104]; - static u8 const sAffordTail[12]; - static sPrmStruct const sPrm[17]; + + static Unit const sBoring[54]; static u8 const sBoringTail[6]; + + static Unit const sIrritated[47]; + static u8 const sIrritatedTail[10]; + + static Unit const sOrder[57]; static u8 const sOrderTail[6]; + + static Unit const sResent[53]; static u8 const sResentTail[5]; + + static Unit const sCheerful[53]; static u8 const sCheerfulTail[8]; + + static Unit const sConfused[53]; static u8 const sConfusedTail[5]; + + static Unit const sHostility[52]; static u8 const sHostilityTail[7]; + + static Unit const sTired[53]; static u8 const sTiredTail[8]; + + static Unit const sSerious[53]; static u8 const sSeriousTail[7]; + + static Unit const sReplyb[42]; static u8 const sReplybTail[7]; + + static Unit const sApologize[50]; + static u8 const sApologizeTail[9]; + + static Unit const sDeside[50]; static u8 const sDesideTail[8]; + + static Unit const sAfford[52]; + static u8 const sAffordTail[12]; + + static Prm const sPrm[17]; }; /* 8039C260-8039C2C4 0288C0 0064+00 1/0 0/0 0/0 .rodata sReply__8Z2MdnPrm */ -u8 const Z2MdnPrm::sReply[100] = { +Z2MdnPrm::Unit const Z2MdnPrm::sReply[50] = { 0x6A, 0x8A, 0x50, 0x5F, 0x53, 0x37, 0x37, 0x4F, 0x4F, 0x5E, 0xAA, 0x46, 0x52, 0x5A, 0x5A, 0x4F, 0x4F, 0x45, 0x45, 0x56, 0x64, 0x79, 0x79, 0x79, 0x87, 0x95, 0x95, 0x89, 0x89, 0x4C, 0x4C, 0x4B, 0x52, 0x41, 0x41, 0x5B, 0x5F, 0x71, 0x53, 0x47, 0x89, 0x7D, 0x77, 0x88, 0x88, @@ -74,7 +90,7 @@ u8 const Z2MdnPrm::sReplyTail[10] = { }; /* 8039C2D0-8039C334 028930 0064+00 1/0 0/0 0/0 .rodata sJoke__8Z2MdnPrm */ -u8 const Z2MdnPrm::sJoke[100] = { +Z2MdnPrm::Unit const Z2MdnPrm::sJoke[50] = { 0x68, 0x57, 0x57, 0x55, 0x55, 0x51, 0x5B, 0x64, 0x6B, 0x7B, 0x7B, 0x5C, 0x77, 0x97, 0x8D, 0x97, 0x97, 0x8D, 0x66, 0x69, 0xA2, 0x5C, 0x87, 0x4F, 0x69, 0x5F, 0x5F, 0x83, 0x83, 0x82, 0x7F, 0x96, 0x96, 0xB0, 0x70, 0xA1, 0x6D, 0x6D, 0x6D, 0x59, 0x4C, 0x4B, 0x5A, 0x40, 0x4A, @@ -83,13 +99,14 @@ u8 const Z2MdnPrm::sJoke[100] = { 0x64, 0x60, 0xB1, 0x6C, 0x6D, 0x6D, 0x7E, 0x7A, 0x97, 0x97, 0x99, 0xA5, 0x89, 0x90, 0xA4, 0x45, 0x45, 0x29, 0x4C, 0x4B, 0x64, 0x64, 0x60, 0x5C, 0xB1, }; + /* 8039C334-8039C340 028994 000A+02 1/0 0/0 0/0 .rodata sJokeTail__8Z2MdnPrm */ u8 const Z2MdnPrm::sJokeTail[10] = { 0x51, 0x97, 0x60, 0xB0, 0x6F, 0x5E, 0x5A, 0xA6, 0x4F, 0x4F, }; /* 8039C340-8039C3A4 0289A0 0064+00 1/0 0/0 0/0 .rodata sSexy__8Z2MdnPrm */ -u8 const Z2MdnPrm::sSexy[100] = { +Z2MdnPrm::Unit const Z2MdnPrm::sSexy[50] = { 0x5E, 0x60, 0x5F, 0x63, 0x63, 0x72, 0x72, 0x78, 0x4D, 0x7A, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x59, 0x59, 0x7A, 0x7A, 0xA5, 0x90, 0x8D, 0x86, 0x62, 0x72, 0x79, 0x79, 0x86, 0x7F, 0x8B, 0x85, 0x7B, 0x7B, 0x5E, 0x5E, 0x6D, 0x6D, 0x88, 0x5F, 0xA3, 0xA3, 0x95, 0x95, 0x7F, 0x79, @@ -105,7 +122,7 @@ u8 const Z2MdnPrm::sSexyTail[10] = { }; /* 8039C3B0-8039C414 028A10 0064+00 1/0 0/0 0/0 .rodata sRidicule__8Z2MdnPrm */ -u8 const Z2MdnPrm::sRidicule[100] = { +Z2MdnPrm::Unit const Z2MdnPrm::sRidicule[50] = { 0xA7, 0x5A, 0x5A, 0x52, 0x52, 0x85, 0x85, 0x8C, 0x63, 0x73, 0x73, 0x90, 0x50, 0x46, 0x74, 0x74, 0xA3, 0xA7, 0x41, 0x51, 0x58, 0x34, 0x34, 0x2A, 0x5A, 0x81, 0x5D, 0x42, 0x4B, 0x70, 0x70, 0xB1, 0xB1, 0xB1, 0xB1, 0x65, 0x6A, 0xB1, 0x54, 0xA8, 0xA8, 0x6B, 0x6C, 0x55, 0x55, @@ -121,7 +138,7 @@ u8 const Z2MdnPrm::sRidiculeTail[10] = { }; /* 8039C420-8039C48C 028A80 006C+00 1/0 0/0 0/0 .rodata sBoring__8Z2MdnPrm */ -u8 const Z2MdnPrm::sBoring[108] = { +Z2MdnPrm::Unit const Z2MdnPrm::sBoring[54] = { 0x8E, 0x9C, 0x9C, 0x5A, 0x5A, 0x52, 0x52, 0x5B, 0x5C, 0x56, 0x5C, 0x52, 0x52, 0x2D, 0x2D, 0x5B, 0x59, 0x56, 0x56, 0x56, 0x56, 0x6B, 0x6B, 0x58, 0x4C, 0x8E, 0x8E, 0x59, 0x61, 0x54, 0xA0, 0x4D, 0x5D, 0x59, 0x48, 0x30, 0x30, 0x5B, 0x5B, 0x5B, 0x4A, 0x64, 0x64, 0x7A, 0x7A, 0x92, 0x62, 0x62, @@ -137,7 +154,7 @@ u8 const Z2MdnPrm::sBoringTail[6] = { }; /* 8039C48C-8039C4EC 028AEC 005E+02 1/0 0/0 0/0 .rodata sIrritated__8Z2MdnPrm */ -u8 const Z2MdnPrm::sIrritated[94] = { +Z2MdnPrm::Unit const Z2MdnPrm::sIrritated[47] = { 0x6C, 0x91, 0x67, 0x8B, 0x8B, 0xA2, 0xA2, 0xAB, 0x48, 0x64, 0x73, 0x61, 0x61, 0x64, 0x64, 0x6D, 0x60, 0x7E, 0x4A, 0x55, 0x6A, 0x63, 0x66, 0x78, 0x5C, 0x5A, 0x6E, 0x79, 0x75, 0x62, 0x62, 0x57, 0x85, 0x3F, 0x3C, 0x83, 0x83, 0x9B, 0x78, 0x65, 0x65, 0x67, 0x65, 0x65, 0x87, 0x88, 0x88, 0x3D, @@ -152,7 +169,7 @@ u8 const Z2MdnPrm::sIrritatedTail[10] = { }; /* 8039C4F8-8039C56C 028B58 0072+02 1/0 0/0 0/0 .rodata sOrder__8Z2MdnPrm */ -u8 const Z2MdnPrm::sOrder[114] = { +Z2MdnPrm::Unit const Z2MdnPrm::sOrder[57] = { 0x77, 0x5F, 0x5F, 0x73, 0x73, 0x66, 0x66, 0x6B, 0x6B, 0x7A, 0x7A, 0x60, 0x54, 0x5F, 0x5F, 0x69, 0x69, 0x5A, 0x86, 0x84, 0x84, 0x96, 0x96, 0x94, 0x94, 0x8A, 0x87, 0x84, 0x5A, 0x2C, 0x4E, 0x52, 0x52, 0x52, 0x52, 0x51, 0x51, 0x6E, 0x62, 0x5E, 0x6C, 0xA3, 0xA3, 0x5B, 0x62, @@ -169,7 +186,7 @@ u8 const Z2MdnPrm::sOrderTail[6] = { }; /* 8039C56C-8039C5D8 028BCC 006A+02 1/0 0/0 0/0 .rodata sResent__8Z2MdnPrm */ -u8 const Z2MdnPrm::sResent[106] = { +Z2MdnPrm::Unit const Z2MdnPrm::sResent[53] = { 0x6F, 0x5F, 0x5F, 0x66, 0x66, 0x66, 0x66, 0x55, 0x55, 0x55, 0x55, 0x4B, 0x4B, 0x6B, 0x6B, 0x86, 0x86, 0x4A, 0x4A, 0x6D, 0x6D, 0x6D, 0x6D, 0x8C, 0x8C, 0x84, 0x84, 0x64, 0x64, 0x6C, 0x6C, 0x92, 0x92, 0x6A, 0x5F, 0x6F, 0x6F, 0x62, 0x62, 0x62, 0x75, 0x5A, 0x5A, 0x5A, 0x5A, 0x60, 0x60, 0x6A, @@ -185,7 +202,7 @@ u8 const Z2MdnPrm::sResentTail[5] = { }; /* 8039C5D8-8039C644 028C38 006A+02 1/0 0/0 0/0 .rodata sCheerful__8Z2MdnPrm */ -u8 const Z2MdnPrm::sCheerful[106] = { +Z2MdnPrm::Unit const Z2MdnPrm::sCheerful[53] = { 0x64, 0x6D, 0x6D, 0x6D, 0x99, 0x6D, 0x40, 0x51, 0x51, 0x6F, 0x6F, 0x66, 0x66, 0x60, 0xA7, 0xAF, 0xB3, 0x61, 0x61, 0xA7, 0xA7, 0x5E, 0x8B, 0x75, 0x77, 0x72, 0x72, 0x93, 0x93, 0x8B, 0x8B, 0x88, 0x88, 0x77, 0x77, 0x80, 0x80, 0x80, 0x80, 0x67, 0x67, 0x4D, 0x4A, 0x69, 0x44, 0xA1, 0x64, 0xA8, @@ -201,7 +218,7 @@ u8 const Z2MdnPrm::sCheerfulTail[8] = { }; /* 8039C644-8039C6B0 028CA4 006A+02 1/0 0/0 0/0 .rodata sConfused__8Z2MdnPrm */ -u8 const Z2MdnPrm::sConfused[106] = { +Z2MdnPrm::Unit const Z2MdnPrm::sConfused[53] = { 0x83, 0x80, 0x80, 0x82, 0x82, 0x82, 0x82, 0x5B, 0x75, 0x84, 0x84, 0x84, 0x84, 0x75, 0x75, 0x62, 0x62, 0x62, 0x4D, 0x56, 0x56, 0x59, 0x59, 0x59, 0x59, 0x74, 0x74, 0x85, 0x7D, 0x8D, 0x8D, 0x70, 0x70, 0x5A, 0x5A, 0x6B, 0x6B, 0x6B, 0x6B, 0x70, 0x79, 0x73, 0x73, 0x71, 0x71, 0x75, 0x75, 0x7B, @@ -217,7 +234,7 @@ u8 const Z2MdnPrm::sConfusedTail[5] = { }; /* 8039C6B0-8039C718 028D10 0068+00 1/0 0/0 0/0 .rodata sHostility__8Z2MdnPrm */ -u8 const Z2MdnPrm::sHostility[104] = { +Z2MdnPrm::Unit const Z2MdnPrm::sHostility[52] = { 0x85, 0x71, 0x71, 0x73, 0x73, 0x3B, 0x62, 0x84, 0x94, 0x94, 0x94, 0xAF, 0x98, 0xAD, 0xAD, 0x5A, 0x5A, 0x63, 0x63, 0x97, 0x90, 0x90, 0x7B, 0x73, 0x73, 0x63, 0x63, 0x55, 0x55, 0x65, 0x66, 0x7F, 0x7F, 0x87, 0x87, 0x8A, 0x8A, 0x94, 0x5D, 0x5C, 0x5A, 0x67, 0x67, 0x68, 0x68, @@ -233,7 +250,7 @@ u8 const Z2MdnPrm::sHostilityTail[7] = { }; /* 8039C718-8039C784 028D78 006A+02 1/0 0/0 0/0 .rodata sTired__8Z2MdnPrm */ -u8 const Z2MdnPrm::sTired[106] = { +Z2MdnPrm::Unit const Z2MdnPrm::sTired[53] = { 0x70, 0x70, 0x70, 0x5C, 0x5C, 0x5C, 0x6F, 0x6F, 0x6F, 0x93, 0x8C, 0x9A, 0x9D, 0x89, 0x99, 0x7A, 0x91, 0x8D, 0x8D, 0x8D, 0x8D, 0x69, 0x69, 0x72, 0x72, 0x65, 0x65, 0x65, 0x9E, 0x98, 0x98, 0x2A, 0x50, 0x54, 0x54, 0x49, 0x64, 0x59, 0x59, 0x62, 0x62, 0x62, 0x44, 0x5E, 0x9F, 0x91, 0x63, 0x63, @@ -249,7 +266,7 @@ u8 const Z2MdnPrm::sTiredTail[8] = { }; /* 8039C784-8039C7F0 028DE4 006A+02 1/0 0/0 0/0 .rodata sSerious__8Z2MdnPrm */ -u8 const Z2MdnPrm::sSerious[106] = { +Z2MdnPrm::Unit const Z2MdnPrm::sSerious[53] = { 0x52, 0x65, 0x65, 0x72, 0x5A, 0x61, 0x61, 0x7B, 0x80, 0x92, 0x93, 0x9D, 0x9D, 0x70, 0x79, 0x76, 0x62, 0x57, 0x5A, 0x53, 0x53, 0x59, 0x59, 0x65, 0x63, 0x60, 0x60, 0x6A, 0x83, 0x80, 0x7F, 0x5D, 0x5C, 0x45, 0x5D, 0x71, 0x72, 0x65, 0x65, 0x65, 0x66, 0x4B, 0xB2, 0x60, 0x5C, 0x5C, 0x5C, 0x5B, @@ -265,7 +282,7 @@ u8 const Z2MdnPrm::sSeriousTail[7] = { }; /* 8039C7F0-8039C844 028E50 0054+00 1/0 0/0 0/0 .rodata sReplyb__8Z2MdnPrm */ -u8 const Z2MdnPrm::sReplyb[84] = { +Z2MdnPrm::Unit const Z2MdnPrm::sReplyb[42] = { 0x5C, 0x45, 0x45, 0x71, 0x9F, 0x57, 0xB4, 0xB4, 0x56, 0x62, 0x8E, 0x61, 0x61, 0xB0, 0xB0, 0x3C, 0x59, 0x4A, 0x64, 0xA4, 0xA4, 0x5A, 0x5A, 0x5A, 0x5A, 0x72, 0x72, 0x4B, 0x6B, 0x97, 0x97, 0x59, 0x60, 0x60, 0x60, 0x69, 0x3E, 0x3E, 0x57, 0x42, 0x5E, 0x76, @@ -280,7 +297,7 @@ u8 const Z2MdnPrm::sReplybTail[7] = { }; /* 8039C844-8039C8A8 028EA4 0064+00 1/0 0/0 0/0 .rodata sApologize__8Z2MdnPrm */ -u8 const Z2MdnPrm::sApologize[100] = { +Z2MdnPrm::Unit const Z2MdnPrm::sApologize[50] = { 0x6A, 0x6A, 0x6A, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x57, 0x57, 0x57, 0x63, 0x61, 0x54, 0x54, 0x54, 0x54, 0x58, 0x58, 0x58, 0x58, 0x45, 0x45, 0x56, 0x56, 0x5B, 0x5B, 0x37, 0x53, 0x53, 0x53, 0x59, 0x59, 0x59, 0x49, 0x58, 0x58, 0x55, 0x56, 0x56, 0x83, 0x7F, 0x7F, @@ -296,7 +313,7 @@ u8 const Z2MdnPrm::sApologizeTail[9] = { }; /* 8039C8B4-8039C918 028F14 0064+00 1/0 0/0 0/0 .rodata sDeside__8Z2MdnPrm */ -u8 const Z2MdnPrm::sDeside[100] = { +Z2MdnPrm::Unit const Z2MdnPrm::sDeside[50] = { 0x77, 0x77, 0x77, 0x58, 0x58, 0x6F, 0x78, 0x5F, 0x66, 0x5E, 0x6E, 0x62, 0x62, 0x2E, 0x5A, 0x58, 0x54, 0x52, 0x52, 0x5C, 0x59, 0x56, 0x56, 0x4B, 0x4B, 0x63, 0x63, 0x4D, 0x4E, 0x4A, 0x69, 0x71, 0x71, 0x76, 0x80, 0x80, 0x80, 0x73, 0x73, 0x5C, 0x7C, 0x64, 0x83, 0x89, 0x89, @@ -312,7 +329,7 @@ u8 const Z2MdnPrm::sDesideTail[8] = { }; /* 8039C918-8039C980 028F78 0068+00 1/0 0/0 0/0 .rodata sAfford__8Z2MdnPrm */ -u8 const Z2MdnPrm::sAfford[104] = { +Z2MdnPrm::Unit const Z2MdnPrm::sAfford[52] = { 0x4E, 0x45, 0x52, 0x5B, 0x56, 0x5B, 0x59, 0x52, 0x52, 0x57, 0x5C, 0x50, 0x50, 0x49, 0x80, 0x6E, 0x6E, 0x5A, 0x5C, 0x60, 0x6A, 0x62, 0x62, 0x6A, 0x71, 0x48, 0x4C, 0x5B, 0x5A, 0x40, 0x40, 0x49, 0x49, 0x50, 0x51, 0x51, 0x51, 0x3A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, @@ -328,24 +345,24 @@ u8 const Z2MdnPrm::sAffordTail[12] = { }; /* 8039C98C-8039CA58 -00001 00CC+00 2/2 0/0 0/0 .rodata sPrm__8Z2MdnPrm */ -sPrmStruct const Z2MdnPrm::sPrm[17] = { - { Z2MdnPrm::sReply, Z2MdnPrm::sReplyTail, 0x32, 0x06, 0x04, 0x00}, - { Z2MdnPrm::sJoke, Z2MdnPrm::sJokeTail, 0x32, 0x03, 0x07, 0x00}, - { Z2MdnPrm::sSexy, Z2MdnPrm::sSexyTail, 0x32, 0x03, 0x07, 0x00}, - { Z2MdnPrm::sRidicule, Z2MdnPrm::sRidiculeTail, 0x32, 0x03, 0x07, 0x00}, - { Z2MdnPrm::sBoring, Z2MdnPrm::sBoringTail, 0x36, 0x01, 0x05, 0x00}, - { Z2MdnPrm::sIrritated, Z2MdnPrm::sIrritatedTail, 0x2F, 0x03, 0x07, 0x00}, - { Z2MdnPrm::sOrder, Z2MdnPrm::sOrderTail, 0x39, 0x02, 0x04, 0x00}, - { Z2MdnPrm::sResent, Z2MdnPrm::sResentTail, 0x35, 0x02, 0x03, 0x00}, - { Z2MdnPrm::sCheerful, Z2MdnPrm::sCheerfulTail, 0x35, 0x01, 0x07, 0x00}, - { Z2MdnPrm::sConfused, Z2MdnPrm::sConfusedTail, 0x35, 0x03, 0x02, 0x00}, - { Z2MdnPrm::sHostility, Z2MdnPrm::sHostilityTail, 0x34, 0x02, 0x05, 0x00}, - { Z2MdnPrm::sTired, Z2MdnPrm::sTiredTail, 0x35, 0x03, 0x05, 0x00}, - { Z2MdnPrm::sSerious, Z2MdnPrm::sSeriousTail, 0x35, 0x02, 0x05, 0x00}, - { Z2MdnPrm::sReplyb, Z2MdnPrm::sReplybTail, 0x2A, 0x04, 0x03, 0x00}, - { Z2MdnPrm::sApologize, Z2MdnPrm::sApologizeTail, 0x32, 0x04, 0x05, 0x00}, - { Z2MdnPrm::sDeside, Z2MdnPrm::sDesideTail, 0x32, 0x01, 0x07, 0x00}, - { Z2MdnPrm::sAfford, Z2MdnPrm::sAffordTail, 0x34, 0x02, 0x0A, 0x00}, +const Z2MdnPrm::Prm Z2MdnPrm::sPrm[17] = { + {Z2MdnPrm::sReply, Z2MdnPrm::sReplyTail, ARRAY_SIZE(Z2MdnPrm::sReply), 6, 4}, + {Z2MdnPrm::sJoke, Z2MdnPrm::sJokeTail, ARRAY_SIZE(Z2MdnPrm::sJoke), 3, 7}, + {Z2MdnPrm::sSexy, Z2MdnPrm::sSexyTail, ARRAY_SIZE(Z2MdnPrm::sSexy), 3, 7}, + {Z2MdnPrm::sRidicule, Z2MdnPrm::sRidiculeTail, ARRAY_SIZE(Z2MdnPrm::sRidicule), 3, 7}, + {Z2MdnPrm::sBoring, Z2MdnPrm::sBoringTail, ARRAY_SIZE(Z2MdnPrm::sBoring), 1, 5}, + {Z2MdnPrm::sIrritated, Z2MdnPrm::sIrritatedTail, ARRAY_SIZE(Z2MdnPrm::sIrritated), 3, 7}, + {Z2MdnPrm::sOrder, Z2MdnPrm::sOrderTail, ARRAY_SIZE(Z2MdnPrm::sOrder), 2, 4}, + {Z2MdnPrm::sResent, Z2MdnPrm::sResentTail, ARRAY_SIZE(Z2MdnPrm::sResent), 2, 3}, + {Z2MdnPrm::sCheerful, Z2MdnPrm::sCheerfulTail, ARRAY_SIZE(Z2MdnPrm::sCheerful), 1, 7}, + {Z2MdnPrm::sConfused, Z2MdnPrm::sConfusedTail, ARRAY_SIZE(Z2MdnPrm::sConfused), 3, 2}, + {Z2MdnPrm::sHostility, Z2MdnPrm::sHostilityTail, ARRAY_SIZE(Z2MdnPrm::sHostility), 2, 5}, + {Z2MdnPrm::sTired, Z2MdnPrm::sTiredTail, ARRAY_SIZE(Z2MdnPrm::sTired), 3, 5}, + {Z2MdnPrm::sSerious, Z2MdnPrm::sSeriousTail, ARRAY_SIZE(Z2MdnPrm::sSerious), 2, 5}, + {Z2MdnPrm::sReplyb, Z2MdnPrm::sReplybTail, ARRAY_SIZE(Z2MdnPrm::sReplyb), 4, 3}, + {Z2MdnPrm::sApologize, Z2MdnPrm::sApologizeTail, ARRAY_SIZE(Z2MdnPrm::sApologize), 4, 5}, + {Z2MdnPrm::sDeside, Z2MdnPrm::sDesideTail, ARRAY_SIZE(Z2MdnPrm::sDeside), 1, 7}, + {Z2MdnPrm::sAfford, Z2MdnPrm::sAffordTail, ARRAY_SIZE(Z2MdnPrm::sAfford), 2, 10}, }; /* 802CBC60-802CBCEC 2C65A0 008C+00 0/0 1/1 0/0 .text __ct__12Z2SpeechMgr2Fv */ @@ -356,6 +373,7 @@ Z2SpeechMgr2::Z2SpeechMgr2() : JASGlobalInstance<Z2SpeechMgr2>(true), random(0) mVoice = 0; field_0x3ff = 0; field_0x401 = 0; + for (int i = 0; i < 64; i++) { field_0x402[i] = -1; } @@ -363,8 +381,8 @@ Z2SpeechMgr2::Z2SpeechMgr2() : JASGlobalInstance<Z2SpeechMgr2>(true), random(0) /* 802CBD88-802CBF60 2C66C8 01D8+00 1/0 1/1 0/0 .text setString__12Z2SpeechMgr2FPCUssUcUs */ -void Z2SpeechMgr2::setString(u16 const* s, s16 i_textNum, u8 i_speaker, u16 i_mood) { - switch (i_speaker) { +void Z2SpeechMgr2::setString(const u16* s, s16 textNum, u8 speakerID, u16 mood) { + switch (speakerID) { case 0x13: case 0x15: mVoice = 1; @@ -467,19 +485,19 @@ void Z2SpeechMgr2::setString(u16 const* s, s16 i_textNum, u8 i_speaker, u16 i_mo } if (mVoice == 1 || mVoice == 2) { - if (i_mood == 0) { + if (mood == 0) { mMood = 0; } else { - if (i_mood > 17) { + if (mood > 17) { if ((mVoice == 21) || (mVoice == 20)) { mMood = 0; } } else { - mMood = i_mood - 1; + mMood = mood - 1; } } } else { - mMood = i_mood; + mMood = mood; } for (int i = 0; i < 500; i++) { @@ -488,18 +506,19 @@ void Z2SpeechMgr2::setString(u16 const* s, s16 i_textNum, u8 i_speaker, u16 i_mo JUT_ASSERT(383, s != NULL); - if (i_textNum > 500) { + if (textNum > 500) { mTextNum = 500; - JUT_WARN_DEVICE(387, 1, "TOO MANY TEXT : now(%d) > max(%d)", i_textNum, 500); + JUT_WARN_DEVICE(387, 1, "TOO MANY TEXT : now(%d) > max(%d)", textNum, 500); } else { - mTextNum = i_textNum; + mTextNum = textNum; } - #ifdef DEBUG - for (int i = 0; i <= mTextNum; i++) { + #if VERSION == VERSION_SHIELD_DEBUG + for (int i = 0; i <= mTextNum; i++) #else - for (int i = 0; i < mTextNum; i++) { + for (int i = 0; i < mTextNum; i++) #endif + { mText[i] = s[i]; } @@ -516,22 +535,24 @@ void Z2SpeechMgr2::setString(u16 const* s, s16 i_textNum, u8 i_speaker, u16 i_mo } /* 802CBF60-802CC190 2C68A0 0230+00 1/0 2/2 0/0 .text setTextCount__12Z2SpeechMgr2Fs */ -void Z2SpeechMgr2::setTextCount(s16 i_textCount) { +void Z2SpeechMgr2::setTextCount(s16 textCount) { if (mVoice != 99) { field_0x3ff = 0x0; - #ifndef DEBUG - i_textCount = (i_textCount == 0) ? 0 : i_textCount - 1; + #if VERSION != VERSION_SHIELD_DEBUG + textCount = (textCount == 0) ? 0 : textCount - 1; #endif bool all_text = false; - if (mTextCount == 0 && i_textCount >= mTextNum) { + if (mTextCount == 0 && textCount >= mTextNum) { all_text = true; } - mTextCount = i_textCount; + + mTextCount = textCount; if (mTextCount >= mTextNum) { mTextCount = mTextNum; } + if (mVoice == 1 || mVoice == 2) { if (!field_0x0.isSoundAttached()) { speakOneWord(false); @@ -576,8 +597,8 @@ void Z2SpeechMgr2::setTextCount(s16 i_textCount) { sound_id = Z2SE_SY_TEXT_OUT_ZANT; break; } - mSpeech.startSound(sound_id, &field_0x4, NULL, 0, 0.0f, 1.0f, 1.0f, -1.0f, -1.0f, - 0); + + mSpeech.startSound(sound_id, &field_0x4, NULL, 0, 0.0f, 1.0f, 1.0f, -1.0f, -1.0f, 0); } } } @@ -594,11 +615,12 @@ void Z2SpeechMgr2::speakOneWord(bool param_0) { } else if (isNonVerbal()) { return; } - u32 sound = mMood + Z2SE_HYL_MDN_RPLY; - f32 fVar1 = Z2GetSceneMgr()->getRoomReverb() / 127.0f; - bool soundStarted = - mSpeech.startSound(sound, &field_0x0, NULL, 0, fVar1, 1.0f, 1.0f, -1.0f, -1.0f, 0); + + u32 soundID = mMood + Z2SE_HYL_MDN_RPLY; + f32 fxMix = Z2GetSceneMgr()->getRoomReverb() / 127.0f; + bool soundStarted = mSpeech.startSound(soundID, &field_0x0, NULL, 0, fxMix, 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); } @@ -608,39 +630,39 @@ void Z2SpeechMgr2::speakOneWord(bool param_0) { /* 802CC2FC-802CC4C0 2C6C3C 01C4+00 2/2 0/0 0/0 .text isNonVerbal__12Z2SpeechMgr2Fv */ bool Z2SpeechMgr2::isNonVerbal() { switch(mText[mTextCount]) { - 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 '\0': + case ' ': + case '!': + case '\"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '/': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case '[': + case '\\': + case ']': + case '^': + case '_': case 0x813f: case 0x8140: case 0x8141: @@ -681,7 +703,8 @@ bool Z2SpeechMgr2::isNonVerbal() { return true; } - if(mText[mTextCount] == 0x0a) { + #if VERSION != VERSION_SHIELD_DEBUG + if(mText[mTextCount] == 0xA) { switch (mVoice) { case 1: case 2: @@ -690,11 +713,13 @@ bool Z2SpeechMgr2::isNonVerbal() { return true; } } + #endif + return false; } typedef struct { - s8 field_0x0; + s8 unitIndex; u8 field_0x1; } Z2ConnectCost; @@ -707,7 +732,7 @@ void Z2SpeechMgr2::selectUnit(bool param_0) { return; } - s8 ZVar2 = random.get_uint8(Z2MdnPrm::sPrm[mMood].field_0x8); + s8 unitIndex = random.get_uint8(Z2MdnPrm::sPrm[mMood].mainNum); s8 ZVar3; s8 cVar5; @@ -717,10 +742,10 @@ void Z2SpeechMgr2::selectUnit(bool param_0) { while (true) { bool bVar1 = false; - ZVar2 = random.get_uint8(Z2MdnPrm::sPrm[mMood].field_0x8); + unitIndex = random.get_uint8(Z2MdnPrm::sPrm[mMood].mainNum); for (int i = 0; i < field_0x401; i++) { - if (field_0x402[i] == ZVar2) { + if (field_0x402[i] == unitIndex) { bVar1 = true; break; } @@ -731,7 +756,7 @@ void Z2SpeechMgr2::selectUnit(bool param_0) { } for (int i = 0; i < cVar5; i++) { - if (ZVar2 == cost[i].field_0x0) { + if (unitIndex == cost[i].unitIndex) { bVar1 = true; break; } @@ -741,9 +766,9 @@ void Z2SpeechMgr2::selectUnit(bool param_0) { continue; } - const u8 (*prm)[2] = (u8 (*)[2])Z2MdnPrm::sPrm[mMood].field_0x0; - u8 local_3f = JMAAbs(prm[ZVar2][0] - prm[ZVar4][1]); - Z2ConnectCost connectCost = {ZVar2, local_3f}; + const Z2MdnPrm::Unit* units = Z2MdnPrm::sPrm[mMood].main; + u8 local_3f = JMAAbs(units[unitIndex].start - units[ZVar4].end); + Z2ConnectCost connectCost = {unitIndex, local_3f}; cost[cVar5] = connectCost; cVar5++; @@ -753,16 +778,16 @@ void Z2SpeechMgr2::selectUnit(bool param_0) { } u16 tmp = cost[0].field_0x1; - ZVar2 = cost[0].field_0x0; + unitIndex = cost[0].unitIndex; for (int i = 0; i < 5; i++) { if (cost[i].field_0x1 < tmp) { tmp = cost[i].field_0x1; - ZVar2 = cost[i].field_0x0; + unitIndex = cost[i].unitIndex; } } } - field_0x402[field_0x401] = ZVar2; + field_0x402[field_0x401] = unitIndex; field_0x401++; } @@ -772,34 +797,33 @@ void Z2SpeechMgr2::selectTail() { s8 cVar9 = 0; s8 ZVar1 = field_0x402[field_0x401 - 1]; s8 ZVar6; - u8 bVar3; + u8 bVar3 = 0; while (true) { bool bVar5 = false; switch (mVoice) { case 2: - bVar3 = Z2MdnPrm::sPrm[mMood].field_0x9; + bVar3 = Z2MdnPrm::sPrm[mMood].tailNum1; ZVar6 = random.get_uint8(bVar3); break; case 1: - bVar3 = Z2MdnPrm::sPrm[mMood].field_0xa; - ZVar6 = Z2MdnPrm::sPrm[mMood].field_0x9 + random.get_uint8(bVar3); + bVar3 = Z2MdnPrm::sPrm[mMood].tailNum2; + ZVar6 = Z2MdnPrm::sPrm[mMood].tailNum1 + random.get_uint8(bVar3); break; default: return; } for (int i = 0; i < cVar9; i++) { - if (ZVar6 == cost[i].field_0x0) { + if (ZVar6 == cost[i].unitIndex) { bVar5 = true; break; } } if (!bVar5) { - u8 local_3f = JMAAbs(Z2MdnPrm::sPrm[mMood].field_0x4[ZVar6] - - Z2MdnPrm::sPrm[mMood].field_0x0[ZVar1 * 2 + 1]); + u8 local_3f = JMAAbs(Z2MdnPrm::sPrm[mMood].tail[ZVar6] - Z2MdnPrm::sPrm[mMood].main[ZVar1].end); Z2ConnectCost connectCost = {ZVar6, local_3f}; cost[cVar9] = connectCost; cVar9++; @@ -807,15 +831,15 @@ void Z2SpeechMgr2::selectTail() { if (cVar9 == bVar3 || cVar9 == 5) { s8 tmp_r8; u16 tmp_r9 = cost[0].field_0x1; - tmp_r8 = cost[0].field_0x0; - int local_3c = bVar3 >= 5 ? 5 : bVar3; + tmp_r8 = cost[0].unitIndex; + int local_3c = bVar3 < 5 ? bVar3 : 5; for (int i = 0; i < local_3c; i++) { if (cost[i].field_0x1 < tmp_r9) { tmp_r9 = cost[i].field_0x1; - tmp_r8 = cost[i].field_0x0; + tmp_r8 = cost[i].unitIndex; } } - field_0x402[field_0x401 - 1] = tmp_r8 + Z2MdnPrm::sPrm[mMood].field_0x8; + field_0x402[field_0x401 - 1] = tmp_r8 + Z2MdnPrm::sPrm[mMood].mainNum; return; } } @@ -841,15 +865,15 @@ void Z2SpeechMgr2::framework() { /* 802CCA18-802CCF88 2C7358 0570+00 0/0 2/2 0/0 .text playOneShotVoice__12Z2SpeechMgr2FUcUsP3VecSc */ -void Z2SpeechMgr2::playOneShotVoice(u8 i_speaker, u16 param_1, Vec* i_pos, s8 param_3) { - if (i_speaker == 0) { +void Z2SpeechMgr2::playOneShotVoice(u8 speakerID, u16 param_1, Vec* posPtr, s8 param_3) { + if (speakerID == 0) { return; } f32 fxmix = Z2GetSceneMgr()->getRoomReverb() / 127.0f; if (mVoice == 1 || mVoice == 2) { - JAISoundID sound_id; + JAISoundID sound_id(-1); switch (param_1) { case 25: sound_id = Z2SE_MSG_V_MDN_D21; @@ -883,13 +907,13 @@ void Z2SpeechMgr2::playOneShotVoice(u8 i_speaker, u16 param_1, Vec* i_pos, s8 pa } if (sound_id != -1) { - mSpeech.startSound(sound_id, &field_0x0, (JGeometry::TVec3<f32>*)i_pos, - i_speaker, fxmix, 1.0f, 1.0f, -1.0f, -1.0f, 0); + mSpeech.startSound(sound_id, &field_0x0, (JGeometry::TVec3<f32>*)posPtr, + speakerID, fxmix, 1.0f, 1.0f, -1.0f, -1.0f, 0); } } else { JAISoundID sound_id = Z2SE_MESSAGE_SE_COMMON; - switch (i_speaker) { + switch (speakerID) { case 3: if (param_1 == 1) { Z2GetSeqMgr()->subBgmStart(Z2BGM_ITEM_GET_MINI); @@ -987,7 +1011,7 @@ void Z2SpeechMgr2::playOneShotVoice(u8 i_speaker, u16 param_1, Vec* i_pos, s8 pa if (field_0x0) { field_0x0.releaseSound(); } - mSpeech.startSound(sound_id, &field_0x0, (JGeometry::TVec3<f32>*)i_pos, i_speaker, + mSpeech.startSound(sound_id, &field_0x0, (JGeometry::TVec3<f32>*)posPtr, speakerID, fxmix, 1.0f, 1.0f, -1.0f, -1.0f, 0); if (field_0x0) { mSpeech.setPortData(&field_0x0, 8, param_1, -1); @@ -1000,6 +1024,7 @@ bool Z2SpeechMgr2::isMidnaSpeak() { if ((mVoice == 1 || mVoice == 2) && field_0x0) { return true; } + return false; } @@ -1008,48 +1033,48 @@ Z2SpeechStarter::Z2SpeechStarter() : Z2SoundStarter(false) {} /* 802CCFF8-802CD248 2C7938 0250+00 1/0 0/0 0/0 .text * startSound__15Z2SpeechStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f>UlfffffUl */ -bool Z2SpeechStarter::startSound(JAISoundID i_soundID, JAISoundHandle* i_handle, - JGeometry::TVec3<f32> const* i_pos, u32 param_3, f32 i_fxmix, - f32 i_pitch, f32 i_volume, f32 i_pan, f32 i_dolby, u32 i_count) { +bool Z2SpeechStarter::startSound(JAISoundID soundID, JAISoundHandle* handlePtr, + const JGeometry::TVec3<f32>* posPtr, u32 portData, f32 fxmix, + f32 pitch, f32 volume, f32 pan, f32 dolby, u32 moveSteps) { + JUT_ASSERT(1076, handlePtr); + if (Z2GetSceneMgr()->isInDarkness() && Z2GetSceneMgr()->getDemoSeWaveNum() != 0x77 && Z2GetSceneMgr()->getDemoSeWaveNum() != 0x78) { - i_fxmix = 1.0f; + fxmix = 1.0f; } else { f32 tmp = Z2GetStatusMgr()->getCameraInWaterDepthRatio() > 0.0f; if (tmp) { - i_fxmix = tmp; - } else if (Z2GetSceneMgr()->getDemoSeWaveNum() == 0x6c - || Z2GetSceneMgr()->getDemoSeWaveNum() == 0x77) - { - i_fxmix = 0.07f; + fxmix = tmp; + } else if (Z2GetSceneMgr()->getDemoSeWaveNum() == 0x6c || Z2GetSceneMgr()->getDemoSeWaveNum() == 0x77) { + fxmix = 0.07f; } else { - i_fxmix += Z2GetEnvSeMgr()->getFogDensity() * 0.5f; - if (i_fxmix > 1.0f) { - i_fxmix = 1.0f; + fxmix += Z2GetEnvSeMgr()->getFogDensity() * 0.5f; + if (fxmix > 1.0f) { + fxmix = 1.0f; } } } - bool ret = Z2GetAudioMgr()->startSound(i_soundID, i_handle, i_pos); + bool ret = Z2GetAudioMgr()->startSound(soundID, handlePtr, posPtr); - if (*i_handle) { - if (param_3 != 0) { - setPortData(i_handle, 6, param_3, -1); + if (*handlePtr) { + if (portData != 0) { + setPortData(handlePtr, 6, portData, -1); } - if (i_fxmix > 0.0f) { - (*i_handle)->getAuxiliary().moveFxMix(i_fxmix, i_count); + if (fxmix > 0.0f) { + (*handlePtr)->getAuxiliary().moveFxMix(fxmix, moveSteps); } - if (i_pitch != 1.0f) { - (*i_handle)->getAuxiliary().movePitch(i_pitch, i_count); + if (pitch != 1.0f) { + (*handlePtr)->getAuxiliary().movePitch(pitch, moveSteps); } - if (i_volume != 1.0f) { - (*i_handle)->getAuxiliary().moveVolume(i_volume, i_count); + if (volume != 1.0f) { + (*handlePtr)->getAuxiliary().moveVolume(volume, moveSteps); } - if (i_pan != -1.0f) { - (*i_handle)->getAuxiliary().movePan(i_pan, i_count); + if (pan != -1.0f) { + (*handlePtr)->getAuxiliary().movePan(pan, moveSteps); } - if (i_dolby != -1.0f) { - (*i_handle)->getAuxiliary().moveDolby(i_dolby, i_count); + if (dolby != -1.0f) { + (*handlePtr)->getAuxiliary().moveDolby(dolby, moveSteps); } } diff --git a/src/Z2AudioLib/Z2StatusMgr.cpp b/src/Z2AudioLib/Z2StatusMgr.cpp index 6f8b0fcd78..461348dd0a 100644 --- a/src/Z2AudioLib/Z2StatusMgr.cpp +++ b/src/Z2AudioLib/Z2StatusMgr.cpp @@ -1,15 +1,94 @@ -// -// Z2StatusMgr -// - #include "Z2AudioLib/Z2StatusMgr.h" -#include "Z2AudioLib/Z2Creature.h" #include "Z2AudioLib/Z2Param.h" #include "d/d_com_inf_game.h" #include "d/d_s_play.h" +static const char* sSpotName[] = { + "F_SP00", + "F_SP103", + "R_SP01", + "F_SP104", + "R_SP107", + "F_SP108", + "R_SP108", + "F_SP117", + "F_SP109", + "R_SP109", + "R_SP209", + "F_SP110", + "R_SP110", + "F_SP111", + "F_SP128", + "R_SP128", + "F_SP115", + "F_SP112", + "F_SP126", + "F_SP127", + "R_SP127", + "F_SP113", + "F_SP116", + "R_SP116", + "R_SP160", + "R_SP161", + "F_SP114", + "F_SP118", + "F_SP124", + "F_SP125", + "F_SP121", + "F_SP122", + "F_SP123", + "F_SP200", + "F_SP102", + "", + "R_SP300", + "R_SP301", + "T_ENEMY", + "D_MN54", + "D_MN05", + "D_MN05B", + "D_MN05A", + "D_MN04", + "D_MN04B", + "D_MN04A", + "D_MN01", + "D_MN01B", + "D_MN01A", + "D_MN10", + "D_MN10B", + "D_MN10A", + "D_MN11", + "D_MN11B", + "D_MN11A", + "D_MN06", + "D_MN06B", + "D_MN06A", + "D_MN07", + "D_MN07B", + "D_MN07A", + "D_MN08", + "D_MN08B", + "D_MN08C", + "D_MN08A", + "D_MN08D", + "D_MN09", + "D_MN09A", + "D_MN09B", + "D_MN09C", + "D_SB00", + "D_SB01", + "D_SB02", + "D_SB03", + "D_SB04", + "D_SB05", + "D_SB06", + "D_SB07", + "D_SB08", + "D_SB09", + "D_SB10", +}; + /* 802B5F1C-802B5F70 2B085C 0054+00 0/0 1/1 0/0 .text __ct__11Z2StatusMgrFv */ -Z2StatusMgr::Z2StatusMgr() : JASGlobalInstance(this) { +Z2StatusMgr::Z2StatusMgr() : JASGlobalInstance(true) { mHour = 0; mMinute = 0; mWeekday = 0; @@ -45,13 +124,16 @@ void Z2StatusMgr::processHeartGaugeSound() { if (Z2GetLink() == NULL) { return; } - u32 linkHp = Z2GetLink()->getLinkHp(); + + u8 linkHp = Z2GetLink()->getLinkHp(); if (linkHp == 0) { return; } + if (Z2GetSeqMgr()->isItemGetDemo()) { return; } + if (linkHp <= 2) { Z2GetSeMgr()->seStartLevel(Z2SE_ALMOST_DIE_ALERM_3, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } else if (linkHp <= 4) { @@ -99,90 +181,6 @@ bool Z2StatusMgr::isMovieDemo() { return mDemoStatus == 2 || mDemoStatus == 8 || mDemoStatus == 9; } -static void dummyStrings() { - DEAD_STRING("F_SP00"); - DEAD_STRING("F_SP103"); - DEAD_STRING("R_SP01"); - DEAD_STRING("F_SP104"); - DEAD_STRING("R_SP107"); - DEAD_STRING("F_SP108"); - DEAD_STRING("R_SP108"); - DEAD_STRING("F_SP117"); - DEAD_STRING("F_SP109"); - DEAD_STRING("R_SP109"); - DEAD_STRING("R_SP209"); - DEAD_STRING("F_SP110"); - DEAD_STRING("R_SP110"); - DEAD_STRING("F_SP111"); - DEAD_STRING("F_SP128"); - DEAD_STRING("R_SP128"); - DEAD_STRING("F_SP115"); - DEAD_STRING("F_SP112"); - DEAD_STRING("F_SP126"); - DEAD_STRING("F_SP127"); - DEAD_STRING("R_SP127"); - DEAD_STRING("F_SP113"); - DEAD_STRING("F_SP116"); - DEAD_STRING("R_SP116"); - DEAD_STRING("R_SP160"); - DEAD_STRING("R_SP161"); - DEAD_STRING("F_SP114"); - DEAD_STRING("F_SP118"); - DEAD_STRING("F_SP124"); - DEAD_STRING("F_SP125"); - DEAD_STRING("F_SP121"); - DEAD_STRING("F_SP122"); - DEAD_STRING("F_SP123"); - DEAD_STRING("F_SP200"); - DEAD_STRING("F_SP102"); - DEAD_STRING(""); - DEAD_STRING("R_SP300"); - DEAD_STRING("R_SP301"); - DEAD_STRING("T_ENEMY"); - DEAD_STRING("D_MN54"); - DEAD_STRING("D_MN05"); - DEAD_STRING("D_MN05B"); - DEAD_STRING("D_MN05A"); - DEAD_STRING("D_MN04"); - DEAD_STRING("D_MN04B"); - DEAD_STRING("D_MN04A"); - DEAD_STRING("D_MN01"); - DEAD_STRING("D_MN01B"); - DEAD_STRING("D_MN01A"); - DEAD_STRING("D_MN10"); - DEAD_STRING("D_MN10B"); - DEAD_STRING("D_MN10A"); - DEAD_STRING("D_MN11"); - DEAD_STRING("D_MN11B"); - DEAD_STRING("D_MN11A"); - DEAD_STRING("D_MN06"); - DEAD_STRING("D_MN06B"); - DEAD_STRING("D_MN06A"); - DEAD_STRING("D_MN07"); - DEAD_STRING("D_MN07B"); - DEAD_STRING("D_MN07A"); - DEAD_STRING("D_MN08"); - DEAD_STRING("D_MN08B"); - DEAD_STRING("D_MN08C"); - DEAD_STRING("D_MN08A"); - DEAD_STRING("D_MN08D"); - DEAD_STRING("D_MN09"); - DEAD_STRING("D_MN09A"); - DEAD_STRING("D_MN09B"); - DEAD_STRING("D_MN09C"); - DEAD_STRING("D_SB00"); - DEAD_STRING("D_SB01"); - DEAD_STRING("D_SB02"); - DEAD_STRING("D_SB03"); - DEAD_STRING("D_SB04"); - DEAD_STRING("D_SB05"); - DEAD_STRING("D_SB06"); - DEAD_STRING("D_SB07"); - DEAD_STRING("D_SB08"); - DEAD_STRING("D_SB09"); - DEAD_STRING("D_SB10"); -} - /* 802B61E8-802B671C 2B0B28 0534+00 1/0 7/7 11/11 .text setDemoName__11Z2StatusMgrFPc */ void Z2StatusMgr::setDemoName(char* demoName) { if (mDemoStatus == 11) { @@ -191,20 +189,26 @@ void Z2StatusMgr::setDemoName(char* demoName) { Z2GetSceneMgr()->sceneBgmStart(); } } + if (demoName == NULL) { + OS_REPORT("[Z2StatusMgr::setDemoName] → No demo\n"); if (mDemoStatus == 3) { Z2GetSeqMgr()->setBattleBgmOff(false); } else if (mDemoStatus == 4) { - Z2GetSeqMgr()->unMuteSceneBgm(struct_80450861); + Z2GetSeqMgr()->unMuteSceneBgm(Z2Param::BGM_CROSS_FADEIN_TIME); } else if (mDemoStatus == 5) { + OS_REPORT("[Z2StatusMgr::setDemoName] HIDDEN_VIL DEMO_END\n"); Z2GetSeqMgr()->subBgmStop(); } else if (mDemoStatus == 9) { - Z2GetSeqMgr()->bgmStreamStop(0x3c); + Z2GetSeqMgr()->bgmStreamStop(60); } + if (mDemoStatus != 8) { mDemoStatus = 0; } } else { + OS_REPORT("[Z2StatusMgr::setDemoName] demoName : %s\n", demoName); + bool bVar1 = false; if (mDemoStatus == 8) { if (strcmp(demoName, "force_end") == 0) { @@ -235,45 +239,47 @@ void Z2StatusMgr::setDemoName(char* demoName) { mDemoStatus = 10; } else { switch (Z2GetSceneMgr()->getCurrentSceneNum()) { - case 0xe: + case Z2SCENE_HIDDEN_VILLAGE: if (strcmp(demoName, "R00_start") == 0) { mDemoStatus = 5; Z2GetSeqMgr()->subBgmStart(Z2BGM_HIDDEN_VIL_D1); + OS_REPORT("[Z2StatusMgr::setDemoName] HIDDEN_VIL DEMO_START\n"); } break; - case 5: + case Z2SCENE_FARON_WOODS: if (strcmp(demoName, "B_W_START") == 0) { Z2GetSeqMgr()->bgmStreamPrepare(0x200005f); Z2GetSeqMgr()->bgmStreamPlay(); mDemoStatus = 9; } break; - case 4: + case Z2SCENE_TWILIGHT_HYRULE_CASTLE: if (strcmp(demoName, "L0_rampart01") == 0) { bVar1 = true; } break; - case 0x28: + case Z2SCENE_FOREST_TEMPLE: if (strcmp(demoName, "R22-opening") == 0) { bVar1 = true; } break; - case 0x2b: + case Z2SCENE_GORON_MINES: if (strcmp(demoName, "R01-start") == 0) { bVar1 = true; } break; - case 0x2e: + case Z2SCENE_LAKEBED_TEMPLE: if (strcmp(demoName, "LV3R00OP") == 0) { bVar1 = true; } break; - case 0x31: + case Z2SCENE_ARBITERS_GROUNDS: if (strcmp(demoName, "R00_start") == 0) { bVar1 = true; } break; } + if (bVar1) { Z2GetSeqMgr()->setBattleBgmOff(true); mDemoStatus = 3; @@ -300,14 +306,14 @@ bool Z2StatusMgr::checkDayTime() { } /* 802B6758-802B6760 -00001 0008+00 0/0 0/0 0/0 .text setEventBit__11Z2StatusMgrFPv */ -void Z2StatusMgr::setEventBit(void* i_eventBit) { - mEventBit = i_eventBit; +void Z2StatusMgr::setEventBit(void* eventBit) { + mEventBit = eventBit; } /* 802B6760-802B6784 2B10A0 0024+00 0/0 1/1 0/0 .text setCameraPolygonPos__11Z2StatusMgrFP3Vec */ -void Z2StatusMgr::setCameraPolygonPos(Vec* i_polygonPos) { - if (i_polygonPos != NULL) { - mPolygonPosition = *i_polygonPos; +void Z2StatusMgr::setCameraPolygonPos(Vec* polygonPos) { + if (polygonPos != NULL) { + mPolygonPosition = *polygonPos; } } @@ -326,11 +332,12 @@ void Z2StatusMgr::setCameraInWaterDepth(f32 depth) { mCameraInWaterDepthRatio = 1.0f; } else { mCameraInWaterDepthRatio = - Z2Calc::getParamByExp(depth, 0.0f, 2000.0f, 0.2f, 0.0f, 1.0f, Z2Calc::CURVE_SIGN_0); + Z2Calc::getParamByExp(depth, 0.0f, 2000.0f, 0.2f, 0.0f, 1.0f, Z2Calc::CURVE_NEGATIVE); } Z2GetFxLineMgr()->setUnderWaterFx(true); } } } + mUnderwaterDepth = depth; } diff --git a/src/Z2AudioLib/Z2WolfHowlMgr.cpp b/src/Z2AudioLib/Z2WolfHowlMgr.cpp index 5e51235357..8209c03978 100644 --- a/src/Z2AudioLib/Z2WolfHowlMgr.cpp +++ b/src/Z2AudioLib/Z2WolfHowlMgr.cpp @@ -1,9 +1,4 @@ -// -// Z2WolfHowlMgr -// - #include "Z2AudioLib/Z2WolfHowlMgr.h" -#include "Z2AudioLib/Z2Creature.h" #include "Z2AudioLib/Z2Calc.h" #include "Z2AudioLib/Z2SeqMgr.h" #include "Z2AudioLib/Z2SeMgr.h" @@ -13,27 +8,27 @@ #include "d/d_demo.h" /* 80450880-80450884 000300 0004+00 2/2 0/0 0/0 .sdata cPitchDown */ -static f32 cPitchDown = 0.8909000158309937f; +static f32 cPitchDown = 0.8909f; /* 80450884-80450888 000304 0004+00 4/4 0/0 0/0 .sdata cPitchCenter */ static f32 cPitchCenter = 1.0f; /* 80450888-8045088C 000308 0004+00 2/2 0/0 0/0 .sdata cPitchUp */ -static f32 cPitchUp = 1.1892000436782837f; +static f32 cPitchUp = 1.1892f; static u8 struct_8045088C = 7; static u8 struct_8045088D = 7; /* 8045088E-80450890 00030E 0002+00 4/4 0/0 0/0 .sdata None */ -static u8 data_8045088E = 0x1E; -static u8 data_8045088F = 0x00; +static u8 cBeginHowlTime = 30; +static u8 data_8045088F = 0; /* 80450890-80450894 000310 0004+00 1/1 0/0 0/0 .sdata cR_FlatWidth */ -static f32 cR_FlatWidth = 0.9438700079917908f; +static f32 cR_FlatWidth = 0.94387f; // 1.0f / 12th root of 2 /* 80450894-80450898 -00001 0004+00 3/3 0/0 0/0 .sdata None */ -static u8 struct_80450894 = 0x05; -static u8 struct_80450895 = 0x1E; +static u8 struct_80450894 = 5; +static u8 struct_80450895 = 30; /* 80450898-8045089C 000318 0004+00 1/1 0/0 0/0 .sdata sStickHigh */ static f32 sStickHigh = 0.5f; @@ -42,76 +37,128 @@ static f32 sStickHigh = 0.5f; static f32 sStickCenter = 1.0f / 5.0f; /* 804508A0-804508A8 000320 0008+00 1/0 0/0 0/0 .sdata sHowlTobikusa */ -static SongNote sHowlTobikusa[4] = { - {0x01, 0x1E}, - {0x03, 0x1E}, - {0x01, 0x1E}, - {0x03, 0x1E}, +static Z2WolfHowlLine sHowlTobikusa[4] = { + {HOWL_LINE_HIGH, 30}, + {HOWL_LINE_LOW, 30}, + {HOWL_LINE_HIGH, 30}, + {HOWL_LINE_LOW, 30}, }; /* 803CBC50-803CBC5C 028D70 000C+00 1/0 0/0 0/0 .data sHowlUmakusa */ -static SongNote sHowlUmakusa[6] = { - {0x01, 0x0F}, {0x02, 0x0F}, {0x03, 0x3C}, {0x01, 0x0F}, {0x02, 0x0F}, {0x03, 0x3C}, +static Z2WolfHowlLine sHowlUmakusa[6] = { + {HOWL_LINE_HIGH, 15}, + {HOWL_LINE_MID, 15}, + {HOWL_LINE_LOW, 60}, + {HOWL_LINE_HIGH, 15}, + {HOWL_LINE_MID, 15}, + {HOWL_LINE_LOW, 60}, }; /* 803CBC5C-803CBC68 028D7C 000C+00 1/0 0/0 0/0 .data sHowlZeldaSong */ -static SongNote sHowlZeldaSong[6] = { - {0x02, 0x1E}, {0x01, 0x0F}, {0x03, 0x2D}, {0x02, 0x1E}, {0x01, 0x0F}, {0x03, 0x2D}, +static Z2WolfHowlLine sHowlZeldaSong[6] = { + {HOWL_LINE_MID, 30}, + {HOWL_LINE_HIGH, 15}, + {HOWL_LINE_LOW, 45}, + {HOWL_LINE_MID, 30}, + {HOWL_LINE_HIGH, 15}, + {HOWL_LINE_LOW, 45}, }; /* 803CBC68-803CBC74 028D88 000C+00 1/0 0/0 0/0 .data sHowlLightPrelude */ -static SongNote sHowlLightPrelude[6] = { - {0x01, 0x14}, {0x03, 0x28}, {0x01, 0x14}, {0x03, 0x14}, {0x02, 0x14}, {0x01, 0x1E}, +static Z2WolfHowlLine sHowlLightPrelude[6] = { + {HOWL_LINE_HIGH, 20}, + {HOWL_LINE_LOW, 40}, + {HOWL_LINE_HIGH, 20}, + {HOWL_LINE_LOW, 20}, + {HOWL_LINE_MID, 20}, + {HOWL_LINE_HIGH, 30}, }; /* 803CBC74-803CBC80 028D94 000C+00 1/0 0/0 0/0 .data sHowlSoulRequiem */ -static SongNote sHowlSoulRequiem[6] = { - {0x03, 0x1E}, {0x02, 0x0F}, {0x03, 0x0F}, {0x01, 0x1E}, {0x02, 0x1E}, {0x03, 0x1E}, +static Z2WolfHowlLine sHowlSoulRequiem[6] = { + {HOWL_LINE_LOW, 30}, + {HOWL_LINE_MID, 15}, + {HOWL_LINE_LOW, 15}, + {HOWL_LINE_HIGH, 30}, + {HOWL_LINE_MID, 30}, + {HOWL_LINE_LOW, 30}, }; /* 803CBC80-803CBC8C 028DA0 000C+00 1/0 0/0 0/0 .data sHealingSong */ -static SongNote sHealingSong[6] = { - {0x01, 0x1E}, {0x02, 0x1E}, {0x03, 0x1E}, {0x01, 0x1E}, {0x02, 0x1E}, {0x03, 0x1E}, +static Z2WolfHowlLine sHealingSong[6] = { + {HOWL_LINE_HIGH, 30}, + {HOWL_LINE_MID, 30}, + {HOWL_LINE_LOW, 30}, + {HOWL_LINE_HIGH, 30}, + {HOWL_LINE_MID, 30}, + {HOWL_LINE_LOW, 30}, }; /* 803CBC8C-803CBC9C 028DAC 000E+02 1/0 0/0 0/0 .data sNewSong1 */ -static SongNote sNewSong1[7] = { - {0x03, 0x1E}, {0x02, 0x1E}, {0x01, 0x1E}, {0x03, 0x28}, {0x02, 0x14}, {0x03, 0x1E}, {0x01, 0x1E}, +static Z2WolfHowlLine sNewSong1[7] = { + {HOWL_LINE_LOW, 30}, + {HOWL_LINE_MID, 30}, + {HOWL_LINE_HIGH, 30}, + {HOWL_LINE_LOW, 40}, + {HOWL_LINE_MID, 20}, + {HOWL_LINE_LOW, 30}, + {HOWL_LINE_HIGH, 30}, }; /* 803CBC9C-803CBCAC 028DBC 0010+00 1/0 0/0 0/0 .data sNewSong2 */ -static SongNote sNewSong2[8] = { - {0x01, 0x14}, {0x02, 0x14}, {0x03, 0x14}, {0x02, 0x3C}, {0x03, 0x14}, {0x01, 0x14}, {0x02, 0x14}, {0x03, 0x1E}, +static Z2WolfHowlLine sNewSong2[8] = { + {HOWL_LINE_HIGH, 20}, + {HOWL_LINE_MID, 20}, + {HOWL_LINE_LOW, 20}, + {HOWL_LINE_MID, 60}, + {HOWL_LINE_LOW, 20}, + {HOWL_LINE_HIGH, 20}, + {HOWL_LINE_MID, 20}, + {HOWL_LINE_LOW, 30}, }; /* 803CBCAC-803CBCC0 028DCC 0012+02 1/0 0/0 0/0 .data sNewSong3 */ -static SongNote sNewSong3[9] = { - {0x02, 0x1E}, {0x03, 0x3C}, {0x02, 0x28}, {0x01, 0x14}, {0x03, 0x3C}, {0x01, 0x14}, {0x02, 0x14}, {0x01, 0x14}, {0x02, 0x2D}, +static Z2WolfHowlLine sNewSong3[9] = { + {HOWL_LINE_MID, 30}, + {HOWL_LINE_LOW, 60}, + {HOWL_LINE_MID, 40}, + {HOWL_LINE_HIGH, 20}, + {HOWL_LINE_LOW, 60}, + {HOWL_LINE_HIGH, 20}, + {HOWL_LINE_MID, 20}, + {HOWL_LINE_HIGH, 20}, + {HOWL_LINE_MID, 45}, }; /* 803CBCC0-803CBD08 -00001 0048+00 1/1 0/0 0/0 .data sGuideData */ static Z2WolfHowlData sGuideData[9] = { - {4, sHowlTobikusa}, {6, sHowlUmakusa}, {6, sHowlZeldaSong}, - {6, sHealingSong}, {6, sHowlSoulRequiem}, {6, sHowlLightPrelude}, - {7, sNewSong1}, {8, sNewSong2}, {9, sNewSong3}, + {ARRAY_SIZE(sHowlTobikusa), sHowlTobikusa}, + {ARRAY_SIZE(sHowlUmakusa), sHowlUmakusa}, + {ARRAY_SIZE(sHowlZeldaSong), sHowlZeldaSong}, + {ARRAY_SIZE(sHealingSong), sHealingSong}, + {ARRAY_SIZE(sHowlSoulRequiem), sHowlSoulRequiem}, + {ARRAY_SIZE(sHowlLightPrelude), sHowlLightPrelude}, + {ARRAY_SIZE(sNewSong1), sNewSong1}, + {ARRAY_SIZE(sNewSong2), sNewSong2}, + {ARRAY_SIZE(sNewSong3), sNewSong3}, }; /* 802CAAC0-802CAB8C 2C5400 00CC+00 0/0 1/1 0/0 .text __ct__13Z2WolfHowlMgrFv */ -Z2WolfHowlMgr::Z2WolfHowlMgr() : JASGlobalInstance(this) { - mpCurSong = NULL; +Z2WolfHowlMgr::Z2WolfHowlMgr() : JASGlobalInstance(true) { + mNowHowlData = NULL; mNowInputValue = 0.0f; - field_0x18 = 1.0f; + mWolfHowlVolume = 1.0f; field_0x1c = 1.0f; field_0x20 = cPitchCenter; - field_0x24 = cPitchCenter; + mNowPitch = cPitchCenter; field_0x28 = 1.0f; mTimer = 0; mReleaseTimer = 0; - mCorrectCurveID = -1; - field_0x90 = -1; - field_0xba = 0; + mCorrectCurveID = Z2WOLFHOWL_NONE; + mCorrectScore = -1; + mNowLineIndex = 0; field_0xbb = 0; - field_0xbc = 0; + mNowLineScore = 0; for (u8 i = 0; i < 20; i++) { field_0x92[i] = 0; @@ -124,17 +171,17 @@ Z2WolfHowlMgr::Z2WolfHowlMgr() : JASGlobalInstance(this) { field_0x34 = 0.0f; field_0x30 = 0.0f; - mpSongList = (Z2WolfHowlData*)&sGuideData; + mGuideData = (Z2WolfHowlData*)&sGuideData; } /* 802CAB8C-802CABEC 2C54CC 0060+00 1/1 0/0 0/0 .text resetState__13Z2WolfHowlMgrFv */ void Z2WolfHowlMgr::resetState() { - field_0x18 = 1.0f; - field_0x24 = cPitchCenter; + mWolfHowlVolume = 1.0f; + mNowPitch = cPitchCenter; field_0x28 = 1.0f; mTimer = 0; mReleaseTimer = 0; - field_0xba = 0; + mNowLineIndex = 0; for (u8 i = 0; i < 10; i++) { field_0x38[i] = 0.0f; @@ -146,28 +193,31 @@ void Z2WolfHowlMgr::resetState() { } /* 802CABEC-802CACB0 2C552C 00C4+00 1/1 0/0 0/0 .text calcVolumeMod__13Z2WolfHowlMgrFf */ -void Z2WolfHowlMgr::calcVolumeMod(f32 param_0) { - if (field_0x00) { - if (mTimer < data_8045088E) { - field_0x00->getAuxiliary().moveVolume(1.0f, 0); +void Z2WolfHowlMgr::calcVolumeMod(f32) { + f32 volume; + + if (mWolfHowlHandle) { + if (mTimer < cBeginHowlTime) { + mWolfHowlHandle->getAuxiliary().moveVolume(1.0f, 0); } else { - f32 dVar7 = 1.0f; - if (mReleaseTimer != 0x0) { - dVar7 = getParamByExp(mReleaseTimer, 30.0f, 0.0f, 2.0f, 0.0f, 1.0f, Z2Calc::CURVE_SIGN_1); + volume = 1.0f; + if (mReleaseTimer != 0) { + volume = getParamByExp(mReleaseTimer, 30.0f, 0.0f, 2.0f, 0.0f, 1.0f, Z2Calc::CURVE_POSITIVE); } - field_0x18 = dVar7; - if (field_0x00) { - field_0x00->getAuxiliary().moveVolume(field_0x18, 0); + mWolfHowlVolume = volume; + + if (mWolfHowlHandle) { + mWolfHowlHandle->getAuxiliary().moveVolume(mWolfHowlVolume, 0); } - field_0x1c = field_0x18; + field_0x1c = mWolfHowlVolume; } } } /* 802CACB0-802CACCC 2C55F0 001C+00 1/1 0/0 0/0 .text getNowPitch__13Z2WolfHowlMgrFv */ f32 Z2WolfHowlMgr::getNowPitch() { - if (field_0x00) { - return field_0x00->getAuxiliary().mParams.mPitch; + if (mWolfHowlHandle) { + return mWolfHowlHandle->getAuxiliary().params_.mPitch; } return 1.0f; @@ -181,81 +231,87 @@ f32 Z2WolfHowlMgr::getNowInputValue() { /* 802CACD4-802CAED4 2C5614 0200+00 1/1 0/0 0/0 .text calcPitchMod__13Z2WolfHowlMgrFff */ void Z2WolfHowlMgr::calcPitchMod(f32 param_0, f32 param_1) { - f32 dVar12 = 1.0f; + (void)param_0; + + f32 pitch = 1.0f; field_0x20 = getNowPitch(); + if (mReleaseTimer != 0) { - f32 dVar11 = getParamByExp(mReleaseTimer, 30.0f, 0.0f, 1.0f, 0.97f, 1.0f, Z2Calc::CURVE_SIGN_0); - dVar11 = field_0x24 * dVar11; - if (field_0x00) { - field_0x00->getAuxiliary().movePitch(dVar11, 0); + f32 releaseScale = getParamByExp(mReleaseTimer, 30.0f, 0.0f, 1.0f, 0.97f, 1.0f, Z2Calc::CURVE_NEGATIVE); + pitch = mNowPitch * releaseScale; + + if (mWolfHowlHandle) { + mWolfHowlHandle->getAuxiliary().movePitch(pitch, 0); } } else { - if (mTimer < data_8045088E) { + if (mTimer < cBeginHowlTime) { field_0x34 = 0.0f; } else { - f32 dVar11 = 1.0f; + f32 inputPitch = 1.0f; if (mNowInputValue < 0.0f) { - dVar11 = Z2Calc::linearTransform(mNowInputValue, -1.0f, 0.0f, cPitchDown, 1.0f, false); + inputPitch = Z2Calc::linearTransform(mNowInputValue, -1.0f, 0.0f, cPitchDown, 1.0f, false); } else if (mNowInputValue > 0.0f) { - dVar11 = Z2Calc::linearTransform(mNowInputValue, 1.0f, 0.0f,cPitchUp, 1.0f, false); + inputPitch = Z2Calc::linearTransform(mNowInputValue, 1.0f, 0.0f,cPitchUp, 1.0f, false); } - - f32 temp = dVar11 * cPitchCenter; - f32 fVar5 = temp - (dVar12 = field_0x24); - if (fVar5 == 0.0f) { - dVar12 = dVar12; - } else if (fVar5 > 0.0f) { - dVar12 += fVar5 / struct_8045088C; + + f32 newPitch = inputPitch * cPitchCenter; + f32 pitchDiff = newPitch - mNowPitch; + if (pitchDiff == 0.0f) { + pitch = mNowPitch; + } else if (pitchDiff > 0.0f) { + pitch = mNowPitch + (pitchDiff / struct_8045088C); } else { - dVar12 += fVar5 / struct_8045088D; + pitch = mNowPitch + (pitchDiff / struct_8045088D); } } - field_0x24 = dVar12; + + mNowPitch = pitch; + f32 dVar11 = Z2Calc::linearTransform(param_1, 0.0f, 1.0f, 1.0f, cR_FlatWidth, true); f32 fVar5 = field_0x28 + (dVar11 - field_0x28) / struct_80450894; field_0x28 = fVar5; - dVar12 *= fVar5; - if (field_0x00) { - field_0x00->getAuxiliary().movePitch(dVar12, 0); + pitch *= fVar5; + + if (mWolfHowlHandle) { + mWolfHowlHandle->getAuxiliary().movePitch(pitch, 0); } } } /* 802CAED4-802CB100 2C5814 022C+00 0/0 1/1 0/0 .text startWolfHowlSound__13Z2WolfHowlMgrFffbf */ -s8 Z2WolfHowlMgr::startWolfHowlSound(f32 param_0, f32 param_1, bool param_2, f32 param_3) { - if (mCorrectCurveID > 1) { +s8 Z2WolfHowlMgr::startWolfHowlSound(f32 param_0, f32 stickValue, bool isHowl, f32 param_3) { + if (mCorrectCurveID > Z2WOLFHOWL_UMAKUSA) { Z2GetSeqMgr()->setWindStoneVol(0.0f, 0); } - if (Z2GetSeqMgr()->isItemGetDemo() || (mReleaseTimer != 0)) { - param_2 = false; + if (Z2GetSeqMgr()->isItemGetDemo() || mReleaseTimer != 0) { + isHowl = false; } else { - if (param_1 > sStickCenter) { - mNowInputValue = Z2Calc::linearTransform(param_1, sStickCenter, sStickHigh, 0.0f, 1.0f, false); + if (stickValue > sStickCenter) { + mNowInputValue = Z2Calc::linearTransform(stickValue, sStickCenter, sStickHigh, 0.0f, 1.0f, false); + } else if (stickValue < -1.0f * sStickCenter) { + mNowInputValue = Z2Calc::linearTransform(stickValue, -1.0f * sStickCenter, -1.0f * sStickHigh, 0.0f, -1.0f, false); } else { - f32 fVar1 = -1.0f * sStickCenter; - if (param_1 < fVar1) { - mNowInputValue = Z2Calc::linearTransform(param_1, fVar1, -1.0f * sStickHigh, 0.0f, -1.0f, false); - } else { - mNowInputValue = 0.0f; - } + mNowInputValue = 0.0f; } } - if (param_2) { - if (mTimer > data_8045088E) { - Z2GetSoundStarter()->startLevelSound(0x10035, &field_0x00, NULL); + if (isHowl) { + if (mTimer > cBeginHowlTime) { + Z2GetSoundStarter()->startLevelSound(Z2SE_WL_V_HOWL, &mWolfHowlHandle, NULL); } - if (field_0x00) { + + if (mWolfHowlHandle) { calcPitchMod(0.0f, 0.0f); calcVolumeMod(param_3); } + mTimer++; } else { - if (mTimer > data_8045088E) { - if (mReleaseTimer < 0x1e) { - Z2GetSoundStarter()->startLevelSound(0x10035, &field_0x00, NULL); - if (field_0x00) { + if (mTimer > cBeginHowlTime) { + if (mReleaseTimer < 30) { + Z2GetSoundStarter()->startLevelSound(Z2SE_WL_V_HOWL, &mWolfHowlHandle, NULL); + if (mWolfHowlHandle) { calcPitchMod(0.0f, 0.0f); calcVolumeMod(param_3); } @@ -274,183 +330,225 @@ s8 Z2WolfHowlMgr::startWolfHowlSound(f32 param_0, f32 param_1, bool param_2, f32 /* 802CB100-802CB320 2C5A40 0220+00 0/0 1/1 0/0 .text * setCorrectData__13Z2WolfHowlMgrFScP14Z2WolfHowlData */ -void Z2WolfHowlMgr::setCorrectData(s8 param_0, Z2WolfHowlData* param_1) { - if (param_0 == mCorrectCurveID) { +void Z2WolfHowlMgr::setCorrectData(s8 curveID, Z2WolfHowlData* data) { + if (curveID == mCorrectCurveID) { return; } - if (param_0 == -1) { - mCorrectCurveID = -1; - mpCurSong = 0; + + if (curveID == Z2WOLFHOWL_NONE) { + OS_REPORT("[Z2WolfHowMgr:setCorrectData] CorrectData NONE\n"); + mCorrectCurveID = Z2WOLFHOWL_NONE; + mNowHowlData = NULL; return; } - if (param_1 == NULL) { - if (param_0 >= 9) { - mCorrectCurveID = -1; - mpCurSong = 0; + + if (data == NULL) { + if (curveID >= Z2WOLFHOWL_MAX) { + mCorrectCurveID = Z2WOLFHOWL_NONE; + mNowHowlData = NULL; return; } - param_1 = &mpSongList[param_0]; + data = &mGuideData[curveID]; } - mCorrectCurveID = param_0; - mpCurSong = param_1; - - switch(param_0) { - case 3: - cPitchUp = 1.1224600076675415f; - cPitchCenter = 1.0594600439071655f; - cPitchDown = 0.7936859726905823f; + + JUT_ASSERT(648, data); + + mCorrectCurveID = curveID; + mNowHowlData = data; + + switch(curveID) { + case Z2WOLFHOWL_HEALINGSONG: + cPitchUp = 1.12246f; + cPitchCenter = 1.05946f; + cPitchDown = 0.793686f; break; - case 4: - cPitchUp = 1.2599060535430908f; - cPitchCenter = 0.9438700079917908f; - cPitchDown = 0.8408849835395813f; + case Z2WOLFHOWL_SOULREQUIEM: + cPitchUp = 1.259906f; + cPitchCenter = 0.94387f; + cPitchDown = 0.840885f; break; - case 6: - cPitchUp = 1.3348400592803955f; - cPitchCenter = 0.8909000158309937f; - cPitchDown = 0.8909000158309937f; + case Z2WOLFHOWL_NEWSONG1: + cPitchUp = 1.33484f; + cPitchCenter = 0.8909f; + cPitchDown = 0.8909f; break; - case 7: - cPitchUp = 1.2599060535430908f; - cPitchCenter = 0.9438700079917908f; - cPitchDown = 0.8909000158309937f; + case Z2WOLFHOWL_NEWSONG2: + cPitchUp = 1.259906f; + cPitchCenter = 0.94387f; + cPitchDown = 0.8909f; break; - case 8: - cPitchUp = 1.1224600076675415f; - cPitchCenter = 0.9438700079917908f; - cPitchDown = 0.7491499781608582f; + case Z2WOLFHOWL_NEWSONG3: + cPitchUp = 1.12246f; + cPitchCenter = 0.94387f; + cPitchDown = 0.74915f; break; default: - cPitchUp = 1.1892000436782837f; + cPitchUp = 1.1892f; cPitchCenter = 1.0f; - cPitchDown = 0.8909000158309937f; + cPitchDown = 0.8909f; break; } - field_0xbe = 0; - u32 uVar4 = 0; + mFullScore = 0; - for (u8 bVar5 = 0; bVar5 < getCorrectLineNum(); bVar5++) { - uVar4 += getCorrectLine(bVar5).length; - if (getCorrectLine(bVar5).barType != 0) { - field_0xbe += struct_80450895; - field_0xbe += getCorrectLine(bVar5).length; + u32 length = 0; + for (u8 i = 0; i < getCorrectLineNum(); i++) { + length += getCorrectLine(i).length; + if (getCorrectLine(i).type != 0) { + mFullScore += struct_80450895; + mFullScore += getCorrectLine(i).length; } } - field_0xbe -= uVar4 >> 2; + + OS_REPORT("[Z2WolfHowMgr:setCorrectData] id:%d length:%d blockNum:%d, fullScore:%d\n", + mCorrectCurveID, length, getCorrectLineNum(), mFullScore); + mFullScore -= FAST_DIV(length, 4); } /* 802CB320-802CB370 2C5C60 0050+00 3/3 2/2 0/0 .text getCorrectLine__13Z2WolfHowlMgrFUc */ -SongNote Z2WolfHowlMgr::getCorrectLine(u8 param_0) { +Z2WolfHowlLine Z2WolfHowlMgr::getCorrectLine(u8 lineIndex) { u16 local_18; - if (mpCurSong == 0 || param_0 >= mpCurSong->mLineNum) { - SongNote note; - note.barType = 0; - note.length = 0; - return note; + if (mNowHowlData == NULL || lineIndex >= mNowHowlData->lineNum) { + Z2WolfHowlLine line; + line.type = 0; + line.length = 0; + return line; } - return mpCurSong->mSongData[param_0]; + + return mNowHowlData->lineData[lineIndex]; } /* 802CB370-802CB38C 2C5CB0 001C+00 2/2 1/1 0/0 .text getCorrectLineNum__13Z2WolfHowlMgrFv */ u8 Z2WolfHowlMgr::getCorrectLineNum() { - if (mpCurSong != NULL) { - return mpCurSong->mLineNum; + if (mNowHowlData != NULL) { + return mNowHowlData->lineNum; } return 0; } -/* ############################################################################################## */ /* 804341F8-8043421C 060F18 0024+00 2/2 0/0 0/0 .bss sCorrectPhrase */ static JAISoundID sCorrectPhrase[9] = { - 0x1000052, 0x1000053, 0x1000054, 0x1000072, 0x1000068, - 0x1000055, 0x1000075, 0x100007c, 0x100007f, + Z2BGM_HOWL_TOBIKUSA, + Z2BGM_HOWL_UMAKUSA, + Z2BGM_HOWL_ZELDASONG, + Z2BGM_HEALING_HOWL, + Z2BGM_SOUL_REQ_HOWL, + Z2BGM_HOWL_LIGHT_PRLD, + Z2BGM_NEW_01_HOWL, + Z2BGM_NEW_02_HOWL, + Z2BGM_NEW_03_HOWL, }; /* 8043421C-80434240 060F3C 0024+00 2/3 0/0 0/0 .bss sWindStoneSound */ static JAISoundID sWindStoneSound[9] = { - 0xffffffff, 0xffffffff, 0x100005b, 0x1000071, 0x1000067, - 0x100005c, 0x1000074, 0x100007b, 0x100007e, + 0xFFFFFFFF, + 0xFFFFFFFF, + Z2BGM_STONE_ZELDASONG, + Z2BGM_HEALING_STONE, + Z2BGM_SOUL_REQ_STONE, + Z2BGM_STONE_LIGHT_PRLD, + Z2BGM_NEW_01_STONE, + Z2BGM_NEW_02_STONE, + Z2BGM_NEW_03_STONE, }; /* 80434240-80434268 060F60 0024+04 1/2 0/0 0/0 .bss sCorrectDuo */ static JAISoundID sCorrectDuo[9] = { - 0xffffffff, 0xffffffff, 0xffffffff, 0x1000073, 0x1000069, - 0x1000066, 0x1000076, 0x100007d, 0x1000080, + 0xFFFFFFFF, + 0xFFFFFFFF, + 0xFFFFFFFF, + Z2BGM_HEALING_DUO, + Z2BGM_SOUL_REQ_DUO, + Z2BGM_LIGHT_PRLD_DUO, + Z2BGM_NEW_01_DUO, + Z2BGM_NEW_02_DUO, + Z2BGM_NEW_03_DUO, }; /* 802CB38C-802CB650 2C5CCC 02C4+00 1/1 0/0 0/0 .text checkLine__13Z2WolfHowlMgrFv */ s8 Z2WolfHowlMgr::checkLine() { - if (mCorrectCurveID == -1 || mpCurSong == NULL) { + if (mCorrectCurveID == Z2WOLFHOWL_NONE || mNowHowlData == NULL) { return -1; } if (Z2GetSeqMgr()->isItemGetDemo()) { return mCorrectCurveID; } + if (mTimer == 0) { - if (field_0x90 > 0) { - field_0x90 = -1; + if (mCorrectScore > 0) { + OS_REPORT("↑↑↑CheckCurveDone!!! correctCount:%d / %d\n", mCorrectScore, mFullScore); + mCorrectScore = -1; } return -1; - } else if (field_0x90 >= field_0xbe) { - u32 uVar1 = 0; + } else if (mCorrectScore >= mFullScore) { + u32 length = 0; for (u8 i = 0; i < getCorrectLineNum(); i++) { - uVar1 += getCorrectLine(i).length; + length += getCorrectLine(i).length; } - if (mTimer - data_8045088E < uVar1) { + + if (mTimer - cBeginHowlTime < length) { return -1; } - Z2GetSeMgr()->seStart(0xd, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); - if (mCorrectCurveID > 2) { - if (Z2GetSceneMgr()->getCurrentSceneNum() == 0x21) { + + OS_REPORT("↑↑↑CheckCurveDone!!! correctCount:%d / %d\n", mCorrectScore, mFullScore); + + Z2GetSeMgr()->seStart(Z2SE_READ_RIDDLE_B, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + + if (mCorrectCurveID > Z2WOLFHOWL_ZELDASONG) { + if (Z2GetSceneMgr()->getCurrentSceneNum() == Z2SCENE_SHADES_REALM) { Z2GetSeqMgr()->subBgmStart(sCorrectDuo[mCorrectCurveID]); } } else { Z2GetSeqMgr()->subBgmStart(sCorrectPhrase[mCorrectCurveID]); } - field_0x90 = 0xffff; + + mCorrectScore = -1; return mCorrectCurveID; } else { if (mTimer == 1) { - field_0x90 = 0; - field_0xba = 0; - field_0xbc = 0; - } else if (mTimer >= data_8045088E) { - u32 r29 = mTimer - data_8045088E; - u32 uVar1 = 0; - for (u8 i = 0; i <= field_0xba; i++) { - uVar1 += getCorrectLine(i).length; + mCorrectScore = 0; + mNowLineIndex = 0; + mNowLineScore = 0; + OS_REPORT("↓↓↓CheckCurveStart!!! correctCount:%d, block:%d, length%d\n", mCorrectScore, mNowLineIndex, field_0x92[mNowLineIndex]); + } else if (mTimer >= cBeginHowlTime) { + u32 howlTime = mTimer - cBeginHowlTime; + + u32 length = 0; + for (u8 i = 0; i <= mNowLineIndex; i++) { + length += getCorrectLine(i).length; } - if (r29 > uVar1 && field_0xba < getCorrectLineNum()) { - field_0x90 += field_0xbc; - if (field_0xbc > getCorrectLine(field_0xba).length / 6) { - field_0x90 += struct_80450895; + + if (howlTime > length && mNowLineIndex < getCorrectLineNum()) { + mCorrectScore += mNowLineScore; + if (mNowLineScore > getCorrectLine(mNowLineIndex).length / 6) { + mCorrectScore += struct_80450895; } - field_0xba++; - field_0xbc = 0; + mNowLineIndex++; + mNowLineScore = 0; } else { if (getOnLineNum() > -1) { - field_0xbc++; + mNowLineScore++; } } } - return -1; } - - return mCorrectCurveID; + + return -1; } /* 802CB650-802CB6EC 2C5F90 009C+00 1/1 1/1 0/0 .text getOnLineNum__13Z2WolfHowlMgrFv */ s8 Z2WolfHowlMgr::getOnLineNum() { - SongNote note = getCorrectLine(field_0xba); - if ((note.barType == 1 && mNowInputValue == 1.0f) || - (note.barType == 2 && mNowInputValue == 0.0f) || - (note.barType == 3 && mNowInputValue == -1.0f)) { - s8 rv = field_0xba; + Z2WolfHowlLine line = getCorrectLine(mNowLineIndex); + u8 type = line.type; + if ((type == HOWL_LINE_HIGH && mNowInputValue == 1.0f) || + (type == HOWL_LINE_MID && mNowInputValue == 0.0f) || + (type == HOWL_LINE_LOW && mNowInputValue == -1.0f)) + { + s8 rv = mNowLineIndex; return rv; } @@ -459,49 +557,56 @@ s8 Z2WolfHowlMgr::getOnLineNum() { /* 802CB6EC-802CBA88 2C602C 039C+00 0/0 0/0 2/2 .text startWindStoneSound__13Z2WolfHowlMgrFScP3Vec */ -void Z2WolfHowlMgr::startWindStoneSound(s8 param_0, Vec* param_1) { - if (param_1 == NULL || Z2GetLink() == NULL || Z2GetLink()->getCurrentPos() == NULL) { +void Z2WolfHowlMgr::startWindStoneSound(s8 curveID, Vec* pos) { + if (pos == NULL || Z2GetLink() == NULL || Z2GetLink()->getCurrentPos() == NULL) { return; } - Vec local_60 = Z2GetAudience()->getAudioCamPos(0); - f32 dVar13 = sqrtf(VECSquareDistance(param_1, &local_60)); - if (dVar13 > 2100.0f && field_0x04) { - field_0x04->stop(); - } else if (dVar13 < 2100.0f && !field_0x04) { - Z2GetSoundMgr()->startSound(sWindStoneSound[param_0], &field_0x04, (const JGeometry::TVec3<f32>*)param_1); + + Vec audioCamPos = Z2GetAudience()->getAudioCamPos(0); + f32 camDist = sqrtf(VECSquareDistance(pos, &audioCamPos)); + if (camDist > 2100.0f && mWindStoneHandle) { + mWindStoneHandle->stop(); + } else if (camDist < 2100.0f && !mWindStoneHandle) { + Z2GetSoundMgr()->startSound(sWindStoneSound[curveID], &mWindStoneHandle, (const JGeometry::TVec3<f32>*)pos); } - if (field_0x04) { - field_0x04->fadeIn(0); - field_0x04->stop(0x1e); + + if (mWindStoneHandle) { + mWindStoneHandle->fadeIn(0); + mWindStoneHandle->stop(30); + if (Z2GetLink()->getLinkState() == 1) { - f32 fVar14 = sqrtf(VECSquareDistance(param_1, Z2GetLink()->getCurrentPos())); - f32 dVar13 = 1.0f; - if (fVar14 < 150.0f) { - dVar13 = 0.0f; - } else if (fVar14 < 2000.0f) { - dVar13 = Z2Calc::getParamByExp(fVar14, 150.0f, 2000.0f, - 0.45f, 0.05f, dVar13, Z2Calc::CURVE_SIGN_0); + f32 linkDist = sqrtf(VECSquareDistance(pos, Z2GetLink()->getCurrentPos())); + f32 volume = 1.0f; + if (linkDist < 150.0f) { + volume = 0.0f; + } else if (linkDist < 2000.0f) { + volume = Z2Calc::getParamByExp(linkDist, 150.0f, 2000.0f, + 0.45f, 0.05f, 1.0f, Z2Calc::CURVE_NEGATIVE); } - Z2GetSeqMgr()->setWindStoneVol(dVar13, 0); - field_0x04->getAuxiliary().moveVolume(0.4f, 0); + + Z2GetSeqMgr()->setWindStoneVol(volume, 0); + mWindStoneHandle->getAuxiliary().moveVolume(0.4f, 0); } else { - field_0x04->getAuxiliary().moveVolume(0.04f, 0); + mWindStoneHandle->getAuxiliary().moveVolume(0.04f, 0); } } } /* 802CBA88-802CBB58 2C63C8 00D0+00 0/0 1/1 0/0 .text startGuideMelody__13Z2WolfHowlMgrFb */ -int Z2WolfHowlMgr::startGuideMelody(bool param_0) { +int Z2WolfHowlMgr::startGuideMelody(bool startSound) { Z2GetSeqMgr()->setWindStoneVol(0.0f, 0); - if (param_0) { - Z2GetSoundMgr()->startSound(sWindStoneSound[mCorrectCurveID], &field_0x08, NULL); + + if (startSound) { + Z2GetSoundMgr()->startSound(sWindStoneSound[mCorrectCurveID], &mGuideHandle, NULL); } - if (field_0x08) { - field_0x08->fadeIn(0); - field_0x08->stop(0x1e); - return field_0x08->getCount(); + + if (mGuideHandle) { + mGuideHandle->fadeIn(0); + mGuideHandle->stop(30); + return mGuideHandle->getCount(); } + return 0; } |
