CHDIR ".\programs\samples\pete\wetspot" ' WETSPOT v0.9 ' by Angelo Mottola (C) 1996 ' ' -------------------------------------------------------------------------- ' Well, this is my first game written in QBASIC. ' Sorry, but I haven't so much time to add comments to this source, but ' I think it's pretty simple to understand. ' The target of this game is to kill every monster in less than 90 seconds ' to gain next level. You control a little crab, and you must push bricks ' towards your enemies to kill them. If you push a brick and besides it ' there is another one, the block you pushed on will be destroyed, maybe ' dropping a bonus. Bonuses are various, and someone has a particular ' function (For example: Lightning will destroy every monster on the screen). ' Not all bricks can be moved. Each level has three special blocks, and when ' you put them together, you gain a special multiplier bonus (2x or 3x if ' you put together two or three blocks). ' Look out for monsters that follow you and good luck!! ' ' Controls are: ' ' Player One Player Two General ' Left: 4 Left: A Pause: P ' Right: 6 Right: D Quit: ESC ' Up: 8 Up: W ' Down: 5 Down: S ' Fire: \ Fire: ENTER ' ' Since this is not the final version, it contains only 21 levels. ' Final version will contain: ' ' - 100 levels (I hope so...) ' - 8 different enemies ' - Sound Blaster music and sound effects ' ' If you have any suggestion, mail me at ' ' ---------- ' eri@cdc.it ' ---------- ' ' -------------------------------------------------------------------------- ' '$DYNAMIC DEFINT A-Z DECLARE SUB Intro () DECLARE SUB MainMenu () DECLARE SUB GetSprites () DECLARE SUB PlayGame () DECLARE SUB OutText (x, y, t$) DECLARE SUB PrintStatBar () DECLARE SUB LoadLevel () DECLARE SUB DrawScreen () DECLARE SUB Center (y, t$) DECLARE SUB Message (t$) DECLARE SUB CheckBlocks () DECLARE SUB CheckObjects () DECLARE SUB MoveEnemies () DECLARE SUB KillPlayer (num) DECLARE SUB PrintValue (xv, yv, va) DECLARE SUB Delay (sbDT!) DECLARE FUNCTION PlayAgain () TYPE BlockType Status AS INTEGER JustMoved AS INTEGER MovedBy AS INTEGER x AS INTEGER y AS INTEGER END TYPE TYPE PlayerType Score AS LONG Lives AS INTEGER NextLife AS LONG BonusE AS INTEGER BonusX AS INTEGER BonusT AS INTEGER BonusR AS INTEGER BonusA AS INTEGER Bonus AS INTEGER x AS INTEGER y AS INTEGER dir AS INTEGER NextDir AS INTEGER Spd AS INTEGER Cutter AS INTEGER Action AS INTEGER Frame AS INTEGER FrameDir AS INTEGER Special AS INTEGER Trapped AS INTEGER END TYPE TYPE ObjectType Typ AS INTEGER Time AS INTEGER x AS INTEGER y AS INTEGER Alone AS INTEGER END TYPE TYPE EnemyType Typ AS INTEGER dir AS INTEGER x AS INTEGER y AS INTEGER Flag1 AS INTEGER Flag2 AS INTEGER Flag3 AS INTEGER Changed AS INTEGER END TYPE CONST NONE = 0, MOVE = 1, FIRE = 2, NORMAL = 0, POTION = 1, WEB = -1 CONST INACTIVE = 0, FIXEDBLOCK = 1, NORMALBLOCK = 2, SPECIALBLOCK = 3 CONST NMOVINGDOWN = 4, NMOVINGRIGHT = 5, NMOVINGUP = 6, NMOVINGLEFT = 7 CONST SMOVINGDOWN = 8, SMOVINGRIGHT = 9, SMOVINGUP = 10, SMOVINGLEFT = 11 CONST FALSE = 0, TRUE = NOT FALSE DIM SHARED Cel(18, 12), Player(2) AS PlayerType, Block(170) AS BlockType DIM SHARED Object(60) AS ObjectType, Enemy(20) AS EnemyType DIM SHARED Crab&(100 * 40), Expl&(100 * 3), Wall&(100), CutHole&(100) DIM SHARED Hole&(100), Life&(20 * 2), Clock&(20), Flag&(20) DIM SHARED Number&(10 * 10), Disapp&(4 * 100), Null&(100) DIM SHARED Char&(20 * 46), FBlock&(100), NBlock&(100), SBlock&(100) DIM SHARED Obj&(100 * 27), Ball&(100 * 6), Ghost&(100 * 4), Slug&(100 * 10) DIM SHARED Robot&(100 * 16), Shadow&(100 * 12), Worm&(100 * 16) DIM SHARED Putty&(100 * 20), Spider&(100 * 19), Box&(1000), Killed DIM SHARED NumPlayer, Fx, Speed, Level, TimeLeft, s$(2), Pass, Value(10) DIM SHARED NumBlock, NumEnemy, NumObject, AbortGame, xA(4), yA(4) DIM SHARED Bonus(20), PotNum, Freezed, GameMode, Multi#, LastTime$ DIM SHARED BonusAlone, Change, NumChange, NumWeb, MaxLevel xA(0) = 0: yA(0) = 0 xA(1) = 0: yA(1) = 1 xA(2) = 1: yA(2) = 0 xA(3) = 0: yA(3) = -1 xA(4) = -1: yA(4) = 0 RESTORE FOR i = 1 TO 4: READ xA(i), yA(i): NEXT i FOR i = 1 TO 8: READ Value(i): NEXT i 'ON ERROR GOTO ErrorHandle SCREEN 13 GetSprites Intro DO MainMenu PlayGame IF NOT PlayAgain THEN EXIT DO LOOP SCREEN 0: WIDTH 80 PRINT "WetSpot v0.9" PRINT "(C) by Angelo Mottola soft 1996" PRINT : PRINT "Final release will include:" PRINT " - 100 levels (I hope so...)" PRINT " - 8 different enemies" PRINT " - Sound Blaster Music and sound effects" PRINT " - More and more fun !!" PRINT : PRINT "Coming soon..." PRINT : END ErrorHandle: SCREEN 0: WIDTH 80: CLS COLOR 15, 1: LOCATE 1, 1: PRINT SPACE$(80); LOCATE 1, 1: PRINT "ERROR: "; SELECT CASE ERR CASE 53: PRINT "Game file not found !"; CASE 61: PRINT "Disk full or error accessing disk."; CASE 70: PRINT "Disk access denied !"; CASE 71: PRINT "Error accessing disk !"; CASE ELSE: PRINT "Abnormal program termination (error code:", ERR, ")."; END SELECT COLOR 7, 0: LOCATE 2, 1: PRINT "Coming back to system ..." END DATA 0,1,1,0,0,-1,-1,0,100,150,200,250,200,350,300,400,20,20 REM $STATIC SUB Center (y, t$) x = (320 - (LEN(t$) * 7)) / 2 OutText x, y, t$ END SUB SUB CheckBlocks FOR B = 1 TO 170 IF Block(B).Status <> 0 THEN SELECT CASE Block(B).Status CASE IS > 3 PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), Null&, PSET SELECT CASE Block(B).Status CASE NMOVINGDOWN IF Cel(Block(B).x, Block(B).y + 1) < 1 THEN Cel(Block(B).x, Block(B).y) = 0: Block(B).y = Block(B).y + 1 Cel(Block(B).x, Block(B).y) = NORMALBLOCK FOR nb = 1 TO 170 IF Block(nb).x = Block(B).x AND Block(nb).y = Block(B).y AND nb <> B THEN Block(nb).Status = 0: EXIT FOR NEXT nb PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), NBlock&, PSET Block(B).JustMoved = FALSE ELSE IF Block(B).JustMoved = FALSE THEN Block(B).Status = NORMALBLOCK PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), NBlock&, PSET ELSE FOR o = 1 TO 60 IF Object(o).Typ = 0 AND Object(o + 1).Typ = 0 THEN EXIT FOR NEXT o Player(Block(B).MovedBy).Score = Player(Block(B).MovedBy).Score + (10 * Multi#): PrintStatBar Object(o).Typ = -3: Object(o).Time = 1: Object(o).Alone = FALSE Object(o).x = Block(B).x * 16: Object(o).y = -8 + (Block(B).y * 16) Block(B).Status = NONE: Cel(Block(B).x, Block(B).y) = 0 PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), Null&, PSET RANDOMIZE TIMER m = INT(RND(1) * 3) + 1 IF m = 1 THEN w = INT(RND(1) * 20) + 1 IF Bonus(w) = 15 THEN Bonus(w) = 14 Object(o + 1).Typ = Bonus(w): Object(o + 1).Time = 50 Object(o + 1).x = Block(B).x * 16: Object(o + 1).y = -8 + (Block(B).y * 16) END IF END IF END IF CASE SMOVINGDOWN IF Cel(Block(B).x, Block(B).y + 1) < 1 THEN Cel(Block(B).x, Block(B).y) = 0: Block(B).y = Block(B).y + 1 Cel(Block(B).x, Block(B).y) = SPECIALBLOCK FOR nb = 1 TO 170 IF Block(nb).x = Block(B).x AND Block(nb).y = Block(B).y AND nb <> B THEN Block(nb).Status = 0: EXIT FOR NEXT nb PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), SBlock&, PSET Block(B).JustMoved = FALSE ELSE IF Block(B).JustMoved = FALSE THEN Block(B).Status = SPECIALBLOCK PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), SBlock&, PSET ELSE FOR o = 1 TO 60 IF Object(o).Typ = 0 AND Object(o + 1).Typ = 0 THEN EXIT FOR NEXT o Player(Block(B).MovedBy).Score = Player(Block(B).MovedBy).Score + (10 * Multi#): PrintStatBar Object(o).Typ = -3: Object(o).Time = 1: Object(o).Alone = FALSE Object(o).x = Block(B).x * 16: Object(o).y = -8 + (Block(B).y * 16) Block(B).Status = NONE: Cel(Block(B).x, Block(B).y) = 0 PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), Null&, PSET RANDOMIZE TIMER m = INT(RND(1) * 3) + 1 IF m = 1 THEN w = INT(RND(1) * 20) + 1 IF Bonus(w) = 15 THEN Bonus(w) = 14 Object(o + 1).Typ = Bonus(w): Object(o + 1).Time = 50 Object(o + 1).x = Block(B).x * 16: Object(o + 1).y = -8 + (Block(B).y * 16) END IF END IF END IF CASE NMOVINGRIGHT IF Cel(Block(B).x + 1, Block(B).y) < 1 THEN Cel(Block(B).x, Block(B).y) = 0: Block(B).x = Block(B).x + 1 Cel(Block(B).x, Block(B).y) = NORMALBLOCK FOR nb = 1 TO 170 IF Block(nb).x = Block(B).x AND Block(nb).y = Block(B).y AND nb <> B THEN Block(nb).Status = 0: EXIT FOR NEXT nb PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), NBlock&, PSET Block(B).JustMoved = FALSE ELSE IF Block(B).JustMoved = FALSE THEN Block(B).Status = NORMALBLOCK PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), NBlock&, PSET ELSE FOR o = 1 TO 60 IF Object(o).Typ = 0 AND Object(o + 1).Typ = 0 THEN EXIT FOR NEXT o Player(Block(B).MovedBy).Score = Player(Block(B).MovedBy).Score + (10 * Multi#): PrintStatBar Object(o).Typ = -3: Object(o).Time = 1: Object(o).Alone = FALSE Object(o).x = Block(B).x * 16: Object(o).y = -8 + (Block(B).y * 16) Block(B).Status = NONE: Cel(Block(B).x, Block(B).y) = 0 PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), Null&, PSET RANDOMIZE TIMER m = INT(RND(1) * 3) + 1 IF m = 1 THEN w = INT(RND(1) * 20) + 1 IF Bonus(w) = 15 THEN Bonus(w) = 14 Object(o + 1).Typ = Bonus(w): Object(o + 1).Time = 50 Object(o + 1).x = Block(B).x * 16: Object(o + 1).y = -8 + (Block(B).y * 16) END IF END IF END IF CASE SMOVINGRIGHT IF Cel(Block(B).x + 1, Block(B).y) < 1 THEN Cel(Block(B).x, Block(B).y) = 0: Block(B).x = Block(B).x + 1 Cel(Block(B).x, Block(B).y) = SPECIALBLOCK FOR nb = 1 TO 170 IF Block(nb).x = Block(B).x AND Block(nb).y = Block(B).y AND nb <> B THEN Block(nb).Status = 0: EXIT FOR NEXT nb PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), SBlock&, PSET Block(B).JustMoved = FALSE ELSE IF Block(B).JustMoved = FALSE THEN Block(B).Status = SPECIALBLOCK PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), SBlock&, PSET ELSE FOR o = 1 TO 60 IF Object(o).Typ = 0 AND Object(o + 1).Typ = 0 THEN EXIT FOR NEXT o Player(Block(B).MovedBy).Score = Player(Block(B).MovedBy).Score + (10 * Multi#): PrintStatBar Object(o).Typ = -3: Object(o).Time = 1: Object(o).Alone = FALSE Object(o).x = Block(B).x * 16: Object(o).y = -8 + (Block(B).y * 16) Block(B).Status = NONE: Cel(Block(B).x, Block(B).y) = 0 PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), Null&, PSET RANDOMIZE TIMER m = INT(RND(1) * 3) + 1 IF m = 1 THEN w = INT(RND(1) * 20) + 1 IF Bonus(w) = 15 THEN Bonus(w) = 14 Object(o + 1).Typ = Bonus(w): Object(o + 1).Time = 50 Object(o + 1).x = Block(B).x * 16: Object(o + 1).y = -8 + (Block(B).y * 16) END IF END IF END IF CASE NMOVINGUP IF Cel(Block(B).x, Block(B).y - 1) < 1 THEN Cel(Block(B).x, Block(B).y) = 0: Block(B).y = Block(B).y - 1 Cel(Block(B).x, Block(B).y) = NORMALBLOCK FOR nb = 1 TO 170 IF Block(nb).x = Block(B).x AND Block(nb).y = Block(B).y AND nb <> B THEN Block(nb).Status = 0: EXIT FOR NEXT nb PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), NBlock&, PSET Block(B).JustMoved = FALSE ELSE IF Block(B).JustMoved = FALSE THEN Block(B).Status = NORMALBLOCK PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), NBlock&, PSET ELSE FOR o = 1 TO 60 IF Object(o).Typ = 0 AND Object(o + 1).Typ = 0 THEN EXIT FOR NEXT o Player(Block(B).MovedBy).Score = Player(Block(B).MovedBy).Score + (10 * Multi#): PrintStatBar Object(o).Typ = -3: Object(o).Time = 1: Object(o).Alone = FALSE Object(o).x = Block(B).x * 16: Object(o).y = -8 + (Block(B).y * 16) Block(B).Status = NONE: Cel(Block(B).x, Block(B).y) = 0 PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), Null&, PSET RANDOMIZE TIMER m = INT(RND(1) * 3) + 1 IF m = 1 THEN w = INT(RND(1) * 20) + 1 IF Bonus(w) = 15 THEN Bonus(w) = 14 Object(o + 1).Typ = Bonus(w): Object(o + 1).Time = 50 Object(o + 1).x = Block(B).x * 16: Object(o + 1).y = -8 + (Block(B).y * 16) END IF END IF END IF CASE SMOVINGUP IF Cel(Block(B).x, Block(B).y - 1) < 1 THEN Cel(Block(B).x, Block(B).y) = 0: Block(B).y = Block(B).y - 1 Cel(Block(B).x, Block(B).y) = SPECIALBLOCK FOR nb = 1 TO 170 IF Block(nb).x = Block(B).x AND Block(nb).y = Block(B).y AND nb <> B THEN Block(nb).Status = 0: EXIT FOR NEXT nb PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), SBlock&, PSET Block(B).JustMoved = FALSE ELSE IF Block(B).JustMoved = FALSE THEN Block(B).Status = SPECIALBLOCK PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), SBlock&, PSET ELSE FOR o = 1 TO 60 IF Object(o).Typ = 0 AND Object(o + 1).Typ = 0 THEN EXIT FOR NEXT o Player(Block(B).MovedBy).Score = Player(Block(B).MovedBy).Score + (10 * Multi#): PrintStatBar Object(o).Typ = -3: Object(o).Time = 1: Object(o).Alone = FALSE Object(o).x = Block(B).x * 16: Object(o).y = -8 + (Block(B).y * 16) Block(B).Status = NONE: Cel(Block(B).x, Block(B).y) = 0 PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), Null&, PSET RANDOMIZE TIMER m = INT(RND(1) * 3) + 1 IF m = 1 THEN w = INT(RND(1) * 20) + 1 IF Bonus(w) = 15 THEN Bonus(w) = 14 Object(o + 1).Typ = Bonus(w): Object(o + 1).Time = 50 Object(o + 1).x = Block(B).x * 16: Object(o + 1).y = -8 + (Block(B).y * 16) END IF END IF END IF CASE NMOVINGLEFT IF Cel(Block(B).x - 1, Block(B).y) < 1 THEN Cel(Block(B).x, Block(B).y) = 0: Block(B).x = Block(B).x - 1 Cel(Block(B).x, Block(B).y) = NORMALBLOCK FOR nb = 1 TO 170 IF Block(nb).x = Block(B).x AND Block(nb).y = Block(B).y AND nb <> B THEN Block(nb).Status = 0: EXIT FOR NEXT nb PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), NBlock&, PSET Block(B).JustMoved = FALSE ELSE IF Block(B).JustMoved = FALSE THEN Block(B).Status = NORMALBLOCK PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), NBlock&, PSET ELSE FOR o = 1 TO 60 IF Object(o).Typ = 0 AND Object(o + 1).Typ = 0 THEN EXIT FOR NEXT o Player(Block(B).MovedBy).Score = Player(Block(B).MovedBy).Score + (10 * Multi#): PrintStatBar Object(o).Typ = -3: Object(o).Time = 1: Object(o).Alone = FALSE Object(o).x = Block(B).x * 16: Object(o).y = -8 + (Block(B).y * 16) Block(B).Status = NONE: Cel(Block(B).x, Block(B).y) = 0 PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), Null&, PSET RANDOMIZE TIMER m = INT(RND(1) * 3) + 1 IF m = 1 THEN w = INT(RND(1) * 20) + 1 IF Bonus(w) = 15 THEN Bonus(w) = 14 Object(o + 1).Typ = Bonus(w): Object(o + 1).Time = 50 Object(o + 1).x = Block(B).x * 16: Object(o + 1).y = -8 + (Block(B).y * 16) END IF END IF END IF CASE SMOVINGLEFT IF Cel(Block(B).x - 1, Block(B).y) < 1 THEN Cel(Block(B).x, Block(B).y) = 0: Block(B).x = Block(B).x - 1 Cel(Block(B).x, Block(B).y) = SPECIALBLOCK FOR nb = 1 TO 170 IF Block(nb).x = Block(B).x AND Block(nb).y = Block(B).y AND nb <> B THEN Block(nb).Status = 0: EXIT FOR NEXT nb PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), SBlock&, PSET Block(B).JustMoved = FALSE ELSE IF Block(B).JustMoved = FALSE THEN Block(B).Status = SPECIALBLOCK PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), SBlock&, PSET ELSE FOR o = 1 TO 60 IF Object(o).Typ = 0 AND Object(o + 1).Typ = 0 THEN EXIT FOR NEXT o Player(Block(B).MovedBy).Score = Player(Block(B).MovedBy).Score + (10 * Multi#): PrintStatBar Object(o).Typ = -3: Object(o).Time = 1: Object(o).Alone = FALSE Object(o).x = Block(B).x * 16: Object(o).y = -8 + (Block(B).y * 16) Block(B).Status = NONE: Cel(Block(B).x, Block(B).y) = 0 PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), Null&, PSET RANDOMIZE TIMER m = INT(RND(1) * 3) + 1 IF m = 1 THEN w = INT(RND(1) * 20) + 1 IF Bonus(w) = 15 THEN Bonus(w) = 14 Object(o + 1).Typ = Bonus(w): Object(o + 1).Time = 50 Object(o + 1).x = Block(B).x * 16: Object(o + 1).y = -8 + (Block(B).y * 16) END IF END IF END IF END SELECT xb = Block(B).x * 16: yb = -8 + (Block(B).y * 16) FOR e = 1 TO 20 IF Enemy(e).Typ <> 0 THEN IF Enemy(e).x > xb - 16 AND Enemy(e).x < xb + 16 THEN IF Enemy(e).y > yb - 16 AND Enemy(e).y < yb + 16 THEN FOR o = 1 TO 60: IF Object(o).Typ = 0 AND Object(o + 1).Typ = 0 THEN EXIT FOR NEXT o Object(o).Typ = -3: Object(o).Time = 1 Object(o).x = Enemy(e).x: Object(o).y = -8 + Enemy(e).y PUT (Enemy(e).x, -8 + Enemy(e).y), Null&, PSET IF Enemy(e).Typ = 3 AND Enemy(e).Flag3 <> 0 THEN PUT (Enemy(e).Flag1, -8 + Enemy(e).Flag2), Null&, PSET Object(o + 1).Typ = (Value(Enemy(e).Typ) * Multi#): Object(o + 1).Time = 50 Object(o + 1).x = Enemy(e).x: Object(o + 1).y = -8 + Enemy(e).y NumEnemy = NumEnemy - 1 Player(Block(B).MovedBy).Score = Player(Block(B).MovedBy).Score + (Value(Enemy(e).Typ) * Multi#) Enemy(e).Typ = 0: PrintStatBar END IF END IF END IF NEXT e FOR u = 1 TO NumPlayer IF Player(u).x > xb - 16 AND Player(u).x < xb + 16 THEN IF -8 + Player(u).y > yb - 16 AND -8 + Player(u).y < yb + 16 THEN KillPlayer u Player(u).Lives = Player(u).Lives - 1 Killed = TRUE: PrintStatBar END IF END IF NEXT u CASE FIXEDBLOCK PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), FBlock&, PSET CASE NORMALBLOCK PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), NBlock&, PSET CASE SPECIALBLOCK PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), SBlock&, PSET IF Multi# = 1 THEN IF Cel(Block(B).x + 1, Block(B).y) = SPECIALBLOCK THEN Multi# = 2 IF Cel(Block(B).x - 1, Block(B).y) = SPECIALBLOCK THEN Multi# = 2 IF Cel(Block(B).x, Block(B).y + 1) = SPECIALBLOCK THEN Multi# = 2 IF Cel(Block(B).x, Block(B).y - 1) = SPECIALBLOCK THEN Multi# = 2 END IF IF Multi# = 2 THEN IF (Cel(Block(B).x, Block(B).y + 1) = SPECIALBLOCK) AND (Cel(Block(B).x, Block(B).y - 1) = SPECIALBLOCK) THEN Multi# = 3 IF (Cel(Block(B).x + 1, Block(B).y) = SPECIALBLOCK) AND (Cel(Block(B).x - 1, Block(B).y) = SPECIALBLOCK) THEN Multi# = 3 END IF CASE WEB PUT (Block(B).x * 16, -8 + (Block(B).y * 16)), Spider&(1600), PSET END SELECT END IF NEXT B END SUB SUB CheckObjects FOR o = 1 TO 60 IF Object(o).Typ <> 0 THEN Object(o).Time = Object(o).Time - 1 SELECT CASE Object(o).Typ CASE -7 PUT (Object(o).x, Object(o).y), Disapp&(0), PSET IF Object(o).Time = 0 THEN Object(o).Typ = -6: Object(o).Time = 3 CASE -6 PUT (Object(o).x, Object(o).y), Disapp&(100), PSET IF Object(o).Time = 0 THEN Object(o).Typ = -5: Object(o).Time = 3 CASE -5 PUT (Object(o).x, Object(o).y), Disapp&(200), PSET IF Object(o).Time = 0 THEN Object(o).Typ = -4: Object(o).Time = 3 CASE -4 PUT (Object(o).x, Object(o).y), Disapp&(300), PSET IF Object(o).Time = 0 THEN Object(o).Typ = 0: PUT (Object(o).x, Object(o).y), Null&, PSET CASE -3 PUT (Object(o).x, Object(o).y), Expl&(0), PSET IF Object(o).Time = 0 THEN Object(o).Typ = -2: Object(o).Time = 1 CASE -2 PUT (Object(o).x, Object(o).y), Expl&(100), PSET IF Object(o).Time = 0 THEN Object(o).Typ = -1: Object(o).Time = 1 CASE -1 PUT (Object(o).x, Object(o).y), Expl&(200), PSET IF Object(o).Time = 0 THEN Object(o).Typ = 0: PUT (Object(o).x, Object(o).y), Null&, PSET CASE 1 TO 27 PUT (Object(o).x, Object(o).y), Obj&((Object(o).Typ - 1) * 100), PSET FOR p = 1 TO NumPlayer IF Object(o).x > Player(p).x - 16 AND Object(o).x < Player(p).x + 16 THEN IF Object(o).y > Player(p).y - 24 AND Object(o).y < Player(p).y + 8 THEN SELECT CASE Object(o).Typ CASE 1 TO 9 IF Object(o).Alone = TRUE THEN Object(o).Alone = FALSE: BonusAlone = FALSE Player(p).Score = Player(p).Score + ((Object(o).Typ * 100) * Multi#) PrintStatBar Object(o).Typ = (Object(o).Typ * 100) * Multi# Object(o).Time = 50 CASE 10 TO 12 IF Object(o).Alone = TRUE THEN Object(o).Alone = FALSE: BonusAlone = FALSE Player(p).Score = Player(p).Score + ((1000 + ((Object(o).Typ - 10) * 500)) * Multi#) PrintStatBar Object(o).Typ = ((1000 + ((Object(o).Typ - 10) * 500)) * Multi#): Object(o).Time = 50 CASE 13 Player(p).Score = Player(p).Score + (500 * Multi#) PrintStatBar Object(o).Typ = (500 * Multi#): Object(o).Time = 50 Player(p).Cutter = TRUE PUT ((304 * (p - 1)), 8), CutHole&, PSET PUT ((304 * (p - 1)), 8), Obj&(1200), XOR CASE 14 RANDOMIZE TIMER m = INT(RND(1) * 4) + 1 SELECT CASE m CASE 1 Player(p).Score = Player(p).Score + (3000 * Multi#) PrintStatBar Object(o).Typ = (3000 * Multi#): Object(o).Time = 50 CASE 2 RANDOMIZE TIMER g = INT(RND(1) * 5) + 1 Change = g: NumChange = 0 FOR r = 1 TO 20 IF Enemy(r).Typ <> 0 THEN Enemy(r).Changed = FALSE: NumChange = NumChange + 1 END IF NEXT r Object(o).Typ = (50 * Multi#): Object(o).Time = 50 Player(p).Score = Player(p).Score + (50 * Multi#): PrintStatBar CASE 3 Player(p).Spd = 1 Object(o).Typ = (50 * Multi#): Object(o).Time = 50 Player(p).Score = Player(p).Score + (50 * Multi#): PrintStatBar CASE 4 Player(p).Lives = Player(p).Lives + 1 Object(o).Typ = (500 * Multi#): Object(o).Time = 50 Player(p).Score = Player(p).Score + (500 * Multi#): PrintStatBar END SELECT CASE 15 GameMode = POTION: NumEnemy = 1: Pass = -1 FOR f = 1 TO 170: IF Block(f).Status <> 0 THEN Block(f).Status = FIXEDBLOCK: PUT (Block(f).x * 16, -8 + (Block(f).y * 16)), FBlock&, PSET NEXT f FOR f = 1 TO 20: Enemy(f).Typ = 0: NEXT f FOR f = 1 TO 60: Object(f).Typ = 0: NEXT f PotNum = 0 FOR v = 1 TO 12: FOR vv = 1 TO 18 IF Cel(vv, v) = 0 THEN PUT (vv * 16, -8 + (v * 16)), Null&, PSET RANDOMIZE TIMER * TimeLeft g = INT(RND(1) * 4) + 1 IF g = 1 AND PotNum < 50 THEN PotNum = PotNum + 1 Object(PotNum).Typ = 21: Object(PotNum).Time = -1 Object(PotNum).x = vv * 16: Object(PotNum).y = -8 + (v * 16) END IF END IF NEXT vv, v TimeLeft = PotNum + (PotNum / 8) Player(1).Special = 0: Player(2).Special = 0 CASE 16 Player(p).Score = Player(p).Score + (500 * Multi#) PrintStatBar Object(o).Typ = (500 * Multi#): Object(o).Time = 50 TimeLeft = TimeLeft + 10 CASE 17 FOR w = 1 TO 20 IF Enemy(w).Typ <> 0 THEN Enemy(w).Typ = 0 FOR j = 1 TO 60: IF Object(j).Typ = 0 THEN EXIT FOR NEXT j Object(j).Typ = -3: Object(j).Time = 3 Object(j).x = Enemy(w).x: Object(j).y = -8 + Enemy(w).y END IF NEXT w NumEnemy = 0 Player(p).Score = Player(p).Score + (500 * Multi#) Object(o).Typ = (500 * Multi#): Object(o).Time = 50 CASE 18 Freezed = 500 Player(p).Score = Player(p).Score + (1000 * Multi#) PrintStatBar Object(o).Typ = (500 * Multi#): Object(o).Time = 50 CASE 19 Pass = 1: Message "YOU ENTERED!": Level = Level + INT(RND(1) * 5) CASE 20 Player(p).Lives = Player(p).Lives + 1 Player(p).Score = Player(p).Score + (500 * Multi#) PrintStatBar Object(o).Typ = (500 * Multi#): Object(o).Time = 50 CASE 21 Player(p).Special = Player(p).Special + 1 Object(o).Typ = 200: Object(o).Time = 50 PotNum = PotNum - 1: IF PotNum = 0 THEN Pass = 1 CASE 22 TO 26 Player(p).Score = Player(p).Score + (300 * Multi#) PrintStatBar SELECT CASE Object(o).Typ CASE 22 IF Player(p).BonusE <> TRUE THEN Player(p).BonusE = TRUE: Player(p).Bonus = Player(p).Bonus + 1 CASE 23 IF Player(p).BonusX <> TRUE THEN Player(p).BonusX = TRUE: Player(p).Bonus = Player(p).Bonus + 1 CASE 24 IF Player(p).BonusT <> TRUE THEN Player(p).BonusT = TRUE: Player(p).Bonus = Player(p).Bonus + 1 CASE 25 IF Player(p).BonusR <> TRUE THEN Player(p).BonusR = TRUE: Player(p).Bonus = Player(p).Bonus + 1 CASE 26 IF Player(p).BonusA <> TRUE THEN Player(p).BonusA = TRUE: Player(p).Bonus = Player(p).Bonus + 1 END SELECT PUT ((p - 1) * 304, 64 + ((Object(o).Typ - 22) * 16)), Hole&, PSET PUT ((p - 1) * 304, 64 + ((Object(o).Typ - 22) * 16)), Obj&((Object(o).Typ - 1) * 100), XOR IF Player(p).Bonus = 5 THEN Player(p).Bonus = 0 Player(p).BonusE = FALSE Player(p).BonusX = FALSE Player(p).BonusT = FALSE Player(p).BonusR = FALSE Player(p).BonusA = FALSE Player(p).Lives = Player(p).Lives + 1: PrintStatBar FOR Z = 0 TO 11: PUT ((p - 1) * 304, 8 + (Z * 16)), Wall&, PSET: NEXT Z END IF Object(o).Typ = 300: Object(o).Time = 50 CASE 27 RANDOMIZE TIMER ty = INT(RND(1) * 12) + 1 FOR bo = 1 TO 15 FOR sel = 1 TO 60 IF Object(sel).Typ = 0 THEN Object(sel).Typ = ty: Object(sel).Time = 500 DO RANDOMIZE TIMER xo = INT(RND(1) * 18) + 1: yo = INT(RND(1) * 12) + 1 IF Cel(xo, yo) = 0 THEN EXIT DO LOOP Object(sel).x = xo * 16: Object(sel).y = -8 + (yo * 16) EXIT FOR END IF NEXT sel NEXT bo Object(o).Typ = 0: PUT (Object(o).x, Object(o).y), Null&, PSET END SELECT END IF END IF NEXT p IF Object(o).Time = 0 THEN Object(o).Typ = -7: Object(o).Time = 3 CASE IS > 30 PrintValue Object(o).x, Object(o).y, Object(o).Typ IF Object(o).Time = 0 THEN Object(o).Typ = 0: PUT (Object(o).x, Object(o).y), Null&, PSET END SELECT END IF NEXT o END SUB SUB Delay (sbDT!) IF sbDT! = 0! THEN EXIT SUB sbstart! = TIMER DO WHILE TIMER <= (sbstart! + sbDT!): LOOP END SUB SUB DrawScreen FOR i = 1 TO 18: FOR ii = 1 TO 12 SELECT CASE Cel(i, ii) CASE WEB: PUT (i * 16, -8 + (ii * 16)), Spider&(1600), PSET CASE FIXEDBLOCK: PUT (i * 16, -8 + (ii * 16)), FBlock&, PSET CASE NORMALBLOCK: PUT (i * 16, -8 + (ii * 16)), NBlock&, PSET CASE SPECIALBLOCK: PUT (i * 16, -8 + (ii * 16)), SBlock&, PSET END SELECT NEXT ii, i END SUB SUB GetSprites CLS : FOR i = 0 TO 255: PALETTE i, 0: NEXT i DEF SEG = &HA000: BLOAD "wetspot.p13", 0 FOR i = 0 TO 1: FOR ii = 0 TO 19 GET (ii * 16, i * 16)-((ii * 16) + 15, (i * 16) + 15), Crab&((2000 * i) + (100 * ii)) NEXT ii, i FOR i = 0 TO 2: GET (i * 16, 32)-((i * 16) + 15, 47), Expl&(i * 100): NEXT i FOR i = 0 TO 4: GET ((i * 16) + 48, 32)-((i * 16) + 63, 47), Obj&((i * 100) + 2100): NEXT i GET (128, 32)-(143, 47), Wall&: GET (144, 32)-(159, 47), Hole& GET (304, 32)-(319, 47), CutHole& FOR i = 0 TO 1: GET (160 + (i * 8), 32)-(167 + (i * 8), 39), Life&(i * 20): NEXT i FOR i = 0 TO 9: GET (177 + (i * 4), 32)-(180 + (i * 4), 35), Number&(i * 10): NEXT i GET (160, 40)-(167, 47), Clock&: GET (168, 40)-(175, 47), Flag& FOR i = 0 TO 3: GET (224 + (i * 16), 32)-(239 + (i * 16), 47), Disapp&(i * 100): NEXT i GET (288, 32)-(303, 47), Obj&(2600) FOR i = 0 TO 44: GET (i * 7, 48)-((i * 7) + 6, 55), Char&(i * 20): NEXT i GET (0, 190)-(6, 197), Char&(900): GET (0, 180)-(15, 195), Null& FOR i = 0 TO 19: GET (i * 16, 56)-((i * 16) + 15, 71), Obj&(i * 100): NEXT i FOR i = 0 TO 5: GET (i * 16, 72)-((i * 16) + 15, 87), Ball&(i * 100): NEXT i FOR i = 0 TO 3: GET (96 + (i * 16), 72)-(111 + (i * 16), 87), Ghost&(i * 100): NEXT i FOR i = 0 TO 9: GET (160 + (i * 16), 72)-(175 + (i * 16), 87), Slug&(i * 100): NEXT i FOR i = 0 TO 15: GET (i * 16, 88)-((i * 16) + 15, 103), Robot&(i * 100): NEXT i FOR i = 0 TO 15: GET (i * 16, 104)-((i * 16) + 15, 119), Worm&(i * 100): NEXT i FOR i = 0 TO 19: GET (i * 16, 120)-((i * 16) + 15, 135), Putty&(i * 100): NEXT i FOR i = 0 TO 18: GET (i * 16, 136)-((i * 16) + 15, 151), Spider&(i * 100): NEXT i FOR i = 0 TO 11: GET (i * 16, 152)-((i * 16) + 15, 167), Shadow&(i * 100): NEXT i CLS : PALETTE END SUB SUB Intro ' Sorry, but I haven't so much time to do an Intro for this game !!! END SUB SUB KillPlayer (num) 'TIMER OFF PUT (Player(num).x, -8 + Player(num).y), Crab&(((num - 1) * 2000) + 1900), PSET Delay .08 FOR q = 0 TO 2 PUT (Player(num).x, -8 + Player(num).y), Expl&(q * 100), PSET Delay .08 NEXT q PUT (Player(num).x, -8 + Player(num).y), Null&, PSET END SUB SUB LoadLevel IF Level > MaxLevel THEN SCREEN 0: WIDTH 80 PRINT "WetSpot v0.9" PRINT "(C) by Angelo Mottola soft 1996" PRINT : PRINT "Sorry, this demo version supports only" + STR$(MaxLevel) + " levels" PRINT : PRINT "Final release will include:" PRINT " - 100 levels (I hope so...)" PRINT " - 8 different enemies" PRINT " - Sound Blaster Music and sound effects" PRINT " - More and more fun !!" PRINT : PRINT "Coming soon..." PRINT : END END IF CLS : FOR p = 0 TO 255: PALETTE p, 0: NEXT p DEF SEG = &HA000: BLOAD "level" + LTRIM$(STR$(Level)) + ".p13", 0 GET (0, 0)-(15, 15), FBlock&: GET (16, 0)-(31, 15), NBlock& GET (32, 0)-(47, 15), SBlock&: GET (68, 0)-(83, 15), Obj&(2000) FOR i = 1 TO 18: FOR ii = 1 TO 12: Cel(i, ii) = 0: NEXT ii, i NumBlock = 0: NumEnemy = 0 FOR i = 1 TO 170: Block(i).Status = INACTIVE: NEXT i FOR i = 1 TO 20: Enemy(i).Typ = 0: NEXT i FOR i = 1 TO 60: Object(i).Typ = 0: NEXT i FOR i = 1 TO 18: FOR ii = 1 TO 12 SELECT CASE POINT(47 + i, ii - 1) CASE 1 Cel(i, ii) = FIXEDBLOCK: NumBlock = NumBlock + 1 Block(NumBlock).Status = FIXEDBLOCK Block(NumBlock).x = i: Block(NumBlock).y = ii CASE 2 Cel(i, ii) = NORMALBLOCK: NumBlock = NumBlock + 1 Block(NumBlock).Status = NORMALBLOCK Block(NumBlock).x = i: Block(NumBlock).y = ii CASE 3 Cel(i, ii) = SPECIALBLOCK: NumBlock = NumBlock + 1 Block(NumBlock).Status = SPECIALBLOCK Block(NumBlock).x = i: Block(NumBlock).y = ii CASE 4 Player(1).x = i * 16: Player(1).y = ii * 16 CASE 5 Player(2).x = i * 16: Player(2).y = ii * 16 CASE 6, 7, 8, 9, 10, 11, 12, 13 NumEnemy = NumEnemy + 1 Enemy(NumEnemy).Typ = POINT(47 + i, ii - 1) - 5 Enemy(NumEnemy).dir = 1: Enemy(NumEnemy).x = i * 16: Enemy(NumEnemy).y = ii * 16 SELECT CASE POINT(47 + i, ii - 1) CASE 6: Enemy(NumEnemy).Flag1 = 1: Enemy(NumEnemy).dir = 2 CASE 7: Enemy(NumEnemy).Flag1 = 1: Enemy(NumEnemy).Flag2 = INT(RND(1) * NumPlayer) + 1 CASE 8: Enemy(NumEnemy).Flag3 = 0 CASE 9: Enemy(NumEnemy).Flag1 = 1: Enemy(NumEnemy).Flag2 = FALSE: Enemy(NumEnemy).Flag3 = 1 CASE 10: Enemy(NumEnemy).Flag1 = 2: Enemy(NumEnemy).Flag2 = 1: Enemy(NumEnemy).Flag3 = 0 CASE 11: Enemy(NumEnemy).Flag1 = 1 CASE 12: Enemy(NumEnemy).Flag1 = 2 CASE 13: Enemy(NumEnemy).Flag1 = 4 END SELECT CASE 14 Cel(i, ii) = WEB: NumBlock = NumBlock + 1 Block(NumBlock).Status = WEB Block(NumBlock).x = i: Block(NumBlock).y = ii END SELECT NEXT ii, i FOR i = 1 TO 20: Bonus(i) = POINT(47 + i, 12): NEXT i CLS PALETTE END SUB SUB MainMenu CLS DEF SEG = &HA000: BLOAD "title.p13", 0 PALETTE Center 58, "BY ANGELO MOTTOLA SOFT 1996" Center 82, "VERSION 0.9" Center 103, "PRESS 1 FOR 1 PLAYER GAME" Center 113, "PRESS 2 FOR 2 PLAYERS GAME" Center 123, "PRESS ESC TO QUIT GAME!" Center 145, "- FINAL VERSION COMING SOON !! -" DO k$ = INKEY$ IF k$ = "1" THEN NumPlayer = 1: EXIT DO IF k$ = "2" THEN NumPlayer = 2: EXIT DO IF k$ = CHR$(27) THEN NumPlayer = 0: EXIT DO LOOP IF NumPlayer = 0 THEN SCREEN 0: WIDTH 80 PRINT "WetSpot v0.9" PRINT "(C) by Angelo Mottola soft 1996" PRINT : PRINT "Final version coming soon!!" PRINT : END END IF CLS END SUB SUB Message (t$) FOR i = 192 TO 96 STEP -4 GET (0, i)-(319, i + 7), Box& Center i, t$ FOR t = 0 TO 5000: NEXT t PUT (0, i), Box&, PSET NEXT i GET (0, 96)-(319, 103), Box& Center 96, t$ q$ = INKEY$: WHILE (q$ <> CHR$(13) AND q$ <> "\"): q$ = INKEY$: WEND PUT (0, 96), Box&, PSET FOR i = 96 TO 8 STEP -4 GET (0, i)-(319, i + 7), Box& Center i, t$ FOR t = 0 TO 5000: NEXT t PUT (0, i), Box&, PSET NEXT i END SUB SUB MoveEnemies FOR e = 1 TO 20 IF Enemy(e).Typ <> 0 THEN IF Change <> FALSE THEN IF Enemy(e).Changed = FALSE THEN IF Enemy(e).x MOD 16 = 0 AND Enemy(e).y MOD 16 = 0 THEN Enemy(e).Changed = TRUE: Enemy(e).Typ = Change NumChange = NumChange - 1 SELECT CASE Change CASE 1 Enemy(e).Flag1 = 1 IF Enemy(e).dir = 1 OR Enemy(e).dir = 2 THEN Enemy(e).Flag2 = 1 ELSE Enemy(e).Flag2 = -1 CASE 2 Enemy(e).Flag1 = 1: Enemy(e).Flag2 = INT(RND(1) * NumPlayer) + 1 CASE 3 Enemy(e).Flag3 = 0 CASE 4 Enemy(e).Flag1 = 1: Enemy(e).Flag2 = FALSE: Enemy(e).Flag3 = 1 CASE 5 Enemy(e).Flag1 = 2: Enemy(e).Flag2 = 1: Enemy(e).Flag3 = 0 END SELECT IF NumChange = 0 THEN Change = FALSE END IF END IF END IF SELECT CASE Enemy(e).Typ CASE 1 IF Freezed = FALSE THEN IF Enemy(e).x MOD 16 = 0 AND Enemy(e).y MOD 16 = 0 THEN Enemy(e).dir = 0 FOR h = 1 TO 20 RANDOMIZE TIMER * TimeLeft d = INT(RND(1) * 4) + 1 IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) < 1 THEN Enemy(e).dir = d: Enemy(e).Flag1 = 1 IF Enemy(e).dir = 1 OR Enemy(e).dir = 2 THEN Enemy(e).Flag2 = 1 ELSE Enemy(e).Flag2 = -1 EXIT FOR END IF d = 0 NEXT h END IF PUT (Enemy(e).x, -8 + Enemy(e).y), Null&, PSET Enemy(e).x = Enemy(e).x + xA(Enemy(e).dir) Enemy(e).y = Enemy(e).y + yA(Enemy(e).dir) Enemy(e).Flag1 = Enemy(e).Flag1 + Enemy(e).Flag2 IF Enemy(e).Flag1 = 0 THEN Enemy(e).Flag1 = 8 ELSEIF Enemy(e).Flag1 = 9 THEN Enemy(e).Flag1 = 1 END IF END IF IF Enemy(e).dir = 0 THEN Enemy(e).dir = 2 IF Enemy(e).dir = 1 OR Enemy(e).dir = 3 THEN h = 0 ELSE h = 1 PUT (Enemy(e).x, -8 + Enemy(e).y), Worm&((h * 800) + ((Enemy(e).Flag1 - 1) * 100)), PSET CASE 2 IF Freezed = FALSE THEN IF Enemy(e).x MOD 16 = 0 AND Enemy(e).y MOD 16 = 0 THEN RANDOMIZE TIMER * TimeLeft k = INT(RND(1) * 4) + 1 IF k < 4 THEN k = INT(RND(1) * 100) + 1 IF k = 1 THEN Enemy(e).Flag2 = INT(RND(1) * NumPlayer) + 1 IF Player(Enemy(e).Flag2).x < Enemy(e).x THEN d = 4 IF Player(Enemy(e).Flag2).x > Enemy(e).x THEN d = 2 IF (Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) <> 0) THEN IF Player(Enemy(e).Flag2).y < Enemy(e).y THEN d = 3 IF Player(Enemy(e).Flag2).y > Enemy(e).y THEN d = 1 END IF IF Player(Enemy(e).Flag2).x = Enemy(e).x THEN IF Player(Enemy(e).Flag2).y < Enemy(e).y THEN d = 3 IF Player(Enemy(e).Flag2).y > Enemy(e).y THEN d = 1 END IF ELSE d = INT(RND(1) * 4) + 1 END IF IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) <> 0 THEN FOR h = 1 TO 20 RANDOMIZE TIMER * TimeLeft d = INT(RND(1) * 4) + 1 IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) = 0 THEN EXIT FOR END IF d = 0 NEXT h END IF Enemy(e).dir = d END IF PUT (Enemy(e).x, -8 + Enemy(e).y), Null&, PSET Enemy(e).x = Enemy(e).x + (xA(Enemy(e).dir) * 2) Enemy(e).y = Enemy(e).y + (yA(Enemy(e).dir) * 2) Enemy(e).Flag1 = Enemy(e).Flag1 + 1 IF Enemy(e).Flag1 = 5 THEN Enemy(e).Flag1 = 1 END IF IF Enemy(e).dir = 0 THEN Enemy(e).dir = 1 PUT (Enemy(e).x, -8 + Enemy(e).y), Robot&(((Enemy(e).dir - 1) * 400) + ((Enemy(e).Flag1 - 1) * 100)), PSET CASE 3 IF Freezed = FALSE THEN IF Enemy(e).Flag3 > 0 THEN Enemy(e).Flag3 = Enemy(e).Flag3 - 1 IF Enemy(e).Flag3 MOD 2 = 0 THEN PUT (Enemy(e).x, -8 + Enemy(e).y), Ghost&((Enemy(e).dir - 1) * 100), PSET PUT (Enemy(e).Flag1, -8 + Enemy(e).Flag2), Null&, PSET ELSE PUT (Enemy(e).x, -8 + Enemy(e).y), Null&, PSET PUT (Enemy(e).Flag1, -8 + Enemy(e).Flag2), Ghost&((Enemy(e).dir - 1) * 100), PSET END IF ELSE IF Enemy(e).x MOD 16 = 0 AND Enemy(e).y MOD 16 = 0 THEN Enemy(e).dir = 0 IF Cel((Enemy(e).x / 16) + xA(Enemy(e).dir), (Enemy(e).y / 16) + yA(Enemy(e).dir)) < 1 THEN FOR h = 1 TO 20 RANDOMIZE TIMER * TimeLeft d = INT(RND(1) * 4) + 1 IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) < 1 THEN Enemy(e).dir = d EXIT FOR END IF d = 0 NEXT h ELSE RANDOMIZE TIMER * TimeLeft s = INT(RND(1) * 2) + 1 IF s = 1 THEN k = INT(RND(1) * NunmPlayer) + 1 IF Player(k).x < Enemy(e).x THEN d = 4 IF Player(k).x > Enemy(e).x THEN d = 2 IF Player(k).y < Enemy(e).y THEN d = 3 IF Player(k).y > Enemy(e).y THEN d = 1 IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) < 1 THEN FOR h = 1 TO 20 RANDOMIZE TIMER * TimeLeft d = INT(RND(1) * 4) + 1 IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) < 1 THEN Enemy(e).dir = d EXIT FOR END IF NEXT h ELSE Enemy(e).dir = d END IF END IF END IF k = INT(RND(1) * 25) + 1 IF k = 1 THEN DO RANDOMIZE TIMER * TimeLeft xc = INT(RND(1) * 18) + 1: yc = INT(RND(1) * 12) + 1 IF Cel(xc, yc) = 0 THEN EXIT DO LOOP Enemy(e).Flag1 = Enemy(e).x: Enemy(e).Flag2 = Enemy(e).y Enemy(e).Flag3 = 50: Enemy(e).dir = INT(RND(1) * 4) + 1 Enemy(e).x = xc * 16: Enemy(e).y = yc * 16 END IF END IF IF Enemy(e).Flag3 = 0 THEN PUT (Enemy(e).x, -8 + Enemy(e).y), Null&, PSET Enemy(e).x = Enemy(e).x + xA(Enemy(e).dir) Enemy(e).y = Enemy(e).y + yA(Enemy(e).dir) IF Enemy(e).dir = 0 THEN Enemy(e).dir = 1 PUT (Enemy(e).x, -8 + Enemy(e).y), Ghost&((Enemy(e).dir - 1) * 100), PSET END IF END IF ELSE PUT (Enemy(e).x, -8 + Enemy(e).y), Ghost&((Enemy(e).dir - 1) * 100), PSET END IF CASE 4 IF Freezed = FALSE THEN IF Enemy(e).Flag2 > FALSE THEN Enemy(e).Flag2 = Enemy(e).Flag2 - 1 IF Enemy(e).Flag2 = 5 THEN FOR k = 1 TO 4 Find = FALSE FOR h = 1 TO 20 IF Enemy(h).Typ < 1 THEN Find = TRUE: EXIT FOR NEXT h IF Find = TRUE THEN IF Cel((Enemy(e).x / 16) + xA(k), (Enemy(e).y / 16) + yA(k)) = 0 THEN Enemy(h).Typ = 9: Enemy(h).dir = k Enemy(h).x = Enemy(e).x + (xA(k) * 16) Enemy(h).y = Enemy(e).y + (yA(k) * 16) END IF END IF NEXT k END IF PUT (Enemy(e).x, -8 + Enemy(e).y), Slug&(800), PSET ELSE IF Enemy(e).x MOD 16 = 0 AND Enemy(e).y MOD 16 = 0 THEN k = INT(RND(1) * 15) + 1 IF k = 1 THEN Enemy(e).Flag2 = 40: Enemy(e).dir = 0 IF k <> 1 THEN IF Cel((Enemy(e).x / 16) + xA(Enemy(e).dir), (Enemy(e).y / 16) + yA(Enemy(e).dir)) <> 0 THEN RANDOMIZE TIMER * TimeLeft s = INT(RND(1) * 2) + 1 IF s = 1 THEN k = INT(RND(1) * NunmPlayer) + 1 IF Player(k).x < Enemy(e).x THEN d = 4 IF Player(k).x > Enemy(e).x THEN d = 2 IF Player(k).y < Enemy(e).y THEN d = 3 IF Player(k).y > Enemy(e).y THEN d = 1 IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) <> 0 THEN FOR h = 1 TO 20 RANDOMIZE TIMER * TimeLeft d = INT(RND(1) * 4) + 1 IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) = 0 THEN Enemy(e).dir = d EXIT FOR ELSE Enemy(e).dir = 0 END IF NEXT h ELSE Enemy(e).dir = d END IF ELSE FOR h = 1 TO 20 RANDOMIZE TIMER * TimeLeft d = INT(RND(1) * 4) + 1 IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) = 0 THEN EXIT FOR ELSE d = 0 END IF NEXT h Enemy(e).dir = d END IF ELSE FOR h = 1 TO 20 RANDOMIZE TIMER * TimeLeft d = INT(RND(1) * 4) + 1 IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) = 0 THEN Enemy(e).dir = d EXIT FOR ELSE d = 0 END IF NEXT h END IF END IF END IF PUT (Enemy(e).x, -8 + Enemy(e).y), Null&, PSET Enemy(e).x = Enemy(e).x + xA(Enemy(e).dir) Enemy(e).y = Enemy(e).y + yA(Enemy(e).dir) Enemy(e).Flag3 = Enemy(e).Flag3 + 1 IF Enemy(e).Flag3 = 20 THEN Enemy(e).Flag3 = 1 IF Enemy(e).Flag3 > 10 THEN j = 1 ELSE j = 0 IF Enemy(e).dir = 0 THEN Enemy(e).dir = 1 PUT (Enemy(e).x, -8 + Enemy(e).y), Slug&(((Enemy(e).dir - 1) * 200) + (j * 100)), PSET IF Enemy(e).dir = 0 THEN Enemy(e).dir = 1 END IF ELSE IF Enemy(e).Flag2 > FALSE THEN PUT (Enemy(e).x, -8 + Enemy(e).y), Slug&(800), PSET ELSE IF Enemy(e).Flag3 > 10 THEN j = 1 ELSE j = 0 PUT (Enemy(e).x, -8 + Enemy(e).y), Slug&(((Enemy(e).dir - 1) * 200) + (j * 100)), PSET END IF END IF CASE 5 IF Freezed = FALSE THEN IF Enemy(e).Flag3 > 0 THEN Enemy(e).Flag3 = Enemy(e).Flag3 - 1 IF Enemy(e).Flag3 MOD 4 = 0 THEN PUT (Enemy(e).x, -8 + Enemy(e).y), Spider&(1200 + ((Enemy(e).dir - 1) * 100)), PSET ELSE PUT (Enemy(e).x, -8 + Enemy(e).y), Spider&(((Enemy(e).dir - 1) * 300) + 100), PSET END IF IF Enemy(e).Flag3 = 0 THEN FOR nb = 1 TO 170 IF Block(nb).Status = 0 THEN EXIT FOR NEXT nb Block(nb).x = Enemy(e).x / 16: Block(nb).y = Enemy(e).y / 16 Block(nb).Status = WEB: Cel(Enemy(e).x / 16, Enemy(e).y / 16) = WEB NumWeb = NumWeb + 1 END IF ELSE IF Enemy(e).x MOD 16 = 0 AND Enemy(e).y MOD 16 = 0 THEN Enemy(e).dir = 0 IF Cel((Enemy(e).x / 16) + xA(Enemy(e).dir), (Enemy(e).y / 16) + yA(Enemy(e).dir)) < 1 THEN FOR h = 1 TO 20 RANDOMIZE TIMER * TimeLeft d = INT(RND(1) * 4) + 1 IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) < 1 THEN Enemy(e).dir = d EXIT FOR END IF d = 0 NEXT h ELSE RANDOMIZE TIMER * TimeLeft s = INT(RND(1) * 4) + 1 IF s = 1 THEN k = INT(RND(1) * NunmPlayer) + 1 IF Player(k).x < Enemy(e).x THEN d = 4 IF Player(k).x > Enemy(e).x THEN d = 2 IF Player(k).y < Enemy(e).y THEN d = 3 IF Player(k).y > Enemy(e).y THEN d = 1 IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) < 1 THEN FOR h = 1 TO 20 RANDOMIZE TIMER * TimeLeft d = INT(RND(1) * 4) + 1 IF Cel((Enemy(e).x / 16) + xA(d), (Enemy(e).y / 16) + yA(d)) < 1 THEN Enemy(e).dir = d EXIT FOR END IF NEXT h ELSE Enemy(e).dir = d END IF END IF END IF k = INT(RND(1) * 20) + 1 IF k = 1 AND Cel(Enemy(e).x / 16, Enemy(e).y / 16) <> WEB THEN IF NumWeb < 11 THEN Enemy(e).Flag3 = 50 END IF END IF IF Enemy(e).Flag3 = 0 THEN PUT (Enemy(e).x, -8 + Enemy(e).y), Null&, PSET Enemy(e).x = Enemy(e).x + xA(Enemy(e).dir) Enemy(e).y = Enemy(e).y + yA(Enemy(e).dir) Enemy(e).Flag1 = Enemy(e).Flag1 + Enemy(e).Flag2 IF Enemy(e).Flag1 <> 2 THEN Enemy(e).Flag2 = -Enemy(e).Flag2 IF Enemy(e).dir = 0 THEN Enemy(e).dir = 1 PUT (Enemy(e).x, -8 + Enemy(e).y), Spider&(((Enemy(e).dir - 1) * 300) + ((Enemy(e).Flag1 - 1) * 100)), PSET END IF END IF ELSE PUT (Enemy(e).x, -8 + Enemy(e).y), Spider&(((Enemy(e).dir - 1) * 300) + ((Enemy(e).Flag1 - 1) * 100)), PSET END IF IF Enemy(e).dir = 0 THEN Enemy(e).dir = 1 CASE 9 IF Freezed = FALSE THEN PUT (Enemy(e).x, -8 + Enemy(e).y), Null&, PSET IF Enemy(e).x MOD 16 = 0 AND Enemy(e).y MOD 16 = 0 THEN IF Cel((Enemy(e).x / 16) + xA(Enemy(e).dir), (Enemy(e).y / 16) + yA(Enemy(e).dir)) < 1 THEN Enemy(e).x = Enemy(e).x + (xA(Enemy(e).dir) * 8) Enemy(e).y = Enemy(e).y + (yA(Enemy(e).dir) * 8) PUT (Enemy(e).x, -8 + Enemy(e).y), Slug&(900), PSET ELSE Enemy(e).Typ = 0 FOR h = 1 TO 60 IF Object(h).Typ = 0 THEN EXIT FOR NEXT h Object(h).Typ = -3: Object(h).Time = 3 Object(h).x = Enemy(e).x Object(h).y = -8 + Enemy(e).y END IF ELSE Enemy(e).x = Enemy(e).x + (xA(Enemy(e).dir) * 8) Enemy(e).y = Enemy(e).y + (yA(Enemy(e).dir) * 8) PUT (Enemy(e).x, -8 + Enemy(e).y), Slug&(900), PSET END IF ELSE PUT (Enemy(e).x, -8 + Enemy(e).y), Slug&(900), PSET END IF END SELECT GoOn = FALSE FOR C = 1 TO NumPlayer IF Enemy(e).x > Player(C).x - 16 AND Enemy(e).x < Player(C).x + 16 THEN IF Enemy(e).y > Player(C).y - 16 AND Enemy(e).y < Player(C).y + 16 THEN IF Enemy(e).Typ = 3 AND Enemy(e).Flag3 <> 0 THEN GoOn = TRUE IF GoOn = FALSE THEN KillPlayer C Killed = TRUE ': TIMER OFF Player(C).Lives = Player(C).Lives - 1: EXIT SUB END IF END IF END IF NEXT C END IF NEXT e END SUB SUB OutText (x, y, t$) FOR i = 1 TO LEN(t$) ChCode = ASC(MID$(t$, i, 1)) SELECT CASE ChCode CASE 65 TO 90: Ch = ChCode - 65 CASE 48 TO 57: Ch = ChCode - 22 CASE 46: Ch = 36 CASE 58: Ch = 37 CASE 44: Ch = 38 CASE 59: Ch = 39 CASE 33: Ch = 40 CASE 63: Ch = 41 CASE 45: Ch = 42 CASE 43: Ch = 43 CASE 95: Ch = 44 CASE 32: Ch = 45 END SELECT PUT (x, y), Char&(Ch * 20), PSET x = x + 7 NEXT i END SUB FUNCTION PlayAgain ' Center 96, "PLAY AGAIN ?" DO k$ = INKEY$: k$ = UCASE$(k$) IF k$ = "Y" THEN PlayAgain = TRUE: EXIT DO IF k$ = "N" THEN PlayAgain = FALSE: EXIT DO LOOP END FUNCTION SUB PlayGame MaxLevel = 21 Level = 1 FOR i = 1 TO 2 Player(i).Score = 0 Player(i).Lives = 3 Player(i).NextLife = 30000 Player(i).BonusE = FALSE Player(i).BonusX = FALSE Player(i).BonusT = FALSE Player(i).BonusR = FALSE Player(i).BonusA = FALSE Player(i).Bonus = 0 Player(i).Cutter = FALSE Player(i).Trapped = FALSE NEXT i IF NumPlayer = 1 THEN Player(2).Lives = 0 AbortGame = FALSE DO LoadLevel FOR i = 0 TO 11: PUT (0, 8 + (i * 16)), Wall&, PSET PUT (304, 8 + (i * 16)), Wall&, PSET: NEXT i IF Player(1).Cutter = TRUE THEN PUT (0, 8), CutHole&, PSET: PUT (0, 8), Obj&(1200), XOR IF Player(2).Cutter = TRUE THEN PUT (304, 8), CutHole&, PSET: PUT (304, 8), Obj&(1200), XOR OutText 0, 0, "1UP": OutText 204, 0, "2UP" PUT (128, 0), Clock&, PSET: PUT (167, 0), Flag&, PSET PrintStatBar DrawScreen FOR i = 1 TO NumPlayer Player(i).dir = 1 Player(i).NextDir = 0 Player(i).Frame = 2 Player(i).FrameDir = 1 Player(i).Action = NONE Player(i).Spd = 2 IF Player(i).BonusE = TRUE THEN PUT ((i - 1) * 304, 64), Hole&, PSET: PUT ((i - 1) * 304, 64), Obj&(2100), XOR IF Player(i).BonusX = TRUE THEN PUT ((i - 1) * 304, 80), Hole&, PSET: PUT ((i - 1) * 304, 80), Obj&(2200), XOR IF Player(i).BonusT = TRUE THEN PUT ((i - 1) * 304, 96), Hole&, PSET: PUT ((i - 1) * 304, 96), Obj&(2300), XOR IF Player(i).BonusR = TRUE THEN PUT ((i - 1) * 304, 112), Hole&, PSET: PUT ((i - 1) * 304, 112), Obj&(2400), XOR IF Player(i).BonusA = TRUE THEN PUT ((i - 1) * 304, 128), Hole&, PSET: PUT ((i - 1) * 304, 128), Obj&(2500), XOR PUT (Player(i).x, -8 + Player(i).y), Crab&(((i - 1) * 2000) + ((Player(i).dir - 1) * 300) + ((Player(i).Frame - 1) * 100)), PSET Player(i).Trapped = FALSE NEXT i FOR i = 1 TO 20 SELECT CASE Enemy(i).Typ CASE 1: PUT (Enemy(i).x, -8 + Enemy(i).y), Worm&(800), PSET CASE 2: PUT (Enemy(i).x, -8 + Enemy(i).y), Robot&(0), PSET CASE 3: PUT (Enemy(i).x, -8 + Enemy(i).y), Ghost&(0), PSET CASE 4: PUT (Enemy(i).x, -8 + Enemy(i).y), Slug&(0), PSET CASE 5: PUT (Enemy(i).x, -8 + Enemy(i).y), Spider&(100), PSET CASE 6: PUT (Enemy(i).x, -8 + Enemy(i).y), Shadow&(0), PSET CASE 7: PUT (Enemy(i).x, -8 + Enemy(i).y), Putty&(100), PSET CASE 8: PUT (Enemy(i).x, -8 + Enemy(i).y), Ball&(300), PSET END SELECT NEXT i TimeLeft = 90: PrintStatBar Message "READY!" Pass = -1: Killed = FALSE GameMode = NORMAL: Freezed = FALSE: Multi# = 1: Killed = FALSE LastTime$ = TIME$: BonusAlone = FALSE: Change = FALSE DO StartT! = TIMER DO: time1! = TIMER: LOOP UNTIL time1! <> time2! time2! = time1! k$ = INKEY$: k$ = UCASE$(k$) SELECT CASE k$ CASE "2" IF Player(1).Action <> FIRE THEN IF Player(1).NextDir = 0 AND Player(1).Action = NONE THEN Player(1).dir = 1: Player(1).NextDir = 1: Player(1).Action = MOVE ELSE Player(1).NextDir = 1: Player(1).Action = MOVE END IF END IF CASE "6" IF Player(1).Action <> FIRE THEN IF Player(1).NextDir = 0 AND Player(1).Action = NONE THEN Player(1).dir = 2: Player(1).NextDir = 2: Player(1).Action = MOVE ELSE Player(1).NextDir = 2: Player(1).Action = MOVE END IF END IF CASE "8" IF Player(1).Action <> FIRE THEN IF Player(1).NextDir = 0 AND Player(1).Action = NONE THEN Player(1).dir = 3: Player(1).NextDir = 3: Player(1).Action = MOVE ELSE Player(1).NextDir = 3: Player(1).Action = MOVE END IF END IF CASE "4" IF Player(1).Action <> FIRE THEN IF Player(1).NextDir = 0 AND Player(1).Action = NONE THEN Player(1).dir = 4: Player(1).NextDir = 4: Player(1).Action = MOVE ELSE Player(1).NextDir = 4: Player(1).Action = MOVE END IF END IF CASE "5": IF Player(1).Action <> FIRE THEN Player(1).NextDir = 0: Player(1).Action = MOVE CASE CHR$(13) IF Player(1).Action = NONE THEN Player(1).Action = FIRE: Player(1).Frame = 1 CASE "X" IF Player(2).Action <> FIRE THEN IF Player(2).NextDir = 0 AND Player(2).Action = NONE THEN Player(2).dir = 1: Player(2).NextDir = 1: Player(2).Action = MOVE ELSE Player(2).NextDir = 1: Player(2).Action = MOVE END IF END IF CASE "D" IF Player(2).Action <> FIRE THEN IF Player(2).NextDir = 0 AND Player(2).Action = NONE THEN Player(2).dir = 2: Player(2).NextDir = 2: Player(2).Action = MOVE ELSE Player(2).NextDir = 2: Player(2).Action = MOVE END IF END IF CASE "W" IF Player(2).Action <> FIRE THEN IF Player(2).NextDir = 0 AND Player(2).Action = NONE THEN Player(2).dir = 3: Player(2).NextDir = 3: Player(2).Action = MOVE ELSE Player(2).NextDir = 3: Player(2).Action = MOVE END IF END IF CASE "A" IF Player(2).Action <> FIRE THEN IF Player(2).NextDir = 0 AND Player(2).Action = NONE THEN Player(2).dir = 4: Player(2).NextDir = 4: Player(2).Action = MOVE ELSE Player(2).NextDir = 4: Player(2).Action = MOVE END IF END IF CASE "S": IF Player(2).Action <> FIRE THEN Player(2).NextDir = 0: Player(2).Action = MOVE CASE "\" IF Player(2).Action = NONE THEN Player(2).Action = FIRE: Player(2).Frame = 1 CASE "P" Message "PAUSE!" CASE CHR$(27): AbortGame = TRUE: EXIT DO END SELECT FOR i = 1 TO NumPlayer IF Player(i).Trapped = FALSE THEN IF Player(i).Action <> NONE THEN PUT (Player(i).x, -8 + Player(i).y), Null&, PSET SELECT CASE Player(i).Action CASE MOVE SELECT CASE Player(i).NextDir CASE 0 IF Player(i).x MOD 16 = 0 AND Player(i).y MOD 16 = 0 THEN Player(i).Action = NONE: Player(i).Frame = 2 END IF CASE 1 IF Player(i).x MOD 16 = 0 AND Player(i).y MOD 16 = 0 THEN IF Cel(Player(i).x / 16, (Player(i).y / 16) + 1) < 1 THEN Player(i).dir = Player(i).NextDir ELSE Player(i).dir = Player(i).NextDir: Player(i).Action = NONE END IF CASE 2 IF Player(i).x MOD 16 = 0 AND Player(i).y MOD 16 = 0 THEN IF Cel((Player(i).x / 16) + 1, Player(i).y / 16) < 1 THEN Player(i).dir = Player(i).NextDir ELSE Player(i).dir = Player(i).NextDir: Player(i).Action = NONE END IF CASE 3 IF Player(i).x MOD 16 = 0 AND Player(i).y MOD 16 = 0 THEN IF Cel(Player(i).x / 16, (Player(i).y / 16) - 1) < 1 THEN Player(i).dir = Player(i).NextDir ELSE Player(i).dir = Player(i).NextDir: Player(i).Action = NONE END IF CASE 4 IF Player(i).x MOD 16 = 0 AND Player(i).y MOD 16 = 0 THEN IF Cel((Player(i).x / 16) - 1, Player(i).y / 16) < 1 THEN Player(i).dir = Player(i).NextDir ELSE Player(i).dir = Player(i).NextDir: Player(i).Action = NONE END IF END SELECT SELECT CASE Player(i).dir CASE 1 IF (Player(i).y) MOD 16 = 0 THEN IF Cel(Player(i).x / 16, ((Player(i).y) / 16) + 1) > 0 THEN Player(i).Action = NONE: Player(i).Frame = 2 END IF IF Player(i).Action = MOVE THEN Player(i).y = Player(i).y + Player(i).Spd Player(i).Frame = Player(i).Frame + Player(i).FrameDir IF Player(i).Frame = 3 OR Player(i).Frame = 1 THEN Player(i).FrameDir = -Player(i).FrameDir END IF CASE 2 IF (Player(i).x) MOD 16 = 0 THEN IF Cel((Player(i).x / 16) + 1, (Player(i).y) / 16) > 0 THEN Player(i).Action = NONE: Player(i).Frame = 2 END IF IF Player(i).Action = MOVE THEN Player(i).x = Player(i).x + Player(i).Spd Player(i).Frame = Player(i).Frame + Player(i).FrameDir IF Player(i).Frame = 3 OR Player(i).Frame = 1 THEN Player(i).FrameDir = -Player(i).FrameDir END IF CASE 3 IF (Player(i).y) MOD 16 = 0 THEN IF Cel(Player(i).x / 16, ((Player(i).y) / 16) - 1) > 0 THEN Player(i).Action = NONE: Player(i).Frame = 2 END IF IF Player(i).Action = MOVE THEN Player(i).y = Player(i).y - Player(i).Spd Player(i).Frame = Player(i).Frame + Player(i).FrameDir IF Player(i).Frame = 3 OR Player(i).Frame = 1 THEN Player(i).FrameDir = -Player(i).FrameDir END IF CASE 4 IF (Player(i).x) MOD 16 = 0 THEN IF Cel((Player(i).x / 16) - 1, (Player(i).y) / 16) > 0 THEN Player(i).Action = NONE: Player(i).Frame = 2 END IF IF Player(i).Action = MOVE THEN Player(i).x = Player(i).x - Player(i).Spd Player(i).Frame = Player(i).Frame + Player(i).FrameDir IF Player(i).Frame = 3 OR Player(i).Frame = 1 THEN Player(i).FrameDir = -Player(i).FrameDir END IF END SELECT PUT (Player(i).x, -8 + Player(i).y), Crab&(((i - 1) * 2000) + ((Player(i).dir - 1) * 300) + ((Player(i).Frame - 1) * 100)), PSET CASE NONE PUT (Player(i).x, -8 + Player(i).y), Crab&(((i - 1) * 2000) + ((Player(i).dir - 1) * 300) + ((Player(i).Frame - 1) * 100)), PSET CASE FIRE SELECT CASE Player(i).Frame CASE 1 PUT (Player(i).x, -8 + Player(i).y), Crab&(((i - 1) * 2000) + ((Player(i).dir - 1) * 300) + 100), PSET Player(i).Frame = Player(i).Frame + 1 CASE 2, 3, 4 PUT (Player(i).x, -8 + Player(i).y), Crab&(((i - 1) * 2000) + 1200 + ((Player(i).dir - 1) * 100)), PSET Player(i).Frame = Player(i).Frame + 1 CASE 5 PUT (Player(i).x, -8 + Player(i).y), Crab&(((i - 1) * 2000) + 1200 + ((Player(i).dir - 1) * 100)), PSET IF Player(i).dir = 1 THEN FOR B = 1 TO 170 IF Block(B).Status = NORMALBLOCK OR Block(B).Status = SPECIALBLOCK THEN IF Block(B).x = Player(i).x / 16 AND Block(B).y = (Player(i).y / 16) + 1 THEN Block(B).Status = NMOVINGDOWN + ((Block(B).Status - 2) * 4) Block(B).JustMoved = TRUE: Block(B).MovedBy = i END IF END IF NEXT B END IF IF Player(i).dir = 2 THEN FOR B = 1 TO 170 IF Block(B).Status = NORMALBLOCK OR Block(B).Status = SPECIALBLOCK THEN IF Block(B).x = (Player(i).x / 16) + 1 AND Block(B).y = Player(i).y / 16 THEN Block(B).Status = NMOVINGRIGHT + ((Block(B).Status - 2) * 4) Block(B).JustMoved = TRUE: Block(B).MovedBy = i END IF END IF NEXT B END IF IF Player(i).dir = 3 THEN FOR B = 1 TO 170 IF Block(B).Status = NORMALBLOCK OR Block(B).Status = SPECIALBLOCK THEN IF Block(B).x = Player(i).x / 16 AND Block(B).y = (Player(i).y / 16) - 1 THEN Block(B).Status = NMOVINGUP + ((Block(B).Status - 2) * 4) Block(B).JustMoved = TRUE: Block(B).MovedBy = i END IF END IF NEXT B END IF IF Player(i).dir = 4 THEN FOR B = 1 TO 170 IF Block(B).Status = NORMALBLOCK OR Block(B).Status = SPECIALBLOCK THEN IF Block(B).x = (Player(i).x / 16) - 1 AND Block(B).y = Player(i).y / 16 THEN Block(B).Status = NMOVINGLEFT + ((Block(B).Status - 2) * 4) Block(B).JustMoved = TRUE: Block(B).MovedBy = i END IF END IF NEXT B END IF Player(i).Frame = Player(i).Frame + 1 CASE 6 PUT (Player(i).x, -8 + Player(i).y), Crab&(((i - 1) * 2000) + ((Player(i).dir - 1) * 300) + 100), PSET Player(i).Action = NONE: Player(i).NextDir = 0: Player(i).Frame = 2 END SELECT END SELECT ELSE Player(i).Trapped = Player(i).Trapped - 1 IF Player(i).Trapped = 0 THEN Player(i).NextDir = 0 PUT (Player(i).x, -8 + Player(i).y), Spider&(1700 + ((i - 1) * 100)), PSET END IF IF Player(i).x MOD 16 = 0 AND Player(i).y MOD 16 = 0 THEN IF Cel(Player(i).x / 16, Player(i).y / 16) = -1 THEN IF Player(i).Cutter = FALSE THEN Player(i).Trapped = 150 NumWeb = NumWeb - 1 FOR nb = 1 TO 170 IF Block(nb).x = Player(i).x / 16 AND Block(nb).y = Player(i).y / 16 THEN Block(nb).Status = 0: EXIT FOR NEXT nb Cel(Player(i).x / 16, Player(i).y / 16) = 0 END IF END IF NEXT i CheckObjects MoveEnemies CheckBlocks IF BonusAlone = FALSE AND GameMode = NORMAL THEN RANDOMIZE TIMER l = INT(RND(1) * 100) + 1 IF l = 1 THEN FOR k = 1 TO 60: IF Object(k).Typ = 0 THEN EXIT FOR NEXT k Object(k).Typ = Bonus(INT(RND(1) * 20) + 1) DO xo = INT(RND(1) * 18) + 1 yo = INT(RND(1) * 12) + 1 IF Cel(xo, yo) = 0 THEN EXIT DO LOOP Object(k).x = xo * 16 Object(k).y = -8 + (yo) * 16 Object(k).Time = 400 Object(k).Alone = TRUE BonusAlone = TRUE END IF END IF IF TIME$ <> LastTime$ AND Pass = -1 THEN LastTime$ = TIME$ TimeLeft = TimeLeft - 1 cl$ = LTRIM$(STR$(TimeLeft)) IF LEN(cl$) < 3 THEN cl$ = STRING$(3 - LEN(cl$), "0") + cl$ OutText 137, 0, cl$ END IF IF TimeLeft = 0 THEN Pass = 0 IF GameMode = NORMAL THEN FOR q = 1 TO NumPlayer: Player(q).Lives = Player(q).Lives - 1 PUT (Player(q).x, -8 + Player(q).y), Crab&(((q - 1) * 2000) + 1900), PSET: NEXT q Message "TIME UP!" FOR i = 1 TO NumPlayer KillPlayer i NEXT i Pass = -1 END IF EXIT DO END IF IF Freezed > FALSE THEN Freezed = Freezed - 1 IF Killed = TRUE THEN Pass = -1: EXIT DO IF NumEnemy = 0 AND Pass = -1 THEN Pass = 150 IF Pass <> -1 THEN Pass = Pass - 1: IF Pass = 0 THEN EXIT DO DO: LOOP WHILE TIMER < StartT! + .001 LOOP IF AbortGame = TRUE THEN Message "GAME ABORTED!" SCREEN 0: WIDTH 80 PRINT "WetSpot v0.9" PRINT "(C) by Angelo Mottola soft 1996" PRINT : PRINT "Final release will include:" PRINT " - 100 levels (I hope so...)" PRINT " - 8 different enemies" PRINT " - Sound Blaster Music and sound effects" PRINT " - More and more fun !!" PRINT : PRINT "Coming soon..." PRINT : END END IF IF Pass = 0 THEN IF GameMode = NORMAL THEN FOR i = 1 TO NumPlayer PUT (Player(i).x, -8 + Player(i).y), Crab&(((i - 1) * 2000) + 100), PSET NEXT i Delay .08 FOR i = 1 TO NumPlayer PUT (Player(i).x, -8 + Player(i).y), Crab&(((i - 1) * 2000) + 1600), PSET NEXT i Delay .08 FOR i = 1 TO NumPlayer PUT (Player(i).x, -8 + Player(i).y), Crab&(((i - 1) * 2000) + 1700), PSET NEXT i Delay .08 FOR i = 1 TO NumPlayer PUT (Player(i).x, -8 + Player(i).y), Crab&(((i - 1) * 2000) + 1800), PSET NEXT i WHILE INKEY$ <> "": WEND q$ = INKEY$: WHILE (q$ <> CHR$(13) AND q$ <> "\"): q$ = INKEY$: WEND Level = Level + 1 ELSE FOR i = 1 TO NumPlayer LINE (((i - 1) * 160) + 20, 50)-(((i - 1) * 160) + 140, 150), 0, BF LINE (((i - 1) * 160) + 21, 51)-(((i - 1) * 160) + 139, 149), 27, B LINE (((i - 1) * 160) + 22, 52)-(((i - 1) * 160) + 138, 148), 29, B LINE (((i - 1) * 160) + 23, 53)-(((i - 1) * 160) + 137, 147), 31, B OutText (((i - 1) * 160) + 39), 60, "POTION BONUS" LINE (((i - 1) * 160) + 27, 75)-(((i - 1) * 160) + 133, 137), 29, B PUT ((((i - 1) * 160) + 30), 79), Obj&(2000), PSET te$ = "X " + LTRIM$(STR$(Player(i).Special)) + ": " + LTRIM$(STR$(Player(i).Special * 200)) OutText (((i - 1) * 160) + 53), 84, te$ PUT ((((i - 1) * 160) + 30), 97), Obj&(1500), PSET te$ = "X " + LTRIM$(STR$(TimeLeft)) + ": " + LTRIM$(STR$(TimeLeft * 1000)) OutText (((i - 1) * 160) + 53), 102, te$ OutText (((i - 1) * 160) + 30), 115, "MULTIPLIER X" + LTRIM$(STR$(Multi#)) Tot# = (((Player(i).Special * 200) + (TimeLeft * 1000))) * Multi# OutText (((i - 1) * 160) + 30), 125, "TOTAL : " + LTRIM$(STR$(Tot#)) Player(i).Score = Player(i).Score + Tot# PrintStatBar NEXT i WHILE INKEY$ <> "": WEND q$ = INKEY$: WHILE (q$ <> CHR$(13) AND q$ <> "\"): q$ = INKEY$: WEND Level = Level + 1 END IF ELSEIF Pass = -1 THEN Player(1).Cutter = FALSE: Player(2).Cutter = FALSE WHILE INKEY$ <> "": WEND q$ = INKEY$: WHILE (q$ <> CHR$(13) AND q$ <> "\"): q$ = INKEY$: WEND ELSE WHILE INKEY$ <> "": WEND q$ = INKEY$: WHILE (q$ <> CHR$(13) AND q$ <> "\"): q$ = INKEY$: WEND END IF IF NumPlayer = 2 THEN IF Player(1).Lives < 0 OR Player(2).Lives < 0 THEN EXIT DO ELSE IF Player(1).Lives < 0 THEN EXIT DO END IF LOOP Message "GAME OVER!" END SUB SUB PrintStatBar FOR i = 1 TO 2 IF Player(i).Score > Player(i).NextLife THEN Player(i).NextLife = Player(i).NextLife * 2: Player(i).Lives = Player(i).Lives + 1 s$(i) = LTRIM$(STR$(Player(i).Score)) IF Player(i).Score = 0 THEN s$(i) = "00" IF LEN(s$(i)) < 7 THEN s$(i) = STRING$(7 - LEN(s$(i)), " ") + s$(i) OutText (((i - 1) * 204) + 28), 0, s$(i) IF Player(i).Lives > 3 THEN FOR ii = 0 TO 2: PUT ((((i - 1) * 204) + 91) + (ii * 8), 0), Life&((i - 1) * 20), PSET: NEXT ii OutText (((i - 1) * 204) + 85), 0, LTRIM$(STR$(Player(i).Lives)) ELSE FOR ii = 0 TO Player(i).Lives - 1: PUT ((((i - 1) * 204) + 91) + (ii * 8), 0), Life&((i - 1) * 20), PSET: NEXT ii END IF NEXT i s$(1) = LTRIM$(STR$(TimeLeft)) IF LEN(s$(1)) < 3 THEN s$(1) = STRING$(3 - LEN(s$(1)), "0") + s$(1) OutText 137, 0, s$(1) s$(2) = LTRIM$(STR$(Level)) IF LEN(s$(2)) < 2 THEN s$(2) = STRING$(2 - LEN(s$(2)), "0") + s$(2) OutText 176, 0, s$(2) END SUB SUB PrintValue (xv, yv, va) v$ = LTRIM$(STR$(va)) ad = (16 - (LEN(v$) * 4)) / 2 FOR l = 1 TO LEN(v$) PUT (xv + ad, yv + 6), Number&((ASC(MID$(v$, l, 1)) - 48) * 10), PSET ad = ad + 4 NEXT l END SUB