Asterocks by Yoda. Ported from Gamebuino to Pokito by Jonne using automated parser.

Dependencies:   PokittoLib

Fork of HelloWorld by Pokitto Community Team

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?

UserRevisionLine numberNew 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