#include "../include/menus.h" #include #include extern bopti_image_t mainscreen; extern bopti_image_t africa1, desert1, finland1, plains1, usa1; extern bopti_image_t flag; extern font_t autofont, autofontsmall; bool doneTitle = false; bool doneMainMenu = false; uint8_t MainMenuSelection=0; bool doneMenuCircuit = false; uint8_t CircuitSelection=0; bool doneMenuCredit = false; void drawStartTitle( void ) { uint16_t pulse=0; doneTitle = false; while (!doneTitle) { dclear( C_BLACK ); dsubimage( 0, 32, &mainscreen, 0, 32, 396, 160, DIMAGE_NONE); dfont(&autofont); dprint_opt(198, 2, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "OUTRUN FOR GRAPH90" ); dprint_opt(198, 222, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_BOTTOM, "PRESS EXE TO START" ); // CODE HERE TO PRINT WELCOME MENU dupdate(); pulse++; getInputStartTitle(); } } void getInputStartTitle( void ) { int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; int timeout = 1; while(1) { key_event_t ev = getkey_opt(opt, &timeout); if(ev.type == KEYEV_NONE) return -1; int key = ev.key; if (key==KEY_EXE) doneTitle = true; } } int drawMainMenu( void ) { uint16_t pulse=0; doneMainMenu = false; MainMenuSelection=0; while (!doneMainMenu) { dimage( 0, 0, &mainscreen); dfont(&autofont); dprint_opt(102, 22, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "ARCADE GAME" ); if (MainMenuSelection!=0) dprint_opt(100, 20, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "ARCADE GAME" ); else dprint_opt(100, 20, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "ARCADE GAME" ); dprint_opt(102, 62, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "TIME ATTACK" ); if (MainMenuSelection!=1) dprint_opt(100, 60, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "TIME ATTACK" ); else dprint_opt(100, 60, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "TIME ATTACK" ); dprint_opt(102, 102, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "OPTIONS" ); if (MainMenuSelection!=2) dprint_opt(100, 100, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "OPTIONS" ); else dprint_opt(100, 100, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "OPTIONS" ); dprint_opt(102, 142, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CREDITS" ); if (MainMenuSelection!=3) dprint_opt(100, 140, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CREDITS" ); else dprint_opt(100, 140, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "CREDITS" ); dprint_opt(102, 182, C_RGB(0,0,0), C_NONE, DTEXT_LEFT, DTEXT_TOP, "QUIT TO OS" ); if (MainMenuSelection!=4) dprint_opt(100, 180, C_RGB(255,255,255), C_NONE, DTEXT_LEFT, DTEXT_TOP, "QUIT TO OS" ); else dprint_opt(100, 180, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_LEFT, DTEXT_TOP, "QUIT TO OS" ); dimage( 10, 10+40*MainMenuSelection, &flag ); // CODE HERE TO PRINT WELCOME MENU dupdate(); pulse++; getInputMainMenu(); } return MainMenuSelection; } void getInputMainMenu( void ) { int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; int timeout = 1; while(1) { key_event_t ev = getkey_opt(opt, &timeout); if(ev.type == KEYEV_NONE) return -1; int key = ev.key; if (key==KEY_EXE) doneMainMenu = true; if (key==KEY_UP) { if (MainMenuSelection==0) MainMenuSelection=4; else MainMenuSelection--; } if (key==KEY_DOWN) { if (MainMenuSelection==4) MainMenuSelection=0; else MainMenuSelection++; } } } void drawRectangle( uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color, uint8_t thick ) { for(int u=0; u<=thick; u++) { dline( x, y+u, x+w, y+u, color ); dline( x, y+h-u, x+w, y+h-u, color ); dline( x+u, y, x+u, y+h, color ); dline( x+w-u, y, x+w-u, y+h, color ); } } int drawMenuCircuitSelect( void ) { uint16_t pulse=0; doneMenuCircuit = false; CircuitSelection=0; while (!doneMenuCircuit) { dclear( C_BLACK ); dsubimage( 0, 32, &mainscreen, 0, 32, 396, 160, DIMAGE_NONE); dfont(&autofont); dprint_opt(198, 2, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_TOP, "SELECT A CIRCUIT" ); dimage( 16, 45, &plains1 ); if (CircuitSelection!=0) drawRectangle( 16, 45, 60, 60, C_WHITE, 3 ); else { drawRectangle( 16, 45, 60, 60, C_RGB(pulse%256,0,pulse%256), 3 ); dprint_opt(198, 222, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_BOTTOM, ">> CIRCUIT #1" ); } dimage( 92, 45, &desert1 ); if (CircuitSelection!=1) drawRectangle( 92, 45, 60, 60, C_WHITE, 3 ); else { drawRectangle( 92, 45, 60, 60, C_RGB(pulse%256,0,pulse%256), 3 ); dprint_opt(198, 222, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_BOTTOM, ">> CIRCUIT #2" ); } dimage( 168, 45, &usa1 ); if (CircuitSelection!=2) drawRectangle( 168, 45, 60, 60, C_WHITE, 3 ); else { drawRectangle( 168, 45, 60, 60, C_RGB(pulse%256,0,pulse%256), 3 ); dprint_opt(198, 222, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_BOTTOM, ">> CIRCUIT #3" ); } dimage( 244, 45, &finland1 ); if (CircuitSelection!=3) drawRectangle( 244, 45, 60, 60, C_WHITE, 3 ); else { drawRectangle( 244, 45, 60, 60, C_RGB(pulse%256,0,pulse%256), 3 ); dprint_opt(198, 222, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_BOTTOM, ">> CIRCUIT #4" ); } dimage( 320, 45, &africa1 ); if (CircuitSelection!=4) drawRectangle( 320, 45, 60, 60, C_WHITE, 3 ); else { drawRectangle( 320, 45, 60, 60, C_RGB(pulse%256,0,pulse%256), 3 ); dprint_opt(198, 222, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_BOTTOM, ">> CIRCUIT #5" ); } if (CircuitSelection!=5) drawRectangle( 16, 120, 60, 60, C_WHITE, 3 ); else { drawRectangle( 16, 120, 60, 60, C_RGB(pulse%256,0,pulse%256), 3 ); dprint_opt(198, 222, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_BOTTOM, ">> CIRCUIT #6" ); } if (CircuitSelection!=6) drawRectangle( 92, 120, 60, 60, C_WHITE, 3 ); else { drawRectangle( 92, 120, 60, 60, C_RGB(pulse%256,0,pulse%256), 3 ); dprint_opt(198, 222, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_BOTTOM, ">> CIRCUIT #7" ); } if (CircuitSelection!=7) drawRectangle( 168, 120, 60, 60, C_WHITE, 3 ); else { drawRectangle( 168, 120, 60, 60, C_RGB(pulse%256,0,pulse%256), 3 ); dprint_opt(198, 222, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_BOTTOM, ">> CIRCUIT #8" ); } if (CircuitSelection!=8) drawRectangle( 244, 120, 60, 60, C_WHITE, 3 ); else { drawRectangle( 244, 120, 60, 60, C_RGB(pulse%256,0,pulse%256), 3 ); dprint_opt(198, 222, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_BOTTOM, ">> CIRCUIT #9" ); } if (CircuitSelection!=9) drawRectangle( 320, 120, 60, 60, C_WHITE, 3 ); else { drawRectangle( 320, 120, 60, 60, C_RGB(pulse%256,0,pulse%256), 3 ); dprint_opt(198, 222, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_BOTTOM, ">> CIRCUIT #10" ); } //dimage( 10, 10+40*CircuitSelection, &flag ); // CODE HERE TO PRINT WELCOME MENU dupdate(); pulse++; getInputCircuitSelect(); if (CircuitSelection==-1) return -1; } return CircuitSelection; } void getInputCircuitSelect( void ) { int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; int timeout = 1; while(1) { key_event_t ev = getkey_opt(opt, &timeout); if(ev.type == KEYEV_NONE) return -1; int key = ev.key; if (key==KEY_EXE) doneMenuCircuit = true; if (key==KEY_EXIT) CircuitSelection = -1; if (key==KEY_UP || key==KEY_LEFT) { if (CircuitSelection==0) CircuitSelection=9; else CircuitSelection--; } if (key==KEY_DOWN || key==KEY_RIGHT) { if (CircuitSelection==9) CircuitSelection=0; else CircuitSelection++; } } } void drawCredit( void ) { uint16_t pulse=0; int16_t offset=240; doneMenuCredit = false; while (!doneMenuCredit) { dclear( 0x0000 ); dimage( 0, 0, &mainscreen ); dfont(&autofont); dprint_opt(202, offset + 4, C_RGB(0,0,0), C_NONE, DTEXT_CENTER, DTEXT_TOP, "OUTRUN FOR GRAPH90" ); dprint_opt(200, offset + 2, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_TOP, "OUTRUN FOR GRAPH90" ); dfont(&autofontsmall); dprint_opt(200, offset + 32, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "PROUDLY CODED BY" ); dprint_opt(200, offset + 62, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "SLYVTT / MARCH 2022" ); dfont(&autofont); dprint_opt(202, offset + 124, C_RGB(0,0,0), C_NONE, DTEXT_CENTER, DTEXT_TOP, "CODE :" ); dprint_opt(200, offset + 122, C_RGB(255,0,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "CODE :" ); dfont(&autofontsmall); dprint_opt(200, offset + 162, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "SLYVTT" ); dprint_opt(200, offset + 192, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "WITH SUPPORT FROM LEPHE" ); dfont(&autofont); dprint_opt(202, offset + 254, C_RGB(0,0,0), C_NONE, DTEXT_CENTER, DTEXT_TOP, "VISUALS" ); dprint_opt(200, offset + 252, C_RGB(255,0,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "VISUALS" ); dfont(&autofontsmall); dprint_opt(200, offset + 292, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "SLYVTT" ); dprint_opt(200, offset + 322, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "WITH SUPPORT FROM INTERNET" ); dprint_opt(200, offset + 352, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "GOOGLE IS MY BEST FRIEND" ); dfont(&autofont); dprint_opt(202, offset + 414, C_RGB(0,0,0), C_NONE, DTEXT_CENTER, DTEXT_TOP, "MUSIC" ); dprint_opt(200, offset + 412, C_RGB(255,0,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "MUSIC" ); dfont(&autofontsmall); dprint_opt(200, offset + 452, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "SORRY, NO MUSIC ..." ); dprint_opt(200, offset + 482, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_TOP, "... MAYBE ONE DAY !!!" ); dfont(&autofont); dprint_opt(202, offset + 544, C_RGB(0,0,0), C_NONE, DTEXT_CENTER, DTEXT_TOP, "THANKS FOR PLAYING" ); dprint_opt(202, offset + 574, C_RGB(0,0,0), C_NONE, DTEXT_CENTER, DTEXT_TOP, "HOPE YOU ENJOYED" ); dprint_opt(200, offset + 542, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_TOP, "THANKS FOR PLAYING" ); dprint_opt(200, offset + 572, C_RGB(pulse%256,0,pulse%256), C_NONE, DTEXT_CENTER, DTEXT_TOP, "HOPE YOU ENJOYED" ); dupdate(); pulse++; offset--; getInputCredit(); } return; } void getInputCredit( void ) { int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; int timeout = 1; while(1) { key_event_t ev = getkey_opt(opt, &timeout); if(ev.type == KEYEV_NONE) return -1; int key = ev.key; if (key==KEY_EXE) doneMenuCredit = true; } }