MODULEBYTE POINTER PTCARD I,L,S=88,CENTER,SKILL=[2000],LINE, SKILL_LEVEL,SCORE=[0],HISCORE=[0]BYTE COL,HEIGHT,SHAPE,CURSOR=752,KEY=764, INC=[2],UP=[14],DOWN=[13], LEFT=[11],RIGHT=[7],JOYBYTE ARRAY C=[$11 $22 $33 $44 $55 $66 $77 $11 $22 $33 $44 $44 $44 $55 $55 $55 $66 $66 $66], INDEX=[0 4 7 10 13 16 19 21 22 24 26 28 31 33 35 38 40 42 45 47], ROTATE=[7 8 9 10 13 16 6 0 1 2 11 12 3 14 15 4 17 18 5]CARD ARRAY TOP(5),BOT(5), TOP_SHAPE=[480 481 482 483 0 1 242 240 1 2 240 241 2 0 1 2 240 1 242 1 2 241 241 2 1 242 1 2 0 1 2 1 482 1 2 0 241 242 481 2 241 2 0 1 2 1 242], BOT_SHAPE=[720 721 722 723 240 481 482 480 481 242 480 481 482 240 241 482 480 481 482 481 482 1201 721 482 481 722 241 722 480 241 242 721 722 721 242 480 481 482 721 722 481 722 240 481 242 721 482] PROC WAIT(CARD W) CARD Z FOR Z=0 TO W DO ODRETURNPROC SELECT_SKILL_LEVEL() CARD FAST,TIME=[5000] BYTE B=[1],DIR CURSOR=1 DIR=UP POSITION(7,13) PRINT("̠̠̺") POSITION(28,13) PRINTC(SKILL) PRINT(" ") POSITION(7,15) PRINT(" RATE OF INCREASE:") POSITION(28,15) PRINTB(INC) PRINT(" ") WHILE STRIG(0)=1 DO IF STICK(0)=UP THEN DIR=UP POSITION(7,13) PRINT("̠̠̺") POSITION(7,15) PRINT(" RATE OF INCREASE:") FI IF STICK(0)=DOWN THEN DIR=DOWN POSITION(7,13) PRINT("INITIAL SKILL LEVEL:") POSITION(7,15) PRINT("ŠƠź") FI IF DIR=UP THEN IF STICK(0)=LEFT AND SKILL>0 THEN SKILL==-B FI IF STICK(0)=RIGHT AND SKILL<3000 THEN SKILL==+B FI POSITION(28,13) PRINTC(SKILL) PRINT(" ") ELSE IF STICK(0)=LEFT AND INC>0 THEN INC==-1 FI IF STICK(0)=RIGHT AND INC<100 THEN INC==+1 FI POSITION(28,15) PRINTB(INC) PRINT(" ") FI IF STICK(0)=LEFT OR STICK(0)=RIGHT THEN FAST==+1 B=1 IF FAST>100 THEN TIME=0 IF SKILL>10 AND SKILL<2990 THEN B=3 FI ELSE TIME=(20000/FAST)-200 FI ELSE FAST=2 FI WAIT(TIME) OD SKILL_LEVEL=3000-SKILLRETURNPROC GR10() BYTE DINDEX=87,GPRIOR=623 ;GRAPHICS(10) FOR 400/800 COMPUTERS GRAPHICS(8+16) DINDEX=10 GPRIOR=128RETURNPROC ASSIGN_SHAPE() CARD J1,J2,J BYTE ATTRACT=77 J1=INDEX(SHAPE) J2=INDEX(SHAPE+1)-1 FOR J=J1 TO J2 DO TOP(J-J1)=TOP_SHAPE(J) BOT(J-J1)=BOT_SHAPE(J) OD HEIGHT=J2-J1 COL=C(SHAPE) ATTRACT=0RETURNPROC DROP_SHAPE() CENTER==+40 FOR I=0 TO HEIGHT DO PT=CENTER+TOP(I) PT^=0 PT=CENTER+BOT(I) PT^=COL ODRETURNPROC ERASE_SHAPE() FOR I=0 TO HEIGHT DO FOR PT=CENTER+TOP(I)+40 TO CENTER+BOT(I) STEP 40 DO PT^=0 OD ODRETURNBYTE FUNC AREA_NOT_CLEAR() FOR I=0 TO HEIGHT DO FOR PT=CENTER+TOP(I)+40 TO CENTER+BOT(I) STEP 40 DO IF PT^<>0 THEN RETURN(1) FI OD ODRETURN(0)PROC DRAW_SHAPE() FOR I=0 TO HEIGHT DO FOR PT=CENTER+TOP(I)+40 TO CENTER+BOT(I) STEP 40 DO PT^=COL OD ODRETURNPROC LEFT_SHAPE() IF STICK(0)=LEFT OR JOY=LEFT THEN ERASE_SHAPE() CENTER==-1 IF AREA_NOT_CLEAR() THEN CENTER==+1 FI DRAW_SHAPE() FIRETURNPROC RIGHT_SHAPE() IF STICK(0)=RIGHT OR JOY=RIGHT THEN ERASE_SHAPE() CENTER==+1 IF AREA_NOT_CLEAR() THEN CENTER==-1 FI DRAW_SHAPE() FIRETURNPROC ROTATE_SHAPE() BYTE OLD_SHAPE IF STRIG(0)=0 OR JOY=0 THEN ERASE_SHAPE() OLD_SHAPE=SHAPE SHAPE=ROTATE(SHAPE) ASSIGN_SHAPE() IF AREA_NOT_CLEAR() THEN SHAPE=OLD_SHAPE ASSIGN_SHAPE() FI DRAW_SHAPE() IF SKILL>1500 THEN WAIT(3*(SKILL-1500)) FI FIRETURNPROC TITLE_SCREEN() GRAPHICS(0) SETCOLOR(4,9,0) SETCOLOR(2,9,0) PUTE() PRINTE(" THE THINKING MAN'S VIDEO GAME...") PRINTE(" *public domain software*") PRINTE(" By Douglas Skrecky") PUTE() PUTE() PRINTE(" ԠүҠ") PRINTE(" ӠҠϠԠ") PRINTE(" Ԡ٠٠ϠŠ") PUTE() PRINT(" CURRENT SCORE: ") PRINTCE(SCORE) PRINT(" HIGH SCORE: ") IF SCORE>HISCORE THEN HISCORE=SCORE FI PRINTCE(HISCORE) SCORE=0 SELECT_SKILL_LEVEL() KEY=255RETURNPROC INIT_BOARD() CARD Y40,YBYTE ARRAY COL= [0 $44 $2E $0E $2B $64 $C6 $94 $34] GR10() Y40=0 MOVEBLOCK(704,COL,9) FOR Y=1 TO 192 DO FOR PT=S+Y40 TO S+Y40+15 DO PT^=PT OD FOR PT=S+Y40+26 TO S+Y40+40 DO PT^=PT OD Y40==+40 OD Y40=187*40 FOR Y=0 TO 7 DO FOR PT=S+Y40+16 TO S+Y40+25 DO PT^=PT OD Y40==+40 ODRETURNBYTE FUNC SCREEN_NOT_FILLED() FOR PT=S+600+16 TO S+600+25 DO IF PT^<>0 THEN RETURN(0) FI ODRETURN(1)PROC CHOOSE_SHAPE() BYTE R=$D20A,ATTRACT=77 ATTRACT=0 CENTER=S+18 SHAPE=RAND(7) ASSIGN_SHAPE() DRAW_SHAPE()RETURNBYTE FUNC ABOVE_BOTTOM() CENTER==+40 FOR I=0 TO HEIGHT DO PT=CENTER+BOT(I) IF PT^<>0 THEN CENTER==-40 RETURN(0) FI OD CENTER==-40RETURN(1)PROC PLAY_WITH_SHAPE() FOR L=1 TO 6 DO DROP_SHAPE() JOY=STICK(0) IF STRIG(0)=0 THEN JOY=0 FI IF STICK(0)=DOWN THEN WAIT(100) ELSE WAIT(SKILL_LEVEL) FI OD LEFT_SHAPE() RIGHT_SHAPE() ROTATE_SHAPE()RETURNPROC CHECK_PAUSE() IF KEY<>255 THEN KEY=255 WHILE KEY=255 DO OD WAIT(5000) KEY=255 FIRETURNBYTE FUNC SOLID_LINE() BYTE ERASE LINE=S+186*40+16 WHILE LINE>S+95 DO ERASE=1 FOR PT=LINE TO LINE+9 DO IF PT^=0 THEN ERASE=0 FI OD IF ERASE=1 THEN RETURN(1) FI LINE==-40 ODRETURN(0)PROC ERASE_LINE() BYTE R=53770 CARD DOWN BYTE POINTER CT SCORE==+SKILL/100 SKILL==+INC IF SKILL>3000 THEN SKILL=3000 FI SKILL_LEVEL=3000-SKILL DOWN=LINE FOR I=1 TO 70 DO SOUND(0,I,10,I RSH 4) FOR PT=DOWN-200 TO DOWN STEP 40 DO FOR CT=PT TO PT+9 DO CT^=R OD OD OD SNDRST() DO ;LOWERS HEAP FOR PT=DOWN TO DOWN+9 DO CT=PT-240 PT^=CT^ OD DOWN==-40 UNTIL DOWN