Great Gamebuino game by AJSB. Ported to Pokitto by Jonne using automatic parser
Dependencies: PokittoLib
Fork of Armageddon by
Diff: maruino.cpp
- Revision:
- 9:949027352af6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/maruino.cpp Wed Oct 18 18:32:23 2017 +0000 @@ -0,0 +1,978 @@ +/* This file was automatically parsed from an Arduino sourcefile */ +/* by PokittoParser v0.1 Copyright 2016 Jonne Valola */ +/* USE AT YOUR OWN RISK - NO GUARANTEES GIVEN OF 100% CORRECTNESS */ + +#include <stdint.h> +#include "PokittoCore.h" + +const char lev[] PROGMEM = { + " "///////////////////////////////// + " BBBB F" + " BM?B CC B BB G" + " C C B ?BB M?? GG" + " gGGG GGG g g B BB GGG" + "GGGGGGGGGGGGGG GGGGGGGGGGGGGGG GGGGGGGGGGGGGGGGGGGGGG" + + " GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG"///////////////////////////////// + " CCC g GCCCCCCCCCCCCCCCCCCCCCCC " + " B??B GBBGGGGGGGGGGGGGGGGGGGGG CCC " + " ?M? BBBBBBB?B B " + " g B BB g g F" + "GGGGGGGG GGGGGGGGGGGGGGGGGG GGG GG GG GGGGGGGGGGGGGGGGGG" + + " GGGGGGGGGGG GGGGGGGGGGGGGGGGGGGGG GGGG"///////////////////////////////// + " GGGGGGGG G CCCCCC GG GGGGGGGGGGGGGGGGGGGGGGGG GGGG" + "GGG G GGGGGGGGGGG GGG GGGG" + "GGG GGGGGGGGGGGGGGGGGGGGGGGG GGGGGG GGGGGGGGGGG GGG " + "GGG g GGGGGGGGGGGFGGG " + "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG" + + " BB "///////////////////////////////// + " BBCCC " + " CC CC CC CC CC CC BBCCCCCC CC CC CC CC CC CC CC CC CC " + " CCCCCC GG F" + "GGGG g g g g g g g g g g Gg g G g g g g gGGGGGG" + "GGGGSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSGGGGGG" + + " S GGG "///////////////////////////////// + " B M S S GFG " + "BBBBBBB BBB BBB GBG " + "CCCCCCC BB S " + " GGG BBB BBB G g g g g gG " + "GGGGGGGGGGGGGGGGG GGGGGGGGGGGGGGGGG " + + " "///////////////////////////////// + " IIII F" + " IM?I CC I II I" + " C C I ?II M?? II" + " gIII III g g I II III" + "IIIIIIIIIIIIII IIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIII" + + + + "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"///////////////////////////////// + "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" + "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" + "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" + "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" + "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG" +}; + + + + +#include "PokittoCore.h" +/* Auto-generated function declarations */ +void loadLevel(int); +void nextLevel(); +void drawLevel(); +void removeEnt(int); +void clearEnts(); +void addEnt(int, int,const byte *); +void updateEnt(); +boolean Collide(float, float, const byte*); +void setup(); +void loop(); +void Menu(); +void start(); +void startGame(); +void inputCode(); +void controls(); +void lose(); +void win(); +void startTimer(); +void updateDisplay(); +void startPlayer(); +void updatePlayer(); +void drawPlayer(); +void getBig(); +void getSmall(); +void die(); +boolean playerCollide(); +void checkCode(char*); +Pokitto::Core gb; + + +#define MENULENGTH 4 +const char strPlay[] PROGMEM = "Play Game"; +const char strMainMenu[] PROGMEM = "Main Menu"; +const char strCode[] PROGMEM = "Input a code"; +const char strControls[] PROGMEM = "Controls"; +const char* const menu[MENULENGTH] PROGMEM = { + strPlay, strMainMenu, strControls, strCode, +}; + + +typedef struct { + int invincible; + float x; + float vx; + float y; + float vy; + byte h; + boolean flip; + boolean big; + boolean crouch; +} Char; + +typedef struct{ + float x; + float y; + float vx; + float vy; + boolean flip; + const byte *bitmap; +} Entity; + + + +extern const byte font3x5[]; +extern const byte font5x7[]; +extern const byte Title[] PROGMEM; +extern const char lev[] PROGMEM; +extern const byte Ground[] PROGMEM; +extern const byte Spikes[] PROGMEM; +extern const byte Brick[] PROGMEM; +extern const byte MysteryBlockC[] PROGMEM; +extern const byte MysteryBlockM[] PROGMEM; +extern const byte Coin[] PROGMEM; +extern const byte Empty[] PROGMEM; +extern const byte PlayerS[] PROGMEM; +extern const byte PlayerS1[] PROGMEM; +extern const byte PlayerT[] PROGMEM; +extern const byte PlayerT1[] PROGMEM; +extern const byte PlayerT2[] PROGMEM; +extern const byte PlayerT3[] PROGMEM; +extern const byte PlayerT4[] PROGMEM; +extern const byte PlayerT5[] PROGMEM; +extern const byte PlayerT6[] PROGMEM; +extern const byte PlayerC[] PROGMEM; +extern const byte Mushroom[] PROGMEM; +extern const byte Goomba[] PROGMEM; +extern const byte Flag[] PROGMEM; +Char player; + + +int cameraPos; +int frames; +int score; +int curLev; +int numLevs = 6; +int lives = 5; +byte time_b; +boolean running; +boolean disp = true; +char code[12] = ""; + +const byte *_block; +char curLevel[384] = ""; + + +int main() { + setup(); + while (gb.isRunning()) { + loop(); + } +} + +void loadLevel(int curLev){ + for(int i = 0; i<384; i++){//Loops through the level + curLevel[i] = (char)pgm_read_byte(lev + 384 * (curLev - 1) + i); + } + + +} + +void nextLevel(){ + if(curLev == numLevs){ + win(); + } + else{ + gb.popup(("Next Level!"), 20); + if(curLev == 6){ + gb.popup(("Remember lvl 1?"), 20); + } + curLev ++; + loadLevel(curLev); + player.y = player.x = 0; + time_b = 130; + cameraPos = 0; + } +} + +void drawLevel(){ + for(int i = 0; i<6; i++){ + for(int j = 0; j<64; j++){ + if((j*8 - cameraPos >= -8 && j*8 - cameraPos <= LCDWIDTH +8)){ + _block = NULL; + switch(curLevel[(i)*64+j]){ + case 'G' : + _block = Ground; + break; + case 'B' : + _block = Brick; + break; + case '?' : + _block = MysteryBlockC; + break; + case 'M' : + _block = MysteryBlockM; + break; + case 'C' : + _block = Coin; + break; + case 'S' : + _block = Spikes; + break; + case 'E' : + _block = Empty; + break; + case 'F' : + _block = Flag; + break; + case 'g' : + curLevel[(i)*64+j] = 'Q'; + addEnt(j*8, LCDHEIGHT - (8 * (6-i)), Goomba); + break; + default: + break; + } + + if(_block != NULL) { + if((_block == Coin || _block == Spikes) && gb.frameCount%20 >= 10){ + gb.display.drawBitmap(j*8 - cameraPos, LCDHEIGHT - (8 * (6-i)), _block, NOROT, FLIPH); + } + else{ + gb.display.drawBitmap(j*8 - cameraPos, LCDHEIGHT - (8 * (6-i)), _block); + } + } + } + else if(curLevel[(i)*64+j] == 'Q'){ + curLevel[(i)*64+j] = 'g'; + } + + } + } +} + +#define numEnt 10 +Entity entities[10]; +boolean collide; + + + +void removeEnt(int i){ + entities[i].bitmap = PlayerC; + entities[i].x = 0; + entities[i].vx = 0; + entities[i].y = 0; + entities[i].vy = 0; +} + +void clearEnts(){ + for(int i = 0; i<numEnt; i++){ + entities[i].x = entities[i].y = entities[i].vx = entities[i].vy = 0; + entities[i].bitmap = PlayerC; + } +} + +void addEnt(int x, int y,const byte *b){ + for(int i = 0; i<numEnt; i++){ + if(entities[i].bitmap == PlayerC){ + entities[i].bitmap = b; + entities[i].x = x; + entities[i].y = y; + entities[i].vy = 0; + if(b == Mushroom){ + entities[i].vx = 1; + } + else{ + entities[i].vx = -1; + } + + break; + } + } +} + +void updateEnt(){ + for(int i = 0; i< numEnt; i++){ + if(entities[i].bitmap != PlayerC){ + + entities[i].x += entities[i].vx; + if(Collide(entities[i].x, entities[i].y, entities[i].bitmap)){ + entities[i].x -= entities[i].vx; + entities[i].vx *= -1; + } + + entities[i].vy += .4; + if(entities[i].vy >2){ + entities[i].vy = 2; + } + + entities[i].y += entities[i].vy; + if(Collide(entities[i].x, entities[i].y, entities[i].bitmap)){ + entities[i].y -= entities[i].vy; + entities[i].vy /= 2; + } + + if(entities[i].y > LCDHEIGHT || entities[i].x - cameraPos <= -8 || entities[i].x - cameraPos > LCDWIDTH + 8){ + removeEnt(i); + } + + if(entities[i].bitmap == Goomba && gb.frameCount%10 >= 5){ + gb.display.drawBitmap(entities[i].x - cameraPos, entities[i].y, entities[i].bitmap, NOROT, FLIPH); + } + + else{ + gb.display.drawBitmap(entities[i].x - cameraPos, entities[i].y, entities[i].bitmap, NOROT, NOFLIP); + } + + } + } +} + +boolean Collide(float x, float y, const byte* bMap){ + collide = false; + for(int i = 0; i<6; i++){ + for(int j = 0; j<64; j++){ + _block = NULL; + switch(curLevel[(i)*64+j]){ + case 'G' : + _block = Ground; + break; + case 'B' : + _block = Brick; + break; + case '?' : + _block = MysteryBlockC; + break; + case 'M' : + _block = MysteryBlockM; + break; + case 'S' : + case 'I' : + case 'E' : + _block = Empty; + break; + default: + break; + } + + if(!(_block == NULL)){ + if(gb.collideBitmapBitmap(x, y, bMap, j*8, LCDHEIGHT - (8*(6-i)), _block)){ + collide = true; + } + } + } + } + return collide; +} + + +void setup(){ + // initialize the Gamebuino object + + gb.begin(); + gb.display.palette[0]=COLOR_WHITE; + gb.display.palette[1]=COLOR_BLACK; + gb.display.setFont(font5x7); + gb.battery.show = false; + start(); +} + + +void loop(){ + if(gb.update()){ + gb.battery.show = false; + if(running){ + updatePlayer(); + updateEnt(); + drawPlayer(); + drawLevel(); + updateDisplay(); + } + + } +} + +void Menu(){ + running = false; + gb.display.setFont(font5x7); + switch(gb.menu(menu, MENULENGTH)){ + case -1: //Nothing + start(); + break; + case 0: //Play game + startGame(); + break; + case 1: //Main menu + start(); + break; + case 2: //Display controls + controls(); + break; + case 3: //Code input screen + inputCode(); + break; + default: + break; + } +} + +void start(){ + // show the start menu + gb.titleScreen(("By: ajsb113"), Title); + Menu(); + +} +void startGame(){ + cameraPos = 0; + score = 0; + lives = 5; + running = true; + curLev = 1; + clearEnts(); + startTimer(); + startPlayer(); + loadLevel(curLev); + +} + +void inputCode(){ + while(!gb.buttons.pressed(BTN_A)){ + if(gb.update()){ + gb.display.cursorX = 0; + gb.display.cursorY = 5; + gb.display.textWrap = true; + gb.display.println("Press \25 to enter a code or \27 to return to menu"); + gb.display.textWrap = false; + } + } + gb.keyboard(code, 12); + Menu(); +} + +void controls(){ + while(!gb.buttons.pressed(BTN_A)){ + if(gb.update()){ + gb.display.cursorX = 0; + gb.display.cursorY = 0; + gb.display.setFont(font3x5); + gb.display.textWrap = true; + gb.display.println("Use \33 & \32 to move."); + gb.display.cursorY += 1; + gb.display.println("Press \30 to toggle HUD size."); + gb.display.cursorY += 1; + gb.display.println("Press \25 to jump."); + gb.display.cursorY += 1; + gb.display.println("Hold \26 to crouch"); + gb.display.cursorY += 1; + gb.display.println("Press \27 to return to menu."); + } + } + Menu(); +} + +void lose(){//temporary + running = false; + while(!gb.buttons.pressed(BTN_A)){ + if(gb.update()){ + gb.display.setFont(font5x7); + gb.display.cursorY = 5; + gb.display.cursorX = 15; + + gb.display.println("You lose \1"); + gb.display.print("Score:"); + gb.display.println(score); + gb.display.println("Press \25 to \n continue"); + } + } + Menu(); +} + +void win(){ + running = false; + while(!gb.buttons.pressed(BTN_A)){ + if(gb.update()){ + gb.display.setFont(font5x7); + gb.display.cursorY = 5; + gb.display.cursorX = 20; + + gb.display.println("You win!!\2"); + gb.display.print("Score:"); + gb.display.println(score); + gb.display.println("Press \25 to \n continue"); + } + } + Menu(); +} + +void startTimer(){ + time_b = 130; + frames = gb.frameCount; +} + +void updateDisplay(){ + if((gb.frameCount - frames)>=20){ + frames = gb.frameCount; + time_b --; + } + if(disp){ + gb.display.fillRect(0,0,LCDWIDTH,7); + gb.display.setColor(WHITE,BLACK); + gb.display.setFont(font3x5); + gb.display.cursorY = 1; + gb.display.cursorX = 1; + gb.display.print("\35:"); + gb.display.print((int)time_b); + gb.display.print(" \44:"); + gb.display.print((int)score); + gb.display.print(" \03:"); + gb.display.print((int)lives); + gb.display.setColor(BLACK,WHITE); + } + else{ + gb.display.fillRect(0,0,LCDWIDTH,5); + gb.display.setColor(WHITE,BLACK); + gb.display.setFont(font3x3); + gb.display.cursorY = 1; + gb.display.cursorX = 1; + gb.display.print("\35:"); + gb.display.print((int)time_b); + gb.display.print(" \44:"); + gb.display.print((int)score); + gb.display.print(" \03:"); + gb.display.print((int)lives); + gb.display.setColor(BLACK,WHITE); + } + gb.display.setFont(font3x5); +} + +boolean canJump = false; +boolean walking = false; +boolean bounce = false; +const byte *character; + +void startPlayer(){ + player.x = 0; + player.y = 0; + player.vx = 0; + player.vy = 0; + player.h = 4; + player.invincible = 40; + player.flip = false; + player.big = false; + player.crouch = false; +} + + +void updatePlayer(){ + walking = false; + if(time_b == 0){//time_b out + die(); + } + if(player.invincible > 0){//Invincibility frames + player.invincible--; + } + + if(gb.buttons.pressed(BTN_C)){//Main menu + Menu(); + } + if(gb.buttons.pressed(BTN_UP)){//Toggle display + disp = !disp; + } + + if(gb.buttons.timeHeld(BTN_B)){//Smart crouching + if(player.big && !player.crouch){ + player.y += 8; + } + player.crouch = true; + } + + else{ + if(player.big && player.crouch){//Checks if player can stand without colliding. + player.y -= 8; + if(playerCollide()){ + player.y += 8; + } + else{ + player.crouch = false; + } + } + } + + + + player.vx *= 0.75;//So player.vx slows + if(gb.buttons.repeat(BTN_RIGHT, 1)){//Move right + player.vx += .4; + player.flip = false; + walking = true; + } + + if(gb.buttons.repeat(BTN_LEFT,1)){//Move left + player.vx -= .4; + player.flip = true; + walking = true; + } + + if(player.big){ + if(player.crouch){ + character = PlayerC; + player.h = 8; + } + else if(walking){//Walking animation + player.h = 16; + if(gb.frameCount % 12 >= 0 && gb.frameCount % 12 < 2){character = PlayerT1;} + else if(gb.frameCount % 12 >= 2 && gb.frameCount % 12 < 4) { character = PlayerT2; } + else if(gb.frameCount % 12 >= 4 && gb.frameCount % 12 < 6) { character = PlayerT3; } + else if(gb.frameCount % 12 >= 6 && gb.frameCount % 12 < 8) { character = PlayerT4; } + else if(gb.frameCount % 12 >= 8 && gb.frameCount % 12 < 10) { character = PlayerT5; } + else if(gb.frameCount % 12 >= 10 && gb.frameCount % 12 < 12) { character = PlayerT6; } + } + else{ + character = PlayerT; + player.h = 16; + } + } + + else{ + if(gb.frameCount % 6 >= 0 && gb.frameCount % 6 < 3 && walking){ + character = PlayerS1; + player.h = 8; + } + else{ + character = PlayerS; + player.h = 8; + } + } + + checkCode(code); + + if(player.vx > 2){ + player.vx = 2; + } + + player.x += player.vx; + if(playerCollide()){//Collision on x-axis + player.x -= player.vx; + player.vx = 0; + } + + if(player.vy > 1){//Falling + canJump = false; + } + if(canJump && (gb.buttons.timeHeld(BTN_A) > 0 && gb.buttons.timeHeld(BTN_A) < 5)){//Jump + player.vy -= 1.3; + if (gb.buttons.timeHeld(BTN_A) < 2){ + gb.sound.playOK(); + } + } + player.vy += 0.4; + if(player.vy >5){ + player.vy = 2; + } + + + + if(gb.buttons.released(BTN_A)){//Prevents player from jumping multiple times midair + canJump = false; + } + + player.y += player.vy; + if(playerCollide()){//collision on y-axis + if(player.vy > 0){ + canJump = true; + for(int i = 0; i < player.vy; i++){ + player.y -= 1; + if(!playerCollide()){ + // We found the last open spot before the _block + player.vy = 0; // Stop moving + break; //Quit the loop + } + } + } + else{ + player.y -= player.vy; + player.vy /= 2; + } + } + + if(player.y > LCDHEIGHT){//fall to death + die(); + } + + if(player.x + 4 - cameraPos > (int)(LCDWIDTH/2) && cameraPos < (64*8)-(LCDWIDTH)){//Player is mid screen but screen isn't leaving the end of the level. + cameraPos = player.x - LCDWIDTH/2 + 4; + } + + if(player.x + 4 - cameraPos < (int)(LCDWIDTH/2) && cameraPos > 0){//Player is mid screen but screen isn't showing "before" the level + cameraPos = player.x - LCDWIDTH/2 + 4; + } +} + +void drawPlayer(){ + if(player.invincible % 2 != 1){ + if(!player.flip){ + gb.display.drawBitmap(player.x - cameraPos, player.y, character, NOROT, NOFLIP); + } + else{ + gb.display.drawBitmap(player.x - cameraPos, player.y, character, NOROT, FLIPH); + } + } +} + +void getBig(){ + if(!player.big){ + player.big = true; + player.crouch = true; + } +} + +void getSmall(){ + if(player.invincible <= 0){ + player.invincible = 40; + if(player.big){ + if(!player.crouch){ + player.y += 8; + } + player.big = false; + } + else{ + die(); + } + } +} + +void die(){ + if(lives == 0){ + lose(); + } + else{ + lives --; + time_b = 130; + gb.popup(("You died. \1"), 20); + clearEnts(); + startPlayer(); + cameraPos = 0; + loadLevel(curLev); + } +} + +boolean playerCollide(){ + collide = false; + for(int k = 0; k<numEnt; k++){ + if(gb.collideBitmapBitmap(entities[k].x, entities[k].y, entities[k].bitmap, player.x, player.y, character)){ + if(entities[k].bitmap == Mushroom){ + getBig(); + score += 100; + removeEnt(k); + } + + if(entities[k].bitmap == Goomba){ + if(player.vy > 0 && player.y + player.h - 4 < entities[k].y){//Ugly code checking for players feet being above goomba + removeEnt(k); + bounce = true; + } + else{ + getSmall(); + if(player.invincible <= 0){ + entities[k].vx *= -1; + } + } + } + } + + if(entities[k].bitmap != PlayerC && player.invincible <= 0){ + collide = gb.collideBitmapBitmap(player.x, player.y, character, entities[k].x, entities[k].y, entities[k].bitmap); + } + } + + for(int i = 0; i<6; i++){ + for(int j = 0; j<64; j++){ + _block = NULL; + switch(curLevel[(i)*64+j]){ + case 'G' : + _block = Ground; + break; + case 'B' : + _block = Brick; + break; + case '?' : + _block = MysteryBlockC; + break; + case 'M' : + _block = MysteryBlockM; + break; + case 'I' ://Invisible + case 'E' : + _block = Empty; + break; + case 'C' : + _block = Coin; + break; + case 'F' : + _block = Flag; + break; + case 'S' : + _block = Spikes; + break; + default: + break; + } + + if(_block != NULL){ + if(gb.collideBitmapBitmap(player.x, player.y, character, j*8, LCDHEIGHT - (8*(6-i)), _block)){ + if(_block == Flag){ + nextLevel(); + } + + if(player.vy < 0 && player.y > LCDHEIGHT - (8*(5-i)) - 1 && (player.x < (j+1)*8 && player.x + 8 > j*8)){//Checks if under _block + if(_block == Brick && player.big){ + curLevel[i*64+j] = NULL; + } + if(_block == MysteryBlockC){ + curLevel[(i-1)*64+j] = 'C'; + curLevel[i*64+j] = 'E'; + } + if(_block == MysteryBlockM){ + curLevel[i*64+j] = 'E'; + addEnt(j*8, LCDHEIGHT - (8 * (7-i)), Mushroom); + } + } + + if(_block == Spikes){ + getSmall(); + collide = true; + } + + if(_block == Coin){ + score += 100; + curLevel[i*64+j] = NULL; + gb.sound.playOK(); + collide = false; + } + + else{ + collide = true; + } + + } + } + } + } + if(bounce){ + player.vy = -4; + bounce = false; + } + return collide; +} + + + +const byte PlayerT[] PROGMEM = {8,16,B01111110,B11111111,B11100011,B11000000,B11001010,B10001010,B00000000,B00000000,B11111111,B11011011,B11011011,B11111111,B01111110,B01100110,B01100110,B01100110,}; +const byte PlayerT1[] PROGMEM = {8,16,B01111110,B11111111,B11100011,B11000000,B11001010,B10001010,B00000000,B00000000,B11111111,B11011011,B11011011,B11111111,B01111110,B01100011,B01100011,B01100000,}; +const byte PlayerT2[] PROGMEM = {8,16,B01111110,B11111111,B11100011,B11000000,B11001010,B10001010,B00000000,B00000000,B11111111,B11011011,B11011011,B11111111,B01111110,B01100011,B01100011,B01100011,}; +const byte PlayerT3[] PROGMEM = {8,16,B01111110,B11111111,B11100011,B11000000,B11001010,B10001010,B00000000,B00000000,B11111111,B11011011,B11011011,B11111111,B01111110,B01100110,B11000110,B11000110,}; +const byte PlayerT4[] PROGMEM = {8,16,B01111110,B11111111,B11100011,B11000000,B11001010,B10001010,B00000000,B00000000,B11111111,B11011011,B11011011,B11111111,B01111110,B11000110,B11000110,B00000110,}; +const byte PlayerT5[] PROGMEM = {8,16,B01111110,B11111111,B11100011,B11000000,B11001010,B10001010,B00000000,B00000000,B11111111,B11011011,B11011011,B11111111,B01111110,B00110110,B00110110,B00000110,}; +const byte PlayerT6[] PROGMEM = {8,16,B01111110,B11111111,B11100011,B11000000,B11001010,B10001010,B00000000,B00000000,B11111111,B11011011,B11011011,B11111111,B01111110,B01100110,B01100110,B01100000,}; +const byte PlayerS[] PROGMEM = {8,8,B01111110,B01100001,B01101010,B01000000,B11111111,B11011011,B01111110,B01100110,}; +const byte PlayerS1[] PROGMEM = {8,8,B01111110,B01100001,B01101010,B01000000,B11111111,B11011011,B01111110,B00111100,}; +const byte PlayerC[] PROGMEM = {8,8,B01111110,B11000011,B00100100,B10100101,B10000001,B11111111,B01111110,B01100110,}; +const byte Ground[] PROGMEM = {8,8,B11111111,B10001001,B10001001,B10001111,B11001001,B10110001,B10010001,B11111111,}; +const byte Brick[] PROGMEM = {8,8,B11111111,B00010001,B11111111,B01000100,B11111111,B00010001,B11111111,B01000100,}; +const byte Spikes[] PROGMEM = {8,8,B00100010,B00100010,B01010101,B01010101,B10001000,B10101010,B10101010,B11111111,}; +const byte MysteryBlockC[] PROGMEM = {8,8,B11111111,B10011001,B10100101,B10000101,B10001001,B10000001,B10001001,B11111111,}; +const byte MysteryBlockM[] PROGMEM = {8,8,B11111111,B10011001,B10100101,B10000101,B10001001,B10000001,B10001001,B11111111,}; +const byte Coin[] PROGMEM = {8,8,B00011000,B00100100,B01010010,B01010010,B01001010,B01001010,B00100100,B00011000,}; +const byte Empty[] PROGMEM = {8,8,B11111111,B10000001,B10000001,B10000001,B10000001,B10000001,B10000001,B11111111,}; +const byte Flag[] PROGMEM = {8,8,B00111000,B00110110,B00101011,B00110110,B00111000,B00100000,B00100000,B01110000,}; +const byte Mushroom[] PROGMEM = {8,8,B00111100,B01011010,B10100101,B11011011,B10000001,B01011010,B01000010,B00111100,}; +const byte Goomba[] PROGMEM = {8,8,B00111100,B01000010,B10100101,B10100101,B01111110,B01000010,B10111111,B11100011,}; + +const byte Title[] PROGMEM = {64,30, +B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, +B00000001,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, +B00001110,B00111000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, +B00010100,B00010100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, +B00100100,B00010010,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, +B00101101,B11011010,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, +B01111010,B00101111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, +B01000100,B00010001,B00011000,B11000000,B00000000,B00000000,B00000000,B00000000, +B01000100,B00010001,B00011000,B11000000,B00000000,B00000000,B00000000,B00000000, +B10000010,B00100000,B10011000,B11000000,B00000000,B00000010,B00000000,B00000000, +B10000001,B11000000,B10010101,B01000000,B00000000,B00000010,B00000000,B00000000, +B10001111,B11110000,B10010101,B01000110,B00101001,B00001000,B01011000,B11110000, +B11111000,B00011111,B10010101,B01000001,B00110101,B00001010,B01100101,B00001000, +B00100010,B00100010,B00010010,B01000001,B00110101,B00001010,B01100101,B00001000, +B00100010,B00100010,B00010000,B01000111,B00100001,B00001010,B01000101,B00001000, +B00100010,B00100010,B00010000,B01001001,B00100001,B00001010,B01000101,B00001000, +B00011000,B00001100,B00010000,B01001001,B00100001,B00001010,B01000101,B00001000, +B00001000,B00001000,B00010000,B01000111,B10100000,B11111010,B01000100,B11110000, +B00000111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, +B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, +B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, +B00000100,B00010000,B01000001,B00000100,B00010000,B01000001,B00000100,B00010000, +B00000100,B00010000,B01000001,B00000100,B00010000,B01000001,B00000100,B00010000, +B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, +B00100000,B10000010,B00001000,B00100000,B10000010,B00001000,B00100000,B10000010, +B00100000,B10000010,B00001000,B00100000,B10000010,B00001000,B00100000,B10000010, +B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, +B00000100,B00010000,B01000001,B00000100,B00010000,B01000001,B00000100,B00010000, +B00000100,B00010000,B01000001,B00000100,B00010000,B01000001,B00000100,B00010000, +B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, +}; + +/* +SPOILERS AHEAD!!!!! ONLY SCROLL PAST THIS IF YOU WANT THE CODES SPOILED!!! + + + + + + + + + + + + + + + + + + + + + + + + + + + +*/ + +void checkCode(char* code){ + if(strstr(code, "\30\30\31\31\33\32\33\32\26\25\27")){ + lives = 113; + } + if(strstr(code, "\50\42\55\42\51\57\57\40\174\137\174")){ + character = Brick; + player.h = 8; + } + if(strstr(code, "\141\152\163\142\61\61\63")){ + score += 10; + } + if(strstr(code, "\101\40\143\157\144\145")){ + numLevs = 7; + } + if(strstr(code, "\134\50\136\137\136\51\57")){ + player.invincible = 2; + } +} + +