aboutsummaryrefslogtreecommitdiff
path: root/Source/Menu.c
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2017-09-16 01:44:42 +0200
committerXaviDCR92 <xavi.dcr@gmail.com>2017-09-16 01:44:42 +0200
commit0d7af34486f15d8f31f8474f17cad698923cadcb (patch)
treea8489b916733589bbf90f25f3d654ade9353e4a1 /Source/Menu.c
parentf2a6798f1da7231facec93305f8c157f1a56f072 (diff)
downloadairport-0d7af34486f15d8f31f8474f17cad698923cadcb.tar.gz
* Trimmed ending whitespaces.
* Makefile now generates output TIM files automatically, using 'cat whatever.flags' files as flags for bmp2tim.
Diffstat (limited to 'Source/Menu.c')
-rw-r--r--Source/Menu.c200
1 files changed, 89 insertions, 111 deletions
diff --git a/Source/Menu.c b/Source/Menu.c
index c3a2f13..f17991e 100644
--- a/Source/Menu.c
+++ b/Source/Menu.c
@@ -1,5 +1,5 @@
/* **************************************
- * Includes *
+ * Includes *
* *************************************/
#include "Menu.h"
@@ -17,7 +17,7 @@
#include "Pad.h"
/* **************************************
- * Defines *
+ * Defines *
* *************************************/
#define BUTTON_SIZE 64
@@ -48,7 +48,7 @@ typedef enum
OPTIONS_BUTTON_INDEX,
ONE_PLAYER_BUTTON_INDEX,
TWO_PLAYER_BUTTON_INDEX,
-
+
MAIN_MENU_BUTTONS_MAX
}MMBtn_Index;
@@ -56,52 +56,52 @@ enum
{
MAIN_MENU_PLAY_BUTTON_X = 92,
MAIN_MENU_PLAY_BUTTON_Y = 92,
-
+
MAIN_MENU_OPTIONS_BUTTON_X = 225,
MAIN_MENU_OPTIONS_BUTTON_Y = 92,
-
+
MAIN_MENU_ONE_PLAYER_BUTTON_X = 92,
MAIN_MENU_ONE_PLAYER_BUTTON_Y = 92,
-
+
MAIN_MENU_TWO_PLAYER_BUTTON_X = 225,
- MAIN_MENU_TWO_PLAYER_BUTTON_Y = 92
+ MAIN_MENU_TWO_PLAYER_BUTTON_Y = 92
};
typedef enum
{
PLAY_BUTTON_U_OFFSET = 0,
PLAY_BUTTON_Y_OFFSET = 64,
-
+
ONE_PLAYER_BUTTON_U_OFFSET = 128,
ONE_PLAYER_BUTTON_Y_OFFSET = 64,
-
+
OPTIONS_BUTTON_U_OFFSET = 64,
OPTIONS_BUTTON_Y_OFFSET = 64,
-
+
TWO_PLAYER_BUTTON_U_OFFSET = 192,
TWO_PLAYER_BUTTON_Y_OFFSET = 64,
-
+
DEFAULT_BUTTON_U_OFFSET = 0,
DEFAULT_BUTTON_V_OFFSET = 128
-
+
}MMBtn_Offset;
typedef struct
{
MMBtn_Offset offset_u;
MMBtn_Offset offset_v;
-
+
// Timer for absolute, sine-like animation
short timer;
// Pointer to function executed by pressing the button
void (*f)();
-
+
MMBtn_Index i;
-
+
bool selected;
bool was_selected;
-
+
}TYPE_MMBtn;
/* **************************************
@@ -135,14 +135,14 @@ static char* MainMenuFiles[] = { "cdrom:\\DATA\\SPRITES\\MAINMENU.TIM;1" ,
"cdrom:\\DATA\\SPRITES\\BUTTONS.TIM;1" ,
#ifndef NO_INTRO
"cdrom:\\DATA\\SPRITES\\PSXDISK.TIM;1" ,
- "cdrom:\\DATA\\SPRITES\\INTROFNT.TIM;1" ,
+ "cdrom:\\DATA\\FONTS\\INTROFNT.TIM;1" ,
"cdrom:\\DATA\\SPRITES\\GPL.TIM;1" ,
"cdrom:\\DATA\\SPRITES\\OPENSRC.TIM;1" ,
"cdrom:\\DATA\\SOUNDS\\TRAYCL.VAG;1" ,
- "cdrom:\\DATA\\SOUNDS\\SPINDISK.VAG;1"
+ "cdrom:\\DATA\\SOUNDS\\SPINDISK.VAG;1"
#endif // NO_INTRO
};
-
+
static void* MainMenuDest[] = { (GsSprite*)&MenuSpr ,
(SsVag*)&BellSnd ,
(SsVag*)&AcceptSnd ,
@@ -153,7 +153,7 @@ static void* MainMenuDest[] = { (GsSprite*)&MenuSpr ,
(GsSprite*)&GPL_Logo ,
(GsSprite*)&OpenSource_Logo ,
(SsVag*)&TrayClSnd ,
- (SsVag*)&SpinDiskSnd
+ (SsVag*)&SpinDiskSnd
#endif // NO_INTRO
};
@@ -165,19 +165,19 @@ void PlayMenu(void)
{
menuLevel = ONE_TWO_PLAYERS_LEVEL;
MainMenuMinimumBtn = ONE_PLAYER_BUTTON_INDEX;
-
+
MainMenuBtn[PLAY_BUTTON_INDEX].selected = false;
MainMenuBtn[PLAY_BUTTON_INDEX].was_selected = false;
MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0;
-
+
MainMenuBtn[OPTIONS_BUTTON_INDEX].selected = false;
MainMenuBtn[OPTIONS_BUTTON_INDEX].was_selected = false;
MainMenuBtn[OPTIONS_BUTTON_INDEX].timer = 0;
-
+
MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].selected = true;
MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].was_selected = false;
MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].timer = 0;
-
+
MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].selected = false;
MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].was_selected = false;
MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0;
@@ -206,39 +206,39 @@ void MainMenuInit(void)
LoadMenu( MainMenuFiles,MainMenuDest,
sizeof(MainMenuFiles) / sizeof(char*) ,
sizeof(MainMenuDest) / sizeof(void*) );
-
+
MainMenuBtn[PLAY_BUTTON_INDEX].offset_u = PLAY_BUTTON_U_OFFSET;
MainMenuBtn[PLAY_BUTTON_INDEX].offset_v = PLAY_BUTTON_Y_OFFSET;
MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0;
MainMenuBtn[PLAY_BUTTON_INDEX].f = &PlayMenu;
MainMenuBtn[PLAY_BUTTON_INDEX].i = PLAY_BUTTON_INDEX;
-
+
MainMenuBtn[OPTIONS_BUTTON_INDEX].offset_u = OPTIONS_BUTTON_U_OFFSET;
MainMenuBtn[OPTIONS_BUTTON_INDEX].offset_v = OPTIONS_BUTTON_Y_OFFSET;
MainMenuBtn[OPTIONS_BUTTON_INDEX].timer = 0;
MainMenuBtn[OPTIONS_BUTTON_INDEX].f = &OptionsMenu;
MainMenuBtn[OPTIONS_BUTTON_INDEX].i = OPTIONS_BUTTON_INDEX;
-
+
MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].offset_u = ONE_PLAYER_BUTTON_U_OFFSET;
MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].offset_v = ONE_PLAYER_BUTTON_Y_OFFSET;
MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].timer = 0;
MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].f = &OnePlayerMenu;
MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].i = ONE_PLAYER_BUTTON_INDEX;
-
+
MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].offset_u = TWO_PLAYER_BUTTON_U_OFFSET;
MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].offset_v = TWO_PLAYER_BUTTON_Y_OFFSET;
MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0;
MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].f = &TwoPlayerMenu;
MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].i = TWO_PLAYER_BUTTON_INDEX;
-
+
menuLevel = PLAY_OPTIONS_LEVEL;
-
+
MainMenuMinimumBtn = PLAY_BUTTON_INDEX;
-
+
TestCheat.Callback = &MenuTestCheat;
memset(TestCheat.Combination,0,CHEAT_ARRAY_SIZE);
//memcpy(myarray, (int [5]){a,b,c,d,e}, 5*sizeof(int));
-
+
memcpy( TestCheat.Combination,
(unsigned short[CHEAT_ARRAY_SIZE])
{ PAD_CIRCLE, PAD_CIRCLE, PAD_CROSS, PAD_TRIANGLE,
@@ -246,12 +246,12 @@ void MainMenuInit(void)
0, 0, 0, 0,
0, 0, 0, 0 } ,
sizeof(unsigned short) * CHEAT_ARRAY_SIZE);
-
+
PadAddCheat(&TestCheat);
-
+
StackCheckCheat.Callback = &SystemPrintStackPointerAddress;
memset(StackCheckCheat.Combination, 0, CHEAT_ARRAY_SIZE);
-
+
memcpy( StackCheckCheat.Combination,
(unsigned short[CHEAT_ARRAY_SIZE])
{ PAD_TRIANGLE, PAD_TRIANGLE, PAD_CROSS, PAD_TRIANGLE,
@@ -259,7 +259,7 @@ void MainMenuInit(void)
0, 0, 0, 0,
0, 0, 0, 0 } ,
sizeof(unsigned short) * CHEAT_ARRAY_SIZE);
-
+
PadAddCheat(&StackCheckCheat);
DevMenuCheat.Callback = &SystemDevMenuToggle;
@@ -293,55 +293,39 @@ void MainMenuInit(void)
void MainMenu(void)
{
- unsigned short* cheat_array;
- uint8_t i;
MainMenuInit();
-
- #ifndef NO_INTRO
+
+#ifndef NO_INTRO
PSXSDKIntro();
- #endif //PSXSDK_DEBUG
+#endif //PSXSDK_DEBUG
GfxSetGlobalLuminance(NORMAL_LUMINANCE);
-
+
while (1)
- {
+ {
MainMenuButtonHandler();
- while (GfxIsGPUBusy() == true);
-
+ GsSortCls(0,0,40);
+
switch(menuLevel)
{
case PLAY_OPTIONS_LEVEL:
-
- GsSortCls(0,0,40);
MainMenuDrawButton(&MainMenuBtn[PLAY_BUTTON_INDEX]);
MainMenuDrawButton(&MainMenuBtn[OPTIONS_BUTTON_INDEX]);
-
- for (cheat_array = PadGetPlayerOneCheatArray(), i = 0; *cheat_array != 0; cheat_array++, i += 16)
- {
- GfxDrawButton(i, 220, *cheat_array);
- }
-
- GfxDrawScene();
break;
-
+
case ONE_TWO_PLAYERS_LEVEL:
-
+
GsSortCls(0,0,40);
MainMenuDrawButton(&MainMenuBtn[ONE_PLAYER_BUTTON_INDEX]);
MainMenuDrawButton(&MainMenuBtn[TWO_PLAYER_BUTTON_INDEX]);
-
- for (cheat_array = PadGetPlayerOneCheatArray(), i = 0; *cheat_array != 0; cheat_array++, i += 16)
- {
- GfxDrawButton(i, 220, *cheat_array);
- }
-
- GfxDrawScene();
break;
-
+
default:
break;
}
+
+ GfxDrawScene_Slow();
}
}
@@ -350,23 +334,23 @@ void MainMenuRestoreInitValues(void)
{
menuLevel = PLAY_OPTIONS_LEVEL;
MainMenuMinimumBtn = PLAY_BUTTON_INDEX;
-
+
MainMenuBtn[PLAY_BUTTON_INDEX].selected = true;
MainMenuBtn[PLAY_BUTTON_INDEX].was_selected = false;
MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0;
-
+
MainMenuBtn[OPTIONS_BUTTON_INDEX].selected = false;
MainMenuBtn[OPTIONS_BUTTON_INDEX].was_selected = false;
MainMenuBtn[OPTIONS_BUTTON_INDEX].timer = 0;
-
+
MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].selected = false;
MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].was_selected = false;
MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].timer = 0;
-
+
MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].selected = false;
MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].was_selected = false;
- MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0;
-
+ MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0;
+
GfxSetGlobalLuminance(NORMAL_LUMINANCE);
SfxPlayTrack(INTRO_TRACK);
@@ -377,7 +361,7 @@ void MainMenuButtonHandler(void)
static uint8_t btn_selected = PLAY_BUTTON_INDEX;
static uint8_t previous_btn_selected = 0;
uint8_t max_buttons;
-
+
if (PadOneAnyKeyPressed() == true)
{
if (SystemIsRandSeedSet() == false)
@@ -385,20 +369,20 @@ void MainMenuButtonHandler(void)
SystemSetRandSeed();
}
}
-
+
if ( (PadOneKeySinglePress(PAD_CROSS) == true)
||
(PadOneKeySinglePress(PAD_TRIANGLE) == true) )
{
SfxPlaySound(&AcceptSnd);
}
-
+
switch(menuLevel)
{
case PLAY_OPTIONS_LEVEL:
max_buttons = MAIN_MENU_PLAY_OPTIONS_LEVEL_BUTTONS;
break;
-
+
case ONE_TWO_PLAYERS_LEVEL:
if ( (btn_selected == TWO_PLAYER_BUTTON_INDEX)
@@ -420,17 +404,17 @@ void MainMenuButtonHandler(void)
}
break;
-
+
default:
max_buttons = 0;
break;
}
//DEBUG_PRINT_VAR(btn_selected);
-
+
MainMenuBtn[previous_btn_selected].was_selected = MainMenuBtn[previous_btn_selected].selected;
MainMenuBtn[btn_selected].was_selected = MainMenuBtn[btn_selected].selected;
-
+
if (PadOneKeySinglePress(PAD_LEFT) && (btn_selected > 0) )
{
MainMenuBtn[btn_selected].selected = false;
@@ -438,27 +422,27 @@ void MainMenuButtonHandler(void)
btn_selected--;
SfxPlaySound(&BellSnd);
}
- else if (PadOneKeySinglePress(PAD_RIGHT)
+ else if (PadOneKeySinglePress(PAD_RIGHT)
&&
(btn_selected < (max_buttons - 1 + MainMenuMinimumBtn) ) )
{
MainMenuBtn[btn_selected].selected = false;
previous_btn_selected = btn_selected;
- btn_selected++;
+ btn_selected++;
SfxPlaySound(&BellSnd);
}
-
+
if (btn_selected < MainMenuMinimumBtn)
{
btn_selected = MainMenuMinimumBtn;
}
-
+
if (btn_selected > (max_buttons - 1 + MainMenuMinimumBtn) )
{
// Avoid overflow when going back in menu navigation
btn_selected = (max_buttons - 1 + MainMenuMinimumBtn);
}
-
+
if (PadOneKeySinglePress(PAD_CROSS) )
{
if (menuLevel == ONE_TWO_PLAYERS_LEVEL)
@@ -473,38 +457,38 @@ void MainMenuButtonHandler(void)
{
MainMenuBtn[btn_selected].f();
}
-
-
-
+
+
+
if (menuLevel == ONE_TWO_PLAYERS_LEVEL)
{
btn_selected = PLAY_BUTTON_INDEX;
}
-
+
}
-
+
MainMenuBtn[btn_selected].selected = true;
-
+
}
void MainMenuDrawButton(TYPE_MMBtn * btn)
-{
+{
MenuSpr.w = BUTTON_SIZE;
MenuSpr.h = BUTTON_SIZE;
-
- if (btn->timer < MainMenuBtnAni_sz)
+
+ if ( (btn->timer) < (MainMenuBtnAni_sz - 1) )
{
btn->timer++;
}
-
+
if (btn->selected == true)
{
if (btn->was_selected == false)
{
btn->timer = 0;
}
-
+
MenuSpr.r = SELECTED_BUTTON_LUMINANCE;
MenuSpr.g = SELECTED_BUTTON_LUMINANCE;
MenuSpr.b = SELECTED_BUTTON_LUMINANCE;
@@ -515,42 +499,36 @@ void MainMenuDrawButton(TYPE_MMBtn * btn)
MenuSpr.g = NORMAL_LUMINANCE;
MenuSpr.b = NORMAL_LUMINANCE;
}
-
+
MenuSpr.u = DEFAULT_BUTTON_U_OFFSET;
MenuSpr.v = DEFAULT_BUTTON_V_OFFSET;
-
+
switch(btn->i)
{
case PLAY_BUTTON_INDEX:
MenuSpr.x = MAIN_MENU_PLAY_BUTTON_X;
- MenuSpr.y = MAIN_MENU_PLAY_BUTTON_Y - MainMenuBtnAni[btn->timer];
+ MenuSpr.y = MAIN_MENU_PLAY_BUTTON_Y;
MenuSpr.u += btn->offset_u;
MenuSpr.v += btn->offset_v;
-
- GsSortSprite(&MenuSpr);
break;
-
+
case OPTIONS_BUTTON_INDEX:
MenuSpr.x = MAIN_MENU_OPTIONS_BUTTON_X;
- MenuSpr.y = MAIN_MENU_OPTIONS_BUTTON_Y - MainMenuBtnAni[btn->timer];
+ MenuSpr.y = MAIN_MENU_OPTIONS_BUTTON_Y;
MenuSpr.u += btn->offset_u;
MenuSpr.v += btn->offset_v;
-
- GsSortSprite(&MenuSpr);
break;
-
+
case ONE_PLAYER_BUTTON_INDEX:
MenuSpr.x = MAIN_MENU_ONE_PLAYER_BUTTON_X;
- MenuSpr.y = MAIN_MENU_ONE_PLAYER_BUTTON_Y - MainMenuBtnAni[btn->timer];
+ MenuSpr.y = MAIN_MENU_ONE_PLAYER_BUTTON_Y;
MenuSpr.u += btn->offset_u;
MenuSpr.v += btn->offset_v;
-
- GsSortSprite(&MenuSpr);
break;
-
+
case TWO_PLAYER_BUTTON_INDEX:
MenuSpr.x = MAIN_MENU_TWO_PLAYER_BUTTON_X;
- MenuSpr.y = MAIN_MENU_TWO_PLAYER_BUTTON_Y - MainMenuBtnAni[btn->timer];
+ MenuSpr.y = MAIN_MENU_TWO_PLAYER_BUTTON_Y;
MenuSpr.u += btn->offset_u;
MenuSpr.v += btn->offset_v;
@@ -562,14 +540,14 @@ void MainMenuDrawButton(TYPE_MMBtn * btn)
MenuSpr.g = NORMAL_LUMINANCE >> 1;
MenuSpr.b = NORMAL_LUMINANCE >> 1;
}
-
- GsSortSprite(&MenuSpr);
break;
-
+
default:
break;
}
+ MenuSpr.y -= MainMenuBtnAni[btn->timer];
+ GsSortSprite(&MenuSpr);
}
void MenuTestCheat(void)