þþboX X; ROCKS! VERTICAL BLANKb X; ROUTINE AND DATA TABLESl X; By: Douglas Engelv X;€ X; OS EQUATESŠ X;” †ATRACTMž …AUDC1Ò¨ …AUDC2Ò² …AUDC3Ò¼ …AUDC4ÒÆ †AUDCTLÒÐ …AUDF1ÒÚ …AUDF2Òä …AUDF3Òî …AUDF4Òø ‚CHü!†HITCLRÐ !†HPOSP0Ð!†HPOSP1Ð !†HPOSP2Ð*!†HPOSP3Ð4!†HPOSM0Ð>! „M2PFÐH! „M2PL ÐR! „P0PFÐ\! „P0PL Ðf! „P1PFÐp! „P1PL Ðz! „P3PLЄ!†PCOLR0ÀŽ! …PRIORИ!†RANDOM Ò¢! …RUNADà¬!†SIZEP0ж!†STICK0xÀ!†STRIG0„Ê!†XITVBVbäÔ!X;Þ! X;COMMON LABELS AND VARIABLESè! X;SEE PART 1 FOR DESCRIPTIONSò!X;ü!‡ACCOUNTP" ƒALTP"‡ANIMATEP"†ANIPTRP$"ˆBEAMDLAYP."‡BEAMFLGP8"‡BEAMOFFU%B"‡BEAMPOSPL" …BLEEPPV" …BLINKP`"†BLINK1 Pj" „BURN…$t" …BURN1Ÿ$~" …CLRME$ˆ"‰COMPLETED P’"‡COWNTER Pœ" „CSAT%¦" …DIGIT P°"‡DLPRINT÷$º" „DOOM PÄ" …EMPTYPÎ"‡ENDCNTRPØ" „ETC.Pâ"‰EXPLOSIONPì" ‚FDPö" …FLAGS%#‡FLASHMEP # „FLIPP# „FUELP#‡FUELMTRP(#‡FUELUSEP2#†GETLEVO%<#‡GRAVITYPF# ƒG.OPP# …HOLDAPZ# …HOLDXPd#†HPOSMEPn#‡HPOSSATPx# …INITP+$‚#†KONSOLPŒ#ˆLANDFLAGP–# †LINENOÊ #†LOADED Pª# „MATHö#´#†MIRROR.%¾# …MIXUP4$È# „MISS!PÒ#‡MISSLES†PMTABLÜ#ˆMULTIPLY"Pæ# …MYRNA#%ð#†NEWLEV#Pú# …NEWSC$P$ „OLDC9$$†PAUSED%P$‡PLAYER0†PMTABL"$‡PLAYER1†PMTABL,$†PMSATS†PMTABL~6$†PMTABLP@$…PMZAP†PMSATS´J$‡POWNTER&PT$ ƒPUTŠ$^$ ƒR01}%h$ ƒR07ƒ%r$ ƒR16‰%|$ˆRADCOUNT'P†$ „RADS(P$‡RADSMTR)Pš$ …RAND1*P¤$‰RESETFLAG+P®$ „ROAR,P¸$ „SAT?-PÂ$†SATCNT.PÌ$‡SATCNT1/PÖ$‡SATCOLR0Pà$†SATDIR1Pê$†SATEXP2Pô$ˆSATFRAME3Pþ$†SATSPD4P% †SHAPEAà% †SHAPEBâ% „SHOW³$&%†SILENTD%0% ƒSKY5P:%‡STARCNT6PD% …START N%†STROBE7PX% …SUPER8Pb%‡UNPRESS!l%ˆVELOCITY;Pv% ƒVOLP”%ˆWAITCNTR?Pž%‡WAITING@P¨%†ZAPCNTAP²%‡ZAPFLAGBP¼%X;Æ%&;;Byte after Part 1Ð%X;Ú%X; VERTICAL BLANK ROUTINEä%X;î%-†VBLANKQ‰RESETFLAG;;Skip most during resetø% F…READY& !†TESTCH & …READYQ>&P†LINENO;;Point to !st line &P‚FD;;Clear*& Q†PAUSED;;Skip most if paused4& F„FIN?>& !†TESTCHH&%„FIN?QƒG.O;;Skip ahead if not overR& FˆDOOMSDAY\&Q†STRIG0;;Trigger restartsf& H„BUSYp&!7;;This breaks out of routine,z&7;; so, pull ret. addr.„&!‡UNPRESS;; and jump backŽ&„BUSY!…CLRCH˜&X;¢& X; Planet destruction routine¬&X;¶&!ˆDOOMSDAYQ„DOOM;;Test for doomÀ&H‚QWÊ&!ˆMOVEMENT;;No, skip thisÔ&‚QW#‡ENDCNTR;;CountÞ& Q‡ENDCNTR;;Test and branch toè&'R>8;; appropriate part of explosionò&DƒPY0ü&R>à;;Maximum val?'DƒPY1;;No, skip'$>;;Set game over flags'&ƒG.O$' ‡DLPRINT;;Print message.' †SILENT;;Sound off8'!†TESTCH;;Skip restB'ƒPY0$>;;0 all HPOS regs.L' …INITPV'$> ;;Increment sky colors`'GQ‡ACOLTAB`9j',t'O>~'M>;;Make them only blueˆ'L>p’'P‡ACOLTAB`9œ'P‡DCOLTAB`9¦'P…AUDF1;;Use val for sounds°'O> º' P…AUDF2Ä'Q>Ï;;Set audio controlÎ' P…AUDC1Ø' P…AUDC2â'2ì'(>;;Do all sky linesö'HG( !†TESTCH (ƒPY1$>w;;Flash all colors(‚G1Q…RAND1;;Random mask(M>;;Only intensity bits(( N‡ACOLTAB92( P‡ACOLTAB9<( P‡DCOLTAB9F(Q>;;Audio controlsP( P…AUDC1Z( P…AUDC2d(Q>n( P…AUDC3x( P…AUDC4‚(#Q‡ENDCNTR;;Use counter for freq.Œ( P…AUDF1–(T?;;Freq *2 ( P…AUDF2ª(T?;;Freq *2´( P…AUDF3¾(N>ÿ;;InverseÈ(P…AUDF4;;Use as freq.Ò(0Ü(I‚G1;;Do all colorsæ(!†TESTCH;;Skip aheadð(X;ú(X; Scrolling routine)X;)$ˆMOVEMENT$>;;Scrolling 24 lines)†SCROLLQ†SCRLST9;;Direction")F†NXTLIN;;0?, don't,)Q…COUNT9;;Speed counter6)R…LIMIT9;;Is it max?@)D†INCCNT;;No, skipJ)Q>T)P…COUNT9;;0 count^)Q†SCRLST9;;Check dir.h)R>r) F…RIGHT|)#„LEFTQ>;;Find #of color clocks†);) S†COLCKS9š)P„CURR9;;Put in table¤) #†COLCKS9®)Q†COLCKS9;;See if too many¸)R>Â) H†NXTLINÌ)P„CURR9;;Reset tableÖ)Q>à) P†COLCKS9ê) &…HOLDXô)$Q†POINTR9;;Find DL byte to changeþ)>*#…DLIST9;;Change* $…HOLDX*!†NXTLIN;;Next line&*$…RIGHT#†COLCKS9;;Next color clock0*Q†COLCKS9;;Update table:* P„CURR9D*R>;;See if too manyN* H†NXTLINX*Q>;;Reset tableb* P„CURR9l* P†COLCKS9v* &…HOLDX€*Q†POINTR9;;DL byte to alterŠ*>”*"…DLIST9;;Alterž* $…HOLDX¨*!†NXTLIN;;Next²* †INCCNT#…COUNT9;;Inc. counter¼*†NXTLIN0;;Do rest of linesÆ* I†SCROLLÐ*!†SKYLON#‡STARCNT;;Star counterÚ*Q‡STARCNT;;Test max.ä*R>€î*H…FLASH;;Not yet, skipø*$> +!„TIME"„MPOS9;;Change star pos. +0+I„TIME;;Do all lines +2*+ &‡STARCNT4+X;>+X; Light flashing routinesH+X;R+ …FLASH#†STROBE;;Light counter\+ Q†STROBEf+ R>;;Branch at each of thesep+ F„YES1z+R>„+FƒNO1Ž+R>:˜+FƒYES¢+R><¬+F‚NO¶+H†RUNING;;None of them, skipÀ+„YES1Q> ;;On, alter charÊ+P…CHARSÔ+ H†MOVEMEÞ+ƒNO1Q>;;Off alter charè+P…CHARSò+ H†MOVEMEü+ƒYESQ> ;;On, alter these,P…CHARS†,Q>¸,P…CHARS¥$, H†MOVEME.,‚NOQ>;;Off, alter these8,P…CHARS†B,Q>¨L,P…CHARS¥V,Q>`, P†STROBEj,&†RUNING#…BLINK;;Other light countert,!Q…BLINK;;Branch at right vals.~,R>(ˆ,FƒOFF’,R><œ,F‚ON¦, H„BASE°,ƒOFFQ>;;Off, dark colorº,P‡DCOLTAB1Ä,P‡DCOLTAB2Î, H†MOVEMEØ,‚ONQ>(;;On, light colorâ,P‡DCOLTAB1ì,P‡DCOLTAB2ö,Q>-P…BLINK;;Clear count -$„BASE#†BLINK1;;Base light counter-Q†BLINK1;;Branch at these-R>8(- F„DARK2-R>H<- F…LIGHTF- H†MOVEMEP-„DARKQ>;;Off, alter charsZ-P…CHARSôd-Q>÷n-P…CHARSÊx-P…CHARS΂- H†MOVEMEŒ-…LIGHTQ>?;;On, alter chars–-P…CHARSô -Q>óª-P…CHARSÊ´-P…CHARSξ-Q>È- P†BLINK1Ò-X;Ü-(X; Movement within atmosphere routineæ-X;ð-(†MOVEMEQ‰EXPLOSION;;Skip if explodingú- F„LUKE. !…SPOCK."„LUKEQˆLANDFLAG;;Skip if landed. H†LANDED".Q†VPOSME;;Ground level?,.R>À6. H…ABOVE@. !†GROUNDJ.…ABOVERƒSKY;;In space?T. E†RISING^. !…SPACEh.†RISING#‡GRAVITY;;Inc. countr. Q‡GRAVITY|.R> ;;Max val?†. H„FALL.Q>;;Yes, clearš. P‡GRAVITY¤.Q…EMPTY;;No fuel, no stick®. F„JOY1¸.Q>ÿÂ.H†NOJOY1;;AlwaysÌ.„JOY1Q†STICK0Ö."†NOJOY1N„FLIP;;Change stick forà.M>;;Up or down accel.ê. H…DECELô. …ACCEL"ˆVELOCITY;;Move fasterþ.H„FALL;;Can't be <1/Q>/ PˆVELOCITY/H„FALL;;Always&/ …DECEL#ˆVELOCITY;;Move slower0/ QˆVELOCITY:/R>D/H„FALL;;At this slow we areN/Q>;; reversing directionX/ PˆVELOCITYb/ Q„FLIPl/N>;;Flip to reverse dir.v/ P„FLIP€/„FALLQˆVELOCITY;;CounterŠ/ #‡ACCOUNT”/ R‡ACCOUNTž/ F†OOOOOH¨/ E†JUMPIT²/†OOOOOHQ>;;Clear them¼/ P‡ACCOUNTÆ/"Q„FLIP;;See if going up or downÐ/ F…DECREÚ/%…INCRE#†VPOSME;;Move down and jumpä/†JUMPIT!…SLEFTî/#…DECRE"†VPOSME;;Move up and jumpø/ !…SLEFT0X; 0X; Landing routines0X; 0%†LANDEDQ†LOADED;;Landed? Then skip*0 HˆBLASTOFF40#‡ANIMATE;;Count>0H…NOSTK;;Not maxH0Q>ÿ;;Reset countR0 P‡ANIMATE\0Q†STICK0;;Wait for stickf0M>p0 FˆBLASTOFFz0 !…PRINT„0ˆBLASTOFFQ>;;Set vel.Ž0 PˆVELOCITY˜0P†LOADED;;All loaded¢0 …FLAGS;;Clear land flags¬0 P„FLIP¶0!…NOSTK$†ANIPTR;;Find frame valÀ0Q†ANITAB9;;There yet?Ê0 R‡ANIMATEÔ0FˆNEWFRAME;;YesÞ0 !…PRINTè0$ˆNEWFRAMEQ…NOIZE9;;Get sound valsò0 P…AUDC1ü0 Q„FREQ91 P…AUDF11,1 Q†SHAPEA;;Point to next frame$1O>.1P†SHAPEA;;Player081Q>;;+ carryB1O†SHAPEAL1P†SHAPEAV1,`1Q†SHAPEB;;Same, player1j1O>t1 P†SHAPEB~1Q>ˆ1O†SHAPEB’1P†SHAPEBœ1#†ANIPTR;;Counter¦1 !…PRINT°1%†GROUNDQ„FLIP;;Up, or down motion?º1 H‡FALLINGÄ1 !†RISINGÎ1)‡FALLINGQˆVELOCITY;;Too fast, we crashØ1R> â1 D‡CRASHEDì1Q†LOADED;;Crash if loadedö1 H‡CRASHED2Q†HPOSME;;Not on pad, crash 2R>2 E‡CRASHED2Q>|(2 R†HPOSME22 E‡CRASHED<2Q>;;Landed! set flagsF2 P…DIGITP2 PˆLANDFLAGZ2 †GETLEV;;Give scored2 PˆMULTIPLYn2 #ˆMULTIPLYx2 „MATH‚2 !…PRINTŒ2!‡CRASHED#‰EXPLOSION;;Flag <> 0–2 !…PRINT 2X;ª2X; Movement in space routine´2X;¾2$…SPACEQ>;;In space? reset Vars.È2 P„FLIPÒ2Q>Ü2 PˆVELOCITYæ2X;ð2(X;Test joystick for movement in spaceú2X;3!ƒSUPQ…EMPTY;;No fuel, no stick3HƒCCC3Q†STICK0;;Up?"3M>,3FƒMUP63…SDOWNQ†STICK0;;Down?@3M>J3 F…MDOWNT3…SLEFTQ…EMPTY;;Out of fuel?^3HƒCCCh3Q†STICK0;;Left?r3M>|3 F…MLEFT†3†SRIGHTQ†STICK0;;Right3M>š3 F†MRIGHT¤3ƒCCC!…PRINT;;No stick, skip®3ƒMUP"†VPOSME;;Up.¸3!…SLEFT;;Test for sidewaysÂ3…MDOWN#†VPOSME;;DownÌ3!…SLEFT;;Test for sidewaysÖ3…MLEFT"†HPOSME;;Leftà3Q>;;Flame direction flagê3P‚FDô3 H…PRINTþ3†MRIGHT#†HPOSME;;Right.4Q>4P‚FD4 H…PRINT&4%…PRINTQ†VPOSME;;Test screen bounds04R>%:4 E…TESTLD4Q>%N4 P†VPOSMEX4…TESTLQ†HPOSMEb4R>&l4 E…TESTRv4Q>&€4 P†HPOSMEŠ4 …TESTRQ>Ñ”4 R†HPOSMEž4 E‡DISPLAY¨4Q>Ѳ4 P†HPOSME¼4'‡DISPLAY „SHOW;;Now we can show shipÆ4X;Ð4 X; Sattelite creation routineÚ4X;ä4…SPOCKQ„SAT?;;Move sat?î4 H†SATMOVø4#†SATCNT;;Delay between sats5F‚T1 5 !†NODIFF5‚T1 ƒR01;;Random # 5F‚T2;;No sat this time*5 !†NODIFF45‚T2 ƒR01;;Dir to move>5 F†MINMAYH5Q>;;RightR5 P†SATDIR\5 H„SDF1f5†MINMAYQ>þ;;Leftp5 P†SATDIRz5„SDF1 ƒR07;;Speed„5F„SDF1;;<> 0Ž5 P†SATSPD˜5Q†RANDOM;;Color¢5L>¬5 P‡SATCOLR¶5 ƒR16;;Random satÀ5$R…TOTAL;;Based on complete levelsÊ5 E„THATÔ5 D„THISÞ5!„THATQ…TOTAL;;Use this for satè5„THIST?;;Otherwise Randomò5T?ü5T?6>6%>6#…SATLPQ…ASATS9;;Move shape to PM$6 P†PMSATS8.62863B6)>L6 H…SATLPV6Q>;;Set flags and counters`6 P‡SATCNT1j6 P…BLEEPt6PƒVOL~6Q>ÿˆ6 P„SAT?’6 ƒR07;;Is sat superœ6H…WIMPY;;No, skip¦6Q>ÿ°6 P…SUPERº6H†SATMOV;;AlwaysÄ6…WIMPYQ>;;Not superÎ6 P…SUPERØ6X;â6X; Sattelite movementì6X;ö6#†SATMOV#‡SATCNT1;;Count to speed7 Q‡SATCNT1 7 R†SATSPD7 H†NODIFF7Q†SATEXP;;Exploding? skip(7HƒNSO27Q‡HPOSSAT;;Sound for sat<7;F7S>€;;Louder at mid screenP7IƒDIVZ7N>ÿd7,n7O>x7ƒDIVPƒVOL;;save‚7&Q>ÿ;;Sub, since higher # is louderŒ7;–7SƒVOL 7V?;;Div to get ony vol bitsª7V?´7V?¾7V?È7V?Ò7PƒVOLÜ7#…BLEEP;;Beep countæ7 Q…BLEEPð7R> ;;Beep between $0B & $0Cú7DƒNBL8R> 8DƒYBL8Q>"8P…BLEEP;;Clear,8FƒNSO;; Always68ƒYBLQ> ;;Beep sound@8LƒVOLJ8 P…AUDC2T8Q>^8 P…AUDF2h8HƒNSO;;Alwaysr8ƒNBLQƒVOL;;Rocket sound|8V?†8L>€8 P…AUDC2š8Q>¤8 P…AUDF2®8 ƒNSOQ>¸8P‡SATCNT1;;ClearÂ8 Q‡HPOSSATÌ8,Ö8O†SATDIR;;Moveà8 P‡HPOSSATê8 P†HPOSP3ô8 H†NODIFF;;All the way across?þ8Q>9P„SAT?;;Reset9 P…AUDC29†NODIFFQ…SUPER;;Super?&9F…WIERD;;No skip09#‡SATCOLR;;Flash color:9X;D9!X; Fuel and radiation routinesN9X;X9…WIERD#ˆRADCOUNT;;Counterb9 QˆRADCOUNTl9 R>8;;Max?v9 H‡THESAME€9Q>Š9PˆRADCOUNT;;Clear”9#„RADS;;More radsž9 Q„RADS¨9R>ÿ;;Too many?²9 H‡THESAME¼9P„DOOM;;End of planet?Æ9&‡THESAMEQ„RADS;;Enough rads to zap?Ð9R>€Ú9 D‡TWOMUCHä9Q‡ZAPFLAG;;Zap in progress?î9 H‡TWOMUCHø9 ƒR01;;Randomly zap: L…RAND1 : H‡TWOMUCH: ƒRPOQ†RANDOM;;Get random spot :R>&;;Within bounds?*:EƒR.T4:DƒRPO>: ƒR.TR>ÑH: D†BATMANR:EƒRPO\:!†BATMANP†HPOSP2;;Use this pos.f:Q>ÿp:P‡ZAPFLAG;;Do zapz:#‡TWOMUCHQˆLANDFLAG;;Landed? skip„: H†GUAGESŽ:#‡FUELUSE;;Use fuel˜: Q‡FUELUSE¢:R>q;;Limit?¬: D†GUAGES¶:Q>À:P‡FUELUSE;;ClearÊ:"„FUEL;;Move needleÔ:H†GUAGES;;Fuel left? skipÞ:P…AUDC1;;No soundè:Q>ÿò:P…EMPTY;;Flag emptyü:X;;X; Display guages routine;X;;†GUAGESQ„DOOM;;Test doom$;FR.;Q‡RADSMTR;;Pin the needle8;,B;O> L;P†HPOSM0;;Show needleV; !ˆBANGTEST`;%RQ„RADS;;Divide to get needle valj;V?t;V?~;V?ˆ;,’;O‡RADSMTR;;+ offsetœ; P†HPOSM0¦;„TANKQ…EMPTY;;Empty?°;FFº;$‡FUELMTR;;Zero needleÄ;0Î;&†HPOSM0;;Show needleØ; Q>;;Raise sky so ship fallsâ;PƒSKYì;FNö;#FQ„FUEL;;Div. to get needle val<V? <V?<V?<,(<O‡FUELMTR;;Add offset2<P†HPOSM0<<X;F<X; Transporter routineP<X;Z<NQˆLANDFLAG;;Landed? skipd< H‡XPORTERn<$†BUTTONQ†LOADED;;Not loaded? skipx< F‡XPORTER‚<Q‰EXPLOSION;;Exploding? skipŒ< H‡XPORTER–<Q†STRIG0;;No button? skip < H‡XPORTERª<Q>ÿ´<P‡BEAMFLG;;Flag beam¾<*‡XPORTERQ‡BEAMFLG;;Beaming in progress?È< H‡ALREADYÒ< !…HITMEÜ<‡ALREADY#ˆBEAMDLAY;;Delayæ< QˆBEAMDLAYð<R>;;Only 1/60 secú< F„PSPS= !ˆNOACTION= „PSPSQ>=PˆBEAMDLAY;;Clear"=Q„M2PL;;Hit a sat?,=M>6=F…SORRY;;No, skip@=#†SATEXP;;Flag <>0J=Q>;;Give pointsT= P…DIGIT^= Q…SUPERh= F…ASDFGr= "…DIGIT|=!…ASDFG †GETLEV;;Based on level†= PˆMULTIPLY= #ˆMULTIPLYš= „MATH¤= !‡NOTSHIP®=†JMPTAB!†EXTEND;;Jump table¸=…SORRYQ†VPOSMEÂ='R>ˆ;;If this low, it hit a mountainÌ= E†JMPTABÖ=Q„M2PF;;Hit anything?à= F†JMPTABê=Q„MISS;;Was a hit on line 2?ô= F‡NOTSHIPþ=%Q>;;If it gets here it hit fleet>P…DIGIT;; so give score>Q>> P„ETC.&>Q>60> P„VOL4:> †GETLEV;;Based on levelD> PˆMULTIPLYN> #ˆMULTIPLYX> „MATHb>Q„RADS;;And decrease radsl>,v>O>à€> P„RADSŠ>E‡MISFITS;;Can't be <0”>Q>ž>P„RADS;;So, make it 0¨>#‡MISFITS"‰CANISTERS;;1 less can.²>Q‰CANISTERS;;All gone?¼>R>Æ> H‡NOTSHIPÐ>$Q…SHIPS;;Level done, so give shipÚ>R>;;But no more than 9ä> F„ENUFî> #…SHIPSø>„ENUFQ…LEVEL;;Next level?R>;;No more than 9 ? F„CMPL? #…LEVEL ?!„CMPLQ…TOTAL;;Inc total levels*?R>;;Not more than 154?FƒZYX>? #…TOTALH?!ƒZYX$…PAINT;;Next planet colorR?2\?(>;;Wrap at 10f?HƒXYZp?$>z?ƒXYZ&…PAINT„? †SILENT;;No soundŽ?P‡WAITING;;Message delay on˜?Q>x¢?P‰COMPLETED;;Flag done¬?PˆWAITCNTR;; & wait¶?P†PAUSED;; & pauseÀ?$> Ê? ‡DLPRINT;;Print messageÔ? !†TESTCHÞ?"‡NOTSHIP ‡BEAMOFF;;No valid hitè?!ˆLUMINATE;;Skipò? †EXTEND#‡BEAMPOS;;Extend beamü?Q>*;;Beam sound@ P…AUDC4@ Q‡BEAMPOS@ P…AUDF4$@R> ;;Beam limit?.@ HˆNOACTION8@ ‡BEAMOFF;;Yes, offB@ !ˆLUMINATEL@(ˆNOACTION$†VPOSME;;Draw beam at top+2V@2`@2j@Q>Ït@M‡MISSLES9;;clear end~@ P‡MISSLES9ˆ@0’@ %‡BEAMPOSœ@3¦@ˆBEAMLOOPQ>Ï;;Beam mask°@(>#;;Hit top of screenº@ HˆNOT2HIGHÄ@ ‡BEAMOFF;;Yes, offÎ@ !ˆLUMINATEØ@ˆNOT2HIGHM‡MISSLES9;;Clearâ@P…HOLDA;;Saveì@ ‡NOTZEROQ>0;;Ok, random beamö@ M†RANDOMA F‡NOTZERO A L…HOLDAAP‡MISSLES9;;Draw itA0(A12AHˆBEAMLOOP;;Do all of itÏFAM‡MISSLES9;;Clear endPAX;ZAX; Ship collision detectiondAX;nA'…HITMEQ„P0PL;;My collision detectionxAL„P1PL;;Sats and zaps detect‚AM> ŒAH…KAPOW;;Yes, explode–A(Q†VPOSME;;If this low, I hit mountain AR>€ªA EˆLUMINATE´A!Q„P1PF;;Rocks and ships detect¾A L„P0PFÈAFˆLUMINATE;;No, skipÒA…KAPOW#‰EXPLOSION;;Flag <>0ÜA)ˆLUMINATE ƒR16;;Random blue Zap & beamæAL>«ðAP†PCOLR0úAX;BX; Rocket flames routineBX;B(„JETSQ‰EXPLOSION;;No jets if exploded"B F…DARTH,B !ˆBANGTEST6B&…DARTHQˆLANDFLAG;;No jets if landed@B H„NOFLJBQ…EMPTY;;No fuel, no jetsTB F„XVXV^B !ˆBANGTESThB'„XVXVQ†STICK0;;Stick determines dir.rBM>|BR>†BF„NOFL;;No sticks? skipBM>šBR>;;Test for up¤BF‚UF®BR>;;Test for down¸BF‚DFÂBH…SIDES;;Neither, try sidesÌB!‚UFQ†VPOSME;;Loc. to put flameÖB,àBO> êB>ôB „BURN;;Show flameþB2C „BURNC !…SIDESC!‚DF$†VPOSME;;Loc. to put flame&C20C „BURN;;Show flame:C0DC „BURNNC#…SIDESQ‚FD;;Side flame dir. flagXCFƒEFX;;No dir? skipbC"Q†VPOSME;;Location to put flamelC,vCO>€C>ŠC …BURN1;;Show it”C#ƒEFXQƒALT;;Flip 1/30 sec counteržCN>ÿ¨CPƒALT²C"H„MYLT;;Skip every other VBLANK¼CQ„ROAR;;Test rocket soundÆCR>;;Not too loudÐCF‚SOÚC#„ROAR;;Update and sound onäC ‚SOP…AUDC1îCQ>øC P…AUDF1DH„MYLT;;Always D&„NOFLQ„ROAR;;No flames? Quiet soundDF„MYLT;; until silent D "„ROAR*D Q„ROAR4D P…AUDC1>D „MYLT#‡FLASHME;;Light counterHD"Q‡FLASHME;;Branch at right timeRDR>@\D H…TBIRDfDQ>pDP‡FLASHME;;Reset countzD FˆBANGTEST„D…TBIRDR>0;;Turn off timeŽDEˆBANGTEST;;Yes, skip˜D%†VPOSME;;Pos. of lights¢D3¬D3¶DQ‡ANIMATE;;Less if landingÀDR†ANITABÊD E„TALLÔD R†ANITABÞD D„TALLèD3òD„TALLQ>B;;Light Bit patternüDP‡PLAYER18;;Turn onEX;E"X; Satellite explosion routinesEX;$E#ˆBANGTESTQ†SATEXP;;Sat exploding.E H†YESSAT8E!‡NOTASAT;;No, skipBE†YESSATQ>LEP…SUPER;;Turn off supersatVEQ>`EP‡SATCOLR;;Yellow explosionjE „CSAT;;Clear sattE#ˆSATFRAME;;Explosion count~E QˆSATFRAMEˆER>8;;Branch if less than’ED‚P1œE# „CSAT;;Explosion done. Clear it¦EQ>;;Set pos to 0°E P†HPOSP3ºE P‡HPOSSATÄEP†SATEXP;;Clear flagsÎE PˆSATFRAMEØE P„SAT?âEP…AUDC2;;Sound offìEF‡NOTASAT;;AlwaysöE%‚P1Q†RANDOM;;Make random explosionFM>;;Mask wrong bits F?F$>;;8 bytes of dataF"†EXPLP1QˆSATFRAME;;Test counter(FR>2F$D‡SMALLER;;If less do small shape(FF"E‡SMALLER;;If greater, do smallPF Q>;;If between, make largerZFP†SIZEP0;;Double widthdFH†BIGGER;;Branch alwaysnF#‡SMALLERQ>@;;Get sound in rangexF&SˆSATFRAME;; by subtracting from 64‚FP…AUDF2;;Set audioŒFQ>–F P…AUDC2 FQ>ªFP†SIZEP0;;Make it narrow´F„TINYQ…EXPL18;;Get byte¾F …MYRNA;;Random mirrorÈFP†PMSATS9;;Place itÒF3ÜF0æFI„TINY;;Do 8ðFG‡NOTASAT;;AlwaysúF"†BIGGERQ>P;;Get sound in rangeG;;; by subtracting from 80G SˆSATFRAMEGP…AUDF2;;Set audio"GQ>,G P…AUDC26GA;;Multiply X*2@GT?JG>;; and put it backTG†LARGERQ…EXPL18;;Get byte^G …MYRNA;;Randomly mirrorhGP†PMSATS9;;Put on 2 linesrG#P†PMSATS9;; for double height|G3†G#0;;Update twice for double linesG0šGI†LARGER;;Do 16 lines¤GX;®GX; Zap routine¸GX;ÂG‡NOTASATQ‡ZAPFLAG;;Do a zap?ÌG H…ZZZZTÖG!…NOZAP;;No, skipàG…ZZZZT#†ZAPCNT;;CounterêGQ†ZAPCNT;;Test max val.ôGR>lþGH†HUNTER;;No, skipHQ>;;Zap is done, clearHP…AUDC3;; soundHP†ZAPCNT;; & flags&H P‡ZAPFLAG0HP†HPOSP2;; & pos.:H>;; & clear PM zap areaDH„PILLP…PMZAPP9NH2XH(>`bH H„PILLlHF…NOZAP;;AlwaysvH†HUNTERR>6;;Test branches€HE†STRIKE;;>$36, skipŠHQ>*;;Set for noise”H P…AUDC3žHQ>P;;Find freq.¨H;²H S†ZAPCNT¼H P…HOLDAÆH ƒR16;;Randomize itÐH N…HOLDAÚHP…AUDF3;;Sound itäHQ†RANDOM;;Make random sparksîHM> ;;Set pointerøH?I$>;;4 lines of them I…SPKLPQ†SPARKS8I …MYRNA;;Randomly mirror I P…PMZAP9*I34I0>IH…SPKLP;;Do all 4HIF…NOZAP;;AlwaysRI!†STRIKEQ†ZAPCNT;;Now make bolt\I;fIS> ;;Find sound freq.pI P…AUDF3zIQ>;;Clear remaining sparks„I P…PMZAPŽI P…PMZAP˜IQ>O¢IP…AUDC3;;Set audio¬I>;;Save X for later routine¶I Q†RANDOM;;Random starting pt.ÀIM>;;Mask bitsÊI?ÔI†STRILPQ…BOLTS8ÞI!P…PMZAPO9;;Make 4 same linesèIP…PMZAPN9òIP…PMZAPM9üIP…PMZAPL9J3JCJM>;;Make y wrap at 32$J?.J08J0BJ0LJ0VJI†STRILP;;Do 78 lines`J!…NOZAPQ†SATEXP;;Sat exploding?jJH…SATOK;;Yes, skiptJQ„P3PL;;Sat zapped?~J F…SATOKˆJ#†SATEXP;;Yes, Flag it’JX;œJX; Misc. sound routine¦JX;°J%…SATOKQ„ETC.;;Test misc sound flagºJF‚TE;;0?, skipÄJR>;;Branch to right placeÎJH‚UEØJ$"„VOL4;;This is Boing sound decayâJ Q„VOL4ìJF‚UE;;Until 0öJV?KV? KL>@;;Set distortionKP…AUDC4;;Use itKQ> (KP…AUDF4;;This freq.2KH‚TE;;AlwaysFKP„ETC.;;Clear flagPKP…AUDC4;;Off soundZKX;dKX; Ship explosion routinenKX;xK$‚TEQ‰EXPLOSION;;Test my exp. flag‚K H‡SHABOOMŒK!…NOATR;;No, Skip–K‡SHABOOM#‡POWNTER;;Counter KQ>0;;Get freq. rangeªK,´KO‡POWNTER;; by adding $30¾K P…AUDF1ÈKQ‡POWNTER;;Test branchesÒKR>ÜK D‡OVERLAPæKR>0ðKE‚TAúK !†ENGULFL ‚TAR>PL D‡CATCHUPLR>x;;No branches?"L D„SLNT,LQ>ÿ6LP‰RESETFLAG;;Done? reset me@L„SLNTQ>;;My sound offJL P…AUDC1TL !…NOATR^L‡OVERLAP „SHOW;;Show mehLQ> ;;Set audiorL P…AUDC1|L"Q†RANDOM;;Find rand. expl. data†LM>L?šL$†VPOSME;;My position¤L2®LQ>¸L P‡COWNTERÂL‡HINKLEYQ…EXPL18;;Get byteÌL …MYRNA;;Random mirrorÖL ƒPUT;;"OR" it on meàL2êL3ôL "‡COWNTERþLI‡HINKLEY;;Do 8M !…NOATRM‡CATCHUP …CLRME;;EraseM%>&MD"„ROAR;;Fade sound0MF‚OW;;Unless 0:M1DMIDNM Q„ROARXMV?bMV?lMV?vMV?€M P…AUDC1ŠM ‚OW!…NOATR”M#†ENGULFQ>;;Big explosion soundžM P…AUDC1¨MQ>²MP„ROAR;;Clear sound fade¼MQ>;;Bright white expl.ÆM P†PCOLR0ÐMP†PCOLR0ÚM&Q†HPOSME;;Center Plyrs on my horiz.äM;îMS>øM P†HPOSP0N, NO>N P†HPOSP1 NQ>*NP‡COWNTER;;Clear count4N(…LSIDEQ†VPOSME;;Draw random left exp.>N;HNS>RN>\NQ†RANDOM;;Rand bytefNM>0;;Point to datapN?zN‡AUTOMANQ…EXPME8;;Xfer data„N P‡PLAYER09ŽN2˜N3¢N #‡COWNTER¬N Q‡COWNTER¶NR>ÀNH‡AUTOMAN;;Do 16 linesÊN"…RSIDEQ†RANDOM;;Draw right sideÔNM>0;;Point to dataÞN?èN†ORBOTS&…HOLDX;;Save countòNQ…EXPME8;;Get Left side dataüN P…HOLDAO †MIRROR;;Mirror for rightO$…HOLDX;;Get countO Q…HOLDA$OP‡PLAYER19;;Place byte.O08O3BO "‡COWNTERLO Q‡COWNTERVOH†ORBOTS;;Do 16 lines`OX;jOX; Pause routine and cleanuptOX;~O …NOATRQ>ˆOP†ATRACT;;Attract mode off’O"†TESTCHP†HITCLR;;Clr collisionsœOQ‡WAITING;;Are we waiting?¦OH„INCH;;No, skip°O"ˆWAITCNTR;;Count downºOH…CLRCH;;Not 0 yet? skipÄOQ>´;;Reset count to 3 secÎO PˆWAITCNTRØOP‡WAITING;;Flag not waitingâO$>ìO ‡DLPRINT;;Erase messagesöOQ‰COMPLETED;;Level done?PF…NNLEV;;No, skip PQ>;;Flag waitP P‡WAITINGPQ>ÿ(PP†NEWLEV;;Flag new level2PH„INCH;;Always

FPP†PAUSED;;Pause offPP#„INCHQ‚CH;;Test KB for space barZPR>!dPH…CLRCH;;No? skipnP †SILENT;;Sound offxPQ†PAUSED;;Toggle pause‚PN>ÿŒP P†PAUSED–PH…CLRCH;;Pause on? skip P$>wªP „OLDC;; restore colors´P …CLRCHQ>ÿ¾PP‚CH;;Reset KB shadowÈP Q†RANDOMÒP!P…RAND1;;Set constant random #ÜPƒATRQ†PAUSED;;If paused...æPLƒG.O;; or game over...ðP F„EXITúP$>w;; do attractingQ‚ACQ‡ACOLTAB9Q …MIXUPQ P‡DCOLTAB9"Q0,QI‚AC6Q „EXIT!†XITVBV;;End or routine@QX;JQX; PROGRAM DATA TABLESTQX;^QX;hQX; Mountain range datarQX;|Q:†Q; @=A°_______________5:<9___________________7;<8______AQ; @=A°________5;<8_7;>@BB<879____5;<9_____6:>@BD<86;<9AšQ; @=A°<95:<86;?@BAEF=>@DAIJ?C<96:>@DC<8_5:?>?@ACIJ=@BBA¤Q; @=A°IJ=@IJ>?=@ADCBGH@IJ>=>BIJ=?@@ACBAEF==?@@IJ>?>@ACA®Q; @=A°KKLKKLLLKLMNONOMLLKLKLNKLLKKLMONOOMKLLKLKLLKKLMOA¸Q; @=A°PRQRPQRPRRQRPRPRPRQRPQRPQRPRQPQPRPRPQRPRQRPRPRRPAÂQ; @=A°STUST]STSTUTSUS]SUSTUSTS^^SUTU]TTSUTUTTTUS]SSTU]AÌQ; @=A°]WX]V]]V]]]WX]]]XV]X]]YZ[\Y]]]X]]]]]]V]]]]W]]]]]AÖQ; @=A°]]]]]]]]]]]]]]]]]]]]]]]]^^]]]]]]]]]]]]]]]]]]]]]]AàQ;ƒBOT A° C:0 RADS'!#$#%#$#& FUEL'!#$#%#$#& P:0 AêQ$‰CANISTERS );;# canisters leftôQ…SHIPS ;;# ships leftþQX;RX; Title screen textRX;R…TITLE È&R À=A” BY DOUGLAS ENGEL A0R A” LEVEL: 0 A:R…LEVEL DRX;NRX; Message textXRX;bR,ˆLEVLLINE À=A˜ LEVEL: 0 AlR†PLEVEL  vR,ˆMULTLINE À=A˜ MULTIPLIER: 00 A€R…PMULT ŠR,ˆMESSLINE À=A˜ GAME OVER A”R,ˆCOMPLINE À=A˜ LEVEL COMPLETED AžRX;¨RX; Game display list²RX;¼R'…DLIST °=p=p=Ö==0==Ô==1ÆR! Ô=€=0=Ô=€=0=Ô=@=7=ÔÐR! À=5=Ô=@=3=Ô=À=5=Ô=@ÚR! 3=Ô=À=7=Ô==5=Ô=€=0äR Ô=€=0=Ô=€=0=Ô==:îR „=„=„=„=„=„=„=„øR(  =R=4ƒBOT=5ƒBOT=A=4…DLIST=5…DLISTSX; S%X; Alternate DL lines for messagesSX; S †DLTABL*S Ô=€=€=Ô=€=€4S5 Ö=4ˆLEVLLINE=5ˆLEVLLINE=Ö=4ˆMULTLINE=5ˆMULTLINE>S% Ö=4ˆCOMPLINE=5ˆCOMPLINE=Ô=€=0HS% Ö=4ˆMESSLINE=5ˆMESSLINE=Ô=€=0RSX;\SX; Title screen display listfSX;pS>†DLIST1 p=p=p=p=p=D=4…TITLE=5…TITLE=====p=†zS0 p=p=p=p=p==p=p=p=p=p=p=p=p=p„S A=4†DLIST1=5†DLIST1ŽSX;˜SX; Scroll tables¢SX;¬S†SCRLST ;;Direction¶S…COUNT ;;Speed counterÀS…LIMIT ;;Maximum countÊS#„CURR ;;Current HSCROL valueÔS&†COLCKS ;;Scrolled color clocksÞS%„MPOS ;;Star missile positionsèS%†OFFSET ;;Offset between starsòSX;üSX; COLOR TABLESTX;TX;TX;Actual colors$TX;.T.†COLTAB Ê=¤=¤=========8T' 2=2=2=2=2=2=2=2=2=2=2=BT' $=¢=¢=========LT' =4=4=4=4=4=4=4=4=4=4= VT' ===========`T' =6=6=6=6=6=6=6=6=6=6=PjT' @=Ž=Ž=@=@=@=@=@=@=@=@=@tT' H=H=@=@=@=@=@=@=@=@==~T' ===========ˆT' €=‚=„=†=ˆ=Š=Œ=Ž====P’TX;œT!‡ACOLTAB x;;Attracted table¦TX;°T!‡DCOLTAB x;;Displayed tableºTX;ÄTX; Character set dataÎTX;ØT@;;First 8 charsâT9…CHARS ==========À=À=À=À=Ì=ÿìT3 =============À=Ì=ÿöT3 ====À=À=Ì=ÿ====À=À=À=Ì=ÿU3 = =Þ=Ì=À=À=À=À======== U…CHARS;;Last 64 charsU3 ===/=;=;=/===@==¤=ä=ä==@U3 ==;==>=;=====T=å=y=ù=ù=å=T(U3 = =?=¾=î=þ=>= ===@=P=P==P=@2U3 ==é=ù=ù=é=====ä=ä=ä===‚U3 =======;=========ŒU3 ====@=P=”=Y=====@=P=”=U–U3 ===?=þ=þ=»=î======ÿ=÷=¿=þ U3 @=P=”=U=U=Y=•=V=¾=ë=¾=ê=¾=»=î=»ªU3 þ=ÿ=þ=î=»=ê=î=ª=þ=û=Þ=î=»=ú=î=º´U3 º=ú=¾=ú=ë=î=û=®=™=¥=¥=¦=¦=j=™=š¾U3 ¦=™=©=–=i=¥=™=U=Y=–=e=Y=–=i=V=eÈU3 Y=–=Y=e=U=Y=™=f=@=S=›=U=U=Y=U=VÒU3 û=º=ÿ=ê=~=Z=V=e=~=_=—=Y=U=Y=•=eÜU3 ú=î=ÿ=þ={=^=–=e=™=©=•=e=•=—=_=½æU3 Y=—=_=~=ï=ÿ=¾=ÿ=ÿ=¾=ï=ÿ=»=ÿ=¾=ÿðU3 þ=¿=û=¿=î=ÿ=û=¿=ª=º=ÿ=î=ÿ=û=¿=ÿúU3 ª=ª=î=ÿ=û=¿=ï=þ=ª=ª=û=ÿ=¿=þ=ï=»V3 ÿ=»=ÿ=ÿ=î=ÿ=ÿ=ï=ÿ=¿=ÿ=û=¿=ÿ=þ=ïV3 ¿=þ=ÿ=ÿ=û=ÿ=ï=þ=ÿ=ÿ=ë=ÿ=ÿ=ÿ=ú=ÿV3 ¯=ÿ=ÿ=ÿ=ú=ÿ=ÿ=ÿ=ÿ=ÿ=ÿ=ë=ÿ=ÿ=ÿ=¯"V3 ÿ=ÿ=ï=»=ï=ÿ=ÿ=ÿ=ÿ=¯=ÿ=ÿ=ÿ=û=î=û,V3 ÿ=ÿ=û=ÿ=ÿ=ÿ=ï=ÿ=ÿ=ÿ=ó=ÿ=ÿ=ÿ=ó=ÿ6V3 ÿ=ÿ=ý=Õ=Ö=Õ=õ=ÿ=ÿ=Õ=Y=Y=ª=Y=Y=U@V3 ÿ=ÿ=_=U=¥=U=W==ÿ=ÿ=ÿ=ÿ=ÿ=ÿ=ÿ=ÿJV3 ÿ=û=ÿ=ÿ=?=ÿ=ÿ=ÿ========TVX;^VX; PLAYER MISSILE BIT MAPShVX;rVX;|VX;Data for my ship†VX;V ‡SHAPE1AšV' =$=~=~=$=$======¤V ‡SHAPE1B®V' ======<=~=B=B=ç=¸V' ==$=~=~=$=$=====ÂV' =======<=~=B=ç=ÌV' =$=~=~=$=$======ÖV' ======<=~=B=B=ç=àV' =$=~=~=$=$======êV' ======$=f=B=B=ç=ôV' =$=~=~=$=$======þV' ======$=B=B=B=ç=W' =$=~=~=$=$======W' ======$=B=B=B=ÿ=W' =$=~=~=$=$======&W' ======$=B=B=Z=ÿ=0W' =$=~=~=$=$======:W' ======$=B=Z=Z=ç=DW' =$=~=~=$=$======NW' ======$=Z=Z=B=ç=XW' =$=~=~=$=$======bW' ======<=Z=B=B=ç=lW' =$=~=~=$=<======vW' ======<=B=B=B=ç=€W' =$=~=~=<=<======ŠW' ======$=B=B=B=ç=”W' =$=~=~=<=<======žW' ======$=B=B=B=ç=¨W' =$=~=~=<=<======²W' ======$=B=B=B=ç=¼W' =$=~=~=<=<======ÆW' ======$=B=B=B=ç=ÐW' =$=~=~=<=<======ÚW' ======$=B=B=B=ç=äW' =$=~=~=<=<======îW' ======$=B=B=B=ç=øW' =$=~=~=<=<======X' ======$=f=B=B=ç= X' =$=~=~=<=<======X' ======<=~=B=B=ç= XX;*XX;Sattelite data4XX;>X9…ASATS =D=(==8=8=8===Î=d=?=?=d=Î=HX3 6=I==>=>==*=I="=======RX3 =====>====ÿ==ÿ===$=\X3 ==¤==¤====(===8=8===(fX3 ==<=™=~=™=<===T=8=|=8=T==(pX3 ===¼==¼====8==<=<==8=zX3 ==|=8==T=8=T==Z=<=f=f=<=Z=„X3 ==>=U=>=======Û=~===ŽXX;˜XX;Sattelite explosion data¢XX;¬X9…EXPL1 =$===H=====B=(=4==D==¶X3 =@=(==9=<=P==€=%==,=š=!=H=ÀXX;ÊXX;Spark dataÔXX;ÞX:†SPARKS @=1=„==ƒ=Z===D=„=A==‚=,==@èXX;òXX;Bolt dataüXX;Y9…BOLTS ===== =@=€=@=@= =====Y3 ===============YX;$YX;My explosion data.YX;8Y9…EXPME ==(====&====K====B=BY3  ==D====‹==N= ==#====LY3 €==== ====+= ='= ==@==VY3 = ===U====‹===#==€==`YX;jYX; MISCELLANEOUS DATA TABLEStYX;~YX;ˆYX;Title screen bitmap’YX;œY5„BITS =Ž=9='= ==Q=E=H= ==‘=A=‡= ¦Y! =Q=E=@=€==N=9=/= °YX;ºYX;DL modification pointersÄYX;ÎY.†POINTR == ======= =#=&ØY' )=,=/=2=5=8=;=>=A=D=G=KâYX;ìYX;Priority tableöYX;Z.†PRITAB "="="="="="="="="="="=" Z' "=!=!=!=!=!=!=!=!=!=1=1ZX;ZX;Animation frame pointers(ZX;2Z%†ANITAB  ==8=@=P=X=`=h=p