;›;FILL 'ER UP!›;›;BY TOM HUDSON›;A.N.A.L.O.G. COMPUTING #10›;››;›;ALPHABETIC CONSTANTS›;›CA='A'-$20›CB='B'-$20›CC='C'-$20›CD='D'-$20›CE='E'-$20›CF='F'-$20›CG='G'-$20›CH='H'-$20›CI='I'-$20›CJ='J'-$20›CK='K'-$20›CL='L'-$20›CM='M'-$20›CN='N'-$20›CO='O'-$20›CP='P'-$20›CQ='Q'-$20›CR='R'-$20›CS='S'-$20›CT='T'-$20›CU='U'-$20›CV='V'-$20›CW='W'-$20›CX='X'-$20›CY='Y'-$20›CZ='Z'-$20›CCOL=':'-$20›;›;PAGE ZERO ITEMS›;›LO=$CB›HI=$CC›PLOTX=$CD›PLOTY=$CE›LOHLD=$CF›HIHLD=$D0›SMTIM=$D1›MOVTIM=$D2›TIMER=$D3›DEADFG=$D4›PX=$D5›PY=$D6›XI=$D7›YI=$D8›;›;MISCELLANEOUS MEMORY USAGE›;›PMAREA=$1000›MISSLS=PMAREA+384›PL0=PMAREA+512›PL1=PMAREA+640›PL2=PMAREA+768›PL3=PMAREA+896›DISP=$3000›;›;SYSTEM EQUATES›;›KEY=$2FC›CONSOL=$D01F›PMBASE=$D407›CHBASE=$02F4›RANDOM=$D20A›SETVBV=$E45C›XITVBV=$E45F›COLBK=$2C8›COLPF0=$2C4›COLPF1=$2C5›COLPF2=$2C6›COLPF3=$2C7›AUDC1=$D201›AUDC2=$D203›AUDC3=$D205›AUDC4=$D207›AUDF1=$D200›AUDF2=$D202›AUDF3=$D204›AUDF4=$D206›AUDCTL=$D208›PRIOR=$026F›ATTRACT=$4D›DMACTL=$22F›DLISTL=$230›GRACTL=$D01D›NMIEN=$D40E›PCOLR0=$D012›COLPM0=$2C0›COLPM1=$2C1›COLPM2=$2C2›COLPM3=$2C3›HPOSP0=$D000›HPOSP1=$D001›HPOSP2=$D002›HPOSP3=$D003›HPOSM0=$D004›HITCLR=$D01E›P0PF=$D004›P1PF=$D005›P2PF=$D006›P3PF=$D007›P0PL=$D00C›P3PL=$D00F›STICK=$278›STRIG=$284››ORG $6000;ASSEMBLER WILL›;PUT IT HERE›››LOC$1400;PROGRAM START››;›;THIS CODE, WHEN CALLED BY BASIC, WILL›;MOVE THE 'FILL 'ER UP!' CODE TO ITS›;PROPER LOCATION ($1400) AND EXECUTE IT.›;›PROGPLA;DISCARD›PLA;PULL THE›STA$81;ADDRESS OF›PLA;THE HOLDING›STA$80;STRING.›LDA#$00;SET UP›STA$82;DESTINATION›LDA#$14;ADDRESS ON›STA$83;PAGE ZERO.›LDY#0›COPYLPLDA($80),Y;COPY THE BLOCK›STA($82),Y;OF MEMORY.›LDA$80›CLC›ADC#1›STA$80›LDA$81›ADC#0›STA$81›LDA$82›CLC›ADC#1›STA$82›LDA$83›ADC#0›STA$83›CMP#DIR/256;AT END YET?›BNECOPYLP;NO!›LDA$82;WELL, MAYBE...›CMP#DIR&255;AT END?›BNECOPYLP;NOPE!›;›;MAIN PROGRAM STARTS HERE›;›STARTJSR$E465;INIT SOUNDS›LDA#$11;P/M PRIORITY›STAPRIOR›LDA#1;DON'T SHOW›STASHOOFF;PLAYER OR STAR›STAFILLON;WE STILL MUST›JSRPMCLR;CLEAR P/M AREA›LDA#64;AND SET UP THE›STASTRHGT;STAR'S HEIGHT›LDA#128;AND›STASTRHOR;HORIZONTAL POSITION›LDA#$D0;NOW LET'S›LDX#4;ZERO OUT›ZSCLPSTASCOLIN+4,X;THE SCORE›STASCOLIN+15,X;AREAS!›DEX›BPLZSCLP›LDX#5›ZSCLP2STASCOLN2+12,X›DEX›BPLZSCLP2›LDA#0;THESE ITEMS›STAFILLON;MUST BE SET›STADEADFG;TO ZERO ON›STANOCCHG;STARTUP OR›STAHITCLR;ELSE WE'LL›STADMACTL;WIND UP WITH›STANMIEN;NASTY THINGS›STAHASDRN;HAPPENING!›STAAUDCTL›LDX#5;LET'S ZERO›CMSLPSTASCORE,X;OUT THE SCORE›DEX;COUNTER...›BPLCMSLP›STALEVEL;AND LEVEL #!›LDA#3;WE START WITH›STALIVES;3 LIVES›ORA#$90;AND PUT THEM IN›STASCOLN2+19;THE SCORE LINE›LDA#$0A;NEXT WE SET UP›STACOLPF0;THE COLORS WE›LDA#$24;WANT TO USE.›STACOLPF1›LDA#$94›STACOLPF2›LDA#$C4›STACOLPF3›LDA#0›STACOLBK›LDA#$76›STACOLPM3›LDA#$34›STACOLPM0›LDA#DLIST&255;WE'D BETTER TELL›STADLISTL;THE COMPUTER WHERE›LDA#DLIST/256;OUR DISPLAY LIST›STADLISTL+1;IS LOCATED!›LDY#INTRPT&255;TELL WHERE THE›LDX#INTRPT/256;VERTICAL BLANK›LDA#6;INTERRUPT IS›JSRSETVBV;AND SET IT!›LDA#PMAREA/256;HERE'S OUR P/M›STAPMBASE;GRAPHICS AREA!›LDA#$2E;TURN ON THE›STADMACTL;DMA CONTROL›LDA#$3;AND›STAGRACTL;GRAPHICS CONTROL!›LDA#$40;ENABLE VBI›STANMIEN›JMPCLRDSP›PMCLRLDA#0;CLEAR OUT›LDX#127;THE P/M AREA:›PMICLRSTAMISSLS,X;MISSILES,›STAPL0,X;PLAYER 0,›STAPL1,X;PLAYER 1,›STAPL2,X;PLAYER 2,›STAPL3,X;AND PLAYER 3!›DEX›BNEPMICLR;LOOP UNTIL DONE›RETURNRTS;WE'RE DONE!›;›;PLOT ADDRESS CALCULATOR›;›;MULTIPLY PLOTY BY 40, THEN CALCULATE ADDRESS›;OF THE SCREEN MEMORY TO BE ALTERED.›;›PLOTCLLDAPLOTY›ASLA›STALO›LDA#0›STAHI;*2›ASLLO›ROLHI;*4›ASLLO›LDALO›STALOHLD›ROLHI;*8›LDAHI›STAHIHLD›ASLLO›ROLHI;*16›ASLLO›ROLHI;*32›LDALO›CLC›ADCLOHLD›STALO›LDAHI›ADCHIHLD›STAHI;+*8=*40›LDA#DISP&255›CLC›ADCLO›STALO›LDA#DISP/256›ADCHI›STAHI;+DISPLAY START›LDAPLOTX;MASK X POSITION›AND#3›TAX›LDAPLOTX›LSRA›LSRA›CLC›ADCLO›STALO›LDAHI›ADC#0;LO & HI NOW HOLD›STAHI;THE ADDRESS!›RTS;EXIT!›;›;CLEAR THE DISPLAY MEMORY›;›CLRDSPLDX#0;THIS ROUTINE WILL›STXPLOTX;CLEAR THE SCREEN RAM.›LDX#0;IT GETS THE ADDRESS›DLOOP2STXPLOTY;OF THE BEGINNING OF›JSRPLOTCL;EACH GR.7 LINE›LDXPLOTY;THEN ZEROES OUT›LDA#$00;EACH OF THE›LDY#39;40 BYTES (0-39)›DLOOP3STA(LO),Y;IN THE LINE.›DEY›BPLDLOOP3›INX›CPX#86›BNEDLOOP2›;›;DRAW THE COLOR 1 BORDER›;›LDA#3;THIS ROUTINE›STABORNUM;DRAWS THE 4 LINES›BORDERLDXBORNUM;THAT MAKE UP THE›LDABXSTRT,X;WHITE GR.7 BORDER›STAPLOTX;ON THE SCREEN.›LDABYSTRT,X›STAPLOTY›LDABXINC,X›STABDINCX›LDABYINC,X›STABDINCY›LDABORCNT,X›STABDCNT›DRAWLNJSRPLOTCL›LDACOLOR1,X›LDY#0›ORA(LO),Y›STA(LO),Y›LDAPLOTX›CLC›ADCBDINCX›STAPLOTX›LDAPLOTY›CLC›ADCBDINCY›STAPLOTY›DECBDCNT›BNEDRAWLN›DECBORNUM›BPLBORDER›;›;THIS SECTION STARTS OFF EACH LEVEL›;›LDA#80;POSITION THE›STAPX;PLAYER ›LDA#84›STAPY›LDALEVEL;INCREMENT THE›CLC;LEVEL NUMBER›ADC#1›STALOWK›LDA#0;ZERO OUT›STACURLO;CURRENT TALLY›STACURHI;WORK AREA›STAHIWK›LDA#$FF;TELL DECIMAL CONVERTER›STASLLOC;NOT TO PLACE RESULT›JSRCNVDEC;CONVERT LEVEL #›LDADECIMAL+1;GET DECIMAL LEVEL #›ORA#$90;ADD COLOR›STASCOLN2+3;PUT IN SCORE LINE›LDADECIMAL;SAME FOR 2ND›ORA#$90;LEVEL #›STASCOLN2+4;DIGIT›LDXLEVEL;GET THIS LEVEL'S›LDATGTLO,X;PARAMETERS›STALOWK›LDATGTHI,X›STAHIWK›LDASTARSP,X›STASTRSPD›LDA#4›STASLLOC›JSRCNVDEC;SHOW TARGET AMOUNT›;›;CLEAR OUT THE TRACKING TABLE THAT›;REMEMBERS WHERE THE PLAYER MOVED›;›CLRTRKLDA#0›STASHOOFF›TAX›CLRTLPSTADIR,X;CLEAR DIRECTION›STALGTH,X;AND LENGTH ENTRIES›DEX›BNECLRTLP›STAMOVIX;CLEAR MOVEMENT INDEX›STADRAWFG;AND DRAW FLAG›GETSTKLDAPAUSE;GAME PAUSED?›BNEGETSTK;YES, LOOP AND WAIT.›LDA#$FD;DO 'WARBLE' SOUND›STAAUDF1;USING SOUND›LDA#$FE;CHANNELS 1-3›STAAUDF2›LDA#$FF›STAAUDF3›LDA#$A3›STAAUDC1›STAAUDC2›STAAUDC3›LDA#0;NO ATTRACT MODE!›STAATTRACT›LDADEADFG;DID STAR HIT US?›BEQALIVE;NO!›LDXLEVEL;IT HIT US--›LDAKILLFG,X;UNCONDITIONAL KILL?›BNEJCRSH;YES! WE'RE DEAD!!!›LDAPX;NO, IF WE'RE ON A›STAPLOTX;WHITE LINE (COLOR 1)›LDAPY;THEN WE'RE ALIVE!›STAPLOTY›JSRPLOTCL›LDY#0›LDABITSON,X›AND(LO),Y›CMPCOLOR1,X;ON COLOR 1?›BEQALIVE;YES (WHEW!)›JCRSHJMPCRASH;GO KILL PLAYER.›ALIVELDAMOVTIM;PLAYER MOVING?›BEQGOTSTK;YES--GET STICK.›JMPMOVSTR;NO, MOVE STAR.›JGSTKJMPGETSTK;GO GET STICK›GOTSTKLDA#4;SET UP THE›STAMOVTIM;MOVEMENT TIMER›LDASTICK;GET THE STICK›STASTKHLD;AND SAVE IT›TAX;THEN LOOK UP›LDAXD,X;X DIRECTION›CLC›ADCXD,X›STAXI;AND›LDAYD,X;Y DIRECTION›CLC›ADCYD,X›STAYI›ORAXI;ANY MOVEMENT?›BEQJGSTK;NO, TRY AGAIN.›LDAPX;INCREMENT›CLC;PLAYER X›ADCXI;POSITION AND›STACKX;HOLD IT...›CMP#159;OFFSCREEN?›BCSJGSTK;YES!›STAPLOTX;NO, SAVE IT›SEC›SBCXD,X›STAPXWC›LDAPY;INCREMENT›CLC;PLAYER Y›ADCYI;POSITION AND›STACKY;HOLD IT...›CMP#85;OFFSCREEN?›BCSJGSTK;YES!›STAPLOTY;NO, SAVE IT›SEC›SBCYD,X›STAPYWC›JSRPLOTCL;LOCATE NEW PLAYER›LDY#0;POSITION.›LDABITSON,X›AND(LO),Y›STACKV;SAVE THE 'LOCATE'.›STXCKVX›LDAPXWC;CHECK THE›STAPLOTX;POSITION NEXT›LDAPYWC;TO THE ONE WE'RE›STAPLOTY;NOW IN...›JSRPLOTCL›LDY#0›LDABITSON,X›AND(LO),Y›PHA;AND SAVE IT!›LDASTRIG;TRIGGER PRESSED?›BNENOTDRN;NO!›PLA;OK TO DRAW?›BNEJGS;NO!!›JMPDRAWIN;YES, GO DRAW.›NOTDRNPLA;NOT DRAWING--ARE WE›CMPCOLOR1,X;ON COLOR 1?›BNEJGS;NO, TRY AGAIN›LDACKV;ARE WE MOVING›LDXCKVX;ONTO ANOTHER›CMPCOLOR1,X;COLOR 1?›BNEJGS;NO! TRY AGAIN.›LDACKX;ALL'S WELL...›STAPX;UPDATE PX›LDACKY;AND›STAPY;PY,›JGSJMPGETSTK;GET STICK.›;›;THIS ROUTINE HANDLES THE DRAW FUNCTION.›;›DRAWINLDADRAWFG;ALREADY DRAWING?›BNEDRAWOK;YES!›STAMOVIX;NO, THIS IS THE›LDASTKHLD;FIRST TIME--SET UP›STADIR;INITIAL DRAWING›LDA#1;VARIABLES.›STADRAWFG›STAHASDRN›LDAPX›STAINIX›STAMINX›STAMAXX›LDAPY›STAINIY›STAMINY›STAMAXY›DRAWOKLDACKV;DID WE›LDXCKVX;RUN INTO ANOTHER›CMPCOLOR2,X;COLOR 2?›BNENOCRSH;NO, WE'RE OK.›JMPCRASH;CRRAAASSSHHH!›NOCRSHLDXMOVIX;UPDATE THE›LDASTKHLD;TRACKING›CMPDIR,X;TABLES WITH›BEQSAMDIR;DIRECTION›INCMOVIX;INFORMATION.›INX›STADIR,X›LDA#0›STALGTH,X›SAMDIRINCLGTH,X›LDA#3›STABDCNT›LDAPX;NOW PLOT THE›STAPLOTX;LINE WE'RE›LDAPY;DRAWING...›STAPLOTY›CCLOOPJSRPLOTCL›LDY#0›LDA(LO),Y›ANDBITOFF,X›ORACOLOR2,X;IN COLOR 2.›STA(LO),Y›DECBDCNT›BEQCKCOLR›LDYMOVIX›LDXDIR,Y›LDAXD,X›CLC›ADCPLOTX›STAPLOTX›LDAYD,X›CLC›ADCPLOTY›STAPLOTY›JMPCCLOOP›CKCOLRLDAPLOTX;UPDATE X POS.›STAPX›CMPMAXX;CHECK MINIMUM›BCCTMINX;AND MAXIMUM›STAMAXX;X & Y VALUES›JMPCHKYMM;AND UPDATE IF›TMINXCMPMINX;NECESSARY›BCSCHKYMM›STAMINX›CHKYMMLDAPLOTY›STAPY›CMPMAXY›BCCTMINY›STAMAXY›JMPENDMM›TMINYCMPMINY›BCSENDMM›STAMINY›ENDMMLDXCKVX;DID WE DRAW›LDACKV;INTO›CMPCOLOR1,X;COLOR 1?›BEQENDLIN;YES! END OF LINE!›JMPGETSTK;NO, GO GET STICK.›ENDLINLDA#0;WE AREN'T›STADRAWFG;DRAWING ANYMORE›JSRSEARCH;SEARCH AND FILL!!›LDACURLO;GET CURRENT VALUE›STALOWK›LDACURHI›STAHIWK›LDA#15;PUT AT 15TH›STASLLOC;POS. IN SCOLIN›JSRCNVDEC;CONVERT TO DECIMAL›LDA#1;NOW REDRAW THE›STARDRCOL;PLAYER'S PATH IN›JSRREDRAW;COLOR 1 (WHITE).›LDXLEVEL;CHECK TO SEE›LDACURLO;IF WE'VE HIT›SEC;THE TARGET.›SBCTGTLO,X›STALOWK›LDACURHI›SBCTGTHI,X›STAHIWK;HIT TARGET?›BPLNEWLVL;YES--NEW LEVEL!›JMPCLRTRK;NO, GO CLEAR TRACK›NEWLVLLDALEVEL;IF LEVEL < 15›CMP#15;THEN›BEQNOLINC;INCREMENT›INCLEVEL;LEVEL›;›;INCREASE SCORE HERE›;›NOLINCASLLOWK;SCORE INC =›ROLHIWK;TGT-CUR * 2›LDA#$FF;DON'T PLACE›STASLLOC;THE RESULT!›JSRCNVDEC;CONVERT TO DECIMAL›LDX#5;AND ADD TO SCORE›LDY#0›SCOLPLDADECIMAL,Y›CLC›ADCSCORE,X›CMP#10›BMINOCARY›SEC›SBC#10›STASCORE,X›INCSCORE-1,X›JMPNXSPOS›NOCARYSTASCORE,X›NXSPOSINY›DEX›BPLSCOLP›LDX#5;NOW PLACE THE›SHSLPLDASCORE,X;SCORE IN›ORA#$10;SCORE LINE #2›STASCOLN2+12,X›DEX›BPLSHSLP›LDA#1;STOP VBI FOR›STAFILLON;A MOMENT›STASHOOFF›JSRPMCLR;CLEAR P/M AREA›LDA#64;INITIALIZE›STASTRHGT;THE›LDA#128;STAR›STASTRHOR;POSITION›LDA#0;VBI ON AGAIN›STAFILLON›JMPCLRDSP;GO CLEAR DISPLAY!›;›;THIS SECTION HANDLES PLAYER'S DEATH›;›CRASHLDA#0;NO WARBLE SOUND›STAAUDC1›STAAUDC2›STAAUDC3›LDA#1;NO PLAYER COLOR›STANOCCHG;CHANGE IN VBI›LDA#15;SET BRIGHTNESS OF›STADEDBRT;PLAYER DEATH.›TIMRSTLDA#5;SET DEATH TIMER›STATIMER;TO 5 JIFFIES.›DEADCCLDADEDBRT;MOVE BRIGHTNESS›STAAUDC1;TO DEATH SOUND VOLUME›LDARANDOM;GET RANDOM›AND#$1F;DEATH SOUND›STAAUDF1;FREQUENCY›LDARANDOM;GET RANDOM›AND#$F0;DEATH COLOR›ORADEDBRT;ADD BRITE›STACOLPF1;PUT IN LINE COLOR›STACOLPM3;AND PLAYER COLOR›LDATIMER;TIMER DONE YET?›BNEDEADCC;NO, GO CHANGE COLOR.›DECDEDBRT;DECREMENT BRIGHTNESS›BPLTIMRST;IF MORE, GO DO IT.›DECLIVES;1 LESS LIFE›LDALIVES;GET # LIVES›ORA#$90;ADD COLOR›STASCOLN2+19;AND DISPLAY!›CMP#$90;ZERO LIVES?›BNENOTDED;NO!›LDA#GOMSG&255;WE'RE COMPLETELY›STASCDL;DEAD, SHOW›LDA#GOMSG/256;'GAME OVER'›STASCDL+1;MESSAGE›CKSTRTLDACONSOL;WAIT FOR START›AND#1;KEY...›BNECKSTRT;NOT PRESSED--LOOP.›RELEASLDACONSOL;KEY PRESSED, NOW›AND#1;WAIT FOR RELEASE!› BEQRELEAS;NOT RELEASED YET!›LDA#SCOLIN&255;PUT SCORE›STASCDL;LINE BACK›LDA#SCOLIN/256;IN DISPLAY›STASCDL+1;LIST...›JMPSTART;AND START GAME!›;›;THIS SECTION PLACES PLAYER AT A RANDOM›;LOCATION IF THERE ARE MORE LIVES LEFT.›;›NOTDEDLDA#1;DON'T SHOW›STASHOOFF;PLAYER›NEWLOCLDARANDOM;GET RANDOM X›AND#$FE;MUST BE EVEN›CMP#159;AND ON SCREEN›BCSNEWLOC›STAPLOTX›CSHYLDARANDOM;GET RANDOM Y›AND#$7E;MUST BE EVEN›CMP#85;AND ON SCREEN›BCSCSHY›STAPLOTY›JSRPLOTCL›LDY#0›LDABITSON,X›AND(LO),Y;IS LOCATION ON›CMPCOLOR1,X;COLOR 1?›BNENEWLOC;NO, TRY AGAIN.›JSRPMCLR;IT'S OK, CLEAR P/M›LDAPLOTX;SAVE›STAPX;THE PLAYER'S›LDAPLOTY;NEW›STAPY;COORDINATES.›LDA#0;REDRAW THE›STARDRCOL;PLAYER'S TRACK›LDAHASDRN;IN COLOR 0›BEQJCTRK›JSRREDRAW›LDAINIX;THIS PART IS›STAPLOTX;NEEDED TO PLOT›LDAINIY;A COLOR 1 BLOCK›STAPLOTY;AT THE START OF›JSRPLOTCL;THE PLAYER'S TRACK›LDY#0;AFTER IT IS ERASED.›LDABITOFF,X;(NOBODY'S PERFECT!)›AND(LO),Y›ORACOLOR1,X›STA(LO),Y›JCTRKLDA#$24;RESTORE DRAW LINE›STACOLPF1;COLOR›LDA#0›STANOCCHG›STAHITCLR›STADEADFG›JMPCLRTRK;AND GO START NEW TRACK.›;›;THIS ROUTINE USES THE TRACKING TABLES,›;DIR AND LGTH, TO REDRAW THE LINE THE›;PLAYER DREW. RDRCOL INDICATES THE COLOR›;DESIRED.›;›REDRAWLDAINIX›STAREX›LDAINIY›STAREY›LDA#0›STAX›REDXLPLDXX›LDADIR,X›STAREDIR›LDALGTH,X›STALGTHY›LDA#1›STAY›REDYLPLDA#3›STATIMES›TIMES3LDAREX›STAPLOTX›LDAREY›STAPLOTY›JSRPLOTCL›LDY#0›LDARDRCOL›BNERDC1›LDABITOFF,X›AND(LO),Y›STA(LO),Y›JMPSETNRP›ENDRDLDA#0›STADRAWFG›RTS›RDC1LDABITOFF,X›AND(LO),Y›ORACOLOR1,X›STA(LO),Y›SETNRPDECTIMES›BEQNXTY›LDXREDIR›LDAREX›CLC›ADCXD,X›STAREX›LDAREY›CLC›ADCYD,X›STAREY›JMPTIMES3›NXTYINCY›LDAY›CMPLGTHY›BEQJNRD›BCSNXTX›JNRDJMPREDYLP›NXTXINCX›LDAX›CMPMOVIX›BEQJRXLP›BCSENDRD›JRXLPJMPREDXLP›;›;2-BYTE DECIMAL CONVERTER. CONVERTS›;A 2-BYTE BINARY NUMBER TO A 5-BYTE›;DECIMAL NUMBER. WILL PLACE THE›;DECIMAL NUMBER IN SCOLIN IF DESIRED›;(SLLOC DETERMINES POSITION).›;›CNVDECLDX#4›LDA#0›CDLPSTADECIMAL,X›DEX›BPLCDLP›LDX#4›CKMAGLDAHIWK›CMPHIVALS,X›BEQCKM2›BCSSUBEM›BCCNOSUB›CKM2LDALOWK›CMPLOVALS,X›BCSSUBEM›NOSUBDEX›BPLCKMAG›JMPSHOWIT›SUBEMLDALOWK›SEC›SBCLOVALS,X›STALOWK›LDAHIWK›SBCHIVALS,X›STAHIWK›INCDECIMAL,X›JMPCKMAG›SHOWITLDX#$4›LDYSLLOC›BMISHEND›SHOLPLDADECIMAL,X›ORA#$D0›STASCOLIN,Y›INY›DEX›BPLSHOLP›SHENDRTS›;›;THIS ROUTINE MOVES THE STAR AROUND ON›;THE PLAYFIELD. THE STAR IS ROTATED AND›;PLOTTED (IN A PLAYER) IN THE VBI.›;›MOVSTRLDASMTIM;TIME TO MOVE?›BEQMSTR;YES, GO DO IT›JMPGETSTK;NO, GET STICK›MSTRLDASTRSPD;SET MOVEMENT TIMER›STASMTIM;WITH STAR SPEED›LDASTRHGT;ADJUST P/M›SEC;COORDINATES TO›SBC#13;MATCH PLAYFIELD›STASTRLY;PLOTTING›LDASTRHOR;COORDINATES.›SEC›SBC#44›STASTRLX›LDARANDOM;WANT TO CHANGE›CMP#240;THE STAR'S DIRECTION?›BCCSAMSTD;NO, USE SAME.›NEWDIRLDARANDOM;GET RANDOM›AND#7;DIRECTION›JMPDIRCHK›SAMSTDLDASTRDIR;GET OLD DIRECTION.›DIRCHKTAX;CHECK TO SEE›STATMPDIR;IF STAR WILL›LDASTRLX;BUMP INTO ANY›CLC;PLAYFIELD›ADCSTRDTX,X;OBJECT.›STAPLOTX›LDASTRLY›CLC›ADCSTRDTY,X›STAPLOTY›JSRPLOTCL›LDY#0›LDABITSON,X›AND(LO),Y;ANY COLLISION?›BEQWAYCLR;NO, ALL CLEAR!›LDA#15;HIT SOMETHING,›STABSCNT;START BUMP SOUND AND›BNENEWDIR;GET NEW DIRECTION.›WAYCLRLDAPLOTX;ADJUST STAR›CLC;COORDINATES›ADC#44;BACK TO P/M›STASTRHOR;COORDINATES›LDAPLOTY;FROM PLAYFIELD.›CLC›ADC#13›STASTRHGT›LDATMPDIR;SET DIRECTION›STASTRDIR›JMPGETSTK;AND LOOP›;›;SEARCH FOR FILLABLE AREA›;›;THIS SECTION SEARCHES FOR THE AREA TO›;BE FILLED. IT IS SO COMPLICATED THAT›;EXPLANATION OF ITS FINER DETAILS›;WOULD BE ALMOST IMPOSSIBLE WITHOUT›;WRITING ANOTHER COMPLETE ARTICLE. AT›;ANY RATE, IT WORKS. THOSE WITH ANY›;SPECIFIC QUESTIONS SHOULD WRITE ME,›;CARE OF A.N.A.L.O.G.›;›SEARCHLDA#1›STAFILLON›LDA#0›STAD›LDASTRHOR›SEC›SBC#44›STASX›LDASTRHGT›SEC›SBC#13›STASY›FINDCLLDXD›LDASX›CLC›ADCSXD,X›STASX›STAPLOTX›LDASY›CLC›ADCSYD,X›STASY›STAPLOTY›JSRPLOTCL›LDY#0›LDA(LO),Y›ANDBITSON,X›CMPCOLOR1,X›BEQFINDC2›CMPCOLOR2,X›BNEFINDCL›LDA#0›STATD›JMPFOUND2›FINDC2LDAD›STATD›JSRDECD›FC2AJSRSRCHLC›CMPCOLOR1,X›BNEFC2B›JSRGRABEM›JMPFINDC2›FC2BCMPCOLOR2,X›BNEFC2C›JSRGRABEM›JMPOUTLIN›FC2CJSRINCD›JMPFC2A›FOUND2LDA#0›STATRIES›JSRDECD›FND2AJSRSRCHLC›CMPCOLOR2,X›BNEFND2B›JSRGRABEM›JMPFOUND2›FND2BLDATRIES›CLC›ADC#1›STATRIES›CMP#3›BEQFINDC1›JSRINCD›JMPFND2A›FINDC1LDAD›STATD›JSRDECD›FC1AJSRSRCHLC›CMPCOLOR1,X›BNEFC1B›JSRGRABEM›JMPFINDC2›FC1BJSRINCD›JMPFC1A›OUTLINJSRPLSXSY›LDA#0›STATRIES›OUTLAJSRSRCHLC›CMPCOLOR1,X›BNEOUTLB›JSRGRABEM›JMPOUTLIN›OUTLBLDATRIES›CLC›ADC#1›STATRIES›CMP#4›BEQOUTLD›JSRINCD›JMPOUTLA›OUTLDJSRLOCTXY›OUTLD2CMPCOLOR2,X›BNEOUTLE›JSRFILL›LDA#0›STAFILLON›RTS›OUTLEJSRINCD›JSRSRCHLC›JMPOUTLD2›SRCHLCLDXTD›LDASX›CLC›ADCSXD,X›STATX›STAPLOTX›LDASY›CLC›ADCSYD,X›STATY›STAPLOTY›LOCTXYLDAPLOTX›CMP#159›BCSNOREAD›LDAPLOTY›CMP#85›BCSNOREAD›JSRPLOTCL›LDY#0›LDA(LO),Y›ANDBITSON,X›RTS›NOREADLDA#0›LDX#0›RTS›GRABEMLDATD›STAD›LDATX›STASX›LDATY›STASY›RTS›INCDLDATD›CLC›ADC#1›AND#3›STATD›RTS›DECDLDATD›SEC›SBC#1›AND#3›STATD›RTS›PLSXSYLDASX›STAPLOTX›CMPMAXX›BCCTMINX2›STAMAXX›JMPCKYMM2›TMINX2CMPMINX›BCSCKYMM2›STAMINX›CKYMM2LDASY›STAPLOTY›CMPMAXY›BCCTMINY2›STAMAXY›JMPENDMM2›TMINY2CMPMINY›BCSENDMM2›STAMINY›ENDMM2JSRPLOTCL›LDY#0›LDABITOFF,X›AND(LO),Y›ORACOLOR2,X›STA(LO),Y›RTS›;›;FILL ROUTINE›;›;AS WITH THE 'SEARCH' SUBROUTINE, THE›;FILL SUBROUTINE IS FAR TOO COMPLEX TO›;EXPLAIN HERE. THIS FILL IS ENTIRELY›;DIFFERENT FROM THE SYSTEM'S FILL›;ROUTINE, AS IT WILL FILL ANY SHAPE›;THAT IS OUTLINED IN COLOR 2.›;›FILLLDA#0;TURN OFF›STAAUDC2;SOUND CHANNELS›STAAUDC3;2 AND 3.›LDAMAXY;INITIALIZE›SEC;THE FILL›SBCMINY;SOUND›STAFILFRQ;FREQUENCY.›LDAMINX›SEC›SBC#1›STAMINX›STAFX›LDAMINY›STAFY›SEC›SBC#1›STAMINY›LDAMAXX›CLC›ADC#1›STAMAXX›LDAMAXY›CLC›ADC#1›STAMAXY›LDA#0›STASCTALY›CLRC2TLDA#0›STAC2TALY›LOCLP1JSRLOCATE›CMP#2›BNELOCLP1›LOCLP2INCC2TALY›JSRLOCATE›CMP#2›BEQLOCLP2›AND#1›BNECLRC2T›LDAC2TALY›CMP#1›BEQFILLIT›JSRLOCPRV›BEQCLRC2T›FILLITLDAFX›STAPLOTX›LDAFY›STAPLOTY›JSRPLOTCL›LDY#0›LDA(LO),Y›ORACOLOR3,X›STA(LO),Y›INCSCTALY›JSRLOCATE›CMP#0›BEQFILLIT›AND#1›BNECLRC2T›LDA#1›STAC2TALY›FOLLOWJSRLOCATE›CMP#0›BEQLOCLP3›AND#1›BNECLRC2T›INCC2TALY›JMPFOLLOW›LOCLP3LDAC2TALY›CMP#1›BNELOCLP4›JMPCLRC2T›LOCLP4JSRLOCPRV›CMPBITSON,X›BEQFILLIT›JMPCLRC2T›LOCATELDAFX›CLC›ADC#1›STAFX›CMPMAXX›BNESTOFX›LDACURLO›CLC›ADCSCTALY›STACURLO›LDACURHI›ADC#0›STACURHI›LDA#0›STASCTALY›LDAMINX›STAFX›LDA#0›STAC2TALY›LDA#$86›STAAUDC1›LDAFILFRQ›STAAUDF1›BEQNOFFDC›DECFILFRQ›NOFFDCLDAFY›CLC›ADC#1›STAFY›CMPMAXY›BEQFILEND›LDAFX›CMPMINX›BNESTOFX›PLA›PLA›JMPCLRC2T›FILENDPLA›PLA›RTS›STOFXLDAFX›STAPLOTX›LDAFY›STAPLOTY›JSRPLOTCL›LDY#0›LDABITSON,X›AND(LO),Y›CMPCOLOR2,X›BNENOTC2›LDABITSON,X›ORA(LO),Y›STA(LO),Y›INCSCTALY›LDA#2›RTS›NOTC2CMPCOLOR1,X›BNENOTC1›LDA#1›RTS›NOTC1CMP#0›BNEC3›RTS›C3LDA#3›RTS›LOCPRVLDAFX›STAPLOTX›LDAFY›SEC›SBC#1›CMPMINY›BEQNOLOCP›STAPLOTY›JSRPLOTCL›LDY#0›LDABITSON,X›AND(LO),Y›RTS›NOLOCPLDA#0›LDX#0›RTS›;›;VBI ROUTINE›;›INTRPTLDAKEY;IS SPACE BAR›CMP#$21;PRESSED?›BNENOPRES;NO, CHECK FOR PAUSE.›LDA#$FF;CLEAR OUT›STAKEY;KEY CODE,›LDAPAUSE;COMPLEMENT›EOR#$FF;THE PAUSE›STAPAUSE;FLAG.›NOPRESLDAPAUSE;ARE WE PAUSED?›BEQNOPAUS;NO!›JMPXITVBV;PAUSED, NO VBI!›NOPAUSLDABSCNT;MORE BUMP SOUND?›BMINOBS;NO, PROCESS TIMER.›ORA#$A0;MIX VOLUME WITH›STAAUDC4;PURE TONE,›LDA#$80;SET UP BUMP›STAAUDF4;SOUND FREQUENCY› DECBSCNT;AND DECREMENT COUNT.›NOBSLDATIMER;TIMER DOWN TO ZERO?›BEQNODEC;YES, DON'T DECREMENT.›DECTIMER;DECREMENT TIMER.›NODECLDAFILLON;ARE WE FILLING?›BEQNOFILL;NO, DO REST OF VBI.›JMPXITVBV;YES, EXIT VBI›NOFILLLDA#0;CLEAR OUT›STADEADFG;DEAD FLAG›LDAP0PL;HAS PLAYER 0›AND#$08;HIT PLAYER 3?›BEQNOHITP;NO!›INCDEADFG;YES!!!›NOHITPLDAP0PF;HAS PLAYER 0›AND#$02;HIT COLOR 2?›BEQNOHITL;NO!›INCDEADFG;YES!!!›NOHITLSTAHITCLR;CLEAR COLLISION.›LDAMOVTIM;MOVEMENT TIMER ZERO?›BEQNOMDEC;YES, DON'T DECREMENT.›DECMOVTIM;DECREMENT TIMER.›NOMDECLDASMTIM;STAR MOVE TIMER ZERO?›BEQNMTDEC;YES, DON'T DECREMENT.›DECSMTIM;DECREMENT TIMER.›NMTDECLDASTARCT;STAR ROT. TIMER ZERO?›BEQSTAROT;YES, ROTATE STAR!›DECSTARCT;DECREMENT TIMER›JMPVBREST;AND SKIP ROTATION.›STAROTLDA#1;SET ROT. TIMER›STASTARCT;TO 1›LDASTRPOS;INCREMENT›CLC;STAR ROTATION›ADC#1;COUNTER,›CMP#7;ALLOW ONLY 0-6.›BNESTOSTP;ROT. COUNT OK›LDA#0;ZERO ROT. COUNTER.›STOSTPSTASTRPOS;SAVE ROT. POS.›VBRESTLDYSTRPOS;THIS SECTION›LDXSTRHGT;DRAWS THE STAR›LDA#0;IN PLAYER 0›STAPL0-1,X;MEMORY USING›STAPL0+8,X;THE TABLES›LDASTARB1,Y;'STARB1' THRU›STAPL0,X;'STARB8'.›LDASTARB2,Y›STAPL0+1,X›LDASTARB3,Y›STAPL0+2,X›LDASTARB4,Y›STAPL0+3,X›LDASTARB5,Y›STAPL0+4,X›LDASTARB6,Y›STAPL0+5,X›LDASTARB7,Y›STAPL0+6,X›LDASTARB8,Y›STAPL0+7,X›LDASTRHOR;SET STAR'S›STAHPOSP0;HORIZ. POS.›LDASHOOFF;OK TO SHOW PLAYER?›BNEENDVBI;NO, EXIT VBI›LDAPX;SET PLAYER'S›CLC;HORIZONTAL›ADC#47;POSITION›STAHPOSP3›LDAPY;DRAW PLAYER›CLC;IN PLAYER 3›ADC#$10;MEMORY›TAX›LDA#0›STAPL3-3,X›STAPL3-2,X›STAPL3+2,X›STAPL3+3,X›LDA#$40›STAPL3-1,X›STAPL3+1,X›LDA#$A0›STAPL3,X›LDANOCCHG;COLOR CHANGE OK?›BNEENDVBI;NO, EXIT VBI›INCCOLPM3;YES, CYCLE THE COLOR.›ENDVBIJMPXITVBV;DONE WITH VBI!›;›;DATA›;›DLISTDB$70,$70,$70›DB$4D,DISP&255,DISP/256›DB$D,$D,$D,$D,$D,$D,$D,$D,$D,$D›DB$D,$D,$D,$D,$D,$D,$D,$D,$D,$D›DB$D,$D,$D,$D,$D,$D,$D,$D,$D,$D›DB$D,$D,$D,$D,$D,$D,$D,$D,$D,$D›DB$D,$D,$D,$D,$D,$D,$D,$D,$D,$D›DB$D,$D,$D,$D,$D,$D,$D,$D,$D,$D›DB$D,$D,$D,$D,$D,$D,$D,$D,$D,$D›DB$D,$D,$D,$D,$D,$D,$D,$D,$D,$D›DB$D,$D,$D,$D,$D,$20,$46›SCDLDWSCOLIN›DB$46›DWSCOLN2›DB$41,DLIST&255,DLIST/256››SCOLINDBCT,CG,CT,CCOL,0,0,0,0,0,0›DB0,CC,CU,CR,CCOL,0,0,0,0,0›SCOLN2DBCL,CV,CCOL,0,0,0,CS,CC,CO›DBCR,CE,CCOL,0,0,0,0,0,0,0,0›GOMSGDB0,0,0,0,0,CG,CA,CM,CE,0›DB0,CO,CV,CE,CR,0,0,0,0,0›;›;LEVEL TABLES›;›TGTLODB64,16,224,40,248,212,16,4›DB248,224,212,224,68,168,112,212›TGTHIDB31,39,46,35,42,48,39,41,42›DB46,48,46,47,47,48,48›STARSPDB4,4,4,3,3,3,2,2,2,2,2,1,1›DB1,1,1›KILLFGDB0,0,1,0,1,1,0,1,1,1,1,0,0›DB1,1,1››ZERO1DB0›SCOREDB0,0,0,0,0,0›SLLOCDB0›CURLODB0›CURHIDB0›LEVELDB0›PAUSEDB0›HASDRNDB0›LOWKDB0›HIWKDB0›SCTALYDB0›LIVESDB0›;›;STAR PLAYER-MISSILE IMAGES›;›STARB1DB$81,$40,$20,$10,$08,$04,$02›STARB2DB$42,$43,$20,$10,$08,$04,$C2›STARB3DB$24,$24,$13,$10,$08,$C8,$24›STARB4DB$18,$18,$1C,$1F,$F8,$38,$18›STARB5DB$18,$18,$38,$F8,$1F,$1C,$18›STARB6DB$24,$24,$C8,$08,$10,$13,$24›STARB7DB$42,$C2,$04,$08,$10,$20,$43›STARB8DB$81,$02,$04,$08,$10,$20,$40››STARCTDB0›STRPOSDB0›STRHGTDB0›STRHORDB0›STRLXDB0›STRLYDB0›TMPDIRDB0›STRDIRDB0›STRDTXDB1,1,0,255,255,255,0,1›STRDTYDB0,1,1,0,1,255,255,255›STRSPDDB4›COLOR1DB$40,$10,$04,$01›COLOR2DB$80,$20,$08,$02›COLOR3DB$C0,$30,$0C,$03›BITSONDB$C0,$30,$0C,$03›BITOFFDB$3F,$CF,$F3,$FC›BXSTRTDB0,158,158,0›BYSTRTDB0,0,84,84›BXINCDB1,0,255,0›BYINCDB0,1,0,255›BORCNTDB159,85,159,85›BORNUMDB0›BDINCXDB0›BDINCYDB0›BDCNTDB0›PXWCDB0›PYWCDB0›SHOOFFDB0›CKXDB0›CKYDB0›INIXDB0›INIYDB0›MINXDB0›MINYDB0›MAXXDB0›MAXYDB0›REXDB0›REYDB0›XDB0›YDB0›SXDB0›SYDB0›TXDB0›TYDB0›FXDB0›FYDB0›TDDB0›DDB0›BSCNTDB0›FILFRQDB0›TRIESDB0›FILLONDB0›C2TALYDB0›NOCCHGDB0›DEDBRTDB0›STKHLDDB0›RDRCOLDB0›REDIRDB0›LGTHYDB0›TIMESDB0›CKVDB0›CKVXDB0›DRAWFGDB0›MOVIXDB0›XDDB0,0,0,0›DB0,0,0,1›DB0,0,0,255›DB0,0,0,0›YDDB0,0,0,0›DB0,0,0,0›DB0,0,0,0›DB0,1,255,0›SXDDB0,1,0,255›SYDDB255,0,1,0›DECIMALDB0,0,0,0,0›ZERO2DB0›HIVALSDB0,0,0,3,39›LOVALSDB1,10,100,232,16›DIRDS256›LGTHDS256››.END››