Sneekie

Source Listing

The original 1988 GW-BASIC source

A scanned magazine listing being checked against recovered GW-BASIC code.
Download
10 REM SNEEKIE
20 REM MS(X)DOS Computer Magazine
30 REM GW-Basic versie
40 REM door HerbySoft
70 REM
80 DEFINT A-Y: SCREEN 0: WIDTH 80: CLS: ZORE=0: RANDOMIZE TIMER: DEF SEG=&H0
90 IF PEEK(&H449)=7 THEN VIDEO=&HB000 ELSE VIDEO=&HB800
100 DEF SEG=VIDEO: CLS: DIM T(15000),S(168),B(10),D(80,3)
110 LOCATE 1, 1: PRINT CHR$(218);STRING$(78,CHR$(196));CHR$(191);
120 LOCATE 2, 1: PRINT CHR$(179);SPC(78);CHR$(179);
130 LOCATE 2,17: PRINT "**** Sneekie **** (c) juli '88 by HerbySoft";
140 LOCATE 22, 1: PRINT CHR$(179);SPC(78);CHR$(179);
150 LOCATE 22, 6: PRINT "10 punten -50 punten Highscore";
160 LOCATE 23, 1: PRINT CHR$(179);SPC(78);CHR$(179);
170 LOCATE 22,55: PRINT "Level Score";
180 LOCATE 23, 6: PRINT "25 punten Steen <ESC> vastgelopen";
190 LOCATE 23,55: PRINT "Lives Bonus";
200 LOCATE 24, 1: PRINT CHR$(192);STRING$(78,CHR$(196));CHR$(217);
210 POKE 3396,1: POKE 3556,10: POKE 3526,5: POKE 3366,3
220 '
230 ZCORE=0: LIVE=3
240 FOR LEVEL=1 TO 32
250 FOR I=1 TO 17: LOCATE 3+I,1: PRINT CHR$(179);SPC(78);CHR$(179): NEXT
260 LOCATE 3,1: PRINT CHR$(195);STRING$(78,CHR$(196));CHR$(180)
270 LOCATE 21,1: PRINT CHR$(195);STRING$(78,CHR$(196));CHR$(180)
280 T(1)=2000: T(2)=1840: BTEL=2: ETEL=1
290 POKE T(BTEL),219: POKE T(ETEL),186: POKE T(BTEL)+1,15
300 E=72: F=72: HART=0: KLAVER=0: BONUS=10000: OP=0: GOSUB 1190
310 ON LEVEL GOSUB 2320,2330,2340,2350,2360,2370,2380,2390,2410,2420,2430,2440,2450,2460,2470,2480,2320,2330,2340,2350,2360,2370,2380,2390,2410,2420,2430,2440,2450,2460,2470,2480
320 LOCATE 23,73: PRINT USING "######";BONUS
330 LOCATE 23,61: PRINT USING "##";LIVE: LOCATE 22,61: PRINT USING "##";LEVEL
340 FOR I=1 TO AANTAL
350 L=1: GOSUB 1150: L=3: GOSUB 1150: IF K1=1 THEN HART=HART+1
360 NEXT
370 FOR I=1 TO 42: FOR I3=0 TO 3: S(I+I3*42)=PEEK(1497+I+I3*160): NEXT: NEXT
380 GOSUB 2280: LOCATE 11,37: PRINT "Level ";LEVEL
390 LOCATE 12,32: PRINT "Druk op een toets"
400 DEF SEG=0: POKE 1050,PEEK(1052): DEF SEG=VIDEO: A$=INPUT$(1)
410 FOR I=1 TO 42: FOR I3=0 TO 3: POKE 1497+I+I3*160,S(I+I3*42): NEXT: NEXT
420 WHILE+ KLAVER+HART>0
430 A$=INKEY$: Z2=0: Z1=TIMER
440 WHILE+ A$="" AND Z2<Z
450 Z2=TIMER-Z1: A$=INKEY$
460 WEND
470 IF BONUS>0 THEN BONUS=BONUS-BMIN
480 LOCATE 23,73: PRINT USING "######";BONUS
490 IF LEN(A$)<>1 THEN GOTO 640
500 IF ASC(A$)<>27 THEN GOTO 910
510 FOR I=1 TO 3
520 SOUND 2000,3: SOUND 3000,3: SOUND 4000,3: SOUND 3000,3
530 NEXT
540 IF PLAY(0)<>0 THEN GOTO 540
550 WHILE+ ETEL<=BTEL
560 Z=TIMER
570 Z1=TIMER-Z: IF Z1<0.075 THEN GOTO 570
580 POKE T(ETEL),32: POKE T(ETEL)+1,7: SOUND 1500,0.1
590 ETEL=ETEL+1: OP=BMIN*-1: GOSUB 1190
600 WEND
610 LIVE=LIVE-1: HART=0: KLAVER=0
620 IF LIVE=0 THEN LEVEL=32 ELSE LEVEL=LEVEL-1
630 GOTO 1080
640 IF LEN(A$)=2 THEN E=ASC(MID$(A$,2,1))
650 A=T(BTEL)
660 IF E=68 THEN GOTO 1080
670 IF E=67 THEN LIVE=LIVE+1: GOTO 1080
680 IF E=80 THEN A=A+160 ELSE IF E=72 THEN A=A-160
690 IF E=77 THEN A=A+2 ELSE IF E=75 THEN A=A-2
700 D=PEEK(A)
710 IF D<>32 THEN GOTO 740
720 POKE T(ETEL),32: POKE T(ETEL)+1,7: SOUND 1500,0.1: ETEL=ETEL+1
730 GOTO 920
740 IF D<>5 THEN GOTO 770
750 L=1: GOSUB 1150: GOSUB 2260
760 OP=25: GOSUB 1190: KLAVER=KLAVER-1: GOTO 920
770 IF D<>3 THEN GOTO 800
780 IF LEVEL>16 THEN L=5: GOSUB 1150: IF K1=1 THEN KLAVER=KLAVER+1
790 L=1: GOSUB 1150: GOSUB 2260: OP=10: GOSUB 1190: HART=HART-1: GOTO 920
800 IF D<>10 THEN GOTO 870
810 TA=A: IF E=80 THEN TA=TA+160 ELSE IF E=72 THEN TA=TA-160
820 IF E=77 THEN TA=TA+2 ELSE IF E=75 THEN TA=TA-2
830 D=PEEK(TA)
840 IF D<>32 THEN GOTO 910
850 POKE TA,10: POKE T(ETEL),32: POKE T(ETEL)+1,7
860 SOUND 1500,0.1: ETEL=ETEL+1: GOTO 920
870 IF D<>1 THEN GOTO 900
880 FOR I=50 TO 1 STEP -1: SOUND 600+75*I,0.35: NEXT
890 OP=-50: GOSUB 1190: L=1: GOSUB 1150: GOTO 920
900 IF D=24 OR D=26 OR D=27 THEN GOTO 510
910 E=F: OP=BMIN*-1: GOSUB 1190: SOUND 1000,5: GOTO 1020
920 IF (E=77 AND F=77) OR (E=75 AND F=75) THEN POKE T(BTEL),205: GOTO 980
930 IF (E=80 AND F=80) OR (E=72 AND F=72) THEN POKE T(BTEL),186: GOTO 980
940 IF (E=80 AND F=77) OR (E=75 AND F=72) THEN POKE T(BTEL),187: GOTO 980
950 IF (E=72 AND F=77) OR (E=75 AND F=80) THEN POKE T(BTEL),188: GOTO 980
960 IF (E=80 AND F=75) OR (E=77 AND F=72) THEN POKE T(BTEL),201: GOTO 980
970 IF (E=72 AND F=75) OR (E=77 AND F=80) THEN POKE T(BTEL),200: GOTO 980
980 BTEL=BTEL+1: T(BTEL)=A: F=E: POKE T(BTEL),219
990 IF BTEL=15000 THEN GOTO 510
1000 FOR I=BTEL TO ETEL STEP -2: POKE T(I)+1,15: POKE T(I-1)+1,7: NEXT
1010 ON LEVEL GOSUB 1170,1170,1170,1170,2130,1830,1970,2130,1170,1170,1170,1170,2130,1830,1970,2130,1170,1170,1170,1170,2130,1830,1970,2130,1170,1170,1170,1170,2130,1830,1970,2130
1020 WEND
1030 WHILE+ BONUS>0
1040 OP=5: GOSUB 1190: BONUS=BONUS-5: LOCATE 23,74
1050 PRINT USING "#####";BONUS: SOUND 3000,0.1
1060 WEND
1070 LIVE=LIVE+1
1080 NEXT LEVEL
1090 GOSUB 2280: LOCATE 11,33: PRINT "Einde"
1100 LOCATE 12,32: PRINT "Nog een keer (j/n)"
1110 DEF SEG=0: POKE 1050,PEEK(1052): DEF SEG=VIDEO
1120 A$=INPUT$(1): IF INSTR("JjNn",A$)=0 THEN GOTO 1120
1130 IF A$="J" OR A$="j" THEN GOTO 230 ELSE CLS: PRINT "Bedankt voor het spelen": END
1140 '
1150 K1=0: K=INT(RND*2720+480): IF K MOD 2=1 THEN K=K+1
1160 IF PEEK(K)=32 THEN POKE K,L: K1=1
1170 RETURN
1180 '
1190 ZCORE=ZCORE+OP: LOCATE 22,73: PRINT USING "######";ZCORE
1200 IF ZCORE>ZORE THEN ZORE=ZCORE: LOCATE 22,46: PRINT USING "######";ZORE
1210 RETURN
1220 '
1230 FOR I=1 TO 39: LOCATE 8,1+I: PRINT CHR$(196): LOCATE 16,80-I: PRINT CHR$(196): NEXT
1240 FOR I=0 TO 8
1250 LOCATE 21-I,11: PRINT CHR$(179): LOCATE 3+I,70: PRINT CHR$(179): LOCATE 21-I,26: PRINT CHR$(179)
1260 LOCATE 3+I,55: PRINT CHR$(179): LOCATE 15,22+I: PRINT CHR$(196): LOCATE 6,51+I: PRINT CHR$(196)
1270 LOCATE 15,7+I: PRINT CHR$(196): LOCATE 6,66+I: PRINT CHR$(196): LOCATE 18,7+I: PRINT CHR$(196)
1280 LOCATE 9,66+I: PRINT CHR$(196): LOCATE 18,22+I: PRINT CHR$(196): LOCATE 9,51+I: PRINT CHR$(196)
1290 FOR I1=6 TO 10
1300 LOCATE I1,5+I*4: PRINT CHR$(179): LOCATE 8+I1,44+I*4: PRINT CHR$(179)
1310 NEXT
1320 LOCATE 8,5+I*4: PRINT CHR$(197): LOCATE 16,44+I*4: PRINT CHR$(197)
1330 NEXT
1340 LOCATE 3,70: PRINT CHR$(194): LOCATE 21,11: PRINT CHR$(193): LOCATE 3,55: PRINT CHR$(194)
1350 LOCATE 15,26: PRINT CHR$(197): LOCATE 6,55: PRINT CHR$(197): LOCATE 18,26: PRINT CHR$(197)
1360 LOCATE 9,55: PRINT CHR$(197): LOCATE 15,11: PRINT CHR$(197): LOCATE 6,70: PRINT CHR$(197)
1370 LOCATE 18,11: PRINT CHR$(197): LOCATE 9,70: PRINT CHR$(197): LOCATE 21,26: PRINT CHR$(193)
1380 RETURN
1390 '
1400 FOR Y=4 TO 20 STEP 2: FOR I=0 TO 1: Q=1: FOR A=1 TO 6
1410 IF Q=1 THEN Q=0: Y=Y+1 ELSE Q=1: Y=Y-1
1420 IF Y<21 THEN X=17+A+40*I: GOSUB 1480
1430 NEXT: NEXT: NEXT
1440 I1=7
1450 FOR X=2 TO 78 STEP 2: FOR I=0 TO 1
1460 Y=7+8*I: GOSUB 1480: Y=8+8*I: X=X+1: GOSUB 1480: Y=9+8*I: X=X-1: GOSUB 1480
1470 NEXT: NEXT: RETURN
1480 POKE (Y-1)*160+(X-1)*2,10: RETURN
1490 '
1500 FOR I=2 TO 79: FOR I1=1 TO 2: LOCATE 3+6*I1,I: PRINT CHR$(196): NEXT: NEXT
1510 FOR I=4 TO 20: FOR I1=1 TO 7
1520 LOCATE 3,10*I1: PRINT CHR$(194): LOCATE 21,10*I1: PRINT CHR$(193)
1530 LOCATE I,10*I1: PRINT CHR$(179)
1540 FOR I2=1 TO 2
1550 LOCATE 3+6*I2,10*I1: PRINT CHR$(197): LOCATE 3+6*I2,80: PRINT CHR$(180)
1560 LOCATE 3+6*I2, 1: PRINT CHR$(195)
1570 NEXT: NEXT: NEXT: RESTORE 1500
1580 FOR I=1 TO 13: READ C1,C2,C3,C4
1590 LOCATE C1,C2: PRINT " ": LOCATE C1,C2-1: PRINT CHR$(180)
1600 LOCATE C1,C2+2: PRINT CHR$(195): LOCATE C1,C2+1: PRINT " "
1610 LOCATE C3+2,C4: PRINT CHR$(194): LOCATE C3+1,C4: PRINT " "
1620 LOCATE C3,C4: PRINT " ": LOCATE C3-1,C4: PRINT CHR$(193)
1630 NEXT: RETURN: DATA 15,5
1640 DATA 6,10,9,35,6,20,9,75,6,40,9,55,6,70,9,65,18,10,15,55,18,20,15,65,18,30
1650 DATA 15,75,18,40,9,45,12,20,9,15,12,30,9,15,18,50,9,15,6,50,9,15,18,60
1660 '
1670 FOR I=1 TO 9: B(I)=6+I
1680 LOCATE 3,8*I: PRINT CHR$(194)
1690 FOR I1=4 TO 20: LOCATE I1,8*I: PRINT CHR$(179): NEXT
1700 LOCATE 21,8*I: PRINT CHR$(193): LOCATE B(I)-1,I*8: PRINT "┴
1710 FOR I1=0 TO 2: LOCATE B(I)+I1,I*8: PRINT " ": NEXT
1720 LOCATE B(I)+3,I*8: PRINT CHR$(194)
1730 NEXT: RETURN
1740 '
1750 GOSUB 1670
1760 FOR I1=4 TO 20 STEP 2: FOR I2=0 TO 9
1770 Y=I1: X=I2*8+3: GOSUB 1480: Y=I1: X=I2*8+5: GOSUB 1480
1780 IF Y<20 THEN Y=I1+1: X=I2*8+4: GOSUB 1480
1790 NEXT: NEXT: RETURN
1800 '
1810 FOR I=2 TO 79 STEP 2: D(I,1)=5+INT(RND*14): D(I,2)=32: NEXT: GOSUB 1830: RETURN
1820 '
1830 FOR I=2 TO 78 STEP 2
1840 I2=(D(I,1)-1)*160+(I-1)*2
1850 IF D(I,1)=4 THEN POKE I2,D(I,2): POKE I2+1,7: D(I,1)=21: I2=I2+2720
1860 IF PEEK(I2-160)=219 THEN RETURN 510
1870 IF PEEK(I2-160)>100 THEN GOTO 1900
1880 IF D(I,1)<>21 THEN POKE I2,D(I,2): POKE I2+1,7
1890 D(I,1)=D(I,1)-1: D(I,2)=PEEK(I2-160): POKE I2-160,24: POKE I2-159,15
1900 NEXT: RETURN
1910 '
1920 FOR I=4 TO 20: FOR A=0 TO 1
1930 D(I+A*20,1)=RND*38*2+2+A: D(I+A*20,2)=32
1940 NEXT: NEXT
1950 D(12,1)=14: D(13,1)=6: D(32,1)=65: D(33,1)=55: GOSUB 1970: RETURN
1960 '
1970 FOR I=4 TO 20
1980 I2=(I-1)*160+(D(I,1)-1)*2
1990 IF D(I,1)=79 THEN POKE I2,D(I,2): POKE I2+1,7: D(I,1)=1: I2=I2-156
2000 D=PEEK(I2+2): IF D=219 THEN RETURN 510
2010 IF D=27 THEN POKE I2+2,D(I+20,2): D(I+20,2)=26
2020 IF D>100 THEN GOTO 2050
2030 IF D(I,1)<>1 THEN POKE I2,D(I,2): POKE I2+1,7
2040 D(I,1)=D(I,1)+1: D(I,2)=PEEK(I2+2): POKE I2+2,26: POKE I2+3,15
2050 L=I+20: I2=(I-1)*160+(D(L,1)-1)*2
2060 IF D(L,1)=2 THEN POKE I2,D(L,2): POKE I2+1,7: D(L,1)=80: I2=I2+156
2070 D=PEEK(I2-2): IF D=219 THEN RETURN 510
2080 IF D>100 OR D=26 THEN GOTO 2110
2090 IF D(L,1)<>80 THEN POKE I2,D(L,2): POKE I2+1,7
2100 D(L,1)=D(L,1)-1: D(L,2)=PEEK(I2-2): POKE I2-2,27: POKE I2-1,15
2110 NEXT: RETURN
2120 '
2130 FOR D1=1 TO 9
2140 D2=(B(D1)-1)*160+(D1*8-1)*2: IF B(D1)<>4 THEN GOTO 2190
2150 A=PEEK(D2+2080)+PEEK(D2+2240)+PEEK(D2+2400)
2160 IF A<>96 THEN GOTO 2240
2170 POKE D2+2560,179: POKE D2+2080,179: POKE D2+2240,179: POKE D2+2400,179
2180 POKE D2,32: POKE D2+160,32: POKE D2+320,32: POKE D2+1920,179
2190 A=PEEK(D2)+PEEK(D2+160)+PEEK(D2+320)
2200 IF A<>96 THEN GOTO 2240
2210 IF B(D1)<>4 THEN POKE D2-160,179
2220 POKE D2,193: POKE D2+160,32: POKE D2+320,32: POKE D2+480,32
2230 POKE D2+640,194: B(D1)=B(D1)+1: IF B(D1)=17 THEN B(D1)=4
2240 NEXT: RETURN
2250 '
2260 PLAY "mb": SOUND 2500,0.1: SOUND 3500,0.1: SOUND 5000,0.1: RETURN
2270 '
2280 LOCATE 10,30: PRINT CHR$(201);STRING$(19,CHR$(205));CHR$(187)
2290 LOCATE 11,30: PRINT CHR$(186);SPC(19);CHR$(186): LOCATE 12,30: PRINT CHR$(186);SPC(19);CHR$(186)
2300 LOCATE 13,30: PRINT CHR$(200);STRING$(19,CHR$(205));CHR$(188): RETURN
2310 '
2320 Z=999: AANTAL= 75: BMIN=10: RETURN
2330 Z=999: AANTAL= 75: BMIN=10: GOSUB 1230: RETURN
2340 Z=999: AANTAL= 75: BMIN=10: GOSUB 1500: RETURN
2350 Z=999: AANTAL= 50: BMIN=10: GOSUB 1400: RETURN
2360 Z=999: AANTAL= 50: BMIN=10: GOSUB 1670: RETURN
2370 Z=999: AANTAL= 50: BMIN=10: GOSUB 1810: RETURN
2380 Z=999: AANTAL= 50: BMIN=10: GOSUB 1920: RETURN
2390 Z=999: AANTAL= 50: BMIN=10: GOSUB 1750: RETURN
2400 '
2410 Z= 0.4: AANTAL=125: BMIN= 5: RETURN
2420 Z= 0.6: AANTAL=125: BMIN= 5: GOSUB 1230: RETURN
2430 Z= 0.6: AANTAL=125: BMIN= 5: GOSUB 1500: RETURN
2440 Z= 0.9: AANTAL=100: BMIN= 5: GOSUB 1400: RETURN
2450 Z= 0.9: AANTAL=100: BMIN= 5: GOSUB 1670: RETURN
2460 Z=1 : AANTAL=100: BMIN= 5: GOSUB 1810: RETURN
2470 Z=1 : AANTAL=100: BMIN= 5: GOSUB 1920: RETURN
2480 Z=1.2: AANTAL=100: BMIN= 5: GOSUB 1750: RETURN
A glowing Sneekie snake escaping from the BASIC source as PEEK and POKE beams scatter game symbols.