mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-08-31 08:50:15 +00:00
914 lines
29 KiB
QBasic
914 lines
29 KiB
QBasic
CHDIR ".\programs\samples\misc"
|
||
|
||
'/=================================================================\
|
||
' (C) David Joffe 1997 e-mail: djoffe@icon.co.za
|
||
' DJ Software; April '97 http://www.scorpioncity.com/
|
||
'-------------------------------------------------------------------
|
||
' VGA Sokoban v1.0, for QBasic!
|
||
'-------------------------------------------------------------------
|
||
' -[ The object of the game: ]----------------------------------
|
||
' You are a Pacman derivative; you must push all the crate-type
|
||
' blocks onto the destination-type blocks. There are 90 levels,
|
||
' which I got from XSokoban, a sokoban for the X Window System.
|
||
' --------------------------------------------------------------
|
||
'
|
||
' You can do whatever you want with this program, on the single
|
||
' preferred condition that if you create any derivative works,
|
||
' I would like to be credited, at minimum with a link to my
|
||
' website.
|
||
'
|
||
' Please send me bug-reports and any other feedback; i.e. tell
|
||
' me you like it or hate it or have no opinion about it, but just
|
||
' tell me something!
|
||
'
|
||
' New levels: I would love it if you create new levels (or even
|
||
' new sprites) if you would send them to me; they will probably
|
||
' be included in later versions, in which case you will get credit.
|
||
'
|
||
' The savegame file format is a really tough one to crack, but
|
||
' see if you can give it a go ;-)
|
||
'\=================================================================/
|
||
|
||
' Draw a rectangle with highlights.
|
||
DECLARE SUB DrawBox (x1%, y1%, x2%, y2%, col1%, col2%, bgfill%)
|
||
|
||
' Default data type to integer for fastest processing
|
||
DEFINT A-Z
|
||
|
||
' To hold sprites
|
||
DIM Graphics(1 TO 2000)
|
||
|
||
' The following piece of code first tries for VGA; if that fails,
|
||
' it tries EGA. If that fails, it leaves.
|
||
ON ERROR GOTO TryEGA
|
||
SCREEN 13
|
||
GOTO GraphicsSuccess
|
||
|
||
TryEGA:
|
||
ON ERROR GOTO NoGraphics
|
||
SCREEN 7
|
||
GOTO GraphicsSuccess
|
||
|
||
NoGraphics:
|
||
COLOR 15, 0: CLS
|
||
PRINT "You don't seem to have graphics capable hardware."
|
||
PRINT "There is a text version available though."
|
||
PRINT
|
||
GOTO ContactMessage
|
||
|
||
GraphicsSuccess:
|
||
ON ERROR GOTO 0
|
||
|
||
' Draw the graphics and GET it
|
||
RESTORE GraphicsData
|
||
FOR i = 0 TO 23
|
||
FOR j = 0 TO 10
|
||
FOR k = 0 TO 10
|
||
READ n
|
||
PSET (k, j), n
|
||
NEXT k
|
||
NEXT j
|
||
GET (0, 0)-(10, 10), Graphics(i * 80 + 1)
|
||
NEXT i
|
||
|
||
' Constants
|
||
DIM SHARED NUMLEVELS
|
||
NUMLEVELS = 90
|
||
|
||
DIM SHARED LEVELFILENAME AS STRING
|
||
LEVELFILENAME$ = "djsok.dat"
|
||
DIM SHARED OFSX
|
||
OFSX = 6
|
||
DIM SHARED OFSY
|
||
OFSY = 6
|
||
|
||
' Dimensions of playing area
|
||
DIM SHARED MAXX
|
||
MAXX = 20
|
||
DIM SHARED MAXY
|
||
MAXY = 17
|
||
' Set this to 1 to enable cheats; then pressing "$" advances a level
|
||
DIM SHARED CHEATSENABLED
|
||
CHEATSENABLED = 0
|
||
|
||
' Search string: position of a character in string is used as the
|
||
' index for Colour array dereferencing and for how to handle that
|
||
' type of character in the game
|
||
GameData$ = "<22><><EFBFBD><EFBFBD>Һ<EFBFBD>̵<EFBFBD><CCB5>ʻ<EFBFBD><CABB><EFBFBD><EFBFBD> <20><>"
|
||
|
||
' Offsets into GameData$ of certain important character types
|
||
DIM SHARED POSCRATE
|
||
POSCRATE = 19
|
||
DIM SHARED POSSPACE
|
||
POSSPACE = 18
|
||
DIM SHARED POSCRATEATDEST
|
||
POSCRATEATDEST = 20
|
||
DIM SHARED POSDEST
|
||
POSDEST = 17
|
||
DIM SHARED POSHERO
|
||
POSHERO = 21
|
||
|
||
' Certain important character types
|
||
CharCrate$ = MID$(GameData$, POSCRATE, 1)
|
||
CharCrateAtDest$ = MID$(GameData$, POSCRATEATDEST, 1)
|
||
CharDest$ = MID$(GameData$, POSDEST, 1)
|
||
|
||
' Data structures
|
||
DIM TempMap(0 TO MAXY + 1) AS STRING * 22
|
||
DIM Map(0 TO MAXY + 1) AS STRING * 22
|
||
|
||
' Initialize screen
|
||
COLOR 15: CLS
|
||
|
||
' Level should be set to 0 here to make entry point level 1
|
||
Level = 0
|
||
Won = 1
|
||
|
||
'===========================================================[ BEGIN MAIN ]==
|
||
MainLoop:
|
||
' Get keypress
|
||
a$ = INKEY$
|
||
|
||
' Reset level or advance level
|
||
IF Won = 1 OR UCASE$(a$) = "R" THEN
|
||
IF (UCASE$(a$) <> "R") AND (Level >= 1) THEN
|
||
COLOR 15
|
||
LOCATE 19, 2: PRINT "Press a key ...";
|
||
WHILE INKEY$ = "": WEND
|
||
END IF
|
||
IF (UCASE$(a$) <> "R") THEN Level = Level + 1
|
||
IF (Level > NUMLEVELS) THEN GOTO FinishedGame
|
||
GOSUB LoadLevel
|
||
GOSUB Drawlevel
|
||
GOTO MovePlayer
|
||
END IF
|
||
|
||
' Player pressed nothing
|
||
IF a$ = "" THEN GOTO MainLoop
|
||
|
||
' Player pressed escape
|
||
IF a$ = CHR$(27) THEN GOTO EndGame
|
||
|
||
' Save game
|
||
IF UCASE$(a$) = "S" THEN GOSUB SaveGame
|
||
|
||
' Cheat to advance to next level
|
||
IF a$ = "$" AND CHEATSENABLED = 1 THEN Won = 1: GOTO MainLoop
|
||
|
||
' Load game
|
||
IF UCASE$(a$) = "L" THEN GOSUB LoadGame
|
||
|
||
' About
|
||
IF UCASE$(a$) = "A" THEN GOSUB About
|
||
|
||
' Up, down, left and right respectively
|
||
IF a$ = CHR$(0) + "H" THEN xd = 0: yd = -1: GOTO MovePlayer
|
||
IF a$ = CHR$(0) + "P" THEN xd = 0: yd = 1: GOTO MovePlayer
|
||
IF a$ = CHR$(0) + "K" THEN xd = -1: yd = 0: GOTO MovePlayer
|
||
IF a$ = CHR$(0) + "M" THEN xd = 1: yd = 0: GOTO MovePlayer
|
||
GOTO MainLoop
|
||
'=============================================================[ END MAIN ]==
|
||
|
||
MovePlayer:
|
||
' read character directly in front of player
|
||
character$ = MID$(Map$(y + yd), x + xd + 1, 1)
|
||
n = INSTR(GameData$, character$)
|
||
|
||
' If it's a wall, then leave
|
||
graphicsOffset = 0
|
||
IF n <= 16 THEN graphicsOffset = -1: GOTO DrawHero
|
||
|
||
' If there is a crate in front of us, find the character two positions
|
||
' away in front of us
|
||
IF ((character$ = CharCrate$) OR (character$ = CharCrateAtDest$)) THEN
|
||
character2$ = MID$(Map$(y + yd + yd), x + xd + xd + 1, 1)
|
||
n2 = INSTR(GameData$, character2$)
|
||
' If the character 2 away from us is a wall or a crate, leave
|
||
IF n2 <= 16 OR character2$ = CharCrate$ OR character2$ = CharCrateAtDest$ THEN GOTO MainLoop
|
||
|
||
' Else we can move the crate in front of us
|
||
LOCATE y + yd + yd + 1, x + xd + xd + 1
|
||
' If we're moving a crate onto a destination-type block
|
||
IF (character2$ = CharDest$) THEN
|
||
MID$(Map$(y + yd + yd), x + xd + xd + 1, 1) = CharCrateAtDest$
|
||
PUT ((x + xd + xd - 1) * 11 + OFSX, (y + yd + yd - 1) * 11 + OFSY), Graphics((POSCRATEATDEST - 1) * 80 + 1), PSET
|
||
NumPushes = NumPushes + 1: GOSUB ShowNumPushes
|
||
' If we're moving it from a destination-type block onto another dest-type
|
||
IF character$ = CharCrateAtDest$ THEN
|
||
MID$(Map$(y + yd), x + xd + 1, 1) = CharDest$
|
||
ELSE ' we're moving it onto a dest-type from a space
|
||
MID$(Map$(y + yd), x + xd + 1, 1) = " "
|
||
NumPlaced = NumPlaced + 1
|
||
END IF
|
||
IF (NumPlaced = NumCrates) THEN Won = 1
|
||
ELSE ' We're moving the crate onto a blank space
|
||
MID$(Map$(y + yd + yd), x + xd + xd + 1, 1) = CharCrate$
|
||
PUT ((x + xd + xd - 1) * 11 + OFSX, (y + yd + yd - 1) * 11 + OFSY), Graphics((POSCRATE - 1) * 80 + 1), PSET
|
||
NumPushes = NumPushes + 1: GOSUB ShowNumPushes
|
||
' If we're moving a crate off of a destination block
|
||
IF character$ = CharCrateAtDest$ THEN
|
||
MID$(Map$(y + yd), x + xd + 1, 1) = CharDest$
|
||
NumPlaced = NumPlaced - 1
|
||
ELSE ' we're moving a crate off of a space
|
||
MID$(Map$(y + yd), x + xd + 1, 1) = " "
|
||
END IF
|
||
END IF
|
||
END IF
|
||
|
||
DrawHero:
|
||
' Erase our hero
|
||
PUT ((x - 1) * 11 + OFSX, (y - 1) * 11 + OFSY), Graphics(((INSTR(GameData$, MID$(Map$(y), x + 1, 1))) - 1) * 80 + 1), PSET
|
||
' Update hero's location
|
||
IF (graphicsOffset <> -1) THEN
|
||
x = x + xd
|
||
y = y + yd
|
||
END IF
|
||
' Update NumMoves counter
|
||
IF NOT (xd = 0 AND yd = 0) THEN NumMoves = NumMoves + 1: GOSUB ShowNumMoves
|
||
' Re-draw our hero
|
||
graphicsOffset = 0
|
||
IF (xd = 0 AND yd = 1) THEN graphicsOffset = 1
|
||
IF (xd = -1 AND yd = 0) THEN graphicsOffset = 2
|
||
IF (xd = 0 AND yd = -1) THEN graphicsOffset = 3
|
||
PUT ((x - 1) * 11 + OFSX, (y - 1) * 11 + OFSY), Graphics((POSHERO + graphicsOffset - 1) * 80 + 1), PSET
|
||
GOTO MainLoop
|
||
|
||
SaveGame:
|
||
GOSUB InputFileName
|
||
IF filename$ <> "" THEN
|
||
filename$ = filename$ + ".sok"
|
||
OPEN filename$ FOR OUTPUT AS #1
|
||
PRINT #1, Level
|
||
CLOSE
|
||
LOCATE 19, 1: PRINT "File "; filename$; " saved ...";
|
||
SLEEP 1
|
||
GOSUB Drawlevel
|
||
END IF
|
||
GOSUB Drawlevel
|
||
RETURN
|
||
|
||
LoadGame:
|
||
GOSUB InputFileName
|
||
IF filename$ <> "" THEN
|
||
filename$ = filename$ + ".sok"
|
||
Level = 0
|
||
' The following error handler is used to determine if a given file
|
||
' exists.
|
||
ON ERROR GOTO NoFile
|
||
OPEN filename$ FOR INPUT AS #1
|
||
' If file exists:
|
||
IF filename$ <> "" THEN
|
||
INPUT #1, Level
|
||
CLOSE
|
||
GOSUB LoadLevel
|
||
END IF
|
||
END IF
|
||
' Disable the error handler
|
||
ON ERROR GOTO 0
|
||
GOSUB Drawlevel
|
||
RETURN
|
||
|
||
NoFile:
|
||
LOCATE 19, 1: PRINT "File not found! Press a key ...";
|
||
' Set filename$ to "" so that we know the file doesn't exist
|
||
filename$ = ""
|
||
' Clear keyboard buffer and wait for keypress
|
||
WHILE INKEY$ <> "": WEND
|
||
WHILE INKEY$ = "": WEND
|
||
' Go back to the line after the error occured
|
||
RESUME NEXT
|
||
|
||
' Routine to allow user to enter a string of length at most 8 for
|
||
' getting filenames
|
||
InputFileName:
|
||
COLOR 15
|
||
xval = 17
|
||
filename$ = ""
|
||
LOCATE 19, 1: PRINT "Enter filename: _";
|
||
EnternameLoop:
|
||
s$ = INKEY$
|
||
IF s$ = "" THEN GOTO EnternameLoop
|
||
' Escape
|
||
IF s$ = CHR$(27) THEN filename$ = "": GOTO sReturn
|
||
' Enter
|
||
IF s$ = CHR$(13) THEN GOTO sReturn
|
||
' Backspace
|
||
IF filename$ <> "" AND s$ = CHR$(8) THEN
|
||
filename$ = LEFT$(filename$, LEN(filename$) - 1)
|
||
LOCATE 19, xval: PRINT filename$ + "_ ";
|
||
END IF
|
||
IF s$ < "0" THEN GOTO EnternameLoop
|
||
IF s$ > "9" THEN
|
||
IF s$ < "A" THEN GOTO EnternameLoop
|
||
IF s$ > "Z" THEN
|
||
IF s$ < "a" OR s$ > "z" THEN GOTO EnternameLoop
|
||
END IF
|
||
END IF
|
||
IF LEN(filename$) = 8 THEN GOTO EnternameLoop
|
||
filename$ = filename$ + s$
|
||
LOCATE 19, xval: PRINT filename$ + "_ ";
|
||
GOTO EnternameLoop
|
||
sReturn:
|
||
RETURN
|
||
|
||
' Loads levels from the file as it needs them because all the levels
|
||
' in memory at once might place a bit of strain on QBasic :-)
|
||
LoadLevel:
|
||
x = 0
|
||
y = 0
|
||
xd = 0
|
||
yd = 0
|
||
NumCrates = 0
|
||
NumDestinations = 0
|
||
NumPlaced = 0
|
||
NumMoves = 0
|
||
NumPushes = 0
|
||
Won = 0
|
||
|
||
' Blank out the strings
|
||
FOR i = 0 TO MAXY + 1
|
||
TempMap$(i) = STRING$(MAXX + 2, " ")
|
||
Map$(i) = STRING$(MAXX + 2, " ")
|
||
NEXT i
|
||
|
||
OPEN LEVELFILENAME FOR INPUT AS #1
|
||
LINE INPUT #1, f$
|
||
LevelString$ = RTRIM$(LTRIM$(STR$(Level)))
|
||
' Read until we find the string corresponding to the current Level number
|
||
WHILE (f$ <> LevelString$) AND NOT EOF(1)
|
||
LINE INPUT #1, f$
|
||
WEND
|
||
' If we didn't find it, something went wrong
|
||
IF f$ <> LevelString$ THEN CLOSE: GOTO lReturn
|
||
|
||
' Read in the level
|
||
LINE INPUT #1, f$
|
||
count = 1
|
||
WHILE f$ <> "~"
|
||
TempMap$(count) = " " + f$
|
||
LINE INPUT #1, f$
|
||
count = count + 1
|
||
WEND
|
||
CLOSE
|
||
|
||
' Centre the level vertically
|
||
' Adding 0.5 and doing an integer divide effectively rounds upwards
|
||
extra = ((MAXY - count) + .5) \ 2
|
||
FOR i = count TO 1 STEP -1
|
||
TempMap$(i + extra) = TempMap$(i)
|
||
NEXT i
|
||
FOR i = 1 TO extra
|
||
TempMap$(i) = STRING$(MAXX + 2, " ")
|
||
NEXT i
|
||
FOR i = count + extra TO MAXY
|
||
TempMap$(i) = STRING$(MAXX + 2, " ")
|
||
NEXT i
|
||
|
||
' Black out the area outside of the playing arena
|
||
FOR i = 1 TO MAXX + 2
|
||
c = 0
|
||
ch$ = MID$(TempMap$(c), i, 1)
|
||
WHILE ((ch$ = " ") OR (ch$ = "%")) AND (c <= MAXY)
|
||
MID$(TempMap$(c), i, 1) = "%"
|
||
c = c + 1
|
||
ch$ = MID$(TempMap$(c), i, 1)
|
||
WEND
|
||
c = MAXY + 1
|
||
ch$ = MID$(TempMap$(c), i, 1)
|
||
WHILE ((ch$ = " ") OR (ch$ = "%")) AND (c >= 1)
|
||
MID$(TempMap$(c), i, 1) = "%"
|
||
c = c - 1
|
||
ch$ = MID$(TempMap$(c), i, 1)
|
||
WEND
|
||
NEXT i
|
||
FOR i = 0 TO MAXY + 1
|
||
c = 1
|
||
ch$ = MID$(TempMap$(i), c, 1)
|
||
WHILE ((ch$ = " ") OR (ch$ = "%")) AND (c <= MAXX + 1)
|
||
MID$(TempMap$(i), c, 1) = "%"
|
||
c = c + 1
|
||
ch$ = MID$(TempMap$(i), c, 1)
|
||
WEND
|
||
c = MAXX + 2
|
||
ch$ = MID$(TempMap$(i), c, 1)
|
||
WHILE ((ch$ = " ") OR (ch$ = "%")) AND (c >= 2)
|
||
MID$(TempMap$(i), c, 1) = "%"
|
||
c = c - 1
|
||
ch$ = MID$(TempMap$(i), c, 1)
|
||
WEND
|
||
NEXT i
|
||
|
||
' Interpret the raw data and convert to our own format
|
||
FOR i = 1 TO MAXY
|
||
Map$(i) = TempMap$(i)
|
||
FOR j = 2 TO MAXX + 1
|
||
IF (MID$(Map$(i), j, 1) = "@") THEN
|
||
MID$(Map$(i), j, 1) = " "
|
||
x = j - 1
|
||
y = i
|
||
END IF
|
||
IF (MID$(Map$(i), j, 1) = "$") THEN
|
||
MID$(Map$(i), j, 1) = CharCrate$
|
||
NumCrates = NumCrates + 1
|
||
END IF
|
||
IF (MID$(Map$(i), j, 1) = "*") THEN
|
||
MID$(Map$(i), j, 1) = CharCrateAtDest$
|
||
NumCrates = NumCrates + 1
|
||
NumDestinations = NumDestinations + 1
|
||
NumPlaced = NumPlaced + 1
|
||
END IF
|
||
IF (MID$(Map$(i), j, 1) = ".") THEN
|
||
MID$(Map$(i), j, 1) = CharDest$
|
||
NumDestinations = NumDestinations + 1
|
||
END IF
|
||
|
||
' This is used when the walls look different depending on what walls
|
||
' are adjacent to them, e.g. <20>,<2C>,<2C>, etc.
|
||
' A binary code is used XXXX where each of the four digits corresponds
|
||
' to above, right-of, below, and left-of. This will generate a number
|
||
' from 0 to 15 that is used as the offset into GameData$ to determine
|
||
' the character used.
|
||
IF (MID$(Map$(i), j, 1) = "#") THEN
|
||
code = 0
|
||
IF (MID$(TempMap$(i - 1), j, 1) = "#") THEN code = code + 1
|
||
IF (MID$(TempMap$(i), j + 1, 1) = "#") THEN code = code + 2
|
||
IF (MID$(TempMap$(i + 1), j, 1) = "#") THEN code = code + 4
|
||
IF (MID$(TempMap$(i), j - 1, 1) = "#") THEN code = code + 8
|
||
MID$(Map$(i), j, 1) = MID$(GameData$, code + 1, 1)
|
||
END IF
|
||
NEXT j
|
||
NEXT i
|
||
|
||
' If the level is impossible, generate an error message.
|
||
IF NumCrates < NumDestinations THEN
|
||
SCREEN 0: WIDTH 80, 25
|
||
COLOR 15, 0: CLS
|
||
PRINT "Error: Level"; Level; "impossible!"
|
||
PRINT "Did you fiddle with the level file?"
|
||
PRINT "Is the level file there?"
|
||
PRINT "If this wasn't your fault please contact me."
|
||
PRINT
|
||
GOTO ContactMessage
|
||
END IF
|
||
lReturn:
|
||
RETURN
|
||
|
||
Drawlevel:
|
||
'COLOR 10, 0: CLS
|
||
LINE (0, 0)-(319, 199), 7, BF
|
||
|
||
DrawBox 0, 0, 319, 199, 15, 8, -1 ' Entire screen
|
||
DrawBox 5, 5, 226, 193, 0, 15, 0 ' Game play arena
|
||
DrawBox 232, 5, 316, 193, 15, 8, -1 ' Info area
|
||
DrawBox 240, 13, 308, 26, 4, 12, 0 ' Title
|
||
DrawBox 234, 35, 314, 58, 8, 15, 0 ' Level number
|
||
DrawBox 234, 67, 314, 106, 8, 15, 0 ' Moves/pushes
|
||
DrawBox 234, 115, 314, 188, 8, 15, 0 ' Keys
|
||
LINE (238, 164)-(310, 164), 13
|
||
|
||
COLOR 12
|
||
LOCATE 3, 32: PRINT "Sokoban";
|
||
|
||
COLOR 11
|
||
LOCATE 6, 32: PRINT "Level:";
|
||
COLOR 9
|
||
LOCATE 10, 32: PRINT "Moves:";
|
||
COLOR 10
|
||
LOCATE 12, 32: PRINT "Pushes:";
|
||
GOSUB ShowNumMoves
|
||
GOSUB ShowNumPushes
|
||
GOSUB ShowLevel
|
||
|
||
COLOR 14
|
||
LOCATE 16, 31: PRINT "R :Reset";
|
||
LOCATE 17, 31: PRINT "L :Load";
|
||
LOCATE 18, 31: PRINT "S :Save";
|
||
LOCATE 19, 31: PRINT "A :About";
|
||
LOCATE 20, 31: PRINT "Esc:Quit";
|
||
|
||
LOCATE 22, 31
|
||
COLOR 12: PRINT "D";
|
||
COLOR 14: PRINT "J";
|
||
LOCATE 23, 31
|
||
COLOR 10: PRINT "S";
|
||
COLOR 11: PRINT "o";
|
||
COLOR 9: PRINT "f";
|
||
COLOR 13: PRINT "t";
|
||
COLOR 12: PRINT "w";
|
||
COLOR 14: PRINT "a";
|
||
COLOR 10: PRINT "r";
|
||
COLOR 11: PRINT "e";
|
||
COLOR 15
|
||
|
||
' Draw the playing arena
|
||
FOR i = 1 TO MAXY
|
||
FOR j = 2 TO MAXX + 1
|
||
' Ignore "%" signs - they indicate pure black background
|
||
IF MID$(Map$(i), j, 1) <> "%" THEN
|
||
PUT ((j - 2) * 11 + OFSX, (i - 1) * 11 + OFSY), Graphics((INSTR(GameData$, MID$(Map$(i), j, 1)) - 1) * 80 + 1), PSET
|
||
END IF
|
||
NEXT j
|
||
NEXT i
|
||
' Draw the hero, taking into account the direction he's facing
|
||
graphicsOffset = 0
|
||
IF (xd = 0 AND yd = 1) THEN graphicsOffset = 1
|
||
IF (xd = -1 AND yd = 0) THEN graphicsOffset = 2
|
||
IF (xd = 0 AND yd = -1) THEN graphicsOffset = 3
|
||
PUT ((x - 1) * 11 + OFSX, (y - 1) * 11 + OFSY), Graphics((POSHERO + graphicsOffset - 1) * 80 + 1), PSET
|
||
RETURN
|
||
|
||
ShowLevel:
|
||
COLOR 11
|
||
LOCATE 7, 32: PRINT Level;
|
||
RETURN
|
||
|
||
ShowNumMoves:
|
||
COLOR 9
|
||
LOCATE 11, 32: PRINT NumMoves;
|
||
RETURN
|
||
|
||
ShowNumPushes:
|
||
COLOR 10
|
||
LOCATE 13, 32: PRINT NumPushes;
|
||
RETURN
|
||
|
||
About:
|
||
COLOR 15
|
||
LOCATE 1, 1
|
||
LOCATE 5, 3: PRINT "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
|
||
LOCATE , 3: PRINT "<22> <20>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
LOCATE , 3: PRINT "<22> <20> VGA Sokoban v1.0 <20> <20>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
LOCATE , 3: PRINT "<22> <20>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
LOCATE , 3: PRINT "<22> DJ Software 1997 <20>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
LOCATE , 3: PRINT "<22> (C) David Joffe <20>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
LOCATE , 3: PRINT "<22> <20>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
LOCATE , 3: PRINT "<22> Whipped up in a few hours <20>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
LOCATE , 3: PRINT "<22> for the Net <20>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
LOCATE , 3: PRINT "<22> <20>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
LOCATE , 3: PRINT "<22> http://www.scorpioncity.com/ <20>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
LOCATE , 3: PRINT "<22> <20>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
LOCATE , 3: PRINT "<22> <20>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
LOCATE , 3: PRINT "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";: COLOR 8: PRINT "<22>": COLOR 15
|
||
COLOR 8
|
||
LOCATE , 4: PRINT "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||
WHILE INKEY$ = "": WEND
|
||
|
||
' Restore the contents of the screen
|
||
GOSUB Drawlevel
|
||
RETURN
|
||
|
||
EndGame:
|
||
SCREEN 0: WIDTH 80, 25
|
||
COLOR 15, 0: CLS
|
||
PRINT "*Sniff* .. I hate goodbyes .. *sob* ..."
|
||
PRINT
|
||
PRINT "Feedback (and bug reports :) welcome!"
|
||
PRINT
|
||
GOTO ContactMessage
|
||
|
||
FinishedGame:
|
||
WIDTH 80, 25
|
||
COLOR 15, 0: CLS
|
||
PRINT "You finished the game. Yay!"
|
||
PRINT "I suppose you were expecting something more spectacular then? You must be"
|
||
PRINT "quite disappointed! :-)"
|
||
PRINT
|
||
PRINT "Actually, I would love to know if anyone actually *did* get this far (with-"
|
||
PRINT "out cheating, of course), so let me know!"
|
||
PRINT
|
||
GOTO ContactMessage
|
||
|
||
ContactMessage:
|
||
PRINT "Try e-mail me (David Joffe) at ";: COLOR 14: PRINT "djoffe@icon.co.za";: COLOR 15: PRINT "; if that's become out-"
|
||
PRINT "dated, have a look at:"
|
||
COLOR 14
|
||
PRINT "http://www.scorpioncity.com/"
|
||
COLOR 15
|
||
PRINT
|
||
PRINT "I have other stuff at the above URL, with source code etc, so check it out!"
|
||
PRINT
|
||
PRINT "Also, if you make any new levels, I'd love to see them! Maybe I'll add them"
|
||
PRINT "to the game for for a future re-release/re-write, in which case I'll give"
|
||
PRINT "you appropriate credit; I'll give each level a 'Creator' field."
|
||
PRINT
|
||
PRINT "The 90 default levels in this version I got from XSokoban, a version of"
|
||
PRINT "Sokoban for the X Window System."
|
||
PRINT
|
||
PRINT "Cheers from everyone here (just me :) at ";
|
||
COLOR 12: PRINT "-+ D";
|
||
COLOR 14: PRINT "J";
|
||
PRINT " ";
|
||
COLOR 10: PRINT "S";
|
||
COLOR 11: PRINT "o";
|
||
COLOR 9: PRINT "f";
|
||
COLOR 13: PRINT "t";
|
||
COLOR 12: PRINT "w";
|
||
COLOR 14: PRINT "a";
|
||
COLOR 10: PRINT "r";
|
||
COLOR 11: PRINT "e +-"
|
||
COLOR 15
|
||
|
||
PRINT
|
||
PRINT " - David Joffe"
|
||
END
|
||
|
||
GraphicsData:
|
||
'0
|
||
DATA 15,15,15,15,15,15,15,15,15,15,15
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,00,00,00,00,00,00,00,00,00,00
|
||
'1
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,00,00,00,00,00,00,00,00,00,00
|
||
'2
|
||
DATA 15,15,15,15,15,15,15,15,15,15,15
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,00,00,00,00,00,00,00,00,00,00
|
||
'3
|
||
DATA 15,07,07,07,07,07,07,07,07,07,15
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,00,00,00,00,00,00,00,00,00,00
|
||
'4
|
||
DATA 15,15,15,15,15,15,15,15,15,15,15
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
'5
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
'6
|
||
DATA 15,15,15,15,15,15,15,15,15,15,15
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
'7
|
||
DATA 15,07,07,07,07,07,07,07,07,07,15
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
'8
|
||
DATA 15,15,15,15,15,15,15,15,15,15,15
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 00,00,00,00,00,00,00,00,00,00,00
|
||
'9
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 00,00,00,00,00,00,00,00,00,00,00
|
||
'10
|
||
DATA 15,15,15,15,15,15,15,15,15,15,15
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 00,00,00,00,00,00,00,00,00,00,00
|
||
'11
|
||
DATA 15,07,07,07,07,07,07,07,07,07,15
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 00,00,00,00,00,00,00,00,00,00,00
|
||
'12
|
||
DATA 15,15,15,15,15,15,15,15,15,15,15
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
'13
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 07,07,07,07,07,07,07,07,07,07,00
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
'14
|
||
DATA 15,15,15,15,15,15,15,15,15,15,15
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
'15
|
||
DATA 15,07,07,07,07,07,07,07,07,07,15
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 07,07,07,07,07,07,07,07,07,07,07
|
||
DATA 15,07,07,07,07,07,07,07,07,07,00
|
||
' Destination
|
||
DATA 00,00,00,00,00,00,00,00,00,00,08
|
||
DATA 00,08,08,08,08,08,08,08,08,08,07
|
||
DATA 00,08,08,08,08,08,08,08,08,08,07
|
||
DATA 00,08,08,00,08,08,08,00,08,08,07
|
||
DATA 00,08,08,08,00,08,00,08,08,08,07
|
||
DATA 00,08,08,08,08,00,08,08,08,08,07
|
||
DATA 00,08,08,08,00,08,00,08,08,08,07
|
||
DATA 00,08,08,00,08,08,08,00,08,08,07
|
||
DATA 00,08,08,08,08,08,08,08,08,08,07
|
||
DATA 00,08,08,08,08,08,08,08,08,08,07
|
||
DATA 08,07,07,07,07,07,07,07,07,07,07
|
||
' Blank
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
' Crate
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
DATA 08,15,15,15,15,15,15,15,15,15,08
|
||
DATA 08,15,12,12,12,12,12,12,12,04,08
|
||
DATA 08,15,12,12,12,12,12,12,12,04,08
|
||
DATA 08,15,12,12,12,12,12,12,12,04,08
|
||
DATA 08,15,12,12,12,12,12,12,12,04,08
|
||
DATA 08,15,12,12,12,12,12,12,12,04,08
|
||
DATA 08,15,12,12,12,12,12,12,12,04,08
|
||
DATA 08,15,12,12,12,12,12,12,12,04,08
|
||
DATA 08,15,04,04,04,04,04,04,04,04,08
|
||
DATA 08,08,08,08,08,08,08,08,08,08,08
|
||
'Crate at destination
|
||
DATA 0,0,0,0,0,0,0,0,0,0,0
|
||
DATA 0,12,12,12,12,12,12,12,12,12,7
|
||
DATA 0,12,4,4,4,4,4,4,4,0,7
|
||
DATA 0,12,4,4,4,4,4,4,4,0,7
|
||
DATA 0,12,4,4,4,4,4,4,4,0,7
|
||
DATA 0,12,4,4,4,4,4,4,4,0,7
|
||
DATA 0,12,4,4,4,4,4,4,4,0,7
|
||
DATA 0,12,4,4,4,4,4,4,4,0,7
|
||
DATA 0,12,4,4,4,4,4,4,4,0,7
|
||
DATA 0,12,0,0,0,0,0,0,0,0,7
|
||
DATA 7,7,7,7,7,7,7,7,7,7,7
|
||
'Hero
|
||
DATA 08,08,08,14,14,14,14,14,08,08,08
|
||
DATA 08,14,14,14,14,14,14,14,14,14,08
|
||
DATA 08,14,14,14,14,14,00,00,14,14,08
|
||
DATA 14,14,14,14,14,14,00,00,14,14,14
|
||
DATA 14,14,14,14,14,14,14,14,14,14,14
|
||
DATA 14,14,14,14,08,08,08,08,08,08,08
|
||
DATA 14,14,14,14,14,14,08,08,08,08,08
|
||
DATA 14,14,14,14,14,14,14,14,08,08,08
|
||
DATA 08,14,14,14,14,14,14,14,14,14,08
|
||
DATA 08,14,14,14,14,14,14,14,14,08,08
|
||
DATA 08,08,08,14,14,14,14,14,08,08,08
|
||
|
||
DATA 08,08,08,14,14,14,14,14,08,08,08
|
||
DATA 08,14,14,14,14,14,14,14,14,14,08
|
||
DATA 08,14,14,14,14,14,14,14,14,14,08
|
||
DATA 14,14,14,14,14,14,14,14,14,14,14
|
||
DATA 14,14,14,14,14,08,14,14,14,14,14
|
||
DATA 14,14,14,14,14,08,14,14,14,14,14
|
||
DATA 14,14,00,00,14,08,08,14,14,14,14
|
||
DATA 14,14,00,00,14,08,08,14,14,14,14
|
||
DATA 08,14,14,14,14,08,08,08,14,14,08
|
||
DATA 08,14,14,14,14,08,08,08,14,08,08
|
||
DATA 08,08,08,14,14,08,08,08,08,08,08
|
||
|
||
DATA 08,08,08,14,14,14,14,14,08,08,08
|
||
DATA 08,14,14,14,14,14,14,14,14,14,08
|
||
DATA 08,14,14,00,00,14,14,14,14,14,08
|
||
DATA 14,14,14,00,00,14,14,14,14,14,14
|
||
DATA 14,14,14,14,14,14,14,14,14,14,14
|
||
DATA 08,08,08,08,08,08,08,14,14,14,14
|
||
DATA 08,08,08,08,08,14,14,14,14,14,14
|
||
DATA 08,08,08,14,14,14,14,14,14,14,14
|
||
DATA 08,14,14,14,14,14,14,14,14,14,08
|
||
DATA 08,08,14,14,14,14,14,14,14,14,08
|
||
DATA 08,08,08,14,14,14,14,14,08,08,08
|
||
|
||
DATA 08,08,08,08,08,08,14,14,08,08,08
|
||
DATA 08,08,14,08,08,08,14,14,14,14,08
|
||
DATA 08,14,14,08,08,08,14,14,14,14,08
|
||
DATA 14,14,14,14,08,08,14,00,00,14,14
|
||
DATA 14,14,14,14,08,08,14,00,00,14,14
|
||
DATA 14,14,14,14,14,08,14,14,14,14,14
|
||
DATA 14,14,14,14,14,08,14,14,14,14,14
|
||
DATA 14,14,14,14,14,14,14,14,14,14,14
|
||
DATA 08,14,14,14,14,14,14,14,14,14,08
|
||
DATA 08,14,14,14,14,14,14,14,14,14,08
|
||
DATA 08,08,08,14,14,14,14,14,08,08,08
|
||
|
||
SUB DrawBox (x1, y1, x2, y2, col1, col2, bgfill)
|
||
IF (bgfill <> -1) THEN
|
||
LINE (x1, y1)-(x2, y2), bgfill, BF
|
||
END IF
|
||
LINE (x1, y1)-(x2, y1), col1
|
||
LINE (x1, y1)-(x1, y2), col1
|
||
LINE (x2, y1)-(x2, y2), col2
|
||
LINE (x1, y2)-(x2, y2), col2
|
||
END SUB
|
||
|