Puzzle game

Dependencies:   PokittoLib mbed-src

Committer:
spinal
Date:
Wed Oct 18 14:48:38 2017 +0000
Revision:
2:ab85f5ea1be6
Parent:
0:3c929189abce
trying to compile online

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spinal 0:3c929189abce 1
spinal 0:3c929189abce 2 #include "Pokitto.h"
spinal 0:3c929189abce 3 #include "sens_levs.h"
spinal 0:3c929189abce 4 #include "gfx.h"
spinal 0:3c929189abce 5
spinal 0:3c929189abce 6 Pokitto::Core game;
spinal 0:3c929189abce 7
spinal 0:3c929189abce 8 #define OFF_X 2
spinal 0:3c929189abce 9 #define OFF_Y 42
spinal 0:3c929189abce 10 #define LEVWIDTH 18
spinal 0:3c929189abce 11 #define LEVHEIGHT 11
spinal 0:3c929189abce 12 #define SCROLLHEIGHT 112
spinal 0:3c929189abce 13 #define RUMBLEFRAMES 15
spinal 0:3c929189abce 14 #define STEPSIZE 1
spinal 0:3c929189abce 15 #define EXPLODESPRITES 15
spinal 0:3c929189abce 16 #define EXPLODESPEED 5
spinal 0:3c929189abce 17
spinal 0:3c929189abce 18 byte oldLev[LEVWIDTH * LEVHEIGHT];
spinal 0:3c929189abce 19 byte curLev[LEVWIDTH * LEVHEIGHT];
spinal 0:3c929189abce 20 byte teleportMap[LEVWIDTH * LEVHEIGHT];
spinal 0:3c929189abce 21 byte telArray[32];
spinal 0:3c929189abce 22 char satTime = 0;
spinal 0:3c929189abce 23 int numTiles;
spinal 0:3c929189abce 24 int px,py,ps,pd;
spinal 0:3c929189abce 25 int levelNum=0;
spinal 0:3c929189abce 26 int maxLevels=sizeof(levels)/102;
spinal 0:3c929189abce 27 int tileSize=12;
spinal 0:3c929189abce 28 uint32_t frameNumber=0;
spinal 0:3c929189abce 29 int score=0;
spinal 0:3c929189abce 30 int hiscore=0;
spinal 0:3c929189abce 31 bool stillExploding=0;
spinal 0:3c929189abce 32 int telNum = 0;
spinal 0:3c929189abce 33 byte gameMode;
spinal 0:3c929189abce 34 unsigned int myInt=0;
spinal 0:3c929189abce 35 byte scroller=0;
spinal 0:3c929189abce 36 char musicName[] = "sensitiv.raw";
spinal 0:3c929189abce 37 int lives;
spinal 0:3c929189abce 38
spinal 0:3c929189abce 39 uint32_t myDelay;
spinal 0:3c929189abce 40 uint32_t tempTime;
spinal 0:3c929189abce 41
spinal 0:3c929189abce 42 // explosion
spinal 0:3c929189abce 43 uint8_t expX[EXPLODESPRITES], expY[EXPLODESPRITES], expF[EXPLODESPRITES], expU[EXPLODESPRITES];
spinal 0:3c929189abce 44 uint8_t explode = 0;
spinal 0:3c929189abce 45
spinal 0:3c929189abce 46 void rumbleOn(){
spinal 0:3c929189abce 47 DigitalOut outPin(P0_13);
spinal 0:3c929189abce 48 DigitalOut inPin(P0_11);
spinal 0:3c929189abce 49 inPin=0;
spinal 0:3c929189abce 50 outPin=1;
spinal 0:3c929189abce 51 }
spinal 0:3c929189abce 52 void rumbleOff(){
spinal 0:3c929189abce 53 DigitalOut outPin(P0_13);
spinal 0:3c929189abce 54 DigitalOut inPin(P0_11);
spinal 0:3c929189abce 55 inPin=0;
spinal 0:3c929189abce 56 outPin=0;
spinal 0:3c929189abce 57 }
spinal 0:3c929189abce 58
spinal 0:3c929189abce 59 /**************************************************************************/
spinal 0:3c929189abce 60 #define HELD 0
spinal 0:3c929189abce 61 #define NEW 1
spinal 0:3c929189abce 62 #define RELEASE 2
spinal 0:3c929189abce 63 byte CompletePad, ExPad, TempPad, myPad;
spinal 0:3c929189abce 64 bool _A[3], _B[3], _C[3], _Up[3], _Down[3], _Left[3], _Right[3];
spinal 0:3c929189abce 65
spinal 0:3c929189abce 66 DigitalIn _aPin(P1_9);
spinal 0:3c929189abce 67 DigitalIn _bPin(P1_4);
spinal 0:3c929189abce 68 DigitalIn _cPin(P1_10);
spinal 0:3c929189abce 69 DigitalIn _upPin(P1_13);
spinal 0:3c929189abce 70 DigitalIn _downPin(P1_3);
spinal 0:3c929189abce 71 DigitalIn _leftPin(P1_25);
spinal 0:3c929189abce 72 DigitalIn _rightPin(P1_7);
spinal 0:3c929189abce 73
spinal 0:3c929189abce 74 void UPDATEPAD(int pad, int var) {
spinal 0:3c929189abce 75 _C[pad] = (var >> 1)&1;
spinal 0:3c929189abce 76 _B[pad] = (var >> 2)&1;
spinal 0:3c929189abce 77 _A[pad] = (var >> 3)&1;
spinal 0:3c929189abce 78 _Down[pad] = (var >> 4)&1;
spinal 0:3c929189abce 79 _Left[pad] = (var >> 5)&1;
spinal 0:3c929189abce 80 _Right[pad] = (var >> 6)&1;
spinal 0:3c929189abce 81 _Up[pad] = (var >> 7)&1;
spinal 0:3c929189abce 82 }
spinal 0:3c929189abce 83
spinal 0:3c929189abce 84 void UpdatePad(int joy_code){
spinal 0:3c929189abce 85 ExPad = CompletePad;
spinal 0:3c929189abce 86 CompletePad = joy_code;
spinal 0:3c929189abce 87 UPDATEPAD(HELD, CompletePad); // held
spinal 0:3c929189abce 88 UPDATEPAD(RELEASE, (ExPad & (~CompletePad))); // released
spinal 0:3c929189abce 89 UPDATEPAD(NEW, (CompletePad & (~ExPad))); // newpress
spinal 0:3c929189abce 90 }
spinal 0:3c929189abce 91
spinal 0:3c929189abce 92 byte updateButtons(byte var){
spinal 0:3c929189abce 93 var = 0;
spinal 0:3c929189abce 94 if (_cPin) var |= (1<<1);
spinal 0:3c929189abce 95 if (_bPin) var |= (1<<2);
spinal 0:3c929189abce 96 if (_aPin) var |= (1<<3); // P1_9 = A
spinal 0:3c929189abce 97 if (_downPin) var |= (1<<4);
spinal 0:3c929189abce 98 if (_leftPin) var |= (1<<5);
spinal 0:3c929189abce 99 if (_rightPin) var |= (1<<6);
spinal 0:3c929189abce 100 if (_upPin) var |= (1<<7);
spinal 0:3c929189abce 101
spinal 0:3c929189abce 102 return var;
spinal 0:3c929189abce 103 }
spinal 0:3c929189abce 104
spinal 0:3c929189abce 105 /**************************************************************************/
spinal 0:3c929189abce 106
spinal 0:3c929189abce 107 void new2BitTile(int x1, int y1, int wide, int high, int tile, const uint16_t *gfx, int palNumber){
spinal 0:3c929189abce 108
spinal 0:3c929189abce 109 uint16_t tileBuffer[wide*high];
spinal 0:3c929189abce 110
spinal 0:3c929189abce 111 uint8_t pix;
spinal 0:3c929189abce 112 uint8_t quartWide=wide/4;
spinal 0:3c929189abce 113 uint8_t pic;
spinal 0:3c929189abce 114
spinal 0:3c929189abce 115 int palNo = palLookup[palNumber]*4;
spinal 0:3c929189abce 116 for(int y=0; y<high; y++){
spinal 0:3c929189abce 117 for(int x=0; x<quartWide; x++){
spinal 0:3c929189abce 118 pic = gfx[(tile*quartWide*high)+(x+quartWide*y)];
spinal 0:3c929189abce 119 pix = (pic >> 6)&3; tileBuffer[y+high*( x*4)]=_pal[_miniPal[palNo+pix]];
spinal 0:3c929189abce 120 pix = (pic >> 4)&3; tileBuffer[y+high*(1+x*4)]=_pal[_miniPal[palNo+pix]];
spinal 0:3c929189abce 121 pix = (pic >> 2)&3; tileBuffer[y+high*(2+x*4)]=_pal[_miniPal[palNo+pix]];
spinal 0:3c929189abce 122 pix = pic &3; tileBuffer[y+high*(3+x*4)]=_pal[_miniPal[palNo+pix]];
spinal 0:3c929189abce 123 }
spinal 0:3c929189abce 124 }
spinal 0:3c929189abce 125
spinal 0:3c929189abce 126 game.display.directTile(x1, y1, x1+wide, y1+high, tileBuffer);
spinal 0:3c929189abce 127 }
spinal 0:3c929189abce 128
spinal 0:3c929189abce 129 void new4BitTile(int x1, int y1, int wide, int high, int tile, int transparentColor, const uint8_t *gfx){
spinal 0:3c929189abce 130 uint16_t tileBuffer[wide*high];
spinal 0:3c929189abce 131 int pix1,pix2;
spinal 0:3c929189abce 132 int halfWide=wide/2;
spinal 0:3c929189abce 133 for(int y=0; y<high; y++){
spinal 0:3c929189abce 134 for(int x=0; x<halfWide; x++){
spinal 0:3c929189abce 135 pix1 = gfx[(tile*halfWide*high)+(x+halfWide*y)]>>4;
spinal 0:3c929189abce 136 pix2 = gfx[(tile*halfWide*high)+(x+halfWide*y)]&15;
spinal 0:3c929189abce 137 tileBuffer[y+high*( x*2)]=_pal[pix1];
spinal 0:3c929189abce 138 tileBuffer[y+high*(1+x*2)]=_pal[pix2];
spinal 0:3c929189abce 139 }
spinal 0:3c929189abce 140 }
spinal 0:3c929189abce 141 game.display.directTile(x1, y1, x1+wide, y1+high, tileBuffer);
spinal 0:3c929189abce 142 }
spinal 0:3c929189abce 143
spinal 0:3c929189abce 144
spinal 0:3c929189abce 145 /**************************************************************************/
spinal 0:3c929189abce 146 /**************************************************************************/
spinal 0:3c929189abce 147
spinal 0:3c929189abce 148
spinal 0:3c929189abce 149 int RandMinMax(int min, int max){
spinal 0:3c929189abce 150 return rand() % max + min;
spinal 0:3c929189abce 151 }
spinal 0:3c929189abce 152
spinal 0:3c929189abce 153 void refreshDisplay(){
spinal 0:3c929189abce 154 // place holder to replace a simulator command.
spinal 0:3c929189abce 155 }
spinal 0:3c929189abce 156
spinal 0:3c929189abce 157 void draw4BitTile(int x1, int y1, int wide, int high, int tile, int transparentColor, const uint8_t *gfx){
spinal 0:3c929189abce 158 int pix1,pix2;
spinal 0:3c929189abce 159 int halfWide=wide/2;
spinal 0:3c929189abce 160 for(int y=0; y<high; y++){
spinal 0:3c929189abce 161 for(int x=0; x<halfWide; x++){
spinal 0:3c929189abce 162 pix1 = gfx[(tile*halfWide*high)+(x+halfWide*y)]>>4;
spinal 0:3c929189abce 163 pix2 = gfx[(tile*halfWide*high)+(x+halfWide*y)]&15;
spinal 0:3c929189abce 164 if(pix1 != transparentColor){game.display.directPixel(x1+(x*2),y1+y,_pal[pix1]);}
spinal 0:3c929189abce 165 if(pix2 != transparentColor){game.display.directPixel(1+x1+(x*2),y1+y,_pal[pix2]);}
spinal 0:3c929189abce 166 }
spinal 0:3c929189abce 167 }
spinal 0:3c929189abce 168 }
spinal 0:3c929189abce 169
spinal 0:3c929189abce 170 void draw2BitTile(int x1, int y1, int wide, int high, int tile, int transparentColor, const uint8_t *gfx, int palNumber, int palReplace = -1){
spinal 0:3c929189abce 171 uint8_t pix;
spinal 0:3c929189abce 172 uint8_t quartWide=wide/4;
spinal 0:3c929189abce 173 uint8_t pic;
spinal 0:3c929189abce 174
spinal 0:3c929189abce 175 int palNo = palLookup[palNumber]*4;
spinal 0:3c929189abce 176 for(int y=0; y<high; y++){
spinal 0:3c929189abce 177 for(int x=0; x<quartWide; x++){
spinal 0:3c929189abce 178 pic = gfx[(tile*quartWide*high)+(x+quartWide*y)];
spinal 0:3c929189abce 179 pix = (pic >> 6)&3; if(pix != transparentColor){game.display.directPixel( x1+(x*4),y1+y,_pal[_miniPal[palNo+pix]]);}
spinal 0:3c929189abce 180 pix = (pic >> 4)&3; if(pix != transparentColor){game.display.directPixel(1+x1+(x*4),y1+y,_pal[_miniPal[palNo+pix]]);}
spinal 0:3c929189abce 181 pix = (pic >> 2)&3; if(pix != transparentColor){game.display.directPixel(2+x1+(x*4),y1+y,_pal[_miniPal[palNo+pix]]);}
spinal 0:3c929189abce 182 pix = pic &3; if(pix != transparentColor){game.display.directPixel(3+x1+(x*4),y1+y,_pal[_miniPal[palNo+pix]]);}
spinal 0:3c929189abce 183 }
spinal 0:3c929189abce 184 }
spinal 0:3c929189abce 185 }
spinal 0:3c929189abce 186
spinal 0:3c929189abce 187
spinal 0:3c929189abce 188 void drawFont(int x1, int y1, int wide, int high, int tile, int transparentColor, const uint8_t *gfx, int palReplace = -1){
spinal 0:3c929189abce 189 uint16_t tileBuffer[(wide+1)*(high+1)];
spinal 0:3c929189abce 190
spinal 0:3c929189abce 191 uint8_t pix;
spinal 0:3c929189abce 192 uint8_t quartWide=wide/4;
spinal 0:3c929189abce 193 uint8_t pic;
spinal 0:3c929189abce 194
spinal 0:3c929189abce 195 for(int y=0; y<high; y++){
spinal 0:3c929189abce 196 for(int x=0; x<quartWide; x++){
spinal 0:3c929189abce 197 pic = gfx[(tile*quartWide*high)+(x+quartWide*y)];
spinal 0:3c929189abce 198 pix = (pic >> 6)&3; if(pix != transparentColor){tileBuffer[y+high*( x*4)]=numbers_pal[pix];}else{tileBuffer[y+high*( x*4)]=palReplace;}
spinal 0:3c929189abce 199 pix = (pic >> 4)&3; if(pix != transparentColor){tileBuffer[y+high*(1+x*4)]=numbers_pal[pix];}else{tileBuffer[y+high*(1+x*4)]=palReplace;}
spinal 0:3c929189abce 200 pix = (pic >> 2)&3; if(pix != transparentColor){tileBuffer[y+high*(2+x*4)]=numbers_pal[pix];}else{tileBuffer[y+high*(2+x*4)]=palReplace;}
spinal 0:3c929189abce 201 pix = pic &3; if(pix != transparentColor){tileBuffer[y+high*(3+x*4)]=numbers_pal[pix];}else{tileBuffer[y+high*(3+x*4)]=palReplace;}
spinal 0:3c929189abce 202 }
spinal 0:3c929189abce 203 }
spinal 0:3c929189abce 204
spinal 0:3c929189abce 205 game.display.directTile(x1, y1, x1+wide, y1+high, tileBuffer);
spinal 0:3c929189abce 206
spinal 0:3c929189abce 207 }
spinal 0:3c929189abce 208
spinal 0:3c929189abce 209 // print text
spinal 0:3c929189abce 210 void print(uint16_t x, uint16_t y, const char* text, uint8_t bgCol, signed int repCol=-1){
spinal 0:3c929189abce 211 if(repCol==-1)repCol=bgCol;
spinal 0:3c929189abce 212 for(uint8_t t = 0; t < strlen(text); t++){
spinal 0:3c929189abce 213 uint8_t character = text[t]-32;
spinal 0:3c929189abce 214 drawFont(x, y, 8, 8, character, bgCol, myFont, repCol);
spinal 0:3c929189abce 215 x += 8;
spinal 0:3c929189abce 216 }
spinal 0:3c929189abce 217 }
spinal 0:3c929189abce 218
spinal 0:3c929189abce 219
spinal 0:3c929189abce 220
spinal 0:3c929189abce 221 void loadLevel(int number) {
spinal 0:3c929189abce 222 /*
spinal 0:3c929189abce 223 // store level number in file for testing
spinal 0:3c929189abce 224 FILE *fp;
spinal 0:3c929189abce 225 fp = fopen("test.txt", "w+");
spinal 0:3c929189abce 226 fwrite(&number, sizeof(int),1, fp);
spinal 0:3c929189abce 227 fclose(fp);
spinal 0:3c929189abce 228 */
spinal 0:3c929189abce 229
spinal 0:3c929189abce 230 numTiles = 0;
spinal 0:3c929189abce 231 satTime = 0;
spinal 0:3c929189abce 232 int numTels = 0;
spinal 0:3c929189abce 233
spinal 0:3c929189abce 234 int amount = (LEVWIDTH/2)*LEVHEIGHT;
spinal 0:3c929189abce 235
spinal 0:3c929189abce 236 for (int t = amount-1; t >= 0; t--) {
spinal 0:3c929189abce 237 int s = pgm_read_byte(levels + t + ((amount+3) * number));
spinal 0:3c929189abce 238 curLev[t * 2] = pgm_read_byte(lookUpTile + (s >> 4));
spinal 0:3c929189abce 239 curLev[(t * 2) + 1] = pgm_read_byte(lookUpTile + (s & 15));
spinal 0:3c929189abce 240 s = t * 2;
spinal 0:3c929189abce 241 teleportMap[s] = 0;
spinal 0:3c929189abce 242 teleportMap[s+1] = 0;
spinal 0:3c929189abce 243
spinal 0:3c929189abce 244 switch (curLev[s]) {
spinal 0:3c929189abce 245 case 1:
spinal 0:3c929189abce 246 numTiles++;
spinal 0:3c929189abce 247 break;
spinal 0:3c929189abce 248 case 2:
spinal 0:3c929189abce 249 numTiles += 2;
spinal 0:3c929189abce 250 break;
spinal 0:3c929189abce 251 case 4:
spinal 0:3c929189abce 252 curLev[s + 1] = 5;
spinal 0:3c929189abce 253 curLev[s + LEVWIDTH] = 6;
spinal 0:3c929189abce 254 curLev[s + LEVWIDTH+1] = 7;
spinal 0:3c929189abce 255 break;
spinal 0:3c929189abce 256 case 8:
spinal 0:3c929189abce 257 curLev[s + 1] = 9;
spinal 0:3c929189abce 258 break;
spinal 0:3c929189abce 259 case 10:
spinal 0:3c929189abce 260 curLev[s + 1] = 11;
spinal 0:3c929189abce 261 break;
spinal 0:3c929189abce 262 case 12:
spinal 0:3c929189abce 263 curLev[s + LEVWIDTH] = 13;
spinal 0:3c929189abce 264 break;
spinal 0:3c929189abce 265 }
spinal 0:3c929189abce 266
spinal 0:3c929189abce 267 s = (t * 2) + 1;
spinal 0:3c929189abce 268 switch (curLev[s]) {
spinal 0:3c929189abce 269 case 1:
spinal 0:3c929189abce 270 numTiles++;
spinal 0:3c929189abce 271 break;
spinal 0:3c929189abce 272 case 2:
spinal 0:3c929189abce 273 numTiles += 2;
spinal 0:3c929189abce 274 break;
spinal 0:3c929189abce 275 case 4:
spinal 0:3c929189abce 276 curLev[s + 1] = 5;
spinal 0:3c929189abce 277 curLev[s + LEVWIDTH] = 6;
spinal 0:3c929189abce 278 curLev[s + LEVWIDTH+1] = 7;
spinal 0:3c929189abce 279 break;
spinal 0:3c929189abce 280 case 8:
spinal 0:3c929189abce 281 curLev[s + 1] = 9;
spinal 0:3c929189abce 282 break;
spinal 0:3c929189abce 283 case 10:
spinal 0:3c929189abce 284 curLev[s + 1] = 11;
spinal 0:3c929189abce 285 break;
spinal 0:3c929189abce 286 case 12:
spinal 0:3c929189abce 287 curLev[s + LEVWIDTH] = 13;
spinal 0:3c929189abce 288 break;
spinal 0:3c929189abce 289 }
spinal 0:3c929189abce 290
spinal 0:3c929189abce 291 }
spinal 0:3c929189abce 292
spinal 0:3c929189abce 293
spinal 0:3c929189abce 294 px = pgm_read_byte(levels + amount + ((amount+3) * number))*tileSize;
spinal 0:3c929189abce 295 py = pgm_read_byte(levels + amount+1 + ((amount+3) * number))*tileSize;
spinal 0:3c929189abce 296 int telNumber = pgm_read_byte(levels + amount+2 + ((amount+3) * number));
spinal 0:3c929189abce 297 ps = 0; pd = 0;
spinal 0:3c929189abce 298 satTime = 0;
spinal 0:3c929189abce 299
spinal 0:3c929189abce 300 for(int t=0; t<31; t++){
spinal 0:3c929189abce 301 telArray[t] = pgm_read_byte(telPath + t + (telNumber*32));
spinal 0:3c929189abce 302 }
spinal 0:3c929189abce 303
spinal 0:3c929189abce 304 // teleport locations
spinal 0:3c929189abce 305 numTels=0;
spinal 0:3c929189abce 306 for (int y = 0; y <LEVHEIGHT; y++) {
spinal 0:3c929189abce 307 for (int x = 0; x <LEVWIDTH ; x++) {
spinal 0:3c929189abce 308 int tn = (y * LEVWIDTH) + x;
spinal 0:3c929189abce 309 if(curLev[tn]==16){
spinal 0:3c929189abce 310 teleportMap[tn] = numTels;
spinal 0:3c929189abce 311 numTels++;
spinal 0:3c929189abce 312 }
spinal 0:3c929189abce 313 }
spinal 0:3c929189abce 314 }
spinal 0:3c929189abce 315
spinal 0:3c929189abce 316
spinal 0:3c929189abce 317 // draw part of the screen here
spinal 0:3c929189abce 318 // bad practice I know, but so what!
spinal 0:3c929189abce 319
spinal 0:3c929189abce 320 for(byte t=0; t<LEVWIDTH * LEVHEIGHT; t++){
spinal 0:3c929189abce 321 oldLev[t] = 255;
spinal 0:3c929189abce 322 }
spinal 0:3c929189abce 323
spinal 0:3c929189abce 324 for (int x = LEVWIDTH-1; x >= 0 ; x--) {
spinal 0:3c929189abce 325 new2BitTile(OFF_X+x*tileSize, 42, tileSize, tileSize, 0, gbTiles, 0);
spinal 0:3c929189abce 326 }
spinal 0:3c929189abce 327
spinal 0:3c929189abce 328 game.display.directRectangle(OFF_X,0,218,40,_pal[10]);
spinal 0:3c929189abce 329 game.display.directRectangle(OFF_X,0,218,0,_pal[4]);
spinal 0:3c929189abce 330 game.display.directRectangle(OFF_X,1,218,1,_pal[10]);
spinal 0:3c929189abce 331 game.display.directRectangle(OFF_X,2,218,2,_pal[15]);
spinal 0:3c929189abce 332 game.display.directRectangle(OFF_X,3,218,3,_pal[15]);
spinal 0:3c929189abce 333 game.display.directRectangle(OFF_X,4,218,4,_pal[10]);
spinal 0:3c929189abce 334 game.display.directRectangle(OFF_X,5,218,5,_pal[4]);
spinal 0:3c929189abce 335 game.display.directRectangle(OFF_X,36,218,36,_pal[4]);
spinal 0:3c929189abce 336 game.display.directRectangle(OFF_X,37,218,37,_pal[10]);
spinal 0:3c929189abce 337 game.display.directRectangle(OFF_X,38,218,38,_pal[15]);
spinal 0:3c929189abce 338 game.display.directRectangle(OFF_X,39,218,39,_pal[15]);
spinal 0:3c929189abce 339 game.display.directRectangle(OFF_X,40,218,40,_pal[10]);
spinal 0:3c929189abce 340 game.display.directRectangle(OFF_X,41,218,41,_pal[4]);
spinal 0:3c929189abce 341
spinal 0:3c929189abce 342
spinal 0:3c929189abce 343 // pause if any buttons held
spinal 0:3c929189abce 344 while(_Up[HELD] || _Down[HELD] || _Left[HELD] || _Right[HELD] || _A[HELD] || _B[HELD] || _C[HELD]){
spinal 0:3c929189abce 345 myPad = updateButtons(myPad);
spinal 0:3c929189abce 346 UpdatePad(myPad);
spinal 0:3c929189abce 347 }
spinal 0:3c929189abce 348
spinal 0:3c929189abce 349
spinal 0:3c929189abce 350 }
spinal 0:3c929189abce 351
spinal 0:3c929189abce 352 void renderLevel(bool drawPlayer = 1, bool fullLevel=0){
spinal 0:3c929189abce 353
spinal 0:3c929189abce 354 signed int xStart=(px / tileSize)+4;
spinal 0:3c929189abce 355 signed int yStart=(py / tileSize)+4;
spinal 0:3c929189abce 356 signed int xEnd=(px / tileSize)-4;
spinal 0:3c929189abce 357 signed int yEnd=(py / tileSize)-4;
spinal 0:3c929189abce 358 if(xEnd<0){xStart+=-xEnd; xEnd=0;}
spinal 0:3c929189abce 359 if(yEnd<0){yStart+=-yEnd; yEnd=0;}
spinal 0:3c929189abce 360 if(xStart>LEVWIDTH-1){xStart=LEVWIDTH-1; xEnd=xStart-9;}
spinal 0:3c929189abce 361 if(yStart>LEVHEIGHT-1){yStart=LEVHEIGHT-1; yEnd=yStart-9;}
spinal 0:3c929189abce 362
spinal 0:3c929189abce 363 // if(fullLevel){
spinal 0:3c929189abce 364 xStart=LEVWIDTH-1;
spinal 0:3c929189abce 365 yStart=LEVHEIGHT-1;
spinal 0:3c929189abce 366 xEnd=0;
spinal 0:3c929189abce 367 yEnd=1;
spinal 0:3c929189abce 368 // }
spinal 0:3c929189abce 369
spinal 0:3c929189abce 370
spinal 0:3c929189abce 371 // oldLev[t] = curLev[t];
spinal 0:3c929189abce 372
spinal 0:3c929189abce 373
spinal 0:3c929189abce 374 // int transp=-1;
spinal 0:3c929189abce 375 for (int y = yStart; y >= yEnd; y--) {
spinal 0:3c929189abce 376 for (int x = xStart; x >= xEnd; x--) {
spinal 0:3c929189abce 377 int tn = (y * LEVWIDTH) + x;
spinal 0:3c929189abce 378 if(oldLev[tn] != curLev[tn]){
spinal 0:3c929189abce 379 oldLev[tn] = curLev[tn];
spinal 0:3c929189abce 380 if(curLev[tn]==0){
spinal 0:3c929189abce 381 // water tile with shaddow
spinal 0:3c929189abce 382 uint8_t tile = 0;
spinal 0:3c929189abce 383 if(y>0){
spinal 0:3c929189abce 384 if(curLev[((y-1) * LEVWIDTH) + (x)]){ tile += 1; }
spinal 0:3c929189abce 385 if(x>0){if(curLev[((y-1) * LEVWIDTH) + (x-1)]){ tile += 2; }}
spinal 0:3c929189abce 386 }
spinal 0:3c929189abce 387 if(x>0){if(curLev[((y) * LEVWIDTH) + (x-1)]){ tile += 4; }}
spinal 0:3c929189abce 388 new2BitTile(OFF_X+x*tileSize, OFF_Y+y*tileSize, tileSize, tileSize, shaddow[tile], gbTiles, shaddow[tile]);
spinal 0:3c929189abce 389 }else{
spinal 0:3c929189abce 390 // all other tiles
spinal 0:3c929189abce 391 new2BitTile(OFF_X+x*tileSize, OFF_Y+y*tileSize, tileSize, tileSize, curLev[tn], gbTiles, curLev[tn]);
spinal 0:3c929189abce 392 }
spinal 0:3c929189abce 393 }
spinal 0:3c929189abce 394 }
spinal 0:3c929189abce 395
spinal 0:3c929189abce 396
spinal 0:3c929189abce 397 }
spinal 0:3c929189abce 398
spinal 0:3c929189abce 399 // explosions
spinal 0:3c929189abce 400 stillExploding=0;
spinal 0:3c929189abce 401 for (int t = 0; t < EXPLODESPRITES; t++) {
spinal 0:3c929189abce 402 if (expU[t] == 1) {
spinal 0:3c929189abce 403 oldLev[expX[t] + LEVWIDTH * expY[t]] = 255;
spinal 0:3c929189abce 404
spinal 0:3c929189abce 405 stillExploding=1;
spinal 0:3c929189abce 406 if(expF[t]<=1){
spinal 0:3c929189abce 407 new2BitTile(OFF_X+(expX[t]*tileSize), OFF_Y+expY[t]*tileSize, tileSize, tileSize, 1, gbTiles, 1);
spinal 0:3c929189abce 408 }
spinal 0:3c929189abce 409 draw4BitTile(OFF_X+(expX[t]*tileSize), OFF_Y+expY[t]*tileSize, tileSize, tileSize, expF[t], 8, explode_tiles);
spinal 0:3c929189abce 410 if (frameNumber % EXPLODESPEED == 0) {
spinal 0:3c929189abce 411 expF[t]++;
spinal 0:3c929189abce 412 if (expF[t] == 8) {
spinal 0:3c929189abce 413 expU[t] = 0;
spinal 0:3c929189abce 414 }
spinal 0:3c929189abce 415 }
spinal 0:3c929189abce 416 }
spinal 0:3c929189abce 417 }
spinal 0:3c929189abce 418
spinal 0:3c929189abce 419 // player sprite
spinal 0:3c929189abce 420 if(drawPlayer){
spinal 0:3c929189abce 421 uint16_t tileBuffer[10];
spinal 0:3c929189abce 422 for(byte y=0; y<8; y++){
spinal 0:3c929189abce 423 int offX = ball[y][0];
spinal 0:3c929189abce 424 int wide = ball[y][1];
spinal 0:3c929189abce 425 for(byte x=0; x<wide; x++){
spinal 0:3c929189abce 426 tileBuffer[x]=_pal[ball[y][x+2]];
spinal 0:3c929189abce 427 }
spinal 0:3c929189abce 428 game.display.directTile(OFF_X+px+offX+2, OFF_Y+py+y+2, OFF_X+px+wide+offX+2, OFF_Y+py+3+y , tileBuffer);
spinal 0:3c929189abce 429 }// y
spinal 0:3c929189abce 430 }//drawplayer
spinal 0:3c929189abce 431
spinal 0:3c929189abce 432
spinal 0:3c929189abce 433 print(8, 14, "SCORE LEV LIVES HISCORE",0,_pal[10]);
spinal 0:3c929189abce 434 char text[] = " ";
spinal 0:3c929189abce 435 sprintf(text, "%05d",score);
spinal 0:3c929189abce 436 print(8, 24, text,0,_pal[10]);
spinal 0:3c929189abce 437 sprintf(text, "%03d",levelNum+1);
spinal 0:3c929189abce 438 print(64, 24, text,0,_pal[10]);
spinal 0:3c929189abce 439 sprintf(text, "%02d",lives);
spinal 0:3c929189abce 440 print(104, 24, text,0,_pal[10]);
spinal 0:3c929189abce 441 sprintf(text, "%05d",hiscore);
spinal 0:3c929189abce 442 print(160, 24, text,0,_pal[10]);
spinal 0:3c929189abce 443
spinal 0:3c929189abce 444 }
spinal 0:3c929189abce 445
spinal 0:3c929189abce 446 void explodeHere(){
spinal 0:3c929189abce 447 for (int t = 0; t < EXPLODESPRITES; t++) {
spinal 0:3c929189abce 448 if (expU[t] == 0) {
spinal 0:3c929189abce 449 expX[t] = px / tileSize;
spinal 0:3c929189abce 450 expY[t] = py / tileSize;
spinal 0:3c929189abce 451 expF[t] = 0;
spinal 0:3c929189abce 452 expU[t] = 1;
spinal 0:3c929189abce 453 score++;
spinal 0:3c929189abce 454 break;
spinal 0:3c929189abce 455 }
spinal 0:3c929189abce 456 }
spinal 0:3c929189abce 457 }
spinal 0:3c929189abce 458
spinal 0:3c929189abce 459 void checkTile(int x, int y) {
spinal 0:3c929189abce 460 int t = curLev[x + LEVWIDTH * y];
spinal 0:3c929189abce 461 switch (t) {
spinal 0:3c929189abce 462 case 1:
spinal 0:3c929189abce 463 curLev[x + LEVWIDTH * y] = 0;
spinal 0:3c929189abce 464 oldLev[x + LEVWIDTH * y] = 255;
spinal 0:3c929189abce 465 oldLev[(x+1) + LEVWIDTH * y] = 255;
spinal 0:3c929189abce 466 oldLev[(x+1) + LEVWIDTH * (y+1)] = 255;
spinal 0:3c929189abce 467 oldLev[x + LEVWIDTH * (y+1)] = 255;
spinal 0:3c929189abce 468 numTiles--;
spinal 0:3c929189abce 469 explodeHere();
spinal 0:3c929189abce 470 break;
spinal 0:3c929189abce 471 case 2:
spinal 0:3c929189abce 472 curLev[x + LEVWIDTH * y] = 1;
spinal 0:3c929189abce 473 numTiles--;
spinal 0:3c929189abce 474 score++;
spinal 0:3c929189abce 475 break;
spinal 0:3c929189abce 476 }
spinal 0:3c929189abce 477 if(score > 9999) {
spinal 0:3c929189abce 478 score = 9999;
spinal 0:3c929189abce 479 }
spinal 0:3c929189abce 480 if(score > hiscore) {
spinal 0:3c929189abce 481 hiscore = score;
spinal 0:3c929189abce 482 }
spinal 0:3c929189abce 483 }
spinal 0:3c929189abce 484
spinal 0:3c929189abce 485
spinal 0:3c929189abce 486 void movePlayer() {
spinal 0:3c929189abce 487 char x = px/tileSize;
spinal 0:3c929189abce 488 char y = py/tileSize;
spinal 0:3c929189abce 489 oldLev[(x-1) + LEVWIDTH * y] = 255;
spinal 0:3c929189abce 490 oldLev[x + LEVWIDTH * y] = 255;
spinal 0:3c929189abce 491 oldLev[(x+1) + LEVWIDTH * y] = 255;
spinal 0:3c929189abce 492 oldLev[x + LEVWIDTH * (y+1)] = 255;
spinal 0:3c929189abce 493
spinal 0:3c929189abce 494 if (ps == 0) { // not moving
spinal 0:3c929189abce 495 // sneeky exit check
spinal 0:3c929189abce 496 if (curLev[(px / tileSize) + LEVWIDTH * (py / tileSize)] == 10 || curLev[(px / tileSize) + LEVWIDTH * (py / tileSize)] == 11) {
spinal 0:3c929189abce 497 if (numTiles == 0) {
spinal 0:3c929189abce 498 levelNum++;
spinal 0:3c929189abce 499 if (levelNum >= maxLevels) {
spinal 0:3c929189abce 500 levelNum = 0;
spinal 0:3c929189abce 501 }
spinal 0:3c929189abce 502 // make sure explosions have finished :-)
spinal 0:3c929189abce 503 for (int t = 0; t < EXPLODESPRITES; t++){expU[t] = 0;}
spinal 0:3c929189abce 504 renderLevel(); refreshDisplay();
spinal 0:3c929189abce 505 loadLevel(levelNum);
spinal 0:3c929189abce 506 renderLevel(0,1);
spinal 0:3c929189abce 507 }
spinal 0:3c929189abce 508 }
spinal 0:3c929189abce 509 // sneeky water check
spinal 0:3c929189abce 510 int p = curLev[(px / tileSize) + LEVWIDTH * (py / tileSize)];
spinal 0:3c929189abce 511 if (p == 0 || (p>=24 && p<=32)) {
spinal 0:3c929189abce 512 lives--;
spinal 0:3c929189abce 513 rumbleOn();
spinal 0:3c929189abce 514 if (lives >= 0) {
spinal 0:3c929189abce 515 explodeHere();
spinal 0:3c929189abce 516 // make sure explosions have finished :-)
spinal 0:3c929189abce 517 for(frameNumber=0; frameNumber<30; frameNumber++){
spinal 0:3c929189abce 518 if(frameNumber>=RUMBLEFRAMES){rumbleOff();}
spinal 0:3c929189abce 519 renderLevel(0); // 0 to hide player
spinal 0:3c929189abce 520 refreshDisplay();
spinal 0:3c929189abce 521 }
spinal 0:3c929189abce 522 loadLevel(levelNum);
spinal 0:3c929189abce 523 renderLevel(0,1);
spinal 0:3c929189abce 524 } else {
spinal 0:3c929189abce 525 explodeHere();
spinal 0:3c929189abce 526 // make sure explosions have finished :-)
spinal 0:3c929189abce 527 for(frameNumber=0; frameNumber<30; frameNumber++){
spinal 0:3c929189abce 528 if(frameNumber>=RUMBLEFRAMES){rumbleOff();}
spinal 0:3c929189abce 529 renderLevel(0); // 0 to hide player
spinal 0:3c929189abce 530 refreshDisplay();
spinal 0:3c929189abce 531 }
spinal 0:3c929189abce 532 gameMode = 0; // titlescreen
spinal 0:3c929189abce 533 }
spinal 0:3c929189abce 534 }
spinal 0:3c929189abce 535
spinal 0:3c929189abce 536
spinal 0:3c929189abce 537 pd = 0;
spinal 0:3c929189abce 538 // if (!_B[HELD]) {
spinal 0:3c929189abce 539 if (_Up[HELD]) {
spinal 0:3c929189abce 540 if (curLev[(px / tileSize) + LEVWIDTH * (py / tileSize)] != 14 && curLev[(px / tileSize) + LEVWIDTH * ((py-tileSize) / tileSize)] != 14) {
spinal 0:3c929189abce 541 pd = 1;
spinal 0:3c929189abce 542 checkTile(px / tileSize, py / tileSize);
spinal 0:3c929189abce 543 }
spinal 0:3c929189abce 544 }
spinal 0:3c929189abce 545 if (_Down[HELD]) {
spinal 0:3c929189abce 546 if (curLev[(px / tileSize) + LEVWIDTH * (py / tileSize)] != 14 && curLev[(px / tileSize) + LEVWIDTH * (py / tileSize)] != 14) {
spinal 0:3c929189abce 547 pd = 2;
spinal 0:3c929189abce 548 checkTile(px / tileSize, py / tileSize);
spinal 0:3c929189abce 549 }
spinal 0:3c929189abce 550 }
spinal 0:3c929189abce 551 if (_Left[HELD]) {
spinal 0:3c929189abce 552 if (curLev[(px / tileSize) + LEVWIDTH * (py / tileSize)] != 15 && curLev[((px-tileSize) / tileSize) + LEVWIDTH * (py / tileSize)] != 15) {
spinal 0:3c929189abce 553 pd = 3;
spinal 0:3c929189abce 554 checkTile(px / tileSize, py / tileSize);
spinal 0:3c929189abce 555 }
spinal 0:3c929189abce 556 }
spinal 0:3c929189abce 557 if (_Right[HELD]) {
spinal 0:3c929189abce 558 if (curLev[(px / tileSize) + LEVWIDTH * (py / tileSize)] != 15 && curLev[((px+tileSize) / tileSize) + LEVWIDTH * (py / tileSize)] != 15) {
spinal 0:3c929189abce 559 pd = 4;
spinal 0:3c929189abce 560 checkTile(px / tileSize, py / tileSize);
spinal 0:3c929189abce 561 }
spinal 0:3c929189abce 562 }
spinal 0:3c929189abce 563 if (_A[NEW]) {
spinal 0:3c929189abce 564 if (curLev[(px / tileSize) + LEVWIDTH * (py / tileSize)] == 16) { // teleport
spinal 0:3c929189abce 565 int t = (px / tileSize) + LEVWIDTH * (py / tileSize);
spinal 0:3c929189abce 566 telNum = teleportMap[t];
spinal 0:3c929189abce 567 px = (telArray[telNum]%LEVWIDTH)*tileSize;
spinal 0:3c929189abce 568 py = (telArray[telNum]/LEVWIDTH)*tileSize;
spinal 0:3c929189abce 569 renderLevel(1,1);
spinal 0:3c929189abce 570 }
spinal 0:3c929189abce 571 }
spinal 0:3c929189abce 572
spinal 0:3c929189abce 573 }
spinal 0:3c929189abce 574
spinal 0:3c929189abce 575 switch (pd) {
spinal 0:3c929189abce 576 case 0:
spinal 0:3c929189abce 577 break;
spinal 0:3c929189abce 578 case 1:
spinal 0:3c929189abce 579 py-=STEPSIZE;
spinal 0:3c929189abce 580 ps+=STEPSIZE;
spinal 0:3c929189abce 581 break;
spinal 0:3c929189abce 582 case 2:
spinal 0:3c929189abce 583 py+=STEPSIZE;
spinal 0:3c929189abce 584 ps+=STEPSIZE;
spinal 0:3c929189abce 585 break;
spinal 0:3c929189abce 586 case 3:
spinal 0:3c929189abce 587 px-=STEPSIZE;
spinal 0:3c929189abce 588 ps+=STEPSIZE;
spinal 0:3c929189abce 589 break;
spinal 0:3c929189abce 590 case 4:
spinal 0:3c929189abce 591 px+=STEPSIZE;
spinal 0:3c929189abce 592 ps+=STEPSIZE;
spinal 0:3c929189abce 593 break;
spinal 0:3c929189abce 594 }
spinal 0:3c929189abce 595 if (ps == tileSize) {
spinal 0:3c929189abce 596 ps = 0; pd = 0;
spinal 0:3c929189abce 597 satTime = 0;
spinal 0:3c929189abce 598 }
spinal 0:3c929189abce 599
spinal 0:3c929189abce 600 }
spinal 0:3c929189abce 601
spinal 0:3c929189abce 602 void drawTitleScreen(){
spinal 0:3c929189abce 603 game.display.directRectangle(0,0,220,176,_pal[0]); // clear the screen
spinal 0:3c929189abce 604 draw4BitTile(4, 41, 212, 23, 0, -1, title);
spinal 0:3c929189abce 605
spinal 0:3c929189abce 606 print(40, 80, "Remade for Pokitto",0,_pal[0]);
spinal 0:3c929189abce 607 print(40, 96, " By Spinal",0,_pal[0]);
spinal 0:3c929189abce 608
spinal 0:3c929189abce 609 print(8, 136, " Original on C64 by",0,_pal[0]);
spinal 0:3c929189abce 610 print(8, 152, " Oliva Kirwa (C) 1990",0,_pal[0]);
spinal 0:3c929189abce 611
spinal 0:3c929189abce 612 for(int x=0; x<220; x++){
spinal 0:3c929189abce 613 game.display.directPixel(x,SCROLLHEIGHT,_pal[4]);
spinal 0:3c929189abce 614 game.display.directPixel(x,SCROLLHEIGHT+1,_pal[10]);
spinal 0:3c929189abce 615 game.display.directPixel(x,SCROLLHEIGHT+2,_pal[15]);
spinal 0:3c929189abce 616 game.display.directPixel(x,SCROLLHEIGHT+11,_pal[15]);
spinal 0:3c929189abce 617 game.display.directPixel(x,SCROLLHEIGHT+12,_pal[10]);
spinal 0:3c929189abce 618 game.display.directPixel(x,SCROLLHEIGHT+13,_pal[4]);
spinal 0:3c929189abce 619 }
spinal 0:3c929189abce 620
spinal 0:3c929189abce 621 gameMode=1;
spinal 0:3c929189abce 622 }
spinal 0:3c929189abce 623
spinal 0:3c929189abce 624 void titleScreen(){
spinal 0:3c929189abce 625 char text1[34];
spinal 0:3c929189abce 626 memcpy(text1, &text[myInt],33);
spinal 0:3c929189abce 627 text1[32]=0;
spinal 0:3c929189abce 628 //titleprint(-scroller, 6 , text1);
spinal 0:3c929189abce 629 print(-scroller, SCROLLHEIGHT+3, text1,0,_pal[14]);
spinal 0:3c929189abce 630 if(frameNumber%3==0){
spinal 0:3c929189abce 631 scroller++;
spinal 0:3c929189abce 632 if(scroller==8){
spinal 0:3c929189abce 633 scroller=0;
spinal 0:3c929189abce 634 myInt++;
spinal 0:3c929189abce 635 if(myInt==strlen(text)){myInt=0;}
spinal 0:3c929189abce 636 }
spinal 0:3c929189abce 637 }
spinal 0:3c929189abce 638
spinal 0:3c929189abce 639 if(_A[NEW]){
spinal 0:3c929189abce 640 lives = 5;
spinal 0:3c929189abce 641 score = 0;
spinal 0:3c929189abce 642 levelNum = 0;
spinal 0:3c929189abce 643 gameMode = 10;
spinal 0:3c929189abce 644 game.display.directRectangle(0,0,220,176,0x0000); // clear the screen
spinal 0:3c929189abce 645 }
spinal 0:3c929189abce 646
spinal 0:3c929189abce 647 }
spinal 0:3c929189abce 648
spinal 0:3c929189abce 649 void playLevel(){
spinal 0:3c929189abce 650
spinal 0:3c929189abce 651 movePlayer();
spinal 0:3c929189abce 652
spinal 0:3c929189abce 653 // sit still too long at your peril!
spinal 0:3c929189abce 654 if (pd == 0) {
spinal 0:3c929189abce 655 satTime++;
spinal 0:3c929189abce 656 int t=curLev[(px / tileSize) + LEVWIDTH * (py / tileSize)];
spinal 0:3c929189abce 657 char satCount = 16;
spinal 0:3c929189abce 658 if(t==2) satCount = 8;
spinal 0:3c929189abce 659
spinal 0:3c929189abce 660 if(satTime == satCount) {
spinal 0:3c929189abce 661 checkTile(px / tileSize, py / tileSize);
spinal 0:3c929189abce 662 satTime = 0;
spinal 0:3c929189abce 663 }
spinal 0:3c929189abce 664 }
spinal 0:3c929189abce 665
spinal 0:3c929189abce 666 renderLevel();
spinal 0:3c929189abce 667
spinal 0:3c929189abce 668 }
spinal 0:3c929189abce 669
spinal 0:3c929189abce 670
spinal 0:3c929189abce 671 int main(){
spinal 0:3c929189abce 672 rumbleOff(); // just in case
spinal 0:3c929189abce 673
spinal 0:3c929189abce 674 game.begin();
spinal 0:3c929189abce 675 game.display.width = 220; // full size
spinal 0:3c929189abce 676 game.display.height = 174;
spinal 0:3c929189abce 677
spinal 0:3c929189abce 678 game.sound.ampEnable(true);
spinal 0:3c929189abce 679 game.sound.playMusicStream(musicName);
spinal 0:3c929189abce 680
spinal 0:3c929189abce 681 gameMode = 0; // titleScreen
spinal 0:3c929189abce 682 tempTime = game.getTime();
spinal 0:3c929189abce 683
spinal 0:3c929189abce 684 while (game.isRunning()) {
spinal 0:3c929189abce 685
spinal 0:3c929189abce 686 // if it is time to update the screen
spinal 0:3c929189abce 687 // if (game.update(true)){
spinal 0:3c929189abce 688
spinal 0:3c929189abce 689 game.sound.updateStream();
spinal 0:3c929189abce 690
spinal 0:3c929189abce 691 myPad = updateButtons(myPad);
spinal 0:3c929189abce 692 UpdatePad(myPad);
spinal 0:3c929189abce 693
spinal 0:3c929189abce 694 frameNumber++;
spinal 0:3c929189abce 695 char oldMode = gameMode;
spinal 0:3c929189abce 696 switch(gameMode){
spinal 0:3c929189abce 697 case 0:
spinal 0:3c929189abce 698 drawTitleScreen();
spinal 0:3c929189abce 699 break;
spinal 0:3c929189abce 700 case 1:
spinal 0:3c929189abce 701 levelNum = 0;
spinal 0:3c929189abce 702 myDelay = 10;
spinal 0:3c929189abce 703 titleScreen();
spinal 0:3c929189abce 704 break;
spinal 0:3c929189abce 705 case 10:
spinal 0:3c929189abce 706 // start new game.
spinal 0:3c929189abce 707 loadLevel(levelNum);
spinal 0:3c929189abce 708 renderLevel(0,1);
spinal 0:3c929189abce 709 gameMode = 20;
spinal 0:3c929189abce 710 break;
spinal 0:3c929189abce 711 case 20:
spinal 0:3c929189abce 712 // play levels
spinal 0:3c929189abce 713 myDelay = 30;
spinal 0:3c929189abce 714 playLevel();
spinal 0:3c929189abce 715 break;
spinal 0:3c929189abce 716 }
spinal 0:3c929189abce 717
spinal 0:3c929189abce 718 // timing loop
spinal 0:3c929189abce 719 while(game.getTime()-tempTime < myDelay){
spinal 0:3c929189abce 720 refreshDisplay();
spinal 0:3c929189abce 721 };
spinal 0:3c929189abce 722 tempTime = game.getTime();
spinal 0:3c929189abce 723 // } // update
spinal 0:3c929189abce 724 }
spinal 0:3c929189abce 725 return 1;
spinal 0:3c929189abce 726 }