' B_Editor
' Created by Peter Varnai
DECLARE SUB backitup ()
DECLARE SUB undoit ()
DECLARE SUB opcircle ()
DECLARE SUB quickload (startx!, starty!, stopx!, stopy!)
DECLARE SUB square ()
DECLARE SUB slowupdate (startx, starty, stopx, stopy)
DECLARE SUB opline ()
DECLARE SUB center (text$, y!)
DECLARE SUB credits ()
DECLARE SUB saveset ()
DECLARE SUB savefile ()
DECLARE SUB maxprint (text$, x!, y!)
DECLARE SUB getletter (letter$, x!, y!)
DECLARE SUB sizer (x!, y!, w!)
DECLARE SUB changesize ()
DECLARE SUB menuchange (m!)
DECLARE SUB setsize (x, y)
DECLARE SUB convertc ()
DECLARE SUB loadpicture ()
DECLARE SUB updatepicture ()
DECLARE SUB fillit ()
DECLARE SUB toolchange (t!, p!)
DECLARE SUB freedraw ()
DECLARE SUB sliderchange (x!, y!, o!)
DECLARE SUB xxxchange (x!, y!, c%, z)
DECLARE SUB menu ()
DECLARE SUB toolbar ()
DECLARE SUB colors ()
DECLARE SUB colorset ()
DECLARE SUB scribble ()
DECLARE SUB press (x!, y!, l%, w%, z%)
DECLARE SUB board (sizex, sizey, c%, ch%)
DECLARE SUB defscreen (c%)
DECLARE SUB getbits () ' 65536 - for blue palette
DEFINT A-D ' so I don't forget
DECLARE SUB mouse (cx, dx, bx)
DECLARE SUB MousePointer (SW)
DIM SHARED boardx, boardy, sizex, sizey
DIM SHARED images(1 TO 322), errornum, save12, save13, savedat
DIM SHARED a(9), mx, my, mclick, r(1 TO 70), g(1 TO 70), B(1 TO 70), oldx
DIM SHARED image(1 TO 1309), widthy, lengthx, letter(1 TO 3500), empty
DIM SHARED tool%, menus%, red%, blue%, green%, scale, picture(1 TO 100, 1 TO 100)
DIM SHARED backup1(1 TO 100, 1 TO 100)
TYPE palettt
r AS SINGLE
g AS SINGLE
B AS SINGLE
s1 AS SINGLE
s2 AS SINGLE
s3 AS SINGLE
END TYPE
DIM SHARED clor(0 TO 15) AS palettt, clor2(0 TO 15) AS palettt
TYPE xxx
x AS SINGLE
y AS SINGLE
c AS INTEGER
END TYPE
DIM SHARED colorused AS xxx, finalc AS xxx, toolo(1 TO 6) AS xxx, menuo(1 TO 4) AS xxx
ON TIMER(1) GOSUB clock
TIMER ON
SCREEN 12
menus% = 0
PALETTE 6, 63 + 256 * 42 + 0 * 65536
getbits
menubar:
DEF SEG = VARSEG(a(0))
FOR i = 0 TO 17
READ r
POKE VARPTR(a(0)) + i, r
NEXT i
0:
setsize 10, 10
DEF SEG = VARSEG(a(0))
CALL MousePointer(0)
CALL MousePointer(1)
CALL MousePointer(3)
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
SELECT CASE my
CASE 0 TO 13
IF mx >= 624 AND mx <= 639 AND mclick = 1 THEN credits
CASE 9 TO 34
IF mx >= 9 AND mx <= 207 THEN menu
CASE 89 TO 141
IF mx >= 440 AND mx <= 571 THEN toolbar
IF mx >= 10 AND mx <= 9 + boardx THEN scribble
CASE 148 TO 391
IF mx >= 438 AND mx <= 611 THEN colors
IF mx >= 10 AND mx <= 9 + boardx THEN scribble
CASE 414 TO 468
IF mx >= 456 AND mx <= 609 THEN colorset
IF mx >= 10 AND mx <= 9 + boardx THEN scribble
CASE 70 TO boardy + 69
IF mx >= 10 AND mx <= boardx + 9 THEN scribble
END SELECT
IF mx >= 370 AND mx <= 379 AND my >= 20 AND my <= 57 THEN saveset
LOOP
SYSTEM
Handler:
MousePointer 2
errornum = ERR
IF errornum = 64 THEN maxprint "Bad file name...", 19, 51
IF errornum = 53 THEN maxprint "File not found!!", 19, 51
IF errornum <> 0 AND errornum <> 64 AND errornum <> 53 THEN
maxprint "Cannot perform operation: unexpected error" + STR$(ERR), 19, 51: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: GOTO 0
END IF
t# = TIMER + 1.5
DO: LOOP UNTIL TIMER >= t#
LINE (0, 45)-(355, 64), 7, BF
MousePointer 1
RESUME NEXT
clock:
IF mx >= 500 AND mx <= 567 AND my >= 3 AND my <= 17 THEN www = 1: MousePointer 2
maxprint " ", 500, 3
maxprint TIME$, 500, 3
IF www = 1 THEN MousePointer 1: www = 0
RETURN
' DATAS
' Mouse
DATA &HB8,&H00,&H00
DATA &H55
DATA &H8B,&HEC
DATA &HCD,&H33
DATA &H92
DATA &H8B,&H5E,&H06
DATA &H89,&H07
DATA &H5D
DATA &HCA,&H02,&H00
' For Palette values
DATA 00, 00, 00
DATA 00, 00, 42
DATA 00, 42, 00
DATA 00, 42, 42
DATA 42, 00, 00
DATA 42, 00, 42
DATA 63, 42, 00
DATA 42, 42, 42
DATA 21, 21, 21
DATA 21, 21, 63
DATA 21, 63, 21
DATA 21, 63, 63
DATA 63, 21, 21
DATA 63, 21, 63
DATA 63, 63, 63
SUB backitup
FOR i = 1 TO boardy / scale
FOR ii = 1 TO boardx / scale
backup1(ii, i) = picture(ii, i)
NEXT
NEXT
END SUB
SUB board (x, y, c, ch)
IF x > y THEN sizze = x ELSE sizze = y
x = x * INT(400 / sizze)
y = y * INT(400 / sizze)
IF ch <> 0 THEN GOTO 1
LINE (10, 70)-(x + 9, y + 69), 15, BF
1:
LINE (9, 69)-(x + 10, y + 70), c, B
LINE (5, 65)-(x + 14, y + 74), 0, B
END SUB
SUB center (text$, y)
maxprint text$, 205 - (LEN(text$) * 7) / 2 - 13, y
END SUB
SUB changesize
widthy = boardy / scale
lengthx = boardx / scale
MousePointer 2
LINE (239, 12)-(338, 12), 0
LINE (239, 32)-(338, 32), 0
PUT (238 + boardx / scale - 9, 5), images(119), PSET
PUT (238 + boardy / scale - 9, 25), images(119), PSET
press 160, 1, 195, 62, 1
maxprint "x = " + STR$(lengthx) + " y = " + STR$(widthy), 180, 50
press 165, 9, 42, 25, -1: MousePointer 1
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
IF mx < 160 OR mx > 355 OR my > 64 THEN
MousePointer 2
LINE (161, 0)-(350, 64), 7, BF
maxprint "Size", 171, 16
press 165, 9, 42, 25, 0
press 160, 1, 195, 62, 0
MousePointer 1
menus% = 0
EXIT SUB
END IF
resize% = 0
IF mx >= 231 AND mx <= 345 AND mclick = 1 THEN
WHILE mclick = 1
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
SELECT CASE my
CASE 5 TO 19
sizer mx, 5, 1
CASE 25 TO 39
sizer mx, 25, 2
END SELECT
resize% = 1
t# = TIMER + .05
DO: LOOP UNTIL TIMER >= t#
WEND
END IF
IF resize% = 1 THEN menus% = 0: MousePointer 2: setsize lengthx, widthy: MousePointer 1: EXIT SUB
LOOP
END SUB
SUB colors
IF finalc.c <> 14 THEN CALL press(555, 414, 54, 54, 0)
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
SELECT CASE mx
CASE 0 TO 437
GOSUB savecolor
CASE 612 TO 639
GOSUB savecolor
CASE 438 TO 471
SELECT CASE my
CASE 148 TO 181
xxxchange 438, 148, 0, mclick
CASE 203 TO 236
xxxchange 438, 203, 3, mclick
CASE 251 TO 284
xxxchange 438, 251, 6, mclick
CASE 303 TO 336
xxxchange 438, 303, 9, mclick
CASE 358 TO 391
xxxchange 438, 358, 12, mclick
END SELECT
CASE 508 TO 541
SELECT CASE my
CASE 148 TO 181
xxxchange 508, 148, 1, mclick
CASE 203 TO 236
xxxchange 508, 203, 4, mclick
CASE 251 TO 284
xxxchange 508, 251, 8, mclick
CASE 303 TO 336
xxxchange 508, 303, 10, mclick
CASE 358 TO 391
xxxchange 508, 358, 13, mclick
END SELECT
CASE 578 TO 611
SELECT CASE my
CASE 148 TO 181
xxxchange 578, 148, 2, mclick
CASE 203 TO 236
xxxchange 578, 203, 5, mclick
CASE 251 TO 284
xxxchange 578, 251, 15, mclick
CASE 303 TO 336
xxxchange 578, 303, 11, mclick
CASE 358 TO 391
xxxchange 578, 358, 7, mclick
END SELECT
END SELECT
IF my >= 392 OR my <= 147 THEN GOSUB savecolor
board sizex, sizey, finalc.c, 1
t# = TIMER + .01
IF finalc.c <> 14 THEN MousePointer 2: press finalc.x, finalc.y, 33, 33, -1: MousePointer 1
DO: LOOP UNTIL TIMER >= t#
LOOP
savecolor:
IF finalc.c <> 14 THEN
CALL MousePointer(2)
press colorused.x, colorused.y, 33, 33, 0
press finalc.x, finalc.y, 33, 33, -1
CALL MousePointer(1)
END IF
EXIT SUB
END SUB
SUB colorset
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
SELECT CASE mx
CASE 0 TO 457
EXIT SUB
CASE 610 TO 639
EXIT SUB
CASE 456 TO 537
IF mclick = 1 THEN
CALL MousePointer(2)
SELECT CASE my
CASE 414 TO 428
CALL sliderchange(mx - 9, 414, 1)
CASE 434 TO 448
CALL sliderchange(mx - 9, 434, 2)
CASE 454 TO 468
CALL sliderchange(mx - 9, 454, 3)
END SELECT
CALL MousePointer(1)
END IF
CASE 555 TO 609
IF colorused.c <> 14 THEN CALL MousePointer(2): press 555, 414, 54, 54, 1: colorused.c = 14: CALL MousePointer(1)
IF mclick = 1 THEN MousePointer 2: press finalc.x, finalc.y, 33, 33, 0: colorused.c = 14: finalc.c = 14: board sizex, sizey, 14, 1: press 555, 414, 54, 54, -1: MousePointer 1
CASE ELSE
IF finalc.c <> 14 THEN MousePointer 2: press 555, 414, 54, 54, 0: MousePointer 1
END SELECT
IF my >= 469 OR my <= 413 THEN EXIT SUB
t# = TIMER + .01
DO: LOOP UNTIL TIMER >= t#
LOOP
EXIT SUB
END SUB
SUB convertc
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
IF mx <= 9 OR mx >= 410 OR my <= 69 OR my >= 470 THEN EXIT SUB
IF mclick = 1 THEN
IF picture(INT((mx - 10) / scale + 1), INT((my - 70) / scale + 1)) <> finalc.c THEN
backitup
MousePointer 2
c = POINT(mx, my)
FOR y = 1 TO boardy / scale
FOR x = 1 TO boardx / scale
IF picture(x, y) = c THEN picture(x, y) = finalc.c
NEXT
NEXT
loadpicture
updatepicture
MousePointer 1
END IF
END IF
LOOP
END SUB
SUB credits
FOR i = 0 TO 15
IF i = 14 THEN GOTO 3
READ r
READ g
READ B
clor(i).r = r
clor2(i).r = r
clor(i).g = g
clor2(i).g = g
clor(i).B = B
clor2(i).B = B
clor(i).s1 = r / 63
clor(i).s2 = g / 63
clor(i).s3 = B / 63
PALETTE i, r + g * 256 + B * 65536
3:
NEXT
clor(14).r = red%: clor(14).g = green%: clor(14).B = blue%
clor2(14).r = red%: clor2(14).g = green%: clor(14).B = blue%
clor(14).s1 = red% / 63: clor(14).s2 = green% / 63: clor(14).s3 = blue% / 63
FOR ii = 0 TO 63
t# = TIMER + .01: DO: LOOP UNTIL TIMER >= t#
FOR i = 0 TO 15
a$ = INKEY$
clor(i).r = clor(i).r - clor(i).s1: IF clor(i).r < 0 THEN clor(i).r = 0
clor(i).g = clor(i).g - clor(i).s2: IF clor(i).g < 0 THEN clor(i).g = 0
clor(i).B = clor(i).B - clor(i).s3: IF clor(i).B < 0 THEN clor(i).B = 0
PALETTE i, INT(clor(i).r) + INT(clor(i).g) * 256 + INT(clor(i).B) * 65536
IF a$ <> "" THEN SYSTEM
NEXT
NEXT
MousePointer 2
board 10, 10, 7, 0
LINE (10, 70)-(410, 469), 7, BF
center "CREDITS", 75
center "Programmed by Peter Varnai", 95
center "Thanks for using my program!", 130
center "(I hope it was useful)", 155
center "SPECIAL THANKS TO:", 200
center "the QBASIC Forum", 240
center "www.network54.com/Forum/13959", 280
center "Click on the exit sign to exit", 452
SLEEP 1
FOR i = 0 TO 63
MousePointer 1
t# = TIMER + .01
DO: LOOP UNTIL TIMER >= t#
FOR c = 15 TO 0 STEP -1
a$ = INKEY$
clor(c).r = clor(c).r + clor(c).s1: IF clor(c).r >= clor2(c).r THEN clor(c).r = clor2(c).r
clor(c).g = clor(c).g + clor(c).s2: IF clor(c).g >= clor2(c).g THEN clor(c).g = clor2(c).g
clor(c).B = clor(c).B + clor(c).s3: IF clor(c).B >= clor2(c).B THEN clor(c).B = clor2(c).B
PALETTE c, INT(clor(c).r) + 256 * INT(clor(c).g) + 65536 * INT(clor(c).B)
IF a$ <> "" THEN SYSTEM
NEXT
NEXT
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
IF mx >= 624 AND my <= 13 AND mclick = 1 THEN SYSTEM
LOOP WHILE INKEY$ = ""
SYSTEM
END SUB
SUB defscreen (c)
CLS
red% = 63: green% = 63: blue% = 0
PUT (624, 0), images(59)
LINE (623, 0)-(623, 14), c
LINE (623, 14)-(639, 14), c
PAINT (0, 0), c
maxprint TIME$, 500, 3
press 498, 1, 67, 15, 1
maxprint "New", 19, 16
maxprint "Open", 67, 16
maxprint "Save", 119, 16
maxprint "Size", 171, 16
maxprint "Save format:", 370, 3
maxprint "Screen 12", 385, 20: PUT (370, 20), images(186), PSET
maxprint "Screen 13", 385, 34: PUT (370, 34), images(165), PSET
maxprint "DATA file", 385, 48: PUT (370, 48), images(165), PSET
press 364, 1, 105, 62, -1
PUT (444, 123), images(30): CALL press(440, 120, 21, 21, -1)
PUT (465, 124), images(90)
PUT (488, 124), images(1)
PUT (510, 124), images(207), PSET
PUT (532, 124), images(236), PSET
PUT (554, 124), images(265), PSET
PUT (444, 92), images(265), PSET: press 440, 89, 21, 21, -1
PUT (466, 92), images(265), PSET: PAINT (470, 97), 0, 0
PUT (512, 93), images(294), PSET
PUT (444, 457), r: LINE (465, 461)-(527, 461), 0: PUT (518, 454), images(119), PSET
PUT (444, 437), g: LINE (465, 441)-(527, 441), 0: PUT (518, 434), images(119), PSET
PUT (444, 417), B: LINE (465, 421)-(527, 421), 0: PUT (456, 414), images(119), PSET
LINE (440, 150)-(469, 179), 0, BF: CALL press(438, 148, 33, 33, -1)
LINE (510, 150)-(539, 179), 1, BF: CALL press(508, 148, 33, 33, 0)
LINE (580, 150)-(609, 179), 2, BF: CALL press(578, 148, 33, 33, 0)
LINE (440, 205)-(469, 234), 3, BF: CALL press(438, 203, 33, 33, 0)
LINE (510, 205)-(539, 234), 4, BF: CALL press(508, 203, 33, 33, 0)
LINE (580, 205)-(609, 234), 5, BF: CALL press(578, 203, 33, 33, 0)
LINE (440, 253)-(469, 282), 6, BF: CALL press(438, 251, 33, 33, 0)
LINE (510, 253)-(539, 282), 8, BF: CALL press(508, 251, 33, 33, 0)
LINE (580, 253)-(609, 282), 15, BF: CALL press(578, 251, 33, 33, 0)
LINE (440, 305)-(469, 334), 9, BF: CALL press(438, 303, 33, 33, 0)
LINE (510, 305)-(539, 334), 10, BF: CALL press(508, 303, 33, 33, 0)
LINE (580, 305)-(609, 334), 11, BF: CALL press(578, 303, 33, 33, 0)
LINE (440, 360)-(469, 389), 12, BF: CALL press(438, 358, 33, 33, 0)
LINE (510, 360)-(539, 389), 13, BF: CALL press(508, 358, 33, 33, 0)
LINE (580, 360)-(609, 389), 8, B: CALL press(578, 358, 33, 33, 0)
PALETTE 14, red% + green% * 256 + blue% * 65536
OPEN "toolo.dat" FOR INPUT AS #1
FOR y = 1 TO 6
FOR x = 1 TO 2
INPUT #1, z
IF x = 1 THEN toolo(y).x = z ELSE toolo(y).y = z
NEXT
NEXT
CLOSE #1
menuo(1).x = 9: menuo(2).x = 60: menuo(3).x = 113: menuo(4).x = 165
LINE (557, 416)-(607, 466), 14, BF: CALL press(555, 414, 54, 54, 0)
board sizex, sizey, 0, 0
END SUB
SUB fillit
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
IF mx <= 9 OR mx >= 9 + boardx OR my <= 69 OR my >= boardy + 69 THEN EXIT SUB
SELECT CASE mclick
CASE 1
IF picture(INT((mx - 10) / scale + 1), INT((my - 70) / scale + 1)) <> finalc.c THEN
backitup
MousePointer 2
PAINT (mx, my), finalc.c, finalc.c
MousePointer 1
updatepicture
END IF
END SELECT
LOOP
END SUB
SUB freedraw
flag% = 0
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
tempx = INT((mx - 10) / scale) + 1
tempy = INT((my - 70) / scale) + 1
IF mx <= 9 OR mx >= 9 + boardx OR my <= 69 OR my >= 69 + boardy THEN EXIT DO
IF mclick = 1 AND picture(tempx, tempy) <> finalc.c THEN
flag% = 1
backitup
picture(tempx, tempy) = finalc.c
CALL MousePointer(2)
LINE ((tempx - 1) * scale + 10, (tempy - 1) * scale + 70)-((tempx - 1) * scale + 10 + scale - 1, (tempy - 1) * scale + 70 + scale - 1), finalc.c, BF
CALL MousePointer(1)
END IF
LOOP
IF flag% = 1 THEN updatepicture: flag% = 0
END SUB
SUB getbits
CLS
COLOR 3: PRINT "R"
GET (0, 2)-(6, 11), r
LOCATE 1, 1: COLOR 5: PRINT "G"
GET (0, 2)-(6, 11), g
LOCATE 1, 1: COLOR 14: PRINT "B"
GET (0, 2)-(6, 11), B
CLS
DEF SEG = VARSEG(letter(1))
BLOAD "letters.bpf", VARPTR(letter(1))
DEF SEG = VARSEG(images(1))
BLOAD "images.bpf", VARPTR(images(1))
END SUB
SUB getletter (letter$, x, y)
SELECT CASE letter$
CASE "A"
n = 1
CASE "a"
n = 2
CASE "B"
n = 3
CASE "b"
n = 4
CASE "C"
n = 5
CASE "c"
n = 6
CASE "D"
n = 7
CASE "d"
n = 8
CASE "E"
n = 9
CASE "e"
n = 10
CASE "F"
n = 11
CASE "f"
n = 12
CASE "G"
n = 13
CASE "g"
n = 14
CASE "H"
n = 15
CASE "h"
n = 16
CASE "I"
n = 17
CASE "i"
n = 18
CASE "J"
n = 19
CASE "j"
n = 20
CASE "K"
n = 21
CASE "k"
n = 22
CASE "L"
n = 23
CASE "l"
n = 24
CASE "M"
n = 25
CASE "m"
n = 26
CASE "N"
n = 27
CASE "n"
n = 28
CASE "O"
n = 29
CASE "o"
n = 30
CASE "P"
n = 31
CASE "p"
n = 32
CASE "Q"
n = 33
CASE "q"
n = 34
CASE "R"
n = 35
CASE "r"
n = 36
CASE "S"
n = 37
CASE "s"
n = 38
CASE "T"
n = 39
CASE "t"
n = 40
CASE "U"
n = 41
CASE "u"
n = 42
CASE "V"
n = 43
CASE "v"
n = 44
CASE "W"
n = 45
CASE "w"
n = 46
CASE "X"
n = 47
CASE "x"
n = 48
CASE "Y"
n = 49
CASE "y"
n = 50
CASE "Z"
n = 51
CASE "z"
n = 52
CASE "0"
n = 53
CASE "1"
n = 54
CASE "2"
n = 55
CASE "3"
n = 56
CASE "4"
n = 57
CASE "5"
n = 58
CASE "6"
n = 59
CASE "7"
n = 60
CASE "8"
n = 61
CASE "9"
n = 62
CASE "!"
n = 63
CASE "@"
n = 64
CASE "#"
n = 65
CASE "$"
n = 66
CASE "%"
n = 67
CASE "^"
n = 68
CASE "&"
n = 69
CASE "*"
n = 70
CASE "("
n = 71
CASE ")"
n = 72
CASE "-"
n = 73
CASE "="
n = 74
CASE "_"
n = 75
CASE "+"
n = 76
CASE "<"
n = 77
CASE ">"
n = 78
CASE ","
n = 79
CASE "."
n = 80
CASE "?"
n = 81
CASE "/"
n = 82
CASE ":"
n = 83
CASE ";"
n = 84
CASE "'"
n = 85
CASE "["
n = 86
CASE "]"
n = 87
CASE CHR$(34)
n = 88
CASE ELSE
LINE (x, y)-(x + 6, y + 12), 7, BF: EXIT SUB
END SELECT
LINE (x, y)-(x + 6, y + 12), 7, BF
ON ERROR GOTO Handler
PUT (x, y), letter((n - 1) * 40 + 1)
END SUB
SUB loadpicture
MousePointer 2
FOR x = 10 TO 10 + (boardx - scale) STEP scale
FOR y = 70 TO 70 + (boardy - scale) STEP scale
LINE (x, y)-(x + scale - 1, y + scale - 1), picture(INT((x - 10) / scale) + 1, INT((y - 70) / scale) + 1), BF
NEXT
NEXT
MousePointer 1
END SUB
SUB maxprint (text$, x, y)
FOR i = 1 TO LEN(text$)
a$ = MID$(text$, i, 1)
getletter a$, x + (i - 1) * 8, y
NEXT
END SUB
SUB menu
2:
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
IF menus% <> 0 THEN IF mx < 9 OR mx > 207 OR my < 9 OR my > 35 THEN MousePointer 2: press menuo(menus%).x, 9, 42, 25, 0: menus% = 0: MousePointer 1: EXIT SUB
SELECT CASE mx
CASE 9 TO 51
menuchange 1
IF mclick = 1 THEN
MousePointer 2: press 9, 9, 42, 25, -1
setsize boardx / scale, boardy / scale
press 9, 9, 42, 25, 1
MousePointer 1
END IF
CASE 60 TO 102
menuchange 2
IF mclick = 1 THEN GOSUB openfile: loadpicture: EXIT SUB
CASE 113 TO 155
menuchange 3
IF mclick = 1 THEN savefile: loadpicture: EXIT SUB
CASE 165 TO 207
menuchange 4
IF mclick = 1 THEN changesize: EXIT SUB
END SELECT
LOOP
EXIT SUB
openfile:
MousePointer 2
press 60, 9, 42, 25, -1
DO
errornum = 0
maxprint "File name (0 to exit):", 5, 51
LOCATE 4, 24: LINE INPUT "", file$
LINE (5, 35)-(355, 64), 7, BF
IF file$ = "0" THEN MousePointer 1: press 60, 9, 42, 25, 0: EXIT SUB
ON ERROR GOTO Handler
DEF SEG = VARSEG(image(1))
BLOAD file$ + ".bpf", VARPTR(image(1))
ON ERROR GOTO 0
IF errornum = 0 THEN
DEF SEG = VARSEG(a(0))
setsize image(1), image(2)
ON ERROR GOTO Handler: IF errornum <> 0 THEN GOSUB openfile
PALETTE 6, image(5) + image(4) * 256 + image(3) * 65536
PALETTE 14, image(8) + image(7) * 256 + image(6) * 65536
PUT (530, 40), image(9), PSET
FOR y = 20 TO 19 + boardy / scale
FOR x = 530 TO 529 + boardx / scale
picture(x - 529, y - 19) = POINT(x, y)
NEXT
NEXT
ON ERROR GOTO 0
press 60, 9, 42, 25, 0
MousePointer 1
RETURN
END IF
LOOP
END SUB
SUB menuchange (m)
IF menus% = m THEN EXIT SUB
MousePointer 2
IF menus% > 0 THEN press menuo(menus%).x, 9, 42, 25, 0
menus% = m
press menuo(menus%).x, 9, 42, 25, 1
MousePointer 1
END SUB
SUB mouse (cx, dx, bx)
POKE VARPTR(a(4)), &H92
CALL absolute(cx, VARPTR(a(0)))
POKE VARPTR(a(4)), &H91
CALL absolute(dx, VARPTR(a(0)))
POKE VARPTR(a(4)), &H93
CALL absolute(bx, VARPTR(a(0)))
my = cx: mx = dx: mclick = bx
END SUB
SUB opcircle
maxprint "If your picture is big, this will be slow", 5, 51
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
IF mx <= 9 OR mx >= 9 + boardx OR my <= 69 OR my >= 69 + boardy THEN maxprint " ", 5, 51: EXIT SUB
flag = 0
oldx = 0
oldy = 0
IF mclick = 1 THEN
flag = 1
firstx = INT((mx - 10) / scale + 1)
firsty = INT((my - 70) / scale + 1)
WHILE mclick = 1
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
a2 = ABS(((firstx - 1) * scale + 10 + scale / 2) - mx)
b2 = ABS(((firsty - 1) * scale + 70 + scale / 2) - my)
r = (a2 + b2)
r = INT(r / scale) * scale + scale / 4
IF mx <= 9 OR mx >= 9 + boardx OR my <= 69 OR my >= 69 + boardy THEN loadpicture: maxprint " ", 5, 51: EXIT SUB
IF oldr <> r THEN
MousePointer 2
loadpicture
VIEW SCREEN (10, 70)-(9 + boardx, 69 + boardy)
CIRCLE ((firstx - 1) * scale + 10 + scale / 2, (firsty - 1) * scale + 70 + scale / 2), r, finalc.c
VIEW SCREEN (0, 0)-(639, 479)
IF empty = 0 THEN PAINT ((firstx - 1) * scale + 10 + scale / 2, (firsty - 1) * scale + 70 + scale / 2), finalc.c, finalc.c
MousePointer 1
END IF
oldr = r
t# = TIMER + .05
DO: LOOP UNTIL TIMER >= t#
WEND
END IF
IF flag = 1 THEN backitup: CALL slowupdate(((firstx - 1) * scale + 10 + scale / 2) - r - 3, ((firsty - 1) * scale + 70 + scale / 2) - r - 3, ((firstx - 1) * scale + 10 + scale / 2) + r + 3, ((firsty - 1) * scale + 70 + scale / 2) + r + 3): loadpicture: updatepicture: EXIT DO
LOOP
maxprint " ", 5, 51
END SUB
SUB opline
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
IF mx <= 9 OR mx >= 9 + boardx OR my <= 69 OR my >= 69 + boardy THEN EXIT SUB
flag = 0
oldx = 0
oldy = 0
IF mclick = 1 THEN
flag = 1
firstx = INT((mx - 10) / scale + 1)
firsty = INT((my - 70) / scale + 1)
WHILE mclick = 1
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
tempx = INT((mx - 10) / scale + 1)
tempy = INT((my - 70) / scale + 1)
IF mx <= 9 OR mx >= 9 + boardx OR my <= 69 OR my >= 69 + boardy THEN loadpicture: EXIT SUB
IF oldx <> tempx OR oldy <> tempy THEN
MousePointer 2
loadpicture
VIEW SCREEN (10, 70)-(9 + boardx, 69 + boardy)
LINE ((firstx - 1) * scale + 10 + scale / 2, (firsty - 1) * scale + 70 + scale / 2)-((tempx - 1) * scale + 10 + scale / 2, (tempy - 1) * scale + 70 + scale / 2), finalc.c
VIEW SCREEN (0, 0)-(639, 479)
MousePointer 1
END IF
oldx = tempx
oldy = tempy
t# = TIMER + .05
DO: LOOP UNTIL TIMER >= t#
WEND
END IF
IF flag = 1 THEN backitup: CALL slowupdate((firstx - 1) * scale + 10 + scale / 2, (firsty - 1) * scale + 70 + scale / 2, (tempx - 1) * scale + 10 + scale / 2, (tempy - 1) * scale + 70 + scale / 2): loadpicture: updatepicture: EXIT DO
LOOP
END SUB
SUB press (x, y, l%, w%, z%)
' x, y = coordinates
' l, w = dimensions of object
' z = 0 - nothing z= 1 - button not pressed z = -1 = button pressed
SELECT CASE z%
CASE 0
LINE (x, y)-(x + l%, y + w%), 7, B
CASE -1
LINE (x, y)-(x + l%, y + w%), 8, B
LINE (x, y + w%)-(x + l%, y + w%), 15
LINE (x + l%, y)-(x + l%, y + w%), 15
CASE 1
LINE (x, y)-(x + l%, y + w%), 15, B
LINE (x + 1, y + w%)-(x + l%, y + w%), 8
LINE (x + l%, y + 1)-(x + l%, y + w%), 8
END SELECT
END SUB
SUB savefile
MousePointer 2
errornum = 0
ON ERROR GOTO Handler
maxprint "File name (0 to exit): ", 5, 51
LOCATE 4, 24: LINE INPUT file$
IF errornum <> 0 THEN savefile
IF file$ = "0" THEN LINE (5, 35)-(355, 64), 7, BF: MousePointer 1: EXIT SUB
ON ERROR GOTO 0
IF save12 = 1 THEN
errornum = 0
press 113, 9, 42, 25, -1
IF errornum = 0 THEN
LINE (5, 35)-(355, 64), 7, BF
image(1) = boardx / scale
image(2) = boardy / scale
image(3) = 0
image(4) = 42
image(5) = 63
image(6) = blue%
image(7) = green%
image(8) = red%
GET (530, 20)-(529 + boardx / scale, 19 + boardy / scale), image(9)
ON ERROR GOTO Handler
DEF SEG = VARSEG(image(1))
BSAVE file$ + "12.bpf", VARPTR(image(1)), 64 + (boardx / scale) * (boardy / scale)
ON ERROR GOTO 0
DEF SEG = VARSEG(a(0))
press 113, 9, 42, 25, 0
ELSE
savefile
END IF
END IF
IF savedat = 1 THEN
errornum = 0
press 113, 9, 42, 25, -1
LINE (5, 35)-(355, 64), 7, BF
ON ERROR GOTO Handler
OPEN file$ + ".dat" FOR OUTPUT AS #1
ON ERROR GOTO 0
WRITE #1, boardx / scale
WRITE #1, boardy / scale
WRITE #1, 0
WRITE #1, 42
WRITE #1, 63
WRITE #1, blue%
WRITE #1, green%
WRITE #1, red%
FOR y = 1 TO boardy / scale
FOR x = 1 TO boardx / scale
WRITE #1, picture(x, y)
NEXT
NEXT
CLOSE #1
END IF
IF save13 = 1 THEN
errornum = 0
press 113, 9, 42, 25, -1
LINE (5, 35)-(207, 64), 7, BF
image(1) = boardx / scale
image(2) = boardy / scale
image(3) = 0
image(4) = 42
image(5) = 63
image(6) = blue%
image(7) = green%
image(8) = red%
CLS : SCREEN 13
FOR i = 1 TO boardy / scale
FOR ii = 1 TO boardx / scale
PSET (ii, i), picture(ii, i)
NEXT
NEXT
GET (1, 1)-(boardx / scale, boardy / scale), image(9)
ON ERROR GOTO Handler
DEF SEG = VARSEG(image(1))
BSAVE file$ + "13.bpf", VARPTR(image(1)), 64 + (boardx / scale) * (boardy / scale)
ON ERROR GOTO 0
SCREEN 12
defscreen 7
loadpicture
END IF
LINE (5, 35)-(355, 64), 7, BF
MousePointer 1
END SUB
SUB saveset
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
IF mx <= 369 OR mx >= 380 OR my <= 19 OR my >= 58 THEN EXIT SUB
IF mclick = 1 THEN
MousePointer 2
SELECT CASE my
CASE 20 TO 29
save12 = save12 * -1
IF save12 = 1 THEN PUT (370, 20), images(186), PSET ELSE PUT (370, 20), images(165), PSET
CASE 34 TO 43
save13 = save13 * -1
IF save13 = 1 THEN PUT (370, 34), images(186), PSET ELSE PUT (370, 34), images(165), PSET
CASE 48 TO 57
savedat = savedat * -1
IF savedat = 1 THEN PUT (370, 48), images(186), PSET ELSE PUT (370, 48), images(165), PSET
END SELECT
MousePointer 1
END IF
t# = TIMER + .05
DO: LOOP UNTIL TIMER >= t#
LOOP
END SUB
SUB scribble
SELECT CASE tool%
CASE 1
freedraw
CASE 2
fillit
CASE 3
convertc
CASE 4
opline
CASE 5
square
CASE 6
opcircle
END SELECT
END SUB
SUB setsize (x, y)
colorused.x = 438: colorused.y = 148: colorused.c = 0: finalc.c = 0: finalc.x = 438: finalc.y = 148
save12 = 1: save13 = -1: savedat = -1
empty = 1
sizex = x: sizey = y
FOR i = 1 TO 100
FOR ii = 1 TO 100
picture(i, ii) = 15
NEXT
NEXT
IF sizex < sizey THEN scale = INT(400 / sizey) ELSE scale = INT(400 / sizex)
boardx = sizex * scale
boardy = sizey * scale
tool% = 1: menus% = 0
defscreen 7
END SUB
SUB sizer (x, y, w)
MousePointer 2
LINE (180, 50)-(350, 64), 7, BF
LINE (227, y)-(350, y + 18), 7, BF
LINE (239, y + 7)-(338, y + 7), 0
IF x <= 239 THEN x = 239
IF x >= 338 THEN x = 338
IF w = 1 THEN
lengthx = x - 238: IF lengthx < 1 THEN lengthx = 1
PUT (x - 9, y), images(119), PSET
maxprint "x = " + STR$(lengthx) + " y = " + STR$(widthy), 180, 50
END IF
IF w = 2 THEN
widthy = x - 238: IF widthy < 1 THEN widthy = 1
PUT (x - 9, y), images(119), PSET
maxprint "x = " + STR$(lengthx) + " y = " + STR$(widthy), 180, 50
END IF
MousePointer 1
END SUB
SUB sliderchange (x, y, o)
LINE (456, y)-(527 + 20, y + 14), 7, BF
LINE (465, y + 7)-(527, y + 7), 0
IF x >= 519 THEN x = 519
IF o = 1 THEN
blue% = x + 9 - 465: IF blue% < 0 THEN blue% = 0
PUT (blue% + 465 - 9, y), images(119), PSET
END IF
IF o = 2 THEN
green% = x + 9 - 465: IF green% < 0 THEN green% = 0
PUT (green% + 465 - 9, y), images(119), PSET
END IF
IF o = 3 THEN
red% = x + 9 - 465: IF red% < 0 THEN red% = 0
PUT (red% + 465 - 9, y), images(119), PSET
END IF
PALETTE 14, red% + 256 * green% + 65536 * blue%
END SUB
SUB slowupdate (startx, starty, stopx, stopy)
IF startx > stopx THEN xs = -1 ELSE xs = 1
IF starty > stopy THEN ys = -1 ELSE ys = 1
MousePointer 2
FOR y = starty TO stopy STEP ys
FOR x = startx TO stopx STEP xs
IF POINT(x, y) = finalc.c THEN
tempx = INT((x - 10) / scale) + 1
tempy = INT((y - 70) / scale) + 1
IF tempx < 1 OR tempx > boardx / scale OR tempy < 1 OR tempy > boardy / scale THEN GOTO 4
picture(tempx, tempy) = finalc.c
4:
END IF
NEXT
NEXT
loadpicture
MousePointer 1
END SUB
SUB square
maxprint "If your picture is big, this will be slow", 5, 51
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
IF mx <= 9 OR mx >= 9 + boardx OR my <= 69 OR my >= 69 + boardy THEN maxprint " ", 5, 51: EXIT SUB
flag = 0
IF mclick = 1 THEN
flag = 1
firstx = INT((mx - 10) / scale + 1)
firsty = INT((my - 70) / scale + 1)
WHILE mclick = 1
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
IF mx <= 9 OR mx >= 9 + boardx OR my <= 69 OR my >= 69 + boardy THEN maxprint " ", 5, 51: EXIT SUB
tempx = INT((mx - 10) / scale + 1)
tempy = INT((my - 70) / scale + 1)
IF oldx <> tempx OR oldy <> tempy THEN
MousePointer 2
loadpicture
VIEW SCREEN (10, 70)-(9 + boardx, 69 + boardy)
IF empty = 1 THEN
LINE ((firstx - 1) * scale + 10 + scale / 2, (firsty - 1) * scale + 70 + scale / 2)-((tempx - 1) * scale + 10 + scale / 2, (tempy - 1) * scale + 70 + scale / 2), finalc.c, B
ELSE
LINE ((firstx - 1) * scale + 10 + scale / 2, (firsty - 1) * scale + 70 + scale / 2)-((tempx - 1) * scale + 10 + scale / 2, (tempy - 1) * scale + 70 + scale / 2), finalc.c, BF
END IF
VIEW SCREEN (0, 0)-(639, 479)
MousePointer 1
END IF
oldx = tempx
oldy = tempy
t# = TIMER + .05
DO: LOOP UNTIL TIMER >= t#
WEND
END IF
IF flag = 1 THEN backitup: CALL slowupdate((firstx - 1) * scale + 10 + scale / 2, (firsty - 1) * scale + 70 + scale / 2, (tempx - 1) * scale + 10 + scale / 2, (tempy - 1) * scale + 70 + scale / 2): loadpicture: updatepicture: EXIT DO
LOOP
maxprint " ", 5, 51
END SUB
SUB toolbar
DO
CALL MousePointer(3)
CALL mouse(cx, dx, bx)
IF mx <= 439 OR mx >= 572 OR my <= 88 OR my >= 142 THEN EXIT SUB
SELECT CASE mx
CASE 440 TO 461
IF my >= 120 AND my <= 141 THEN toolchange 1, mclick
IF my >= 89 AND my <= 110 AND mclick = 1 THEN
IF empty = 0 THEN MousePointer 2: press 440, 89, 21, 21, -1: press 462, 89, 21, 21, 0: MousePointer 1
empty = 1
END IF
CASE 462 TO 483
IF my >= 120 AND my <= 141 THEN toolchange 2, mclick
IF my >= 89 AND my <= 110 AND mclick = 1 THEN
IF empty = 1 THEN MousePointer 2: press 440, 89, 21, 21, 0: press 462, 89, 21, 21, -1: MousePointer 1
empty = 0
END IF
CASE 484 TO 505
IF my >= 120 AND my <= 141 THEN toolchange 3, mclick
CASE 506 TO 527
IF my >= 120 AND my <= 141 THEN toolchange 4, mclick
IF my >= 89 AND my <= 110 AND mclick = 1 THEN undoit
CASE 528 TO 549
IF my >= 120 AND my <= 141 THEN toolchange 5, mclick
CASE 550 TO 571
IF my >= 120 AND my <= 141 THEN toolchange 6, mclick
END SELECT
t# = TIMER + .01
DO: LOOP UNTIL TIMER >= t#
LOOP
END SUB
SUB toolchange (t, p)
IF tool% = t THEN EXIT SUB
MousePointer 2
IF p = 1 THEN p% = -1
IF p = 0 THEN p% = 1
IF p = 1 THEN press toolo(tool%).x, toolo(tool%).y, 21, 21, 0
IF p = 1 THEN tool% = t: press toolo(tool%).x, toolo(tool%).y, 21, 21, p%
MousePointer 1
END SUB
SUB undoit
MousePointer 2: press 89, 506, 21, 21, -1: MousePointer 1
FOR y = 1 TO boardy / scale
FOR x = 1 TO boardx / scale
picture(x, y) = backup1(x, y)
NEXT
NEXT
loadpicture
updatepicture
MousePointer 2: press 89, 506, 21, 21, 0: MousePointer 1
END SUB
SUB updatepicture
MousePointer 2
FOR i = 70 TO 70 + (boardy - scale) STEP scale
FOR ii = 10 TO 10 + (boardx - scale) STEP scale
picture(INT((ii - 10) / scale) + 1, INT((i - 70) / scale) + 1) = POINT(ii, i)
NEXT
NEXT
MousePointer 1
FOR y = 20 TO 19 + boardy / scale
FOR x = 530 TO 529 + boardx / scale
PSET (x, y), picture(x - 529, y - 19)
NEXT
NEXT
END SUB
SUB xxxchange (x, y, c, z)
CALL MousePointer(2)
IF colorused.c <> c THEN
press colorused.x, colorused.y, 33, 33, 0
colorused.x = x
colorused.y = y
colorused.c = c
press x, y, 33, 33, 1: CALL MousePointer(1): EXIT SUB
END IF
IF z = 1 THEN press 555, 414, 54, 54, 0: press finalc.x, finalc.y, 33, 33, 0: finalc.c = c: finalc.x = x: finalc.y = y
CALL MousePointer(1)
END SUB
DIM images(1 TO 322)
CLS
SCREEN 12
PAINT (0, 0), 7
' Converter
FOR i = 0 TO 13
FOR ii = 0 TO 13
READ c
IF c = 7 THEN c = 0: GOTO 1
IF c = 0 THEN c = 7
IF c = 9 THEN c = 2
IF c = 14 THEN c = 9
1:
PSET (i, ii), c
NEXT
NEXT
GET (0, 0)-(13, 13), images(1)
DATA 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07
DATA 07, 07, 00, 00, 00, 00, 00, 00, 07, 07, 07, 07, 07, 07
DATA 07, 00, 00, 09, 07, 07, 09, 00, 00, 00, 00, 07, 07, 07
DATA 07, 00, 07, 07, 09, 09, 07, 07, 07, 07, 00, 07, 07, 07
DATA 07, 00, 00, 09, 07, 07, 09, 00, 00, 00, 00, 07, 07, 07
DATA 07, 14, 00, 00, 00, 00, 00, 00, 07, 07, 07, 07, 07, 07
DATA 14, 14, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07
DATA 14, 14, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07
DATA 07, 14, 00, 00, 00, 00, 00, 00, 07, 07, 07, 07, 07, 07
DATA 07, 00, 00, 06, 07, 07, 06, 00, 00, 00, 00, 07, 07, 07
DATA 07, 00, 07, 07, 06, 06, 07, 07, 07, 07, 00, 07, 07, 07
DATA 07, 00, 00, 06, 07, 07, 06, 00, 00, 00, 00, 07, 07, 07
DATA 07, 07, 00, 00, 00, 00, 00, 00, 07, 07, 07, 07, 07, 07
DATA 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07
CLS
PAINT (0, 0), 7
' Free draw
FOR i = 0 TO 13
FOR ii = 0 TO 13
READ c
IF c = 7 THEN c = 0 ELSE c = 7
PSET (ii, i), c
NEXT
NEXT
GET (0, 0)-(13, 13), images(30)
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 0, 7, 7
DATA 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 0, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 0, 7, 0, 0, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 0, 7, 0, 0, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 0, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 0, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
CLS : PAINT (0, 0), 7
' exit sign
FOR i = 0 TO 13
FOR ii = 0 TO 14
READ c
PSET (ii, i), c
NEXT
NEXT
GET (0, 0)-(14, 13), images(59)
DATA 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15
DATA 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 0, 0, 7, 7, 7, 7, 0, 0, 7, 7, 8
DATA 15, 7, 7, 7, 7, 0, 0, 7, 7, 0, 0, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 0, 0, 7, 7, 0, 0, 7, 7, 7, 8
DATA 15, 7, 7, 7, 0, 0, 7, 7, 7, 7, 0, 0, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8
DATA 15, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
CLS : PAINT (0, 0), 7
' filler
FOR i = 0 TO 13
FOR ii = 0 TO 15
READ c
IF c = 7 THEN c = 0: GOTO 2
IF c = 0 THEN c = 7
IF c = 1 THEN c = 6
2:
PSET (ii, i), c
NEXT
NEXT
GET (0, 0)-(15, 13), images(90)
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7
DATA 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, 7, 7, 0, 0, 0
DATA 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, 0, 0, 7, 7, 0, 0
DATA 7, 7, 7, 7, 7, 0, 7, 0, 1, 7, 0, 0, 0, 7, 7, 7
DATA 7, 7, 7, 1, 0, 1, 0, 7, 7, 1, 7, 0, 0, 0, 7, 7
DATA 7, 7, 1, 0, 1, 0, 1, 1, 7, 7, 7, 7, 0, 0, 0, 7
DATA 7, 1, 0, 1, 0, 7, 1, 1, 1, 7, 7, 7, 7, 0, 0, 7
DATA 7, 1, 0, 0, 0, 7, 7, 1, 1, 7, 7, 7, 0, 0, 0, 7
DATA 7, 1, 7, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7
DATA 7, 1, 7, 7, 0, 0, 0, 7, 7, 7, 0, 0, 0, 7, 7, 7
DATA 7, 1, 7, 7, 7, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7
DATA 7, 1, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7
DATA 1, 1, 1, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7
CLS : PAINT (0, 0), 7
' slider
FOR i = 0 TO 14
FOR ii = 0 TO 19
READ c
PSET (ii, i), c
NEXT
NEXT
GET (0, 0)-(19, 14), images(119)
DATA 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
' unchecked
CLS : PAINT (0, 0), 7
LINE (0, 0)-(9, 9), 15, BF
GET (0, 0)-(9, 9), images(165)
' checked
CLS : PAINT (0, 0), 7
FOR i = 0 TO 9
FOR ii = 0 TO 9
READ c
PSET (ii, i), c
NEXT
NEXT
GET (0, 0)-(9, 9), images(186)
DATA 15, 15, 15, 15, 15, 15, 15, 15, 15, 15
DATA 15, 15, 15, 15, 15, 15, 15, 15, 15, 15
DATA 15, 15, 15, 15, 15, 15, 15, 15, 02, 15
DATA 15, 15, 15, 15, 15, 15, 15, 02, 02, 15
DATA 15, 15, 15, 15, 15, 15, 02, 02, 15, 15
DATA 15, 02, 15, 15, 15, 02, 02, 15, 15, 15
DATA 15, 02, 02, 15, 02, 02, 15, 15, 15, 15
DATA 15, 15, 02, 02, 02, 15, 15, 15, 15, 15
DATA 15, 15, 15, 02, 15, 15, 15, 15, 15, 15
DATA 15, 15, 15, 15, 15, 15, 15, 15, 15, 15
CLS : PAINT (0, 0), 7
' opline
LINE (0, 0)-(13, 13), 0
LINE (1, 0)-(13, 12), 8
LINE (0, 1)-(12, 13), 8
GET (0, 0)-(13, 13), images(207)
CLS : PAINT (0, 0), 7
' square
LINE (0, 0)-(13, 13), 8, B
LINE (1, 1)-(12, 12), 0, B
LINE (2, 2)-(11, 11), 8, B
GET (0, 0)-(13, 13), images(236)
CLS : PAINT (0, 0), 7
' opcircle
CIRCLE (7, 7), 6, 8
CIRCLE (7, 7), 5, 0
GET (0, 0)-(13, 13), images(265)
CLS : PAINT (0, 0), 7
' undo
FOR i = 0 TO 13
FOR ii = 0 TO 13
READ c
PSET (ii, i), c
NEXT
NEXT
GET (0, 0)-(13, 13), images(294)
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 2, 2, 2, 7, 2, 2, 7, 7
DATA 7, 7, 7, 7, 7, 2, 2, 2, 7, 7, 7, 2, 7, 7
DATA 7, 7, 7, 7, 2, 2, 2, 7, 7, 7, 7, 2, 7, 7
DATA 7, 7, 7, 2, 2, 2, 7, 7, 7, 7, 2, 7, 7, 7
DATA 7, 7, 2, 2, 2, 2, 7, 7, 7, 2, 7, 7, 7, 7
DATA 2, 7, 2, 2, 2, 7, 7, 7, 2, 7, 7, 7, 7, 7
DATA 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
CLS
DEF SEG = VARSEG(images(1))
BSAVE "images.bpf", VARPTR(images(1)), 1288
LINE INPUT "All data created - Press Enter"; e$
SYSTEM
It stands for "Bsaved picture file"
The format is the following
image(1), image(2) - > x and y size of picture
image(3) - image(8) -> palette settings
image(9) -> the picture
Now I know that sometimes you won't need anything from image(1) to image(9), since you didn't change the palette. I posted a program below that you can use to convert the picture's format. For this one, you can only convert 12.bpf files to a format which only contains the picture with no additional palette settings:
'When prompted for File name don't include the 12.bpf extension
CLS
SCREEN 12
DIM image(10000)
DIM image2(10000)
1
CLS
PRINT "Enter 0 to exit"
INPUT "File name: ", file$
IF file$ = "0" THEN SYSTEM
file$ = file$ + "12.bpf"
CLS
DEF SEG = VARSEG(image(0))
BLOAD file$, VARPTR(image(0))
PUT (0, 0), image(8)
GET (0, 0)-(image(0) - 1, image(1) - 1), image2(0)
DIM images(1 TO 322)
CLS
SCREEN 12
PAINT (0, 0), 7
' Converter
FOR i = 0 TO 13
FOR ii = 0 TO 13
READ c
IF c = 7 THEN c = 0: GOTO 1
IF c = 0 THEN c = 7
IF c = 9 THEN c = 2
IF c = 14 THEN c = 9
1:
PSET (i, ii), c
NEXT
NEXT
GET (0, 0)-(13, 13), images(1)
DATA 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07
DATA 07, 07, 00, 00, 00, 00, 00, 00, 07, 07, 07, 07, 07, 07
DATA 07, 00, 00, 09, 07, 07, 09, 00, 00, 00, 00, 07, 07, 07
DATA 07, 00, 07, 07, 09, 09, 07, 07, 07, 07, 00, 07, 07, 07
DATA 07, 00, 00, 09, 07, 07, 09, 00, 00, 00, 00, 07, 07, 07
DATA 07, 14, 00, 00, 00, 00, 00, 00, 07, 07, 07, 07, 07, 07
DATA 14, 14, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07
DATA 14, 14, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07
DATA 07, 14, 00, 00, 00, 00, 00, 00, 07, 07, 07, 07, 07, 07
DATA 07, 00, 00, 06, 07, 07, 06, 00, 00, 00, 00, 07, 07, 07
DATA 07, 00, 07, 07, 06, 06, 07, 07, 07, 07, 00, 07, 07, 07
DATA 07, 00, 00, 06, 07, 07, 06, 00, 00, 00, 00, 07, 07, 07
DATA 07, 07, 00, 00, 00, 00, 00, 00, 07, 07, 07, 07, 07, 07
DATA 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07, 07
CLS
PAINT (0, 0), 7
' Free draw
FOR i = 0 TO 13
FOR ii = 0 TO 13
READ c
IF c = 7 THEN c = 0 ELSE c = 7
PSET (ii, i), c
NEXT
NEXT
GET (0, 0)-(13, 13), images(30)
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 0, 7, 7
DATA 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 0, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 0, 7, 0, 0, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 0, 7, 0, 0, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 0, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 0, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
CLS : PAINT (0, 0), 7
' exit sign
FOR i = 0 TO 13
FOR ii = 0 TO 14
READ c
PSET (ii, i), c
NEXT
NEXT
GET (0, 0)-(14, 13), images(59)
DATA 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15
DATA 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 0, 0, 7, 7, 7, 7, 0, 0, 7, 7, 8
DATA 15, 7, 7, 7, 7, 0, 0, 7, 7, 0, 0, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 0, 0, 7, 7, 0, 0, 7, 7, 7, 8
DATA 15, 7, 7, 7, 0, 0, 7, 7, 7, 7, 0, 0, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8
DATA 15, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
CLS : PAINT (0, 0), 7
' filler
FOR i = 0 TO 13
FOR ii = 0 TO 15
READ c
IF c = 7 THEN c = 0: GOTO 2
IF c = 0 THEN c = 7
IF c = 1 THEN c = 6
2:
PSET (ii, i), c
NEXT
NEXT
GET (0, 0)-(15, 13), images(90)
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7
DATA 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, 7, 7, 0, 0, 0
DATA 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, 0, 0, 7, 7, 0, 0
DATA 7, 7, 7, 7, 7, 0, 7, 0, 1, 7, 0, 0, 0, 7, 7, 7
DATA 7, 7, 7, 1, 0, 1, 0, 7, 7, 1, 7, 0, 0, 0, 7, 7
DATA 7, 7, 1, 0, 1, 0, 1, 1, 7, 7, 7, 7, 0, 0, 0, 7
DATA 7, 1, 0, 1, 0, 7, 1, 1, 1, 7, 7, 7, 7, 0, 0, 7
DATA 7, 1, 0, 0, 0, 7, 7, 1, 1, 7, 7, 7, 0, 0, 0, 7
DATA 7, 1, 7, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7
DATA 7, 1, 7, 7, 0, 0, 0, 7, 7, 7, 0, 0, 0, 7, 7, 7
DATA 7, 1, 7, 7, 7, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7
DATA 7, 1, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7
DATA 1, 1, 1, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7
CLS : PAINT (0, 0), 7
' slider
FOR i = 0 TO 14
FOR ii = 0 TO 19
READ c
PSET (ii, i), c
NEXT
NEXT
GET (0, 0)-(19, 14), images(119)
DATA 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 15, 7, 7, 7, 7, 7, 15, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8
DATA 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
' unchecked
CLS : PAINT (0, 0), 7
LINE (0, 0)-(9, 9), 15, BF
GET (0, 0)-(9, 9), images(165)
' checked
CLS : PAINT (0, 0), 7
FOR i = 0 TO 9
FOR ii = 0 TO 9
READ c
PSET (ii, i), c
NEXT
NEXT
GET (0, 0)-(9, 9), images(186)
DATA 15, 15, 15, 15, 15, 15, 15, 15, 15, 15
DATA 15, 15, 15, 15, 15, 15, 15, 15, 15, 15
DATA 15, 15, 15, 15, 15, 15, 15, 15, 02, 15
DATA 15, 15, 15, 15, 15, 15, 15, 02, 02, 15
DATA 15, 15, 15, 15, 15, 15, 02, 02, 15, 15
DATA 15, 02, 15, 15, 15, 02, 02, 15, 15, 15
DATA 15, 02, 02, 15, 02, 02, 15, 15, 15, 15
DATA 15, 15, 02, 02, 02, 15, 15, 15, 15, 15
DATA 15, 15, 15, 02, 15, 15, 15, 15, 15, 15
DATA 15, 15, 15, 15, 15, 15, 15, 15, 15, 15
CLS : PAINT (0, 0), 7
' opline
LINE (0, 0)-(13, 13), 0
LINE (1, 0)-(13, 12), 8
LINE (0, 1)-(12, 13), 8
GET (0, 0)-(13, 13), images(207)
CLS : PAINT (0, 0), 7
' square
LINE (0, 0)-(13, 13), 8, B
LINE (1, 1)-(12, 12), 0, B
LINE (2, 2)-(11, 11), 8, B
GET (0, 0)-(13, 13), images(236)
CLS : PAINT (0, 0), 7
' opcircle
CIRCLE (7, 7), 6, 8
CIRCLE (7, 7), 5, 0
GET (0, 0)-(13, 13), images(265)
CLS : PAINT (0, 0), 7
' undo
FOR i = 0 TO 13
FOR ii = 0 TO 13
READ c
PSET (ii, i), c
NEXT
NEXT
GET (0, 0)-(13, 13), images(294)
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 2, 2, 2, 7, 2, 2, 7, 7
DATA 7, 7, 7, 7, 7, 2, 2, 2, 7, 7, 7, 2, 7, 7
DATA 7, 7, 7, 7, 2, 2, 2, 7, 7, 7, 7, 2, 7, 7
DATA 7, 7, 7, 2, 2, 2, 7, 7, 7, 7, 2, 7, 7, 7
DATA 7, 7, 2, 2, 2, 2, 7, 7, 7, 2, 7, 7, 7, 7
DATA 2, 7, 2, 2, 2, 7, 7, 7, 2, 7, 7, 7, 7, 7
DATA 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
CLS
DEF SEG = VARSEG(images(1))
BSAVE "images.bpf", VARPTR(images(1)), 1288
LINE INPUT "All data created - Press Enter"; e$
SYSTEM
Ok, so this isn't actually a game. It was a math problem that I had to solve on a competition, but to make it easier to solve, I decided to make a program out of it. It's very simple, and doesn't have much features (ex: if you get stuck, it doesn't automatically restart or quit), because I only wanted a quick and easy way to solve the problem. This is how it works:
-> -> -> <- <- <-
You start like that, and you need to move all the -> arrows to the right side, and the <- arrows to the left side. Each arrow can only go in the direction that they are pointing, and they can either move to the empty space, or jump over another arrow into an empty space.
'Here is the code:
CLS
SCREEN 12
DIM places(1 TO 7)
DIM symbols(374)
CONST right = 250
CONST left = 125
CONST none = 0
FOR i = 1 TO 3
places(i) = right
places(i + 4) = left
NEXT
places(4) = none
CLS
LINE (0, 0)-(19, 19), 0, BF
GET (0, 0)-(19, 19), symbols(none)
CLS
LINE (2, 9)-(7, 5), 2
LINE (2, 10)-(7, 14), 2
LINE (7, 14)-(7, 5), 2
PAINT (5, 10), 2
LINE (5, 8)-(17, 11), 2, BF
GET (0, 0)-(19, 19), symbols(left)
CLS
LINE (17, 9)-(12, 5), 9
LINE (17, 10)-(12, 14), 9
LINE (12, 14)-(12, 5), 9
PAINT (14, 10), 9
LINE (14, 8)-(2, 11), 9, BF
GET (0, 0)-(19, 19), symbols(right)
CLS
FOR i = 250 TO 290 STEP 20
PUT (i, 230), symbols(right)
PUT (i + 80, 230), symbols(left)
NEXT
PUT (310, 230), symbols(none)
LINE (250, 230)-(269, 249), 6, B
mark = 1
DO
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
LINE ((mark - 1) * 20 + 250, 230)-((mark - 1) * 20 + 269, 249), 0, B
SELECT CASE a$
CASE CHR$(0) + "M": mark = mark + 1
CASE CHR$(0) + "K": mark = mark - 1
CASE CHR$(27): SYSTEM
CASE CHR$(13): EXIT DO
END SELECT
IF mark > 7 THEN mark = 1
IF mark < 1 THEN mark = 7
LINE ((mark - 1) * 20 + 250, 230)-((mark - 1) * 20 + 269, 249), 6, B
LOOP
upperx = 0: lowerx = 0
upperx = mark + 1
IF upperx < 8 THEN
IF places(mark) = right AND places(upperx) = none THEN
places(upperx) = places(mark)
places(mark) = none
PUT ((mark - 1) * 20 + 250, 230), symbols(none), PSET
PUT ((upperx - 1) * 20 + 250, 230), symbols(places(upperx))
mark = mark + 1
LINE ((mark - 1) * 20 + 250, 230)-((mark - 1) * 20 + 269, 249), 6, B
GOTO continue
END IF
END IF
upperx = upperx + 1
IF upperx < 8 THEN
IF places(mark) = right AND places(upperx) = none THEN
places(upperx) = places(mark)
places(mark) = none
PUT ((mark - 1) * 20 + 250, 230), symbols(none), PSET
PUT ((upperx - 1) * 20 + 250, 230), symbols(places(upperx))
mark = mark + 2
LINE ((mark - 1) * 20 + 250, 230)-((mark - 1) * 20 + 269, 249), 6, B
GOTO continue
END IF
END IF
lowerx = mark - 1
IF lowerx > 0 THEN
IF places(mark) = left AND places(lowerx) = none THEN
places(lowerx) = places(mark)
places(mark) = none
PUT ((mark - 1) * 20 + 250, 230), symbols(none), PSET
PUT ((lowerx - 1) * 20 + 250, 230), symbols(places(lowerx))
mark = mark - 1
LINE ((mark - 1) * 20 + 250, 230)-((mark - 1) * 20 + 269, 249), 6, B
GOTO continue
END IF
END IF
lowerx = lowerx - 1
IF lowerx > 0 THEN
IF places(mark) = left AND places(lowerx) = none THEN
places(lowerx) = places(mark)
places(mark) = none
PUT ((mark - 1) * 20 + 250, 230), symbols(none), PSET
PUT ((lowerx - 1) * 20 + 250, 230), symbols(places(lowerx))
mark = mark - 2
LINE ((mark - 1) * 20 + 250, 230)-((mark - 1) * 20 + 269, 249), 6, B
GOTO continue
END IF
END IF
continue:
LINE ((mark - 1) * 20 + 250, 230)-((mark - 1) * 20 + 269, 249), 6, B
IF places(1) = left AND places(2) = left AND places(3) = left AND places(5) = right AND places(6) = right AND places(7) = right THEN LOCATE 2, 33: PRINT "Congratulations!": SYSTEM
LOOP
Read the instructions for using this program, and see how smart the computer is!!! (If you follow the instructions correctly...)
'Start here
CLS
x = 20
LOCATE 3, x
PRINT "First, choose any number. Then, mix up "
LOCATE 4, x
PRINT "the digits of the first number, to create"
LOCATE 5, x
PRINT "another one. Now, subtract the smaller "
LOCATE 6, x
PRINT "number from the bigger one, and multiply "
LOCATE 7, x
PRINT "than with any number you wish. Finally, "
LOCATE 8, x
PRINT "cross out any digit from your final "
LOCATE 9, x
PRINT "number (not a digit that equals 0), and "
LOCATE 10, x
PRINT "enter it below: "
LOCATE 12, x
PRINT "Example: 231 - 123 = 108"
LOCATE 13, x
PRINT "108 * 7 = 756"
LOCATE 14, x
PRINT "Let's cross out 5: 76. The computer will "
LOCATE 15, x
PRINT "Tell you that the missing digit is 5. "
LOCATE 17, 20
INPUT "", number$
digs = 0
FOR i = 1 TO LEN(number$)
digs = digs + VAL(MID$(number$, i, 1))
NEXT
test = 0
DO
test = test + 1
tester = 9 * test
IF tester - digs > 0 THEN EXIT DO
LOOP WHILE INKEY$ = ""
misser = tester - digs
LOCATE 19, 20
COLOR 9
PRINT "The missing digit is"; misser
SYSTEM
If all the digits add up to nine then the whole number is divisible by nine.
The difference between two numbers with the digets rearranged is divisible by nine.
Now I just need to prove that it is true, that the difference between a number and another with the same digits rearranged is divisible by nine. It's hard to prove. This is what I have so far:
(10a + b) - (10b + a) = 10a + b - 10b - a = 9a - 9b = 9(a - b), so it is divisible by nine
and
(100a + 10b + c) - (100c + 10a + b) = 100a + 10b + c - 100c - 10a - b = 90a + 9b - 99c =
= 9(10a + b + 11c), so this will work with 3 digit numbers too.
I need to write this down so it would prove that it also works for n digit numbers...
Where n = number of digits > 1 and x = 1 to n-1
We will say x = 1 for this example.
10 ^ n - 10 ^ (n-x) is always divisible by nine therefore:-
b * 10 ^ 3 - b * 10 ^ 1 = b * 1000 - b * 10 = 990 * b etc.
If you have 10^n - 10^(n-x) using the earlier limits then you are always going to be using the equivalent of 10 - 1,1000 - 10,100000 - 100 which will always result in a number divisible by nine.
The principle is used for bank transposition errors
January 6 2008, 7:30 PM
Create any number and switch any 2 digits. Subtract from the larger number and it is divisible by 9. When a teller is doing the book at the end of the day and it is off, they do the same thing until they find differences divisible by 9. One of the book numbers minus the book error finds a transposition usually.
And your program is not something that is new! Also the programs listed here are for something you actually created. Not a copy of somebody elses work.
Ted
This message has been edited by burger2227 on Jan 6, 2008 7:32 PM
I know this is probably one of the many Snake games, but I hope you like it!!!
Oh, and it's just a demo, since I still need to do some things in it to make it better, but I'm not having enough time for it these days (school)...
Need to run creatf.bas before you play
Instructions aren't done yet. After you beat the championship, you get to create accounts, and then advance in levels. Almost every level reached provides you with new features, such as being able to change the background color.
'Start of program
DECLARE SUB login ()
DECLARE SUB testlevel ()
DEFINT A-Z
DECLARE FUNCTION ask$ (text$, x, y, max, mode)
DECLARE SUB changeapp (i)
DECLARE SUB settings (i)
DECLARE SUB options ()
DECLARE FUNCTION portp$ (txt$)
DECLARE FUNCTION setuplevel ()
DECLARE SUB logo ()
DECLARE SUB highscores (index)
DECLARE SUB SPEEDset ()
DECLARE SUB center (text$, y)
DECLARE SUB clearground (x, y)
DECLARE SUB mainmenu (mark)
DECLARE SUB showinfo (index, value)
DECLARE SUB initialize ()
DECLARE SUB playSNAKE ()
DECLARE SUB defscreen ()
DECLARE SUB restorecolors ()
DECLARE SUB drawthings ()
DECLARE SUB PUTimage (col, row, index)
RANDOMIZE TIMER
CLEAR , , 3000
CLS
DIM SHARED MyErr AS INTEGER
ON ERROR GOTO GetMyErr
DIM SHARED cpu AS DOUBLE
OPEN "snake.tim" FOR INPUT AS #1: INPUT #1, cpu: CLOSE #1
ON ERROR GOTO 0
IF cpu = 0 THEN
PRINT "First run of this program on this machine"
PRINT "Please wait a minute while the speed is measured"
t# = TIMER
FOR i! = 1 TO 1000000: NEXT
t2# = TIMER
cpu = t2# - t#
OPEN "snake.tim" FOR OUTPUT AS #1: WRITE #1, cpu: CLOSE #1
END IF
SCREEN 12
DIM SHARED imageSET(7364) AS SINGLE, numSET(399) AS SINGLE
DIM SHARED background(6820) AS SINGLE
DIM SHARED ground(1 TO 32, 1 TO 24), eng$(1 TO 128), lang%
DIM SHARED prey, SPEED AS SINGLE, level, usernumber, users, champdone, champ, realspeed AS SINGLE, score, oldscore, speedlevel, lives, snakelength, oldlength
TYPE topperson
nickname AS STRING * 20
playdate AS STRING * 10
score AS LONG
id AS STRING * 5
END TYPE
DIM SHARED top(1 TO 10) AS topperson
TYPE filmloc
x AS INTEGER
y AS INTEGER
END TYPE
DIM SHARED film AS filmloc
TYPE body
col AS INTEGER
row AS INTEGER
bodypart AS INTEGER
TURN AS INTEGER
dir AS INTEGER
rdir AS INTEGER
END TYPE
TYPE account
nickname AS STRING * 20
password AS STRING * 8
level AS INTEGER
avscore AS INTEGER
gplayed AS INTEGER
lvlreached AS INTEGER
language AS INTEGER
gmode AS INTEGER
rats AS INTEGER
bg AS INTEGER
snakec AS INTEGER
spattern AS INTEGER
END TYPE
DIM SHARED user AS account
DIM SHARED snake(1 TO 2) AS body
CONST head = 0
CONST neck = 500
CONST shoulder = 1000
CONST body = 1500
CONST tail = 2000
CONST tailend = 2500
CONST rattle = 3000
CONST mouse = 6000
CONST rat = 6500
CONST frog = 7250
CONST blank = 6625
CONST block = 7125
CONST TURN = 3000
CONST west = 0
CONST north = 125
CONST east = 250
CONST south = 375
CONST NE = 0
CONST NW = 125
CONST SW = 250
CONST SE = 375
CONST WN = 375
CONST EN = 250
CONST ES = 125
CONST WS = 0
GOSUB GETsprites
restorecolors
OPEN "snake.tem" FOR OUTPUT AS #1: CLOSE #1
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(champdone)
GET #1, 1, champdone
GET #1, 2, usernumber
GET #1, 3, users
CLOSE #1
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(user)
IF usernumber > 4 THEN
IF champdone = 1 THEN GET #1, usernumber, user
ELSE
GET #1, 4, user
END IF
CLOSE #1
lang% = user.language
changeapp 1: changeapp 2: changeapp 3
OPEN "snake.str" FOR INPUT AS #1
FOR i = 1 TO 128
INPUT #1, eng$(i)
NEXT
CLOSE #1
OPEN "snake.top" FOR RANDOM AS #1 LEN = LEN(top(1))
FOR topers = 1 TO 10
GET #1, topers, top(topers)
NEXT
CLOSE #1
mainmenu 1
DO
mainmenu 2
LOOP
CLOSE #2: KILL "snake.tem"
SYSTEM
GetMyErr:
MyErr = ERR: RESUME NEXT
GETsprites:
FOR n = 0 TO 15
OUT &H3C8, n
OUT &H3C9, 0
OUT &H3C9, 0
OUT &H3C9, 0
NEXT n
maxx = 19: maxy = 299: x = -1: y = 0
RESTORE imagedata
DO
READ counter, colr
IF colr = 7 THEN colr = 3: GOTO 17
IF colr = 14 THEN colr = 3
IF colr = 77 THEN colr = 7
17:
FOR i = 1 TO counter
x = x + 1
IF x > maxx THEN x = 0: y = y + 1
PSET (x, y), colr
NEXT
LOOP UNTIL x = maxx AND y = maxy
index = 0
placey = 0
DO
IF index = 7000 THEN index = 7250
GET (0, placey)-(19, placey + 19), imageSET(index)
IF index < 6500 OR index = 7250 THEN GOSUB pose
index = index + 500
placey = placey + 20
LOOP UNTIL placey = 280
LINE (0, 0)-(19, 19), 7, BF
FOR i = 1 TO 500
x = INT(RND * 20)
y = INT(RND * 20)
PSET (x, y), 8
PSET (x + 1, y + 1), 15
NEXT
LINE (0, 0)-(19, 19), 7, B
GET (0, 0)-(19, 19), imageSET(block)
LINE (0, 0)-(19, 19), 3, BF: GET (0, 0)-(19, 19), imageSET(6625)
GET (0, 0)-(19, 19), imageSET(6750)
GET (0, 0)-(19, 19), imageSET(6875)
GET (0, 0)-(19, 19), imageSET(7000)
CLS
COLOR 4
FOR i = 0 TO 9
IF i = 0 THEN S$ = "O" ELSE S$ = LTRIM$(RTRIM$(STR$(i)))
LOCATE 1, 1: PRINT S$
LINE (40, 41)-(46, 53), 15, BF
FOR y = 1 TO 13
FOR x = 0 TO 6
IF POINT(x, y) = 4 THEN PSET (40 + x, 40 + y), 4
NEXT
NEXT
GET (40, 41)-(46, 53), numSET(i * 40)
LINE (40, 41)-(46, 53), 3, BF
NEXT
RETURN
pose:
FOR poses = index TO index + 250 STEP 125
PUT (100, 100), imageSET(poses), PSET
FOR x = 100 TO 119
FOR y = 100 TO 119
PSET (219 - y, x - 20), POINT(x, y)
NEXT y
NEXT x
GET (100, 80)-(119, 99), imageSET(poses + 125)
NEXT poses
RETURN
imagedata:
DATA 49,7,7,10,11,7,2,10,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,10,8,7,1,10,1,12
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,10,7,7,1,10,1,8,1,4,1,12
DATA 2,2,2,6,1,8,1,2,1,8,1,2,1,8,1,10,5,7,1,10,1,8,1,2,1,4,1,12,1,8
DATA 1,2,2,6,1,2,1,8,1,2,1,8,1,2,1,8,2,10,2,7,1,10,1,8,1,2,1,8,1,12
DATA 1,8,1,2,4,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,7,2,8,1,2,1,8,1,2
DATA 1,8,1,2,6,6,1,2,1,8,1,2,1,8,1,2,1,8,1,7,1,10,1,2,1,8,1,2,1,8
DATA 11,6,1,2,2,6,1,7,1,10,1,8,1,2,1,8,1,2,11,6,1,2,2,6,1,7,1,8,1,2
DATA 1,8,1,2,2,8,1,2,6,6,1,2,1,8,1,2,1,8,1,2,1,8,2,7,1,10,1,2,1,8
DATA 1,2,1,12,1,8,1,2,4,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,3,7,1,10,1,2
DATA 1,8,1,4,1,12,1,8,1,2,2,6,1,2,1,8,1,2,1,8,1,2,1,8,2,10,4,7,1,10
DATA 1,2,1,4,1,12,2,2,2,6,1,8,1,2,1,8,1,2,1,8,1,10,7,7,1,10,1,12,1,8
DATA 1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,10,10,7,2,10,1,2,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,10,12,7,7,10,44,7
DATA 120,7,20,10,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,6,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,4,6,1,2
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,6,1,2,2,6,1,2,2,6,2,2,2,6
DATA 1,2,2,6,1,2,2,6,2,2,2,6,1,2,2,6,1,2,2,6,2,2,2,6,1,2,2,6,1,2
DATA 2,6,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,4,6,1,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,2,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,6,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,1,8,1,2,20,10,120,7
DATA 100,7,20,10,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,3,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,2,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,6,1,2
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8
DATA 4,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,6,1,2,2,6,1,2,2,6
DATA 2,2,2,6,1,2,2,6,1,2,2,6,2,2,2,6,1,2,2,6,1,2,2,6,2,2,2,6,1,2
DATA 2,6,1,2,2,6,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,4,6,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,2,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,6,1,2
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8
DATA 3,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,20,10,100,7
DATA 80,7,20,10,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,8,2,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8
DATA 1,2,1,8,1,2,1,8,1,2,1,8,4,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8
DATA 1,2,2,6,1,2,2,6,1,2,2,6,2,2,2,6,1,2,2,6,1,2,2,6,2,2,2,6,1,2
DATA 2,6,1,2,2,6,2,2,2,6,1,2,2,6,1,2,2,6,2,2,1,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,4,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,8,2,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8
DATA 1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,2,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,8,1,2,1,8,1,2,20,10,80,7
DATA 140,7,20,10,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,6,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,1,8,2,2,2,6,1,8,2,6,1,2,1,8,4,6,1,2,1,8,2,6
DATA 1,2,2,6,2,8,2,6,1,2,2,6,1,8,1,2,4,6,1,8,1,2,2,6,1,8,2,6,2,2
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,6,1,8,1,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,1,8,20,10,140,7
DATA 160,7,20,10,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,6,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,6
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,20,10,160,7
DATA 125,7,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,7,7,1,8,1,6
DATA 1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,3,7,2,10,1,6
DATA 1,8,1,6,1,8,2,6,1,8,1,6,1,8,2,6,1,8,1,6,1,8,1,6,3,7,1,8,1,2
DATA 1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,10,2,7
DATA 1,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2
DATA 1,10,2,7,2,10,2,6,1,8,1,6,1,8,2,6,1,8,1,6,1,8,2,6,1,8,1,6,1,8
DATA 6,7,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8
DATA 8,7,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,124,7
DATA 135,7,5,10,13,7,2,10,1,8,1,2,1,8,1,2,1,8,11,7,2,10,1,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,10,7,1,10,1,8,1,2,1,8,1,2,1,8,1,2,2,6,1,8,9,7,1,10,6,6
DATA 1,8,2,6,1,2,8,7,1,10,1,2,6,6,1,2,1,8,1,2,1,8,8,7,1,10,1,8,2,6
DATA 1,8,1,2,2,6,1,8,1,2,1,8,1,2,7,7,1,10,1,8,1,2,2,6,1,2,1,8,2,6
DATA 1,2,1,8,2,10,7,7,1,10,1,2,1,8,6,6,2,10,8,7,1,10,1,2,1,8,1,2,5,6
DATA 1,10,10,7,1,10,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,10,11,7,1,10,1,2,1,8
DATA 2,6,1,2,1,8,1,2,1,10,11,7,1,10,1,8,1,2,2,6,1,8,1,2,1,10,12,7,1,10
DATA 1,2,1,8,1,2,1,8,1,2,1,8,1,10,6,7
DATA 115,7,5,10,13,7,2,10,1,2,1,8,1,2,1,8,1,2,11,7,2,10,1,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,10,7,1,10,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,9,7,1,10
DATA 1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,6,1,8,8,7,1,10,1,8,6,6,1,8,2,6
DATA 1,2,7,7,1,10,1,8,1,2,6,6,1,2,1,8,1,2,1,8,7,7,1,10,1,2,1,8,2,6
DATA 1,8,1,2,2,6,1,8,1,2,1,8,1,2,6,7,1,10,1,2,1,8,1,2,2,6,1,2,1,8
DATA 2,6,1,2,1,8,1,2,1,8,6,7,1,10,1,8,1,2,1,8,6,6,1,8,1,2,2,10,5,7
DATA 1,10,1,8,1,2,1,8,1,2,6,6,2,10,7,7,1,10,1,2,1,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,10,9,7,1,10,1,8,1,2,1,8,2,6,1,2,1,8,1,2,1,8,1,10
DATA 9,7,1,10,1,2,1,8,1,2,2,6,1,8,1,2,1,8,1,10,10,7,1,10,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,8,1,2,1,10,5,7
DATA 94,7,6,10,12,7,2,10,1,2,1,8,1,2,1,8,1,2,1,8,10,7,2,10,1,8,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,9,7,1,10,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2
DATA 1,8,8,7,1,10,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,7,7
DATA 1,10,1,8,2,2,1,8,1,2,1,8,1,2,1,8,1,2,2,6,1,8,6,7,1,10,1,8,1,2
DATA 1,8,6,6,1,8,2,6,1,2,6,7,1,10,1,2,1,8,1,2,6,6,1,2,1,8,1,2,1,8
DATA 5,7,1,10,1,2,1,8,1,2,1,8,2,6,1,8,1,2,2,6,1,8,1,2,1,8,1,2,5,7
DATA 1,10,1,8,1,2,1,8,1,2,2,6,1,2,1,8,2,6,1,2,1,8,1,2,1,8,4,7,1,10
DATA 1,8,1,2,1,8,1,2,1,8,6,6,1,8,1,2,1,8,1,2,4,7,1,10,1,2,1,8,1,2
DATA 1,8,1,2,6,6,1,2,1,8,1,2,1,10,4,7,1,10,1,8,1,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,1,8,2,2,1,8,2,10,5,7,1,10,1,2,1,8,1,2,1,8,2,6,1,2,1,8
DATA 1,2,1,8,1,2,1,10,7,7,1,10,1,8,1,2,1,8,1,2,2,6,1,8,1,2,1,8,1,2
DATA 1,8,1,10,7,7,1,10,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,10
DATA 4,7
DATA 155,7,5,10,13,7,2,10,1,2,1,8,1,2,1,8,1,2,11,7,2,10,1,8,1,2,1,8,1,2,2,6
DATA 1,8,10,7,1,10,4,6,1,2,1,8,2,6,1,2,9,7,1,10,5,6,1,8,1,2,1,8,1,2
DATA 1,8,9,7,1,10,2,6,1,2,2,6,1,2,1,8,3,10,8,7,1,10,1,2,5,6,2,10,11,7
DATA 1,10,1,8,4,6,1,10,12,7,1,10,1,8,1,2,1,8,1,2,1,8,1,10,13,7,1,10,1,2
DATA 1,8,1,2,1,8,1,2,1,10,13,7,1,10,1,8,2,6,1,2,1,10,14,7,1,10,1,2,2,6
DATA 1,8,1,10,14,7,1,10,1,8,1,2,1,8,1,2,1,10,7,7
DATA 175,7,5,10,13,7,2,10,1,2,1,8,1,2,1,8,1,2,12,7,1,10,1,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,11,7,1,10,1,6,1,2,1,8,1,2,1,8,3,10,10,7,1,10,3,6,1,2,2,10
DATA 12,7,1,10,1,8,1,2,2,6,1,10,14,7,1,10,1,2,1,8,1,2,1,10,14,7,1,10,1,2
DATA 1,8,1,2,1,10,15,7,1,10,1,8,1,2,1,8,1,10,15,7,1,10,1,2,1,8,1,10,16,7
DATA 1,10,1,8,1,2,1,10,16,7,1,10,1,2,1,8,1,10,8,7
DATA 87,14,3,77,17,14,1,77,2,15,1,77,11,14,1,15,1,14,1,15,2,14,1,77,1,15,1,77,2,14,5,77
DATA 6,14,1,15,5,77,1,14,8,77,4,14,4,77,1,0,1,15,10,77,2,14,1,13,18,77,1,14,1,13
DATA 19,77,2,14,4,77,1,0,1,15,10,77,1,14,1,77,3,14,1,15,5,77,1,14,8,77,1,14,1,77
DATA 2,14,1,15,1,14,1,15,2,14,1,77,1,15,1,77,2,14,5,77,2,14,1,77,7,14,1,77,2,15
DATA 1,77,7,14,1,77,8,14,3,77,7,14,1,77,19,14,1,77,1,14,1,77,18,14,1,77,41,14
DATA 96,7,2,13,8,7,2,8,1,7,5,8,2,13,2,7,1,13,6,7,1,8,1,15,8,8,1,13,2,7,1,13
DATA 5,7,12,8,2,7,1,13,5,7,1,8,1,15,10,8,1,7,1,13,6,7,12,8,1,7,1,13,7,7
DATA 7,8,1,13,2,8,1,7,1,13,7,7,9,8,3,13,7,7,2,8,1,4,8,8,8,7,8,8,1,144
DATA 2,7,1,144,6,7,1,13,3,8,1,14,2,7,1,144,4,7,2,144,7,7,2,15,3,7,2,144,92,7
DATA 76,7,1,10,1,2,18,7,1,10,1,2,9,7,1,10,1,2,4,7,2,2,1,7,1,2,7,7,1,10,1,2
DATA 2,7,1,2,1,7,4,2,1,7,1,2,7,7,1,10,2,8,1,2,1,7,6,2,8,7,1,10,1,2
DATA 1,3,1,8,9,2,6,7,1,10,13,2,6,7,1,10,13,2,7,7,1,10,1,2,1,3,1,8,9,2
DATA 8,7,1,10,2,8,1,2,1,7,6,2,10,7,1,10,1,2,2,7,1,2,1,7,4,2,1,7,1,2
DATA 11,7,1,10,1,2,4,7,2,2,1,7,1,2,19,7,1,10,1,2,18,7,1,10,1,2,62,7
Paletteinfo:
DATA 0,14,3, 0,0,42, 0,42,0, 0,14,3, 42,0,0, 60,52,0
DATA 60,52,0, 42,42,42, 21,21,21, 21,21,63, 21,63,21, 21,63,63
DATA 63,21,21, 63,21,63, 0,0,0, 63,63,63
FUNCTION ask$ (text$, x, y, max, mode)
COLOR 15
LOCATE y, x: PRINT text$
startx = x + LEN(text$): x = (x + LEN(text$)) * 8
txtlen = 0
LINE (x, (y - 1) * 2 + y * 14 - 14)-(x, (y - 1) * 2 + y * 14), 7
txt$ = ""
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
COLOR 5
SELECT CASE a$
CASE CHR$(13): IF txt$ <> "" THEN EXIT DO
CASE CHR$(27)
ask$ = "exit": EXIT FUNCTION
CASE CHR$(0) + "P": ask$ = "down": EXIT FUNCTION
CASE CHR$(0) + "H": ask$ = "up": EXIT FUNCTION
CASE CHR$(8)
IF txtlen > 0 THEN
LOCATE y, startx + txtlen: PRINT SPACE$(max - txtlen + 2)
txtlen = txtlen - 1: IF txtlen = 0 THEN txt$ = "" ELSE txt$ = MID$(txt$, 1, txtlen)
COLOR 5
IF mode = 1 THEN LOCATE y, startx + 1: PRINT txt$ ELSE LOCATE y, startx + 1: PRINT STRING$(txtlen, "*")
LINE (x + (txtlen * 8), (y - 1) * 2 + y * 14 - 14)-(x + (txtlen * 8), (y - 1) * 2 + y * 14), 7
END IF
CASE ELSE
IF mode = 2 THEN minimum = 33: maximum = 126 ELSE minimum = 65: maximum = 90
IF ASC(UCASE$(a$)) >= minimum AND ASC(UCASE$(a$)) <= maximum AND txtlen <= max THEN
txtlen = txtlen + 1
IF txtlen <= max THEN
IF mode = 1 THEN LOCATE y, startx + txtlen: PRINT UCASE$(a$) ELSE LOCATE y, startx + txtlen: PRINT "*"
txt$ = txt$ + UCASE$(a$)
LINE (x + txtlen * 8, (y - 1) * 2 + y * 14 - 14)-(x + txtlen * 8, (y - 1) * 2 + y * 14), 7
ELSE
txtlen = max
END IF
END IF
END SELECT
LOOP
ask$ = txt$
END FUNCTION
SUB center (text$, y)
' analize text length, so it knows what x coordanite to start printing:
textlen = LEN(text$)
FOR i = 1 TO LEN(text$)
a$ = MID$(text$, i, 1)
IF a$ = "-" THEN
IF MID$(text$, i + 1, 1) = "0" THEN IF MID$(text$, i + 2, 1) = "-" THEN textlen = textlen - 3: i = i + 2: GOSUB done
IF VAL(MID$(text$, i + 1, 3)) > 0 AND MID$(text$, i + 4, 1) = "-" THEN textlen = textlen - 5: i = i + 4: GOSUB done
IF VAL(MID$(text$, i + 1, 2)) > 0 AND MID$(text$, i + 3, 1) = "-" THEN textlen = textlen - 4: i = i + 3: GOSUB done
IF VAL(MID$(text$, i + 1, 1)) > 0 AND MID$(text$, i + 2, 1) = "-" THEN textlen = textlen - 3: i = i + 2
done:
END IF
NEXT i
startx = 41 - INT(textlen / 2)
COLOR 15
FOR i = 1 TO LEN(text$)
mark = 0
a$ = MID$(text$, i, 1)
IF a$ = "-" THEN
IF MID$(text$, i + 1, 1) = "0" THEN IF MID$(text$, i + 2, 1) = "-" THEN COLOR 0: i = i + 2: mark = 1: GOSUB done2
IF VAL(MID$(text$, i + 1, 1)) > 0 AND MID$(text$, i + 2, 1) = "-" THEN COLOR VAL(MID$(text$, i + 1, 1)): i = i + 2: mark = 1: GOSUB done2
IF VAL(MID$(text$, i + 1, 2)) > 0 AND MID$(text$, i + 3, 1) = "-" THEN COLOR VAL(MID$(text$, i + 1, 2)): i = i + 3: mark = 1: GOSUB done2
IF VAL(MID$(text$, i + 1, 3)) > 0 AND MID$(text$, i + 4, 1) = "-" THEN COLOR VAL(MID$(text$, i + 1, 3)): i = i + 4: mark = 1
END IF
done2:
IF mark = 0 THEN LOCATE y, startx: PRINT a$: startx = startx + 1
NEXT
END SUB
SUB changeapp (i)
SELECT CASE i
CASE 1
SELECT CASE user.bg
CASE 1: PALETTE 0, 3 + 256 * 14 + 0 * 65536: PALETTE 3, 3 + 256 * 14 + 0 * 65536
CASE 2: PALETTE 0, 3 + 256 * 0 + 14 * 65536: PALETTE 3, 3 + 256 * 0 + 14 * 65536
CASE 3: PALETTE 0, 14 + 256 * 3 + 0 * 65536: PALETTE 3, 14 + 256 * 3 + 0 * 65536
CASE 4: PALETTE 0, 10 + 256 * 10 + 10 * 65536: PALETTE 3, 10 + 256 * 10 + 10 * 65536
CASE 5: PALETTE 0, 20 + 256 * 10 + 0 * 65536: PALETTE 3, 20 + 256 * 10 + 0 * 65536
END SELECT
CASE 2
SELECT CASE user.snakec
CASE 1: PALETTE 2, 0 + 256 * 42 + 0 * 65536
CASE 2: PALETTE 2, 55 + 256 * 55 + 0 * 65536
CASE 3: PALETTE 2, 49 + 256 * 38 + 13 * 65536
CASE 4: PALETTE 2, 0 + 256 * 0 + 0 * 65536
CASE 5: PALETTE 2, 55 + 256 * 55 + 55 * 65536
END SELECT
CASE 3
SELECT CASE user.spattern
CASE 1: PALETTE 6, 60 + 256 * 52 + 0 * 65536
CASE 2: PALETTE 6, 7 + 256 * 30 + 7 * 65536
CASE 3: PALETTE 6, 7 + 256 * 7 + 30 * 65536
CASE 4: PALETTE 6, 5 + 256 * 5 + 5 * 65536
CASE 5: PALETTE 6, 30 + 256 * 7 + 7 * 65536
END SELECT
END SELECT
END SUB
SUB clearground (mx, my)
FOR i = 2 TO snakelength
GET #2, i, snake(1)
ground(snake(1).col, snake(1).row) = 1
NEXT i
FOR i = 2 TO snakelength + 1
reps = 0
DO
reps = reps + 1
IF i = snakelength + 1 THEN x = mx: y = my: EXIT DO
z = INT(RND * (snakelength - 1)) + 2
GET #2, z, snake(1)
LOOP UNTIL ground(snake(1).col, snake(1).row) = 1 OR reps = 50000
reps = 0
IF i <= snakelength THEN x = snake(1).col: y = snake(1).row
ground(x, y) = 0
FOR ii = 0 TO 19 STEP 1
LINE ((x - 1) * 20, (y - 1) * 20)-((x - 1) * 20 + ii, (y - 1) * 20 + ii), INT(RND * 15) + 1, B
FOR xxxx = 1 TO 1000: NEXT xxxx
NEXT ii
LINE ((x - 1) * 20, (y - 1) * 20)-(x * 20 - 1, y * 20 - 1), 3, BF
NEXT i
FOR y = 2 TO 23
FOR x = 2 TO 31
IF ground(x, y) <> 0 THEN LINE ((x - 1) * 20, (y - 1) * 20)-((x - 1) * 20 + 19, (y - 1) * 20 + 19), 3, BF
NEXT
NEXT
END SUB
SUB defscreen
CLS
PAINT (0, 0), 3
FOR col = 1 TO 32
PUTimage col, 1, block
PUTimage col, 24, block
NEXT col
FOR row = 2 TO 23
PUTimage 32, row, block
PUTimage 1, row, block
NEXT row
COLOR 4
LOCATE 3, 5: PRINT "Lives:"
LOCATE 3, 64: PRINT "Score:"
LOCATE 3, 36: PRINT "S N A K E"
LINE (27, 2)-(88, 17), 15, BF
LINE (276, 2)-(354, 17), 15, BF
LINE (500, 2)-(592, 17), 15, BF
FOR y = 30 TO 50
FOR x = 25 TO 560
IF POINT(x, y) = 4 THEN PSET (x, y - 29), 4: PSET (x + 1, y - 28), 7
NEXT
NEXT
LINE (25, 30)-(560, 50), 3, BF
PUT (80, 4), numSET(lives * 40), PSET
PUT (552, 4), numSET(0), PSET
PUT (560, 4), numSET(0), PSET
PUT (568, 4), numSET(0), PSET
PUT (576, 4), numSET(0), PSET
PUT (584, 4), numSET(0), PSET
LOCATE 28, 62: PRINT "by Peter Varnai"
LOCATE 28, 33: PRINT "Prey caugth:"
LINE (254, 462)-(385, 477), 15, BF
FOR y = 426 TO 455
FOR x = 254 TO 639
IF POINT(x, y) = 4 THEN PSET (x, y + 30), 4: PSET (x + 1, y + 31), 7
NEXT
NEXT
showinfo 3, prey
LINE (254, 428)-(619, 455), 3, BF
END SUB
SUB highscores (index)
logo
' index = 1 --> show the highscores
' index = 2 --> write to AND show the highscores
OPEN "snake.top" FOR RANDOM AS #1 LEN = LEN(top(1))
FOR topers = 1 TO 10
GET #1, topers, top(topers)
NEXT
CLOSE #1
IF index = 1 THEN GOTO 2
user.avscore = ((user.avscore * user.gplayed) + score) / (user.gplayed + 1)
testlevel
user.gplayed = user.gplayed + 1
IF users > 0 THEN
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(user)
PUT #1, usernumber, user
CLOSE #1
END IF
FOR i = 1 TO 10
IF score >= top(i).score THEN
mark = i
FOR ii = 9 TO i STEP -1
top(ii + 1).score = top(ii).score
top(ii + 1).playdate = top(ii).playdate
top(ii + 1).nickname = top(ii).nickname
NEXT ii
COLOR 9: center eng$(1 + lang%), 11
COLOR 15: center eng$(2 + lang%), 13
inputname:
IF usernumber < 5 THEN
DO: LOOP UNTIL INKEY$ = ""
COLOR 15
pname$ = ask$("Enter name:", 32, 16, 20, 1)
IF pname$ = "exit" OR pname$ = "up" OR pname$ = "down" OR pname$ = "" THEN GOSUB inputname
LINE ((43 + LEN(pname$)) * 8, 240)-((43 + LEN(pname$)) * 8, 254), 3
pname$ = UCASE$(MID$(pname$, 1, 1)) + LCASE$(MID$(pname$, 2, LEN(pname$) - 1))
ELSE
pname$ = UCASE$(MID$(user.nickname, 1, 1)) + LCASE$(MID$(user.nickname, 2, LEN(user.nickname) - 1))
END IF
top(i).nickname = pname$
top(i).playdate = DATE$
top(i).score = score
OPEN "snake.top" FOR RANDOM AS #1 LEN = LEN(top(1))
FOR iii = 1 TO 10
PUT #1, iii, top(iii)
NEXT iii
CLOSE #1
GOTO 2
END IF
NEXT i
COLOR 9
center eng$(4 + lang%), 11
COLOR 15
center eng$(5 + lang%), 13
mark = 1
center eng$(6 + lang%), 16
center eng$(9 + lang%), 18
center eng$(11 + lang%), 20
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
SOUND 150, 1
SELECT CASE a$
CASE CHR$(0) + "P": mark = mark + 1
CASE CHR$(0) + "H": mark = mark - 1
CASE CHR$(13): EXIT DO
CASE CHR$(32): EXIT DO
END SELECT
IF mark > 3 THEN mark = 1
IF mark < 1 THEN mark = 3
SELECT CASE mark
CASE 1
center eng$(6 + lang%), 16
center eng$(9 + lang%), 18
center eng$(11 + lang%), 20
CASE 2
center eng$(7 + lang%), 16
center eng$(8 + lang%), 18
center eng$(11 + lang%), 20
CASE 3
center eng$(7 + lang%), 16
center eng$(9 + lang%), 18
center eng$(10 + lang%), 20
END SELECT
t# = TIMER + .05: DO: LOOP UNTIL TIMER >= t#
LOOP
IF mark = 1 THEN highscores 1: EXIT SUB
IF mark = 2 THEN EXIT SUB
IF mark = 3 THEN CLOSE #2: KILL "snake.tem": SYSTEM
2:
LINE (100, 140)-(540, 470), 3, BF
center eng$(12 + lang%), 12
FOR topers = 1 TO 10
IF topers = mark THEN COLOR 9 ELSE COLOR 15
LOCATE topers + 12, 21
PRINT top(topers).nickname; " "; top(topers).playdate; " "; top(topers).score
NEXT
FOR y = 175 TO 351 STEP 16
LINE (158, y)-(482, y), 2
NEXT
LINE (157, 174)-(483, 352), 2, B
LINE (158, 176)-(158, 350), 2: LINE (482, 176)-(482, 350), 2
LINE (319, 176)-(319, 350), 2: LINE (320, 176)-(320, 350), 2
LINE (412, 176)-(412, 350), 2: LINE (413, 176)-(413, 350), 2
center eng$(8 + lang%), 25
DO: a$ = INKEY$: LOOP UNTIL a$ = CHR$(13) OR a$ = CHR$(32) OR a$ = CHR$(27)
SOUND 150, 1
END SUB
SUB initialize
CLOSE #2
OPEN "snake.tem" FOR RANDOM AS #2 LEN = LEN(snake(1))
ERASE ground
FOR col = 1 TO 32
ground(col, 1) = -2
ground(col, 24) = -2
NEXT col
FOR row = 2 TO 23
ground(1, row) = -2
ground(32, row) = -2
NEXT row
FOR y = 2 TO 23
FOR x = 2 TO 31
ground(x, y) = 0
NEXT
NEXT
oldlength = 16
snakelength = 16
x = 24
FOR i = 1 TO snakelength
x = x - 1
snake(1).col = x
snake(1).row = 23
snake(1).TURN = 0
snake(1).dir = east
SELECT CASE i
CASE 1: snake(1).bodypart = head
CASE 2: snake(1).bodypart = neck
CASE 3: snake(1).bodypart = shoulder
CASE 4: snake(1).bodypart = body
CASE 5: snake(1).bodypart = body
CASE 6: snake(1).bodypart = body
CASE 7: snake(1).bodypart = body
CASE 8: snake(1).bodypart = body
CASE 9: snake(1).bodypart = body
CASE 10: snake(1).bodypart = body
CASE 11: snake(1).bodypart = shoulder
CASE 12: snake(1).bodypart = neck
CASE 13: snake(1).bodypart = tail
CASE 14: snake(1).bodypart = tailend
CASE 15: snake(1).bodypart = rattle
CASE 16
snake(1).bodypart = blank
END SELECT
ground(x, 23) = -1
PUTimage x, 23, snake(1).bodypart + snake(1).dir
PUT #2, i, snake(1)
NEXT i
ground(x, 23) = 0
END SUB
SUB login
LINE (0, 130)-(639, 479), 3, BF
center "-5-Login as a user", 11
center "Login as guest", 13
center "Return", 15
mark = 1
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
SOUND 150, 1
18:
SELECT CASE a$
CASE CHR$(13): EXIT DO
CASE CHR$(32): EXIT DO
CASE CHR$(8): LINE (0, 130)-(639, 479), 3, BF: EXIT SUB
CASE CHR$(27): LINE (0, 130)-(639, 479), 3, BF: EXIT SUB
CASE CHR$(0) + "P": mark = mark + 1
CASE CHR$(0) + "H": mark = mark - 1
END SELECT
IF mark > 3 THEN mark = 1
IF mark < 1 THEN mark = 3
SELECT CASE mark
CASE 1
center "-5-Login as a user", 11
center "Login as guest", 13
center "Return", 15
CASE 2
center "Login as a user", 11
center "-5-Login as guest", 13
center "Return", 15
CASE 3
center "Login as a user", 11
center "Login as guest", 13
center "-5-Return", 15
END SELECT
LOOP
IF mark = 3 THEN EXIT SUB
IF mark = 2 THEN
usernumber = 2
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(user)
GET #1, 4, user
CLOSE #1
changeapp 1: changeapp 2: changeapp 3
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(usernumber)
PUT #1, 2, usernumber
CLOSE #1
LINE (0, 130)-(639, 479), 3, BF
center SPACE$(35), 1
center "Welcome, " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)) + "!", 1
EXIT SUB
END IF
pname$ = ask$("User name:", 30, 24, 20, 1)
LINE ((40 + LEN(pname$)) * 8, 368)-((40 + LEN(pname$)) * 8, 382), 3
SELECT CASE pname$
CASE "exit": center SPACE$(35), 24: a$ = "": GOTO 18
CASE "down": a$ = CHR$(0) + "P": center SPACE$(35), 24: GOTO 18
CASE "up": a$ = CHR$(0) + "H": center SPACE$(35), 24: GOTO 18
CASE ELSE
GOTO 10
END SELECT
10:
pass$ = ask$("Password:", 31, 25, 8, 2)
center SPACE$(35), 25
center SPACE$(35), 24
SELECT CASE pass$
CASE "exit": a$ = "": GOTO 18
CASE "down": a$ = CHR$(0) + "P": GOTO 18
CASE "up": a$ = CHR$(0) + "H": GOTO 18
CASE ELSE
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(user)
FOR i = 5 TO 4 + users
GET #1, i, user
IF RTRIM$(user.nickname) = pname$ AND RTRIM$(user.password) = pass$ THEN
CLOSE #1
usernumber = i
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(usernumber)
PUT #1, 2, usernumber
CLOSE #1
changeapp 1: changeapp 2: changeapp 3
LINE (0, 130)-(639, 479), 3, BF
center SPACE$(35), 1
center "Welcome, " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)) + "!", 1
EXIT SUB
END IF
NEXT
END SELECT
GET #1, usernumber, user
center " ", 24
center " ", 25
center "-4-Incorrect user name or password", 25
t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#
center " ", 25
CLOSE #1
a$ = "": GOTO 18
END SUB
SUB logo
' S N A K E logo
RESTORE intro
PALETTE 1, 45
LINE (0, 0)-(639, 479), 3, BF
FOR i = 1 TO 5
READ startx: READ starty
READ counter
FOR n = 1 TO counter
READ x: READ y
LINE (startx, starty)-(x, y), 1
startx = x: starty = y
NEXT
READ px, py: PAINT (px, py), 1, 1
NEXT
LINE (300, 70)-(340, 85), 1, BF
END SUB
SUB mainmenu (mark)
4:
CLS
logo
IF mark = 1 THEN
x = 0
DO
x = x + 1
g = 0: r = 45
FOR c = 1 TO 15
PALETTE 1, (r - c * 3) + (g + c * 3) * 256
t# = TIMER + .05: WHILE t# > TIMER: WEND
NEXT
FOR c = 15 TO 1 STEP -1
PALETTE 1, (r - c * 3) + (g + c * 3) * 256
t# = TIMER + .05: WHILE t# > TIMER: WEND
NEXT
LOOP UNTIL x = 1
END IF
PALETTE 1, 45
OUT &HC8, 0
OUT &HC9, 3
OUT &HC9, 14
OUT &HC9, 0
IF mark = 1 THEN
' Small movie
RESTORE movie
OPEN "movie.dat" FOR RANDOM AS #1 LEN = LEN(film)
DO
READ startf: READ endf
IF startf = -1 THEN EXIT DO
FOR i = startf TO endf
READ index
GET #1, i, film
IF index = 6500 THEN index = 6625
tempx = film.x: tempy = film.y
PUTimage tempx, tempy, index
NEXT
FOR rep = 1 TO 2
WAIT &H3DA, 8
WAIT &H3DA, 8, 8
NEXT
LOOP
CLOSE #1
END IF
IF champdone = 1 THEN center "Welcome, " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)) + "!", 1
level = 0: champ = 0
mark = 1
center "-5-" + eng$(13 + lang%), 12
center eng$(14 + lang%), 14
center eng$(46 + lang%), 16
center eng$(15 + lang%), 18
center eng$(16 + lang%), 20
center eng$(17 + lang%), 22
IF champdone = 1 THEN center eng$(64 + lang%), 24
center eng$(18 + lang%), 27
COLOR 15
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
6:
SOUND 150, 1
SELECT CASE a$
CASE CHR$(0) + "P": mark = mark + 1: IF champdone <> 1 AND mark = 7 THEN mark = 8
CASE CHR$(0) + "H": mark = mark - 1: IF champdone <> 1 AND mark = 7 THEN mark = 6
CASE CHR$(13): EXIT DO
CASE CHR$(32): EXIT DO
CASE CHR$(27): CLOSE #2: KILL "snake.tem": SYSTEM
END SELECT
IF mark > 8 THEN mark = 1
IF mark < 1 THEN mark = 8
IF champdone <> 1 AND mark = 7 THEN mark = 8
SELECT CASE mark
CASE 1
center "-5-" + eng$(13 + lang%), 12
center eng$(14 + lang%), 14
center eng$(18 + lang%), 27
CASE 2
center eng$(13 + lang%), 12
center "-5-" + eng$(14 + lang%), 14
center eng$(46 + lang%), 16
CASE 3
center eng$(14 + lang%), 14
center eng$(45 + lang%), 16
center eng$(15 + lang%), 18
CASE 4
center eng$(46 + lang%), 16
center "-5-" + eng$(15 + lang%), 18
center eng$(16 + lang%), 20
CASE 5
center eng$(15 + lang%), 18
center "-5-" + eng$(16 + lang%), 20
center eng$(17 + lang%), 22
CASE 6
center eng$(16 + lang%), 20
center "-5-" + eng$(17 + lang%), 22
IF champdone = 1 THEN center eng$(64 + lang%), 24 ELSE center eng$(18 + lang%), 27
CASE 7
center "-5-" + eng$(64 + lang%), 24
center eng$(17 + lang%), 22
center eng$(18 + lang%), 27
CASE 8
center eng$(13 + lang%), 12
IF champdone = 1 THEN center eng$(64 + lang%), 24 ELSE center eng$(17 + lang%), 22
center "-5-" + eng$(18 + lang%), 27
END SELECT
t# = TIMER + .05: DO: LOOP UNTIL TIMER >= t#
LOOP
score = 0
prey = 0
IF mark = 1 THEN score = 0: oldscore = 0: champ = 0: lives = 1: defscreen: speedlevel = 0: SPEEDset: playSNAKE: EXIT SUB
IF mark = 2 THEN champ = 1: prey = 10: showinfo 3, prey: level = 1: score = 0: oldscore = 0: lives = 5: defscreen: speedlevel = 0: SPEEDset: playSNAKE: EXIT SUB
IF mark = 3 THEN GOSUB pass
IF mark = 4 THEN highscores 1
IF mark = 5 THEN options
IF mark = 7 THEN
login
LINE (0, 130)-(639, 479), 3, BF
center eng$(13 + lang%), 12
center eng$(14 + lang%), 14
center eng$(46 + lang%), 16
center eng$(15 + lang%), 18
center eng$(16 + lang%), 20
center eng$(17 + lang%), 22
center "-5-" + eng$(64 + lang%), 24
center eng$(18 + lang%), 27
a$ = "": GOTO 6
END IF
IF mark = 8 THEN CLOSE #2: KILL "snake.tem": SYSTEM
EXIT SUB
pass:
center " ", 16
DO
LOCATE 16, 38: PRINT " "
pass$ = ask$("", 38, 16, 5, 2)
SELECT CASE pass$
CASE "down": center eng$(46 + lang%), 16: a$ = CHR$(0) + "P": GOTO 6
CASE "up": center eng$(46 + lang%), 16: a$ = CHR$(0) + "H": GOTO 6
CASE "exit": a$ = "": GOTO 6
CASE ELSE: EXIT DO
END SELECT
LOOP
FOR i = 1 TO 10
IF pass$ = portp$(top(i).id) THEN
champ = 1: prey = 10: showinfo 3, prey: level = i: lives = 5: score = 0: oldscore = 0: defscreen: SPEEDset: playSNAKE: EXIT SUB
END IF
NEXT
SOUND 60, 10
LOCATE 16, 39: COLOR 4: PRINT "-----": t# = TIMER + 2: DO: LOOP UNTIL TIMER >= t#
a$ = ""
GOTO 6
END SUB
SUB options
LINE (0, 130)-(639, 479), 3, BF
center eng$(48 + lang%), 11
center "-5-" + eng$(49 + lang%), 15
IF champdone = 1 THEN
center eng$(50 + lang%), 18
center eng$(52 + lang%), 21
END IF
center eng$(9 + lang%), 28
mark = 1
DO
DO: LOOP UNTIL INKEY$ = ""
a$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
16:
SOUND 150, 1
SELECT CASE a$
CASE CHR$(0) + "P": mark = mark + 1: IF champdone <> 1 THEN mark = mark + 2
CASE CHR$(0) + "H": mark = mark - 1: IF champdone <> 1 THEN mark = mark - 2
CASE CHR$(32): EXIT DO
CASE CHR$(13): EXIT DO
CASE CHR$(27): LINE (0, 130)-(639, 479), 3, BF: EXIT SUB
END SELECT
IF mark > 4 THEN mark = 1
IF mark < 1 THEN mark = 4
SELECT CASE mark
CASE 1
center "-5-" + eng$(49 + lang%), 15
IF champdone = 1 THEN center eng$(50 + lang%), 18
center eng$(9 + lang%), 28
CASE 2
center "-5-" + eng$(50 + lang%), 18
center eng$(49 + lang%), 15
center eng$(52 + lang%), 21
CASE 3
center "-5-" + eng$(52 + lang%), 21
center eng$(50 + lang%), 18
center eng$(9 + lang%), 28
CASE 4
center "-5-" + eng$(9 + lang%), 28
center eng$(49 + lang%), 15
IF champdone = 1 THEN center eng$(52 + lang%), 21
END SELECT
t# = TIMER + .05: DO: LOOP UNTIL TIMER >= t#
LOOP
settings mark
IF mark = 4 THEN LINE (0, 130)-(639, 479), 3, BF: EXIT SUB
a$ = ""
center eng$(48 + lang%), 11
IF mark = 1 THEN c$ = "-5-" ELSE c$ = ""
center c$ + eng$(49 + lang%), 15
IF champdone = 1 THEN
IF mark = 2 THEN c$ = "-5-" ELSE c$ = ""
center c$ + eng$(50 + lang%), 18
IF mark = 3 THEN c$ = "-5-" ELSE c$ = ""
center c$ + eng$(52 + lang%), 21
END IF
IF mark = 4 THEN c$ = "-5-" ELSE c$ = ""
center c$ + eng$(9 + lang%), 28
GOTO 16
END SUB
SUB playSNAKE
flag = 1
3:
showinfo 3, prey
death$ = ""
1:
ERASE background
rats = 0
IF death$ <> "" THEN
IF lives = 0 THEN score = score + INT((score / 30)) * user.rats: showinfo 2, score
IF lives = 0 THEN dy = 16 ELSE dy = 15
GET (199, 89)-(441, 308), background
LINE (199, 89)-(441, 308), 3, BF
LINE (199, 89)-(441, 308), 7, B
LINE (201, 91)-(439, 306), 7, B
COLOR 15: center death$, 9
IF lives = 0 THEN center eng$(19 + lang%), 11: center eng$(20 + lang%), 13
IF lives > 0 THEN center eng$(21 + lang%), 13
center eng$(9 + lang%), dy
IF lives = 0 THEN center eng$(8 + lang%), dy
mark = 1
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
SELECT CASE a$
CASE CHR$(0) + "P": mark = mark + 1
CASE CHR$(0) + "H": mark = mark - 1
CASE CHR$(13): EXIT DO
CASE CHR$(32): EXIT DO
CASE CHR$(27): CLOSE #2: KILL "snake.tem": SYSTEM
END SELECT
IF mark > 2 THEN mark = 1
IF mark < 1 THEN mark = 2
IF lives = 0 AND mark <> 2 THEN mark = 2
SELECT CASE mark
CASE 1
center eng$(21 + lang%), 13
center eng$(9 + lang%), dy
CASE 2
IF lives > 0 THEN center eng$(22 + lang%), 13
center eng$(8 + lang%), dy
END SELECT
t# = TIMER + .05: DO: LOOP UNTIL TIMER >= t#
LOOP
PUT (199, 89), background, PSET
clearground mcol, mrow
IF lives = 0 THEN highscores 2: EXIT SUB
IF mark = 2 THEN EXIT SUB
END IF
death$ = ""
initialize
IF champ = 1 THEN score = oldscore: showinfo 2, score
IF champ = 1 THEN IF setuplevel = 2 THEN EXIT SUB
realspeed = SPEED!
IF champ = 0 THEN
FOR i = 3 TO 1 STEP -1
center eng$(23 + lang%) + STR$(i) + "...", 13
t# = TIMER + 1: DO: LOOP UNTIL TIMER >= t#
NEXT
center " ", 13
END IF
GOSUB PUTmouse
col = 23: row = 23
colchange = 1: rowchange = 0
direction = east: oldd = east
plusl = 0
DO: LOOP UNTIL INKEY$ = ""
FOR r = 1 TO 10
GOSUB rattle
NEXT r
DO
startplay:
a$ = INKEY$
SELECT CASE a$
CASE CHR$(0) + "M"
IF colchange <> -1 THEN colchange = 1: rowchange = 0: direction = east
CASE CHR$(0) + "P"
IF rowchange <> -1 THEN rowchange = 1: colchange = 0: direction = south
CASE CHR$(0) + "K"
IF colchange <> 1 THEN colchange = -1: rowchange = 0: direction = west
CASE CHR$(0) + "H"
IF rowchange <> 1 THEN rowchange = -1: colchange = 0: direction = north
CASE CHR$(32)
GOSUB pausemenu
CASE CHR$(27)
GOSUB pausemenu
CASE CHR$(13)
GOSUB pausemenu
CASE "p"
GOSUB pausemenu
END SELECT
IF champ = 1 THEN
IF prey = 0 THEN oldscore = score: showinfo 2, score: level = level + 1: clearground mcol, mrow: prey = 10: GOTO 3
END IF
IF ground(col + colchange, row + rowchange) < 0 THEN
t# = TIMER + .1
DO
a$ = INKEY$
SELECT CASE a$
CASE CHR$(0) + "M"
IF colchange <> -1 THEN colchange = 1: rowchange = 0: direction = east: EXIT DO
CASE CHR$(0) + "P"
IF rowchange <> -1 THEN rowchange = 1: colchange = 0: direction = south: EXIT DO
CASE CHR$(0) + "K"
IF colchange <> 1 THEN colchange = -1: rowchange = 0: direction = west: EXIT DO
CASE CHR$(0) + "H"
IF rowchange <> 1 THEN rowchange = -1: colchange = 0: direction = north: EXIT DO
END SELECT
LOOP UNTIL TIMER > t#
END IF
row = row + rowchange: col = col + colchange
IF rats < user.rats THEN IF INT(RND * 100) = 2 THEN GOSUB PUTrat
' lengthen
IF snakelength < 130 THEN
IF plusl THEN
snakelength = snakelength + 1
IF snakelength = oldlength + 15 THEN realspeed = realspeed - INT(5000! / ((cpu / 10!) / (1.59 / 10!))): oldlength = snakelength
FOR i = snakelength TO snakelength - 7 STEP -1
GET #2, i, snake(1)
GET #2, i - 1, snake(2)
snake(1).bodypart = snake(2).bodypart
PUT #2, i, snake(1)
NEXT
plusl = plusl - 1
END IF
ELSE
END IF
FOR i = snakelength TO 2 STEP -1
GET #2, i, snake(1)
GET #2, i - 1, snake(2)
snake(1).row = snake(2).row
snake(1).col = snake(2).col
snake(1).TURN = snake(2).TURN
snake(1).dir = snake(2).dir
snake(1).rdir = snake(2).rdir
PUT #2, i, snake(1)
NEXT i
GET #2, snakelength, snake(1)
GET #2, snakelength - 1, snake(2)
snake(1).TURN = 0
snake(2).TURN = 0
PUT #2, snakelength, snake(1)
PUT #2, snakelength - 1, snake(2)
GET #2, snakelength - 2, snake(1)
IF snake(1).TURN = 0 THEN
snake(2).dir = snake(1).dir
ELSE
snake(2).dir = snake(1).rdir
END IF
PUT #2, snakelength - 1, snake(2)
IF direction <> oldd THEN
GET #2, 2, snake(1)
snake(1).TURN = TURN
SELECT CASE oldd
CASE north
IF direction = east THEN snake(1).dir = NE
IF direction = west THEN snake(1).dir = NW
snake(1).rdir = north
CASE east
IF direction = north THEN snake(1).dir = EN
IF direction = south THEN snake(1).dir = ES
snake(1).rdir = east
CASE south
IF direction = east THEN snake(1).dir = SE
IF direction = west THEN snake(1).dir = SW
snake(1).rdir = south
CASE west
IF direction = north THEN snake(1).dir = WN
IF direction = south THEN snake(1).dir = WS
snake(1).rdir = west
END SELECT
PUT #2, 2, snake(1)
END IF
GET #2, 1, snake(1)
snake(1).row = row: snake(1).col = col
snake(1).TURN = 0: snake(1).dir = direction
PUT #2, 1, snake(1)
oldd = direction
GET #2, snakelength, snake(1)
ground(snake(1).col, snake(1).row) = 0
PUT #2, snakelength, snake(1)
IF ground(col, row) < 0 THEN
lives = lives - 1: showinfo 1, lives
IF ground(col, row) = -2 THEN death$ = "-4-*-15- You ran into the wall!!-4- *"
IF ground(col, row) = -1 THEN death$ = "-4-*-15- That was your own tail!-4- *"
GOTO 1
END IF
IF ground(col, row) = 1000 THEN
IF direction = mdirection THEN
score = score + speedlevel * 10: showinfo 2, score
IF champ = 0 THEN prey = prey + 1: showinfo 3, prey
IF champ = 1 THEN prey = prey - 1: showinfo 3, prey
PLAY "MBT80L64O6D-E-E"
IF champ = 1 THEN plusl = plusl + 3
plusl = plusl + 2: GOSUB PUTmouse
ELSE
GOSUB PUTmouse
END IF
END IF
IF ground(col, row) = 2000 THEN
PLAY "MBMST128L64O2D-E-E"
randomdeath = INT(RND * 10) + 1
score = score - 50: IF score < 0 THEN score = 0
showinfo 2, score
rats = rats - 1
IF randomdeath < 3 THEN lives = lives - 1: showinfo 1, lives: death$ = "-4-*-15-That ugly rat killed you!-4-*": GOTO 1
plusl = plusl + 10
END IF
FOR i = snakelength TO 1 STEP -1
GET #2, i, snake(1)
srow = snake(1).row
scol = snake(1).col
sindex = snake(1).bodypart + snake(1).TURN + snake(1).dir
PUTimage scol, srow, sindex
IF snake(1).bodypart = body THEN
FOR h = i TO 1 STEP -1
IF snake(1).bodypart = shoulder THEN i = h: EXIT FOR
NEXT h
END IF
NEXT i
FOR i! = 1 TO realspeed: NEXT
LOOP
PUTmouse:
GET #2, snakelength, snake(1)
ground(snake(1).col, snake(1).row) = 1
DO
mcol = INT(RND * 30) + 2
mrow = INT(RND * 22) + 2
LOOP UNTIL ground(mcol, mrow) = 0
mdirection = INT(RND * 4) * 125
IF user.lvlreached > 2 THEN IF flag = 1 THEN flag = 2 ELSE flag = 1
IF flag = 1 THEN PUTimage mcol, mrow, mouse + mdirection
IF flag = 2 THEN PUTimage mcol, mrow, frog + mdirection
ground(mcol, mrow) = 1000
ground(snake(1).col, snake(1).row) = 0
PUT #2, snakelength, snake(1)
RETURN
rattle:
PUT (160, 438), imageSET(rattle + east), PSET
GOSUB cd
PUT (160, 440), imageSET(rattle + east), PSET
GOSUB cd
PUT (160, 442), imageSET(rattle + east), PSET
GOSUB cd
PUT (160, 440), imageSET(rattle + east), PSET
GOSUB cd
IF ground(9, 22) < 0 THEN PUTimage 9, 22, block
IF ground(9, 24) < 0 THEN PUTimage 9, 24, block
IF ground(9, 22) = 1000 THEN PUTimage mcol, mrow, mouse + mdirection
RETURN
cd:
PLAY "MFMST255L64O1CD"
RETURN
pausemenu:
mark = 1
GET (199, 89)-(441, 308), background
7:
LINE (199, 89)-(441, 308), 3, BF
LINE (199, 89)-(441, 308), 7, B
LINE (201, 91)-(439, 306), 7, B
center eng$(24 + lang%), 9
IF mark = 1 THEN center eng$(25 + lang%), 12 ELSE center eng$(26 + lang%), 12
center eng$(9 + lang%), 14
center eng$(11 + lang%), 18
IF mark = 1 THEN center eng$(44 + lang%), 16 ELSE center eng$(43 + lang%), 16
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
SOUND 150, 1
SELECT CASE a$
CASE CHR$(0) + "P": mark = mark + 1
CASE CHR$(0) + "H": mark = mark - 1
CASE CHR$(13): EXIT DO
CASE CHR$(32): EXIT DO
END SELECT
IF mark > 4 THEN mark = 1
IF mark < 1 THEN mark = 4
SELECT CASE mark
CASE 1
center eng$(25 + lang%), 12
center eng$(9 + lang%), 14
center eng$(11 + lang%), 18
CASE 2
center eng$(26 + lang%), 12
center eng$(8 + lang%), 14
center eng$(44 + lang%), 16
CASE 3
center eng$(43 + lang%), 16
center eng$(9 + lang%), 14
center eng$(11 + lang%), 18
CASE 4
center eng$(44 + lang%), 16
center eng$(26 + lang%), 12
center eng$(10 + lang%), 18
END SELECT
t# = TIMER + .05: DO: LOOP UNTIL TIMER >= t#
LOOP
IF mark = 1 THEN
PUT (199, 89), background, PSET
FOR i = 3 TO 1 STEP -1
center eng$(27 + lang%) + STR$(i) + "...", 13
t# = TIMER + 1
DO: LOOP UNTIL TIMER >= t#
NEXT
PUT (199, 89), background, PSET
t# = TIMER + .05: DO: LOOP UNTIL TIMER > t#
RETURN
END IF
IF mark = 2 THEN EXIT SUB
IF mark = 3 THEN SPEEDset: realspeed = SPEED!: GOTO 7
IF mark = 4 THEN CLOSE #2: KILL "snake.tem": SYSTEM
RETURN
END SUB
FUNCTION portp$ (txt$)
temp$ = ""
FOR n = 1 TO 5
SELECT CASE MID$(txt$, n, 1)
CASE "0": a$ = "A"
CASE "1": a$ = "B"
CASE "2": a$ = "C"
CASE "3": a$ = "D"
CASE "4": a$ = "/"
CASE "5": a$ = "F"
CASE "6": a$ = "G"
CASE "7": a$ = "H"
CASE "8": a$ = "I"
CASE "9": a$ = "J"
CASE "!": a$ = "K"
CASE "@": a$ = "_"
CASE "#": a$ = "M"
CASE "$": a$ = "N"
CASE "%": a$ = "O"
CASE "^": a$ = "P"
CASE "&": a$ = "Q"
CASE "*": a$ = "R"
CASE "(": a$ = "S"
CASE ")": a$ = "T"
CASE "-": a$ = "U"
CASE "_": a$ = "V"
CASE "=": a$ = "W"
CASE "+": a$ = ":"
CASE "[": a$ = "Y"
CASE "]": a$ = "Z"
CASE "{": a$ = ":"
CASE "}": a$ = ";"
CASE "\": a$ = "V"
CASE "|": a$ = "<"
CASE ";": a$ = "?"
CASE ":": a$ = ">"
CASE ",": a$ = "@"
CASE "<": a$ = "3"
CASE ">": a$ = "4"
CASE "?": a$ = "E"
CASE "/": a$ = "6"
CASE ".": a$ = "7"
CASE "`": a$ = "L"
CASE "~": a$ = "9"
CASE ELSE: a$ = "5"
END SELECT
temp$ = temp$ + a$
NEXT
portp$ = temp$
END FUNCTION
SUB PUTimage (col, row, index)
x = (col - 1) * 20
y = (row - 1) * 20
PUT (x, y), imageSET(index), PSET
IF index < 6000 THEN ground(col, row) = -1
IF index = block THEN ground(col, row) = -2
END SUB
SUB restorecolors
RESTORE Paletteinfo
FOR n = 0 TO 15
READ red, green, blue
OUT &H3C8, n
OUT &H3C9, red
OUT &H3C9, green
OUT &H3C9, blue
NEXT
END SUB
SUB settings (i)
LINE (0, 130)-(639, 479), 3, BF
SELECT CASE i
CASE 1
starts = 53
sel = 2
CASE 2
starts = 55
sel = 4
center "-12- " + STR$(user.rats), 16
PUTimage 24, 10, head + north: PUTimage 24, 11, neck + north: PUTimage 24, 12, shoulder + north
PUTimage 24, 13, body + north: PUTimage 24, 14, shoulder + north: PUTimage 24, 15, neck + north
PUTimage 24, 16, tail + north: PUTimage 24, 17, tailend + north: PUTimage 24, 18, rattle + north
CASE 3
starts = 60
sel = 3
CASE 4: EXIT SUB
END SELECT
mark = 1
c$ = "-5-"
FOR y = 16 TO 16 + (sel - 1) * 2 STEP 2
center c$ + eng$(lang% + starts + (y - 16 + 2) / 2 - 1), y
c$ = ""
NEXT
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
8:
SOUND 150, 1
SELECT CASE a$
CASE CHR$(0) + "P": mark = mark + 1
CASE CHR$(0) + "H": mark = mark - 1
CASE CHR$(8): LINE (0, 130)-(639, 479), 3, BF: EXIT SUB
CASE CHR$(27): LINE (0, 130)-(639, 479), 3, BF: EXIT SUB
CASE CHR$(13): lrmark = 0: EXIT DO
CASE CHR$(0) + "M": lrmark = 1: EXIT DO
CASE CHR$(0) + "K": lrmark = -1: EXIT DO
END SELECT
IF mark > sel THEN mark = 1
IF mark < 1 THEN mark = sel
SELECT CASE mark
CASE 1
center "-5-" + eng$(starts + lang%), 16
center eng$(starts + sel - 1 + lang%), 16 + (sel - 1) * 2
center eng$(starts + 1 + lang%), 18
CASE 2
center "-5-" + eng$(starts + 1 + lang%), 18
center eng$(starts + lang%), 16
IF sel > 2 THEN center eng$(starts + 2 + lang%), 20 ELSE center eng$(starts + lang%), 16
CASE 3
center "-5-" + eng$(starts + 2 + lang%), 20
center eng$(starts + 1 + lang%), 18
IF sel > 3 THEN center eng$(starts + 3 + lang%), 22 ELSE center eng$(starts + lang%), 16
CASE 4
center "-5-" + eng$(starts + 3 + lang%), 22
center eng$(starts + 2 + lang%), 20
IF sel > 4 THEN center eng$(starts + 4 + lang%), 24 ELSE center eng$(starts + lang%), 16
END SELECT
t# = TIMER + .05: DO: LOOP UNTIL TIMER >= t#
LOOP
SELECT CASE i
CASE 1
LINE (0, 130)-(639, 479), 3, BF
IF mark = 1 THEN lang% = 0 ELSE lang% = 64
center eng$(48 + lang%), 11
user.language = lang%
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(user)
IF usernumber > 4 THEN PUT #1, usernumber, user
CLOSE #1
EXIT SUB
CASE 2
IF lrmark = 0 THEN a$ = "": GOTO 8
SELECT CASE mark
CASE 1
user.rats = user.rats + lrmark: IF user.rats > 5 THEN user.rats = 1
IF user.rats < 1 THEN user.rats = 5
IF user.lvlreached < 3 THEN user.rats = 3
center "-12- " + STR$(user.rats), 16
CASE 2
user.bg = user.bg + lrmark: IF user.bg > 5 THEN user.bg = 1
IF user.bg < 1 THEN user.bg = 5
IF user.lvlreached < 4 THEN user.bg = 1
changeapp 1
CASE 3
user.snakec = user.snakec + lrmark: IF user.snakec > 5 THEN user.snakec = 1
IF user.snakec < 1 THEN user.snakec = 5
IF user.lvlreached < 5 THEN user.snakec = 1
changeapp 2
CASE 4
user.spattern = user.spattern + lrmark: IF user.spattern > 5 THEN user.spattern = 1
IF user.spattern < 1 THEN user.spattern = 5
IF user.lvlreached < 6 THEN user.spattern = 1
changeapp 3
END SELECT
IF usernumber > 4 THEN
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(user)
PUT #1, usernumber, user
CLOSE #1
END IF
a$ = "": GOTO 8
CASE 3
IF mark = 1 THEN GOSUB create
IF mark = 2 THEN oldnumber = usernumber: GOSUB change
IF mark = 3 THEN oldnumber = usernumber: GOSUB delete
END SELECT
create:
IF lrmark <> 0 THEN a$ = "": GOTO 8
LINE (0, 130)-(639, 479), 3, BF
DO
LOCATE 16, 30: PRINT SPACE$(33)
pname$ = ask$("Enter a name:", 30, 16, 20, 1)
LINE ((43 + LEN(pname$)) * 8, 240)-((43 + LEN(pname$)) * 8, 254), 3
SELECT CASE pname$
CASE "exit": a$ = "": LINE (0, 130)-(639, 479), 3, BF: GOTO 8
CASE "down"
CASE "up"
CASE ELSE: EXIT DO
END SELECT
LOOP
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(user)
FOR n = 1 TO users
GET #1, n + 4, user
IF RTRIM$(user.nickname) = pname$ THEN center "-4-Name already exists", 17: SOUND 60, 5: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: center " ", 17: GET #1, oldnumber, user: CLOSE #1: GOSUB create
NEXT
GET #1, usernumber, user
CLOSE #1
DO
center SPACE$(55), 19
center SPACE$(55), 21
9:
pass$ = ask$("Enter password:", 28, 19, 8, 2)
IF pass$ = "exit" THEN a$ = "": LINE (0, 130)-(639, 479), 3, BF: GOTO 8
IF pass$ = "down" OR pass$ = "up" THEN LOCATE 25, 35: PRINT STRING$(25, " "): GOTO 9
LINE ((43 + LEN(pass$)) * 8, 288)-((43 + LEN(pass$)) * 8, 302), 3
11:
repass$ = ask$("Confirm password:", 26, 21, 8, 2)
IF repass$ = pass$ THEN EXIT DO
IF repass$ = "exit" THEN a$ = "": LINE (0, 130)-(639, 479), 3, BF: GOTO 8
IF repass$ <> "down" AND repass$ <> "up" THEN
SOUND 60, 5
center "-4-Passwords don't match", 24
t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#
center SPACE$(30), 24
ELSE
center SPACE$(30), 24
GOTO 11
END IF
LOOP
user.nickname = pname$
user.password = pass$
user.level = 1
user.avscore = 0
user.gplayed = 0
user.lvlreached = 1
user.language = lang%
user.gmode = 1
user.rats = 3
user.bg = 1
user.snakec = 1
user.spattern = 1
users = users + 1: usernumber = 4 + users
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(user)
PUT #1, 4 + users, user
CLOSE #1
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(users)
PUT #1, 2, usernumber
PUT #1, 3, users
CLOSE #1
a$ = ""
center SPACE$(35), 1
center "Welcome, " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)) + "!", 1
LINE (0, 130)-(639, 479), 3, BF: GOTO 8
change:
IF lrmark <> 0 THEN a$ = "": GOTO 8
LINE (0, 130)-(639, 479), 3, BF
DO
LOCATE 16, 30: PRINT SPACE$(53)
pname$ = ask$("Enter a name:", 30, 16, 20, 1)
LINE ((43 + LEN(pname$)) * 8, 240)-((43 + LEN(pname$)) * 8, 254), 3
SELECT CASE pname$
CASE "exit": a$ = "": LINE (0, 130)-(639, 479), 3, BF: GOTO 8
CASE "down"
CASE "up"
CASE ELSE: EXIT DO
END SELECT
LOOP
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(user)
FOR n = 1 TO users
GET #1, n + 4, user
IF RTRIM$(user.nickname) = pname$ THEN usernumber = n + 4: GOTO 15
NEXT
center "-4-User does not exist", 17: usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: center SPACE$(55), 17: GOSUB change
15:
GET #1, usernumber, user
DO
center SPACE$(50), 19
pass$ = ask$("Enter password:", 28, 19, 8, 2)
SELECT CASE pass$
CASE "exit": a$ = "": LINE (0, 130)-(639, 479), 3, BF: usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: GOTO 8
CASE "down"
CASE "up"
CASE ELSE
IF pass$ <> RTRIM$(user.password) THEN center "-4-Incorrect password", 20: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: center SPACE$(50), 20: GOTO 15
LINE ((43 + LEN(pass$)) * 8, 288)-((43 + LEN(pass$)) * 8, 302), 3: GOTO 14
END SELECT
LOOP
14:
LOCATE 25, 35: PRINT SPACE$(35)
DO
pass$ = ask$("Enter new password:", 24, 21, 8, 2)
LINE ((43 + LEN(pass$)) * 8, 320)-((43 + LEN(pass$)) * 8, 334), 3
SELECT CASE pass$
CASE "exit": a$ = "": LINE (0, 130)-(639, 479), 3, BF: usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: GOTO 8
CASE "down"
CASE "up"
CASE ELSE
EXIT DO
END SELECT
LOOP
DO
pass1$ = ask$("Confirm the password:", 22, 22, 8, 2)
LINE ((43 + LEN(pass1$)) * 8, 326)-((43 + LEN(pass1$)) * 8, 340), 3
SELECT CASE pass1$
CASE "exit": a$ = "": LINE (0, 130)-(639, 479), 3, BF: usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: GOTO 8
CASE "down"
CASE "up"
CASE ELSE
IF pass$ = pass1$ THEN EXIT DO ELSE center SPACE$(65), 21: center SPACE$(65), 22: center "-4-Passwords don't match", 21: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: center SPACE$(55), 21: GOTO 14
END SELECT
LOOP
user.password = pass$
PUT #1, usernumber, user
CLOSE #1
LINE (0, 130)-(639, 479), 3, BF: a$ = ""
GOTO 8
delete:
IF lrmark <> 0 THEN a$ = "": GOTO 8
LINE (0, 130)-(639, 479), 3, BF
DO
pname$ = ask$("Enter a name:", 30, 16, 20, 1)
LINE ((43 + LEN(pname$)) * 8, 240)-((43 + LEN(pname$)) * 8, 254), 3
SELECT CASE pname$
CASE "exit": a$ = "": LINE (0, 130)-(639, 479), 3, BF: GOTO 8
CASE "down"
CASE "up"
CASE ELSE: EXIT DO
END SELECT
LOOP
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(user)
FOR n = 1 TO users
GET #1, n + 4, user
IF RTRIM$(user.nickname) = pname$ THEN usernumber = n + 4: GOTO 13
NEXT
center "-4-User does not exist", 17: usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: GOSUB delete
13:
GET #1, usernumber, user
DO
LOCATE 25, 35: PRINT STRING$(25, " ")
LOCATE 27, 33: PRINT STRING$(25, " ")
12:
pass$ = ask$("Enter password:", 28, 19, 8, 2)
IF pass$ = "exit" THEN a$ = "": LINE (0, 130)-(639, 479), 3, BF: usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: a$ = "": GOTO 8
IF pass$ = "down" OR pass$ = "up" THEN center SPACE$(65), 19: GOTO 12
LINE ((43 + LEN(pass$)) * 8, 288)-((43 + LEN(pass$)) * 8, 302), 3
IF pass$ <> RTRIM$(user.password) THEN center SPACE$(60), 19: center "-4-Incorrect password", 19: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: center SPACE$(50), 19: GOTO 12
pass$ = ask$("Are you sure?", 30, 21, 4, 1)
IF UCASE$(pass$) = "YES" OR UCASE$(pass$) = "Y" OR UCASE$(pass$) = "IGEN" OR UCASE$(pass$) = "I" THEN EXIT DO
usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: LINE (0, 130)-(639, 479), 3, BF: a$ = "": GOTO 8
LOOP
IF users > 1 THEN
FOR n = usernumber + 1 TO 4 + users
GET #1, n, user
PUT #1, n - 1, user
NEXT n
END IF
user.nickname = ""
user.password = ""
user.level = 0
user.avscore = 0
user.lvlreached = 0
user.language = 0
user.gmode = 0
user.rats = 0
user.bg = 0
user.snakec = 0
user.spattern = 0
PUT #1, 4 + users, user
users = users - 1: usernumber = 4
GET #1, 4, user
CLOSE #1
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(users)
PUT #1, 2, usernumber
PUT #1, 3, users
CLOSE #1
LINE (0, 130)-(639, 479), 3, BF
center SPACE$(35), 1
center "Welcome, " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)) + "!", 1
changeapp 1: changeapp 2: changeapp 3
a$ = ""
GOTO 8
END SUB
FUNCTION setuplevel
lvl = level
ERASE ground
FOR y = 2 TO 23
FOR x = 2 TO 31
ground(x, y) = 0
LINE ((x - 1) * 20, (y - 1) * 20)-((x - 1) * 20 + 19, (y - 1) * 20 + 19), 3, BF
NEXT
NEXT
initialize
prey = 10
showinfo 3, prey
SELECT CASE lvl
CASE 1: RESTORE lvl1
CASE 2: RESTORE lvl2
CASE 3: RESTORE lvl3
CASE 4: RESTORE lvl4
CASE 5: RESTORE lvl5
CASE 6: RESTORE lvl6
CASE 7: RESTORE lvl7
CASE 8: RESTORE lvl8
CASE 9: RESTORE lvl9
CASE 10
FOR i = 0 TO 1
FOR x = 4 + i TO 28 + i STEP 6
PUTimage x, 4, block
PUTimage x, 21, block
PUTimage x, 9, block
PUTimage x, 10, block
PUTimage x, 15, block
PUTimage x, 16, block
ground(x, 21) = -2: ground(x, 9) = -2: ground(x, 15) = -2
ground(x, 4) = -2: ground(x, 10) = -2: ground(x, 16) = -2
NEXT
NEXT
FOR x = 3 TO 30 STEP 3
PUTimage x, 5, block
PUTimage x, 20, block
PUTimage x, 8, block
PUTimage x, 9, block
PUTimage x, 10, block
PUTimage x, 15, block
PUTimage x, 16, block
PUTimage x, 17, block
ground(x, 5) = -2: ground(x, 8) = -2: ground(x, 10) = -2: ground(x, 16) = -2
ground(x, 20) = -2: ground(x, 9) = -2: ground(x, 15) = -2: ground(x, 17) = -2
NEXT
CASE 11
score = score * lives
showinfo 2, score
GET (190, 119)-(450, 278), background
LINE (190, 119)-(450, 278), 3, BF
LINE (190, 119)-(450, 278), 7, B
LINE (192, 121)-(448, 276), 7, B
center eng$(1 + lang%), 11
IF champdone = 0 THEN center eng$(63 + lang%), 13
center eng$(8 + lang%), 15
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(champdone)
champdone = 1: PUT #1, 1, champdone: CLOSE #1
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
IF a$ = CHR$(27) OR a$ = CHR$(13) OR a$ = CHR$(32) THEN
PUT (190, 119), background, PSET
clearground 2, 4
highscores 2: setuplevel = 2: EXIT FUNCTION
END IF
LOOP
END SELECT
IF lvl < 9 THEN
DO
READ startx
IF startx = 0 THEN EXIT DO
READ starty, endx, endy
IF startx < endx THEN iist = 1 ELSE iist = -1
IF starty < endy THEN ist = 1 ELSE ist = -1
FOR i = starty TO endy STEP ist
FOR ii = startx TO endx STEP iist
PUTimage ii, i, block
ground(ii, i) = -2
NEXT
NEXT
LOOP
END IF
5:
COLOR 15
GET (199, 89)-(441, 308), background
LINE (199, 136)-(441, 280), 3, BF
LINE (201, 138)-(439, 278), 8, B
LINE (199, 136)-(441, 280), 8, B
center eng$(28 + lang%) + LTRIM$(RTRIM$(STR$(lvl))), 10
center portp$(top(level).id), 11
center eng$(29 + lang%), 13
center eng$(44 + lang%), 15
center eng$(9 + lang%), 17
mark = 1
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
SELECT CASE a$
CASE CHR$(0) + "P": mark = mark + 1
CASE CHR$(0) + "H": mark = mark - 1
CASE CHR$(13): EXIT DO
CASE CHR$(32): EXIT DO
END SELECT
IF mark > 3 THEN mark = 1
IF mark < 1 THEN mark = 3
SELECT CASE mark
CASE 1
center eng$(29 + lang%), 13
center eng$(44 + lang%), 15
center eng$(9 + lang%), 17
CASE 2
center eng$(30 + lang%), 13
center eng$(43 + lang%), 15
center eng$(9 + lang%), 17
CASE 3
center eng$(30 + lang%), 13
center eng$(44 + lang%), 15
center eng$(8 + lang%), 17
END SELECT
t# = TIMER + .05: DO: LOOP UNTIL TIMER >= t#
LOOP
PUT (199, 89), background, PSET
IF mark = 2 THEN SPEEDset: realspeed = SPEED!: GOTO 5
IF mark = 3 THEN setuplevel = 2 ELSE setuplevel = 1
END FUNCTION
SUB showinfo (index, value)
SELECT CASE index
CASE 1
PUT (80, 4), numSET(value * 40), PSET
CASE 2
IF value < 10 THEN v$ = "0000" + LTRIM$(RTRIM$(STR$(value)))
IF value > 9 AND value < 100 THEN v$ = "000" + LTRIM$(RTRIM$(STR$(value)))
IF value > 99 AND value < 1000 THEN v$ = "00" + LTRIM$(RTRIM$(STR$(value)))
IF value > 999 AND value < 10000 THEN v$ = "0" + LTRIM$(RTRIM$(STR$(value)))
IF value > 9999 THEN v$ = LTRIM$(RTRIM$(STR$(value)))
FOR i = 552 TO 584 STEP 8
PUT (i, 4), numSET(VAL(MID$(v$, (i - 552) / 8 + 1, 1)) * 40), PSET
NEXT
CASE 3
IF value < 10 THEN p$ = "000" + LTRIM$(RTRIM$(STR$(value)))
IF value > 9 AND value < 100 THEN p$ = "00" + LTRIM$(RTRIM$(STR$(value)))
IF value > 99 AND value < 1000 THEN p$ = "0" + LTRIM$(RTRIM$(STR$(value)))
IF value > 999 THEN p$ = LTRIM$(RTRIM$(STR$(value)))
FOR i = 353 TO 377 STEP 8
PUT (i, 464), numSET(VAL(MID$(p$, (i - 353) / 8 + 1, 1)) * 40), PSET
NEXT
END SELECT
END SUB
SUB SPEEDset
COLOR 15
IF speedlevel = 0 THEN GET (199, 89)-(441, 308), background
LINE (199, 89)-(441, 308), 3, BF
LINE (199, 89)-(441, 308), 7, B
LINE (201, 91)-(439, 306), 7, B
IF speedlevel <> 0 THEN mark = speedlevel ELSE mark = 3
center eng$(31 + lang%), 8
IF mark = 1 THEN r = 32 ELSE r = 33
center eng$(r + lang%), 10
IF mark = 2 THEN r = 34 ELSE r = 35
center eng$(r + lang%), 12
IF mark = 3 THEN r = 36 ELSE r = 37
center eng$(r + lang%), 14
IF mark = 4 THEN r = 38 ELSE r = 39
center eng$(r + lang%), 16
IF mark = 5 THEN r = 40 ELSE r = 41
center eng$(r + lang%), 18
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
SOUND 150, 1
SELECT CASE a$
CASE CHR$(0) + "P": mark = mark + 1
CASE CHR$(0) + "H": mark = mark - 1
CASE CHR$(32): EXIT DO
CASE CHR$(13): EXIT DO
CASE CHR$(27): CLOSE #2: KILL "snake.tem": SYSTEM
END SELECT
IF mark > 5 THEN mark = 1
IF mark < 1 THEN mark = 5
SELECT CASE mark
CASE 1
center eng$(32 + lang%), 10
center eng$(35 + lang%), 12
center eng$(41 + lang%), 18
CASE 2
center eng$(33 + lang%), 10
center eng$(34 + lang%), 12
center eng$(37 + lang%), 14
CASE 3
center eng$(35 + lang%), 12
center eng$(36 + lang%), 14
center eng$(39 + lang%), 16
CASE 4
center eng$(37 + lang%), 14
center eng$(38 + lang%), 16
center eng$(41 + lang%), 18
CASE 5
center eng$(33 + lang%), 10
center eng$(39 + lang%), 16
center eng$(40 + lang%), 18
END SELECT
t# = TIMER + .05: DO: LOOP UNTIL TIMER >= t#
LOOP
PUT (199, 89), background, PSET
SELECT CASE mark
CASE 1
SPEED! = 100000 / ((cpu / 10) / (1.59 / 10)): speedlevel = 1
CASE 2
SPEED! = 70000 / ((cpu / 14.286) / (1.59 / 14.286)): speedlevel = 2
CASE 3
SPEED! = 50000 / ((cpu / 20) / (1.59 / 20)): speedlevel = 3
CASE 4
SPEED! = 30000 / ((cpu / 33.333) / (1.59 / 33.333)): speedlevel = 4
CASE 5
SPEED! = 20000 / ((cpu / 50) / (1.59 / 50)): speedlevel = 5
END SELECT
END SUB
SUB testlevel
RESTORE lvls
FOR i = 10 TO 1 STEP -1
READ x
IF user.avscore >= x THEN user.level = i: EXIT FOR
NEXT
IF user.level > user.lvlreached THEN user.lvlreached = user.level
END SUB
'end of program
This message has been edited by iorr5t on Oct 31, 2007 12:30 PM This message has been edited by Tusike on Oct 14, 2007 11:42 AM
'Creatf.bas - creates file for Snake
DEFINT A-Z
CLS : SCREEN 12
TYPE filmloc
x AS INTEGER
y AS INTEGER
END TYPE
DIM film AS filmloc
TYPE account
nickname AS STRING * 20
password AS STRING * 8
level AS INTEGER
avscore AS INTEGER
gplayed AS INTEGER
lvlreached AS INTEGER
language AS INTEGER
gmode AS INTEGER
rats AS INTEGER
bg AS INTEGER
snakec AS INTEGER
spattern AS INTEGER
END TYPE
TYPE topperson
pname AS STRING * 20
playdate AS STRING * 10
score AS LONG
id AS STRING * 5
END TYPE
DIM user AS account
OPEN "snake.use" FOR OUTPUT AS #1: CLOSE #1
won = 0
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(won)
PUT #1, 1, won
won = 3
PUT #1, 2, won
won = 0
PUT #1, 3, won
CLOSE #1
user.nickname = "Guest"
user.password = ""
user.avscore = 0
user.gplayed = 0
user.level = 1
user.lvlreached = 1
user.rats = 3
user.language = 0
user.gmode = 1
user.bg = 1
user.snakec = 1
user.spattern = 1
OPEN "snake.use" FOR RANDOM AS #1 LEN = LEN(user)
PUT #1, 4, user
CLOSE #1
DIM toper(1 TO 10) AS topperson
OPEN "snake.top" FOR RANDOM AS #1 LEN = LEN(toper(1))
RESTORE ids
FOR i = 1 TO 10
READ z$
toper(i).pname = "Player" + STR$(i)
toper(i).playdate = DATE$
toper(i).score = 5500 - (500 * i)
toper(i).id = z$
PUT #1, i, toper(i)
NEXT
CLOSE #1
OPEN "snake.str" FOR OUTPUT AS #1
RESTORE tet
DO
READ r$
IF r$ = "done" THEN EXIT DO
WRITE #1, r$
LOOP
CLOSE #1
RESTORE movie
OPEN "movie.dat" FOR RANDOM AS #1 LEN = LEN(film)
FOR i = 1 TO 66
READ film.x, film.y
PUT #1, i, film
NEXT
CLOSE #1
SYSTEM
ids:
DATA "1!-`.", ">;|9("
DATA "?@2_~", "&:&7\"
DATA "/8 $+", "`*'6}"
DATA "<.%[4", "^5{<]"
DATA ">93#=", "]],8)"
tet:
DATA "C O N G R A T U L A T I O N S!"
DATA "You made the top 10"
DATA "Name too long. Please try again."
DATA "-12-S O R R Y!!!"
DATA "You didn't make the highscores"
DATA "-5-View the highscores"
DATA "View the highscores"
DATA "-5-Return to main menu"
DATA "Return to main menu"
DATA "-5-Exit the game"
DATA "Exit the game"
DATA " Player name: Play date: Score:"
DATA "Play the game"
DATA "Play the championship"
DATA "View the highscores"
DATA "Settings"
DATA "Instructions"
DATA "Exit"
DATA "-12-G A M E O V E R"
DATA "You lost all of your lives"
DATA "-5-Try again"
DATA "Try again"
DATA "Game starts in"
DATA "-12-G A M E P A U S E D"
DATA "-5-Continue the game"
DATA "Continue the game"
DATA "Game will continue in"
DATA "Level - "
DATA "-5-Start the game"
DATA "Start the game"
DATA "-12-Choose the speed level"
DATA "-5-very slow"
DATA "very slow"
DATA "-5-slow"
DATA "slow"
DATA "-5-moderate"
DATA "moderate"
DATA "-5-fast"
DATA "fast"
DATA "-5-very fast"
DATA "very fast"
DATA "CHECKING COMPUTER SPEED"
DATA "-5-Change speed"
DATA "Change speed"
DATA "-5-Enter a password"
DATA "Enter a password"
DATA "-4-Wrong password"
DATA "-12-S E T T I N G S"
DATA "Language selections"
DATA "Game settings"
DATA "Visual settings"
DATA "User settings"
DATA "English"
DATA "Hungarian"
DATA "< Rats >"
DATA "< Background color >"
DATA "< Snake's color >"
DATA "< Snake patterns' color >"
DATA "Game mode: "
DATA "Create new user"
DATA "Change user password"
DATA "Delete user"
DATA "You can now create users!!!"
DATA "Login as.."
DATA " G R A T U L A L O K! "
DATA "Bekerultel az elso tizbe"
DATA "Nev tul hosszu. Kerem irjon be egy masikat.
DATA "-12-B O C S I!!!"
DATA "Nem jutottal be az elso tiz koze"
DATA "-5-Elso tiz megtekintese"
DATA "Elso tiz megtekintese"
DATA "-5-Vissza a fomenure"
DATA "Vissza a fomenure"
DATA "-5-Kilepes"
DATA "Kilepes"
DATA " Jatekos neve Idopont Pontok "
DATA "Jatek kezdese"
DATA "Bajnoksag kezdese"
DATA "Elso tiz megtekintese"
DATA "Beallitasok"
DATA "Szabalyok"
DATA "Kilepes"
DATA "-12-G A M E O V E R"
DATA "Az osszes eleted elfogyott"
DATA "-5-Ujrakezdes"
DATA "Ujrakezdes"
DATA "Jatek kezdete:"
DATA "-12-G A M E P A U S E D"
DATA "-5-Jatek folytatasa"
DATA "Jatek folytatasa"
DATA "Jatek folytatasa:"
DATA "Szint "
DATA "-5-Jatek kezdese"
DATA "Jatek kezdese"
DATA "-12-Gyorsasag valasztasa"
DATA "-5-nagyon lassu"
DATA "nagyon lassu"
DATA "-5-lassu"
DATA "lassu"
DATA "-5-kozepes"
DATA "kozepes"
DATA "-5-gyors"
DATA "gyors"
DATA "-5-nagyon gyors"
DATA "nagyon gyors"
DATA "A GEP SEBESSEGENEK ELLENORZESE"
DATA "-5-Sebesseg valtoztatasa"
DATA "Sebesseg valtoztatasa"
DATA "-5-Jelszo megadasa"
DATA "Jelszo megadasa"
DATA "-4-Rossz jelszo"
DATA "-12-B E A L L I T A S O K"
DATA "Nyelv valasztasa"
DATA "Jatek beallitasai"
DATA "Kinezet valtoztatasa"
DATA "Felhasznalok"
DATA "Angol"
DATA "Magyar"
DATA "< Patkanyok >"
DATA "< Hatterszin >"
DATA "< Kigyo szine >"
DATA "< Kigyo minta szine >"
DATA "Jatek mod:"
DATA "Uj felhasznalo"
DATA "Jelszo modositasa"
DATA "Felhasznalo torlese"
DATA "Letrehozhat felhasznalokat!"
DATA "Bejelentkezes"
DATA "done"
movie:
DATA 5,1
DATA 5,2
DATA 5,3
DATA 5,4
DATA 5,5
DATA 5,6
DATA 5,7
DATA 5,8
DATA 5,9
DATA 5,10
DATA 5,11
DATA 5,12
DATA 5,13
DATA 5,14
DATA 5,15
DATA 5,16
DATA 5,17
DATA 6,17
DATA 7,17
DATA 8,17
DATA 9,17
DATA 10,17
DATA 11,17
DATA 12,17
DATA 13,17
DATA 14,17
DATA 15,17
DATA 16,17
DATA 17,17
DATA 18,17
DATA 19,17
DATA 20,17
DATA 21,17
DATA 22,17
DATA 23,17
DATA 23,16
DATA 23,15
DATA 23,14
DATA 23,13
DATA 23,12
DATA 23,11
DATA 23,10
DATA 23,9
DATA 23,8
DATA 22,8
DATA 21,8
DATA 20,8
DATA 19,8
DATA 18,8
DATA 17,8
DATA 16,8
DATA 15,8
DATA 14,8
DATA 13,8
DATA 12,8
DATA 11,8
DATA 10,8
DATA 9,8
DATA 8,8
DATA 7,8
DATA 6,8
DATA 5,8
DATA 4,8
DATA 3,8
DATA 2,8
DATA 1,8
Actually, this is the full version now! I added the instructions to the game, too.
Please run creatf.bas first to play the game. Here is the program:
DECLARE SUB customs ()
DECLARE SUB instructions ()
DECLARE SUB drawJEP (lvl%)
DECLARE SUB drawmove ()
DECLARE FUNCTION place% (x%)
DECLARE FUNCTION min% (x%)
DECLARE SUB PRINTIT (text$, x%, y%)
DECLARE SUB startup ()
CONST fleVER = "Files\snake.ver", Ver = "1222"
CONST fleUSE = "Files\snake.use"
CONST fleTEM = "Files\snake.tem"
CONST fleSTR = "Files\snake.str"
CONST fleTOP = "Files\snake.top"
CONST fleMOV = "Files\movie.dat"
DECLARE SUB zap ()
DECLARE FUNCTION MenuChoice% (selections%, start%, xstart%)
DECLARE FUNCTION eng$ (number%, language%)
DECLARE SUB login ()
DECLARE SUB testlevel ()
DEFINT A-Z
DECLARE FUNCTION ask$ (text$, x, y, max, mode)
DECLARE SUB changeapp (i)
DECLARE SUB settings (i)
DECLARE SUB options ()
DECLARE FUNCTION setuplevel ()
DECLARE SUB logo ()
DECLARE SUB highscores (index)
DECLARE SUB SPEEDset ()
DECLARE SUB center (text$, y!)
DECLARE SUB clearground (x, y)
DECLARE SUB mainmenu (mark)
DECLARE SUB showinfo (index, value)
DECLARE SUB initialize ()
DECLARE SUB playSNAKE ()
DECLARE SUB defscreen ()
DECLARE SUB restorecolors ()
DECLARE SUB drawthings ()
DECLARE SUB PUTimage (col, row, index)
RANDOMIZE TIMER
CLEAR , , 3000
CLS
SCREEN 12
DIM SHARED imageSET(7749) AS SINGLE, numSET(399) AS SINGLE, cpu AS DOUBLE
DIM SHARED background(6820) AS SINGLE, global$, start, map$
DIM SHARED ground(1 TO 32, 1 TO 24), lang%, mch(10), side$, sblock(100)
DIM SHARED prey, SPEED AS SINGLE, level, usernumber, users, champdone, champ, realspeed AS SINGLE, score, oldscore, speedlevel, lives, snakelength, oldlength
TYPE topperson
nickname AS STRING * 20
playdate AS STRING * 10
score AS LONG
id AS STRING * 5
END TYPE
DIM SHARED top(1 TO 10) AS topperson
TYPE filmloc
x AS INTEGER
y AS INTEGER
END TYPE
DIM SHARED film AS filmloc
TYPE body
col AS INTEGER
row AS INTEGER
TURN AS INTEGER
dir AS INTEGER
rdir AS INTEGER
END TYPE
TYPE account
nickname AS STRING * 20
password AS STRING * 8
level AS INTEGER
avscore AS INTEGER
gplayed AS INTEGER
lvlreached AS INTEGER
language AS INTEGER
gmode AS INTEGER
rats AS INTEGER
bg AS INTEGER
snakec AS INTEGER
spattern AS INTEGER
END TYPE
DIM SHARED user AS account
DIM SHARED snake(1 TO 2) AS body
CONST head = 0
CONST neck = 500
CONST shoulder = 1000
CONST body = 1500
CONST tail = 2000
CONST tailEND = 2500
CONST rattle = 3000
CONST mouse = 6000
CONST rat = 6500
CONST frog = 7250
CONST blank = 6625
CONST block = 7125
CONST TURN = 3000
CONST west = 0
CONST north = 125
CONST east = 250
CONST south = 375
CONST NE = 0
CONST NW = 125
CONST SW = 250
CONST SE = 375
CONST WN = 375
CONST EN = 250
CONST ES = 125
CONST WS = 0
' Check compatibility with CreateF
DIM SHARED MyErr
ON ERROR GOTO GetMyErr
OPEN fleVER FOR INPUT AS #8: LINE INPUT #8, l$
ON ERROR GOTO 0: CLOSE #8
IF l$ <> Ver THEN
PRINT "SNAKE consists of four programs"
PRINT " CreateF.bas creates initial files, custom.bas will be used later"
PRINT " Snake.bas and profile.bas use those files": PRINT
PRINT " You must ensure CreateF is run first"
PRINT " You must ensure both programs are the same version"
PRINT " Press any key to exit"
PRINT
PRINT
PRINT "SNAKE negy programbol all"
PRINT " custom.bas majd kesobb kell, CreateF.bas letrehozza a fajlokat"
PRINT " melyeket Snake.bas es profile.bas hasznal fel": PRINT
PRINT " Eloszor createF.bas-t kell futtatni"
PRINT " Az is fontos hogy mindharom program ugyanaz a kiadas legyen"
PRINT " Barmely billentyu a kilepeshez"
a$ = INPUT$(1)
SYSTEM
END IF
OPEN "files\snake.tem" FOR OUTPUT AS #1: CLOSE #1
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(champdone)
GET #1, 1, champdone
GET #1, 2, usernumber
GET #1, 3, users
CLOSE #1
OPEN "files\snake.top" FOR RANDOM AS #1 LEN = LEN(top(1))
FOR topers = 1 TO 10
GET #1, topers, top(topers)
NEXT
CLOSE #1
cpu# = 0
IF champdone = 1 THEN
OPEN "profile.txt" FOR APPEND AS #1
IF LOF(1) = 0 THEN
CLOSE #1: KILL "profile.txt"
ELSE
CLOSE #1
OPEN "profile.txt" FOR INPUT AS #1
INPUT #1, nev$
INPUT #1, cpu#
CLOSE #1
KILL "profile.txt"
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
FOR i = 5 TO 4 + users
GET #1, i, user
IF LTRIM$(RTRIM$(UCASE$(user.nickname))) = RTRIM$(LTRIM$(UCASE$(nev$))) THEN CLOSE #1: usernumber = i: GOSUB Getsprites: restorecolors: changeapp 1: changeapp 2: changeapp 3: lang% = user.language: GOTO start
NEXT
END IF
END IF
GOSUB Getsprites
restorecolors
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
IF usernumber > 4 THEN
IF champdone = 1 THEN GET #1, usernumber, user
ELSE
GET #1, 4, user
END IF
CLOSE #1
lang% = user.language
startup
mainmenu 1
start:
DO
mainmenu 2
LOOP
CLOSE #2: KILL "files\snake.tem"
SYSTEM
GetMyErr: MyErr = ERR: RESUME NEXT
Getsprites:
FOR n = 0 TO 15
OUT &H3C8, n
OUT &H3C9, 0
OUT &H3C9, 0
OUT &H3C9, 0
NEXT n
IF cpu# = 0 THEN
t# = TIMER
FOR i! = 1 TO 1000000: NEXT
t2# = TIMER
cpu# = t2# - t#
END IF
maxx = 19: maxy = 299: x = -1: y = 0
OPEN "files\images.dat" FOR INPUT AS #1
DO
INPUT #1, counter, colr
IF colr = 7 THEN colr = 3: GOTO 17
IF colr = 14 THEN colr = 3
IF colr = 77 THEN colr = 7
IF colr = 2 AND y > 279 THEN colr = 11
17
FOR i = 1 TO counter
x = x + 1
IF x > maxx THEN x = 0: y = y + 1
PSET (x, y), colr
NEXT
LOOP UNTIL x = maxx AND y = maxy
CLOSE #1
index = 0
placey = 0
DO
IF index = 7000 THEN index = 7250
GET (0, placey)-(19, placey + 19), imageSET(index)
IF index < 6500 OR index = 7250 THEN GOSUB pose
index = index + 500
placey = placey + 20
LOOP UNTIL placey = 300
LINE (0, 0)-(19, 19), 7, BF
FOR i = 1 TO 500
x = INT(RND * 20)
y = INT(RND * 20)
PSET (x, y), 8
PSET (x + 1, y + 1), 15
NEXT
LINE (0, 0)-(19, 19), 7, B
GET (0, 0)-(19, 19), imageSET(block)
LINE (0, 0)-(7, 7), 7, B
GET (0, 0)-(7, 7), sblock
LINE (0, 0)-(19, 19), 3, BF: GET (0, 0)-(19, 19), imageSET(6625)
GET (0, 0)-(19, 19), imageSET(6750)
GET (0, 0)-(19, 19), imageSET(6875)
GET (0, 0)-(19, 19), imageSET(7000)
CLS
COLOR 4
FOR i = 0 TO 9
IF i = 0 THEN s$ = "O" ELSE s$ = LTRIM$(RTRIM$(STR$(i)))
LOCATE 1, 1: PRINT s$
LINE (40, 41)-(46, 53), 15, BF
FOR y = 1 TO 13
FOR x = 0 TO 6
IF POINT(x, y) = 4 THEN PSET (40 + x, 40 + y), 4
NEXT
NEXT
GET (40, 41)-(46, 53), numSET(i * 40)
LINE (40, 41)-(46, 53), 3, BF
NEXT
RETURN
pose:
FOR poses = index TO index + 250 STEP 125
PUT (100, 100), imageSET(poses), PSET
FOR x = 100 TO 119
FOR y = 100 TO 119
PSET (219 - y, x - 20), POINT(x, y)
NEXT y
NEXT x
GET (100, 80)-(119, 99), imageSET(poses + 125)
NEXT poses
RETURN
Paletteinfo:
DATA 0,14,3, 0,0,42, 0,42,0, 0,14,3, 42,0,0, 60,52,0
DATA 60,52,0, 42,42,42, 21,21,21, 21,21,63, 21,63,21, 0,42,0
DATA 63,21,21, 63,21,63, 0,0,0, 63,63,63
FUNCTION ask$ (text$, x, y, max, mode)
COLOR 15
PRINTIT text$, x, y
startx = x + LEN(text$): x = (x + LEN(text$)) * 8
txtlen = 0
LINE (x, (y - 1) * 2 + y * 14 - 14)-(x, (y - 1) * 2 + y * 14), 7
txt$ = ""
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
COLOR 5
SELECT CASE a$
CASE CHR$(13): IF txt$ <> "" THEN EXIT DO
CASE CHR$(27)
ask$ = "exit": EXIT FUNCTION
CASE CHR$(0) + "P": ask$ = "down": EXIT FUNCTION
CASE CHR$(0) + "H": ask$ = "up": EXIT FUNCTION
CASE CHR$(8)
IF txtlen > 0 THEN
LOCATE y, startx + txtlen: PRINT SPACE$(max - txtlen + 2)
txtlen = txtlen - 1: IF txtlen = 0 THEN txt$ = "" ELSE txt$ = MID$(txt$, 1, txtlen)
COLOR 5
IF mode = 1 THEN LOCATE y, startx + 1: PRINT txt$ ELSE LOCATE y, startx + 1: PRINT STRING$(txtlen, "*")
LINE (x + (txtlen * 8), (y - 1) * 2 + y * 14 - 14)-(x + (txtlen * 8), (y - 1) * 2 + y * 14), 7
END IF
CASE ELSE
IF mode = 2 THEN minimum = 33: maximum = 126 ELSE minimum = 65: maximum = 90
IF ASC(UCASE$(a$)) >= minimum AND ASC(UCASE$(a$)) <= maximum AND txtlen <= max THEN
txtlen = txtlen + 1
IF txtlen <= max THEN
IF mode = 1 THEN LOCATE y, startx + txtlen: PRINT UCASE$(a$) ELSE LOCATE y, startx + txtlen: PRINT "*"
txt$ = txt$ + UCASE$(a$)
LINE (x + txtlen * 8, (y - 1) * 2 + y * 14 - 14)-(x + txtlen * 8, (y - 1) * 2 + y * 14), 7
ELSE
txtlen = max
END IF
END IF
END SELECT
LOOP
LINE (x + LEN(txt$) * 8, (y - 1) * 2 + y * 14 - 14)-(x + LEN(txt$) * 8, (y - 1) * 2 + y * 14), 3
ask$ = txt$
END FUNCTION
DEFSNG A-Z
SUB center (text$, y)
DIM letter(0 TO 199)
textlen = LEN(text$)
FOR i = 1 TO LEN(text$)
a$ = MID$(text$, i, 1)
IF a$ = "^" THEN textlen = textlen - 1
IF a$ = "-" THEN
textlen = textlen - 2
IF MID$(text$, i + 2, 1) = "-" THEN
textlen = textlen - 1: i = i + 3: GOTO 20
ELSE
textlen = textlen - 2: i = i + 4: GOTO 20
END IF
END IF
20
NEXT
s = 0
textlen = textlen * 8
startx = 320 - (textlen / 2)
y = (y - 1) * 2 + y * 14 - 14
c = 15
ii = 0
FOR i = 1 TO LEN(text$)
a$ = MID$(text$, i, 1)
IF a$ = "-" THEN
IF MID$(text$, i + 2, 1) = "-" THEN c = VAL(MID$(text$, i + 1, 1)): i = i + 2 ELSE c = VAL(MID$(text$, i + 1, 2)): i = i + 3
GOTO 21
END IF
IF a$ = "^" THEN s = 1: GOTO 21
ii = ii + 1
IF a$ = " " THEN
LINE (startx + (ii - 1) * 8, y)-(startx + (ii) * 8, y + 14), 3, BF
GOTO 21
END IF
z = ASC(a$)
SELECT CASE a$
CASE "=": z = 45
CASE "#": IF s = 1 THEN s = 0: z = 144 ELSE z = 130
CASE "@": IF s = 1 THEN s = 0: z = 143 ELSE z = 160
CASE "|": IF s = 1 THEN s = 0: z = 161 ELSE z = 161
CASE "$": IF s = 1 THEN s = 0: z = 162 ELSE z = 162
CASE "_": IF s = 1 THEN s = 0: z = 163 ELSE z = 163
CASE "<": IF s = 1 THEN s = 0: z = 153 ELSE z = 148
CASE ">": IF s = 1 THEN s = 0: z = 154 ELSE z = 129
END SELECT
DEF SEG = VARSEG(letter(0))
global$ = "letters\chr" + LTRIM$(RTRIM$(STR$(z))) + ".chr"
ON ERROR GOTO handler
BLOAD "letters\chr" + LTRIM$(RTRIM$(STR$(z))) + ".chr", VARPTR(letter(0))
DEF SEG
ON ERROR GOTO 0
x = startx + (ii - 1) * 8
SELECT CASE c
CASE 5: index = 160
CASE 8: index = 0
CASE 9: index = 120
CASE 12: index = 40
CASE 15: index = 80
END SELECT
global$ = STR$(x) + STR$(y) + STR$(index)
ON ERROR GOTO handler
IF y > 0 AND (z = 144 OR z = 143 OR z = 154 OR z = 153) THEN PUT (x, y - 2), letter(index), PSET ELSE PUT (x, y), letter(index), PSET
ON ERROR GOTO 0
21
CASE 2
SELECT CASE user.snakec
CASE 1: PALETTE 2, 0 + 256 * 42 + 0 * 65536
CASE 2: PALETTE 2, 55 + 256 * 55 + 0 * 65536
CASE 3: PALETTE 2, 49 + 256 * 38 + 13 * 65536
CASE 4: PALETTE 2, 0 + 256 * 0 + 0 * 65536
CASE 5: PALETTE 2, 55 + 256 * 55 + 55 * 65536
END SELECT
CASE 3
SELECT CASE user.spattern
CASE 1: PALETTE 6, 60 + 256 * 52 + 0 * 65536
CASE 2: PALETTE 6, 7 + 256 * 30 + 7 * 65536
CASE 3: PALETTE 6, 7 + 256 * 7 + 30 * 65536
CASE 4: PALETTE 6, 5 + 256 * 5 + 5 * 65536
CASE 5: PALETTE 6, 30 + 256 * 7 + 7 * 65536
END SELECT
END SELECT
END SUB
SUB clearground (mx, my)
y = 20
FOR x = 20 TO 360
LINE (x, y)-(639 - x, 479 - y), 5, B
IF y > 25 THEN
LINE (x - 6, y - 6)-(639 - (x - 6), 479 - (y - 6)), 3, B
END IF
y = y + 1
NEXT
LINE (20, 20)-(619, 459), 3, BF
END SUB
SUB customs
zap
center eng$(73, lang%), 12
mch(1) = 74
mch(2) = 77
mch(3) = 46
SELECT CASE MenuChoice%(3, 1, 15)
CASE 1
OPEN "profile.txt" FOR APPEND AS #11
PRINT #11, user.nickname
PRINT #11, lang%
PRINT #11, cpu#
CLOSE #11
CLS
logo
IF champdone = 1 THEN center eng$(70, lang%) + " " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)), 1
CLOSE
CHAIN "custom.bas"
CASE 2
zap
SHELL "dir /b maps\*.lvl > temp"
OPEN "temp" FOR INPUT AS #7
OPEN "maps.dat" FOR RANDOM AS #3 LEN = 14
counter = 0
DO WHILE NOT EOF(7)
counter = counter + 1
LINE INPUT #7, map$
PUT #3, counter, map$
LOOP
CLOSE #7
CLOSE #3
KILL "TEMP"
mark = 1
max = counter
OPEN "maps.dat" FOR RANDOM AS #3 LEN = 14
GET #3, mark, map$
center SPACE$(16), 12
center "-9-" + UCASE$(MID$(map$, 1, 1)) + LCASE$(MID$(map$, 2, LEN(map$) - 5)), 12
OPEN "maps\" + map$ FOR INPUT AS #4
FOR x = 1 TO 32
FOR y = 1 TO 24
INPUT #4, g
IF g = 1 THEN PUT (208 + (x - 1) * 7, 208 + (y - 1) * 7), sblock, PSET
NEXT
NEXT
CLOSE #4
DO
DO: a$ = INKEY$: LOOP UNTIL a$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
SELECT CASE a$
CASE CHR$(0) + "M": mark = mark + 1: center SPACE$(8), 10: IF mark > counter THEN mark = 1
CASE CHR$(0) + "K": mark = mark - 1: center SPACE$(8), 10: IF mark < 1 THEN mark = counter
CASE CHR$(13), CHR$(32): EXIT DO
CASE CHR$(27): CLOSE #3: KILL "maps.dat": zap: EXIT SUB
END SELECT
GET #3, mark, map$
center SPACE$(12), 12
center "-9-" + UCASE$(MID$(map$, 1, 1)) + LCASE$(MID$(map$, 2, LEN(map$) - 5)), 12
OPEN "maps\" + map$ FOR INPUT AS #4
FOR x = 1 TO 32
FOR y = 1 TO 24
INPUT #4, g
IF g = 1 THEN PUT (208 + (x - 1) * 7, 208 + (y - 1) * 7), sblock, PSET
IF g = 0 THEN LINE (208 + (x - 1) * 7, 208 + (y - 1) * 7)-(208 + (x - 1) * 7 + 6, 208 + (y - 1) * 7 + 6), 3, BF
NEXT
NEXT
CLOSE #4
LOOP
CLOSE #4
CLOSE #3
KILL "maps.dat"
score = 0: oldscore = 0: champ = 0: lives = 1: defscreen: speedlevel = 0: SPEEDset: playSNAKE: EXIT SUB
CASE 3: EXIT SUB
END SELECT
END SUB
SUB defscreen
CLS
PAINT (0, 0), 3
IF map$ = "" THEN
FOR col = 1 TO 32
PUTimage col, 1, block
PUTimage col, 24, block
NEXT col
FOR row = 2 TO 23
PUTimage 32, row, block
PUTimage 1, row, block
NEXT row
ELSE
OPEN "maps\" + map$ FOR INPUT AS #3
FOR col = 1 TO 32
FOR row = 1 TO 24
INPUT #3, ground(col, row)
IF ground(col, row) = 1 THEN PUTimage col, row, block ELSE PUTimage col, row, blank
NEXT
NEXT
CLOSE #3
END IF
PRINTIT "-4-" + eng$(10, lang%), 5, 3
PRINTIT "-4-" + eng$(11, lang%), 64, 3
COLOR 4
LOCATE 3, 36: PRINT "S N A K E"
LINE (27, 2)-(88, 17), 15, BF
LINE (276, 2)-(354, 17), 15, BF
LINE (500, 2)-(592, 17), 15, BF
FOR y = 30 TO 50
FOR x = 25 TO 560
IF POINT(x, y) = 4 THEN PSET (x, y - 29), 4: PSET (x + 1, y - 28), 7
NEXT
NEXT
LINE (25, 30)-(560, 50), 3, BF
PUT (80, 4), numSET(lives * 40), PSET
PUT (552, 4), numSET(0), PSET
PUT (560, 4), numSET(0), PSET
PUT (568, 4), numSET(0), PSET
PUT (576, 4), numSET(0), PSET
PUT (584, 4), numSET(0), PSET
COLOR 4
LOCATE 28, 62: PRINT "Peter Varnai"
PRINTIT "-4-" + eng$(12, lang%), 33, 28
LINE (254, 462)-(385, 477), 15, BF
FOR y = 426 TO 455
FOR x = 254 TO 639
IF POINT(x, y) = 4 THEN PSET (x, y + 30), 4: PSET (x + 1, y + 31), 7
NEXT
NEXT
showinfo 3, prey
LINE (254, 428)-(619, 455), 3, BF
END SUB
SUB drawJEP (lvl)
OPEN "files\lvl" + LTRIM$(RTRIM$(STR$(lvl))) + ".dat" FOR INPUT AS #9
maxx = 359: maxy = 410: x = 279: y = 341
DO
INPUT #9, counter, colr
IF counter = -1 THEN EXIT DO
28
FOR i = 1 TO counter
x = x + 1
IF x > maxx THEN x = 280: y = y + 1
PSET (x, y), colr
NEXT
LOOP
CLOSE #9
END SUB
SUB drawmove
GET #2, place(1), snake(1)
PUTimage snake(1).col, snake(1).row, head + snake(1).dir
FUNCTION eng$ (number, language)
SELECT CASE language
CASE 1
OPEN "files\english.txt" FOR RANDOM AS #10 LEN = 35
CASE 2
OPEN "files\magyar.txt" FOR RANDOM AS #10 LEN = 35
END SELECT
GET #10, number, t$
CLOSE #10
eng$ = LTRIM$(RTRIM$((t$)))
END FUNCTION
SUB highscores (index)
logo
IF champdone = 1 THEN center eng$(70, lang%) + " " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)), 1
' index = 1 --> show the highscores
' index = 2 --> write to AND show the highscores
OPEN "files\snake.top" FOR RANDOM AS #1 LEN = LEN(top(1))
FOR topers = 1 TO 10
GET #1, topers, top(topers)
NEXT
CLOSE #1
user.avscore = ((CLNG(user.avscore * user.gplayed + score)) / (user.gplayed + 1)
testlevel
user.gplayed = user.gplayed + 1
IF index = 1 THEN GOTO 2
IF users > 0 THEN
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
PUT #1, usernumber, user
CLOSE #1
END IF
FOR i = 1 TO 10
IF score >= top(i).score THEN
mark = i
FOR ii = 9 TO i STEP -1
top(ii + 1).score = top(ii).score
top(ii + 1).playdate = top(ii).playdate
top(ii + 1).nickname = top(ii).nickname
NEXT ii
center "-12-" + eng$(32, lang%), 11
COLOR 15: center eng$(33, lang%), 13
inputname:
IF usernumber < 5 THEN
DO: LOOP UNTIL INKEY$ = ""
COLOR 15
pname$ = ask$(eng$(34, lang%), 32, 16, 16, 1)
IF pname$ = "exit" OR pname$ = "up" OR pname$ = "down" OR pname$ = "" THEN GOSUB inputname
LINE ((43 + LEN(pname$)) * 8, 240)-((43 + LEN(pname$)) * 8, 254), 3
pname$ = UCASE$(MID$(pname$, 1, 1)) + LCASE$(MID$(pname$, 2, LEN(pname$) - 1))
ELSE
pname$ = UCASE$(MID$(user.nickname, 1, 1)) + LCASE$(MID$(user.nickname, 2, LEN(user.nickname) - 1))
END IF
top(i).nickname = pname$
top(i).playdate = DATE$
top(i).score = score
OPEN "files\snake.top" FOR RANDOM AS #1 LEN = LEN(top(1))
FOR iii = 1 TO 10
PUT #1, iii, top(iii)
NEXT iii
CLOSE #1
GOTO 2
END IF
NEXT i
COLOR 9
center eng$(30, lang%), 11
COLOR 15
center eng$(31, lang%), 13
mch(1) = 4
mch(2) = 22
mch(3) = 8
SELECT CASE MenuChoice%(3, 1, 16)
CASE 1: highscores 1: EXIT SUB
CASE 2: EXIT SUB
CASE 3: CLOSE #2: KILL "files\snake.tem": SYSTEM
END SELECT
2
LINE (100, 140)-(540, 470), 3, BF
COLOR 15
PRINTIT eng$(40, lang%), 24, 12
PRINTIT eng$(41, lang%), 42, 12
PRINTIT eng$(11, lang%), 54, 12
FOR topers = 1 TO 10
IF topers = mark THEN c = 9 ELSE c = 7
LOCATE topers + 12, 21
IF topers < 10 THEN g = 2 ELSE g = 1
COLOR 4
PRINT LTRIM$(RTRIM$(STR$(topers))); ".";
COLOR c: PRINT SPACE$(g); LEFT$(top(topers).nickname, 16); " "; top(topers).playdate; " "; top(topers).score
NEXT
FOR y = 175 TO 351 STEP 16
LINE (158, y)-(482, y), 2
NEXT
LINE (157, 174)-(483, 352), 2, B
LINE (158, 176)-(158, 350), 2: LINE (482, 176)-(482, 350), 2
LINE (319, 176)-(319, 350), 2: LINE (320, 176)-(320, 350), 2
LINE (412, 176)-(412, 350), 2: LINE (413, 176)-(413, 350), 2
center "-15-" + "[ -5-" + eng$(22, lang%) + "-15- ]", 25
DO: a$ = INKEY$: LOOP UNTIL a$ = CHR$(13) OR a$ = CHR$(32) OR a$ = CHR$(27)
SOUND 150, 1
zap
END SUB
SUB initialize
CLOSE #2
OPEN "files\snake.tem" FOR RANDOM AS #2 LEN = LEN(snake(1))
IF map$ = "" THEN
ERASE ground
FOR col = 1 TO 32
ground(col, 1) = -2
ground(col, 24) = -2
NEXT col
FOR row = 2 TO 23
ground(1, row) = -2
ground(32, row) = -2
NEXT row
FOR y = 2 TO 23
FOR x = 2 TO 31
ground(x, y) = 0
NEXT
NEXT
END IF
oldlength = 16
snakelength = 16
x = 24
FOR i = 1 TO snakelength
x = x - 1
snake(1).col = x
snake(1).row = 23
snake(1).TURN = 0
snake(1).dir = east
SELECT CASE i
CASE 1: index = head
CASE 2: index = neck
CASE 3: index = shoulder
CASE 4: index = body
CASE 5: index = body
CASE 6: index = body
CASE 7: index = body
CASE 8: index = body
CASE 9: index = body
CASE 10: index = body
CASE 11: index = shoulder
CASE 12: index = neck
CASE 13: index = tail
CASE 14: index = tailEND
CASE 15: index = rattle
CASE 16
index = blank
END SELECT
ground(x, 23) = -1
PUTimage x, 23, index + snake(1).dir
PUT #2, i, snake(1)
NEXT i
ground(x, 23) = 0
END SUB
SUB instructions
page = 1
maxpage = 8
DO
center eng$(72, lang%), 10
LINE (70, 134)-(568, 400), 7, B
LINE (68, 132)-(570, 402), 7, B
OPEN "files\page" + LTRIM$(RTRIM$(STR$(page))) + ".txt" FOR INPUT AS #9
FOR i! = 1 TO 7
INPUT #9, english$
INPUT #9, magyar$
IF lang% = 1 THEN CALL center(english$, i! * 2 + 10) ELSE CALL center(magyar$, i! * 2 + 10)
NEXT i!
PRINTIT "-5-" + LTRIM$(RTRIM$(STR$(page))), 70, 27
IF page = 8 THEN
LOCATE 16, 21: COLOR 9: PRINT CHR$(64)
COLOR 5: LOCATE 27, 59: PRINT "Peter Varnai"
IF lang% = 2 THEN PRINTIT "-5-V@rnai P#ter", 59, 27
END IF
29
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP WHILE a$ = ""
SELECT CASE a$
CASE CHR$(27): CLOSE #9: SYSTEM
CASE CHR$(8), CHR$(13), CHR$(32): CLOSE #9: zap: EXIT SUB
CASE CHR$(0) + "M"
page = page + 1: IF page > maxpage THEN SOUND 150, 4: page = maxpage ELSE zap
CASE CHR$(0) + "K"
page = page - 1: IF page < 1 THEN SOUND 150, 4: page = 1 ELSE zap
CASE "1", "2", "3", "4", "5", "6", "7", "8"
PRINTIT SPACE$(15), 59, 27
page = VAL(a$)
CASE ELSE: GOTO 29
END SELECT
CLOSE #9
LOOP
END SUB
SUB login
LINE (0, 130)-(639, 479), 3, BF
mch(1) = 66
mch(2) = 67
mch(3) = 46
18
SELECT CASE MenuChoice(3, 1, 11)
CASE 3: EXIT SUB
CASE 2
usernumber = 2
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
GET #1, 4, user
CLOSE #1
changeapp 1: changeapp 2: changeapp 3
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(usernumber)
PUT #1, 2, usernumber
CLOSE #1
LINE (0, 130)-(639, 479), 3, BF
center SPACE$(65), 1
center eng$(70, lang%) + " " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)), 1
EXIT SUB
END SELECT
pname$ = ask$(eng$(68, lang%), 30, 24, 16, 1)
LINE ((40 + LEN(pname$)) * 8, 368)-((40 + LEN(pname$)) * 8, 382), 3
SELECT CASE pname$
CASE "exit": center SPACE$(35), 24: a$ = "": GOTO 18
CASE "down": a$ = CHR$(0) + "P": center SPACE$(35), 24: GOTO 18
CASE "up": a$ = CHR$(0) + "H": center SPACE$(35), 24: GOTO 18
CASE ELSE
GOTO 10
END SELECT
10
pass$ = ask$(eng$(56, lang%), 31, 25, 8, 2)
center SPACE$(35), 25
center SPACE$(35), 24
SELECT CASE pass$
CASE "exit": a$ = "": GOTO 18
CASE "down": a$ = CHR$(0) + "P": GOTO 18
CASE "up": a$ = CHR$(0) + "H": GOTO 18
CASE ELSE
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
FOR i = 5 TO 4 + users
GET #1, i, user
IF RTRIM$(user.nickname) = pname$ AND RTRIM$(user.password) = pass$ THEN
CLOSE #1
usernumber = i
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(usernumber)
PUT #1, 2, usernumber
CLOSE #1
changeapp 1: changeapp 2: changeapp 3
LINE (0, 130)-(639, 479), 3, BF
center SPACE$(65), 1
center eng$(70, lang%) + " " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)), 1
EXIT SUB
END IF
NEXT
END SELECT
GET #1, usernumber, user
center SPACE$(30), 24
center SPACE$(30), 25
center "-12-" + eng$(69, lang%), 25
t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#
center SPACE$(35), 25
CLOSE #1
a$ = "": GOTO 18
END SUB
SUB logo
' S N A K E logo
RESTORE intro
PALETTE 1, 45
LINE (0, 0)-(639, 479), 3, BF
FOR i = 1 TO 5
READ startx: READ starty
READ counter
FOR n = 1 TO counter
READ x: READ y
LINE (startx, starty)-(x, y), 1
startx = x: starty = y
NEXT
READ px, py: PAINT (px, py), 1, 1
NEXT
LINE (300, 70)-(340, 85), 1, BF
IF champdone = 1 THEN center eng$(9, lang%) + ", " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)) + "!", 1
END SUB
SUB mainmenu (mark)
4
CLS
logo
IF mark = 1 THEN
x = 0
DO
x = x + 1
g = 0: r = 45
FOR c = 1 TO 15
PALETTE 1, (r - c * 3) + (g + c * 3) * 256
t# = TIMER + .05: WHILE t# > TIMER: WEND
NEXT
FOR c = 15 TO 1 STEP -1
PALETTE 1, (r - c * 3) + (g + c * 3) * 256
t# = TIMER + .05: WHILE t# > TIMER: WEND
NEXT
LOOP UNTIL x = 1
END IF
PALETTE 1, 45
OUT &HC8, 0
OUT &HC9, 3
OUT &HC9, 14
OUT &HC9, 0
IF mark = 1 THEN
'Small movie
OPEN "files\movie2.dat" FOR INPUT AS #2
OPEN "files\movie.dat" FOR RANDOM AS #1 LEN = LEN(film)
DO
a$ = INKEY$
INPUT #2, startf: INPUT #2, endf
IF startf = -1 THEN EXIT DO
FOR i = startf TO endf
INPUT #2, index
GET #1, i, film
IF index = 6500 THEN index = 6625
tempx = film.x: tempy = film.y
PUTimage tempx, tempy, index
NEXT
FOR rep = 1 TO 2
WAIT &H3DA, 8
WAIT &H3DA, 8, 8
NEXT
IF a$ <> "" THEN PAINT (0, 0), 3: logo: EXIT DO
LOOP
CLOSE #1
CLOSE #2
END IF
level = 0: champ = 0
center SPACE$(65), 1
DO
IF champdone = 1 THEN center eng$(70, lang%) + " " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)), 1
score = 0
prey = 0
mark = 1
6
mch(1) = 1
mch(2) = 2
mch(3) = 3
mch(4) = 4
mch(5) = 5
mch(6) = 6
IF champdone = 1 AND users <> 0 THEN mch(7) = 7 ELSE mch(7) = 0
IF champdone = 1 AND usernumber > 4 THEN mch(8) = 71 ELSE mch(8) = 0
IF champdone = 1 AND usernumber > 4 THEN mch(9) = 76 ELSE mch(9) = 0
mch(10) = 8
SELECT CASE MenuChoice%(10, mark, 12)
CASE 1
map$ = ""
score = 0: oldscore = 0: champ = 0: lives = 1: defscreen: speedlevel = 0: SPEEDset: playSNAKE: EXIT SUB
CASE 2
map$ = ""
champ = 1: prey = 10: showinfo 3, prey: level = 1: score = 0: oldscore = 0: lives = 5: defscreen: speedlevel = 0: SPEEDset: playSNAKE: EXIT SUB
CASE 3
map$ = ""
GOSUB pass
CASE 4
highscores 1
mark = 4
GOTO 6
CASE 5
options
CASE 6
zap
instructions
mark = 6
GOTO 6
CASE 7
login
LINE (0, 130)-(639, 479), 3, BF
mark = 7
GOTO 6
CASE 8
SELECT CASE user.level
CASE 1: nextlvl = 200
CASE 2: nextlvl = 400
CASE 3: nextlvl = 700
CASE 4: nextlvl = 1000
CASE 5: nextlvl = 1400
CASE 6: nextlvl = 1800
CASE 7: nextlvl = 2200
CASE 8: nextlvl = 2600
CASE 9: nextlvl = 3000
CASE 10: nextlvl = 0
END SELECT
OPEN "profile.txt" FOR APPEND AS #11
PRINT #11, user.nickname
PRINT #11, user.avscore
PRINT #11, user.gplayed
PRINT #11, user.level
PRINT #11, lang%
PRINT #11, LTRIM$(RTRIM$(STR$(nextlvl)))
PRINT #11, cpu#
CLOSE #11
CLS
logo
IF champdone = 1 THEN center eng$(70, lang%) + " " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)), 1
drawJEP (user.level)
CHAIN "profile.bas"
CASE 9
customs
map$ = ""
zap
mark = 9: GOTO 6
CASE 10
CLOSE #2: KILL "files\snake.tem": SYSTEM
EXIT SUB
END SELECT
LOOP
pass:
center SPACE$(25), 16
DO
LOCATE 16, 38: PRINT SPACE$(6)
pass$ = ask$("", 38, 16, 5, 2)
SELECT CASE pass$
CASE "down": center eng$(3, lang%), 16: a$ = CHR$(0) + "P": GOTO 6
CASE "up": center eng$(3, lang%), 16: a$ = CHR$(0) + "H": GOTO 6
CASE "exit": a$ = "": GOTO 6
CASE ELSE: EXIT DO
END SELECT
LOOP
FOR i = 1 TO 10
IF pass$ = top(i).id THEN
champ = 1: prey = 10: showinfo 3, prey: level = i: lives = 5: score = 0: oldscore = 0: defscreen: SPEEDset: playSNAKE: EXIT SUB
END IF
NEXT
SOUND 60, 10
LOCATE 16, 39: COLOR 4: PRINT "-----": t# = TIMER + 2: DO: LOOP UNTIL TIMER >= t#
mark = 3
GOTO 6
END SUB
FUNCTION MenuChoice% (selections, start, xstart)
sel = start
CONST MenuBright = "-15-"
CONST MenuDull = "-8-"
DO
FOR i = 1 TO selections
IF mch(i) > 0 THEN
w$ = eng$(mch(i), lang%)
IF i = sel THEN w$ = MenuBright + "[ " + "-5-" + w$ + MenuBright + " ]" ELSE w$ = MenuDull + " " + w$ + " "
center w$, xstart + ((i - 1) * 2)
END IF
NEXT i
DO: LOOP UNTIL INKEY$ = "": DO: a$ = UCASE$(INKEY$): LOOP WHILE a$ = ""
SOUND 150, 1
SELECT CASE a$
CASE CHR$(27): SYSTEM
CASE CHR$(0) + "P":
DO
sel = sel + 1: IF sel > selections THEN sel = 1
LOOP WHILE mch(sel) = 0
CASE CHR$(0) + "H":
DO
sel = sel - 1: IF sel < 1 THEN sel = selections
LOOP WHILE mch(sel) = 0
CASE CHR$(13), CHR$(32): side$ = "": EXIT DO
CASE CHR$(0) + "K": IF side$ = "?" THEN side$ = "-": EXIT DO
CASE CHR$(0) + "M": IF side$ = "?" THEN side$ = "+": EXIT DO
END SELECT
t# = TIMER + .05: DO: LOOP UNTIL TIMER >= t#
LOOP
MenuChoice% = sel
END FUNCTION
SUB options
16
LINE (0, 130)-(639, 479), 3, BF
center eng$(42, lang%), 11
mch(1) = 43
IF champdone = 1 THEN
IF user.lvlreached >= 3 AND usernumber > 4 THEN mch(3) = 47 ELSE mch(3) = 0
mch(2) = 52
ELSE
mch(2) = 0
mch(3) = 0
END IF
mch(4) = 22
mark = MenuChoice%(4, 1, 15)
settings mark
IF mark = 4 THEN LINE (0, 130)-(639, 479), 3, BF: EXIT SUB
GOTO 16
END SUB
FUNCTION place (x)
begin = start
FOR i = 2 TO x STEP 1
begin = begin + 1: IF begin > snakelength THEN begin = 1
NEXT
place = begin
END FUNCTION
SUB playSNAKE
IF user.lvlreached > 4 THEN flag = 2 ELSE flag = 1
3
showinfo 3, prey
death$ = ""
1
rats = 0
IF death$ <> "" THEN
IF lives = 0 THEN score = score + INT((score / 30)) * user.rats: showinfo 2, score
GET (199, 89)-(441, 308), background
LINE (199, 89)-(441, 308), 3, BF
LINE (199, 89)-(441, 308), 7, B
LINE (201, 91)-(439, 306), 7, B
COLOR 15: center death$, 9
IF lives = 0 THEN center eng$(28, lang%), 11: center eng$(29, lang%), 13
IF lives = 0 THEN
mch(1) = 22
IF MenuChoice%(1, 1, 16) = 1 THEN highscores 2: EXIT SUB
END IF
IF lives > 0 THEN mch(1) = 37: mark = 1 ELSE mch(1) = 0: mark = 2
mch(2) = 22
IF MenuChoice%(2, mark, 13) = 2 THEN EXIT SUB
PUT (199, 89), background, PSET
clearground mcol, mrow
IF lives = 0 THEN highscores 2: EXIT SUB
END IF
death$ = ""
initialize
IF champ = 1 THEN score = oldscore: showinfo 2, score
IF champ = 1 THEN IF setuplevel = 2 THEN EXIT SUB
realspeed = SPEED!
IF champ = 0 THEN
GET (199, 89)-(441, 308), background
FOR i = 3 TO 1 STEP -1
center eng$(19, lang%) + STR$(i) + "...", 13
t# = TIMER + 1: DO: LOOP UNTIL TIMER >= t#
NEXT
PUT (199, 89), background, PSET
END IF
GOSUB PUTmouse
col = 23: row = 23
colchange = 1: rowchange = 0
direction = east: oldd = east
plusl = 0
start = 1
DO: LOOP UNTIL INKEY$ = ""
FOR r = 1 TO 10
GOSUB rattle
NEXT r
DO
startplay:
a$ = INKEY$
SELECT CASE a$
CASE CHR$(0) + "M"
IF colchange <> -1 THEN colchange = 1: rowchange = 0: direction = east
CASE CHR$(0) + "P"
IF rowchange <> -1 THEN rowchange = 1: colchange = 0: direction = south
CASE CHR$(0) + "K"
IF colchange <> 1 THEN colchange = -1: rowchange = 0: direction = west
CASE CHR$(0) + "H"
IF rowchange <> 1 THEN rowchange = -1: colchange = 0: direction = north
CASE CHR$(32)
GOSUB pausemenu
CASE CHR$(27)
GOSUB pausemenu
CASE CHR$(13)
GOSUB pausemenu
CASE "p"
GOSUB pausemenu
END SELECT
IF champ = 1 THEN
IF prey = 0 THEN oldscore = score: showinfo 2, score: level = level + 1: clearground mcol, mrow: prey = 10: GOTO 3
END IF
IF ground(col + colchange, row + rowchange) < 0 THEN
t# = TIMER + .1
DO
a$ = INKEY$
SELECT CASE a$
CASE CHR$(0) + "M"
IF colchange <> -1 THEN colchange = 1: rowchange = 0: direction = east: EXIT DO
CASE CHR$(0) + "P"
IF rowchange <> -1 THEN rowchange = 1: colchange = 0: direction = south: EXIT DO
CASE CHR$(0) + "K"
IF colchange <> 1 THEN colchange = -1: rowchange = 0: direction = west: EXIT DO
CASE CHR$(0) + "H"
IF rowchange <> 1 THEN rowchange = -1: colchange = 0: direction = north: EXIT DO
END SELECT
LOOP UNTIL TIMER > t#
END IF
row = row + rowchange: col = col + colchange
IF rats < user.rats THEN IF INT(RND * 100) = 2 THEN GOSUB PUTrat
'lengthen
IF plusl THEN
OPEN "store.txt" FOR RANDOM AS #3 LEN = LEN(snake(1))
FOR i = 1 TO snakelength
GET #2, place(i), snake(1)
PUT #3, i, snake(1)
NEXT
snakelength = snakelength + 1
ground(snake(1).col, snake(1).row) = 0
FOR i = 1 TO snakelength
GET #3, i, snake(1)
IF i = snakelength THEN snake(1).col = 1: snake(1).row = 1
PUT #2, i, snake(1)
NEXT
start = 1
CLOSE #3: KILL "store.txt"
plusl = plusl - 1
END IF
oldstart = start
GET #2, oldstart, snake(1)
snake(2).col = col
snake(2).row = row
snake(2).TURN = 0
snake(2).dir = direction
snake(2).rdir = direction
start = start - 1: IF start = 0 THEN start = snakelength
GET #2, start, snake(1)
ground(snake(1).col, snake(1).row) = 0
PUT #2, start, snake(2)
IF direction <> oldd THEN
GET #2, oldstart, snake(1)
snake(1).TURN = TURN
SELECT CASE oldd
CASE north
IF direction = east THEN snake(1).dir = NE
IF direction = west THEN snake(1).dir = NW
snake(1).rdir = north
CASE east
IF direction = north THEN snake(1).dir = EN
IF direction = south THEN snake(1).dir = ES
snake(1).rdir = east
CASE south
IF direction = east THEN snake(1).dir = SE
IF direction = west THEN snake(1).dir = SW
snake(1).rdir = south
CASE west
IF direction = north THEN snake(1).dir = WN
IF direction = south THEN snake(1).dir = WS
snake(1).rdir = west
END SELECT
PUT #2, oldstart, snake(1)
END IF
oldd = direction
IF ground(col, row) < 0 THEN
lives = lives - 1: showinfo 1, lives
IF ground(col, row) = -2 THEN death$ = "-12-*-15- " + eng$(25, lang%) + "-12- *"
IF ground(col, row) = -1 THEN death$ = "-12-*-15- " + eng$(26, lang%) + "-12- *"
GOTO 1
END IF
27
IF ground(col, row) = 1000 THEN
IF direction = mdirection THEN
score = score + speedlevel * 10: showinfo 2, score
IF champ = 0 THEN prey = prey + 1: showinfo 3, prey
IF champ = 1 THEN prey = prey - 1: showinfo 3, prey
PLAY "MBT80L64O6D-E-E"
IF champ = 1 THEN plusl = plusl + 4
plusl = plusl + 1: GOSUB PUTmouse
ELSE
GOSUB PUTmouse
END IF
END IF
IF ground(col, row) = 2000 THEN
PLAY "MBMST128L64O2D-E-E"
randomdeath = INT(RND * 10) + 1
score = score - 50: IF score < 0 THEN score = 0
showinfo 2, score
rats = rats - 1
IF randomdeath < 3 THEN lives = lives - 1: showinfo 1, lives: death$ = "-12-*-15-" + eng$(27, lang%) + "-12-*": GOTO 1
plusl = plusl + 10
END IF
drawmove
FOR i! = 1 TO realspeed: NEXT
LOOP
PUTmouse:
GET #2, place(snakelength), snake(1)
ground(snake(1).col, snake(1).row) = 1
DO
mcol = INT(RND * 30) + 2
mrow = INT(RND * 22) + 2
LOOP UNTIL ground(mcol, mrow) = 0
mdirection = INT(RND * 4) * 125
IF user.lvlreached > 4 THEN IF flag = 1 THEN flag = 2 ELSE flag = 1
IF flag = 1 THEN PUTimage mcol, mrow, mouse + mdirection
IF flag = 2 THEN PUTimage mcol, mrow, frog + mdirection
ground(mcol, mrow) = 1000
ground(snake(1).col, snake(1).row) = 0
PUT #2, place(snakelength), snake(1)
RETURN
rattle:
PUT (160, 438), imageSET(rattle + east), PSET
GOSUB cd
PUT (160, 440), imageSET(rattle + east), PSET
GOSUB cd
PUT (160, 442), imageSET(rattle + east), PSET
GOSUB cd
PUT (160, 440), imageSET(rattle + east), PSET
GOSUB cd
IF ground(9, 22) < 0 THEN PUTimage 9, 22, block
IF ground(9, 24) < 0 THEN PUTimage 9, 24, block
IF ground(9, 22) = 1000 THEN PUTimage mcol, mrow, mouse + mdirection
RETURN
cd:
PLAY "MFMST255L64O1CD"
RETURN
pausemenu:
GET (199, 89)-(441, 308), background
mark = 1
7
LINE (199, 89)-(441, 308), 3, BF
LINE (199, 89)-(441, 308), 7, B
LINE (201, 91)-(439, 306), 7, B
center eng$(20, lang%), 9
mch(1) = 21
mch(2) = 22
mch(3) = 23
mch(4) = 8
DO
mark = MenuChoice%(4, mark, 12)
LOOP UNTIL side$ = ""
SELECT CASE mark
CASE 1
PUT (199, 89), background, PSET
FOR i = 3 TO 1 STEP -1
center eng$(24, lang%) + STR$(i) + "...", 13
t# = TIMER + 1
DO: LOOP UNTIL TIMER >= t#
NEXT
PUT (199, 89), background, PSET
t# = TIMER + .05: DO: LOOP UNTIL TIMER > t#
RETURN
CASE 2
EXIT SUB
CASE 3
SPEEDset
realspeed = SPEED!: mark = 3: GOTO 7
CASE 4
CLOSE #2: KILL "files\snake.tem": SYSTEM
RETURN
END SELECT
END SUB
SUB PRINTIT (text$, x, y)
textlen = LEN(text$)
FOR i = 1 TO LEN(text$)
a$ = MID$(text$, i, 1)
IF a$ = "^" THEN textlen = textlen - 1
IF a$ = "-" THEN
textlen = textlen - 2
IF MID$(text$, i + 2, 1) = "-" THEN
textlen = textlen - 1: i = i + 3: GOTO 25
ELSE
textlen = textlen - 2: i = i + 4: GOTO 25
END IF
END IF
25
NEXT
s = 0
c = 15
ii = 0
FOR i = 1 TO LEN(text$)
a$ = MID$(text$, i, 1)
IF a$ = "-" THEN
IF MID$(text$, i + 2, 1) = "-" THEN c = VAL(MID$(text$, i + 1, 1)): i = i + 2 ELSE c = VAL(MID$(text$, i + 1, 2)): i = i + 3
GOTO 26
END IF
IF a$ = "^" THEN s = 1: GOTO 26
ii = ii + 1
z = ASC(a$)
SELECT CASE a$
CASE "=": z = 45
CASE "#": IF s = 1 THEN s = 0: z = 144 ELSE z = 130
CASE "@": IF s = 1 THEN s = 0: z = 143 ELSE z = 160
CASE "|": IF s = 1 THEN s = 0: z = 161 ELSE z = 161
CASE "$": IF s = 1 THEN s = 0: z = 162 ELSE z = 162
CASE "_": IF s = 1 THEN s = 0: z = 163 ELSE z = 163
CASE "<": IF s = 1 THEN s = 0: z = 153 ELSE z = 148
CASE ">": IF s = 1 THEN s = 0: z = 154 ELSE z = 129
END SELECT
COLOR c
LOCATE y, x + ii - 1: PRINT CHR$(z)
26
NEXT
END SUB
SUB PUTimage (col, row, index)
x = (col - 1) * 20
y = (row - 1) * 20
PUT (x, y), imageSET(index), PSET
IF index < 6000 THEN ground(col, row) = -1
IF index = block THEN ground(col, row) = -2
END SUB
SUB restorecolors
RESTORE Paletteinfo
FOR n = 0 TO 15
READ red, green, blue
OUT &H3C8, n
OUT &H3C9, red
OUT &H3C9, green
OUT &H3C9, blue
NEXT
END SUB
SUB settings (i)
LINE (0, 130)-(639, 479), 3, BF
SELECT CASE i
CASE 1
mch(1) = 44
mch(2) = 45
mark = 2
CASE 2
mch(1) = 53
IF users > 0 THEN
mch(2) = 54
mch(3) = 55
ELSE
mch(2) = 0
mch(3) = 0
END IF
mch(4) = 46
mark = 4
CASE 3
mch(1) = 48
IF user.lvlreached < 4 THEN mch(2) = 0 ELSE mch(2) = 49
IF user.lvlreached < 6 THEN mch(3) = 0 ELSE mch(3) = 50
IF user.lvlreached < 7 THEN mch(4) = 0 ELSE mch(4) = 51
mch(5) = 46
mark = 5
center "-12-" + SPACE$(14) + STR$(user.rats), 12
PUTimage 24, 10, head + north: PUTimage 24, 11, neck + north: PUTimage 24, 12, shoulder + north
PUTimage 24, 13, body + north: PUTimage 24, 14, shoulder + north: PUTimage 24, 15, neck + north
PUTimage 24, 16, tail + north: PUTimage 24, 17, tailEND + north: PUTimage 24, 18, rattle + north
CASE 4: EXIT SUB
END SELECT
8
SELECT CASE i
CASE 1
LINE (0, 130)-(639, 479), 3, BF
lang% = MenuChoice%(mark, lang%, 12)
zap
center eng$(42, lang%), 11
user.language = lang%
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
IF usernumber > 4 THEN PUT #1, usernumber, user
CLOSE #1
EXIT SUB
CASE 2
SELECT CASE MenuChoice%(4, 1, 15)
CASE 1: oldnumber = usernumber: GOSUB create
CASE 2: oldnumber = usernumber: GOSUB change
CASE 3: oldnumber = usernumber: GOSUB delete
CASE 4
EXIT SUB
END SELECT
CASE 3
mmark = 1
DO
side$ = "?"
mmark = MenuChoice%(mark, mmark, 12)
lrmark = 0
IF side$ = "-" THEN lrmark = -1
IF side$ = "+" THEN lrmark = 1
SELECT CASE mmark
CASE 1
user.rats = user.rats + lrmark: IF user.rats > 5 THEN user.rats = 0
IF user.rats < 0 THEN user.rats = 5
center "-12-" + SPACE$(14) + STR$(user.rats), 12
CASE 2
user.bg = user.bg + lrmark: IF user.bg > 5 THEN user.bg = 1
IF user.bg < 1 THEN user.bg = 5
changeapp 1
CASE 3
user.snakec = user.snakec + lrmark: IF user.snakec > 5 THEN user.snakec = 1
IF user.snakec < 1 THEN user.snakec = 5
changeapp 2
CASE 4
user.spattern = user.spattern + lrmark: IF user.spattern > 5 THEN user.spattern = 1
IF user.spattern < 1 THEN user.spattern = 5
changeapp 3
CASE 5
IF side$ = "" THEN EXIT DO
END SELECT
LOOP
IF usernumber > 4 THEN
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
PUT #1, usernumber, user
CLOSE #1
END IF
EXIT SUB
END SELECT
create:
IF lrmark <> 0 THEN a$ = "": GOTO 8
LINE (0, 130)-(639, 479), 3, BF
DO
LOCATE 16, 30: PRINT SPACE$(33)
pname$ = ask$(eng$(34, lang%), 30, 16, 16, 1)
SELECT CASE pname$
CASE "exit": a$ = "": LINE (0, 130)-(639, 479), 3, BF: GOTO 8
CASE "down"
CASE "up"
CASE ELSE: EXIT DO
END SELECT
LOOP
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
FOR n = 1 TO users
GET #1, n + 4, user
IF RTRIM$(user.nickname) = pname$ THEN center "-12-" + eng$(60, lang%), 17: SOUND 60, 5: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: center SPACE$(25), 17: GET #1, oldnumber, user: CLOSE #1: GOSUB create
NEXT
GET #1, usernumber, user
CLOSE #1
DO
center SPACE$(55), 19
center SPACE$(55), 21
9
pass$ = ask$(eng$(3, lang%) + ":", 28, 19, 8, 2)
IF pass$ = "exit" THEN a$ = "": LINE (0, 130)-(639, 479), 3, BF: GOTO 8
IF pass$ = "down" OR pass$ = "up" THEN LOCATE 25, 35: PRINT SPACE$(25): GOTO 9
11
repass$ = ask$(eng$(57, lang%), 26, 21, 8, 2)
IF repass$ = pass$ THEN EXIT DO
IF repass$ = "exit" THEN a$ = "": LINE (0, 130)-(639, 479), 3, BF: GOTO 8
IF repass$ <> "down" AND repass$ <> "up" THEN
SOUND 60, 5
center "-12-" + eng$(59, lang%), 24
t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#
center SPACE$(30), 24
ELSE
center SPACE$(30), 24
GOTO 11
END IF
LOOP
user.nickname = pname$
user.password = pass$
user.level = 1
user.avscore = 0
user.gplayed = 0
user.lvlreached = 1
user.language = lang%
user.gmode = 1
user.rats = 3
user.bg = 1
user.snakec = 1
user.spattern = 1
users = users + 1: usernumber = 4 + users
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
PUT #1, 4 + users, user
CLOSE #1
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(users)
PUT #1, 2, usernumber
PUT #1, 3, users
CLOSE #1
IF users > 0 THEN
mch(2) = 54
mch(3) = 55
ELSE
mch(2) = 0
mch(3) = 0
END IF
center SPACE$(65), 1
center eng$(70, lang) + " " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)), 1
changeapp 1: changeapp 2: changeapp 3
LINE (0, 130)-(639, 479), 3, BF: GOTO 8
change:
IF lrmark <> 0 THEN a$ = "": GOTO 8
LINE (0, 130)-(639, 479), 3, BF
DO
LOCATE 16, 30: PRINT SPACE$(53)
pname$ = ask$(eng$(34, lang%), 30, 16, 16, 1)
SELECT CASE pname$
CASE "exit": a$ = "": LINE (0, 130)-(639, 479), 3, BF: GOTO 8
CASE "down"
CASE "up"
CASE ELSE: EXIT DO
END SELECT
LOOP
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
FOR n = 1 TO users
GET #1, n + 4, user
IF RTRIM$(user.nickname) = pname$ THEN usernumber = n + 4: GOTO 15
NEXT
center "-12-" + eng$(61, lang%), 17: usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: center SPACE$(55), 17: GOSUB change
15
GET #1, usernumber, user
DO
center SPACE$(50), 19
pass$ = ask$(eng$(56, lang%), 28, 19, 8, 2)
SELECT CASE pass$
CASE "exit": a$ = "": LINE (0, 130)-(639, 479), 3, BF: usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: GOTO 8
CASE "down"
CASE "up"
CASE ELSE
IF pass$ <> RTRIM$(user.password) THEN center "-12-" + eng$(58, lang%), 20: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: center SPACE$(50), 20: GOTO 15
GOTO 14
END SELECT
LOOP
14
LOCATE 25, 35: PRINT SPACE$(35)
DO
pass$ = ask$(eng$(62, lang%), 24, 21, 8, 2)
SELECT CASE pass$
CASE "exit": a$ = "": LINE (0, 130)-(639, 479), 3, BF: usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: GOTO 8
CASE "down"
CASE "up"
CASE ELSE
EXIT DO
END SELECT
LOOP
DO
pass1$ = ask$(eng$(57, lang%), 22, 22, 8, 2)
SELECT CASE pass1$
CASE "exit": a$ = "": LINE (0, 130)-(639, 479), 3, BF: usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: GOTO 8
CASE "down"
CASE "up"
CASE ELSE
IF pass$ = pass1$ THEN EXIT DO ELSE center SPACE$(65), 21: center SPACE$(65), 22: center "-12-" + eng$(59, lang%), 21: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: center SPACE$(55), 21: GOTO 14
END SELECT
LOOP
user.password = pass$
PUT #1, usernumber, user
CLOSE #1
LINE (0, 130)-(639, 479), 3, BF: a$ = ""
GOTO 8
delete:
IF lrmark <> 0 THEN a$ = "": GOTO 8
LINE (0, 130)-(639, 479), 3, BF
DO
pname$ = ask$(eng$(34, lang%), 30, 16, 16, 1)
LINE ((43 + LEN(pname$)) * 8, 240)-((43 + LEN(pname$)) * 8, 254), 3
SELECT CASE pname$
CASE "exit": a$ = "": LINE (0, 130)-(639, 479), 3, BF: GOTO 8
CASE "down"
CASE "up"
CASE ELSE: EXIT DO
END SELECT
LOOP
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
FOR n = 1 TO users
GET #1, n + 4, user
IF RTRIM$(user.nickname) = pname$ THEN usernumber = n + 4: GOTO 13
NEXT
center "-12-" + eng$(61, lang%), 17: usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: GOSUB delete
13
GET #1, usernumber, user
DO
LOCATE 25, 35: PRINT SPACE$(25)
LOCATE 27, 33: PRINT SPACE$(25)
12
pass$ = ask$(eng$(56, lang%), 28, 19, 8, 2)
IF pass$ = "exit" THEN a$ = "": LINE (0, 130)-(639, 479), 3, BF: usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: a$ = "": GOTO 8
IF pass$ = "down" OR pass$ = "up" THEN center SPACE$(65), 19: GOTO 12
IF pass$ <> RTRIM$(user.password) THEN center SPACE$(60), 19: center "-12-" + eng$(58, lang%), 19: t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#: center SPACE$(50), 19: GOTO 12
COLOR 12: center eng$(63, lang%), 21
mch(1) = 64
mch(2) = 65
IF MenuChoice%(2, 1, 24) = 1 THEN EXIT DO
mch(1) = 53
mch(2) = 54
usernumber = oldnumber: GET #1, usernumber, user: CLOSE #1: LINE (0, 130)-(639, 479), 3, BF: GOTO 8
LOOP
mch(1) = 53
mch(2) = 54
IF users > 1 THEN
FOR n = usernumber + 1 TO 4 + users
GET #1, n, user
PUT #1, n - 1, user
NEXT n
END IF
user.nickname = ""
user.password = ""
user.level = 0
user.avscore = 0
user.lvlreached = 0
user.language = 0
user.gmode = 0
user.rats = 0
user.bg = 0
user.snakec = 0
user.spattern = 0
PUT #1, 4 + users, user
users = users - 1: usernumber = 4
GET #1, 4, user
CLOSE #1
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(users)
PUT #1, 2, usernumber
PUT #1, 3, users
CLOSE #1
IF users > 0 THEN
mch(2) = 54
mch(3) = 55
ELSE
mch(2) = 0
mch(3) = 0
END IF
LINE (0, 130)-(639, 479), 3, BF
center SPACE$(65), 1
center eng$(70, lang%) + " " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)), 1
changeapp 1: changeapp 2: changeapp 3
a$ = ""
GOTO 8
END SUB
FUNCTION setuplevel
lvl = level
ERASE ground
FOR y = 2 TO 23
FOR x = 2 TO 31
ground(x, y) = 0
LINE ((x - 1) * 20, (y - 1) * 20)-((x - 1) * 20 + 19, (y - 1) * 20 + 19), 3, BF
NEXT
NEXT
initialize
prey = 10
showinfo 3, prey
SELECT CASE lvl
CASE 1: RESTORE lvl1
CASE 2: RESTORE lvl2
CASE 3: RESTORE lvl3
CASE 4: RESTORE lvl4
CASE 5: RESTORE lvl5
CASE 6: RESTORE lvl6
CASE 7: RESTORE lvl7
CASE 8: RESTORE lvl8
CASE 9: RESTORE lvl9
CASE 10
FOR i = 0 TO 1
FOR x = 4 + i TO 28 + i STEP 6
PUTimage x, 4, block
PUTimage x, 21, block
PUTimage x, 9, block
PUTimage x, 10, block
PUTimage x, 15, block
PUTimage x, 16, block
ground(x, 21) = -2: ground(x, 9) = -2: ground(x, 15) = -2
ground(x, 4) = -2: ground(x, 10) = -2: ground(x, 16) = -2
NEXT
NEXT
FOR x = 3 TO 30 STEP 3
PUTimage x, 5, block
PUTimage x, 20, block
PUTimage x, 8, block
PUTimage x, 9, block
PUTimage x, 10, block
PUTimage x, 15, block
PUTimage x, 16, block
PUTimage x, 17, block
ground(x, 5) = -2: ground(x, 8) = -2: ground(x, 10) = -2: ground(x, 16) = -2
ground(x, 20) = -2: ground(x, 9) = -2: ground(x, 15) = -2: ground(x, 17) = -2
NEXT
CASE 11
score = score * lives
showinfo 2, score
GET (190, 119)-(450, 278), background
LINE (190, 119)-(450, 278), 3, BF
LINE (190, 119)-(450, 278), 7, B
LINE (192, 121)-(448, 276), 7, B
center "-12-" + eng$(32, lang%), 11
IF champdone = 0 THEN center eng$(38, lang%), 13
center "-5-" + eng$(22, lang%), 15
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(champdone)
champdone = 1: PUT #1, 1, champdone: CLOSE #1
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
IF a$ = CHR$(27) OR a$ = CHR$(13) OR a$ = CHR$(32) THEN
PUT (190, 119), background, PSET
clearground 2, 4
highscores 2: setuplevel = 2: EXIT FUNCTION
END IF
LOOP
END SELECT
IF lvl < 10 THEN
DO
READ startx
IF startx = 0 THEN EXIT DO
READ starty, endx, endy
IF startx < endx THEN iist = 1 ELSE iist = -1
IF starty < endy THEN ist = 1 ELSE ist = -1
FOR i = starty TO endy STEP ist
FOR ii = startx TO endx STEP iist
PUTimage ii, i, block
ground(ii, i) = -2
NEXT
NEXT
LOOP
END IF
5
COLOR 15
GET (199, 89)-(441, 308), background
LINE (199, 136)-(441, 280), 3, BF
LINE (201, 138)-(439, 278), 8, B
LINE (199, 136)-(441, 280), 8, B
center eng$(35, lang%) + " = " + LTRIM$(RTRIM$(STR$(lvl))), 10
center top(level).id, 11
mch(1) = 36
mch(2) = 23
mch(3) = 22
SELECT CASE MenuChoice%(3, 1, 13)
CASE 2: SPEEDset: realspeed = SPEED!: GOTO 5
CASE 3: setuplevel = 2
CASE ELSE: setuplevel = 1
END SELECT
PUT (199, 89), background, PSET
END FUNCTION
SUB showinfo (index, value)
SELECT CASE index
CASE 1
PUT (80, 4), numSET(value * 40), PSET
CASE 2
IF value < 10 THEN v$ = "0000" + LTRIM$(RTRIM$(STR$(value)))
IF value > 9 AND value < 100 THEN v$ = "000" + LTRIM$(RTRIM$(STR$(value)))
IF value > 99 AND value < 1000 THEN v$ = "00" + LTRIM$(RTRIM$(STR$(value)))
IF value > 999 AND value < 10000 THEN v$ = "0" + LTRIM$(RTRIM$(STR$(value)))
IF value > 9999 THEN v$ = LTRIM$(RTRIM$(STR$(value)))
FOR i = 552 TO 584 STEP 8
PUT (i, 4), numSET(VAL(MID$(v$, (i - 552) / 8 + 1, 1)) * 40), PSET
NEXT
CASE 3
IF value < 10 THEN p$ = "000" + LTRIM$(RTRIM$(STR$(value)))
IF value > 9 AND value < 100 THEN p$ = "00" + LTRIM$(RTRIM$(STR$(value)))
IF value > 99 AND value < 1000 THEN p$ = "0" + LTRIM$(RTRIM$(STR$(value)))
IF value > 999 THEN p$ = LTRIM$(RTRIM$(STR$(value)))
FOR i = 353 TO 377 STEP 8
PUT (i, 464), numSET(VAL(MID$(p$, (i - 353) / 8 + 1, 1)) * 40), PSET
NEXT
END SELECT
END SUB
SUB SPEEDset
COLOR 15
IF speedlevel = 0 THEN GET (199, 89)-(441, 308), background
LINE (199, 89)-(441, 308), 3, BF
LINE (199, 89)-(441, 308), 7, B
LINE (201, 91)-(439, 306), 7, B
IF speedlevel <> 0 THEN mark = speedlevel ELSE mark = 3
mch(1) = 14
mch(2) = 15
mch(3) = 16
mch(4) = 17
mch(5) = 18
center eng$(13, lang%), 8
SELECT CASE MenuChoice%(5, mark, 10)
CASE 1
SPEED! = 120000 / ((cpu# / 10) / (1.59 / 10)): speedlevel = 1
CASE 2
SPEED! = 90000 / ((cpu# / 14.286) / (1.59 / 14.286)): speedlevel = 2
CASE 3
SPEED! = 60000 / ((cpu# / 20) / (1.59 / 20)): speedlevel = 3
CASE 4
SPEED! = 30000 / ((cpu# / 33.333) / (1.59 / 33.333)): speedlevel = 4
CASE 5
SPEED! = 15000 / ((cpu# / 50) / (1.59 / 50)): speedlevel = 5
END SELECT
FOR i = 8 TO 18 STEP 2
center SPACE$(24), (i)
NEXT
PUT (199, 89), background, PSET
END SUB
SUB startup
PAINT (0, 0), 3
mch(1) = 44
mch(2) = 45
lang% = MenuChoice%(2, 1, 12)
23
IF users > 0 THEN
mch(2) = 66
mch(1) = 67
IF MenuChoice(2, 1, 12) = 1 THEN
GOTO 24
ELSE
center SPACE$(35), 12
center SPACE$(35), 14
pname$ = ask$(eng$(68, lang%), 30, 11, 16, 1)
SELECT CASE pname$
CASE "exit": SYSTEM
CASE ELSE
GOTO 22
END SELECT
22
pass$ = ask$(eng$(56, lang%), 31, 13, 8, 2)
center SPACE$(35), 11
center SPACE$(35), 13
SELECT CASE pass$
CASE "exit": SYSTEM
CASE ELSE
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
FOR i = 5 TO 4 + users
GET #1, i, user
IF RTRIM$(user.nickname) = pname$ AND RTRIM$(user.password) = pass$ THEN
CLOSE #1
usernumber = i
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(usernumber)
PUT #1, 2, usernumber
CLOSE #1
changeapp 1: changeapp 2: changeapp 3
LINE (0, 130)-(639, 479), 3, BF
center SPACE$(65), 1
center eng$(70, lang%) + " " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)), 1
EXIT SUB
END IF
NEXT
END SELECT
GET #1, usernumber, user
center SPACE$(30), 11
center SPACE$(30), 13
center "-12-" + eng$(69, lang%), 13
t# = TIMER + 1.5: DO: LOOP UNTIL TIMER >= t#
center SPACE$(35), 13
CLOSE #1
PAINT (0, 0), 3
GOTO 23
END IF
ELSE
24
usernumber = 2
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(user)
GET #1, 4, user
CLOSE #1
changeapp 1: changeapp 2: changeapp 3
OPEN "files\snake.use" FOR RANDOM AS #1 LEN = LEN(usernumber)
PUT #1, 2, usernumber
CLOSE #1
LINE (0, 130)-(639, 479), 3, BF
center SPACE$(65), 1
center eng$(70, lang%) + " " + MID$(RTRIM$(user.nickname), 1, 1) + LCASE$(MID$(RTRIM$(user.nickname), 2, LEN(RTRIM$(user.nickname)) - 1)), 1
EXIT SUB
END IF
END SUB
SUB testlevel
RESTORE lvls
FOR i = 10 TO 1 STEP -1
READ x
IF user.avscore >= x THEN user.level = i: EXIT FOR
NEXT
IF user.level > user.lvlreached THEN user.lvlreached = user.level
END SUB
SUB zap
LINE (0, 130)-(639, 479), 3, BF
END SUB
This message has been edited by Tusike on Jan 4, 2008 12:13 PM This message has been edited by Tusike on Dec 22, 2007 11:07 AM This message has been edited by Tusike on Dec 16, 2007 5:49 AM This message has been edited by Tusike on Dec 15, 2007 9:37 AM
'Creatf.bas - creates file for Snake
CONST fleVER = "Files\snake.ver", Ver = "1222"
CONST fleUSE = "Files\snake.use"
CONST fleTOP = "Files\snake.top"
CONST fleENG = "files\english.txt"
CONST fleMAG = "files\magyar.txt"
CONST fleMV1 = "Files\movie.dat"
CONST fleMV2 = "Files\movie2.dat"
CONST fleIMG = "Files\images.dat"
DEFINT A-Z
DIM letter(0 TO 199) AS SINGLE
SCREEN 12: CLS
PAINT (0, 0), 3
FOR n = 0 TO 15
OUT &H3C8, n
OUT &H3C9, 0
OUT &H3C9, 0
OUT &H3C9, 0
NEXT n
TYPE filmloc
x AS INTEGER
y AS INTEGER
END TYPE
DIM film AS filmloc
TYPE account
nickname AS STRING * 20
password AS STRING * 8
Level AS INTEGER
avscore AS INTEGER
gplayed AS INTEGER
lvlreached AS INTEGER
Language AS INTEGER
gmode AS INTEGER
rats AS INTEGER
bg AS INTEGER
snakec AS INTEGER
spattern AS INTEGER
END TYPE
TYPE topperson
pname AS STRING * 20
playdate AS STRING * 10
Score AS LONG
id AS STRING * 5
END TYPE
DIM User AS account
ON ERROR GOTO Ignore: MKDIR "files"
MKDIR "letters"
KILL "files\*.*"
KILL "letters\*.*"
ON ERROR GOTO 0
OPEN fleVER FOR OUTPUT AS #1: PRINT #1, Ver: CLOSE #1
OPEN fleUSE FOR OUTPUT AS #1: CLOSE #1
won = 0
OPEN fleUSE FOR RANDOM AS #1 LEN = LEN(won)
PUT #1, 1, won
won = 3
PUT #1, 2, won
won = 0
PUT #1, 3, won
CLOSE #1
User.nickname = "Guest"
User.password = ""
User.avscore = 0
User.gplayed = 0
User.Level = 1
User.lvlreached = 1
User.rats = 3
User.Language = 1
User.gmode = 1
User.bg = 1
User.snakec = 1
User.spattern = 1
OPEN fleUSE FOR RANDOM AS #1 LEN = LEN(User)
PUT #1, 4, User
CLOSE #1
DIM toper(1 TO 10) AS topperson
OPEN fleTOP FOR RANDOM AS #1 LEN = LEN(toper(1))
RESTORE ids
FOR i = 1 TO 10
READ z$
toper(i).pname = "Player" + STR$(i)
toper(i).playdate = DATE$
toper(i).Score = 2200 - (200 * i)
toper(i).id = z$
PUT #1, i, toper(i)
NEXT
CLOSE #1
OPEN fleENG FOR OUTPUT AS #1: CLOSE #1
OPEN fleENG FOR RANDOM AS #1 LEN = 35
RESTORE english
mark = 0
DO
mark = mark + 1
READ R$
IF R$ = "done" THEN EXIT DO
PUT #1, mark, R$
LOOP
CLOSE #1
OPEN fleMAG FOR OUTPUT AS #1: CLOSE #1
OPEN fleMAG FOR RANDOM AS #1 LEN = 35
RESTORE magyar
mark = 0
DO
mark = mark + 1
READ R$
IF R$ = "done" THEN EXIT DO
PUT #1, mark, R$
LOOP
CLOSE #1
RESTORE instructions
FOR i = 1 TO 8
OPEN "files\page" + LTRIM$(RTRIM$(STR$(i))) + ".txt" FOR OUTPUT AS #1
FOR ii = 1 TO 7
READ eng$
READ hun$
WRITE #1, eng$
WRITE #1, hun$
NEXT ii
CLOSE #1
NEXT i
RESTORE movie
OPEN fleMV1 FOR OUTPUT AS #1: CLOSE #1
OPEN fleMV1 FOR RANDOM AS #1 LEN = LEN(film)
FOR i = 1 TO 66
READ film.x, film.y
PUT #1, i, film
NEXT
CLOSE #1
RESTORE imagedata
OPEN fleIMG FOR OUTPUT AS #1
FOR i = 1 TO 4
FOR ii = 1 TO 811
READ x
WRITE #1, x
NEXT ii
NEXT i
CLOSE #1
RESTORE movie2
OPEN fleMV2 FOR OUTPUT AS #1
FOR i = 1 TO 1015
READ x
WRITE #1, x
NEXT
CLOSE #1
RESTORE chars
FOR n = 1 TO 83
READ z
FOR i = 1 TO 5
IF i = 1 THEN C = 8
IF i = 2 THEN C = 12
IF i = 3 THEN C = 15
IF i = 4 THEN C = 9
IF i = 5 THEN C = 5
COLOR C
LOCATE i, 1: PRINT CHR$(z)
NEXT
IF n < 80 THEN h = 2 ELSE h = 0
GET (0, h)-(8, h + 14), letter(0)
GET (0, h + 16)-(8, h + 30), letter(40)
GET (0, h + 32)-(8, h + 46), letter(80)
GET (0, h + 48)-(8, h + 62), letter(120)
GET (0, h + 64)-(8, h + 78), letter(160)
DEF SEG = VARSEG(letter(0))
BSAVE "letters\chr" + LTRIM$(RTRIM$(STR$(z))) + ".chr", VARPTR(letter(0)), 800
NEXT
CLS
RESTORE JEP
FOR i = 1 TO 10
OPEN "files\lvl" + LTRIM$(RTRIM$(STR$(i))) + ".dat" FOR OUTPUT AS #1
DO
READ x, y
IF x = -2 THEN EXIT DO
PRINT #1, x;
PRINT #1, y
LOOP
CLOSE #1
NEXT
PALETTE
PRINT "All files created for the game Snake."
PRINT "You can now run Snake.bas."
PRINT
PRINT "Please report any bugs at '[email protected]'"
PRINT
PRINT "You can also offer suggestions, improvements."
PRINT
PRINT "Thanks for playing Snake!!! Enjoy!"
PRINT
PRINT
COLOR 9
PRINT "Minden fajl letrehozva a Snake-hez."
PRINT "El lehet inditani a Snake.bas-t."
PRINT
PRINT "Ha hibat talalsz, mondd el a [email protected]"
PRINT
PRINT "Javaslatokat is szivesen fogadok."
PRINT
PRINT "Koszonom hogy a Snake-et valasztotta. Jo szorakozast!"
ids:
DATA "START", "SNAKE"
DATA "SHELL", "LIGHT"
DATA "PRIDE", "EGYPT"
DATA "OCEAN", "EARTH"
DATA "SHARK", "PLUTO"
english:
DATA "Play the game"
DATA "Play the championship"
DATA "Enter password"
DATA "View the highscores"
DATA "Settings"
DATA "Instructions"
DATA "Login as..."
DATA "Exit the game"
DATA "Welcome"
DATA "Lives:"
DATA "Score:"
DATA "Prey caught:"
DATA "-12-Choose speed level"
DATA "very slow"
DATA "slow"
DATA "moderate"
DATA "fast"
DATA "very fast"
DATA "Game start in"
DATA "-12-G A M E P A U S E D"
DATA "Continue the game"
DATA "Return to main menu"
DATA "Change speed"
DATA "Game will continue in"
DATA "You ran into the wall!"
DATA "That was your own tail!"
DATA "That ugly rat killed you!"
DATA "-12-G A M E O V E R"
DATA "You lost all of your lives"
DATA "-12-S O R R Y!"
DATA "You didn't make the highscores"
DATA "C O N G R A T U L A T I O N S!"
DATA "You made the top ten"
DATA "Enter name:"
DATA "Level"
DATA "Start the game"
DATA "Try again"
DATA "You can now create users!"
DATA "-12-H I G H S C O R E S"
DATA "Player name:"
DATA "Play date:"
DATA "-12-S E T T I N G S"
DATA "Language selection"
DATA "English"
DATA "Magyar"
DATA "Return"
DATA "Game Settings"
DATA "rats"
DATA "background color"
DATA "snake color"
DATA "snake patterns' color"
DATA "User Settings"
DATA "Create new user"
DATA "Change user password"
DATA "Delete user"
DATA "Enter password:"
DATA "Confirm password:"
DATA "Incorrect password"
DATA "Passwords don't match!"
DATA "Name already exists"
DATA "User does not exist"
DATA "Enter new password:"
DATA "Are you sure?"
DATA "Yes"
DATA "No"
DATA "Login as user"
DATA "Login as a guest"
DATA "User name:"
DATA "Incorrect user name or password"
DATA "You are logged in as"
DATA "View user information"
DATA "-12-I N S T R U C T I O N S"
DATA "-12-C U S T O M L E V E L S"
'that was 73
DATA "Start creating levels"
DATA "Clear map"
DATA "Custom levels"
DATA "Play custom levels"
DATA "MOUSE"
DATA "Edit map"
DATA "Menu"
DATA "Quit"
DATA "Save"
DATA "Open"
DATA "Welcome to Snake's level=editor"
DATA "Use it to create custom levels."
DATA "On the bottom you can see some "
DATA "shortcut keys. Have a great time"
DATA "editing custom=levels."
DATA "Custom level editor"
DATA "done"
magyar:
DATA "J@t#k kezd#se"
DATA "Bajnoks@g j@tsz@sa"
DATA "Jelsz$ megad@sa"
DATA "Ranglista megtekint#se"
DATA "Be@ll|t@sok"
DATA "Seg#dlet"
DATA "Bel#p#s mint..."
DATA "Kil#p#s a j@t#kb$l"
DATA "^>dv<z<lj>k"
DATA "^#let: "
DATA "Pont: "
DATA "Zs@km@ny: "
DATA "-12-Neh#zs#g be@ll|t@sa"
DATA "nagyon lass_"
DATA "lass_"
DATA "k<zepes"
DATA "gyors"
DATA "nagyon gyors"
DATA "J@t#k kezd<dik: "
DATA "-12-J^@T^#K MEGSZAK|TVA"
DATA "J@t#k folytat@sa"
DATA "Vissza a men>be"
DATA "Sebess#g v@ltoztat@sa
DATA "J@t#k folytat@sa: "
DATA "Nekiment#l a falnak!"
DATA "Az a saj@t tested volt!"
DATA "Az a ronda patk@ny meg<lt!"
DATA "-12-J ^@ T ^# K V ^# G E"
DATA "Elveszett az <sszes #letedet"
DATA "-12-B O C S I!"
DATA "Nem jutottal be az els< t|zbe"
DATA "G R A T U L ^@ L O K!"
DATA "Bejutott@l az els< t|zbe!"
DATA "N#v megad@sa:"
DATA "Szint"
DATA "J@t#k kezd#se"
DATA "_jra pr$b@l"
DATA "L#trehozhat felhaszn@l$kat!"
DATA "-12-R A N G L I S T A"
DATA "J@t#kos neve:"
DATA " Id<pont: "
DATA "-12-B E ^@ L L | T ^@ S O K"
DATA "Nyelv v@laszt@sa"
DATA "English"
DATA "Magyar"
DATA "Vissza"
DATA "J@t#k be@ll|t@sai"
DATA "patk@nyok"
DATA "h@tt#r sz|ne"
DATA "k|gy$ sz|ne"
DATA "k|gy$ minta sz|ne"
DATA "J@t#kosok be@ll|t@sai"
DATA "_j felhaszn@l$ l#trehoz@sa"
DATA "Jelsz$ v@ltoztat@sa"
DATA "Felhaszn@l$ t<rl#se"
DATA "Jelsz$ megad@sa:"
DATA "Jelsz$ meger<s|t#se:"
DATA "Helytelen jelsz$"
DATA "A k#t jelsz$ nem egyezik meg!"
DATA "Ilyen n#v m@r l#tezik"
DATA "Ilyen felhasznal$ nem l#tezik"
DATA "_j jelsz$ megad@sa:"
DATA "Biztos?"
DATA "Igen"
DATA "Nem"
DATA "Bel#p#s felhaszn@l$k#nt"
DATA "Bel#p#s vend#gk#nt"
DATA "Felhasznal$ neve:"
DATA "Helytelen n#v vagy jelsz$"
DATA "Be vagy jelentkezve mint"
DATA "Adatok megtekint#se"
DATA "-12-S E G ^# D L E T"
DATA "-12-S A J ^@ T P ^@ L Y ^@ K"
DATA "P@ly@k k#sz|t#se"
DATA "^_j p@lya"
DATA "P@ly@k"
DATA "P@lya j@tsz@sa"
DATA "EG^#R"
DATA "Szerkeszt#s"
DATA "Men<"
DATA "Kil#p#s"
DATA "Ment#s"
DATA "Nyit@s"
DATA "Ez itt a Snake p@lya tervez<je."
DATA "Ezzel saj@t p@ly@kat k#sz|thetsz"
DATA "Alul l@tsz egy p@r parancsot. "
DATA "Sok sz$rakoz@st a p@ly@k k#sz|= "
DATA "t#s#ben #s j@tsz@s@ban! "
DATA "P@lya=tervez<"
DATA "done"
instructions:
DATA "-5-Snake-15- is a game developed by Peter Varnai. These are the "
DATA "A -5-Snake-15- egy j@t#k melyet V@rnai P#ter k#sz|tett. Ez itt a "
DATA "instructions on how to use it. First of all, how to use this"
DATA "j@t#khoz tartoz$ seg#dlet. Legel<sz<r vegy>k @t, hogyan kell"
DATA "program: "
DATA "haszn@lni mag@t a seg#dletet: "
DATA "Use the -9-arrow keys-15- to flip through the pages. Press the "
DATA "A -9-nyilakkal-15- lehet lapozni jobbra illetve balra. -9-[BACKSPACE] "
DATA "-9-[BACKSPACE]-15- key any time to return to the main menu. -9-[ESC] "
DATA "gombbal b@rmikor visszamehetsz a men>be. -9-[ESC]-15- a kil#p#shez."
DATA "quits the program. The following pages will let you unders= "
DATA "A k<vetkez< oldalak seg|tenek majd a j@t#k legfontosabb r#= "
DATA "tand the most important concepts of the game. "
DATA "szeinek a meg#rt#s#ben. "
DATA "-5-Using menus-15-: Use the -9-up=down keys-15- and-9- [ENTER]-15- or-9- [SPACE] -15-to "
DATA "-5-Men>k haszn@lata-15-: a -9-fel=le nyilakkal-15-, -9-[ENTER] -15-#s-9- [SPACE]-15-=el "
DATA "select a choice. You can exit the game any time using -9-[ESC]-15-,"
DATA "v@lassz az opci$k k<z>l. B@rmikor kil#phetsz az -9-[ESC]-15-=el. Ha"
DATA "even if you are being prompted for an information e.g. name."
DATA "inform@ci$t k#r a j@t#k, pl. a nevedet, akkor is kil#phetsz."
DATA "-5-Playing the game-15-: First, select -5-Play a game-15- or-5- championship."
DATA "-5-J@tsz@s-15-: El<sz<r v@laszd ki az -5-^_j j@t#k-15- vagy-5- Bajnoks@g kez= "
DATA "You can then select the -9-game speed-15-, and the game will start."
DATA "-5-d#se-15- opci$t, majd @ll|tsd be a j@t#k -9-sebess#g#t-15-. Kezd<knek "
DATA "For beginners, medium or fast speed is recommended. You can "
DATA "a k<zepes vagy gyors aj@nlatos. A j@t#kot megszak|thatod a "
DATA "pause the game any time using the -9-P key-15-, -9-[SPACE]-15- or-9- [ENTER]-15-."
DATA "-9-P-15-,-9- [ENTER]-15-, vagy-9- [SPACE]-15- gombokkal. "
DATA "The object of the game is to eat as many -9-mice-15- as you can. As"
DATA "A j@t#k l#nyege, hogy min#l t<bb -9-egeret-15- egy#l meg. Ahogy az "
DATA "you eat mice, your body will become longer, making it harder"
DATA "egereket eszed, hosszabb lesz a tested, |gy nehezebb lesz a "
DATA "to survive. You lose a -9-life-15- if you hit the wall or yourself,"
DATA "folytat@s. Elveszted az -9-#let-15-ed, ha a falba vagy magadba m#sz"
DATA "or if you get killed by a -12-rat-15-. If you eat a rat, you have a "
DATA "vagy ha meg<l egy -12-patk@ny-15-. Ha elkapsz egy patk@nyt, van egy "
DATA "small chance of dying. Make sure to catch the mice from the "
DATA "es#ly arra, hogy meghalsz. Fontos az is, hogy az egereket "
DATA "-9-behind-15-, otherwise they'll just escape, move somewhere else. "
DATA "-9-h@tulr$l-15- t@madd meg, k>l<nben elugranak m@shova. A -5-Zs@km@ny "
DATA "-5-Prey caught-15- at the bottom shows how many mice you've eaten. "
DATA "alul mutatja, hogy mennyi egeret kapt@l el eddig. "
DATA "-5-Championship-15-: the championship is a set of levels that test "
DATA "-5-Bajnoks@g-15-: a bajnoks@g egy csoport p@lya, mely teszteli hogy"
DATA "your ability to play the game. The higher a level, the more "
DATA "milyen j$l tudsz j@tszani. A magasabb szinteket m@r nehezebb"
DATA "difficult it is to beat. The -5-Prey caught-15- label at the bottom"
DATA "megnyerni. A -5-Zs@km@ny-15- cimke alul mutatja, hogy m#g mennyi e="
DATA "tells you how many more mice you need to catch before you're"
DATA "geret kell elkapnod ahhoz, hogy eljuss a k<vetkez< szinthez."
DATA "able to advance to the next level. Make sure to write down "
DATA "Ne felejtsd el le|rni a szintek -9-k$d-15-jait. Ha meghalsz, |rd be"
DATA "the -9-password-15- for each level e.g. level 1's is START. If you "
DATA "a men>n#l ezt a k$dot, #s azon a p@ly@n kezded a bajnoks@got"
DATA "die, enter this code at the menu to start from that level. "
DATA "amelyikhez a k$d tartozik. "
DATA "After a game, you may reach the top ten in the -5-highscores-15-. "
DATA "Egy j@t#k ut@n lehet hogy beker>lsz az els$ t|z k<z# a -5-rang="
DATA "Enter your name at the prompt. You'll be -9-highlighted-15- in blue"
DATA "-5-list@-15-ban. Add meg a nevedet, amely vil@gosk#kk#nt lesz -9-kie= "
DATA "so you can check which place you have reached. Your -9-score "
DATA "-9-melve-15- a list@ban, hogy l@sd melyik helyet #rted el. A -9-pont-15-= "
DATA "depends on the game's speed, the number of mice you caught, "
DATA "jaid sz@ma t<bb t#nyez<t<l f>gg, pl. a j@t#k sebess#g#t<l, "
DATA "and the number of rats in the game. Later you will be able "
DATA "hogy mennyi egeret kapt@l el, #s a patk@nyok sz@m@t$l. Majd "
DATA "to change the amount of rats in the game, but for now, just "
DATA "k#s<bb m$dos|tani fogod tudni a patk@nyok sz@m@t, de most e="
DATA "know that only 3 rats can show up in the game. "
DATA "l#g annyit tudni, hogy csak 3 patk@ny lehet a j@t#kban. "
DATA "After you beat the championship, you'll be able to create an"
DATA "A bajnoks@g megnyer#se ut@n l#tre tudsz majd hozni -5-felhasz= "
DATA "-5-account-15-. At the start of the game, you'll also have the cho="
DATA "-5-n@l$-15-kat. A program elej#n lehet<s#ged lesz -5-vend#g-15-k#nt vagy "
DATA "ice to log in as a -5-user-15- or a -5-guest-15-. As you play games with "
DATA "-5-felhaszn@l$-15-k#nt bel#pned. Ahogy j@t#kokat j@tszol a profil= "
DATA "your account, your -9-average score-15- will be calculated. You can"
DATA "oddal, ki lesz sz@m|tva az -9-@tlagos pontsz@m-15-od. Megn#zheted a"
DATA "view your profile using the menu. The symbol at the bottom "
DATA "profilodat a menu seg|ts#g#vel. Az alul tal@lhat$ szimb$lum "
DATA "get's better as your average score becomes higher. Your ave="
DATA "egyre szebb lesz, ha magasabb rangfokozatokat #rsz el. Ez a "
DATA "rage score is used to determine your level. "
DATA "rang az @tlagos pontsz@mod seg|ts#g#vel lesz kisz@m|tva. "
DATA "As your account reaches higher levels, more and more options"
DATA "Ahogy el#rsz bizonyos rangokat, _jabb lehet<s#gek ny|lnak "
DATA "become available to you. You can view these options in the "
DATA "meg el<tted. Ezeket megtekintheted #s megv@ltoztathatod az "
DATA "-5-settings-15- menu, in which you can also change the language and"
DATA "-5-Opci$kban-15-, ahol a nyelvet is kiv@laszthatod, #s l#tre tudsz "
DATA "create or delete users, or change your password. After you "
DATA "hozni _jabb felhaszn@l$kat, vagy a jelszavadat m$dos|thatod."
DATA "reach level 3, you'll have access to the -5-Game settings-15-. Use "
DATA "A 3=as szint el#r#s#vel utat nyersz a -5-J@t#k be@ll|t@saihoz-15-. "
DATA "the -9-left-15- and-9- right arrow keys -15-to change a particular option,"
DATA "A -9-jobb -15-#s-9- bal nyilak-15-kal v@ltoztathatod meg egy bizonyos op= "
DATA "e.g. the amount of rats that may appear in the game. "
DATA "ci$ #rt#k#t, pl. a patk@nyok mennyis#g#t a j@t#kban. "
DATA "At this point you should be able to understand the most im= "
DATA "Enn#l a pontn@l a j@t#k l#nyeg#t #rtened kellene. Ha valami "
DATA "portant points of the game. If not, contanct me by e=mail: "
DATA "m#g mindig nem vil@gos, k>ldj egy e=mailt nekem: "
DATA "-9-varnaipeti hotmail.com-15-. Please report any -12-bugs-15- that you find"
DATA "-9-varnaipeti hotmail.com-15-. Ha valami -12-hib@t-15- tal@lsz, >zend meg "
DATA "and you are also welcome to offer suggestions. I especially "
DATA "tov@bbi javaslatokkal egy>tt. K>l<n<sen h@l@s vagyok a Qbasic"
DATA "thank the Qbasic Forum at -9-qbasic.com-15-, and everybody else who"
DATA "F$rumnak a -9-qbasic.com-15-=n@l, akik sokat seg|tettek a program "
DATA "has helped me in creating this game. This is a -9-freeware pro="
DATA "elk#sz|t#s#ben. Ez egy -9-ingyenes-15- j@t#k, mindenkit k#rek hogy"
DATA "-9-gram-15-, so please don't try to make money from it in any way. "
DATA "ne pr$b@ljon hasznot h_zni bel<le! "
movie:
DATA 5,1
DATA 5,2
DATA 5,3
DATA 5,4
DATA 5,5
DATA 5,6
DATA 5,7
DATA 5,8
DATA 5,9
DATA 5,10
DATA 5,11
DATA 5,12
DATA 5,13
DATA 5,14
DATA 5,15
DATA 5,16
DATA 5,17
DATA 6,17
DATA 7,17
DATA 8,17
DATA 9,17
DATA 10,17
DATA 11,17
DATA 12,17
DATA 13,17
DATA 14,17
DATA 15,17
DATA 16,17
DATA 17,17
DATA 18,17
DATA 19,17
DATA 20,17
DATA 21,17
DATA 22,17
DATA 23,17
DATA 23,16
DATA 23,15
DATA 23,14
DATA 23,13
DATA 23,12
DATA 23,11
DATA 23,10
DATA 23,9
DATA 23,8
DATA 22,8
DATA 21,8
DATA 20,8
DATA 19,8
DATA 18,8
DATA 17,8
DATA 16,8
DATA 15,8
DATA 14,8
DATA 13,8
DATA 12,8
DATA 11,8
DATA 10,8
DATA 9,8
DATA 8,8
DATA 7,8
DATA 6,8
DATA 5,8
DATA 4,8
DATA 3,8
DATA 2,8
DATA 1,8
imagedata:
DATA 49,7,7,10,11,7,2,10,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,10,8,7,1,10,1,12
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,10,7,7,1,10,1,8,1,4,1,12
DATA 2,2,2,6,1,8,1,2,1,8,1,2,1,8,1,10,5,7,1,10,1,8,1,2,1,4,1,12,1,8
DATA 1,2,2,6,1,2,1,8,1,2,1,8,1,2,1,8,2,10,2,7,1,10,1,8,1,2,1,8,1,12
DATA 1,8,1,2,4,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,7,2,8,1,2,1,8,1,2
DATA 1,8,1,2,6,6,1,2,1,8,1,2,1,8,1,2,1,8,1,7,1,10,1,2,1,8,1,2,1,8
DATA 11,6,1,2,2,6,1,7,1,10,1,8,1,2,1,8,1,2,11,6,1,2,2,6,1,7,1,8,1,2
DATA 1,8,1,2,2,8,1,2,6,6,1,2,1,8,1,2,1,8,1,2,1,8,2,7,1,10,1,2,1,8
DATA 1,2,1,12,1,8,1,2,4,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,3,7,1,10,1,2
DATA 1,8,1,4,1,12,1,8,1,2,2,6,1,2,1,8,1,2,1,8,1,2,1,8,2,10,4,7,1,10
DATA 1,2,1,4,1,12,2,2,2,6,1,8,1,2,1,8,1,2,1,8,1,10,7,7,1,10,1,12,1,8
DATA 1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,10,10,7,2,10,1,2,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,10,12,7,7,10,44,7
DATA 120,7,20,10,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,6,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,4,6,1,2
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,6,1,2,2,6,1,2,2,6,2,2,2,6
DATA 1,2,2,6,1,2,2,6,2,2,2,6,1,2,2,6,1,2,2,6,2,2,2,6,1,2,2,6,1,2
DATA 2,6,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,4,6,1,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,2,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,6,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,1,8,1,2,20,10,120,7
DATA 100,7,20,10,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,3,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,2,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,6,1,2
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8
DATA 4,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,6,1,2,2,6,1,2,2,6
DATA 2,2,2,6,1,2,2,6,1,2,2,6,2,2,2,6,1,2,2,6,1,2,2,6,2,2,2,6,1,2
DATA 2,6,1,2,2,6,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,4,6,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,2,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,6,1,2
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8
DATA 3,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,20,10,100,7
DATA 80,7,20,10,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,8,2,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8
DATA 1,2,1,8,1,2,1,8,1,2,1,8,4,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8
DATA 1,2,2,6,1,2,2,6,1,2,2,6,2,2,2,6,1,2,2,6,1,2,2,6,2,2,2,6,1,2
DATA 2,6,1,2,2,6,2,2,2,6,1,2,2,6,1,2,2,6,2,2,1,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,4,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,8,2,6,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8
DATA 1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,2,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,8,1,2,1,8,1,2,20,10,80,7
DATA 140,7,20,10,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,6,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,1,8,2,2,2,6,1,8,2,6,1,2,1,8,4,6,1,2,1,8,2,6
DATA 1,2,2,6,2,8,2,6,1,2,2,6,1,8,1,2,4,6,1,8,1,2,2,6,1,8,2,6,2,2
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,6,1,8,1,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,1,8,20,10,140,7
DATA 160,7,20,10,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,2,6,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,6
DATA 1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,20,10,160,7
DATA 125,7,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,7,7,1,8,1,6
DATA 1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,3,7,2,10,1,6
DATA 1,8,1,6,1,8,2,6,1,8,1,6,1,8,2,6,1,8,1,6,1,8,1,6,3,7,1,8,1,2
DATA 1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,10,2,7
DATA 1,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2,1,8,1,2,1,8,2,2,1,8,1,2
DATA 1,10,2,7,2,10,2,6,1,8,1,6,1,8,2,6,1,8,1,6,1,8,2,6,1,8,1,6,1,8
DATA 6,7,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8
DATA 8,7,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,1,8,1,6,124,7
DATA 135,7,5,10,13,7,2,10,1,8,1,2,1,8,1,2,1,8,11,7,2,10,1,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,10,7,1,10,1,8,1,2,1,8,1,2,1,8,1,2,2,6,1,8,9,7,1,10,6,6
DATA 1,8,2,6,1,2,8,7,1,10,1,2,6,6,1,2,1,8,1,2,1,8,8,7,1,10,1,8,2,6
DATA 1,8,1,2,2,6,1,8,1,2,1,8,1,2,7,7,1,10,1,8,1,2,2,6,1,2,1,8,2,6
DATA 1,2,1,8,2,10,7,7,1,10,1,2,1,8,6,6,2,10,8,7,1,10,1,2,1,8,1,2,5,6
DATA 1,10,10,7,1,10,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,10,11,7,1,10,1,2,1,8
DATA 2,6,1,2,1,8,1,2,1,10,11,7,1,10,1,8,1,2,2,6,1,8,1,2,1,10,12,7,1,10
DATA 1,2,1,8,1,2,1,8,1,2,1,8,1,10,6,7
DATA 115,7,5,10,13,7,2,10,1,2,1,8,1,2,1,8,1,2,11,7,2,10,1,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,10,7,1,10,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,9,7,1,10
DATA 1,2,1,8,1,2,1,8,1,2,1,8,1,2,2,6,1,8,8,7,1,10,1,8,6,6,1,8,2,6
DATA 1,2,7,7,1,10,1,8,1,2,6,6,1,2,1,8,1,2,1,8,7,7,1,10,1,2,1,8,2,6
DATA 1,8,1,2,2,6,1,8,1,2,1,8,1,2,6,7,1,10,1,2,1,8,1,2,2,6,1,2,1,8
DATA 2,6,1,2,1,8,1,2,1,8,6,7,1,10,1,8,1,2,1,8,6,6,1,8,1,2,2,10,5,7
DATA 1,10,1,8,1,2,1,8,1,2,6,6,2,10,7,7,1,10,1,2,1,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,10,9,7,1,10,1,8,1,2,1,8,2,6,1,2,1,8,1,2,1,8,1,10
DATA 9,7,1,10,1,2,1,8,1,2,2,6,1,8,1,2,1,8,1,10,10,7,1,10,1,8,1,2,1,8
DATA 1,2,1,8,1,2,1,8,1,2,1,10,5,7
DATA 94,7,6,10,12,7,2,10,1,2,1,8,1,2,1,8,1,2,1,8,10,7,2,10,1,8,1,2,1,8,1,2
DATA 1,8,1,2,1,8,1,2,9,7,1,10,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2
DATA 1,8,8,7,1,10,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,7,7
DATA 1,10,1,8,2,2,1,8,1,2,1,8,1,2,1,8,1,2,2,6,1,8,6,7,1,10,1,8,1,2
DATA 1,8,6,6,1,8,2,6,1,2,6,7,1,10,1,2,1,8,1,2,6,6,1,2,1,8,1,2,1,8
DATA 5,7,1,10,1,2,1,8,1,2,1,8,2,6,1,8,1,2,2,6,1,8,1,2,1,8,1,2,5,7
DATA 1,10,1,8,1,2,1,8,1,2,2,6,1,2,1,8,2,6,1,2,1,8,1,2,1,8,4,7,1,10
DATA 1,8,1,2,1,8,1,2,1,8,6,6,1,8,1,2,1,8,1,2,4,7,1,10,1,2,1,8,1,2
DATA 1,8,1,2,6,6,1,2,1,8,1,2,1,10,4,7,1,10,1,8,1,2,1,8,1,2,1,8,1,2
DATA 1,8,1,2,1,8,2,2,1,8,2,10,5,7,1,10,1,2,1,8,1,2,1,8,2,6,1,2,1,8
DATA 1,2,1,8,1,2,1,10,7,7,1,10,1,8,1,2,1,8,1,2,2,6,1,8,1,2,1,8,1,2
DATA 1,8,1,10,7,7,1,10,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,2,1,8,1,10
DATA 4,7
DATA 155,7,5,10,13,7,2,10,1,2,1,8,1,2,1,8,1,2,11,7,2,10,1,8,1,2,1,8,1,2,2,6
DATA 1,8,10,7,1,10,4,6,1,2,1,8,2,6,1,2,9,7,1,10,5,6,1,8,1,2,1,8,1,2
DATA 1,8,9,7,1,10,2,6,1,2,2,6,1,2,1,8,3,10,8,7,1,10,1,2,5,6,2,10,11,7
DATA 1,10,1,8,4,6,1,10,12,7,1,10,1,8,1,2,1,8,1,2,1,8,1,10,13,7,1,10,1,2
DATA 1,8,1,2,1,8,1,2,1,10,13,7,1,10,1,8,2,6,1,2,1,10,14,7,1,10,1,2,2,6
DATA 1,8,1,10,14,7,1,10,1,8,1,2,1,8,1,2,1,10,7,7
DATA 175,7,5,10,13,7,2,10,1,2,1,8,1,2,1,8,1,2,12,7,1,10,1,8,1,2,1,8,1,2,1,8
DATA 1,2,1,8,11,7,1,10,1,6,1,2,1,8,1,2,1,8,3,10,10,7,1,10,3,6,1,2,2,10
DATA 12,7,1,10,1,8,1,2,2,6,1,10,14,7,1,10,1,2,1,8,1,2,1,10,14,7,1,10,1,2
DATA 1,8,1,2,1,10,15,7,1,10,1,8,1,2,1,8,1,10,15,7,1,10,1,2,1,8,1,10,16,7
DATA 1,10,1,8,1,2,1,10,16,7,1,10,1,2,1,8,1,10,8,7
DATA 87,14,3,77,17,14,1,77,2,15,1,77,11,14,1,15,1,14,1,15,2,14,1,77,1,15,1,77,2,14,5,77
DATA 6,14,1,15,5,77,1,14,8,77,4,14,4,77,1,0,1,15,10,77,2,14,1,13,18,77,1,14,1,13
DATA 19,77,2,14,4,77,1,0,1,15,10,77,1,14,1,77,3,14,1,15,5,77,1,14,8,77,1,14,1,77
DATA 2,14,1,15,1,14,1,15,2,14,1,77,1,15,1,77,2,14,5,77,2,14,1,77,7,14,1,77,2,15
DATA 1,77,7,14,1,77,8,14,3,77,7,14,1,77,19,14,1,77,1,14,1,77,18,14,1,77,41,14
DATA 96,7,2,13,8,7,2,8,1,7,5,8,2,13,2,7,1,13,6,7,1,8,1,15,8,8,1,13,2,7,1,13
DATA 5,7,12,8,2,7,1,13,5,7,1,8,1,15,10,8,1,7,1,13,6,7,12,8,1,7,1,13,7,7
DATA 7,8,1,13,2,8,1,7,1,13,7,7,9,8,3,13,7,7,2,8,1,4,8,8,8,7,8,8,1,144
DATA 2,7,1,144,6,7,1,13,3,8,1,14,2,7,1,144,4,7,2,144,7,7,2,15,3,7,2,144,92,7
DATA 76,7,1,10,1,2,18,7,1,10,1,2,9,7,1,10,1,2,4,7,2,2,1,7,1,2,7,7,1,10,1,2
DATA 2,7,1,2,1,7,4,2,1,7,1,2,7,7,1,10,2,8,1,2,1,7,6,2,8,7,1,10,1,2
DATA 1,3,1,8,9,2,6,7,1,10,13,2,6,7,1,10,13,2,7,7,1,10,1,2,1,3,1,8,9,2
DATA 8,7,1,10,2,8,1,2,1,7,6,2,10,7,1,10,1,2,2,7,1,2,1,7,4,2,1,7,1,2
DATA 11,7,1,10,1,2,4,7,2,2,1,7,1,2,19,7,1,10,1,2,18,7,1,10,1,2,62,7
DATA 55, 66, 6500, 3000, 2500, 2000, 500, 1000, 1500, 1000, 500, 000, 6500, 6500
DATA 56, 66, 6500, 3000, 2500, 2000, 500, 1000, 1500, 1000, 500, 000, 6500
DATA 57, 66, 6500, 3000, 2500, 2000, 500, 1000, 1500, 1000, 500, 000
DATA 58, 66, 6500, 3000, 2500, 2000, 500, 1000, 1500, 1000, 500
DATA 59, 66, 6500, 3000, 2500, 2000, 500, 1000, 1500, 1000
DATA 60, 66, 6500, 3000, 2500, 2000, 500, 1000, 1500
DATA 61, 66, 6500, 3000, 2500, 2000, 500, 1000
DATA 62, 66, 6500, 3000, 2500, 2000, 500
DATA 63, 66, 6500, 3000, 2500, 2000
DATA 64, 66, 6500, 3000, 2500
DATA 65, 66, 6500, 3000
DATA 66, 66, 6500
DATA -1, 0
JEP:
'lvl1
DATA 91,3,1,0,107,3,2,7,77,3,4,7,76,3
DATA 4,7,76,3,4,7,76,3,4,7,75,3
DATA 6,7,74,3,6,7,74,3,6,7,74,3
DATA 6,7,73,3,8,7,72,3,8,7,72,3
DATA 8,7,71,3,10,7,70,3,10,7,70,3
DATA 10,7,69,3,12,7,68,3,12,7,67,3
DATA 14,7,66,3,14,7,65,3,16,7,63,3
DATA 18,7,62,3,18,7,62,3,18,7,62,3
DATA 18,7,63,3,16,7,65,3,14,7,66,3
DATA 14,7,67,3,12,7,68,3,12,7,56,3
DATA 4,7,8,3,12,7,8,3,4,7,43,3
DATA 6,7,8,3,10,7,8,3,6,7,40,3
DATA 10,7,6,3,10,7,6,3,10,7,36,3
DATA 15,7,3,3,10,7,3,3,15,7,31,3
DATA 25,7,2,3,25,7,25,3,27,7,4,3
DATA 27,7,18,3,31,7,4,3,31,7,10,3
DATA 33,7,8,3,33,7,5,3,33,7,10,3
DATA 33,7,4,3,33,7,10,3,33,7,5,3
DATA 33,7,8,3,33,7,10,3,31,7,4,3
DATA 31,7,18,3,27,7,4,3,27,7,25,3
DATA 25,7,2,3,25,7,31,3,15,7,3,3
DATA 10,7,3,3,15,7,36,3,10,7,6,3
DATA 10,7,6,3,10,7,40,3,6,7,8,3
DATA 10,7,8,3,6,7,43,3,4,7,8,3
DATA 12,7,8,3,4,7,56,3,12,7,68,3
DATA 12,7,67,3,14,7,66,3,14,7,65,3
DATA 16,7,63,3,18,7,62,3,18,7,62,3
DATA 18,7,62,3,18,7,63,3,16,7,65,3
DATA 14,7,66,3,14,7,67,3,12,7,68,3
DATA 12,7,69,3,10,7,70,3,10,7,70,3
DATA 10,7,71,3,8,7,72,3,8,7,72,3
DATA 8,7,73,3,6,7,74,3,6,7,74,3
DATA 6,7,74,3,6,7,75,3,4,7,76,3
DATA 4,7,76,3,4,7,76,3,4,7,77,3
DATA 2,7,199,3
DATA -1, 5, -2, 4
'lvl2
DATA 91,3,1,0,107,3,2,7,77,3,4,7,76,3
DATA 4,7,76,3,4,7,76,3,4,7,75,3
DATA 6,7,74,3,6,7,74,3,6,7,74,3
DATA 6,7,73,3,8,7,72,3,8,7,72,3
DATA 3,7,2,8,3,7,71,3,4,7,2,8
DATA 4,7,70,3,4,7,2,8,4,7,70,3
DATA 3,7,1,8,2,7,1,8,3,7,69,3
DATA 4,7,1,8,2,7,1,8,4,7,68,3
DATA 4,7,1,8,2,7,1,8,4,7,67,3
DATA 4,7,1,8,4,7,1,8,4,7,66,3
DATA 4,7,1,8,4,7,1,8,4,7,65,3
DATA 4,7,1,8,6,7,1,8,4,7,63,3
DATA 5,7,1,8,6,7,1,8,5,7,62,3
DATA 4,7,1,8,8,7,1,8,4,7,62,3
DATA 4,7,1,8,8,7,1,8,4,7,62,3
DATA 5,7,1,8,6,7,1,8,5,7,63,3
DATA 4,7,1,8,6,7,1,8,4,7,65,3
DATA 4,7,1,8,4,7,1,8,4,7,66,3
DATA 4,7,1,8,4,7,1,8,4,7,67,3
DATA 4,7,1,8,2,7,1,8,4,7,68,3
DATA 4,7,1,8,2,7,1,8,4,7,56,3
DATA 4,7,8,3,4,7,1,8,2,7,1,8
DATA 4,7,8,3,4,7,43,3,6,7,8,3
DATA 3,7,4,8,3,7,8,3,6,7,40,3
DATA 10,7,6,3,4,7,2,8,4,7,6,3
DATA 10,7,36,3,15,7,3,3,4,7,2,8
DATA 4,7,3,3,15,7,31,3,9,7,2,8
DATA 10,7,1,8,3,7,2,3,3,7,1,8
DATA 10,7,2,8,9,7,25,3,10,7,2,8
DATA 2,7,2,8,9,7,1,8,1,7,4,3
DATA 1,7,1,8,9,7,2,8,2,7,2,8
DATA 10,7,18,3,12,7,2,8,6,7,2,8
DATA 8,7,1,8,4,3,1,8,8,7,2,8
DATA 6,7,2,8,12,7,10,3,13,7,3,8
DATA 10,7,4,8,3,7,8,3,3,7,4,8
DATA 10,7,3,8,13,7,5,3,11,7,3,8
DATA 16,7,3,8,10,3,3,8,16,7,3,8
DATA 11,7,4,3,11,7,3,8,16,7,3,8
DATA 10,3,3,8,16,7,3,8,11,7,5,3
DATA 13,7,3,8,10,7,4,8,3,7,8,3
DATA 3,7,4,8,10,7,3,8,13,7,10,3
DATA 12,7,2,8,6,7,2,8,8,7,1,8
DATA 4,3,1,8,8,7,2,8,6,7,2,8
DATA 12,7,18,3,10,7,2,8,2,7,2,8
DATA 9,7,1,8,1,7,4,3,1,7,1,8
DATA 9,7,2,8,2,7,2,8,10,7,25,3
DATA 9,7,2,8,10,7,1,8,3,7,2,3
DATA 3,7,1,8,10,7,2,8,9,7,31,3
DATA 15,7,3,3,4,7,2,8,4,7,3,3
DATA 15,7,36,3,10,7,6,3,4,7,2,8
DATA 4,7,6,3,10,7,40,3,6,7,8,3
DATA 3,7,4,8,3,7,8,3,6,7,43,3
DATA 4,7,8,3,4,7,1,8,2,7,1,8
DATA 4,7,8,3,4,7,56,3,4,7,1,8
DATA 2,7,1,8,4,7,68,3,4,7,1,8
DATA 2,7,1,8,4,7,67,3,4,7,1,8
DATA 4,7,1,8,4,7,66,3,4,7,1,8
DATA 4,7,1,8,4,7,65,3,4,7,1,8
DATA 6,7,1,8,4,7,63,3,5,7,1,8
DATA 6,7,1,8,5,7,62,3,4,7,1,8
DATA 8,7,1,8,4,7,62,3,4,7,1,8
DATA 8,7,1,8,4,7,62,3,5,7,1,8
DATA 6,7,1,8,5,7,63,3,4,7,1,8
DATA 6,7,1,8,4,7,65,3,4,7,1,8
DATA 4,7,1,8,4,7,66,3,4,7,1,8
DATA 4,7,1,8,4,7,67,3,4,7,1,8
DATA 2,7,1,8,4,7,68,3,4,7,1,8
DATA 2,7,1,8,4,7,69,3,3,7,1,8
DATA 2,7,1,8,3,7,70,3,4,7,2,8
DATA 4,7,70,3,4,7,2,8,4,7,71,3
DATA 3,7,2,8,3,7,72,3,8,7,72,3
DATA 8,7,73,3,6,7,74,3,6,7,74,3
DATA 6,7,74,3,6,7,75,3,4,7,76,3
DATA 4,7,76,3,4,7,76,3,4,7,77,3
DATA 2,7,199,3
DATA -1, 5, -2, 4
'lvl3
DATA 91,3,1,0,107,3,2,7,77,3,4,7,76,3
DATA 4,7,76,3,4,7,76,3,4,7,75,3
DATA 6,7,74,3,6,7,74,3,6,7,74,3
DATA 6,7,73,3,8,7,72,3,8,7,72,3
DATA 3,7,2,8,3,7,71,3,4,7,2,8
DATA 4,7,70,3,4,7,2,8,4,7,70,3
DATA 3,7,1,8,2,7,1,8,3,7,69,3
DATA 4,7,1,8,2,7,1,8,4,7,68,3
DATA 4,7,1,8,2,7,1,8,4,7,67,3
DATA 4,7,1,8,4,7,1,8,4,7,66,3
DATA 4,7,1,8,4,7,1,8,4,7,65,3
DATA 4,7,1,8,6,7,1,8,4,7,63,3
DATA 5,7,1,8,6,7,1,8,5,7,62,3
DATA 4,7,1,8,8,7,1,8,4,7,62,3
DATA 4,7,1,8,8,7,1,8,4,7,62,3
DATA 5,7,1,8,6,7,1,8,5,7,63,3
DATA 4,7,1,8,6,7,1,8,4,7,65,3
DATA 4,7,1,8,4,7,1,8,4,7,66,3
DATA 4,7,1,8,4,7,1,8,4,7,67,3
DATA 4,7,1,8,2,7,1,8,4,7,68,3
DATA 4,7,1,8,2,7,1,8,4,7,56,3
DATA 4,7,8,3,4,7,1,8,2,7,1,8
DATA 4,7,8,3,4,7,43,3,6,7,8,3
DATA 3,7,4,8,3,7,8,3,6,7,40,3
DATA 10,7,6,3,4,7,2,8,4,7,6,3
DATA 10,7,36,3,15,7,3,3,4,7,2,8
DATA 4,7,3,3,15,7,31,3,9,7,2,8
DATA 10,7,1,8,3,7,2,6,3,7,1,8
DATA 10,7,2,8,9,7,25,3,10,7,2,8
DATA 2,7,2,8,9,7,1,8,1,7,4,6
DATA 1,7,1,8,9,7,2,8,2,7,2,8
DATA 10,7,18,3,12,7,2,8,6,7,2,8
DATA 8,7,1,8,4,6,1,8,8,7,2,8
DATA 6,7,2,8,12,7,10,3,13,7,3,8
DATA 10,7,4,8,3,7,8,6,3,7,4,8
DATA 10,7,3,8,13,7,5,3,11,7,3,8
DATA 16,7,3,8,10,6,3,8,16,7,3,8
DATA 11,7,4,3,11,7,3,8,16,7,3,8
DATA 10,6,3,8,16,7,3,8,11,7,5,3
DATA 13,7,3,8,10,7,4,8,3,7,8,6
DATA 3,7,4,8,10,7,3,8,13,7,10,3
DATA 12,7,2,8,6,7,2,8,8,7,1,8
DATA 4,6,1,8,8,7,2,8,6,7,2,8
DATA 12,7,18,3,10,7,2,8,2,7,2,8
DATA 9,7,1,8,1,7,4,6,1,7,1,8
DATA 9,7,2,8,2,7,2,8,10,7,25,3
DATA 9,7,2,8,10,7,1,8,3,7,2,6
DATA 3,7,1,8,10,7,2,8,9,7,31,3
DATA 15,7,3,3,4,7,2,8,4,7,3,3
DATA 15,7,36,3,10,7,6,3,4,7,2,8
DATA 4,7,6,3,10,7,40,3,6,7,8,3
DATA 3,7,4,8,3,7,8,3,6,7,43,3
DATA 4,7,8,3,4,7,1,8,2,7,1,8
DATA 4,7,8,3,4,7,56,3,4,7,1,8
DATA 2,7,1,8,4,7,68,3,4,7,1,8
DATA 2,7,1,8,4,7,67,3,4,7,1,8
DATA 4,7,1,8,4,7,66,3,4,7,1,8
DATA 4,7,1,8,4,7,65,3,4,7,1,8
DATA 6,7,1,8,4,7,63,3,5,7,1,8
DATA 6,7,1,8,5,7,62,3,4,7,1,8
DATA 8,7,1,8,4,7,62,3,4,7,1,8
DATA 8,7,1,8,4,7,62,3,5,7,1,8
DATA 6,7,1,8,5,7,63,3,4,7,1,8
DATA 6,7,1,8,4,7,65,3,4,7,1,8
DATA 4,7,1,8,4,7,66,3,4,7,1,8
DATA 4,7,1,8,4,7,67,3,4,7,1,8
DATA 2,7,1,8,4,7,68,3,4,7,1,8
DATA 2,7,1,8,4,7,69,3,3,7,1,8
DATA 2,7,1,8,3,7,70,3,4,7,2,8
DATA 4,7,70,3,4,7,2,8,4,7,71,3
DATA 3,7,2,8,3,7,72,3,8,7,72,3
DATA 8,7,73,3,6,7,74,3,6,7,74,3
DATA 6,7,74,3,6,7,75,3,4,7,76,3
DATA 4,7,76,3,4,7,76,3,4,7,77,3
DATA 2,7,199,3
DATA -1, 5, -2, 4
'lvl4
DATA 91,3,1,0,27,3,2,8,77,3,4,8,75,3
DATA 6,8,74,3,6,8,75,3,4,8,76,3
DATA 1,7,2,8,1,7,75,3,6,7,74,3
DATA 6,7,74,3,6,7,74,3,6,7,73,3
DATA 8,7,72,3,8,7,72,3,3,7,2,8
DATA 3,7,71,3,4,7,2,8,4,7,70,3
DATA 4,7,2,8,4,7,70,3,3,7,1,8
DATA 2,7,1,8,3,7,69,3,4,7,1,8
DATA 2,7,1,8,4,7,68,3,4,7,1,8
DATA 2,7,1,8,4,7,67,3,4,7,1,8
DATA 4,7,1,8,4,7,66,3,4,7,1,8
DATA 4,7,1,8,4,7,65,3,4,7,1,8
DATA 6,7,1,8,4,7,63,3,5,7,1,8
DATA 6,7,1,8,5,7,62,3,4,7,1,8
DATA 8,7,1,8,4,7,62,3,4,7,1,8
DATA 8,7,1,8,4,7,62,3,5,7,1,8
DATA 6,7,1,8,5,7,63,3,4,7,1,8
DATA 6,7,1,8,4,7,65,3,4,7,1,8
DATA 4,7,1,8,4,7,66,3,4,7,1,8
DATA 4,7,1,8,4,7,67,3,4,7,1,8
DATA 2,7,1,8,4,7,68,3,4,7,1,8
DATA 2,7,1,8,4,7,56,3,4,7,8,3
DATA 4,7,1,8,2,7,1,8,4,7,8,3
DATA 4,7,43,3,6,7,8,3,3,7,4,8
DATA 3,7,8,3,6,7,40,3,10,7,6,3
DATA 4,7,2,8,4,7,6,3,10,7,36,3
DATA 15,7,3,3,4,7,2,8,4,7,3,3
DATA 15,7,31,3,9,7,2,8,10,7,1,8
DATA 3,7,2,1,3,7,1,8,10,7,2,8
DATA 9,7,25,3,10,7,2,8,2,7,2,8
DATA 9,7,1,8,1,7,4,1,1,7,1,8
DATA 9,7,2,8,2,7,2,8,10,7,14,3
DATA 2,8,2,3,12,7,2,8,6,7,2,8
DATA 8,7,1,8,4,1,1,8,8,7,2,8
DATA 6,7,2,8,12,7,2,3,2,8,5,3
DATA 4,8,10,7,3,8,10,7,4,8,3,7
DATA 8,1,3,7,4,8,10,7,3,8,10,7
DATA 4,8,3,3,6,8,6,7,3,8,16,7
DATA 3,8,10,1,3,8,16,7,3,8,6,7
DATA 6,8,2,3,6,8,6,7,3,8,16,7
DATA 3,8,10,1,3,8,16,7,3,8,6,7
DATA 6,8,3,3,4,8,10,7,3,8,10,7
DATA 4,8,3,7,8,1,3,7,4,8,10,7
DATA 3,8,10,7,4,8,5,3,2,8,2,3
DATA 12,7,2,8,6,7,2,8,8,7,1,8
DATA 4,1,1,8,8,7,2,8,6,7,2,8
DATA 12,7,2,3,2,8,14,3,10,7,2,8
DATA 2,7,2,8,9,7,1,8,1,7,4,1
DATA 1,7,1,8,9,7,2,8,2,7,2,8
DATA 10,7,25,3,9,7,2,8,10,7,1,8
DATA 3,7,2,1,3,7,1,8,10,7,2,8
DATA 9,7,31,3,15,7,3,3,4,7,2,8
DATA 4,7,3,3,15,7,36,3,10,7,6,3
DATA 4,7,2,8,4,7,6,3,10,7,40,3
DATA 6,7,8,3,3,7,4,8,3,7,8,3
DATA 6,7,43,3,4,7,8,3,4,7,1,8
DATA 2,7,1,8,4,7,8,3,4,7,56,3
DATA 4,7,1,8,2,7,1,8,4,7,68,3
DATA 4,7,1,8,2,7,1,8,4,7,67,3
DATA 4,7,1,8,4,7,1,8,4,7,66,3
DATA 4,7,1,8,4,7,1,8,4,7,65,3
DATA 4,7,1,8,6,7,1,8,4,7,63,3
DATA 5,7,1,8,6,7,1,8,5,7,62,3
DATA 4,7,1,8,8,7,1,8,4,7,62,3
DATA 4,7,1,8,8,7,1,8,4,7,62,3
DATA 5,7,1,8,6,7,1,8,5,7,63,3
DATA 4,7,1,8,6,7,1,8,4,7,65,3
DATA 4,7,1,8,4,7,1,8,4,7,66,3
DATA 4,7,1,8,4,7,1,8,4,7,67,3
DATA 4,7,1,8,2,7,1,8,4,7,68,3
DATA 4,7,1,8,2,7,1,8,4,7,69,3
DATA 3,7,1,8,2,7,1,8,3,7,70,3
DATA 4,7,2,8,4,7,70,3,4,7,2,8
DATA 4,7,71,3,3,7,2,8,3,7,72,3
DATA 8,7,72,3,8,7,73,3,6,7,74,3
DATA 6,7,74,3,6,7,74,3,6,7,75,3
DATA 1,7,2,8,1,7,76,3,4,8,75,3
DATA 6,8,74,3,6,8,75,3,4,8,77,3
DATA 2,8,119,3
DATA -1, 5, -2, 4
'lvl5
DATA 91,3,1,0,27,3,2,6,77,3,4,6,75,3
DATA 6,6,74,3,6,6,75,3,4,6,76,3
DATA 1,7,2,6,1,7,75,3,6,7,74,3
DATA 6,7,74,3,6,7,74,3,6,7,73,3
DATA 8,7,72,3,8,7,72,3,3,7,2,8
DATA 3,7,71,3,4,7,2,8,4,7,70,3
DATA 4,7,2,8,4,7,70,3,3,7,1,8
DATA 2,7,1,8,3,7,69,3,4,7,1,8
DATA 2,7,1,8,4,7,68,3,4,7,1,8
DATA 2,7,1,8,4,7,67,3,4,7,1,8
DATA 4,7,1,8,4,7,66,3,4,7,1,8
DATA 4,7,1,8,4,7,65,3,4,7,1,8
DATA 6,7,1,8,4,7,63,3,5,7,1,8
DATA 6,7,1,8,5,7,62,3,4,7,1,8
DATA 8,7,1,8,4,7,62,3,4,7,1,8
DATA 8,7,1,8,4,7,62,3,5,7,1,8
DATA 6,7,1,8,5,7,63,3,4,7,1,8
DATA 6,7,1,8,4,7,65,3,4,7,1,8
DATA 4,7,1,8,4,7,66,3,4,7,1,8
DATA 4,7,1,8,4,7,67,3,4,7,1,8
DATA 2,7,1,8,4,7,68,3,4,7,1,8
DATA 2,7,1,8,4,7,56,3,4,7,8,3
DATA 4,7,1,8,2,7,1,8,4,7,8,3
DATA 4,7,43,3,6,7,8,3,3,7,4,8
DATA 3,7,8,3,6,7,40,3,10,7,6,3
DATA 4,7,2,8,4,7,6,3,10,7,36,3
DATA 15,7,3,3,4,7,2,8,4,7,3,3
DATA 15,7,31,3,9,7,2,8,10,7,1,8
DATA 3,7,2,1,3,7,1,8,10,7,2,8
DATA 9,7,25,3,10,7,2,8,2,7,2,8
DATA 9,7,1,8,1,7,4,1,1,7,1,8
DATA 9,7,2,8,2,7,2,8,10,7,14,3
DATA 2,6,2,3,12,7,2,8,6,7,2,8
DATA 8,7,1,8,4,1,1,8,8,7,2,8
DATA 6,7,2,8,12,7,2,3,2,6,5,3
DATA 4,6,10,7,3,8,10,7,4,8,3,7
DATA 8,1,3,7,4,8,10,7,3,8,10,7
DATA 4,6,3,3,6,6,6,7,3,8,16,7
DATA 3,8,10,1,3,8,16,7,3,8,6,7
DATA 6,6,2,3,6,6,6,7,3,8,16,7
DATA 3,8,10,1,3,8,16,7,3,8,6,7
DATA 6,6,3,3,4,6,10,7,3,8,10,7
DATA 4,8,3,7,8,1,3,7,4,8,10,7
DATA 3,8,10,7,4,6,5,3,2,6,2,3
DATA 12,7,2,8,6,7,2,8,8,7,1,8
DATA 4,1,1,8,8,7,2,8,6,7,2,8
DATA 12,7,2,3,2,6,14,3,10,7,2,8
DATA 2,7,2,8,9,7,1,8,1,7,4,1
DATA 1,7,1,8,9,7,2,8,2,7,2,8
DATA 10,7,25,3,9,7,2,8,10,7,1,8
DATA 3,7,2,1,3,7,1,8,10,7,2,8
DATA 9,7,31,3,15,7,3,3,4,7,2,8
DATA 4,7,3,3,15,7,36,3,10,7,6,3
DATA 4,7,2,8,4,7,6,3,10,7,40,3
DATA 6,7,8,3,3,7,4,8,3,7,8,3
DATA 6,7,43,3,4,7,8,3,4,7,1,8
DATA 2,7,1,8,4,7,8,3,4,7,56,3
DATA 4,7,1,8,2,7,1,8,4,7,68,3
DATA 4,7,1,8,2,7,1,8,4,7,67,3
DATA 4,7,1,8,4,7,1,8,4,7,66,3
DATA 4,7,1,8,4,7,1,8,4,7,65,3
DATA 4,7,1,8,6,7,1,8,4,7,63,3
DATA 5,7,1,8,6,7,1,8,5,7,62,3
DATA 4,7,1,8,8,7,1,8,4,7,62,3
DATA 4,7,1,8,8,7,1,8,4,7,62,3
DATA 5,7,1,8,6,7,1,8,5,7,63,3
DATA 4,7,1,8,6,7,1,8,4,7,65,3
DATA 4,7,1,8,4,7,1,8,4,7,66,3
DATA 4,7,1,8,4,7,1,8,4,7,67,3
DATA 4,7,1,8,2,7,1,8,4,7,68,3
DATA 4,7,1,8,2,7,1,8,4,7,69,3
DATA 3,7,1,8,2,7,1,8,3,7,70,3
DATA 4,7,2,8,4,7,70,3,4,7,2,8
DATA 4,7,71,3,3,7,2,8,3,7,72,3
DATA 8,7,72,3,8,7,73,3,6,7,74,3
DATA 6,7,74,3,6,7,74,3,6,7,75,3
DATA 1,7,2,6,1,7,76,3,4,6,75,3
DATA 6,6,74,3,6,6,75,3,4,6,77,3
DATA 2,6,119,3
DATA -1, 5, -2, 4
'lvl6
DATA 91,3,1,0,27,3,2,6,77,3,4,6,75,3
DATA 6,6,74,3,6,6,75,3,4,6,76,3
DATA 1,7,2,6,1,7,75,3,6,7,74,3
DATA 6,7,74,3,6,7,74,3,6,7,73,3
DATA 8,7,72,3,8,7,72,3,3,7,2,8
DATA 3,7,71,3,4,7,2,8,4,7,70,3
DATA 4,7,2,8,4,7,70,3,3,7,1,8
DATA 2,7,1,8,3,7,69,3,4,7,1,8
DATA 2,7,1,8,4,7,68,3,4,7,1,8
DATA 2,7,1,8,4,7,67,3,4,7,1,8
DATA 4,7,1,8,4,7,66,3,4,7,1,8
DATA 4,7,1,8,4,7,54,3,3,8,8,3
DATA 4,7,1,8,6,7,1,8,4,7,8,3
DATA 3,8,42,3,1,8,2,7,3,8,4,3
DATA 5,7,1,8,6,7,1,8,5,7,4,3
DATA 3,8,2,7,1,8,42,3,1,8,5,7
DATA 2,8,2,3,4,7,1,8,8,7,1,8
DATA 4,7,2,3,2,8,5,7,1,8,43,3
DATA 1,8,6,7,1,8,1,3,4,7,1,8
DATA 8,7,1,8,4,7,1,3,1,8,6,7
DATA 1,8,44,3,1,8,7,7,1,8,5,7
DATA 1,8,6,7,1,8,5,7,1,8,7,7
DATA 1,8,44,3,1,8,8,7,1,8,4,7
DATA 1,8,6,7,1,8,4,7,1,8,8,7
DATA 1,8,45,3,1,8,8,7,1,8,4,7
DATA 1,8,4,7,1,8,4,7,1,8,8,7
DATA 1,8,46,3,1,8,8,7,1,8,4,7
DATA 1,8,4,7,1,8,4,7,1,8,8,7
DATA 1,8,47,3,1,8,8,7,1,8,4,7
DATA 1,8,2,7,1,8,4,7,1,8,8,7
DATA 1,8,49,3,1,8,7,7,1,8,4,7
DATA 1,8,2,7,1,8,4,7,1,8,7,7
DATA 1,8,47,3,4,7,1,8,6,7,1,8
DATA 4,7,1,8,2,7,1,8,4,7,1,8
DATA 6,7,1,8,4,7,43,3,6,7,2,8
DATA 5,7,1,8,3,7,4,8,3,7,1,8
DATA 5,7,2,8,6,7,40,3,10,7,3,8
DATA 2,7,1,8,4,7,2,8,4,7,1,8
DATA 2,7,3,8,10,7,36,3,15,7,3,8
DATA 4,7,2,8,4,7,3,8,15,7,31,3
DATA 9,7,2,8,10,7,1,8,3,7,2,1
DATA 3,7,1,8,10,7,2,8,9,7,25,3
DATA 10,7,2,8,2,7,2,8,9,7,1,8
DATA 1,7,4,1,1,7,1,8,9,7,2,8
DATA 2,7,2,8,10,7,14,3,2,6,2,3
DATA 12,7,2,8,6,7,2,8,8,7,1,8
DATA 4,1,1,8,8,7,2,8,6,7,2,8
DATA 12,7,2,3,2,6,5,3,4,6,10,7
DATA 3,8,10,7,4,8,3,7,8,1,3,7
DATA 4,8,10,7,3,8,10,7,4,6,3,3
DATA 6,6,6,7,3,8,16,7,3,8,10,1
DATA 3,8,16,7,3,8,6,7,6,6,2,3
DATA 6,6,6,7,3,8,16,7,3,8,10,1
DATA 3,8,16,7,3,8,6,7,6,6,3,3
DATA 4,6,10,7,3,8,10,7,4,8,3,7
DATA 8,1,3,7,4,8,10,7,3,8,10,7
DATA 4,6,5,3,2,6,2,3,12,7,2,8
DATA 6,7,2,8,8,7,1,8,4,1,1,8
DATA 8,7,2,8,6,7,2,8,12,7,2,3
DATA 2,6,14,3,10,7,2,8,2,7,2,8
DATA 9,7,1,8,1,7,4,1,1,7,1,8
DATA 9,7,2,8,2,7,2,8,10,7,25,3
DATA 9,7,2,8,10,7,1,8,3,7,2,1
DATA 3,7,1,8,10,7,2,8,9,7,31,3
DATA 15,7,3,8,4,7,2,8,4,7,3,8
DATA 15,7,36,3,10,7,3,8,2,7,1,8
DATA 4,7,2,8,4,7,1,8,2,7,3,8
DATA 10,7,40,3,6,7,2,8,5,7,1,8
DATA 3,7,4,8,3,7,1,8,5,7,2,8
DATA 6,7,43,3,4,7,1,8,6,7,1,8
DATA 4,7,1,8,2,7,1,8,4,7,1,8
DATA 6,7,1,8,4,7,47,3,1,8,7,7
DATA 1,8,4,7,1,8,2,7,1,8,4,7
DATA 1,8,7,7,1,8,49,3,1,8,8,7
DATA 1,8,4,7,1,8,2,7,1,8,4,7
DATA 1,8,8,7,1,8,47,3,1,8,8,7
DATA 1,8,4,7,1,8,4,7,1,8,4,7
DATA 1,8,8,7,1,8,46,3,1,8,8,7
DATA 1,8,4,7,1,8,4,7,1,8,4,7
DATA 1,8,8,7,1,8,45,3,1,8,8,7
DATA 1,8,4,7,1,8,6,7,1,8,4,7
DATA 1,8,8,7,1,8,44,3,1,8,7,7
DATA 1,8,5,7,1,8,6,7,1,8,5,7
DATA 1,8,7,7,1,8,44,3,1,8,6,7
DATA 1,8,1,3,4,7,1,8,8,7,1,8
DATA 4,7,1,3,1,8,6,7,1,8,43,3
DATA 1,8,5,7,2,8,2,3,4,7,1,8
DATA 8,7,1,8,4,7,2,3,2,8,5,7
DATA 1,8,42,3,1,8,2,7,3,8,4,3
DATA 5,7,1,8,6,7,1,8,5,7,4,3
DATA 3,8,2,7,1,8,42,3,3,8,8,3
DATA 4,7,1,8,6,7,1,8,4,7,8,3
DATA 3,8,54,3,4,7,1,8,4,7,1,8
DATA 4,7,66,3,4,7,1,8,4,7,1,8
DATA 4,7,67,3,4,7,1,8,2,7,1,8
DATA 4,7,68,3,4,7,1,8,2,7,1,8
DATA 4,7,69,3,3,7,1,8,2,7,1,8
DATA 3,7,70,3,4,7,2,8,4,7,70,3
DATA 4,7,2,8,4,7,71,3,3,7,2,8
DATA 3,7,72,3,8,7,72,3,8,7,73,3
DATA 6,7,74,3,6,7,74,3,6,7,74,3
DATA 6,7,75,3,1,7,2,6,1,7,76,3
DATA 4,6,75,3,6,6,74,3,6,6,75,3
DATA 4,6,77,3,2,6,119,3
DATA -1, 5, -2, 4
'lvl7
DATA 91,3,1,0,27,3,2,1,77,3,4,1,75,3
DATA 6,1,74,3,6,1,75,3,4,1,76,3
DATA 1,7,2,1,1,7,75,3,6,7,74,3
DATA 6,7,74,3,6,7,74,3,6,7,73,3
DATA 8,7,72,3,8,7,72,3,3,7,2,5
DATA 3,7,71,3,4,7,2,5,4,7,70,3
DATA 4,7,2,5,4,7,70,3,3,7,1,5
DATA 2,7,1,5,3,7,69,3,4,7,1,5
DATA 2,7,1,5,4,7,68,3,4,7,1,5
DATA 2,7,1,5,4,7,67,3,4,7,1,5
DATA 4,7,1,5,4,7,66,3,4,7,1,5
DATA 4,7,1,5,4,7,54,3,3,8,8,3
DATA 4,7,1,5,6,7,1,5,4,7,8,3
DATA 3,8,42,3,1,8,2,7,3,8,4,3
DATA 5,7,1,5,6,7,1,5,5,7,4,3
DATA 3,8,2,7,1,8,42,3,1,8,5,7
DATA 2,8,2,3,4,7,1,5,8,7,1,5
DATA 4,7,2,3,2,8,5,7,1,8,43,3
DATA 1,8,6,7,1,8,1,3,4,7,1,5
DATA 8,7,1,5,4,7,1,3,1,8,6,7
DATA 1,8,44,3,1,8,7,7,1,8,5,7
DATA 1,5,6,7,1,5,5,7,1,8,7,7
DATA 1,8,44,3,1,8,8,7,1,8,4,7
DATA 1,5,6,7,1,5,4,7,1,8,8,7
DATA 1,8,45,3,1,8,8,7,1,8,4,7
DATA 1,5,4,7,1,5,4,7,1,8,8,7
DATA 1,8,46,3,1,8,8,7,1,8,4,7
DATA 1,5,4,7,1,5,4,7,1,8,8,7
DATA 1,8,47,3,1,8,8,7,1,8,4,7
DATA 1,5,2,7,1,5,4,7,1,8,8,7
DATA 1,8,49,3,1,8,7,7,1,8,4,7
DATA 1,5,2,7,1,5,4,7,1,8,7,7
DATA 1,8,47,3,4,7,1,8,6,7,1,8
DATA 4,7,1,5,2,7,1,5,4,7,1,8
DATA 6,7,1,8,4,7,43,3,6,7,2,8
DATA 5,7,1,8,4,7,2,5,4,7,1,8
DATA 5,7,2,8,6,7,40,3,10,7,3,8
DATA 2,7,1,8,4,7,2,5,4,7,1,8
DATA 2,7,3,8,10,7,36,3,15,7,3,8
DATA 4,7,2,5,4,7,3,8,15,7,31,3
DATA 9,7,2,5,10,7,1,8,3,7,2,1
DATA 3,7,1,8,10,7,2,5,9,7,25,3
DATA 10,7,2,5,2,7,2,5,9,7,1,8
DATA 1,7,4,1,1,7,1,8,9,7,2,5
DATA 2,7,2,5,10,7,14,3,2,1,2,3
DATA 12,7,2,5,6,7,2,5,8,7,1,8
DATA 4,1,1,8,8,7,2,5,6,7,2,5
DATA 12,7,2,3,2,1,5,3,4,1,10,7
DATA 3,5,10,7,3,5,4,7,8,1,4,7
DATA 3,5,10,7,3,5,10,7,4,1,3,3
DATA 6,1,6,7,3,5,16,7,3,5,10,1
DATA 3,5,16,7,3,5,6,7,6,1,2,3
DATA 6,1,6,7,3,5,16,7,3,5,10,1
DATA 3,5,16,7,3,5,6,7,6,1,3,3
DATA 4,1,10,7,3,5,10,7,3,5,4,7
DATA 8,1,4,7,3,5,10,7,3,5,10,7
DATA 4,1,5,3,2,1,2,3,12,7,2,5
DATA 6,7,2,5,8,7,1,8,4,1,1,8
DATA 8,7,2,5,6,7,2,5,12,7,2,3
DATA 2,1,14,3,10,7,2,5,2,7,2,5
DATA 9,7,1,8,1,7,4,1,1,7,1,8
DATA 9,7,2,5,2,7,2,5,10,7,25,3
DATA 9,7,2,5,10,7,1,8,3,7,2,1
DATA 3,7,1,8,10,7,2,5,9,7,31,3
DATA 15,7,3,8,4,7,2,5,4,7,3,8
DATA 15,7,36,3,10,7,3,8,2,7,1,8
DATA 4,7,2,5,4,7,1,8,2,7,3,8
DATA 10,7,40,3,6,7,2,8,5,7,1,8
DATA 4,7,2,5,4,7,1,8,5,7,2,8
DATA 6,7,43,3,4,7,1,8,6,7,1,8
DATA 4,7,1,5,2,7,1,5,4,7,1,8
DATA 6,7,1,8,4,7,47,3,1,8,7,7
DATA 1,8,4,7,1,5,2,7,1,5,4,7
DATA 1,8,7,7,1,8,49,3,1,8,8,7
DATA 1,8,4,7,1,5,2,7,1,5,4,7
DATA 1,8,8,7,1,8,47,3,1,8,8,7
DATA 1,8,4,7,1,5,4,7,1,5,4,7
DATA 1,8,8,7,1,8,46,3,1,8,8,7
DATA 1,8,4,7,1,5,4,7,1,5,4,7
DATA 1,8,8,7,1,8,45,3,1,8,8,7
DATA 1,8,4,7,1,5,6,7,1,5,4,7
DATA 1,8,8,7,1,8,44,3,1,8,7,7
DATA 1,8,5,7,1,5,6,7,1,5,5,7
DATA 1,8,7,7,1,8,44,3,1,8,6,7
DATA 1,8,1,3,4,7,1,5,8,7,1,5
DATA 4,7,1,3,1,8,6,7,1,8,43,3
DATA 1,8,5,7,2,8,2,3,4,7,1,5
DATA 8,7,1,5,4,7,2,3,2,8,5,7
DATA 1,8,42,3,1,8,2,7,3,8,4,3
DATA 5,7,1,5,6,7,1,5,5,7,4,3
DATA 3,8,2,7,1,8,42,3,3,8,8,3
DATA 4,7,1,5,6,7,1,5,4,7,8,3
DATA 3,8,54,3,4,7,1,5,4,7,1,5
DATA 4,7,66,3,4,7,1,5,4,7,1,5
DATA 4,7,67,3,4,7,1,5,2,7,1,5
DATA 4,7,68,3,4,7,1,5,2,7,1,5
DATA 4,7,69,3,3,7,1,5,2,7,1,5
DATA 3,7,70,3,4,7,2,5,4,7,70,3
DATA 4,7,2,5,4,7,71,3,3,7,2,5
DATA 3,7,72,3,8,7,72,3,8,7,73,3
DATA 6,7,74,3,6,7,74,3,6,7,74,3
DATA 6,7,75,3,1,7,2,1,1,7,76,3
DATA 4,1,75,3,6,1,74,3,6,1,75,3
DATA 4,1,77,3,2,1,119,3
DATA -1, 5, -2, 4
'lvl8
DATA 91,3,1,0,27,3,2,1,77,3,4,1,75,3
DATA 6,1,74,3,6,1,75,3,4,1,76,3
DATA 1,7,2,1,1,7,75,3,6,7,74,3
DATA 6,7,74,3,6,7,74,3,6,7,73,3
DATA 8,7,72,3,8,7,72,3,3,7,2,5
DATA 3,7,71,3,4,7,2,5,4,7,70,3
DATA 4,7,2,5,4,7,70,3,3,7,1,5
DATA 2,7,1,5,3,7,69,3,4,7,1,5
DATA 2,7,1,5,4,7,68,3,4,7,1,5
DATA 2,7,1,5,4,7,67,3,4,7,1,5
DATA 4,7,1,5,4,7,66,3,4,7,1,5
DATA 4,7,1,5,4,7,54,3,3,5,8,3
DATA 4,7,1,5,6,7,1,5,4,7,8,3
DATA 3,5,42,3,1,5,2,7,3,5,4,3
DATA 5,7,1,5,6,7,1,5,5,7,4,3
DATA 3,5,2,7,1,5,42,3,1,5,5,7
DATA 2,5,2,3,4,7,1,5,8,7,1,5
DATA 4,7,2,3,2,5,5,7,1,5,43,3
DATA 1,5,6,7,1,5,1,3,4,7,1,5
DATA 8,7,1,5,4,7,1,3,1,5,6,7
DATA 1,5,44,3,1,5,7,7,1,5,5,7
DATA 1,5,6,7,1,5,5,7,1,5,7,7
DATA 1,5,44,3,1,5,8,7,1,5,4,7
DATA 1,5,6,7,1,5,4,7,1,5,8,7
DATA 1,5,45,3,1,5,8,7,1,5,4,7
DATA 1,5,4,7,1,5,4,7,1,5,8,7
DATA 1,5,46,3,1,5,8,7,1,5,4,7
DATA 1,5,4,7,1,5,4,7,1,5,8,7
DATA 1,5,47,3,1,5,8,7,1,5,4,7
DATA 1,5,2,7,1,5,4,7,1,5,8,7
DATA 1,5,49,3,1,5,7,7,1,5,4,7
DATA 1,5,2,7,1,5,4,7,1,5,7,7
DATA 1,5,47,3,4,7,1,5,6,7,1,5
DATA 4,7,1,5,2,7,1,5,4,7,1,5
DATA 6,7,1,5,4,7,43,3,6,7,2,5
DATA 5,7,1,5,4,7,2,5,4,7,1,5
DATA 5,7,2,5,6,7,40,3,10,7,3,5
DATA 2,7,1,5,4,7,2,5,4,7,1,5
DATA 2,7,3,5,10,7,36,3,15,7,3,5
DATA 4,7,2,5,4,7,3,5,15,7,31,3
DATA 9,7,2,5,10,7,1,5,3,7,2,4
DATA 3,7,1,5,10,7,2,5,9,7,25,3
DATA 10,7,2,5,2,7,2,5,9,7,1,5
DATA 1,7,4,4,1,7,1,5,9,7,2,5
DATA 2,7,2,5,10,7,14,3,2,1,2,3
DATA 12,7,2,5,6,7,2,5,8,7,1,5
DATA 4,4,1,5,8,7,2,5,6,7,2,5
DATA 12,7,2,3,2,1,5,3,4,1,10,7
DATA 3,5,10,7,3,5,4,7,8,4,4,7
DATA 3,5,10,7,3,5,10,7,4,1,3,3
DATA 6,1,6,7,3,5,16,7,3,5,10,4
DATA 3,5,16,7,3,5,6,7,6,1,2,3
DATA 6,1,6,7,3,5,16,7,3,5,10,4
DATA 3,5,16,7,3,5,6,7,6,1,3,3
DATA 4,1,10,7,3,5,10,7,3,5,4,7
DATA 8,4,4,7,3,5,10,7,3,5,10,7
DATA 4,1,5,3,2,1,2,3,12,7,2,5
DATA 6,7,2,5,8,7,1,5,4,4,1,5
DATA 8,7,2,5,6,7,2,5,12,7,2,3
DATA 2,1,14,3,10,7,2,5,2,7,2,5
DATA 9,7,1,5,1,7,4,4,1,7,1,5
DATA 9,7,2,5,2,7,2,5,10,7,25,3
DATA 9,7,2,5,10,7,1,5,3,7,2,4
DATA 3,7,1,5,10,7,2,5,9,7,31,3
DATA 15,7,3,5,4,7,2,5,4,7,3,5
DATA 15,7,36,3,10,7,3,5,2,7,1,5
DATA 4,7,2,5,4,7,1,5,2,7,3,5
DATA 10,7,40,3,6,7,2,5,5,7,1,5
DATA 4,7,2,5,4,7,1,5,5,7,2,5
DATA 6,7,43,3,4,7,1,5,6,7,1,5
DATA 4,7,1,5,2,7,1,5,4,7,1,5
DATA 6,7,1,5,4,7,47,3,1,5,7,7
DATA 1,5,4,7,1,5,2,7,1,5,4,7
DATA 1,5,7,7,1,5,49,3,1,5,8,7
DATA 1,5,4,7,1,5,2,7,1,5,4,7
DATA 1,5,8,7,1,5,47,3,1,5,8,7
DATA 1,5,4,7,1,5,4,7,1,5,4,7
DATA 1,5,8,7,1,5,46,3,1,5,8,7
DATA 1,5,4,7,1,5,4,7,1,5,4,7
DATA 1,5,8,7,1,5,45,3,1,5,8,7
DATA 1,5,4,7,1,5,6,7,1,5,4,7
DATA 1,5,8,7,1,5,44,3,1,5,7,7
DATA 1,5,5,7,1,5,6,7,1,5,5,7
DATA 1,5,7,7,1,5,44,3,1,5,6,7
DATA 1,5,1,3,4,7,1,5,8,7,1,5
DATA 4,7,1,3,1,5,6,7,1,5,43,3
DATA 1,5,5,7,2,5,2,3,4,7,1,5
DATA 8,7,1,5,4,7,2,3,2,5,5,7
DATA 1,5,42,3,1,5,2,7,3,5,4,3
DATA 5,7,1,5,6,7,1,5,5,7,4,3
DATA 3,5,2,7,1,5,42,3,3,5,8,3
DATA 4,7,1,5,6,7,1,5,4,7,8,3
DATA 3,5,54,3,4,7,1,5,4,7,1,5
DATA 4,7,66,3,4,7,1,5,4,7,1,5
DATA 4,7,67,3,4,7,1,5,2,7,1,5
DATA 4,7,68,3,4,7,1,5,2,7,1,5
DATA 4,7,69,3,3,7,1,5,2,7,1,5
DATA 3,7,70,3,4,7,2,5,4,7,70,3
DATA 4,7,2,5,4,7,71,3,3,7,2,5
DATA 3,7,72,3,8,7,72,3,8,7,73,3
DATA 6,7,74,3,6,7,74,3,6,7,74,3
DATA 6,7,75,3,1,7,2,1,1,7,76,3
DATA 4,1,75,3,6,1,74,3,6,1,75,3
DATA 4,1,77,3,2,1,119,3
DATA -1, 5, -2, 4
'lvl9
DATA 91,3,1,0,27,3,2,5,77,3,4,5,75,3
DATA 6,5,74,3,6,5,75,3,4,5,76,3
DATA 1,7,2,5,1,7,75,3,6,7,74,3
DATA 6,7,74,3,6,7,74,3,6,7,73,3
DATA 8,7,72,3,8,7,72,3,3,7,2,5
DATA 3,7,71,3,4,7,2,5,4,7,70,3
DATA 4,7,2,5,4,7,70,3,3,7,1,5
DATA 2,7,1,5,3,7,69,3,4,7,1,5
DATA 2,7,1,5,4,7,68,3,4,7,1,5
DATA 2,7,1,5,4,7,67,3,4,7,1,5
DATA 4,7,1,5,4,7,66,3,4,7,1,5
DATA 4,7,1,5,4,7,54,3,3,5,8,3
DATA 4,7,1,5,6,7,1,5,4,7,8,3
DATA 3,5,42,3,1,5,2,1,3,5,4,3
DATA 5,7,1,5,6,7,1,5,5,7,4,3
DATA 3,5,2,1,1,5,42,3,1,5,5,1
DATA 2,5,2,3,4,7,1,5,8,7,1,5
DATA 4,7,2,3,2,5,5,1,1,5,43,3
DATA 1,5,6,1,1,5,1,3,4,7,1,5
DATA 8,7,1,5,4,7,1,3,1,5,6,1
DATA 1,5,44,3,1,5,7,1,1,5,5,7
DATA 1,5,6,7,1,5,5,7,1,5,7,1
DATA 1,5,44,3,1,5,8,1,1,5,4,7
DATA 1,5,6,7,1,5,4,7,1,5,8,1
DATA 1,5,45,3,1,5,8,1,1,5,4,7
DATA 1,5,4,7,1,5,4,7,1,5,8,1
DATA 1,5,46,3,1,5,8,1,1,5,4,7
DATA 1,5,4,7,1,5,4,7,1,5,8,1
DATA 1,5,47,3,1,5,8,1,1,5,4,7
DATA 1,5,2,7,1,5,4,7,1,5,8,1
DATA 1,5,49,3,1,5,7,1,1,5,4,7
DATA 1,5,2,7,1,5,4,7,1,5,7,1
DATA 1,5,47,3,4,7,1,5,6,1,1,5
DATA 4,7,1,5,2,7,1,5,4,7,1,5
DATA 6,1,1,5,4,7,43,3,6,7,2,5
DATA 4,1,1,7,1,5,4,7,2,5,4,7
DATA 1,5,5,1,2,5,6,7,40,3,10,7
DATA 3,5,2,1,1,5,4,7,2,5,4,7
DATA 1,5,2,1,3,5,10,7,36,3,15,7
DATA 3,5,4,7,2,5,4,7,3,5,15,7
DATA 31,3,9,7,2,5,10,7,1,5,3,7
DATA 2,4,3,7,1,5,10,7,2,5,9,7
DATA 25,3,10,7,2,5,2,7,2,5,9,7
DATA 1,5,1,7,4,4,1,7,1,5,9,7
DATA 2,5,2,7,2,5,10,7,14,3,2,5
DATA 2,3,12,7,2,5,6,7,2,5,8,7
DATA 1,5,4,4,1,5,8,7,2,5,6,7
DATA 2,5,12,7,2,3,2,5,5,3,4,5
DATA 10,7,3,5,10,7,3,5,4,7,8,4
DATA 4,7,3,5,10,7,3,5,10,7,4,5
DATA 3,3,6,5,6,7,3,5,16,7,3,5
DATA 10,4,3,5,16,7,3,5,6,7,6,5
DATA 2,3,6,5,6,7,3,5,16,7,3,5
DATA 10,4,3,5,16,7,3,5,6,7,6,5
DATA 3,3,4,5,10,7,3,5,10,7,3,5
DATA 4,7,8,4,4,7,3,5,10,7,3,5
DATA 10,7,4,5,5,3,2,5,2,3,12,7
DATA 2,5,6,7,2,5,8,7,1,5,4,4
DATA 1,5,8,7,2,5,6,7,2,5,12,7
DATA 2,3,2,5,14,3,10,7,2,5,2,7
DATA 2,5,9,7,1,5,1,7,4,4,1,7
DATA 1,5,9,7,2,5,2,7,2,5,10,7
DATA 25,3,9,7,2,5,10,7,1,5,3,7
DATA 2,4,3,7,1,5,10,7,2,5,9,7
DATA 31,3,15,7,3,5,4,7,2,5,4,7
DATA 3,5,15,7,36,3,10,7,3,5,2,1
DATA 1,5,4,7,2,5,4,7,1,5,2,1
DATA 3,5,10,7,40,3,6,7,2,5,5,1
DATA 1,5,4,7,2,5,4,7,1,5,5,1
DATA 2,5,6,7,43,3,4,7,1,5,6,1
DATA 1,5,4,7,1,5,2,7,1,5,4,7
DATA 1,5,6,1,1,5,4,7,47,3,1,5
DATA 7,1,1,5,4,7,1,5,2,7,1,5
DATA 4,7,1,5,7,1,1,5,49,3,1,5
DATA 8,1,1,5,4,7,1,5,2,7,1,5
DATA 4,7,1,5,8,1,1,5,47,3,1,5
DATA 8,1,1,5,4,7,1,5,4,7,1,5
DATA 4,7,1,5,8,1,1,5,46,3,1,5
DATA 8,1,1,5,4,7,1,5,4,7,1,5
DATA 4,7,1,5,8,1,1,5,45,3,1,5
DATA 8,1,1,5,4,7,1,5,6,7,1,5
DATA 4,7,1,5,8,1,1,5,44,3,1,5
DATA 7,1,1,5,5,7,1,5,6,7,1,5
DATA 5,7,1,5,7,1,1,5,44,3,1,5
DATA 6,1,1,5,1,3,4,7,1,5,8,7
DATA 1,5,4,7,1,3,1,5,6,1,1,5
DATA 43,3,1,5,5,1,2,5,2,3,4,7
DATA 1,5,8,7,1,5,4,7,2,3,2,5
DATA 5,1,1,5,42,3,1,5,2,1,3,5
DATA 4,3,5,7,1,5,6,7,1,5,5,7
DATA 4,3,3,5,2,1,1,5,42,3,3,5
DATA 8,3,4,7,1,5,6,7,1,5,4,7
DATA 8,3,3,5,54,3,4,7,1,5,4,7
DATA 1,5,4,7,66,3,4,7,1,5,4,7
DATA 1,5,4,7,67,3,4,7,1,5,2,7
DATA 1,5,4,7,68,3,4,7,1,5,2,7
DATA 1,5,4,7,69,3,3,7,1,5,2,7
DATA 1,5,3,7,70,3,4,7,2,5,4,7
DATA 70,3,4,7,2,5,4,7,71,3,3,7
DATA 2,5,3,7,72,3,8,7,72,3,8,7
DATA 73,3,6,7,74,3,6,7,74,3,6,7
DATA 74,3,6,7,75,3,1,7,2,5,1,7
DATA 76,3,4,5,75,3,6,5,74,3,6,5
DATA 75,3,4,5,77,3,2,5,119,3
DATA -1, 5, -2, 4
'lvl10
DATA 38,3,4,5,49,3,1,0,25,3,2,5,2,4
DATA 2,5,73,3,2,5,4,4,2,5,71,3
DATA 2,5,6,4,2,5,70,3,2,5,6,4
DATA 2,5,71,3,2,5,4,4,2,5,72,3
DATA 3,5,2,4,3,5,72,3,8,5,72,3
DATA 2,5,1,7,2,5,1,7,2,5,72,3
DATA 2,5,4,7,2,5,72,3,2,5,4,7
DATA 2,5,71,3,2,5,6,7,2,5,70,3
DATA 2,5,6,7,2,5,70,3,2,5,6,7
DATA 2,5,69,3,2,5,3,7,2,5,3,7
DATA 2,5,68,3,2,5,2,7,4,5,2,7
DATA 2,5,68,3,2,5,1,7,2,5,2,4
DATA 2,5,1,7,2,5,67,3,2,5,2,7
DATA 2,5,2,4,2,5,2,7,2,5,66,3
DATA 2,5,2,7,2,5,2,4,2,5,2,7
DATA 2,5,65,3,2,5,2,7,2,5,4,4
DATA 2,5,2,7,2,5,53,3,3,5,8,3
DATA 2,5,2,7,2,5,4,4,2,5,2,7
DATA 2,5,8,3,3,5,41,3,7,5,4,3
DATA 2,5,2,7,2,5,6,4,2,5,2,7
DATA 2,5,4,3,7,5,40,3,2,5,2,1
DATA 5,5,1,3,2,5,3,7,2,5,6,4
DATA 2,5,3,7,2,5,1,3,5,5,2,1
DATA 2,5,40,3,2,5,5,1,5,5,2,7
DATA 2,5,8,4,2,5,2,7,5,5,5,1
DATA 2,5,41,3,2,5,6,1,3,5,2,7
DATA 2,5,8,4,2,5,2,7,3,5,6,1
DATA 2,5,42,3,2,5,7,1,2,5,3,7
DATA 2,5,6,4,2,5,3,7,2,5,7,1
DATA 2,5,42,3,2,5,8,1,2,5,2,7
DATA 2,5,6,4,2,5,2,7,2,5,8,1
DATA 2,5,43,3,2,5,8,1,2,5,2,7
DATA 2,5,4,4,2,5,2,7,2,5,8,1
DATA 2,5,44,3,2,5,8,1,2,5,2,7
DATA 2,5,4,4,2,5,2,7,2,5,8,1
DATA 2,5,45,3,2,5,8,1,2,5,2,7
DATA 2,5,2,4,2,5,2,7,2,5,8,1
DATA 2,5,45,3,4,5,7,1,2,5,2,7
DATA 2,5,2,4,2,5,2,7,2,5,7,1
DATA 4,5,43,3,6,5,6,1,2,5,2,7
DATA 2,5,2,4,2,5,2,7,2,5,6,1
DATA 6,5,40,3,3,5,4,7,3,5,5,1
DATA 2,5,2,7,4,5,2,7,2,5,5,1
DATA 3,5,4,7,3,5,36,3,4,5,6,7
DATA 5,5,2,1,2,5,2,7,4,5,2,7
DATA 2,5,2,1,5,5,6,7,2,5,2,6
DATA 31,3,5,5,4,7,2,5,4,7,5,5
DATA 1,1,1,5,2,7,1,5,2,1,1,5
DATA 2,7,1,5,1,1,5,5,4,7,2,5
DATA 4,7,2,5,3,6,17,3,2,5,6,3
DATA 6,5,4,7,6,5,5,7,3,5,1,1
DATA 2,5,1,1,2,6,1,1,2,5,1,1
DATA 3,5,5,7,6,5,4,7,3,5,3,6
DATA 6,3,2,6,5,3,12,5,5,7,4,5
DATA 2,4,4,5,6,7,1,5,2,1,4,6
DATA 2,1,1,5,6,7,4,5,2,4,4,5
DATA 5,7,3,5,6,6,2,5,1,6,3,3
DATA 2,5,2,4,6,5,5,7,5,5,6,4
DATA 5,5,3,7,1,5,1,1,6,6,1,1
DATA 1,5,3,7,5,5,6,4,5,5,5,7
DATA 6,5,2,4,1,5,1,6,1,3,2,5
DATA 4,4,2,5,7,7,4,5,10,4,6,5
DATA 1,1,8,6,1,1,6,5,10,4,4,5
DATA 7,7,2,5,4,4,1,5,1,6,1,5
DATA 6,4,2,5,5,7,2,5,16,4,2,6
DATA 2,1,8,6,2,1,2,6,16,4,2,5
DATA 5,7,2,5,6,4,2,5,6,4,2,5
DATA 5,7,2,5,16,4,2,6,2,1,8,6
DATA 2,1,2,6,16,4,2,5,5,7,2,5
DATA 6,4,3,5,4,4,2,5,7,7,4,5
DATA 10,4,6,5,1,1,8,6,1,1,6,5
DATA 10,4,4,5,7,7,2,5,4,4,1,5
DATA 1,6,1,3,2,5,2,4,6,5,5,7
DATA 5,5,6,4,5,5,3,7,1,5,1,1
DATA 6,6,1,1,1,5,3,7,5,5,6,4
DATA 5,5,5,7,6,5,2,4,1,5,1,6
DATA 3,3,12,5,5,7,4,5,2,4,4,5
DATA 6,7,1,5,2,1,4,6,2,1,1,5
DATA 6,7,4,5,2,4,4,5,5,7,3,5
DATA 6,6,2,5,1,6,5,3,2,5,6,3
DATA 6,5,4,7,6,5,5,7,3,5,1,1
DATA 2,5,1,1,2,6,1,1,2,5,1,1
DATA 3,5,5,7,6,5,4,7,3,5,3,6
DATA 6,3,2,6,17,3,5,5,4,7,2,5
DATA 4,7,5,5,1,1,1,5,2,7,1,5
DATA 2,1,1,5,2,7,1,5,1,1,5,5
DATA 4,7,2,5,4,7,2,5,3,6,31,3
DATA 4,5,6,7,5,5,2,1,2,5,2,7
DATA 1,5,2,6,1,5,2,7,2,5,2,1
DATA 5,5,6,7,2,5,2,6,36,3,3,5
DATA 4,7,3,5,5,1,2,5,2,7,1,5
DATA 2,6,1,5,2,7,2,5,5,1,3,5
DATA 4,7,1,5,2,6,40,3,6,5,6,1
DATA 2,5,2,7,2,5,2,4,2,5,2,7
DATA 2,5,6,1,5,5,1,6,43,3,4,5
DATA 7,1,2,5,2,7,2,5,2,4,2,5
DATA 2,7,2,5,7,1,1,5,3,6,45,3
DATA 2,5,8,1,2,5,2,7,2,5,2,4
DATA 2,5,2,7,2,5,8,1,2,5,45,3
DATA 2,5,8,1,2,5,2,7,2,5,4,4
DATA 2,5,2,7,2,5,8,1,2,5,44,3
DATA 2,5,8,1,2,5,2,7,2,5,4,4
DATA 2,5,2,7,2,5,8,1,2,5,43,3
DATA 2,5,8,1,2,5,2,7,2,5,6,4
DATA 2,5,2,7,2,5,8,1,2,5,42,3
DATA 2,5,7,1,2,5,3,7,2,5,6,4
DATA 2,5,3,7,2,5,7,1,2,5,42,3
DATA 2,5,6,1,3,5,2,7,2,5,8,4
DATA 2,5,2,7,3,5,6,1,2,5,41,3
DATA 2,5,5,1,5,5,2,7,2,5,8,4
DATA 2,5,2,7,5,5,5,1,2,5,40,3
DATA 2,5,2,1,5,5,1,3,2,5,3,7
DATA 2,5,6,4,2,5,3,7,2,5,1,3
DATA 5,5,2,1,2,5,40,3,7,5,4,3
DATA 2,5,2,7,2,5,6,4,2,5,2,7
DATA 2,5,4,3,7,5,41,3,3,5,8,3
DATA 2,5,2,7,2,5,4,4,2,5,2,7
DATA 2,5,8,3,3,5,53,3,2,5,2,7
DATA 2,5,4,4,2,5,2,7,2,5,65,3
DATA 2,5,2,7,2,5,2,4,2,5,2,7
DATA 2,5,66,3,2,5,2,7,2,5,2,4
DATA 2,5,2,7,2,5,67,3,2,5,1,7
DATA 2,5,2,4,2,5,1,7,2,5,68,3
DATA 2,5,2,7,4,5,2,7,2,5,68,3
DATA 2,5,3,7,2,5,3,7,2,5,69,3
DATA 2,5,6,7,2,5,70,3,2,5,6,7
DATA 2,5,70,3,2,5,6,7,2,5,71,3
DATA 2,5,4,7,2,5,72,3,2,5,4,7
DATA 2,5,72,3,2,5,1,7,2,5,1,7
DATA 2,5,72,3,8,5,72,3,3,5,2,4
DATA 3,5,72,3,2,5,4,4,2,5,71,3
DATA 2,5,6,4,2,5,70,3,2,5,6,4
DATA 2,5,71,3,2,5,4,4,2,5,73,3
DATA 2,5,2,4,2,5,75,3,4,5,38,3
DATA -1, 5, -2, 4
This message has been edited by Tusike on Dec 22, 2007 11:08 AM This message has been edited by Tusike on Dec 16, 2007 5:50 AM This message has been edited by Tusike on Dec 15, 2007 9:38 AM
DEFINT A-Z
DECLARE SUB center (text$, y!)
DECLARE FUNCTION eng$ (number, language)
DIM image(10000)
DIM SHARED global$
OPEN "profile.txt" FOR INPUT AS #1
INPUT #1, nickname$
INPUT #1, avscore
INPUT #1, gplayed
INPUT #1, lvl
INPUT #1, lang%
INPUT #1, nextlvl$
INPUT #1, cpu#
CLOSE #1
IF lang% = 1 THEN
a$ = "Player name:"
b$ = "Games played:"
c$ = "Average score:"
d$ = "Current level:"
e1$ = "Next level at:"
e2$ = "You have reached the highest level!"
END IF
IF lang% = 2 THEN
a$ = "J@t#kos neve:"
b$ = "J@t#kok sz@ma:"
c$ = "^@tlagos pontsz@m:"
d$ = "Mostani szint:"
e1$ = "K<vetkez< szint:"
e2$ = "El#rted a legmagasabb szintet!"
END IF
center SPACE$(65), 1
center eng$(70, lang%) + " " + MID$(RTRIM$(nickname$), 1, 1) + LCASE$(MID$(RTRIM$(nickname$), 2, LEN(RTRIM$(nickname$)) - 1)), 1
center "-9-" + a$ + "-5- " + UCASE$(MID$(nickname$, 1, 1)) + LCASE$(MID$(nickname$, 2, LEN(nickname$) - 1)), 12
center "-9-" + b$ + "-15- " + LTRIM$(RTRIM$(STR$(gplayed))), 15
center "-9-" + c$ + "-15- " + LTRIM$(RTRIM$(STR$(avscore))), 19
center "-9-" + d$ + "-15- " + LTRIM$(RTRIM$(STR$(lvl))), 21
IF nextlvl$ <> "0" THEN center "-9-" + e1$ + "-15- " + nextlvl$, 17
IF nextlvl$ = "0" THEN center e2$, 17
KILL "profile.txt"
OPEN "profile.txt" FOR OUTPUT AS #1
PRINT #1, nickname$
PRINT #1, cpu#
CLOSE #1
center "-15-[ -5-" + eng$(22, lang%) + "-15- ]", 28
DO
a$ = INKEY$
IF a$ = CHR$(27) THEN SYSTEM
LOOP UNTIL a$ = CHR$(32) OR a$ = CHR$(13)
CHAIN "snake.bas"
handler:
PRINT global$
SYSTEM
RESUME
DEFSNG A-Z
SUB center (text$, y)
DIM letter(0 TO 199)
textlen = LEN(text$)
FOR i = 1 TO LEN(text$)
a$ = MID$(text$, i, 1)
IF a$ = "^" THEN textlen = textlen - 1
IF a$ = "-" THEN
textlen = textlen - 2
IF MID$(text$, i + 2, 1) = "-" THEN
textlen = textlen - 1: i = i + 3: GOTO 20
ELSE
textlen = textlen - 2: i = i + 4: GOTO 20
END IF
END IF
20
NEXT
s = 0
textlen = textlen * 8
startx = 320 - (textlen / 2)
y = (y - 1) * 2 + y * 14 - 14
c = 15
ii = 0
FOR i = 1 TO LEN(text$)
a$ = MID$(text$, i, 1)
IF a$ = "-" THEN
IF MID$(text$, i + 2, 1) = "-" THEN c = VAL(MID$(text$, i + 1, 1)): i = i + 2 ELSE c = VAL(MID$(text$, i + 1, 2)): i = i + 3
GOTO 21
END IF
IF a$ = "^" THEN s = 1: GOTO 21
ii = ii + 1
IF a$ = " " THEN
LINE (startx + (ii - 1) * 8, y)-(startx + (ii) * 8, y + 14), 3, BF
GOTO 21
END IF
z = ASC(a$)
SELECT CASE a$
CASE "=": z = 45
CASE "#": IF s = 1 THEN s = 0: z = 144 ELSE z = 130
CASE "@": IF s = 1 THEN s = 0: z = 143 ELSE z = 160
CASE "|": IF s = 1 THEN s = 0: z = 161 ELSE z = 161
CASE "$": IF s = 1 THEN s = 0: z = 162 ELSE z = 162
CASE "_": IF s = 1 THEN s = 0: z = 163 ELSE z = 163
CASE "<": IF s = 1 THEN s = 0: z = 153 ELSE z = 148
CASE ">": IF s = 1 THEN s = 0: z = 154 ELSE z = 129
END SELECT
DEF SEG = VARSEG(letter(0))
global$ = "letters\chr" + LTRIM$(RTRIM$(STR$(z))) + ".chr"
ON ERROR GOTO handler
BLOAD "letters\chr" + LTRIM$(RTRIM$(STR$(z))) + ".chr", VARPTR(letter(0))
DEF SEG
ON ERROR GOTO 0
x = startx + (ii - 1) * 8
SELECT CASE c
CASE 5: index = 160
CASE 8: index = 0
CASE 9: index = 120
CASE 12: index = 40
CASE 15: index = 80
END SELECT
global$ = STR$(x) + STR$(y) + STR$(index)
ON ERROR GOTO handler
IF y > 0 AND (z = 144 OR z = 143 OR z = 154 OR z = 153) THEN PUT (x, y - 2), letter(index), PSET ELSE PUT (x, y), letter(index), PSET
ON ERROR GOTO 0
21
NEXT
END SUB
DEFINT A-Z
FUNCTION eng$ (number, language)
SELECT CASE language
CASE 1
OPEN "files\english.txt" FOR RANDOM AS #10 LEN = 35
CASE 2
OPEN "files\magyar.txt" FOR RANDOM AS #10 LEN = 35
END SELECT
GET #10, number, t$
CLOSE #10
eng$ = LTRIM$(RTRIM$((t$)))
END FUNCTION
This message has been edited by Tusike on Dec 22, 2007 11:08 AM
DECLARE SUB adios ()
DECLARE SUB openmap ()
DECLARE FUNCTION ask$ (text$, x%, y%, max%, mode%)
DECLARE SUB savemap ()
DECLARE FUNCTION MenuChoice% (selections%, start%, xstart%)
DECLARE SUB center (text$, y!)
DEFINT A-Z
DECLARE SUB editor ()
DECLARE SUB drawdef ()
DECLARE SUB PUTimage (col, row, index)
DECLARE SUB restorecolors ()
DECLARE FUNCTION eng$ (number, language)
DECLARE SUB mouse (cx, dx, bx)
DECLARE SUB MousePointer (SW)
DIM SHARED a(9), a$
SCREEN 12
DIM SHARED global$, imageSET(999), ground(1 TO 32, 1 TO 24), background(7820) AS SINGLE
DIM SHARED mch(1 TO 8) AS INTEGER, lang%, hasname, map$, block(125), cpu#, nickname$
DIM SHARED mx, my, mclick, oldx, oldy
GOSUB Getsprites
ON ERROR GOTO ignore
MKDIR "maps"
ON ERROR GOTO 0
OPEN "profile.txt" FOR INPUT AS #1
INPUT #1, nickname$
INPUT #1, lang%
INPUT #1, cpu#
CLOSE #1
map$ = ""
DEF SEG = VARSEG(a(0))
FOR i = 0 TO 17
READ r
POKE VARPTR(a(0)) + i, r
NEXT i
CALL MousePointer(0)
CALL MousePointer(3)
DATA &HB8,&H00,&H00
DATA &H55
DATA &H8B,&HEC
DATA &HCD,&H33
DATA &H92
DATA &H8B,&H5E,&H06
DATA &H89,&H07
DATA &H5D
DATA &HCA,&H02,&H00
hasname = 0
drawdef
restorecolors
editor
adios
Getsprites:
FOR n = 0 TO 15
OUT &H3C8, n
OUT &H3C9, 0
OUT &H3C9, 0
OUT &H3C9, 0
NEXT n
maxx = 19: maxy = 139: x = -1: y = 0
OPEN "files\images.dat" FOR INPUT AS #1
DO
INPUT #1, counter, colr
IF colr = 7 THEN colr = 3: GOTO 17
IF colr = 14 THEN colr = 3
IF colr = 77 THEN colr = 7
IF colr = 2 AND y > 279 THEN colr = 11
17
FOR i = 1 TO counter
x = x + 1
IF x > maxx THEN x = 0: y = y + 1
PSET (x, y), colr
NEXT
LOOP UNTIL x = maxx AND y = maxy
CLOSE #1
index = 0
placey = 0
DO
GET (0, placey)-(19, placey + 19), imageSET(index)
index = index + 125
placey = placey + 20
LOOP UNTIL placey = 140
LINE (0, 0)-(19, 19), 7, BF
FOR i = 1 TO 500
x = INT(RND * 20)
y = INT(RND * 20)
PSET (x, y), 8
PSET (x + 1, y + 1), 15
NEXT
LINE (0, 0)-(19, 19), 7, B
GET (0, 0)-(19, 19), imageSET(875)
LINE (0, 0)-(8, 8), 7, B
GET (0, 0)-(8, 8), block
PUTimage 1, 1, 750
FOR x = 0 TO 19
FOR y = 0 TO 19
PSET (19 - x, y + 20), POINT(x, y)
NEXT
NEXT
GET (0, 20)-(19, 39), imageSET(750)
PUTimage 1, 1, 0
FOR x = 0 TO 19
FOR y = 0 TO 19
PSET (19 - x, y + 20), POINT(x, y)
NEXT
NEXT
GET (0, 20)-(19, 39), imageSET(0)
RETURN
handler:
PRINT global$
SYSTEM
RETURN
ignore: RESUME NEXT
Paletteinfo:
DATA 0,14,3, 0,0,42, 0,42,0, 0,14,3, 42,0,0, 60,52,0
DATA 60,52,0, 42,42,42, 21,21,21, 21,21,63, 21,63,21, 0,42,0
DATA 63,21,21, 63,21,63, 0,0,0, 63,63,63
SUB adios
KILL "profile.txt"
OPEN "profile.txt" FOR OUTPUT AS #1
PRINT #1, nickname$
PRINT #1, cpu#
CLOSE #1
CHAIN "snake.bas"
END SUB
FUNCTION ask$ (text$, x, y, max, mode)
COLOR 15
startx = x + LEN(text$): x = (x + LEN(text$)) * 8
txtlen = 0
LINE (x, (y - 1) * 2 + y * 14 - 14)-(x, (y - 1) * 2 + y * 14), 7
txt$ = ""
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
COLOR 5
SELECT CASE a$
CASE CHR$(13): IF txt$ <> "" THEN EXIT DO
CASE CHR$(27)
ask$ = "exit": EXIT FUNCTION
CASE CHR$(8)
IF txtlen > 0 THEN
LOCATE y, startx + txtlen: PRINT SPACE$(max - txtlen + 2)
txtlen = txtlen - 1: IF txtlen = 0 THEN txt$ = "" ELSE txt$ = MID$(txt$, 1, txtlen)
COLOR 5
IF mode = 1 THEN LOCATE y, startx + 1: PRINT txt$ ELSE LOCATE y, startx + 1: PRINT STRING$(txtlen, "*")
LINE (x + (txtlen * 8), (y - 1) * 2 + y * 14 - 14)-(x + (txtlen * 8), (y - 1) * 2 + y * 14), 7
END IF
CASE ELSE
IF mode = 2 THEN minimum = 33: maximum = 126 ELSE minimum = 48: maximum = 90
a1 = ASC(UCASE$(a$))
IF (a1 >= minimum AND a1 <= maximum) OR (a1 = 32) AND txtlen <= max THEN
IF a1 < 58 OR a1 > 64 THEN
txtlen = txtlen + 1
IF txtlen <= max THEN
IF mode = 1 THEN LOCATE y, startx + txtlen: PRINT UCASE$(a$) ELSE LOCATE y, startx + txtlen: PRINT "*"
txt$ = txt$ + UCASE$(a$)
LINE (x + txtlen * 8, (y - 1) * 2 + y * 14 - 14)-(x + txtlen * 8, (y - 1) * 2 + y * 14), 7
ELSE
txtlen = max
END IF
END IF
END IF
END SELECT
LOOP
LINE (x + LEN(txt$) * 8, (y - 1) * 2 + y * 14 - 14)-(x + LEN(txt$) * 8, (y - 1) * 2 + y * 14), 3
ask$ = txt$
END FUNCTION
DEFSNG A-Z
SUB center (text$, y)
DIM letter(0 TO 199)
textlen = LEN(text$)
FOR i = 1 TO LEN(text$)
a$ = MID$(text$, i, 1)
IF a$ = "^" THEN textlen = textlen - 1
IF a$ = "-" THEN
textlen = textlen - 2
IF MID$(text$, i + 2, 1) = "-" THEN
textlen = textlen - 1: i = i + 3: GOTO 20
ELSE
textlen = textlen - 2: i = i + 4: GOTO 20
END IF
END IF
20
NEXT
s = 0
textlen = textlen * 8
startx = 320 - (textlen / 2)
y = (y - 1) * 2 + y * 14 - 14
C = 15
ii = 0
FOR i = 1 TO LEN(text$)
a$ = MID$(text$, i, 1)
IF a$ = "-" THEN
IF MID$(text$, i + 2, 1) = "-" THEN C = VAL(MID$(text$, i + 1, 1)): i = i + 2 ELSE C = VAL(MID$(text$, i + 1, 2)): i = i + 3
GOTO 21
END IF
IF a$ = "^" THEN s = 1: GOTO 21
ii = ii + 1
IF a$ = " " THEN
LINE (startx + (ii - 1) * 8, y)-(startx + (ii) * 8, y + 14), 3, BF
GOTO 21
END IF
z = ASC(a$)
SELECT CASE a$
CASE "=": z = 45
CASE "#": IF s = 1 THEN s = 0: z = 144 ELSE z = 130
CASE "@": IF s = 1 THEN s = 0: z = 143 ELSE z = 160
CASE "|": IF s = 1 THEN s = 0: z = 161 ELSE z = 161
CASE "$": IF s = 1 THEN s = 0: z = 162 ELSE z = 162
CASE "_": IF s = 1 THEN s = 0: z = 163 ELSE z = 163
CASE "<": IF s = 1 THEN s = 0: z = 153 ELSE z = 148
CASE ">": IF s = 1 THEN s = 0: z = 154 ELSE z = 129
END SELECT
DEF SEG = VARSEG(letter(0))
global$ = "letters\chr" + LTRIM$(RTRIM$(STR$(z))) + ".chr"
ON ERROR GOTO handler
BLOAD "letters\chr" + LTRIM$(RTRIM$(STR$(z))) + ".chr", VARPTR(letter(0))
ON ERROR GOTO 0
x = startx + (ii - 1) * 8
SELECT CASE C
CASE 5: index = 160
CASE 8: index = 0
CASE 9: index = 120
CASE 12: index = 40
CASE 15: index = 80
END SELECT
global$ = STR$(x) + STR$(y) + STR$(index)
ON ERROR GOTO handler
IF y > 0 AND (z = 144 OR z = 143 OR z = 154 OR z = 153) THEN PUT (x, y - 2), letter(index), PSET ELSE PUT (x, y), letter(index), PSET
ON ERROR GOTO 0
21
NEXT
END SUB
DEFINT A-Z
SUB drawdef
LINE (0, 0)-(639, 479), 3, BF
FOR x = 1 TO 32
FOR y = 1 TO 24
ground(x, y) = 0
NEXT
NEXT
FOR x = 1 TO 32
PUTimage x, 1, 875
PUTimage x, 24, 875
ground(x, 1) = 1
ground(x, 24) = 1
NEXT
FOR y = 2 TO 23
PUTimage 1, y, 875
PUTimage 32, y, 875
ground(1, y) = 1
ground(32, y) = 1
NEXT
center "-9-" + LTRIM$(RTRIM$(eng$(78, lang%))) + "-15- = " + LTRIM$(RTRIM$(eng$(79, lang%))) + SPACE$(12) + "-9-[ENTER]-15- = " + RTRIM$(LTRIM$(eng$(80, lang%))) + SPACE$(12) + "-9-[ESC] -15-= " + RTRIM$(LTRIM$(eng$(81, lang%))), 27
LINE (29, 461)-(610, 478), 15, BF
FOR x = 23 TO 616
FOR y = 414 TO 432
IF POINT(x, y) = 9 THEN PSET (x, y), 3: PSET (x, y + 49), 4
IF POINT(x, y) = 15 THEN PSET (x, y), 3: PSET (x, y + 49), 3
NEXT
NEXT
center "-9-[CTRL] = S-15- = " + RTRIM$(LTRIM$(eng$(82, lang%))) + SPACE$(10) + "-9-" + RTRIM$(LTRIM$(eng$(89, lang%))) + "-15-" + SPACE$(10) + "-9-[CTRL] = O -15-= " + RTRIM$(LTRIM$(eng$(83, lang%))), 3
IF lang% = 1 THEN
LINE (88, 37)-(94, 37), 15
LINE (91, 34)-(91, 40), 15
LINE (534, 37)-(528, 37), 15
LINE (531, 34)-(531, 40), 15
END IF
IF lang% = 2 THEN
LINE (92, 37)-(98, 37), 15
LINE (95, 34)-(95, 40), 15
LINE (508, 37)-(514, 37), 15
LINE (511, 34)-(511, 40), 15
END IF
LINE (25, 1)-(614, 18), 15, BF
FOR x = 25 TO 614
FOR y = 23 TO 50
IF POINT(x, y) = 9 THEN PSET (x, y), 3: PSET (x, y - 28), 4
IF POINT(x, y) = 15 THEN PSET (x, y), 3: PSET (x, y + -28), 3
NEXT
NEXT
x = 24
FOR i = 1 TO 15
x = x - 1
SELECT CASE i
CASE 1: index = 0
CASE 2: index = 125
CASE 3: index = 250
CASE 4: index = 375
CASE 5: index = 375
CASE 6: index = 375
CASE 7: index = 375
CASE 8: index = 375
CASE 9: index = 375
CASE 10: index = 375
CASE 11: index = 250
CASE 12: index = 125
CASE 13: index = 500
CASE 14: index = 625
CASE 15: index = 750
END SELECT
PUTimage x, 23, index
NEXT i
END SUB
SUB editor
LINE (180, 109)-(460, 304), 3, BF
LINE (180, 109)-(460, 304), 7, B
LINE (182, 111)-(458, 302), 7, B
center eng$(73, lang%), 9
center eng$(84, lang%), 11
center eng$(85, lang%), 13
center eng$(86, lang%), 14
center eng$(87, lang%), 15
center eng$(88, lang%), 16
center "[ -5-" + eng$(89, lang%) + "-15- ]", 18
DO
DO: LOOP UNTIL INKEY$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
SELECT CASE a$
CASE CHR$(27): adios
CASE CHR$(13), CHR$(32): SOUND 150, 1: EXIT DO
END SELECT
LOOP
2
map$ = ""
LINE (190, 119)-(450, 294), 3, BF
mx = 16: my = 12
LINE ((mx - 1) * 20, (my - 1) * 20)-((mx - 1) * 20 + 19, (my - 1) * 20 + 19), 5, B
LINE ((mx - 1) * 20 + 1, (my - 1) * 20 + 1)-((mx - 1) * 20 + 18, (my - 1) * 20 + 18), 5, B
editstart:
MousePointer 1
MousePointer 2
DO
DO: LOOP UNTIL INKEY$ = ""
a$ = INKEY$
MousePointer 3
oldx = mx: oldy = my
CALL mouse(cx, dx, bx)
a$ = INKEY$
SELECT CASE a$
CASE CHR$(27): EXIT SUB
CASE CHR$(19): savemap
LINE ((mx - 1) * 20, (my - 1) * 20)-((mx - 1) * 20 + 19, (my - 1) * 20 + 19), 5, B
LINE ((mx - 1) * 20 + 1, (my - 1) * 20 + 1)-((mx - 1) * 20 + 18, (my - 1) * 20 + 18), 5, B
CASE CHR$(15): openmap
LINE ((mx - 1) * 20, (my - 1) * 20)-((mx - 1) * 20 + 19, (my - 1) * 20 + 19), 5, B
LINE ((mx - 1) * 20 + 1, (my - 1) * 20 + 1)-((mx - 1) * 20 + 18, (my - 1) * 20 + 18), 5, B
CASE CHR$(13)
EXIT DO
1
END SELECT
IF oldx <> mx OR oldy <> my THEN
LINE ((oldx - 1) * 20, (oldy - 1) * 20)-((oldx - 1) * 20 + 19, (oldy - 1) * 20 + 19), 3, BF
IF ground(oldx, oldy) = 1 THEN PUTimage oldx, oldy, 875
LINE ((mx - 1) * 20, (my - 1) * 20)-((mx - 1) * 20 + 19, (my - 1) * 20 + 19), 5, B
LINE ((mx - 1) * 20 + 1, (my - 1) * 20 + 1)-((mx - 1) * 20 + 18, (my - 1) * 20 + 18), 5, B
END IF
IF mclick = 1 THEN
IF ground(mx, my) = 0 THEN
ground(mx, my) = 1: PUTimage mx, my, 875
LINE ((mx - 1) * 20, (my - 1) * 20)-((mx - 1) * 20 + 19, (my - 1) * 20 + 19), 5, B
LINE ((mx - 1) * 20 + 1, (my - 1) * 20 + 1)-((mx - 1) * 20 + 18, (my - 1) * 20 + 18), 5, B
END IF
END IF
IF mclick = 2 THEN
IF ground(mx, my) = 1 THEN
ground(mx, my) = 2: PUTimage mx, my, 1000
LINE ((mx - 1) * 20, (my - 1) * 20)-((mx - 1) * 20 + 19, (my - 1) * 20 + 19), 5, B
LINE ((mx - 1) * 20 + 1, (my - 1) * 20 + 1)-((mx - 1) * 20 + 18, (my - 1) * 20 + 18), 5, B
END IF
END IF
LOOP
menupause:
GET (190, 119)-(450, 294), background
LINE (190, 119)-(450, 294), 3, BF
LINE (190, 119)-(450, 294), 7, B
LINE (192, 121)-(448, 292), 7, B
center eng$(73, lang%), 10
mch(1) = 46
mch(2) = 75
mch(3) = 22
PALETTE 5, 60 + 52 * 256
SELECT CASE MenuChoice(3, 1, 13)
CASE 1: PUT (190, 119), background, PSET: GOTO 1
CASE 2
FOR x = 2 TO 31
FOR y = 2 TO 22
PUTimage x, y, 1000
ground(x, y) = 0
NEXT
NEXT
FOR x = 2 TO 8
PUTimage x, 23, 1000
ground(x, 23) = 0
PUTimage x + 22, 23, 1000
ground(x + 22, 23) = 0
NEXT
PUTimage 31, 23, 1000
ground(31, 23) = 0
hasname = 0
GOTO 2
CASE 3
adios
END SELECT
END SUB
FUNCTION eng$ (number, language)
SELECT CASE language
CASE 1
OPEN "files\english.txt" FOR RANDOM AS #7 LEN = 35
CASE 2
OPEN "files\magyar.txt" FOR RANDOM AS #7 LEN = 35
END SELECT
GET #7, number, t$
CLOSE #7
eng$ = LTRIM$(RTRIM$((t$)))
END FUNCTION
FUNCTION MenuChoice% (selections, start, xstart)
sel = start
CONST MenuBright = "-15-"
CONST MenuDull = "-8-"
DO
FOR i = 1 TO selections
IF mch(i) > 0 THEN
w$ = eng$(mch(i), lang%)
IF i = sel THEN w$ = MenuBright + "[ " + "-5-" + w$ + MenuBright + " ]" ELSE w$ = MenuDull + " " + w$ + " "
center w$, xstart + ((i - 1) * 2)
END IF
NEXT i
DO: LOOP UNTIL INKEY$ = "": DO: a$ = UCASE$(INKEY$): LOOP WHILE a$ = ""
SOUND 150, 1
SELECT CASE a$
CASE CHR$(27): adios
CASE CHR$(0) + "P":
DO
sel = sel + 1: IF sel > selections THEN sel = 1
LOOP WHILE mch(sel) = 0
CASE CHR$(0) + "H":
DO
sel = sel - 1: IF sel < 1 THEN sel = selections
LOOP WHILE mch(sel) = 0
CASE CHR$(13), CHR$(32): side$ = "": EXIT DO
CASE CHR$(0) + "K": IF side$ = "?" THEN side$ = "-": EXIT DO
CASE CHR$(0) + "M": IF side$ = "?" THEN side$ = "+": EXIT DO
END SELECT
t# = TIMER + .05: DO: LOOP UNTIL TIMER >= t#
LOOP
MenuChoice% = sel
END FUNCTION
SUB mouse (cx, dx, bx)
DEF SEG = VARSEG(a(0))
POKE VARPTR(a(4)), &H92
CALL absolute(cx, VARPTR(a(0)))
cx = cx
POKE VARPTR(a(4)), &H91
CALL absolute(dx, VARPTR(a(0)))
dx = dx
POKE VARPTR(a(4)), &H93
CALL absolute(bx, VARPTR(a(0)))
DEF SEG
mclick = bx
mx = INT(dx / 20) + 1
my = INT(cx / 20) + 1
IF my < 2 THEN my = 2
IF my > 23 THEN my = 23
IF mx < 2 THEN mx = 2
IF mx > 31 THEN mx = 31
IF my = 23 AND mx > 8 AND mx < 24 THEN my = 22
IF my = 23 AND mx = 9 THEN mx = 8
IF my = 23 AND mx = 23 THEN mx = 24
END SUB
'Note:
'SW = 0-reset
'SW = 1-on
'SW = 2-off
'SW = 3-coordinates
a$ = INKEY$
DEF SEG
END SUB
SUB openmap
GET (190, 119)-(450, 334), background
LINE (190, 119)-(450, 334), 3, BF
LINE (190, 119)-(450, 334), 7, B
LINE (192, 121)-(448, 332), 7, B
PALETTE 5, 60 + 52 * 256
IF lang% = 1 THEN center "-12-O P E N M A P", 9 ELSE center "-12-P ^@ L Y A N Y I T ^@ S A", 9
SHELL "dir /b maps\*.lvl > temp"
OPEN "temp" FOR INPUT AS #1
OPEN "maps.dat" FOR RANDOM AS #2 LEN = 14
counter = 0
DO WHILE NOT EOF(1)
counter = counter + 1
LINE INPUT #1, map$
PUT #2, counter, map$
LOOP
CLOSE #1
CLOSE #2
KILL "TEMP"
mark = 1
max = counter
OPEN "maps.dat" FOR RANDOM AS #1 LEN = 14
GET #1, mark, map$
center UCASE$(MID$(map$, 1, 1)) + LCASE$(MID$(map$, 2, LEN(map$) - 5)), 10
OPEN "maps\" + map$ FOR INPUT AS #2
FOR x = 1 TO 32
FOR y = 1 TO 24
INPUT #2, g
IF g = 1 THEN PUT (208 + (x - 1) * 7, 158 + (y - 1) * 7), block, PSET
NEXT
NEXT
CLOSE #2
DO
DO: a$ = INKEY$: LOOP UNTIL a$ = ""
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
SELECT CASE a$
CASE CHR$(0) + "M": mark = mark + 1: center SPACE$(8), 10: IF mark > counter THEN mark = 1
CASE CHR$(0) + "K": mark = mark - 1: center SPACE$(8), 10: IF mark < 1 THEN mark = counter
CASE CHR$(13), CHR$(32): EXIT DO
CASE CHR$(27): CLOSE #1: KILL "maps.dat": PUT (190, 119), background, PSET: EXIT SUB
END SELECT
GET #1, mark, map$
center UCASE$(MID$(map$, 1, 1)) + LCASE$(MID$(map$, 2, LEN(map$) - 5)), 10
OPEN "maps\" + map$ FOR INPUT AS #2
FOR x = 1 TO 32
FOR y = 1 TO 24
INPUT #2, g
IF g = 1 THEN PUT (208 + (x - 1) * 7, 158 + (y - 1) * 7), block, PSET
IF g = 0 THEN LINE (208 + (x - 1) * 7, 158 + (y - 1) * 7)-(208 + (x - 1) * 7 + 6, 158 + (y - 1) * 7 + 6), 3, BF
NEXT
NEXT
CLOSE #2
LOOP
PUT (190, 119), background, PSET
OPEN "maps\" + map$ FOR INPUT AS #2
FOR x = 1 TO 32
FOR y = 1 TO 24
INPUT #2, ground(x, y)
IF x > 1 AND x < 32 AND y > 1 AND y < 24 THEN
IF ground(x, y) = 1 THEN PUTimage x, y, 875 ELSE PUTimage x, y, 1000
END IF
NEXT
NEXT
hasname = 1
CLOSE #2
CLOSE #1
KILL "maps.dat"
END SUB
SUB PUTimage (col, row, index)
x = (col - 1) * 20
y = (row - 1) * 20
IF index < 1000 THEN PUT (x, y), imageSET(index), PSET
IF index = 875 THEN ground(col, row) = 1 ELSE ground(col, row) = 0
IF row = 23 AND (col > 8 OR col < 24) THEN EXIT SUB
IF index = 1000 THEN LINE (x, y)-(x + 19, y + 19), 3, BF
END SUB
DEFSNG A-Z
SUB restorecolors
RESTORE Paletteinfo
FOR n = 0 TO 15
READ red, green, blue
OUT &H3C8, n
OUT &H3C9, red
OUT &H3C9, green
OUT &H3C9, blue
NEXT
END SUB
DEFINT A-Z
SUB savemap
GET (190, 119)-(450, 294), background
3
LINE (190, 119)-(450, 294), 3, BF
LINE (190, 119)-(450, 294), 7, B
LINE (192, 121)-(448, 292), 7, B
PALETTE 5, 60 + 52 * 256
center "-12-S A V E M A P", 11
IF hasname = 0 THEN
center "Enter map name:", 14
map$ = ask$("", 37, 16, 8, 1)
IF map$ = "exit" THEN CLOSE #2: PUT (190, 119), background, PSET: EXIT SUB
map$ = map$ + ".lvl"
END IF
OPEN "maps\" + map$ FOR APPEND AS #2
IF LOF(2) > 0 AND hasname = 0 THEN
center "-12-File already exists!!!", 16
SOUND 150, 1
t# = TIMER + 1
DO: LOOP UNTIL TIMER >= t#
center SPACE$(25), 16
CLOSE #2
GOTO 3
END IF
CLOSE #2
OPEN "maps\" + map$ FOR OUTPUT AS #2
hasname = 1
FOR x = 1 TO 32
FOR y = 1 TO 24
PRINT #2, ground(x, y)
NEXT
NEXT
CLOSE #2
PUT (190, 119), background, PSET
END SUB