diff options
| author | XaviDCR92 <xavi.dcr@gmail.com> | 2017-09-16 01:44:42 +0200 |
|---|---|---|
| committer | XaviDCR92 <xavi.dcr@gmail.com> | 2017-09-16 01:44:42 +0200 |
| commit | 0d7af34486f15d8f31f8474f17cad698923cadcb (patch) | |
| tree | a8489b916733589bbf90f25f3d654ade9353e4a1 /Source/Menu.c | |
| parent | f2a6798f1da7231facec93305f8c157f1a56f072 (diff) | |
| download | airport-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.c | 200 |
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) |
