marioparty4/src/REL/subchrselDll/main.c
2024-06-26 04:43:05 +02:00

167 lines
4.5 KiB
C

#include "game/audio.h"
#include "game/object.h"
#include "game/gamework_data.h"
#include "game/printfunc.h"
#include "game/pad.h"
#include "game/wipe.h"
#include "rel_sqrt_consts.h"
static void SubchrMain(void);
static u8 dirPlayer[4];
static char *playerNumTbl[4] = {
"PLAYER1",
"PLAYER2",
"PLAYER3",
"PLAYER4"
};
static char *charNameTbl[8] = {
"MARIO",
"LUIGI",
"PEACH",
"YOSHI",
"WARIO",
"DONKEY",
"DAISY",
"WALUIGI"
};
static char *extCharNameTbl[7] = {
"",
"KOOPA",
"KINOPIO",
"HEIHOH",
"TERESA",
"NOKO2",
"MKOOPA"
};
void ObjectSetup(void)
{
Process *sp8 = omInitObjMan(0x32, 0x2000);
Hu3DBGColorSet(0, 0, 0);
HuPrcChildCreate(SubchrMain, 4096, 12288, 0, HuPrcCurrentGet());
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1);
}
static u16 GetBtns(void)
{
u16 btns;
btns = HuPadBtnDown[0];
if (dirPlayer[0] != HuPadDStk[0]) {
btns |= HuPadDStk[0];
}
return btns;
}
static void SubchrMain()
{
int character[4];
int ext_character[4];
int i, cursor_pos;
for(i=0; i<4; i++) {
character[i] = GWPlayerCfg[i].character;
ext_character[i] = 0;
dirPlayer[i] = 0;
}
cursor_pos = 0;
while(1) {
int y, x;
u16 btns;
fontcolor = FONT_COLOR_YELLOW;
print8(150, 64, 2.0f, "Sub Character Select");
x = 170;
y = 120;
for(i=0; i<4; i++, y += 16) {
fontcolor = FONT_COLOR_GREEN;
print8(x, y, 2.0f, playerNumTbl[i]);
if(i == cursor_pos) {
fontcolor = FONT_COLOR_CYAN;
} else {
fontcolor = FONT_COLOR_GREEN;
}
if(ext_character[i] != 0) {
print8(x+200, y, 2.0f, extCharNameTbl[ext_character[i]]);
} else {
print8(x+200, y, 2.0f, charNameTbl[character[i]]);
}
}
if(GetBtns() & PAD_BUTTON_START) {
for(i=0; i<4; i++) {
if(ext_character[i] != 0) {
GWPlayerCfg[i].character = ext_character[i]+7;
}
}
HuAudFadeOut(30);
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1);
HuPrcSleep(wipeData.duration+1.0f);
MGSeqKillAll();
omOvlGotoEx(OVL_M433, 1, 0, 0);
do {
HuPrcVSleep();
} while(1);
} else {
if(GetBtns() & PAD_BUTTON_LEFT) {
do {
ext_character[cursor_pos]--;
if(ext_character[cursor_pos] < 0) {
ext_character[cursor_pos] = 6;
}
for(i=0; i<4; i++) {
if(cursor_pos != i) {
if(ext_character[cursor_pos] == ext_character[i] && ext_character[cursor_pos] != 0) {
break;
}
}
}
} while(i < 4);
}
if(GetBtns() & PAD_BUTTON_RIGHT) {
do {
ext_character[cursor_pos]++;
if(ext_character[cursor_pos] > 6) {
ext_character[cursor_pos] = 0;
}
for(i=0; i<4; i++) {
if(cursor_pos != i) {
if(ext_character[cursor_pos] == ext_character[i] && ext_character[cursor_pos] != 0) {
break;
}
}
}
} while(i < 4);
}
if(GetBtns() & PAD_BUTTON_DOWN) {
cursor_pos++;
}
if(GetBtns() & PAD_BUTTON_UP) {
cursor_pos--;
}
if(cursor_pos < 0) {
cursor_pos = 3;
}
if(cursor_pos > 3) {
cursor_pos = 0;
}
if(GetBtns() & PAD_BUTTON_B) {
HuAudFadeOut(30);
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1);
HuPrcSleep(wipeData.duration+1.0f);
MGSeqKillAll();
omOvlReturnEx(1, 1);
do {
HuPrcVSleep();
} while(1);
} else {
if(dirPlayer[0] != HuPadDStk[0]) {
dirPlayer[0] = HuPadDStk[0];
}
}
}
HuPrcVSleep();
}
}