void lvlOutro(Game *game, Level *level, Controller *userInput) { char title[50]; char score[50]; char livesLeft[50]; char hitRatioPercent[50]; char print = FALSE; float hitRatio = (float)level->hits/(float)level->numberOfFires; playMusic(theme2,TRUE); game->score *= hitRatio; sprintf(title, "LEVEL %d PERFORMANCE", game->levelNum); sprintf(score, "Score: %d", game->score); sprintf(livesLeft, "Remaining lives: %d", level->player.lives); sprintf(hitRatioPercent, "Hit and Miss Ratio: %.2lf%%", hitRatio*100); while(!userInput->start) { // wait for start button lcd_fillScreen(BLACK); lcd_putString( 50, 50, (unsigned char *)title ); lcd_putString(50, 100, (unsigned char *)score); lcd_putString(50, 110, (unsigned char *)livesLeft); lcd_putString(50, 120, (unsigned char *)hitRatioPercent); if(game->seed%10 == 0) { print = !print; } if(print) { lcd_putString(50, 300, "Press START to continue..."); } game->seed++; pollController(userInput); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer } }
void lvlIntro(Game *game, Level *level) { char levelNumber[50]; int row,col,xPos, j = 0; sprintf(levelNumber, "LEVEL %d", game->levelNum); playMusic(intro, FALSE); // Draw stars, increasing length (speeding up) for ( j = 0; j < 30; j++ ) { lcd_fillScreen(BLACK); for (row = level->stars.y; row < DISPLAY_HEIGHT; row += STAR_SPACING_HEIGHT) { for (col = level->stars.x; col < DISPLAY_WIDTH; col++) { if (xPos%STAR_SPACING_WIDTH == 0) { vLine(col,row, row + j, WHITE); } xPos++; } } xPos=0; // reset xPos lcd_putString(100, 50, (unsigned char *)levelNumber); drawShip(level->player.currPos.x, -3*j + INIT_SHIP_POS_Y, level->player.type); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer } lcd_fillScreen(WHITE); playMusic(RainPizz,FALSE); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer mdelay(150); // Draw stars, decreasing length (slowing down) for ( j = 15; j > 0; j-- ) { lcd_fillScreen(BLACK); for (row = level->stars.y; row < DISPLAY_HEIGHT; row += STAR_SPACING_HEIGHT) { for (col = level->stars.x; col < DISPLAY_WIDTH; col++) { if (xPos%STAR_SPACING_WIDTH == /*(row%2)*/ 0) { vLine(col,row, row + j, WHITE); } xPos++; } } xPos=0; // reset xPos lcd_putString(100, 50, (unsigned char *)levelNumber); drawShip(level->player.currPos.x, level->player.currPos.y - j*j, level->player.type); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer mdelay(100); } }
void pauseLevel (Level *level, Controller *levelInput) { // draw stuff pauseMenu(); pollController(levelInput); // debounce while (levelInput->start) { //block pollController(levelInput); } // wait for start button press while ((!levelInput->start) && (level->levelOver != SKIP_LEVEL)) { //block pollController(levelInput); if (levelInput->a) { // doesn't actually skip level yet lcd_putString(50, 80, "Skipping level"); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer level->levelOver = SKIP_LEVEL; } } mdelay(500); }
void credits (Controller *userInput) { int i = DISPLAY_HEIGHT; playTheme(); pollController(userInput); while((!userInput->x) && (i+70 > 0)) { lcd_fillScreen(BLACK); lcd_putString(DISPLAY_WIDTH/2-20, i, "CREDITS"); lcd_putString(20, i + 30, "Shanush and James -- Team Atari"); lcd_putString(20, i + 50, " Victor -- Example Project"); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer pollController(userInput); i-=2; } stopMusic(); mdelay(5000); }
void drawGameInfo(Game *game, Level *level) { int i; char score[100]; sprintf(score, "Score: %d Level: %d", game->score, game->levelNum); lcd_putString(0,0, (unsigned char *)score); for (i = 0; i < level->player.lives; i++) { lcd_BMP( DISPLAY_WIDTH, 0, -1*(i+1), -1,Heart, TRUE, FALSE); } }
void gameOverScreen(Game *game, Level *level, Controller *userInput) { char extraMarks[50]; lcd_fillScreen(BLACK); lcd_putString(95, 100, (unsigned char *)"GAMEOVER"); lcd_putString(20, 200, (unsigned char *)"Insert 1 extra mark(s) for"); lcd_putString(20, 210, (unsigned char *)"extra lives?"); lcd_putString(20, 235, (unsigned char *)"-- Y (yes) / B (no)"); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer pollController(userInput); while(!(userInput->y || userInput->b)) { pollController(userInput); } if(userInput->y) { level->levelOver = MARKS_INSERTED; game->extraMarks++; sprintf(extraMarks, "You have inserted %d extra", game->extraMarks); lcd_putString(20, 260, (unsigned char *)extraMarks); lcd_putString(20, 270, "mark(s) in total!"); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer //mdelay(2000); } }
//LCD section is 0x1C void instrCall_LCD(char instruction, char* datain, char dataLength) { switch (instruction) { case LCD_INIT: { lcd_init(); break; } case LCD_WRITE: { lcd_putString(datain, dataLength); break; } case LCD_CLEAR: { lcd_clear(); break; } } }
int titleScreen (Controller *userInput, int highestScore, int *numberOfLives, char *shipType) { char print = TRUE; Position star; int seed = 1; int i = 0; char score[50]; unsigned short *universianArray[SPLASH_FRAMES]; universianArray[0] = Universian1; universianArray[1] = Universian2; universianArray[2] = Universian3; universianArray[3] = Universian4; universianArray[4] = Universian5; universianArray[5] = Universian6; lcd_fillScreen(BLACK); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer star.x = 0; star.y = 0; mdelay(300); playTheme(); for (i = 0; i < SPLASH_FRAMES; i++) { drawBackground(&star); lcd_BMP(DISPLAY_WIDTH/2, SPLASH_HEIGHT, -(0.5), -(0.5), universianArray[i], TRUE, FALSE); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer mdelay(SPLASH_DELAY); } mdelay(1000); sprintf(score, "Highest Score: %9d", highestScore); while(!userInput->start) { // wait for start button drawBackground(&star); drawShip(INIT_SHIP_POS_X, INIT_SHIP_POS_Y, DEFAULT_SHIP_TYPE); lcd_BMP(DISPLAY_WIDTH/2, SPLASH_HEIGHT, -(0.5), -(0.5), Universian6, TRUE, FALSE); if(seed%BLINK_RATE == 0) { print = !print; } if(print) { lcd_putString(50, 300, "Press START to continue..."); //lcd_putString(50, SPLASH_HEIGHT+27, "Press START to continue..."); //lcd_putString(50, 300, "Press START to continue..."); } lcd_putString(50, SPLASH_HEIGHT+37, (unsigned char *)score); lcd_putString(50, SPLASH_HEIGHT+55, " Made by"); lcd_putString(50, SPLASH_HEIGHT+65, " James Slack-smith"); lcd_putString(50, SPLASH_HEIGHT+75, "Shanush Prema Thasarathan"); seed++; pollController(userInput); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer /* if (userInput->select) { selectMenu(userInput, numberOfLives, shipType); } */ mdelay(100); pollController(userInput); } stopMusic(); mdelay(500); return seed; }
void selectMenu (Controller *userInput, int *numberOfLives, char *shipType) { int i = 0; int seed = 1; int print = TRUE; pollController(userInput); do { lcd_fillScreen(BLACK); if (userInput->left && *numberOfLives > 3) { (*numberOfLives)--; } else if (userInput->right && *numberOfLives < 5) { (*numberOfLives)++; } else if (userInput->left_shoulder) { *shipType = NUMBER_OF_SHIPS; } else if (userInput->right_shoulder) { *shipType = 1; } lcd_putString(LEFT_ALIGN, TOP_ITEM, "NUMBER OF LIVES"); for (i = 0; i < *numberOfLives; i++) { lcd_BMP( LEFT_ALIGN, TOP_ITEM+15, 1*(i+1), 0,Heart, TRUE, FALSE); } lcd_putString(LEFT_ALIGN, TOP_ITEM+34, "Right and left to increase and"); lcd_putString(LEFT_ALIGN, TOP_ITEM+44, "decrease lives"); lcd_putString(LEFT_ALIGN, TOP_ITEM+60, "Ship sprite"); switch (*shipType) { case 1: lcd_BMP(DISPLAY_WIDTH/2, TOP_ITEM+90, -(0.5), -(0.5), ship1, TRUE, TRUE); break; default: lcd_BMP(DISPLAY_WIDTH/2, TOP_ITEM+90, -(0.5), -(0.5), ship2, TRUE, FALSE); break; } lcd_putString(LEFT_ALIGN, TOP_ITEM+110, "Left and Right shoulder to "); lcd_putString(LEFT_ALIGN, TOP_ITEM+120, "change ship"); // Controls lcd_putString(LEFT_ALIGN, CONTROL_LIST, "------------------------------"); lcd_putString(LEFT_ALIGN, CONTROL_LIST+10, "Game Controls"); lcd_putString(LEFT_ALIGN, CONTROL_LIST+30, "A - fire 1"); lcd_putString(LEFT_ALIGN, CONTROL_LIST+40, "B - fire 2"); lcd_putString(LEFT_ALIGN, CONTROL_LIST+50, "D PAD - ship movement"); lcd_putString(LEFT_ALIGN, CONTROL_LIST+60, "START - pause"); if(seed%BLINK_RATE == 0) { print = !print; } if(print) { lcd_putString(50, 300, "Press START to continue..."); //lcd_putString(50, SPLASH_HEIGHT+27, "Press START to continue..."); //lcd_putString(50, 300, "Press START to continue..."); } seed++; memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer pollController(userInput); mdelay(50); } while (userInput->start == FALSE); }
void pauseMenu (void) { lcd_fillScreen(BLACK); lcd_putString(50,50,"Level paused"); lcd_putString(50, 70, "Skip Level: A"); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer }