Asterocks by Yoda. Ported from Gamebuino to Pokito by Jonne using automated parser.
Dependencies: PokittoLib
Fork of HelloWorld by
asterocks.cpp@12:79c542632971, 2018-05-02 (annotated)
- Committer:
- Pokitto
- Date:
- Wed May 02 06:20:31 2018 +0000
- Revision:
- 12:79c542632971
- Parent:
- 4:46e28b959b54
New pokittolib with improved volume controls & better button handling
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Pokitto | 4:46e28b959b54 | 1 | /* This file was automatically parsed from an Arduino sourcefile */ |
Pokitto | 4:46e28b959b54 | 2 | /* by PokittoParser v0.1 Copyright 2016 Jonne Valola */ |
Pokitto | 4:46e28b959b54 | 3 | /* USE AT YOUR OWN RISK - NO GUARANTEES GIVEN OF 100% CORRECTNESS */ |
Pokitto | 4:46e28b959b54 | 4 | //#include <SPI.h> |
Pokitto | 4:46e28b959b54 | 5 | #include "Pokitto.h" |
Pokitto | 4:46e28b959b54 | 6 | #include "PokittoFakeavr.h" |
Pokitto | 4:46e28b959b54 | 7 | #include "WString.h" |
Pokitto | 4:46e28b959b54 | 8 | |
Pokitto | 4:46e28b959b54 | 9 | #define MAXASTEROCKS 32 |
Pokitto | 4:46e28b959b54 | 10 | #define MAXX LCDWIDTH*8 //880 //644 |
Pokitto | 4:46e28b959b54 | 11 | #define MINX -56 |
Pokitto | 4:46e28b959b54 | 12 | #define MAXY LCDHEIGHT*8 //704 //376 |
Pokitto | 4:46e28b959b54 | 13 | #define MINY -56 |
Pokitto | 4:46e28b959b54 | 14 | |
Pokitto | 4:46e28b959b54 | 15 | Pokitto::Core gb; |
Pokitto | 4:46e28b959b54 | 16 | /* Auto-generated function declarations */ |
Pokitto | 4:46e28b959b54 | 17 | void setup(); |
Pokitto | 4:46e28b959b54 | 18 | void loop(); |
Pokitto | 4:46e28b959b54 | 19 | void newgame(); |
Pokitto | 4:46e28b959b54 | 20 | void newlevel(); |
Pokitto | 4:46e28b959b54 | 21 | void newlife(); |
Pokitto | 4:46e28b959b54 | 22 | void showscore(); |
Pokitto | 4:46e28b959b54 | 23 | void nextlevelcheck(); |
Pokitto | 4:46e28b959b54 | 24 | void handledeath(); |
Pokitto | 4:46e28b959b54 | 25 | void handleplayership(); |
Pokitto | 4:46e28b959b54 | 26 | void handleplayershots(); |
Pokitto | 4:46e28b959b54 | 27 | void handlerocks(); |
Pokitto | 4:46e28b959b54 | 28 | void ufoappears(); |
Pokitto | 4:46e28b959b54 | 29 | void moveufo(); |
Pokitto | 4:46e28b959b54 | 30 | void playershotufocollission(); |
Pokitto | 4:46e28b959b54 | 31 | void ufoshotrelease(); |
Pokitto | 4:46e28b959b54 | 32 | void moveufoshot(); |
Pokitto | 4:46e28b959b54 | 33 | void checkbonuslife(); |
Pokitto | 4:46e28b959b54 | 34 | void backgroundsound(); |
Pokitto | 4:46e28b959b54 | 35 | void showgameover(); |
Pokitto | 4:46e28b959b54 | 36 | void showtitle(); |
Pokitto | 4:46e28b959b54 | 37 | void playsoundfx(int,int); |
Pokitto | 4:46e28b959b54 | 38 | //---------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 39 | // A S T E R O C K S |
Pokitto | 4:46e28b959b54 | 40 | // by Yoda Zhang |
Pokitto | 4:46e28b959b54 | 41 | //---------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 42 | // Please use this source-code for learning purposes only. If you make |
Pokitto | 4:46e28b959b54 | 43 | // changes to the code, it may not compile to the same result as the |
Pokitto | 4:46e28b959b54 | 44 | // provided HEX file, since I made changes to my compiler settings. |
Pokitto | 4:46e28b959b54 | 45 | //---------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 46 | |
Pokitto | 4:46e28b959b54 | 47 | |
Pokitto | 4:46e28b959b54 | 48 | // define variables and constants |
Pokitto | 4:46e28b959b54 | 49 | String gamestatus; |
Pokitto | 4:46e28b959b54 | 50 | int score; |
Pokitto | 4:46e28b959b54 | 51 | int highscore; |
Pokitto | 4:46e28b959b54 | 52 | byte lives; |
Pokitto | 4:46e28b959b54 | 53 | byte gamelevel; |
Pokitto | 4:46e28b959b54 | 54 | int yeahtimer; |
Pokitto | 4:46e28b959b54 | 55 | int deadtimer; |
Pokitto | 4:46e28b959b54 | 56 | int i; |
Pokitto | 4:46e28b959b54 | 57 | int u; |
Pokitto | 4:46e28b959b54 | 58 | float x; |
Pokitto | 4:46e28b959b54 | 59 | float y; |
Pokitto | 4:46e28b959b54 | 60 | |
Pokitto | 4:46e28b959b54 | 61 | int playershipx; |
Pokitto | 4:46e28b959b54 | 62 | int playershipy; |
Pokitto | 4:46e28b959b54 | 63 | int playershiprotation; |
Pokitto | 4:46e28b959b54 | 64 | int playershipxspeed; |
Pokitto | 4:46e28b959b54 | 65 | int playershipyspeed; |
Pokitto | 4:46e28b959b54 | 66 | byte playershipvisible; |
Pokitto | 4:46e28b959b54 | 67 | byte playershipappear; |
Pokitto | 4:46e28b959b54 | 68 | int xadd[16]={0,4,8,8,8,8,8,4,0,-4,-8,-8,-8,-8,-8,-4}; |
Pokitto | 4:46e28b959b54 | 69 | int yadd[16]={-8,-8,-8,-4,0,4,8,8,8,8,8,4,0,-4,-8,-8}; |
Pokitto | 4:46e28b959b54 | 70 | int rockxadd[12]={4,4,-4,-4,8,8,8,8,-8,-8,-8,-8}; |
Pokitto | 4:46e28b959b54 | 71 | int rockyadd[12]={-8,8,-8,8,-8,-4,4,8,8,4,-4,-8}; |
Pokitto | 4:46e28b959b54 | 72 | int playershotx[4]; |
Pokitto | 4:46e28b959b54 | 73 | int playershoty[4]; |
Pokitto | 4:46e28b959b54 | 74 | int playershotxspeed[4]; |
Pokitto | 4:46e28b959b54 | 75 | int playershotyspeed[4]; |
Pokitto | 4:46e28b959b54 | 76 | byte playershotcounter[4]; |
Pokitto | 4:46e28b959b54 | 77 | byte playershots; |
Pokitto | 4:46e28b959b54 | 78 | int bonusscore; |
Pokitto | 4:46e28b959b54 | 79 | byte soundspeed; |
Pokitto | 4:46e28b959b54 | 80 | byte soundvalue; |
Pokitto | 4:46e28b959b54 | 81 | byte soundcounter; |
Pokitto | 4:46e28b959b54 | 82 | |
Pokitto | 4:46e28b959b54 | 83 | int asterockx[MAXASTEROCKS+1]; |
Pokitto | 4:46e28b959b54 | 84 | int asterocky[MAXASTEROCKS+1]; |
Pokitto | 4:46e28b959b54 | 85 | int asterockxspeed[MAXASTEROCKS+1]; |
Pokitto | 4:46e28b959b54 | 86 | int asterockyspeed[MAXASTEROCKS+1]; |
Pokitto | 4:46e28b959b54 | 87 | byte asterocktype[MAXASTEROCKS+1]; |
Pokitto | 4:46e28b959b54 | 88 | byte asterocksonscreen; |
Pokitto | 4:46e28b959b54 | 89 | byte destroyed; |
Pokitto | 4:46e28b959b54 | 90 | byte left; |
Pokitto | 4:46e28b959b54 | 91 | byte right; |
Pokitto | 4:46e28b959b54 | 92 | |
Pokitto | 4:46e28b959b54 | 93 | int ufox; |
Pokitto | 4:46e28b959b54 | 94 | int ufoy; |
Pokitto | 4:46e28b959b54 | 95 | byte ufotype; |
Pokitto | 4:46e28b959b54 | 96 | int ufoxr; |
Pokitto | 4:46e28b959b54 | 97 | int ufoyr; |
Pokitto | 4:46e28b959b54 | 98 | int ufoshotx; |
Pokitto | 4:46e28b959b54 | 99 | int ufoshoty; |
Pokitto | 4:46e28b959b54 | 100 | int ufoshotxr; |
Pokitto | 4:46e28b959b54 | 101 | int ufoshotyr; |
Pokitto | 4:46e28b959b54 | 102 | |
Pokitto | 4:46e28b959b54 | 103 | // define images & sounds |
Pokitto | 4:46e28b959b54 | 104 | extern const byte PROGMEM gamelogo[]; |
Pokitto | 4:46e28b959b54 | 105 | extern const byte PROGMEM playership[20][9]; |
Pokitto | 4:46e28b959b54 | 106 | extern const byte PROGMEM asterocks[12][22]; |
Pokitto | 4:46e28b959b54 | 107 | extern const byte PROGMEM ufo[2][7]; |
Pokitto | 4:46e28b959b54 | 108 | extern const byte PROGMEM bullet[]; |
Pokitto | 4:46e28b959b54 | 109 | extern const int soundfx[10][8]; |
Pokitto | 4:46e28b959b54 | 110 | |
Pokitto | 4:46e28b959b54 | 111 | // setup |
Pokitto | 4:46e28b959b54 | 112 | void setup(){ |
Pokitto | 4:46e28b959b54 | 113 | /** Set colors for this game **/ |
Pokitto | 4:46e28b959b54 | 114 | //palette[0] = pokConvertRGBto565(0xcb,0xc8,0x74); // background |
Pokitto | 4:46e28b959b54 | 115 | //palette[1] = pokConvertRGBto565(0x00,0x00,0x00); // background |
Pokitto | 4:46e28b959b54 | 116 | gb.display.palette[8] = gb.display.RGBto565(0xff,0xfc,0); // small mob |
Pokitto | 4:46e28b959b54 | 117 | gb.display.palette[7] = gb.display.RGBto565(0x18,0x9a,0x61); // shrub shadow |
Pokitto | 4:46e28b959b54 | 118 | gb.display.palette[5] = gb.display.RGBto565(0x2c,0xff,0x0b); //world (shrubs) |
Pokitto | 4:46e28b959b54 | 119 | gb.display.palette[6] = gb.display.RGBto565(0xf7,0xb2,0);// crate |
Pokitto | 4:46e28b959b54 | 120 | gb.display.palette[9] = gb.display.RGBto565(0xfc,0x14,4);// big mob fc1404 |
Pokitto | 4:46e28b959b54 | 121 | gb.display.palette[10] = gb.display.RGBto565(0,0x53,0xae); // blue shadow |
Pokitto | 4:46e28b959b54 | 122 | gb.display.palette[15] = gb.display.RGBto565(0xff,0xfd,0xbf); // bright sunlight |
Pokitto | 4:46e28b959b54 | 123 | |
Pokitto | 4:46e28b959b54 | 124 | |
Pokitto | 4:46e28b959b54 | 125 | //gb.begin(); |
Pokitto | 4:46e28b959b54 | 126 | gb.setFrameRate(25); |
Pokitto | 4:46e28b959b54 | 127 | //gb.titleScreen(F(" Yoda's"),gamelogo); |
Pokitto | 4:46e28b959b54 | 128 | gb.display.setFont(font3x5); |
Pokitto | 4:46e28b959b54 | 129 | gb.display.fontSize=1; |
Pokitto | 4:46e28b959b54 | 130 | gb.pickRandomSeed(); |
Pokitto | 4:46e28b959b54 | 131 | gamestatus="title"; |
Pokitto | 4:46e28b959b54 | 132 | gb.battery.show=false; |
Pokitto | 4:46e28b959b54 | 133 | } |
Pokitto | 4:46e28b959b54 | 134 | |
Pokitto | 4:46e28b959b54 | 135 | // loop |
Pokitto | 4:46e28b959b54 | 136 | void loop(){ |
Pokitto | 4:46e28b959b54 | 137 | if(gb.update()){ |
Pokitto | 4:46e28b959b54 | 138 | |
Pokitto | 4:46e28b959b54 | 139 | if (gamestatus=="newgame") { newgame(); } // new game |
Pokitto | 4:46e28b959b54 | 140 | |
Pokitto | 4:46e28b959b54 | 141 | if (gamestatus=="newlevel") { newlevel(); } // new level |
Pokitto | 4:46e28b959b54 | 142 | |
Pokitto | 4:46e28b959b54 | 143 | if (gamestatus=="newlife") { newlife(); } // new life |
Pokitto | 4:46e28b959b54 | 144 | |
Pokitto | 4:46e28b959b54 | 145 | if (gamestatus=="running"){ // game running |
Pokitto | 4:46e28b959b54 | 146 | |
Pokitto | 4:46e28b959b54 | 147 | gb.display.setColor(2); |
Pokitto | 4:46e28b959b54 | 148 | handleplayership(); // move and draw playership, check buttons etc. |
Pokitto | 4:46e28b959b54 | 149 | gb.display.setColor(3); |
Pokitto | 4:46e28b959b54 | 150 | handleplayershots(); // handle playershots |
Pokitto | 4:46e28b959b54 | 151 | gb.display.setColor(1); |
Pokitto | 4:46e28b959b54 | 152 | handlerocks(); // handle asterocks |
Pokitto | 4:46e28b959b54 | 153 | nextlevelcheck(); // level finished? |
Pokitto | 4:46e28b959b54 | 154 | ufoappears(); // ufo appears? |
Pokitto | 4:46e28b959b54 | 155 | moveufo(); // move ufo |
Pokitto | 4:46e28b959b54 | 156 | playershotufocollission(); // check collission playershot & ufo |
Pokitto | 4:46e28b959b54 | 157 | ufoshotrelease(); // ufo shot release |
Pokitto | 4:46e28b959b54 | 158 | moveufoshot(); // move ufoshot |
Pokitto | 4:46e28b959b54 | 159 | checkbonuslife(); // bonuslife? |
Pokitto | 4:46e28b959b54 | 160 | gb.display.setColor(6); |
Pokitto | 4:46e28b959b54 | 161 | showscore(); // show lives, score, level |
Pokitto | 4:46e28b959b54 | 162 | backgroundsound(); // make background sounds |
Pokitto | 4:46e28b959b54 | 163 | } |
Pokitto | 4:46e28b959b54 | 164 | |
Pokitto | 4:46e28b959b54 | 165 | if (gamestatus=="title") { showtitle(); } // title |
Pokitto | 4:46e28b959b54 | 166 | |
Pokitto | 4:46e28b959b54 | 167 | if (gamestatus=="gameover") { showgameover(); } // game over |
Pokitto | 4:46e28b959b54 | 168 | |
Pokitto | 4:46e28b959b54 | 169 | } // end of gb.update |
Pokitto | 4:46e28b959b54 | 170 | } // end of loop |
Pokitto | 4:46e28b959b54 | 171 | const byte PROGMEM gamelogo[]= |
Pokitto | 4:46e28b959b54 | 172 | { |
Pokitto | 4:46e28b959b54 | 173 | 64,26, |
Pokitto | 4:46e28b959b54 | 174 | B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, |
Pokitto | 4:46e28b959b54 | 175 | B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, |
Pokitto | 4:46e28b959b54 | 176 | B00111000,B00111101,B11110111,B11011111,B00000111,B00000111,B01110111,B00011110, |
Pokitto | 4:46e28b959b54 | 177 | B01111100,B01111101,B11110111,B11011111,B10001111,B10001111,B01110111,B00111110, |
Pokitto | 4:46e28b959b54 | 178 | B11111110,B11111101,B11110111,B11011111,B11011111,B11011111,B01110111,B01111110, |
Pokitto | 4:46e28b959b54 | 179 | B11111110,B11111101,B11110111,B11011111,B11011111,B11011111,B01110111,B01111110, |
Pokitto | 4:46e28b959b54 | 180 | B11101110,B11100000,B11100111,B00011101,B11011101,B11011100,B01110111,B01110000, |
Pokitto | 4:46e28b959b54 | 181 | B11101110,B11100000,B11100111,B00011101,B11011101,B11011100,B01111110,B01110000, |
Pokitto | 4:46e28b959b54 | 182 | B11101110,B11100000,B11100111,B10011101,B11011101,B11011100,B01111100,B01110000, |
Pokitto | 4:46e28b959b54 | 183 | B11111110,B11111000,B11100111,B10011111,B10011101,B11011100,B01111000,B01111100, |
Pokitto | 4:46e28b959b54 | 184 | B11111110,B01111100,B11100111,B10011111,B00011101,B11011100,B01111100,B00111110, |
Pokitto | 4:46e28b959b54 | 185 | B11111110,B00111110,B11100111,B00011111,B10011101,B11011100,B01111110,B00011111, |
Pokitto | 4:46e28b959b54 | 186 | B11101110,B00001110,B11100111,B00011101,B11011101,B11011100,B01110111,B00000111, |
Pokitto | 4:46e28b959b54 | 187 | B11101110,B00001110,B11100111,B00011101,B11011101,B11011100,B01110111,B00000111, |
Pokitto | 4:46e28b959b54 | 188 | B11101110,B11111110,B11100111,B11011101,B11011111,B11011111,B01110111,B01111111, |
Pokitto | 4:46e28b959b54 | 189 | B11101110,B11111110,B11100111,B11011101,B11011111,B11011111,B01110111,B01111111, |
Pokitto | 4:46e28b959b54 | 190 | B11101110,B11111100,B11100111,B11011101,B11001111,B10001111,B01110111,B01111110, |
Pokitto | 4:46e28b959b54 | 191 | B11101110,B11111000,B11100111,B11011101,B11000111,B00000111,B01110111,B01111100, |
Pokitto | 4:46e28b959b54 | 192 | B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, |
Pokitto | 4:46e28b959b54 | 193 | B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111, |
Pokitto | 4:46e28b959b54 | 194 | B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, |
Pokitto | 4:46e28b959b54 | 195 | B10100110,B11000110,B01101010,B11101100,B11100110,B01101110,B01100110,B11001110, |
Pokitto | 4:46e28b959b54 | 196 | B10101010,B10101010,B10001010,B01001010,B10001010,B10101010,B10001010,B10101000, |
Pokitto | 4:46e28b959b54 | 197 | B10101010,B10101110,B11101010,B01001010,B11001010,B11101100,B10001110,B10101100, |
Pokitto | 4:46e28b959b54 | 198 | B01001010,B10101010,B00101010,B01001010,B10001010,B10101010,B10001010,B10101000, |
Pokitto | 4:46e28b959b54 | 199 | B01001110,B11001010,B11100100,B11101100,B11101110,B10101010,B11101010,B11001110, |
Pokitto | 4:46e28b959b54 | 200 | }; |
Pokitto | 4:46e28b959b54 | 201 | |
Pokitto | 4:46e28b959b54 | 202 | const byte PROGMEM playership[20][9] = { |
Pokitto | 4:46e28b959b54 | 203 | |
Pokitto | 4:46e28b959b54 | 204 | {7,7, B00010000,B00010000,B00101000,B00101000,B01000100,B01111100,B00000000}, |
Pokitto | 4:46e28b959b54 | 205 | {7,7, B00001100,B00010100,B00100100,B01000100,B01101000,B00011000,B00000000}, |
Pokitto | 4:46e28b959b54 | 206 | {7,7, B00000110,B00011010,B01100100,B01000100,B00101000,B00011000,B00000000}, |
Pokitto | 4:46e28b959b54 | 207 | {7,7, B00000000,B00011110,B01100010,B01000100,B00101000,B00110000,B00000000}, |
Pokitto | 4:46e28b959b54 | 208 | {7,7, B00000000,B01100000,B01011000,B01000110,B01011000,B01100000,B00000000}, |
Pokitto | 4:46e28b959b54 | 209 | {7,7, B00000000,B00110000,B00101000,B01000100,B01100010,B00011110,B00000000}, |
Pokitto | 4:46e28b959b54 | 210 | {7,7, B00000000,B00011000,B00101000,B01000100,B01100100,B00011010,B00000110}, |
Pokitto | 4:46e28b959b54 | 211 | {7,7, B00000000,B00011000,B01101000,B01000100,B00100100,B00010100,B00001100}, |
Pokitto | 4:46e28b959b54 | 212 | {7,7, B00000000,B01111100,B01000100,B00101000,B00101000,B00010000,B00010000}, |
Pokitto | 4:46e28b959b54 | 213 | {7,7, B00000000,B00110000,B00101100,B01000100,B01001000,B01010000,B01100000}, |
Pokitto | 4:46e28b959b54 | 214 | {7,7, B00000000,B00110000,B00101000,B01000100,B01001100,B10110000,B11000000}, |
Pokitto | 4:46e28b959b54 | 215 | {7,7, B00000000,B00011000,B00101000,B01000100,B10001100,B11110000,B00000000}, |
Pokitto | 4:46e28b959b54 | 216 | {7,7, B00000000,B00001100,B00110100,B11000100,B00110100,B00001100,B00000000}, |
Pokitto | 4:46e28b959b54 | 217 | {7,7, B00000000,B11110000,B10001100,B01000100,B00101000,B00011000,B00000000}, |
Pokitto | 4:46e28b959b54 | 218 | {7,7, B11000000,B10110000,B01001100,B01000100,B00101000,B00110000,B00000000}, |
Pokitto | 4:46e28b959b54 | 219 | {7,7, B01100000,B01010000,B01001000,B01000100,B00101100,B00110000,B00000000}, |
Pokitto | 4:46e28b959b54 | 220 | {7,7, B00000000,B00100000,B00101000,B01000100,B01001100,B00111000,B00001000}, |
Pokitto | 4:46e28b959b54 | 221 | {7,7, B00000000,B01000000,B01001100,B10000010,B00001000,B01001000,B00110000}, |
Pokitto | 4:46e28b959b54 | 222 | {7,7, B01000000,B10000100,B00000010,B00000000,B00001000,B01001000,B00100000}, |
Pokitto | 4:46e28b959b54 | 223 | {7,7, B10000000,B00000010,B00000000,B00000000,B00000000,B00000100,B01000000}, |
Pokitto | 4:46e28b959b54 | 224 | }; |
Pokitto | 4:46e28b959b54 | 225 | |
Pokitto | 4:46e28b959b54 | 226 | const byte PROGMEM asterocks[12][22] = { |
Pokitto | 4:46e28b959b54 | 227 | {10,10, B00110110,B00000000,B01001001,B00000000,B10000000,B10000000,B01000000,B01000000,B00100000,B01000000,B01000000,B01000000,B10000000,B01000000,B10000000,B10000000,B01000001,B00000000,B00111110,B00000000}, |
Pokitto | 4:46e28b959b54 | 228 | {10,10, B00010001,B00000000,B00101010,B10000000,B01000100,B01000000,B10000000,B10000000,B10000000,B01000000,B10000000,B01000000,B10000000,B01000000,B01000000,B10000000,B00100001,B00000000,B00011110,B00000000}, |
Pokitto | 4:46e28b959b54 | 229 | {10,10, B00011110,B00000000,B00100001,B00000000,B01000000,B10000000,B10000000,B01000000,B10000000,B01000000,B01000000,B01000000,B01000000,B01000000,B10001000,B10000000,B01010101,B00000000,B00100010,B00000000}, |
Pokitto | 4:46e28b959b54 | 230 | {10,10, B00011111,B00000000,B00100000,B10000000,B01000000,B01000000,B10000000,B01000000,B10000000,B10000000,B10000001,B00000000,B10000000,B10000000,B01000000,B01000000,B00100100,B10000000,B00011011,B00000000}, |
Pokitto | 4:46e28b959b54 | 231 | {10,10, B00000000,B00000000,B00000000,B00000000,B00011100,B00000000,B00100010,B00000000,B00010001,B00000000,B00100001,B00000000,B00101010,B00000000,B00010100,B00000000,B00000000,B00000000,B00000000,B00000000}, |
Pokitto | 4:46e28b959b54 | 232 | {10,10, B00000000,B00000000,B00000000,B00000000,B00010110,B00000000,B00101001,B00000000,B00100010,B00000000,B00100001,B00000000,B00010010,B00000000,B00001100,B00000000,B00000000,B00000000,B00000000,B00000000}, |
Pokitto | 4:46e28b959b54 | 233 | {10,10, B00000000,B00000000,B00000000,B00000000,B00001100,B00000000,B00010010,B00000000,B00100001,B00000000,B00010001,B00000000,B00100101,B00000000,B00011010,B00000000,B00000000,B00000000,B00000000,B00000000}, |
Pokitto | 4:46e28b959b54 | 234 | {10,10, B00000000,B00000000,B00000000,B00000000,B00001100,B00000000,B00010010,B00000000,B00100001,B00000000,B00100010,B00000000,B00101001,B00000000,B00010110,B00000000,B00000000,B00000000,B00000000,B00000000}, |
Pokitto | 4:46e28b959b54 | 235 | {10,10, B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000100,B00000000,B00001010,B00000000,B00010010,B00000000,B00001100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, |
Pokitto | 4:46e28b959b54 | 236 | {10,10, B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001000,B00000000,B00010100,B00000000,B00010010,B00000000,B00001100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, |
Pokitto | 4:46e28b959b54 | 237 | {10,10, B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001100,B00000000,B00010010,B00000000,B00001010,B00000000,B00000100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, |
Pokitto | 4:46e28b959b54 | 238 | {10,10, B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001100,B00000000,B00010010,B00000000,B00010100,B00000000,B00001000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, |
Pokitto | 4:46e28b959b54 | 239 | }; |
Pokitto | 4:46e28b959b54 | 240 | |
Pokitto | 4:46e28b959b54 | 241 | const byte PROGMEM ufo[2][7] = { |
Pokitto | 4:46e28b959b54 | 242 | {7,5, B00010000,B00101000,B11111110,B01000100,B00111000}, |
Pokitto | 4:46e28b959b54 | 243 | {7,5, B00100000,B11011000,B01110000,B00000000,B00000000}, |
Pokitto | 4:46e28b959b54 | 244 | }; |
Pokitto | 4:46e28b959b54 | 245 | |
Pokitto | 4:46e28b959b54 | 246 | const byte PROGMEM bullet[] = { 3,3, B01000000,B11100000,B01000000, }; |
Pokitto | 4:46e28b959b54 | 247 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 248 | void newgame() { |
Pokitto | 4:46e28b959b54 | 249 | score=0; |
Pokitto | 4:46e28b959b54 | 250 | lives=3; |
Pokitto | 4:46e28b959b54 | 251 | gamelevel=0; |
Pokitto | 4:46e28b959b54 | 252 | ufotype=0; |
Pokitto | 4:46e28b959b54 | 253 | ufoshotx=-1; |
Pokitto | 4:46e28b959b54 | 254 | playershiprotation=0; |
Pokitto | 4:46e28b959b54 | 255 | bonusscore=10000; |
Pokitto | 4:46e28b959b54 | 256 | gamestatus="newlevel"; |
Pokitto | 4:46e28b959b54 | 257 | } |
Pokitto | 4:46e28b959b54 | 258 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 259 | void newlevel() { |
Pokitto | 4:46e28b959b54 | 260 | asterocksonscreen=4+gamelevel*2; |
Pokitto | 4:46e28b959b54 | 261 | if (asterocksonscreen>MAXASTEROCKS) { asterocksonscreen=MAXASTEROCKS; } |
Pokitto | 4:46e28b959b54 | 262 | for (int i=0; i<asterocksonscreen; i++) { |
Pokitto | 4:46e28b959b54 | 263 | int x=random(320); |
Pokitto | 4:46e28b959b54 | 264 | if (x>160) { x=x+448; } |
Pokitto | 4:46e28b959b54 | 265 | int y=random(128); |
Pokitto | 4:46e28b959b54 | 266 | asterockx[i]=x; |
Pokitto | 4:46e28b959b54 | 267 | asterocky[i]=y; |
Pokitto | 4:46e28b959b54 | 268 | asterocktype[i]=random(4); |
Pokitto | 4:46e28b959b54 | 269 | asterockxspeed[i]=rockxadd[random(4)]/4+8; |
Pokitto | 4:46e28b959b54 | 270 | asterockyspeed[i]=rockyadd[random(12)]/4+8; |
Pokitto | 4:46e28b959b54 | 271 | } |
Pokitto | 4:46e28b959b54 | 272 | playershipvisible=2; |
Pokitto | 4:46e28b959b54 | 273 | gamestatus="newlife"; |
Pokitto | 4:46e28b959b54 | 274 | soundspeed=40; |
Pokitto | 4:46e28b959b54 | 275 | soundvalue=0; |
Pokitto | 4:46e28b959b54 | 276 | } |
Pokitto | 4:46e28b959b54 | 277 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 278 | void newlife() { |
Pokitto | 4:46e28b959b54 | 279 | yeahtimer=0; |
Pokitto | 4:46e28b959b54 | 280 | deadtimer=-1; |
Pokitto | 4:46e28b959b54 | 281 | playershipx=320; |
Pokitto | 4:46e28b959b54 | 282 | playershipy=176; |
Pokitto | 4:46e28b959b54 | 283 | playershipxspeed=0; |
Pokitto | 4:46e28b959b54 | 284 | playershipyspeed=0; |
Pokitto | 4:46e28b959b54 | 285 | if (playershipvisible==1) { // after dead |
Pokitto | 4:46e28b959b54 | 286 | playershipvisible=0; |
Pokitto | 4:46e28b959b54 | 287 | playershiprotation=0; |
Pokitto | 4:46e28b959b54 | 288 | } else { // after level done |
Pokitto | 4:46e28b959b54 | 289 | playershipvisible=1; |
Pokitto | 4:46e28b959b54 | 290 | } |
Pokitto | 4:46e28b959b54 | 291 | gamestatus="running"; |
Pokitto | 4:46e28b959b54 | 292 | } |
Pokitto | 4:46e28b959b54 | 293 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 294 | void showscore() { |
Pokitto | 4:46e28b959b54 | 295 | i=1; |
Pokitto | 4:46e28b959b54 | 296 | while (lives>i) { |
Pokitto | 4:46e28b959b54 | 297 | gb.display.drawBitmap(i*6-6,0,playership[0]); |
Pokitto | 4:46e28b959b54 | 298 | i++; |
Pokitto | 4:46e28b959b54 | 299 | } |
Pokitto | 4:46e28b959b54 | 300 | gb.display.cursorX=40-2*(score>9)-2*(score>99)-2*(score>999)-2*(score>9999)-2*(score>99999); |
Pokitto | 4:46e28b959b54 | 301 | gb.display.cursorY=0; |
Pokitto | 4:46e28b959b54 | 302 | gb.display.print(score); |
Pokitto | 4:46e28b959b54 | 303 | gb.display.cursorX=76; |
Pokitto | 4:46e28b959b54 | 304 | gb.display.print(gamelevel+1); |
Pokitto | 4:46e28b959b54 | 305 | } |
Pokitto | 4:46e28b959b54 | 306 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 307 | void nextlevelcheck() { |
Pokitto | 4:46e28b959b54 | 308 | if (yeahtimer>0) { |
Pokitto | 4:46e28b959b54 | 309 | yeahtimer--; |
Pokitto | 4:46e28b959b54 | 310 | if (yeahtimer==0) { |
Pokitto | 4:46e28b959b54 | 311 | gamelevel=gamelevel+1; |
Pokitto | 4:46e28b959b54 | 312 | gamestatus="newlevel"; |
Pokitto | 4:46e28b959b54 | 313 | } |
Pokitto | 4:46e28b959b54 | 314 | } |
Pokitto | 4:46e28b959b54 | 315 | } |
Pokitto | 4:46e28b959b54 | 316 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 317 | void handledeath() { |
Pokitto | 4:46e28b959b54 | 318 | deadtimer--; |
Pokitto | 4:46e28b959b54 | 319 | if (deadtimer % 5 == 0) { |
Pokitto | 4:46e28b959b54 | 320 | playsoundfx(1,0); |
Pokitto | 4:46e28b959b54 | 321 | } |
Pokitto | 4:46e28b959b54 | 322 | // draw dead animation |
Pokitto | 4:46e28b959b54 | 323 | i=19 - deadtimer / 10; |
Pokitto | 4:46e28b959b54 | 324 | gb.display.drawBitmap(playershipx/8,playershipy/8,playership[i]); |
Pokitto | 4:46e28b959b54 | 325 | if (deadtimer==0) { |
Pokitto | 4:46e28b959b54 | 326 | deadtimer=-1; |
Pokitto | 4:46e28b959b54 | 327 | lives--; |
Pokitto | 4:46e28b959b54 | 328 | if (lives == 0) { |
Pokitto | 4:46e28b959b54 | 329 | gamestatus = "gameover"; |
Pokitto | 4:46e28b959b54 | 330 | } else { |
Pokitto | 4:46e28b959b54 | 331 | gamestatus = "newlife"; |
Pokitto | 4:46e28b959b54 | 332 | } |
Pokitto | 4:46e28b959b54 | 333 | } |
Pokitto | 4:46e28b959b54 | 334 | } |
Pokitto | 4:46e28b959b54 | 335 | const int soundfx[10][8] = { |
Pokitto | 4:46e28b959b54 | 336 | {0,36,57,1,1,1,5,6}, // 0 = sound shoot - channel 0 |
Pokitto | 4:46e28b959b54 | 337 | {1,15,57,1,1,2,7,8}, // 1 = hit big rock / player spaceship - channel 2 |
Pokitto | 4:46e28b959b54 | 338 | {1,20,57,1,1,2,7,8}, // 2 = hit medium rock - channel 2 |
Pokitto | 4:46e28b959b54 | 339 | {1,25,57,1,1,2,7,8}, // 3 = hit small rock / ufo - channel 2 |
Pokitto | 4:46e28b959b54 | 340 | {0,0,2,1,0,0,4,5}, // 4 = ufo sound - channel 3 |
Pokitto | 4:46e28b959b54 | 341 | {0,58,0,0,0,0,7,8}, // 5 = bonus life - channel 3 |
Pokitto | 4:46e28b959b54 | 342 | {0,0,0,0,2,1,7,3}, // 6 = background 1 - channel 1 |
Pokitto | 4:46e28b959b54 | 343 | {0,2,0,0,2,1,7,3}, // 7 = background 2 - channel 1 |
Pokitto | 4:46e28b959b54 | 344 | {1,12,58,0,0,0,7,2}, // 8 = thrust - channel 0 |
Pokitto | 4:46e28b959b54 | 345 | {0,40,57,1,1,1,6,6}, // 9 = ufoshot - channel 0 |
Pokitto | 4:46e28b959b54 | 346 | }; |
Pokitto | 4:46e28b959b54 | 347 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 348 | void handleplayership() { |
Pokitto | 4:46e28b959b54 | 349 | if (playershipvisible==1) { |
Pokitto | 4:46e28b959b54 | 350 | //draw playership |
Pokitto | 4:46e28b959b54 | 351 | if (deadtimer==-1) { |
Pokitto | 4:46e28b959b54 | 352 | //move playership |
Pokitto | 4:46e28b959b54 | 353 | playershipx=playershipx+playershipxspeed; |
Pokitto | 4:46e28b959b54 | 354 | playershipy=playershipy+playershipyspeed; |
Pokitto | 4:46e28b959b54 | 355 | //draw ship |
Pokitto | 4:46e28b959b54 | 356 | gb.display.drawBitmap(playershipx/8,playershipy/8,playership[playershiprotation]); |
Pokitto | 4:46e28b959b54 | 357 | // check buttons |
Pokitto | 4:46e28b959b54 | 358 | if (gb.buttons.repeat(BTN_B,0)) { // thrust |
Pokitto | 4:46e28b959b54 | 359 | playsoundfx(8,0); |
Pokitto | 4:46e28b959b54 | 360 | playershipxspeed=playershipxspeed+xadd[playershiprotation]/8; |
Pokitto | 4:46e28b959b54 | 361 | playershipyspeed=playershipyspeed+yadd[playershiprotation]/8; |
Pokitto | 4:46e28b959b54 | 362 | if (playershipxspeed>8) { playershipxspeed=8; } |
Pokitto | 4:46e28b959b54 | 363 | if (playershipxspeed<-8) { playershipxspeed=-8; } |
Pokitto | 4:46e28b959b54 | 364 | if (playershipyspeed>8) { playershipyspeed=8; } |
Pokitto | 4:46e28b959b54 | 365 | if (playershipyspeed<-8) { playershipyspeed=-8; } |
Pokitto | 4:46e28b959b54 | 366 | } |
Pokitto | 4:46e28b959b54 | 367 | if (gb.buttons.repeat(BTN_DOWN,0)) { // hyperspace |
Pokitto | 4:46e28b959b54 | 368 | playershipx=random(592)+40; |
Pokitto | 4:46e28b959b54 | 369 | playershipy=random(304)+40; |
Pokitto | 4:46e28b959b54 | 370 | playershipxspeed=0; |
Pokitto | 4:46e28b959b54 | 371 | playershipyspeed=0; |
Pokitto | 4:46e28b959b54 | 372 | } |
Pokitto | 4:46e28b959b54 | 373 | if (gb.buttons.repeat(BTN_LEFT,0)) { // rotate left |
Pokitto | 4:46e28b959b54 | 374 | playershiprotation--; |
Pokitto | 4:46e28b959b54 | 375 | if (playershiprotation<0) { playershiprotation=playershiprotation+16; } |
Pokitto | 4:46e28b959b54 | 376 | } |
Pokitto | 4:46e28b959b54 | 377 | if (gb.buttons.repeat(BTN_RIGHT,0)) { // rotate right |
Pokitto | 4:46e28b959b54 | 378 | playershiprotation++; |
Pokitto | 4:46e28b959b54 | 379 | playershiprotation%=16; |
Pokitto | 4:46e28b959b54 | 380 | } |
Pokitto | 4:46e28b959b54 | 381 | if (gb.buttons.pressed(BTN_A) and playershots<4) { // release shoot |
Pokitto | 4:46e28b959b54 | 382 | playershotxspeed[playershots]=xadd[playershiprotation]; |
Pokitto | 4:46e28b959b54 | 383 | playershotyspeed[playershots]=yadd[playershiprotation]; |
Pokitto | 4:46e28b959b54 | 384 | playershotx[playershots]=playershipx+16+playershotxspeed[playershots]; |
Pokitto | 4:46e28b959b54 | 385 | playershoty[playershots]=playershipy+16+playershotyspeed[playershots]; |
Pokitto | 4:46e28b959b54 | 386 | playershotcounter[playershots]=0; |
Pokitto | 4:46e28b959b54 | 387 | playershots=playershots+1; |
Pokitto | 4:46e28b959b54 | 388 | playsoundfx(0,0); |
Pokitto | 4:46e28b959b54 | 389 | } |
Pokitto | 4:46e28b959b54 | 390 | } else { // death |
Pokitto | 4:46e28b959b54 | 391 | handledeath(); |
Pokitto | 4:46e28b959b54 | 392 | } // end of deadtimer |
Pokitto | 4:46e28b959b54 | 393 | i++; |
Pokitto | 4:46e28b959b54 | 394 | } // end of ship visible |
Pokitto | 4:46e28b959b54 | 395 | |
Pokitto | 4:46e28b959b54 | 396 | // ship off screen -> appear at opposite side |
Pokitto | 4:46e28b959b54 | 397 | if (playershipx<-56) { playershipx=playershipx+MAXX; } |
Pokitto | 4:46e28b959b54 | 398 | if (playershipx>MAXX) { playershipx=playershipx-MAXX; } |
Pokitto | 4:46e28b959b54 | 399 | if (playershipy<-56) { playershipy=playershipy+MAXY; } |
Pokitto | 4:46e28b959b54 | 400 | if (playershipy>MAXY) { playershipy=playershipy-MAXY; } |
Pokitto | 4:46e28b959b54 | 401 | |
Pokitto | 4:46e28b959b54 | 402 | // player ship appears? |
Pokitto | 4:46e28b959b54 | 403 | if (playershipappear==1) { playershipvisible=1; } |
Pokitto | 4:46e28b959b54 | 404 | |
Pokitto | 4:46e28b959b54 | 405 | if (gb.buttons.pressed(BTN_C)) { |
Pokitto | 4:46e28b959b54 | 406 | gb.titleScreen(("Yoda's"),gamelogo); |
Pokitto | 4:46e28b959b54 | 407 | gamestatus="title"; |
Pokitto | 4:46e28b959b54 | 408 | } |
Pokitto | 4:46e28b959b54 | 409 | } |
Pokitto | 4:46e28b959b54 | 410 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 411 | void handleplayershots() { |
Pokitto | 4:46e28b959b54 | 412 | // move playershots |
Pokitto | 4:46e28b959b54 | 413 | i=0; |
Pokitto | 4:46e28b959b54 | 414 | while (i<playershots) { |
Pokitto | 4:46e28b959b54 | 415 | playershotx[i]=playershotx[i]+playershotxspeed[i]; |
Pokitto | 4:46e28b959b54 | 416 | playershoty[i]=playershoty[i]+playershotyspeed[i]; |
Pokitto | 4:46e28b959b54 | 417 | if (playershotx[i]<0) { playershotx[i]=playershotx[i]+MAXX; } |
Pokitto | 4:46e28b959b54 | 418 | if (playershotx[i]>MAXX) { playershotx[i]=playershotx[i]-MAXX; } |
Pokitto | 4:46e28b959b54 | 419 | if (playershoty[i]<0) { playershoty[i]=playershoty[i]+MAXY; } |
Pokitto | 4:46e28b959b54 | 420 | if (playershoty[i]>MAXY) { playershoty[i]=playershoty[i]-MAXY; } |
Pokitto | 4:46e28b959b54 | 421 | playershotcounter[i]=++playershotcounter[i]; |
Pokitto | 4:46e28b959b54 | 422 | |
Pokitto | 4:46e28b959b54 | 423 | // draw playershots |
Pokitto | 4:46e28b959b54 | 424 | gb.display.drawBitmap(playershotx[i]/8,playershoty[i]/8,bullet); |
Pokitto | 4:46e28b959b54 | 425 | |
Pokitto | 4:46e28b959b54 | 426 | // remove shot if neccesary |
Pokitto | 4:46e28b959b54 | 427 | if (playershotcounter[i]>30) { |
Pokitto | 4:46e28b959b54 | 428 | playershotx[i]=playershotx[playershots-1]; |
Pokitto | 4:46e28b959b54 | 429 | playershoty[i]=playershoty[playershots-1]; |
Pokitto | 4:46e28b959b54 | 430 | playershotxspeed[i]=playershotxspeed[playershots-1]; |
Pokitto | 4:46e28b959b54 | 431 | playershotyspeed[i]=playershotyspeed[playershots-1]; |
Pokitto | 4:46e28b959b54 | 432 | playershotcounter[i]=playershotcounter[playershots-1]; |
Pokitto | 4:46e28b959b54 | 433 | playershots=--playershots; |
Pokitto | 4:46e28b959b54 | 434 | } |
Pokitto | 4:46e28b959b54 | 435 | i=++i; // next playershot |
Pokitto | 4:46e28b959b54 | 436 | } |
Pokitto | 4:46e28b959b54 | 437 | } |
Pokitto | 4:46e28b959b54 | 438 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 439 | void handlerocks() { |
Pokitto | 4:46e28b959b54 | 440 | // move asterocks |
Pokitto | 4:46e28b959b54 | 441 | playershipappear=1; |
Pokitto | 4:46e28b959b54 | 442 | i=0; |
Pokitto | 4:46e28b959b54 | 443 | while (i<asterocksonscreen) { |
Pokitto | 4:46e28b959b54 | 444 | x=asterockxspeed[i]-8; |
Pokitto | 4:46e28b959b54 | 445 | y=asterockyspeed[i]-8; |
Pokitto | 4:46e28b959b54 | 446 | asterockx[i]=asterockx[i]+x; |
Pokitto | 4:46e28b959b54 | 447 | asterocky[i]=asterocky[i]+y; |
Pokitto | 4:46e28b959b54 | 448 | if (asterockx[i]<-80) { asterockx[i]=MAXX; } |
Pokitto | 4:46e28b959b54 | 449 | if (asterockx[i]>MAXX) { asterockx[i]=-80; } |
Pokitto | 4:46e28b959b54 | 450 | if (asterocky[i]<-80) { asterocky[i]=MAXY; } |
Pokitto | 4:46e28b959b54 | 451 | if (asterocky[i]>MAXY) { asterocky[i]=-80; } |
Pokitto | 4:46e28b959b54 | 452 | |
Pokitto | 4:46e28b959b54 | 453 | // draw asterocks |
Pokitto | 4:46e28b959b54 | 454 | gb.display.drawBitmap(asterockx[i]/8,asterocky[i]/8,asterocks[asterocktype[i]]); |
Pokitto | 4:46e28b959b54 | 455 | |
Pokitto | 4:46e28b959b54 | 456 | // set collission offset depending on rock size |
Pokitto | 4:46e28b959b54 | 457 | left = 8 + 16*(asterocktype[i]>3) + 8*(asterocktype[i]>7); |
Pokitto | 4:46e28b959b54 | 458 | right = 72 - 16*(asterocktype[i]>3) - 8*(asterocktype[i]>7); |
Pokitto | 4:46e28b959b54 | 459 | |
Pokitto | 4:46e28b959b54 | 460 | // check collission with player ship |
Pokitto | 4:46e28b959b54 | 461 | if ((playershipx+8 < asterockx[i]+right) and (playershipx+40 > asterockx[i]+left) and (playershipy+8 < asterocky[i]+right) and (playershipy+40 > asterocky[i]+left) and playershipvisible==1 and deadtimer==-1) { |
Pokitto | 4:46e28b959b54 | 462 | deadtimer=40; |
Pokitto | 4:46e28b959b54 | 463 | destroyed=1; |
Pokitto | 4:46e28b959b54 | 464 | } |
Pokitto | 4:46e28b959b54 | 465 | |
Pokitto | 4:46e28b959b54 | 466 | // check collission with ufo |
Pokitto | 4:46e28b959b54 | 467 | if ((asterockx[i]+left < ufox+32+16*(ufotype==1)) and (asterockx[i]+right > ufox) and (asterocky[i]+left < ufoy+16+16*(ufotype==1)) and (asterocky[i]+right > ufoy) and ufotype != 0) { |
Pokitto | 4:46e28b959b54 | 468 | score=score+200+800*(ufotype==2); |
Pokitto | 4:46e28b959b54 | 469 | destroyed=1; |
Pokitto | 4:46e28b959b54 | 470 | ufotype=0; |
Pokitto | 4:46e28b959b54 | 471 | } |
Pokitto | 4:46e28b959b54 | 472 | |
Pokitto | 4:46e28b959b54 | 473 | // check collission with ufoshot |
Pokitto | 4:46e28b959b54 | 474 | if ((ufoshotx < asterockx[i]+right) and (ufoshotx+16 > asterockx[i]+left) and (ufoshoty < asterocky[i]+right) and (ufoshoty+16 > asterocky[i]+left) and ufoshotx>-1) { |
Pokitto | 4:46e28b959b54 | 475 | destroyed=1; |
Pokitto | 4:46e28b959b54 | 476 | ufoshotx=-1; |
Pokitto | 4:46e28b959b54 | 477 | } |
Pokitto | 4:46e28b959b54 | 478 | |
Pokitto | 4:46e28b959b54 | 479 | // check collission with playershots |
Pokitto | 4:46e28b959b54 | 480 | u=0; |
Pokitto | 4:46e28b959b54 | 481 | while (u<playershots) { |
Pokitto | 4:46e28b959b54 | 482 | if ((playershotx[u] < asterockx[i]+right) and (playershotx[u]+16 > asterockx[i]+left) and (playershoty[u] < asterocky[i]+right) and (playershoty[u]+16 > asterocky[i]+left) and playershotcounter[u]<50) { |
Pokitto | 4:46e28b959b54 | 483 | destroyed=1; |
Pokitto | 4:46e28b959b54 | 484 | playershotcounter[u]=50; |
Pokitto | 4:46e28b959b54 | 485 | } |
Pokitto | 4:46e28b959b54 | 486 | u++; |
Pokitto | 4:46e28b959b54 | 487 | } |
Pokitto | 4:46e28b959b54 | 488 | |
Pokitto | 4:46e28b959b54 | 489 | //split or remove rock |
Pokitto | 4:46e28b959b54 | 490 | if (destroyed==1) { |
Pokitto | 4:46e28b959b54 | 491 | soundspeed=soundspeed-2*(soundspeed>5); |
Pokitto | 4:46e28b959b54 | 492 | playsoundfx(1+(asterocktype[i]>3)+(asterocktype[i]>7),2); |
Pokitto | 4:46e28b959b54 | 493 | destroyed=0; |
Pokitto | 4:46e28b959b54 | 494 | score=score+20+30*(asterocktype[i]>3)+50*(asterocktype[i]>7); |
Pokitto | 4:46e28b959b54 | 495 | if (asterocktype[i]<8) { //big or medium rock -> split |
Pokitto | 4:46e28b959b54 | 496 | asterockx[asterocksonscreen]=asterockx[i]+16; |
Pokitto | 4:46e28b959b54 | 497 | asterocky[asterocksonscreen]=asterocky[i]+16; |
Pokitto | 4:46e28b959b54 | 498 | asterockx[i]=asterockx[i]+16; |
Pokitto | 4:46e28b959b54 | 499 | asterocky[i]=asterocky[i]+16; |
Pokitto | 4:46e28b959b54 | 500 | int a; |
Pokitto | 4:46e28b959b54 | 501 | a= 4+random(4)+4*(asterocktype[i]>=4); |
Pokitto | 4:46e28b959b54 | 502 | if (a>11) a=11; |
Pokitto | 4:46e28b959b54 | 503 | asterocktype[asterocksonscreen]=a; |
Pokitto | 4:46e28b959b54 | 504 | a= 3+random(4)+4*(asterocktype[i]>=4); |
Pokitto | 4:46e28b959b54 | 505 | if (a>11) a=11; |
Pokitto | 4:46e28b959b54 | 506 | asterocktype[i]=a; |
Pokitto | 4:46e28b959b54 | 507 | asterockxspeed[asterocksonscreen]=rockxadd[random(12)]/4+8; |
Pokitto | 4:46e28b959b54 | 508 | asterockyspeed[asterocksonscreen]=rockyadd[random(12)]/4+8; |
Pokitto | 4:46e28b959b54 | 509 | asterockxspeed[i]=rockxadd[random(12)]/2+8; |
Pokitto | 4:46e28b959b54 | 510 | asterockyspeed[i]=rockyadd[random(12)]/2+8; |
Pokitto | 4:46e28b959b54 | 511 | if (asterockxspeed[i]==asterockxspeed[asterocksonscreen] and asterockyspeed[i]==asterockyspeed[asterocksonscreen]) { |
Pokitto | 4:46e28b959b54 | 512 | asterockxspeed[i]=-asterockxspeed[i]; |
Pokitto | 4:46e28b959b54 | 513 | asterockyspeed[i]=-asterockyspeed[i]; |
Pokitto | 4:46e28b959b54 | 514 | } |
Pokitto | 4:46e28b959b54 | 515 | if (asterocktype[asterocksonscreen]>7 or random(2)==1) { |
Pokitto | 4:46e28b959b54 | 516 | asterockxspeed[asterocksonscreen]=rockxadd[random(12)]/2+8; |
Pokitto | 4:46e28b959b54 | 517 | asterockyspeed[asterocksonscreen]=rockyadd[random(12)]/2+8; |
Pokitto | 4:46e28b959b54 | 518 | } |
Pokitto | 4:46e28b959b54 | 519 | if (asterocktype[i]>7 or random(2)==1) { |
Pokitto | 4:46e28b959b54 | 520 | asterockxspeed[i]=rockxadd[random(12)]/2+8; |
Pokitto | 4:46e28b959b54 | 521 | asterockyspeed[i]=rockyadd[random(12)]/2+8; |
Pokitto | 4:46e28b959b54 | 522 | } |
Pokitto | 4:46e28b959b54 | 523 | asterocksonscreen=asterocksonscreen+(asterocksonscreen<32); |
Pokitto | 4:46e28b959b54 | 524 | } else { // small rock -> remove |
Pokitto | 4:46e28b959b54 | 525 | asterocksonscreen--; |
Pokitto | 4:46e28b959b54 | 526 | asterockx[i]=asterockx[asterocksonscreen]; |
Pokitto | 4:46e28b959b54 | 527 | asterocky[i]=asterocky[asterocksonscreen]; |
Pokitto | 4:46e28b959b54 | 528 | asterocktype[i]=asterocktype[asterocksonscreen]; |
Pokitto | 4:46e28b959b54 | 529 | asterockxspeed[i]=asterockxspeed[asterocksonscreen]; |
Pokitto | 4:46e28b959b54 | 530 | asterockyspeed[i]=asterockyspeed[asterocksonscreen]; |
Pokitto | 4:46e28b959b54 | 531 | if (asterocksonscreen==0) { // all rocks removed? |
Pokitto | 4:46e28b959b54 | 532 | yeahtimer=60; |
Pokitto | 4:46e28b959b54 | 533 | } |
Pokitto | 4:46e28b959b54 | 534 | } |
Pokitto | 4:46e28b959b54 | 535 | } |
Pokitto | 4:46e28b959b54 | 536 | |
Pokitto | 4:46e28b959b54 | 537 | // check if playership can appear (no rock in inside square) |
Pokitto | 4:46e28b959b54 | 538 | if ((asterockx[i]+right > 184 and asterockx[i]+left < 488) and (asterocky[i]+right > 72 and asterocky[i]+left < 312)) { |
Pokitto | 4:46e28b959b54 | 539 | playershipappear=0; |
Pokitto | 4:46e28b959b54 | 540 | } |
Pokitto | 4:46e28b959b54 | 541 | i=++i; // next asterock |
Pokitto | 4:46e28b959b54 | 542 | } // end of rock handling |
Pokitto | 4:46e28b959b54 | 543 | } |
Pokitto | 4:46e28b959b54 | 544 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 545 | void ufoappears() { |
Pokitto | 4:46e28b959b54 | 546 | if (asterocksonscreen<8 and score>500 and ufotype==0 and random(250)<2) { |
Pokitto | 4:46e28b959b54 | 547 | ufotype=1+(random(4+gamelevel)>2); // which ufo? |
Pokitto | 4:46e28b959b54 | 548 | ufox=-56; |
Pokitto | 4:46e28b959b54 | 549 | ufoxr=3; |
Pokitto | 4:46e28b959b54 | 550 | if (random(2)==0) { |
Pokitto | 4:46e28b959b54 | 551 | ufox=672; |
Pokitto | 4:46e28b959b54 | 552 | ufoxr=-3; |
Pokitto | 4:46e28b959b54 | 553 | } |
Pokitto | 4:46e28b959b54 | 554 | ufoy=random(320)+32; |
Pokitto | 4:46e28b959b54 | 555 | ufoyr=(random(3)-1)*3; |
Pokitto | 4:46e28b959b54 | 556 | } |
Pokitto | 4:46e28b959b54 | 557 | } |
Pokitto | 4:46e28b959b54 | 558 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 559 | void moveufo() { |
Pokitto | 4:46e28b959b54 | 560 | if (ufotype != 0) { |
Pokitto | 4:46e28b959b54 | 561 | ufox=ufox+ufoxr; |
Pokitto | 4:46e28b959b54 | 562 | ufoy=ufoy+ufoyr; |
Pokitto | 4:46e28b959b54 | 563 | if (ufox % 5 == 0) { playsoundfx(4,3); } |
Pokitto | 4:46e28b959b54 | 564 | if (ufoy<-40) { ufoy=384; } |
Pokitto | 4:46e28b959b54 | 565 | if (ufoy>384) { ufoy=-40; } |
Pokitto | 4:46e28b959b54 | 566 | if (random(50)<2) { // change direction |
Pokitto | 4:46e28b959b54 | 567 | ufoyr=(random(3)-1)*3; |
Pokitto | 4:46e28b959b54 | 568 | } |
Pokitto | 4:46e28b959b54 | 569 | if (ufox<-56 or ufox>672) { ufotype=0; } |
Pokitto | 4:46e28b959b54 | 570 | gb.display.drawBitmap(ufox/8,ufoy/8,ufo[ufotype-1]); |
Pokitto | 4:46e28b959b54 | 571 | // check collission playership & ufo |
Pokitto | 4:46e28b959b54 | 572 | if ((ufox < playershipx+40) and (ufox+32+16*(ufotype==1) > playershipx+8) and (ufoy < playershipy+40) and (ufoy+16+16*(ufotype==1) > playershipy+8) and ufotype != 0 and playershipvisible==1 and deadtimer==-1) { |
Pokitto | 4:46e28b959b54 | 573 | ufotype=0; |
Pokitto | 4:46e28b959b54 | 574 | deadtimer=40; |
Pokitto | 4:46e28b959b54 | 575 | playsoundfx(1,2); |
Pokitto | 4:46e28b959b54 | 576 | } |
Pokitto | 4:46e28b959b54 | 577 | } |
Pokitto | 4:46e28b959b54 | 578 | } |
Pokitto | 4:46e28b959b54 | 579 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 580 | void playershotufocollission() { |
Pokitto | 4:46e28b959b54 | 581 | u=0; |
Pokitto | 4:46e28b959b54 | 582 | while (u<playershots) { |
Pokitto | 4:46e28b959b54 | 583 | if ((playershotx[u] < ufox+32+16*(ufotype==1)) and (playershotx[u]+16 > ufox) and (playershoty[u] < ufoy+16+16*(ufotype==1)) and (playershoty[u]+16 > ufoy) and playershotcounter[u]<50 and ufotype != 0) { |
Pokitto | 4:46e28b959b54 | 584 | playsoundfx(3,0); |
Pokitto | 4:46e28b959b54 | 585 | score=score+200+800*(ufotype==2); |
Pokitto | 4:46e28b959b54 | 586 | ufotype=0; |
Pokitto | 4:46e28b959b54 | 587 | playershotcounter[u]=50; |
Pokitto | 4:46e28b959b54 | 588 | } |
Pokitto | 4:46e28b959b54 | 589 | u=++u; |
Pokitto | 4:46e28b959b54 | 590 | } |
Pokitto | 4:46e28b959b54 | 591 | } |
Pokitto | 4:46e28b959b54 | 592 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 593 | void ufoshotrelease() { |
Pokitto | 4:46e28b959b54 | 594 | if (ufotype != 0 and ufoshotx == -1 and ufox>40 and ufox<608) { |
Pokitto | 4:46e28b959b54 | 595 | playsoundfx(9,0); |
Pokitto | 4:46e28b959b54 | 596 | ufoshotx=ufox+24; |
Pokitto | 4:46e28b959b54 | 597 | ufoshoty=ufoy+16; |
Pokitto | 4:46e28b959b54 | 598 | ufoshotxr=(random(3)-1)*8; |
Pokitto | 4:46e28b959b54 | 599 | ufoshotyr=(random(3)-1)*8; |
Pokitto | 4:46e28b959b54 | 600 | if (ufotype == 2) { |
Pokitto | 4:46e28b959b54 | 601 | ufoshotxr=-8+16*(ufox<playershipx); |
Pokitto | 4:46e28b959b54 | 602 | ufoshotyr=-8+16*(ufoy<playershipy); |
Pokitto | 4:46e28b959b54 | 603 | } |
Pokitto | 4:46e28b959b54 | 604 | if (ufoshotxr==0 and ufoshotyr==0) { ufoshotxr=8; } |
Pokitto | 4:46e28b959b54 | 605 | } |
Pokitto | 4:46e28b959b54 | 606 | } |
Pokitto | 4:46e28b959b54 | 607 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 608 | void moveufoshot() { |
Pokitto | 4:46e28b959b54 | 609 | if (ufoshotx != -1) { |
Pokitto | 4:46e28b959b54 | 610 | ufoshotx=ufoshotx+ufoshotxr; |
Pokitto | 4:46e28b959b54 | 611 | ufoshoty=ufoshoty+ufoshotyr; |
Pokitto | 4:46e28b959b54 | 612 | gb.display.drawBitmap(ufoshotx/8,ufoshoty/8,bullet); |
Pokitto | 4:46e28b959b54 | 613 | if (ufoshotx<0 or ufoshotx>MAXX or ufoshoty<0 or ufoshoty>MAXY) { |
Pokitto | 4:46e28b959b54 | 614 | ufoshotx=-1; |
Pokitto | 4:46e28b959b54 | 615 | } |
Pokitto | 4:46e28b959b54 | 616 | // check collission ufoshot & player |
Pokitto | 4:46e28b959b54 | 617 | if ((ufoshotx < playershipx+40) and (ufoshotx+16 > playershipx+8) and (ufoshoty < playershipy+40) and (ufoshoty+16 > playershipy+8) and ufoshotx>-1 and playershipvisible==1 and deadtimer==-1) { |
Pokitto | 4:46e28b959b54 | 618 | ufoshotx=-1; |
Pokitto | 4:46e28b959b54 | 619 | deadtimer=40; |
Pokitto | 4:46e28b959b54 | 620 | playsoundfx(1,2); |
Pokitto | 4:46e28b959b54 | 621 | } |
Pokitto | 4:46e28b959b54 | 622 | } |
Pokitto | 4:46e28b959b54 | 623 | } |
Pokitto | 4:46e28b959b54 | 624 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 625 | void checkbonuslife() { |
Pokitto | 4:46e28b959b54 | 626 | if (score>=bonusscore) { |
Pokitto | 4:46e28b959b54 | 627 | playsoundfx(5,3); |
Pokitto | 4:46e28b959b54 | 628 | lives=++lives; |
Pokitto | 4:46e28b959b54 | 629 | bonusscore=bonusscore+10000; |
Pokitto | 4:46e28b959b54 | 630 | } |
Pokitto | 4:46e28b959b54 | 631 | } |
Pokitto | 4:46e28b959b54 | 632 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 633 | void backgroundsound() { |
Pokitto | 4:46e28b959b54 | 634 | soundcounter++; |
Pokitto | 4:46e28b959b54 | 635 | if (soundcounter>soundspeed) { |
Pokitto | 4:46e28b959b54 | 636 | soundcounter=0; |
Pokitto | 4:46e28b959b54 | 637 | soundvalue=++soundvalue % 2; |
Pokitto | 4:46e28b959b54 | 638 | playsoundfx(soundvalue+6,1); |
Pokitto | 4:46e28b959b54 | 639 | } |
Pokitto | 4:46e28b959b54 | 640 | } |
Pokitto | 4:46e28b959b54 | 641 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 642 | void showgameover() { |
Pokitto | 4:46e28b959b54 | 643 | gb.display.setColor(0); |
Pokitto | 4:46e28b959b54 | 644 | gb.display.fillRect(22,16,39,9); |
Pokitto | 4:46e28b959b54 | 645 | gb.display.setColor(1); |
Pokitto | 4:46e28b959b54 | 646 | gb.display.cursorX=24; |
Pokitto | 4:46e28b959b54 | 647 | gb.display.cursorY=18; |
Pokitto | 4:46e28b959b54 | 648 | gb.display.print("GAME OVER"); |
Pokitto | 4:46e28b959b54 | 649 | gb.display.drawRect(22,16,39,9); |
Pokitto | 4:46e28b959b54 | 650 | gb.display.cursorX=4; |
Pokitto | 4:46e28b959b54 | 651 | gb.display.cursorY=42; |
Pokitto | 4:46e28b959b54 | 652 | gb.display.print("PRESS B TO CONTINUE"); |
Pokitto | 4:46e28b959b54 | 653 | if (gb.buttons.pressed(BTN_B)) { |
Pokitto | 4:46e28b959b54 | 654 | gamestatus="title"; |
Pokitto | 4:46e28b959b54 | 655 | gb.sound.playOK(); |
Pokitto | 4:46e28b959b54 | 656 | } |
Pokitto | 4:46e28b959b54 | 657 | } |
Pokitto | 4:46e28b959b54 | 658 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 659 | void showtitle() { |
Pokitto | 4:46e28b959b54 | 660 | if (score > highscore) { highscore = score; } |
Pokitto | 4:46e28b959b54 | 661 | gb.display.cursorX=0; |
Pokitto | 4:46e28b959b54 | 662 | gb.display.cursorY=0; |
Pokitto | 4:46e28b959b54 | 663 | gb.display.print(" LAST HIGH"); |
Pokitto | 4:46e28b959b54 | 664 | gb.display.cursorX=14-2*(score>9)-2*(score>99)-2*(score>999); |
Pokitto | 4:46e28b959b54 | 665 | gb.display.cursorY=6; |
Pokitto | 4:46e28b959b54 | 666 | gb.display.print(score); |
Pokitto | 4:46e28b959b54 | 667 | gb.display.cursorX=66-2*(highscore>9)-2*(highscore>99)-2*(highscore>999); |
Pokitto | 4:46e28b959b54 | 668 | gb.display.cursorY=6; |
Pokitto | 4:46e28b959b54 | 669 | gb.display.print(highscore); |
Pokitto | 4:46e28b959b54 | 670 | gb.display.drawBitmap(10,13,gamelogo); |
Pokitto | 4:46e28b959b54 | 671 | gb.display.cursorX=0; |
Pokitto | 4:46e28b959b54 | 672 | gb.display.cursorY=42; |
Pokitto | 4:46e28b959b54 | 673 | gb.display.print(" A: PLAY "); |
Pokitto | 4:46e28b959b54 | 674 | if (gb.buttons.pressed(BTN_A)) { |
Pokitto | 4:46e28b959b54 | 675 | gamestatus="newgame"; |
Pokitto | 4:46e28b959b54 | 676 | gb.sound.playOK(); |
Pokitto | 4:46e28b959b54 | 677 | } |
Pokitto | 4:46e28b959b54 | 678 | if (gb.buttons.pressed(BTN_C)) { |
Pokitto | 4:46e28b959b54 | 679 | //gb.jumpToLoader(); |
Pokitto | 4:46e28b959b54 | 680 | //gb.titleScreen(F("Yoda's"),gamelogo); |
Pokitto | 4:46e28b959b54 | 681 | } |
Pokitto | 4:46e28b959b54 | 682 | } |
Pokitto | 4:46e28b959b54 | 683 | //---------------------------------------------------------------------------- |
Pokitto | 4:46e28b959b54 | 684 | void playsoundfx(int fxno, int channel) { |
Pokitto | 4:46e28b959b54 | 685 | gb.sound.command(0,soundfx[fxno][6],0,channel); // set volume |
Pokitto | 4:46e28b959b54 | 686 | gb.sound.command(1,soundfx[fxno][0],0,channel); // set waveform |
Pokitto | 4:46e28b959b54 | 687 | gb.sound.command(2,soundfx[fxno][5],-soundfx[fxno][4],channel); // set volume slide |
Pokitto | 4:46e28b959b54 | 688 | gb.sound.command(3,soundfx[fxno][3],soundfx[fxno][2]-58,channel); // set pitch slide |
Pokitto | 4:46e28b959b54 | 689 | gb.sound.playNote(soundfx[fxno][1],soundfx[fxno][7],channel); // play note |
Pokitto | 4:46e28b959b54 | 690 | } |
Pokitto | 4:46e28b959b54 | 691 |