10 PROC setup() 20 PROC menu() 30 PROC game() 40 GO TO 20 98 SPRITE CLEAR : SPRITE PRINT 0 99 STOP 1000 DEFPROC game() 1010 CLS : BORDER 0: SPRITE CLEAR : TILE DIM 18,0,16,16: TILE BANK 17 1020 FOR i=0 TO 185: BANK 18 POKE i,6: NEXT i 1030 TILE 16,11 AT 0,0 TO 0,1 1035 PRINT AT 0,0; PAPER BIN 11000011," ", 1040 LET %x=7: LET %y=5: LET fr=0: LET face=1: LET delay=0: LET power=0 1050 PROC char(%x<<4,%y<<4,face,fr,10): SPRITE PRINT 1 1099 REM *** MAIN LOOP *** 1100 IF RND <0.02 THEN LET fr=1: LET delay=5 1105 OUT 9275,7: OUT 9531,2 1110 PROC char(%x<<4,%y<<4,face,fr,10): IF delay >0 THEN LET delay=delay-1: IF delay=0 THEN LET fr=0 1115 PRINT AT 0,0; PAPER BIN 11000011; INK %$ff;" Power: ";power,, 1120 LET k$= INKEY$ 1130 IF k$="q" THEN PROC up(): ELSE IF k$="a" THEN PROC down(): ELSE IF k$="o" THEN PROC left(): ELSE IF k$="p" THEN PROC right(): ELSE IF (k$="m" OR k$=" ") AND power>=4 THEN PROC zap(6): LET power=power-4 1140 LET fr=0: PROC char(%x<<4,%y<<4,face,fr,10) 1150 PROC getTile(%x,%y) TO %t 1160 IF %t=5 THEN PROC dead(): GO TO 1 1170 IF %t=7 THEN PROC zap(8): GO TO 1110 1180 IF %t=8 THEN PROC power(): GO TO 1110 1200 GO TO 1110 1500 DEFPROC dead() 1510 FOR %i=1 TO 5 1520 PROC char(%x<<4,%y<<4,-1,1,10): PAUSE 1 1521 PROC char(%x<<4,%y<<4,-1,3,10): PAUSE 1 1522 PROC char(%x<<4,%y<<4,1,1,10): PAUSE 1 1523 PROC char(%x<<4,%y<<4,1,2,10): PAUSE 1 1530 NEXT %i 1540 SPRITE CLEAR 1998 PAUSE 0 1999 ENDPROC 2000 DEFPROC left() 2010 LET face=-1: LET s=-1: LET t=0: LET fr=9 2020 IF %x>0 THEN PROC walk() 2099 ENDPROC 2100 DEFPROC right() 2110 LET face=1: LET s=1: LET t=0: LET fr=9 2120 IF %x<15 THEN PROC walk() 2199 ENDPROC 2200 DEFPROC up() 2210 LET s=0: LET t=-1: LET fr=27 2220 IF %y>0 THEN PROC walk() 2299 ENDPROC 2300 DEFPROC down() 2310 LET s=0: LET t=1: LET fr=18 2320 IF %y<10 THEN PROC walk() 2399 ENDPROC 3000 DEFPROC walk() 3002 LET start=fr: LET end=start+6 3005 PROC dropOrb() 3006 LET a=%x<<4: LET b=%y<<4 3007 LET x=%x: LET %x=x+s 3008 LET y=%y: LET %y=y+t 3009 PROC choosePit(): LET %m=%f: LET %n=%g: PROC choosePit(): LET %o=%f: LET %p=%g 3010 FOR %i=0 TO 7 3015 OUT 9275,7: OUT 9531,2 3020 LET a=a+2*s: LET b=b+2*t 3030 PROC char(a,b,face,fr,10) 3035 LET fr=fr+1: IF fr=end THEN LET fr=start 3040 LET %f=%m: LET %g=%n: PROC lowerPit() 3050 LET %f=%o: LET %g=%p: PROC lowerPit() 3080 NEXT %i 3099 ENDPROC 3100 DEFPROC dropOrb() 3120 PROC drawTile(%x,%y,7) 3199 ENDPROC 3200 DEFPROC choosePit() 3210 LET %f=%x: LET %g=%y: LET %d= INT ( RND *4) 3220 IF %d=0 THEN LET %f=%x-1: ELSE IF %d=1 THEN LET %f=%x+1: ELSE IF %d=2 THEN LET %g=%y-1: ELSE IF %d=3 THEN LET %g=%y+1 3250 ENDPROC 3300 DEFPROC lowerPit() 3330 IF %(f=$ffff) | (f=16) | (g=$ffff) | (g=11) THEN ENDPROC 3340 PROC getTile(%f,%g) TO %t 3350 IF %t=5 THEN ENDPROC 3360 LET %t=%t+9: IF %t>34 THEN LET %t=5 3365 IF %t=17 THEN LET %t=16 3370 PROC drawTile(%f,%g,%t) 3399 ENDPROC 3400 DEFPROC raisePit() 3410 IF %(f=$ffff) | (f=16) | (g=$ffff) | (g=11) THEN ENDPROC 3420 PROC getTile(%f,%g) TO %t 3430 IF %(t>5) & (t<9) THEN ENDPROC 3440 IF %t=5 THEN LET %t=33: ELSE LET %t=%t-9 3450 PROC drawTile(%f,%g,%t) 3499 ENDPROC 4000 DEFPROC zap(t) 4005 FOR %i=1 TO 3 4010 IF %x>0 THEN PROC bolt(%(x-1)<<4+8,%y<<4, BIN 00000001,1) 4011 IF %x<15 THEN PROC bolt(%(x+1)<<4-8,%y<<4, BIN 00001001,2) 4012 IF %y>0 THEN PROC bolt(%x<<4,%(y-1)<<4+8, BIN 00000011,3) 4013 IF %y<10 THEN PROC bolt(%x<<4,%(y+1)<<4-8, BIN 00000011,4) 4020 IF %x>0 THEN PROC bolt(%(x-1)<<4+8,%y<<4, BIN 00000101,1) 4021 IF %x<15 THEN PROC bolt(%(x+1)<<4-8,%y<<4, BIN 00001101,2) 4022 IF %y>0 THEN PROC bolt(%x<<4,%(y-1)<<4+8, BIN 00000111,3) 4023 IF %y<10 THEN PROC bolt(%x<<4,%(y+1)<<4-8, BIN 00000111,4) 4030 LET %f=%x-1: LET %g=%y: PROC raisePit() 4031 LET %f=%x+1: LET %g=%y: PROC raisePit() 4032 LET %f=%x: LET %g=%y-1: PROC raisePit() 4033 LET %f=%x: LET %g=%y+1: PROC raisePit() 4050 NEXT %i 4060 PROC bolt(0,0,0,1) 4061 PROC bolt(0,0,0,2) 4062 PROC bolt(0,0,0,3) 4063 PROC bolt(0,0,0,4) 4070 IF %x>0 THEN PROC drawTile(%x-1,%y,t) 4071 IF %x<15 THEN PROC drawTile(%x+1,%y,t) 4072 IF %y>0 THEN PROC drawTile(%x,%y-1,t) 4073 IF %y<10 THEN PROC drawTile(%x,%y+1,t) 4080 PROC drawTile(%x,%y,6) 4999 ENDPROC 5000 DEFPROC power() 5010 LET power=power+1 5020 PROC drawTile(%x,%y,6) 5099 ENDPROC 7000 DEFPROC char(x,y,face,frame,spr) 7010 LET f= BIN 00000001 7020 IF face=1 THEN LET f=f+ BIN 00001000 7030 SPRITE spr,x+32,y+44,frame,f 7099 ENDPROC 7100 DEFPROC bolt(x,y,f,spr) 7110 SPRITE spr,x+32,y+48,17,f 7199 ENDPROC 7200 DEFPROC drawTile(%x,%y,index) 7210 BANK 18 POKE %x+(y*16),index 7220 TILE 1,1 AT %x,%y TO %x,%y+1 7230 OUT 9275,7: OUT 9531,2 7299 ENDPROC 7300 DEFPROC getTile(%x,%y) 7310 BANK 18 PEEK %x+(y*16) TO %a 7320 ENDPROC =%a 8000 DEFPROC menu() 8001 CLS : BORDER 0: SPRITE CLEAR : SPRITE PRINT 1 8005 TILE BANK 16 8006 TILE DIM 18,0,16,16 8010 FOR %i=0 TO 7 STEP 2 8020 BANK 18 POKE %i*8,%i 8021 BANK 18 POKE %i*8+1,%i+1 8030 NEXT %i 8040 TILE 2,4 AT 0,0 TO 0,0 8050 PROC text(5,1,"TOJAM PRESENTS:",0) 8060 PROC text(5,3,"A MATT DAVIES PRODUCTION",0) 8070 PROC text(5,5,"ROTOX(S FIRST ADVENTURE:",0) 8080 PROC text(5,8,"ORB RUN",1) 8085 PROC text(0,12,"HIT FIRE TO SPEND 4 POWER AND",0) 8086 PROC text(0,13,"DESTROY THE SURROUND VOIDS!",0) 8090 PROC text(0,21,"QAOP TO MOVE, M OR SPACE TO FIRE",0) 8100 PROC text(0,23,"PRESS ANY KEY TO START!",1) 8110 LET x=0: LET y=128: LET face=1: LET frame=9: LET delay=3 8120 PROC char(x,y,face,frame,10) 8125 FOR i=0 TO delay: NEXT i 8130 LET x=x+(2*face): LET frame=frame+1 8140 IF frame=14 THEN LET frame=9 8150 IF x>=224 THEN LET face=-1 8160 IF x<=0 THEN LET face=1 8200 IF INKEY$ ="" THEN GO TO 8120 8498 PAUSE 0 8499 ENDPROC 8500 DEFPROC text(x,y,a$,i) 8510 TILE BANK 20+i 8520 TILE DIM 18,0,58,8 8530 FOR l=0 TO LEN a$-1 8540 LET li= CODE a$(l+1)-34: IF li<=0 THEN LET li=30 8550 BANK 18 POKE l,li 8560 NEXT l 8570 TILE LEN a$,1 AT 0,0 TO x,y 8999 ENDPROC 9000 DEFPROC setup() 9010 SPRITE CLEAR : LAYER CLEAR : CLS : LAYER 2,0: PAPER 0: BORDER 0: CLS : LAYER 2,1: INK 255 9020 LOAD "orb.spr" BANK 16,0,2048 9021 LOAD "font7.spr" BANK 20,0,4096 9022 LOAD "font8.spr" BANK 21,0,4096 9023 LOAD "game.spr" BANK 17,0,9216 9030 TILE DIM 18,0,16,16 9040 TILE BANK 16 9050 OUT 9275,7: OUT 9531,2 9060 SPRITE BANK 17 9070 SPRITE PRINT 1 9990 ENDPROC 9998 BORDER 7: LAYER CLEAR : PAPER 7: INK 0: CLS : SPRITE CLEAR : PRINT "saving..." 9999 REMOUNT : CD "dev/orb": SAVE "orb.bas"