ML }  X c0C)HCCH Mhhݩh `eCDiCD`  RPH   * 1H0芢@) Y0.Ș`i#(PMR\ \b Pgi 0 @ $ ࠮UY   0DDԝLyȀ}iN@ )?HI   Y0`HIJH)* J j *  hJJJ)HJ   h i   }  YS S0 i`  !"#$%&'()*+,-./0123456789:;<=>?@H J3x}j2h)1 |9 ӭ45(420 * (0241өX.`  ? *^)Lkl  }k*PE 5 LN(G 2 gh ` ghgL ( 2 L<(0d( L ^E0O +)$IC} H @8 f e h q  |_ 8cd CDL> CFa M  L< ?^)La`2' }")*F$F$F$F$F$ 5 )ШF/Șa]`efС,L>/A! A^)Za`@ ܬ/^)( }")")`$F$F$F 5$/L /aF@__(LN`ae$$%8(`()` ? % 2L< ?^)^>_f i ;g }Ch) qkl5\   Zc[d 4akl L>@^LZ>_ 3L kJjjj^^ e } fE]_agh`L>:$ȱ$@+[_#{ %  Խji! ai % 2 I   } J C H h  ˰ %  ;  q LZ 2  ,  H `L> ,/ % k/ q Ơ?} ѩ/ | H /L_0?MdLc 3_MfLe N`aL<L>cLdMaNL< }?"(+ըHH`Q R !   $ . FȑF! /GF \H"+0+* }! F sL>cm: J~cTF1F  *c+)5! c (, c)1JJJc(c*d} I ,0  Xi N dF4 5 ,8,0 ʩ0H 2h     i} D JDbbFL>vij`*&!ߍ*@h ] 0 ^0`ߍ c 0l$$%}()()%*&J%H,@hH hH@,h $% 8i8$(%)0hhH ]h`() c 0H c 0 h}`hhh&JJ ](ll  L>0 q/qcdHH 99 H H  I9 9 } NY 2H  >8 d c  qFcdL HII/ Ih8`h`Lcdc`cd`u F }E KE]L</auF a0BF/aɜɛ׽]E ;  qW  KFL FREE SECTORS C}H) *Fh ):FȽ F FCIH' 0 d  i:Fȩ/F.a`CD/08HDIC}IHȰ/F`ȱ$>.+.i ȱ$:刄H !A I Hȱ$*?ȝ 2. ? [_{ ,0}-:) 0$:>WI  IТ,L>H  0hLY k i j`C ?(  0(C.` E *}! .ii  c0N EE 1 EC)0')AY)ע ? 0E088FG \dc}  (HhLcL3 ^J ^ Lrfe 0=ghecfdefa``_Z_0  _ 3LMHFhȑFȽa}F^0 ] FFL3ekfl\cZd[L3 ef7 | 40^ 0 FJJ]1FfȱFeȱF``B!08`]}EE 1 8. *D}iji( AʩLMW!)   XȌVȌY W`VVWH8 h}YaHXY8 XH hHH \h hX` *Hh I8ih( a ( a(!`L\CJfCJ}fCJfCDfC` qV  HII  INYh `h`c)8jHciPdijIjFIjFIjh` qV I }38 8H0 I  ' H L>8jY8j NYY &I &I &IHeH.eIif!}  `!.莼 2Jjj }.b Ȉ!b FG` ɩL> z  "}e H^04 \ Ȍ  8 i h !`I0 `C Y%.`DOS SYS I #} ` kݩ.C/`WV.b۩bѤC9`CLJ G  ,F0(BԝDEI$} V0 : , BLVDE`D1:*AR08hhJ ȱHȱIȱBȱDȱEeeHHLV)%}  1*  ,,p-  0  &  '0   Lv)l, 0  &LD&}1:MEM.SAVE:D1:DUP.SYSTERMUF1:MEM.SAVE:D1:DUP.SYSTERMUF}I)vCD2:DOS.SYS n  * \*`آ R'S )ɀ@  T))% CError lo(}ading MEM.SAV or memory!  0* a*b*c*d* R Hc*JSDc*J-=d* 0b*ʈд =}MyDOS 4)}.53/4- Copyright 1988,˛Disks 1H 2S- D: = D1: = =1-8.Dir of D1:-D8: *. Dir of D:A. *}Disk Directory K. Save MemoryB. Run Cartridge L. Load MemoryC. Copy File(s) M. Run at AddressD. Delete File(s) N. L+}oad MEM.SAVE. Rename File(s) O. Change Config.F. Lock File(s) P. Set DensityG. Unlock File(s) Q. Make DirectoryH. Wr,}ite DOS Files R. Pick DirectoryI. Initialize Disk S. Set RAMdisk #J. Duplicate Disk V. Set Verify Flag  @莻-}( 0  =Select Item ( for menu):@  =ɛL)1L,*L,:W@ ,,L=No such item!.}L), -0{ ПFull directory name?Z"L.Directo3}ry to be used as 'D:'? @ A(5)L.(I: 輿ȱޝL), CInvalid directory!L@( 4}(0Le-File source, destination? '( @C۩wڭ8wܭC B8'0 @(ߍeލd(DЍ( ? 8' 5}B Bȱޙ':>Ȍ(C0J* .B 9'ȱ/.* #,ɛȝ9' ߰ B |?,(0L), 'u6}t(9'3?&' .'Ƚ9'?&'  .و'Q?''(#( = =-->' =Q7} =YR_o (J(  0?B݋''BJ)`''utz0( ?(L|0L),L@nDisk to FORMAT: 8}A B(UTލ1 =(Press for Enhanced Dns)Type to Format Drive 2: =AIYZNj[R VL@L)9},D2:DUP.SYSDrive to write DOS files to? AH1:*J)2I) Z B hpI) ?<2UT:}C٩vة۩.کL;Source, Destination (Sectors)? A)((8'( A)((((( @(0% =Insert b;}oth disks, type = B( A((/( DB(( CDrives not compatible!J(j(8'Hh''<}h(ɛy CInvalid options! N@-&& N@)׍&&(&&&۩ک&&&&8* 84&&&& 848=}*8(ܭ(ݥwC, CNot enough memory! ک&&`(Mh  & >L@&i &&>}&&mm   >  &((&թԥԍ(Ս(((( ( ((Cw((?}ԍ((,(0"( (( >m(m( & &("L),  ( BL4,(, =Insert DESTIN@}ATION disk, press =Nͻ I) b( 0J) @((ԭ(խ( ( (((L4Drive, new density: A}A8'ɛ CDrive unchanged.(ު90٨Ȍ(SD  qBL)xԌҭHӭ@@ ʎӆ@B}ӭ@@ :  $ӹ@hөԥX` Aˠ =RAM disk present? =NL08 =xlon C}or E type RAMdisk? =Aό  L   M   A1| =6: ' =No extra memory available!L08L7D} & & & =Use default config for 0)ȩ = =K? =NL 8 =Size(K)? ? N@FjFjFjFjE}: =Page sequence? ? P@o* =RAM disk drive no? = 09) `9 - 9**H***) 9 Ȋ)h9 F}@@ H'h(#''/'(ɛ ? P@(@: 3 ʽ' L 8 =Duplicated sequence number!LG}7 =Wrong number of entries!L7K큅쀄 =Verify WRITEsH}? ; =Number of File Buffers? ? N@  6 Lv),R( 4;L),Drive number or : =ɛLP99L50Ȍ(I} =Remove drive? =Y =Is drive configurable? =YЂ =High capacity drive? =Yy =Is drive double sided? =YJ} *; =Tracks/side? ? N@#0M P( *; =Step rate? =4/ *; 4;L), =Drive size (in sectors)? ? N@K}H(h 7;L),RAM disk drive no? 8L),Verify WRITEs? ;L), =WNPp`(`(  LqBSAVE:filename,stL}art,end(,init(,run)) @TUH P@Cp` ?< P@؆8օڊ CInvalid START-END range!۩ P@ M} P@ hԄՠAλȌZ B04*  0$ڍXۍY֍T׍U,0LCL C HCL@ֆ׌`Load MEN}M.SAV from what file? 0#L),L@Load from what file?) @TU&̩Z B &0&-&а&𨭻INO}IZ'RV0II CNO CARTRIDGE!Ԇխ  )L>Run from what address? ?ɛP} P@ CAddress must be 1-4 hex digits! BHILV {=`hh =HH` =0{a HɛQ} {= {=h` {=L), = = pHH =hh`K: p `(((( i ɀ((L@(`(BD(0>HHR}''>I>U>I>ɛ(ɛ (>(`͈>DH(`(HI`(k5 = =( 5B( (>@S}A (J B0}((HHIIDDEE B @(CɈP(# B = =( 5BL'?(B>>((ڤ ܝHT}ݝI VL>L@(" B !B I)  B(L& R XY( @&:0H&Ϳ((&U} ( .( & ( .(ʩ(`ލD&ߍEBIʎH( V0`ԩ ؠA@ȱB@ȱ)C@ V}CError -- 128&`$8f cAԄձG/ $<68i/(Ԧ`H&եԦ&&eԅheԅԊe(iLZ@&&W}&&ԅLZ@B ? cA?*(ɛ:./2SX(0ȱ/.ɛ(ލ8'ި0X}#:Ȱ :ފ :ȱ: : sAD sAޥ`(eޅީe߅`(` @LA @TUȪ: CFile name noY}t allowed!: )  h( >0+L TUD CNot a disk file!(0` =Insert SOURCE disk, press Z} =,(pӮ(A(O aB qBaB`1(L$ b(de BJKO [}L@O` B((*(((`ȱޙ((:>Ȍ(`D:`OS.SYS,DOS.SYShh =L),  VLI /C /C\},pLhL~F#Խ٩Յ׆  LC`David R. Eichel rel.ver.1/1/90OS.SYShh =L),  VLI /C /CS; 뾠 w/clock 1.1 12/19/1992; Bill Kendrick NBS 1992ModuleDefine Red="170",Green="85",Black="0",White="255",Mov^}e="MoveBlock"Card ScMem,X,CurrentShapeCard Array ArrowTemp(1280),Shape(64)Byte Array TempScMem(960),ButX(10),ButX2(10),But_}Y(10),ButOn(10)Byte Fire,Y,Sp,Max,Mode,Key=764,Size,Width,ArrowDraw,ArrowOff,Accl,AcclTimer, FlshSpeed,NumFlshes,ClockIsEna`}bled,ClockIsOn,Hour,Min,Sec,PM,Year,Month,Day,FireOn,AHour,AMin,APM,AlarmOn,AlarmEnabled, AlarmOkProc Pause(Byte Time) Byta}e BT,BT2 For BT=0 To Time Do For BT2=0 To 254 Do Od Od ReturnProc Bell(Byte Pitch) Byte BT For BT=0 To 15 Do Pause(2) Soundb}(0,Pitch,10,15-BT) Od ReturnProc _ArrowS()[8 1 248 0 0 0 224 0 0 0 240 0 0 0 184 0 0 0 156 0 0 0 14 0 0 0 6 0 0 0 0 0 0 c}0]Proc _Clock()[13 1 56 0 0 0 56 0 0 0 56 0 0 0 124 0 0 0 130 0 0 0 146 0 0 0 154 0 0 0 130 0 0 0 130 0 0 0 124 0 0 0 5d}6 0 0 0 56 0 0 0 56 0 0 0]Proc _Disk() [1 1 0 0 0 0];Proc _Trash()Proc _Folder()Proc _Document()Proc _Image()Proc _Apple}ication()Proc _Accessory()Proc _System()Proc PutWas() Move(ScMem+Y*40,ArrowTemp,Size*40) ReturnProc GetIs() Move(ArrowTemf}p,ScMem+Y*40,Size*40) ReturnProc ArrowPoke(Card Whr Byte Wth,Was1,Was2)Byte Wth1,Wth2 Wth1=Wth RSh (X Mod 8) If (X Mod 8g})<>0 And X/8+Width<38 Then Wth2=Wth LSh (8-(X Mod 8)) Else Wth2=0 Fi If ArrowDraw=0 Then Poke(Whr,Wth1%Was1) Poke(Whr+1,Wthh}2%Was2) ElseIf ArrowDraw=1 Then Poke(Whr,Wth1!Was1) Poke(Whr+1,Wth2!Was2) ElseIf ArrowDraw=2 Then Poke(Whr,(Wth1!Was1)-Wth1i}) Poke(Whr+1,(Wth2!Was2)-Wth2) FiReturnProc DrawArrow()Byte BT,BT2,Now,Was1,Was2Card Where,Temp If ArrowOff=1 Then Retuj}rn Fi For BT=0 To Size-1 Do Where=ScMem+X/8+(Y+BT)*40 PokeC(@Temp,Shape(BT*2)) For BT2=0 To Width Do Now=Peek(@Tempk}+BT2) Was1=Peek(Where+BT2) Was2=Peek(Where+BT2+1) ArrowPoke(Where+BT2,Now,Was1,Was2) Od OdReturnProc ChangeShape(Carl}d What) PutWas() Size=Peek(What) Width=Peek(What+1) MoveBlock(Shape,What+2,Size*4) Zero(Shape+Size*4,128-Size*4) GetIs() Drm}awArrow()ReturnProc ChangeMode() Move(TempScMem,ScMem+7680-960,960) If Mode=0 Then Graphics(8+16+32) PokeC(709,15);bn En}lseIf Mode=1 Then Graphics(15+16+32) PokeC(708,2056) Poke(710,15);bg ElseIf Mode=2 Then Graphics(15+16+32) PokeC(708,2050) Po}oke(710,15);blsh ElseIf Mode=3 Then Graphics(8+16+32) PokeC(709,2560) Poke(712,10);wn ElseIf Mode=4 Then Graphics(15+16+32)p} Poke(712,10) PokeC(708,1542) Poke(710,0);wg ElseIf Mode=5 Then Poke(712,10) PokeC(708,518) Poke(710,0) Fi;wsh Move(ScMem+7q}680-960,TempScMem,960) Poke(87,8)ReturnProc GDesk_SetUp(Char Array Huh)Card BT If Huh(0)=0 Then SCopy("program",Huh) Fir} Print("}Another GDesk ") PrintE(Huh) PutE() PrintE("Running GDesk v0.0 with Clock v1.1");PrintE("and 'DoCls' v0.0") ; s} PrintE("By Bill Kendrick, NBS 1992") BT=0 Do BT==+1 Until Key<255 Or BT=65000 Od FireOn=0 Key=255 ClockIsEnabledt}=1 For BT=1 To 5 Do Close(BT) ButOn(BT*2-1)=0 ButOn(BT*2)=0 Od Accl=1 Max=32 Mode=0 ArrowDraw=0 FlshSpeed=10 NumFlshes=1;dfu} Graphics(24) ScMem=PeekC(88) Zero(ScMem,7680) ChangeMode() X=160 Y=96 Sp=0 Size=32 Width=4 ArrowOff=0 GetIs() ChangeShapev}(_ArrowS) Bell(29) AlarmOk=1 AlarmOn=0 AlarmEnabled=0 APM=1 PM=1ReturnProc OSKeyOff() Key=255 Pause(20) ReturnProc Testw}OSKeys() If Key=223 Then OSKeyOff() Mode==+1 If Mode=6 Then Mode=0 Fi ChangeMode() Fi If Key=222 Then OSKeyOff() ArrowDraw=x}=+1 If ArrowDraw=3 Then ArrowDraw=0 Fi PutWas() DrawArrow() FiReturnProc Arrow()Byte Stk,OYCard OX Key=Peek(764) If Ary}rowOff=1 Then PutWas() Return Fi OX=X OY=Y Stk=Stick(0) Fire=1-STrig(0) If FireOn=1 Then Fire=1 Fi If Key=140 Or Key=142 Orz} Key=143 Or Key=134 Or Key=135 Then If Key=140 Then Fire=1 Fi If Key=142 Then Stk=14 Fi If Key=143 Then Stk=13 Fi If {}Key=134 Then Stk=11 Fi If Key=135 Then Stk=7 Fi If Peek(53775)<>251 Then Key=255 Fi Fi If Key=204 Then Key=255 FireOn=1|}-FireOn Fi If Stk<15 Then If Sp=Accl Then Sp==+1 AcclTimer=0 Fi Fi PutWas() If St}}k>4 And Stk<8 And X<320-Sp Then X==+Sp Fi If Stk>8 And Stk<12 And X>=Sp Then X==-Sp Fi If (Stk=13 Or Stk=9 Or Stk=5) And ~}Y<192-Sp Then Y==+Sp Fi If (Stk=14 Or Stk=10 Or Stk=6) And Y>=Sp Then Y==-Sp Fi GetIs() DrawArrow() Fi If X=OX And Y=OY} Then Sp=1 Fi TestOSKeys()ReturnProc Print8(Byte X,Y Byte Pointer Text)Byte Pointer Ch=756,TmCard Pointer Sp=88Byte N,}P,ICard L,M,O,SPt,CPt PutWas() SPt=Sp^ CPt=Ch^*256 For M=1 TO Text^ Do Text==+1 L=Text^ I=L&128 L==&127 If L<32 The}n L=512+8*L ElseIf L<96 Then L==-32:L==*8 Else L==*8 Fi O=Y*320+X For N=0 TO 7 Do Tm=CPt+L+N P=Tm^ If I<>0 Then P==!255 F}i Tm=SPt+O+N*40 Tm^=P Od X==+1 Od GetIs() Arrow() DrawArrow()ReturnProc Highlight(Byte X1,X2,Y)Byte BT,XT,NewCard Wh}ere PutWas() For BT=Y*8 To Y*8+7 Do For XT=X1 To X2 Do Where=ScMem+BT*40+XT New=Peek(Where)!255 Poke(Where,New) Od Od GetIs}() DrawArrow()ReturnProc Time();렱Byte XW,BTemp,NewCard Clock,WhereChar Array ShowMe(15),Temp(15) If ClockIsEna}bled=0 Then Return Fi If ((Fire=1 And Y<8 And X>30*8) Or Key=237) And AlarmOn=1 Then AlarmOn=0 Fire=0 Key=255 AlarmOk=0 }Fi If (Fire=1 And Y<8 And X>=312) Or Key=237 Then ClockIsOn==+1 Pause(10) If ClockIsOn=5 Then ClockIsOn=0 Fi If Key=23}7 Then Key=255 Fi If ClockIsOn=0 Then Print8(30,0," T") ElseIf ClockIsOn=1 Then Print8(30,0," : : ") ElseI}f ClockIsOn=2 Then Print8(30,0," | | ") ElseIf ClockIsOn=3 Then Print8(30,0," / / ") ElseIf ClockIsOn=4 Then } If AlarmEnabled=1 Then Print8(30,0," | !!! ") Else Print8(30,0," | ... ") Fi Fi Do Arrow() Until Fire=0 And Pe}ek(53775)<>251 Od Fi Clock=Peek(19)*256 Clock==+Peek(20) Clock==/60 If Clock>0 Then Sec=Sec+Clock PokeC(19,0) If Sec>59 }Then Sec==-60 Min==+1 Fi If ClockIsOn=1 Or ClockIsOn=2 Then If ClockIsOn=1 Then SCopy(ShowMe,"00:00:00pm") Else SCopy}(ShowMe,"00|00|00pm") Fi StrB(Hour,Temp) SAssign(ShowMe,Temp,3-Temp(0),2) StrB(Min,Temp) SAssign(ShowMe,Temp,6-Temp(0),}5) StrB(Sec,Temp) SAssign(ShowMe,Temp,9-Temp(0),8) If PM=0 Then SAssign(ShowMe,"a",9,9) Fi Print8(30,0,ShowMe) Els}eIf ClockIsOn=3 Then SCopy(ShowMe,"00/00/1900") StrB(Month,Temp) SAssign(ShowMe,Temp,3-Temp(0),2) StrB(Day,Temp) SAs}sign(ShowMe,Temp,6-Temp(0),5) StrB(Year,Temp) SAssign(ShowMe,Temp,11-Temp(0),10) Print8(30,0,ShowMe) ElseIf ClockIsOn}=4 Then SCopy(ShowMe,"00|00...pm") If AlarmEnabled=1 Then SAssign(ShowMe,"!!!",6,8) Fi StrB(AHour,Temp) SAssign(ShowMe,Tem}p,3-Temp(0),2) StrB(AMin,Temp) SAssign(ShowMe,Temp,6-Temp(0),5) If APM=0 Then SAssign(ShowMe,"a",9,9) Fi Print8(30,0},ShowMe) Fi Fi If Fire=1 And Y<8 And X/8>29 Then PokeC(19,0) Do Arrow() Until Fire=0 Od XW=X/8 PutWas() For BTemp}=0 To 7 Do Where=ScMem+BTemp*40+XW New=Peek(Where)!255 Poke(Where,New) Od GetIs() If ClockIsOn=2 Then If XW}=30 Then Hour==-1 If Hour=0 Then Hour=12 Fi Fi If XW=31 Then Hour==+1 Fi If XW=33 Then Min==-1 If Min=255 Then Min=59 F}i Fi If XW=34 Then Min==+1 Fi If XW=36 Or XW=37 Then Sec=0 Fi If XW=38 Then PM=1-PM Fi Fi If ClockIsOn=3 Then } If XW=30 Then Month==-1 If Month=0 Then Month=12 Fi Fi If XW=31 Then Month==+1 Fi If XW=33 Then Day==-1 If Day=255 The}n Day=31 Fi Fi If XW=34 Then Day==+1 Fi If XW=36 Then Year==-1 If Year=255 Then Year=99 Fi Fi If XW=37 Then Year==+1} Fi Fi If ClockIsOn=4 Then If XW=30 Then AHour==-1 If AHour=0 Then AHour=12 Fi Fi If XW=31 Then AHour==+1 If AHour=}13 Then AHour=1 Fi Fi If XW=33 Then AMin==-1 If AMin=255 Then AMin=59 Fi Fi If XW=34 Then AMin==+1 If AMin=60 Then AMin}=0 Fi Fi If XW>34 And XW<37 Then AlarmEnabled=1-AlarmEnabled Fi If XW=38 Then APM=1-APM Fi Fi Fi If Min>59 Then Min}==-60 Hour==+1 Fi If Hour>12 Then Hour==-12 PM=1-PM If PM=0 Then Day==+1 Fi Fi If Day>31 Then Day==-30 Month==+1 Fi If Mon}th>13 Then Month==-12 Year==+1 Fi If Year>100 Then Year==-100 Fi If Hour=AHour And Min=AMin And PM=APM And AlarmEnabled=1 T}hen If AlarmOn=0 And AlarmOk=1 Then AlarmOn=1 AlarmOk=0 Fi Else AlarmOk=1 Fi If AlarmOn=1 Then Bell(11) Highlight(30,39},0) FiReturnProc Twang() Arrow() Time() ReturnProc WasPut() GetIs() Twang() DrawArrow() ReturnProc Draw(Card X1 Byte }Y1 Card X2 Byte Y2) PutWas() Plot(X1,Y1) DrawTo(X2,Y2) GetIs() Twang() DrawArrow()ReturnInt Func Abs(Int N) If N<0 Then R}eturn(-N) Fi Return(N)Proc Circle(Int X,Y,R)Int Phi,PhiY,PhixY,x1,Y1 Phi=0 X1=R Y1=0 PutWas() Do PhiY=Phi+Y1+Y1+1 PhiXY}=PhiY-X1-X1+1 Plot(X+X1,Y+Y1) Plot(X-X1,Y+Y1) Plot(X+X1,Y-Y1) Plot(X-X1,Y-Y1) Plot(X+Y1,Y+X1) Plot(X-Y1,Y+X1) Plot(X+Y1,Y-X}1) Plot(X-Y1,Y-X1) Phi=PhiY Y1=Y1+1 If Abs(PhiXY)+0X1 Od GetIs() Twang() Dr}awArrow()ReturnProc MoveArrow(Card NewX Byte NewY) PutWas() X=NewX Y=NewY GetIs() DrawArrow() ReturnProc SetArrow(Byte W}hat) ArrowOff=1-What MoveArrow(X,Y) Sp=0 ReturnModule;INCLUDE"D9:DOCLS.ACT" ; ModuleProc Cls(Byte What Byte A}rray Text) Zero(ScMem,320) SetBlock(ScMem+320,40,255) SetBlock(ScMem+360,7320,What);DoCls(); GetIs() DrawArrow() Pr}int8(0,0,Text) ReturnByte Func Button(Byte Check)Byte WhoCard TX,TX2Byte TY,Fl,BKey,BT,Start,End If Check=0 Then Start}=1 End=10 Else Start=Check End=Check Fi Who=0 For BT=Start To End Do TX=ButX(BT) TX2=ButX2(BT) TY=ButY(BT) If Fire=1 T}hen If X/8>=TX And X/80 Then Who=BT Highlight(TX,TX2-1,TY) If FireOn=0 Then Do Twan}g() Until Fire=0 Od Fi Highlight(TX,TX2-1,TY) Fi Fi BKey=Key If BKey=12 And ButOn(BT)=2 THen Key=255 Who=B}T Highlight(TX,TX2-1,TY) Do Twang() Until Peek(53775)<>251 Od Highlight(TX,TX2-1,TY) Fi If BKey=28 And ButOn(BT)=3 }Then Key=255 Who=BT Highlight(TX,TX2-1,TY) Do Twang() Until Peek(53775)<>251 Od Highlight(TX,TX2-1,TY) Fi Od }If Check<>0 And Who<>0 Then Who=1 FiReturn(Who)Proc SetButton(Byte Which,X,Y Byte Array Text Byte Mommy)Byte Wid,Y1,Y2Ca}rd X1,X2 ButOn(Which)=Mommy Print8(X,Y,Text) Wid=Text(0) ButX(Which)=X ButX2(Which)=X+Wid ButY(Which)=Y X1=X*8 Y1=Y*8 X2=(}X+Wid)*8-1 Y2=Y*8+7 Color=1 PutWas() Plot(X1,Y1) DrawTo(X2,Y1) DrawTo(X2,Y2) DrawTo(X1,Y2) DrawTo(X1,Y1) If Mommy>1 Then } Plot(X1+1,Y1) DrawTo(X1+1,Y2) Plot(X2-1,Y1) DrawTo(X2-1,Y2) If Mommy=3 Then Color=0 Plot(X1,Y1+1) DrawTo(X1+1,Y1) Pl}ot(X2,Y1+1) DrawTo(X2-1,Y1) Plot(X1,Y2-1) DrawTo(X1+1,Y2) Plot(X2,Y2-1) DrawTo(X2-1,Y2) Plot(X1,Y1) Plot(X2,Y1) Plot(X1},Y2) Plot(X2,Y2) Fi Fi WasPut()ReturnProc RemoveButton(Byte Which) ButOn(Which)=0 ReturnProc Alert(Byte Array Text1,}Text2)Byte BT PutWas() For BT=80 To 112 Do SetBlock(ScMem+4+BT*40,30,0) Od Color=1 SetBlock(ScMem+4+80*40,30,255) SetBlock}(ScMem+4+112*40,30,255) WasPut() Draw(272,80,272,112) Draw(32,112,32,80) PutWas() Plot(50,95) DrawTo(60,85) DrawTo(62,83) D}rawTo(64,85) DrawTo(50,95) WasPut() Circle(45,100,3) Print8(9,11,Text1) Print8(9,12,Text2) Bell(212)ReturnProc JustATestM}on()CARD x1,y1 GDesk_SetUp("") Accl=0 Max=32 X1=159 Y=95 ClockIsOn=1 AHour=7 AMin=0 APM=0 AlarmEnabled=1 AlarmOn=0 Cls(}0," (c)NBS 1992") ArrowDraw=1 Alert("Revision: 12/19/1992","[St]+[Sel]+[Opt] to exit.") Do Twang() Color=}1 Until Peek(53279)=0 oDReturnModulew=1 Alert("Revision: 12/19/1992","[St]+[Sel]+[Opt] to exit.") Do Twang() Color=); GFlyDemo.ActINCLUDE"D:GDESK.ACT"Proc _AirForce()[ 10 1 124 0 0 0 238 0 0 0 139 0 0 0 1 0 0 0 131 0 0 0 199 0 0 0 131 }0 0 0 57 0 0 0 254 0 0 0 124 0 0 0 ]Proc _Plane()[ 5 1 16 0 0 0 16 0 0 0 56 0 0 0 254 0 0 0 56 0 0 0 ]Proc _Info()[ 6 1} 60 0 0 0 102 0 0 0 12 0 0 0 24 0 0 0 0 0 0 0 24 0 0 0 ]Proc SeeInfo()Byte BT,TT TT=1 BT=0 Cls(0,"Info...") ChangeShap}e(_Info) RemoveButton(1) RemoveButton(2) RemoveButton(3) RemoveButton(4) SetButton(1,34,23,"Exit",2) Print8(5,1,"}㩠Ӡ") Print8(2,2,"By Bill Kendrick, December 12, 1992.") Print8(0,4,"Select  b}utton to") Print8(2,5,"run the demo. Use a joystick to turn") Print8(2,6,"and increase and decrease altitude.") Print8(0,}8,"Select to see GDesk built-in test.") Print8(0,10,"Select ﮮ to see this screen.") Print8(0,12,"Select to} quit this demo.") Do Twang() Color=TT BT==+2 Draw(BT,180,12-BT,191) If BT=12 Then BT=0 TT==+1 } If TT=2 Then TT=0 Fi Fi Until Button(1)=1 OdReturnProc Flier()Byte BT,S,R,L,U,D,HY1,HY2 ChangeShape(_Plane) Cls(}0,"GDesk Flier Demo #0.0") Print8(0,23," Press to exit..") Color=0 PutWas() For BT=0 To 184 Step 3 Do Plot(B}T,191) DrawTo(BT+8,183) Od WasPut() HY1=95 HY2=95 Do Twang() Color=0 Draw(50,HY1,269,HY2) S=Stick(0) } R=0 L=0 U=0 D=0 If S>4 And S<8 Then R=1 Fi If S>8 And S<12 Then L=1 Fi If S=13 Or S=9 Or S=5 Then D=1 Fi If} S=14 Or S=10 Or S=6 Then U=1 Fi If L=1 Then HY1==-Sp HY2==+Sp Fi If R=1 Then HY1==+Sp HY2==-Sp Fi If D=1 Then HY}1==+Sp HY2==+Sp Fi If U=1 Then HY1==-Sp HY2==-Sp Fi If HY1<=50 Then HY1=50 Fi If HY1>=141 Then HY1=141 Fi If }HY2<=50 Then HY2=50 Fi If HY2>=141 Then HY2=141 Fi Color=1 Draw(50,HY1,269,HY2) Until Fire=1 OdReturnProc M}ain()Byte But GDesk_SetUp("Demo!") ClockIsOn=1 Do ChangeShape(_AirForce) Cls(0," GFLYDEMO.ACT") } SetButton(1,9,10,"Play GDesk Demo #0.4..",2) SetButton(2,17,12," Test ",1) SetButton(3,16,14," Info.. ",1) S}etButton(4,16,16,"Exit..",3) Do Twang() But=Button(0) Until But<>0 Od If But=3 Then SeeInfo() Fi } If But=2 Then JustATestMon() Fi If But=1 Then Flier() Fi Until But=4 OdReturn Od If But=3 Then SeeInfo() Fi Y;COMPILE WITH CASE SENSITIVE=Π *MODULE ; BLKIO.ACT; (c) 1983 ACS; Copyright (c) 1983; by Action Computer Services (A}CS);; This software may be incorporated in; other software packages providing; that this copyright notice is also; incor}porated as well.; version 1.0; last modified February 24, 1984BYTE CIO_statusCHAR FUNC CIO=*(BYTE dev, CARD addr, } size, BYTE cmd, aux1, aux2)[$29$F$85$A0$86$A1$A$A$A$A$AA$A5$A5$9D$342$A5$A3$9D$348$A5$A4$9D$349$A5$A6$F0$8$9D$34A$A}5$A7$9D$34B$98$9D$345$A5$A1$9D$344$20$E456$8C CIO_status$C0$88$D0$6$98$A4$A0$99 EOF$A085$60]CARD FUNC ReadBlock=*(BYTE }dev, CARD addr, size)[$48$A9$7$85$A5$A9$0$85$A6$A5$A3$5$A4$D0$6$85$A0$85$A1$68$60$68$20 CIO$BD$348$85$}A0$BD$349$85$A1$60]PROC WriteBlock=*(BYTE dev, CARD addr, size)[$48$A9$B$85$A5$A9$0$85$A6$A5$A3$5$A4}$D0$2$68$60$68$4C CIO]PROC PutCD(BYTE chan, CARD n)BYTE lo=n, hi=n+1 PutD(chan, lo) PutD(chan, hi)RETURNCARD FUNC} GetCD(BYTE chan)CARD outBYTE lo=out, hi=out+1 lo = GetD(chan) hi = GetD(chan)RETURN(out)MODULERETURNCARD FUNCj; DoCls v.0.0; Loads "ARMSLEGS.GR8" from drive 9; whenever screen is cleared...MODULE ; BLKIO.ACT; (c) 1983 ACS; Copyr}ight (c) 1983; by Action Computer Services (ACS); This software may be incorporated in; other software packages providing}; that this copyright notice is also; incorporated as well.; version 1.0; last modified February 24, 1984BYTE CIO_status}CHAR FUNC CIO=*(BYTE dev, CARD addr, size, BYTE cmd, aux1, aux2)[$29$F$85$A0$86$A1$A$A$A$A$AA$A5$A5$9D$342$A5$A3$}9D$348$A5$A4$9D$349$A5$A6$F0$8$9D$34A$A5$A7$9D$34B$98$9D$345$A5$A1$9D$344$20$E456$8C CIO_status$C0$88$D0$6$98$A4$A0$99 EO}F$A085$60]CARD FUNC ReadBlock=*(BYTE dev, CARD addr, size)[$48$A9$7$85$A5$A9$0$85$A6$A5$A3$5$A4$D0$6$8}5$A0$85$A1$68$60$68$20 CIO$BD$348$85$A0$BD$349$85$A1$60]Proc DoCls()Card CT Close(1) Open(1,"D9:ARMSLEGS.GR8",4,0) CT=}ReadBlock(1,ScMem,7680) Close(1)ReturnMODULE5$A1$60]Proc DoCls()Card CT Close(1) Open(1,"D9:ARMSLEGS.GR8",4,0) CT=1; GDESK DEMO #0.3:Include "D9:GDESK.ACT"MODULEByte Array Where(15) ; 四Byte Func CheckWinner}(); Byte HimHer,Who ChangeShape(_Clock) Who=0 For HimHer=1 To 2 Do }If Where(0)=HimHer And Where(1)=HimHer And Where(2)=HimHer Then Who=HimHer Fi If Where(0)=HimHer An}d Where(4)=HimHer And Where(8)=HimHer Then Who=HimHer Fi If Where(2)=HimHer And Where(4)=HimHer And} Where(6)=HimHer Then Who=HimHer Fi If Where(3)=HimHer And Where(4)=HimHer And Where(5)=HimHer Then } Who=HimHer Fi If Where(6)=HimHer And Where(7)=HimHer And Where(8)=HimHer Then Who=HimHer Fi }If Where(0)=HimHer And Where(3)=HimHer And Where(6)=HimHer Then Who=HimHer Fi If Where(1)=HimHer An}d Where(4)=HimHer And Where(7)=HimHer Then Who=HimHer Fi If Where(2)=HimHer And Where(5)=HimHer And} Where(8)=HimHer Then Who=HimHer Fi If Who=0 And Where(0)<>0 And Where(1)<>0 And Where(2)<>0 And Where(3)<>}0 And Where(4)<>0 And Where(5)<>0 And Where(6)<>0 And Where(7)<>0 And Where(8)<>0 Then Who=3 ; A draw F}i Od ChangeShape(_ArrowS)Return(Who)Proc TicTacToe(); Byte XX,YY,Which_Button,Who} ChangeShape(_Clock) For Who=0 To 8 Do Where(Who)=0 Od ; Next Who Cls(Green,"Tic Tac Toe") SetButton(1,17,10," }",1) SetButton(2,19,10," ",1) SetButton(3,21,10," ",1) SetButton(4,17,12," ",1) SetButton(5,19,12," ",1) SetButton(}6,21,12," ",1) SetButton(7,17,14," ",1) SetButton(8,19,14," ",1) SetButton(9,21,14," ",1) SetButton(10,23,14,"Exit}",3) Who=0 ChangeShape(_ArrowS) Do Print8(23,12,"x's turn") Do ; Repeat Sp=4 Twang() Which_Bu}tton=Button(0) Until Which_Button<>0 Od If Which_Button=10 Then Who=0 Exit Fi XX=ButX(Which_Button) YY=}ButY(Which_Button) Where(Which_Button-1)=1 ; set that position on the board Print8(XX,YY,"x") RemoveButton(Which_}Button) Who=CheckWinner() If Who<>0 Then Exit Fi Print8(23,12,"o's turn") Do ; Repeat Sp=4 Twang}() Which_Button=Button(0) Until Which_Button<>0 Od If Which_Button=10 Then Who=0 Exit Fi XX=ButX(Whic}h_Button) YY=ButY(Which_Button) Where(Which_Button-1)=2 ; set that position on the board Print8(XX,YY,"o") Re}moveButton(Which_Button) Who=CheckWinner() If Who<>0 Then Exit Fi Od If Who=1 Then Print8(20,20," x wins! ")} ElseIf Who=2 Then Print8(20,20," o wins! ") ElseIf Who=3 Then Print8(20,20," A draw! ") Fi Do ; Repeat Tw}ang() Until Button(10)=1 Or Who=0 OdReturnProc CircleDemo(); 䩛 Cls(Blac}k,"Circle Demo") SetButton(1,1,22,"Exit",3) Color=1 Do ; Repeat Twang() If X>10 And Y>10 And X<309 And Y<}181 And Fire=1 Then Circle(X,Y,5) Fi Until Button(1)=1 Od RemoveButton(1)ReturnProc Main() ; }Byte Which_Button GDesk_Setup("Demo!") ClockIsOn=1 Hour=Peek(1536) Min=Peek(1537) ; get last time of clock Sec=Peek}(1538) PM=Peek(1539) Do ; Repeat ChangeShape(_Clock) Cls(Red,"Demo #0.3") Alert("롾 Demo #0.3","(c) NBS} 1992") SetButton(1,2,2,"Tic Tac Toe",1) SetButton(2,2,4,"Circle Demo",1) SetButton(3,2,6,"Exit",3) Cha}ngeShape(_ArrowS) Do ; Repeat Twang() Which_Button=Button(0) Until Which_Button<>0 Od RemoveButton(1)} RemoveButton(2) RemoveButton(3) If Which_Button=1 Then TicTacToe() FI If Which_Button=2 Then CircleDemo() FI} UNTIL Which_Button=3 Od Alert("Exiting..."," ") Poke(1536,Hour) Poke(1537,Min) ; update clock Poke(1538,Sec) Pok}e(1539,PM)Returnon=3 Od Alert("Exiting..."," ") Poke(1536,Hour) Poke(1537,Min) ; update clock Poke(1538,Sec) Pok; GDFUJI.ACT - GDesk Fuji demo v.0.2Include"GDESK.ACT"Proc Fuji()Byte Top,Bottom,XPos,Cntr=[0]Byte Array Data=[37 41 }43 45 46 29 48 35 49 37 50 39 51 41 52 43 53 44 54 45 55 46 55 47 56 48 57 48 57 49 58 49 58 50 59 50 59 51 59 51 59 52 60 }52 60 52 60 52 60 52 60 52 60 52 60]Card X Color=1 Top=5 Bottom=61 For XPos=80 To 84 Do Poke(87,15) PutWas() Plot(}XPos,Top*2) DrawTo(XPos,Bottom*2) Plot(160-XPos,Top*2) DrawTo(160-XPos,Bottom*2) WasPut() Poke(87,8) Od For XPos=86 T}o 115 Do If XPos>90 Then Top=Data(Cntr) Cntr==+1 Fi Bottom=Data(Cntr) Cntr==+1 Poke(87,15) Putwas() Plot(XPos,Top*2}) DrawTo(XPos,Bottom*2) Plot(160-XPos,Top*2) DrawTo(160-XPos,Bottom*2) WasPut() Poke(87,8) OdReturnProc Scroll()B}yte WSync=54282,VCount=54283,Clr=53270,CH=764,Cntr,ChgClr=[0],IncClr,Delay Do For Cntr=1 To 4 Do IncClr=ChgClr For D}elay=1 To 9 Do Od Do WSync=0 Clr=IncClr IncClr==+1 Until VCount & 128 Od Od ChgClr==+1 Twang() Until} Button(1)=1 OdReturnProc Main();ɡ GDesk_SetUp("Demo") ; Set up GDesk Cls(1,"0.2 [OK] to} begin...") ClockIsOn=1 AlarmEnabled=1 ; Turn clock on AlarmOk=1 AlarmOn=0 APM=1 PM=1 Mode=1 ChangeMode() ; }Set mode to 4 color SetButton(1,20,20,"OK..",2); Draw button Do Twang() Until button(1)=1 od ; wait for bu}tton RemoveButton(1) ; Turn off button ChangeShape(_Clock) ; Change arrow to "wait" clock Cls(0,"}Fuji demo.") ; Clear screen Color=1 ; Set draw color to 1 SetArrow(0) ; Tu }rn arrow off Fuji() ; Draw Fuji symbol SetArrow(1) ; Turn arrow on SetButton(1,2 }0,20,"OK",2) ; Draw button ChangeShape(_ArrowS) ; Change arrow to normal Scroll() ; Scroll } colorsReturn; Draw button ChangeShape(_ArrowS) ; Change arrow to normal Scroll() ; Scroll; GDesk demo #0.5INCLUDE "GDESK.ACT"Proc Demo05() ; MainByte BX,BY,Score,BTChar Array ScS(5) GDesk_SetUp("Demo!") Cl }ockIsOn=1 ClockIsEnabled=1 Cls(0,"GDDemo 0.5") BX=0 BY=2 Score=20 SetButton(1,0,1," Ok ",2) Do Twang() Prin}t8(BX,BY," ") If BXX/8 Then BX==-1 Fi If BYY/8 And BY>2 T}hen BY==-1 Fi If BX=X/8 And BY=Y/8 Or BY>Y/8 And BY=2 Then Score==-1 Fi Print8(BX,BY,"") Print8(20,1,"Score") } StrB(Score,ScS) Print8(26,1," ") Print8(26,1,ScS) BT=Button(1) Until BT=1 Or Score=0 Od If Score=0 Then } SetButton(1,0,1,"Hah!",2) Do Twang() Until Button(1)=1 Od FiReturn Until BT=1 Or Score=0 Od If Score=0 Then O; Hey! GDesk! 0.0 For GDesk 0.1; (c) NBS 12/20/1992Include "HGDESK.ACT"Define P8="Print8" Byte BProc C() SetArrow(0) Cls}(0," v.0.0") ReturnProc WhatIsAction() C() P8(0,2,"Action! is a programming language on") P8(0,3,"cartridge, }created in the early 80's by") P8(0,4,"a company called O.S.S. It is a 'high-") P8(0,5,"level' language, meaning many comma}nds") P8(0,6,"are available.") P8(0,8,"Action! compiles its programs into raw") P8(0,9,"machine-level (the lowest level) co}de,") P8(0,10,"which means it's very fast.") P8(0,12,"Action! is no longer being produced,") P8(0,13,"and only a few compani}es have it in") P8(0,14,"stock.") P8(0,16,"For more information, ask fellow Atari") P8(0,17,"8-bit users or software distri}butors.") P8(0,19,"Click this button to return:") SetButton(1,29,19," OK ",2) SetArrow(1) Do Twang() Until Button(1)=1 Od}ReturnProc WhatIsToolkit() C() P8(0,2,"A toolkit is a set of general-use") P8(0,3,"procedures which other programs call")} P8(0,4,"and use.") P8(0,6,"Toolkits for Action! are simply added") P8(0,7,"the program with the command 'Include'.") P8(0,9},"Many procedures have been made for") P8(0,10,"Action!, such as disk routines, sorting") P8(0,11,"routines, a windowing env}ironment,") P8(0,12,"player-missle graphics handling, and") P8(0,13,"much much more.") P8(0,15,"Click this button to return}:") SetButton(1,29,15," OK ",2) SetArrow(1) Do Twang() Until Button(1)=1 OdReturnByte Func ButtonGame()Byte B2,B3,But}Byte Array Alpha(4),Used(10) SetArrow(0) B2=Rand(3) For B=1 To 9 Do Used(B)=0 Od For B=1 To 9 Do B2==+Rand(2)+1 Do B3=}Rand(10)+1 Until Used(B3)=0 Od Used(B3)=1 SCopy(Alpha," ") Alpha(2)=B2+64 SetButton(B,B3*3,15,Alpha,1) Od SetButton }(10,31,15,"Stop",3) SetArrow(1) B3=0 B=0 Do B3==+1 Do Twang() But=Button(0) If But<>B3 And But>0 And But<10 Th!}en Bell(200) B==+1 Fi Until But=B3 Or But=10 Od If But<>10 Then Bell(29) RemoveButton(B3) B2=ButX(B3) P8(B2,15,"") Fi"} Until B3=10 Or But=10 Od If But=10 Then B=255 FiReturn(B)Proc Hey_GDesk();١ˡByte But,B2Char Array ST(5)Car#}d CT GDesk_SetUp("Hey! GDesk!!!") ClockIsEnabled=0 ClockIsOn=0 AlarmOk=0 AlarmOn=0 AlarmEnabled=0 C() P8(3,2,"Welcome to $}'Hey! GDesk!' version 0.0,") P8(0,3,"which explains the features of 'GDesk'") P8(0,4,"version 0.1.") P8(1,21,"'The Action! G%}Desk Toolkit' and") P8(1,22,"'Hey! GDesk' created by Bill Kendrick,") P8(1,23,"(c) NBS 1992. Release date: 12/20/1992") P8&}(1,10,"Use the joystick or the arrow keys to") Color=0 PutWas() For CT=8 To 319 Step 4 Do Plot(CT-8,191) DrawTo(CT,21*8) Od'} P8(2,11,"move the arrow to the ' OK ' button,") P8(0,12,"and use the Fire button or [CTRL]+[RET]") P8(12,13,"to 'click' it(}.") P8(8,14,"Or simply hit [RETURN].") SetButton(1,18,16,"OK",2) SetArrow(1) MoveArrow(155,52) Do Twang() Until Button(1))}=1 Od RemoveButton(1) Do C() P8(11,2,"뿠") P8(0,3,"GDesk is a toolkit for Action!.") P8(0,4,"What? You d*}on't know what Action! or a") P8(0,5,"toolkit is?") P8(0,7,"Well, point to the 'Action!' button and") P8(0,8,"click it to l+}earn about Action!,") P8(0,10,"Or point to the 'Toolkit' button and") P8(0,11,"click it to learn about toolkits.") P8(0,1,}3,"If you already know, click 'GDesk' to") P8(0,14,"go on...") P8(5,17,"Learn more about:") SetButton(1,25,17," Action! "-},1) SetButton(2,25,18," Toolkit ",1) P8(5,20,"Or go on with:") SetButton(3,25,20,"GDesk",2) SetArrow(1) Do Twang() But=.}Button(0) Until But<>0 Od For CT=1 To 3 Do RemoveButton(CT) Od If But=1 Then WhatIsAction() Fi If But=2 Then WhatIsTool/}kit() Fi Until But=3 Od C() P8(11,2,"뿠") P8(0,4,"The GDesk Action! Toolkit contains many") P8(0,5,"graphic0}al-user-interface (GUI) routines") P8(0,6,"such as pointer-handling, creating and") P8(0,7,"detecting buttons, and more. Ev1}en the") P8(0,8,"source code can be worked off of. An") P8(0,9,"example would be adding a wall-paper") P8(0,10,"routine to 2}the screen clearing routine.") P8(0,11,"That way, a picture would be displayed") P8(0,12,"on the screen every time it is cle3}ared.") P8(0,14,"So far, version 0.1's upgrade has been") P8(0,15,"a clock routine, which displays a clock") P8(0,16,"on th4}e screen and has a settable alarm.") SetArrow(1) SetButton(1,28,18," Go on... ",2) Do Twang() Until Button(1)=1 Od C() P5}8(8,2,"") P8(0,4,"Since GDesk is simply an 'add-on' to a") P8(0,5,"previously made and very popular 6}and") P8(0,6,"easy to use programming language, there") P8(0,7,"is already a large number of potential") P8(0,8,"GDesk progr7}ammers.") P8(0,10,"Using GDesk is very simple. Simply") P8(0,11,"program in Action! as you normally would") P8(0,12,"and u8}tilizing GDesk's additional") P8(0,13,"commands. Instead of saying") P8(0,14,"'PrintE(''Hello'')', you would say") P8(0,15,9}"'Print8(0,1,''Hello'')'. Of course,") P8(0,16,"any little programming quirk, like") P8(0,17,"'P8()' requiring coordinates,:} can") P8(0,18,"be overcome by a knowledgable Action!") P8(0,19,"programmer. An example of a language") P8(0,20,"upgrade a;}lready made for Action! is the") P8(0,21,"new 'PrintF()' routine, which you may") P8(0,22,"already be using!") P8(0,23,"It's<} as simple as that.") SetArrow(1) SetButton(1,28,23," Go on... ",2) Do Twang() Until Button(1)=1 Od C() P8(13,2,"=}") P8(0,4,"Now, let's get used to working in the") P8(0,5,"GDesk environment...") P8(0,7,"You already know how to 'cli>}ck' buttons,") P8(0,8,"so let's play a game with them.") P8(0,10,"Here's a list of 10 letters all mixed") P8(0,11,"up and n?}ot necessarily in consecutive") P8(0,12,"order. I want you to click them in") P8(0,13,"order.") SetArrow(1) B=ButtonGame()@} If B<>255 Then P8(0,15,"You made ") StrB(B,ST) P8(9,15,ST) P8(0,16,"mistakes...") Fi SeA}tButton(1,28,16," Go on... ",2) Do Twang() Until Button(1)=1 Od C() P8(13,2,"") P8(0,4,"You may have alreadyB} noticed that there") P8(0,5,"are more than one type of button.") P8(0,7,"The types of buttons GDesk uses are:") SetButton(C}1,0,9," Normal ",1) SetButton(2,9,9,"Default",2) P8(19,9,"and") SetButton(3,23,9,"Cancel",3) P8(0,11,"The 'Normal' buttoD}ns need to be clicked") P8(0,12,"with the arrow.") P8(0,14,"The 'Default' buttons can either be") P8(0,15,"clicked with the E}arrow or selected by") P8(0,16,"pressing the [RETURN] key.") P8(0,18,"The 'Cancel' buttons can either be") P8(0,19,"clickedF} with the arrow or selected by") P8(0,20,"pressing the [ESCape] key.") P8(0,22,"Go ahead, play with the buttons. Use") P8(0,G}23,"both pointer and keys.") SetArrow(1) SetButton(4,30,23," Go on... ",1) Do Twang() Until Button(0)=4 Od C() P8(13,2,"H}") P8(0,4,"Here's an example of when all three") P8(0,5,"types of buttons would be used:") Draw(6,54,178,54) DraI}w(178,54,178,90) Draw(178,90,6,90) Draw(6,90,6,54) P8(1,7,"File exsists!") P8(1,8,"Overwrite?") SetButton(1,1,10," O.K. "J},2) SetButton(2,14,8,"Cancel",3) SetButton(3,14,10," Append ",1) P8(0,12,"Also notice that pressing these three") P8(0,13,K}"keys: [SHIFT] + [CONTROL] + [RETURN]") P8(0,14,"will act like holding down the Fire") P8(0,15,"button on the joystick, letL}ting you") P8(0,16,"click and move at the same time.") P8(0,17,"Pressing those keys again turns it off.") P8(0,18,"Use the M}below area to plot dots:") SetArrow(1) SetButton(4,28,23," Go on... ",1) Color=1 Do Twang() If Y>19*8 And Y<23*8 And Fire=1N} Then Draw(X,Y,X,Y) Fi Until Button(0)=4 Od C() P8(13,2,"") P8(0,4,"GDesk also takes care of some other") P8(O}0,5,"things when it's running.") P8(0,7,"It can change the screen mode. There") P8(0,8,"are six modes:") P8(2,9,"Normal: HiP}gh resolution (320 x 192)") P8(4,10,"2 colors, white on black.") P8(2,11,"Normal: Low resolution (160 x 192)") P8(4,12,"3 cQ}olors, white & grey on black.") P8(2,13,"Normal: Low resolution (160 x 192)") P8(4,14,"4 colors, white & 2 greys on black.")R} P8(2,15,"Reverse:High resolution (320 x 192)") P8(4,16,"2 colors, black on white.") P8(2,17,"Reverse:Low resolution (160 x S}192)") P8(4,18,"3 colors, black & grey on white.") P8(2,19,"Reverse:Low resolution (160 x 192)") P8(4,20,"4 colors, black &T} 2 greys on white.") P8(0,22,"Pressing [CONTROL] + [1] changes modes.") P8(0,23,"Try it!") SetArrow(1) SetButton(1,28,23,"U} Go on... ",2) Do Twang() Until Button(1)=1 Od Mode=1 ChangeMode() C() P8(13,2,"") P8(0,7,"It can also changV}e arrow mode. There") P8(0,8,"are three modes:") P8(2,9,"Over: The arrow is always colored.") P8(2,10,"Mixed: The arrow iW}s the opposite") P8(4,11,"colors of the background") P8(2,12,"Under: The arrow is always erased.") P8(0,14,"Pressing [CONTROX}L] + [2] changes modes.") P8(0,15,"Try it!") SetArrow(1) SetButton(1,28,15," Go on... ",2) Do Twang() Until Button(1)=1 OY}d ArrowDraw=0 C() P8(11,2,"") P8(0,4,"The shape of the pointer can be") P8(0,5,"changed! Here is the shaZ}pe it is") P8(0,6,"usually changed to when the computer is") P8(0,7,"busy...") ChangeShape(_Clock) P8(0,8,"There are so fa[}r only two built-in") P8(0,9,"shapes, but you can design your own!") P8(0,10,"If you have enough practice, you could") P8(0,\}11,"even animate it!!!") SetArrow(1) SetButton(1,28,11," Go on... ",2) Do Twang() Until Button(1)=1 Od ChangeShape(_Arro]}wS) C() ClockIsEnabled=1 ClockIsOn=1 P8(13,2,"") P8(0,4,"Finally, one of the most powerful") P8(0,5,"routines,^} yet still unfinished, is the") P8(0,6,"clock module. The clock has 5 modes:") P8(2,7,"Off: A 'T' is displayed,") P8(4_},8,"letting you know it's active.") P8(2,9,"On: The time is displayed.") P8(2,10,"Time set: The time is displayed and"`}) P8(4,11,"can be changed.") P8(2,12,"Date set: The date is displayed and") P8(4,13,"can be changed.") P8(2,14,"Alarm set:"a}) P8(4,15,"can be changed and (de)activated.") P8(4,17,"Clicking the farthest position of the") P8(4,18,"upper-righthand cob}rner of the screen") P8(4,19,"(where the 'T' is when the clock is off") P8(4,20,"will change the clock mode.") SetArrow(1) c}SetButton(1,28,11," Go on... ",2) Do Twang() Until Button(1)=1 Od ChangeShape(_ArrowS) ClockIsEnabled=1 ClockIsOn=1 C()d} P8(13,2,"") P8(0,4,"When in time mode, the clock looks like") P8(0,5,"this: 01:00:00pm") P8(0,6,"When in e}set mode, the clock looks like") P8(0,7,"this:") P8(2,8,"Time set: 01|00|00pm") P8(2,9,"Date set: 01/01/1990") P8(2,10,"Af}larm set: 01:00...pm") P8(0,11,"Clicking the left digit of a number") P8(2,12,"will decrease its value, and the right") P8(q}F#DOS SYSF6'DUP SYSF[]GDESK ACTFGFLYDEMOACTF BLKIO ACTFDOCLS ACTF GDDEMO03ACTFGDFUJI ACTF GDDEMO05ACTFbHEYGDESKACTFQ~HGDESK ACTFUSLUDGE ACTF($SLUDGE H FLSHAPES TXTFPSHAPETBLTXTFWSHAPES DATFM_COOLTRISACTFPCOOLTRISH1 FCOOLTRISCOMF SPRITES FNTF DUMBANM FNTF BOING1 FNTF BOING2 FNTF-BOING TBSF5BOING ACT2,13,"will increase it.") P8(0,14,"Clicking the left letter in 'am' and") P8(2,15,"'pm' will change it.") P8(0,16,"Clicking r}the '...' or '!!!' of the") P8(2,17,"alarm will change it. '...' means the") P8(2,18,"alarm is deactivated. '!!!' means its}s") P8(2,19,"activated. When the alarm goes off,") P8(2,20,"click any part of the clock to quiet it.") P8(2,21,"Play with t}the clock...") SetArrow(1) SetButton(1,28,21," Go on... ",2) Do Twang() Until Button(1)=1 Od C() P8(13,2,""u}) P8(0,4,"Just as pressing [RETURN] and [ESCape]") P8(0,5,"can act like pressing buttons, pressing") P8(0,6,"[SHIFT] + [CONTv}ROL] + [T] acts like") P8(0,7,"pressing the upper-rightmost corner of") P8(0,8,"the screen, to change clock modes.") P8(0,9w},"Also, pressing these keys when the") P8(0,10,"alarm is sounding will quiet it.") P8(0,12,"Oooh! Quiet!!!") Hour=1 Min=1 x}Sec=0 PM=1 AHour=1 AMin=1 APM=1 AlarmOn=0 AlarmOk=1 AlarmEnabled=1 SetArrow(1) SetButton(1,28,21," Go on... ",2) Do Twang(y}) Until Button(1)=1 Od C() AlarmEnabled=0 AlarmOn=0 AlarmOk=1 P8(15,2,"") P8(0,4,"Thank you for taking the time tz}o look") P8(0,5,"at 'Hey GDesk'!") P8(0,8,"Any comments? Questions? Donations?") SetButton(1,32,21," Exit ",3) SetArrow({}1) P8(0,10,"Internet E-mail:") P8(7,11,"Р") P8(0,15,"Postal mail:") P8(10,16,"Bill Kendrick") P8(|}10,17,"59 Palm Lane") P8(10,18,"Novato, California") P8(10,11,"94945 USA") B=0 CT=1 Do B==+1 If B=12 Then CT=1-CT B=0 Fi}} Color=CT B2=12-B Draw(B,182,B2,191) Twang() Until Button(1)=1 Od PrintE("Also look for MyNI_DOSNBS 1992")ReturnB=0 Fiw; 뾠 w/clock 1.1 12/19/1992; Bill Kendrick NBS 1992ModuleDefine Red="170",Green="85",Black="0",White="255",Mov}e="MoveBlock"Card ScMem,X,CurrentShapeCard Array ArrowTemp(1280),Shape(64)Byte Array TempScMem(960),ButX(10),ButX2(10),But}Y(10),ButOn(10)Byte Fire,Y,Sp,Max,Mode,Key=764,Size,Width,ArrowDraw,ArrowOff,Accl,AcclTimer, FlshSpeed,NumFlshes,ClockIsEna}bled,ClockIsOn,Hour,Min,Sec,PM,Year,Month,Day,FireOn,AHour,AMin,APM,AlarmOn,AlarmEnabled, AlarmOkProc Pause(Byte Time) Byt}e BT,BT2 For BT=0 To Time Do For BT2=0 To 254 Do Od Od ReturnProc Bell(Byte Pitch) Byte BT For BT=0 To 15 Do Pause(2) Sound}(0,Pitch,10,15-BT) Od ReturnProc _ArrowS()[8 1 248 0 0 0 224 0 0 0 240 0 0 0 184 0 0 0 156 0 0 0 14 0 0 0 6 0 0 0 0 0 0 }0]Proc _Clock()[13 1 56 0 0 0 56 0 0 0 56 0 0 0 124 0 0 0 130 0 0 0 146 0 0 0 154 0 0 0 130 0 0 0 130 0 0 0 124 0 0 0 5}6 0 0 0 56 0 0 0 56 0 0 0]Proc _Disk() [1 1 0 0 0 0];Proc _Trash()Proc _Folder()Proc _Document()Proc _Image()Proc _Appl}ication()Proc _Accessory()Proc _System()Proc PutWas() Move(ScMem+Y*40,ArrowTemp,Size*40) ReturnProc GetIs() Move(ArrowTem}p,ScMem+Y*40,Size*40) ReturnProc ArrowPoke(Card Whr Byte Wth,Was1,Was2)Byte Wth1,Wth2 Wth1=Wth RSh (X Mod 8) If (X Mod 8})<>0 And X/8+Width<38 Then Wth2=Wth LSh (8-(X Mod 8)) Else Wth2=0 Fi If ArrowDraw=0 Then Poke(Whr,Wth1%Was1) Poke(Whr+1,Wth}2%Was2) ElseIf ArrowDraw=1 Then Poke(Whr,Wth1!Was1) Poke(Whr+1,Wth2!Was2) ElseIf ArrowDraw=2 Then Poke(Whr,(Wth1!Was1)-Wth1}) Poke(Whr+1,(Wth2!Was2)-Wth2) FiReturnProc DrawArrow()Byte BT,BT2,Now,Was1,Was2Card Where,Temp If ArrowOff=1 Then Retu}rn Fi For BT=0 To Size-1 Do Where=ScMem+X/8+(Y+BT)*40 PokeC(@Temp,Shape(BT*2)) For BT2=0 To Width Do Now=Peek(@Temp}+BT2) Was1=Peek(Where+BT2) Was2=Peek(Where+BT2+1) ArrowPoke(Where+BT2,Now,Was1,Was2) Od OdReturnProc ChangeShape(Car}d What) PutWas() Size=Peek(What) Width=Peek(What+1) MoveBlock(Shape,What+2,Size*4) Zero(Shape+Size*4,128-Size*4) GetIs() Dr}awArrow()ReturnProc ChangeMode() Move(TempScMem,ScMem+7680-960,960) If Mode=0 Then Graphics(8+16+32) PokeC(709,15);bn E}lseIf Mode=1 Then Graphics(15+16+32) PokeC(708,2056) Poke(710,15);bg ElseIf Mode=2 Then Graphics(15+16+32) PokeC(708,2050) P}oke(710,15);blsh ElseIf Mode=3 Then Graphics(8+16+32) PokeC(709,2560) Poke(712,10);wn ElseIf Mode=4 Then Graphics(15+16+32)} Poke(712,10) PokeC(708,1542) Poke(710,0);wg ElseIf Mode=5 Then Poke(712,10) PokeC(708,518) Poke(710,0) Fi;wsh Move(ScMem+7}680-960,TempScMem,960) Poke(87,8)ReturnProc GDesk_SetUp(Char Array Huh)Card BT If Huh(0)=0 Then SCopy("program",Huh) Fi} Print("}Another GDesk ") PrintE(Huh) PutE() PrintE("Running GDesk v0.0 with Clock v1.1");PrintE("and 'DoCls' v0.0") ; } PrintE("By Bill Kendrick, NBS 1992") BT=0 Do BT==+1 Until Key<255 Or BT=65000 Od FireOn=0 Key=255 ClockIsEnabled}=1 For BT=1 To 5 Do Close(BT) ButOn(BT*2-1)=0 ButOn(BT*2)=0 Od Accl=1 Max=32 Mode=0 ArrowDraw=0 FlshSpeed=10 NumFlshes=1;df} Graphics(24) ScMem=PeekC(88) Zero(ScMem,7680) ChangeMode() X=160 Y=96 Sp=0 Size=32 Width=4 ArrowOff=0 GetIs() ChangeShape}(_ArrowS) Bell(29) AlarmOk=1 AlarmOn=0 AlarmEnabled=0 APM=1 PM=1ReturnProc OSKeyOff() Key=255 Pause(20) ReturnProc Test}OSKeys() If Key=223 Then OSKeyOff() Mode==+1 If Mode=6 Then Mode=0 Fi ChangeMode() Fi If Key=222 Then OSKeyOff() ArrowDraw=}=+1 If ArrowDraw=3 Then ArrowDraw=0 Fi PutWas() DrawArrow() FiReturnProc Arrow()Byte Stk,OYCard OX Key=Peek(764) If Ar}rowOff=1 Then PutWas() Return Fi OX=X OY=Y Stk=Stick(0) Fire=1-STrig(0) If FireOn=1 Then Fire=1 Fi If Key=140 Or Key=142 Or} Key=143 Or Key=134 Or Key=135 Then If Key=140 Then Fire=1 Fi If Key=142 Then Stk=14 Fi If Key=143 Then Stk=13 Fi If }Key=134 Then Stk=11 Fi If Key=135 Then Stk=7 Fi If Peek(53775)<>251 Then Key=255 Fi Fi If Key=204 Then Key=255 FireOn=1}-FireOn Fi If Stk<15 Then If Sp=Accl Then Sp==+1 AcclTimer=0 Fi Fi PutWas() If St}k>4 And Stk<8 And X<320-Sp Then X==+Sp Fi If Stk>8 And Stk<12 And X>=Sp Then X==-Sp Fi If (Stk=13 Or Stk=9 Or Stk=5) And }Y<192-Sp Then Y==+Sp Fi If (Stk=14 Or Stk=10 Or Stk=6) And Y>=Sp Then Y==-Sp Fi GetIs() DrawArrow() Fi If X=OX And Y=OY} Then Sp=1 Fi TestOSKeys()ReturnProc Print8(Byte X,Y Byte Pointer Text)Byte Pointer Ch=756,TmCard Pointer Sp=88Byte N,}P,ICard L,M,O,SPt,CPt PutWas() SPt=Sp^ CPt=Ch^*256 For M=1 TO Text^ Do Text==+1 L=Text^ I=L&128 L==&127 If L<32 The}n L=512+8*L ElseIf L<96 Then L==-32:L==*8 Else L==*8 Fi O=Y*320+X For N=0 TO 7 Do Tm=CPt+L+N P=Tm^ If I<>0 Then P==!255 F}i Tm=SPt+O+N*40 Tm^=P Od X==+1 Od GetIs() Arrow() DrawArrow()ReturnProc Highlight(Byte X1,X2,Y)Byte BT,XT,NewCard Wh}ere PutWas() For BT=Y*8 To Y*8+7 Do For XT=X1 To X2 Do Where=ScMem+BT*40+XT New=Peek(Where)!255 Poke(Where,New) Od Od GetIs}() DrawArrow()ReturnProc Time();렱Byte XW,BTemp,NewCard Clock,WhereChar Array ShowMe(15),Temp(15) If ClockIsEna}bled=0 Then Return Fi If ((Fire=1 And Y<8 And X>30*8) Or Key=237) And AlarmOn=1 Then AlarmOn=0 Fire=0 Key=255 AlarmOk=0 }Fi If (Fire=1 And Y<8 And X>=312) Or Key=237 Then ClockIsOn==+1 Pause(10) If ClockIsOn=5 Then ClockIsOn=0 Fi If Key=23}7 Then Key=255 Fi If ClockIsOn=0 Then Print8(30,0," T") ElseIf ClockIsOn=1 Then Print8(30,0," : : ") ElseI}f ClockIsOn=2 Then Print8(30,0," | | ") ElseIf ClockIsOn=3 Then Print8(30,0," / / ") ElseIf ClockIsOn=4 Then } If AlarmEnabled=1 Then Print8(30,0," | !!! ") Else Print8(30,0," | ... ") Fi Fi Do Arrow() Until Fire=0 And Pe}ek(53775)<>251 Od Fi Clock=Peek(19)*256 Clock==+Peek(20) Clock==/60 If Clock>0 Then Sec=Sec+Clock PokeC(19,0) If Sec>59 }Then Sec==-60 Min==+1 Fi If ClockIsOn=1 Or ClockIsOn=2 Then If ClockIsOn=1 Then SCopy(ShowMe,"00:00:00pm") Else SCopy}(ShowMe,"00|00|00pm") Fi StrB(Hour,Temp) SAssign(ShowMe,Temp,3-Temp(0),2) StrB(Min,Temp) SAssign(ShowMe,Temp,6-Temp(0),}5) StrB(Sec,Temp) SAssign(ShowMe,Temp,9-Temp(0),8) If PM=0 Then SAssign(ShowMe,"a",9,9) Fi Print8(30,0,ShowMe) Els}eIf ClockIsOn=3 Then SCopy(ShowMe,"00/00/1900") StrB(Month,Temp) SAssign(ShowMe,Temp,3-Temp(0),2) StrB(Day,Temp) SAs}sign(ShowMe,Temp,6-Temp(0),5) StrB(Year,Temp) SAssign(ShowMe,Temp,11-Temp(0),10) Print8(30,0,ShowMe) ElseIf ClockIsOn}=4 Then SCopy(ShowMe,"00|00...pm") If AlarmEnabled=1 Then SAssign(ShowMe,"!!!",6,8) Fi StrB(AHour,Temp) SAssign(ShowMe,Tem}p,3-Temp(0),2) StrB(AMin,Temp) SAssign(ShowMe,Temp,6-Temp(0),5) If APM=0 Then SAssign(ShowMe,"a",9,9) Fi Print8(30,0},ShowMe) Fi Fi If Fire=1 And Y<8 And X/8>29 Then PokeC(19,0) Do Arrow() Until Fire=0 Od XW=X/8 PutWas() For BTemp}=0 To 7 Do Where=ScMem+BTemp*40+XW New=Peek(Where)!255 Poke(Where,New) Od GetIs() If ClockIsOn=2 Then If XW}=30 Then Hour==-1 If Hour=0 Then Hour=12 Fi Fi If XW=31 Then Hour==+1 Fi If XW=33 Then Min==-1 If Min=255 Then Min=59 F}i Fi If XW=34 Then Min==+1 Fi If XW=36 Or XW=37 Then Sec=0 Fi If XW=38 Then PM=1-PM Fi Fi If ClockIsOn=3 Then } If XW=30 Then Month==-1 If Month=0 Then Month=12 Fi Fi If XW=31 Then Month==+1 Fi If XW=33 Then Day==-1 If Day=255 The}n Day=31 Fi Fi If XW=34 Then Day==+1 Fi If XW=36 Then Year==-1 If Year=255 Then Year=99 Fi Fi If XW=37 Then Year==+1} Fi Fi If ClockIsOn=4 Then If XW=30 Then AHour==-1 If AHour=0 Then AHour=12 Fi Fi If XW=31 Then AHour==+1 If AHour=}13 Then AHour=1 Fi Fi If XW=33 Then AMin==-1 If AMin=255 Then AMin=59 Fi Fi If XW=34 Then AMin==+1 If AMin=60 Then AMin}=0 Fi Fi If XW>34 And XW<37 Then AlarmEnabled=1-AlarmEnabled Fi If XW=38 Then APM=1-APM Fi Fi Fi If Min>59 Then Min}==-60 Hour==+1 Fi If Hour>12 Then Hour==-12 PM=1-PM If PM=0 Then Day==+1 Fi Fi If Day>31 Then Day==-30 Month==+1 Fi If Mon}th>13 Then Month==-12 Year==+1 Fi If Year>100 Then Year==-100 Fi If Hour=AHour And Min=AMin And PM=APM And AlarmEnabled=1 T}hen If AlarmOn=0 And AlarmOk=1 Then AlarmOn=1 AlarmOk=0 Fi Else AlarmOk=1 Fi If AlarmOn=1 Then Bell(11) Highlight(30,39},0) FiReturnProc Twang() Arrow() Time() ReturnProc WasPut() GetIs() Twang() DrawArrow() ReturnProc Draw(Card X1 Byte }Y1 Card X2 Byte Y2) PutWas() Plot(X1,Y1) DrawTo(X2,Y2) GetIs() Twang() DrawArrow()ReturnProc MoveArrow(Card NewX Byte New}Y) PutWas() X=NewX Y=NewY GetIs() DrawArrow() ReturnProc SetArrow(Byte What) ArrowOff=1-What MoveArrow(X,Y) Sp=0 ReturnMo}duleProc Cls(Byte What Byte Array Text) Zero(ScMem,320) SetBlock(ScMem+320,40,255) SetBlock(ScMem+360,7320,What) GetIs() }DrawArrow() Print8(0,0,Text) ReturnByte Func Button(Byte Check)Byte WhoCard TX,TX2Byte TY,Fl,BKey,BT,Start,End If Che}ck=0 Then Start=1 End=10 Else Start=Check End=Check Fi Who=0 For BT=Start To End Do TX=ButX(BT) TX2=ButX2(BT) TY=ButY(BT}) If Fire=1 Then If X/8>=TX And X/80 Then Who=BT Highlight(TX,TX2-1,TY) If FireOn}=0 Then Do Twang() Until Fire=0 Od Fi Highlight(TX,TX2-1,TY) Fi Fi BKey=Key If BKey=12 And ButOn(BT)=2 THen K}ey=255 Who=BT Highlight(TX,TX2-1,TY) Do Twang() Until Peek(53775)<>251 Od Highlight(TX,TX2-1,TY) Fi If BKey=28 A}nd ButOn(BT)=3 Then Key=255 Who=BT Highlight(TX,TX2-1,TY) Do Twang() Until Peek(53775)<>251 Od Highlight(TX,TX2-1},TY) Fi Od If Check<>0 And Who<>0 Then Who=1 FiReturn(Who)Proc SetButton(Byte Which,X,Y Byte Array Text Byte Mommy)By}te Wid,Y1,Y2Card X1,X2 ButOn(Which)=Mommy Print8(X,Y,Text) Wid=Text(0) ButX(Which)=X ButX2(Which)=X+Wid ButY(Which)=Y X1=}X*8 Y1=Y*8 X2=(X+Wid)*8-1 Y2=Y*8+7 Color=1 PutWas() Plot(X1,Y1) DrawTo(X2,Y1) DrawTo(X2,Y2) DrawTo(X1,Y2) DrawTo(X1,Y1) If} Mommy>1 Then Plot(X1+1,Y1) DrawTo(X1+1,Y2) Plot(X2-1,Y1) DrawTo(X2-1,Y2) If Mommy=3 Then Color=0 Plot(X1,Y1+1) Dra}wTo(X1+1,Y1) Plot(X2,Y1+1) DrawTo(X2-1,Y1) Plot(X1,Y2-1) DrawTo(X1+1,Y2) Plot(X2,Y2-1) DrawTo(X2-1,Y2) Plot(X1,Y1) Plot}(X2,Y1) Plot(X1,Y2) Plot(X2,Y2) Fi Fi WasPut()ReturnProc RemoveButton(Byte Which) ButOn(Which)=0 ReturnModule Plotx; SLUDGE (c) NBS 1994; By Bill KendrickByte Array Shape(10)Byte CSet=756,Key=764,Cur=752,Bak=712, Console=53279,DMA=}559,Time=20, GPrior=623,PMs=53277,PMSet=54279, PMX=53248,PMWidth=53256,GP=623, PMColor=704,KeyRpt=730,Att=77,} PMX2=53249,PMColor2=705, PMWidth2=53257,Invs=755Card Mars=82,Cols=709,SC=88Byte Ok,C,K,Fire,Level,S,A,SX,SY,SD, } Count,Used,Obj,Done,GameOver,X,Y, OY,CC,Up,Down,Right,Left,Ok1,Ok2, Ok3,Ok4,OkC,B,Z,R1,R2Card CH,Score,SWait,P}M,Whr,FarProc ShowScore() Position(6,0) PrintC(Score) PrintE(" ")ReturnProc Screen() Graphics(0) Mars=9984 Col}s=15 Cur=1ReturnProc Font() CH=(Peek(106)-16)*256 MoveBlock(CH,57344,1024) CSet=CH/256 PokeC(CH+268,26238) Mov}eBlock(CH+24,""+1,8) ; # MoveBlock(CH+32,""+1,8) ; $ MoveBlock(CH+80," HtE"+1,8) ; * MoveBloc}k(CH+528,""+1,8) ;  MoveBlock(CH+688,""+1,8) ;  MoveBlock(CH+616,""+1,8) ; MoveBlock(CH+624},""+1,8) ;  MoveBlock(CH+752,"0~~0"+1,8) ;  MoveBlock(CH+760," ~~ "+1,8) ;  MoveBlock(CH+512,"U}"+1,8) ;> MoveBlock(CH+576,""+1,8) ;>| MoveBlock(CH+584," "+1,8) ; > MoveBlock(CH+592,"P"+1},8) ; > MoveBlock(CH+600," "+1,8) ; > MoveBlock(CH+608,"P"+1,8) ; > MoveBlock(CH+632,""+1,8) ;}>| MoveBlock(CH+640,"U"+1,8) ;> MoveBlock(CH+672,"U"+1,8) ;>ReturnProc Sprites() PM=(Peek(106)}-20)*256 PMs=3 PMSet=PM/256 GP=17 PMX=0 PMX2=0 PMWidth=1 PMWidth2=1 PMColor=70 PMColor2=16 SetBlock(PM+51}2,256,0) SetBlock(PM+667,14,252)ReturnProc Title() DMA=0 Put(125) PutE() PutE() Print("}") Print("렠") Print("䩠䠠") } Print("嬠") Print(" ") PutE() Print(" } Starting level: ") PrintBE(Level) PutE() PutE() PrintE(" or to begin.") PutE() PrintE(}" to change starting level.") PutE() PrintE(" ۿ for help.") PutE() PrintE(" } to quit.") DMA=46ReturnProc Pause(Byte Length) Time=0 Do Until Time>=Length OdReturnProc FadeIn() PMX=0 PMX2}=0 For A=0 To 15 Do Cols=A Pause(2) OdReturnProc FadeOut() PMX=0 PMX2=0 For A=0 To 15 Do Cols=15-A } Pause(1) OdReturnInclude"SLUDGE.H"Byte Func Empty()Byte M M=1 If CC<>252 And CC<>128 And CC<>66 And CC<>0 }And CC<>210 And CC<>209 And CC<>197 And CC<>218 And CC<>195 And CC<>211 And CC<>78 And CC<>194 And CC<>206 Then M=0 F}iReturn(M)Proc Place(Byte Xx,Yy,Zz) Position(Xx,Yy) If Zz=0 Then PrintE("") Position(Xx,Yy+1) PrintE("}") Position(Xx,Yy+2) PrintE("") ElseIf Zz=1 Then PrintE("") Position(Xx,Yy+1) PrintE("") } Position(Xx,Yy+2) PrintE("") ElseIf Zz=2 Then PrintE("") Position(Xx,Yy+1) PrintE("") Positio}n(Xx,Yy+2) PrintE("") ElseIf Zz=3 Then PrintE("") Position(Xx,Yy+1) PrintE("") Position(Xx,Yy+}2) PrintE("") ElseIf Zz=4 Then PrintE("") Position(Xx,Yy+1) PrintE("") Position(Xx,Yy+2) P}rintE("") ElseIf Zz=5 Then PrintE("") Position(Xx,Yy+1) PrintE("") Position(Xx,Yy+2) PrintE("}") ElseIf Zz=6 Then PrintE("") Position(Xx,Yy+1) PrintE("") Position(Xx,Yy+2) PrintE("") F}iReturnProc Update() For A=0 To 4 Do Place(1,A*4+3,Shape(A)) OdReturnProc GameScreen() DMA=0 SetBlock(PM+51}2,128,0) Put(125) Print("Score: Level:") PrintB(Level) Put(32) Used=Level*2 If Used>15 Then Used=15 Fi For} A=1 To Used Do Put(') Od ShowScore() PrintE("") For A=1 To 7 Do Prin}tE("| |           |") PrintE("| |           |") PrintE("| |$$}$$$$$$$$$|") Od Print("") DMA=46 SX=Rand(8)*3+9 SY=Rand(5)*3}+6 SD=Rand(4) SWait=1000 Count=0 Up=0 Right=1 Down=2 Left=3 Position(SX-1,SY-1) Print("") Position(SX-}1,SY) Print("Ӡ") Position(SX-1,SY+1) Print("") If SD=Up Then Position(SX,SY-1) Print("") SY==-1 }Fi If SD=Right Then Position(SX+1,SY) Print("") SX==+1 Fi If SD=Down Then Position(SX,SY+1) Print}("") SY==+1 Fi If SD=Left Then Position(SX-1,SY) Print("") SX==-1 Fi For A=0 To 4 Do Shape(A)=Ran}d(7) Od Update() FadeIn()ReturnProc Next() For A=0 To 3 Do Shape(A)=Shape(A+1) Od Shape(4)=Rand(7) Obj=Sha}pe(0)ReturnProc Explode() PMX=0 Position(X+1,Y+1) Put('*) Pause(1) For A=1 To 15 Step 2 Do For B=0 To 2 Do } Position(X,Y+B) Z=(Rand(2)*128)+'* Put(Z) Z=(Rand(2)*128)+'* Put(Z) Z=(Rand(2)*128)+'* } Put(Z) Od Sound(0,200-A*2,0,15-A) Od Position(X,Y) Print(" ") Position(X,Y+1) Print(" ") Position(}X,Y+2) Print("$")ReturnProc Game() Score=0 Bak=192 GameOver=0 Do PMX=0 PMX2=0 X=5 Y=2 OY=0} GameScreen() Obj=Shape(0) Done=0 Far=0 Key=255 PMX2=52 Do K=Key S=Stick(0) If }S=7 Or S=11 Or S=13 Or S=14 Then Pause(3) Fi Fire=1-STrig(0) If Key<255 Then Key=255 Fi If K=28 Then Done=1} GameOver=1 Fi If K=7 Or K=135 Then S=7 Fi If K=6 Or K=134 Then S=11 Fi If K=14 Or K=142 Then S=14 Fi } If K=15 Or K=143 Then S=13 Fi If K=12 Or K=140 Or K=33 Or K=161 Then Fire=1 Fi If S=7 And X<33 Then X=X+3 Fi } If S=11 And X>6 Then X=X-3 Fi If S=13 And Y<18 Then Y=Y+3 Fi If S=14 And Y>2 Then Y=Y-3 Fi Sound(2,0,0,0}) If S=7 Or S=11 Or S=13 Or S=14 Then Sound(2,200,10,2) Fi PMX=X*4+48 If Y<>OY Then S}etBlock(PM+528+OY*4,12,0) SetBlock(PM+528+Y*4,12,') OY=Y Fi CC=Peek(SC+X+Y*40+1) Ok1=Empty}() CC=Peek(SC+X+Y*40+40) Ok2=Empty() CC=Peek(SC+X+Y*40+42) Ok3=Empty() CC=Peek(SC+X+Y*40+81) } Ok4=Empty() CC=Peek(SC+X+Y*40+41) OkC=Empty() If Fire=1 Then If Ok1=0 Or Ok2=0 Or Ok3=0 } Or Ok4=0 Or OkC=0 Then Sound(0,60,12,15) Pause(5) Sound(0,0,0,0) Else If CC<}>0 Then Explode() Else Count==+1 If Count=5 Then Count=0 If Use}d>0 Then Position(19+Used,0) Put(32) Used==-1 Fi Fi} Score==+10 Fi ShowScore() PMX=0 Place(X,Y,Obj) For A=0 To 30 D}o Sound(0,8,10,5-A/6) Sound(1,31,0,15-A/2) Od Next() Update() F}i Fi If K=10 Then ; [p] Sound(0,0,0,0) Sound(1,0,0,0) Sound(2,0,0,0) Cols=4  } Do Until Key<255 Od Key=255 Cols=15 Fi If K=56 Then ; [f] SWait=0 Fi  } Att=0 If SWait<80 Then R1=Rand(255) R2=Rand(7)*2 Sound(1,R1,R2,2) Fi If SWait>0  }Then SWait==-1 Else SWait=75 If SD=0 Then SY==-1 ElseIf SD=1 Then SX==+1 ElseIf SD=2 Th }en SY==+1 ElseIf SD=3 Then SX==-1 Fi Whr=SC+SX+SY*40 CC=Peek(Whr) If CC=252 Then CC=200  } ElseIf CC=210 Then CC=192 ElseIf CC=209 Then CC=201 If SD=Up Then SD=Right ElseIf SD}=Left Then SD=Down Fi ElseIf CC=197 Then CC=202 If SD=Up Then SD=Left ElseIf SD=Right T}hen SD=Down Fi ElseIf CC=218 Then CC=203 If SD=Down Then SD=Right ElseIf SD=Left Then S}D=Up Fi ElseIf CC=195 Then CC=204 If SD=Down Then SD=Left ElseIf SD=Right Then SD=Up Fi} ElseIf CC=207 Or CC=208 Then CC=212 Score==+49 ElseIf CC=211 Then If SD=Left O}r SD=Right Then CC=208 Else CC=207 Fi Else If Used>0 Or Far9 Then Level=9 Fi For Y=2 To 20 Step 3 Do For X=5 To 36 Step 3 Do CC=Peek(SC+X+Y*40+41) } If CC<>212 And CC<>192 And CC<>200 And CC<>201 And CC<>202 And CC<>203 And CC<>204 And CC<>208} And CC<>207 And CC<>0 And CC<>147 Then Explode() If Score>20 Then Score==-20 } Else Score=0 Fi ShowScore() Fi Od Od Fi For A=0 To 250 Do Sound(0,}A,10,15-A/25) Od Sound(0,0,0,0) Key=255 Time=0 Do If GameOver=0 Then If Time=20 Then Invs=2} ElseIf Time=40 Then Invs=0 ElseIf Time=60 Then Time=0 Fi Fi Until Key<255 Od Invs=2 Key=25}5 FadeOut() Until GameOver=1 Od PMX=0 PMX2=0 Bak=0ReturnProc Main() Screen() Sprites() Font() KeyRpt=2} Level=1 Do Cols=0 Title() FadeIn() Ok=0 Key=255 Do K=Key C=Console Fire=1-STri}g(0) S=Stick(0) If K<255 Then Key=255 Fi If K=12 Or K=32 Or C=6 Or Fire=1 Then Ok=1 Fi If K=28 Or K=5 }2 Or K=47 Then Ok=2 Fi If K=38 Or K=102 Then Ok=3 Fi If K=14 Or K=15 Or C=5 Or S<>15 Or K=142 Or K=143 Then !} Att=0 Level==+1 If Level>9 Then Level=1 Fi Position(27,8) PrintB(Level) Pause(8) "} Fi Until Ok<>0 Od Att=0 FadeOut() If Ok=1 Then Game() Fi If Ok=3 Then Help() Fi Until Ok=2 Od Gr#}aphics(0)ReturnOk<>0 Od Att=0 FadeOut() If Ok=1 Then Game() Fi If Ok=3 Then Help() Fi Until Ok=2 Od Gr; SLUDGE.H > HELP PROCEDURE; (C) NBS 1994 BY BILL KENDRICKProc NextPage() FadeIn() Position(0,23) Print("%}") Key=255 Do Until Key<255 Od Key=255 FadeOut() PrintE("}Š󺠠")Return&}Proc Help() PrintE("}Š󺠠") PutE() PrintE("Object:") PrintE("") PrintE(" '} An accident has occured in a lab") PrintE("and it's your job to connect piping to") PrintE("slow down the sludge bein(}g created") PrintE("until its pressure can be safely") PrintE("decreased.") PutE() PrintE(" There are seven types)} of pipe") PrintE("connectors which you can use and you") PrintE("are to place them one at a time in the") PrintE("labo*}ratory. For insurance purposes,") PrintE("you must use a certain number of") PrintE("pipes, and for safety reasons, you"+}) PrintE("must have a certain length of them") PrintE("usefully connected to slow the sludge.") PutE() PrintE(" W,}hen you complete a level, your") PrintE("score is decreased from the time taken") PrintE("to clean up any extra unused pi-}ping.") NextPage() PrintE("Controls:") PrintE("") PrintE(" Use the arrow keys or a joystick") PrintE(".}to move the highlight-cursor and press") PrintE("[FIRE], [SPACE], or [RETURN] to place") PrintE("the pipe on the top of t/}he stack.") PutE() PrintE("Press the [ESC] key to abort a game.") PutE() PrintE("Press the [P] key to pause the game.0}") PrintE("Press any key to resume.") PutE() PrintE("Press the [F] key to start or speed up") PrintE("the flow of slu1}dge.") NextPage() PrintE("Game Rules:") PrintE("") PrintE(" If you place a pipe where there") PrintE2}("is one already, you get no bonus") PrintE("points and the old pipe gets") PrintE("destroyed.") PutE() PrintE(" 3}If you try to place a pipe on a") PrintE("pipe containing sludge or on the main") PrintE("sludge receptical, you hear a b4}uzz.") NextPage() PrintE("Level Rules:") PrintE("") PrintE(" To beat a level and continue with") Pr5}intE("the game, the sludge must have flowed") PrintE("a certain length and a certain number") PrintE("of pipes must have6} been placed in") PrintE("blank areas (pipes placed where pipes") PrintE("already were don't count!).") PutE() PrintE7}("Level: Flow Length: Pipes Needed:") PrintE(" 1 6 10") PrintE(" 2 12 8} 20") PrintE(" 3 18 30") PrintE(" 4 24 40") PrintE(" 5 30 9} 50") PrintE(" 6 36 60") PrintE(" 7 42 70") PrintE(" 8 :} 48 75") PrintE(" 9 54 75") PutE() PrintE("(Note: There is only enough space ;}for") PrintE(" 77 pipes, so levels 8 and 9 need 75.)") NextPage() PrintE("Pipes:") PrintE("") PrintE(" Th<}e seven pipes in Sludge are:") PutE() PrintE(" The '|' and '' pipes simply") PrintE(" continue the f=}low of the") PrintE(" sludge.") PutE() PrintE(" The '', '', '', & ''") PrintE(" >} pipes alter the course") PrintE(" of the sludge.") PutE() PrintE(" The '' pipe continues the")?} PrintE(" flow of the sludge but can") PrintE(" be used twice to go across") PrintE(" a curr@}ent path of sludge.") PrintE(" (Bonus points are given when") PrintE(" a path is crossed twice.)") NeA}xtPage() PrintE("The Screen:") PrintE("") PrintE("") PrintE("|Scr:0 Lvl:1 |<-Score, leB}vel, and") PrintE("|| markers showing how") PrintE("|||$$$$$$$$$$$|| many pipes are still") PrintE("|C}||$$$$$$$$$$$|| needed for the level") PrintE("|||$$$$$$$$$$$|| (each '' represents") PrintE("|||$$$$$$$$$$$|| fivD}e pipes).") PrintE("|||$$$$$$$$$$$||") PrintE("|||$$$$$$$$$$||") PrintE("|||$$$$$$$$$$$||") PrintE("|E}|") PrintE("") PutE() PrintE("The is the sludge recepitcal which") PrintE("  shows whiF}ch way the sludge") PrintE(" start coming out.") PutE() PrintE("The ''s on the left represent the list") PrinG}tE("of the next pipes to be selected.") NextPage() PrintE("Credits:") PrintE("") PrintE("Sludge") PrintE("BH}y Bill Kendrick") PrintE("(pd) New Breed Software, 1994.") PutE() PrintE("Original idea from 'Pipe Dream'.") PutE() I} PrintE("New Breed Software") PrintE("c/o Bill Kendrick") PrintE("59 Palm Lane") PrintE("Novato, CA 94945-2574") PutEJ}() PrintE("phbill@cyberden.sf.ca.us") PrintE("kendrick@vax.sonoma.edu") PutE() PrintE("Other New Breed 1994 titles:")K} PrintE("Rodent Revenge and Cooltris!") NextPage()Returnsonoma.edu") PutE() PrintE("Other New Breed 1994 titles:")?  Bombo  Unstable Bombx  Crystal^  WeightShapes Unmovable  Shapes M}  L  Monads LL  Biads LL LL  Triads N} L L L LL LLL LL LL L LL L L L  L L L \ L O} Tetrads / LL LL  LL LL L o1-4 1,3 2,4 1 2 3 4 1-4LLLL LLLL LLLL LL LLL LLL LL LLLLLLLL LLLL LLLL LLL LL LL LLL LLLLLLLL Q}LLLL LLL LLLL LLLL LLLL LLLL LLLLL LL LLL LLLL LLLL LLLL LLLL LL1 2 3 4 1 2 3 4LLL LLLL LR}LL LLLL L LLL LLLL LLLLLL LLLL LLL LLL LL LLL LLLLL LLL LLLL LLLL LLL L LLLLLL LLLL LLL LS}LLL LLLL LLLL LLLL LLLL1 2 3 4 1 2 3 4LL LLLL LLL LLL LL LLL LLL LLLLLLL L LLL L LT}LL L LLL LLLL LLL LL LLLL LLL LLLL LL LLLLLLL LLLL LLLL LLLL LLLL LLLL LLLL LLLL1/3 2/4 1/32/41/3U}2/4LLLL LLL LLLL LLL LLL LLLLLL LL LL LL LLL LLL LLL LL LLL LLL LLLLLLLL LLLL LLLL LLLL LLLL LLLLV}2/4LLLL LLL LLLL LLL LLL LLLLLL LL LL LL LLL LLL LLL LL LLL LLL LLLLLLLL LLLL LLLL LLLL LLLL LLLL1,1:1,3 1,3 1,3 1,31,2:1,3 1,3 1,3 1,31,3:1,3 1,3 1,3 1,31,4:1,3 1,3 1,3 1,32,1:1,3 2,3 1,3 2,32,2:1,2 1,3 1,2 1,32,3:1X},3 2,3 1,3 2,32,4:1,2 1,3 1,2 1,33,1:1,0 2,0 1,1 1,13,2:1,0 1,1 2,1 2,13,3:2,0 1,1 2,1 2,13,4:1,0 2,0 2,1 2,14,1:1,2 2,Y}2 1,3 2,34,2:1,2 2,2 1,3 2,34,3:1,2 2,2 1,3 2,34,4:1,2 2,2 1,3 2,35,1:1,0 1,1 1,2 1,35,2:0,2 1,2 2,2 3,25,3:2,0 2,1 2,2Z} 2,35,4:0,1 1,1 2,1 3,16,1:0,0 1,0 2,0 1,16,2:0,0 0,1 1,1 0,26,3:1,1 0,2 1,2 2,26,4:1,1 2,0 2,1 2,27,1:1,0 2,0 2,1 2,2[}7,2:1,1 2,1 3,1 1,27,3:2,0 2,1 2,2 3,27,4:3,0 1,1 2,1 3,18,1:1,0 2,0 1,1 1,28,2:0,0 0,1 1,1 2,18,3:1,0 1,1 0,2 1,28,4:0\},1 1,1 2,1 2,29,1:0,1 1,1 1,2 2,29,2:2,0 1,1 2,1 1,29,3:0,1 1,1 1,2 2,29,4:2,0 1,1 2,1 1,2A,1:2,1 3,1 1,2 2,2A,2:1,0 1,]}1 2,1 2,2A,3:2,1 3,1 1,2 2,2A,4:1,0 1,1 2,1 2,2B,1:1,0 1,1 1,2 1,2B,2:0,1 1,1 2,1 2,1B,3:1,0 1,1 1,2 1,2B,4:0,1 1,1 2,1^} 2,12,2A,3:2,1 3,1 1,2 2,2A,4:1,0 1,1 2,1 2,2B,1:1,0 1,1 1,2 1,2B,2:0,1 1,1 2,1 2,1B,3:1,0 1,1 1,2 1,2B,4:0,1 1,1 2,1; Cooltris (c) NBS 1993Byte Time=20,Noise=65,Att=77,RAM=106, DMA=559,C0=708,C1=709,C2=710, C3=711,C4=712,Repeat=7`}30, Click=731,Cur=752,CSet=756, Key=764,Con=53279Card DList=560,Mars=82,SC=88Byte A,Blink,C,DD,Drop,F,GameOver, a} Height,K,Level,N,NewLevel,Ok,ORot, OX,OY,P,Players,Preview,S,Stuck, Sz,T,TTime,Wham,X1,X2,XX,Y1,Y2,YY, ZCb}ard CH,DLByte Array Alive(2),Cnt(2),GO(100), GR(100),GS(100),In(2), Lines(2),Obj(2),Rot(2), c} Stk(2),XP(2),XS(355),YP(2), YS(355)Card Array Score(2);Include "RUNTIME.ACT"Include "COOLTRIS.H1"Byte Func d}Hit(Byte Obkt,Rtt,X,Y)Byte AByte QQ,RX,RYCard Whr A=0 If Obkt<=11 Then For QQ=0 To 3 Do Whr=(Obkt-1)*32+(Rtte}-1)*8+QQ RX=X+XS(Whr) RY=(Y+YS(Whr)) If Peek(SC+RY*40+RX)<>0 Then A=1 Fi Od Else If Peek(SC+Y*40+f}X+1)<>0 Then A=1 Fi FiReturn(A)Proc GUpdate() Position(7,1) PrintC(Score(0)) Position(9,23) PrintB(Lines(0)) Ig}f Players>0 Then Position(34,1) PrintC(Score(1)) Position(34,23) PrintB(Lines(1)) Fi Position(19,23) Puh}t(Level+176)ReturnProc Play()Byte RX Blink=0 Att=0 For P=0 To 1 Do XP(P)=0 YP(P)=0 Obj(P)=0 Score(Pi})=0 Lines(P)=0 In(P)=0 Cnt(P)=0 Alive(P)=1 Od If Players=0 Then Alive(1)=0 Fi C1=15 C2=15 C4=15 Dj}MA=0 Put(125) PrintE("") Print("Score: 0 1Up | ") If Players>0 Then Prk}intE("2Up Score: 0") Else PutE() Fi PrintE("") PrintE(" |") l}PrintE(" |") For C=1 To 16 Do PrintE(" | ||| |") Od Printm}E(" |") PrintE("") Print(" Lines: 0 ")n} If Players=1 Then Print(" Lines: 0") Fi DMA=34 Sound(0,0,0,0) Sound(1,0,0,0) For C=0 To 15 Do C2=15-C o}C4=15-C Time=0 Do Until Time=3 Od Od If Height>0 Then For C=1 To Height Do For T=0 To 6 Do Sounp}d(0,200-(C+T)*10,10,15) Z=Rand(12) Poke(SC+(21-C)*40+Z+6,64) If Players>0 Then Poke(SC+(21-C)*40+Z+21q},64) Fi Time=0 Do Until Time=1 Od Od Od Sound(0,0,0,0) Score(0)=Height*10 Score(1)=Heigr}ht*10 Fi GUpdate() GameOver=0 Do For C=0 To 99 Do GO(C)=Rand(15)+1 GR(C)=Rand(4)+1 GS(C)=0 s} If Stuck<>0 Then T=Rand(12-Stuck) If T=1 Or Stuck=9 Then GS(C)=1 Fi Fi Od For P=0 To Players t}Do In(P)=0 Cnt(P)=0 Prevue(P) Lines(P)=0 Od NewLevel=0 Position(18,23) Put(') Puu}t(Level+176) Put(') Do Att=0 K=Key If K<255 Then Key=255 Fi If K=10 Then Position(0,v}0) PrintE("РՠӠŠĠ") Do Until Key<255 Od Key=255 Posiw}tion(0,0) PrintE("") Fi C=Con If C<7 Or K=28 Then GameOver=1x} Fi Sound(0,0,0,0) Sound(1,0,0,0) For P=0 To Players Do If Alive(P)<>0 Then Drop=0 S=y}Stick(P) F=1-STrig(P) If P=0 Then If K=7 Then S=7 Fi If K=6 Then S=11 Fi If K=1z}4 Then S=14 Fi If K=15 Then S=13 Fi If K=12 Or K=33 Then F=1 Fi Fi If Obj(P)=0 Then {} C=In(P) In(P)==+1 Cnt(P)=250 Obj(P)=GO(C) Rot(P)=GR(C) Stk(P)=GS(C) |} XP(P)=5 YP(P)=0 RX=XP(P)+5+15*P If In(P)>=95 Or Lines(P)>=25 Then NewLevel=}}1 Position(18,23) If P=0 Then Print("") Else Print("") Fi For C=0 To 15~}0 Do C1=C/10 Sound(0,C,10,15) Od For C=0 To 75 Do C1=C/5 } Time=0 Do Until Time=1 Od Sound(0,C,10,6) Od Sound(0,0,0,0) } Position(0,23) Print(" Lines: 0 ") If Players=1 Then Print(" Lines: 0") Fi} Score(P)==+100 Lines(0)=0 Lines(1)=0 GUpdate() Fi If Hit}(Obj(P),Rot(P),RX,YP(P)+5)<>0 Then Alive(P)=0 Fi Prevue(P) Fi Cnt(P)==+1 } OX=XP(P) OY=YP(P) ORot=Rot(P) If Cnt(P)>=11-Level And Cnt(P)<200 Then YP(P)==+1 } Drop=1 Cnt(P)=0 Fi If S=7 And Drop=0 Then XP(P)==+1 Fi If S=11 And Drop=0 Then XP(P)==-1} Fi RX=XP(P)+5+15*P If S=13 And Drop=0 Then YP(P)==+1 Drop=1 Fi If S=14 And Drop=0 Then OY=}YP(P) While Hit(Obj(P),Rot(P),RX,YP(P)+5)=0 Do OY=YP(P) YP(P)=YP(P)+1 Od } Drop=1 Fi If F=1 And Stk(P)=0 And Drop=0 Then Rot(P)==+1 If Rot(P)>4 Then Rot(P)=1 Fi } Fi Wham=Hit(Obj(P),Rot(P),RX,YP(P)+5) If Wham=0 Then Draw(Obj(P),Rot(P),Stk(P),RX,YP(P)+5,1)} Else If Drop=1 Then Sound(P,50,0,15) Score(P)=Score(P)+Level Score(P)=}Score(P)+(Stk(P)*5) GUpdate() XP(P)=OX YP(P)=OY Rot(P)=ORot If Ob}j(P)<12 Then Draw(Obj(P),Rot(P),Stk(P),RX,YP(P)+5,1) Else Sz=Rand(2)+1 }DD=32 If Obj(P)=12 Then Sz=1 Fi If Obj(P)=15 Then DD=0 Fi If Obj(P)=12 Or Obj(P)=13} Or Obj(P)=15 Then If XP(P)>Sz Then X1=XP(P)-Sz Else X1=0 Fi If YP(P)>Sz Then} Y1=YP(P)-Sz Else Y1=0 Fi If XP(P)+Sz<11 Then X2=XP(P)+Sz Else X2=11 Fi } If YP(P)+Sz<15 Then Y2=YP(P)+Sz Else Y2=15 Fi For YY=Y1 To Y2 Do } For XX=X1 To X2 Do Position(XX+6+15*P,YY+5) T=7+Rand(2)+(Rand(2)*128) } Put(T) Od Od For C=0 To 30 Do Sound(0,C*(DD/32)+100},12*(1-(DD/32)),15-(C/2)) Od For YY=Y1 To Y2 Do For XX=X1 To X2 Do } Position(XX+6+15*P,YY+5) Put(DD) Od Od Fi } If Obj(P)=14 Then RX=XP(P)+6+15*P For OY=YP(P)+5 To 20 Do Positi}on(RX,OY) Put(') For C=0 To 30 Do Sound(0,200,0,15-C/2) } Od Position(RX,OY) Put(32) Od Fi Fi } TTime=0 For OY=5 To 20 Do A=1 For C=1 To 12 Do If Peek(SC+OY*4}0+5+15*P+C)=0 Then A=0 Fi Od If A=1 Then Score(P)==+50+10*TTime L}ines(P)==+1 GUpdate() TTime==+1 YY=OY Do } YY==-1 MoveBlock(SC+(YY*40)+46+15*P,SC+(YY*40)+6+15*P,12) Sound(0,YY*5,10,TTime*4-1)} Until YY<=5 Od MoveBlock(SC+(5*40)+6+15*P,""+1,12) Sound(0,0,0,0)} Fi Od If TTime>=4 Then For A=1 To 50 Do Position(5+15*P,}3) Print("  ϠΠՠӡ ") Score(P)==+2 Sound(0,100-A*2,10,15) } GUpdate() Position(5+15*P,3) Print(" B O N U S! ") Od Positio}n(5+15*P,3) Print(" ") Sound(0,0,0,0) GUpdate() Fi } Obj(P)=0 Else Sound(P,200,10,15-(C/16)) XP(P)=OX Rot(P)=ORot Fi} Fi If Wham=0 Then Draw(Obj(P),Rot(P),Stk(P),RX,YP(P)+5,0) Fi Else Position(7+}15*P,12) If Blink=1 Then Print("aeOe") Else Print("Gm vr") Fi Fi Od Blink=1-Blink} Time=0 Do Until Time=2 Od Until GameOver=1 Or NewLevel=1 Od Level==+NewLevel If Level>=9 Then Level=9} Fi Until GameOver=1 Od Title()ReturnProc Main() Screen() Font() StoreShapes() Close(1) Open(1,"K:",4,0) L}evel=1 Height=0 Stuck=0 Preview=1 Players=0 Title() Att=0 Do N=0 C=Con K=Key If K<255 Then } N=GetD(1) If N>='a And N<='z Then N==-32 Fi Fi If N='? Then Help() Title() Fi If N=155 Th}en Players=1-Players Update() Fi If N>='0 And N<='9 Then Stuck=N-48 Update() Fi If N=}'P Then Preview==+1 If Preview>4 Then Preview=0 Fi Update() Fi If C=5 Then Level==+1 If} Level>9 Then Level=1 Fi Update() Fi If C=3 Then Height==+1 If Height>9 Then Height=0 Fi Upda}te() Fi If C<7 Then Att=0 Time=0 Do Until Time=5 Od Fi If C=6 Then Play() Fi Until N=27 O}d Close(1) Key=255 Graphics(0)Return Time=0 Do Until Time=5 Od Fi If C=6 Then Play() Fi Until N=27 O-; COOLTRIS.H1Proc Stik(Byte Ob,Rot Char Array Coords)Byte InCard Whr For In=0 To 3 Do Whr=(Ob-1)*32+(Rot-1)*8+In } XS(Whr)=Coords(In*2+1)-48 YS(Whr)=Coords(In*2+2)-48 OdReturnProc StoreShapes() Stik(1,1,"10101010") ; monad St}ik(1,2,"10101010") Stik(1,3,"10101010") Stik(1,4,"10101010") Stik(2,1,"11211121") ; biad Stik(2,2,"10111011") Stik(}2,3,"11211121") Stik(2,4,"10111011") Stik(3,1,"10201111") ; triad "L" Stik(3,2,"10112121") Stik(3,3,"20112121") Sti}k(3,4,"10202121") Stik(4,1,"10201121") ; tetrad square Stik(4,2,"10201121") Stik(4,3,"10201121") Stik(4,4,"10201121")} Stik(5,1,"10111213") ; tetrad line Stik(5,2,"02122232") Stik(5,3,"20212223") Stik(5,4,"01112131") Stik(6,1,"001020}11") ; tetrad "T" Stik(6,2,"00011102") Stik(6,3,"11021222") Stik(6,4,"11202122") Stik(7,1,"10202122") ; tetrad "L" }Stik(7,2,"11213112") Stik(7,3,"20212232") Stik(7,4,"30112131") Stik(8,1,"10201112") ; tetrad rvs"L" Stik(8,2,"0001112}1") Stik(8,3,"10110212") Stik(8,4,"01112122") Stik(9,1,"01111222") ; tetrad "Z" Stik(9,2,"20112112") Stik(9,3,"0111}1222") Stik(9,4,"20112112") Stik(10,1,"21311222") ; tetrad "S" Stik(10,2,"10112122") Stik(10,3,"21311222") Stik(10,}4,"10112122") Stik(11,1,"10111212") ; triad line Stik(11,2,"01112121") Stik(11,3,"10111212") Stik(11,4,"01112121")Re}turnProc Font() CH=(RAM-8)*256 MoveBlock(CH,57344,1024) MoveBlock(CH+130,"nffv"+1,4) ; 0 Poke(CH+142,60) ; 1 Pok}e(CH+268,126) ; A Poke(CH+269,102) Poke(CH+289,124) ; D Poke(CH+290,102) Poke(CH+293,102) Poke(CH+294,124) Poke(C}H+299,120) ; E Poke(CH+307,120) ; F Poke(CH+329,60) ; I Poke(CH+334,60) Poke(CH+405,102) ; R Poke(CH+430,62) ; U} Poke(CH+446,34) ; W MoveBlock(CH+64*8,""+1,8) ; MoveBlock(CH+65*8,"8|||8"+1,8) ; MoveBlock(CH+66*8,"B}8|||8"+1,8) ; MoveBlock(CH+68*8,">>"+1,8) ; MoveBlock(CH+70*8,">>"+1,8) ; MoveBlock(CH+71*8,"d"+1},8) ; MoveBlock(CH+72*8,"R#Tw#"+1,8) ; CSet=CH/256ReturnProc Screen() Graphics(0) DL=DList+4 Mars=9984 Cu}r=1 C1=15 C2=0 Put(125) Repeat=2 Click=1ReturnProc SkipLine() PrintE(" | |")R}eturnProc Name() PutE() PrintE("    ") PrintE("  ")} PutE()ReturnProc Update() Position(33,10) Put(Level+176) Position(33,12) Put(Height+176) Position(33,14) Put}(Stuck+176) Position(33,16) Put(Preview+176) Position(33,18) Put(Players+177)ReturnProc Title() DMA=0 Put(125)} PutE() Name() PrintE(" By Bill Kendrick, NBS 1993") PutE() PrintE(" ") }PrintE(" | Begin the game! |") SkipLine() PrintE(" | Begin at Level: - |") SkipLine() } PrintE(" | Garbage Height: - |") SkipLine() PrintE(" | ۰۹ Stuck Peices: - |") SkipLine() } PrintE(" | Preview: - |") SkipLine() PrintE(" | Players: - |") SkipLine()} PrintE(" | ۿ Instructions |") SkipLine() PrintE(" | Quit Cooltris |") Print(" } ") Update() DMA=34 C=7 Key=255ReturnProc Wait() Print("") Ke}y=255 C=GetD(1)ReturnProc Help() DMA=0 Put(125) Name() PrintE("How to Play:") PrintE(" ") PrintE(}" Use a joystick or the keyboard to") PrintE("control the falling objects and place") PrintE("them on the screen to c}reate lines") PrintE("which disappear and increase your") PrintE("score. Try not to over fill the screen") PrintE("or }your game is over! Bombs, crystals") PrintE("and weights help (or hinder) you.") PrintE("Speed and difficulty increase w}ith each") PrintE("new level.") PutE() PrintE("You advance to the next level when you") PrintE("either exhaust all of} the selected") PrintE("objects for that level or you get 25 or") PrintE("more lines. Whoever achieves either") PrintE}("of these gets a bonus.") PutE() Print("嬠") DMA=34 Wait() If C=27 Then Return Fi DMA=0 Put(125) Name()} PutE() PrintE("Controls:") PrintE(" ") PrintE(" Player 1 uses the keyboard or a") PrintE("joystick conn}ected to port 1 and") PrintE("Player 2 uses a joystick in port 2.") PutE() PrintE(" Fire: Up: ") PrintE}(" |") PrintE(" Left:  Right: ") PrintE(" | ") } PrintE(" Down: ") PutE() PrintE("Keyboard:") PrintE(" or = Fire") PrintE(}" Arrow keys = Directions") PutE() PrintE(" Pauses the game, aborts it."); ------ PutE() Print("}嬠") DMA=34 Wait() If C=27 Then Return Fi DMA=0 Put(125) Name(); ------ PrintE("Rotating:") PrintE(" } ") PrintE("Changes the shape of non-stuck blocks:") PutE() PrintE("Starting: Once: Twice: Three times:") PutE}() PrintE(" ") PrintE(" ") PrintE(" } ") PutE() PrintE("Stuck:") PutE() PrintE(" Stuck block objects cannot") PrintE(" rotate!"); ------} PutE() Print("嬠") DMA=34 Wait() If C=27 Then Return Fi DMA=0 Put(125) Name(); ------ PrintE("Sliding:}") PrintE(" ") PrintE("When sliding right and left, if the") PrintE("object bumps other blocks, it just") Prin}tE("continues to fall.") PutE() PrintE("When sliding down, if the object") PrintE("bumps other blocks, it is 'placed'."}) PutE() PrintE("'Active objects,' when placed, do their") PrintE("activity.") PutE() PrintE("'Block objects,' when} placed, are put") PrintE("on the board, and if any continuous") PrintE("horizontal lines of blocks are made,") PrintE(}"they are removed and the blocks above") PrintE("drop down.") PutE(); ------ PutE() Print("嬠") DMA=34 Wait(}) If C=27 Then Return Fi DMA=0 Put(125) Name(); ------ PrintE("Dropping") PrintE(" ") PrintE("When an o}bject is dropped ( on") PrintE("the keyboard or joystick), it is") PrintE("automatically placed where it would be") } PrintE("if you slid it down () until it") PrintE("hit something."); ------ PutE() Print("嬠") DMA=34 Wa}it() If C=27 Then Return Fi DMA=0 Put(125) Name(); ------ PrintE("Objects:") PrintE(" ") PrintE("Block }Shapes:") PrintE(" Monad: ") PutE() PrintE(" Biad: ") PutE() PrintE(" Triads: ") PrintE(" ")} PutE() PrintE("Tetrads: ") PrintE(" ") PutE() PrintE}("Active Objects:") PrintE(" Unstable") PrintE("Bomb: Crystal: Weight: Bomb:") PutE() PrintE(" }    "); ------ PutE() Print("嬠") DMA=34 Wait() If C=27 Then Return Fi DMA=0 Put(125}) Name(); ------ PrintE("Active Objects:") PrintE(" ") PrintE(" Bomb:  Explodes in a 3 x 3 square"}) PrintE(" area when placed.") PrintE("Crystal:  Grows outwards to fill") PrintE(" empty spaces} when placed.") PrintE(" Weight:  Keeps falling until it hits") PrintE(" the bottom of the screen") PrintE}(" and 'crushes' (erases)") PrintE(" blocks as it falls.") PrintE("Unstable") PrintE(" Bomb:  } Explodes in a random") PrintE(" area when placed."); ------ PutE() Print("嬠") DMA=34 Wait() If }C=27 Then Return Fi DMA=0 Put(125) Name(); ------ PrintE("Menu Selections:") PrintE(" ") PrintE("} - Begins a new game with the") PrintE(" current selections.") PrintE(" - Changes the starting }level.") PrintE(" - Changes the height of the") PrintE(" random 'garbage' placed on") PrintE(" } the bottom of the board at") PrintE(" the beginning of the game.") PrintE("۰۹ - Selects the commonne}ss of") PrintE(" 'stuck' (non-rotatable)") PrintE(" objects. 0=none, 9=all.") PrintE(" - S}elects how many peices to") PrintE(" preview in advance.") PrintE(" - Selects a 1 or 2 player game") }PrintE(" - Quits Cooltris."); ------ PutE() Print("嬠") DMA=34 Wait() If C=27 Then Return Fi DMA=0 } Put(125) Name(); ------ PrintE("Cooltris was written in Action!") PrintE("By Bill Kendrick, New Breed Software") Pr}intE("December, 1993.") PutE() PrintE("New Breed Software") PrintE("c/o Bill Kendrick") PrintE("59 Palm Lane") Prin}tE("Novato, CA 94945") PutE() PrintE("kendrick@vax.sonoma.edu") PrintE("phbill@cyberden.sf.ca.us") PutE(); ------ }PutE() Print("䬠") DMA=34 Wait()ReturnProc Draw(Byte Obkt,Rtt,Stuk,X,Y,Drw)Byte QQ,RX,RYCard Whr If Obkt<}=11 Then For QQ=0 To 3 Do Whr=(Obkt-1)*32+(Rtt-1)*8+QQ RX=X+XS(Whr) RY=(Y+YS(Whr)) Poke(SC+RY*40+}RX,(64+(128*Stuk))*Drw) Od Fi Position(X+1,Y) If Drw=1 Then If Obkt=12 Then Put(') Fi If Obkt=13 Then Put(}') Fi If Obkt=14 Then Put(') Fi If Obkt=15 Then Put(') Fi Time=0 Do Until Time=2 Od Else If Obkt>11 }Then Put(32) Fi FiReturnProc Prevue(Byte Who)Byte AA,AB If Preview>0 Then For AB=1 To Preview Do Position(W}ho*35,AB*5-2) PrintE(" ") Position(Who*35,AB*5-1) PrintE(" ") Position(Who*35,AB*5) Print}E(" ") Position(Who*35,AB*5+1) PrintE(" ") AA=In(Who)+AB-1 Draw(GO(AA),GR(AA),GS(AA),Who*35,AB*}5-2,1) Od FiReturno*35,AB*5+1) PrintE(" ") AA=In(Who)+AB-1 Draw(GO(AA),GR(AA),GS(AA),Who*35,AB*%Sijc\ic&d}&d}&d*D9:TIME ACT 0078???????????&&&&&&&&XiTi}hihiHHȱȱ`8Hh` 'E…¦ '`L'` '"}Ff ee&8L' '_Wń児0 &&86.ń児8儅}充FfFf8L' (` Fj` &`p B V8l ( Vhhl(HHJJJJhh`}hhl( `iDiE`Hh(`Hh`Hh`Hh` (IHiDiE B (HI B} (`ԆՄ ؠ0ȑ8)ȑ`HhLZ)0LZ)II襢 Z)iȑȩ-`H ) Z)hL)H ) )h}L) (L) (L) )L) (L)L) (L)L) (L) (L) (L* )L) (L* (L) (L* )L) (L+*ȩ$}&*i0:iȑ`( LFĆ>%>Ć5%/E)ԵH膇hCI4H -/L`4101112124W -/Ly4011121214p -/`L48j} '&&&& .&i&iL4nffv4Ѧ .&i&i< .&i &}i~ .&i &if .&i!&i| .&i"&if .&i%&if .&i&&i}| .&i+&ix .&i3&ix .&iI&i< .&iN&i< .&i&if} .&i&i> .&i&i" .@ '&e&eLi66a .}A '&e&eL68|||86 .B '&e&eL6B8|||86馡} .D '&e&eL57>>7- .F '&e&eLy7>>7 }q .G '&e&eL7d7 .H '&e&eL8R#!}Tw#ө7 .&& (`L/8 ,0i&1i&'SR} U+`Ln8L8$ | "} |8q 1*`L8 \+L8'    8 1*L8  #} 8 1* \+`L9 ! '-%i U+ ! '-%i U+! '-%i U+! '-%i U+! '-%i$} U+`Lz9/} U+ \+ 8L9! By Bill Kendrick, NBS 19939 1* \+L9$ 9 1*L:$ %} | Begin the game! |9 1* k8LB:$ | Begin at Level: - |: 1* k8Lt:$ | Garbage Heig&}ht: - |:O 1* k8L:% | ۰۹ Stuck Peices: - |: 1* k8L:$ | Preview: - |: 1* k8L ;$ '} | Players: - |: 1* k8L=;$ | ۿ Instructions |; 1* k8Lo;$ | Quit Cooltr(}is |;J 1*L;$ ;y %* 9"/%`L;L;; %* :,)}%`L;/} U+ 8L< How to Play:; 1*L< < 1*LN<& Use a joystick or the keyboard to<' 1*L~<%control*} the falling objects and place"either exhaust all of the selected= 1*L@>'objects for that level or you get 25 or> 1*Lo>$more line.}s. Whoever achieves either>J 1*L>of these gets a bonus.>y 1* \+L>嬠> %*"/ ;%IL>`/} U+ 8 \+L>/} Controls:> 1*L> > 1*L?$ Player 1 uses the keyboard or a> 1*LI? joystick connected to port 1 and?( 0}1*Lw?#Player 2 uses a joystick in port 2.?S 1* \+L? Fire: Up: ? 1*L? |? 1*L?$ L1}eft:  Right: ? 1*L@$ | ? 1*LF@ Down: @2}& 1* \+L]@ Keyboard:@S 1*L@ or = Fire@g 1*L@# Arrow keys = Directions@ 1* \+L@% 3}Pauses the game, aborts it.@ 1* \+L@嬠@ %*"/ ;%ILA`/} U+ 8L.A Rotating:A$ 1*LBA 4}A8 1*LsA&Changes the shape of non-stuck blocks:AL 1* \+LA&Starting: Once: Twice: Three times:A 1* \+LA 5} A 1*LA A 1*L&B B 1* \+L:BStuck:B6}3 1* \+LhB Stuck block objects cannotBG 1*LB rotate!Br 1* \+LB嬠B %*"/ ;%ILB`/} U+ 7}8LBSliding:B 1*LB B 1*LC#When sliding right and left, if theB 1*L5C"object bumps other blocks, it just8}C 1*LRCcontinues to fall.C? 1* \+LC When sliding down, if the objectC_ 1*LC#bumps other blocks, it is 'placed'.C 9}1* \+LC''Active objects,' when placed, do theirC 1*LC activity.C 1* \+L*D%'Block objects,' when placed, are putD 1:}*LXD#on the board, and if any continuousD4 1*LD$horizontal lines of blocks are made,Db 1*LD%they are removed and the bl;}ocks aboveD 1*LD drop down.D 1* \+ \+LD嬠D %*"/ ;%ILD`/} U+ 8LEDroppingE 1*L)E <}E 1*LVE"When an object is dropped ( onE3 1*LE the keyboard or joystick), it isE` 1*LE&automatically placed where =}it would beE 1*LE%if you slid it down () until itE 1*LEhit something.E 1* \+LF嬠F %*"/ ;%I>}L)F`/} U+ 8LBFObjects:F9 1*LUF FL 1*LmF Block Shapes:F_ 1*LF Monad: Fw 1* \+LF Biad: F 1?}* \+LF Triads: F 1*LF F 1* \+LF$Tetrads: F 1*L.G$ @} G 1* \+LKGActive Objects:G; 1*LtG UnstableGU 1*LGBomb: Crystal: Weight: BombA}:G~ 1* \+LG    G 1* \+LG嬠G %*"/ ;%ILG`/} U+ 8LHActive Objects:H B}1*L-H H 1*L^H& Bomb:  Explodes in a 3 x 3 squareH7 1*LH area when placed.Hh 1*LH"CrysC}tal:  Grows outwards to fillH 1*LH% empty spaces when placed.H 1*LI' Weight:  Keeps falling until it hD}itsH 1*LDI$ the bottom of the screenI 1*LqI" and 'crushes' (erases)IN 1*LI blocks E}as it falls.I{ 1*LIUnstableI 1*LI Bomb:  Explodes in a randomI 1*LJ area when placed.I 1* \+LF}J嬠J %*"/ ;%IL/J`/} U+ 8LPJMenu Selections:J? 1*LkJ JZ 1*LJ% - Begins aG} new game with theJu 1*LJ current selections.J 1*LJ& - Changes the starting level.J 1*L$K$H} - Changes the height of theJ 1*LTK% random 'garbage' placed onK. 1*LK% the bottom of the board aI}tK^ 1*LK% the beginning of the game.K 1*LK%۰۹ - Selects the commonness ofK 1*LL" 'stuckJ}' (non-rotatable)K 1*L?L# objects. 0=none, 9=all.L 1*LoL% - Selects how many peices toLI 1*LL K} preview in advance.Ly 1*LL' - Selects a 1 or 2 player gameL 1*LL - Quits Cooltris.L 1* \+LL}M嬠L %*"/ ;%ILM`/} U+ 8LMMCooltris was written in Action!M- 1*L|M$By Bill Kendrick, New Breed SofM}twareMW 1*LMDecember, 1993.M 1* \+LMNew Breed SoftwareM 1*LMc/o Bill KendrickM 1*LM 59 Palm LaneM 1*LNN}Novato, CA 94945M 1* \+L)Nkendrick@vax.sonoma.eduN 1*LLNphbill@cyberden.sf.ca.usN3 1* \+ \+LfN 䬠N\ %*"/O} ;`ARD c, s)[LN `'vN vNLO|N|NLO8vN '8wN 'eem|NP}NiN&mN&mNyNq}N&mN&mNzNq~N(~N 'XeYem}NixNQ} '@ee{N ' .|NLNyNizN '-{NILPvNI LO U+vNI LO U+vNILR}O U+vNILO U+ILPLP vNLP U+`StrL$PP%LQ P%GPGP PLQO#P 'S} P '8 '-LP P 1*#P ' P '8 '-LP P 1*#T}P ' P ' '-LQ Q 1*#P ' P 'i '-L[Q QVU} 1*PR'm P8PP&P&P&#P ' P '8 N PLkc66mg>>kOk>>gm68l|88|l88||88l|8}U]kw]~>kw*6kI>Uk6kIkAkII}"I \ $ @B@ @  @  @(@(PP B$BmIU>[IUD>I[U>}ImUD``nf>ff~fff~~f<flxxlf`````~cwkccfv~~nf}8pp8?}ww<~~~<x`x`~<~~<}0~0 ~ <~~<<>f>``|ff|<```<>ff>>ff>|``|fff8<<``lxlf8<f}kc|ffffff>|f```>`<|~ffff>fff<ck>6f< x~ 0~<~~<}~x|nf8x8ff|``>ff>|f```>`<|~ffff>fff<ck>6f< x~ 0~<~~< @ 0`8p|Ǐ?~ϟ~ϟ?ϟ?~ϟ?~ϟ?~ϟ?~ϟ?~?~?~ϟ}ϟ?ϟ?~ϟ?~?~} PP PP PP PP@  @}}}}}}<<|| 8||8(\8~˻۝ }<0 0 ~~`0 0`<}f vv~vvv~~~<vv|x|vpppp~~AcwkcFfvnfb}vvv>ckwcAcw>>wcvv<~8p~@`0 xx8pp8?}ww<~~~<x`x`~<~~<}0~0 ~ <~~<<>n>pp|v~|<~p~<>n~>>nn>|pp|vvv8<~<ppv|vv<>f}kc|vvvvnn>|~ppp>p<|~vvv~>vv>ck6"f< x~nn>|~ppp>p<|~vvv~>vv>ck6"f< x~kkc>( 9||8(\|8~˻۝ }<0 0 ~~`0 0`<}f vv~vvv~~~<vv|x|vpppp~~AcwkcFfvnfb}vvv>ckwcAcw>>wcvv<~8p~@`0 xx8pp8?}ww<~~~<x`x`~<~~<}0~0 ~ <~~<<>n>pp|v~|<~p~<>n~>>nn>|pp|vvv8<~<ppv|vv<>f}kc|vvvvnn>|~ppp>p<|~vvv~>vv>ck6"f< x~nn>|~ppp>p<|~vvv~>vv>ck6"f< x~:f,P67A$,.Y67h,.b6-C:,.9i,}9i,9i,;@,.6.S$6-+F:A,&@2,$AVE6-+F:A,&@,$AVS9A$ c+}f8A @+8@A7ARgC@efK(}}WA0hcA1gJ(Loading/g@f} D:SPRITES.FNT>CgAVCgJ(.="g@f D:DUMBANM.FNT1CgA6g=(.68,-fB H}6-fN6-fT6-fZ$$(@ _""(@ 00000 00 3b BcTd "f6-R:f,6}-g&T:f,eF56-%+!@* @,&+!@* @,>6-P:,F6-%gf!@6-@g 6@6}-6@i 6@6-6@j!@6-@k*P:,"g6-g Al/6-%+'@,!@ }/6-&@m  g6-%@np 6-6-6-%6-%q  f6-f6-O:,r  f6-fs%!}AR6-AI%6-6O:,t6-P:'@,$@wN46-+%+'@,%P:'@,$@ %@ ,=6-F:,N6-F:}%@ ,xZ#"A)"A3)"@26-6'@86->6-gQ6-%+i$+O:,!g,,Zěz3#A*A3*}@)6-f3ǛAf[ fA@#6-&h+6-&gK2g@P@@&$h}Q"ffff* "f*6-f2gfff*ŠǛMMPOSITION %0,%0:? #6;CC;" ":? #6;CC2;" ";:REM }7"@f#6-%@/6-@7ٛ/6-&g/2h@ %@ $@9"A8}f#6-%@/6-@9ě)6-&g)2f@&h$@++A*A3*@A}A"A*6i*"g*"f P)68,-g868,-@A68,-="A3*6i*"fP%68,-h468,-@=68},-,6-6$?u6i*"f,6-6$?u# 6-6-6-%g6-f#6-fT(*"g*"f6-@!6-f(}Л#9%A%@%@ P9%P:,$@%A%@%@dB2H%@Hh%A%@}%%@@6 -fi8,"fA 8*8,@:78,$@&@%8,,,868,-8,&g- 8,"f$8,+}8,&g,$@-68,-f222A&8,$@P@&8,$h8,$i T!@6-@) *6}-&g)2iAU&@36-&g6-d:@,$6-g*6-f0"f3%e -fg6-F:@ ,5'@"P:'}@,J(@ M@b(@ demo eA*!@ 6-&g6-g * @! 6-d:@0,2F}:Ad,"A6 6-g&2AdAU4AF:@ ,@1A@D4AF:B2y,"f@54} 6-((AV'AV%$@4@wf AO 6-f6-f#-if6g8,"f6-#6-g }! "f!8,+8,&g,$@Q'&&(@ '&&(@ '&&(@}$ '&&(@ '&&(@ '&&(@ } '&&(@ '&&(@ '&&(@ $$$$ }')&(@)$ D:BOING.TBS. '&&(@ $$$$ F; ǛByte Array Ex(3),Dwn(3),P(3),Exc(8), SP(256),DUM(512)Byte Ok,X,Y,XWait,YWait,Bump,Big,Thr, Ching,Di}am,S,F,Landed,Lanch,OX,OY, Fnd,IY,Tog,CC,CC2Card T,CH,PM,A,DL,Demo,DD,Clck,SC,PP, ScoreInt XM,YM,AnmByte PT=20,N}oise=65,Att=77,RAM=106, Antic=559,GPrior=623, PC0=704,PC1=705,PC2=706,PC3=707, C0=708,C1=709,C2=710,C3=711,C4=}712, Repeat=730,Click=731,Cur=752, CSet=756,Key=764, PX0=53248,PX1=53249,PX2=53250, PX3=53251,W0=53256,W1}=53257, W2=53258,W3=53259,PMGfx=53277, Con=53279,PWhere=54279Card Mars=82,DList=560,Screen=88Proc TENTHOUSAND()} PrintD(6," ") PrintD(6," ") PrintD(6,"$ ") PrintD(6," } ") PrintD(6," ") PrintD(6," ") PrintD(6," ") Pr}intD(6," ") PrintD(6," $$$$ ") PrintD(6,"")ReturnInt Func ABS(Int} V) If V<0 Then V=-V FiReturn(V)Proc WhereSpace() Thr=0 Fnd=0 For A=0 To 3 Do If EX(A)=0 Then Thr=}A Fnd=1 Fi Od If Fnd=0 Then Poke(P(A),(EX(A)-1)*5) FiReturnProc BGet(Byte Ch Card Dest,Size)Card TBy}te B For T=Dest To Dest+Size-1 Do B=GetD(Ch) Poke(T,B) OdReturnProc Startup() PX0=0 PX1=0 PX2=0 PX3=0} GPrior=17 Exc(0)='ϛ Exc(1)='Λ Exc(2)='͛ Exc(3)='̛ Exc(4)=' Exc(4)=' Exc(4)=' Exc(4)=' CH=(RAM-32)*256} PM=(RAM-16)*256 SetBlock(PM,1024,0) Graphics(0) C1=15 C2=0 Mars=9984 Cur=1 Noise=0 Print("}}") Repeat=2} Click=1 Print("Loading") Close(1) Open(1,"D:SPRITES.FNT",4,0) BGet(1,SP,256) Close(1) Put('.) Open(1,"D:DUMBA}NM.FNT",4,0) BGet(1,DUM,512) Close(1) Put('.) Open(1,"D:BOING1.FNT",4,0) BGet(1,CH,1024) Close(1) Put('.) Ope}n(1,"D:BOING2.FNT",4,0) BGet(1,CH+1024,1024) Close(1)ReturnProc Title() Graphics(17) C0=30 C1=202 C2=142 C3=}76 CSet=CH/256 MoveBlock(CH+88,DUM+8,8) PX0=0 PX1=0 PX2=0 PX3=0 SetBlock(PM+512,512,0) DL=DList+4 For A=2 T}o 5 Do Poke(DL+A,7) Od Poke(DL-1,71) For A=0 To 3 Do Sound(A,0,0,0) Od PrintDE(6," } ") DD=8 PrintDE(6," ") PrintDE(6," ^ 1993 }NBS ") Demo=0 PrintDE(6," ") PrintDE(6," ") PrintDE(6,"press or ") Ok=0 Clck=0 }Tog=0 Do MoveBlock(CH+88,DUM+DD,8) DD=DD+8 If DD>352 Then DD=8 Fi C2=DD/2 Att=0 Clck=Clck}+1 If Clck=200 Or PEEK(764)=28 Then Demo=1000 Key=255 Ok=1 Fi If Con=6 Or STrig(0)=0 Then } Ok=1 Fi For T=0 To 4000 Do Od Until Ok=1 OdReturnProc Game() Graphics(17) C0=30 C1=202 C2=142 C3=76 } CSet=CH/256 MoveBlock(CH+88,DUM+8,8) SC=Screen If Demo<>0 Then C0=24 C1=196 C2=136 C3=70 Fi DL=DLi}st+4 For A=3 To 15 Do Poke(DL+A,7) Od PWhere=PM/256 Antic=46 PMGfx=3 PC0=44 PC1=0 PC2=0 PC3=0 ;Wid0=0}; Wid1=0; Wid2=0; Wid3=0 PX0=0 PX1=0 PX2=0 PX3=0 Anm=1 Score=0 X=0 Y=0 XM=0 YM=0 XWait=0 YWait=0 }Bump=0 For A=0 To 3 Do EX(A)=0 Od Big=0 Ching=0 Diam=0 PrintDE(6," ") PrintDE(6," 00000 } 00 3") TENTHOUSAND() Ok=0 Do If Demo=0 Then S=Stick(0) F=1-STrig(0) Fi If S>4 And S<8 And }XM<7 Then XM=XM+1 Fi If S>8 And S<12 And XM>-7 Then XM=XM-1 Fi YM=YM+1 If YM<-7 Then YM}=-7 Fi If YM>7 Then YM=7 Fi If Landed<>0 And Anm=1 Then Anm=1 Else Anm=Anm+XM If }Anm>=72 Then Anm=Anm-64 Fi If Anm<8 Then Anm=Anm+64 Fi Fi OY=Y OX=X X=X+XM} Y=Y+YM If X<0 Then X=0 XM=ABS(XM) Fi If Y<0 Then Y=0 Fi If X>152 Then X=149 } XM=-ABS(XM) Fi IY=(Y/8)*8 PP=(SC+(X/8)+(Y/8)*20+20) CC=Peek(PP) CC2=Peek(PP+20) ; ě If }CC2=195 Or CC2=133 Or CC2=5 Then YM=-YM/2 Y=IY Landed=1 Bump=Bump+3 Fi ; Ǜ If CC2<>}195 And CC2<>133 And CC2<>5 Then Landed=0 Fi If Lanch<>0 Then YM=YM-2 Lanch=Lanch-1 Sound(1,5}0,12,8-Lanch*2) If Lanch=0 Then Sound(1,0,0,0) Fi Fi ; ŠǛ If F=0 And Lanch<>0 Then} Lanch=0 Sound(1,0,0,0) Fi ; ٛ If CC=4 Then Poke(PP,0) Score=Score+10 Ching=15 } Fi If Ching<>0 Then Ching=Ching-1 Sound(2,20+9*Tog,10,Ching) Fi ; ě If CC=138 Then } Poke(PP,0) Score=Score+15 Diam=15 Fi If Diam<>0 Then Diam=Diam-1 Sound(0,12-2*Tog,12,Diam) } Fi ; С If CC<>195 And CC<>133 And CC<>5 Then XM=XM Else If CC=195 And YM<=-3 And Big=1 And Lan}ded=0 Then WhereSpace() EX(THR)=1 DWN(THR)=4 P(THR)=PP Fi If CC=133 And YM<=-3 An}d Landed=0 Then WhereSpace() EX(THR)=2 DWN(THR)=4 P(THR)=PP Fi XM=-(XM*4)/3 } If YM<=-3 And Landed=0 Then YM=-(YM*4)/3 Fi Y=OY X=OX Bump=Bump+1 Landed=0 Lanch}=0 Fi ; Л If F<>0 And Landed<>0 And Lanch=0 Then Lanch=4 Landed=0 Fi SetBlock(PM+512+16+OY},9,0) MoveBlock(PM+512+16+Y,SP+(Anm/8)*8,8) PX0=X+48 If Landed<>0 Then Poke(PM+512+16+Y+8,36) Fi Fo}r A=0 To 3 Do If EX(A)<>0 Then Poke(P(A),(EXC(EX(A)*4-3+DWN(A)))) Dwn(A)=Dwn(A)-1 If Dwn(A)=0 T}hen Poke(P(A),(EX(A)-1)*5) EX(A)=0 Fi Sound(A,200-EX(A)*50,14-EX(A)*2,DWN(A)*3) Fi} Od If Bump>10 Then Bump=10 Fi If Tog=1 And Bump<>0 Then Bump=Bump-1 Sound(3,255-Bump,10,Bum}p) Fi If Key=236 Then Big=1-Big Key=255 Fi If Big<>0 Then PC0=PT Else PC0=44  }Fi Tog=1-Tog CSet=CH/256+Tog*4 Att=0 If Con=0 Then Ok=1 Fi For T=0 To 4000 Do Od Until Ok=1 O }dReturnProc Main() StartUp() Do Title() Game() Until Key=220 OdReturn; IF DEMO THEN DEMO=DEMO-1:S=RAND( }16):BIG=1:F=0:IF DEMO=0 THEN RUN ; IF DEMO THEN POSITION 0,1:IF PT/6=INT(PT/6):? #6;" ":ELSE :? #6;" demo ":ENDIF  }; IF DEMO AND FTIME>20 THEN FTIME=FTIME-1:F=1; IF DEMO AND FTIME<21 THEN FTIME=RAND(30) ":ELSE :? #6;" demo ":ENDIF ^