Merge pull request #215 from gamemasterplc/main

Match selmenu sound functions
This commit is contained in:
gamemasterplc 2024-03-13 21:39:51 -05:00 committed by GitHub
commit 1c18d41b85
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 265 additions and 80 deletions

View file

@ -9,7 +9,7 @@ MoveSMCursor = .text:0x00000BCC; // type:function size:0x88 scope:local
SMInit = .text:0x00000C54; // type:function size:0x474 scope:local SMInit = .text:0x00000C54; // type:function size:0x474 scope:local
SMUpdate = .text:0x000010C8; // type:function size:0xA78 scope:local SMUpdate = .text:0x000010C8; // type:function size:0xA78 scope:local
SMGroupGen = .text:0x00001B40; // type:function size:0x334 scope:local SMGroupGen = .text:0x00001B40; // type:function size:0x334 scope:local
SMComCharGet = .text:0x00001E74; // type:function size:0x110 scope:local SMChangeChar = .text:0x00001E74; // type:function size:0x110 scope:local
SMCharKill = .text:0x00001F84; // type:function size:0x50 scope:local SMCharKill = .text:0x00001F84; // type:function size:0x50 scope:local
CharRandomize = .text:0x00001FD4; // type:function size:0x10C scope:local CharRandomize = .text:0x00001FD4; // type:function size:0x10C scope:local
SMCharInit = .text:0x000020E0; // type:function size:0x1F8 scope:local SMCharInit = .text:0x000020E0; // type:function size:0x1F8 scope:local
@ -56,7 +56,7 @@ lbl_1_data_18 = .data:0x00000018; // type:object size:0x6 data:string
lbl_1_data_1E = .data:0x0000001E; // type:object size:0x7 data:string lbl_1_data_1E = .data:0x0000001E; // type:object size:0x7 data:string
lbl_1_data_25 = .data:0x00000025; // type:object size:0x6 data:string lbl_1_data_25 = .data:0x00000025; // type:object size:0x6 data:string
lbl_1_data_2B = .data:0x0000002B; // type:object size:0x8 data:string lbl_1_data_2B = .data:0x0000002B; // type:object size:0x8 data:string
charTbl = .data:0x00000034; // type:object size:0x20 scope:local smCharTbl = .data:0x00000034; // type:object size:0x20 scope:local
lbl_1_data_54 = .data:0x00000054; // type:object size:0x14 data:string lbl_1_data_54 = .data:0x00000054; // type:object size:0x14 data:string
lbl_1_data_68 = .data:0x00000068; // type:object size:0x16 data:string lbl_1_data_68 = .data:0x00000068; // type:object size:0x16 data:string
lbl_1_data_7E = .data:0x0000007E; // type:object size:0x11 data:string lbl_1_data_7E = .data:0x0000007E; // type:object size:0x11 data:string
@ -127,7 +127,7 @@ lbl_1_data_4B6 = .data:0x000004B6; // type:object size:0xE data:string
lbl_1_data_4C4 = .data:0x000004C4; // type:object size:0xE data:string lbl_1_data_4C4 = .data:0x000004C4; // type:object size:0xE data:string
lbl_1_data_4D2 = .data:0x000004D2; // type:object size:0xA data:string lbl_1_data_4D2 = .data:0x000004D2; // type:object size:0xA data:string
lbl_1_data_4DC = .data:0x000004DC; // type:object size:0xF data:string lbl_1_data_4DC = .data:0x000004DC; // type:object size:0xF data:string
menuTbl = .data:0x000004EC; // type:object size:0x348 scope:local smMenuTbl = .data:0x000004EC; // type:object size:0x348 scope:local
cameraMaskTbl = .data:0x00000834; // type:object size:0x10 scope:local cameraMaskTbl = .data:0x00000834; // type:object size:0x10 scope:local
lbl_1_data_844 = .data:0x00000844; // type:object size:0x18 scope:local lbl_1_data_844 = .data:0x00000844; // type:object size:0x18 scope:local
lbl_1_data_85C = .data:0x0000085C; // type:object size:0x12 data:string lbl_1_data_85C = .data:0x0000085C; // type:object size:0x12 data:string
@ -140,7 +140,7 @@ lbl_1_data_8C8 = .data:0x000008C8; // type:object size:0x11 data:string
lbl_1_data_8D9 = .data:0x000008D9; // type:object size:0x1 lbl_1_data_8D9 = .data:0x000008D9; // type:object size:0x1
dvdMusTbl = .data:0x000008DC; // type:object size:0x20 scope:local dvdMusTbl = .data:0x000008DC; // type:object size:0x20 scope:local
smSelectPosExit = .data:0x000008FC; // type:object size:0x2 scope:local data:2byte smSelectPosExit = .data:0x000008FC; // type:object size:0x2 scope:local data:2byte
btnPrevAll = .data:0x000008FE; // type:object size:0x8 scope:local keyDStkAllPrev = .data:0x000008FE; // type:object size:0x8 scope:local
lbl_1_data_906 = .data:0x00000906; // type:object size:0xF data:string lbl_1_data_906 = .data:0x00000906; // type:object size:0xF data:string
funcId$244 = .data:0x00000918; // type:object size:0x4 scope:local data:4byte funcId$244 = .data:0x00000918; // type:object size:0x4 scope:local data:4byte
lbl_1_data_91C = .data:0x0000091C; // type:object size:0x12 data:string lbl_1_data_91C = .data:0x0000091C; // type:object size:0x12 data:string
@ -181,7 +181,7 @@ lbl_1_data_B01 = .data:0x00000B01; // type:object size:0x15 data:string
lbl_1_data_B16 = .data:0x00000B16; // type:object size:0x15 data:string lbl_1_data_B16 = .data:0x00000B16; // type:object size:0x15 data:string
lbl_1_data_B2B = .data:0x00000B2B; // type:object size:0x14 data:string lbl_1_data_B2B = .data:0x00000B2B; // type:object size:0x14 data:string
lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x2 data:2byte lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x2 data:2byte
sound3DCursorPos = .bss:0x00000002; // type:object size:0x2 scope:local data:2byte smSound3DPos = .bss:0x00000002; // type:object size:0x2 scope:local data:2byte
emiCompVal = .bss:0x00000004; // type:object size:0x2 scope:local data:2byte emiCompVal = .bss:0x00000004; // type:object size:0x2 scope:local data:2byte
emiCompDataNo = .bss:0x00000006; // type:object size:0x2 scope:local data:2byte emiCompDataNo = .bss:0x00000006; // type:object size:0x2 scope:local data:2byte
playerCfgOptionPos = .bss:0x00000008; // type:object size:0x2 scope:local data:2byte playerCfgOptionPos = .bss:0x00000008; // type:object size:0x2 scope:local data:2byte
@ -190,12 +190,12 @@ playerCfgSelF = .bss:0x0000000C; // type:object size:0x2 scope:local data:2byte
charSelProhibitF = .bss:0x0000000E; // type:object size:0x10 scope:local charSelProhibitF = .bss:0x0000000E; // type:object size:0x10 scope:local
playerDoneF = .bss:0x0000001E; // type:object size:0x8 scope:local playerDoneF = .bss:0x0000001E; // type:object size:0x8 scope:local
charModelID = .bss:0x00000026; // type:object size:0x10 scope:local charModelID = .bss:0x00000026; // type:object size:0x10 scope:local
btnReleaseAll = .bss:0x00000036; // type:object size:0x8 scope:local keyDStkAllDown = .bss:0x00000036; // type:object size:0x8 scope:local
btnAll = .bss:0x0000003E; // type:object size:0x8 scope:local keyDStkAll = .bss:0x0000003E; // type:object size:0x8 scope:local
btnDownAll = .bss:0x00000046; // type:object size:0x8 scope:local btnDownAll = .bss:0x00000046; // type:object size:0x8 scope:local
btnReleaseCurr = .bss:0x0000004E; // type:object size:0x2 scope:local data:2byte keyDStkDown = .bss:0x0000004E; // type:object size:0x2 scope:local data:2byte
btnCurr = .bss:0x00000050; // type:object size:0x2 scope:local data:2byte keyDStk = .bss:0x00000050; // type:object size:0x2 scope:local data:2byte
btnDownCurr = .bss:0x00000052; // type:object size:0x2 scope:local data:2byte btnDown = .bss:0x00000052; // type:object size:0x2 scope:local data:2byte
smSelectPos = .bss:0x00000054; // type:object size:0x2 scope:local data:2byte smSelectPos = .bss:0x00000054; // type:object size:0x2 scope:local data:2byte
smPlayerCfg = .bss:0x00000056; // type:object size:0x28 scope:local data:2byte smPlayerCfg = .bss:0x00000056; // type:object size:0x28 scope:local data:2byte
outViewObj = .bss:0x00000080; // type:object size:0x4 scope:local data:4byte outViewObj = .bss:0x00000080; // type:object size:0x4 scope:local data:4byte

View file

@ -56,6 +56,12 @@ s32 HuAudCharVoicePlay(s16 arg0, s16 arg1);
s32 HuAudCharVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); s32 HuAudCharVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2);
void HuAudCharVoicePlayEntry(s16 arg0, s16 arg1); void HuAudCharVoicePlayEntry(s16 arg0, s16 arg1);
extern float Snd3DBackSurDisOffset;
extern float Snd3DFrontSurDisOffset;
extern float Snd3DStartDisOffset;
extern float Snd3DSpeedOffset;
extern float Snd3DDistOffset;
extern s32 musicOffF;
extern u8 fadeStat; extern u8 fadeStat;
#endif #endif

View file

@ -11,9 +11,14 @@
#include "game/data.h" #include "game/data.h"
#include "game/board/main.h" #include "game/board/main.h"
#include "game/armem.h" #include "game/armem.h"
#include "game/audio.h"
#include "rel_sqrt_consts.h" #include "rel_sqrt_consts.h"
//MSM Definitions
static s8 *msmSeGetIndexPtr(s16 datano);
static void msmMusSetMasterVolume(s32 value);
#define SM_PAGE_MAX 7 #define SM_PAGE_MAX 7
#define SM_PAGE_SIZE 10 #define SM_PAGE_SIZE 10
@ -22,7 +27,7 @@
#define SM_KEY_UP 0x0001 #define SM_KEY_UP 0x0001
#define SM_KEY_DOWN 0x0002 #define SM_KEY_DOWN 0x0002
static char *charTbl[] = { static char *smCharTbl[] = {
"Mario", "Mario",
"Luigi", "Luigi",
"Peach", "Peach",
@ -39,7 +44,7 @@ typedef struct sm_entry {
OverlayID overlay; OverlayID overlay;
} SMEntry; } SMEntry;
static SMEntry menuTbl[SM_PAGE_MAX*SM_PAGE_SIZE] = { static SMEntry smMenuTbl[SM_PAGE_MAX*SM_PAGE_SIZE] = {
{ 1, "401:WAKUGURI DIVING", OVL_M401 }, { 1, "401:WAKUGURI DIVING", OVL_M401 },
{ 1, "402:PURURUN! BIGSLIME", OVL_M402 }, { 1, "402:PURURUN! BIGSLIME", OVL_M402 },
{ 1, "403:TAORERUKABE!", OVL_M403 }, { 1, "403:TAORERUKABE!", OVL_M403 },
@ -141,13 +146,13 @@ static omObjData *outViewObj;
static PlayerConfig smPlayerCfg[4]; static PlayerConfig smPlayerCfg[4];
static s16 smSelectPos; static s16 smSelectPos;
static s16 smSelectPosExit = -1; static s16 smSelectPosExit = -1;
static u16 btnDownCurr; static u16 btnDown;
static u16 btnCurr; static u16 keyDStk;
static u16 btnReleaseCurr; static u16 keyDStkDown;
static u16 btnDownAll[4]; static u16 btnDownAll[4];
static u16 btnAll[4]; static u16 keyDStkAll[4];
static u16 btnReleaseAll[4]; static u16 keyDStkAllDown[4];
static u16 btnPrevAll[4] = {}; static u16 keyDStkAllPrev[4] = {};
static void SMInit(omObjData *object); static void SMInit(omObjData *object);
static void SMRand8Tick(omObjData *object); static void SMRand8Tick(omObjData *object);
@ -214,27 +219,27 @@ static void CopyPlayerCfg(PlayerConfig *dst, PlayerConfig *src)
static void CalcBtns(void) static void CalcBtns(void)
{ {
s32 i; s32 i;
btnCurr = btnReleaseCurr = btnDownCurr = 0; keyDStk = keyDStkDown = btnDown = 0;
for(i=0; i<4; i++) { for(i=0; i<4; i++) {
btnAll[i] = btnReleaseAll[i] = btnDownAll[i] = 0; keyDStkAll[i] = keyDStkAllDown[i] = btnDownAll[i] = 0;
if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_LEFT) { if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_LEFT) {
btnAll[i] |= SM_KEY_LEFT; keyDStkAll[i] |= SM_KEY_LEFT;
} }
if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_RIGHT) { if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_RIGHT) {
btnAll[i] |= SM_KEY_RIGHT; keyDStkAll[i] |= SM_KEY_RIGHT;
} }
if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_UP) { if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_UP) {
btnAll[i] |= SM_KEY_UP; keyDStkAll[i] |= SM_KEY_UP;
} }
if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_DOWN) { if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_DOWN) {
btnAll[i] |= SM_KEY_DOWN; keyDStkAll[i] |= SM_KEY_DOWN;
} }
btnDownAll[i] |= HuPadBtnDown[i]; btnDownAll[i] |= HuPadBtnDown[i];
btnReleaseAll[i] = (btnAll[i] ^ btnPrevAll[i]) & btnAll[i]; keyDStkAllDown[i] = (keyDStkAll[i] ^ keyDStkAllPrev[i]) & keyDStkAll[i];
btnPrevAll[i] = btnAll[i]; keyDStkAllPrev[i] = keyDStkAll[i];
btnCurr |= btnAll[i]; keyDStk |= keyDStkAll[i];
btnReleaseCurr |= btnReleaseAll[i]; keyDStkDown |= keyDStkAllDown[i];
btnDownCurr |= btnDownAll[i]; btnDown |= btnDownAll[i];
} }
} }
@ -245,7 +250,7 @@ static void DrawPage(void)
fontcolor = FONT_COLOR_YELLOW; fontcolor = FONT_COLOR_YELLOW;
print8(200, 160, 2.5f, "PAGE:%d/%d", smPage+1, SM_PAGE_MAX); print8(200, 160, 2.5f, "PAGE:%d/%d", smPage+1, SM_PAGE_MAX);
for(i=0; i<SM_PAGE_SIZE; i++) { for(i=0; i<SM_PAGE_SIZE; i++) {
entry = &menuTbl[(smPage*SM_PAGE_SIZE)+i]; entry = &smMenuTbl[(smPage*SM_PAGE_SIZE)+i];
if(entry->enabled == 1) { if(entry->enabled == 1) {
if(i == smSelectPos) { if(i == smSelectPos) {
fontcolor = FONT_COLOR_CYAN; fontcolor = FONT_COLOR_CYAN;
@ -278,7 +283,7 @@ static void MoveSMPage(s16 amount)
page = SM_PAGE_MAX-1; page = SM_PAGE_MAX-1;
} }
for(i=0; i<SM_PAGE_SIZE; i++) { for(i=0; i<SM_PAGE_SIZE; i++) {
if(menuTbl[(page*SM_PAGE_SIZE)+i].enabled == 1) { if(smMenuTbl[(page*SM_PAGE_SIZE)+i].enabled == 1) {
enabled = 1; enabled = 1;
break; break;
} }
@ -306,12 +311,12 @@ static void MoveSMCursor(s16 amount)
} else if(pos < 0) { } else if(pos < 0) {
pos = SM_PAGE_SIZE-1; pos = SM_PAGE_SIZE-1;
} }
} while(!menuTbl[(smPage*SM_PAGE_SIZE)+pos].enabled); } while(!smMenuTbl[(smPage*SM_PAGE_SIZE)+pos].enabled);
smSelectPos = pos; smSelectPos = pos;
(void)pos; (void)pos;
} }
static s16 SMComCharGet(s16 player, s16 offset); static s16 SMChangeChar(s16 player, s16 offset);
static void SMUpdate(omObjData *object); static void SMUpdate(omObjData *object);
static void SMInit(omObjData *object) static void SMInit(omObjData *object)
@ -324,14 +329,14 @@ static void SMInit(omObjData *object)
for(i=0; i<4; i++) { for(i=0; i<4; i++) {
for(j=i+1; j<4; j++) { for(j=i+1; j<4; j++) {
if(smPlayerCfg[i].character == smPlayerCfg[j].character) { if(smPlayerCfg[i].character == smPlayerCfg[j].character) {
smPlayerCfg[j].character = SMComCharGet(j, -1); smPlayerCfg[j].character = SMChangeChar(j, -1);
} }
} }
} }
smPage = -1; smPage = -1;
for(i=0; i<SM_PAGE_MAX; i++) { for(i=0; i<SM_PAGE_MAX; i++) {
for(j=0; j<SM_PAGE_SIZE; j++) { for(j=0; j<SM_PAGE_SIZE; j++) {
if(menuTbl[(i*SM_PAGE_SIZE)+j].enabled == 1) { if(smMenuTbl[(i*SM_PAGE_SIZE)+j].enabled == 1) {
break; break;
} }
} }
@ -344,7 +349,7 @@ static void SMInit(omObjData *object)
MoveSMPage(1); MoveSMPage(1);
if(mgSeqOvlPrev != OVL_INVALID) { if(mgSeqOvlPrev != OVL_INVALID) {
for(i=0; i<SM_PAGE_MAX*SM_PAGE_SIZE; i++) { for(i=0; i<SM_PAGE_MAX*SM_PAGE_SIZE; i++) {
if(mgSeqOvlPrev == menuTbl[i].overlay && menuTbl[i].enabled == 1) { if(mgSeqOvlPrev == smMenuTbl[i].overlay && smMenuTbl[i].enabled == 1) {
smPage = i/SM_PAGE_SIZE; smPage = i/SM_PAGE_SIZE;
smSelectPos = i%SM_PAGE_SIZE; smSelectPos = i%SM_PAGE_SIZE;
smSelectPosBackup[smPage] = smSelectPos; smSelectPosBackup[smPage] = smSelectPos;
@ -364,39 +369,39 @@ static void SMUpdate(omObjData *object)
{ {
CalcBtns(); CalcBtns();
DrawPage(); DrawPage();
if(btnReleaseCurr & SM_KEY_UP) { if(keyDStkDown & SM_KEY_UP) {
MoveSMCursor(-1); MoveSMCursor(-1);
SMGroupGen((smPage*SM_PAGE_SIZE)+smSelectPos); SMGroupGen((smPage*SM_PAGE_SIZE)+smSelectPos);
return; return;
} }
if(btnReleaseCurr & SM_KEY_DOWN) { if(keyDStkDown & SM_KEY_DOWN) {
MoveSMCursor(1); MoveSMCursor(1);
SMGroupGen((smPage*SM_PAGE_SIZE)+smSelectPos); SMGroupGen((smPage*SM_PAGE_SIZE)+smSelectPos);
return; return;
} }
if(btnReleaseCurr & SM_KEY_LEFT) { if(keyDStkDown & SM_KEY_LEFT) {
MoveSMPage(-1); MoveSMPage(-1);
SMGroupGen((smPage*SM_PAGE_SIZE)+smSelectPos); SMGroupGen((smPage*SM_PAGE_SIZE)+smSelectPos);
return; return;
} }
if(btnReleaseCurr & SM_KEY_RIGHT) { if(keyDStkDown & SM_KEY_RIGHT) {
MoveSMPage(1); MoveSMPage(1);
SMGroupGen((smPage*SM_PAGE_SIZE)+smSelectPos); SMGroupGen((smPage*SM_PAGE_SIZE)+smSelectPos);
return; return;
} }
if((btnDownCurr & PAD_BUTTON_A) || (btnDownCurr & PAD_BUTTON_START)) { if((btnDown & PAD_BUTTON_A) || (btnDown & PAD_BUTTON_START)) {
object->func = SMCharInit; object->func = SMCharInit;
return; return;
} }
if(btnDownCurr & PAD_BUTTON_Y) { if(btnDown & PAD_BUTTON_Y) {
object->func = SMPlayerCfgInit; object->func = SMPlayerCfgInit;
return; return;
} }
if(btnDownCurr & PAD_TRIGGER_Z) { if(btnDown & PAD_TRIGGER_Z) {
object->func = SMSound3DInit; object->func = SMSound3DInit;
return; return;
} }
if(btnDownCurr & PAD_BUTTON_X) { if(btnDown & PAD_BUTTON_X) {
omOvlReturnEx(0, 1); omOvlReturnEx(0, 1);
} }
} }
@ -405,7 +410,7 @@ static void SMGroupGen(s32 index)
{ {
OverlayID overlay; OverlayID overlay;
s32 i; s32 i;
overlay = menuTbl[index].overlay; overlay = smMenuTbl[index].overlay;
for(i=0; i<50; i++) { for(i=0; i<50; i++) {
if(overlay == mgInfoTbl[i].ovl) { if(overlay == mgInfoTbl[i].ovl) {
break; break;
@ -494,7 +499,7 @@ static s32 charMdlMotTbl[] = {
DATA_MAKE_NUM(DATADIR_SELMENU, 15), DATA_MAKE_NUM(DATADIR_SELMENU, 15),
}; };
static s16 SMComCharGet(s16 player, s16 offset) static s16 SMChangeChar(s16 player, s16 offset)
{ {
s32 i; s32 i;
s16 character; s16 character;
@ -568,7 +573,7 @@ static void SMCharInit(omObjData *object)
for(i=0; i<4; i++) { for(i=0; i<4; i++) {
playerDoneF[i] = 0; playerDoneF[i] = 0;
} }
SMComCharGet(0, 0); SMChangeChar(0, 0);
object->func = SMCharUpdate; object->func = SMCharUpdate;
} }
@ -602,7 +607,7 @@ static void SMCharUpdate(omObjData *object)
} }
} }
if(done_players == num_players) { if(done_players == num_players) {
SMComCharGet(0, 0); SMChangeChar(0, 0);
CharRandomize(); CharRandomize();
CopyPlayerCfg(GWPlayerCfg, smPlayerCfg); CopyPlayerCfg(GWPlayerCfg, smPlayerCfg);
CharKill(-1); CharKill(-1);
@ -629,11 +634,11 @@ static void SMCharUpdate(omObjData *object)
for(i=0; i<4; i++) { for(i=0; i<4; i++) {
port = smPlayerCfg[i].pad_idx; port = smPlayerCfg[i].pad_idx;
if(!playerDoneF[i]) { if(!playerDoneF[i]) {
if(btnReleaseAll[port] & SM_KEY_LEFT) { if(keyDStkAllDown[port] & SM_KEY_LEFT) {
smPlayerCfg[port].character = SMComCharGet(i, -1); smPlayerCfg[port].character = SMChangeChar(i, -1);
} }
if(btnReleaseAll[port] & SM_KEY_RIGHT) { if(keyDStkAllDown[port] & SM_KEY_RIGHT) {
smPlayerCfg[port].character = SMComCharGet(i, 1); smPlayerCfg[port].character = SMChangeChar(i, 1);
} }
if(btnDownAll[port] & PAD_BUTTON_A) { if(btnDownAll[port] & PAD_BUTTON_A) {
playerDoneF[i] = 1; playerDoneF[i] = 1;
@ -657,16 +662,16 @@ static void SMCharUpdate(omObjData *object)
return; return;
} }
if(!smPlayerCfg[i].iscom) { if(!smPlayerCfg[i].iscom) {
w = strlen(charTbl[smPlayerCfg[i].character]); w = strlen(smCharTbl[smPlayerCfg[i].character]);
w *= 16; w *= 16;
x = ((320-w)/2)+((i%2)*320); x = ((320-w)/2)+((i%2)*320);
y = 176+((i/2)*240); y = 176+((i/2)*240);
if(playerDoneF[i] == 1) { if(playerDoneF[i] == 1) {
fontcolor = FONT_COLOR_WHITE; fontcolor = FONT_COLOR_WHITE;
print8(x, y, 2.0f, "\xFD\x08""%s", charTbl[smPlayerCfg[i].character]); print8(x, y, 2.0f, "\xFD\x08""%s", smCharTbl[smPlayerCfg[i].character]);
} else { } else {
fontcolor = FONT_COLOR_GREEN; fontcolor = FONT_COLOR_GREEN;
print8(x, y, 2.0f, "\xFD\x05""%s", charTbl[smPlayerCfg[i].character]); print8(x, y, 2.0f, "\xFD\x05""%s", smCharTbl[smPlayerCfg[i].character]);
} }
} else { } else {
w = 72; w = 72;
@ -685,26 +690,26 @@ static void SMExit(omObjData *object)
return; return;
} }
while(HuARDMACheck()); while(HuARDMACheck());
mg = omMgIndexGet(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay); mg = omMgIndexGet(smMenuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay);
GWSystem.mg_next = mg; GWSystem.mg_next = mg;
OSReport("mgNo=%d\n", mg); OSReport("mgNo=%d\n", mg);
if(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W10) { if(smMenuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W10) {
_SetFlag(0x1000B); _SetFlag(0x1000B);
} else if(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W20) { } else if(smMenuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W20) {
BoardSaveInit(7); BoardSaveInit(7);
BoardPartyConfigSet(0, 0, 0, 20, 0, 0, 0, 0); BoardPartyConfigSet(0, 0, 0, 20, 0, 0, 0, 0);
} else if(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W21) { } else if(smMenuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W21) {
BoardSaveInit(8); BoardSaveInit(8);
BoardPartyConfigSet(0, 0, 0, 20, 0, 0, 0, 0); BoardPartyConfigSet(0, 0, 0, 20, 0, 0, 0, 0);
} else { } else {
_ClearFlag(0x1000B); _ClearFlag(0x1000B);
} }
if(mg == -1 || !(HuPadBtn[0] & PAD_TRIGGER_Z) || mgInfoTbl[mg].type == 5 || mgInfoTbl[mg].type == 3 || mgInfoTbl[mg].type == 6) { if(mg == -1 || !(HuPadBtn[0] & PAD_TRIGGER_Z) || mgInfoTbl[mg].type == 5 || mgInfoTbl[mg].type == 3 || mgInfoTbl[mg].type == 6) {
omOvlCallEx(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay, 1, 0, 0); omOvlCallEx(smMenuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay, 1, 0, 0);
} else { } else {
omOvlCallEx(OVL_INST, 1, 0, 0); omOvlCallEx(OVL_INST, 1, 0, 0);
} }
mgSeqOvlPrev = menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay; mgSeqOvlPrev = smMenuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay;
smSelectPosExit = smSelectPos; smSelectPosExit = smSelectPos;
} }
@ -720,10 +725,10 @@ static s16 playerCfgSelF;
static s16 playerCfgPlayerPos; static s16 playerCfgPlayerPos;
static s16 playerCfgOptionPos; static s16 playerCfgOptionPos;
#define APPLY_PLAYERCFG_HILITE(option) \ #define DO_HILITE(pos) \
do { \ do { \
s32 color; \ s32 color; \
if(playerCfgOptionPos == option) { \ if(playerCfgOptionPos == pos) { \
color = FONT_COLOR_CYAN; \ color = FONT_COLOR_CYAN; \
fontcolor = color; \ fontcolor = color; \
} else { \ } else { \
@ -766,13 +771,13 @@ static void SMPlayerCfgDraw(void)
print8(((i%2)*320)+64, ((i/2)*240)+112, 2.0f, padCfgStrTbl[3], smPlayerCfg[i].group); print8(((i%2)*320)+64, ((i/2)*240)+112, 2.0f, padCfgStrTbl[3], smPlayerCfg[i].group);
print8(((i%2)*320)+64, ((i/2)*240)+128, 2.0f, padCfgStrTbl[4], diffStr[smPlayerCfg[i].diff]); print8(((i%2)*320)+64, ((i/2)*240)+128, 2.0f, padCfgStrTbl[4], diffStr[smPlayerCfg[i].diff]);
} else if(playerCfgSelF == 1 && playerCfgPlayerPos == i) { } else if(playerCfgSelF == 1 && playerCfgPlayerPos == i) {
APPLY_PLAYERCFG_HILITE(0); DO_HILITE(0);
print8(((i%2)*320)+64, ((i/2)*240)+80, 2.0f, padCfgStrTbl[1], smPlayerCfg[i].pad_idx, comStr[smPlayerCfg[i].iscom]); print8(((i%2)*320)+64, ((i/2)*240)+80, 2.0f, padCfgStrTbl[1], smPlayerCfg[i].pad_idx, comStr[smPlayerCfg[i].iscom]);
APPLY_PLAYERCFG_HILITE(1); DO_HILITE(1);
print8(((i%2)*320)+64, ((i/2)*240)+96, 2.0f, padCfgStrTbl[2], smPlayerCfg[i].pad_idx); print8(((i%2)*320)+64, ((i/2)*240)+96, 2.0f, padCfgStrTbl[2], smPlayerCfg[i].pad_idx);
APPLY_PLAYERCFG_HILITE(2); DO_HILITE(2);
print8(((i%2)*320)+64, ((i/2)*240)+112, 2.0f, padCfgStrTbl[3], smPlayerCfg[i].group); print8(((i%2)*320)+64, ((i/2)*240)+112, 2.0f, padCfgStrTbl[3], smPlayerCfg[i].group);
APPLY_PLAYERCFG_HILITE(3); DO_HILITE(3);
print8(((i%2)*320)+64, ((i/2)*240)+128, 2.0f, padCfgStrTbl[4], diffStr[smPlayerCfg[i].diff]); print8(((i%2)*320)+64, ((i/2)*240)+128, 2.0f, padCfgStrTbl[4], diffStr[smPlayerCfg[i].diff]);
} else { } else {
fontcolor = FONT_COLOR_DARK_GREEN; fontcolor = FONT_COLOR_DARK_GREEN;
@ -784,6 +789,7 @@ static void SMPlayerCfgDraw(void)
} }
} }
#undef DO_HILITE
static void SMPlayerCfgUpdate(omObjData *object); static void SMPlayerCfgUpdate(omObjData *object);
static void SMPlayerCfgInit(omObjData *object) static void SMPlayerCfgInit(omObjData *object)
@ -800,39 +806,39 @@ static void SMPlayerCfgUpdate(omObjData *object)
SMPlayerCfgDraw(); SMPlayerCfgDraw();
CalcBtns(); CalcBtns();
if(!playerCfgSelF) { if(!playerCfgSelF) {
if(btnReleaseCurr & SM_KEY_LEFT) { if(keyDStkDown & SM_KEY_LEFT) {
offset = ((playerCfgPlayerPos & 0x1)-1) & 0x1; offset = ((playerCfgPlayerPos & 0x1)-1) & 0x1;
playerCfgPlayerPos = (playerCfgPlayerPos & 0xFFFE)+offset; playerCfgPlayerPos = (playerCfgPlayerPos & 0xFFFE)+offset;
} else { } else {
if(btnReleaseCurr & SM_KEY_RIGHT) { if(keyDStkDown & SM_KEY_RIGHT) {
offset = ((playerCfgPlayerPos & 0x1)+1) & 0x1; offset = ((playerCfgPlayerPos & 0x1)+1) & 0x1;
playerCfgPlayerPos = (playerCfgPlayerPos & 0xFFFE)+offset; playerCfgPlayerPos = (playerCfgPlayerPos & 0xFFFE)+offset;
} else if(btnReleaseCurr & SM_KEY_DOWN) { } else if(keyDStkDown & SM_KEY_DOWN) {
if((playerCfgPlayerPos += 2) >= 4) { if((playerCfgPlayerPos += 2) >= 4) {
playerCfgPlayerPos -= 4; playerCfgPlayerPos -= 4;
} }
} else if(btnReleaseCurr & SM_KEY_UP) { } else if(keyDStkDown & SM_KEY_UP) {
if((playerCfgPlayerPos -= 2) < 0) { if((playerCfgPlayerPos -= 2) < 0) {
playerCfgPlayerPos += 4; playerCfgPlayerPos += 4;
} }
} }
} }
if(btnDownCurr & PAD_BUTTON_A) { if(btnDown & PAD_BUTTON_A) {
playerCfgSelF = 1; playerCfgSelF = 1;
return; return;
} }
if((btnDownCurr & PAD_BUTTON_B) || (btnDownCurr & PAD_BUTTON_Y)) { if((btnDown & PAD_BUTTON_B) || (btnDown & PAD_BUTTON_Y)) {
object->func = SMUpdate; object->func = SMUpdate;
} }
} else if(btnReleaseCurr & SM_KEY_UP) { } else if(keyDStkDown & SM_KEY_UP) {
if(--playerCfgOptionPos < 0) { if(--playerCfgOptionPos < 0) {
playerCfgOptionPos = 3; playerCfgOptionPos = 3;
} }
} else if(btnReleaseCurr & SM_KEY_DOWN) { } else if(keyDStkDown & SM_KEY_DOWN) {
if(++playerCfgOptionPos > 3) { if(++playerCfgOptionPos > 3) {
playerCfgOptionPos = 0; playerCfgOptionPos = 0;
} }
} else if(btnReleaseCurr & SM_KEY_LEFT) { } else if(keyDStkDown & SM_KEY_LEFT) {
switch(playerCfgOptionPos) { switch(playerCfgOptionPos) {
case 0: case 0:
smPlayerCfg[playerCfgPlayerPos].iscom ^= 1; smPlayerCfg[playerCfgPlayerPos].iscom ^= 1;
@ -856,7 +862,7 @@ static void SMPlayerCfgUpdate(omObjData *object)
} }
break; break;
}; };
} else if(btnReleaseCurr & SM_KEY_RIGHT) { } else if(keyDStkDown & SM_KEY_RIGHT) {
switch(playerCfgOptionPos) { switch(playerCfgOptionPos) {
case 0: case 0:
smPlayerCfg[playerCfgPlayerPos].iscom ^= 1; smPlayerCfg[playerCfgPlayerPos].iscom ^= 1;
@ -880,9 +886,9 @@ static void SMPlayerCfgUpdate(omObjData *object)
} }
break; break;
} }
} else if((btnDownCurr & PAD_BUTTON_A) || (btnDownCurr & PAD_BUTTON_B)) { } else if((btnDown & PAD_BUTTON_A) || (btnDown & PAD_BUTTON_B)) {
playerCfgSelF = 0; playerCfgSelF = 0;
} else if(btnDownCurr & PAD_BUTTON_Y) { } else if(btnDown & PAD_BUTTON_Y) {
object->func = SMUpdate; object->func = SMUpdate;
} }
} }
@ -896,3 +902,176 @@ void fn_1_450C(void)
{ {
} }
static s16 emiCompDataNo;
static s16 emiCompVal;
static s16 smSound3DPos;
s16 lbl_1_bss_0;
static void SMSound3DUpdate(omObjData *object);
static void SMSound3DDraw(void);
static void SMSound3DInit(omObjData *object)
{
s8 *data = msmSeGetIndexPtr(emiCompDataNo);
emiCompVal = data[12];
object->func = SMSound3DUpdate;
}
static void SMSound3DUpdate(omObjData *object)
{
float increment;
s8 *data;
CalcBtns();
if(keyDStkDown & SM_KEY_UP) {
smSound3DPos--;
if(smSound3DPos < 0) {
smSound3DPos = 7;
}
}
if(keyDStkDown & SM_KEY_DOWN) {
smSound3DPos++;
if(smSound3DPos >= 8) {
smSound3DPos = 0;
}
}
if(keyDStkDown & (SM_KEY_LEFT | SM_KEY_RIGHT)) {
if(keyDStkDown & SM_KEY_RIGHT) {
increment = 10;
} else {
increment = -10;
}
if(HuPadBtn[0] & PAD_TRIGGER_Z) {
increment *= 10.0f;
}
switch(smSound3DPos) {
case 0:
Snd3DDistOffset += increment;
break;
case 1:
Snd3DSpeedOffset += increment;
break;
case 2:
Snd3DStartDisOffset += increment;
break;
case 3:
Snd3DFrontSurDisOffset += increment;
break;
case 4:
Snd3DBackSurDisOffset += increment;
break;
case 5:
emiCompDataNo += increment/10.0f;
if(emiCompDataNo < 0) {
emiCompDataNo = 0;
}
data = msmSeGetIndexPtr(emiCompDataNo);
emiCompVal = data[12];
break;
case 6:
emiCompVal += increment/10.0f;
if(emiCompVal > 127) {
emiCompVal = 127;
}
if(emiCompVal < -127) {
emiCompVal = -127;
}
data = msmSeGetIndexPtr(emiCompDataNo);
data[12] = emiCompVal;
break;
case 7:
musicOffF = (musicOffF) ? 0 : 1;
if(musicOffF) {
msmMusSetMasterVolume(0);
} else {
msmMusSetMasterVolume(127);
}
break;
}
}
if(btnDown & PAD_BUTTON_START) {
switch(smSound3DPos) {
case 0:
Snd3DDistOffset = 0;
break;
case 1:
Snd3DSpeedOffset = 0;
break;
case 2:
Snd3DStartDisOffset = 0;
break;
case 3:
Snd3DFrontSurDisOffset = 0;
break;
case 4:
Snd3DBackSurDisOffset = 0;
break;
case 5:
emiCompDataNo = 0;
break;
case 6:
emiCompVal = 0;
break;
case 7:
musicOffF = 0;
break;
}
}
if(btnDown & PAD_BUTTON_B) {
object->func = SMUpdate;
}
SMSound3DDraw();
}
#define DO_HILITE(pos) \
do { \
if(smSound3DPos == pos) { \
fontcolor = FONT_COLOR_GREEN; \
} else { \
fontcolor = FONT_COLOR_DARK_GREEN; \
} \
} while(0)
static void SMSound3DDraw(void)
{
char *onOffStr[] = {
" ON",
"OFF"
};
fontcolor = FONT_COLOR_YELLOW;
print8(200, 64, 2.0f, "3DSound Config.");
DO_HILITE(0);
print8(140, 96, 2.0f, "Max Distance %5.1f", Snd3DDistOffset);
DO_HILITE(1);
print8(140, 112, 2.0f, "Sound Speed %5.1f", Snd3DSpeedOffset);
DO_HILITE(2);
print8(140, 128, 2.0f, "Start Distance %5.1f", Snd3DStartDisOffset);
DO_HILITE(3);
print8(140, 144, 2.0f, "Front Distance %5.1f", Snd3DFrontSurDisOffset);
DO_HILITE(4);
print8(140, 160, 2.0f, "Back Distance %5.1f", Snd3DBackSurDisOffset);
DO_HILITE(5);
print8(140, 176, 2.0f, "emiComp DataNo %04d", emiCompDataNo);
DO_HILITE(6);
print8(140, 192, 2.0f, "emiComp VAL %3d", emiCompVal);
DO_HILITE(7);
print8(140, 208, 2.0f, "Music %s", onOffStr[(musicOffF) ? 1 : 0]);
}
#undef DO_HILITE