þþ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;ü!‡ACCOUNT P"ƒALTP"‡ANIMATEP"†ANIPTRP$"ˆBEAMDLAYP."‡BEAMFLGP8"‡BEAMOFFU%B"‡BEAMPOSPL" …BLEEPPV" …BLINKP`"†BLINK1 Pj"„BURN…$t" …BURN1Ÿ$~" …CLRME$ˆ"‰COMPLETED P’"‡COWNTERPœ"„CSAT%¦" …DIGITP°"‡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$†PMTABL P@$…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%ƒVOL
P”%ˆ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 countR0P‡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?Ê0R‡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>t1P†SHAPEB~1Q> ˆ1O†SHAPEB’1P†SHAPEBœ1#†ANIPTR;;Counter¦1
!…PRINT°1%†GROUNDQ„FLIP;;Up, or down motion?º1H‡FALLINGÄ1!†RISINGÎ1)‡FALLINGQˆVELOCITY;;Too fast, we crashØ1R>â1D‡CRASHEDì1Q†LOADED;;Crash if loadedö1H‡CRASHED 2Q†HPOSME;;Not on pad, crash
2R>2E‡CRASHED2Q>|(2R†HPOSME22E‡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>š3F†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>%N4P†VPOSMEX4…TESTLQ†HPOSMEb4R>&l4
E…TESTRv4Q>&€4P†HPOSMEŠ4
…TESTRQ>Ñ”4R†HPOSMEž4E‡DISPLAY¨4Q>Ѳ4P†HPOSME¼4'‡DISPLAY „SHOW;;Now we can show shipÆ4X;Ð4 X; Sattelite creation routineÚ4X;ä4…SPOCKQ„SAT?;;Move sat?î4H†SATMOVø4#†SATCNT;;Delay between sats5F‚T15!†NODIFF5‚T1 ƒR01;;Random # 5F‚T2;;No sat this time*5!†NODIFF45‚T2 ƒR01;;Dir to move>5F†MINMAYH5Q>;;RightR5P†SATDIR\5 H„SDF1f5†MINMAYQ>þ;;Leftp5P†SATDIRz5„SDF1 ƒR07;;Speed„5F„SDF1;;<> 0Ž5P†SATSPD˜5Q†RANDOM;;Color¢5L>¬5P‡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$6P†PMSATS8.62863B6)>L6
H…SATLPV6Q> ;;Set flags and counters`6P‡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 speed 7Q‡SATCNT1
7R†SATSPD7H†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Â8Q‡HPOSSATÌ8,Ö8O†SATDIR;;Moveà8P‡HPOSSATê8P†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?v9H‡THESAME€9Q> Š9PˆRADCOUNT;;Clear”9#„RADS;;More radsž9 Q„RADS¨9R>ÿ;;Too many?²9H‡THESAME¼9P„DOOM;;End of planet?Æ9&‡THESAMEQ„RADS;;Enough rads to zap?Ð9R>€Ú9D‡TWOMUCHä9Q‡ZAPFLAG;;Zap in progress?î9H‡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†RANDOM AF‡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;;AlwaysD&„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ÔDR†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.EH†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°EP†HPOSP3ºEP‡HPOSSATÄEP†SATEXP;;Clear flagsÎE
PˆSATFRAMEØE P„SAT?âEP…AUDC2;;Sound offìEF‡NOTASAT;;AlwaysöE%‚P1Q†RANDOM;;Make random explosion FM>;;Mask wrong bits
F?F$>;;8 bytes of dataF"†EXPLP1QˆSATFRAME;;Test counter(FR>2F$D‡SMALLER;;If less do small shape FPP†PAUSED;;Pause offPP#„INCHQ‚CH;;Test KB for space barZPR>!dPH…CLRCH;;No? skipnP †SILENT;;Sound offxPQ†PAUSED;;Toggle pause‚PN>ÿŒPP†PAUSED–PH…CLRCH;;Pause on? skip P$>wªP „OLDC;; restore colors´P
…CLRCHQ>ÿ¾PP‚CH;;Reset KB shadowÈPQ†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;ƒBOTA° 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 A0RA” 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>†DLIST1p=p=p=p=p=D=4…TITLE=5…TITLE=====p=†zS0p=p=p=p=p==p=p=p=p=p=p=p=p=p„SA=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 ==é=ù=ù=é== = ==ä=ä=ä== =