mirror of
https://github.com/HarbourMasters/Starship.git
synced 2025-03-14 20:04:01 +03:00
225 lines
7.0 KiB
C
225 lines
7.0 KiB
C
#include "global.h"
|
|
#include "fox_map.h"
|
|
#include "fox_option.h"
|
|
#include "sf64audio_provisional.h"
|
|
|
|
extern s32 sSpectrumAnalyzerMode;
|
|
extern bool sMusicPlaying;
|
|
extern bool sMainMenuFromCancel;
|
|
extern OptionId sMenuEntryState;
|
|
extern s32 sMainMenuState;
|
|
|
|
static s32 showJukebox = 0;
|
|
static u32 prevSfx = NA_SE_NONE;
|
|
static u32 sfx = NA_SE_NONE;
|
|
static s32 sfxId = 0;
|
|
static u32 sfxBank = SFX_BANK_PLAYER;
|
|
static u32 sfxRange = 0;
|
|
static s32 sfxImport = 0;
|
|
static int holdTimer = 0;
|
|
static u8 sfxFlag = 0;
|
|
static u8 sfxFlags[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
|
|
static char* flagNames[] = { "F18", "F19", "F20", "F21", "F22", "F23", "STT", "F25", "F26", "SFX" };
|
|
static u8 bankSizes[] = { 0x33, 0x85, 0x9C, 0x9C, 0x37 };
|
|
static u32 sfxEditMode = 9;
|
|
static u32 srcEditMode = 0;
|
|
static u32 editMode = 0;
|
|
static s32 srcVec[3] = { 0, 0, 0 };
|
|
static f32 sfxSource[3] = { 0.0f, 0.0f, 0.0f };
|
|
static OSContPad* contPress;
|
|
static OSContPad* contHold;
|
|
|
|
void Jukebox_SelectFlag(u8* flag) {
|
|
if (contPress->button & (U_CBUTTONS | D_CBUTTONS | R_CBUTTONS | L_CBUTTONS)) {
|
|
*flag ^= 1;
|
|
}
|
|
}
|
|
|
|
void Jukebox_SelectWrap(u32* option, s32 range) {
|
|
if (contPress->button & (U_CBUTTONS | R_CBUTTONS)) {
|
|
(*option)++;
|
|
} else if (contPress->button & (D_CBUTTONS | L_CBUTTONS)) {
|
|
(*option)--;
|
|
}
|
|
*option = (*option + range) % range;
|
|
}
|
|
|
|
Jukebox_SelectClamp(s32* option, s32 range, s32 skip) {
|
|
if (contHold->button & (U_CBUTTONS | D_CBUTTONS)) {
|
|
holdTimer++;
|
|
} else {
|
|
holdTimer = 0;
|
|
}
|
|
|
|
if (((contHold->button & U_CBUTTONS) && (holdTimer > 15)) || (contPress->button & U_CBUTTONS)) {
|
|
(*option)++;
|
|
} else if (((contHold->button & D_CBUTTONS) && (holdTimer > 15)) || (contPress->button & D_CBUTTONS)) {
|
|
(*option)--;
|
|
} else if (contPress->button & L_CBUTTONS) {
|
|
*option -= skip;
|
|
} else if (contPress->button & R_CBUTTONS) {
|
|
*option += skip;
|
|
}
|
|
if (*option < 0) {
|
|
*option = 0;
|
|
} else if (*option >= range) {
|
|
*option = range - 1;
|
|
}
|
|
}
|
|
|
|
void Jukebox_UpdateSource(void) {
|
|
if (contPress->button & L_JPAD) {
|
|
srcEditMode--;
|
|
} else if (contPress->button & R_JPAD) {
|
|
srcEditMode++;
|
|
}
|
|
srcEditMode = (srcEditMode + 3) % 3;
|
|
|
|
if (contHold->button & (U_CBUTTONS | D_CBUTTONS | L_CBUTTONS | R_CBUTTONS)) {
|
|
holdTimer++;
|
|
} else {
|
|
holdTimer = 0;
|
|
}
|
|
|
|
if (((contHold->button & U_CBUTTONS) && (holdTimer > 15)) || (contPress->button & U_CBUTTONS)) {
|
|
sfxSource[srcEditMode] += 100.0f;
|
|
} else if (((contHold->button & D_CBUTTONS) && (holdTimer > 15)) || (contPress->button & D_CBUTTONS)) {
|
|
sfxSource[srcEditMode] -= 100.0f;
|
|
} else if (((contHold->button & R_CBUTTONS) && (holdTimer > 15)) || (contPress->button & R_CBUTTONS)) {
|
|
sfxSource[srcEditMode] += 10.0f;
|
|
} else if (((contHold->button & L_CBUTTONS) && (holdTimer > 15)) || (contPress->button & L_CBUTTONS)) {
|
|
sfxSource[srcEditMode] -= 10.0f;
|
|
}
|
|
}
|
|
|
|
void Jukebox_UpdateSfx(void) {
|
|
s32 i;
|
|
u16 flags = 0;
|
|
|
|
if (contPress->button & L_JPAD) {
|
|
sfxEditMode--;
|
|
} else if (contPress->button & R_JPAD) {
|
|
sfxEditMode++;
|
|
}
|
|
sfxEditMode = (sfxEditMode + 13) % 13;
|
|
switch (sfxEditMode) {
|
|
case 9:
|
|
Jukebox_SelectWrap(&sfxBank, 5);
|
|
break;
|
|
case 10:
|
|
Jukebox_SelectClamp(&sfxId, bankSizes[sfxBank], 0x10);
|
|
break;
|
|
case 11:
|
|
Jukebox_SelectFlag(&sfxFlag);
|
|
break;
|
|
case 12:
|
|
Jukebox_SelectWrap(&sfxRange, 4);
|
|
break;
|
|
case 8:
|
|
Jukebox_SelectClamp(&sfxImport, 0x100, 0x10);
|
|
break;
|
|
default:
|
|
if ((sfxEditMode >= 0) && (sfxEditMode < 8)) {
|
|
Jukebox_SelectFlag(&sfxFlags[sfxEditMode]);
|
|
}
|
|
break;
|
|
}
|
|
for (i = 0; i < 8; i++) {
|
|
flags |= sfxFlags[i] << (i + (i > 5));
|
|
}
|
|
sfx = SFX_PACK(sfxBank, sfxId, sfxRange, sfxImport, (sfxFlag << 27) | (flags << 18));
|
|
}
|
|
|
|
s32 sfxModeX[] = { 95, 104, 113, 122, 131, 140, 149, 158, 180, 0, 22, 43, 60 };
|
|
s32 srcModeX[] = { 45, 135, 225 };
|
|
|
|
void Jukebox_Update(void) {
|
|
s32 i;
|
|
|
|
contPress = &gControllerPress[gMainController];
|
|
contHold = &gControllerHold[gMainController];
|
|
|
|
if (contPress->button & U_JPAD) {
|
|
editMode--;
|
|
} else if (contPress->button & D_JPAD) {
|
|
editMode++;
|
|
}
|
|
editMode %= 2;
|
|
switch (editMode) {
|
|
case 0:
|
|
Jukebox_UpdateSfx();
|
|
break;
|
|
case 1:
|
|
Jukebox_UpdateSource();
|
|
break;
|
|
}
|
|
|
|
if (prevSfx != sfx) {
|
|
AUDIO_PLAY_SFX(NA_SE_CURSOR, gDefaultSfxSource, 4);
|
|
prevSfx = sfx;
|
|
}
|
|
|
|
if (contPress->button & A_BUTTON) {
|
|
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM, 1);
|
|
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 1);
|
|
AUDIO_PLAY_SFX(sfx, sfxSource, 4);
|
|
sMusicPlaying = true;
|
|
}
|
|
|
|
if (contPress->button & B_BUTTON) {
|
|
if (!sMusicPlaying) {
|
|
AUDIO_PLAY_SFX(NA_SE_ARWING_CANCEL, gDefaultSfxSource, 4);
|
|
AUDIO_PLAY_BGM(NA_BGM_SELECT);
|
|
gDrawMode = DRAW_NONE;
|
|
sMenuEntryState = 1000;
|
|
sMainMenuState = 0;
|
|
sMainMenuFromCancel = 1;
|
|
return;
|
|
} else {
|
|
AUDIO_PLAY_SFX(NA_SE_CANCEL, gDefaultSfxSource, 4);
|
|
Audio_KillSfxBySource(sfxSource);
|
|
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM, 1);
|
|
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 1);
|
|
sMusicPlaying = false;
|
|
}
|
|
}
|
|
|
|
// Spectrum Analyzer mode selector
|
|
if (contPress->button & Z_TRIG) {
|
|
sSpectrumAnalyzerMode++;
|
|
if (sSpectrumAnalyzerMode > 2) {
|
|
sSpectrumAnalyzerMode = 0;
|
|
}
|
|
}
|
|
|
|
/* Draw */
|
|
|
|
RCP_SetupDL(&gMasterDisp, SETUPDL_83_POINT);
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255);
|
|
|
|
Graphics_Printf("SFX ID: %08X", sfx);
|
|
Graphics_DisplaySmallText(20, 50, 1.0f, 1.0f, D_801619A0);
|
|
Graphics_DisplaySmallText(20, 80, 1.0f, 1.0f, "B ID X R S FLAG IMP");
|
|
Graphics_Printf("%d %02X %d %d %d %d%d%d%d%d%d%d%d %02X", sfxBank, sfxId, sfxFlag, sfxRange, 1, sfxFlags[0],
|
|
sfxFlags[1], sfxFlags[2], sfxFlags[3], sfxFlags[4], sfxFlags[5], sfxFlags[6], sfxFlags[7],
|
|
sfxImport);
|
|
Graphics_DisplaySmallText(20, 70, 1.0f, 1.0f, D_801619A0);
|
|
|
|
// Graphics_DisplaySmallText(80, 50, 1.0f, 1.0f, hexString);
|
|
for (i = 0; i < 3; i++) {
|
|
Graphics_Printf("%5.0f", sfxSource[i]);
|
|
Graphics_DisplaySmallText(20 + 90 * i, 100, 1.0f, 1.0f, D_801619A0);
|
|
}
|
|
Graphics_DisplaySmallText(45, 110, 1.0f, 1.0f, "X");
|
|
Graphics_DisplaySmallText(135, 110, 1.0f, 1.0f, "Y");
|
|
Graphics_DisplaySmallText(225, 110, 1.0f, 1.0f, "Z");
|
|
switch (editMode) {
|
|
case 0:
|
|
Graphics_DisplaySmallText(20 + sfxModeX[sfxEditMode], 60, 1.0f, 1.0f, "V");
|
|
break;
|
|
case 1:
|
|
Graphics_DisplaySmallText(45 + 90 * srcEditMode, 90, 1.0f, 1.0f, "V");
|
|
break;
|
|
}
|
|
}
|