summaryrefslogtreecommitdiff
path: root/src/Z2AudioLib/Z2WolfHowlMgr.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2025-11-27 21:19:33 -0800
committerGitHub <noreply@github.com>2025-11-27 21:19:33 -0800
commit6f96e665186c87f15acb6f5cb8d27665afee3130 (patch)
tree3ea70fe7d635a0f55aae44b1a386814766a46597 /src/Z2AudioLib/Z2WolfHowlMgr.cpp
parent767caeecc3e374779cccc9960b6546b74e7a9e50 (diff)
various Z2Audio / JAudio debug cleanup (#2876)
* some JAudio work * audio cleanup checkpoint * checkpoint more audio cleanup * fix symbols * more z2 cleanup * fix regression * fix build * some fixes
Diffstat (limited to 'src/Z2AudioLib/Z2WolfHowlMgr.cpp')
-rw-r--r--src/Z2AudioLib/Z2WolfHowlMgr.cpp553
1 files changed, 329 insertions, 224 deletions
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;
}