home *** CD-ROM | disk | FTP | other *** search
/ A.N.A.L.O.G. Magazine 1986 January / 86_jan.atr / airhock.act next >
Text File  |  2023-02-26  |  14KB  |  1 lines

  1. ; ================¢; =  Air Hockey  =¢; =      by      =¢; =  Chris Page  =¢; ================¢¢; Copyright (c) 1985 ANALOG Computing¢¢; Special Thanks to:¢; David Sullivan & David Becker¢¢DEFINE¢  OPTION="3",SELECT="5",START="6",¢  NONE="7",LEFT="96",RIGHT="60",¢  TOP="56",BOT="144"¢¢BYTE¢  NINDEX,VOLUME,FRICTION=[1],¢  BOUNCE=[90],WIN=[10],PLAYERS=[2],¢  HUE,LUM,OPT,PUCKXD,PUCKYD,HITFLAG,¢  SERVER,GAMEOVER,SERVEIT,SDMCTL=559,¢  CONSOL=53279,CHACT=755,WSYNC=54282,¢  VCOUNT=54283,CRSINH=752,¢  COLOR0=53270,COLOR1=53271,¢  COLOR2=53272,COLOR3=53273,¢  COLOR4=53274,RTCLOK=20,¢  DMACTL=54272,LMARGN=82,RMARGN=83,¢  CHBAS=756,PMBASE=54279,¢  HITCLR=53278,P2PL=53262,¢  GRACTL=53277,GPRIOR=623,¢  RANDOM=53770,COLPM0=53266,¢  COLPM1=53267,CH=764,RAMTOP=106,¢  AUDCTL=53768,ATRACT=77,KEY¢¢BYTE ARRAY¢  DLIST,SCRMEM,RAMFONT,PMMEM($800),¢  BAR(0)=[$FF$FF],¢  PUCK(0)=[$60$F0$F0$F0$F0$F0$F0$60],¢  TTOP(0)=['Q'R'R'R'R'R'R'צ'צ'צ'צ'R¢           'R'R'R'R'R'E],¢  TMID(0)=['R'T'T'T'T'T'T'T'T'T'T'T¢           'T'T'T'T'T'R],¢  TBOT(0)=['Z'R'R'R'R'R'R'צ'צ'צ'צ'R¢           'R'R'R'R'R'C],¢  NOTE(0)=[243 243 217 243 204 243¢           193 204],¢  YTOP(0)=[6 80],YBOT(0)=[62 144],¢  SCORE(2),PDLX(2),PDLY(2),OSTIK(2),¢  ROMSET($400)=$E000,HPOSP(4)=53248,¢  HPOSM(4)=53252,PCOLR(4)=704¢¢CARD¢  PUCKXV,PUCKYV,PUCKX,PUCKY,¢  MAXV=[500],DLISTL=560,SAVMSC=88,¢  XITVBV=$E462¢¢¢; --- Miscellaneous Procedures ---¢¢PROC SETVBV=$E45C(BYTE CMD,VBIHI,¢                  VBILO)¢¢¢PROC VBI()¢; VBI to play music¢  SOUND(0,NOTE(NINDEX),10,VOLUME)¢  SOUND(1,NOTE(NINDEX)-2,10,VOLUME)¢  VOLUME==-1¢  IF VOLUME=0 THEN¢    VOLUME=15¢    NINDEX==+1¢    IF NINDEX=8 THEN¢      NINDEX=0¢    FI¢  FI¢; JMP XITVBV¢  [$4C XITVBV]¢RETURN¢¢¢PROC INITVBI()¢; Initialize music VBI¢  NINDEX=0¢  VOLUME=15¢  SNDRST()¢ ; set deferred vbi vector¢  SETVBV(7,VBI RSH 8,VBI)¢RETURN¢¢¢PROC DEBOUNCE()¢CARD I¢; Debounce console keys¢  FOR I=0 TO 5000 DO¢    DO¢      UNTIL CONSOL=NONE¢    OD¢  OD¢RETURN¢¢¢; --- Title Screen ---¢¢PROC INITTITLE()¢BYTE I¢; Initialize title screen¢  GRAPHICS(0)¢  GPRIOR=17¢  GRACTL=0¢  SDMCTL=0¢  CRSINH=1¢  HUE=0¢  DLIST=DLISTL¢  DO¢    UNTIL VCOUNT=0¢  OD¢  FOR I=3 TO 5 DO¢    DLIST(I+7)=DLIST(I)¢  OD¢  SETBLOCK(DLIST,10,$70)¢  FOR I=13 TO 25 STEP 2 DO¢    DLIST(I)=0¢  OD¢  SETBLOCK(DLIST+27,2,$70)¢  SETCOLOR(1,0,14)¢  SETCOLOR(2,0,8)¢  POSITION(11,0)¢  PRINT("Air Hockey")¢  POSITION(1,1)¢  PRINT("By: Chris Page")¢  POSITION(29,1)¢  PRINT("Thanks: D.S. and D.B.")¢  POSITION(17,2)¢  PRINT(¢   "June 30, 1984 - August 9, 1985")¢  POSITION(7,4)¢  PRINT("Copyright (c) 1984")¢  POSITION(34,5)¢  PRINT("Press  צקIJפק")¢  SDMCTL=33¢RETURN¢¢¢PROC TITLECOLORS()¢BYTE I¢; Mid-screen color changes¢  HUE==+2¢  IF HUE&2 THEN¢    CHACT==+1&3¢  FI¢  FOR I=0 TO 30 DO¢    DO¢      WSYNC=0¢      COLOR4=VCOUNT LSH 1+HUE¢      IF VCOUNT=48 THEN¢        COLOR1=0¢      FI¢      UNTIL VCOUNT&128¢    OD¢  OD¢RETURN¢¢¢PROC TITLE()¢; Display title screen¢  INITTITLE()¢  INITVBI()¢  DO¢    TITLECOLORS()¢    UNTIL CONSOL=START¢  OD¢  SDMCTL=0¢RETURN¢¢¢; --- Game Options ---¢¢PROC INITOPTIONS()¢; Initialize procedure OPTIONS()¢  GRAPHICS(17)¢  SDMCTL=0¢  GRACTL=0¢  DO¢    UNTIL VCOUNT=0¢  OD¢  DEBOUNCE()¢  SCRMEM=SAVMSC¢  DLIST=DLISTL¢  DLIST(3)==+1¢  SETCOLOR(0,3,14)¢  SETCOLOR(2,0,14)¢  PRINTDE(6,"    GAME OPTIONS")¢  POSITION(0,2)¢  PRINTD(6,"נסקחנמ - NEXT OPTION")¢  PRINTDE(6,"צדכדבק - CHOOSE")¢  PRINTDE(6," צקIJפק - PLAY GAME")¢  POSITION(3,6)¢  PRINTD(6,"FRICTION: O")¢  IF FRICTION THEN¢    PRINTD(6,"N")¢  ELSE¢    PRINTD(6,"FF")¢  FI¢  POSITION(3,8)¢  PRINTD(6,"VELOCITY: ")¢  PRINTBD(6,MAXV/100)¢  POSITION(3,10)¢  PRINTD(6,"BOUNCE  : ")¢  PRINTBD(6,BOUNCE/10)¢  POSITION(3,12)¢  PRINTD(6,"WIN AT  : ")¢  PRINTBD(6,WIN)¢  POSITION(3,14)¢  PRINTD(6,"PLAYERS : ")¢  PRINTBD(6,PLAYERS)¢  SDMCTL=34¢  OPT=0¢RETURN¢¢¢PROC OPTIONCOLORS(BYTE OPT)¢; Mid-screen color changes¢; OPT=option line to hi-light¢  DO¢    WSYNC=0¢    UNTIL VCOUNT=15¢  OD¢  LUM=0¢  WSYNC=0¢  DO¢    WSYNC=0¢    COLOR0=LUM&$0F%$20¢    LUM==+2¢    UNTIL VCOUNT=25¢  OD¢  WSYNC=0¢  COLOR0=0¢  COLOR4=6¢  DO¢    WSYNC=0¢    UNTIL VCOUNT=40¢  OD¢  COLOR0=$F8¢  OPT==LSH 3+41¢  DO¢    WSYNC=0¢    UNTIL VCOUNT=OPT¢  OD¢  COLOR0=$FE¢  DO¢    WSYNC=0¢    UNTIL VCOUNT=OPT+8¢  OD¢  COLOR0=$F8¢RETURN¢¢¢PROC OPTIONS()¢CARD I¢; Get game options from player(s)¢  INITOPTIONS()¢  DO¢    FOR I=0 TO 10 DO¢      OPTIONCOLORS(OPT)¢      UNTIL CONSOL=START¢    OD¢    IF CONSOL=OPTION THEN¢      OPT==+1¢      IF OPT=5 THEN¢        OPT=0¢      FI¢    FI¢    IF CONSOL=SELECT THEN¢      IF OPT=0 THEN¢        FRICTION==!1¢        IF FRICTION THEN¢          SCRMEM(134)=46¢          SCRMEM(135)=0¢        ELSE¢          SCRMEM(134)=38¢          SCRMEM(135)=38¢        FI¢      ELSEIF OPT=1 THEN¢        IF MAXV=900 THEN¢          SCRMEM(173)==-7¢          MAXV=200¢        ELSE¢          SCRMEM(173)==+1¢          MAXV==+100¢        FI¢      ELSEIF OPT=2 THEN¢        IF BOUNCE=90 THEN¢          SCRMEM(213)==-9¢          BOUNCE=0¢        ELSE¢          SCRMEM(213)==+1¢          BOUNCE==+10¢        FI¢      ELSEIF OPT=3 THEN¢        IF WIN=90 THEN¢          SCRMEM(253)==-8¢          WIN=10¢        ELSE¢          SCRMEM(253)==+1¢          WIN==+10¢        FI¢      ELSE¢        IF PLAYERS=2 THEN¢          SCRMEM(293)==-1¢          PLAYERS=1¢        ELSE¢          SCRMEM(293)==+1¢          PLAYERS=2¢        FI¢      FI¢    FI¢    UNTIL CONSOL=START¢  OD¢  SDMCTL=0¢  SNDRST()¢RETURN¢¢¢; --- Play Air Hockey ---¢¢PROC MAKEFONT()¢BYTE I¢CARD J¢; Change character set¢¢BYTE ARRAY¢  CDAT(8)=[$55$55$55$55$54$54$50$40],¢  EDAT(8)=[$40$50$54$54$55$55$55$55],¢  QDAT(8)=[$01$05$15$15$55$55$55$55],¢  RDAT(8)=[$55$55$55$55$55$55$55$55],¢  SDAT(8)=[$FF$FF$FF$FF$FF$FF$FF$FF],¢  TDAT(8)=[$AA$AA$2A$AA$AA$AA$A2$AA],¢  ZDAT(8)=[$55$55$55$55$15$15$05$01]¢¢  RAMFONT=(RAMTOP-8)*$100¢  MOVEBLOCK(RAMFONT,ROMSET,$400)¢  ZERO(RAMFONT+536,192)¢  CHBAS=RAMTOP-8¢  SDMCTL=61¢  FOR I=0 TO 7 DO¢    FOR J=0 TO 3000 DO OD¢    RAMFONT(536+I)=CDAT(I)¢    RAMFONT(552+I)=EDAT(I)¢    RAMFONT(648+I)=QDAT(I)¢    RAMFONT(656+I)=RDAT(I)¢    RAMFONT(664+I)=SDAT(I)¢    RAMFONT(672+I)=TDAT(I)¢    RAMFONT(720+I)=ZDAT(I)¢  OD¢RETURN¢¢¢PROC POSPLAYER(CARD PLAYER¢               BYTE X,Y,LENGTH¢               BYTE ARRAY SHAPE)¢; Position Player¢  HPOSP(PLAYER)=X+LEFT¢  PLAYER==*$100+$400¢  MOVEBLOCK(PMMEM+PLAYER+Y+TOP,¢            SHAPE,LENGTH)¢RETURN¢¢¢PROC POSPDL(BYTE PADDLE,X,Y)¢; Position paddle¢  POSPLAYER(PADDLE,X,Y,2,BAR)¢RETURN¢¢¢PROC POSPUCK(CARD X,Y)¢; Position puck¢  X==/100¢  Y==/100¢  POSPLAYER(2,X,Y,8,PUCK)¢RETURN¢¢¢PROC ERASEPDL(CARD PADDLE  BYTE Y)¢; Erase paddle¢  PADDLE==*$100+$400¢  ZERO(PMMEM+PADDLE+Y+TOP,2)¢RETURN¢¢¢PROC ERASEPUCK(CARD Y)¢; Erase puck¢  Y==/100+TOP¢  ZERO(PMMEM+$600+Y,8)¢RETURN¢¢¢PROC ERASEALL()¢; Clear Player memory¢  ERASEPDL(0,PDLY(0))¢  ERASEPDL(1,PDLY(1))¢  ERASEPUCK(PUCKY)¢RETURN¢¢¢PROC INITPMG()¢; Initialize PMG¢  PMMEM=(RAMTOP-16)*$100¢  Zero(PMMEM,$800)¢  PCOLR(0)=$76¢  PCOLR(1)=$76¢  PCOLR(2)=$36¢  PMBASE=RAMTOP-16¢  GRACTL=3¢RETURN¢¢¢PROC INITPLAY()¢CARD I¢; Initialize game¢  GRAPHICS(0)¢  SDMCTL=0¢  DO¢    UNTIL VCOUNT=0¢  OD¢  SETVBV(7,$E4,$62)¢  SNDRST()¢  DEBOUNCE()¢  INITPMG()¢  SCRMEM=SAVMSC¢  SCORE(0)=0¢  SCORE(1)=0¢  OSTIK(0)=15¢  OSTIK(1)=15¢  SERVER=0¢  GAMEOVER=0¢  CRSINH=1¢  DLIST=DLISTL¢  DLIST(2)=DLIST(3)+4¢  DLIST(3)=DLIST(4)¢  DLIST(4)=DLIST(5)¢  DLIST(5)=$30¢  DLIST(7)=$30¢  SETBLOCK(DLIST+8,21,4)¢  SETCOLOR(0,3,6)¢  SETCOLOR(1,0,14)¢  SETCOLOR(2,0,4)¢  SETCOLOR(3,2,14)¢  SETCOLOR(4,0,6)¢  POSITION(3,0)¢  PRINTE("air hockey")¢  SAVMSC==+16¢  POSITION(0,0)¢  PRINTF(¢   " One : 00 | Win : %B | Two : 00",¢   win)¢  MOVEBLOCK(SCRMEM+55,TTOP,18)¢  FOR I=87 TO 663 STEP 32 DO¢    MOVEBLOCK(SCRMEM+I,TMID,18)¢  OD¢  MOVEBLOCK(SCRMEM+695,TBOT,18)¢  MAKEFONT()¢  SOUND(3,0,0,3)¢  KEY=0¢  CH=$FF¢RETURN¢¢¢PROC SERVE(BYTE PLAYER)¢CARD I¢; Initialize positions¢  ERASEALL()¢  PDLX(0)=28¢  PDLX(1)=28¢  PDLY(0)=YTOP(0)¢  PDLY(1)=YBOT(1)¢  PUCKX=3000¢  PUCKY=4000+6800*PLAYER¢  PUCKXV=0¢  PUCKYV=0¢  POSPDL(0,PDLX(0),PDLY(0))¢  POSPDL(1,PDLX(1),PDLY(1))¢  POSPUCK(PUCKX,PUCKY)¢  HITCLR=0¢  HITFLAG=0¢  VOLUME=0¢RETURN¢¢¢PROC MOVEPADDLE(BYTE P)¢BYTE STIK¢; Move paddle¢  ERASEPDL(P,PDLY(P))¢  STIK=STICK(P)¢  ; move puck 2 for one player game¢  IF PLAYERS=P THEN¢    STIK=$F¢    IF PDLX(1)+2<PUCKX/100 THEN¢      STIK==-8¢    ELSE¢      STIK==-4¢    FI¢    IF PDLY(1)-6<PUCKY/100 THEN¢      STIK==-2¢    ELSEIF PDLY(1)-8>PUCKY/100 THEN¢      STIK==-1¢    ELSE¢      STIK==-2¢      IF RAND(2) THEN¢        STIK==+1¢      FI¢    FI¢  FI¢  ; save stick position¢  OSTIK(P)=STIK¢  ; move paddle verticaly¢  IF (STIK&1)=0 THEN¢    PDLY(P)==-2¢    IF PDLY(P)<YTOP(P) THEN¢      PDLY(P)=YTOP(P)¢    FI¢  ELSEIF (STIK&2)=0 THEN¢    PDLY(P)==+2¢    IF PDLY(P)>YBOT(P) THEN¢      PDLY(P)=YBOT(P)¢    FI¢  FI¢  ; move paddle horizontaly¢  IF (STIK&8)=0 THEN¢    PDLX(P)==+2¢    IF PDLX(P)>RIGHT-4 THEN¢      PDLX(P)=RIGHT-4¢    FI¢  ELSEIF (STIK&4)=0 THEN¢    PDLX(P)==-2¢    IF PDLX(P)>240 THEN¢      PDLX(P)=0¢    FI¢  FI¢  POSPDL(P,PDLX(P),PDLY(P))¢RETURN¢¢¢PROC REVERSEPX()¢; Reverse horizontal puck direction¢  VOLUME=14¢  PUCKXD==!1¢  IF PUCKXV<(90-BOUNCE) THEN¢    PUCKXV=0¢  ELSE¢    PUCKXV==-(90-BOUNCE)¢  FI¢RETURN¢¢¢PROC REVERSEPY()¢; Reverse vertical puck direction¢  VOLUME=14¢  PUCKYD==!1¢  IF PUCKYV<(90-BOUNCE) THEN¢    PUCKYV=0¢  ELSE¢    PUCKYV==-(90-BOUNCE)¢  FI¢RETURN¢¢¢PROC MOVEPUCK()¢BYTE PADDLE,XDIF,YDIF,STIK,ABOVE¢CARD ARRAY¢  XVELOC(0)=[400 140 100  80  40  0¢              40  80 100 140 400]¢; Move the puck¢  ERASEPUCK(PUCKY)¢; check for paddle collisions¢  PADDLE=0¢  IF PUCKY/100>70 THEN¢    PADDLE=1¢  FI¢  STIK=OSTIK(PADDLE)¢  IF P2PL THEN¢    IF HITFLAG=0 THEN¢      VOLUME=14¢    ; new x velocity & direction¢      XDIF=PUCKX/100+3-PDLX(PADDLE)¢      PUCKXV=XVELOC(XDIF)¢      PUCKXD=0¢      IF XDIF>5 THEN¢        PUCKXD=1¢      FI¢    ; new y velocity & direction¢      YDIF=PUCKY/100-PDLY(PADDLE)¢      ABOVE=0¢      IF PADDLE THEN¢        IF PUCKY/100<PDLY(1) THEN¢          ABOVE=1¢        FI¢      ELSE¢        IF PUCKY/100+8<PDLY(0) THEN¢          ABOVE=1¢        FI¢      FI¢    ; paddle not moving¢      IF (STIK&3)=3 THEN¢        PUCKYD==!1¢    ; puck not moving¢      ELSEIF PUCKYV=0 THEN¢        PUCKYV=200¢        PUCKYD=0¢        IF (STIK&3)=1 THEN¢          PUCKYD=1¢        FI¢    ; puck and paddle equal y coord¢      ELSEIF PUCKY/100+3=PDLY(PADDLE)¢       THEN¢      ; do nothing¢      ELSE¢      ; moving puck and paddle down¢        IF PUCKYD=1 AND (STIK&3)=1¢         THEN¢          IF ABOVE THEN¢            PUCKYV==-200¢            IF PUCKYV>200 THEN¢              PUCKYD==!1¢            FI¢          ELSE¢            PUCKYV==+200¢          FI¢        ELSEIF PUCKYD=0 AND¢               (STIK&3)=2 THEN¢          IF ABOVE=0 THEN¢            PUCKYV==-200¢            IF PUCKYV>200 THEN¢              PUCKYD==!1¢            FI¢          ELSE¢            PUCKYV==+200¢          FI¢        ELSEIF PUCKYD=1 AND¢               (STIK&3)=2 THEN¢          IF ABOVE THEN¢            PUCKYD==!1¢            PUCKYV==+200¢          FI¢        ELSEIF PUCKYD=0 AND¢               (STIK&3)=1 THEN¢          IF ABOVE=0 THEN¢            PUCKYD==!1¢            PUCKYV==+200¢          FI¢        FI¢      FI¢    FI¢    HITFLAG=1¢  ELSE¢    HITFLAG=0¢  FI¢  HITCLR=0¢; move horizontaly¢  IF PUCKXV>MAXV THEN¢    PUCKXV=MAXV¢  FI¢  IF PUCKXD THEN¢    PUCKX==+PUCKXV¢  ELSE¢    PUCKX==-PUCKXV¢  FI¢; check boundaries¢  IF PUCKX>24000 THEN¢    REVERSEPX()¢    PUCKX=0¢  ELSEIF PUCKX>RIGHT*100 THEN¢    REVERSEPX()¢    PUCKX=RIGHT*100¢  FI¢  IF PUCKYV>MAXV THEN¢    PUCKYV=MAXV¢  FI¢; move verticaly¢  IF PUCKYD THEN¢    PUCKY==+PUCKYV¢  ELSE¢    PUCKY==-PUCKYV¢  FI¢; check boundaries¢  IF PUCKY>24000 THEN¢    REVERSEPY()¢    PUCKY=0¢  ELSEIF PUCKY>BOT*100 THEN¢    REVERSEPY()¢    PUCKY=BOT*100¢  FI¢; handle friction¢  IF PUCKXV THEN¢    PUCKXV==-FRICTION¢  FI¢  IF PUCKYV THEN¢    PUCKYV==-FRICTION¢  FI¢; fading collision sound¢  IF VOLUME THEN¢    VOLUME==-2¢    SOUND(0,10,8,VOLUME)¢    SOUND(1,10,10,VOLUME)¢  ELSE¢    SOUND(0,0,0,0)¢    SOUND(1,0,0,0)¢  FI¢  POSPUCK(PUCKX,PUCKY)¢RETURN¢¢¢PROC GOAL(BYTE PLAYER)¢BYTE I¢CARD J¢; Inc score, check for a winner¢  SNDRST()¢  ERASEPUCK(PUCKY)¢  VOLUME=0¢  SERVEIT=1¢  SERVER=PLAYER¢  SCORE(PLAYER)==+1¢  IF SCORE(PLAYER)=WIN THEN¢    GAMEOVER=1¢  FI¢; flash score¢  FOR I=0 TO 5 DO¢    SETBLOCK(SCRMEM+23+22*PLAYER,2,0)¢    FOR J=0 TO 5000 DO OD¢    SCRMEM(23+22*PLAYER)=¢           16+SCORE(PLAYER)/10¢    SCRMEM(24+22*PLAYER)=¢           16+SCORE(PLAYER) MOD 10¢    SOUND(0,20,10,8)¢    FOR J=0 TO 5000 DO OD¢    SOUND(0,0,0,0)¢  OD¢; cheering¢  IF GAMEOVER=0 THEN¢    FOR I=0 TO 30 DO¢      FOR J=0 TO 1000 DO OD¢      SOUND(0,10,8,I RSH 1)¢    OD¢    FOR J=0 TO 40000 DO OD¢    FOR I=0 TO 30 DO¢      FOR J=0 TO 1000 DO OD¢      SOUND(0,10,8,15-I RSH 1)¢    OD¢  FI¢  SNDRST()¢  SOUND(3,0,0,3)¢RETURN¢¢¢PROC MOVEALL()¢; Move paddles and puck¢; keep attract mode at bay¢  ATRACT=0¢; check for goal¢  IF PUCKX>2400 AND PUCKX<3700 THEN¢    IF PUCKY=0 THEN¢      GOAL(1)¢    ELSEIF PUCKY=BOT*100 THEN¢      GOAL(0)¢    FI¢  FI¢  IF GAMEOVER=0 THEN¢    MOVEPUCK()¢    MOVEPADDLE(0)¢    MOVEPADDLE(1)¢  FI¢RETURN¢¢¢PROC ENDGAME()¢BYTE I¢CARD J,K¢; Cheer profusly and end game¢  SNDRST()¢  FOR I=0 TO 30 DO¢    FOR J=0 TO 1000 DO OD¢    SOUND(0,10,8,I RSH 1)¢  OD¢  FOR J=0 TO 200 DO¢    FOR K=0 TO 500 DO OD¢    IF RAND(130)=0 THEN¢      FOR I=0 TO 15 DO¢        FOR K=0 TO 1200 DO OD¢        SOUND(1,30-I,10,I)¢      OD¢      FOR I=0 TO 15 DO¢        FOR K=0 TO 1200 DO OD¢        SOUND(1,15+I,10,15-I)¢      OD¢    FI¢  OD¢  FOR I=0 TO 30 DO¢    FOR J=0 TO 1000 DO OD¢    SOUND(0,10,8,15-I RSH 1)¢  OD¢  FOR J=0 TO 40000 DO OD¢RETURN¢¢¢PROC PLAY()¢; Play Air Hockey¢  INITPLAY()¢  SERVE(SERVER)¢  DO¢    DO¢      UNTIL VCOUNT=100¢    OD¢    IF CH<>$FF THEN¢      KEY=GETD(1)¢    FI¢    IF KEY=32 OR SERVEIT=1 THEN¢      SERVE(SERVER)¢      KEY=0¢      CH=$FF¢      SERVEIT=0¢    FI¢    MOVEALL()¢    UNTIL GAMEOVER=1 OR KEY=27 OR¢          CONSOL=6¢  OD¢  IF KEY<>27 AND CONSOL<>6 THEN¢    ENDGAME()¢  FI¢  SNDRST()¢RETURN¢¢¢; --- Main Procedure ---¢¢PROC MAIN()¢  LMARGN=0¢  CLOSE(1)¢  OPEN(1,"K:",4,0)¢  DO¢    TITLE()¢    WHILE CONSOL=6 DO¢      OPTIONS()¢      PLAY()¢    OD¢    UNTIL KEY=27¢  OD¢  CLOSE(1)¢  GRAPHICS(0)¢  GRACTL=0¢RETURN¢¢