NEW: CLS 0 REM SET TO 40X30 CHARS SCREEN 1 SCREEN 0 2 HM$=CHR$(19) : REM HOME CHARACTER 3 DIM EX(9) 4 FOR T=0TO8: READ C: EX(T)=C: NEXT : REM READ PETSCII EXPLOSION 5 TS = 0 : REM SET TOP SCORE 6 DIM CO(6): CO(0)=9: CO(1)=11: CO(2)=12: CO(3)=15: CO(4)=5: CO(5)=6 7 DIM IO(6): IO(0)=$66: IO(1)=$6F: IO(2)=$54: IO(3)=$75: IO(4)=$58: IO(5)=$1E 10 GOSUB 1000 : REM READ SPRITE DATA 11 GOSUB 1030 : REM SETUP LAYER 0 12 GOSUB 1050 : REM SETUP SPRITE 0 49 REM TITLE SCREEN ----------------- 50 REM SET COLORS TO BLACK AND WHITE, CLEAR SCREEN 51 GOSUB 1025 52 COLOR 2,0: CLS : GOSUB 4000: GOSUB 1020: REM PRINT TITLE 53 PRINT " y y y " 54 PRINT " y y y " 55 PRINT " y y y y" 56 PRINT " y y y y y y" 57 PRINT " y y y y" : COLOR 11,0 58 PRINT " FALLING SNAKE":COLOR 12 59 PRINT " FALLING SNAKE":COLOR 14 60 PRINT " **";:COLOR 1 61 PRINT "FALLING SNAKE";: COLOR 14: PRINT "**": PRINT: COLOR 15 62 PRINT : PRINT 63 COLOR 7: PRINT " HI-SCORE: "+STR$(TS) 64 PRINT : PRINT : PRINT : COLOR 15 65 PRINT " SIMON SNAKE IS FALLING" 66 PRINT " DOWN A HOLE!": PRINT 67 PRINT " AVOID ALL OBSTACLES": PRINT: PRINT 68 COLOR 7: PRINT " PRESS SPACE TO START" 70 BA$=CHR$(113):BB$=CHR$(119) : REM BALL SYMBOLS 71 COLOR 2,0 : PRINT " "+BA$ 72 PRINT " "+BA$:PRINT " "+BA$ 73 PRINT " "+BA$+BA$+BA$+BA$+BA$+BA$+BA$+BA$+BA$;:COLOR 8:PRINT BB$; 74 COLOR 2: PRINT "=" 75 X0=150: Y0=68: GOSUB 1070 : REM SET SPRITE X,Y 76 D0=0: GOSUB 1080 : REM SET SPRITE DATA OFFSET 77 GOSUB 1020 80 C0=C0+1: IF C0>2 THEN C0=0: C1=C1+1: IF C1>255 THEN C1=0: 82 VPOKE 1,$FA1C,C1: VPOKE 1,$FA1D,C1 85 GET A$: IF A$="" GOTO 80 : REM WAIT FOR KEY 99 REM START GAME ----------------- 100 COLOR 1,0: CLS : GOSUB 1025: GOSUB 3500 : GOSUB 1020 101 FOR T=1TO29:PRINT:NEXT 102 BO=29*256:SI=102:HI=83 : REM BOTTOMSCREENOFFSET, STONEIMAGE 103 PO=15*256:PI=81:PC=2:PX=20 : REM PLAYEROFFSET, PLAYERIMAGE, PLAYERCOLOR 104 DE=250 : REM DELAY VALUE 105 S=0 : REM SET SCORE 106 D0=4: GOSUB 1080 : REM SET SPRITE DATA OFFSET 107 OI=0 : REM OBSTACLE IMAGE 108 CC=0:L=0 199 REM GAME LOOP ----------------- 200 GET A$ 201 IF A$=CHR$(29) AND PX<40 THEN PX=PX+1 : REM GO RIGHT 202 IF A$=CHR$(157) AND PX>0 THEN PX=PX-1: REM GO LEFT 210 X=INT(RND(1)*40)*2: C=INT(RND(1)*15)+1 : REM GET RANDOM STONE POSITION 211 O=PO+(PX*2): PE=VPEEK( 0, O ) 212 IF PE<>32 THEN O0=O: C0=PE: D0=1: GOSUB 500 : IF D0=1 THEN GOTO 400 225 R=( INT(RND(1)*5) ): IF RND(1) > .95 THEN R=5 226 C=CO(R): I=IO(R) 231 VPOKE 0, BO+X, I: VPOKE 0, BO+X+1, C 235 VPOKE 0, PO+(PX*2), PI: VPOKE 0, PO+(PX*2)+1, PC 280 CL=CL+1: C2=C2+1: TI=0 281 IF CL>2 THEN CL=0: CC=1-CC : LO=255:HI=8: IF CC=1 THEN LO=15:HI=1 282 IF C2>10 THEN C2=0: N0=DE: O0=2: GOSUB 3010 : N0=S: O0=56: GOSUB 3000 284 VPOKE 1,$FA0C,LO: VPOKE 1,$FA0D,HI 295 X0=PX*8: Y0=122: GOSUB 1070 : REM SET SPRITE X,Y 300 FOR W=1 TO DE: NEXT : REM DELAY, SLOW DOWN CODE 305 PRINT : S=S+1 : DE=DE-1 : IF DE<0 THEN DE=0 310 GOTO 200 399 REM GAME OVER ----------------- 400 GOSUB 1025 : IF S>TS THEN TS=S 401 REM DRAW EXPLOSION 402 FOR XX=0TO2:FOR YY=0TO2 403 XS=XX+PX-1: YS=YY+15-1 : REM SCREEN X,Y 404 IF PX<1 THEN XS=XX+1 : REM CHECK PLAYER X TO BE ON SCREEN 405 IF PX>38 THEN XS=XX+38 406 DO=XX+(YY*3):SO=(XS*2)+(YS*256) : REM CALC DATA OFFSET, SCREEN OFFSET 407 VPOKE 0,SO,EX(DO) : REM WRITE TO SCREEN 408 VPOKE 0,SO+1,1 : REM WRITE TO SCREEN 409 NEXT:NEXT 410 REM EXPLOSION COLOR EFFECT 411 FOR T=1 TO 50 412 C0=INT(RND(1)*255) 413 C1=INT(RND(1)*255) 414 VPOKE 1,$FA00,C0: VPOKE 1,$FA01,C1 415 NEXT: VPOKE 1,$FA00,0: VPOKE 1,$FA01,0 421 PRINT HM$:PRINT:PRINT:COLOR 14: PRINT " GAME OVER": PRINT 422 COLOR 1: PRINT " SCORE: "+STR$(S); 425 PRINT " HI-SCORE="+STR$(TS) 430 COLOR 7: PRINT: PRINT " PRESS SPACE TRY AGAIN" : PRINT:PRINT 440 GET A$ 441 C0=C0+1: IF C0>2 THEN C0=0: C1=C1+1: IF C1>255 THEN C1=0: 442 VPOKE 1,$FA1C,C1: VPOKE 1,$FA1D,C1 450 IF A$ = "" OR A$=CHR$(29) OR A$=CHR$(157) THEN GOTO 440 452 GOTO 50 500 REM CHECK COLISSION 501 D0 = 1 502 IF C0 = $58 THEN S=S+50 : D0=0: GOSUB600 : REM GOT FOOD = EXTRA POINTS 503 IF C0 = $1E THEN DE=DE+100 : D0=0: GOSUB630 : REM GOT "SLOW DOWN" SYMBOL 505 RETURN 600 VPOKE 0,O0-256,$35 : VPOKE 0,2+O0-256,$30 601 VPOKE 0,1+O0-256,1 : VPOKE 0,3+O0-256,1 602 RETURN 630 VPOKE 0,O0-4-256,$13 : VPOKE 0,2+O0-4-256,$0C: 631 VPOKE 0,4+O0-4-256,$0F :VPOKE 0,6+O0-4-256,$17 632 VPOKE 0,1+O0-4-256,1 : VPOKE 0,3+O0-4-256,1 633 VPOKE 0,5+O0-4-256,1 : VPOKE 0,7+O0-4-256,1 634 RETURN 999 REM SPRITE ROUTINES 1000 REM READ SPRITE DATA 1001 FOR I=O TO 255 1011 READ PX 1012 VPOKE $0,$4000+I,PX 1013 NEXT I 1014 RETURN 1020 POKE $9F29,($40 OR PEEK($9F29)) 1021 RETURN 1025 POKE $9F29,PEEK($9F29) AND ($FF - $40) 1026 RETURN 1030 REM SETUP 2 LAYERS SCREEN 1031 POKE $9F29,($20 OR $10 OR PEEK($9F29)) 1032 POKE $9F2F, PEEK( $9F36) 1033 POKE $9F2D, PEEK( $9F34) 1034 POKE $9F2E, $00: POKE $9F35, $0F 1035 COLOR 1,0: CLS 1040 RETURN 1050 POKE $9F29,($40 OR PEEK($9F29)): PO=0 1051 REM SET SPRITE DATA 1053 VPOKE $1,$FC11,$02 : REM 4BPP, ADDRESS $04000 1060 VPOKE $1,$FC16,$0C : REM NO COLLISION, ZDEPTH 3, NO FLIP 1061 VPOKE $1,$FC17,$50+PO : REM 16X16 PIXELS, PALETTE OFFSET PO 1062 RETURN 1070 REM SET SPRITE 0,X0,Y0 1071 VPOKE $1,$FC12,X0 AND $FF 1072 VPOKE $1,$FC13,(X0 AND $0300)/$100 1073 VPOKE $1,$FC14,Y0 : REM YPOS 128 1074 VPOKE $1,$FC15,$00 1075 RETURN 1080 REM SET SPRITE IMG DATA 1081 VPOKE $1,$FC10,D0 1082 RETURN 2499 REM CLEAR LINE FAST(O0,P0,C0) 2500 FOR X=0TO39 STEP 10: O=(X*2)+O0 2501 VPOKE 0,O,P0: VPOKE 0,O+1,C0:VPOKE 0,O+2,P0: VPOKE 0,O+3,C0 2503 VPOKE 0,O+4,P0: VPOKE 0,O+5,C0:VPOKE 0,O+6,P0: VPOKE 0,O+7,C0 2505 VPOKE 0,O+8,P0: VPOKE 0,O+9,C0:VPOKE 0,O+10,P0: VPOKE 0,O+11,C0 2507 VPOKE 0,O+12,P0: VPOKE 0,O+13,C0:VPOKE 0,O+14,P0: VPOKE 0,O+15,C0 2509 VPOKE 0,O+16,P0: VPOKE 0,O+17,C0:VPOKE 0,O+18,P0: VPOKE 0,O+19,C0 2515 NEXT 2516 RETURN 2999 REM UPDATE SCORE 3000 S$=STR$(N0 + 1000000) 3001 FOR T=2TOLEN(S$)-1 3002 C=ASC(MID$(S$,T+1)) 3004 VPOKE 0,7676+O0+(T*2),C 3005 NEXT 3006 RETURN 3009 REM UPDATE SPEED 3010 S$=STR$(N0 + 1000) 3011 FOR T=2TOLEN(S$)-1 3012 C=ASC(MID$(S$,T+1)) 3014 VPOKE 0,7676+O0+(T*2),C 3015 NEXT 3016 RETURN 3499 REM SETUP LAYERS FOR PLAYIN 3500 O0=7680:P0=32:C0=$5D:GOSUB 2500 3501 O0=7936:P0=$79:C0=$DB:GOSUB 2500 3502 OF=7936+256:P0=32:C0=0 3503 FOR T=0TO27:O0=OF+(T*256):GOSUB2500:NEXT 3510 RETURN 3099 REM SETUP LAYERS FOR TITLE/HSCORE/ENDGAME 4000 OF=7936-256:P0=32:C0=0 4001 FOR T=0TO29:O0=OF+(T*256):GOSUB2500:NEXT 4002 RETURN 10000 REM PETSCI EXPLOSION 10001 DATA $4D, $20 , $4E, $20, $D6, $20, $4E, $20, $4D 11000 DATA $00, $00, $22, $22, $22, $22, $00, $00 11001 DATA $00, $22, $82, $82, $82, $82, $22, $00 11002 DATA $02, $88, $88, $28, $28, $28, $28, $20 11003 DATA $28, $08, $08, $22, $22, $22, $82, $8b 11004 DATA $28, $88, $88, $20, $00, $28, $28, $b0 11005 DATA $02, $82, $82, $00, $02, $82, $8b, $00 11006 DATA $00, $22, $20, $00, $28, $22, $b0, $00 11007 DATA $00, $20, $20, $28, $22, $2b, $00, $00 11008 DATA $00, $00, $02, $82, $2b, $b0, $00, $00 11009 DATA $00, $00, $28, $2b, $b0, $00, $00, $00 11010 DATA $00, $00, $82, $00, $00, $00, $00, $00 11011 DATA $00, $00, $22, $92, $00, $00, $00, $00 11012 DATA $00, $00, $0b, $22, $92, $92, $00, $00 11013 DATA $00, $00, $00, $00, $22, $29, $92, $00 11014 DATA $00, $00, $00, $00, $00, $00, $22, $20 11015 DATA $00, $00, $00, $00, $00, $00, $00, $22 12000 DATA $00, $22, $22, $00, $00, $00, $00, $00 12001 DATA $02, $88, $88, $20, $00, $00, $00, $00 12002 DATA $28, $08, $80, $82, $00, $00, $00, $00 12003 DATA $28, $88, $88, $82, $00, $00, $00, $00 12004 DATA $02, $88, $88, $20, $00, $00, $00, $00 12005 DATA $00, $28, $82, $00, $00, $00, $00, $00 12006 DATA $00, $02, $20, $00, $00, $00, $00, $00 12007 DATA $00, $20, $02, $00, $00, $00, $00, $00 12008 DATA $00, $00, $00, $00, $00, $00, $00, $00 12009 DATA $00, $00, $00, $00, $00, $00, $00, $00 12010 DATA $00, $00, $00, $00, $00, $00, $00, $00 12011 DATA $00, $00, $00, $00, $00, $00, $00, $00 12012 DATA $00, $00, $00, $00, $00, $00, $00, $00 12013 DATA $00, $00, $00, $00, $00, $00, $00, $00 12014 DATA $00, $00, $00, $00, $00, $00, $00, $00 12015 DATA $00, $00, $00, $00, $00, $00, $00, $00 50000 REM END