'=========================================================================== ' Subject: BLUETANK Date: 07-03-97 (09:34) ' Author: Reinder Glas Code: QB, QBasic, PDS ' Origin: glas400@hio.tem.nhl.nl Packet: GAMES.ABC '=========================================================================== ' BBBB L U U EEEEE TTTTT AAA N N K K ' B B L U U E T A A NN N K K ' BBBB L U U EEEE T AAAAA N N N KK ' B B L U U E T A A N NN K K ' BBBB LLLLL UUUUU EEEEE T A A N N K K ' __________________________ ' #Û |o| BLUETANK |o| Û# ' #Û |-|----------------------|-| Û# ' #Û |o| is derived |o| Û# ' === #Û === |-|----------------------|-| === Û# === ' ==== ###Û===== |o| from the classic |o| =====Û### ==== ' === #####Û==== |-|----------------------|-| ====Û##### === ' == #######Û=== |o| TANKBATTLE |o| ===Û####### == ' == #######Û=== |-|----------------------|-| ===Û####### == ' === #####Û==== |o| Enjoy, Reinder Glas |o| ====Û##### === ' ==== ###Û===== |-|----------------------|-| =====Û### ==== ' === === |o|glas400@hio.tem.nhl.nl|o| === === ' -------------------------- REM $STATIC DEFINT A-Z REM Make user-defined types. TYPE BOOL v AS INTEGER ' Its (v)alue. END TYPE TYPE TANK i AS INTEGER ' Its (i)d. a AS BOOL ' Is it (a)ctive? h AS BOOL ' Where it (h)it by a opponent missile or tank? x AS INTEGER ' Its (x) position. y AS INTEGER ' Its (y) position. d AS INTEGER ' Which sprite to (d)raw. (for animation effect) m AS INTEGER ' Its (m)ove direction. s AS INTEGER ' Its (s)peed. END TYPE TYPE MISSILE f AS INTEGER ' (F)ired by TANK.i where TANK.i = f. a AS BOOL ' Is it (a)ctive? h AS BOOL ' Did it (h)it a opponent tank or wall? x AS INTEGER ' Its (x) position. y AS INTEGER ' Its (y) position. m AS INTEGER ' Its (m)ove direction. s AS INTEGER ' Its (s)peed. END TYPE TYPE GAMEPARAMETERS playersleft AS INTEGER ' Current number of players. enemies AS INTEGER ' Number of enemies at start. enemiesleft AS INTEGER ' Current number of enemies. basetime AS LONG ' Current time in seconds. time AS INTEGER ' Time at start. timeleft AS INTEGER ' Current time left. score AS LONG ' The score. END TYPE REM Make functions and sub's DECLARE FUNCTION DidMissileHitOpponentTank% (m AS MISSILE) ' BOOL.v = % DECLARE FUNCTION DidMissileHitWall% (m AS MISSILE) ' BOOL.v = % DECLARE FUNCTION DidTankHitOpponentTank% (t AS TANK) ' BOOL.v = % DECLARE FUNCTION DidTankHitWall% (t AS TANK) ' BOOL.v = % DECLARE SUB CalcCurrentStatus () DECLARE SUB CenterPrint (Row%, Col%, Size%, Text$, ForeGround%, BackGround%, Allign%) DECLARE SUB ContinueGame () DECLARE SUB ControlEnemies () DECLARE SUB ControlPlayerOne () DECLARE SUB DrawMissile (m AS MISSILE) DECLARE SUB DrawTank (t AS TANK) DECLARE SUB Exitro () DECLARE SUB FireMissile (t AS TANK) DECLARE SUB InitMap () DECLARE SUB InitSprites () DECLARE SUB Intro () DECLARE SUB MoveMissile (m AS MISSILE) DECLARE SUB MoveTank (t AS TANK) DECLARE SUB Semi32BitWaveTableSound () DECLARE SUB SetupEnemies () DECLARE SUB SetupGame () DECLARE SUB SetupPlayer () DECLARE SUB ShowGameStatus () DECLARE SUB UpdateMissile (m AS MISSILE) DECLARE SUB UpdateTank (t AS TANK) REM Make consts for use in user-defined types. CONST FALSE = 0 ' BOOL.v CONST TRUE = NOT FALSE ' BOOL.v CONST PLAYER = 0 ' TANK.i AND MISSILE.f (opponent = ENEMY) REM ENEMY = 1 .. N ' TANK.i AND MISSILE.f (opponent = PLAYER) CONST NORTH = 0 ' TANK.m AND MISSILE.m CONST EAST = 1 ' TANK.m AND MISSILE.m CONST SOUTH = 2 ' TANK.m AND MISSILE.m CONST WEST = 3 ' TANK.m AND MISSILE.m CONST TANKSPEED = 2 ' TANK.s CONST MISSILESPEED = 10 ' MISSILE.s REM Make consts for global use. CONST SPRITEMEM = 121 ' The size of an array in integers to store a sprite. CONST SPRITEWIDTH = 20 ' The width of a sprite in pixels. CONST SPRITELENGTH = 20 ' The lenght of a sprite in pixels. CONST MAPWIDTH = 16 ' The width of the gamemap in sprites. CONST MAPLENGTH = 9 ' The length of the gamemap in sprites. CONST SCREENMODE = 7 ' The screen mode where in we are playing. CONST GAMESCREEN = 0 ' The screen page were the full game is showed. CONST SPRITESCREEN = 1 ' The screen page were the sprites are drawed. CONST MAPSCREEN = 2 ' The screen page with the gamemap. CONST MAXENEMIES = 12 ' The max number of enemies. ' optimized for 486DX40 DIM SHARED UP AS STRING * 2 ' CONST UP = CHR$(0) + CHR$(72) DIM SHARED RIGHT AS STRING * 2 ' CONST RIGHT = CHR$(0) + CHR$(77) DIM SHARED DOWN AS STRING * 2 ' CONST DOWN = CHR$(0) + CHR$(80) DIM SHARED LEFT AS STRING * 2 ' CONST LEFT = CHR$(0) + CHR$(72) DIM SHARED space AS STRING * 1 ' CONST SPACE = CHR$(32) UP = CHR$(0) + CHR$(72) ' The value of the uparrow key. RIGHT = CHR$(0) + CHR$(77) ' The value of the rightarrow key. DOWN = CHR$(0) + CHR$(80) ' The value of the downarrow key. LEFT = CHR$(0) + CHR$(75) ' The value of the leftarrow key. space = CHR$(32) ' The value of the space key. REM Make memory to store all the sprites. DIM SHARED bluetankn0(SPRITEMEM) AS INTEGER ' The player's tank is ' bluetank. DIM SHARED bluetankn1(SPRITEMEM) AS INTEGER ' It is blue of color. DIM SHARED bluetanke0(SPRITEMEM) AS INTEGER DIM SHARED bluetanke1(SPRITEMEM) AS INTEGER DIM SHARED bluetanks0(SPRITEMEM) AS INTEGER DIM SHARED bluetanks1(SPRITEMEM) AS INTEGER DIM SHARED bluetankw0(SPRITEMEM) AS INTEGER DIM SHARED bluetankw1(SPRITEMEM) AS INTEGER DIM SHARED enemytankn0(SPRITEMEM) AS INTEGER ' The enemy tanks are ' enemytanks. DIM SHARED enemytankn1(SPRITEMEM) AS INTEGER ' They are green of color. DIM SHARED enemytanke0(SPRITEMEM) AS INTEGER DIM SHARED enemytanke1(SPRITEMEM) AS INTEGER DIM SHARED enemytanks0(SPRITEMEM) AS INTEGER DIM SHARED enemytanks1(SPRITEMEM) AS INTEGER DIM SHARED enemytankw0(SPRITEMEM) AS INTEGER DIM SHARED enemytankw1(SPRITEMEM) AS INTEGER DIM SHARED wall(SPRITEMEM) AS INTEGER ' Making the gamemap. DIM SHARED explotion(SPRITEMEM) AS INTEGER ' When a tank is hit. DIM SHARED OldSchoolArcade(SPRITEMEM) AS INTEGER' used as exit. REM Make memory to store the gamemap. DIM SHARED map(MAPWIDTH, MAPLENGTH) AS INTEGER REM Make memory for the tanks and their missiles. DIM SHARED t(1 + MAXENEMIES) AS TANK ' The player's tank + the enemy tanks. DIM SHARED m(1 + MAXENEMIES) AS MISSILE ' The player's missile + the enemy ' missiles. REM Make memory to store the gamestatus. DIM SHARED gamestatus AS GAMEPARAMETERS ' The status of the game (score, etc). REM Run the game. SetupGame Intro SCREEN , , SPRITESCREEN, GAMESCREEN DO WHILE TRUE ControlPlayerOne ControlEnemies PCOPY MAPSCREEN, SPRITESCREEN ContinueGame PCOPY SPRITESCREEN, GAMESCREENSCREEN LOOP MapData: ' Begin of the mapdata. DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 DATA 1,0,1,1,0,1,0,1,1,0,1,0,1,1,0,1 DATA 1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1 DATA 1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1 DATA 1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1 DATA 1,0,1,1,0,1,0,1,1,0,1,0,1,1,0,1 DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1 DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 SpriteData: ' Begin of the spritedata. DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 8 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 8 , 15 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 8 , 15 , 0 , 1 , 8 , 8 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 8 , 8 , 0 , 1 , 1 , 8 , 15 , 9 , 9 , 1 , 1 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 8 , 15 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 0 , 1 , 1 , 1 , 1 , 8 , 15 , 9 , 9 , 9 , 9 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 8 , 8 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 7 , 7 , 7 , 15 , 8 , 9 , 9 , 9 , 9 , 1 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 8 , 7 , 7 , 15 , 8 , 9 , 9 , 9 , 8 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 7 , 7 , 8 , 7 , 8 , 9 , 9 , 9 , 1 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 7 , 7 , 8 , 7 , 8 , 9 , 9 , 9 , 8 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 15 , 7 , 7 , 8 , 8 , 7 , 8 , 9 , 9 , 9 , 1 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 15 , 7 , 7 , 7 , 8 , 9 , 9 , 9 , 9 , 8 , 1 , 0 DATA 0 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 8 , 0 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 1 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 8 , 8 , 8 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 1 , 8 , 1 , 8 , 1 , 8 , 0 , 0 , 0 , 8 , 1 , 8 , 1 , 8 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 8 , 1 , 0 , 1 , 1 , 1 , 9 , 9 , 9 , 1 , 8 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 8 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 9 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 8 , 1 , 1 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 1 , 8 , 7 , 7 , 7 , 15 , 8 , 9 , 9 , 9 , 9 , 1 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 8 , 7 , 7 , 8 , 8 , 8 , 15 , 8 , 9 , 9 , 9 , 0 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 8 , 7 , 7 , 7 , 7 , 8 , 7 , 8 , 15 , 15 , 15 , 15 , 15 , 15 DATA 0 , 0 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 7 , 7 , 7 , 7 , 8 , 8 , 8 , 8 , 8 , 8 , 8 DATA 0 , 0 , 0 , 1 , 1 , 1 , 8 , 15 , 8 , 8 , 8 , 7 , 7 , 8 , 9 , 9 , 9 , 0 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 1 , 8 , 15 , 7 , 7 , 7 , 8 , 9 , 9 , 9 , 9 , 1 , 0 , 0 DATA 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 9 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 1 , 0 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 1 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 1 , 8 , 0 , 1 , 1 , 1 , 9 , 9 , 9 , 8 , 1 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 1 , 8 , 1 , 0 , 0 , 0 , 1 , 8 , 1 , 8 , 1 , 8 , 1 , 8 , 1 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 8 , 8 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 8 , 8 , 0 , 1 , 1 , 1 , 9 , 9 , 9 , 1 , 1 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 0 , 1 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 9 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 8 , 8 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 7 , 7 , 7 , 15 , 8 , 9 , 9 , 9 , 9 , 1 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 8 , 7 , 7 , 15 , 8 , 9 , 9 , 9 , 8 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 7 , 7 , 8 , 7 , 8 , 9 , 9 , 9 , 1 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 7 , 7 , 8 , 7 , 8 , 9 , 9 , 9 , 8 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 15 , 7 , 7 , 8 , 8 , 7 , 8 , 9 , 9 , 9 , 1 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 15 , 7 , 7 , 7 , 8 , 9 , 9 , 9 , 9 , 8 , 1 , 0 DATA 0 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 15 , 8 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 8 , 0 , 1 , 1 , 1 , 15 , 8 , 9 , 9 , 9 , 1 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 15 , 8 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 8 , 8 , 8 , 0 , 0 , 15 , 8 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 15 , 8 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 15 , 8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 1 , 8 , 1 , 8 , 1 , 8 , 0 , 0 , 0 , 8 , 1 , 8 , 1 , 8 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 8 , 1 , 0 , 1 , 1 , 1 , 9 , 9 , 9 , 1 , 8 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 8 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 9 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 8 , 1 , 1 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 1 , 8 , 7 , 7 , 7 , 15 , 8 , 9 , 9 , 9 , 9 , 1 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 8 , 7 , 7 , 8 , 8 , 8 , 15 , 8 , 9 , 9 , 9 , 0 , 0 , 0 DATA 8 , 8 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 8 , 7 , 8 , 9 , 9 , 9 , 0 , 0 , 0 DATA 15 , 15 , 15 , 15 , 15 , 15 , 8 , 7 , 8 , 7 , 7 , 7 , 7 , 8 , 9 , 9 , 9 , 0 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 8 , 15 , 8 , 8 , 8 , 7 , 7 , 8 , 9 , 9 , 9 , 0 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 1 , 8 , 15 , 7 , 7 , 7 , 8 , 9 , 9 , 9 , 9 , 1 , 0 , 0 DATA 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 9 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 1 , 0 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 1 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 1 , 8 , 0 , 1 , 1 , 1 , 9 , 9 , 9 , 8 , 1 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 1 , 8 , 1 , 0 , 0 , 0 , 1 , 8 , 1 , 8 , 1 , 8 , 1 , 8 , 1 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 8 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 8 , 15 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 1 , 8 , 8 , 8 , 8 , 8 , 0 , 0 , 8 , 15 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 8 , 15 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 8 , 0 , 1 , 1 , 1 , 8 , 15 , 9 , 9 , 9 , 1 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 15 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 1 , 1 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 7 , 7 , 7 , 15 , 8 , 9 , 9 , 9 , 9 , 8 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 8 , 7 , 7 , 15 , 8 , 9 , 9 , 9 , 1 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 7 , 7 , 8 , 7 , 8 , 9 , 9 , 9 , 8 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 7 , 7 , 8 , 7 , 8 , 9 , 9 , 9 , 1 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 15 , 7 , 7 , 8 , 8 , 7 , 8 , 9 , 9 , 9 , 8 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 15 , 7 , 7 , 7 , 8 , 9 , 9 , 9 , 9 , 1 , 1 , 0 DATA 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 0 , 1 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 9 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 8 , 8 , 0 , 1 , 1 , 1 , 9 , 9 , 9 , 1 , 1 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 8 , 8 , 8 , 8 , 8 , 8 , 1 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 1 , 1 , 8 , 1 , 8 , 1 , 0 , 0 , 0 , 1 , 8 , 1 , 8 , 1 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 1 , 8 , 0 , 1 , 1 , 1 , 9 , 9 , 9 , 8 , 1 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 1 , 0 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 1 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 9 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 1 , 8 , 1 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 1 , 8 , 7 , 7 , 7 , 15 , 8 , 9 , 9 , 9 , 9 , 1 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 8 , 7 , 7 , 8 , 8 , 8 , 15 , 8 , 9 , 9 , 9 , 0 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 8 , 7 , 7 , 7 , 7 , 8 , 7 , 8 , 15 , 15 , 15 , 15 , 15 , 15 DATA 0 , 0 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 7 , 7 , 7 , 7 , 8 , 8 , 8 , 8 , 8 , 8 , 8 DATA 0 , 0 , 0 , 1 , 1 , 1 , 8 , 15 , 8 , 8 , 8 , 7 , 7 , 8 , 9 , 9 , 9 , 0 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 1 , 8 , 15 , 7 , 7 , 7 , 8 , 9 , 9 , 9 , 9 , 1 , 0 , 0 DATA 0 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 9 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 8 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 8 , 1 , 0 , 1 , 1 , 1 , 9 , 9 , 9 , 1 , 8 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 8 , 1 , 8 , 0 , 0 , 0 , 8 , 1 , 8 , 1 , 8 , 1 , 8 , 1 , 1 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 1 , 8 , 8 , 8 , 8 , 8 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 8 , 0 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 1 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 1 , 1 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 7 , 7 , 7 , 15 , 8 , 9 , 9 , 9 , 9 , 8 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 8 , 7 , 7 , 15 , 8 , 9 , 9 , 9 , 1 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 7 , 7 , 8 , 7 , 8 , 9 , 9 , 9 , 8 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 7 , 8 , 7 , 7 , 8 , 7 , 8 , 9 , 9 , 9 , 1 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 8 , 15 , 7 , 7 , 8 , 8 , 7 , 8 , 9 , 9 , 9 , 8 , 1 , 0 DATA 0 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 15 , 7 , 7 , 7 , 8 , 9 , 9 , 9 , 9 , 1 , 1 , 0 DATA 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 0 , 1 , 1 , 1 , 1 , 15 , 8 , 9 , 9 , 9 , 9 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 15 , 8 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 1 , 0 DATA 0 , 1 , 8 , 8 , 8 , 8 , 0 , 1 , 1 , 15 , 8 , 9 , 9 , 1 , 1 , 1 , 1 , 1 , 1 , 0 DATA 0 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 15 , 8 , 0 , 8 , 8 , 8 , 8 , 8 , 8 , 1 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 15 , 8 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 15 , 8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 1 , 1 , 8 , 1 , 8 , 1 , 0 , 0 , 0 , 1 , 8 , 1 , 8 , 1 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 1 , 8 , 0 , 1 , 1 , 1 , 9 , 9 , 9 , 8 , 1 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 1 , 0 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 1 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 9 , 8 , 1 , 8 , 1 , 0 DATA 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 1 , 8 , 1 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 1 , 8 , 7 , 7 , 7 , 15 , 8 , 9 , 9 , 9 , 9 , 1 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 8 , 7 , 7 , 8 , 8 , 8 , 15 , 8 , 9 , 9 , 9 , 0 , 0 , 0 DATA 8 , 8 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 8 , 7 , 8 , 9 , 9 , 9 , 0 , 0 , 0 DATA 15 , 15 , 15 , 15 , 15 , 15 , 8 , 7 , 8 , 7 , 7 , 7 , 7 , 8 , 9 , 9 , 9 , 0 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 8 , 15 , 8 , 8 , 8 , 7 , 7 , 8 , 9 , 9 , 9 , 0 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 1 , 1 , 8 , 15 , 7 , 7 , 7 , 8 , 9 , 9 , 9 , 9 , 1 , 0 , 0 DATA 0 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 8 , 8 , 8 , 8 , 9 , 9 , 9 , 9 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 9 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 8 , 0 , 1 , 1 , 1 , 1 , 9 , 9 , 9 , 9 , 8 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 8 , 1 , 0 , 1 , 1 , 1 , 9 , 9 , 9 , 1 , 8 , 1 , 8 , 1 , 1 , 0 DATA 0 , 1 , 8 , 1 , 8 , 1 , 8 , 0 , 0 , 0 , 8 , 1 , 8 , 1 , 8 , 1 , 8 , 1 , 1 , 0 DATA 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 DATA 14 , 14 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 DATA 14 , 14 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 DATA 14 , 14 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 DATA 14 , 14 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 DATA 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 DATA 6 , 6 , 6 , 6 , 14 , 14 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 DATA 6 , 6 , 6 , 6 , 14 , 14 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 DATA 6 , 6 , 6 , 6 , 14 , 14 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 DATA 6 , 6 , 6 , 6 , 14 , 14 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 DATA 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 DATA 14 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 DATA 14 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 DATA 14 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 DATA 14 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 DATA 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 DATA 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 , 14 , 4 , 4 , 4 , 4 DATA 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 , 14 , 4 , 4 , 4 , 4 DATA 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 , 14 , 4 , 4 , 4 , 4 DATA 4 , 4 , 4 , 4 , 14 , 14 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 14 , 14 , 4 , 4 , 4 , 4 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 15 , 15 , 15 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 0 , 8 , 7 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 15 , 15 , 15 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 0 , 8 , 7 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 15 , 15 , 15 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 15 , 15 , 15 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 0 , 8 , 7 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 15 , 15 , 15 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 15 , 15 , 15 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 0 , 8 , 7 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 15 , 15 , 15 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 15 , 15 , 15 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 15 , 15 , 15 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 0 , 15 , 7 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 7 , 15 , 0 , 15 , 7 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 15 , 0 , 15 , 0 , 0 , 15 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 11 , 0 , 11 , 11 , 0 , 0 , 11 , 0 , 11 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 9 , 0 , 9 , 9 , 0 , 0 , 9 , 0 , 9 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 8 , 0 , 8 , 8 , 8 , 8 , 8 , 0 , 0 , 0 , 9 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 11 , 0 , 0 , 0 DATA 0 , 0 , 15 , 15 , 0 , 15 , 15 , 15 , 0 , 15 , 0 , 15 , 0 , 1 , 9 , 11 , 15 , 11 , 9 , 1 DATA 0 , 11 , 0 , 0 , 11 , 0 , 0 , 11 , 0 , 11 , 11 , 0 , 11 , 11 , 0 , 11 , 11 , 0 , 0 , 0 DATA 0 , 0 , 9 , 0 , 9 , 0 , 0 , 9 , 9 , 9 , 9 , 0 , 9 , 9 , 0 , 9 , 9 , 0 , 0 , 0 DATA 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 DATA 0 , 8 , 8 , 0 , 0 , 8 , 8 , 8 , 0 , 8 , 0 , 8 , 0 , 0 , 8 , 0 , 8 , 8 , 8 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 DATA 0 , 0 , 15 , 0 , 0 , 15 , 0 , 0 , 15 , 15 , 0 , 15 , 0 , 15 , 15 , 0 , 15 , 15 , 15 , 0 DATA 0 , 11 , 0 , 11 , 11 , 0 , 11 , 11 , 0 , 0 , 11 , 0 , 11 , 11 , 0 , 11 , 11 , 0 , 0 , 0 DATA 0 , 9 , 9 , 9 , 9 , 9 , 0 , 9 , 0 , 0 , 9 , 9 , 9 , 9 , 0 , 9 , 9 , 9 , 0 , 0 DATA 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 DATA 0 , 8 , 0 , 8 , 8 , 0 , 8 , 0 , 8 , 8 , 8 , 0 , 8 , 8 , 8 , 0 , 8 , 8 , 8 , 0 DATA 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 SUB CalcCurrentStatus IF t(PLAYER).h.v = TRUE THEN gamestatus.playersleft = gamestatus.playersleft - 1 gamestatus.enemiesleft = gamestatus.enemies gamestatus.basetime = TIMER gamestatus.timeleft = gamestatus.time SetupPlayer SetupEnemies END IF IF gamestatus.playersleft = -1 OR gamestatus.timeleft = -1 THEN Exitro END IF IF gamestatus.enemiesleft = 0 THEN IF t(PLAYER).x = 280 AND t(PLAYER).y = 140 THEN gamestatus.enemies = gamestatus.enemies + 1 gamestatus.playersleft = gamestatus.playersleft + 1 IF gamestatus.enemies = 9 THEN gamestatus.enemies = 8 gamestatus.score = gamestatus.score + 10000! gamestatus.time = gamestatus.time - 10 END IF gamestatus.enemiesleft = gamestatus.enemies gamestatus.score = gamestatus.score + (gamestatus.timeleft * 1000!) gamestatus.basetime = TIMER gamestatus.timeleft = gamestatus.time SetupPlayer SetupEnemies END IF END IF gamestatus.score = gamestatus.score + 1 gamestatus.timeleft = gamestatus.time - INT(TIMER - gamestatus.basetime) END SUB SUB CenterPrint (Row%, Col%, Size%, Text$, ForeGround%, BackGround%, Allign%) CONST NOALLIGN = 1 CONST LEFT = 2 CONST RIGHT = 3 CONST ALL = 4 DIM Center AS INTEGER Text$ = LEFT$(Text$, Size%) Center = INT((Size% - LEN(Text$)) / 2) COLOR ForeGround%, BackGround% SELECT CASE Allign% CASE NOALLIGN LOCATE Row%, Col% + Center PRINT Text$; CASE LEFT LOCATE Row%, Col% PRINT SPACE$(Center); Text$; CASE RIGHT LOCATE Row%, Col% + Center PRINT Text$; SPACE$(Size% - Center - LEN(Text$)); CASE ALL LOCATE Row%, Col% PRINT SPACE$(Center); Text$; SPACE$(Size% - Center - LEN(Text$)); END SELECT COLOR 7, 0 END SUB SUB ContinueGame FOR l = 0 TO gamestatus.enemies + 1 UpdateMissile m(l) UpdateTank t(l) CalcCurrentStatus DrawMissile m(l) DrawTank t(l) IF m(l).h.v = TRUE THEN m(l).a.v = FALSE m(l).h.v = FALSE END IF IF t(l).h.v = TRUE THEN t(l).a.v = FALSE t(l).h.v = FALSE END IF IF l = PLAYER THEN Semi32BitWaveTableSound END IF NEXT l ShowGameStatus END SUB SUB ControlEnemies FOR l = 1 TO gamestatus.enemies SELECT CASE t(l).a.v CASE TRUE g = INT(RND * 2) + 1 IF g = 1 AND t(l).x MOD SPRITEWIDTH = 0 AND t(l).y MOD SPRITELENGTH = 0 THEN t(l).m = (t(l).m + INT(RND * 2)) MOD 4 ELSEIF g = 2 THEN IF m(l).a.v = FALSE THEN IF t(l).x = t(PLAYER).x OR t(l).y = t(PLAYER).y THEN FireMissile t(l) END IF END IF END IF END SELECT NEXT l END SUB SUB ControlPlayerOne SELECT CASE INKEY$ CASE UP t(PLAYER).m = NORD CASE RIGHT t(PLAYER).m = EAST CASE DOWN t(PLAYER).m = SOUTH CASE LEFT t(PLAYER).m = WEST CASE space IF m(PLAYER).a.v = FALSE AND t(PLAYER).a.v = TRUE THEN FireMissile t(PLAYER) END IF END SELECT END SUB FUNCTION DidMissileHitOpponentTank% (m AS MISSILE) SELECT CASE m.f CASE PLAYER FOR l = 1 TO gamestatus.enemies IF t(l).a.v = TRUE THEN inx = ((m.x >= t(l).x) AND (m.x < t(l).x + SPRITEWIDTH)) iny = ((m.y >= t(l).y) AND (m.y < t(l).y + SPRITELENGTH)) IF inx AND iny THEN t(l).h.v = TRUE gamestatus.score = gamestatus.score + 100 gamestatus.enemiesleft = gamestatus.enemiesleft - 1 DidMissileHitOpponentTank% = TRUE EXIT FUNCTION END IF END IF NEXT l DidMissileHitOpponentTank% = FALSE EXIT FUNCTION CASE 1 TO gamestatus.enemies IF t(PLAYER).a.v = TRUE THEN inx = ((m.x >= t(PLAYER).x) AND (m.x < t(PLAYER).x + SPRITEWIDTH)) iny = ((m.y >= t(PLAYER).y) AND (m.y < t(PLAYER).y + SPRITELENGTH)) IF inx AND iny THEN t(PLAYER).h.v = TRUE DidMissileHitOpponentTank% = TRUE EXIT FUNCTION END IF END IF DidMissileHitOpponentTank% = FALSE EXIT FUNCTION END SELECT END FUNCTION FUNCTION DidMissileHitWall% (m AS MISSILE) inx = m.x \ SPRITEWIDTH iny = m.y \ SPRITELENGTH IF map(inx, iny) = 1 THEN DidMissileHitWall% = TRUE EXIT FUNCTION ELSE DidMissileHitWall% = FALSE EXIT FUNCTION END IF END FUNCTION FUNCTION DidTankHitOpponentTank% (t AS TANK) SELECT CASE t.i CASE PLAYER FOR l = 1 TO gamestatus.enemies IF t(l).a.v = TRUE THEN 'inx = ((t.x >= t(l).x) AND (t.x < t(l).x + SPRITEWIDTH)) 'iny = ((t.y >= t(l).y) AND (t.y < t(l).y + SPRITELENGTH)) 'IF inx AND iny THEN inx = ABS(t.x - t(l).x) iny = ABS(t.y - t(l).y) IF inx < 20 AND iny < 20 THEN t(l).h.v = TRUE DidTankHitOpponentTank% = TRUE EXIT FUNCTION END IF END IF NEXT l DidTankHitOpponentTank% = FALSE EXIT FUNCTION CASE 1 TO gamestatus.enemies IF t(PLAYER).a.v = TRUE THEN inx = ((t.x >= t(PLAYER).x) AND (t.x < t(PLAYER).x + SPRITEWIDTH)) iny = ((t.y >= t(PLAYER).y) AND (t.y < t(PLAYER).y + SPRITELENGTH)) IF inx AND iny THEN t(PLAYER).h.v = TRUE DidTankHitOpponentTank% = TRUE EXIT FUNCTION END IF END IF DidTankHitOpponentTank% = FALSE EXIT FUNCTION END SELECT END FUNCTION FUNCTION DidTankHitWall% (t AS TANK) inx = t.x \ SPRITEWIDTH iny = t.y \ SPRITELENGTH SELECT CASE t.m CASE NORD SELECT CASE t.y MOD SPRITELENGTH CASE 0 SELECT CASE t.x MOD SPRITEWIDTH CASE 0 IF map(inx, iny - 1) = 1 THEN DidTankHitWall% = TRUE EXIT FUNCTION END IF CASE IS > 0 IF map(inx, iny - 1) = 1 OR map(inx + 1, iny - 1) = 1 THEN DidTankHitWall% = TRUE EXIT FUNCTION END IF END SELECT END SELECT DiTankHitWall% = FALSE EXIT FUNCTION CASE EAST SELECT CASE t.x MOD SPRITEWIDTH CASE 0 SELECT CASE t.y MOD SPRITELENGTH CASE 0 IF map(inx + 1, iny) = 1 THEN DidTankHitWall% = TRUE EXIT FUNCTION END IF CASE IS > 0 IF map(inx + 1, iny) = 1 OR map(inx + 1, iny + 1) = 1 THEN DidTankHitWall% = TRUE EXIT FUNCTION END IF END SELECT END SELECT DiTankHitWall% = FALSE EXIT FUNCTION CASE SOUTH SELECT CASE t.y MOD SPRITELENGTH CASE 0 SELECT CASE t.x MOD SPRITEWIDTH CASE 0 IF map(inx, iny + 1) = 1 THEN DidTankHitWall% = TRUE EXIT FUNCTION END IF CASE IS > 0 IF map(inx, iny + 1) = 1 OR map(inx + 1, iny + 1) = 1 THEN DidTankHitWall% = TRUE EXIT FUNCTION END IF END SELECT END SELECT DiTankHitWall% = FALSE EXIT FUNCTION CASE WEST SELECT CASE t.x MOD SPRITEWIDTH CASE 0 SELECT CASE t.y MOD SPRITELENGTH CASE 0 IF map(inx - 1, iny) = 1 THEN DidTankHitWall% = TRUE EXIT FUNCTION END IF CASE IS > 0 IF map(inx - 1, iny) = 1 OR map(inx - 1, iny + 1) = 1 THEN DidTankHitWall% = TRUE EXIT FUNCTION END IF END SELECT END SELECT DiTankHitWall% = FALSE EXIT FUNCTION END SELECT END FUNCTION SUB DrawMissile (m AS MISSILE) SELECT CASE m.h.v CASE FALSE SELECT CASE m.a.v CASE TRUE SELECT CASE m.f CASE PLAYER SELECT CASE m.m CASE NORD LINE (m.x, m.y)-(m.x + 1, m.y - 2), 14, BF CASE EAST LINE (m.x, m.y)-(m.x + 2, m.y + 1), 14, BF CASE SOUTH LINE (m.x, m.y)-(m.x + 1, m.y + 2), 14, BF CASE WEST LINE (m.x, m.y)-(m.x - 2, m.y + 1), 14, BF END SELECT CASE 1 TO gamestatus.enemies SELECT CASE m.m CASE NORD LINE (m.x, m.y)-(m.x + 1, m.y - 2), 15, BF CASE EAST LINE (m.x, m.y)-(m.x + 2, m.y + 1), 15, BF CASE SOUTH LINE (m.x, m.y)-(m.x + 1, m.y + 2), 15, BF CASE WEST LINE (m.x, m.y)-(m.x - 2, m.y + 1), 15, BF END SELECT END SELECT END SELECT END SELECT END SUB SUB DrawTank (t AS TANK) SELECT CASE t.h.v CASE TRUE PUT (t.x, t.y), explotion, PSET CASE FALSE SELECT CASE t.a.v CASE TRUE SELECT CASE t.i CASE PLAYER SELECT CASE t.m CASE NORD SELECT CASE t.d CASE 0 PUT (t.x, t.y), bluetankn0, OR CASE 1 PUT (t.x, t.y), bluetankn1, OR END SELECT CASE EAST SELECT CASE t.d CASE 0 PUT (t.x, t.y), bluetanke0, OR CASE 1 PUT (t.x, t.y), bluetanke1, OR END SELECT CASE SOUTH SELECT CASE t.d CASE 0 PUT (t.x, t.y), bluetanks0, OR CASE 1 PUT (t.x, t.y), bluetanks1, OR END SELECT CASE WEST SELECT CASE t.d CASE 0 PUT (t.x, t.y), bluetankw0, OR CASE 1 PUT (t.x, t.y), bluetankw1, OR END SELECT END SELECT CASE 1 TO gamestatus.enemies SELECT CASE t.m CASE NORD SELECT CASE t.d CASE 0 PUT (t.x, t.y), enemytankn0, OR CASE 1 PUT (t.x, t.y), enemytankn1, OR END SELECT CASE EAST SELECT CASE t.d CASE 0 PUT (t.x, t.y), enemytanke0, OR CASE 1 PUT (t.x, t.y), enemytanke1, OR END SELECT CASE SOUTH SELECT CASE t.d CASE 0 PUT (t.x, t.y), enemytanks0, OR CASE 1 PUT (t.x, t.y), enemytanks1, OR END SELECT CASE WEST SELECT CASE t.d CASE 0 PUT (t.x, t.y), enemytankw0, OR CASE 1 PUT (t.x, t.y), enemytankw1, OR END SELECT END SELECT END SELECT END SELECT END SELECT END SUB SUB Exitro SCREEN , , GAMESCREEN, GAMESCREEN FOR l = O TO 15 COLOR l, 15 - l LOCATE 10, 16: PRINT "GAME OVER" NEXT l DO WHILE INKEY$ = "" LOOP SCREEN 0 WIDTH 80 CenterPrint 1, 1, 80, "Thank you for playing BLUETANK", 14, 4, 4 CenterPrint 3, 1, 80, "You can mail me at", 15, 0, 1 CenterPrint 4, 1, 80, "glas400@hio.tem.nhl.nl", 15, 2, 1 CenterPrint 5, 1, 80, "for ideas, bugrepport etc.", 15, 0, 1 CenterPrint 7, 1, 80, "Reinder Glas", 15, 0, 1 SYSTEM END SUB SUB FireMissile (t AS TANK) m(t.i).f = t.i m(t.i).a.v = TRUE m(t.i).h.v = FALSE m(t.i).m = t.m m(t.i).s = MISSILESPEED SELECT CASE t.m CASE NORD m(t.i).x = t.x + 9 m(t.i).y = t.y - 1 CASE EAST m(t.i).x = t.x + SPRITEWIDTH m(t.i).y = t.y + 9 CASE SOUTH m(t.i).x = t.x + 9 m(t.i).y = t.y + SPRITELENGTH CASE WEST m(t.i).x = t.x - 1 m(t.i).y = t.y + 9 END SELECT END SUB SUB InitMap RESTORE MapData FOR y = 0 TO MAPLENGTH - 1 FOR x = 0 TO MAPWIDTH - 1 READ sprite IF sprite = 1 THEN PUT (x * 20, y * 20), wall IF sprite = 2 THEN PUT (x * 20, y * 20), OldSchoolArcade map(x, y) = sprite NEXT x NEXT y END SUB SUB InitSprites RESTORE SpriteData xb = 0 FOR l = 0 TO 7 FOR y = 0 TO SPRITELENGTH - 1 FOR x = 0 TO SPRITEWIDTH - 1 READ k PSET (xb + x, y), k IF k = 1 THEN k = 2 IF k = 9 THEN k = 10 PSET (xb + x, y + 20), k NEXT x NEXT y xb = xb + 20 NEXT l xb = 0 FOR l = 0 TO 2 FOR y = 0 TO SPRITELENGTH - 1 FOR x = 0 TO SPRITEWIDTH - 1 READ k PSET (xb + x, y + 40), k NEXT x NEXT y xb = xb + 20 NEXT l GET (0, 0)-(19, 19), bluetankn0 GET (20, 0)-(39, 19), bluetanke0 GET (40, 0)-(59, 19), bluetanks0 GET (60, 0)-(79, 19), bluetankw0 GET (80, 0)-(99, 19), bluetankn1 GET (100, 0)-(119, 19), bluetanke1 GET (120, 0)-(139, 19), bluetanks1 GET (140, 0)-(159, 19), bluetankw1 GET (0, 20)-(19, 39), enemytankn0 GET (20, 20)-(39, 39), enemytanke0 GET (40, 20)-(59, 39), enemytanks0 GET (60, 20)-(79, 39), enemytankw0 GET (80, 20)-(99, 39), enemytankn1 GET (100, 20)-(119, 39), enemytanke1 GET (120, 20)-(139, 39), enemytanks1 GET (140, 20)-(159, 39), enemytankw1 GET (0, 40)-(19, 59), wall GET (20, 40)-(39, 59), explotion GET (40, 40)-(59, 59), OldSchoolArcade END SUB SUB Intro SCREEN SCREENMODE, , GAMESCREEN, GAMESCREEN CLS COLOR 1, 0 FOR l = 14 TO 1 STEP -1 LOCATE l, 1 PRINT "" PRINT "" PRINT " º³ ³ º º³º³º³º º º³º³ ³" PRINT " º º³ º º³ ³ ³ ³º º³º " PRINT " º³ ³ º º³º ³ ³º³º º³º " PRINT " º º³ º º³ ³ ³ ³º º³º " PRINT " º³ ³º³º³º³º³ ³ ³ ³º º³ ³" PRINT " " NEXT l COLOR 14, 0 PRINT PRINT " MISSION : Destroy all the GREEN tanks" PRINT " and rush to the" PRINT " 'Old School Arcade' in the" PRINT " right-bottom corner.Û" PRINT PRINT PRINT PRINT COLOR 4, 0 PRINT " press fire to start" DO WHILE INKEY$ = "" LOOP gamestatus.basetime = TIMER gamestatus.time = 100 END SUB SUB MoveMissile (m AS MISSILE) SELECT CASE m.m CASE NORD m.y = m.y - m.s CASE EAST m.x = m.x + m.s CASE SOUTH m.y = m.y + m.s CASE WEST m.x = m.x - m.s END SELECT END SUB SUB MoveTank (t AS TANK) SELECT CASE t.m CASE NORD t.y = t.y - t.s CASE EAST t.x = t.x + t.s CASE SOUTH t.y = t.y + t.s CASE WEST t.x = t.x - t.s END SELECT END SUB SUB Semi32BitWaveTableSound IF m(PLAYER).a.v = TRUE THEN SELECT CASE t(PLAYER).d CASE 0 SOUND 1150, 1 CASE 1 SOUND 1000, 1 END SELECT ELSE SELECT CASE t(PLAYER).d CASE 0 SOUND 250, 1 CASE 1 SOUND 200, 1 END SELECT END IF END SUB SUB SetupEnemies x = 20 y = 20 FOR l = 1 TO gamestatus.enemies t(l).i = l t(l).a.v = TRUE m(l).a.v = FALSE t(l).x = x t(l).y = y t(l).m = c MOD 4 t(l).s = TANKSPEED t(l).d = 0 t(l).h.v = FALSE IF x = 20 AND y = 20 THEN x = 280 ELSEIF x = 280 AND y = 20 THEN y = 140 ELSEIF x = 280 AND y = 140 THEN x = 20 ELSEIF x = 20 AND y = 140 THEN y = 20 END IF NEXT l END SUB SUB SetupGame SCREEN SCREENMODE, , GAMESCREEN, GAMESCREEN PRINT "loading bluetank" gamestatus.playersleft = 0 gamestatus.enemies = 1 gamestatus.enemiesleft = 1 gamestatus.timeleft = 100 gamestatus.score = 0 RANDOMIZE TIMER SCREEN SCREENMODE, , SPRITESCREEN, GAMESCREEN InitSprites SCREEN , , MAPSCREEN, GAMESCREEN InitMap SetupPlayer SetupEnemies END SUB SUB SetupPlayer t(PLAYER).i = PLAYER t(PLAYER).a.v = TRUE m(PLAYER).a.v = FALSE t(PLAYER).x = 160 t(PLAYER).y = 80 t(PLAYER).m = EAST t(PLAYER).s = TANKSPEED t(PLAYER).d = 0 t(PLAYER).h.v = FALSE END SUB SUB ShowGameStatus score$ = MID$(STR$(gamestatus.score), 2) playersleft$ = MID$(STR$(gamestatus.playersleft), 2) timeleft$ = MID$(STR$(gamestatus.timeleft), 2) LOCATE 24, 1: PRINT "LEFT: "; STRING$(2 - LEN(playersleft$), ASC("0")) + playersleft$; LOCATE 24, 12: PRINT "SCORE: "; STRING$(10 - LEN(score$), ASC("0")) + score$; LOCATE 24, 32: PRINT "TIME: "; STRING$(3 - LEN(timeleft$), ASC("0")) + timeleft$; END SUB SUB UpdateMissile (m AS MISSILE) SELECT CASE m.a.v CASE TRUE IF DidMissileHitOpponentTank%(m) = TRUE THEN m.h.v = TRUE EXIT SUB END IF IF DidMissileHitWall%(m) = TRUE THEN m.h.v = TRUE EXIT SUB END IF MoveMissile m END SELECT END SUB SUB UpdateTank (t AS TANK) SELECT CASE t.a.v CASE TRUE t.d = (t.d + 1) MOD 2 IF DidTankHitOpponentTank%(t) = TRUE THEN t.h.v = TRUE EXIT SUB END IF IF DidTankHitWall%(t) = TRUE THEN EXIT SUB END IF MoveTank t END SELECT END SUB