//*********************************************************** // // TANX2.0a by Stuart Macdonald // Codewarrior Version // world.c 1.0b op // //*********************************************************** #include //*********************************************************** // own includes //*********************************************************** #include "header.h" // *********************************************************** // variables // *********************************************************** // extern stuff... extern int PLAYING; extern int INGAME; extern int RotCounter; extern int level; extern int RestartPoints[6][2]; extern voice_data bang,pickup,missile,missile2,shell2, shell, bang2, ping, alarm; // sound effects extern SpriteStructType0 theSprites[MAX_NO_OF_SPRITES]; extern LineStructType0 theLines[MAX_NO_OF_LINES]; extern ObjectStructType0 theTank[2]; extern ObjectStructType0 theTurret[2]; extern ObjectStructType0 theObjects[MAX_NO_OF_OBJECTS]; extern WorldStructType0 theWorld[2]; extern WorldStructType0 theBldgs[2]; extern int PowerupCounter; // global variables ------------------------------------------- //char worldGroundData[MAX_Z][MAX_X]; char BldgWorldData[MAX_Z][MAX_X]; int LumWorldData[MAX_Z][MAX_X]; //*********************************************************** // // World functions // //*********************************************************** //*********************************************************** // InitialiseWorld // Checks the map array and loads the tile models // For basic floor tiles it also checks the luminosity value //*********************************************************** void InitialiseWorld (void) { int tmpx,tmpz; int posx,posz; char c; int lum; int n; int xc; int zc; theWorld[0].nTotalModels=0; theWorld[1].nTotalModels=0; for (n = 0; n < 2; n++) { FindTilePosition(&theTank[n]); posx = theTank[n].tileposx - 5; posz = theTank[n].tileposz - 5; for (zc = 0; zc < 11; zc++ ) { tmpx = posz + zc; for (xc = 0; xc < 11; xc++ ) { tmpz = posx + xc; c = '1'; //worldGroundData[tmpz][tmpx]; if ((tmpz > (MAX_X-1)) || (tmpz < 0) || (tmpx > (MAX_Z-1)) || (tmpx < 0)) { c = 'Q'; } theWorld[n].drawflag[theWorld[n].nTotalModels] = 0; switch (c) { case 'Q': AddModelToWorld(&theWorld[n], (tmpz * SEPERATION),(0), (tmpx * SEPERATION), (u_long *)SQUARES1_TMD); break; case '1': lum = LumWorldData[tmpz][tmpx]; switch (lum) { case 1: //darkest floor tile AddModelToWorld(&theWorld[n], (tmpz * SEPERATION),(0), (tmpx * SEPERATION), (u_long *)SQUARES1_TMD); break; case 2: AddModelToWorld(&theWorld[n], (tmpz * SEPERATION),(0), (tmpx * SEPERATION), (u_long *)SQUARES2_TMD); break; case 3: AddModelToWorld(&theWorld[n], (tmpz * SEPERATION),(0), (tmpx * SEPERATION), (u_long *)SQUARES3_TMD); break; case 4: AddModelToWorld(&theWorld[n], (tmpz * SEPERATION),(0), (tmpx * SEPERATION), (u_long *)SQUARES4_TMD); break; case 5: //lightest floor tile AddModelToWorld(&theWorld[n], (tmpz * SEPERATION),(0), (tmpx * SEPERATION), (u_long *)SQUARES5_TMD); break; } break; case '2': //AddModelToWorld(&theWorld[n], (tmpz * SEPERATION),(0), // (tmpx * SEPERATION), (u_long *)SQUARE2_MEM_ADDR); break; case '3': //AddModelToWorld(&theWorld[n], (tmpz * SEPERATION),(0), // (tmpx * SEPERATION), (u_long *)SQUARE3_MEM_ADDR); break; case '4': //AddModelToWorld(&theWorld[n], (tmpz * SEPERATION),(0), // (tmpx * SEPERATION), (u_long *)SQUARE4_MEM_ADDR); break; case '5': //AddModelToWorld(&theWorld[n], (tmpz * SEPERATION),(0), // (tmpx * SEPERATION), (u_long *)SQUARE5_MEM_ADDR); break; } } //end for tmpx } //end for tmpz } } //*********************************************************** // InitialiseBldgs // Checks the map array and loads the building & powerup models // It also keeps the powerups rotating continually //*********************************************************** void InitialiseBldgs (void) { int tmpx,tmpz; int posx,posz; char c; int n; int xc; int zc; theBldgs[0].nTotalModels=0; theBldgs[1].nTotalModels=0; //initialise total number of models to zero for (n = 0; n < 2; n++) { posx = theTank[n].tileposx - 5; posz = theTank[n].tileposz - 5; // then for each element of the worldGroundData array if we find a 1 // then place an instance of square1.tmd at the appropriate position // in the world. for (zc = 0; zc < 11; zc++) { tmpx = posz + zc; for (xc = 0; xc < 11; xc++) { tmpz = posx + xc; theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 0; c = BldgWorldData[tmpz][tmpx]; if (tmpz > (MAX_X-1) || (tmpz < 0) || tmpx > (MAX_Z-1) || (tmpx < 0)) { c = '0'; theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 0; theBldgs[n].nTotalModels++; continue; } switch (c) { case '0': //blank theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 0; theBldgs[n].nTotalModels ++; break; case 'b': //bunker AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(0), (tmpx * SEPERATION), (u_long *)BUNKER_TMD); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case 'R': //radar dish AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(0), (tmpx * SEPERATION), (u_long *)RADAR_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case 'P': //power station AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(0), (tmpx * SEPERATION), (u_long *)POWER_TMD); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case 'C': //coms center AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(0), (tmpx * SEPERATION), (u_long *)COMS_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; /*case 'T': //trees { AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(0), (tmpx * SEPERATION), (u_long *)TREES_TMD); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; }*/ case 'l': //light stand AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(0), (tmpx * SEPERATION), (u_long *)LIGHT_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case '2': //railgun powerup AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(-10), (tmpx * SEPERATION), (u_long *)TURRET2_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vx=0; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vy=RotCounter; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vz=0; RotateModel (&theBldgs[n].gsObjectCoord[theBldgs[n].nTotalModels - 1],&theBldgs[n].rotation[theBldgs[n].nTotalModels - 1], 0, 32, 0 ); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case '3': //laser cannon powerup AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(-10), (tmpx * SEPERATION), (u_long *)TURRET3_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vx=0; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vy=RotCounter; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vz=0; RotateModel (&theBldgs[n].gsObjectCoord[theBldgs[n].nTotalModels - 1],&theBldgs[n].rotation[theBldgs[n].nTotalModels - 1], 0, 32, 0 ); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case '4': //flamethrower powerup AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(-10), (tmpx * SEPERATION), (u_long *)TURRET4_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vx=0; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vy=RotCounter; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vz=0; RotateModel (&theBldgs[n].gsObjectCoord[theBldgs[n].nTotalModels - 1],&theBldgs[n].rotation[theBldgs[n].nTotalModels - 1], 0, 32, 0 ); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case '5': //tazer cannon powerup AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(-10), (tmpx * SEPERATION), (u_long *)TAZERTUR_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vx=0; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vy=RotCounter; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vz=0; RotateModel (&theBldgs[n].gsObjectCoord[theBldgs[n].nTotalModels - 1],&theBldgs[n].rotation[theBldgs[n].nTotalModels - 1], 0, 32, 0 ); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case '6': //missile launcher powerup AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(-10), (tmpx * SEPERATION), (u_long *)MISLCHR_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vx=0; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vy=RotCounter; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vz=0; RotateModel (&theBldgs[n].gsObjectCoord[theBldgs[n].nTotalModels - 1],&theBldgs[n].rotation[theBldgs[n].nTotalModels - 1], 0, 32, 0 ); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case 'A': //armour shard AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(-10), (tmpx * SEPERATION), (u_long *)ARMOUR_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vx=0; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vy=RotCounter; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vz=0; RotateModel (&theBldgs[n].gsObjectCoord[theBldgs[n].nTotalModels - 1],&theBldgs[n].rotation[theBldgs[n].nTotalModels - 1], 0, 32, 0 ); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case 'W': //teleport AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(-10), (tmpx * SEPERATION), (u_long *)TELEP_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vx=0; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vy=RotCounter; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vz=0; RotateModel (&theBldgs[n].gsObjectCoord[theBldgs[n].nTotalModels - 1],&theBldgs[n].rotation[theBldgs[n].nTotalModels - 1], 0, 32, 0 ); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case 'X': //shield AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(-10), (tmpx * SEPERATION), (u_long *)SHIELD_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vx=0; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vy=RotCounter; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vz=0; RotateModel (&theBldgs[n].gsObjectCoord[theBldgs[n].nTotalModels - 1],&theBldgs[n].rotation[theBldgs[n].nTotalModels - 1], 0, 32, 0 ); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case 'Y': //emp-shock AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(-10), (tmpx * SEPERATION), (u_long *)EMPSHK_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vx=0; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vy=RotCounter; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vz=0; RotateModel (&theBldgs[n].gsObjectCoord[theBldgs[n].nTotalModels - 1],&theBldgs[n].rotation[theBldgs[n].nTotalModels - 1], 0, 32, 0 ); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case 'Z': //invisibility AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(-10), (tmpx * SEPERATION), (u_long *)INVIS_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vx=0; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vy=RotCounter; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vz=0; RotateModel (&theBldgs[n].gsObjectCoord[theBldgs[n].nTotalModels - 1],&theBldgs[n].rotation[theBldgs[n].nTotalModels - 1], 0, 32, 0 ); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; case 'S': //speedup AddModelToWorld(&theBldgs[n], (tmpz * SEPERATION),(-10), (tmpx * SEPERATION), (u_long *)SPEEDUP_TMD); MakeLightPool(tmpz, tmpx); theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vx=0; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vy=RotCounter; theBldgs[n].rotation[theBldgs[n].nTotalModels - 1].vz=0; RotateModel (&theBldgs[n].gsObjectCoord[theBldgs[n].nTotalModels - 1],&theBldgs[n].rotation[theBldgs[n].nTotalModels - 1], 0, 32, 0 ); theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 2; break; default: theBldgs[n].drawflag[theBldgs[n].nTotalModels] = 0; theBldgs[n].nTotalModels ++; } //end of switch } //end for tmpx } //end for tmpz } } //*********************************************************** // SetupScreenLuminance // Sets up the brightness values of the visible floor tiles // in the luminance array //*********************************************************** void SetupScreenLuminance (void) { int tmpx,tmpz; int posx,posz; int n; int xc; int zc; for (n = 0; n < 2;n++) { posx = theTank[n].tileposx-4; posz = theTank[n].tileposz-4; for (zc = 0; zc < 13; zc++) { tmpx = posz + zc; for (xc = 0; xc < 10; xc++) { tmpz = posx + xc; if (((zc > 1) && (zc < 7)) && ((xc > 1) && (xc < 7))) { if ((tmpz < (MAX_X) && (tmpz > 0) && (tmpx < (MAX_Z)) && (tmpx > 0))) { if (LumWorldData[tmpz][tmpx] == 1) { LumWorldData[tmpz][tmpx] = 2; } } } if (((zc > 2) && (zc < 6)) && ((xc > 2) && (xc < 6))) { if ((tmpz < (MAX_X) && (tmpz > 0) && (tmpx < (MAX_Z)) && (tmpx > 0))) { LumWorldData[tmpz][tmpx] = 3; } } } } } } //*********************************************************** // ResetLuminance // Resets up the brightness values of the floor tiles // in the luminance array //*********************************************************** void ResetLuminance (void) { int tmpx; int tmpz; for (tmpz = 0; tmpz < MAX_Z; tmpz++) { for (tmpx = 0; tmpx < MAX_X; tmpx++) { LumWorldData[tmpz][tmpx] = 1; } } } //*********************************************************** // MakeLightPool // Increases target floor tile by 2, and surrounding 8 tiles // by 1 in luminesence array //*********************************************************** void MakeLightPool (int tx, int ty) { int c; int n; int px = tx-1; int pz = ty-1; for (c = 0; c < 3; c++) { if (((px + c) < MAX_X) && ((px + c) > 0)) { for (n = 0; n < 3; n++) { if (((pz + n) < MAX_Z) && ((pz + n) > 0)) { IncreaseLight(px + c, pz + n, 3); } } } } IncreaseLight(tx, ty, 4); } //*********************************************************** // IncreaseLight // Increases target floor tile tx,ty by 1 up to 'max' // in luminesence array //*********************************************************** void IncreaseLight (int tx, int ty, int max) { int lval; lval = LumWorldData[tx][ty]; if (lval < max) { lval ++; LumWorldData[tx][ty] = lval; } } //*********************************************************** // LoadLevel // Loads passed level no. int map info arrays // //*********************************************************** void LoadLevel (int level) { /* int w; int b; int n; int tmpx,tmpz; int rp[6][2] = {{2,15},{4,4},{7,13},{17,8},{18,18},{16,11}}; char WorldLevel1[MAX_Z][MAX_X] ={ {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, {'1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'}, }; char WorldLevel2[MAX_Z][MAX_X] ={ {'b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b'}, }; char WorldLevel3[MAX_Z][MAX_X] ={ {'b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','b'}, {'b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b','b'}, }; char BldgsLevel1[MAX_Z][MAX_X] ={ {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'l','0','0','0','l','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','C','0','0','0','0','0','0','0','0'}, {'0','0','R','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'l','0','0','0','l','0','0','0','l','0','0','0','l','0','0','0','l','0','l','0','l','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','R','0','0'}, {'0','0','0','0','0','0','0','0','0','0','l','0','0','0','l','0','0','0','l','0','l','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','b','b','b','0','l','0','l','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','R','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','l','0','0','l','0','l','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','P','0','P','0','P','0','0','0','0'}, {'0','0','0','0','P','0','P','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','l','0','0','l','0','0','l','0','P','0','C','0','P','0','0','l','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','b','b','b','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','P','0','P','0','P','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, }; char BldgsLevel2[MAX_Z][MAX_X] ={ {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','1','0','0','0','0','0','0','8','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','a','0','1','0','0','0','7','0','0','0'}, {'0','0','0','0','0','8','0','0','0','0','0','1','0','0','1','0','0','0','0','0','0','0'}, {'0','0','0','0','1','0','0','0','0','0','0','0','0','0','3','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','8','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','8','a','0','0','0','0','0','0','0','0','0','0','6','0','0','0','0'}, {'0','0','a','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','2','0','0','1','1','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','4','0','0','0','8','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','8','0','0','0'}, {'0','0','0','0','6','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','8','0','0','0','0','0','0','0'}, {'0','0','0','4','0','0','0','0','0','2','0','1','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','L','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','7','0','0','0','0','0','0','1','0','1','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, }; char BldgsLevel3[MAX_Z][MAX_X] ={ {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','1','0','0','0','0','0','0','8','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','8','0','1','0','0','0','7','0','0','0'}, {'0','0','0','0','0','8','0','0','0','0','0','1','0','0','1','0','0','0','0','0','0','0'}, {'0','0','0','0','1','0','0','0','0','0','0','0','0','0','3','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','8','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','8','8','0','0','0','0','0','0','0','0','0','0','6','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','2','0','0','1','1','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','4','0','0','0','8','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','8','0','0','0'}, {'0','0','0','0','6','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','8','0','0','0','0','0','0','0'}, {'0','0','0','4','0','0','0','0','0','2','0','1','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','L','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','7','0','0','0','0','0','0','1','0','1','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}, }; ResetLuminance(); PowerupCounter = 0;// set no of powerups to 0 for start of game for (tmpz = 0; tmpz < MAX_Z; tmpz++) { for (tmpx = 0; tmpx < MAX_X; tmpx++) { if (level == 0) { b = BldgsLevel1[tmpz][tmpx]; w = WorldLevel1[tmpz][tmpx]; for (n = 0; n < 6; n++) { RestartPoints[n][0] = rp[n][0]; RestartPoints[n][1] = rp[n][1]; } } else if (level == 1) { b = BldgsLevel2[tmpz][tmpx]; w = WorldLevel2[tmpz][tmpx]; } else if (level == 2) { b = BldgsLevel3[tmpz][tmpx]; w = WorldLevel3[tmpz][tmpx]; } worldGroundData[tmpz][tmpx] = '1'; BldgWorldData[tmpz][tmpx] = b; } } */ // New mapping routine - commented out for now due to collision detection, etc. not working int n; int mapnum; int tmpx,tmpz; int tmpx2,tmpz2; int sbmap; // 0-nothing 1-bunker 2-radar dish 3-powerplant 4-coms 5-trees 6-light char sublevel[10][64] = { {'0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0',},// submap 0 - blank {'0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','l','0','0','0','0','0','l', '0','0','0','0','0','0','0','0', '0','0','0','P','P','0','0','0', '0','0','0','P','P','0','0','0', '0','0','0','0','0','0','0','0', '0','l','0','0','0','0','l','0',},// submap 1 - blank {'0','0','0','0','0','0','0','0', '0','P','P','0','0','P','P','0', '0','P','0','0','0','0','P','0', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','P','0','0','0','0','P','0', '0','P','P','0','0','P','P','0',},// submap 2 - blank {'0','0','0','0','0','0','0','0', '0','0','0','0','P','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','l','0','0','0', '0','P','0','l','C','l','0','P', '0','0','0','0','l','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','P','0','0','0',},// submap 3 - blank {'0','0','0','0','0','0','0','0', '0','0','0','0','l','0','0','0', '0','0','R','0','0','0','R','0', '0','0','0','0','l','0','0','0', '0','l','0','l','P','l','0','l', '0','0','0','0','l','0','0','0', '0','0','R','0','0','0','R','0', '0','0','0','0','l','0','0','0',},// submap 4 - blank {'0','0','0','0','0','0','0','0', '0','P','b','P','0','P','b','P', 'P','0','0','0','0','0','0','P', '0','P','0','P','b','P','0','P', '0','0','0','0','0','0','0','0', '0','P','b','P','0','P','b','P', 'P','0','0','0','0','0','0','P', '0','P','0','P','b','P','0','b',},// submap 5 - blank {'0','0','0','0','0','0','0','0', '0','0','0','0','l','0','0','0', '0','0','0','0','b','P','0','0', '0','0','0','0','0','0','0','0', '0','0','0','l','0','0','0','0', '0','0','0','0','0','0','0','0', '0','P','b','0','0','0','0','0', '0','0','0','l','0','0','0','0',},// submap 6 - blank {'0','0','0','0','0','0','0','0', '0','0','0','0','P','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','P','0','0','C','0','0','P', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','P','0','0','0',},// submap 7 - blank {'0','0','0','0','0','0','0','0', '0','l','0','0','0','0','0','l', '0','0','0','0','l','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','0','l','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','l',},// submap 8 - blank {'0','0','0','0','0','0','0','0', '0','P','0','0','P','0','0','P', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','P','0','0','C','0','0','P', '0','0','0','0','0','0','0','0', '0','0','0','0','0','0','0','0', '0','P','0','0','P','0','0','P',},// submap 9 - blank }; ResetLuminance(); PowerupCounter = 0;// set no of powerups to 0 for start of game tmpx = 0; tmpz = 0; tmpx2 = 0; tmpz2 = 0; sbmap = 0; for (sbmap = 0; sbmap < 16; sbmap++)// loop through submap list { mapnum = rand()%10; for (n = 0;n < 64; n++)// loads sub-map into map array { //worldGroundData[tmpx2 + tmpx][tmpz2 + tmpz] = '1'; BldgWorldData[tmpx2 + tmpx][tmpz2 + tmpz] = sublevel[mapnum][n]; tmpx ++;// increase local x offset if(tmpx > 7)// if x offset greater than 7 then move down to next line of world array { tmpx = 0; tmpz ++; } } tmpx2 += 8; // increase x offset to next submap block horizontally tmpx = 0; tmpz = 0; // reset x and y local offsets if(tmpx2 > 31) // check whether the x offset is off map, if so move down to next block (tmpz2 += 8) { tmpx2 = 0; tmpz2 += 8; } if(tmpz2 > 31) break; } } //*********************************************************** // SetMinimap // Sets the pixels of the minimap sprite // //*********************************************************** void SetMinimap (void) { char b; int tmpz, tmpx; int n; GsIMAGE tim1; RECT pixel; LoadTexture(MINIMAP_TIM); for (tmpz = 0; tmpz < MAX_Z; tmpz++) { for (tmpx = 0; tmpx < MAX_X; tmpx++) { b = BldgWorldData[tmpz][tmpx]; if (b != '0') { if ((b == 'l') || (b == 'R') || (b == 'C') || (b == 'P') || (b == 'b')) { //set to grey GsGetTimInfo((u_long *)(PIXEL1_TIM+4),&tim1); } else GsGetTimInfo((u_long *)(PIXEL4_TIM+4),&tim1); //set to orange for powerups pixel.x = 960 + tmpz;// x-position for 2x2 pixel sprite pixel.y = (MAX_Z*2)-(tmpx*2); pixel.w = 1; pixel.h = 2; //load image from main memory to video memory LoadImage(&pixel,tim1.pixel); } } } // player pixels for(n = 0; n < 2; n++) { if(n==0){ GsGetTimInfo((u_long *)(PIXEL2_TIM+4),&tim1); } else GsGetTimInfo((u_long *)(PIXEL3_TIM+4),&tim1); //set to red for plyr1 pixel.x = 960 + theTank[n].tileposx;// grab red pixel from pixels sprite pixel.y = (MAX_Z*2)-(theTank[n].tileposz*2); pixel.w = 1; pixel.h = 2; //load image from main memory to video memory LoadImage(&pixel,tim1.pixel); } }