[MOD] Level Select & Sound Effects Jukebox (#76)

* level select mod

* map name

* move mod to c file

* Sfx Jukebox

* fix bank boundaries

* fix

* expert modes

* co-authored-by @petrie911

* add sfx
This commit is contained in:
Alejandro Asenjo Nitti 2024-01-12 14:11:40 -03:00 committed by GitHub
parent 410a5b017b
commit 921bceb967
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 331 additions and 129 deletions

View File

@ -235,7 +235,7 @@ void func_EBFBE0_80194BD0(void);
void func_EBFBE0_80194CE4(void);
void func_EBFBE0_801952B4(void);
void func_EBFBE0_801958DC(void);
void func_EBFBE0_80195944(void);
void Option_ExpertSoundUpdate(void);
void func_EBFBE0_80195B74(void);
void func_EBFBE0_80196260(void);
void func_EBFBE0_801962A4(void);

View File

@ -71,7 +71,6 @@ extern s32 gLevelMode;
extern s32 gTeamShields[];
extern s32 D_801778BC;
extern s32 gVersusMode;
extern s32 D_80177B48;
extern s32 D_80177B50[];
extern s32 D_80177B70[];
extern s32 D_80177E7C;

24
include/mods.h Normal file
View File

@ -0,0 +1,24 @@
#ifndef MODS_H
#define MODS_H
/**
* Level Select:
* Press left or right on the D-PAD to choose which level to play,
* useful for debugging and speedrunning training.
*/
#define MODS_LEVEL_SELECT 0
/**
* Sound Effects Jukebox:
* Ability to play sound effects inside the expert sound menu
*/
#define MODS_SFX_JUKEBOX 0
/* ************************* */
#if MODS_LEVEL_SELECT == 1
void Map_LevelSelect(void);
#endif
#endif

View File

@ -514,7 +514,7 @@ extern s32 gMainController;
extern s32 D_80177B00[4][4];
extern s32 D_80177B40;
extern u8 D_Timer_80177B44;
extern s32 D_80177B48;
extern s32 gCurrentPlanet; // D_80177B48
extern u8 D_80177B4C;
extern s32 D_80177B50[7];
extern u8 D_80177B6C;

View File

@ -1,8 +1,10 @@
Option_ExpertSoundUpdate = 0x80195944;
planet = 0x801AF4A0; // type:Planet segment:ovl_menu size:0x38
sPlanetNames = 0x801AF9F4; // type:s32 segment:ovl_menu size:0xF
GetPlanetId = 0x801A6480; // force_migration:True segment:ovl_menu
D_EBFBE0_801AE638 = 0x801AE638; // type:MenuContext segment:ovl_menu size:0x240
D_EBFBE0_801AE99C = 0x801AE99C; // force_migration:True segment:ovl_menu
sPlanetList = 0x801AF7E8;
spectrumAnalizerMode = 0x801B9318;
D_EBFBE0_801B6E50 = 0x801B6E50; // force_migration:True segment:ovl_menu
D_EBFBE0_801B7BA0 = 0x801B7BA0;
@ -106,4 +108,5 @@ D_EBFBE0_801CCC10 = 0x801CCC10;
D_EBFBE0_801CCF10 = 0x801CCF10;
D_EBFBE0_801CD210 = 0x801CD210;
D_EBFBE0_801CD510 = 0x801CD510;
sCurrentPlanetId = 0x801CD954;
// sPlanetsPositions = 0x801CE960; // force_migration:True segment:ovl_menu

View File

@ -473,7 +473,7 @@ gMainController = 0x80177AF8;
D_80177B00 = 0x80177B00;
D_80177B40 = 0x80177B40;
D_Timer_80177B44 = 0x80177B44;
D_80177B48 = 0x80177B48;
gCurrentPlanet = 0x80177B48;
D_80177B50 = 0x80177B50;
D_80177B70 = 0x80177B70;
D_80177B8C = 0x80177B8C;

View File

@ -399,14 +399,14 @@ void func_800884E4(void) {
s32 var_v1;
s32 i;
D_80177B70[D_80177B48] = gHitCount;
D_80177B70[gCurrentPlanet] = gHitCount;
var_v1 = 0xFF0000;
for (i = 0; i < 3; i++) {
if (gTeamShields[3 - i] <= 0) {
D_80177B50[D_80177B48] ^= var_v1;
D_80177B50[gCurrentPlanet] ^= var_v1;
} else {
D_80177B50[D_80177B48] |= var_v1;
D_80177B50[gCurrentPlanet] |= var_v1;
}
var_v1 >>= 8;
}

36
src/mods/levelselect.c Normal file
View File

@ -0,0 +1,36 @@
#include "global.h"
#include "fox_map.h"
extern PlanetId sPlanetList[15];
extern s32 sCurrentPlanetId;
void Map_LevelSelect(void) {
static char* sLevelSelectPlanetNames[] = {
"CORNERIA", "METEO", "TITANIA", "SECTOR X", "AQUAS", "BOLSE", "VENOM", "FORTUNA",
"AREA 6", "MACBETH", "SECTOR Z", "ZONESS", "KATINA", "SECTOR Y", "SOLAR",
};
if (gControllerPress[0].button & L_JPAD) {
gCurrentPlanet--;
if (gCurrentPlanet < 0) {
gCurrentPlanet = 14;
}
sCurrentPlanetId = sPlanetList[gCurrentPlanet];
}
if (gControllerPress[0].button & R_JPAD) {
gCurrentPlanet++;
if (gCurrentPlanet > 14) {
gCurrentPlanet = 0;
}
sCurrentPlanetId = sPlanetList[gCurrentPlanet];
}
/* Draw */
RCP_SetupDL(&gMasterDisp, 0x53);
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255);
Graphics_DisplaySmallText(20, 200, 1.0f, 1.0f, "PLANET:");
Graphics_DisplaySmallText(80, 200, 1.0f, 1.0f, sLevelSelectPlanetNames[gCurrentPlanet]);
}

119
src/mods/sfxjukebox.c Normal file
View File

@ -0,0 +1,119 @@
#include "global.h"
#include "fox_map.h"
u32 prevSfx = 0;
u32 sfx = 0x09000000;
s32 sfxId = 0;
s32 sfxBank = 0;
int holdTimer = 0;
void decimalToHex(int num, char* hexString, size_t hexStringLength) {
int i;
// Define hexadecimal digits
char hexDigits[] = "0123456789ABCDEF";
// Check for null pointer or insufficient buffer size
if (hexString == NULL || hexStringLength < 9) {
// You might need to adjust the buffer size based on the maximum expected length
return;
}
// Ensure the buffer is null-terminated
hexString[8] = '\0';
// Iterate through each hex digit
for (i = 7; i >= 0; --i) {
// Extract the 4 bits representing one hex digit
int hexValue = (num >> (i * 4)) & 0xF;
// Convert the 4-bit value to its corresponding hex character
hexString[7 - i] = hexDigits[hexValue];
}
}
void Option_ExpertSoundUpdate(void) {
char hexString[9]; // Buffer to store the hexadecimal string
if ((gControllerPress[gMainController].button & R_TRIG) && (sfxBank < 4)) {
sfxBank++;
} else if ((gControllerPress[gMainController].button & L_TRIG) && (sfxBank > 0)) {
sfxBank--;
}
sfx &= 0x0FFFFFFF;
sfx |= (sfxBank << 28);
if (gControllerHold[gMainController].button & (U_JPAD | D_JPAD)) {
holdTimer++;
} else {
holdTimer = 0;
}
if (((gControllerHold[gMainController].button & U_JPAD) && (holdTimer > 15)) ||
(gControllerPress[gMainController].button & U_JPAD)) {
sfxId++;
} else if (((gControllerHold[gMainController].button & D_JPAD) && (holdTimer > 15)) ||
(gControllerPress[gMainController].button & D_JPAD)) {
sfxId--;
} else if (gControllerPress[gMainController].button & L_JPAD) {
sfxId -= 0x10;
} else if (gControllerPress[gMainController].button & R_JPAD) {
sfxId += 0x10;
}
if (((sfxBank == 0) || (sfxBank == 4)) && (sfxId > 0x3F)) {
sfxId = 0x3F;
} else if (((sfxBank == 2) || (sfxBank == 3)) && (sfxId > 0xA7)) {
sfxId = 0xA7;
} else if ((sfxBank == 1) && (sfxId > 0x8F)) {
sfxId = 0x8F;
} else if (sfxId < 0) {
sfxId = 0;
}
sfx &= 0xFFFFFF00;
sfx |= sfxId & 0xFF;
if (prevSfx != sfx) {
Audio_PlaySfx(0x49000002, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
prevSfx = sfx;
}
decimalToHex(sfx, hexString, sizeof(hexString));
if (gControllerPress[gMainController].button & A_BUTTON) {
func_800182F4(0x100100FF);
func_800182F4(0x110100FF);
Audio_PlaySfx(sfx, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
D_EBFBE0_801B9320 = true;
}
if (gControllerPress[gMainController].button & B_BUTTON) {
if (!D_EBFBE0_801B9320) {
func_8001D444(0, 36, 0, 255);
gDrawMode = DRAWMODE_0;
D_EBFBE0_801B9124 = 1000;
D_EBFBE0_801B912C = 0;
D_EBFBE0_801B9244 = 1;
} else {
Audio_PlaySfx(0x4900101D, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
Audio_KillSfx(&D_800C5D28);
func_800182F4(0x100100FF);
func_800182F4(0x110100FF);
D_EBFBE0_801B9320 = false;
}
}
// Spectrum Analizer mode selector
if (gControllerPress[gMainController].button & R_CBUTTONS) {
spectrumAnalizerMode++;
if (spectrumAnalizerMode > 2) {
spectrumAnalizerMode = 0;
}
}
/* Draw */
RCP_SetupDL(&gMasterDisp, 0x53);
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255);
Graphics_DisplaySmallText(20, 50, 1.0f, 1.0f, "SFX ID:");
Graphics_DisplaySmallText(80, 50, 1.0f, 1.0f, hexString);
}

View File

@ -4,6 +4,8 @@
* Description: Starfox Map Handler
*/
#include "mods.h"
// #include "prevent_bss_reordering2.h"
#include "global.h"
#include "fox_map.h"
@ -41,7 +43,7 @@ s32 D_EBFBE0_801CD944; // mapState
s32 D_EBFBE0_801CD948;
s32 D_EBFBE0_801CD94C;
s32 D_EBFBE0_801CD950;
s32 D_EBFBE0_801CD954; // sCurrentPlanetId
s32 sCurrentPlanetId; // sCurrentPlanetId
s32 D_EBFBE0_801CD958;
s32 D_EBFBE0_801CD95C;
s32 D_EBFBE0_801CD960;
@ -215,7 +217,7 @@ extern s32 D_EBFBE0_801CD944; // mapState
extern s32 D_EBFBE0_801CD948;
extern s32 D_EBFBE0_801CD94C;
extern s32 D_EBFBE0_801CD950;
extern s32 D_EBFBE0_801CD954; // sCurrentPlanetId
extern s32 sCurrentPlanetId; // sCurrentPlanetId
extern s32 D_EBFBE0_801CD958;
extern s32 D_EBFBE0_801CD95C;
extern s32 D_EBFBE0_801CD960;
@ -419,7 +421,7 @@ Planet planet[PLANET_MAX] = {
};
// unused
PlanetId D_EBFBE0_801AF7E8[] = {
PlanetId sPlanetList[] = {
PLANET_CORNERIA, PLANET_METEO, PLANET_TITANIA, PLANET_SECTOR_X, PLANET_AQUAS,
PLANET_BOLSE, PLANET_VENOM, PLANET_FORTUNA, PLANET_AREA_6, PLANET_MACBETH,
PLANET_SECTOR_Z, PLANET_ZONESS, PLANET_KATINA, PLANET_SECTOR_Y, PLANET_SOLAR,
@ -1533,9 +1535,9 @@ void func_EBFBE0_8019F164(void) {
D_EBFBE0_801CD93C = D_80177930;
D_EBFBE0_801CD954 = GetPlanetId(gCurrentLevel);
sCurrentPlanetId = GetPlanetId(gCurrentLevel);
D_EBFBE0_801CD950 = D_EBFBE0_801CD954;
D_EBFBE0_801CD950 = sCurrentPlanetId;
D_EBFBE0_801CD980 = func_EBFBE0_8019FD1C(gCurrentLevel, 0);
@ -1543,7 +1545,7 @@ void func_EBFBE0_8019F164(void) {
if (D_800D3180[gCurrentLevel] == 2) {
D_EBFBE0_801CD98C = 1;
D_80177BB0[D_80177B48] = 1;
D_80177BB0[gCurrentPlanet] = 1;
func_EBFBE0_8019FD1C(gCurrentLevel, 1);
}
@ -1557,19 +1559,19 @@ void func_EBFBE0_8019F164(void) {
switch (D_EBFBE0_801CD93C) {
case 0:
D_EBFBE0_801CD958 = planet[D_EBFBE0_801CD954].unk_2C;
D_EBFBE0_801CD958 = planet[sCurrentPlanetId].unk_2C;
break;
case 1:
D_EBFBE0_801CD958 = planet[D_EBFBE0_801CD954].unk_30;
D_EBFBE0_801CD958 = planet[sCurrentPlanetId].unk_30;
break;
case 2:
D_EBFBE0_801CD958 = planet[D_EBFBE0_801CD954].unk_34;
D_EBFBE0_801CD958 = planet[sCurrentPlanetId].unk_34;
break;
}
D_80177B48++;
gCurrentPlanet++;
func_EBFBE0_8019FC04();
@ -1600,9 +1602,9 @@ void func_EBFBE0_8019F42C(void) {
gLifeCount[gPlayerNum] = 0;
D_EBFBE0_801CD974 = 1;
D_EBFBE0_801CD954 = GetPlanetId(gCurrentLevel);
sCurrentPlanetId = GetPlanetId(gCurrentLevel);
D_80177B70[D_80177B48] = gHitCount;
D_80177B70[gCurrentPlanet] = gHitCount;
func_EBFBE0_8019F910();
func_EBFBE0_8019FD1C(gCurrentLevel, 0);
@ -1613,8 +1615,8 @@ void func_EBFBE0_8019F42C(void) {
D_EBFBE0_801CD8E0[i] = 0;
}
if (D_80177B48 != 0) {
for (i = 0; i < D_80177B48; i++) {
if (gCurrentPlanet != 0) {
for (i = 0; i < gCurrentPlanet; i++) {
D_EBFBE0_801CD8E0[i] = func_EBFBE0_801A655C(D_80177B90[i], D_80177B90[i + 1]);
}
}
@ -1688,17 +1690,17 @@ void func_EBFBE0_8019F600(void) {
D_EBFBE0_801AFD18[i].unk_18 = 255;
}
D_80177B48 = 0;
gCurrentPlanet = 0;
gCurrentLevel = 0;
D_EBFBE0_801CD954 = 9;
sCurrentPlanetId = 9;
D_EBFBE0_801CEA9C = 0.0f;
D_EBFBE0_801CD9B0 = 0.002f;
D_EBFBE0_801CD9B4 = 0.01f;
D_EBFBE0_801CD944 = 0;
sp18 = func_EBFBE0_801A655C(D_EBFBE0_801CD954, planet[D_EBFBE0_801CD954].unk_2C);
temp_t4 = func_EBFBE0_801A655C(D_EBFBE0_801CD954, planet[D_EBFBE0_801CD954].unk_30);
sp18 = func_EBFBE0_801A655C(sCurrentPlanetId, planet[sCurrentPlanetId].unk_2C);
temp_t4 = func_EBFBE0_801A655C(sCurrentPlanetId, planet[sCurrentPlanetId].unk_30);
D_80177BD8[sp18] = 1;
D_80177BD8[temp_t4] = 1;
}
@ -1728,28 +1730,28 @@ void func_EBFBE0_8019F910(void) {
for (i = 0; i < 3; i++) {
if (gTeamShields[3 - i] <= 0) {
D_80177B50[D_80177B48] ^= mask;
D_80177B50[gCurrentPlanet] ^= mask;
} else {
D_80177B50[D_80177B48] |= mask;
D_80177B50[gCurrentPlanet] |= mask;
}
mask >>= 8;
}
}
void func_EBFBE0_8019F97C(void) {
D_EBFBE0_801CEA54 = func_EBFBE0_801A25C8(D_EBFBE0_801CD954);
D_EBFBE0_801CEA54 = func_EBFBE0_801A25C8(sCurrentPlanetId);
D_EBFBE0_801CD9F4 = D_EBFBE0_801CDA00 = planet[D_EBFBE0_801CD954].posX;
D_EBFBE0_801CD9F8 = D_EBFBE0_801CDA04 = planet[D_EBFBE0_801CD954].posY;
D_EBFBE0_801CDA08 = planet[D_EBFBE0_801CD954].posZ;
D_EBFBE0_801CD9FC = planet[D_EBFBE0_801CD954].posZ + D_EBFBE0_801CEA54;
D_EBFBE0_801CD9F4 = D_EBFBE0_801CDA00 = planet[sCurrentPlanetId].posX;
D_EBFBE0_801CD9F8 = D_EBFBE0_801CDA04 = planet[sCurrentPlanetId].posY;
D_EBFBE0_801CDA08 = planet[sCurrentPlanetId].posZ;
D_EBFBE0_801CD9FC = planet[sCurrentPlanetId].posZ + D_EBFBE0_801CEA54;
}
void func_EBFBE0_8019FA1C(void) {
PlanetId planetId;
for (planetId = 0; planetId < PLANET_MAX; planetId++) {
if (planetId == D_EBFBE0_801CD954) {
if (planetId == sCurrentPlanetId) {
if ((planetId == PLANET_SECTOR_Z) || (planetId == PLANET_SECTOR_X) || (planetId == PLANET_SECTOR_Y)) {
planet[planetId].alpha = 144;
} else {
@ -1764,7 +1766,7 @@ void func_EBFBE0_8019FA1C(void) {
void func_EBFBE0_8019FC04(void) {
s32 i;
if (D_80177B48 != 0) {
if (gCurrentPlanet != 0) {
D_EBFBE0_801CEB48[1] = 1;
D_EBFBE0_801CEB48[2] = 1;
}
@ -1952,6 +1954,9 @@ void func_EBFBE0_8019FF48(void) {
D_EBFBE0_801CDA08);
}
gFrameCount++;
#if MODS_LEVEL_SELECT == true
Map_LevelSelect();
#endif
}
void func_EBFBE0_801A01A8(void) {
@ -2469,14 +2474,14 @@ void func_EBFBE0_801A1AE8(void) {
D_EBFBE0_801CEA64 = 0.04f;
D_EBFBE0_801CEA54 = func_EBFBE0_801A25C8(D_EBFBE0_801CD954);
D_EBFBE0_801CEA54 = func_EBFBE0_801A25C8(sCurrentPlanetId);
D_EBFBE0_801CDA40.x = planet[D_EBFBE0_801CD954].posX;
D_EBFBE0_801CDA40.y = planet[D_EBFBE0_801CD954].posY;
D_EBFBE0_801CDA40.z = planet[D_EBFBE0_801CD954].posZ;
D_EBFBE0_801CDA40.x = planet[sCurrentPlanetId].posX;
D_EBFBE0_801CDA40.y = planet[sCurrentPlanetId].posY;
D_EBFBE0_801CDA40.z = planet[sCurrentPlanetId].posZ;
D_EBFBE0_801CDA50.x = planet[D_EBFBE0_801CD954].posX;
D_EBFBE0_801CDA50.y = planet[D_EBFBE0_801CD954].posY;
D_EBFBE0_801CDA50.x = planet[sCurrentPlanetId].posX;
D_EBFBE0_801CDA50.y = planet[sCurrentPlanetId].posY;
D_EBFBE0_801CDA50.z = D_EBFBE0_801CDA40.z + D_EBFBE0_801CEA54;
D_EBFBE0_801CDA2C = D_EBFBE0_801CDA00;
@ -2516,7 +2521,7 @@ void func_EBFBE0_801A1C14(void) {
D_EBFBE0_801CD95C = 10;
D_EBFBE0_801CD97C = 0;
if (D_EBFBE0_801CD954 == PLANET_CORNERIA) {
if (sCurrentPlanetId == PLANET_CORNERIA) {
D_EBFBE0_801CD95C = 5;
}
@ -2540,7 +2545,7 @@ void func_EBFBE0_801A1C14(void) {
case 1:
if (D_EBFBE0_801CD95C == 0) {
if (D_EBFBE0_801CD954 == PLANET_CORNERIA) {
if (sCurrentPlanetId == PLANET_CORNERIA) {
D_80178340 = 0;
D_EBFBE0_801CD948 = 10;
Audio_PlaySfx(0x0940A00BU, &D_800C5D28, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
@ -2549,7 +2554,7 @@ void func_EBFBE0_801A1C14(void) {
D_EBFBE0_801CD948++;
}
} else {
if (D_EBFBE0_801CD954 == PLANET_CORNERIA) {
if (sCurrentPlanetId == PLANET_CORNERIA) {
D_80178340 ^= 0xFF;
if (D_EBFBE0_801CD95C == 2) {
D_EBFBE0_801CEB34 = 0;
@ -2571,7 +2576,7 @@ void func_EBFBE0_801A1C14(void) {
if ((D_EBFBE0_801CD9FC == D_EBFBE0_801CDA50.z) && (D_EBFBE0_801CD9D8 == 0)) {
Audio_PlaySfx(0x19004013U, &D_800C5D28, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
D_EBFBE0_801CD9D8 = 1;
if (D_EBFBE0_801CD954 == PLANET_CORNERIA) {
if (sCurrentPlanetId == PLANET_CORNERIA) {
D_EBFBE0_801CEB48[0] = 1;
for (i = 0; i < 10; i++) {
D_EBFBE0_801CEB58[0][i] = Rand_ZeroOne() * 3.0f;
@ -2772,7 +2777,7 @@ void func_EBFBE0_801A2674(void) {
D_EBFBE0_801CD900[i] = 0;
}
if (i == D_EBFBE0_801CD954) {
if (i == sCurrentPlanetId) {
continue;
}
@ -2795,11 +2800,11 @@ void func_EBFBE0_801A2674(void) {
}
}
if (D_EBFBE0_801CD954 == 2) {
if (sCurrentPlanetId == 2) {
Math_SmoothStepToF(&D_EBFBE0_801AFFF8, 20.0f, 0.05f, 100.0f, 0.1f);
}
if (D_EBFBE0_801CD954 == 1) {
if (sCurrentPlanetId == 1) {
Math_SmoothStepToF(&D_EBFBE0_801B0000, 15.0f, 0.05f, 100.0f, 0.1f);
}
@ -2866,7 +2871,7 @@ void func_EBFBE0_801A281C(void) {
D_EBFBE0_801CEEE8[7].y = D_EBFBE0_801CEEE8[6].y;
D_EBFBE0_801CEEE8[7].z = D_EBFBE0_801CEEE8[6].z;
D_EBFBE0_801CEECC = func_EBFBE0_801A655C(D_EBFBE0_801CD954, D_EBFBE0_801CD958);
D_EBFBE0_801CEECC = func_EBFBE0_801A655C(sCurrentPlanetId, D_EBFBE0_801CD958);
if (D_EBFBE0_801CD93C == 2) {
D_80177BD8[D_EBFBE0_801CEECC] = 5;
@ -3010,8 +3015,8 @@ void func_EBFBE0_801A2EB8(void) {
func_EBFBE0_801A3440(D_EBFBE0_801CEEE0);
if (D_EBFBE0_801CD9C4 == 80) {
D_EBFBE0_801CD954 = D_EBFBE0_801CD958;
D_80177B90[D_80177B48] = D_EBFBE0_801CD954;
sCurrentPlanetId = D_EBFBE0_801CD958;
D_80177B90[gCurrentPlanet] = sCurrentPlanetId;
func_EBFBE0_801A6368();
}
@ -3050,7 +3055,7 @@ void func_EBFBE0_801A2EB8(void) {
#define PLANET_ID i
for (PLANET_ID = 0; PLANET_ID < PLANET_MAX; PLANET_ID++) {
if ((PLANET_ID == D_EBFBE0_801CD954) || (PLANET_ID == D_EBFBE0_801CD958)) {
if ((PLANET_ID == sCurrentPlanetId) || (PLANET_ID == D_EBFBE0_801CD958)) {
continue;
}
@ -3429,7 +3434,7 @@ void func_EBFBE0_801A4394(void) {
switch (D_EBFBE0_801CD94C) {
case 0:
if (D_80177B48 == 0) {
if (gCurrentPlanet == 0) {
D_EBFBE0_801CD9C0 = 45;
D_EBFBE0_801CD94C = 3;
} else {
@ -3438,7 +3443,7 @@ void func_EBFBE0_801A4394(void) {
break;
case 1:
if (D_80177B48 == D_EBFBE0_801CD9AC) {
if (gCurrentPlanet == D_EBFBE0_801CD9AC) {
D_EBFBE0_801CD94C = 3;
D_EBFBE0_801CD9C0 = 45;
break;
@ -3726,20 +3731,20 @@ void func_EBFBE0_801A4FC4(void) {
gLaserStrength[gPlayerNum] = 0;
gBombCount[gPlayerNum] = 3;
if (planet[D_EBFBE0_801CD954].unk_2C != -1) {
temp2 = func_EBFBE0_801A655C(D_EBFBE0_801CD954, planet[D_EBFBE0_801CD954].unk_2C);
if (planet[sCurrentPlanetId].unk_2C != -1) {
temp2 = func_EBFBE0_801A655C(sCurrentPlanetId, planet[sCurrentPlanetId].unk_2C);
D_80177BD8[temp2] = 0;
D_EBFBE0_801AFD18[temp2].unk_18 = 0;
}
if (planet[D_EBFBE0_801CD954].unk_30 != -1) {
temp = func_EBFBE0_801A655C(D_EBFBE0_801CD954, planet[D_EBFBE0_801CD954].unk_30);
if (planet[sCurrentPlanetId].unk_30 != -1) {
temp = func_EBFBE0_801A655C(sCurrentPlanetId, planet[sCurrentPlanetId].unk_30);
D_80177BD8[temp] = 0;
D_EBFBE0_801AFD18[temp].unk_18 = 0;
}
if (planet[D_EBFBE0_801CD954].unk_34 != -1) {
temp = func_EBFBE0_801A655C(D_EBFBE0_801CD954, planet[D_EBFBE0_801CD954].unk_34);
if (planet[sCurrentPlanetId].unk_34 != -1) {
temp = func_EBFBE0_801A655C(sCurrentPlanetId, planet[sCurrentPlanetId].unk_34);
D_80177BD8[temp] = 0;
D_EBFBE0_801AFD18[temp].unk_18 = 0;
}
@ -3750,32 +3755,32 @@ void func_EBFBE0_801A4FC4(void) {
D_EBFBE0_801CEEA8 = 255;
D_EBFBE0_801CEEAC = 255;
gTotalHits -= D_80177B70[D_80177B48 - 1];
D_80177B90[D_80177B48] = -1;
D_80177B70[D_80177B48 - 1] = 0;
D_80177BB0[D_80177B48 - 1] = 0;
D_80177B50[D_80177B48 - 1] = 0x00FFFFFF;
gTotalHits -= D_80177B70[gCurrentPlanet - 1];
D_80177B90[gCurrentPlanet] = -1;
D_80177B70[gCurrentPlanet - 1] = 0;
D_80177BB0[gCurrentPlanet - 1] = 0;
D_80177B50[gCurrentPlanet - 1] = 0x00FFFFFF;
gHitCount = 0;
D_80177B48--;
gCurrentPlanet--;
D_EBFBE0_801CD83C = func_EBFBE0_801A05B4();
D_EBFBE0_801CD954 = D_EBFBE0_801CD950;
sCurrentPlanetId = D_EBFBE0_801CD950;
if (planet[D_EBFBE0_801CD954].unk_2C != -1) {
temp2 = func_EBFBE0_801A655C(D_EBFBE0_801CD954, planet[D_EBFBE0_801CD954].unk_2C);
if (planet[sCurrentPlanetId].unk_2C != -1) {
temp2 = func_EBFBE0_801A655C(sCurrentPlanetId, planet[sCurrentPlanetId].unk_2C);
D_80177BD8[temp2] = 1;
D_EBFBE0_801AFD18[temp2].unk_18 = 255;
}
if (planet[D_EBFBE0_801CD954].unk_30 != -1) {
temp = func_EBFBE0_801A655C(D_EBFBE0_801CD954, planet[D_EBFBE0_801CD954].unk_30);
if (planet[sCurrentPlanetId].unk_30 != -1) {
temp = func_EBFBE0_801A655C(sCurrentPlanetId, planet[sCurrentPlanetId].unk_30);
D_80177BD8[temp] = 1;
D_EBFBE0_801AFD18[temp].unk_18 = 255;
}
if (planet[D_EBFBE0_801CD954].unk_34 != -1) {
temp = func_EBFBE0_801A655C(D_EBFBE0_801CD954, planet[D_EBFBE0_801CD954].unk_34);
if (planet[sCurrentPlanetId].unk_34 != -1) {
temp = func_EBFBE0_801A655C(sCurrentPlanetId, planet[sCurrentPlanetId].unk_34);
D_80177BD8[temp] = 0;
D_EBFBE0_801AFD18[temp].unk_18 = 0;
}
@ -3789,14 +3794,14 @@ void func_EBFBE0_801A53C8(void) {
D_EBFBE0_801CEFD8 ^= 1;
if (planet[D_EBFBE0_801CD954].unk_2C != -1) {
temp2 = func_EBFBE0_801A655C(D_EBFBE0_801CD954, planet[D_EBFBE0_801CD954].unk_2C);
if (planet[sCurrentPlanetId].unk_2C != -1) {
temp2 = func_EBFBE0_801A655C(sCurrentPlanetId, planet[sCurrentPlanetId].unk_2C);
D_80177BD8[temp2] = 0;
D_EBFBE0_801AFD18[temp2].unk_18 = 0;
}
if (planet[D_EBFBE0_801CD954].unk_30 != -1) {
temp = func_EBFBE0_801A655C(D_EBFBE0_801CD954, planet[D_EBFBE0_801CD954].unk_30);
if (planet[sCurrentPlanetId].unk_30 != -1) {
temp = func_EBFBE0_801A655C(sCurrentPlanetId, planet[sCurrentPlanetId].unk_30);
D_80177BD8[temp] = 0;
D_EBFBE0_801AFD18[temp].unk_18 = 0;
}
@ -3806,23 +3811,23 @@ void func_EBFBE0_801A53C8(void) {
D_EBFBE0_801AFD18[D_EBFBE0_801CEECC].unk_18 = 0;
D_EBFBE0_801AFD18[D_EBFBE0_801CEECC].unk_14 = 0;
D_EBFBE0_801CD954 = D_EBFBE0_801CD950;
sCurrentPlanetId = D_EBFBE0_801CD950;
if (!D_EBFBE0_801CEFD8) {
D_EBFBE0_801CD958 = planet[D_EBFBE0_801CD954].unk_2C;
D_EBFBE0_801CD958 = planet[sCurrentPlanetId].unk_2C;
} else if (D_EBFBE0_801CD93C != 2) {
if (planet[D_EBFBE0_801CD954].unk_30 != -1) {
D_EBFBE0_801CD958 = planet[D_EBFBE0_801CD954].unk_30;
if (planet[sCurrentPlanetId].unk_30 != -1) {
D_EBFBE0_801CD958 = planet[sCurrentPlanetId].unk_30;
} else {
D_EBFBE0_801CD958 = planet[D_EBFBE0_801CD954].unk_2C;
D_EBFBE0_801CD958 = planet[sCurrentPlanetId].unk_2C;
}
} else if (planet[D_EBFBE0_801CD954].unk_34 != -1) {
D_EBFBE0_801CD958 = planet[D_EBFBE0_801CD954].unk_34;
} else if (planet[sCurrentPlanetId].unk_34 != -1) {
D_EBFBE0_801CD958 = planet[sCurrentPlanetId].unk_34;
} else {
D_EBFBE0_801CD958 = planet[D_EBFBE0_801CD954].unk_2C;
D_EBFBE0_801CD958 = planet[sCurrentPlanetId].unk_2C;
}
D_EBFBE0_801CEECC = func_EBFBE0_801A655C(D_EBFBE0_801CD954, D_EBFBE0_801CD958);
D_EBFBE0_801CEECC = func_EBFBE0_801A655C(sCurrentPlanetId, D_EBFBE0_801CD958);
D_EBFBE0_801AFD18[D_EBFBE0_801CEECC].unk_18 = 255;
@ -3840,8 +3845,8 @@ void func_EBFBE0_801A53C8(void) {
D_EBFBE0_801CEEA8 = 255;
D_EBFBE0_801CEEAC = 255;
D_EBFBE0_801CD954 = D_EBFBE0_801CD958;
D_80177B90[D_80177B48] = D_EBFBE0_801CD954;
sCurrentPlanetId = D_EBFBE0_801CD958;
D_80177B90[gCurrentPlanet] = sCurrentPlanetId;
func_EBFBE0_801A6368();
@ -4030,7 +4035,7 @@ void func_EBFBE0_801A5E80(void) {
D_EBFBE0_801B8284 = 0;
D_EBFBE0_801CD9A0 = 1;
func_EBFBE0_801A6368();
D_EBFBE0_801CD9A8 = func_EBFBE0_801A62FC(D_EBFBE0_801CD954);
D_EBFBE0_801CD9A8 = func_EBFBE0_801A62FC(sCurrentPlanetId);
func_EBFBE0_801AB284();
D_EBFBE0_801B8280++;
break;
@ -4068,7 +4073,7 @@ void func_EBFBE0_801A5E80(void) {
if (D_EBFBE0_801B8284 < 120) {
D_EBFBE0_801B8284 += 15;
if (D_EBFBE0_801CD954 == PLANET_CORNERIA) {
if (sCurrentPlanetId == PLANET_CORNERIA) {
*D_EBFBE0_801CEB48 = 0;
}
} else {
@ -4201,7 +4206,7 @@ bool func_EBFBE0_801A62FC(PlanetId planet) {
}
void func_EBFBE0_801A6368(void) {
switch (D_EBFBE0_801CD954) {
switch (sCurrentPlanetId) {
case PLANET_CORNERIA:
gCurrentLevel = LEVEL_CORNERIA;
break;
@ -4351,7 +4356,7 @@ void func_EBFBE0_801A659C(void) {
func_8001A838(0x1100004C);
func_8001A838(0x1100204C);
if (D_EBFBE0_801CD954 != 9) {
if (sCurrentPlanetId != 9) {
Audio_PlaySfx(0x49000003, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
}
@ -4460,11 +4465,11 @@ void func_EBFBE0_801A6A98(PlanetId planetId) {
s32 mask;
s32 temp;
if ((planet[planetId].alpha == 0) && (planetId != D_EBFBE0_801CD954)) {
if ((planet[planetId].alpha == 0) && (planetId != sCurrentPlanetId)) {
return;
}
if ((planetId == D_EBFBE0_801CD954) && (D_EBFBE0_801CD944 == 2) && (D_EBFBE0_801CD95C != 0)) {
if ((planetId == sCurrentPlanetId) && (D_EBFBE0_801CD944 == 2) && (D_EBFBE0_801CD95C != 0)) {
mask = 0x00000001;
} else {
mask = 0xFFFFFFFF;
@ -4655,7 +4660,7 @@ void func_EBFBE0_801A6EC0(PlanetId planetId) {
void func_EBFBE0_801A7230(PlanetId planetId) {
switch (planet[planetId].unk_28) {
case 0:
if ((D_EBFBE0_801CD944 == 3 || planetId == D_EBFBE0_801CD954 || planetId == D_EBFBE0_801CD958) &&
if ((D_EBFBE0_801CD944 == 3 || planetId == sCurrentPlanetId || planetId == D_EBFBE0_801CD958) &&
D_EBFBE0_801CD944 != 1 && D_EBFBE0_801CD944 != 7) {
RCP_SetupDL(&gMasterDisp, 0x35);
} else {
@ -4665,7 +4670,7 @@ void func_EBFBE0_801A7230(PlanetId planetId) {
break;
case 2:
if ((D_EBFBE0_801CD944 == 3 || planetId == D_EBFBE0_801CD954 || planetId == D_EBFBE0_801CD958) &&
if ((D_EBFBE0_801CD944 == 3 || planetId == sCurrentPlanetId || planetId == D_EBFBE0_801CD958) &&
D_EBFBE0_801CD944 != 1 && D_EBFBE0_801CD944 != 7) {
RCP_SetupDL(&gMasterDisp, 0x17);
} else {
@ -5209,7 +5214,7 @@ void func_EBFBE0_801A8F40(void) {
Matrix_Push(&gGfxMatrix);
Matrix_Mult(gGfxMatrix, &D_EBFBE0_801CDA60[D_EBFBE0_801CD954], 1);
Matrix_Mult(gGfxMatrix, &D_EBFBE0_801CDA60[sCurrentPlanetId], 1);
Matrix_Translate(gGfxMatrix, 0.0f, D_EBFBE0_801CEAA8, 0.0f, 1);
Matrix_RotateY(gGfxMatrix, M_DTOR * D_EBFBE0_801B6A7C, 1);
Matrix_Scale(gGfxMatrix, 3.0f, 3.0f, 3.0f, 1);
@ -5227,31 +5232,31 @@ void func_EBFBE0_801A8F40(void) {
void func_EBFBE0_801A914C(void) {
D_EBFBE0_801CEAA8 = 140.0f;
if (D_EBFBE0_801CD954 == 9) {
if (sCurrentPlanetId == 9) {
D_EBFBE0_801CEAA8 = 230.0f;
}
if (D_EBFBE0_801CD954 == 1) {
if (sCurrentPlanetId == 1) {
D_EBFBE0_801CEAA8 = 210.0f;
}
if (D_EBFBE0_801CD954 == 0xE) {
if (sCurrentPlanetId == 0xE) {
D_EBFBE0_801CEAA8 = 250.0f;
}
if (D_EBFBE0_801CD954 == 4) {
if (sCurrentPlanetId == 4) {
D_EBFBE0_801CEAA8 = 150.0f;
}
if (D_EBFBE0_801CD954 == 5) {
if (sCurrentPlanetId == 5) {
D_EBFBE0_801CEAA8 = 150.0f;
}
if (D_EBFBE0_801CD954 == 3) {
if (sCurrentPlanetId == 3) {
D_EBFBE0_801CEAA8 = 150.0f;
}
if (D_EBFBE0_801CD954 == 0xD) {
if (sCurrentPlanetId == 0xD) {
D_EBFBE0_801CEAA8 = 300.0f;
}
@ -5263,14 +5268,14 @@ void func_EBFBE0_801A9224(void) {
s32 i;
s32 mask;
if ((planet[PLANET_METEO].alpha != 0) || (D_EBFBE0_801CD954 == 0)) {
if ((D_EBFBE0_801CD954 == 0) && (D_EBFBE0_801CD944 == 2) && (D_EBFBE0_801CD95C != 0)) {
if ((planet[PLANET_METEO].alpha != 0) || (sCurrentPlanetId == 0)) {
if ((sCurrentPlanetId == 0) && (D_EBFBE0_801CD944 == 2) && (D_EBFBE0_801CD95C != 0)) {
mask = 0x00000001;
} else {
mask = 0xFFFFFFFF;
}
if ((D_EBFBE0_801CD944 == 3) || ((D_EBFBE0_801CD954 == 0) && (D_EBFBE0_801CD944 != 7))) {
if ((D_EBFBE0_801CD944 == 3) || ((sCurrentPlanetId == 0) && (D_EBFBE0_801CD944 != 7))) {
RCP_SetupDL(&gMasterDisp, 0x35);
} else {
RCP_SetupDL(&gMasterDisp, 0x40);
@ -5312,17 +5317,17 @@ void func_EBFBE0_801A9448(void) {
s32 mask;
static f32 D_EBFBE0_801B6A80 = -22.0f;
if ((planet[PLANET_AREA_6].alpha == 0) && (D_EBFBE0_801CD954 != PLANET_AREA_6)) {
if ((planet[PLANET_AREA_6].alpha == 0) && (sCurrentPlanetId != PLANET_AREA_6)) {
return;
}
if ((D_EBFBE0_801CD954 == PLANET_AREA_6) && (D_EBFBE0_801CD944 == 2) && (D_EBFBE0_801CD95C != 0)) {
if ((sCurrentPlanetId == PLANET_AREA_6) && (D_EBFBE0_801CD944 == 2) && (D_EBFBE0_801CD95C != 0)) {
mask = 0x00000001;
} else {
mask = 0xFFFFFFFF;
}
if ((D_EBFBE0_801CD944 == 3) || (D_EBFBE0_801CD954 == PLANET_AREA_6)) {
if ((D_EBFBE0_801CD944 == 3) || (sCurrentPlanetId == PLANET_AREA_6)) {
RCP_SetupDL(&gMasterDisp, 0x17);
} else {
RCP_SetupDL(&gMasterDisp, 0x2E);
@ -5390,7 +5395,7 @@ void func_EBFBE0_801A9814(void) {
void func_EBFBE0_801A9910(void) {
static s32 D_EBFBE0_801B6A84[] = { 1, 13, 12, 11, 6, 2, 4, 10, 8, 0, 9, 5, 3, 7, 7 };
s32 i;
s32 var_s0 = D_EBFBE0_801B6A84[D_EBFBE0_801CD954];
s32 var_s0 = D_EBFBE0_801B6A84[sCurrentPlanetId];
RCP_SetupDL(&gMasterDisp, 0x53);
@ -5551,10 +5556,10 @@ void func_EBFBE0_801A9FD4(s32 arg0) {
f32 temp = 16.0f;
if (arg0) {
var_s3 = D_80177B48;
var_s3 = gCurrentPlanet;
} else {
if ((D_80161A34 == 7) || (D_80161A34 == 8)) {
var_s3 = D_80177B48;
var_s3 = gCurrentPlanet;
}
if (D_80161A34 == 5) {
var_s3 = D_EBFBE0_801CD9AC;
@ -5656,10 +5661,10 @@ void func_EBFBE0_801AA434(s32 arg0, f32 x, f32 y, s32 idx) {
D_80177B70[arg0]);
if (D_80161A34 == 7) {
temp = D_80177B48;
temp = gCurrentPlanet;
}
if ((D_80161A34 == 5) || (D_80161A34 == 8)) {
temp = D_80177B48 + 1;
temp = gCurrentPlanet + 1;
}
if (arg0 < temp) {
@ -5682,7 +5687,7 @@ void func_EBFBE0_801AA778(s32 arg0, f32 x, f32 y, PlanetId planetId) {
s32 mask = 0xFFFFFFFF;
if (gGameState == GSTATE_MAP) {
if (planetId == D_EBFBE0_801CD954) {
if (planetId == sCurrentPlanetId) {
mask = 0x00000010;
}
}
@ -5867,7 +5872,7 @@ void func_EBFBE0_801AB17C(f32 x, f32 y, f32 z) {
void func_EBFBE0_801AB284(void) {
D_EBFBE0_801CD940 = 0;
D_80178308 = D_EBFBE0_801AF428[D_EBFBE0_801CD954][D_EBFBE0_801CD940];
D_80178308 = D_EBFBE0_801AF428[sCurrentPlanetId][D_EBFBE0_801CD940];
D_80177D68 = D_EBFBE0_801AF420[D_EBFBE0_801CD940];
D_EBFBE0_801CF018 = 100;
D_80178728 = 78;
@ -5907,7 +5912,7 @@ void func_EBFBE0_801AB300(void) {
}
D_EBFBE0_801CD940 = 1;
D_80178308 = D_EBFBE0_801AF428[D_EBFBE0_801CD954][D_EBFBE0_801CD940];
D_80178308 = D_EBFBE0_801AF428[sCurrentPlanetId][D_EBFBE0_801CD940];
func_8001ACDC(Message_IdFromPtr(D_80178308));
@ -5985,7 +5990,7 @@ void func_EBFBE0_801AB300(void) {
break;
} else {
D_EBFBE0_801CD940 = 1;
D_80178308 = D_EBFBE0_801AF428[D_EBFBE0_801CD954][D_EBFBE0_801CD940];
D_80178308 = D_EBFBE0_801AF428[sCurrentPlanetId][D_EBFBE0_801CD940];
func_8001ACDC(Message_IdFromPtr(D_80178308));
D_80177D68 = D_EBFBE0_801AF420[D_EBFBE0_801CD940];
D_801782A4 = D_80177D68;
@ -6982,3 +6987,7 @@ void func_EBFBE0_801AD7EC(s32 xPos, s32 yPos, s32 number) {
Graphics_DisplaySmallNumber(xPos + 33.0f, yPos + 8.0f, number);
}
}
#if MODS_LEVEL_SELECT == 1
#include "../../mods/levelselect.c"
#endif

View File

@ -4,6 +4,8 @@
* Description: Starfox Option Menu Handler
*/
#include "mods.h"
#include "global.h"
#include "fox_option.h"
@ -339,7 +341,7 @@ UnkStruct_D_EBFBE0_801B9250 D_EBFBE0_801B9408;
#endif
void func_EBFBE0_80191B20(void) {
s32 var_a1_2;
bool enableExpertModes;
bool var_v0_2;
s32 i;
@ -357,18 +359,24 @@ void func_EBFBE0_80191B20(void) {
D_EBFBE0_801AE5D0[i] = D_EBFBE0_801AE5A0[i];
}
var_a1_2 = 1;
enableExpertModes = true;
for (i = 0; i < 16; i++) {
if (i == SAVE_SLOT_VENOM_1) {
continue;
}
if (!(gSaveFile.save.data.planet[i].normalMedal & 1)) {
var_a1_2 = 0;
#if MODS_LEVEL_SELECT == 1
enableExpertModes = true;
#elif MODS_SFX_JUKEBOX == 1
enableExpertModes = true;
#else
enableExpertModes = false;
#endif
break;
}
}
D_EBFBE0_801B91C8 = var_a1_2;
D_EBFBE0_801B91C8 = enableExpertModes;
D_80178348 = 0;
D_80178350 = 0;
D_80178354 = 0;
@ -399,7 +407,7 @@ void func_EBFBE0_80191B20(void) {
if ((D_80161A34 == 5) || (D_80161A34 == 8)) {
if (D_80161A34 == 8) {
D_80177B90[D_80177B48] = 13;
D_80177B90[gCurrentPlanet] = 13;
if (D_800D3180[9] == 1) {
gSaveFile.save.data.planet[SAVE_SLOT_VENOM_1].played = 1;
if (var_v0_2 != 0) {
@ -409,7 +417,7 @@ void func_EBFBE0_80191B20(void) {
}
Save_Write();
} else if (D_800D3180[9] == 2) {
D_80177BB0[D_80177B48] = 1;
D_80177BB0[gCurrentPlanet] = 1;
gSaveFile.save.data.planet[SAVE_SLOT_VENOM_2].played = 1;
if (var_v0_2) {
gSaveFile.save.data.planet[SAVE_SLOT_VENOM_2].expertClear = 1;
@ -577,7 +585,7 @@ void func_EBFBE0_80192190(void) {
case 6:
// Expert Sound Options
func_EBFBE0_80195944();
Option_ExpertSoundUpdate();
break;
case 2000:
@ -1627,7 +1635,10 @@ void func_EBFBE0_801958DC(void) {
}
// Expert Sound Options
void func_EBFBE0_80195944(void) {
#if MODS_SFX_JUKEBOX == 1
#include "../../mods/sfxjukebox.c"
#else
void Option_ExpertSoundUpdate(void) {
s32 pad;
f32 sp28 = D_EBFBE0_801B931C;
@ -1665,6 +1676,7 @@ void func_EBFBE0_80195944(void) {
}
}
}
#endif
void func_EBFBE0_80195B74(void) {
u8* temp_v0_4;
@ -3851,7 +3863,7 @@ s32 func_EBFBE0_8019C8C4(void) {
s32 var_a0 = 0;
s32 temp[10];
for (i = 0; i < D_80177B48 + 1; i++) {
for (i = 0; i < gCurrentPlanet + 1; i++) {
var_v0 += ((D_80177B50[i] & 0x00FF0000) >> 16) & 1;
var_v0 += ((D_80177B50[i] & 0x0000FF00) >> 8) & 1;
var_v0 += (D_80177B50[i] & 0x000000FF) & 1;
@ -4165,7 +4177,7 @@ void func_EBFBE0_8019D624(void) {
sp142[10][1] = D_EBFBE0_801B9150[1][0];
sp142[10][2] = D_EBFBE0_801B9150[2][0];
sp122[10] = D_80177B48 + 1;
sp122[10] = gCurrentPlanet + 1;
sp116[10] = gLifeCount[0];