Armageddon - a missile commad clone by Wuuff, originally for Gamebuino. Conversion by Jonne

Dependencies:   PokittoLib

Fork of Asterocks by Pokitto Community Team

Committer:
Pokitto
Date:
Sun Jul 01 06:33:02 2018 +0000
Revision:
21:153974d672f8
Parent:
15:933ac6bcd8b8
Highscore saving added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Pokitto 5:56c4f2f12ec0 1 /* This file was automatically parsed from an Arduino sourcefile */
Pokitto 5:56c4f2f12ec0 2 /* by PokittoParser v0.1 Copyright 2016 Jonne Valola */
Pokitto 5:56c4f2f12ec0 3 /* USE AT YOUR OWN RISK - NO GUARANTEES GIVEN OF 100% CORRECTNESS */
Pokitto 5:56c4f2f12ec0 4
Pokitto 5:56c4f2f12ec0 5 #include "PokittoCore.h"
Pokitto 21:153974d672f8 6 #include "PokittoCookie.h"
Pokitto 21:153974d672f8 7
Pokitto 21:153974d672f8 8 #define NUM_HIGHSCORES 5
Pokitto 21:153974d672f8 9 #define NAME_SIZE 10
Pokitto 21:153974d672f8 10 #define ENTRY_SIZE 15
Pokitto 21:153974d672f8 11
Pokitto 21:153974d672f8 12 /* Writing directly to EEPROM is deprecated */
Pokitto 21:153974d672f8 13 /*
Pokitto 21:153974d672f8 14 uint32_t highscores[NUM_HIGHSCORES] = {10000,7000,5000,4000,2000};
Pokitto 21:153974d672f8 15 char names[NUM_HIGHSCORES][NAME_SIZE+1] = {"Crack Shot", "Defender", "Gunner", "We Tried", "No Hope"};
Pokitto 21:153974d672f8 16 */
Pokitto 21:153974d672f8 17
Pokitto 21:153974d672f8 18 /* This is how you do it with the PokittoCookie class !!!*/
Pokitto 21:153974d672f8 19 class gdata : public Pokitto::Cookie {
Pokitto 21:153974d672f8 20 public:
Pokitto 21:153974d672f8 21 uint32_t highscores[NUM_HIGHSCORES];
Pokitto 21:153974d672f8 22 char names[NUM_HIGHSCORES][NAME_SIZE+1];
Pokitto 21:153974d672f8 23 int check_number;
Pokitto 21:153974d672f8 24 gdata() {
Pokitto 21:153974d672f8 25 }
Pokitto 21:153974d672f8 26 };
Pokitto 21:153974d672f8 27
Pokitto 21:153974d672f8 28 gdata gamedata;
Pokitto 21:153974d672f8 29
Pokitto 5:56c4f2f12ec0 30 /* Auto-generated function declarations */
Pokitto 5:56c4f2f12ec0 31 void setup();
Pokitto 5:56c4f2f12ec0 32 void nextStage();
Pokitto 5:56c4f2f12ec0 33 void nextLull();
Pokitto 5:56c4f2f12ec0 34 void drawScore();
Pokitto 5:56c4f2f12ec0 35 void drawTargets();
Pokitto 5:56c4f2f12ec0 36 void drawCities();
Pokitto 5:56c4f2f12ec0 37 void drawAmmo();
Pokitto 5:56c4f2f12ec0 38 void drawMissiles();
Pokitto 5:56c4f2f12ec0 39 void drawDetonations();
Pokitto 5:56c4f2f12ec0 40 void launchMissile(uint8_t);
Pokitto 5:56c4f2f12ec0 41 void tryLaunchEnemy();
Pokitto 5:56c4f2f12ec0 42 void stepMissiles();
Pokitto 5:56c4f2f12ec0 43 void stepDetonations();
Pokitto 5:56c4f2f12ec0 44 void stepCollision();
Pokitto 5:56c4f2f12ec0 45 void checkMenu();
Pokitto 5:56c4f2f12ec0 46 void checkWin();
Pokitto 5:56c4f2f12ec0 47 void checkLose();
Pokitto 5:56c4f2f12ec0 48 void stepGame();
Pokitto 5:56c4f2f12ec0 49 void drawLull();
Pokitto 5:56c4f2f12ec0 50 void stepLull();
Pokitto 5:56c4f2f12ec0 51 void stepDead();
Pokitto 5:56c4f2f12ec0 52 void stepPregame();
Pokitto 5:56c4f2f12ec0 53 void loop();
Pokitto 5:56c4f2f12ec0 54 void loadHighscores();
Pokitto 5:56c4f2f12ec0 55 uint8_t isHighscore(uint32_t);
wuuff 14:41173f26c0ef 56 void saveHighscore(uint32_t,char*);
Pokitto 5:56c4f2f12ec0 57 void drawHighscores();
Pokitto 5:56c4f2f12ec0 58 void initSound();
Pokitto 5:56c4f2f12ec0 59 void playSound(uint8_t);
Pokitto 21:153974d672f8 60
Pokitto 21:153974d672f8 61
Pokitto 21:153974d672f8 62 Pokitto::Core gb; // game object
Pokitto 21:153974d672f8 63
Pokitto 5:56c4f2f12ec0 64
Pokitto 5:56c4f2f12ec0 65 int main() {
Pokitto 5:56c4f2f12ec0 66 setup();
wuuff 13:b133c46dbda7 67 gb.display.setDefaultPalette();
Pokitto 5:56c4f2f12ec0 68 while (gb.isRunning()) {
Pokitto 5:56c4f2f12ec0 69 loop();
Pokitto 5:56c4f2f12ec0 70 }
Pokitto 5:56c4f2f12ec0 71 }
Pokitto 5:56c4f2f12ec0 72
wuuff 14:41173f26c0ef 73 #define WIDTH 110
wuuff 14:41173f26c0ef 74 #define HEIGHT 88
wuuff 14:41173f26c0ef 75 #define TEXT_WIDTH 6
wuuff 14:41173f26c0ef 76 #define TEXT_HEIGHT 8
wuuff 14:41173f26c0ef 77
wuuff 14:41173f26c0ef 78 const byte armageddon[] PROGMEM = {112,88,
wuuff 14:41173f26c0ef 79 B11111111,B11111111,B11111000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 80 B11111111,B11111111,B11111000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 81 B11111111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001111,B11111100,
wuuff 14:41173f26c0ef 82 B11111111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001111,B11111100,
wuuff 14:41173f26c0ef 83 B11111111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001111,B11111100,
wuuff 14:41173f26c0ef 84 B11111000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01111100,
wuuff 14:41173f26c0ef 85 B11111000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01111100,
wuuff 14:41173f26c0ef 86 B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001100,
wuuff 14:41173f26c0ef 87 B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001100,
wuuff 14:41173f26c0ef 88 B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001100,
wuuff 14:41173f26c0ef 89 B00000001,B10000001,B11100000,B00110000,B11000000,B11000000,B00111000,B00111111,B10011110,B00000111,B10000000,B00011000,B00011000,B01100000,
wuuff 14:41173f26c0ef 90 B00000001,B10000001,B11100000,B00110000,B11000000,B11000000,B00111000,B00111111,B10011110,B00000111,B10000000,B00011000,B00011000,B01100000,
wuuff 14:41173f26c0ef 91 B00000001,B10000001,B10011000,B00111001,B11000000,B11000000,B11000110,B00110000,B00011001,B10000110,B01100000,B01100110,B00011100,B01100000,
wuuff 14:41173f26c0ef 92 B00000001,B10000001,B10011000,B00111001,B11000000,B11000000,B11000110,B00110000,B00011001,B10000110,B01100000,B01100110,B00011100,B01100000,
wuuff 14:41173f26c0ef 93 B00000001,B10000001,B10011000,B00111001,B11000000,B11000000,B11000110,B00110000,B00011001,B10000110,B01100000,B01100110,B00011100,B01100000,
wuuff 14:41173f26c0ef 94 B00000110,B01100001,B11111000,B00111001,B11000011,B00110000,B11000000,B00111111,B00011000,B01100110,B00011001,B10000001,B10011011,B01100000,
wuuff 14:41173f26c0ef 95 B00000110,B01100001,B11111000,B00111001,B11000011,B00110000,B11000000,B00111111,B00011000,B01100110,B00011001,B10000001,B10011011,B01100000,
wuuff 14:41173f26c0ef 96 B00000111,B11100001,B10011000,B00110110,B11000011,B11110000,B11001110,B00110000,B00011000,B01100110,B00011001,B10000001,B10011000,B11100000,
wuuff 14:41173f26c0ef 97 B00000111,B11100001,B10011000,B00110110,B11000011,B11110000,B11001110,B00110000,B00011000,B01100110,B00011001,B10000001,B10011000,B11100000,
wuuff 14:41173f26c0ef 98 B00000111,B11100001,B10011000,B00110110,B11000011,B11110000,B11001110,B00110000,B00011000,B01100110,B00011001,B10000001,B10011000,B11100000,
wuuff 14:41173f26c0ef 99 B00000110,B01100001,B10011100,B00110000,B11000011,B00110000,B11000110,B00110000,B00011001,B10000110,B01100000,B01100110,B00011000,B01100000,
wuuff 14:41173f26c0ef 100 B00000110,B01100001,B10001110,B00110000,B11000011,B00110000,B11000110,B00110000,B00011001,B10000110,B01100000,B01100110,B00011000,B01100000,
wuuff 14:41173f26c0ef 101 B00011110,B01111001,B10000110,B00110000,B11001111,B00111100,B00111000,B00111111,B10011110,B00000111,B10000000,B00011000,B00011000,B01100000,
wuuff 14:41173f26c0ef 102 B00011110,B01111001,B10000110,B00110000,B11001111,B00111100,B00111000,B00111111,B10011110,B00000111,B10000000,B00011000,B00011000,B01100000,
wuuff 14:41173f26c0ef 103 B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001100,
wuuff 14:41173f26c0ef 104 B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001100,
wuuff 14:41173f26c0ef 105 B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001100,
wuuff 14:41173f26c0ef 106 B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00011100,
wuuff 14:41173f26c0ef 107 B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00011100,
wuuff 14:41173f26c0ef 108 B11111000,B00000000,B00000000,B00000000,B01111111,B10000000,B00000000,B00000000,B00000111,B11111000,B00000000,B00000000,B00000000,B01111100,
wuuff 14:41173f26c0ef 109 B11111000,B00000000,B00000000,B00000000,B01111111,B10000000,B00000000,B00000000,B00000111,B11111000,B00000000,B00000000,B00000000,B01111100,
wuuff 14:41173f26c0ef 110 B11111000,B00000000,B00000000,B00000000,B01111111,B10000000,B00000000,B00000000,B00000111,B11111000,B00000000,B00000000,B00000000,B01111100,
wuuff 14:41173f26c0ef 111 B11111111,B10000000,B00000000,B00111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11110000,B00000000,B00000111,B11111100,
wuuff 14:41173f26c0ef 112 B11111111,B10000000,B00000000,B00111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11110000,B00000000,B00000111,B11111100,
wuuff 14:41173f26c0ef 113 B11111111,B11110000,B00000111,B11111111,B11111111,B11111111,B00000000,B00000011,B11111111,B11111111,B11111111,B10000000,B00111111,B11111100,
wuuff 14:41173f26c0ef 114 B11111111,B11110000,B00000111,B11111111,B11111111,B11111111,B00000000,B00000011,B11111111,B11111111,B11111111,B10000000,B00111111,B11111100,
wuuff 14:41173f26c0ef 115 B11111111,B11110000,B00000111,B11111111,B11111111,B11111111,B00000000,B00000011,B11111111,B11111111,B11111111,B10000000,B00111111,B11111100,
wuuff 14:41173f26c0ef 116 B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B00000000,B00000011,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 117 B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B00000000,B00000011,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 118 B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11000000,B00001111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 119 B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11000000,B00001111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 120 B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11000000,B00001111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 121 B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11000000,B00001111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 122 B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11000000,B00001111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 123 B11111111,B11111111,B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000011,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 124 B11111111,B11111111,B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000011,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 125 B11111111,B11111111,B11111111,B11111111,B10000000,B11111111,B11000000,B00001111,B11111100,B00000111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 126 B11111111,B11111111,B11111111,B11111111,B10000000,B11111111,B11000000,B00001111,B11111100,B00000111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 127 B11111111,B11111111,B11111111,B11111111,B10000000,B11111111,B11000000,B00001111,B11111100,B00000111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 128 B11111111,B11111111,B11111111,B11111110,B01111111,B11111111,B00000000,B00000011,B11111111,B11111001,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 129 B11111111,B11111111,B11111111,B11111110,B01111111,B11111111,B00000000,B00000011,B11111111,B11111001,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 130 B11111111,B11111111,B11111111,B11111110,B01111111,B11111111,B00000000,B00000011,B11111111,B11111001,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 131 B11111111,B11111111,B11111111,B11111110,B01111111,B11111111,B00000000,B00000011,B11111111,B11111001,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 132 B11111111,B11111111,B11111111,B11111110,B01111111,B11111111,B00000000,B00000011,B11111111,B11111001,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 133 B11111111,B11111111,B11111111,B11111110,B01111111,B11111111,B00000000,B00000011,B11111111,B11111001,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 134 B11111111,B11111111,B11111111,B11111110,B01111111,B11111111,B00000000,B00000011,B11111111,B11111001,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 135 B11111111,B11111111,B11111111,B11111111,B10000000,B11111111,B00000000,B00000011,B11111100,B00000111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 136 B11111111,B11111111,B11111111,B11111111,B10000000,B11111111,B00000000,B00000011,B11111100,B00000111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 137 B11111111,B11111111,B11111111,B11111111,B10000000,B11111111,B00000000,B00000011,B11111100,B00000111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 138 B11111111,B11111111,B11111111,B11111111,B11111111,B00000011,B00000000,B00000011,B00000011,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 139 B11111111,B11111111,B11111111,B11111111,B11111111,B00000011,B00000000,B00000011,B00000011,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 140 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 141 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 142 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 143 B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B00000000,B00000011,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 144 B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B00000000,B00000011,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 145 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 146 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 147 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 148 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 149 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 150 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 151 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 152 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 153 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 154 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 155 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 156 B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 157 B11111111,B11111111,B11111111,B11111111,B11111111,B11111000,B00000000,B00000000,B01111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 158 B11111111,B11111111,B11111111,B11111111,B11111111,B11111000,B00000000,B00000000,B01111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 159 B11111111,B11111111,B11111111,B11111111,B11111111,B11111000,B00000000,B00000000,B01111111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 160 B11111111,B11111111,B11111111,B11111111,B11111111,B11100000,B00000000,B00000000,B00011111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 161 B11111111,B11111111,B11111111,B11111111,B11111111,B11100000,B00000000,B00000000,B00011111,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 162 B11111111,B11111111,B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000011,B11111111,B11111111,B11111111,B11111111,B11111100,
wuuff 14:41173f26c0ef 163 B11111111,B11111111,B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000011,B11010101,B01010100,B01000111,B00010001,B01000100,
wuuff 14:41173f26c0ef 164 B11111111,B11111111,B11111111,B11111111,B11111111,B00000000,B00000000,B00000000,B00000011,B11010101,B01010101,B11011111,B11010101,B01110100,
wuuff 14:41173f26c0ef 165 B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B00000000,B00000000,B11000101,B01010100,B11001111,B00110101,B01101100,
wuuff 14:41173f26c0ef 166 B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B00000000,B00000000,B11010100,B01000101,B11011111,B00010001,B01011100,
Pokitto 5:56c4f2f12ec0 167 };
Pokitto 5:56c4f2f12ec0 168
Pokitto 5:56c4f2f12ec0 169 /*const byte city[] PROGMEM = {8,8,
Pokitto 5:56c4f2f12ec0 170 B00000000,
Pokitto 5:56c4f2f12ec0 171 B00000000,
Pokitto 5:56c4f2f12ec0 172 B00000000,
Pokitto 5:56c4f2f12ec0 173 B00000000,
Pokitto 5:56c4f2f12ec0 174 B00100010,
Pokitto 5:56c4f2f12ec0 175 B01110110,
Pokitto 5:56c4f2f12ec0 176 B01111110,
Pokitto 5:56c4f2f12ec0 177 B11111111,
Pokitto 5:56c4f2f12ec0 178 };*/
Pokitto 5:56c4f2f12ec0 179
Pokitto 5:56c4f2f12ec0 180 const byte city[] PROGMEM = {8,8,
Pokitto 5:56c4f2f12ec0 181 B00000000,
Pokitto 5:56c4f2f12ec0 182 B00000000,
Pokitto 5:56c4f2f12ec0 183 B00000000,
Pokitto 5:56c4f2f12ec0 184 B00000000,
Pokitto 5:56c4f2f12ec0 185 B01100100,
Pokitto 5:56c4f2f12ec0 186 B01101110,
Pokitto 5:56c4f2f12ec0 187 B01111111,
Pokitto 5:56c4f2f12ec0 188 B11111111,
Pokitto 5:56c4f2f12ec0 189 };
Pokitto 5:56c4f2f12ec0 190
Pokitto 5:56c4f2f12ec0 191 const byte deadcity[] PROGMEM = {8,8,
Pokitto 5:56c4f2f12ec0 192 B00000000,
Pokitto 5:56c4f2f12ec0 193 B00000000,
Pokitto 5:56c4f2f12ec0 194 B00000000,
Pokitto 5:56c4f2f12ec0 195 B00000000,
Pokitto 5:56c4f2f12ec0 196 B00000000,
Pokitto 5:56c4f2f12ec0 197 B00000000,
Pokitto 5:56c4f2f12ec0 198 B00100000,
Pokitto 5:56c4f2f12ec0 199 B01100010,
Pokitto 5:56c4f2f12ec0 200 };
Pokitto 5:56c4f2f12ec0 201
Pokitto 5:56c4f2f12ec0 202 const byte launcher[] PROGMEM = {8,8,
Pokitto 5:56c4f2f12ec0 203 B00011000,
Pokitto 5:56c4f2f12ec0 204 B00011000,
Pokitto 5:56c4f2f12ec0 205 B00011000,
Pokitto 5:56c4f2f12ec0 206 B00100100,
Pokitto 5:56c4f2f12ec0 207 B00100100,
Pokitto 5:56c4f2f12ec0 208 B01000010,
Pokitto 5:56c4f2f12ec0 209 B01000010,
Pokitto 5:56c4f2f12ec0 210 B10000001,
Pokitto 5:56c4f2f12ec0 211 };
Pokitto 5:56c4f2f12ec0 212
Pokitto 5:56c4f2f12ec0 213 const byte deadlauncher[] PROGMEM = {8,8,
Pokitto 5:56c4f2f12ec0 214 B00000000,
Pokitto 5:56c4f2f12ec0 215 B00000000,
Pokitto 5:56c4f2f12ec0 216 B00000000,
Pokitto 5:56c4f2f12ec0 217 B00000000,
Pokitto 5:56c4f2f12ec0 218 B00000000,
Pokitto 5:56c4f2f12ec0 219 B01100110,
Pokitto 5:56c4f2f12ec0 220 B01011010,
Pokitto 5:56c4f2f12ec0 221 B10000001,
Pokitto 5:56c4f2f12ec0 222 };
Pokitto 5:56c4f2f12ec0 223
Pokitto 5:56c4f2f12ec0 224 #define SOUND_PLAUNCH 0
Pokitto 5:56c4f2f12ec0 225 #define SOUND_ELAUNCH 1
Pokitto 5:56c4f2f12ec0 226 #define SOUND_DETONATE 2
Pokitto 5:56c4f2f12ec0 227 #define SOUND_SCORE 3
Pokitto 5:56c4f2f12ec0 228 #define SOUND_DEAD 4
Pokitto 5:56c4f2f12ec0 229 #define SOUND_LOSE 5
Pokitto 5:56c4f2f12ec0 230
Pokitto 5:56c4f2f12ec0 231 #define MODE_PREGAME 0
Pokitto 5:56c4f2f12ec0 232 #define MODE_GAME 1
Pokitto 5:56c4f2f12ec0 233 #define MODE_LULL 2
Pokitto 5:56c4f2f12ec0 234 #define MODE_DEAD 3
Pokitto 5:56c4f2f12ec0 235 #define MODE_POSTDEAD 4
Pokitto 5:56c4f2f12ec0 236
Pokitto 5:56c4f2f12ec0 237 #define TARGET_SPEED 3
Pokitto 5:56c4f2f12ec0 238
Pokitto 5:56c4f2f12ec0 239 #define LAUNCHER_ONE 1
Pokitto 5:56c4f2f12ec0 240 #define LAUNCHER_TWO 2
Pokitto 5:56c4f2f12ec0 241 #define MAX_PMISSILES 10
Pokitto 5:56c4f2f12ec0 242 #define PSPEED 4
Pokitto 5:56c4f2f12ec0 243 #define PRADIUS 7
Pokitto 5:56c4f2f12ec0 244 #define EXPAND 0
Pokitto 5:56c4f2f12ec0 245 #define SHRINK 1
Pokitto 5:56c4f2f12ec0 246
Pokitto 5:56c4f2f12ec0 247 #define MAX_EMISSILES 10
Pokitto 5:56c4f2f12ec0 248 #define MAX_CHANCE 50
Pokitto 5:56c4f2f12ec0 249
Pokitto 5:56c4f2f12ec0 250 // State variables
Pokitto 5:56c4f2f12ec0 251 uint8_t mode = 0;
Pokitto 5:56c4f2f12ec0 252 uint8_t counter = 0;
Pokitto 5:56c4f2f12ec0 253 uint8_t flash = 0;
Pokitto 5:56c4f2f12ec0 254 uint8_t stage = 0; //Maximum of 255 stages
Pokitto 5:56c4f2f12ec0 255 uint32_t score = 0; //Score needs more space than other vars
Pokitto 5:56c4f2f12ec0 256
wuuff 13:b133c46dbda7 257 uint32_t lullMissiles = 0;
Pokitto 5:56c4f2f12ec0 258 uint8_t lullCities[8] = {0,0,0,0,0,0,0,0};
Pokitto 5:56c4f2f12ec0 259
Pokitto 5:56c4f2f12ec0 260 uint8_t cities[8] = {1,1,1,1,1,1,1,1}; //Whether the cities or launchers are alive
Pokitto 5:56c4f2f12ec0 261
wuuff 14:41173f26c0ef 262 uint8_t targetX = WIDTH/2;
wuuff 14:41173f26c0ef 263 uint8_t targetY = HEIGHT/2;
Pokitto 5:56c4f2f12ec0 264 uint8_t pammo[2] = {10,10};
Pokitto 5:56c4f2f12ec0 265 uint8_t pDests[MAX_PMISSILES][2] = {{100,100},{100,100},{100,100},{100,100},{100,100},{100,100},{100,100},{100,100},{100,100},{100,100}};
Pokitto 5:56c4f2f12ec0 266 float pMissiles[MAX_PMISSILES][3] = {{100,100,0},{100,100,0},{100,100,0},{100,100,0},{100,100,0},{100,100,0},{100,100,0},{100,100,0},{100,100,0},{100,100,0}};
Pokitto 5:56c4f2f12ec0 267 uint8_t pDetonations[MAX_PMISSILES][4] = {{100,100,0,0},{100,100,0,0},{100,100,0,0},{100,100,0,0},{100,100,0,0},{100,100,0,0},{100,100,0,0},{100,100,0,0},{100,100,0,0},{100,100,0,0}};
Pokitto 5:56c4f2f12ec0 268
Pokitto 5:56c4f2f12ec0 269 uint8_t etotal = 5;
Pokitto 5:56c4f2f12ec0 270 uint8_t echance = 1;
Pokitto 5:56c4f2f12ec0 271 float espeed = 0.2;
Pokitto 5:56c4f2f12ec0 272 uint8_t eDests[MAX_EMISSILES] = {100,100,100,100,100,100,100,100,100,100};
Pokitto 5:56c4f2f12ec0 273 float eMissiles[MAX_EMISSILES][4] = {{100,100,100,100},{100,100,100,100},{100,100,100,100},{100,100,100,100},{100,100,100,100},{100,100,100,100},{100,100,100,100},{100,100,100,100},{100,100,100,100},{100,100,100,100}};
Pokitto 5:56c4f2f12ec0 274
wuuff 14:41173f26c0ef 275 void doTitle(uint8_t is_pause){
wuuff 14:41173f26c0ef 276 while (gb.isRunning()) {
wuuff 14:41173f26c0ef 277 if( gb.update() ){
wuuff 14:41173f26c0ef 278 gb.display.setColor(7);
wuuff 14:41173f26c0ef 279 gb.display.drawBitmap(0,0,armageddon);
wuuff 14:41173f26c0ef 280 if( counter%8 == 0 ){
wuuff 14:41173f26c0ef 281 flash ^= 255;
wuuff 14:41173f26c0ef 282 }
Pokitto 21:153974d672f8 283
wuuff 14:41173f26c0ef 284 if( flash ){
wuuff 14:41173f26c0ef 285 gb.display.setColor(4);
wuuff 14:41173f26c0ef 286 gb.display.cursorY = HEIGHT - TEXT_HEIGHT*2;
wuuff 14:41173f26c0ef 287 if( is_pause ){
wuuff 14:41173f26c0ef 288 gb.display.cursorX = WIDTH/2 - TEXT_WIDTH*3;
wuuff 14:41173f26c0ef 289 gb.display.print(("PAUSED"));
wuuff 14:41173f26c0ef 290 }else{
wuuff 14:41173f26c0ef 291 gb.display.cursorX = WIDTH/2 - TEXT_WIDTH*3;
wuuff 14:41173f26c0ef 292 gb.display.print(("PRESS \25"));
wuuff 14:41173f26c0ef 293 }
wuuff 14:41173f26c0ef 294 }
wuuff 14:41173f26c0ef 295 counter++;
wuuff 14:41173f26c0ef 296 if( gb.buttons.pressed(BTN_A) ){
wuuff 14:41173f26c0ef 297 gb.display.setColor(WHITE);
Pokitto 21:153974d672f8 298 break;
wuuff 14:41173f26c0ef 299 }
Pokitto 21:153974d672f8 300 }
wuuff 14:41173f26c0ef 301 }
wuuff 14:41173f26c0ef 302 }
wuuff 14:41173f26c0ef 303
Pokitto 5:56c4f2f12ec0 304 void setup() {
Pokitto 21:153974d672f8 305 loadHighscores(); // do this before gb.begin !!
Pokitto 5:56c4f2f12ec0 306 gb.begin();
Pokitto 21:153974d672f8 307
Pokitto 21:153974d672f8 308
Pokitto 21:153974d672f8 309
Pokitto 21:153974d672f8 310 //We need to do extra Gamebuino-formatting-specific initialization if we don't use the title screen
wuuff 14:41173f26c0ef 311 gb.display.setFont(font5x7);
wuuff 14:41173f26c0ef 312 gb.display.fontSize = 1;
wuuff 14:41173f26c0ef 313 gb.display.textWrap = false;
wuuff 14:41173f26c0ef 314 gb.display.persistence = false;
Pokitto 5:56c4f2f12ec0 315 gb.battery.show = false;
wuuff 14:41173f26c0ef 316 gb.display.setColor(BLACK);
wuuff 14:41173f26c0ef 317 gb.display.setColorDepth(1);
Pokitto 21:153974d672f8 318
wuuff 14:41173f26c0ef 319 doTitle(0);
Pokitto 5:56c4f2f12ec0 320 gb.pickRandomSeed();
Pokitto 5:56c4f2f12ec0 321 }
Pokitto 5:56c4f2f12ec0 322
Pokitto 5:56c4f2f12ec0 323 void nextStage(){
Pokitto 5:56c4f2f12ec0 324 stage++;
Pokitto 5:56c4f2f12ec0 325 //Reset cities (since we cleared them for the visual effect
Pokitto 5:56c4f2f12ec0 326 for( uint8_t i = 0; i < 8; i++ ){
Pokitto 5:56c4f2f12ec0 327 cities[i] = lullCities[i];
Pokitto 5:56c4f2f12ec0 328 }
Pokitto 5:56c4f2f12ec0 329 //Reset launchers
Pokitto 5:56c4f2f12ec0 330 cities[2] = 1;
Pokitto 5:56c4f2f12ec0 331 cities[5] = 1;
Pokitto 5:56c4f2f12ec0 332 //Reset missiles
Pokitto 5:56c4f2f12ec0 333 pammo[0] = 10;
Pokitto 5:56c4f2f12ec0 334 pammo[1] = 10;
Pokitto 5:56c4f2f12ec0 335 //Reset in-flight missiles
Pokitto 5:56c4f2f12ec0 336 for( uint8_t i = 0; i < 10; i++ ){
wuuff 14:41173f26c0ef 337 pDests[i][0] = 127;
wuuff 14:41173f26c0ef 338 pDetonations[i][0] = 127;
wuuff 14:41173f26c0ef 339 eDests[i] = 127;
Pokitto 5:56c4f2f12ec0 340 }
Pokitto 5:56c4f2f12ec0 341
Pokitto 5:56c4f2f12ec0 342 etotal = stage > 10 ? 20 : 10+stage; //Max of 20 missiles per stage, start at 10
Pokitto 5:56c4f2f12ec0 343 //echance = stage > 5 ? 5 : stage; //Max of 5/100 chance per frame
Pokitto 5:56c4f2f12ec0 344 espeed = stage > 18 ? 2 : 0.2+(stage*0.1); //Max speed of 2, up 0.1 per stage, starts at 0.2
Pokitto 5:56c4f2f12ec0 345 }
Pokitto 5:56c4f2f12ec0 346
Pokitto 5:56c4f2f12ec0 347 void nextLull(){
Pokitto 5:56c4f2f12ec0 348 //Reset lullMissiles
Pokitto 5:56c4f2f12ec0 349 lullMissiles = 0;
Pokitto 5:56c4f2f12ec0 350 //Reset lullCities
Pokitto 5:56c4f2f12ec0 351 for( uint8_t i = 0; i < 8; i++ ){
Pokitto 5:56c4f2f12ec0 352 lullCities[i] = 0;
Pokitto 5:56c4f2f12ec0 353 }
Pokitto 5:56c4f2f12ec0 354 }
Pokitto 5:56c4f2f12ec0 355
Pokitto 5:56c4f2f12ec0 356 void drawScore(){
wuuff 14:41173f26c0ef 357 gb.display.cursorX = WIDTH/2 - TEXT_WIDTH*3;
Pokitto 5:56c4f2f12ec0 358 gb.display.cursorY = 0;
Pokitto 5:56c4f2f12ec0 359
Pokitto 5:56c4f2f12ec0 360 if( score < 100000 ){
Pokitto 5:56c4f2f12ec0 361 gb.display.print(0);
Pokitto 5:56c4f2f12ec0 362 }
Pokitto 5:56c4f2f12ec0 363 if( score < 10000 ){
Pokitto 5:56c4f2f12ec0 364 gb.display.print(0);
Pokitto 5:56c4f2f12ec0 365 }
Pokitto 5:56c4f2f12ec0 366 if( score < 1000 ){
Pokitto 5:56c4f2f12ec0 367 gb.display.print(0);
Pokitto 5:56c4f2f12ec0 368 }
Pokitto 5:56c4f2f12ec0 369 if( score < 100 ){
Pokitto 5:56c4f2f12ec0 370 gb.display.print(0);
Pokitto 5:56c4f2f12ec0 371 }
Pokitto 5:56c4f2f12ec0 372 if( score < 10 ){
Pokitto 5:56c4f2f12ec0 373 gb.display.print(0);
Pokitto 5:56c4f2f12ec0 374 }
Pokitto 5:56c4f2f12ec0 375 gb.display.print(score);
Pokitto 5:56c4f2f12ec0 376 }
Pokitto 5:56c4f2f12ec0 377
Pokitto 5:56c4f2f12ec0 378 void drawTargets(){
Pokitto 5:56c4f2f12ec0 379 gb.display.drawFastHLine(targetX-1,targetY,3);
wuuff 13:b133c46dbda7 380 gb.display.drawFastVLine(targetX,targetY-1,2);
Pokitto 5:56c4f2f12ec0 381
Pokitto 5:56c4f2f12ec0 382 for(uint8_t i = 0; i < MAX_PMISSILES; i++){
Pokitto 5:56c4f2f12ec0 383 //Check for a valid destination without a current detonation
wuuff 14:41173f26c0ef 384 if( pDests[i][0] <= WIDTH && pDetonations[i][0] > WIDTH ){
Pokitto 5:56c4f2f12ec0 385 gb.display.drawPixel(pDests[i][0], pDests[i][1]);
Pokitto 5:56c4f2f12ec0 386 }
Pokitto 5:56c4f2f12ec0 387 }
Pokitto 5:56c4f2f12ec0 388 }
Pokitto 5:56c4f2f12ec0 389
Pokitto 5:56c4f2f12ec0 390 void drawCities(){
wuuff 13:b133c46dbda7 391 gb.display.setColor(4);
Pokitto 5:56c4f2f12ec0 392 //uint8_t alldead = 1;
Pokitto 5:56c4f2f12ec0 393 for(uint8_t i = 0; i < 8; i++){
Pokitto 5:56c4f2f12ec0 394 if( i == 2 || i == 5 ){
Pokitto 5:56c4f2f12ec0 395 if( cities[i] ){
wuuff 14:41173f26c0ef 396 gb.display.drawBitmap(i*14+2,HEIGHT-8,launcher);
Pokitto 5:56c4f2f12ec0 397 }else{
wuuff 14:41173f26c0ef 398 gb.display.drawBitmap(i*14+2,HEIGHT-8,deadlauncher);
Pokitto 5:56c4f2f12ec0 399 }
Pokitto 5:56c4f2f12ec0 400 }else{
Pokitto 5:56c4f2f12ec0 401 if( cities[i] ){
Pokitto 5:56c4f2f12ec0 402 //alldead = 0;
wuuff 14:41173f26c0ef 403 gb.display.drawBitmap(i*14+2,HEIGHT-8,city);
Pokitto 5:56c4f2f12ec0 404 }else{
wuuff 14:41173f26c0ef 405 gb.display.drawBitmap(i*14+2,HEIGHT-8,deadcity);
Pokitto 5:56c4f2f12ec0 406 }
Pokitto 5:56c4f2f12ec0 407 }
Pokitto 5:56c4f2f12ec0 408 }
Pokitto 5:56c4f2f12ec0 409
wuuff 13:b133c46dbda7 410 gb.display.setColor(1);
Pokitto 5:56c4f2f12ec0 411 /*
Pokitto 5:56c4f2f12ec0 412 if( alldead ){
Pokitto 5:56c4f2f12ec0 413 gb.display.cursorX = 84/2 - 5*3;
Pokitto 5:56c4f2f12ec0 414 gb.display.cursorY = 48/2 - 5;
Pokitto 5:56c4f2f12ec0 415 gb.display.print("THE END");
Pokitto 5:56c4f2f12ec0 416 }
Pokitto 5:56c4f2f12ec0 417 */
Pokitto 5:56c4f2f12ec0 418 }
Pokitto 5:56c4f2f12ec0 419
Pokitto 5:56c4f2f12ec0 420 void drawAmmo(){
wuuff 13:b133c46dbda7 421 gb.display.setColor(3);
Pokitto 5:56c4f2f12ec0 422 for( uint8_t i = 0; i < 2; i++ ){
wuuff 14:41173f26c0ef 423 uint8_t xcoord = i == 0 ? 2*14 + 5 : 5*14 + 5;
wuuff 14:41173f26c0ef 424 uint8_t ycoord = HEIGHT-1;
Pokitto 5:56c4f2f12ec0 425 if( cities[i*3+2] ){ //Is launcher alive?
Pokitto 5:56c4f2f12ec0 426 for( uint8_t j = 0; j < pammo[i]; j++ ){
Pokitto 5:56c4f2f12ec0 427 gb.display.drawPixel(xcoord,ycoord);
Pokitto 5:56c4f2f12ec0 428 if( xcoord % 2 == 0 ){
Pokitto 5:56c4f2f12ec0 429 xcoord--;
Pokitto 5:56c4f2f12ec0 430 ycoord--;
Pokitto 5:56c4f2f12ec0 431 }else{
Pokitto 5:56c4f2f12ec0 432 xcoord++;
Pokitto 5:56c4f2f12ec0 433 }
Pokitto 5:56c4f2f12ec0 434 }
Pokitto 5:56c4f2f12ec0 435 }
Pokitto 5:56c4f2f12ec0 436 }
HomineLudens 6:22d706e5dd6e 437 gb.display.setColor(1);
Pokitto 5:56c4f2f12ec0 438 }
Pokitto 5:56c4f2f12ec0 439
Pokitto 5:56c4f2f12ec0 440 void drawMissiles(){
Pokitto 5:56c4f2f12ec0 441 //Player Missiles
wuuff 13:b133c46dbda7 442 gb.display.setColor(3);
Pokitto 5:56c4f2f12ec0 443 for(uint8_t i = 0; i < MAX_PMISSILES; i++){
Pokitto 5:56c4f2f12ec0 444 //Check for a valid destination without a current detonation
wuuff 14:41173f26c0ef 445 if( pDests[i][0] <= WIDTH && pDetonations[i][0] > WIDTH ){
Pokitto 5:56c4f2f12ec0 446 if(pMissiles[i][2] == LAUNCHER_ONE){
wuuff 14:41173f26c0ef 447 gb.display.drawLine(2*14 + 5,HEIGHT-8,pMissiles[i][0], pMissiles[i][1]);
Pokitto 5:56c4f2f12ec0 448 }else{
wuuff 14:41173f26c0ef 449 gb.display.drawLine(5*14 + 6,HEIGHT-8,pMissiles[i][0], pMissiles[i][1]);
Pokitto 5:56c4f2f12ec0 450 }
Pokitto 5:56c4f2f12ec0 451 }
Pokitto 5:56c4f2f12ec0 452 }
Pokitto 5:56c4f2f12ec0 453
Pokitto 5:56c4f2f12ec0 454 //Enemy Missiles
wuuff 13:b133c46dbda7 455 gb.display.setColor(7);
Pokitto 5:56c4f2f12ec0 456 for(uint8_t i = 0; i < MAX_EMISSILES; i++){
Pokitto 5:56c4f2f12ec0 457 //Check for a valid destination
wuuff 14:41173f26c0ef 458 if( eDests[i] <= WIDTH ){
Pokitto 5:56c4f2f12ec0 459 gb.display.drawLine(eMissiles[i][0],eMissiles[i][1],eMissiles[i][2], eMissiles[i][3]);
Pokitto 5:56c4f2f12ec0 460 }
Pokitto 5:56c4f2f12ec0 461 }
Pokitto 5:56c4f2f12ec0 462 gb.display.setColor(1);
Pokitto 5:56c4f2f12ec0 463 }
Pokitto 5:56c4f2f12ec0 464
wuuff 13:b133c46dbda7 465 uint8_t explosionColor = 0;
Pokitto 5:56c4f2f12ec0 466 void drawDetonations(){
wuuff 13:b133c46dbda7 467 gb.display.setColor(explosionColor+1);
wuuff 13:b133c46dbda7 468 if(counter%2 == 0){
wuuff 13:b133c46dbda7 469 explosionColor++;
Pokitto 21:153974d672f8 470 explosionColor%=7;
wuuff 13:b133c46dbda7 471 }
Pokitto 5:56c4f2f12ec0 472 for(uint8_t i = 0; i < MAX_PMISSILES; i++){
wuuff 14:41173f26c0ef 473 if( pDetonations[i][0] <= WIDTH ){
wuuff 13:b133c46dbda7 474 gb.display.fillCircle(pDetonations[i][0],pDetonations[i][1],pDetonations[i][2]);
Pokitto 5:56c4f2f12ec0 475 }
Pokitto 5:56c4f2f12ec0 476 }
wuuff 13:b133c46dbda7 477 gb.display.setColor(1);
Pokitto 5:56c4f2f12ec0 478 }
Pokitto 5:56c4f2f12ec0 479
Pokitto 5:56c4f2f12ec0 480 void launchMissile(uint8_t launcher){
Pokitto 5:56c4f2f12ec0 481 //If there is no free slot in pDests, do not launch
Pokitto 5:56c4f2f12ec0 482 for(uint8_t i = 0; i < MAX_PMISSILES; i++){
wuuff 14:41173f26c0ef 483 if( pDests[i][0] > WIDTH ){
Pokitto 5:56c4f2f12ec0 484 // Which launcher? Alive? Has ammo?
Pokitto 5:56c4f2f12ec0 485 if(launcher == LAUNCHER_ONE && cities[2] && pammo[0]){
Pokitto 5:56c4f2f12ec0 486 pDests[i][0] = targetX;
Pokitto 5:56c4f2f12ec0 487 pDests[i][1] = targetY;
wuuff 14:41173f26c0ef 488 pMissiles[i][0] = 2*14 + 5; //X-coord of left launcher
Pokitto 5:56c4f2f12ec0 489 pMissiles[i][2] = LAUNCHER_ONE; //Launched from launcher one
Pokitto 5:56c4f2f12ec0 490 pammo[0]--;
Pokitto 5:56c4f2f12ec0 491 playSound(SOUND_PLAUNCH);
Pokitto 5:56c4f2f12ec0 492 }else if(launcher == LAUNCHER_TWO && cities[5] && pammo[1]){
Pokitto 5:56c4f2f12ec0 493 pDests[i][0] = targetX;
Pokitto 5:56c4f2f12ec0 494 pDests[i][1] = targetY;
wuuff 14:41173f26c0ef 495 pMissiles[i][0] = 5*14 + 6; //X-coord of right launcher
Pokitto 5:56c4f2f12ec0 496 pMissiles[i][2] = LAUNCHER_TWO; //Launched from launcher two
Pokitto 5:56c4f2f12ec0 497 pammo[1]--;
Pokitto 5:56c4f2f12ec0 498 playSound(SOUND_PLAUNCH);
Pokitto 5:56c4f2f12ec0 499 }
wuuff 14:41173f26c0ef 500 pMissiles[i][1] = HEIGHT-8; //Y-coord of both launchers
Pokitto 5:56c4f2f12ec0 501 break;
Pokitto 5:56c4f2f12ec0 502 }
Pokitto 5:56c4f2f12ec0 503 }
Pokitto 5:56c4f2f12ec0 504 }
Pokitto 5:56c4f2f12ec0 505
Pokitto 5:56c4f2f12ec0 506 void tryLaunchEnemy(){
Pokitto 5:56c4f2f12ec0 507 uint8_t someActive = 0;
Pokitto 5:56c4f2f12ec0 508
Pokitto 5:56c4f2f12ec0 509 if( etotal > 0 ){
Pokitto 5:56c4f2f12ec0 510
Pokitto 5:56c4f2f12ec0 511 // Check whether there are any active missiles
Pokitto 5:56c4f2f12ec0 512 // If none are active, always spawn one to avoid
Pokitto 5:56c4f2f12ec0 513 // long pauses without any enemy missiles
Pokitto 5:56c4f2f12ec0 514 for(uint8_t i = 0; i < MAX_EMISSILES; i++){
wuuff 14:41173f26c0ef 515 if( eDests[i] <= WIDTH ){
Pokitto 5:56c4f2f12ec0 516 someActive = 1;
Pokitto 5:56c4f2f12ec0 517 break;
Pokitto 5:56c4f2f12ec0 518 }
Pokitto 5:56c4f2f12ec0 519 }
Pokitto 5:56c4f2f12ec0 520
Pokitto 5:56c4f2f12ec0 521 if( (!someActive || echance >= random(100)) ){ //echance of 100
Pokitto 5:56c4f2f12ec0 522 for(uint8_t i = 0; i < MAX_EMISSILES; i++){
wuuff 14:41173f26c0ef 523 if( eDests[i] > WIDTH ){
Pokitto 5:56c4f2f12ec0 524 etotal--;
Pokitto 21:153974d672f8 525 eDests[i] = random(8); //Target one of the 6 cities or 2 launch sites TODO: Come back later if random's behavior changes
wuuff 14:41173f26c0ef 526 eMissiles[i][0] = random(WIDTH); //Screen width //TODO: if random is supposed to be inclusive, add a -1
Pokitto 5:56c4f2f12ec0 527 eMissiles[i][1] = 0; //Top of screen
Pokitto 5:56c4f2f12ec0 528 eMissiles[i][2] = eMissiles[i][0]; //Start and end are same
Pokitto 5:56c4f2f12ec0 529 eMissiles[i][3] = 0; //Top of screen
Pokitto 5:56c4f2f12ec0 530 playSound(SOUND_ELAUNCH);
Pokitto 5:56c4f2f12ec0 531 break; //Only spawn one
Pokitto 5:56c4f2f12ec0 532 }
Pokitto 5:56c4f2f12ec0 533 }
Pokitto 5:56c4f2f12ec0 534 }
Pokitto 5:56c4f2f12ec0 535
Pokitto 5:56c4f2f12ec0 536 }
Pokitto 5:56c4f2f12ec0 537 }
Pokitto 5:56c4f2f12ec0 538
Pokitto 5:56c4f2f12ec0 539 void stepMissiles(){
Pokitto 5:56c4f2f12ec0 540 //Player Missiles
Pokitto 5:56c4f2f12ec0 541 for(uint8_t i = 0; i < MAX_PMISSILES; i++){
Pokitto 5:56c4f2f12ec0 542 //Check for a valid destination without a current detonation
wuuff 14:41173f26c0ef 543 if( pDests[i][0] <= WIDTH && pDetonations[i][0] > WIDTH ){
Pokitto 5:56c4f2f12ec0 544 //If the missile is close enough to the destination, detonate
Pokitto 21:153974d672f8 545 if( abs( int(pDests[i][0] - pMissiles[i][0]) ) < PSPEED && abs( int(pDests[i][1] - pMissiles[i][1]) ) < PSPEED ){
Pokitto 5:56c4f2f12ec0 546 pDetonations[i][0] = pDests[i][0];
Pokitto 5:56c4f2f12ec0 547 pDetonations[i][1] = pDests[i][1];
Pokitto 5:56c4f2f12ec0 548 pDetonations[i][2] = 0; //Start detonation at radius of 0
Pokitto 5:56c4f2f12ec0 549 pDetonations[i][3] = EXPAND; //Detonation is increasing in size
Pokitto 5:56c4f2f12ec0 550 //Otherwise, keep moving towards destination
Pokitto 5:56c4f2f12ec0 551 }else{
Pokitto 5:56c4f2f12ec0 552 float dir = atan2(pDests[i][1]-pMissiles[i][1], pDests[i][0]-pMissiles[i][0]);
Pokitto 5:56c4f2f12ec0 553 pMissiles[i][0] += PSPEED * cos(dir);
Pokitto 5:56c4f2f12ec0 554 pMissiles[i][1] += PSPEED * sin(dir);
Pokitto 5:56c4f2f12ec0 555 }
Pokitto 5:56c4f2f12ec0 556 }
Pokitto 5:56c4f2f12ec0 557 }
Pokitto 5:56c4f2f12ec0 558
Pokitto 5:56c4f2f12ec0 559 //Enemy Missiles
Pokitto 5:56c4f2f12ec0 560 for(uint8_t i = 0; i < MAX_EMISSILES; i++){
Pokitto 5:56c4f2f12ec0 561 //Check for a valid destination
wuuff 14:41173f26c0ef 562 if( eDests[i] <= WIDTH ){
Pokitto 5:56c4f2f12ec0 563 //If enemy missile is close enough to the destination, detonate
Pokitto 21:153974d672f8 564 if( abs( int((eDests[i]*14+6) - eMissiles[i][2]) ) < PSPEED && abs( int(HEIGHT-4 - eMissiles[i][3]) ) < PSPEED ){
Pokitto 5:56c4f2f12ec0 565 cities[eDests[i]] = 0; //Destroy city/launcher
Pokitto 5:56c4f2f12ec0 566
Pokitto 5:56c4f2f12ec0 567 //If launcher, remove its ammo
Pokitto 5:56c4f2f12ec0 568 if( eDests[i] == 2 ){
Pokitto 5:56c4f2f12ec0 569 pammo[0] = 0;
Pokitto 5:56c4f2f12ec0 570 }
Pokitto 5:56c4f2f12ec0 571 if( eDests[i] == 5 ){
Pokitto 5:56c4f2f12ec0 572 pammo[1] = 0;
Pokitto 5:56c4f2f12ec0 573 }
Pokitto 5:56c4f2f12ec0 574
wuuff 14:41173f26c0ef 575 eDests[i] = 127; //Reset enemy missile
Pokitto 5:56c4f2f12ec0 576 playSound(SOUND_DEAD);
Pokitto 5:56c4f2f12ec0 577 //Otherwise, keep moving towards destination
Pokitto 5:56c4f2f12ec0 578 }else{
wuuff 14:41173f26c0ef 579 float dir = atan2( HEIGHT-4 - eMissiles[i][3], (eDests[i]*14+6)-eMissiles[i][2] );
Pokitto 5:56c4f2f12ec0 580 eMissiles[i][2] += espeed * cos(dir);
Pokitto 5:56c4f2f12ec0 581 eMissiles[i][3] += espeed * sin(dir);
Pokitto 5:56c4f2f12ec0 582 }
Pokitto 5:56c4f2f12ec0 583 }
Pokitto 5:56c4f2f12ec0 584 }
Pokitto 5:56c4f2f12ec0 585 }
Pokitto 5:56c4f2f12ec0 586
Pokitto 5:56c4f2f12ec0 587 void stepDetonations(){
Pokitto 5:56c4f2f12ec0 588 if( counter%2 == 0 ){
Pokitto 5:56c4f2f12ec0 589 for(uint8_t i = 0; i < MAX_PMISSILES; i++){
wuuff 14:41173f26c0ef 590 if( pDetonations[i][0] <= WIDTH ){
Pokitto 5:56c4f2f12ec0 591 if( pDetonations[i][3] == EXPAND ){ //If detonation is expanding
Pokitto 5:56c4f2f12ec0 592 if( pDetonations[i][2] < PRADIUS ){
Pokitto 5:56c4f2f12ec0 593 pDetonations[i][2]++;
Pokitto 5:56c4f2f12ec0 594 }else{
Pokitto 5:56c4f2f12ec0 595 pDetonations[i][3] = SHRINK; //Start shrinking
Pokitto 5:56c4f2f12ec0 596 }
Pokitto 5:56c4f2f12ec0 597 }
Pokitto 5:56c4f2f12ec0 598 //Check this now instead of using else because it may have just
Pokitto 5:56c4f2f12ec0 599 //set to SHRINK; immediately checking will remove a delay at full
Pokitto 5:56c4f2f12ec0 600 //size. If a delay is desired, this if can be switched to an else.
Pokitto 5:56c4f2f12ec0 601 if( pDetonations[i][3] == SHRINK ){ //If detonation is shrinking
Pokitto 5:56c4f2f12ec0 602 if( pDetonations[i][2] > 0 ){
Pokitto 5:56c4f2f12ec0 603 pDetonations[i][2]--;
Pokitto 5:56c4f2f12ec0 604 }else{
wuuff 14:41173f26c0ef 605 pDetonations[i][0] = 127; //Detonation is complete, remove it
wuuff 14:41173f26c0ef 606 pDests[i][0] = 127; //Remove this destination
Pokitto 5:56c4f2f12ec0 607 }
Pokitto 5:56c4f2f12ec0 608 }
Pokitto 5:56c4f2f12ec0 609 }
Pokitto 5:56c4f2f12ec0 610 }
Pokitto 5:56c4f2f12ec0 611 }
Pokitto 5:56c4f2f12ec0 612 }
Pokitto 5:56c4f2f12ec0 613
Pokitto 5:56c4f2f12ec0 614 void stepCollision(){
Pokitto 5:56c4f2f12ec0 615 //Player Detonations with Enemy Missiles
Pokitto 5:56c4f2f12ec0 616 for(uint8_t i = 0; i < MAX_PMISSILES; i++){
wuuff 14:41173f26c0ef 617 if( pDetonations[i][0] <= WIDTH ){
Pokitto 5:56c4f2f12ec0 618 for(uint8_t j = 0; j < MAX_EMISSILES; j++){
wuuff 14:41173f26c0ef 619 //Add extra +1 to explosion radius so that collisions are more generous
wuuff 14:41173f26c0ef 620 if( eDests[j] <= WIDTH && pDetonations[i][2] + 1 >= sqrt( (eMissiles[j][2]-pDetonations[i][0])*(eMissiles[j][2]-pDetonations[i][0]) + (eMissiles[j][3]-pDetonations[i][1])*(eMissiles[j][3]-pDetonations[i][1]) ) ){
wuuff 14:41173f26c0ef 621 eDests[j] = 127; //Remove enemy missile
Pokitto 5:56c4f2f12ec0 622 score+=25;
Pokitto 5:56c4f2f12ec0 623 playSound(SOUND_DETONATE);
Pokitto 5:56c4f2f12ec0 624 }
Pokitto 5:56c4f2f12ec0 625 }
Pokitto 5:56c4f2f12ec0 626 }
Pokitto 5:56c4f2f12ec0 627 }
Pokitto 5:56c4f2f12ec0 628 }
Pokitto 5:56c4f2f12ec0 629
Pokitto 5:56c4f2f12ec0 630
Pokitto 5:56c4f2f12ec0 631 void checkMenu(){
Pokitto 5:56c4f2f12ec0 632 if( gb.buttons.pressed(BTN_C) ){
wuuff 14:41173f26c0ef 633 doTitle(1);
Pokitto 5:56c4f2f12ec0 634 }
Pokitto 5:56c4f2f12ec0 635 }
Pokitto 5:56c4f2f12ec0 636
Pokitto 5:56c4f2f12ec0 637 void checkWin(){
Pokitto 5:56c4f2f12ec0 638 if( etotal == 0 ){
Pokitto 5:56c4f2f12ec0 639 for(uint8_t i = 0; i < MAX_EMISSILES; i++){
Pokitto 5:56c4f2f12ec0 640 //Check for a valid destination
wuuff 14:41173f26c0ef 641 if( eDests[i] <= WIDTH ){
Pokitto 5:56c4f2f12ec0 642 return;
Pokitto 5:56c4f2f12ec0 643 }
Pokitto 5:56c4f2f12ec0 644 }
Pokitto 5:56c4f2f12ec0 645 //If we get here, all enemy missiles are destroyed and they have no more
Pokitto 5:56c4f2f12ec0 646 nextLull();
Pokitto 5:56c4f2f12ec0 647 mode = MODE_LULL;
Pokitto 5:56c4f2f12ec0 648 }
Pokitto 5:56c4f2f12ec0 649 }
Pokitto 5:56c4f2f12ec0 650
Pokitto 5:56c4f2f12ec0 651 void checkLose(){
Pokitto 5:56c4f2f12ec0 652 for(uint8_t i = 0; i < 8; i++){
Pokitto 5:56c4f2f12ec0 653 if( i != 2 && i != 5 ){
Pokitto 5:56c4f2f12ec0 654 if( cities[i] ){
Pokitto 5:56c4f2f12ec0 655 return; // A city remains alive
Pokitto 5:56c4f2f12ec0 656 }
Pokitto 5:56c4f2f12ec0 657 }
Pokitto 5:56c4f2f12ec0 658 }
Pokitto 5:56c4f2f12ec0 659 //If we get here, all cities are dead. It is the end of days.
Pokitto 5:56c4f2f12ec0 660 counter = 0;
Pokitto 5:56c4f2f12ec0 661 mode = MODE_DEAD;
Pokitto 5:56c4f2f12ec0 662 playSound(SOUND_LOSE);
Pokitto 5:56c4f2f12ec0 663 }
Pokitto 5:56c4f2f12ec0 664
Pokitto 5:56c4f2f12ec0 665 void stepGame(){
Pokitto 5:56c4f2f12ec0 666 //Player input
Pokitto 5:56c4f2f12ec0 667 if( gb.buttons.pressed(BTN_A) ){
HomineLudens 6:22d706e5dd6e 668 launchMissile(LAUNCHER_TWO);
Pokitto 5:56c4f2f12ec0 669 }
Pokitto 5:56c4f2f12ec0 670 if( gb.buttons.pressed(BTN_B) ){
HomineLudens 6:22d706e5dd6e 671 launchMissile(LAUNCHER_ONE);
Pokitto 5:56c4f2f12ec0 672 }
Pokitto 5:56c4f2f12ec0 673
Pokitto 5:56c4f2f12ec0 674 if( gb.buttons.repeat(BTN_LEFT,1) ){
Pokitto 5:56c4f2f12ec0 675 targetX = targetX-TARGET_SPEED > 0 ? targetX-TARGET_SPEED : 0;
Pokitto 5:56c4f2f12ec0 676 }
Pokitto 5:56c4f2f12ec0 677 if( gb.buttons.repeat(BTN_RIGHT,1) ){
wuuff 14:41173f26c0ef 678 targetX = targetX+TARGET_SPEED < WIDTH ? targetX+TARGET_SPEED : WIDTH;
Pokitto 5:56c4f2f12ec0 679 }
Pokitto 5:56c4f2f12ec0 680 if( gb.buttons.repeat(BTN_UP,1) ){
Pokitto 5:56c4f2f12ec0 681 targetY = targetY-TARGET_SPEED > 0 ? targetY-TARGET_SPEED : 0;
Pokitto 5:56c4f2f12ec0 682 }
Pokitto 5:56c4f2f12ec0 683 if( gb.buttons.repeat(BTN_DOWN,1) ){
wuuff 14:41173f26c0ef 684 targetY = targetY+TARGET_SPEED < HEIGHT ? targetY+TARGET_SPEED : HEIGHT;
Pokitto 5:56c4f2f12ec0 685 }
Pokitto 5:56c4f2f12ec0 686
Pokitto 5:56c4f2f12ec0 687 //Game logic
Pokitto 5:56c4f2f12ec0 688 tryLaunchEnemy();
Pokitto 5:56c4f2f12ec0 689 stepMissiles();
Pokitto 5:56c4f2f12ec0 690 stepDetonations();
Pokitto 5:56c4f2f12ec0 691 stepCollision();
Pokitto 5:56c4f2f12ec0 692
Pokitto 5:56c4f2f12ec0 693 //Drawing
Pokitto 5:56c4f2f12ec0 694 drawScore();
Pokitto 5:56c4f2f12ec0 695 drawTargets();
Pokitto 5:56c4f2f12ec0 696 drawCities();
Pokitto 5:56c4f2f12ec0 697 drawAmmo();
Pokitto 5:56c4f2f12ec0 698 drawMissiles();
Pokitto 5:56c4f2f12ec0 699 drawDetonations();
Pokitto 5:56c4f2f12ec0 700
Pokitto 5:56c4f2f12ec0 701 checkWin();
Pokitto 5:56c4f2f12ec0 702 checkLose();
Pokitto 5:56c4f2f12ec0 703 }
Pokitto 5:56c4f2f12ec0 704
Pokitto 5:56c4f2f12ec0 705 void drawLull(){
wuuff 13:b133c46dbda7 706 uint32_t cityCount = 0;
wuuff 14:41173f26c0ef 707 gb.display.cursorX = WIDTH/2 - TEXT_WIDTH*6;
wuuff 14:41173f26c0ef 708 gb.display.cursorY = HEIGHT/2 - TEXT_HEIGHT*3;
Pokitto 5:56c4f2f12ec0 709 gb.display.print(("BONUS POINTS"));
Pokitto 5:56c4f2f12ec0 710
wuuff 14:41173f26c0ef 711 gb.display.cursorX = WIDTH/2 - TEXT_WIDTH*8;
wuuff 14:41173f26c0ef 712 gb.display.cursorY += TEXT_HEIGHT*2;
Pokitto 5:56c4f2f12ec0 713 gb.display.print(lullMissiles);
Pokitto 5:56c4f2f12ec0 714
wuuff 13:b133c46dbda7 715 gb.display.setColor(3);
Pokitto 5:56c4f2f12ec0 716 for(uint8_t i = 0; i < lullMissiles; i++){
wuuff 14:41173f26c0ef 717 gb.display.drawPixel(WIDTH/2 - TEXT_WIDTH*6 + i*2,HEIGHT/2 - 3);
Pokitto 5:56c4f2f12ec0 718 }
Pokitto 5:56c4f2f12ec0 719
wuuff 13:b133c46dbda7 720 gb.display.setColor(1);
wuuff 14:41173f26c0ef 721 gb.display.cursorX = WIDTH/2 - TEXT_WIDTH*8;
wuuff 14:41173f26c0ef 722 gb.display.cursorY += TEXT_HEIGHT*2;
wuuff 13:b133c46dbda7 723 for( uint8_t i = 0; i < 8; i++ ){
Pokitto 5:56c4f2f12ec0 724 if( lullCities[i] ) cityCount++;
Pokitto 5:56c4f2f12ec0 725 }
Pokitto 5:56c4f2f12ec0 726 gb.display.print(cityCount);
Pokitto 5:56c4f2f12ec0 727
wuuff 13:b133c46dbda7 728 gb.display.setColor(4);
Pokitto 5:56c4f2f12ec0 729 for(uint8_t i = 0; i < cityCount; i++){
wuuff 14:41173f26c0ef 730 gb.display.drawBitmap(WIDTH/2 - TEXT_WIDTH*6 + i*9,HEIGHT/2+2, city);
Pokitto 5:56c4f2f12ec0 731 }
Pokitto 5:56c4f2f12ec0 732
wuuff 13:b133c46dbda7 733 gb.display.setColor(1);
Pokitto 5:56c4f2f12ec0 734 drawScore();
Pokitto 5:56c4f2f12ec0 735 drawCities();
Pokitto 5:56c4f2f12ec0 736 drawAmmo();
Pokitto 5:56c4f2f12ec0 737 }
Pokitto 5:56c4f2f12ec0 738
Pokitto 5:56c4f2f12ec0 739 void stepLull(){
Pokitto 5:56c4f2f12ec0 740
Pokitto 5:56c4f2f12ec0 741 if( counter % 4 == 0 && (pammo[0] > 0 || pammo[1] > 0) ){
Pokitto 5:56c4f2f12ec0 742 lullMissiles++;
Pokitto 5:56c4f2f12ec0 743 score+=10;
Pokitto 5:56c4f2f12ec0 744 if( pammo[0] > 0 ) pammo[0]--;
Pokitto 5:56c4f2f12ec0 745 else pammo[1]--;
Pokitto 5:56c4f2f12ec0 746 playSound(SOUND_SCORE);
Pokitto 5:56c4f2f12ec0 747 }
Pokitto 5:56c4f2f12ec0 748
Pokitto 5:56c4f2f12ec0 749 //If we have already iterated through the missiles
Pokitto 5:56c4f2f12ec0 750 if( counter % 8 == 0 && pammo[0] == 0 && pammo[1] == 0 ){
Pokitto 5:56c4f2f12ec0 751 for( uint8_t i = 0; i < 9; i++ ){
Pokitto 5:56c4f2f12ec0 752 if( i == 8 ){ //We have iterated through all live cities
Pokitto 5:56c4f2f12ec0 753 nextStage();
Pokitto 5:56c4f2f12ec0 754 mode = MODE_GAME;
Pokitto 5:56c4f2f12ec0 755 return;
Pokitto 5:56c4f2f12ec0 756 }
Pokitto 5:56c4f2f12ec0 757 //If not a launcher and the city is alive
Pokitto 5:56c4f2f12ec0 758 if( i != 2 && i != 5 && cities[i] != 0 ){
Pokitto 5:56c4f2f12ec0 759 lullCities[i] = 1;
Pokitto 5:56c4f2f12ec0 760 score+=100;
Pokitto 5:56c4f2f12ec0 761 cities[i] = 0;
Pokitto 5:56c4f2f12ec0 762 playSound(SOUND_SCORE);
Pokitto 5:56c4f2f12ec0 763 break;
Pokitto 5:56c4f2f12ec0 764 }
Pokitto 5:56c4f2f12ec0 765 }
Pokitto 5:56c4f2f12ec0 766 }
Pokitto 5:56c4f2f12ec0 767
Pokitto 5:56c4f2f12ec0 768 drawLull();
Pokitto 5:56c4f2f12ec0 769 }
Pokitto 5:56c4f2f12ec0 770
Pokitto 5:56c4f2f12ec0 771 void stepDead(){
wuuff 14:41173f26c0ef 772 gb.display.setColor(7);
wuuff 14:41173f26c0ef 773 gb.display.cursorX = WIDTH/2 - TEXT_WIDTH*3 - TEXT_WIDTH/2;;
wuuff 14:41173f26c0ef 774 gb.display.cursorY = HEIGHT/2 - TEXT_HEIGHT;
Pokitto 5:56c4f2f12ec0 775 gb.display.print(("THE END"));
wuuff 14:41173f26c0ef 776 gb.display.setColor(1);
Pokitto 5:56c4f2f12ec0 777
Pokitto 5:56c4f2f12ec0 778 if( mode == MODE_DEAD && counter%20 == 0 ){
Pokitto 5:56c4f2f12ec0 779 mode = MODE_POSTDEAD;
Pokitto 5:56c4f2f12ec0 780 }else if( mode == MODE_POSTDEAD ){
Pokitto 5:56c4f2f12ec0 781 if( counter%8 == 0 ){
Pokitto 5:56c4f2f12ec0 782 flash ^= 255;
Pokitto 5:56c4f2f12ec0 783 }
Pokitto 5:56c4f2f12ec0 784 if( flash ){
wuuff 14:41173f26c0ef 785 gb.display.setColor(4);
wuuff 14:41173f26c0ef 786 gb.display.cursorX = WIDTH/2 - TEXT_WIDTH*3 - TEXT_WIDTH/2;
wuuff 14:41173f26c0ef 787 gb.display.cursorY = HEIGHT - TEXT_HEIGHT*2;
Pokitto 5:56c4f2f12ec0 788 gb.display.print(("PRESS \25"));
Pokitto 5:56c4f2f12ec0 789
Pokitto 5:56c4f2f12ec0 790 if( isHighscore(score) ){
wuuff 14:41173f26c0ef 791 gb.display.cursorX = WIDTH/2 - TEXT_WIDTH*6 - TEXT_WIDTH/2;
wuuff 14:41173f26c0ef 792 gb.display.cursorY = HEIGHT - TEXT_HEIGHT*3;
Pokitto 5:56c4f2f12ec0 793 gb.display.print(("NEW HIGHSCORE"));
Pokitto 5:56c4f2f12ec0 794 }
wuuff 14:41173f26c0ef 795 gb.display.setColor(1);
Pokitto 5:56c4f2f12ec0 796 }
Pokitto 5:56c4f2f12ec0 797
Pokitto 5:56c4f2f12ec0 798 if( gb.buttons.pressed(BTN_A) ){
Pokitto 5:56c4f2f12ec0 799 if( isHighscore(score) ){
wuuff 14:41173f26c0ef 800 char tmp_name[11] = "User";
Pokitto 5:56c4f2f12ec0 801 //gb.getDefaultName(tmp_name);
Pokitto 5:56c4f2f12ec0 802 gb.keyboard(tmp_name, 11);
wuuff 14:41173f26c0ef 803 saveHighscore(score,tmp_name);
Pokitto 5:56c4f2f12ec0 804 }
Pokitto 5:56c4f2f12ec0 805 score = 0;
Pokitto 5:56c4f2f12ec0 806 mode = MODE_PREGAME;
Pokitto 5:56c4f2f12ec0 807 }
Pokitto 5:56c4f2f12ec0 808 }
Pokitto 5:56c4f2f12ec0 809 }
Pokitto 5:56c4f2f12ec0 810
Pokitto 5:56c4f2f12ec0 811 void stepPregame(){
Pokitto 5:56c4f2f12ec0 812 drawHighscores();
Pokitto 5:56c4f2f12ec0 813
Pokitto 5:56c4f2f12ec0 814 if( counter%8 == 0 ){
Pokitto 5:56c4f2f12ec0 815 flash ^= 255;
Pokitto 5:56c4f2f12ec0 816 }
Pokitto 5:56c4f2f12ec0 817 if( flash ){
wuuff 14:41173f26c0ef 818 gb.display.setColor(4);
wuuff 14:41173f26c0ef 819 gb.display.cursorX = WIDTH/2 - TEXT_WIDTH*3;
wuuff 14:41173f26c0ef 820 gb.display.cursorY = HEIGHT - TEXT_HEIGHT*2;
Pokitto 5:56c4f2f12ec0 821 gb.display.print(("PRESS \25"));
wuuff 14:41173f26c0ef 822 gb.display.setColor(1);
Pokitto 5:56c4f2f12ec0 823 }
Pokitto 5:56c4f2f12ec0 824
Pokitto 5:56c4f2f12ec0 825 if( gb.buttons.pressed(BTN_A) ){
Pokitto 5:56c4f2f12ec0 826 stage = 255;
Pokitto 5:56c4f2f12ec0 827 for( uint8_t i = 0; i < 8; i++ ){
Pokitto 5:56c4f2f12ec0 828 lullCities[i] = 1;
Pokitto 5:56c4f2f12ec0 829 }
Pokitto 5:56c4f2f12ec0 830 nextStage(); //Reset to stage 0
Pokitto 5:56c4f2f12ec0 831 mode = MODE_GAME;
Pokitto 5:56c4f2f12ec0 832 }
Pokitto 5:56c4f2f12ec0 833 }
Pokitto 5:56c4f2f12ec0 834
Pokitto 5:56c4f2f12ec0 835 void loop() {
Pokitto 5:56c4f2f12ec0 836 if(gb.update()){
Pokitto 5:56c4f2f12ec0 837
Pokitto 5:56c4f2f12ec0 838 switch( mode ){
Pokitto 5:56c4f2f12ec0 839 case MODE_GAME:
Pokitto 5:56c4f2f12ec0 840 stepGame();
Pokitto 5:56c4f2f12ec0 841 break;
Pokitto 5:56c4f2f12ec0 842
Pokitto 5:56c4f2f12ec0 843 case MODE_LULL:
Pokitto 5:56c4f2f12ec0 844 stepLull();
Pokitto 5:56c4f2f12ec0 845 break;
Pokitto 5:56c4f2f12ec0 846
Pokitto 5:56c4f2f12ec0 847 case MODE_DEAD:
Pokitto 5:56c4f2f12ec0 848 case MODE_POSTDEAD:
Pokitto 5:56c4f2f12ec0 849 stepDead();
Pokitto 5:56c4f2f12ec0 850 break;
Pokitto 5:56c4f2f12ec0 851
Pokitto 5:56c4f2f12ec0 852 case MODE_PREGAME:
Pokitto 5:56c4f2f12ec0 853 stepPregame();
Pokitto 5:56c4f2f12ec0 854 break;
Pokitto 5:56c4f2f12ec0 855 }
Pokitto 5:56c4f2f12ec0 856
Pokitto 5:56c4f2f12ec0 857 checkMenu();
Pokitto 5:56c4f2f12ec0 858
Pokitto 5:56c4f2f12ec0 859 counter++;
Pokitto 5:56c4f2f12ec0 860 }
Pokitto 5:56c4f2f12ec0 861 }
Pokitto 5:56c4f2f12ec0 862
Pokitto 5:56c4f2f12ec0 863
Pokitto 5:56c4f2f12ec0 864 void loadHighscores(){
Pokitto 21:153974d672f8 865
Pokitto 21:153974d672f8 866 uint32_t defdata[] = {10000,7000,5000,4000,2000};
Pokitto 21:153974d672f8 867 char defnames[NUM_HIGHSCORES][NAME_SIZE+1] = {"Crack Shot", "Defender", "Gunner", "We Tried", "No Hope"};
Pokitto 21:153974d672f8 868 // Initialize the cookie
Pokitto 21:153974d672f8 869 gamedata.begin("ArmageDD",gamedata);
Pokitto 21:153974d672f8 870
Pokitto 21:153974d672f8 871 uint32_t allscores=0;
Pokitto 21:153974d672f8 872 for (int i=0;i<NUM_HIGHSCORES;i++) allscores += gamedata.highscores[i];
Pokitto 21:153974d672f8 873
Pokitto 21:153974d672f8 874 if (gamedata.check_number != 12345) {
Pokitto 21:153974d672f8 875 //checknumber indicates that no highscores saved yet, so put in "defaults"
Pokitto 21:153974d672f8 876 for (int i=0;i<NUM_HIGHSCORES;i++) gamedata.highscores[i]=defdata[i];
Pokitto 21:153974d672f8 877 for (int i=0;i<NUM_HIGHSCORES;i++) strcpy(gamedata.names[i],defnames[i]);
Pokitto 21:153974d672f8 878 gamedata.check_number = 12345; // put the checking number
Pokitto 21:153974d672f8 879 gamedata.saveCookie();//save the default values
Pokitto 21:153974d672f8 880 }
Pokitto 21:153974d672f8 881 /*
Pokitto 5:56c4f2f12ec0 882 for( uint8_t entry = 0; entry < NUM_HIGHSCORES; entry++ ){
Pokitto 5:56c4f2f12ec0 883 for( uint8_t offset = 0; offset < ENTRY_SIZE; offset++ ){
Pokitto 5:56c4f2f12ec0 884 if( offset < NAME_SIZE ){
wuuff 15:933ac6bcd8b8 885 names[entry][offset] = EEPROM.read( ENTRY_SIZE * entry + offset );
Pokitto 5:56c4f2f12ec0 886 }else{
Pokitto 5:56c4f2f12ec0 887 uint8_t* addr = (uint8_t*) &highscores[entry];
Pokitto 5:56c4f2f12ec0 888 addr+=offset-NAME_SIZE;
wuuff 15:933ac6bcd8b8 889 *addr = EEPROM.read( ENTRY_SIZE * entry + offset );
Pokitto 5:56c4f2f12ec0 890 }
Pokitto 5:56c4f2f12ec0 891 }
Pokitto 5:56c4f2f12ec0 892 }
Pokitto 21:153974d672f8 893 */
Pokitto 21:153974d672f8 894
Pokitto 5:56c4f2f12ec0 895 }
Pokitto 5:56c4f2f12ec0 896
Pokitto 5:56c4f2f12ec0 897 uint8_t isHighscore(uint32_t score){
Pokitto 21:153974d672f8 898 if( score > gamedata.highscores[NUM_HIGHSCORES-1] ){
Pokitto 5:56c4f2f12ec0 899 return 1;
Pokitto 5:56c4f2f12ec0 900 }
Pokitto 5:56c4f2f12ec0 901 return 0;
Pokitto 5:56c4f2f12ec0 902 }
Pokitto 5:56c4f2f12ec0 903
Pokitto 5:56c4f2f12ec0 904 void saveHighscore(uint32_t score, char* who){
Pokitto 5:56c4f2f12ec0 905 uint8_t found = 0;
Pokitto 5:56c4f2f12ec0 906 uint32_t tmp_score = 0;
Pokitto 5:56c4f2f12ec0 907 char tmp_name[10];
Pokitto 5:56c4f2f12ec0 908 for( uint8_t entry = 0; entry < NUM_HIGHSCORES; entry++ ){
Pokitto 21:153974d672f8 909 if( score > gamedata.highscores[entry] ){
Pokitto 5:56c4f2f12ec0 910 found = 1;
Pokitto 5:56c4f2f12ec0 911 }
Pokitto 5:56c4f2f12ec0 912 if( found ){
Pokitto 21:153974d672f8 913 tmp_score = gamedata.highscores[entry];
Pokitto 21:153974d672f8 914 strcpy(tmp_name,gamedata.names[entry]);
Pokitto 5:56c4f2f12ec0 915
Pokitto 21:153974d672f8 916 gamedata.highscores[entry] = score;
Pokitto 21:153974d672f8 917 strcpy(gamedata.names[entry], who);
Pokitto 5:56c4f2f12ec0 918
Pokitto 5:56c4f2f12ec0 919 score = tmp_score;
Pokitto 5:56c4f2f12ec0 920 strcpy(who, tmp_name);
Pokitto 5:56c4f2f12ec0 921 }
Pokitto 5:56c4f2f12ec0 922 }
Pokitto 21:153974d672f8 923 gamedata.saveCookie();
Pokitto 21:153974d672f8 924 /*Writing to EEPROM directly is deprecated and not necessary
Pokitto 5:56c4f2f12ec0 925 for( uint8_t entry = 0; entry < NUM_HIGHSCORES; entry++ ){
Pokitto 5:56c4f2f12ec0 926 for( uint8_t offset = 0; offset < ENTRY_SIZE; offset++ ){
Pokitto 5:56c4f2f12ec0 927 if( offset < NAME_SIZE ){
wuuff 15:933ac6bcd8b8 928 EEPROM.write( ENTRY_SIZE * entry + offset, names[entry][offset] );
Pokitto 5:56c4f2f12ec0 929 }else{
Pokitto 5:56c4f2f12ec0 930 uint8_t* addr = (uint8_t*) &highscores[entry];
Pokitto 5:56c4f2f12ec0 931 addr+=offset-NAME_SIZE;
wuuff 15:933ac6bcd8b8 932 EEPROM.write( ENTRY_SIZE * entry + offset, *addr );
Pokitto 5:56c4f2f12ec0 933 }
Pokitto 5:56c4f2f12ec0 934 }
Pokitto 5:56c4f2f12ec0 935 }
Pokitto 21:153974d672f8 936 */
Pokitto 5:56c4f2f12ec0 937 }
Pokitto 5:56c4f2f12ec0 938
Pokitto 5:56c4f2f12ec0 939 void drawHighscores(){
wuuff 14:41173f26c0ef 940 gb.display.setColor(4);
wuuff 14:41173f26c0ef 941 gb.display.cursorX = WIDTH/2 - TEXT_WIDTH*5;
wuuff 14:41173f26c0ef 942 gb.display.cursorY = TEXT_HEIGHT;
Pokitto 5:56c4f2f12ec0 943 gb.display.print(("HIGHSCORES"));
wuuff 14:41173f26c0ef 944 gb.display.setColor(1);
Pokitto 5:56c4f2f12ec0 945
Pokitto 5:56c4f2f12ec0 946 for( uint8_t entry = 0; entry < NUM_HIGHSCORES; entry++ ){
wuuff 14:41173f26c0ef 947 gb.display.cursorX = 0;
wuuff 14:41173f26c0ef 948 gb.display.cursorY = TEXT_HEIGHT*3 + TEXT_HEIGHT*entry;
Pokitto 21:153974d672f8 949 gb.display.print(gamedata.names[entry]);
wuuff 14:41173f26c0ef 950 gb.display.cursorX = WIDTH - TEXT_WIDTH*6;
Pokitto 21:153974d672f8 951 if( gamedata.highscores[entry] < 100000 ){
Pokitto 5:56c4f2f12ec0 952 gb.display.print(0);
Pokitto 5:56c4f2f12ec0 953 }
Pokitto 21:153974d672f8 954 if( gamedata.highscores[entry] < 10000 ){
Pokitto 5:56c4f2f12ec0 955 gb.display.print(0);
Pokitto 5:56c4f2f12ec0 956 }
Pokitto 21:153974d672f8 957 if( gamedata.highscores[entry] < 1000 ){
Pokitto 5:56c4f2f12ec0 958 gb.display.print(0);
Pokitto 5:56c4f2f12ec0 959 }
Pokitto 21:153974d672f8 960 if( gamedata.highscores[entry] < 100 ){
Pokitto 5:56c4f2f12ec0 961 gb.display.print(0);
Pokitto 5:56c4f2f12ec0 962 }
Pokitto 21:153974d672f8 963 if( gamedata.highscores[entry] < 10 ){
Pokitto 5:56c4f2f12ec0 964 gb.display.print(0);
Pokitto 5:56c4f2f12ec0 965 }
Pokitto 21:153974d672f8 966 gb.display.print(gamedata.highscores[entry]);
Pokitto 5:56c4f2f12ec0 967 }
Pokitto 5:56c4f2f12ec0 968 }
Pokitto 5:56c4f2f12ec0 969
Pokitto 5:56c4f2f12ec0 970 // Wave, pitch, duration, arpeggio step duration, arpeggio step size
Pokitto 5:56c4f2f12ec0 971 const int8_t sounds[][5] = {
Pokitto 5:56c4f2f12ec0 972 { 0, 20, 5, 1, 1 }, //Player launch
Pokitto 5:56c4f2f12ec0 973 { 0, 25, 5, 1, -1 }, //Enemy launch
Pokitto 5:56c4f2f12ec0 974 { 1, 10, 5, 1, -1 }, //Detonating enemy missile
Pokitto 5:56c4f2f12ec0 975 { 1, 10, 2, 0, 0 }, //Score pips
Pokitto 5:56c4f2f12ec0 976 { 1, 2, 10, 1, -1 }, //A city dies
Pokitto 5:56c4f2f12ec0 977 { 0, 20, 14, 3, -1 }, //Lose
Pokitto 5:56c4f2f12ec0 978 };
Pokitto 5:56c4f2f12ec0 979
Pokitto 5:56c4f2f12ec0 980 void initSound(){
Pokitto 5:56c4f2f12ec0 981 gb.sound.command(CMD_VOLUME, 5, 0, 0);
Pokitto 5:56c4f2f12ec0 982 gb.sound.command(CMD_SLIDE, 0, 0, 0);
Pokitto 5:56c4f2f12ec0 983 }
Pokitto 5:56c4f2f12ec0 984
Pokitto 5:56c4f2f12ec0 985 void playSound(uint8_t i){
Pokitto 5:56c4f2f12ec0 986 gb.sound.command(CMD_VOLUME, 5, 0, 0);
Pokitto 5:56c4f2f12ec0 987 gb.sound.command(CMD_SLIDE, 0, 0, 0);
Pokitto 5:56c4f2f12ec0 988 gb.sound.command(CMD_ARPEGGIO, sounds[i][3], sounds[i][4], 0);
Pokitto 5:56c4f2f12ec0 989 gb.sound.command(CMD_INSTRUMENT, sounds[i][0], 0, 0);
Pokitto 5:56c4f2f12ec0 990 gb.sound.playNote(sounds[i][1], sounds[i][2], 0);
Pokitto 5:56c4f2f12ec0 991
Pokitto 5:56c4f2f12ec0 992 //gb.sound.playNote(20, 5, 0);
Pokitto 5:56c4f2f12ec0 993 }
Pokitto 5:56c4f2f12ec0 994
Pokitto 5:56c4f2f12ec0 995