mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-09-01 00:13:05 -04:00
Z2Audio player debug work / fix actor method returns (#3140)
* Z2Audio player debug work * fix actor method returns * wii build fix
This commit is contained in:
@@ -1,46 +1,55 @@
|
||||
#include "Z2AudioLib/Z2SoundPlayer.h"
|
||||
#include "Z2AudioLib/Z2SeqMgr.h"
|
||||
#include "Z2AudioLib/Z2AudioMgr.h"
|
||||
#include "Z2AudioCS/Z2AudioCS.h"
|
||||
#include "JSystem/JUtility/JUTGamePad.h"
|
||||
|
||||
Z2SoundPlayer::Z2SoundPlayer(const char* param_1) : JAWWindow("Player for JAudio2", 500, 140), field_0x48c(field_0x46c, 8) {
|
||||
field_0x3ed = 0;
|
||||
field_0x3ee = 0;
|
||||
field_0x3ef = 0;
|
||||
field_0x3f0 = 0;
|
||||
field_0x3f4 = param_1;
|
||||
Z2SoundPlayer::Z2SoundPlayer(const char* projectName)
|
||||
: JAWWindow("Player for JAudio2", 500, 140),
|
||||
field_0x48c(field_0x46c, 8)
|
||||
{
|
||||
field_0x3ed = false;
|
||||
field_0x3ee = false;
|
||||
field_0x3ef = false;
|
||||
field_0x3f0 = false;
|
||||
|
||||
m_name = projectName;
|
||||
field_0x3f8 = 0;
|
||||
field_0x3fc = 0;
|
||||
field_0x3fa = 0;
|
||||
field_0x3fe = 0;
|
||||
field_0x400 = 0;
|
||||
field_0x402 = 0;
|
||||
field_0x444 = 0;
|
||||
m_portNum = 0;
|
||||
m_portVal = 0;
|
||||
field_0x446 = 0;
|
||||
field_0x404 = "CMD_PORT";
|
||||
field_0x408 = "END_PORT";
|
||||
field_0x40c = "STA_PORT";
|
||||
field_0x410 = "WAIT_PORT";
|
||||
field_0x414 = "NUM_PORT";
|
||||
field_0x418 = "PORT_5";
|
||||
field_0x41c = "MAP_PORT";
|
||||
field_0x420 = "NOTE_PORT";
|
||||
field_0x424 = "SE_SELECT_PORT";
|
||||
field_0x428 = "BGM_STATUS_PORT";
|
||||
field_0x42c = "BGM_PORT2";
|
||||
field_0x430 = "BGM_PORT3";
|
||||
field_0x434 = "PORT12";
|
||||
field_0x438 = "PORT13";
|
||||
field_0x43c = "FILTER_PORT";
|
||||
field_0x440 = "FX_PORT";
|
||||
|
||||
m_portNames[0] = "CMD_PORT";
|
||||
m_portNames[1] = "END_PORT";
|
||||
m_portNames[2] = "STA_PORT";
|
||||
m_portNames[3] = "WAIT_PORT";
|
||||
m_portNames[4] = "NUM_PORT";
|
||||
m_portNames[5] = "PORT_5";
|
||||
m_portNames[6] = "MAP_PORT";
|
||||
m_portNames[7] = "NOTE_PORT";
|
||||
m_portNames[8] = "SE_SELECT_PORT";
|
||||
m_portNames[9] = "BGM_STATUS_PORT";
|
||||
m_portNames[10] = "BGM_PORT2";
|
||||
m_portNames[11] = "BGM_PORT3";
|
||||
m_portNames[12] = "PORT12";
|
||||
m_portNames[13] = "PORT13";
|
||||
m_portNames[14] = "FILTER_PORT";
|
||||
m_portNames[15] = "FX_PORT";
|
||||
|
||||
u8 r30 = 0;
|
||||
field_0x448[r30++] = &field_0x3f8;
|
||||
field_0x448[r30++] = &field_0x3fa;
|
||||
field_0x448[r30++] = &field_0x3fc;
|
||||
field_0x448[r30++] = &field_0x3fe;
|
||||
field_0x448[r30++] = &field_0x400;
|
||||
field_0x448[r30++] = &field_0x402;
|
||||
field_0x448[r30] = &field_0x444;
|
||||
field_0x464 = 0;
|
||||
field_0x468 = 7;
|
||||
field_0x448[r30++] = &m_portNum;
|
||||
field_0x448[r30] = &m_portVal;
|
||||
|
||||
m_cursorY = 0;
|
||||
m_cursorMax = 7;
|
||||
field_0x4a0 = 0;
|
||||
field_0x4a4 = 1.0f;
|
||||
field_0x4a8 = 0.5f;
|
||||
@@ -48,65 +57,446 @@ Z2SoundPlayer::Z2SoundPlayer(const char* param_1) : JAWWindow("Player for JAudio
|
||||
field_0x4b0 = 0.0f;
|
||||
field_0x4b4 = 0.0f;
|
||||
field_0x4b8 = 1.0f;
|
||||
field_0x498 = Z2GetSeqMgr()->getSubBgmHandle();
|
||||
|
||||
mp_subBgmHandle = Z2GetSeqMgr()->getSubBgmHandle();
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onDraw(JAWGraphContext*) {
|
||||
void Z2SoundPlayer::onDraw(JAWGraphContext* graf) {
|
||||
JAUSoundNameTable* soundTable = JASGlobalInstance<JAUSoundNameTable>::getInstance();
|
||||
|
||||
int var_r27 = 0;
|
||||
if (field_0x3ed) {
|
||||
var_r27 = 2;
|
||||
}
|
||||
|
||||
u8 cursorY = 0;
|
||||
|
||||
graf->color(JUtility::TColor(0, 0x7F, 0xFF, 0xFF), JUtility::TColor(0, 0xFF, 0x7F, 0xFF));
|
||||
graf->print(1, cursorY++, "Project: %s", m_name);
|
||||
|
||||
graf->color(0xFF >> (u8)var_r27, 0xFF >> (u8)var_r27, 0xFF >> (u8)var_r27, 0xFF);
|
||||
graf->print(0, m_cursorY + 1, ">");
|
||||
|
||||
JUtility::TColor sp28(0xFF >> (u8)var_r27, 0xFF >> (u8)var_r27, 0xFF >> (u8)var_r27, 0xFF);
|
||||
JUtility::TColor sp24(0, 0xFF >> (u8)var_r27, 0, 0xFF);
|
||||
|
||||
onDrawSoundItem(graf, soundTable, cursorY++,
|
||||
sp28,
|
||||
sp24,
|
||||
"SEQ NUM ",
|
||||
1, 0, field_0x3f8
|
||||
);
|
||||
|
||||
graf->color(sp28);
|
||||
const char* cateName;
|
||||
if (soundTable != NULL) {
|
||||
cateName = soundTable->getGroupName(JAISoundID(0, field_0x3fa & 0xFF, 0));
|
||||
} else {
|
||||
cateName = "";
|
||||
}
|
||||
graf->print(1, cursorY++, "SE CATE %03x %s", field_0x3fa, cateName);
|
||||
|
||||
onDrawSoundItem(graf, soundTable, cursorY++,
|
||||
sp28,
|
||||
sp24,
|
||||
"SE NUM ",
|
||||
0, field_0x3fa & 0xFF, field_0x3fc
|
||||
);
|
||||
onDrawSoundItem(graf, soundTable, cursorY++,
|
||||
sp28,
|
||||
sp24,
|
||||
"STRM NUM",
|
||||
2, 0, field_0x3fe
|
||||
);
|
||||
|
||||
graf->color(sp28);
|
||||
graf->print(1, cursorY++, "CORE_SPK %03x %s", field_0x400, Z2AudioCS::getName(field_0x400));
|
||||
|
||||
graf->color(field_0x446 + 0xC0, 0xC0, 0xC0, 0xFF);
|
||||
graf->print(1, cursorY++, "PORT NUM %03x %s", m_portNum, m_portNames[m_portNum]);
|
||||
graf->print(1, cursorY++, "PORT VAL %03x", m_portVal);
|
||||
|
||||
graf->color(0, 0x50, 0xC8, 0xFF);
|
||||
if (field_0x3ee) {
|
||||
graf->print(1, cursorY, "DOLBY ON\n");
|
||||
}
|
||||
|
||||
graf->color(0xC8, 0x50, 0, 0xFF);
|
||||
if (field_0x3f0) {
|
||||
graf->print(10, cursorY, "LEVEL SE CALL");
|
||||
}
|
||||
|
||||
graf->color(0xFF, 0, 0, 0xFF);
|
||||
graf->print(0x16, cursorY, "%s", field_0x3ed ? "PAUSE ON" : "");
|
||||
|
||||
graf->color(0, 0xC8, (field_0x4a0 * 200) / 30, 0xFF);
|
||||
if (field_0x3ef) {
|
||||
graf->print(0x16, cursorY, "RESET %d\n", field_0x4a0);
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onTrigA(const JUTGamePad&) {
|
||||
void Z2SoundPlayer::onTrigA(const JUTGamePad& pad) {
|
||||
switch (m_cursorY) {
|
||||
case 0: {
|
||||
JAISoundID sp24(1, 0, (u16)field_0x3f8);
|
||||
switch (sp24) {
|
||||
case 0x100000a:
|
||||
case 0x100000b:
|
||||
case 0x100000f:
|
||||
case 0x1000012:
|
||||
case 0x1000014:
|
||||
case 0x100001b:
|
||||
case 0x100001c:
|
||||
case 0x1000024:
|
||||
Z2GetSoundMgr()->startSound(sp24, mp_subBgmHandle, NULL);
|
||||
break;
|
||||
default:
|
||||
Z2GetSoundMgr()->startSound(sp24, &field_0x494, NULL);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
case 2:
|
||||
if (!field_0x3f0) {
|
||||
JAISoundHandle* handle = field_0x48c.getFreeHandle();
|
||||
JAISoundID sp20(0, field_0x3fa & 0xFF, (u16)field_0x3fc);
|
||||
if (handle != NULL) {
|
||||
Z2GetSoundStarter()->startSound(sp20, handle, NULL);
|
||||
if (*handle) {
|
||||
Z2GetSoundStarter()->setPortData(handle, m_portNum, m_portVal, -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
Z2GetSoundMgr()->startSound(JAISoundID(2, 0, (u16)field_0x3fe), &field_0x49c, NULL);
|
||||
break;
|
||||
case 4:
|
||||
if (!field_0x3f0) {
|
||||
Z2AudioCS::start(field_0x400, 0);
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
field_0x446 = 64;
|
||||
if (m_portNum < 9) {
|
||||
JAISoundHandle* handle = field_0x48c.getFreeHandle();
|
||||
JAISoundID sp1C(0, field_0x3fa & 0xFF, (u16)field_0x3fc);
|
||||
if (handle != NULL) {
|
||||
Z2GetSoundStarter()->startSound(sp1C, handle, NULL);
|
||||
if (*handle) {
|
||||
Z2GetSoundStarter()->setPortData(handle, m_portNum, m_portVal, -1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (field_0x494) {
|
||||
Z2GetSoundStarter()->setPortData(&field_0x494, m_portNum, m_portVal, -1);
|
||||
}
|
||||
|
||||
if (mp_subBgmHandle->isSoundAttached()) {
|
||||
Z2GetSoundStarter()->setPortData(mp_subBgmHandle, m_portNum, m_portVal, -1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onTrigB(const JUTGamePad&) {
|
||||
void Z2SoundPlayer::onTrigB(const JUTGamePad& pad) {
|
||||
switch (m_cursorY) {
|
||||
case 0: {
|
||||
if (field_0x494) {
|
||||
field_0x494->stop(0);
|
||||
}
|
||||
|
||||
field_0x494.releaseSound();
|
||||
|
||||
if (mp_subBgmHandle->isSoundAttached()) {
|
||||
(*mp_subBgmHandle)->stop();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
case 2: {
|
||||
JAISoundHandle* handle = field_0x48c.getHandleSoundID(JAISoundID(0, field_0x3fa & 0xFF, (u16)field_0x3fc));
|
||||
if (handle) {
|
||||
(*handle)->stop();
|
||||
handle->releaseSound();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
if (field_0x49c) {
|
||||
field_0x49c->stop();
|
||||
}
|
||||
|
||||
field_0x49c.releaseSound();
|
||||
break;
|
||||
case 4:
|
||||
Z2AudioCS::stop(0);
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
m_portVal = 0;
|
||||
field_0x446 = 0;
|
||||
|
||||
if (field_0x494) {
|
||||
Z2GetSoundStarter()->setPortData(&field_0x494, m_portNum, m_portVal, -1);
|
||||
}
|
||||
|
||||
if (mp_subBgmHandle->isSoundAttached()) {
|
||||
Z2GetSoundStarter()->setPortData(mp_subBgmHandle, m_portNum, m_portVal, -1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::frameWork() {
|
||||
switch (m_cursorY) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
break;
|
||||
}
|
||||
|
||||
if (field_0x3ef) {
|
||||
field_0x4a0++;
|
||||
|
||||
if (Z2GetAudioMgr()->hasReset()) {
|
||||
Z2GetAudioMgr()->resetRecover();
|
||||
field_0x3ef = false;
|
||||
OS_REPORT("RESET END \n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onPadProc(const JUTGamePad&) {
|
||||
void Z2SoundPlayer::onPadProc(const JUTGamePad& pad) {
|
||||
if (field_0x3f0 && pad.testButton(PAD_BUTTON_A)) {
|
||||
switch (m_cursorY) {
|
||||
case 2: {
|
||||
JAISoundID sp14(0, field_0x3fa & 0xFF, (u16)field_0x3fc);
|
||||
JAISoundHandle* handle = field_0x48c.getHandleSoundID(sp14);
|
||||
if (handle == NULL) {
|
||||
handle = field_0x48c.getFreeHandle();
|
||||
}
|
||||
|
||||
if (handle != NULL) {
|
||||
Z2GetAudioMgr()->startLevelSound(sp14, handle, NULL);
|
||||
}
|
||||
|
||||
if (*handle) {
|
||||
Z2GetSoundStarter()->setPortData(handle, m_portNum, m_portVal, -1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
Z2AudioCS::startLevel(field_0x400, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onTrigX(const JUTGamePad&) {
|
||||
void Z2SoundPlayer::onTrigX(const JUTGamePad& pad) {
|
||||
switch (m_cursorY) {
|
||||
case 0: {
|
||||
if (field_0x494) {
|
||||
field_0x494->pause(!field_0x494->isPaused());
|
||||
}
|
||||
|
||||
if (mp_subBgmHandle->isSoundAttached()) {
|
||||
(*mp_subBgmHandle)->pause(!(*mp_subBgmHandle)->isPaused());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
case 2: {
|
||||
JAISoundHandle* handle = field_0x48c.getHandleSoundID(JAISoundID(0, field_0x3fa & 0xFF, (u16)field_0x3fc));
|
||||
if (handle) {
|
||||
(*handle)->pause(!(*handle)->isPaused());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
if (field_0x49c) {
|
||||
(field_0x49c)->pause(!(field_0x49c)->isPaused());
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
Z2AudioCS::stop(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onTrigY(const JUTGamePad&) {
|
||||
|
||||
|
||||
}
|
||||
void Z2SoundPlayer::onTrigZ(const JUTGamePad&) {
|
||||
|
||||
|
||||
}
|
||||
void Z2SoundPlayer::onTrigL(const JUTGamePad&) {
|
||||
|
||||
void Z2SoundPlayer::onTrigY(const JUTGamePad& pad) {
|
||||
if (!field_0x3ef) {
|
||||
Z2GetAudioMgr()->resetProcess(30, false);
|
||||
field_0x3ef = true;
|
||||
field_0x4a0 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onKeyLeft(const JUTGamePad&) {
|
||||
|
||||
void Z2SoundPlayer::onTrigZ(const JUTGamePad& pad) {
|
||||
bool* pvar = &field_0x3f0;
|
||||
bool newValue = *pvar ^ 1;
|
||||
*pvar = newValue;
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onKeyRight(const JUTGamePad&) {
|
||||
void Z2SoundPlayer::onTrigL(const JUTGamePad& pad) {
|
||||
bool* pvar = &field_0x3ee;
|
||||
bool newValue = *pvar ^ 1;
|
||||
*pvar = newValue;
|
||||
|
||||
if (field_0x3ee) {
|
||||
Z2GetAudioMgr()->setOutputMode(2);
|
||||
} else {
|
||||
Z2GetAudioMgr()->setOutputMode(1);
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onKeyUp(const JUTGamePad&) {
|
||||
void Z2SoundPlayer::onKeyLeft(const JUTGamePad& pad) {
|
||||
int moveMax = getCursorMoveMax(pad);
|
||||
int menuMax = getMenuNumberMax();
|
||||
|
||||
if (moveMax >= menuMax) {
|
||||
moveMax = 1;
|
||||
}
|
||||
|
||||
if (*field_0x448[m_cursorY] > moveMax - 1) {
|
||||
*field_0x448[m_cursorY] -= (s16)moveMax;
|
||||
} else {
|
||||
*field_0x448[m_cursorY] = (*field_0x448[m_cursorY] + menuMax) - moveMax;
|
||||
}
|
||||
|
||||
if (m_cursorY == 1) {
|
||||
correctSeNumber();
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onKeyDown(const JUTGamePad&) {
|
||||
void Z2SoundPlayer::onKeyRight(const JUTGamePad& pad) {
|
||||
int moveMax = getCursorMoveMax(pad);
|
||||
int menuMax = getMenuNumberMax();
|
||||
|
||||
if (moveMax >= menuMax) {
|
||||
moveMax = 1;
|
||||
}
|
||||
|
||||
if (*field_0x448[m_cursorY] < menuMax - moveMax) {
|
||||
*field_0x448[m_cursorY] += (s16)moveMax;
|
||||
} else {
|
||||
*field_0x448[m_cursorY] = (*field_0x448[m_cursorY] + moveMax) - menuMax;
|
||||
}
|
||||
|
||||
if (m_cursorY == 1) {
|
||||
correctSeNumber();
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onKeyMenu(const JUTGamePad&) {
|
||||
|
||||
void Z2SoundPlayer::onKeyUp(const JUTGamePad& pad) {
|
||||
if (m_cursorY != 0) {
|
||||
m_cursorY--;
|
||||
} else {
|
||||
m_cursorY = m_cursorMax - 1;
|
||||
}
|
||||
}
|
||||
|
||||
u32 Z2SoundPlayer::getCursorMoveMax(const JUTGamePad&) {
|
||||
|
||||
void Z2SoundPlayer::onKeyDown(const JUTGamePad& pad) {
|
||||
if (m_cursorY < m_cursorMax - 1) {
|
||||
m_cursorY++;
|
||||
} else {
|
||||
m_cursorY = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onKeyMenu(const JUTGamePad& pad) {
|
||||
bool* pvar = &field_0x3ed;
|
||||
bool newValue = *pvar ^ 1;
|
||||
*pvar = newValue;
|
||||
|
||||
Z2GetSoundMgr()->pauseAllGameSound(field_0x3ed);
|
||||
}
|
||||
|
||||
u32 Z2SoundPlayer::getCursorMoveMax(const JUTGamePad& pad) {
|
||||
u32 num = 1;
|
||||
|
||||
if (pad.testButton(PAD_TRIGGER_Z) && pad.testButton(PAD_BUTTON_X)) {
|
||||
num = 128;
|
||||
} else if (pad.testButton(PAD_TRIGGER_Z)) {
|
||||
num = 16;
|
||||
} else if (pad.testButton(PAD_BUTTON_X)) {
|
||||
num = 8;
|
||||
}
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
int Z2SoundPlayer::getMenuNumberMax() {
|
||||
JAUSoundTable* soundTable = JASGlobalInstance<JAUSoundTable>::getInstance();
|
||||
JUT_ASSERT(550, soundTable);
|
||||
|
||||
int num = 0;
|
||||
switch (m_cursorY) {
|
||||
case 0:
|
||||
num = soundTable->getNumItems_inGroup(1, 0);
|
||||
break;
|
||||
case 1:
|
||||
num = soundTable->getNumGroups_inSection(0);
|
||||
break;
|
||||
case 2:
|
||||
num = soundTable->getNumItems_inGroup(0, field_0x3fa);
|
||||
break;
|
||||
case 3:
|
||||
num = soundTable->getNumItems_inGroup(2, 0);
|
||||
break;
|
||||
case 4:
|
||||
num = Z2AudioCS::getNumOfSound();
|
||||
break;
|
||||
case 5:
|
||||
num = 16;
|
||||
break;
|
||||
case 6:
|
||||
num = 128;
|
||||
break;
|
||||
}
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::correctSeNumber() {
|
||||
JAUSoundTable* soundTable = JASGlobalInstance<JAUSoundTable>::getInstance();
|
||||
JUT_ASSERT(594, soundTable);
|
||||
|
||||
int num = soundTable->getNumItems_inGroup(0, field_0x3fa);
|
||||
if (num == 0) {
|
||||
field_0x3fc = 0;
|
||||
} else if (field_0x3fc >= num) {
|
||||
field_0x3fc = num - 1;
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundPlayer::onDrawSoundItem(JAWGraphContext* graf, JAUSoundNameTable* nameTable, int cursorY,
|
||||
const JUtility::TColor& color0, const JUtility::TColor& color1,
|
||||
const char* label, u32 sectionID, u32 groupID, u32 waveID)
|
||||
{
|
||||
static const char szNoEntry[] = "(NO ENTRY)";
|
||||
|
||||
const char* soundName = "";
|
||||
if (nameTable != NULL) {
|
||||
soundName = nameTable->getName(JAISoundID(sectionID, groupID, waveID));
|
||||
if (*soundName == 0) {
|
||||
soundName = szNoEntry;
|
||||
}
|
||||
} else {
|
||||
soundName = "";
|
||||
}
|
||||
|
||||
// !@bug comparing strings directly instead of using strcmp
|
||||
if (soundName == szNoEntry) {
|
||||
graf->color(color1);
|
||||
} else {
|
||||
graf->color(color0);
|
||||
}
|
||||
|
||||
graf->print(1, cursorY, "%s %03x %s", label, waveID, soundName);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user