mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-09-20 06:44:44 +00:00
9ee89d6ff4
These tests use a variety of sample code (with some of the larger files removed, so they are not complete!) and verifies that they all compile successfully.
1712 lines
69 KiB
QBasic
1712 lines
69 KiB
QBasic
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
|
|
|