@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@W!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `8  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D8:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D8:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED697 FREE SECTORS COPYING---D8:COPY32.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 164ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u05  15 2 2151^116115ύ011$r2ԭ5 3)5)5ԭx GT}@@L00)+& 2 L0=ɛ -L!1LV1L1 /3 3ȹ441L-4 v3 25 2H 2h͔5U}L3L3 2 k3U hh`DOC`QL3P1Lk0S1H /3h0B k3@ VL0LU!#$53 1181118V}1111Ε5 1Lk0552 1Ȍ1i111i11115Lk0pppB4f5&&&&&&&&^6f^6&&&&&W}&&A1@BJ D2ELVK@BHILV^Щ6 2BD2EJ VBD5EHI0 V0%5X}5 2iХiL[2 25 25`D:*.*` i@`8 ``@i `8@`0 BLV525<4Y}5`HH i ԍΗ552 ԍhh@ Lح1Э1Ѣ 24.4 24Z}4`D4E` 2BJ k3LVRH` 2BD4EhK)I JLV333 BASIC language TUR > TURBO BASIC OBJ| f}COM > MACHINE language DOC > DOCumentation PIC|MIC|FNT|MVM > Graphics AMS|MUS|MBD > Music LST > BASIC g} LISTing -Some MACHINE language programs can only be run by loading the MENU without BASIC! ------- -For s h}ome programs, XL/XE models may require a "TRANSLATOR" program (available from BELLCOM) to be loaded first! -Most i}programs are relatively self-explanatory; however, some may have separate DOCumentation files. Some BASIC programs m j}ay contain instructions in their program listings. LIST to read. -To view DOCumentation files one page at a time, k} press [START], [Return], or the Joystick Trigger to display the highlighted DOC file. Pressing the [Esc] key cau l}ses a return to MENU. -To print out a hard-copy of any DOCumentation file, [Q]uit the MENU, boot DOS, and then from m} DOS, use the (C)Copy command: D:Filename.DOC,P: -To use this great MENU program on your own disks, simply n} copy the file "AUTORUN.SYS". D:Filename.DOC,P: -To use this great MENU program on your own disks, simply ! _________________________________ = === === === === = = = = = = = p}= = = == = = === = = = = = = == = = === = === === = = = SOURCE ______________________________q}___ The files on this disk side contain ACTION! source code for many of the games found on side one. Atari users wir}shing to learn to program in ACTION! can learn much from studying these files and using the routines in your own ACTIs}ON! programs. PLEASE NOTE: an ACTION! cartridge is required to use these files. Don't have an ACTION! language cartt}ridge? You may load these files into a text processor, e.g. AtariWriter, to simply have a look at the ACTION! source cou}de. This powerful programming language is written only for the Atari 8-bit computers. Its just fantastic what you canv} do with ACTION! language!g language is written only for the Atari 8-bit computers. Its just fantastic what you can;ACTION! BINARY LOADER, APRIL 1984;WARREN K. SMALL 71076,407;NOTE!!! REQUIRES ATARI DOS 2.0SSET $E=$5000 SET $491=$x}5000DEFINE DISPLAY_OFF="0", DISPLAY_ON="34", BOOT="1" BYTE KEY=764, COLDST=580, FILE_COUNT=[0], y} CHOICE,ROW,COLCHAR ARRAY FILE_NAME(25), LOAD_NAME(15)BYTE ARRAY FILES(120), LOGO=[$00$00$00$00$00$z}00$00$00$00$00$00$00$00$03$F0$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$0F$F0$00$00$00$00$00$0{}0$00$00$00$00$00$00$00$00$00$00$00$00$00$00$07$FF$FF$FF$FF$FF$C0$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$0|}F$FF$FF$FF$FF$FF$FF$F0$00$00$00$00$00$00$07$D9$80$00$00$00$00$00$00$00$00$F8$0F$FF$FF$FF$FF$FF$FF$FF$FE$00$00$00$00$00$03$1F}}$80$00$00$00$00$00$00$00$0F$F8$00$00$00$0F$F8$01$FF$FF$FF$FC$00$00$00$00$03$19$80$00$00$00$00$00$00$00$7F$F0$00$00$00$3F$C0~}$00$01$FF$FF$FF$F0$00$00$00$03$19$80$00$00$00$00$00$00$07$FF$F0$00$00$00$FF$00$7E$00$00$FF$FF$F8$00$00$00$00$00$00$00$00$00}$00$00$00$7F$FF$E0$00$00$03$FC$01$FF$80$00$00$3F$F0$00$00$00$00$07$E0$00$00$00$00$00$03$FF$FF$C0$7E$00$07$F8$00$FE$00$00$00$}00$00$00$00$00$00$3F$E0$00$00$00$00$00$0F$FF$FF$81$FF$80$1F$E0$00$00$01$F8$00$00$00$00$00$00$00$FF$C0$00$00$00$00$00$3F$F8$}FF$07$FF$80$7F$80$3E$00$1F$FC$03$FF$C0$00$00$00$03$FF$80$00$00$00$00$00$FF$E1$FE$1F$FF$80$FF$00$FE$00$FF$FC$7F$FF$E0$00$00$0}0$1F$FF$00$00$00$00$00$03$FF$87$FC$3F$1F$83$FC$01$FC$07$F0$FF$FF$FF$E7$F0$00$00$7F$FC$00$00$00$00$00$0F$FE$0F$F0$FC$06$07$F}8$03$F8$3F$C0$FF$FF$FF$FF$FC$00$03$FF$F0$00$00$00$00$00$3F$F8$3F$E1$F8$00$1F$F0$0F$E0$FF$03$FF$C1$FF$FF$FE$00$0F$FF$80$00$0}0$00$00$00$FF$FF$FF$C7$E0$00$3F$C0$3F$81$FC$0F$F8$07$FF$FF$FC$00$3F$FC$00$00$00$00$0F$FF$FF$FF$FF$8F$C0$00$7F$80$7F$03$F8$3F}$80$1F$FE$3F$F8$00$FF$E0$00$00$00$00$1F$FF$FF$FF$FF$1F$00$00$FF$01$FE$0F$C0$FE$00$7F$F0$7F$F0$03$FF$00$00$00$00$00$3F$FF$FF}$FF$FE$3E$01$C1$FE$03$F8$1F$83$F8$01$FF$C1$FF$C0$1F$FC$00$00$00$00$00$00$3F$F0$0F$F8$7C$07$C3$FC$0F$F0$3F$87$E0$03$FF$03$FF$}00$FF$F0$00$00$00$00$00$00$FF$C0$1F$F0$7C$3F$87$F8$1F$E0$7F$FF$80$0F$FC$0F$FE$01$FF$80$00$00$00$00$00$03$FF$00$3F$E0$7F$FE$}0F$F0$3F$80$FF$FC$00$3F$F0$3F$F8$0F$FE$00$00$00$00$00$00$0F$FC$00$3F$C0$7F$F8$0F$80$3F$00$FF$F0$00$7F$C0$7F$E0$1F$F8$00$00$0}0$00$00$00$3F$F0$00$3F$80$3F$E0$00$00$3E$00$FF$80$00$FF$00$FF$80$FF$C0$00$00$00$00$00$00$FF$C0$00$1F$00$00$00$00$00$00$00$F}C$00$00$7E$01$FE$00$FF$00$00$00$00$00$00$03$FF$00$00$00$00$00$00$00$00$00$00$00$00$00$00$01$F0$00$F0$00$00$00$00$00$00$0F$F}E$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$1C$00$00$00$00$00$00$00$1F$F8$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00}$00$7F$00$00$00$00$00$00$00$3F$E0$00$00$00$00$01$FF$FF$FF$FF$FF$FF$C0$00$00$00$00$FF$00$00$00$00$00$00$00$7F$80$00$00$00$03}$FF$FF$FF$FF$FF$FF$FF$FF$F0$00$00$00$FE$00$00$00$00$00$00$00$FF$00$00$00$0F$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FC$00$00$1C$00$00$}00$00$00$00$00$FC$00$00$03$FF$FF$F0$00$00$00$00$0F$FF$FF$FF$FF$FF$00$00$00$00$00$00$00$00$00$00$00$01$FF$FF$F0$00$00$00$00$}00$00$00$00$0F$FF$FF$F0$00$00$00$00$00$00$00$00$00$00$0F$FF$E0$00$00$00$00$00$00$00$00$00$00$00$FF$FC$00$00$00$00$00$00$00$}00$00$00$0F$F8$00$00$00$00$00$00$00$00$00$00$00$00$00$FF$00$00$00$00$00$00$00];--------------------------PROC PLOT_CHAR(}BYTE CH) ;PLOT LETTERS ON GR.8 SCREENBYTE CHBASE=756CARD OFFSET,INC,SCREEN=88BYTE POINTER BIT_MAP,CHARSET,SCR CHARSET=CH}BASE*256 CH==&127 ;MASK INVERSE VIDEO IF CH>31 AND CH<96 THEN OFFSET=(CH-32)*8 ELSEIF CH>=0 AND CH<32 THE}N OFFSET=(CH+64)*8 ELSE OFFSET=CH*8 FI BIT_MAP=CHARSET+OFFSET FOR INC=0 TO 7 DO SCR=SCREE}N+COL+(ROW+INC)*40 SCR^=BIT_MAP^ BIT_MAP==+1 ODRETURN ;END PLOT_CHAR() ;----------------------}-------- PROC CONVERT_NAME() ;INSERTS PERIOD BETWEEN FILENAME & EXTENSION BYTE INC=[14] WHILE INC>11 DO } LOAD_NAME(INC)=LOAD_NAME(INC-1) INC==-1 OD LOAD_NAME(11)='. LOAD_NAME(0)=14RETURN ;END CONVE}RT_NAME();------------------------------PROC LOAD_FILE() LOAD_NAME(0)=2 LOAD_NAME(1)='D LOAD_NAME(2)=': SASSIGN(LOA}D_NAME,FILES+CHOICE*12,3,13) CONVERT_NAME() CLOSE(1) OPEN(1,LOAD_NAME,4,0) [$4C $15C8] ;ATARI DOS 2.0S } ;BINARY LOAD ROUTINERETURN ;END LOAD_FILE();------------------------------PROC READ_DIRECTORY()BYTE LOCK,NEXT ZERO(}FILES,120) CLOSE(3) OPEN(3,"D:*.*",6,0) DO LOCK=GETD(3) NEXT=GETD(3) INPUTMD(3,FILE_NAME,18) } FILE_NAME(0)=11 IF LOCK='* THEN SCOPY(FILES+FILE_COUNT*12,FILE_NAME) FILE_COUNT==+1 } IF FILE_COUNT>9 THEN EXIT FI ELSEIF FILE_NAME(1)>='0 AND FILE_NAME(1)<='9 THEN } EXIT FI OD CLOSE(3)RETURN ;END READ_DIRECTORY();------------------------------PROC DISPLAY_}CHOICE() BYTE POSCHAR ARRAY LOAD="loading =>" COL=2 ROW=80+CHOICE*8 FOR POS=1 TO LOAD(0) DO PLOT_}CHAR(LOAD(POS)) COL==+1 ODRETURN ;END DISPLAY_CHOICE() ;------------------------------ PROC DISPLAY_FI}LES()BYTE FILENUM,POSCHAR ARRAY TITLE="disk directory", PROMPT="select" ROW=64 COL=12 FOR POS=1 TO TITLE(0) } DO PLOT_CHAR(TITLE(POS)) COL==+1 OD ROW=80 FOR FILENUM=0 TO FILE_COUNT-1 } DO COL=13 PLOT_CHAR(FILENUM+48) COL==+2 FOR POS=FILENUM*12+1 TO FILENUM*12+11 } DO PLOT_CHAR(FILES(POS)) COL==+1 OD ROW==+8 } IF ROW>152 THEN EXIT FI OD COL=16 ROW=176 FOR POS=1 TO PROMPT(0) DO } PLOT_CHAR(PROMPT(POS)) COL==+1 ODRETURN ;END DISPLAY_FILES();------------------------------PROC }SCROLL_COLORS() BYTE WSYNC=54282, VCOUNT=54283, COLR=53274, COUNTER,CHANGECOLR=[0}], INCCOLR, CURSOR=752 OPEN(3,"K:",4,0) KEY=255 DO WHILE KEY=255 DO } FOR COUNTER=1 TO 10 DO INCCOLR=CHANGECOLR DO } WSYNC=0 COLR=INCCOLR INCCOLR==-1 UNTIL VCOUNT&128 } OD OD CHANGECOLR==+1 OD CHOICE=GETD(3) IF CHOICE>47 AND CHOICE M}OVEBLOCK($7308,A,8) ;a MOVEBLOCK($7318,CDE,24) ;cde MOVEBLOCK($7338,G,8) ;g MOVEBLOCK($7348,I,8) } ;i MOVEBLOCK($7358,KL,16) ;kl MOVEBLOCK($7370,NO,16) ;no MOVEBLOCK($7390,RST,24) ;rst MOVEBLO}CK($73C8,Y,8) ;yRETURN ;END CHAR_SET();------------------------------PROC PLOT_LOGO()BYTE LINE,BYTCARD START,}NEXTLYN,SCREEN=88BYTE POINTER SCR START=12*40+7 ;OFFSET TO START OF LOGO DATA NEXTLYN=40 ;INC TO NEXT LINE FOR LI}NE=0 TO 35 DO FOR BYT=0 TO 25 DO IF LOGO(LINE*26+BYT)<>0 THEN SCR=SCREEN+START}+BYT SCR^=LOGO(LINE*26+BYT)&$55 FI OD START==+NEXTLYN ODRETURN ;END PLOT}_LOGO();------------------------------PROC MAIN()BYTE DMA=559 DEVICE=0 POKEC($9B,$600) COLDST=BOOT ;COLDSTART ON R}ESET GRAPHICS(24) DMA=DISPLAY_OFF CHAR_SET() COLOR=1 SETCOLOR(1,1,0) SETCOLOR(2,1,12) SETCOLOR(4,8,5)READ_DIRECTORY()}PLOT_LOGO()DISPLAY_FILES() DMA=DISPLAY_ONDO SCROLL_COLORS() DISPLAY_CHOICE() LOAD_FILE()OD4,8,5)READ_DIRECTORY()f ; ANGLEWORMS II ; Stan Ockers 12/83 ; Š򬠳 ; 嬠򠹷򠠠 ;  }Ρ砠MODULE ;Some global variables BYTE ARRAY Xsave0 (200),Xsave1(200), Ysave0(200),Ysave1 (200),}xpos (2), ypos(2),sndflg(3),pit(3),vol(3), dur(3),sxpos(2),sypos(2),savestk(2) BYTE head0,tail0,head1,tail1,stk, } consol=53279,txtrow=656,txtcol=657, color1=709,color2=710,sflag0=[0], sflag1=[0],x,y,longcnt,grow,plyrs, level,}shots0,shots1,win,del,tunepos CARD cnt,speed,score0,score1,goal INT ARRAY delx (2),dely (2),sdelx(2), sdely(2) BYTE} ARRAY tunenote=[64 72 81 81 81 128 121 108 108 108 81 72 64 64 64 72 81 72 64 72 72 64 72 81 81 81 128 121 108 1}08 108 81 72 64 53 53 64 81 72 64 72 81 128 108 128 108 128 121 108 108 121 96 121 96 121 108 96 96 108 81 81 108} 108 128 128 144 81 72 64 53 53 64 81 72 64 72 81] BYTE ARRAY tunedur=[8 8 16 16 16 8 8 16 16 16 8 8 16 16 8 8 }8 8 16 16 16 8 8 16 16 16 8 8 16 16 16 8 8 16 16 8 8 8 8 16 16 32 16 16 16 16 8 8 16 32 16 16 16 16 8 8 16 16 16} 16 16 16 16 16 16 16 8 8 16 16 8 8 8 8 16 16 16]PROC Init() ; Worms to starting pos. FOR cnt=0 TO 199 DO Xsa}ve0(cnt)=10 Ysave0(cnt)=10 Xsave1(cnt)=10 Ysave1(cnt)=10 OD FOR cnt=0 TO 4 DO Xsave0(cnt)=9+cnt Xsave1(cnt)=70-}cnt OD FOR cnt=0 to 3 DO sndflg(cnt)=0 pit(cnt)=0 vol(cnt)=0 OD xpos(0)=13 ypos(0)=10 delx(0)=1 dely(0)=0 x}pos(1)=66 ypos(1)=10 delx(1)=-1 dely(1)=0 savestk(0)=15 savestk(1)=15 speed=2000/level grow=3 longcnt=grow head0=4 head}1=4 tail0=0 tail1=0RETURNPROC Bkgd() ; Draw walls & rectangles BYTE x,y,line,height,width CARD dl BYTE ARRAY dli=[}72 138 72 152 72 169 56 162 32 160 82 141 10 212 141 26 208 142 22 208 140 23 208 104 168 104 170 104 64] Graph}ics(5) dl=Peek(560) dl==+Peek(561)*256 Poke(dl+44,$8A) Poke(dl+45,70) Poke(dl+48,6) Poke(dl+49,6) Poke(dl+50,6) Poke(}708,138) Poke(709,202) Poke(710,70) Poke(712,130) txtrow=0 txtcol=0 FOR cnt=1 to shots0 DO Put(42) OD I}F plyrs=2 THEN txtcol=15 FOR cnt=1 to shots1 DO Put(170) OD FI txtrow=0 txtcol=6 Print("level ") Prin}tB(level) txtrow=1 txtcol=23 Print("plyr#1") PokeC(512,dli) Poke(54286,192) IF plyrs=2 THEN Print(" plyr#2") ELSE Pr}int(" computer") FI txtrow=1 txtcol=4 PrintC(score0) txtcol=12 PrintC(score1) color=1 Position(0,0) DrawTo(79,0) Dr}awTo(79,39) DrawTo(0,39) DrawTo(0,0) FOR cnt=1 to Rand(3)+2 DO x=Rand(80) y=Rand(40) height=Rand(10)+3 width=Rand(10)}+3 IF x+width>79 THEN width=79-x FI IF y+height>39 THEN height=39-y FI color=1 FOR line=y to y+height} DO Plot(x,line) DrawTo(x+width,line) OD OD color=0 Plot(1,10) DrawTo(78,10) FOR cnt=0 TO 4 DO } color=2 Plot(Xsave0(cnt),Ysave0(cnt)) color=3 Plot(Xsave1(cnt),Ysave1(cnt)) ODRETURNPROC Note (BYTE chan,p}itch,duration) IF sndflg(chan)=0 THEN Poke($D200+2*chan,pitch) pit(chan)=pitch vol(chan)=8 Poke($D201+2*chan,168) s}ndflg(chan)=1 dur(chan)=duration FIRETURN PROC Play(BYTE chan) ; Play tune IF sndflg(chan)=1 THEN IF dur(chan)>0 T}HEN dur(chan)==-1 ELSE vol(chan)==-1 Poke($D201+2*chan,160+vol(chan)) IF vol(chan)=0 THEN sndflg(chan)=0 } FI FI FIRETURNPROC Stkupdate(BYTE stknum) BYTE ARRAY clank BYTE snd clank="!%#29DLUfr" snd=clank(Rand(10)) } stk=Stick(stknum) IF stk<>savestk(stknum) THEN Note(stknum,snd,1) FI savestk(stknum)=stk IF stk=14 THEN dely}(stknum)=-1 delx(stknum)=0 ELSEIF stk=13 THEN dely(stknum)=1 delx(stknum)=0 ELSEIF stk=7 THEN dely(stknum)=0 delx}(stknum)=1 ELSEIF stk=11 THEN dely(stknum)=0 delx(stknum)=-1 FI xpos(stknum)==+delx(stknum) ypos(stknum)==+dely(s}tknum)RETURNPROC Lookfwd() ;For computers worm IF Locate (xpos(1)+2*delx(1), ypos(1)+2*dely(1))<>0 OR Rand(100)<}5 THEN IF delx(1)<>0 THEN delx(1)=0 IF Rand(2)=0 THEN dely(1)=1 ELSE dely(1)=-1 FI ELSEIF} dely(1)<>0 THEN dely(1)=0 IF Rand(2)=0 THEN delx(1)=1 ELSE delx(1)=-1 FI FI IF Locate (x}pos(1)+2*delx(1), ypos(1)+2*dely(1))<>0 THEN delx(1)=-delx(1) dely(1)=-dely(1) FI FI }xpos(1)==+delx(1) ypos(1)==+dely(1)RETURNPROC Addhead0() ; Extend head head0==+1 If head0=200 THEN head0=0 FI Xsav}e0(head0)=xpos(0) Ysave0(head0)=ypos(0) color=2 Plot(xpos(0),ypos(0))RETURNPROC Addhead1() head1==+1 IF head1=200 }THEN head1=0 FI Xsave1(head1)=xpos(1) Ysave1(head1)=ypos(1) color=3 Plot(xpos(1),ypos(1))RETURNPROC Erasetail0() ;} Remove from tail color=0 Plot(Xsave0(tail0), Ysave0(tail0)) tail0==+1 IF tail0=200 THEN tail0=0 FIRETURNPRO}C Erasetail1() color=0 Plot(Xsave1(tail1), Ysave1(tail1)) tail1==+1 If tail1=200 THEN tail1=0 FIRETURNPROC D}ly(CARD maxwait) CARD wait FOR wait=1 to maxwait DO ODRETURNPROC Title() ; Opening screen-choices BYTE wait=[1],}choice,ypos CARD dl BYTE ARRAY firstline(14)=[13 65 238 103 76 197 247 79 210 109 83 32 105 105] DO UNTIL con}sol<>6 OD Graphics(17) Poke(712,64) tunepos=0 dl=Peek(560) dl==+Peek(561)*256 Poke(dl+12,7) Poke(dl+8,2) Poke(dl+18},2) Position(3,8) PrintD(6,firstline) Position(4,10) PrintD(6,"by S. OCKERS") Position(11,14) PrintD(6,"Written in }ACTION!") Position(3,23) PrintD(6,"-start game") choice=17 DO wait==-1 IF wait<=0 THEN wait=15 Position(7,1}7) PrintBD(6,plyrs) PrintD(6," players") Position(7,19) PrintD(6,"level ") PrintBD(6,level) Position(7,21) Pr}intD(6,"goal ") PrintCD(6,goal) FOR ypos=17 to 21 STEP 2 DO Position(5,ypos) PutD(6,32) OD }Position(5,choice) PutD(6,138) stk=Stick(0) IF stk=14 AND choice>17 THEN choice==-2 ELSEIF stk=13 A}ND choice<21 THEN choice==+2 ELSEIF choice=17 AND (stk=7 OR stk=11) THEN IF plyrs=1 THEN plyrs=}2 ELSE plyrs=1 FI ELSEIF stk=7 AND choice=19 AND level<9 THEN level==+1 ELSEIF stk=11 AND} choice=19 AND level>1 THEN level==-1 ELSEIF stk=7 AND choice=21 AND goal<9900 THEN goal==+100 EL}SEIF stk=11 AND choice=21 AND goal>1000 THEN goal==-100 FI FI Play(0) DLY(350) IF sndflg(0)=0 THEN }Note(0,tunenote(tunepos), tunedur(tunepos)) tunepos==+1 IF tunepos=77 THEN tunepos=0 FI FI UNTIL Strig(}0)=0 OD SndRst()RETURNPROC Flash0() ; Worm hit something FOR cnt=1 to 10 DO color1=color1+8 Sound(0,20+5*c}nt,12,10) Dly(3000) color1=color1-8 Sound(0,0,0,0) Dly(3000) ODRETURNPROC Flash1() FOR cnt=1 to 10 DO co}lor2=color2+8 Sound(1,50+5*cnt,12,10) Dly(3000) color2=color2-8 Sound(1,0,0,0) Dly(3000) ODRETURNPROC Sinit0}() ; Set up shot movement sflag0=1 sxpos(0)=xpos(0)+delx(0) sypos(0)=ypos(0)+dely(0) sdelx(0)=delx(0) sdely(0)=dely(0)} Poke(656,0) Poke(657,shots0-1) Put(32) shots0==-1RETURNPROC Sinit1() sflag1=1 sxpos(1)=xpos(1)+delx(1) sypos(1)=yp}os(1)+dely(1) sdelx(1)=delx(1) sdely(1)=dely(1) Poke(656,0) Poke(657,shots1+14) Put(32) shots1==-1RETURNPROC Smove0(}) ; Move shot color=0 Plot(sxpos(0),sypos(0)) Sound(0,60,2,10) FOR cnt=1 to 2 DO sxpos(0)==+sdelx(0) sypos(0)==+s}dely(0) color=0 Plot(sxpos(0),sypos(0)) IF sxpos(0)<=1 OR sxpos(0)>=78 OR sypos(0)<=1 OR sypos(0)>=38 THEN } sflag0=0 Sound(0,0,0,0) EXIT FI OD IF sflag0=0 THEN color=0 ELSE color=2 FI Plot(sxpos(0),sypos(0))RETURNP}ROC Smove1() color=0 Plot(sxpos(1),sypos(1)) Sound(1,70,2,10) FOR cnt=1 to 2 DO sxpos(1)==+sdelx(1) sypos(1)==+sd}ely(1) color=0 Plot(sxpos(1),sypos(1)) IF sxpos(1)<=1 OR sxpos(1)>=78 OR sypos(1)<=1 OR sypos(1)>=38 THEN } sflag1=0 Sound(1,0,0,0) EXIT FI OD IF sflag1=0 THEN color=0 ELSE color=3 FI Plot(sxpos(1),sypos(1))RETURNP}ROC Marque() ; Used in end display FOR x=1+del TO 16+del STEP 3 DO Play(0) Position(x,1) PutD(6,170) IF x<18 }THEN Position(x+1,1) PutD(6,42) ELSE Position(1,1) PutD(6,42) FI OD FOR y=2+del TO 20+del STEP 3 DO P}osition(18,y) PutD(6,170) IF y<22 THEN Position(18,y+1) PutD(6,42) ELSE Position(18,2) PutD(6,42) FI OD } FOR x=3-del TO 18-del STEP 3 DO Position(x,23) PutD(6,170) IF x>1 THEN Position(x-1,23) PutD(6,42) ELSE }Position(18,23) PutD(6,42) FI OD FOR y=4-del TO 22-del STEP 3 DO Position(1,y) PutD(6,170) IF y>2 THEN Posi}tion(1,y-1) PutD(6,42) ELSE Position(1,22) PutD(6,42) FI ODRETURNPROC Gameover() ; Ending screen Graphic}s(17) Poke(712,32) tunepos=0 Position(3,5) PrintD(6,"the is") Position(4,7) IF score0>=goal THEN PrintD(6," }PLAYER #1") ELSEIF plyrs=2 THEN PrintD(6," PLAYER #2") ELSE PrintD(6,"THE COMPUTER") FI Position(2,9) PrintD(6,}"ȠŠ") Position(4,11) IF score0>=goal THEN PrintCD(6,score0) ELSE PrintCD(6,score1) FI PrintD(6," VS ")} IF score0>=goal THEN PrintCD(6,score1) ELSE PrintCD(6,score0) FI Position(4,13) PrintD(6," LEVEL# ") PrintBD(6,l}evel) Position(3,18) PrintD(6,"press START") Position(4,19) PrintD(6,"to play again") color=170 Plot(1,1) DrawTo(18,1)} DrawTo(18,23) DrawTo(1,23) DrawTo(1,1) color=42 FOR x=1 TO 16 STEP 3 DO Plot(x,1) Plot(x+2,23) OD FOR y=1 TO }22 STEP 3 DO Plot(1,y) Plot(18,y+1) OD del=0 cnt=1 DO ; Flashing lights & music Marque() del==+1 IF del=3 } THEN del=0 FI IF sndflg(0)=0 THEN Note(0,tunenote(tunepos), tunedur(tunepos)) tunepos==+1 IF tun }epos=77 THEN tunepos=0 FI FI UNTIL Consol=6 ODRETURNPROC Main() ; The game BYTE next0=[0],next1=[0] CAR }D time DO ; This loop is endless DO ; Restart game plyrs=1 level=1 score0=0 score1=0 shots0=5 shots1=5 win=0 goal }=1000 DO ; Get playing choices Title() DO ; Draw a new playfield Init() Bkgd() time=0 DO ; Mo }ve worms until collision Stkupdate(0) IF plyrs=1 THEN Lookfwd() ELSE stkupdate(1) FI} Addhead0() Addhead1() longcnt==-1 IF longcnt>0 THEN Erasetail0() Erasetail1() } ELSE longcnt=grow FI IF sflag0=0 AND Strig(0)=0 AND shots0>0 THEN Sinit0() FI} IF sflag1=0 AND Strig(1)=0 AND shots1>0 THEN Sinit1() FI IF sflag0=1 THEN Smove0()} FI IF sflag1=1 THEN Smove1() FI Dly(speed) Play(0) Play(1) time=time+1 txtr}ow=0 txtcol=29 IF time MOD 5=0 THEN PrintC(time) FI txtrow=0 txtcol=6 IF }time MOD 50=0 THEN Print("level ") PrintB(level) Print(" ") ELSEIF time MOD 30=0 THEN } Print("win=") PrintC(goal) FI next0=Locate(xpos(0)+delx(0), ypos(0)+dely(0)) } next1=Locate(xpos(1)+delx(1), ypos(1)+dely(1)) UNTIL next0>0 OR next1>0 OD SndRst() } IF next0>0 THEN flash0() ELSE flash1() FI time=time/5*5 DO ; Update score time==-5 I}F next0>0 THEN score1==+5 Note(0,50,6) ELSEIF next1>0 THEN score0==+5 Note(1,60,6) FI } txtrow=1 txtcol=4 PrintC(score0) txtcol=12 PrintC(score1) Poke(77,0) txtrow=0 txtcol=29 PrintC(time) } Print(" ") FOR cnt=1 TO 10 DO Dly(200) Play(0) Play(1) OD UNTIL time<=0 OR} time>64000 OD SndRst() IF score0>=goal OR score1>=goal THEN win=1 EXIT FI }DO UNTIL Strig(0)=0 OR Strig(1)=0 OR consol=5 OR consol=3 OD UNTIL consol=5 OR consol=3 } ; Exit only if consol key pushed OD UNTIL win=1 OR consol=3 ; Exit on win or option key OD IF consol}=3 THEN EXIT ; skip gameover FI Gameover() OD ODRETURNnsol=3 ; Exit on win or option key OD IF consolB; ԧӠŠΠΡ; 󠠠; Š򬠳; 嬠Ҡ}򠠠; 蠱MODULE ; RAT'S REVENGE CARD pmbase,dest,source,cnt,source1, source2,s }ource3,score,maxscore, rndpts,dlist=560 BYTE pmpage,stk,v,w,col,row, vcount=$D40B,consol=53279,dir,all, !} dir1,blkflg,dir2, dir3,pos,pos1,pos2,pos3, level,dotscnt,hitflg,men,ownflg BYTE ARRAY ratup=[0 66 126 60 24"} 66 126 90 126 60 36 102 0 0], ratrt=[0 32 56 100 62 16 58 126 120 120 120 44 48 0],ratlt=[0 4 28 54 124 8 92#} 126 30 30 28 52 12 0], cursor=[34 20 8 20 34],bugup=[0 36 24 60 126 60 24 60 90 60 24 60 0 0],bugrt=[0 48 32 120$} 108 56 16 56 56 60 56 44 48 0], buglt=[0 12 4 30 54 28 8 28 28 60 28 52 12 0],allowed(132),saveall(133), hor%}top=[3 32 32 32], vertop=[3 32 6 32],allbot=[3 7 6 7],newall=[3 135 6 135],horbot=[3 7 7 7], dots(132),blk=[3 32 &}32 32], newbot=[3 135 135 135] INT delx,dely,delx1,dely1,delx2, dely2,delx3,dely3,x,y,x1,y1, x2,y2,x3,y3,ax'},ay PROC Init() SetBlock(allowed,132,0) SetBlock(dots,132,1) FOR cnt=1 to 10 DO allowed(cnt)=76 OD allowed(0)=72(} allowed(11)=68RETURNPROC Pminit() BYTE ARRAY fil=[65 85 65 85 65 85 65 85 0 0 0 0 255 51 204 255 0 0 255 255 0 )}24 60 60 24 0 255 255 0 0 0 0 0 0 255 255 0 0 0] pmpage=Peek(106)-16 pmbase=pmpage*256 Poke(54279,pmpage) Poke(559,62*}) Poke(53277,3) Poke(53248,x) Poke(704,92) Poke(705,202) Poke(706,250) Poke(707,186) SetBlock(pmbase+1024,1024,0) Mov+}eBlock(pmbase,57344,1024) Poke(756,pmpage) FOR cnt=0 TO 39 DO Poke(pmbase+cnt+560,fil(cnt)) OD FOR cnt=6 TO 28 DO P,}oke(dlist+cnt,4) ODRETURNPROC Ding(BYTE pitch,CARD dly) BYTE loud CARD wait FOR loud=0 to 15 DO Sound(0,pitch,1-}0,15-loud) FOR wait=1 to dly DO OD OD SndRst()RETURNPROC Tracks() ; leave trail BYTE newpos,z IF newpos<>pos T.}HEN newpos=pos v=pos MOD 12 w=pos/12 z=Locate(3*v+2,2*w+2) IF z=7 THEN rndpts==+25 Position(21,0) P/}rintC(rndpts) Position(3*v+2,2*w+2) dotscnt==-1 If allowed(pos)&64 THEN Print(newbot) ELSEIF allowed(pos)&16 THEN0} Print(newall) FI FI FIRETURNPROC MOVE() ; move the bug stk=Stick(0) ! 15 IF (y-10) MOD 16=0 AND (x-22) MOD 11}2=0 THEN row=(y-42)/16 col=(x-56)/12 pos=12*row+col all=allowed(pos)&15 IF stk=8 AND dir=4 THEN dir=8 ELSEIF 2}stk=4 AND dir=8 THEN dir=4 ELSEIF stk=1 AND dir=2 THEN dir=1 ELSEIF stk=2 AND dir=1 THEN dir=2 FI IF (dir & 33})>0 THEN stk==& 12 ELSE stk==& 3 FI IF(stk & all)>0 THEN dir=stk FI WHILE (dir & all)=0 DO dir=dir RSH 1 4} IF dir=0 THEN dir=8 FI OD IF dir=1 THEN dely=-1 delx=0 source=bugup ELSEIF dir=2 THEN dely=1 delx=0 5} source=bugup ELSEIF dir=4 THEN dely=0 delx=-1 source=buglt ELSEIF dir=8 THEN dely=0 delx=1 6} source=bugrt FI FI x==+delx y==+delyRETURNPROC Move1() ; decide rat #1 movement BYTE num,col1,row1 IF (y1-107}) MOD 16=0 AND (x1-22) MOD 12=0 THEN row1=(y1-42)/16 col1=(x1-56)/12 pos1=12*row1+col1 all=allowed(pos1) IF Rand(8}15)>10-level THEN ax=x-x1 IF ax<0 THEN ax=-ax FI ay=y-y1 IF ay<0 THEN ay=-ay FI IF ax>ay THEN IF (x9}1>x) THEN dir1=4 ELSEIF (x1y) THEN dir:}1=1 FI FI FI WHILE (dir1 & all)=0 DO dir1=dir1 RSH 1 IF dir1=0 THEN dir1=8 FI OD IF dir1=1 THEN dely1=-;}1 delx1=0 source1=ratup ELSEIF dir1=2 THEN dely1=1 delx1=0 source1=ratup ELSEIF dir1=4 THEN dely1<}=0 delx1=-1 source1=ratlt ELSEIF dir1=8 THEN dely1=0 delx1=1 source1=ratrt FI FIRETURNPROC Move2(=}) BYTE num,col2,row2 IF (y2-10) MOD 16=0 AND (x2-22) MOD 12=0 THEN row2=(y2-42)/16 col2=(x2-56)/12 pos2=12*row2+c>}ol2 all=allowed(pos2) IF Rand(15)>10-level THEN ax=x-x2 IF ax<0 THEN ax=-ax FI ay=y-y2 IF ay<0 THEN ay=-ay FI?} IF ax>ay THEN IF (x2>x) THEN dir2=4 ELSEIF (x2y) THEN dir2=1 FI FI FI WHILE (dir2 & all)=0 DO dir2=dir2 RSH 1 IF dir2=0 THEN dir2=A}8 FI OD IF dir2=1 THEN dely2=-1 delx2=0 source2=ratup ELSEIF dir2=2 THEN dely2=1 delx2=0 source2=B}ratup ELSEIF dir2=4 THEN dely2=0 delx2=-1 source2=ratlt ELSEIF dir2=8 THEN dely2=0 delx2=1 sourceC}2=ratrt FI FIRETURNPROC Move3() BYTE num,col3,row3 IF (y3-10) MOD 16=0 AND (x3-22) MOD 12=0 THEN row3=(y3-42)/16 D}col3=(x3-56)/12 pos3=12*row3+col3 all=allowed(pos3) IF Rand(15)>10-level THEN ax=x-x3 IF ax<0 THEN ax=-ax FI E} ay=y-y3 IF ay<0 THEN ay=-ay FI IF ax>ay THEN IF (x3>x) THEN dir3=4 ELSEIF (x3y) THEN dir3=1 FI FI FI WHILE (dir3 & all)=0 DO dir3=dirG}3 RSH 1 IF dir3=0 THEN dir3=8 FI OD IF dir3=1 THEN dely3=-1 delx3=0 source3=ratup ELSEIF dir3=2 THEN H}dely3=1 delx3=0 source3=ratup ELSEIF dir3=4 THEN dely3=0 delx3=-1 source3=ratlt ELSEIF dir3=8 THEI}N dely3=0 delx3=1 source3=ratrt FI FIRETURN PROC Update() ; all players move DO UNTIL vcount=128 OD PokeJ}(53248,x) dest=pmbase+1024+y MoveBlock(dest,source,14) x1==+delx1 y1==+dely1 Poke(53249,x1) dest=pmbase+1200+y1 MoveBK}lock(dest,source1,14) x2==+delx2 y2==+dely2 Poke(53250,x2) dest=pmbase+1536+y2 MoveBlock(dest,source2,14) x3==+delx3 L}y3==+dely3 Poke(53251,x3) dest=pmbase+1792+y3 MoveBlock(dest,source3,14) Tracks()RETURNPROC Bkgd() ; draw ladders & gM}irders Graphics(0) Poke(752,1) FOR pos=0 TO 131 DO x=pos MOD 12 y=pos/12 all=allowed(pos) Position(3*x+2,2*y+1)N} IF all&48 THEN Print(vertop) ELSE Print(blk) FI Position(3*x+2,2*y+2) IF all&64 THEN Print(horbot) ELSEIO}F all&32 THEN Print(vertop) ELSEIF all&16 THEN Print(allbot) ELSE Print(blk) FI OD FOR x=1 TO 38 DO Position(x,23P}) Put(13) ODRETURNPROC Dly(CARD maxcnt) CARD cnt FOR cnt=1 to maxcnt DO ODRETURNPROC Savemaze() Open(1,"D:MAZE"Q},8,0) FOR pos=0 TO 132 DO saveall(pos+1)=allowed(pos) OD saveall(0)=132 PrintD(1,saveall) Close(1)RETURNPROC CleaR}nscr() ; get rid of players FOR cnt=53248 TO 53251 DO Poke(cnt,0) ODRETURNPROC Openup() ; pos. above permitted IFS} allowed(pos-12) & 112 THEN allowed(pos-12)==%2 allowed(pos)==%1 FIRETURNPROC Opendn() IF allowed(pos+12) & 48 THT}EN allowed(pos+12)==%1 allowed(pos)==%2 FIRETURNPROC Openlt() IF allowed(pos-1) & 80 THEN allowed(pos-1)==%8 U}allowed(pos)==%4 FIRETURNPROC Openrt() IF allowed(pos+1) & 80 THEN allowed(pos+1)==%4 allowed(pos)==%8 FIRETURV}NPROC Setbar() ; create screen BYTE key x=70 y=61 source=cursor dest=pmbase+1024+y Poke(764,255) SetBlock(pmbase+1W}024,256,0) Position(0,0) Print("(1) (2)_(3)|(4)(5)Save") Print("(6)Exit (arrows)"); PROC Rats() DO Poke(53248,x) X}dest=pmbase+1024+y MoveBlock(dest,source,5) DO key=Peek(764) UNTIL key<>255 OD SetBlock(dest,5,0) Poke(764,255)Y} IF key=15 AND y<181 THEN y==+16 ELSEIF key=14 AND y>61 THEN y==-16 ELSEIF key=7 AND x<178 THEN x==+12 ELSEIF key=6 AZ}ND x>70 THEN x==-12 FI IF consol=5 THEN EXIT FI col=(x-58)/12 row=(y-45)/16 pos=12*row+col Position(3*col+2,2*row+1[}) IF key=31 THEN Print(blk) allowed(pos)=0 allowed(pos-1)==&247 allowed(pos+1)==&251 allowed(pos-12)==&253 \} allowed(pos+12)==&254 ELSEIF key=30 THEN allowed(pos)=64 allowed(pos-12)==&253 Openrt() Openlt() Opendn() Pri]}nt(hortop) ELSEIF key=26 THEN allowed(pos)=32 allowed(pos-1)==&247 allowed(pos+1)==&251 Openup() Opendn() Print^}(vertop) ELSEIF key=24 THEN allowed(pos)=16 Openup() Opendn() Openlt() Openrt() Print(vertop) FI Position(3*col_}+2,2*row+2) IF key=31 THEN Print(blk) ELSEIF key=30 THEN Print(horbot) ELSEIF key=26 THEN Print(vertop) ELSEIF key=24`} THEN Print(allbot) FI IF key=29 THEN Savemaze() FI IF key=27 THEN EXIT FI DO UNTIL Peek(764)<>key ODODRETURNPROa}C Loadmaze() Open(1,"D:MAZE",4,0) InputSD(1,saveall) SCopyS(allowed,saveall,2,132) allowed(0)=saveall(1) Close(1)RETURb}NPROC CONTACT() ; hit a rat FOR v=50 TO 200 STEP 5 DO Ding(v,v) OD hitflg=1RETURNPROC Rndover() ; completed scc}reen FOR v=50 TO 200 STEP 5 DO Ding(250-v,v) ODRETURNPROC Gameover() Graphics(18) Position(6,4) PrintD(6,"Ge d}vE") Position(0,9) PrintD(6,"press START to play") DO UNTIL consol=6 OD DO UNTIL (consol&7)=7 ODRETURNPROC Score}ecard() Position(0,0) Print("MEN=") PrintB(men) Position(6,0) Print("SCORE=") PrintC(score) Position(17,0) Print("Rndf}=") PrintC(rndpts) Position(26,0) Print("HI=") PrintC(maxscore) Position(35,0) Print("LVL=") PrintB(level)RETURNPROg}C Play()BYTE ARRAY lvl1=[72 78 76 76 78 76 7678 76 76 78 68 0 35 0 0 35 0 0 35 0 035 0 0 25 76 78 21 0 0 25 78 76 21 00 0q}B%DOS SYSB*)DUP SYSB SAUTORUN SYSB_HELP DOCBoACTION DOCBDwMENU ACTBcANGLWRMSACTBeRATSRVNGACTBWARP ACTBgGEM ACTB,vPONG ACTBSNAILS ACT 0 35 0 0 0 0 35 0 0 0 0 0 74 29 7876 76 78 29 70 0 0 0 0 35 0 35 0 0 350 35 0 0 0 0 25 78 21 0 0 25 78 21 0 00 0 0 35 74 r}76 76 70 35 0 0 0 0 0 0 3535 0 0 35 35 0 0 0 0 0 0 25 29 76 7629 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0],lvl4=[72 78 76 76 78 76s} 78 76 76 76 7868 0 25 76 76 23 0 27 76 76 76 21 0 00 0 0 27 76 23 0 0 0 0 0 0 74 76 76 3176 31 76 76 76 70 0 0 25 76 76 2t}3 0 2776 76 76 21 0 0 0 0 0 27 76 23 0 0 0 00 0 74 76 76 31 76 31 76 76 76 70 0 025 76 76 23 0 27 76 76 76 21 0 0 0 0 027u} 76 23 0 0 0 0 0 0 0 0 72 29 76 2968 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0],lvl7=[72 78 76 78 76 78 78 76 78 76 7868 0 25 78 29 v}78 21 35 0 35 0 35 0 074 29 78 29 78 29 78 29 78 21 0 0 350 35 0 35 74 29 78 29 70 0 0 25 78 2978 21 35 0 35 0 35 0 0 74 2w}9 78 29 7829 78 29 78 21 0 0 35 0 35 0 35 74 2978 29 70 0 0 25 78 29 78 21 35 0 35 035 0 0 0 35 0 35 0 25 78 29 78 21 00 x}72 29 76 29 76 76 29 76 29 68 0 0 00 0 0 0 0 0 0 0 0 0] DO IF ownflg=0 THEN IF level>0 AND level<4 THEN FOy}R v=0 TO 132 DO allowed(v)=lvl1(v) OD ELSEIF level>3 AND level<7 THEN FOR v=0 TO 132 DO allowed(v)=lvz}l4(v) OD ELSEIF level>6 THEN FOR v=0 TO 132 DO allowed(v)=lvl7(v) OD FI FI Bkgd() Pminit() Scorecard(){} x=56 y=42 dir=8 source=ratrt SetBlock(pmbase+1024,1024,0) y1=42 dir1=4 source1=ratlt source2=ratlt y2=42 |}dir2=4 delx=1 y3=42 dir3=4 source3=ratlt pos=0 pos1=11 pos2=11 pos3=11 dely=0 dely1=0 dely2=0 dely3=0 delx1=-}}1 delx2=0 delx3=0 x1=184 x2=0 x3=0 dotscnt=0 FOR cnt=0 TO 131 DO w=allowed(cnt) IF w&80 THEN dotscnt==+~}1 FI OD w=(level-1)MOD 3 IF w>0 THEN x2=184 delx2=-1 FI IF w>1 THEN x3=184 delx3=-1 FI DO FOR cnt=1 TO 10-lev}el DO DO UNTIL vcount=1 OD UNTIL vcount=128 OD Move() Move1() Move2() Move3() Update() IF dotscnt}=0 THEN Rndover() EXIT FI IF((x=x1)AND(y=y1))OR ((x=x2)AND(y=y2))OR ((x=x3)AND(y=y3)) THEN Contac}t() EXIT FI Poke(77,0) OD Cleanscr() IF dotscnt=0 THEN level==+1 IF level=10 THEN level=9 FI score==+rndp}ts rndpts=0 IF maxscore7 OD IF }consol=3 THEN Position(7,w) PutD(6,32) w==+1 IF w=6 THEN w=3 FI Position(7,w) PutD(6,170) Ding(121,60}0) ELSEIF consol=5 THEN Position(10+level,7) PutD(6,48+level) level==+1 IF level=10 THEN level=1 FI } Position(10+level,7) PutD(6,176+level) Ding(60,600) ELSEIF consol=6 THEN IF w=4 THEN Init() Bkgd() } Pminit() Setbar() Cleanscr() EXIT ELSEIF w=5 THEN Loadmaze() ownflg=1 Play() ownflg=0 Cleanscr}() EXIT ELSEIF w=3 THEN Play() Cleanscr() EXIT FI FI DO UNTIL(consol&7)=7 OD OD ODRETURNeanscrw;;WARP ATTACK copyright (c) 1984 by; OSS and Dave Plotkin;!}MODULEDEFINE PushAXY="[$48 $8A $48 $98 $48]", PullYXA="[$68 $A8 $68 $AA $68]", SaveTemps="[!}$A2 7 $B5 $A8 $48 $CA $10 $FA]", GetTemps ="[$A2 0 $68 $95 $A8 $E8 $E0 8 $D0 $F8]"CARD DLptr=560, DLIptr=512, !} ScrPtr=88, Timer2=$21A, Timer2Ptr=$228, HiMem=$2E5, PM_BASEADR, Adres,AdresB, Score=[!}0], OldINT SX=[1],SY=[1] INT ARRAY BXDR=[0 0 0 0], BYDR=[0 0 0 0]BYTE NMIEnable=$D40E, Hard_ColorB!}AK=$D01A, Hard_ColorPF2=$D018, T=$DA, VCount=$D40B, WSync=$D40A, Count=[0], PM_HitClr=$D01E, !} DMACtl=$22F, GRACtl=$D01D, PM_Base=$D407, GPriority=$26F, X0,Y0, ShipX, ShipY, ShipStat!}us=[0], Color0=708, Color1=709, Color2=710, Color3=711, Color4=712, Fate=53770, NumShips=[!}4], CursorInhibit=752, TxtRow=656, TxtCol=657, Level=[10], Level1=[10], SerialCtl=$D20F, A!}udioCtl=$D208 BYTE ARRAY DLIST, YLOCL(80), YLOCH(80), RSH2(160), PMHPOS(8)=!}$D000, PMVPOS(8)=[0 0 0 0 0 0 0 0], PM_WIDTH(5)=$D008, PLPTR, PM_MISMASK!}(4)=[$FC $F3 $CF $3F], BALL1=[0 0 0 0 $E1 $21 $1B $2E $7C $D8 $8C $87 !} 0 0 0 0], BALL2=[0 0 0 0 $0C $62 $B6 $9C $39 $6D $46 $30 !} 0 0 0 0], BSTAT=[0 0 0 0], BX=[0 0 0 0], BY=[0 0 0 0], PCOLR(4)=704, !} BLANK=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], CLRS(0)=[64 66 68 70 72 74 64 66 68 70 72 74!} 64 66 68 70 72 74 64 66 68 70 72 74 64 66 68], BM(0)=!}[$C0 $30 $C $3], CM(0)=[$0 $55 $AA $FF], SHIPSHAPE(0)=[0 0 0 0 66 36 24 165 2!}31 165 24 36 66 0 0 0 0], MSTATUS(0)=[0 0 0 0], MX(0)=[0 0 0 0], MY!}(0)=[0 0 0 0], MXOLD(0)=[0 0 0 0], MYOLD(0)=[0 0 0 0], SHIP(100)=[''''''' !} '''''@''''X'' ''''@'P'''''' '''A''U'''U''A' ''W''j''!}''''' 'W''j''''''''A ''U'''U''A'''@'P '''''''''@'' !} ''X''''''''' '''''], NOLEFT(100)=['''''' ''''''!}''''X' ''''''''''' ''''''U'''U''A '''''j'''''' !} ''''j''''''' '''U'''U''A''' ''''''''''' ''!}'X'''''''' ''''''], NOENG(100)= ['''''' ''''''''''X' !} ''''''''''' ''''''U'''U'D' '''''j'''''' '!}'''j''''''' '''U'''U'D'''' ''''''''''' '''X'''''!}''' ''''''], LINEBYTE LOW=LINE, HIGH=LINE+1;************************************;!}DLI to create color bars on screen;************************************PROC DLI() BYTE dum PushAXY IF VCount>94 TH!}EN WSync=1 Hard_ColorBAK=0 Hard_ColorPF2=0 ELSE dum=CLRS(Count) WSync=1 Hard_ColorBAK=dum FI!} Count==+1 IF Count=27 THEN Count=0 FI PullYXA [$40];************************************;Initialize graphics 7 sc!}reen and set;up line pointers;************************************PROC Init7() BYTE low1,high1,i CARD screen=low1!} Graphics(7) Color0=44 Color1=102 Color2=52 Color4=0 screen=ScrPtr FOR i=0 TO 79 DO YLOCL(i)=low1 YL!}OCH(i)=high1 screen==+40 OD FOR i=0 TO 159 DO RSH2(i)=i RSH 2 OD RETURN;***********************************!}*;Put the DLI calls into the display;list.;************************************PROC DLSetUp() BYTE i Init7() NMI!}Enable=$40 DLIST=DLptr DLIptr=DLI FOR i=30 TO 40 DO DLIST(i)=141 OD FOR i=42 TO 54 STEP 2 DO DLIST(i)=141 OD!} FOR i=57 TO 72 STEP 3 DO DLIST(i)=141 OD FOR i=76 TO 84 STEP 4 DO DLIST(i)=141 OD NMIEnable=$C0RETURN;******!}******************************;VBI to rotate the colors of the bars;on the screen.;************************************P!}ROC ScrollColors() BYTE temp,i PushAXY SaveTemps temp=CLRS(26) FOR i=0 TO 25 DO CLRS(26-i)=CLRS(25-i) OD C!}LRS(0)=temp Timer2=2 GetTemps PullYXARETURN;************************************;Include the joystick routines;***!}*********************************;;;JOYSTIX.ACT - routines which make;interpreting !}joystick values much;easier.;; Copyright (c) 1984 OSS,Inc.;;*********************!}***************;Make horizontal joystick movement;easy: -1  0  1;************************************INT FUNC HStick(!}BYTE port) BYTE ARRAY ports(4)=$278 INT ARRAY value(4)=[0 1 $FFFF 0] port==&3RETURN (value((ports(port)&$C) RSH 2))!};************************************; -1;To make vertical ;joystick movement 0;easy. !} ; 1;************************************INT FUNC VStick(BYTE port) BYTE ARRAY !}ports(4)=$278 INT ARRAY value(4)=[0 1 $FFFF 0] port==&3RETURN (value(ports(port)&3));خԠMODULE!};************************************;Special Mode 7 Draw;************************************PROC Draw7(BYTE X,Y,CLR)!} BYTE x1=$A0, y1=$A1, clr1=$A2 LOW=YLOCL(y1) HIGH=YLOCH(y1) T=RSH2(x1) LINE(T)=(((BM(x1&3)!$FF)&LIN!}E(T))% (BM(x1&3)&CM(clr1)))RETURN;************************************;Special Mode 7 picture Draw;*************!}***********************PROC FastDraw(BYTE ARRAY picture BYTE width,height,xx,yy) BYTE lctr1,lctr2 CARD lctr3 FOR!} lctr1=0 TO height-1 DO LOW=YLOCL(yy+lctr1) HIGH=YLOCH(yy+lctr1) lctr2=xx+width lctr3=(lctr1+1)*width-1 !} DO LINE(lctr2)=picture(lctr3) lctr3==-1 lctr2==-1 UNTIL lctr2=xx OD OD RETURN;****!}********************************;************************************PROC PMGRAPHICS()ZERO(PMHPOS,8) ZERO(PMVPOS,8)ZERO(!}PM_WIDTH,5) DMACtl=$3E PM_BASEADR=(HiMem-$800)&$F800PM_Base=PM_BASEADR RSH 8HiMem=PM_BASEADR+768GPriority==&$C0%17 GRACt!}l=3RETURN;************************************;************************************CARD FUNC PMADR(BYTE N)IF N>=4 THEN!} N=0 ELSE N==+1 FIRETURN(PM_BASEADR+768+(N*$100));************************************;**********************************!}**PROC PMCLEAR(BYTE N)CARD CTRBYTE ARRAY PLAYADRPLAYADR=PMADR(N)IF N<4 THEN ZERO(PLAYADR,$100) ELSE N==-4FOR CTR=0 TO!} $100-1DO PLAYADR(CTR)==&PM_MISMASK(N) ODFIRETURN;************************************;Erase mother ship so we can move!} it;************************************PROC EraseShip() BYTE loopX,loopY,temp temp=ShipX LSH 2 FOR loopY=ShipY TO!} ShipY+10 DO FOR loopX=temp TO temp+39 DO Draw7(loopX,loopY,0) OD OD Level==+2 IF Level>20 THEN Level=2!}0 FI Level1==+5 IF Level1>200 THEN Level1=200 FIRETURN;************************************;Print out the text window!} info;************************************PROC ShowInfo() BYTE i CursorInhibit=1 TxtRow=0 TxtCol=0 Print("!}") FOR i=1 TO 2 DO TxtRow=i TxtCol=0 Print("|") TxtCol=38 Print("|"!}) OD TxtRow=3 TxtCol=0 Print("") TxtRow=1 TxtCol=5 Print("SCORE: ")!} TxtCol=12 PrintC(Score) TxtCol=20 Print("SHIPS LEFT: ") FOR i=1 TO 5 DO TxtCol=31+i IF NumShips>=i THEN!} Print("{") ELSE Print(" ") FI ODRETURN;************************************;Update the score display;******!}******************************PROC ShowScore() TxtRow=1 TxtCol=12 PrintC(Score)RETURN;*****************************!}*******;Update the ships left display;************************************PROC ShowShips() BYTE i TxtRow=1 FOR i=!}1 TO 5 DO TxtCol=31+i IF NumShips>=i THEN Print("{") ELSE Print(" ") FI ODRETURN;****************!}********************;See if hit to mother ship;************************************PROC TestHit(BYTE m) BYTE misY,misX!},XShip IF ShipStatus=0 THEN RETURN FI misY=(MY(m)-30) RSH 1 misX=MX(m)-48 XShip=ShipX LSH 2 IF misYShipY+7 THEN RETURN FI IF ShipStatus=1 THEN IF misX>XShip+9 AND misXXShip+31 AND misXXShip+20 AND misX190 THEN X0=190 FI I!}F X0<50 THEN X0=50 FI IF Y0>170 THEN Y0=170 FI IF Y0<50 THEN Y0=50 FI Adres=PMAdr(0)+Y0 MoveBlock(Adres,SHIPSHAPE,17)!} PMHPOS(0)=X0 RETURN;************************************;Fire missiles;************************************PROC Mi!}ssileFire() BYTE i IF STrig(0) THEN RETURN FI ;Trigger pressed, so ! FOR i=0 TO 3 DO IF MSTATUS(i)=0 THEN !} MSTATUS(i)=1 MY(i)=Y0+6 MYOLD(i)=MY(i) MX(i)=X0 IF i=1 OR i=3 THEN MX(i)=X0+15 FI MXOLD(i)=MX(i)!} PLPTR(MY(i))==%(PM_MISMASK(i)!$FF) PMHPOS(i+4)=MX(i) EXIT FI ODRETURN;**********************!}**************;Move the missiles;************************************PROC MissileMove() BYTE i,del FOR i=0 TO 3 !} DO IF MSTATUS(i)=1 THEN PLPTR(MY(i))==&PM_MISMASK(i) MY(i)==-2 IF MYOLD(i)-MY(i)>44 THEN MSTA!}TUS(i)=0 Sound(2,0,0,0) ELSE PLPTR(MY(i))==%(PM_MISMASK(i)!$FF) del=(MYOLD(i)-MY(i))/6 IF i=0 O!}R i=2 THEN MX(i)=MXOLD(i)+del ELSE MX(i)=MXOLD(i)-del FI PMHPOS(i+4)=MX(i) Sound(2,del LSH 2,!}10,4) TestHit(i) FI FI ODRETURN;************************************;Draw the ship;***************!}*********************PROC ShipDraw()BYTE time=20 IF ShipStatus<>0 OR Fate<250 THEN RETURN FI ShipStatus=1 Color0=1!}4 Color1=14 Color2=14 Color4=14 ShipX=Rand(24)+2 ShipY=Rand(30)+2 FastDraw(SHIP,10,10,ShipX,ShipY) time=1 DO S!}ound(1,100,8,12-time RSH 1) IF (time&3)=0 THEN ShipFly() MissileMove() FI UNTIL time=15 OD WHILE Color4!}>0 DO Color4==-1 Color2=RAND(250) Color0=Rand(250) Color1=RAND(250) time=0 DO UNTIL time=2 OD !} Sound(1,Color4 LSH 4,8,4) ShipFly() MissileMove() OD Color0=44 Color1=102 Color2=52 Sound(1,0,0,0)RETURN !} ;************************************;Move the mother ship;************************************PROC ShipMove() IF Sh!}ipStatus=0 THEN RETURN FI ShipX==+SX ShipY==+SY IF ShipX<2 OR ShipX>28 THEN SX=-SX ELSEIF Fate>(255-Level) THEN SX=-SX!} FI IF ShipY<2 OR ShipY>55 THEN SY=-SY ELSEIF FateLevel1 THEN RETURN FI FO!}R i=1 TO 3 DO IF BSTAT(i)=0 THEN BSTAT(i)=1 BX(i)=(ShipX LSH 2)+68 BY(i)=(ShipY LSH 1)+34 PCO!}LR(i)=Rand(15) LSH 4 PCOLR(i)==+10 AdresB=PMADR(i)+BY(i) MoveBlock(AdresB,BALL1,16) PMHPOS(i)=BX(i) !} EXIT FI ODRETURN;************************************;************************************PROC Align()BY!}TE i,clunk=[0] IF Level1>50 THEN clunk=1 ELSEIF Level1>150 THEN clunk=2 FI FOR i=1 TO 3 DO IF BSTAT(i)<>0 !}THEN IF BX(i)>(X0+4) THEN BXDR(i)=-2-clunk ELSEIF BX(i)<(X0+4) THEN BXDR(i)=2+clunk ELSE BXDR(i)=0 !} FI IF BY(i)>(Y0+4) THEN BYDR(i)=-2-clunk ELSEIF BY(i)<(Y0+4) THEN BYDR(i)=2+clunk ELSE BYDR(i)=0 FI!} FI ODRETURN;************************************;************************************PROC BALLMOVE()BYTE i !}FOR i=0 TO 3 DOIF BSTAT(i)<>0 THEN IF BSTAT(i)=1 THEN BSTAT(i)=2 ELSE BSTAT(i)=1 FI BX(i)==+BXDR(i) !} BY(i)==+BYDR(i) AdresB=PMADR(i)+BY(i) IF BX(i)<50 OR BX(i)>190 OR BY(i)<34 OR BY(i)>182 THEN BSTAT(i)=0 MOVE!}BLOCK(AdresB,BLANK,16) FI PMHPOS(i)=BX(i) IF BSTAT(i)=1 THEN MOVEBLOCK(AdresB,BALL1,16) ELSEIF BSTAT(i)=2 THEN !} MOVEBLOCK(AdresB,BALL2,16) FIFIODRETURN;************************************;************************************P!}ROC HITBALL()BYTE ARRAY MISCOL(3)=$D008BYTE IND,PLY,DUMMIFOR IND=0 TO 3 DOIF MISCOL(IND)>1 THEN MSTATUS(IND)=0 PLPTR(M!}Y(IND))==&PM_MISMASK(IND) DUMMI=MISCOL(IND) IF (DUMMI&2)=2 THEN PLY=1 ELSEIF (DUMMI&4)=4 THEN PLY=2 !} ELSE PLY=3 FI AdresB=PMADR(PLY)+BY(PLY) MOVEBLOCK(AdresB,BLANK,16) Color4=10 SOUND(1,Color4 LSH 4,8,4) BSTAT(!}PLY)=0 PM_HitClr=1 Score==+10 ShowScore()FIOD RETURN;************************************;Show game over info, and in!}it values;if replay;************************************PROC EndGame() EraseShip() TxtRow=2 TxtCol=2 Print("GAME O"}VER..PRESS TO PLAY AGAIN") DO UNTIL STrig(0)=0 OD NumShips=4 Score=0 TxtRow=2 TxtCol=2 Level=10 Level1=10 ShipStat"}us=0 Print(" ") TxtRow=1 TxtCol=12 PRINT(" ") ShowScore() ShowShips()RETURN"};************************************;************************************PROC BlownAway()BYTE shipH=53260,i,timeR=20 "} IF shipH=0 THENRETURN FI PM_WIDTH(0)=0 FOR i=0 TO 3 DO IF MSTATUS(i)=1 THEN MSTATUS(i)=0 PLPTR(MY(i"}))==&PM_MISMASK(i) Sound(2,0,0,0) FI PMClear(i) BSTAT(i)=1 BX(i)=X0 BY(i)=Y0 AdresB=PMAdr(i)+BY(i) Move"}block(AdresB,BALL1,16) PMHPOS(i)=BX(i) PCOLR(i)=(Rand(15) LSH 4)+10 OD Color4=14 Sound(1,Color4 LSH 4,8,8) BX"}DR(0)=2 BYDR(0)=2 BXDR(1)=2 BYDR(1)=-2 BXDR(2)=-2 BYDR(2)=2 BXDR(3)=-2 BYDR(3)=-2 DO IF BSTAT(0)=0 AND BSTA"}T(1)=0 AND BSTAT(2)=0 AND BSTAT(3)=0 THEN EXIT FI BALLMOVE() timeR=0 DO UNTIL timeR=3 OD OD C"}olor4=0 SOUND(1,0,0,0) PM_HitClr=1 NumShips==-1 ShowShips() IF NumShips=0 THEN EndGame() FI X0=120 Y0=170 PM_WID" }TH(0)=1 PCOLR(0)=170 Adres=PMADR(0)+Y0 MOVEBLOCK(Adres,SHIPSHAPE,17) PMHPOS(0)=X0 RETURN;**************************" }**********;************************************PROC MAIN()BYTE XX,Count,timeR=20SerialCtl=3 AudioCtl=0DLSetUp()PMGRAPH" }ICS()FOR XX=0 TO 7 DO PMCLEAR(XX) ODY0=120 X0=120 PCOLR(0)=170 Color3=14Adres=PMADR(0)+Y0 PLPTR=PMADR(4)MOVEBLOCK(Adres,S" }HIPSHAPE,17)PMHPOS(0)=X0 PM_WIDTH(0)=1ShowInfo()Timer2Ptr=ScrollColorsTimer2=2DO ShipDraw()ShipMove() ShootBack()Alig" }n() BALLMOVE()FOR Count=1 TO 3 DO timeR=0 DO UNTIL timeR=1 OD ShipFly() MissileFire() MissileMove() DARKEN() HITBALL("}) BlownAway() ODODRETURN TO 3 DO timeR=0 DO UNTIL timeR=1 OD ShipFly() MissileFire() MissileMove() DARKEN() HITBALL( ; GEM by Joel Gluck; 4 players, joysticksBYTE playto=[10], ;winning score maxbots=[5] ;max robots at end DEFINE ma&}x="255" ; max robotsCARD ARRAY linept(24)BYTE rb=[1], bl=[0], ms=[70], wa=[135], ex=[72], gm=[204], nm=[77&}], gemtaken, numbots, winner, winning=[0]BYTE ARRAY charset(2048)BYTE ARRAY x(max), y(max)BYTE ARRAY bx(max), by&}(max)INT ARRAY xd(max), yd(max)INT ARRAY bxd(max), byd(max)BYTE ARRAY alive(max), expl(max), fire(m&}ax), image(max), havegem(4), score(4)=[0 0 0 0], xst(4)=[1 18 1 18], &} yst(4)=[1 1 22 22], xsc(4)=[1 17 1 17], ysc(4)=[0 0 23 23]CARD csetPROC reset() BYTE i FOR &}i=0 TO 3 DO score(i)=0 ODRETURNPROC pauz(CARD p) CARD loop FOR loop = 0 TO p DO ; ODRETURNINT FUNC&} sign(INT n) IF n<0 THEN RETURN(-1) ELSEIF n>0 THEN RETURN(1) ELSE RETURN(0) FI PROC gr1&}init() CARD scrn, line Graphics(1+16) scrn = Peek(88) scrn ==+ Peek(89) * 256 FOR line = 0 TO 23 DO &}linept(line) = scrn + (20 * line) ODRETURNPROC charpats() BYTE i,b BYTE ARRAY foo(104)= [0 0 0 0 0 0 0 0 &} 126 129 165 129 165 189 129 126 195 195 129 165 129 189 231 60 195 36 126 219 126 36 36 231 255 219 90 126 60 &}82 66 126 60 60 24 255 153 60 102 102 0 0 0 16 56 16 0 0 255 170 255 85 255 170 255 85 145 137 51 170 101 &}138 209 68 17 128 48 10 97 138 144 68 17 128 32 8 1 144 0 68 1 32 0 0 0 0 1 64 0 56 124 254 254 124 56 1&}6] FOR i = 0 TO 103 DO Poke(cset+i,foo(i)) OD FOR i = 0 TO 80 DO b = Peek(57344+i+128) Pok&}e(cset+i+104,b) ODRETURN PROC scrninit() CARD i gr1init() FOR i=0 TO 4 DO Set&}color(i,0,0) OD cset = (charset + 1023) & $FC00 FOR i = 0 TO 1023 DO Poke(cset+i,0) OD Poke(756,cset/256) &} charpats() Setcolor(0,13,8) Setcolor(1,0,15) Setcolor(2,6,4) Setcolor(3,9,6)RETURN PROC plot1(BYTE x,y,col& }) BYTE POINTER pixel pixel = linept(y) + x pixel^ = colRETURNBYTE FUNC locate1(BYTE x,y) BYTE POINTER pix&!}el pixel = (linept(y) + x)RETURN(pixel^)PROC newdir(BYTE r) DO xd(r)=Rand(3) + -1 yd(r)=Rand(3) + -1 &"} UNTIL xd(r)<>0 OR yd(r)<>0 OD RETURNPROC walls() BYTE i,x,y FOR i = 0 TO 19 DO plot1(i,0,wa) plot1(i,23,&#}wa) OD FOR i = 0 TO 23 DO plot1(0,i,wa) plot1(19,i,wa) OD FOR i = 0 TO 30 DO x = Rand(10)+5 y = &$}Rand(12)+6 plot1(x,y,wa) OD FOR i=0 TO 3 DO plot1(2,i,wa) plot1(17,23-i,wa) plot1(i,21,wa) plot1(19-i,&%}2,wa) OD RETURNPROC initsnd() Poke($D20F,3) ; Damn OS Bug! Poke($D208,0) ; cost me 5 minutes!RETURNPROC plo&&}tgem() plot1(9,11,gm) gemtaken=0RETURN PROC rinit() BYTE pix,r walls() plotgem() initsnd() FOR r&'} = 0 TO numbots-1 DO IF r<4 THEN x(r)=xst(r) y(r)=yst(r) ELSE DO x(r)=Rand(10)+5 y(r)&(}=Rand(12)+6 pix = locate1(x(r),y(r)) IF pix = bl OR pix=4+rb THEN EXIT &)} FI OD FI alive(r)=1 IF r<4 THEN image(r)=r+rb havegem(r)=0 EL&*}SE image(r)=4+rb FI expl(r)=0 fire(r)=0 bx(r)=0 by(r)=0 plot1(x(r),y(r),image(r)) newdir(r) ODRETURNPRO&+}C scores() BYTE i winning = 0 FOR i = 0 TO 3 DO IF score(i)>9 THEN plot1(xsc(i),ysc(i),score(i)/10+&,}nm) FI plot1(xsc(i)+1,ysc(i),(score(i) MOD 10)+nm) IF score(i)>score(winning) THEN winn&-}ing=i FI ODRETURNPROC regen(BYTE r) BYTE pix IF r=0 THEN x(r)=1 y(r)=1 ELSEIF r=1 THEN x(r)=1&.}8 y(r)=1 ELSEIF r=2 THEN x(r)=1 y(r)=22 ELSEIF r=3 THEN x(r)=18 y(r)=22 ELSE x(r)=Rand(14)+3 y(r)=Rand(18)+&/}3 FI pix = locate1(x(r),y(r)) IF pix = bl THEN alive(r)=1 plot1(x(r),y(r),image(r)) &0} FI RETURN BYTE FUNC ahead(BYTE a,b INT ad,bd) BYTE pix pix = locate1(a+ad,b+bd) IF pix=bl OR (pix>=&1}ex AND pix<=ex+4) THEN RETURN(0) ;blank ELSEIF pix=wa OR (pix>=nm AND pix<=nm+9) THEN RETURN(2) ;wall or score &2}ELSEIF (pix>=rb AND pix<=rb+4) OR (pix>=rb+192 AND pix<=rb+196) THEN RETURN(1) ;robot ELSEIF pix=ms THEN&3} RETURN(3) ;missile ELSEIF pix=gm THEN RETURN(4) ;gem FIPrintF("%ECollision error: AHEAD%E")Break()RETURN(0) &4};dummyPROC getdir(BYTE r) BYTE ARRAY sdir(31)= [1 1 1 1 1 1 1 1 1 1 2 2 2 0 2 1 1 1 0 2 0 0 0 &5}1 1 1 1 2 1 0 1 1] BYTE stk stk = Stick(r) xd(r) = sdir(stk*2) + -1 yd(r) = sdir((stk*2)+1) + -1R&6}ETURNPROC explode(BYTE r) CARD pix IF expl(r)>1 THEN plot1(x(r),y(r),(5-expl(r))+ex) Sound(0,100&7},8,expl(r)*3) ELSE plot1(x(r),y(r),bl) Sound(0,0,0,0) FI expl(r) ==- 1RETURNPROC cease_fir&8}e(BYTE r) IF locate1(bx(r),by(r))=ms THEN plot1(bx(r),by(r),bl) FI fire(r)=0 Sound(1,0,0,0)RETURN PROC&9} kill(BYTE r) alive(r) = 0 ; DEAD expl(r) = 5 explode(r) cease_fire(r) IF r<4 THEN IF havegem(r)=1 &:} THEN plotgem() havegem(r)=0 Sound(2,0,0,0) Sound(3,0,0,0) FI FIRETURN&;}BYTE FUNC findr(BYTE a,b) ;find robot BYTE i FOR i = 0 TO numbots-1 DO IF x(i)=a AND y(i)=b AND alive(i)=1&<} THEN RETURN(i) FI OD PrintF("%EError: findr x=%U y=%U%E", a, b) Break()RETURN(0);PROC getgem(BYTE r)&=} havegem(r)=1 plot1(9,11,bl)RETURNPROC qwin(BYTE r) IF x(r)=xst(r) AND y(r)=yst(r) THEN winner&>}=r+1 FIRETURNPROC drawbot(BYTE r) IF r>3 THEN plot1(x(r),y(r),image(r)) ELSEIF havegem(r)=1 THEN plot1(&?}x(r),y(r),image(r)+192) qwin(r) ELSE plot1(x(r),y(r),image(r)) FIRETURNPROC move(BYTE r) BYTE targ,a,b,p&@}ix IF r<4 THEN getdir(r) IF Strig(r)=0 THEN IF fire(r)=0 THEN fire(r)=1 F&A}I RETURN FI ELSEIF Rand(0)<32 THEN newdir(r) IF gemtaken=1 AND fire(r)=0 THEN fi&B}re(r)=1 FI FI IF xd(r)=0 AND yd(r)=0 THEN drawbot(r) RETURN FI pix=ahead(x(r),y(r),xd(r),y&C}d(r)) IF pix=1 THEN kill(r) a=x(r)+xd(r) b=y(r)+yd(r) targ = findr(a,b) kill(targ) RET&D}URN ELSEIF pix=2 OR (pix=4 AND r>3) THEN IF r>3 THEN newdir(r) FI RETURN ELSEIF pix=3 T&E}HEN kill(r) RETURN ELSEIF pix=4 AND r<4 THEN gemtaken=1 getgem(r) FI plot1(x(r),y(r),bl) x(r)&F} ==+ xd(r) y(r) ==+ yd(r) drawbot(r)RETURNPROC initfire(BYTE r) BYTE targ,pix IF xd(r)=0 AND yd(r)=0 THE&G}N fire(r)=0 RETURN FI bx(r)=x(r) by(r)=y(r) bxd(r)=xd(r) byd(r)=yd(r) pix=ahead(bx(r),by(r),bxd(r),byd(r)) I&H}F pix=1 THEN targ = findr(bx(r)+bxd(r),by(r)+byd(r)) kill(targ) cease_fire(r) RETURN ELSEIF pix&I}=2 OR pix=4 THEN cease_fire(r) RETURN FI bx(r) ==+ bxd(r) by(r) ==+ byd(r) plot1(bx(r),by(r),ms) Sound(1,0&J},8,8) fire(r)=2RETURN PROC bullet(BYTE r) BYTE targ,pix IF fire(r)=1 THEN initfire(r) RETURN FI pix&K}=ahead(bx(r),by(r),bxd(r),byd(r)) IF pix=1 THEN targ = findr(bx(r)+bxd(r),by(r)+byd(r)) kill(targ) ceas&L}e_fire(r) RETURN ELSEIF pix=2 OR pix=4 THEN cease_fire(r) RETURN FI ; move it: plot1(bx(r),by(r),b&M}l) bx(r) ==+ bxd(r) by(r) ==+ byd(r) plot1(bx(r),by(r),ms) Sound(1,fire(r)*2,8,8) fire(r) ==+ 1RETURNPROC &N}action(BYTE r) IF alive(r) THEN move(r) ELSEIF expl(r)>0 THEN explode(r) ELSE IF r<4 OR gemtaken=1 &O} THEN regen(r) FI FIRETURNPROC shots() BYTE r FOR r= 0 TO numbots-1 DO IF fire(r) THEN bullet&P}(r) FI ODRETURNPROC reward(BYTE r) score(r) ==+ 1RETURNPROC tick() BYTE c c=Peek(20) DO UNTIL c&Q}<>Peek(20) ODRETURNPROC round(CARD num) BYTE r,c,count=[0],count2=[0],vol=[0] CARD speed numbots=num IF &R}800-(numbots*40)<0 THEN speed=0 ELSE speed=800-(numbots*40) FI scrninit() rinit() scores() Poke(764,255&S}) Poke(77,0) winner=0 DO FOR r = 0 TO numbots-1 DO action(r) count ==+ 1 IF count = (num&T}bots RSH 1)-1 THEN count = 0 shots() FI IF gemtaken=0 THEN plotgem() ELSE Sound(2,50,10,15-&U}vol) vol=(vol+1) & 15 FI count2 ==+ 1 IF count2 = (numbots RSH 1) THEN count2=0 tick() t&V}ick() FI OD c=Peek(20) Poke(711,c) UNTIL winner>0 OD Sndrst() reward(winner-1)RETURNPRO&W}C intro() Graphics(0) PrintF("%E%EWelcome to GEM, by Joel Gluck.%E%E") DO PrintF("%EHow many points wins? ") &X} playto = InputB() UNTIL playto>0 OD PrintF("%E%EHow many robots in final round? ") maxbots = InputB() Prin&Y}tF("%E%EPress START to begin...") DO UNTIL Peek(53279)=6 ODRETURNBYTE FUNC playagain() BYTE k Graphics(0&Z}) PrintF("%E%EGame over!%E") DO PrintF("%EPlay again (y/n)? ") k=GetD(1) IF k='y OR k='Y THEN RETURN(&[}1) ELSEIF k='n OR k='N THEN RETURN(0) FI ODPROC plotim(BYTE r) BYTE x,y,pix,vol,p BYTE ARRAY mask(8) &\}= [128 64 32 16 8 4 2 1] FOR x=0 TO 7 DO FOR y=0 TO 7 DO pix = m&]}ask(x) & Peek(cset+((r+1)*8)+y) IF pix<>0 THEN plot1(x*2+2,y*2+4,image(r)) pl&^}ot1(x*2+3,y*2+4,image(r)) plot1(x*2+2,y*2+5,image(r)) plot1(x*2+3,y*2+5,image(r)) FI &_} OD OD FOR vol = 0 TO 15 DO Sound(0,50,10,15-vol) Sound(1,100,10,15-vol) Sound(2,150,10,15-&`}vol) Sound(3,200,10,15-vol) Setcolor(0,vol/2+2,10) FOR p = 1 TO 8 DO tick() OD OD FOR p &a}= 1 TO 90 DO tick() ODRETURNPROC announce(BYTE r) BYTE i,n INT xd,yd,xx,yy scores() FOR i = &b}0 TO 15 DO FOR n=0 TO 100 DO Sound(0,n,8,15-i) Setcolor(2,6,n/10) OD tick() OD &c}Setcolor(2,0,0) Setcolor(3,9,6) FOR i=0 TO 11 DO Sound(0,11-i,8,15) Sound(1,24-(i*2),10,8) Setcolor&d}(0,i,12) FOR n=0 TO numbots-1 DO IF alive(n)=1 AND n<>r THEN xx=x(n) yy=y(n) &e} xd=sign(9-xx) yd=sign(11-yy) plot1(x(n),y(n),bl) x(n)=x(n)+xd &f} y(n)=y(n)+yd plot1(x(n),y(n),image(n)) FI OD tick() tick() ODSndrst() plot&g}1(9,11,bl)plotim(r) RETURNPROC rdmize() BYTE a,b,i,j FOR a=0 TO 16 DO FOR b=0 TO 6 DO bx(b&h}+a*7) = a by(b+a*7) = b OD OD FOR i=0 TO 118 DO j=Rand(119) a=bx(i) b=by(i) bx(i)=bx&i}(j) by(i)=by(j) bx(j)=a by(j)=b ODRETURNPROC gwarp(BYTE x,y) BYTE g,h,f,freq CARD a,b,loop DO a=R&j}and(3)-1 b=Rand(3)-1 UNTIL a<>0 OR b<>0 OD g = locate1(x,y) f = 0 freq = 0 DO h = locate1(x+a,y+b) &k} plot1(x,y,f) f=h x ==+ a y ==+ b plot1(x,y,g) freq ==+ 1 Sound(0,freq*10,8,15) IF y=0 OR y=23 O&l}R x=0 OR x=19 THEN EXIT FI FOR loop=1 TO 750 DO OD OD plot1(x,y,f) Sndrst()RETURN&m}PROC titles() BYTE x,y,i,c=[0],a,b scrninit() color = 12 x=2 y=8 Plot(x+4,y) Drawto(x,y) Drawto(x,y+6) &n} Drawto(x+4,y+6) Drawto(x+4,y+3) Drawto(x+2,y+3) Plot(x+10,y) Drawto(x+6,y) Drawto(x+6,y+6) Drawto(x+10,y+6) Plot(x+7,&o}y+3) Plot(x+8,y+3) Plot(x+12,y+6) Drawto(x+12,y) Drawto(x+14,y+2) Drawto(x+16,y) Drawto(x+16,y+6) rdmize()&p} FOR i = 1 TO 120 DO Sound(0,255,10,i RSH 3) Sound(1,254,10,i RSH 3) c ==+ 3 Poke(709,c) tick(&q}) OD Poke(709,120) Sndrst() FOR i = 0 TO 118 DO a = bx(i) b = by(i) IF locate1(a+x,b+y)<>0&r} THEN gwarp(a+x,b+y) FI ODRETURNPROC game() CARD num Close(1) Open(1,"K:",4,1) t&s}itles() DO intro() reset() DO IF playto>1 THEN num = 4+(score(winning)*maxbots/(playto-1)) ELSE num =&t} 4+maxbots FI round(num) num ==+ 1 UNTIL score(winner-1)=playto OD announce(winner-1) UNTIL playagain(&u})=0OD Close(1)RETURN(num) num ==+ 1 UNTIL score(winner-1)=playto OD announce(winner-1) UNTIL playagain($;QESPONGTFPSET 106=144; RESERVE SPACE FOR PM GRAPHICSBYTE HPOS,VPOS,P0POS,P1POS,HITS=[0],NUMPLAYERS=[2]BYTE ARRAY P*w}M(2048)=$9800,COLR(9)=704INT XDIR=[1],YDIR=[2],XINIT=[1],YINIT=[2]BYTE ARRAY PPL(4)=53260BYTE ARRAY PPF(4)=53252BYTE ARRA*x}Y BALL=[0 0 0 0 0 0 $C0 $C0 $C0 $C0 0 0 0 0 0 0]BYTE ARRAY PADDLE=[0 0 0 $E0 $E0 $E0 $E0 $E0 $E0 $E0 $E0 $E0 $E0 $E0 $E0 $E*y}0 $E0 $E0 $E0 $E0 $E0 $E0 $E0 $E0 $E0 0 0 0]CARD PL0SCORE=[0],PL1SCORE=[0]BYTE HP0,HP1,XXPROC DELAY(BYTE I); DELAY I/60 S*z}ECONDS. BYTE N18=18,N19=19,N20=20 CARD TIME IF I=0 THEN I=1 FI TIME=I+N19*256+N20 WHILE TIME<>(N19*256+N20) DO OD*{}RETURNPROC PMOFF(); TURN OFF PM GRAPHICS BYTE I POKE(559,34) POKE(623,4) POKE(53277,0) FOR I=0 TO 3 DO P*|}OKE(53248+I,0) ODRETURNPROC PMON(); TURN ON PM GRAPHICS BYTE I POKE(559,62) POKE(54279,$98) POKE(53277,3*}}) POKE(623,1) FOR I=0 TO 3 DO POKE(53256+I,2) COLR(I)=(I+1)*16+10 POKE(53248+I,110) HPOS=110 *~} VPOS=110 POKE(53248+I,HPOS) OD POKE(53250,255-HPOS) HP0=110 HP1=145RETURNBYTE FUNC PLPL(BYTE N1,N2)*} BYTE I I=PPL(N1) RSH N2 I=I&1RETURN(I)INT FUNC PSTK(BYTE NUM) BYTE I=632,J=633,K=633 IF NUM=0 THEN IF (I*} & 12)=4 THEN HP0==+2 ELSEIF (I & 12)=8 THEN HP0==-2 FI IF (I & 3)=2 THEN RETURN(-3) ELSEIF (I & 3)=1*} THEN RETURN(3) ELSE RETURN(0) FI ELSEIF NUM=1 THEN IF NUMPLAYERS=1 THEN IF (VPOS-4)>P1POS THEN*} P1POS==+3 ELSEIF (VPOS-4)197 THEN P0POS==-3 FI IF *}P0POS<33 THEN P0POS==+3 FI P1POS==+PSTK(1) IF P1POS>197 THEN P1POS==-3 FI IF P1POS<33 THEN P1POS==+3 FI IF HP0<55*} THEN HP0=55 FI IF HP0>122 THEN HP0=122 FI POKE(53249,HP0) IF HP1<132 THEN HP1=132 FI IF HP1>200 THEN HP1=200 FI*} POKE(53250,HP1) MOVEBLOCK(PM+1024+256+P0POS,PADDLE,28) MOVEBLOCK(PM+1024+512+P1POS,PADDLE,28)RETURN PROC MOVEBALL*}(); MOVE PM BYTE I,J,K,GPRIOR=623,CONSOLE=53279,HITCLR=53278 CARD A,B,C ;THE ARRAYS CONTAIN THE SHAPES HITCLR=255*} ;XDIR IS ALWAYS 1 OR -1 HERE, BUT COULD COME FROM JOYSTICK READING HPOS==+XDIR IF HPOS<52 THEN SERVE(0) *} PL1SCORE==+1 FI IF HPOS>202 THEN SERVE(1) PL0SCORE==+1 FI ;HPOS MUST BE IN BOUNDS POKE(532*}48,HPOS) ;SAME COMMENT AS FOR XDIR VPOS==+YDIR IF VPOS>210 OR VPOS<34 THEN YDIR=-YDIR SOUND(0,150,10*},10) FI MOVEBLOCK(PM+1024+VPOS,BALL,16) DELAY(1); IN ORDER TO DETECT COLLISIONS, HEAR SOUNDS ETC. THIS MUST BE HERE.*} TRY WITHOUT IT !!! SNDRST()RETURN INT FUNC SGN(INT X)RETURN(X & 32768) PROC XCHNG() INT TEMP,TEMP1 IF XD*}IR>0 AND YDIR>0 THEN TEMP=XDIR XDIR=YDIR YDIR=TEMP ELSEIF XDIR<0 AND YDIR<0 THEN TEMP=XDIR X*}DIR=YDIR YDIR=TEMP ELSE TEMP=XDIR XDIR=-YDIR YDIR=-TEMP FIRETURNPROC BOUNCE(BYTE PL) BYTE A*}RRAY STRIG(4)=644 IF STRIG(PL)=0 THEN XCHNG() FI XDIR=-XDIR SOUND(0,150,10,10) MOVEBALL()RETURNPROC DRAWNE*}T(BYTE COLS) BYTE I,J,K COLOR=1 PLOT(0,0) DRAWTO(79,0) PLOT(79,47) DRAWTO(0,47) FOR I=0 TO COLS RSH 1 DO *} PLOT(39-I,1) DRAWTO(39-I,46) PLOT(39+I,1) DRAWTO(39+I,46) ODRETURN PROC INCSPEED() IF XDIR*}>0 THEN XDIR==+1 ELSE XDIR==-1 FI IF YDIR>0 THEN YDIR==+1 ELSE YDIR==-1 FI HITS=0 IF XDIR>3 OR YDIR>3 OR*} XDIR<-3 OR YDIR<-3 THEN PADDLE(3)=0 PADDLE(4)=0 PADDLE(24)=0 PADDLE(23)=0 FIRETURNPROC GET_NUM*}BER_OF_PLAYERS() GRAPHICS(18) POSITION(0,6) PRINTDE(6,"ONE players?") CLOSE(4) OPEN(4,"K:",4,0) DO *} XX=GETD(4) XX==-48 UNTIL (XX=1) OR (XX=2) OD NUMPLAYERS=XXRETURNPROC MAIN(); MAIN CONTROL PROGRAM BYTE *}CONSOLE=53279,RGEN=53770,PNUM,SDMCTL=559,J,K,COUNTER,GPRIOR=623 INT X,Y CARD I GET_NUMBER_OF_PLAYERS() POKE(53768,0*}) POKE(53775,3) POKE(623,1) ZERO(PM,2048) PNUM=SDMCTL GRAPHICS(21) SDMCTL=PNUM CONSOLE=8 SDMCTL=PNUM PMO*}N() COLR(8)=13*16+2 COLR(4)=1*16+10 DRAWNET(0) PL0SCORE=0 PL1SCORE=0 WHILE CONSOLE=7 DO ; CONTINUES UNTIL ANY YELLOW KE*}Y IS PRESSED IF PLPL(0,1) THEN BOUNCE(0) HITS==+1 FI IF PLPL(0,2) THEN BOUNCE(1) HITS==+1 FI IF HITS>9 *}THEN INCSPEED() FI MOVEPADL() MOVEBALL() OD PMOFF() GRAPHICS(18) PRINTD(6,"LEFT PLAYER:") PRINTCDE(6,PL0SCORE) PR*}INTD(6,"RIGHT PLAYER:") PRINTCDE(6,PL1SCORE) DELAY(99) GRAPHICS(0)RETURNRINTD(6,"LEFT PLAYER:") PRINTCDE(6,PL0SCORE) PR(NMODULE; Rem --- SLIME TRAILS --; Rem ; Rem (FROM THE MOVIE OF THE SAME NAME); Rem ; Rem THIS GAME REQUIRES TWO JOY.}STICKS PLUGGED INTO CONNECTORS; Rem NUMBER 1 AND 2 (STICKS 0 AND 1);;This game was translated directly;from BASIC XL to .}ACTION!, line by;line. Please forgive the non-ACTION!;format of the program, but it works,;and the translation only took .}about;an hour.BYTE Score0,Score1,H0,V0,H1,V1, Hmv0,Hmv1,Vmv0,Vmv1,Volume, Bang0,Bang1,HS,VSBYTE Attract=77CARD.} Delay,Count,Move,TempoBYTE FUNC Hstick(BYTE n) IF (Stick(n)&8)=0 THEN RETURN (1) FI IF (Stick(n)&4)=0 THEN RETURN (255.}) FI RETURN (0)BYTE FUNC Vstick(BYTE n) IF (Stick(n)&1)=0 THEN RETURN (1) FI IF (Stick(n)&2)=0 THEN RETURN (255) FI .} RETURN (0)PROC MAIN(); init for new game !!!!DO ; infinite loopScore0=0:Score1=0; Rem ; Rem ; Rem ROUND INITIA.}LIZATIONDO ; terminated by the UNTIL far belowGraphics(7)color=1 Plot(0,0):Drawto(0,79) Drawto(159,79):Drawto(159,0) .}Drawto(0,0)tempo=400PrintE("SCORE")PrintE("PLAYER 1PLAYER 2")PrintF("%U%U%E", Score0, Score1)H0=40:V0=40:H1=.}119:V1=40Hmv0=1:Vmv0=0:Hmv1=-1:Vmv1=0color=2:Plot(H0,V0) color=3:Plot(H1,V1); Rem START A ROUNDFor Count=50 To 150 .}Step 50DO For Volume=0 To 15 DO Sound(0,Count,10,15-Volume) For Delay=1 to 1000 DO OD ODOD .} IF Hstick(0) THEN Hmv0=Hstick(0) FIIF Hstick(1) THEN Hmv1=Hstick(1) FIFOR Move = 0 TO 65535 STEP 4DOAttract=0IF (Mo.}ve&255)=0 AND TEMPO>50 THEN TEMPO= (TEMPO * 3)/4 FI ; Rem SENSE AND MOVE PLAYER 0 HS=Hstick(0) .}If HS<>0 AND Hmv0=0 Then Hmv0=HS:Vmv0=0 FI VS=Vstick(0) If VS<>0 AND Vmv0=0 Then Vmv0=VS:Hmv0=0 FI.} H0=H0+Hmv0:V0=V0-Vmv0 Bang0=Locate(H0,V0) If Bang0=0 THEN color=2:Plot(H0,V0) FI; Rem SENSE AND MO.}VE PLAYER 1 HS=Hstick(1) If HS<>0 AND Hmv1=0 Then Hmv1=HS:Vmv1=0 FI VS=Vstick(1) If VS<>0 AND Vmv1=0 T.}hen Vmv1=VS:Hmv1=0 FI H1=H1+Hmv1:V1=V1-Vmv1 Bang1=Locate(H1,V1) If Bang1=0 THEN color=3:Plot(H1,V.}1) FI If Bang0=0 AND Bang1=0 THEN For Volume=0 To 14 Step 2 DO Sound(0,Move&255,10,14-Volume.}) For Delay=1 to TEMPO DO OD OD ; Rem SOMEBODY GOT BANGED Else IF Bang0<>0 AND Bang1<>0 THE.}N ; do nothing ELSE IF Bang0 THEN Score1=Score1+1 FI IF Bang1 THEN Score0=Score0+1 FI For .}Volume=0 TO 15 DO If Bang0 Then Setcolor(1,4,15-Volume) FI If Bang1 Then Setcolor(2,4,15-Volume) F.}I Sound(0,23,0,15-Volume) For Delay=1 to 1000 DO OD OD FI EXIT Fi OD; Re.}m CHECK FOR END OF GAME UNTIL (Score0>=10 OR Score1>=10) OD Graphics(2) If (Score00 AND Strig(1)<>0) DO OD.} OD ; !!!! main loop !!!!RETURNGAIN"); Rem WAIT FOR A BUTTON TO BE PUSHED WHILE (Strig(0)<>0 AND Strig(1)<>0) DO OD,$