NAM PFUTZ SUBTTL WILLIAMS 1982, JOUST GAME * ****************************************************************** * WILLIAMS ELECTRONICS 1982 * ORGINAL GAME NAME; JOUST * GAME DESIGNER; JOHN NEWCOMER * MAIN PROGRAMMER; BILL PFUTZENREUTER * OTHER PROGRAMMERS; CARY KOLKER * KEN LANTZ * STARTED PROGRAMMING; FEB 10, 1982 * FILE: JOUST GAME PROGRAMS * NLIST INCLUDE SHRAMDEF.SRC DONT FORGET STANDARD DEFINITIONS INCLUDE SHORTEQU.SRC CMOS INCLUDE MESSEQU.SRC MESSAGES LIST ************************************************************************* * * * PATCHES RAM AREA * * * ************************************************************************* * ORG $B300 NEW RAM FOR THE LAVA TROLL LAVKLL RMB 2 TIME LEFT TILL LAVA TROLL GETS REAL STRONG CLVGRA RMB 2 LAVA TROLL CURRENT GRAVITY * * * DATA MACRO STEP,ADDR FCB STEP,!H(ADDR),!W(ADDR) ENDM * * CONSTANTS * HIDE EQU $5A A SIMPLE WAY TO HIDE ASCII DATA HIDE2 EQU '0 (ETC.) LAND5 EQU 210 START OF LAND CEILNG EQU $0020 CEILING (HIGHEST POSITION) OF GAME) FLOOR EQU $00DF THE FLOOR (LOWEST POSITION OF GAME) ELEFT EQU -10 EXTREME LEFT SIDE OF WRAP AROUND SCREEN ERIGHT EQU 292 EXTREME RIGHT SIDE OF WRAP AROUND SCREEN MAXVX EQU 8 MAXIMUM X +- VELOCITY MAXVY EQU $1000 MAXIMUM Y + VELOCITY (FALLING) MINVY EQU $0400 MAXIMUM Y - VELOCITY (RISING) PLYID EQU $09 PLAYERS I.D. WHEN DEAD EMYID EQU $0F ENEMIES I.D. WHEN DEAD EGGID EQU $02 EGGS I.D. WHEN DEAD SCRID EQU $03 EGGS SCORE I.D. CATID EQU $04 EGGS CAUGHT IN THE AIR SCORE I.D. PTEID EQU $17 PTERODACTYL I.D. SLOID EQU $18 SLOW I.D. LAVID EQU $15 EGGCOL EQU $2 CATCH THE EGG IN THE AIR COLOR PL1 EQU $5 YELLOW, FOR PLAYER 1 LTBLUE EQU $7 PLAYER 1'S VISOR PL2 EQU $7 GREEN, FOR PLAYER 2 YELLOW EQU $5 PLAYER 2'S VISOR PTC EQU $4 RED FOR PTERODACTYL KILLED SCORE WHI EQU $1 WHITE FOR MESSAGES, ETC. GRY EQU $D LITE GREY FOR TRANSPORTER EFFECT DKB EQU $E DARK BROWN CLIFF COLOR LIB EQU $8 LIGHT BROWN CLIFF COLOR MEB EQU $8 MEDIUM BROWN CLIFF COLOR ATX1 EQU $11 'WELCOME TO JOUST' ATX2 EQU $12 'TO FLY,' * 'REPEATEDLY PRESS 'FLAP' BUTTON' ATX3 EQU $13 'TO SURVIVE A JOUST * 'THE HIGHEST LANCE WINS' * 'IN A COLLISION' ATX4 EQU $14 'PICK UP THE EGGS' * 'BEFORE THEY HATCH' ATX5 EQU $15 'MEET THY ENEMIES' ATX6 EQU $16 'BOUNDER (500)' ATX7 EQU $17 'HUNTER (750)' ATX8 EQU $18 'SHADOW LORD (1500)' ATX9 EQU $19 'PRESS 1 PLAYER TO START' * 'OR' * 'INSERT ADDITIONAL COIN FOR' * '2 PLAYER EXCITMENT' ATX10 EQU $1A 'READY FOR 2 PLAYER' * 'JOUST' ATX11 EQU $1B 'PTERODACTYL BEWARE' ATX13 EQU $1D 'TEMPORARY SAFETY' * 'UNTIL A CONTROL IS PRESSED' * * FREE TRANSPORTER TABLE OFFSETS * ORG $0 FXREV RMB 1 X POSITION'S WRAP DIRECTION FXMIN RMB 2 X PIXEL POSITION MINIMUM FXMAX RMB 2 X PIXEL POSITION MAXIMUM FLEVEL RMB 2 THIS TRANSPORTERS "IN USE" FLAG ADDRESS FTLEN RMB 0 LENGTH OF THIS MINI-TABLE * * TRANSPORTER LOCATION TABLE * ORG $0 TIMAGE RMB 2 SOURCE ADDRESS OF IMAGE TPOSX RMB 2 TRANSPORTER X PIXEL POSITION TPOSY RMB 2 TRANSPORTER Y PIXEL POSITION TCURUSE RMB 2 TRANSPORTER "IN USE" FLAG ADDRESS * * DECISION BLOCK * ORG $0 DJOY RMB 2 PLAYERS JOYSTICK/DUMB LINE TRACKING ENEMY DSMART RMB 2 A SMARTER ENEMY DSCORE RMB 2 SCORE RAM LOCATION DSCLOC RMB 2 SCORE SCREEN LOCATION DSCPLY RMB 2 SCORE'S AREAS IMAGES OF A PERSON SITTING DOWN DPLYR RMB 2 RIDERS IMAGE DTREFF RMB 2 TRANSPORTERS COLOR EFFECTS DCRE RMB 2 DECISION TO BE RECREATED BY WHOM DDEAD RMB 2 DEATH WISH ROUTINE (REG.X VICTOR, REG.U LOSER) DEGGS RMB 2 EGG KILLED COUNTER DSTART RMB 2 DECISION TO BE ENABLED AFTER TRANSPORTER DVALUR RMB 2 SCORE'S ROUTINE TO CALL FOR SCORES VALUE DGLAD RMB 2 GLADIATOR/TEAM WAVE RAM POINTER DTIME RMB 2 ADDRESS OF RUNNING/FLYING NAP TIME DSNWU RMB 2 SOUND OF WINGS GOING UP DSNWD RMB 2 SOUND OF WINGS GOING DOWN DSNSK RMB 2 SOUND OF SKIDDING DSNSK2 RMB 2 END OF SKIDDING SOUND DSNRU1 RMB 2 SOUND OF RUNNING (CLIP) (FIRST LEG) DSNRU2 RMB 2 SOUND OF RUNNING (CLOP) (SECOND LEG) DSNFAL RMB 2 SOUND OF FALLING DSNTREF RMB 2 KILL SOUND OF TRANSPORTER EFFECT DSNCRE RMB 2 THE SOUND OF A TRANSPORTER EFFECT DCONST RMB 1 COLOR NIBBLE OF PLAYER DVALUE RMB 1 SCORE WHEN KILLED (IN THOUSANDS/HUNDREDS) DGAMO RMB 1 PUT UP PLAYER 1/2 GAME OVER MESSAGE * * PICTURES FRAME NUMBER (FOR PIMAGE,U) * ORG $0 SKID RMB 12 STAND RMB 12 RUN1 RMB 12 RUN2 RMB 12 RUN3 RMB 12 RUN4 RMB 12 FLY1 RMB 12 FLY2 RMB 12 FLY3 RMB 12 * * WAVE PROCESS OFFSETS * ORG PPOSX PWAVE RMB 2 PDELWV RMB 2 TIME LEFT TO DELAY INBETWEEN WAVES PDELAY RMB 2 DELAY COUNTER PINTEL RMB 2 TEMP STORE AREA FOR INTELLIGENCE PWRTS RMB 2 RETURN ADDRESS FOR SOME SUBROUTINES PWRTS2 RMB 2 RETURN ADDRESS FOR SOME SUBROUTINES PWPREV RMB 2 PREVIOUS WAVE CLEAN-UP SUBROUTINE ADDRESS PWREGD RMB 2 SAVE AREA FOR REG.D PWREGY RMB 2 SAVE AREA FOR REG.Y (EGG WAVE) PWREGA RMB 1 SAVE AREA FOR REG.A (EGG WAVE) PEGGTM RMB 1 TIME TILL EGGS HATCH FOR EGG WAVE PBAITN RMB 1 WORD OFFSET TO TIME TABLE OF NEXT BAITER SEND OFF PBAITS RMB 1 START TIME TABLE;TABLE NUMBER TILL NEXT BAITER SEND OFF PWHCH RMB 1 IF >0 A PRE-MATURE HATCHING EGG TO BE CREATED PMSGA RMB 1 CURRENT MESSAGE BEING DISPLAYED PMSG0 RMB 4 MSG FOR WAVE 'XX' PMSG1 RMB 4 MSG NBR & COLOR & SCREEN ADDRESS PMSG2 RMB 4 MSG NBR & COLOR & SCREEN ADDRESS PMSG3 RMB 4 MSG NBR & COLOR & SCREEN ADDRESS PMSG4 RMB 4 MSG NBR & COLOR & SCREEN ADDRESS PMSG5 RMB 4 MSG NBR & COLOR & SCREEN ADDRESS IFGT PNBR-* FCB $1111 CIA PROCESS BLOCK OVERFLOW! ENDIF * * WAVE OFFSETS * ORG $0 WBOUND RMB 0 NBR OF BOUNDERS IN THIS WAVE (UPPER NIBBLE) WHUNT RMB 1 NBR OF HUNTERS IN THIS WAVE (LOWER NIBBLE) WLORD RMB 0 NBR OF SHADOW LORDS IN THIS WAVE (UPPER NIBBLE) WPERSUE RMB 1 NBR OF PERSUERS IN THIS WAVE (LOWER NIBBLE) WPTEN RMB 1 NBR OF PTERODACTYLS IN THIS WAVE WSTATUS RMB 1 STATUS BYTE FOR THIS WAVE WLEN EQU * * * WAVE STATUS BYTE, BIT DEFINITION * WBPER EQU $01 IF=1, PERSUE WILL BE INSTANTANIOUSLY WBJSR0 EQU $02 THESE 3 BITS ARE A JSR TABLE OFFSET WBJSR1 EQU $04 (0 = AN NOP, OTHERS ARE 2,4,6,8,10,12,14) WBJSR2 EQU $08 WBCL1L EQU $10 IF=1, CLIFF1L IS DISABLED (OR DESTROYED) WBCL1R EQU $20 IF=1, CLIFF1R IS DISABLED (OR DESTROYED) WBCL2 EQU $40 IF=1, CLIFF2 IS DISABLED (OR DESTROYED) WBCL4 EQU $80 IF=1, CLIFF4 IS DISABLED (OR DESTROYED) WBCL1 EQU WBCL1L+WBCL1R WBCL12 EQU WBCL1+WBCL2 WBCL14 EQU WBCL1+WBCL4 WBCL24 EQU WBCL4+WBCL2 WBCLS EQU WBCL1+WBCL2+WBCL4 * * DYNAMIC GAME ADJUST TABLE OFFSETS * ORG $0 DYWST0 RMB 2 WORD START 0,1,2,3 DYWST1 RMB 2 WORD START 4,5,6 DYWST2 RMB 2 WORD START 7,8,9 DYWEND RMB 2 WORD END VALUE DYWTIM RMB 5 NIBBLE TIMES BEFORE NEXT ADJUSTMENTS DYWINC RMB 1 BYTE LENGTH,INCREMENT DYWLEN RMB 0 * DYWORD MACRO START1,START2,START3,INCRE,ENDV,TIM1,TIM2,TIM3 FDB START1,START2,START3,ENDV,TIM1,TIM2 FCB TIM3,INCRE ENDM * ORG GAMORG * * THE PROGRAM'S VECTORS * JMP ATTRCT POWER UP VECTOR JMP ATTRC2 RETURN HERE AFTER H.S.T.D. FDB GSTART GAME START BUTTON MONITOR ROUTINE JMP SCREDIT DISPLAY CURRENT NUMBER OF CREDITS LEFT FDB SNHIGH HIGH SCORE TO DATES SOUND JMP HSTD TEMPORARY GO TO H.S.T.D. PAGE JMP DCREDIT DISPLAY CREDITS JMP GAMSIM SIMULATION GAME OR INSTRUCTIONAL PAGE JMP DCRE2 DISPLAY CREDITS (VARIABLE BACKGROUND) FDB NULL COLOR RAM OF ALL ZEROS * * GAME SIMULATION OR INSTRUCTIONAL PAGE * GAMSIM LDA #$7F GAME SIMULATION MODE STA GOVER LDA #3 3 LIVES FOR EACH PLAYER STA NLIVES STA NPLYRS & 2 PLAYERS JMP SIM1A START THE PAGE * SIM2A CLR NSMART NO-ONE IS SMART IN THIS GAME! CLR WSMART * * GENERATE BACKGROUND LANDING & COLISION TABLES * LDX #BCKXD1 GENERATE BACKGROUND COLISION TABLE AREA 3$ LDD ,X ANDA #$80 ANDB #$80 STD ,X++ CMPX #BCKXD2 BLO 3$ * PCNAP 1 LDX #LNDXD1 GENERATE BACKGROUND LANDING TABLE AREA 5$ LDA ,X ANDA #$20 FOR NOW, JUST CLIFF 5 LANDS AT ALL POINTS STA ,X+ CMPX #LNDXD2 BLO 5$ * PAMSG EQU PHORSE MESSAGE AREAS PHORSE,PRIDER * LDD #0 STD LEVPAS NO LEVEL PASSES DURING ATTRACT MODE STD PAMSG+0,U INIT MESSAGE AREAS STD PAMSG+2,U LDA #-1 STA CURTR1 BREAK DOWN ALL BUT 1 TRANSPORTER STA CURTR2 (THE BOTTOM ONE IS OPERATIONAL) STA CURTR3 JSR DCREDIT DISPLAY CREDITS LDX #ATMST-5 START SIMULATION MODE STX PDIST,U 10$ LDX PDIST,U LEAX 5,X STX PDIST,U CMPX #ATMEND LBHS SIM3A BR=END OF SIMULATION LDA 4,X ERASE OLD MESSAGE BEQ 11$ LEAX PAMSG,U 12$ CMPA ,X+ IS THE MESSAGE IN THIS SPOT? BNE 12$ BR=NO CLR ,-X ERASE QUE'D WRITTING TSTA BLT *+2+3+2 !!!!!!!!!BECAREFULL!!!!!!!!!! JSR ETEXT !!!!!!!!!!!!!!!!!!!!!!!!!!!!! BRA 11$ !!!!!!!!!BECAREFULL!!!!!!!!!! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!! ANDA #$7F !!!!!!!!!!!!!!!!!!!!!!!!!!!!! JSR ETEXT35 11$ PCNAP 8 LDX PDIST,U LDA 2,X SEND NEW MESSAGE BSR 25$ PCNAP 8 LDX PDIST,U JSR [,X] LDX PDIST,U LDA 3,X SLEEP TIME STA PJOYT,U 19$ LDA #60/2/3 STA PEGG,U 20$ LDA PAMSG+0,U BSR 30$ PCNAP 2 LDA PAMSG+1,U BSR 30$ PCNAP 2 LDA PAMSG+2,U BSR 30$ PCNAP 2 DEC PEGG,U BNE 20$ DEC PJOYT,U BNE 19$ BRA 10$ * * PUT MESSAGE IN QUE & WRITE IT * 25$ BEQ 40$ LEAX PAMSG,U TST ,X+ THIS SLOT EMPTY? !!!!!!!!!BECAREFULL!!!!!!!!!! BNE *-2 BR=NO !!!!!!!!!BECAREFULL!!!!!!!!!! STA ,-X NOW THIS SLOT IS FULL * * WRITE TEXT OR TEXT35 * 30$ BEQ 40$ !!!!!!!!!BECAREFULL!!!!!!!!!! BLT *+2+3 !!!!!!!!!BECAREFULL!!!!!!!!!! JMP TEXT !!!!!!!!!!!!!!!!!!!!!!!!!!!!! * !!!!!!!!!BECAREFULL!!!!!!!!!! ANDA #$7F !!!!!!!!!!!!!!!!!!!!!!!!!!!!! JMP TEXT35 !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 40$ RTS * ATMRTS RTS ATMST FDB ATMRTS,ATX1*256+2 INTRO MESSAGE FCB 0 FDB FLYLES,ATX2*256+9 FLYING LESSIONS FCB 0 FDB DIELES,ATX3*256+7 DYING LESSIONS FCB ATX2 FDB EGGLES,ATX4*256+5 EGG LESSION FCB ATX3 FDB LAVLES,ATX5*256+2 ENEMY LESSIONS FCB ATX4 FDB BOULES,ATX6*256+2 BOUNDER FCB 0 FDB HUNLES,ATX7*256+2 HUNTER FCB ATX6 FDB SHALES,ATX8*256+1 SHADOW LORD FCB ATX7 FDB ATMRTS,1 ERASE ENEMY LESSIONS AREA FCB ATX5 FDB ATMRTS,5 ERASE SHADOW LORD AREA FCB ATX8 FDB ATMRTS,(ATX13+$80)*256+6 ERASE SHADOW LORD AREA FCB 0 TRANSPORTER FDB OFFLES,2 FCB ATX1 FDB PTELES,ATX11*256+10 PTERODACTYL FCB ATX13+$80 FDB ATMRTS,0*256+5 FCB ATX11 ATMEND EQU * * * * FLYING LESSIONS * FLYLES LDD #L1FLY LDX TARPL2 STD PJOY,X LDA #128+32 STA PJOYT,X STA PEGG,X RTS * L1FLY DEC PJOYT,U BPL 20$ INC PJOYT,U LDD PVELY,U FLY UP CMPD #-$0040 BMI 20$ 10$ LDA PPOSY+1,U CMPA #AOFFL2-9 FLY UP TO JUST ABOVE LINE TRACK OF 2 BHI 40$ LDD #35$ STD PJOY,U 20$ CLRB 30$ CLRA STD CURJOY RTS * 35$ LDA PVELY,U BMI 20$ BRA 10$ * 40$ LDD #50$ STD PJOY,U LDA PEGG,U LSRA LSRA INCA STA PJOYT,U 45$ LDB #1 FLAP WINGS BRA 30$ * 50$ DEC PJOYT,U BNE 45$ LDA PEGG,U RESET FLAP TIMER LSRA STA PEGG,U STA PJOYT,U LDD #L1FLY STD PJOY,U BRA 20$ * * DIEING LESSION(S) * DIELES LDX #P4DEC JSR ATTEMY ATTRACT MODE ENEMIES LDD #LINET LINE TRACKING BOUNDAR STD PJOY,Y LDD #ERIGHT-1 X POSITION STD PPOSX,Y STD PCOLX,Y LDD #AOFFL2 Y POSITION STD PPOSY,Y STB PCOLY1,Y STB PCOLY2,Y STB PFACE,Y FACE LEFT LDD #L2EGG LDX TARPLY STD PJOY,X LDA #$60 STA PJOYT,X RTS * * START ATTRACT MODES ENEMY * INPUT REG.X - INTELLIGENCE * ADDITIONMAL INPUT; SET "PJOY,Y" * ATTEMY PSHS X ENEMIES INTELLIGENCE LDU TARPL2 START ENEMY AFTER COLISION ROUTINE 9$ LDU PLINK,U LDA PID,U CMPA #$20 OPPCOL COLISION ROUTINE? BNE 9$ BR=NO LDD #($80+EMYID)*256+$FF START THE ENEMY';S PROCESS LDX #STFALL JSR VCUPROC LDB #PPOSX CLEAR OUT THIS GUYS WORKSPACE 10$ CLR B,Y INCB CMPB #PNBR BLO 10$ LDU PEXEC RESTORE PROCESS AREA PULS X STX PDECSN,Y INC NENEMY INC NRIDER LDD BUZARD START HORSE STD PHORSE,Y LDD [DPLYR,X] STD PRIDER,Y ******** CLR PVELX,Y ******** CLR PBUMPY,Y ******** CLR PBUMPX,Y ******** LDD #0 ******** STD PPICH,Y ******** STD PPICR,Y LDA #4 MAXIMUM NUMBER OF EGGS TO LAY STA PEGG,Y ******** CLR PCHASE,Y NOT CHASING THE PLAYER RTS * * EGG LESSION * EGGLES LDD #L1EGG LDX TARPL2 STD PJOY,X RTS * L1EGG LDD PSTATE,U BEQ 15$ LDA PVELX,U CMPA #-4*2 MAXIMUM GOING LEFT SPEED? BEQ 17$ 10$ LDD #$FF00 11$ STD CURJOY RTS * 15$ LDA PVELX,U BGT 16$ LDD #$0101 BRA 11$ * 16$ LDD #$0000 BRA 11$ * 17$ LDD #20$ STD PJOY,U 20$ LDA PVELX,U BMI 10$ LDD #30$ STD PJOY,U 30$ LDA PVELX,U BNE 10$ LDA PFACE,U BPL 10$ BRA 16$ * * LAVA TROLL LESSIONS (REALLY ONLY A WARNING) * LAVLES LDX #$74DC LDD #MSW19*256+$44 'HOME OF THE' JSR OUTP35 LDX #$76E3 LDD #MSW20*256+$44 'LAVA TROLL' JMP OUTP35 * * BOUNDER LESSION * BOULES LDX #P4DEC JSR ATTEMY LDD #60*6+8+8 BRA EMYLES * * HUNTER LESSION * HUNLES LDX #P5DEC JSR ATTEMY LDD #60*4+8 BRA EMYLES * * SHADOW LORDS LESSION * SHALES LDX #P6DEC JSR ATTEMY LDD #60*2+8 EMYLES STD PDIST,Y LDD #8 STD PPOSX,Y STD PCOLX,Y LDB #$D3-1 STB PPOSY+1,Y STB PCOLY1,Y STB PCOLY2,Y ******** CLR PFACE,Y LDD #L1EMY STD PJOY,Y RTS * L1EMY LDD PDIST,U ADDD #-1 STD PDIST,U BLE 20$ LDA #1 GO RIGHT LDB PVELX,U CMPB #1*2 BNE 10$ 5$ CLRA 10$ CLRB STD CURJOY RTS * 20$ LDX PDECSN,U LDD DSMART,X ATTRACT MODE KILL STD PJOY,U BRA 5$ * * REMOVE ENEMIES * OFFLES LDU PLINK,U BEQ 30$ LDA PID,U CMPA #$80+EMYID BNE OFFLES LDD #AUTOFF STD PJOY,U BRA OFFLES * 30$ LDU PEXEC RTS * * PTERODACTYL LESSION * PTELES LDU PLINK,U LDX PLINK,U FIND END OF LINK BNE PTELES LDD #PTEID*256+$FF LDX #PTERST JSR VCUPROC LDU PEXEC RTS * L2EGG LDA PJOYT,U BEQ 20$ DEC PJOYT,U LDA PVELX,U BNE G2JOY LDD #$0100 10$ STD CURJOY RTS * 20$ LDA PVELX,U BEQ G2JOY LDA PFACE,U BMI G2JOY LDD #$FF00 BRA 10$ * * GAME SIMULATION PLAYER COMMANDS * G2JOY G1JOY TFR U,X 10$ LDX PLINK,X BEQ 20$ LDA PID,X CMPA #PTEID+$80 BNE 10$ LDA PFACE,X FACE OPPOSITE DIRECTION OF PTERODACTYL STA PFACE,U 20$ LDD #0 STD CURJOY RTS * * GAME OVER * GAMOVR LDA #$80 DISABLE CREDIT DISPLAY PAGE STA CRDCHG CLR GOVER STATE OF GAME = OVER PCNAP 8 PROCCR GSTART,$48 START GAME START SWITCH MONITOR JSR DCREDIT DISPLAY NUMBER OF CREDITS LEFT IN THE GAME CLR WSMART NO-ONE WILL BE SMART LDX [PDUMMY] GOVID LDX PLINK,X NEXT PROCESS BEQ GOVWAT LDA PID,X ALL PROCESSES FLAGGED FOR COLISION DETECT BPL GOVID CMPA #$80+PTEID IGNORE PTERODACTYLS BEQ GOVID LDY PDECSN,X INTELLIGENCE IS NOW NILL IFN DEBUG ???????????? DEBUG PARAMATER ????????? CMPY #P1DEC BLO 1$ CMPY #P7DEC BLS 2$ 1$ SWI THIS IS NOT A DECISION BLOCK ENDIF ???????????? END OF DEBUG ???????????? 2$ LDA PID,X CARD THIS PROCESS IFN DEBUG ???????????? DEBUG PARAMATER ????????? CMPA #$80+EGGID PASS ONLY EGGS & BUZARDS & PTERODACTYLS BEQ 3$ CMPA #$80+EMYID BEQ 3$ SWI BRA GOVID ENDIF ???????????? END OF DEBUG ???????????? * 3$ LDY DJOY,Y IFN DEBUG ???????????? DEBUG PARAMATER ????????? CMPY #LINET BEQ 4$ SWI 4$ LDA PID,X REG.X=WORKSPACE REG.A=ID REG.Y=DJOY ADDRESS ENDIF ???????????? END OF DEBUG ???????????? STY PJOY,X BRA GOVID * * GAME OVER MESSAGE * GOVERM LDX #$3090 LDD #256*MSGOVR+WHI*$11 PUT UP GAME OVER MESSAGE JMP OUTPHR * GOVWAT LDA #11 8*11 OR 88 TICK WAIT STA PRAM,U 1$ JSR GOVERM PCNAP 8 WAIT FOR A WHILE DEC PRAM,U BNE 1$ LDX #HSPP1 CLEAR OUT OLD HIGHLITED H.S.T.D. LETTERS 2$ CLR ,X+ CMPX #HSPP22+2 BLO 2$ JMP GAMEND CHECK FOR H.S.T.D. * ATTRC2 CLR CRDCHG RESET CHANGE IN CREDITS LDA ANYONE BACK FROM H.S.T.D. CHECKS/ENTRIES BEQ 10$ BR=NO-ONE ENTERED THEIR NAME LDX #SNHI2 SOMEONE ENTERED THEIR NAME JSR VSND MAKE AN ENTERED NAME SOUND BRA SIM3A * * 10$ LDA #109 8*11 OR 88 TICK WAIT STA PRAM,U 1$ JSR GOVERM PCNAP 8 WAIT FOR A WHILE DEC PRAM,U BNE 1$ SIM3A PKILL $00,$00 KILL EVERYONE HSTD LDX #NULL JSR VDCOLOR BLANK THE COLOR RAM PCNAP 4 JSR SCCLR BLANK THE SCREEN, PASS INTO ATTRACT MODE * * ATTRACT MODE * ATTRCT CLR GOVER STATE OF GAME = OVER LDA #$31 ATTRACT MODE PROCESS I.D. STA PID,U PROCCR GSTART,$48 START GAME START BUTTON MONITOR LDA N2SHIP+1 H.S.T.D. PAGE ALLOWED? RORA BCC 20$ BR=NO, GO TO NEXT MENU LDD #15*60 15 SECONDS OF HIGH SCORE TO DATE PAGE STD PRAM,U CLR PRAM+3,U LDX #HICOLR HIGH SCORE TO DATE COLORS JSR VDCOLOR JSR HIGH DISPLAY HIGH SCORE TO DATE JSR DCREDIT DISPLAY NUMBER OF CREDITS IN GAME 10$ PCNAP 1 INC RAMCOL+2 CONTINUALLY CHANGE 1 COLOR WORD LDD PRAM,U BEQ 20$ ADDD #-1 STD PRAM,U BRA 10$ * 20$ JSR READEM SUBD #$0201 BNE 30$ LDA #60 STA PRAM+3,U BRA 10$ * 30$ DEC PRAM+3,U BGT 10$ PROCCR HSTDBK,$49 GO BACK TO H.S.T.D. PAGE MONITOR JMP $D000 * * GO BACK TO H.S.T.D. PAGE * HSTDBK PCNAP 5 JSR READEM SUBD #$0201 RIGHT1,LEFT2 BNE HSTDBK BRA SIM3A * HICOLR FCB @000 BACKGROUND FCB @007 160 LT GREEN TOP BUZZARDS FCB @300 CENTER SECTION FCB @106 240 BOTTOM CHAMPIONS FCB @300 FCB @077 YELLOW PLAYER 1 ON H.S.T.D. TABLE FCB @300 FCB @350 LT BLUE PLAYER 2 ON H.S.T.D. TABLE NULL FCB @000 FCB @000 FCB @000 FCB @000 FCB @000 FCB @000 FCB @000 FCB @000 FCB @000 FCB @000 FCB @000 FCB @000 FCB @000 FCB @000 FCB @000 FCB @000 * * MARKETING MESSAGES * MARKET PCNAP 4 EMPTY BUFFERS LDA #30 TIME OUT (IN SECONDS) FOR THIS MESSAGE PAGE STA PRAM,U JSR SCCLR CLEAR THE SCREEN LDX VCOLOR1 LOAD COLOR TABLE JSR VDCOLOR JSR DCREDIT DISPLAY CREDITS LDA #ATX9 ASSUME CREDITS FOR 1 PLAYER LDB CREDIT CHECK HOW MANY CREDITS THERE ARE DECB BEQ 10$ BR=1 CREDIT LDA #ATX10 O.K. TO PLAY TWO PLAYERS 10$ JSR TEXT 20$ PCNAP 60 DEC PRAM,U WATCH FOR TIME OUT BNE 20$ JMP HSTD * * SOUND OF INCREMENTING NUMBER OF CREDITS * (TO BE DISPLAYED LATER) * SCREDIT LDX #SNCRED MAKE A CREDITS SOUND JSR VSND INC CRDCHG INDICATE A COIN CHANGED CREDITS * * DISPLAY NUMBER OF CREDITS * DCREDIT LDY #$1200 CLEAR CREIDT AREA DCRE2 LDD #$37E2 LDX #CRDLEN JSR GENDMA LDD #MSCRED*256+$22 LDX #$38E3 SCREEN ADDRESS JSR OUTPHR LDA CREDIT REMEMBER LAST CREDIT VALUE BITA #$F0 SURPRESS LEADING ZERO BNE 1$ ORA #$F0 1$ JMP OUTBCD DISPLAY NBR * CRDLEN FDB $1F09 * * MONITOR THE GAME START SWITCHES * GSTART PKILL $48,$FF STOP COPIES OF ITSELF 4$ PCNAP 1 LDA CRDCHG HAVE CREDITS CHANGED? BLE 41$ BR=NO CLR CRDCHG PKILL $00,$00 STOP ALL OTHER ATTRACT MODE PROCESSES PROCCR MARKET,$30 41$ LDB WPIAA ANDB #$30 PLAYER 1 OR 2 PRESSED? BEQ 4$ BR=NO LDX #COINSL INFINITE FREE PLAY?? JSR RCMSA CMPA #$09 (CODE FOR FREE PLAYS) BEQ 1$ BR=YES LDA CREDIT ANY CREDITS LEFT? BEQ 4$ BR=NO CMPA #$02 ENOUGH FOR A 2 PLAYER GAME? BHS 3$ BITB #$10 ONLY CREDITS FOR1 PLAYER, A 2 PLAYER GAME? BNE 4$ BR=YES, IGNORE REQUEST 3$ BITB #$10 2 PLAYER GAME? BEQ 2$ BR=NO, MUST BE 1 PLAYER GAME ADDA #$99 DAA 2$ ADDA #$99 1 LESS CREDIT DAA STA CREDIT NEW CREDITS LEFT LDX #CREDST REMEMBER IN CMOS FOR FUTURE POWER-UP JSR WCMSA 1$ LDA #8 ASSUME BOOKS SINGLE PLAYER START CLR NPLYRS ASSUME 1 PLAYER GAME BITB #$10 2 PLAYER GAME BEQ GAM1P BR=1 PLAYER GAME LDA #9 ASSUME BOOKS DUAL PLAYER START INC NPLYRS 2 PLAYER GAME LDB #10 BOOKS, NBR OF CREDITS STARTED (TOTAL 2) JSR AUDIT1 GAM1P TFR A,B GET AUDIT OFFSET IN REG.B JSR AUDIT1 LDB #10 BOOKS, NBR OF CREDITS STARTED JSR AUDIT1 LDX #NSHIP NUMBER OF LIVES FOR THE PLAYER(S) JSR RCMSB JSR BCDHX BCD TO HEX CONVERT STB NLIVES CLR GOVER RESET TO TRUE GAME OVER PKILL $00,$00 KILL EVERYONE LDA #$30 STA PID,U LEDGE REFRESH ROUTINE WILL BE ID=30 LDX #SNGS GAME STARTING SOUND JSR VSND SIM1A PCNAP 4 WAIT UNTIL BUFFERS ARE EMPTY JSR SCCLR LDX VCOLOR1 LOAD COLOR TABLE JSR VDCOLOR IF DEBUG LDX #$10F9 LDD #MSCOPY*256+$11 JSR OUTPHR COPY RIGHT MESSAGE ELSE LDU #MSCOP2 ALTERNATE HIDDEN COPYRIGHT MESSAGE LDX ,U++ START LOCATION LDD ,U++ START LETTER & COLOR 80$ SUBA #HIDE2 EORA #HIDE JSR OUTCHR LDA ,U+ BNE 80$ ENDIF * * INITILIZE SOME VARIABLES * LDU PEXEC LDX #SPLY1 CLEAR PLAYER 1 & 2 SCORE AREA 10$ CLR ,X+ CMPX #SPLY2+10 BLO 10$ ******** LDD #0 ******** STD SPLY1+0 CLEAR SCORE, PLAYER 1 ******** STD SPLY1+2 ******** STD SPLY1+4 CLEAR NUMBER OF LIVES A PLAYER HAS ******** STD SPLY1+6 CLEAR AUX NBR OF LIVES & LEVPAS OFFSET CLR EGGS1 RESET NUMBER OF EGG KILLED ******** STD SPLY2+0 CLEAR SCORE, PLAYER 2 ******** STD SPLY2+2 ******** STD SPLY2+4 CLEAR NUMBER OF LIVES A PLAYER HAS ******** STD SPLY2+6 CLEAR AUX NBR OF LIVES & LEVPAS OFFSET CLR EGGS2 RESET NUMBER OF EGG KILLED * CLR NRIDER RESET NUMBER OF RIDERS IN THE GAME LDX #REPLAY READ CMOS LEVEL PASS JSR RCMSB CLRA JUSTIFY IT FOR SCOREING BOUNDS ASLB ROLA ASLB ROLA ASLB ROLA ASLB ROLA STD LEVPAS SAVE IT FOR FUTURE USE STD SPLY1+8 SET LEVEL TO PASS FOR PLAYER 1 STD SPLY2+8 SET LEVEL TO PASS FOR PLAYER 2 * LDX #GA1 GET GAME ADJUST JSR RCMSA CLR ,-S EXTRA RAM FOR START OFFSET CMPA #3 GAME ADJUST 0,1,2,3 ? BLS 1$ BR=NO INC ,S CMPA #6 GAME ADJUST 4,5,6? BLS 1$ BR=NO INC ,S 1$ LDX #DYTBL ROM INITILIZATION LDY #DYNADJ RAM AREA 2$ LDB ,S START VALUE OFFSET ASLB LDD B,X STD ,Y LDA #2 STA 2,Y LEAX DYWLEN,X LEAY 3,Y CMPX #DYEND BLO 2$ * LDA #4 INITILIZE GRAVITY STA GRAV LDA #3 STA TBRIDGE WAVE NBR TO DESTROY BRIDGE LDA #1 NUMBER OF WAVES AFTER BRIDGE DESTROY TILL TROLL STA TTROLL COMES OUT IN THE OPEN STA EMYTIM ENEMY SLOW DOWN TIME LDA #90 1 1/2 SECOND OF DELAY BEFORE TARGETING PLAYER STA TARTIM CLR LAVNBR NO LAVA TROLLS IN BEGINNING LDA #$EA START LEVEL OF LAVA FOR BUBBLING LAVA ROUTINE STA SAFRAM LDA #13 NARROWER TRANSPORTER SAFTY ZONE 2ND PTE WAVE STA TRSMALL LDD #0 STD CURTR1 FREE UP ALL TRANSPORTERS STD CURTR3 TR1 TO TR4 STD TARPLY RESET TARGETED PLAYER(S) STD TARPL2 STD NPSERV & LPSERV, RESET TRANSPORTER "TAKE A NUMBER" STD NESERV & LESERV, RESET TRANSPORTER "TAKE A NUMBER" CLR WPTER PRESENT NBR OF PTERODACTYLS OF PTERO-WAVE CLR NSMART NO ONE WAS SMART CLR NENEMY NO ENEMIES ARE ON THE SCREEN * * GENERATE BACKGROUND LANDING & COLISION TABLES * LDX #BCKXD1 GENERATE BACKGROUND COLISION TABLE AREA BCKXUP LDD BCKXS1-BCKXD1,X STD ,X++ CMPX #BCKXD2 BLO BCKXUP * PCNAP 1 LDX #LNDXD1 GENERATE BACKGROUND LANDING TABLE AREA LNDXUP LDA LNDXS1-LNDXD1,X ORA #$20 FOR NOW, CLIFF 5 LANDS AT ALL POINTS STA ,X+ CMPX #LNDXD2 BLO LNDXUP * * PUT UP THE BACKGROUND * BCKUP JSR VNEWCL5 UN-COMPACT CLIF5 PCNAP 1 LDY #BRIDGE BRIDGE THE LAVA JSR BCKYUP LDD ,Y NEW DMA CONTROL INFORMATION STD ,X LDY #BRIDG2 2ND HALF OF THE BRIDGE FOR THE LAVA JSR BCKYUP LDD ,Y NEW DMA CONTROL INFORMATION STD ,X LDA GOVER GAME SIMULATION? BGT 20$ BR=YES LDU #CLIF1L PUT UP ALL OF THE BACKGROUND MANNUALLY 10$ LDY ,U++ WRITE THIS BCKGND BLOCK JSR BCKYUP WRITE THIS OBJECT CMPU #CLIF5 BLO 10$ * PCNAP 2 ALLOW CLIFFS TO APPEAR UPON SCREEN DEC GOVER STATE OF GAME = STARTING THE GAME (.NE.) SECCR CIA,$11 CIA WILL BE I.D $11 20$ SECCR OPPCOL,$20 CREATE OPPONENTS COLISION DETECT ROUTINE * PROCCR PLAYR,PLYID CREATE PLAYER #1 LDD OSTRICH START HORSE (OSTRICH) STD PHORSE,Y CLR PFACE,Y PLAYER IS FACING RIGHT LDX #100 START X POSITION STX PPOSX,Y LDX #G1DEC ASSUME GAME SIMULATION LDA GOVER GAME SIMULATION? BGT 30$ BR=YES LDX #P1DEC 30$ STX PDECSN,Y PLAYER 1'S JOYSTICK LDA NLIVES NBR OF LIVES FOR THIS PLAYER JSR PLYRUP LDA NPLYRS CREATE PLAYER #2? BEQ NOPLY2 BR=NO PROCCR PLAYR,PLYID CREATE PLAYER #2 LDD STORK START HORSE STD PHORSE,Y LDB #$FF OSTRICH & RIDER ARE FACEING LEFT STB PFACE,Y LDX #200 START X POSITION STX PPOSX,Y LDX #G2DEC ASSUME GAME SIMULATION LDA GOVER GAME SIMULATION? BGT 40$ BR=YES LDX #P2DEC 40$ STX PDECSN,Y PLAYER 2'S JOYSTICK LDA NLIVES NBR OF LIVES FOR THIS PLAYER JSR PLYRUP PCNAP 8 NOPLY2 PROCCR PLYCOL,$20 CREATE PLAYERS COLISION DETECT ROUTINE LDX VLAVA START LAVA PROCESS LDD #$68FF I.D. $68 SECONDARY PROCESS JSR VCUPROC CREATE THE LAVA BUBBLING PROCESS IFE DEBUG SECCR KZAP,$23 ENDIF SECCR SCODSP,$21 PLAYER 1'S SCORE UPDATE LDD #SCRPL1 STD PRAM,Y LDA NPLYRS 2 PLAYER GAME? BEQ NOSPL2 BR=NO SECCR SCODSP,$22 PLAYER 2'S SCORE UPDATE LDD #SCRPL2 STD PRAM,Y NOSPL2 EQU * LDA GOVER GAME SIMULATION? LBGT SIM2A BR=YES IFE DEBUG PCNAP 2 JSR JZAP ENDIF PROCCR THORSE,$6F * * REFRESH BACKGROUND LEDGES * LDA #$FF SECONDARY PROCESS STA PID,U LEDGE CLR PRAM,U START IMAGE TO REFRESH(IF ANY) CLR PRAM+2,U START CLIFF BIT CLR BCKRFS NOTHING TO REFRESH IN THE BEGINNING NOBCKR PCNAP 2 LDA BCKRFS ANY BACKGROUND TO REFRESH? BEQ NOBCKR * LDD PRAM+1,U GET CLIFF OFFSET (REG.A), & CLIFF BIT REG.B BCKNBT ADDA #2 NEXT CLIFF ASLB BNE BCKN0 INCB CLRA BCKN0 BITB BCKRFS THIS CLIFF BIT TO REFRESH?? BEQ BCKNBT BR=NO STD PRAM+1,U SAVE NEW CLIFF BIT & OFFSET BEING REFRESHED EORB BCKRFS STB BCKRFS TURN THIS CLIFFS REFRESH BIT OFF LDY [PRAM,U] GET CLIFF ADDRESS LEAY 2+6-2,Y POINT PAST COLISION DETECT & FULL OBJ SIZE BSR BCKYUP WRITE THIS OBJECT LDB PRAM+2,U GET REFRESHEING BIT BPL NOBCKR BR=NOT REFRESHING CLIFF5 (THE BIG ONE) PCNAP 1 LDY CLIF5 GET CLIFF5 LEFT SIDED ADDRESS LEAY 2+6-2+6,Y POINT PAST COLISION DETECT & FULL OBJ SIZE BSR BCKYUP WRITE THIS OBJECT PCNAP 1 LDY CLIF5 GET CLIF5 RIGHT SIDED ADDRESS LEAY 2+6-2+6+6,Y POINT PAST COLISION DETECT & FULL OBJ SIZE BSR BCKYUP WRITE THIS OBJECT BRA NOBCKR LOOP FOREVER * * PUT UP BACKGROUND, POINTED TO BY REG.Y * BCKYUP LDB WCLENY,Y CALC LOWEST POINT EORB #!WDMAFIX ADDB WCY,Y JSR VWR1ALL LDA #$0A WRITE THE BACKGROUND OBJECT STA WCDMA,X LDD WCDEST,Y STD WCDEST,X LDD WCSRC,Y STD WCSRC,X LDD WCLEN,Y STD WCLEN,X RTS * BRIDGE FDB $1200+LIB*$11,0,$00D3,$1B03!XDMAFIX BRIDG2 FDB $1200+LIB*$11,0,$78D3,$1E03!XDMAFIX * IFE DEBUG * * AND THE EVER POPULAR COPYRIGHT MESSAGE * FCC 'JOUST (C) 1982 WILLIAMS ELECTRONICS ' ENDIF FCB $20 A DO NOTHING FCB $CE FUDGE TO MAKE THIS PROM ($6000) ADD UP TO $85 FCB $88 FUDGE FOR LZAPPER TO SUM CORRECTLY FCB $78 FUDGE TO ADJUST BACK TO THE $6000 SUM OF $85 * * PTERODACTYL INTELLIGENCE * PTERO DEC PPVELX,U TIME TO ZOOM IN ON THE PLAYER? BNE 47$ BR=NO LDA PFEET,U STA PPVELX,U INITIALIZE NEXT LOOK-AT-PLAYER TIME CLR PRDIR,U ASSUME NO SELECTED PLAYER JSR SELPLY SELECT TARGETED PLAYER LBEQ PTELEV BR=NO PLAYERS AVAILABLE LDA PFEET,U CMPA #15 MINIMUM TIME TO LOOK-AT-PLAYER BLS 48$ DEC PFEET,U 48$ LDD PPOSX,X SAVE HIS CO-ORDINATES STD PDIST,U LDB PPOSY+1,X CMPB #$D3-1 NEVER SEEK HIM BELOW CLIFF5 BLO 98$ LDB #$D3-1 98$ SUBB #5 ADJUSTMENT FOR CENTER OF BIRD/PTERODACTYL STB PRDIR,U X=PDIST, Y=PRDIR 47$ LDB PRDIR,U GET VICTIMS Y POSITION BEQ PTELEV BR=NO VICTIM CMPB PPOSY+1,U LBLO PTEUP BR=GO UP SUBB #15 CMPB PPOSY+1,U LBHI PTEDN BR=GO DOWN LDA #128 ATTACK SEQUENCE TIME-OUT TIME. STA PEGG,U LDX #SNPTE PTERODACTYL CALL JSR VSND LDD #PTEATK STD PJOY,U * PTEATK DEC PEGG,U ATTACK SEQUENCE TIME OUT? BEQ 3$ BR=YES LDD PDIST,U WITHIN ATTACK X WINDOW? SUBD PPOSX,U BMI 1$ SUBD #13 BPL 2$ BR=NO BRA 3$ YES, SELECT NEXT VICTUM 1$ ADDD #13 BMI 2$ BR=NO 3$ LDD #PTERO HERE IF ENDING ATTACK SEQUENCE STD PJOY,U CLR PRDIR,U NO LONGER CHASE AFTER PLAYER CLRB JMP PTEDIR * 2$ LDA PIMAGE,U ATTACKE FRAME? CMPA #FLY3-FLY1 BNE 20$ LDA #10 STA PACCX,U STAY ON ATTACK FRAME 20$ LDA PPOSY+1,U STAY ON CENTER LINE, (OF THE PLAYER) CMPA PRDIR,U BEQ PTEALE ATTACKING, LEVEL FLIGHT BLO PTEADN ATTACKING, GO DOWN LDA PVELY,U NEED TO GO UP, ALREADY GOING UP? BMI 21$ BR=YES, NOT TIME TO GO UP YET LDD PVELY,U SUBD #$0010 STD PVELY,U GO UP 21$ BRA PTEDIR * PTEADN LDA PVELY,U NEED TO GO DOWN, ALREADY GOING DOWN? BGT PTEDIR BR=YES, NOT TIME TO GO DOWN YET LDD PVELY,U ADDD #$0010 STD PVELY,U GO DOWN BRA PTEDIR * PTEALE CLR PVELY,U NO NEED TO GO UP/DOWN BRA PTEDIR * PTELEV LDA #AOFFL1-2 ASSUME NEAR TRACKING LINE 1 LDB PPOSY+1,U CMPB #AOFFL1+AOFFUD BLO 10$ BR=TRACK ON LINE 1 LDA #AOFFL2-2 ASSUME NEAR TRACKING LINE 2 CMPB #AOFFL2+AOFFUD BLO 10$ BR=TRACK ON LINE 2 LDA #AOFFL3-2 ASSUME NEAR TRACKING LINE 3 10$ SUBA PPOSY+1,U ABOVE OR BELOW LINE? BEQ 30$ BMI 20$ BR=ABOVE THE LINE LDD PVELY,U CMPD #$0100 BGE PTEDIS ADDD #$0020 STD PVELY,U BRA PTEDIS * 20$ LDD PVELY,U CMPD #-$0100 BLE PTEDIS SUBD #$0020 STD PVELY,U BRA PTEDIS * 30$ LDD PVELY,U ASRA RORB ASRA RORB STD PVELY,U * PTEDIS TST PBUMPX,U BEQ 30$ BMI 20$ LDA #4 BRA 10$ * 30$ LDA #4 ASSUME GOING RIGHT TST PVELX,U MAINTAIN SLOWER VELOCITY! BPL 10$ BR=GOING RIGHT 20$ LDA #-4 REALLY GOING LEFT 10$ STA PVELX,U SPEED STA PFACE,U & FACING DIRECTION LDD #0 STD CURJOY RTS * PTEDIR LDA PFACE,U FLY IN DIRECTION OF FACING STA PVELX,U TST PBUMPX,U BEQ 30$ BMI 20$ LDA #4*2 BRA 10$ * 30$ LDA #4*2 ASSUME GOING RIGHT TST PVELX,U MAINTAIN SLOWER VELOCITY! BPL 10$ BR=GOING RIGHT 20$ LDA #-4*2 REALLY GOING LEFT 10$ STA PVELX,U SPEED STA PFACE,U & FACING DIRECTION LDD #0 STD CURJOY RTS * PTEUP LDD PVELY,U CMPD #-$00C0 BLE PTEDN2 ADDD #-$0040 DO NOT GO UP TOO FAST STD PVELY,U DO NOT GO UP TOO FAST PTEDN2 LDD #PTEUP2 STD PJOY,U LDA #2 WING DOWN TIME STA PJOYT,U BRA PTEDIS * PTEUP2 DEC PJOYT,U BGT PTEDIS LDD #PTERO STD PJOY,U BRA PTEDIS * PTEDN LDD PVELY,U CMPD #$0100 BGE PTEDN2 ADDD #$0010 STD PVELY,U DO NOT GO DOWN TOO FAST BRA PTEDN2 * * AUTO MATIC REMOVAL OF PTERODACTYL * PTEOFF LDD PPOSX,U OFF SCREEN? CMPD #ELEFT+3 BLT PTEGON CMPD #ERIGHT-3 BGT PTEGON LDA #AOFFL1-2 ASSUME NEAR TRACKING LINE 1 LDB PPOSY+1,U CMPB #AOFFL1+AOFFUD BLO 10$ BR=TRACK ON LINE 1 LDA #AOFFL2-2 ASSUME NEAR TRACKING LINE 2 CMPB #AOFFL2+AOFFUD BLO 10$ BR=TRACK ON LINE 2 LDA #AOFFL3-2 ASSUME NEAR TRACKING LINE 3 10$ SUBA PPOSY+1,U ABOVE OR BELOW LINE? BEQ 30$ BMI 20$ BR=ABOVE THE LINE LDD PVELY,U CMPD #$0100 BGE 11$ ADDD #$0020 STD PVELY,U 11$ JMP PTEDIR * 20$ LDD PVELY,U CMPD #-$0100 BLE 21$ SUBD #$0020 STD PVELY,U 21$ JMP PTEDIR * 30$ LDD PVELY,U ASRA RORB ASRA RORB STD PVELY,U JMP PTEDIR * PTEGON JSR CPLYR ERASE PLAYER FOR THE LAST TIME LDA #$7F NO LONGER COLIDE WITH PTERODACTYL ANDA PID,U STA PID,U PCNAP 60 JMP VSUCIDE * * THE INTELLIGENCE OF A KILLED PTERODACTYL * PTEKLP LDB #FLY2-FLY1 STB PIMAGE,U JSR SRCADP PCNAP 4 BRA PTEKL2 * PTEKLL COM PFACE,U LDA PCHASE,U KILLED A BAITER? BEQ PTEKL2 DEC NBAIT CLR PCHASE,U PTEKL2 JSR CPLYR ERASE THE PTERODACTYL LDB #FLY3-FLY1 STB PIMAGE,U JSR SRCADP PCNAP 4 JSR CPLYR ERASE THE PTERODACTYL LDA PJOYT,U ANDA #!N$03 FACE RIGHT 1/2 WAY THROUGH THE DEATH DANCE BNE 10$ CLR PFACE,U 10$ DEC PJOYT,U TIME OUT? BPL PTEKLP * LDA #3 3 FRAME ANIMATION STA PFRAME+2,U LDD ASH1R PTERODACTYL ASHES TO ASHES STD PFRAME+3,U 20$ LDY PFRAME+3,U BSR PTEASH PCNAP 2 LDY PFRAME+3,U BSR PTEASH STY PFRAME+3,U we must maintain our why PCNAP 6 while we sleep a little DEC PFRAME+2,U BNE 20$ JSR CPLYR ERASE THE PTERODACTYL LDD #$1200 (THE ENTIRE BOX) STD WCDMA,X * PCNAP 2 WAIT FOR ERASED PTERODACTYL LDD #MSGTH1*256+($11*PTC) PTERODACTYLE SCORE & COLOR STD PRDIR,U JMP SCRAIR * * PTEASH LDD PPOSX,U GET DESTINATION OF ANIMATION RORA RORB TFR B,A LDB PPOSY+1,U SUBB #11-1 GO FROM BOTTOM OF PTERO TO TOP OF IT **PTE SUBB #13-1 11-1 GO FROM BOTTOM OF PTERO TO TOP OF IT STD PFRAME,U Adjust destination for centering on cliffs JMP CLIFER * * PTERODACTYL (FOR A WAVE) * PTERST CLR PCHASE,U NOT A BAITER * * BAITER PTERODACTYL (USER MUST PRESET PCHASE,U TO NON-ZERO) * BAITST LDA PCHASE,U SAVE THIS REGISTER LDB #PPOSX CLEAR OUT PTERODACTYLS WORKSPACE 10$ CLR B,U INCB CMPB #PNBR BLO 10$ STA PCHASE,U ********CLR PFACE,U ASSUME BUZZARD COMING IN FROM LEFT HAND SIDE LDA #2 STA PVELX,U AT MAXIMUM WARP SPEED LDX #ELEFT+1 JSR VRAND BCC 1$ COM PFACE,U NEG PVELX,U AT REVERSED SPEED LDX #ERIGHT-1 1$ STX PPOSX,U LDD #0 STD AREA1 AREA2, FIND A CLEAR AREA TO APPEAR FROM CLR AREA3 ********STD PVELY,U INITIAL Y VELOCITY ********STD PSTATE,U FLYING STATE ********STD PPICH,U ********STD PPICR,U LDX TARPLY NEAR PLAYER1? BEQ 2$ BR=NO PLAYER1 JSR SELARE LDX TARPL2 BEQ 2$ BR=NO PLAYER2 JSR SELARE 2$ LDX #$D3-2 FOR BOTTOM CLIF5 AREA LDA AREA3 BEQ 3$ LDX #$8A-10 FOR MIDDLE CLIF3 AREA LDA AREA2 BEQ 3$ LDX #$51-20 FOR TOP CLIF1 AREA 3$ STX PPOSY,U LDD #PTERO INTELLIGENCE STD PJOY,U LDX #SNPTEI PTERODACTYL INTRODUCTION CALL JSR VSND LDA #$80 ENABLE COLISIONS ORA PID,U STA PID,U LDA #$80 A VERY HIGH LANTZ STA PLANTZ,U (TO KILL PLAYER) ********CLR PBUMPY,U RESET BUMP REGISTERS ********CLR PBUMPX,U LDD #P7DEC THE 7TH INTELLIGENT PERSON IN THE GAME STD PDECSN,U ********CLR PACCX,U CHANGE ANIMATION FRAME NOW! ********CLR PIMAGE,U ********CLR PFRAME,U LDA #120 2 SEC DELAY BETWEEN ATTACKS STA PFEET,U LSRA 1 SECOND WAIT TILL FIRST SEEK STA PPVELX,U CLR PTIMUP,U NEEDS TO BE DONE BRA PTESTF * * PTERODACTYL FLYING METHODS * PTEFLY PCNAP 1 JSR AIROVR FLYING OVERHEAD PTESTF DEC PACCX,U DECREMENT FRAME HOLDING TIME BGT 30$ BR=STILL THIS FRAME LDB PFRAME,U NEXT FRAME SUBB #2 BPL 20$ BR=DO NOT RESET SEQUENCE LDB #(4-1)*2 RESET SEQUENCE 20$ STB PFRAME,U LDX #PTESEQ GET MORE DATA FROM SEQUENCE TABLE OF FRAMES LDD B,X STA PIMAGE,U NEW IMAGE TO SHOW STB PACCX,U TIME TILL NEXT FRAME CHANGE 30$ * LDX #FLYXP ADD IN BUMPX,Y; AND VELX,Y; NO GRAVITY! LDD PVELY,U JSR ADDGRX ADD IN GRAVITY BSR SRCADP BRA PTEFLY * * SOURCE ADDRESS FOR IMAGE CALCULATION * AND WRITE THE BIRD * AND CHECK IF HIT BACKGROUND * PIMAGE,U HAS FRAME OFFSET * SRCADP LDB PIMAGE,U GET IMAGE NBR LDA PFACE,U FACE OFFSET BPL 1$ ADDB #6 1$ LDX IPTERO CALCULATE PTERODACTYL FRAME OFFSET ABX STX PPICH,U LDB PPOSY+1,U COLISION DETECT DATA CMPB #$D3-1 MINIMUM POSITION IN THE Y DIRECTION BLO 12$ CLR PVELY,U STOP FALLING CLR PVELY+1,U LDB #$D3-1 STB PPOSY+1,U 12$ STB PCOLY1,U MAINTAIN BOTTOM LINE OF COLISION BOX **PTE SUBB #11-1 MAINTAIN TOP LINE OF COLISION BOX SUBB #11-1 MAINTAIN TOP LINE OF COLISION BOX STB PCOLY2,U LDD PPOSX,U ADDD #28-1 STD PCOLX,U MAINTAIN COLISION DETECT POINTERS JSR WNORIA WRITE THE BIRD ONLY! LDA NRIDER WAVE OVER? BEQ 48$ BR=YES LDA DBAIT BAITERS SHOULD REMOVE THEMSELVES? BEQ 49$ BR=NO LDA PCHASE,U IS THIS A BAITER? BEQ 49$ BR=NO CLR PCHASE,U NO LONGER A BAITER DEC NBAIT BUT, KEEP TABS ON 1 LESS BAITER IFN DEBUG ???????????? DEBUG PARAMATER ????????? BPL 47$ SWI 47$ ENDIF ???????????? END OF DEBUG ???????????? 48$ LDD PJOY,U ALREADY IN AUTO OFF ROUTINE? SUBD #PTEOFF BHS 49$ BR=YES LDD #PTEOFF NO, END ALL PTERODACTYLS STD PJOY,U 49$ * * CHECK IF PTERODACTYL HIT BACKGROUND * CKPTER LDX PPOSX,U LDY PPOSY,U LDA BCKXTB,X **PTE ORA BCKXTB+6,X ORA BCKXTB+28-18,X ANDA BCKYTB+6,Y **PTE ANDA BCKYTB+7,Y CLIFF COLISION AREA ******** TFR A,B ******** ORB BCKRFS REFRESH CLIFF AREA ******** STB BCKRFS ANDA BCKYTB+7,Y BEQ 1$ JMP BCKCOL COLIDE WITH BACKGROUND 1$ RTS * * PTERODACTYLS FLYING ANIMATION SEQUENCE * PTESEQ FCB FLY1-FLY1,8 FCB FLY2-FLY1,8 FCB FLY3-FLY1,8 FCB FLY2-FLY1,8 * * PTERODACTYLS X VELOCITY TABLE * FDB -$0300 FDB -$0180 FDB -$00C0 FDB -$0060 FLYXP FDB $0000 FDB $0060 FDB $00C0 FDB $0180 FDB $0300 IFE DEBUG FCB $5F JZAPPER FUDGE ENDIF * * LAVA TROLL PART 1 - THIS IMAGE WILL BE BEHIND THE BIRD * THE HAND WILL COME UP FOLOWING THE PLAYER * THEN TRACK THE PLAYER IN THE Y DIRECTION, * UNTIL EITHER THE HAND MISSES OR GETS ITS TARGET. * LAVATC JSR CLAVAT ERASE LAVA TROLL LAVAT1 JSR LAVVFY MAKE SURE TARGET STILL EXISTS STD PPOSX,U GOT HIS X POSITION LDA PFRAME,U GRAB FRAME ? DEC PJOYT,U TIME FOR NEXT FRAME? BGT LT1TRK BR=NO LDA LAVTIM RESET TIMER STA PJOYT,U LDA PFRAME,U NEXT FRAME CMPA #5*6 CURRENT FRAME HAND EXTENTED FRAME? BEQ LT1HT BR=YES IF DEBUG BLO 1$ SWI PROBLEMS HERE!! LDA #5*6 BRA LT1HT 1$ ENDIF ADDA #6 STA PFRAME,U LT1TRK JSR WLAVAT WRITE THE LAVA TROLL NAPGO 1,LAVATC WAKE-UP AT CLEAR LOOP * LT1HT LDB PPOSY+1,Y ADDB #10-7 OFFSET FOR PROPER HAND GRIP CMPB PPOSY+1,U BEQ LT1GRP GO GRAB THE PLAYER BHI 1$ BR=HAND TOO HIGH GO DOWN DEC PPOSY+1,U RAISE THE HAND BRA 2$ * 1$ INC PPOSY+1,U 2$ JSR WLAVAT PCNAP 1 JSR CLAVAT JSR LAVVFY MAKE SURE TARGET STILL EXISTS STD PPOSX,U GOT HIS X POSITION BRA LT1HT LOOP UNTIL THE CORRECT HEIGHT * * LAVA TROLL CAN GRIP THE PLAYER * LT1GRP LDX #SNTROL MAKE THE SOUND OF THE LAVA TROLL JSR VSND GRIPPING THE PLAYER LDD PID,U (& PPRI,U)CREATE PROCESS TO GRIP THE BIRD INCA LAVA TROLL GRAP I.D. = LAVA TROLL +1 LDU PLINK,U GET VICTIMS WORKSPACE LDX #ADDLAV THE VICTIMS GRAVITY IS NOW BASED UPON STX PADGRA,U THE LAVA TROLLS GRAVITY LDX #LAVAT2 JSR VCUPROC HOLD THE BIRD IS AFTER THE VICTEM WORKSPACE LDU PEXEC GET WORKSPACE BACK LDD PPOSX,U TRANSFER POSITION TO NEW PROCESS STD PPOSX,Y LDD PPOSY,U STD PPOSY,Y LDD PJOY,U GIVE THE VICTIM'S PROCESS ADDRESS STD PJOY,Y STU PDIST,Y GIVE LAVAT2 LAVAT1'S PROCESS ADDRESS LDD #0 JSR PATCH1 APPLY A LAVA TROLL PATCH ******* STD PPICH,Y RESET PICTURE AREA IN CASE OF PREMATURE CLEAR 1$ PCNAP 2 JSR LAVVFY MAKE SURE TARGET STILL EXISTS BRA 1$ LOOP UNTIL SOMETHING HAPPENS * ************************************ * * LAVA TROLL PULLING DOWN PLAYER (HANDLED IN PLAYER) * ACTUALLY THE LAVA TROLL JUST FOLLOWS THE PLAYER DOWN * LAV2LP JSR CLAVAT LAVAT2 LDY PPREV NOW THE VICTIM IS BEFORE THIS ROUTINE JSR LAVVI2 MAKE SURE TARGET STILL EXISTS BNE LT2SUC BR=OUT OF ITS HANDS LDX PDIST,U MAINTAIN POSITION IN LAVAT1 STD PPOSX,U GOT HIS X POSITION STD PPOSX,X LDD PPOSY,Y ADDB #-7+17 CORRECT HAND HOLD STD PPOSY,U STD PPOSY,X LDA #6*6 FINAL HOLDING FRAME STA PFRAME,U JSR WLAVAT LDX #LAV2LP LDA #1 NAP 1 JMP PATCH2 ******** JMP VNAPTIM * LT2DIE JSR CLAVAT LT2SUC JMP VSUCIDE * * VICTIM WITHIN RANGE DETERMINATION. * REG.D = TRACKING PPOSX * STATUS - RETURNS IF IN RANGE * STATUS - JMPS TO LAVATF ROUTINE IF OUT OF RANGE * LAVVFY BSR LAVVIC CHECK IF VICTIM IS STILL WITHIN RANGE BNE LAVATF BR=NO RTS * * VICTIM WITHIN RANGE DETERMINATION. * REG.D = TRACKING PPOSX * STATUS .EQ. STILL WITHIN RANGE * STATUS .NE. OUT OF RANGE * LAVVIC LDY PLINK,U IS PROCESS STILL THERE? LAVVI2 CMPY PJOY,U BNE LVVOUT BR=NO LAVVI3 LDA PID,Y IS THE PROCESSES IMAGE STILL ALIVE BPL LVVOUT BR=NO LDA PSTATE,Y THIS OBJECT IS STILL IN THE AIR? BNE LVVOUT BR=NO LDA PPOSY+1,Y IS IMAGE TOO HIGH? CMPA #FLOOR+7-32 BLO LVVOUT BR=YES LDD PPOSX,Y OUT OF REACH LEFT SIDE ADDD #-2 FUDGE FOR EXACT X CO-ORDINATE MATCH CMPD #54-14 BLE LVVIN CMPD #240 (CLIF5 BOUNDS) BLT LVVOUT LVVIN ORCC #$04 .EQ. IN RANGE RTS * LVVOUT ANDCC #!N$04 .NE. OUT OF RANGE (FOR ONE REASON OR ANOTHER) RTS IFE DEBUG * * JZAP * JZAP LDX JZAPST CLRA 1$ ADDA ,-X CMPX #$D000 BNE 1$ EORA #$A1 JZAPPER DATA BEQ 2$ INC LXPOS2+1 2$ RTS ENDIF * * * LAVA TROLL RELEASING HIS GRIP * DROP HAND * LAVATF LDA PFRAME,U NEXT FRAME ADDA #-6 STA PFRAME,U BLE LT1DON BR=OUT OF FRAMES LT1DRP JSR WLAVAT WRITE THE LAVA TROLL LDA #5 LDX #LAVATC WAKE-UP AT BEGINNINNG JMP VNAPTIM * LT1DON DEC LAVNBR FREE UP LAVA TROLL(S) JMP VSUCIDE * * ERASE LAST "PPICH,U" LAVA TROLL IMAGE * CEGG EQU * CLEAR EGG ROUTINE CLAVAT LDY PPICH,U AND CLEAR LAVA TROLL ROUTINE BEQ WLARTS CLR PPICH,U CLR PPICH+1,U JSR CLREGY ERASE THE IMAGE JMP CLIPER CLIP THE IMAGE (CLOSE TO THE BOTTOM) WLARTS RTS * * WRITE "PFRAME,U" LAVA TROLL IMAGE * WLAVAT LDA PFRAME,U SUBA #6 BMI WLARTS BR=NO LEGAL FRAME TO DISPLAY LDY ILAVAT LEAY A,Y STY PPICH,U JSR VWR1CLS WLADMA JSR WRHOR2 JMP CLIPER CLIP THE IMAGE (CLOSE TO THE BOTTOM) * * THORSE * THORSE PCNAP 30 LDD #$2502 LEFT1,FLAP1,CREDIT1,RIGHT2 BSR 80$ BNE THORSE 10$ BSR 80$ BEQ 10$ PCNAP 15 1/4 SECOND TILL NEXT SWITCH CLOSURES LDD #$1204 RIGHT1,CREDIT2,FLAP2 BSR 80$ BNE THORSE 15$ BSR 80$ BEQ 15$ PCNAP 15 LDD #$0506 LEFT1,FLAP1,RIGHT2,FLAP2 BSR 80$ BNE 10$ JSR SCCLR ORCC #$FF LDD #$00FF STD $C000 IFN DEBUG LDA #ATX11+1 JSR TEXT BRA 50$ ENDIF LDU #TROMSG LDX #$1030 PSHS X LDB #$11 30$ LDA ,U+ EORA #$9B SUBA #$35 BMI 50$ BEQ 40$ JSR OUTCHR BRA 30$ * 40$ LDX ,S LEAX $10,X STX ,S BRA 30$ * 50$ LDX #14285/2 1/2 SEC DEBOUNCE 55$ LDA #WDATA STA WDOG BSR READEM SUBD #$0506 BEQ 50$ LEAX -1,X BNE 55$ IFN DEBUG JMP [$EFFE] ELSE JMP [$FFFE] ENDIF * 80$ STD PRAM,U LDD ,S++ STD PRAM+2,U PCNAP 1 BSR READEM TFR D,X LDD PRAM,U CMPX PRAM,U JMP [PRAM+2,U] * READEM LDA #$08 ORA WCPIAB STA WCPIAB LDA WPIAA ANDA #$37 LDB #!N$08 ANDB WCPIAB STB WCPIAB LDB WPIAA ANDB #$07 RTS * IFE DEBUG JZAPST FDB $9000 ENDIF * * * Centrial Intelligence Agency * INITILIZATION * * CIA CLR WAVBCD WAVE STARTS AT ZERO LDD #WAVRTS STD PWPREV,U NO PREVIOUS WAVE TO COMPLETE LDD #WAVTBL-WLEN STD PWAVE,U LDA #BAISND-BAISBL-1 RESET BAITER TIME TABLE STA PBAITS,U PCNAP 32 BRA IWAVE2 * * INTER WAVE SET-UP & MESSAGES MAIN LOOP * IWAVE LDA TRSMALL SMALLER TRANSPORTER AREA? BEQ 1$ BR=NO DEC TRSMALL 1$ LDX #GA1 GET GAME ADJUST JSR RCMSA STA ,-S EXTRA RAM FOR ADJUST OFFSET LDX #DYTBL ROM INITILIZATION LDY #DYNADJ RAM AREA 2$ LDB 2,Y TIME TO CHANGE THE VALUE? BEQ 4$ BR=YES DEC 2,Y BNE 15$ BR=NO 4$ LDB ,S DIFFICULTY LEVEL ADDB #DYWTIM*2 GET OFFSET FOR TIME TABLE ASRB GET BYTE OFFSET LDB B,X GET TIME BYTE BCS 5$ BR=LOWER NIBBLE LSRB LSRB LSRB LSRB 5$ ANDB #$0F STB 2,Y NEW TIME LDB DYWINC,X SEX BMI 6$ ADDD ,Y NEW VARIABLE CMPD DYWEND,X BLT 8$ BRA 7$ * 6$ ADDD ,Y NEW VARIABLE CMPD DYWEND,X BGT 8$ 7$ LDD DYWEND,X 8$ STD ,Y 15$ LEAX DYWLEN,X LEAY 3,Y CMPX #DYEND BLO 2$ PULS A RESTORE STACK * LDA SAFRAM RASIE LAVA IF POSSIBLE CMPA #$E0 BLS IWAVE2 BR=AT TOP LEVEL SUBA #$5 STA SAFRAM IWAVE2 LDA TBRIDGE TIME TILL BURNS YOUR BRIDGES BEHIND YOU BEQ WTROLL DEC TBRIDGE BNE WNRM JSR STBRID START BRIDGE COLAPSING ROUTINE, LEFT TO RT. LDD #-$20 START POSITION IN X DIRECTION STD PDIST,Y LDA #1 OFFSET FOR FLAME FROM LANDING TABLE STA PVELX,Y LDA #1 DIRECTION TO TRAVEL STA PJOYT,Y JSR STBRID START BRIDGE COLAPSING ROUTINE RT. TO LEFT LDD #$13F START POSITION IN X DIRECTION STD PDIST,Y LDA #7 OFFSET FOR FLAME FROM LANDING TABLE STA PVELX,Y LDA #-1 DIRECTION TO TRAVEL STA PJOYT,Y BRA WNRM * WTROLL LDA TTROLL TIME TILL LAVE TROLL STARTS BEQ WNRM DEC TTROLL BNE WNRM BR=LAVA TROLL NOT AWAKE YET LDX #LAVAF LAVA FLAMES LDD #$69FF LDU PDUMMY ENTER AS 2ND PROCESS IN TOTAL PROCESS LIST JSR VCUPROC LDD #FLOOR+16 START FLAME UNDER LAVA STD PPOSY,Y LEFT & RIGHT FLAME Y POSITION LDD #ELEFT+30 LEFT FLAME X POSITION STD PPOSX,Y CLR PFRAME,Y LDX #LAVAF LAVA FLAMES LDD #$69FF JSR VCUPROC LDU PEXEC LDD #FLOOR+16 START FLAME UNDER LAVA STD PPOSY,Y LEFT & RIGHT FLAME Y POSITION LDD #ERIGHT-30 RIGHT FLAME X POSITION STD PPOSX,Y LDA #2 STA PFRAME,Y LDA #4 MAKE THIS FLAME OUT OF SYNC OF THE OTHER STA PNAP,Y WNRM CLR EGGS1 RESET NUMBER OF EGGS KILLED BY PLAYER 1 CLR EGGS2 RESET NUMBER OF EGGS KILLED BY PLAYER 2 CLR WSMART RESET NUMBER OF ALLOWED SMART ENEMIES IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA NSMART THIS HAD BETTER BE ZERO!!!!!!!!!! BEQ 41$ SWI 41$ LDA NENEMY THIS HAD BETTER BE ZERO!!!!!!!!!! BEQ 42$ SWI 42$ ENDIF ???????????? END OF DEBUG ???????????? LDA #255 STA WENEMY MAXIMIM ENEMIES FOR A NORMAL WAVE LDA #1 NO ENEMY SLOW DOWN STA EMYTIM CLR PMSG0,U RESET WAVE N MESSAGE SENT AREA CLR PMSG1,U RESET MESSAGE BUFFERS CLR PMSG2,U CLR PMSG3,U CLR PMSG4,U CLR PMSG5,U LDA WAVBCD BCD WAVE NUMBER ADDA #$01 NEXT WAVE NUMBER 0-99 DAA STA WAVBCD * * CLEAN UP THE END OF A WAVE * JSR [PWPREV,U] CALL END OF WAVE ROUTINE JSR EMSGS ERASE ANY END OF WAVE MESSAGES PCNAP 1 JSR WAVEN PUT UP WAVE NUMBER LDD #WAVRTS STD PWPREV,U NO PREVIOUS WAVE TO COMPLETE LDX PWAVE,U GET WAVE TABLE ADDRESS LDA WSTATUS,X GET OLD CLIFF STATE LEAX WLEN,X CMPX #WTBEND AT END OF TABLE?? BLO 1$ LDX #WTBRST YES, RESTART AT NEW POINT 1$ STX PWAVE,U NEW TABLE ADDRESS EORA WSTATUS,X ANY CLIFFS CHANGED? ANDA #WBCLS ALL CLIFFS; WBCL1+WBCL2+WBCL4 BEQ 4$ LDB WSTATUS,X GET CORRECT STATE OF CLIFF LDX #WCLFTB CLIFF INFORMATION JSR WCLFEW CLIFF1L ERASE/WRITE ROUTINE LDX #WCLFT2 JSR WCLFEW CLIFF1R ERASE/WRITE ROUTINE LDX #WCLFT3 JSR WCLFEW CLIFF2 ERASE/WRITE ROUTINE LDX #WCLFT4 JSR WCLFEW CLIFF4 ERASE/WRITE ROUTINE 4$ LDX PWAVE,U GET WAVE AREA TO WORK FROM LDA WSTATUS,X EARLY PERSUE? BITA #WBPER BEQ 44$ BR=NO LDA WPERSUE,X SET PERSUE VARIABLE ANDA #$0F STA WSMART 44$ LDB WSTATUS,X CALL WAVE STARTER ROUTINE ANDB #WBJSR0+WBJSR1+WBJSR2 MASK OFF OTHER BITS LDX #WJSRTB JSR TABLE JSR [B,X] WPAUSE LDA #180/6 WAIT A SECOND WPAUS2 JSR WAVDEL JSR WATWAV WAIT TILL END OF WAVE WPAUS3 JSR EMSGS ERASE ALL MESSAGES LDA [PWAVE,U] INTRODUCE BOUNDARS LSRA LSRA LSRA LSRA BEQ 2$ BR=NO BOUNDARS LDX #P4DEC (INTELLIGENCE) JSR WCREATE CREATE THEM 2$ LDA [PWAVE,U] INTRODUCE BOUNDARS ANDA #$0F BEQ 3$ BR=NO BOUNDARS LDX #P5DEC (INTELLIGENCE) JSR WCREATE CREATE THEM 3$ LDX PWAVE,U LDA WLORD,X INTRODUCE SHADOW LORDS LSRA LSRA LSRA LSRA BEQ 4$ BR=NO BOUNDARS LDX #P6DEC (INTELLIGENCE) JSR WCREATE CREATE THEM 4$ WBEGIN LDA GOVER IS THE GAME OVER? BEQ 5$ BR=YES LDX PWAVE,U LDA WPERSUE,X SET PERSUE VARIABLE ANDA #$0F STA WSMART 5$ LDA PBAITS,U GET BAITERS TABLE DRIVEN TIME BEQ 6$ DEC PBAITS,U 6$ LDX #BAISBL LDA A,X GET TIME TABLE START POSITION STA PBAITN,U INCA ASLA LDX #BAITBL LDD A,X BAITER INITIAL SLEEP TIME STD CBAIT CLR NBAIT NUMBER OF BAITERS ON THE SCREEN CLR DBAIT NO BAITER DELAY * * GAME PLAY - DETECT END OF WAVE, BAITER SENDOFF, INTELLIGENCE INCREMENT * EMY2 LDA #112 AFTER 15 SECONDS BUMP NBR OF INTELLIGENT PEOPLE STA PDELAY,U EMYOK PCNAP 8 LEAX ,U LDA NRIDER ALL ENEMIES DEAD? LBEQ IWAVE BR=YES, END OF WAVE LDA DBAIT DELAY BAITERS? BEQ 9$ BR=NO DEC DBAIT TIME TO DECREMENT BAITER CLOCK? BNE 11$ BR=NO 9$ LDD CBAIT SUBD #1 BGT 10$ LDA NBAIT CMPA #3-1 ONLY ALLOW 3 BAITERS ON THE SCREEN BHI 11$ BR=3 BAITERS ON SCREEN, BUT READY SECCR BAITST,PTEID INC NBAIT 1 MORE BAITER ON THE SCREEN LDA #-1 STA PCHASE,Y BAITER TYPE PTERODACTYL'S LDA PBAITN,U BEQ 100$ DEC PBAITN,U 100$ ASLA LDX #BAITBL LDD A,X BAITER INITIAL SLEEP TIME 10$ STD CBAIT 11$ LDA NENEMY NBR OF ACTIVE ENEMIES >0 ??? BEQ EMYOK BR=NO ACTIVE ENEMIES, SO NO DECREMENT DEC PDELAY,U SOMEONE IS ALIVE BNE EMYOK LDA GOVER IS THE GAME OVER? BEQ EMY2 BR=YES INC WSMART BNE EMY2 DEC WSMART BRA EMY2 * * BAITER SEND OFF TIME TABLE * BAITBL FDB 1*60/8 FDB 3*60/8 FDB 5*60/8 FDB 7*60/8 FDB 15*60/8 FDB 15*60/8 FDB 15*60/8 FDB 15*60/8 FDB 15*60/8 FDB 15*60/8 FDB 15*60/8 BWAVN FDB 30*60/8 BWAV2 FDB 45*60/8 BWAV1 FDB 60*60/8 * * BAITER START TABLE OFFSET * BAISBL FCB (BWAVN-BAITBL-2)/2 START OFFSET FOR WAVE N FCB (BWAV2-BAITBL-2)/2 START OFFSET FOR WAVE 2 FCB (BWAV1-BAITBL-2)/2 START OFFSET FOR WAVE 1 BAISND EQU * * * START BRIDGE COLAPSING ROUTINE * STBRID LDU PPREV USE PREVIOUSES PROCESSES WORKSPACE LDX #LAVAB LDD #$6AFF JSR VCUPROC LDU PEXEC GET OLD WORKSPACE BACK LDD #FLOOR GIVE IT SOME INITIAL CO-ORDINATES STD PPOSY,Y CLR PFRAME,Y START AT FRAME 0 RTS * * CREATE ENEMIES, INPUT STACK, RETURN ADDRESS * REG.X INTELLIGENCE * REG.A NUMBER OF PEOPLE WCREATE STA PDELAY,U LDD ,S++ STD PWRTS2,U SAVE RETURN ADDRESS STX PINTEL,U THAT'S INTELLIGENCE 10$ PCNAP 61 SECCR CREEM,EMYID INC NENEMY 1 MORE ENEMY ON THE SCREEN INC NRIDER 1 MORE RIDER ON THE SCREEN LDD PINTEL,U STD PDECSN,Y LDD BUZARD START HORSE STD PHORSE,Y LDA #4 MAXIMUM NUMBER OF EGGS TO LAY STA PEGG,Y CLR PCHASE,Y NOT CHASING THE PLAYER LDA TBRIDGE 1ST, OR 2ND WAVE? BEQ 20$ BR=NO LDA #2 STA EMYTIM SLOW DOWN THE ENEMY ONLY! 20$ DEC PDELAY,U BNE 10$ JMP [PWRTS2,U] * * WAIT TILL TRUE END OF WAVE (OR GAME OVER) * WATWAV LDX ,S++ STX PWRTS,U RETURN ADDRESS 1$ BSR REWMSG LDA GOVER GAME OVER? BEQ 2$ BR=YES, END OF WAVE LDX PLINK,U BNE 1$ 2$ JMP [PWRTS,U] * * WAVE DELAY BY REG.A AMOUNT * WAVDEL LDX ,S++ STX PWRTS,U RETURN ADDRESS STA PDELAY,U 1$ BSR REWMSG DEC PDELAY,U BNE 1$ JMP [PWRTS,U] * * RE-WRITE ALL MESSAGES * REWMSG PULS D SAVE RETURN ADDRESS STD PWRTS2,U LDA GOVER GAME OVER? BEQ 1$ LDA #PMSG1 REMEMBER TO START AT MESSAGE 1 STA PMSGA,U LDA PMSG0,U THIS MESSAGE O.K. TO PUT OUT? BEQ 2$ BR=NO JSR WAVEN 2$ PCNAP 1 LDA PMSGA,U GET CURRENT MESSAGE TO WRITE CMPA #PMSG5 LAST MESSAGE WAS THE LAST ONE? BHI 1$ BR=YES, RETURN TO CALLER LEAY A,U ADDA #PMSG2-PMSG1 NEXT MESSAGE TO WRITE STA PMSGA,U BSR WMSG2 BRA 2$ * 1$ JMP [PWRTS2,U] * * INITIAL WRITE & SAVE MESSAGE NBR & SCREEN LOCATION * WAVMSG LEAY PMSG1-4,U 1$ LEAY 4,Y TST ,Y BNE 1$ LDA GOVER BEQ WVMRTS LDD ,X STD ,Y LDD 2,X STD 2,Y WMSG2 LDA ,Y BEQ WVMRTS LDB 1,Y LDX 2,Y JMP OUTPHR WVMRTS RTS * * ERASE ALL MESSAGES * EMSGS LDA PMSG0,U WAVE MESSAGE SENT TO SCREEN? BEQ 11$ BR=NO JSR WAVEN2 ERASE WAVE NUMBER 11$ LEAY PMSG1,U MESSAGE 1 BSR 1$ LEAY PMSG2,U MESSAGE 2 BSR 1$ LEAY PMSG3,U MESSAGE 3 BSR 1$ LEAY PMSG4,U MESSAGE 4 BSR 1$ LEAY PMSG5,U MESSAGE 5 1$ LDA ,Y BEQ 2$ CLR ,Y FORGET ABOUT THIS MESSAGE CLRB LDX 2,Y JMP OUTPHR 2$ RTS * * ERASE/WRITE THE CLIFF, * MODIFY LANDING TABLE * COLISION TABLE * UPDATE/DESTROY THE CLIFF * SAVES REG.D, REG.X * WCLFEW PSHS D,X BITA ,X CLIFF1 CHANGING? BEQ 1$ BR=NO BITB ,X YES, DESTROY OR CREATE? BEQ 2$ BR=CREATE 11$ LDY 5,X HERE TO DESTROY, DESTROY TRANSPORTER AREA BEQ 31$ LDA #-1 STA ,Y 31$ LDA 1,X DESTROY LANDING AREA BEQ 12$ COMA LDX #LNDXD1 START ADDRESS LDY #LNDXD2-LNDXD1 LENGTH JSR CLRBIT LDX 2,S LDA 2,X DO NOT REFRESH THIS CLIFF COMA (REAL TIME CHECK) ANDA BCKRFS STA BCKRFS LDA 2,X DESTROY BUMPING (COLISION) AREA COMA LDX #BCKXD1 START ADDRESS LDY #BCKXD2-BCKXD1 LENGTH JSR CLRBIT * 12$ LDX #SNCLIF CLIFF DESTROYING SOUND JSR VSND SECCR CLFDES,$27 START CLIFF DESTROYER ROUTINE LDX 2,S LDD [3,X] GET CLIFF ADDRESS STD PFRAME-2,Y PASS IT TO CLIFF DESTROYER 1$ PULS D,X,PC * 2$ LDY 5,X HERE TO CREATE, ENABLE TRANSPORTER BEQ 20$ (AYE, AYE SCOTTY) CLR ,Y 20$ LDA 1,X GET BIT TO PASS FOR CREATING THE CLIFF STA ,-S A DUMB WAY TO PUSH NBRS, BUT ALLOWED LDX #LNDXD1 LANDING AREA IN RAM LDY #LNDXS1 LANDING AREA IN ROM 22$ LDA ,S GET CHANGING BIT COMA ANDA ,X STA ,X LDA ,S GET VALID BITS FROM ROM ANDA ,Y+ ADDA ,X PUT IN RAM STA ,X+ CMPX #LNDXD2 BLO 22$ LDX 1+2,S LDA 2,X GET BIT TO PASS FOR CREATING THE CLIFF STA ,S SAVE ON STACK ORA BCKRFS REFRESH THIS CLIFF (MAKE IT APPEAR) STA BCKRFS LDX #BCKXD1 LANDING AREA IN RAM LDY #BCKXS1 LANDING AREA IN ROM 23$ LDA ,S GET CHANGING BIT COMA ANDA ,X STA ,X LDA ,S GET VALID BITS FROM ROM ANDA ,Y+ ADDA ,X PUT IN RAM STA ,X+ CMPX #BCKXD2 BLO 23$ LDA ,S+ REMOVE DATA PULS D,X STD PWREGD,U SAVE REG.D LDD ,S++ SAVE RETURN ADDRESS STD PWRTS,U PCNAP 1 FREE UP SOME TIME LDD PWREGD,U RESTORE REGISTER D JMP [PWRTS,U] RETURN * * CLEAR BIT * REG.X = START/CURRENT ADDRESS * REG.Y = LENGTH IN BYTES * REG.A = BIT PATTERN TO CLEAR * CLRBIT TFR A,B ANDB ,X STB ,X+ LEAY -1,Y BNE CLRBIT RTS * * PRINT THE WAVE NUMBER * WAVEN LDD #MSW06*256+WHI*$11 PUT UP 'WAVE XX' STA PMSG0,U THIS MESSAGE HAS BEEN PUT UP BRA WAVEN3 WAVEN2 LDD #MSW06*256+$00 ERASE 'WAVE XX' CLR PMSG0,U THIS MESSAGE HAS BEEN ERASED WAVEN3 LDX #$3A60 JSR OUTPHR LDA WAVBCD BITA #$F0 BNE 1$ ORA #$F0 1$ JMP OUTBCD * * CLIF DESTROY/CREATE DATA TABLE * WCLFTB FCB WBCL1L,$01,$03 FDB CLIF1L,0 WCLFT2 FCB WBCL1R,$00,$00 FDB CLIF1R,0 WCLFT3 FCB WBCL2,$02,$04 FDB CLIF2,CURTR1 WCLFT4 FCB WBCL4,$10,$40 FDB CLIF4,0 * INTRO1 FDB MSW00*256+WHI*$11,$2D7D INTRO #1 INTRO2 FDB MSW01*256+WHI*$11,$339B INTRO #2 COOP1 FDB MSW02*256+WHI*$11,$367D CO-OP (TEAM) WAVE INTRO #1 COOP2 FDB MSW03*256+WHI*$11,$1C9B CO-OP (TEAM) WAVE INTRO #2 COOP3 FDB MSW04*256+WHI*$11,$1AB6 NO BONUS AWARDED COOP4 FDB MSW05*256+WHI*$11,$0BB6 BONUS AWARDED SURV1 FDB MSW14*256+WHI*$11,$317D SURVIVAL WAVE INTRO #1 SURV3 FDB MSW16*256+WHI*$11,$26B6 NO BONUS AWARDED SURV4 FDB MSW15*256+PL1*$11,$08B6 BONUS AWARDED (RED GUY) SURV5 FDB MSW15*256+PL2*$11,$3FB6 BONUS AWARDED (GREEN GUY) GLAD1 FDB MSW08*256+WHI*$11,$307F GLAD WAVE INTRO #1 GLAD2 FDB MSW09*256+WHI*$11,$2E90 GLAD WAVE INTRO #2 GLAD3 FDB MSW10*256+WHI*$11,$1C9B GLAD WAVE INTRO #3 GLAD4 FDB MSW11*256+WHI*$11,$32B6 NO AWARD GLAD5 FDB MSW12*256+PL1*$11,$10B6 RED - 3000 POINT BOUNTY GLAD6 FDB MSW12*256+PL2*$11,$4FB6 GREEN - 3K POINT BOUNTY EGG1 FDB MSW13*256+WHI*$11,$387D EGG WAVE INTRO PTER1 FDB MSW07*256+WHI*$11,$1178 1478 PTERODACTYL BEWARE * * WAVE TABLE * FCB $40,$01,0,0 WAVE 0 (FOR INITILIZATION) WAVTBL FCB $30,$01,0,2 WAVE 1 - NEEDS INTRO MESSAGE FCB $40,$01,0,4 WAVE 2 - COOP/TEAM/SURVIVE WAVE FCB $60,$02,0,0 WAVE 3 FCB $33,$01,0,6 WAVE 4 - GLADIATOR WAVE FCB $60,$01,0,8 WAVE 5 - EGG WAVE FCB $33,$03,0,WBPER+WBCL2+0 WAVE 6 FCB $24,$02,0,WBPER+WBCL12+4 WAVE 7 - COOP/TEAM/SURVIVE WAVE FCB $06,$01,1,WBPER+WBCL12+10 WAVE 8- PTERODACTYL WAVE FCB $06,$02,0,WBPER+WBCLS+6 WAVE 9 - GLADIATOR WAVE FCB $80,$03,0,8 WAVE 10- EGG WAVE FCB $35,$03,0,WBPER+0 WAVE 11 FCB $26,$02,0,WBPER+WBCL4+4 WAVE 12- COOP/TEAM/SURVIVE WAVE FCB $07,$03,1,WBPER+WBCLS+10 WAVE 13- PTERODACTYL WAVE FCB $08,$04,0,WBPER+WBCLS+6 WAVE 14- GLADIATOR WAVE FCB $06,$02,0,8 WAVE 15- EGG WAVE FCB $05,$1F,0,0 WAVE 16 FCB $05,$1F,0,4 WAVE 17- COOP/TEAM/SURVIVE WAVE FCB $05,$1F,2,10 WAVE 18- PTERODACTYL WAVE FCB $04,$2F,0,6 WAVE 19- GLADIATOR WAVE FCB $06,$03,0,8 WAVE 20- EGG WAVE FCB $03,$3F,0,WBPER+WBCL1+0 WAVE 21 FCB $02,$4F,0,WBPER+WBCL1+4 WAVE 22- COOP/TEAM/SURVIVE WAVE FCB $02,$4F,2,WBPER+WBCL14+10 WAVE 23- PTERODACTYL WAVE FCB $02,$4F,0,WBPER+WBCL14+6 WAVE 24- GLADIATOR WAVE FCB $06,$04,0,8 WAVE 25- EGG WAVE FCB $03,$5F,0,WBPER+WBCLS+0 WAVE 26 FCB $03,$5F,0,WBPER+WBCLS+4 WAVE 27- COOP/TEAM/SURVIVE WAVE FCB $02,$4F,2,WBPER+WBCLS+10 WAVE 28- PTERODACTYL WAVE FCB $03,$5F,0,WBPER+WBCLS+6 WAVE 29- GLADIATOR WAVE FCB $06,$03,0,8 WAVE 30- EGG WAVE FCB $04,$4F,0,WBPER+0 WAVE 31 FCB $02,$6F,0,WBPER+4 WAVE 32- COOP/TEAM/SURVIVE WAVE FCB $02,$4F,2,WBPER+WBCL2+10 WAVE 33- PTERODACTYL WAVE FCB $02,$6F,0,WBPER+WBCL2+6 WAVE 34- GLADIATOR WAVE FCB $08,$05,0,8 WAVE 35- EGG WAVE FCB $02,$6F,0,WBPER+WBCL4+0 WAVE 36 FCB $00,$8F,0,WBPER+WBCL4+4 WAVE 37- COOP/TEAM/SURVIVE WAVE FCB $00,$6F,2,WBPER+WBCL24+10 WAVE 38- PTERODACTYL WAVE FCB $00,$8F,0,WBPER+WBCL24+6 WAVE 39- GLADIATOR WAVE FCB $08,$05,0,8 WAVE 40- EGG WAVE FCB $03,$7F,0,WBPER+WBCL1+0 WAVE 41 FCB $00,$AF,0,WBPER+WBCL14+4 WAVE 42- COOP/TEAM/SURVIVE WAVE FCB $00,$7F,3,WBPER+WBCL14+10 WAVE 43- PTERODACTYL WAVE FCB $00,$AF,0,WBPER+WBCLS+6 WAVE 44- GLADIATOR WAVE FCB $08,$06,0,8 WAVE 45- EGG WAVE FCB $03,$7F,0,WBPER+0 WAVE 46 FCB $00,$AF,0,WBPER+4 WAVE 47- COOP/TEAM/SURVIVE WAVE FCB $00,$7F,3,WBPER+10 WAVE 48- PTERODACTYL WAVE FCB $00,$AF,0,WBPER+WBCL4+6 WAVE 49- GLADIATOR WAVE FCB $08,$06,0,8 WAVE 50- EGG WAVE FCB $03,$7F,0,WBPER+WBCL1+0 WAVE 51 FCB $00,$AF,0,WBPER+WBCL14+4 WAVE 52- COOP/TEAM/SURVIVE WAVE FCB $00,$7F,3,WBPER+WBCL14+10 WAVE 53- PTERODACTYL WAVE FCB $00,$AF,0,WBPER+WBCLS+6 WAVE 54- GLADIATOR WAVE FCB $08,$0F,0,8 WAVE 55- EGG WAVE FCB $03,$7F,0,WBPER+0 WAVE 56 FCB $00,$AF,0,WBPER+4 WAVE 57- COOP/TEAM/SURVIVE WAVE FCB $00,$7F,3,WBPER+010 WAVE 58- PTERODACTYL WAVE FCB $00,$AF,0,WBPER+WBCL4+6 WAVE 59- GLADIATOR WAVE FCB $00,$63,0,8 WAVE 60- EGG WAVE FCB $00,$AF,0,WBPER+WBCL1+0 WAVE 61 FCB $00,$AF,0,WBPER+WBCL14+4 WAVE 62- COOP/TEAM/SURVIVE WAVE FCB $00,$7F,3,WBPER+WBCL14+10 WAVE 63- PTERODACTYL WAVE FCB $00,$AF,0,WBPER+WBCLS+6 WAVE 64- GLADIATOR WAVE FCB $00,$64,0,8 WAVE 65- EGG WAVE FCB $00,$AF,0,WBPER+0 WAVE 66 FCB $00,$AF,0,WBPER+4 WAVE 67- COOP/TEAM/SURVIVE WAVE FCB $00,$7F,3,WBPER+10 WAVE 68- PTERODACTYL WAVE FCB $00,$AF,0,WBPER+WBCL4+6 WAVE 69- GLADIATOR WAVE FCB $00,$65,0,8 WAVE 70- EGG WAVE FCB $00,$AF,0,WBPER+WBCL1+0 WAVE 71 FCB $00,$AF,0,WBPER+WBCL14+4 WAVE 72- COOP/TEAM/SURVIVE WAVE FCB $00,$7F,3,WBPER+WBCL14+10 WAVE 73- PTERODACTYL WAVE FCB $00,$AF,0,WBPER+WBCLS+6 WAVE 74- GLADIATOR WAVE FCB $00,$6F,0,8 WAVE 75- EGG WAVE FCB $00,$AF,0,WBPER+0 WAVE 76 FCB $00,$AF,0,WBPER+4 WAVE 77- COOP/TEAM/SURVIVE WAVE FCB $00,$7F,3,WBPER+10 WAVE 78- PTERODACTYL WAVE FCB $00,$AF,0,WBPER+WBCL4+6 WAVE 79- GLADIATOR WAVE FCB $00,$86,0,8 WAVE 80- EGG WAVE WTBRST FCB $00,$AF,0,WBPER+WBCL1+0 WAVE 81 FCB $00,$AF,0,WBPER+WBCL14+4 WAVE 82- COOP/TEAM/SURVIVE WAVE FCB $00,$7F,3,WBPER+WBCL14+10 WAVE 83- PTERODACTYL WAVE FCB $00,$AF,0,WBPER+WBCLS+6 WAVE 84- GLADIATOR WAVE FCB $00,$8F,0,8 WAVE 85- EGG WAVE FCB $00,$AF,0,WBPER+0 WAVE 86 FCB $00,$AF,0,WBPER+4 WAVE 87- COOP/TEAM/SURVIVE WAVE FCB $00,$7F,3,WBPER+10 WAVE 88- PTERODACTYL WAVE FCB $00,$AF,0,WBPER+WBCL4+6 WAVE 89- GLADIATOR WAVE FCB $00,$8F,0,8 WAVE 80- EGG WAVE WTBEND EQU * END OF WAVE TABLE, REPEAT AT "WTBRST" IFE DEBUG * * ALTERNATE COPYRIGHT MESSAGE * MSCOP2 FDB $10F8 FCB $2A!XHIDE+HIDE2,$11 ( FCB $0D!XHIDE+HIDE2 C FCB $2B!XHIDE+HIDE2 ) FCB $0A!XHIDE+HIDE2 SPACE FCB $21!XHIDE+HIDE2 W FCB $13!XHIDE+HIDE2 I FCB $16!XHIDE+HIDE2 L FCB $16!XHIDE+HIDE2 L FCB $13!XHIDE+HIDE2 I FCB $0B!XHIDE+HIDE2 A FCB $17!XHIDE+HIDE2 M FCB $1D!XHIDE+HIDE2 S FCB $0A!XHIDE+HIDE2 SPACE FCB $0F!XHIDE+HIDE2 E FCB $16!XHIDE+HIDE2 L FCB $0F!XHIDE+HIDE2 E FCB $0D!XHIDE+HIDE2 C FCB $1E!XHIDE+HIDE2 T FCB $1C!XHIDE+HIDE2 R FCB $19!XHIDE+HIDE2 O FCB $18!XHIDE+HIDE2 N FCB $13!XHIDE+HIDE2 I FCB $0D!XHIDE+HIDE2 C FCB $1D!XHIDE+HIDE2 S FCB $0A!XHIDE+HIDE2 SPACE FCB $13!XHIDE+HIDE2 I FCB $18!XHIDE+HIDE2 N FCB $0D!XHIDE+HIDE2 C FCB $2E!XHIDE+HIDE2 . FCB 0 ENDIF * * WAVE SUBROUTINE TABLE * WJSRTB FDB WAVRTS NOP ROUTINE FDB WINTRO INTRODUCTION MESSAGE FDB WCOOP CO-OPERATION WAVE SET-UP FDB WGLAD GLADIATOR SET-UP FDB WAVEGG EGG WAVE SET-UP FDB WPTERO PTERODACTYL WAVE * WAVRTS RTS NOTHING TO DO * WINTRO LDX #INTRO1 JSR WAVMSG LDA #90/6 JSR WAVDEL LDX #INTRO2 JSR WAVMSG LDA #90/6 RESET OF 1 SECOND DELAY JMP WPAUS2 * * PTERODACTYL WAVE START * WPTERO EQU * PTERODACTYL WAVE LDX #PTER1 JSR WAVMSG LDA #180/6 JSR WAVDEL JSR WATWAV WAIT TILL TRUE END OF WAVE SECCR PTERWV,PTEID START WAVE STARTED PTERODACYL'S LDX PWAVE,U GET WAVE AREA TO WORK FROM LDA WPTEN,X GET NBR OF PTERODCTYLS FOR THIS WAVE STA PJOYT,Y NUMBER OF PTERODACTYLS TO CREATE JMP WPAUS3 * PTERWV PCNAP 65 DEC PJOYT,U NUMBER OF PTERO'S TO CREATE BLE 1$ BR=LAST ONE SECCR PTERST,PTEID BRA PTERWV * 1$ JMP PTERST * * CO-OPERATION (TEAM) WAVE OR SURVIVAL WAVE (2 PLAYER/1 PLAYER) * WCOOP LDA SPLY2+6 THIS MESSAGE IS FOR TWO PLAYERS ONLY BEQ WAVSUR BR=PLAYER 2 DEAD, GO TO SURVIVAL WAVE LDA SPLY1+6 BEQ WAVSUR BR=PLAYER 1 DEAD, GO TO SURVIVAL WAVE LDD #WCOSCR CO-OPERATION WAVE SET-UP STD PWPREV,U CO-OP SCORE ROUTINE CLR PLYG1 RESET PLAYER HIT PLAYER COUNTER(S) CLR PLYG2 LDX #COOP1 JSR WAVMSG LDX #COOP2 JMP WAVMSG * WCOSCR EQU * END OF WAVE CLEAN-UP LDA PLYG1 PLAYER 1 OR ORA PLYG2 PLAYER 2 DIE FROM ONE ANOTHER? BEQ 1$ BR=NO, GO AWARD THE TEAM LDX #COOP3 NO BONUS POINTS MESSAGE BRA ENDTS * 1$ LDA SPLY1+6 PLAYER 1 IS STILL ALIVE? BEQ 2$ BR=NO, DEAD LDX #P1DEC AWARD POINTS TO PLAYER 1 LDA #$30 3,000 POINTS!!! JSR SCRHUN 2$ LDA SPLY2+6 PLAYER 2 IS STILL ALIVE? BEQ 3$ BR=NO, DEAD LDX #P2DEC AWARD POINTS TO PLAYER 2 LDA #$30 3,000 POINTS!!! JSR SCRHUN 3$ LDX #COOP4 BONUS POINTS MESSAGE ENDTS JSR WAVMSG LDA #120/6 WAIT FOR 2 SECONDS JMP WAVDEL THEN RETURN TO BEGIN NEW WAVE * * SURVIVAL WAVE (ASSUMES ONLY 1 PLAYER LEFT IN GAME) * WAVSUR LDD #WSUSCR END OF SURVIVAL WAVE STD PWPREV,U SCORE ROUTINE CLR PLYD1 RESET PLAYER DEATH COUNTER(S) CLR PLYD2 LDX #SURV1 JMP WAVMSG * * END OF SURVIVAL WAVE SCOREING * WSUSCR LDX #SURV3 ASSUME NO POINTS LDA SPLY1+6 STILL HAVE SOME LIVES LEFT? BEQ 1$ BR=NO, CK PLAYER 2 LDA PLYD1 DID PLAYER 1 DIE? BNE ENDTS BR=YES, NO SCORE LDX #P1DEC AWARD POINTS TO PLAYER 1 LDA #$30 3,000 POINTS!!! JSR SCRHUN LDX #SURV4 AWARDED POINTS MESSAGE (PLAYER 1) BRA ENDTS * 1$ LDA SPLY2+6 STILL HAVE SOME LIVES LEFT? BEQ ENDTS BR=NO, NO BONUS AWARDED LDA PLYD2 DID PLAYER 2 DIE? BNE ENDTS BR=YES, NO SCORE LDX #P2DEC AWARD POINTS TO PLAYER 2 LDA #$30 3,000 POINTS!!! JSR SCRHUN LDX #SURV5 AWARDED POINTS MESSAGE (PLAYER 5) BRA ENDTS * * START GLADIATOR WAVE * WGLAD LDA SPLY1+6 THIS MESSAGE IS FOR TWO PLAYERS ONLY BEQ WAVRT2 BR=PLAYER 1 DEAD LDA SPLY2+6 BEQ WAVRT2 BR=PLAYER 2 DEAD LDD #WGLSCR GLADIATOR SET-UP STD PWPREV,U TO SCORE ROUTINE LDA #-1 SET-UP PLAYER KILLING PLAYER VARIABLES STA PLYG1 TO AWARD SCORE UPON 1ST ENCOUNTER STA PLYG2 LDX #GLAD1 JSR WAVMSG LDA #90/6 JSR WAVDEL LDX #GLAD2 JSR WAVMSG LDX #GLAD3 JSR WAVMSG LDA #90/6 JMP WPAUS2 WAVRT2 RTS * * END OF GLADIATOR WAVE CLEAN-UP * WGLSCR LDA PLYG1 EITHER BOTH NEGATIVE, OR 1 IS, NO OPTIONS BPL 2$ BR=PLAYER 2 GOT THE BOUNTY LDX #GLAD5 PLAYER 1 BONUS POINTS MESSAGE LDA PLYG2 BPL 3$ BR= PLAYER 1 GOT THE BOUNTY LDX #GLAD4 NO ONE GOT THE BOUNTY BRA 3$ 2$ LDX #GLAD6 PLAYER 2 BONUS POINTS MESSAGE 3$ JSR WAVMSG CLR PLYG1 NO MORE AWARDING BOUNTY POINTS CLR PLYG2 LDA #120/6 WAIT FOR 2 SECONDS JMP WAVDEL THEN RETURN TO BEGIN NEW WAVE * * START OF EGG WAVE * WAVEGG LDX #EGG1 EGG WAVE JSR WAVMSG LDA #180/6 JSR WAVDEL JSR WATWAV WAIT TILL TRUE END OF WAVE JSR EMSGS ERASE AL MESSAGES * LDX PWAVE,U FIND INTELLIGENCE LDY #P6DEC ASSUME THE BEST LDA WBOUND,X BNE 1$ LDA WLORD,X IT IS THE LORD HIMSELF BRA 2$ 1$ LDY #P5DEC HUNTER? BITA #$0F BNE 3$ BR=YES LDY #P4DEC HO, HUM, THE BOUNDAR 2$ LSRA LSRA LSRA LSRA 3$ ANDA #$0F STA WENEMY NUMBER OF ENEMIES TO HATCH AT A TIME STY PINTEL,U START INTELLIGENCE OF ALL LDB EGGWT2 INITIAL EGG WAITING TIME LDA SPLY2+6 2 PLAYERS IN THE GAME BEQ 35$ BR=NO, ALL TIMES ARE BASIED ON 1 PLAYER LDA SPLY1+6 2 PLAYERS IN THE GAME BEQ 35$ BR=YES, ALL TIMES ARE BASIED ON 1 PLAYER LSRB ON 2 PLAYERS USE 1/2 OF THE TIME 35$ STB PEGGTM,U EGG TIMER LDA WPERSUE,X NBR TO START PERSUING ANDA #$0F STA WSMART LDX #EGPTBL CLEAR EGG PLACEMENT TABLE 4$ CLR ,X+ CMPX #EGLEND & CLEAR LEVEL RANDOMNESS BLO 4$ * LDA #2 NUMBER OF PRE-MATURE EGG HATCHINGS STA PWHCH,U LDA #6 STA PWREGA,U 6 EGGS ON EACH LEDGE 5$ LDY #EGLEDG PUT AN EGG ON EVERY LEDGE (RANDOM LEDGE) LDX #EGLTBL JSR VRAND SELECT RANDOM LEDGE LDB #6*2 MUL 54$ LDB A,X BEQ 55$ DECA BPL 54$ LDA #6-1 BRA 54$ * 55$ INC A,X LEAY A,Y JSR VRAND ROLA GET RANDOM NBR 0 TO 255 LDB ,Y+ SUBB -2,Y MUL ADDA -2,Y LDX #EGPTBL (EGG PLACEMENT TABLE) INC A,X THIS SPOT HAS BEEN TAKEN! JSR CREGG CREATE THE EGG DEC PWREGA,U ANY MORE EGGS LEFT BNE 5$ BR=NO LDA #6 STA PWREGA,U 6 MORE EGGS TO GO 6$ LDX #EGPTBL POINT TO EGG POSITION TABLE JSR VRAND LDB #69*2 MUL REG. A = RANDOM NBR 0-68 7$ LDB A,X IS THIS LOCATION FREE? BEQ 8$ BR=YES INCA NEXT LOCATION CMPA #69 AND WRAP AROUND 69 BLO 7$ CLRA BRA 7$ * 8$ INC A,X THIS SPOT RESERVED JSR CREGG CREATE THE EGG DEC PWREGA,U ANY MORE LEFT? BNE 6$ BR=YES JMP WBEGIN * * TROMSG * TROMSG FCB ($1E+$35)!X$9B,($12+$35)!X$9B,($13+$35)!X$9B,($1D+$35)!X$9B FCB ($0A+$35)!X$9B,($13+$35)!X$9B,($1D+$35)!X$9B,($0A+$35)!X$9B FCB ($14+$35)!X$9B,($19+$35)!X$9B,($1F+$35)!X$9B,($1D+$35)!X$9B FCB ($1E+$35)!X$9B,($2E+$35)!X$9B,($00+$35)!X$9B FCB ($0E+$35)!X$9B,($0F+$35)!X$9B,($1D+$35)!X$9B,($13+$35)!X$9B FCB ($11+$35)!X$9B,($18+$35)!X$9B,($0F+$35)!X$9B,($0E+$35)!X$9B FCB ($0A+$35)!X$9B,($0C+$35)!X$9B,($23+$35)!X$9B,($0A+$35)!X$9B FCB ($21+$35)!X$9B,($13+$35)!X$9B,($16+$35)!X$9B,($16+$35)!X$9B FCB ($13+$35)!X$9B,($0B+$35)!X$9B,($17+$35)!X$9B,($1D+$35)!X$9B FCB ($0A+$35)!X$9B,($0F+$35)!X$9B,($16+$35)!X$9B,($0F+$35)!X$9B FCB ($0D+$35)!X$9B,($1E+$35)!X$9B,($1C+$35)!X$9B,($19+$35)!X$9B FCB ($18+$35)!X$9B,($13+$35)!X$9B,($0D+$35)!X$9B,($1D+$35)!X$9B FCB ($0A+$35)!X$9B,($13+$35)!X$9B,($18+$35)!X$9B,($0D+$35)!X$9B FCB ($2E+$35)!X$9B,($00+$35)!X$9B FCB ($2A+$35)!X$9B,($0D+$35)!X$9B,($2B+$35)!X$9B FCB ($0A+$35)!X$9B,($01+$35)!X$9B,($09+$35)!X$9B FCB ($08+$35)!X$9B,($02+$35)!X$9B,($0A+$35)!X$9B,($21+$35)!X$9B FCB ($13+$35)!X$9B,($16+$35)!X$9B,($16+$35)!X$9B,($13+$35)!X$9B FCB ($0B+$35)!X$9B,($17+$35)!X$9B,($1D+$35)!X$9B,($0A+$35)!X$9B FCB ($0F+$35)!X$9B,($16+$35)!X$9B,($0F+$35)!X$9B,($0D+$35)!X$9B FCB ($1E+$35)!X$9B,($1C+$35)!X$9B,($19+$35)!X$9B,($18+$35)!X$9B FCB ($13+$35)!X$9B,($0D+$35)!X$9B,($1D+$35)!X$9B,($0A+$35)!X$9B FCB ($13+$35)!X$9B,($18+$35)!X$9B,($0D+$35)!X$9B,($2E+$35)!X$9B FCB ($00+$35)!X$9B FCB ($0B+$35)!X$9B,($16+$35)!X$9B,($16+$35)!X$9B,($0A+$35)!X$9B FCB ($1C+$35)!X$9B,($13+$35)!X$9B,($11+$35)!X$9B,($12+$35)!X$9B FCB ($1E+$35)!X$9B,($1D+$35)!X$9B,($0A+$35)!X$9B,($1C+$35)!X$9B FCB ($0F+$35)!X$9B,($1D+$35)!X$9B,($0F+$35)!X$9B,($1C+$35)!X$9B FCB ($20+$35)!X$9B,($0F+$35)!X$9B,($0E+$35)!X$9B,!W($80+$35!X$9B) * * CREATE AN EGG ON THE GROUND * INPUT REG.A, LEDGE POSITION ( A NBR FROM 0-65) * PINTEL,U = START INTELLIGENCE * PEGGTM = TIME TILL HATCHING * NO REGISTERS ARE SAVED * CREGG PSHS A INC NRIDER 1 MORE RIDER (EGG) IN THE GAME SECCR EGGLN2,$80+EGGID PULS A LDX #EGGLNT-4 1$ LEAX 4,X CMPA ,X BHS 1$ LDB #8 PUT AN EGG EVERY 8TH PIXEL POSITION STB PFEET,Y (NO CAUGHT IN THE AIR POINTS) MUL ADDD 2,X NEW X POSITION STD PPOSX,Y ADDD #8-1-1 STD PCOLX,Y MAINTAIN X-DIRECTION COLISION DETECT POINTERS LDB 1,X CLRA STD PPOSY,Y NEW Y POSITION STB PCOLY1,Y MAINTAIN Y-DIRECTION COLISION DETECT POINTERS SUBB #7-1 STB PCOLY2,Y LDD PINTEL,U NEW INTELLIGENCE STD PDECSN,Y LDB PEGGTM,U HATCHING TIME STB PJOYT,Y DEC PWHCH,U ANYMORE EGGS TO HATCH PREMATURLY? BMI 20$ JSR VRAND A RANDOM NUMBER 0-127 MUL GET A RANDOM TIME 1/2 OF THE RANGE NEGA ADDA PJOYT,Y STA PJOYT,Y NEW HATCHING TIME 20$ LDD #0 STD PPICH,Y NO IMAGE TO CLEAR STD PDIST,Y NO BUZZARD SENT AFTER EGG ******** STD PVELY,Y ALL EGGS STRAIGHT UP? CLR PCHASE,Y NOT CHASEING ANYONE LDA #4 4 EGGS BEFORE ENEMY R.I.P.'S STA PEGG,Y LDD ,S++ GET RETURN ADDRESS STD PWRTS,U PCNAP 1 DELAY FOR OUT OF PHASE EGG HATCHING & MONITOR JMP [PWRTS,U] RETURN * * PUT UP AN EGG ON EVERY LEDGE, LEDGE EGG LENGTH DEFINITIONS * FCB 0 EGLEDG FCB 3+5 LEVEL0 - CLIF1L, CLIF1R FCB 3+5+11 LEVEL1 - CLIF2 FCB 3+5+11+7 LEVEL2 - CLIF3U FCB 3+5+11+7+7+5 LEVEL3 - CLIF3L, CLIF3R FCB 3+5+11+7+7+5+8 LEVEL4 - CLIF4 FCB 3+5+11+7+7+5+8+23 LEVEL5 - CLIF5 * * EGG LAND DESCRIPTION * EGGLNT FCB 3,$45-1 CLIF1L FDB $00+9 FCB 3+5,$45-1 CLIF1R FDB $F4-8*(3)+9 FCB 3+5+11,$51-1 CLIF2 FDB $4D-8*(3+5)+9 FCB 3+5+11+7,$81-1 CLIF3U FDB $C1-8*(3+5+11)+9 FCB 3+5+11+7+7,$8A-1 CLIF3L FDB $00-8*(3+5+11+7)+9 FCB 3+5+11+7+7+5,$8A-1 CLIF3R (EXTRA LONG STYLE) FDB $100-8*(3+5+11+7+7)+1 FCB 3+5+11+7+7+5+8,$A3-1 CLIF4 FDB $61-8*(3+5+11+7+7+5)+9 FCB 3+5+11+7+7+5+8+23,$D3-1 CLIF5 FDB $2D-8*(3+5+11+7+7+5+8)+9 FCB $FF,$45-1 CATCH ALL FDB $20-8*(3+5+11+7+7+4+8+23)+9 * * PTERODACTYL DIES * DEATH4 PSHS X,U SAVE (REG.X VICTOR, & REG.U DEAD GUY) LDA #8-1 STA PJOYT,U LDD #PTEKLL SHOW A DEAD PTERODACTYL!!!!!!!!!!!!! STD PJOY,U LDX #SNPTED PTERODACTYL DYING SOUND JSR VSND PULS X,U,PC * * ENEMY DIES * DEATH3 PSHS X,U SAVE (REG.X VICTOR, & REG.U DEAD GUY) IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA PID,U THIS IS A DEAD ENEMY ISN'T IT? CMPA #EMYID BEQ 1$ SWI 1$ ENDIF ???????????? END OF DEBUG ???????????? LDX #SNEDIE ENEMY DIES JSR VSND LDA NSMART BUMP DOWN SMARTNESS VARIABLE SUBA PCHASE,U STA NSMART DEC NENEMY DECREMENT NBR OF ENEMIES ON THE SCREEN IFN DEBUG ???????????? DEBUG PARAMATER ????????? BPL 45$ SWI 45$ ENDIF ???????????? END OF DEBUG ???????????? LDA #$80+EGGID START EGG I.D. LDB PPRI,U EGG IS SAME PRIMARY/SECONDARY PROCESS LDX #STEGG JSR VCUPROC LDD #0 NO BIRD IS AFTER THE LITTLE MAN STD PDIST,Y STD PPICH,Y NO IMAGE TO CLEAR STD PCOLY1,Y & PCOLY2, INHIBIT EARLY COLISION LDD PPOSY,U ADJUST FOR BOTTOM OF EGG FROM SUBB #13-5 BOTTOM OF HORSE (PLUS MIKE STROLL FUDGE STD PPOSY,Y FACTOR TO MISS THE EGG) LDD PPOSX,U ADDD #4 STD PPOSX,Y CLR PFEET,Y NOT CAUGHT IN THE AIR YET! (500 PTS. BONUS) LDD PDECSN,U TRANSFER DECISION TABLE TO EGG CMPD #P6DEC MOST DIFFICULT ENEMY? BHS DE3HRD BR=YES ADDD #P4DEC-P3DEC NEXT LEVEL OF INTELLIGENCE DE3HRD STD PDECSN,Y LDD PVELY,U SAME VELOCITIES STD PVELY,Y LDA PVELX,U STA PVELX,Y CLR PBUMPX,Y RESET BUMPAGE REGISTERS CLR PBUMPY,Y CLR PTIMX,Y CLR PFRAME,Y LDA PEGG,U TRANSFER NBR OF EGG LEFT STA PEGG,Y DEC PEGG,Y YOU CAN ONLY SQUEEZE SO MUCH BLOOD FROM AN EGG BNE 1$ BR=YOU CAN GET MORE EGGS TFR Y,X LDU ,S GET VICTORS WORKSPACE (CURRENTLY DIEING ENEMY) BEQ 1$ JSR EGGSCR SCORE EGG 1$ PULS X,U,PC * PLYEGG EQU * COLISION DETECT WITH THE EGG IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA PID,U THIS BETTER BE THE PLAYER CMPA #$80+PLYID BEQ 12$ SWI 12$ LDA PID,X THIS BETTER BE AN EGG CMPA #$80+EGGID BEQ 13$ SWI 13$ ENDIF ???????????? END OF DEBUG ???????????? JSR EGGSCR COLLECT THE EGGS SCORE VALUE JMP HITEM2 END OF COLISION WITH EGG * * SCORE THE EGG * INPUT REG.U, THE PLAYER'S (VICTOR) WORKSPACE THAT HIT THE EGG * REG.X, THE EGG'S WORKSPACE * OUTPUT - THE EGG'S WORKSPACE TO DISPLAY SCORE VALUE * PJOYT,PPVELX = MESSAGE & COLOR * EGGSCR PSHS X,U LDX #SNEGG EGG & PLAYER COLIDE, IF HERE JSR VSND LDY PDECSN,U FIND INCREMENTING SCORE VALUE FOR EGG LDA DCONST,Y GET SCORES COLOR LDX ,S RESTORE EGG'S WORKSPACE STA PPVELX,X SAVE IT IN EGGS PPVELX AREA LDY DEGGS,Y IF DEBUG ???????????? DEBUG PARAMATER ????????? BNE EGGDB1 SHOULD NEVER BE ZERO SWI ENDIF ???????????? END OF DEBUG ???????????? EGGDB1 LDB ,Y GET NUMBER OF TIME AN EGG WAS HIT CMPB #4 THE MAGIC MAXIMUM NUMBER IS 4 IFE DEBUG ???????????? DEBUG PARAMATER ????????? BHS EGGSMN ELSE BLO 1$ BEQ EGGSMN BR=AT MAXIMUM SWI ERROR, SHOULD NEVER PASS 4 LDB #4-1 ENDIF ???????????? END OF DEBUG ???????????? 1$ INCB EGGSMN STB ,Y STB PRDIR,X SAVE SCORE VALUE IN EGGS PRDIR WORKSPACE ASLB MULTIPLY BY 3 ADDB ,Y LDY #EGGVAL-3 EGG SCORE TABLE LEAY B,Y LDA ,Y GET SCORE VALUE LDX PDECSN,U SCORE IN CORRECT AREA JSR [1,Y] SCORE POINTS WITH PROPER SCORE ROUTINE * LDY ,S CAUGHT IN THE AIR BEFORE BOUNCING? CLR PEGG,Y ASSUME NO ADDITIONAL SCORE LDA PFEET,Y BNE 1$ BR=NO COM PEGG,Y INDICATE ADDITIONAL SCORE LDA #$05 SCORE 500 POINTS JSR SCRHUN (IN PLAYERS WORKSPACE) * 1$ DEC NRIDER 1 LESS ENEMY RIDER IF DEBUG ???????????? DEBUG PARAMATER ????????? BPL 52$ SWI RIDER COUNT SHOULD NEVER BE NEGATIVE 52$ ENDIF ???????????? END OF DEBUG ???????????? LDX ,S LDY PDIST,X WAS A BIRD AFTER THE LITTLE MAN? BEQ EGGWAK BR=NO DEC NENEMY THIS GUY IS NO LONGER AN ENEMY IFN DEBUG ???????????? DEBUG PARAMATER ????????? BPL 234$ SWI 234$ ENDIF ???????????? END OF DEBUG ???????????? LDD #AUTOFF THE BIRD SHOULD GO OFF SCREEN STD PJOY,Y EGGWAK LDD #EGGHIT WAKE-UP AT HIT EGG AREA STD PPC,X LDA #4 STA PNAP,X LDA PID,X NO LONGER COLIDE WITH EGG ANDA #$7F STA PID,X PULS X,U,PC * EGGVAL FCB $52 250 FDB SCRTEN FCB $05 500 FDB SCRHUN FCB $57 750 FDB SCRTEN FCB $10 PEG AT 1,000 FDB SCRHUN * * GRAVITY FOR THE EGG * INPUT REG.B ADDITION TO GRAVITY (VELOCITY) * 1 - MODIFY VELOCITY Y FOR GRAVITY * 2 - CALC NEW POSITIONS * ADDEGG LDB GRAV ADD IN VARIABLE GRAVITY SEX ADDD PVELY,U STD PVELY,U NEW Y VELOCITY ADDD PPOSY+1,U ADD IN FRACTIONAL DISTANCE ADDA PBUMPY,U ADD IN BUMPING REGISTER CLR PBUMPY,U CMPA #CEILNG HIGHEST POSITION ***** BHI ADECEI BR=HAVE NOT HIT CEILING INC PBUMPY,U LDD PVELY,U BPL ADEDWN BR=ALREADY GOING DOWN, DON'T GO UP COMA NEGB SBCA #-1 INVERT VELOCITY STD PVELY,U ADEDWN LDD #CEILNG*256 ADECEI STD PPOSY+1,U STA PCOLY1,U MAINTAIN Y-DIRECTION COLISION DETECT POINTERS SUBA #7-1 STA PCOLY2,U * LDA PVELX,U MODIFY X DIRECTION LDX #FLYX LDD A,X ADDB PVELX+2,U ADD IN FRACTIONAL DISTANCE STB PVELX+2,U ADCA #0 CARRY TO POSITION X TFR A,B NEW DELTA DISTANCE JSR WRAPX ADD IN BUMPAGE REG. & NORMAL WRAP AROUND CMPD #288 NEW WRAP AROUND STYLE (4 TO 288) BLE EGGWR3 ADDD #4-288 EGGWR3 CMPD #4 BGE EGGWR2 ADDD #288-4 EGGWR2 STD PPOSX,U FINAL POSITION ADDD #8-1-1 STD PCOLX,U MAINTAIN COLISION DETECT POINTERS RTS * * EGG FALLING & BOUNCE ROUTINE * STEGG EQU * EGGLPA JSR WEGG LDA EMYTIM ENEMY FALL TIME JSR VNAPTPC JSR CEGG JSR ADDEGG FALL DOWN * JSR EGGBKG REFRESH BACKGROUND LDX PPOSX,U HAS THE EGG LANDED? LDY PPOSY,U LDA LNDXTB,X ORA LNDXTB-2,X ANDA LNDXTB-9,X ANDA LNDYTB,Y ANDA #$7F IGNORE LAVA TROLL BNE EGGBON BR=EGG HIT TOP OF LAND, BOUNCE IT EGGBCK IFN DEBUG ???????????? DEBUG PARAMATER ????????? CMPX PPOSX,U THIS REGISTER UNCHANGED? BEQ 12$ SWI 12$ ENDIF ???????????? END OF DEBUG ???????????? LDX PPOSX,U HAS THE EGG HIT THE BACKGROUND? LDY PPOSY,U NEED THIS IN CASE OF RE-ADJUSTED LANDING LDA BCKXTB,X HIT BACKGROUND CLIFF? ANDA BCKXTB-10,X ANDA BCKYTB+6,Y ANDA BCKYTB+13,Y BEQ 1$ JSR BCKCOL COLLIDE WITH BACKGROUND 1$ LDB PPOSY+1,U CMPB #FLOOR+4 EGG BELOW THE FLOOR? (UGH, WHAT A MESS) BLO EGGLPA BR=NO DEC NRIDER 1 LESS RIDER IN THE GAME IFN DEBUG ???????????? DEBUG PARAMATER ????????? BPL 52$ SWI NBR OF RIDERS LEFT IN GAME SHOULD NOT BE NEG 52$ ENDIF ???????????? END OF DEBUG ???????????? JMP EGGDN2 SCRAMBLED EGG IS FINISHED * EGGBON STA PFEET,U NO MORE EGG IN THE AIR BOUNS POINTS JSR LND18 CORRECT FOR TOP OF CLIFF STB PCOLY1,U RE-ADJUST COLISION POINTERS SUBB #7-1 STB PCOLY2,U LDA PVELX,U BEQ EGGVX0 BR=NO X VELOCITY BMI EGGVXM ADDA #-2 BRA EGGVX0 * EGGVXM ADDA #2 EGGVX0 STA PVELX,U LDD PVELY,U BMI EGGBCK ASRA RORB ASRA RORB COMA NEGB SBCA #-1 STD PVELY,U CMPD #-$0020 BLT EGGBCK BR=STILL TOO FAST TO LAND LDA PVELX,U BNE EGGBCK BR=STILL TOO FAST TO LAND * EGGLND LDA EGGWT GET CURRENT WAIT TIME STA PJOYT,U EGGLN2 JSR WEGG PCNAP 12 12 EGG MAXIMUM, HOPEFULLY MULTIPLEXED LDX PPOSX,U IS THE EGG STILL ON LAND? (BURNING BRIDGE) LDY PPOSY,U LDA LNDXTB,X ORA LNDXTB-2,X ANDA LNDXTB-9,X ANDA LNDYTB+1,Y (FUDGE Y-POSITION FOR STILL ON LAND CHECK) ANDA #$7F IGNORE LAVA TROLL LBEQ STEGG BR=LAND HAS DISAPPEARED, MAKE IT FALL DEC PJOYT,U BNE EGGLN2 INC PJOYT,U SET = 1, LDA NENEMY ENOUGH ENEMIES IN THIS WAVE? CMPA WENEMY BHS EGGLN2 INC NENEMY 1 MORE ENEMY COMMING UP LDX #SNEGGH MAKE THE SOUND OF AN EGG HATCHING JSR VSND LDA #EMYID SIGNAL BUZARD TO START FLYING IN! LDB PPRI,U LDX #STFLY2 JSR VCUPROC CREATE THE BIRD STY PDIST,U A BIRD IS NOW AFTER THE MAN (BIRDS WORKSPACE) STU PDIST,Y & EVEN GIVE THE BIRD TO THE MAN LDA PEGG,U MAINTAIN NBR OF EGGS LEFT IN THE BIRD STA PEGG,Y CLR PCHASE,Y NOT CHASING THE PLAYER CLR PFACE,Y ASSUME BUZZARD COMING IN FROM LEFT HAND SIDE CLR PRDIR,Y ASSUME BIRD NEVER CAME WITHIN SHORT RANGE SCAN LDA #8 STA PVELX,Y AT MAXIMUM WARP SPEED LDD #0 STD PVELY,Y NOT FALLING YET STD PRIDER,Y & WITHOUT A RIDER CLR PBUMPX,Y CLR PTIMX,Y CLR PFRAME,Y LDD BUZARD STD PHORSE,Y GIVE BUZARD IMAGE LDD PDECSN,U DEFAULT INTELLIGENCE STD PDECSN,Y LDD #SEEKE TELL THE DOGIE TO FETCH THE LITTLE MAN STD PJOY,Y LDD PPOSX,U WHERE IS THE LITTLE MAN? SUBD #(ERIGHT-ELEFT)/2 BHI EGGMRT BR=MAN ON RIGHT SIDE OF SCREEN COM PFACE,Y OPPS... COMING FROM RIGHT TO LEFT NEG PVELX,Y LDD #ERIGHT-1 BRA EGGMAN * EGGMRT LDD #ELEFT+1 EGGMAN STD PPOSX,Y LDA PPOSY+1,U FIND LEVEL TO START BIRD LDB #$93+20+2 ASSUME STANDING ON CLIFF5 CMPA #($D3+$A3)/2 ON LEVEL5? BHI 1$ BR=NO ON THIS LEVEL LDB #$52+20+2 ASSUME STANDING ON CLIF4,CLIF3U,CLIF3R,CLIF3L CMPA #($51+$81)/2 ON LEVEL4, LEVEL3, LEVEL2? BHI 1$ BR=NO ON THIS LEVEL LDB #$45 ASSUME ON LEVEL0, LEVEL1 (CLIF1R,CLIF1L,CLIF2) 1$ CLRA STD PPOSY,Y LDX #EGGTBL GET SIDE SHOW FOR THE EGG, WHILE THE BIRD IS IN STX PRDIR,U FLIGHT (PRDIR & PPVELX) BRA EGGNXF START THE SHOW!! * EGGHCH LEAX 3,X NEXT EGG HATCHING FRAME STX PRDIR,U JSR VNAPTPC NAP REG.A TIME EGGNXF JSR CEGG JSR VWR1CLS LDA [PRDIR,U] GET NEXT FRAME OFFSET JSR WEGPAR LDX PRDIR,U GET SHOW TIME POINTER LDA PPOSY+1,U MAINTAIN COLISION DETECT POINTERS STA PCOLY1,U SUBA 1,X STA PCOLY2,U LDA 2,X BNE EGGHCH BR=MORE HATCHING FRAMES TO GO * PCNAP 7 JSR CEGG WRITE PROPER ENEMIES COLOR LDY PDECSN,U LDY [DPLYR,Y] LEAY 24,Y POINT TO STANDING PLAYER STY PPICH,U JSR WRREGY EGGLLP PCNAP 8 WAIT UNTILL BUZZARD COMES OR KILLED BY PLAYER LDY PPICH,U JSR WRREGY BRA EGGLLP * EGGBKG LDX PPOSX,U REFRESH BACKGROUND FROM THE EGG LDA BCKXTB,X RE-PLOT BACKGROUND LDX PPOSY,U ANDA BCKYTB+5+6,X ORA BCKRFS STA BCKRFS RTS * EGGHIT IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA PID,U CMPA #EGGID IS THIS AN EGG? BEQ 1$ BR=YES SWI 1$ ENDIF ???????????? END OF DEBUG ???????????? JSR CEGG JSR EGGBKG REFRESH BACKGROUND LDA GOVER ATTRACT MODE EGG SCORING? BLE 10$ BR=NO JSR ATTEGG ATTRACT MODES CYCLING EGG 10$ PCNAP 2 JSR EGAREA CALC A ACCEPTABLE VISABLE SCREEN ADDRESS LDA #1 STA PLAVT,U INITIAL DELAY = NO TIME LDX [PDUMMY] GET 2ND PROCESS IN THE LIST 20$ LDX PLINK,X NEXT PROCESS BEQ 100$ BR=END SEARCH FOR OVERLAPPING SCORES LDA PID,X AN EGG SCORE? CMPA #SCRID BNE 20$ LDD PPOSY,U WITHIN 6 PIXELS IN Y DIRECTION? SUBD PPOSY,X BPL 31$ COMA NEGB SBCA #-1 31$ SUBD #6 BGE 20$ BR=NO, NOT EVEN CLOSE LDD PPOSX,U WITHIN 16 PIXELS IN X DIRECTION? SUBD PPOSX,X BPL 32$ COMA NEGB SBCA #-1 32$ SUBD #16 BGE 20$ BR=NO, NOT EVEN CLOSE 33$ LDA PJOYT,X A FASTTER EGG DISPLAY TIME? CMPA #16/2 BLO 34$ BR=NO ONLY A FEW TICKS LEFT LDA #16/2 YES, SPEED UP THE DISPLAYING SCORE TIME STA PJOYT,X LDY PLINK,X LDB PID,Y CAUGHT EGG I.D.? CMPB #CATID BNE 34$ STA PJOYT,Y YES, THIS TIME IS ALSO REDUCED 34$ ASLA ADDA PLAVT,X ADD IN DELAY FACTOR CMPA PLAVT,U IS THIS TOTAL TIME LARGER? BLO 20$ BR=NO, CURRENT DELAY IS THE LONGEST STA PLAVT,U BRA 20$ * 100$ LDA #SCRID EGG SCORES I.D. STA PID,U LDA #60/2 1 SECOUND DISPLAY COUNT STA PJOYT,U 101$ PCNAP 1 DEC PLAVT,U BNE 101$ LDA PEGG,U DISPLAY THE SCORE IN THE AIR? BEQ 111$ BR=NO LDX #112$ DISPLAY THE SCORE IN THE AIR LDD #CATID*256+$FF JSR VCUPROC LDD #MSG500*256+EGGCOL*$11 GET SCORE VALUE & COLOR STD PRDIR,Y LDD PPOSX,U STD PPOSX,Y LDD PPOSY,U SUBB #6 STD PPOSY,Y LDD PSTATE,U MESSAGE LOCATION SUBB #6 STD PSTATE,Y LDA PJOYT,U CURRENT DISPLAY TIME STA PJOYT,Y CLR PLAVT,Y WITH NO DELAYS 111$ PCNAP 2 112$ BRA EGGSC2 * * PUT UP SCORE VALUE IN THE AIR * INPUT: PPOSX - X PIXEL POSITION * PPOSY - Y PIXEL POSITION * PRDIR,PPVELX - MESSAGE NBR & COLOR * SCRAIR LDA #60/2 1 SECOUND COUNT STA PJOYT,U BSR EGAREA CALC A ACCEPTABLE VISABLE SCREEN ADDRESS EGGSC2 LDX PSTATE,U GET AREA ON SCREEN TO PUT MESSAGE LDD PRDIR,U GET PRDIR (MESSAGE NUMBER) & PPVELX (COLOR) DEC PJOYT,U BEQ EGGSC3 JSR OUTP35 PCNAP 2 BRA EGGSC2 * EGGSC3 CLRB ERASE SCORE JSR OUTP35 JSR EGGBKG RE-PLOT BACKGROUND IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA PID,U CMPA #EGGID IS THIS AN EGG? BEQ 1$ BR=YES CMPA #SCRID IS THIS AN SCORED EGG? BEQ 1$ BR=YES CMPA #CATID IS THIS A CAUGHT SCORED EGG? BEQ 1$ BR=YES CMPA #PTEID IS THIS AN PTERODACTYL? BEQ 1$ BR=YES SWI 1$ ENDIF ???????????? END OF DEBUG ???????????? JMP VSUCIDE * EGGDON IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA PID,U CMPA #EGGID IS THIS AN EGG? (END OF HATCH) BEQ 1$ BR=YES CMPA #$80+EGGID IS THIS AN EGG? (ENTERING LAVA) BEQ 1$ BR=YES SWI 1$ ENDIF ???????????? END OF DEBUG ???????????? JSR CEGG EGGDN2 JMP VSUCIDE * * CALCULATE VISABLE EGG SCREEN AREA * EGAREA LDD PPOSX,U CALC SCREEN ADDRESS ANDB #$FE UNFLAVOR AREA TO PUT SCORE STB PPOSX+1,U RORA RORB TFR B,A LDB PPOSY+1,U SUBB #5 RAISE THE SCORE (BASED ON TOP LEFT CORNER) CMPB #$D3-1-4 MINIMUM LOWEST POINT IS TOP OF CLIFF5 BLS EGGPYM BR=OK AREA LDB #$D3-1-4 EGGPYM CMPA #(288-16)/2 MESSAGE WILL NOT WRAP AROUND BLS EGGPXM LDA #(288-16)/2 EGGPXM STD PSTATE,U STB PPOSY+1,U CORRECTED AREA FOR DISPLAYING SCORE TFR A,B CLRA ASLB ROLA STD PPOSX,U RTS * * ATTRACT MODES CYCLING EGG SCORE * ATTEGG LDX #20$ ATTRACT MODE EGG SCORE CYCLE LDD #EGGID*256+$FF JSR VCUPROC LDD PPOSX,U STD PPOSX,Y LDD PPOSY,U STD PPOSY,Y LDD PRDIR,U STD PRDIR,Y RTS * 10$ BSR ATTEGG JMP SCRAIR 20$ PCNAP 60+8 INC PRDIR,U NEXT MESSAGE NUMBER LDA PRDIR,U CMPA #4 BLS 10$ JMP VSUCIDE * WEGG JSR VWR1CLS LDA PVELX,U BPL WEGRIT LDY #EGFLFT EGG FALLING TO THE LEFT BRA WEGY * WEGRIT LDY #EGFRIT ASSUME EGG FALLING TO THE RIGHT WEGY LDD PVELY,U HOW FAST IS EGG FALLING? BMI WEGVM BR=EGG FALLING UP??? SUBD #$0080 BGT WEGD2 BR=NOT THIS SLOW WEGUP LDA ,Y GET FRAME LEVEL FRAME BRA WEGPAR * WEGD2 LDA 2,Y BRA WEGPAR * WEGVM ADDD #$0080 BGT WEGUP WEGD3 LDA 1,Y WEGPAR LDY EGGI LEAY A,Y STY PPICH,U JSR WRHOR2 JMP CLIPER CLIP THE EGG AS NEEDED * * EGG ANIMATION TABLE * EGFLFT FCB 0,12,6 FALLING LEFT EGFRIT FCB 0,6,12 FALLING RIGHT EGGTBL FCB 6,6,7 WIGGLE LEFT FCB 0,6,3 WIGGLE UP FCB 12,6,7 WIGGLE RIGHT FCB 0,6,7+60 WIGGLE UP & PAUSE FCB 18,6,7 HATCH 1 FCB 24,11,7 HATCH 2 FCB 30,11,7 HATCH 3 FCB 36,11,0 HATCH 4 * * BUZARD SEEKING MAN * PDIST IS THE MANS WORKSPACE FOR PPOSX & PPOSY & HANDSHAKING * SEEKE LDY PDIST,U GET THE MANS WORKSPACE CLRB LDA PPOSY+1,Y HOW ABOUT THE Y LEVEL CMPA PPOSY+1,U BEQ SEEKF1 BLO SEEKBL BR=BELOW TARGETED MAN LDB PVELY,U NOT TOO FAST A DROP! CMPB #2 BGE SEEKBL LDX PPOSX,U IS A CLIFF IN THE WAY?? LDA BCKXTB+18,X ASSUME FLYING TO THE RIGHT LDB PVELX,U BPL SEEKC2 BR=ASSUMPTION CORRECT LDA BCKXTB-18,X LOOK IN OPPOSITE DIRECTION SEEKC2 LDX PPOSY,U CLRB ASSUME NO FLAP ANDA BCKYTB,X ANDA #$08 CLIF3U IS A BITCH! BEQ SEEKF1 BR=NO CLIFF IN THE WAY SEEKBL CLRB LDA PVELY,U CMPA #-1 MAXIMUM UPWARD VELOCITY (MINIMIZE OVERSHOOT) BLT SEEKF1 LDD #SEEKF2 FLAP ROUTINE STD PJOY,U LDA #4 STA PJOYT,U LDB #1 FLAP WINGS, YOU ARE BELOW THE MAN SEEKF1 PSHS B LDD PPOSX,Y WHICH DIRECTION TO FACE? ADDD #-12 SUBD PPOSX,U BPL SEEKFR BR=LONG RANGE REG.X ADDD #8+12 BMI SEEKFL BR=LONG RANGE REG.X SEEKFS LDA #1 STA PRDIR,U THE BIRD CAME WITHIN SHORT RANGE SENSORS LDX PSTATE,U MAKE SURE BIRD IS NOT TRAPPED ON ANOTHER CLIFF BEQ SEEKAR BR=SEEKING FROM THE AIR LDA PPOSY+1,Y CMPB PPOSY+1,U BHI SEEKFJ BR=ON HIGHER CLIFF LDA PVELX,U FINALLY STOPPED?? BEQ MOUNTM GOT THE MAN!!! LDA PVELX,U SLOW DOWN!!! BMI SEEKR BRA SEEKL * SEEKAR LDA PVELX,U SLOW DOWN, BUT DO NOT REVERSE BMI SEEKL3 BGT SEEKR3 LDA PFACE,U SPEED =0, USE DIRECTION FACING FOR DIRECTION BMI SEEKL BRA SEEKR * SEEKL3 CMPA #-2 BEQ SEEKF0 BR=SLOWEST SPEED BRA SEEKR HERE IF GOING TO THE LEFT TOO FAST * SEEKR3 CMPA #2 BEQ SEEKF0 BR=SLOWEST SPEED BRA SEEKL HERE IF GOING TO THE RIGHT TOO FAST * SEEKFJ LDA PVELX,U WRONG CLIFF TRY AGAIN BMI SEEKL2 BRA SEEKR2 * SEEKFL LDA PRDIR,U DID BIRD EVER COM IN SHORT RANGE AREA? BNE SEEKS SEEKL2 LDA PVELX,U BMI SEEKF0 SEEKL LDA #-1 PULS B STD CURJOY RTS * SEEKFR LDA PRDIR,U DID BIRD EVER COM IN SHORT RANGE AREA? BNE SEEKS SEEKR2 LDA PVELX,U BGT SEEKF0 SEEKR LDA #1 PULS B STD CURJOY RTS * SEEKF0 CLRA PULS B STD CURJOY RTS * SEEKS LDD PPOSX,Y SUBD PPOSX,U WHICH WAY IS THE SHORTEST WAY TO TRAVEL? BMI SEEKSM SEEKSP CMPD #(ERIGHT-ELEFT)/2 CHECK FOR WRAP AROUND BLT SEEKSD SUBD #ERIGHT-ELEFT UNRAP THE DIFFERENCE BRA SEEKSD * SEEKSM CMPD #-(ERIGHT-ELEFT)/2 BGT SEEKSD ADDD #ERIGHT-ELEFT SEEKSD TSTA BMI SEEKL2 BRA SEEKR2 * MOUNTM PULS B RESTORE STACK LDD #MOUNLP STD PJOY,U LDA #5+1 WAIT A BIT STA PJOYT,U MOUNLP DEC PJOYT,U BEQ MOUNRI BR=TIME FOR RIDER LDA #1 RUN TO THE RIGHT FOR YOUR LIFE LDB PFACE,U BPL MOUNRN NEGA MOUNRN CLRB STD CURJOY RTS * MOUNRI INC NSMART JUST GOT SMARTER IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA PCHASE,U DEBUG, BETTER BE ZERO BEQ 1$ SWI 1$ ENDIF ???????????? END OF DEBUG ???????????? INC PCHASE,U LDX #SNMOUN MAKE A MOUNT THE BUZZARD SOUND JSR VSND LDX PDIST,U KILL EGG ROUTINE LDD #EGGDON STD PPC,X LDA #1 WAKE-UP IMMEDIATELY STA PNAP,X LDA PID,X NO-LONGER COLISIONABLE ANDA #$7F STA PID,X LDX PDECSN,U LDA GOVER GAME OVER? BNE 2$ BR=NO LDD DJOY,X YES, SELECT A DUMMIE DUM DUM BIRD BRA 3$ * 2$ LDD DSMART,X SELECT PROPER JOYSTICK ROUTINE 3$ STD PJOY,U JMP PLYLI2 ENEMY RE-INCARNATED!!! (WHO CAES ABOUT STACK) * SEEKF2 DEC PJOYT,U FLAP ROUTINE BEQ SEEKF3 LDD #1 STD CURJOY RTS * SEEKF3 LDD #SEEKE STD PJOY,U LDD #0 STD CURJOY RTS * * RADDR * RADDR JSR VRAND ROLA LDB #$10 MUL ORA #$A0 TFR D,X INC ,X RTS * * LINE TRACKING INTELLIGENCE * LINET LDA NSMART GET NUMBER OF SMART ENEMIES CMPA WSMART BELOW MINIMUM INTELLIGENCE? BLO LNTSMT BR=YES, GET SMARTER DEC PLAVT,U BGT 1$ LDA LNTLAV LINE TRACKING LAVA TROLL LOOKER STA PLAVT,U LDX PPREV LAVA TROLL AFTER ME? LDA PID,X CMPA #LAVID BEQ LNTUP 1$ LDA #AOFFL1 ASSUME NEAR TRACKING LINE 1 LDB PPOSY+1,U CMPB #AOFFL1+AOFFUD BLO LNTTRK BR=TRACK ON LINE 1 LDA #AOFFL2 ASSUME NEAR TRACKING LINE 2 CMPB #AOFFL2+AOFFUD BLO LNTTRK BR=TRACK ON LINE 2 LDA #AOFFL3 ASSUME NEAR TRACKING LINE 3 LNTTRK CLRB ASSUME ON TRACKING LINE SUBA PPOSY+1,U ABOVE OR BELOW LINE? BPL LNTFLP BR=AROUND THE LINE LDA PVELY,U ALREADY GOING UP? BMI LNTFLP BR=YES, SO WAIT TILL NEXT TIME LNTUP LDD #LNTOFP GET OFF GROUND OR JUST FLAP STD PJOY,U LDB #1 LNTFLP TST PFACE,U MOVE IN DIRECTION OF FACING BMI LNTLF2 LDA #1 STD CURJOY RTS * LNTLF2 LDA #-1 STD CURJOY RTS * LNTOFP LDD #LINET STD PJOY,U CLRB BRA LNTFLP * LNTSMT INC NSMART JUST GOT SMARTER IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA PCHASE,U DEBUG, BETTER BE ZERO BEQ 1$ SWI 1$ ENDIF ???????????? END OF DEBUG ???????????? INC PCHASE,U LDX PDECSN,U LDX DSMART,X STX PJOY,U NEW SMARTS JMP ,X START THE SMARTS IFE DEBUG * * AND THE EVER POPULAR COPYRIGHT MESSAGE * FCC 'JOUST (C) 1982 WILLIAMS ELECTRONICS INC.' ENDIF * * BOUNDAR * DYLEN EQU $14-6 * BOUNDR DEC PLAVT,U BGT 1$ LDA LNTLAV LINE TRACKING LAVA TROLL LOOKER STA PLAVT,U LDX PPREV LAVA TROLL AFTER ME? LDA PID,X CMPA #LAVID BEQ BODN1A 1$ JSR SELPLY SELECT TARGETED PLAYER BEQ BOLEVV BR=NO PLAYERS HERE LDD PPOSY,X SUBD PPOSY,U LBLT BOUNUP BOUNDN CMPD BODNRG #DYLEN LONG OR SHORT RANGE SEEK BLT BOLEVV BR=SHORT RANGE SEEK BODN LDD BODNDI -DYLEN*256 SET DISTANCE TO GO DOWN STD PDIST,U LDD #BODN1 FLAP WINGS STD PJOY,U BRA BODN10 * BOLEVV JMP BOLEV * BODN1 LDD PSTATE,U ON THE GROUND? BNE BOBRAIN BR=YES, CANNOT GO DOWN ANY FURTHER LDD PVELY,U GOING DOWN? BMI BOUP1B BODN1B BR=NO ADDD PDIST,U BPL BOBRAIN BACK TO THE BRAINS STD PDIST,U BODN10 LDD PVELY,U BODN11 SUBD BODNVY #$0100 FALLING NOT TOO FAST? BMI BOUP1B BODN1B BR=NO BODN1A LDD #BODN2 FLAP WINGS STD PJOY,U LDA #2 BRA BOUP12 ******** STA PJOYT,U WING DOWN TIME ******** LDB #$01 ******** BRA BODIRL * BODN2 LDD PVELY,U BMI BODN22 ADDD PDIST,U BPL BOBRAIN BACK TO THE BRAINS STD PDIST,U BODN22 LDB #1 ASSUME WINGS DOWN DEC PJOYT,U WING DOWN TIME UP?? BGT BODN2A BR=NO LDD #BODN1 STD PJOY,U CLRB WINGS UP BODN2A BRA BODIRL * BOBRAIN JMP BOUNDR * BOUNUP CMPD BOUPRG #-DYLEN LONG OR SHORT RANGE SEEK BGT BOLEV BR=SHORT RANGE SEEK BOUP LDX PPOSX,U CLIFF IN THE WAY?? LDY PPOSY,U LDA BCKXTB,X ANDA BCKYTB-DYLEN,Y BNE BOLEV BR=YES LDD BOUPDI #DYLEN*256 NO, SET DISTANCE TO GO UP STD PDIST,U BRA BOUP1A * BOUP1 LDD PVELY,U GOING UP? BPL BOUP11 BR=NO ADDD PDIST,U BMI BOBRAIN BACK TO THE BRAINS STD PDIST,U BOUP11 DEC PJOYT,U TIME TO FLAP WINGS BGT BOUP1B BR=NO BOUP1A LDD #BOUP2 FLAP WINGS STD PJOY,U LDA BOUPWD #2 BOUP12 STA PJOYT,U WING DOWN TIME LDB #$01 BRA BODIRL * BOUP1B CLRB WINGS UP BODIRL LDA PPOSY+1,U BELOW CLIF5? CMPA #$D3 BLO BODIR BR=NO LDA PVELY,U ALREADY GOING UP? LBPL BOLAVA BR=NO, GO UP FAST BEFORE THE LAVA GETS ME!! * BODIR LDA PFACE,U BMI BODN1C LDA #1 STD CURJOY RTS * BODN1C LDA #-1 STD CURJOY RTS * BOUP2 LDD PVELY,U BPL BOUP22 ADDD PDIST,U BMI BOBRAIN BACK TO THE BRAINS STD PDIST,U BOUP22 LDB #1 ASSSUME WINGS DOWN DEC PJOYT,U WING DOWN TIME UP?? BGT BOUP2A BR=NO LDA BOUPWU #8 STA PJOYT,U LDD #BOUP1 STD PJOY,U CLRB WINGS UP BOUP2A BRA BODIRL * BOBRA2 JMP BOUNDR BACK TO THE BRAINS * BOLEV LDD #BOLEV1 LEVEL FLIGHT STD PJOY,U LDD PPOSY,U REMEMBER LINE TO TRACK STD PDIST,U LDA PVELX,X & PLAYERS VELOCITY STA PPVELX,U LDA BOLETM #20+1 TIME UNTIL NEXT DECISION STA PJOYT,U BOLEV1 DEC PJOYT,U BLE BOBRA2 LDB PPOSY+1,U CMPB #$D3 BELOW CLIF5? BLO 3$ BR=NO JSR SELPLY SELECT TARGETED PLAYER BEQ BOFAST BR=NO PLAYERS HERE, GO UP LDD PPOSX,X IS PLAYER CLOSE BY? ADDD #3*18+9 CMPD PPOSX,U BLT BOFAST BR=NO, GO UP ADDD #-2*(3*18+9) CMPD PPOSX,U BGT BOFAST BR=GO UP FAST BEFORE THE LAVA GETS ME!! * IF HERE, LET HIM LOURE ME INTO LAVA 3$ LDA PVELY,U FALLING? BMI BOLEVA BR=NO LDB PDIST+1,U ABOVE TRACKING LINE CMPB PPOSY+1,U BLO BOLEVA BR=YES BOFAST LDD #BOLEV2 FAST EXIT UP STD PJOY,U LDB #$01 FLAP WINGS BRA BOLEVB * BOLEV2 LDD #BOLEV1 STD PJOY,U BOLEVA CLRB WINGS UP BOLEVB LDA PPVELX,U DO NOT COPY PLAYERS MOVES TOO OFTEN CMPA PVELX,U BNE BODIR3 DEC PRDIR,U BMI BODIR3 CLR PRDIR,U COM PFACE,U TRY THE OTHER DIRECTION BODIR3 JMP BODIR * BOLAV1 LDA PPOSY+1,U CMPA #$D3 BELOW CLIF5? BLO BOLAV4 BR=NOT ANY MORE LDA PVELY,U YES, GOING UP? BMI BOLAV4 BR=YES, IGNORE LAVA BOLAVA LDD #BOLAV2 STD PJOY,U LDB #1 BRA BODIR3 * BOLAV2 LDD #BOLAV1 STD PJOY,U CLRB BRA BODIR3 * BOLAV4 LDX PDECSN,U BACK TO THE BRAINS JMP [DSMART,X] * * ADVANCED BOUNDAR (HUNTER) * B2YLEN EQU $14-6 B2XLEN EQU 27+4 * B2UNDR DEC PLAVT,U BGT 1$ LDA LNTLAV LINE TRACKING LAVA TROLL LOOKER STA PLAVT,U LDX PPREV LAVA TROLL AFTER ME? LDA PID,X CMPA #LAVID BEQ B2DN1A 1$ JSR SELPLY SELECT TARGETED PLAYER BEQ B2LEVV BR=NO PLAYERS HERE LDD PPOSY,X SUBD PPOSY,U LBLT B2UNUP B2UNDN SUBD HUDNRG #B2YLEN LONG OR SHORT RANGE SEEK BLT B2LEVV BR=SHORT RANGE SEEK * B2DN B2DNST LDD HUDNDI #-B2YLEN*256 NO, SET DISTANCE TO GO DOWN STD PDIST,U LDD #B2DN2 FLAP WINGS STD PJOY,U BRA B2DN1B * B2LEVV JMP B2LEV * B2DN1 LDD PSTATE,U ON THE GROUND? BNE B2BRAIN BR=YES LDD PVELY,U GOING DOWN? BMI B2DN1B BR=NO ADDD PDIST,U BPL B2BRAIN BACK TO THE BRAINS STD PDIST,U LDD PVELY,U B2DN11 SUBD HUDNVY #$0200 FALLING NOT TOO FAST? BMI B2DN1B BR=NO B2DN1A LDD #B2DN2 FLAP WINGS STD PJOY,U LDA #2 STA PJOYT,U WING DOWN TIME B2DN2B LDB #$01 JMP B2DIRL * B2DN2 LDD PVELY,U BMI B2DN22 ADDD PDIST,U BPL B2BRAIN BACK TO THE BRAINS STD PDIST,U B2DN22 LDB #1 ASSUME WINGS DOWN DEC PJOYT,U WING DOWN TIME UP?? BGT B2DIR2 BR=NO LDD #B2DN1 STD PJOY,U B2DN1B CLRB WINGS UP B2DIR2 JMP B2DIRL * B2BRAIN JMP B2UNDR * B2UNUP CMPD HUUPRG #-B2YLEN LONG/SHORT RANGE SEEK BGT B2LEVV BR=SHORT RANGE SEEK B2UP LDX PPOSX,U CLIFF IN THE WAY?? LDY PPOSY,U LDA BCKXTB,X ANDA BCKYTB-B2YLEN,Y LBNE B2UP3 BR=YES B2UPST LDD HUUPDI #B2YLEN*256 NO, SET DISTANCE TO GO UP STD PDIST,U BRA B2UP2D * B2UP2 LDD PVELY,U BPL B2UP22 ADDD PDIST,U BMI B2BRAIN BACK TO THE BRAINS STD PDIST,U B2UP22 LDB #1 ASSSUME WINGS DOWN DEC PJOYT,U WING DOWN TIME UP?? BGT B2UP2A BR=NO B2UP2D LDA HUUPWU #8 STA PJOYT,U LDD #B2UP1 STD PJOY,U CLRB WINGS UP B2UP2A BRA B2DIRL * B2LEV LDD #B2LEV1 LEVEL FLIGHT STD PJOY,U LDD PPOSY,U REMEMBER LINE TO TRACK STD PDIST,U LDA PVELX,X & PLAYERS VELOCITY STA PPVELX,U LDA HULETM #20+1 TIME UNTIL NEXT DECISION STA PJOYT,U * B2LEV1 DEC PJOYT,U LBLE B2BRA2 LDA PVELY,U FALLING? LBMI B2LEVA BR=NO LDB PPOSY+1,U YES, BELOW CLIF5? CMPB #$D3 BLO 3$ BR=NO JSR SELPLY SELECT TARGETED PLAYER BEQ B2FAST BR=NO PLAYERS HERE, GO UP LDD PPOSX,X IS PLAYER CLOSE BY? ADDD #2*18+9 CMPD PPOSX,U BLT B2FAST BR=NO, GO UP ADDD #-2*(2*18+9) CMPD PPOSX,U BGT B2FAST BR=GO UP FAST BEFORE THE LAVA GETS ME!! * IF HERE, LET HIM LOURE ME INTO LAVA 3$ LDB PDIST+1,U AB2VE TRACKING LINE CMPB PPOSY+1,U LBLO B2LEVA BR=YES B2FAST LDD #B2LEV2 STD PJOY,U LDB #$01 FLAP WINGS * B2LE11 LDA PPVELX,U DO NOT COPY PLAYERS MOVES TOO OFTEN CMPA PVELX,U BNE B2DIR DEC PRDIR,U BMI B2DIR CLR PRDIR,U COM PFACE,U TRY THE OTHER DIRECTION BRA B2DIR * * B2DIRL LDA PPOSY+1,U BELOW CLIF5? CMPA #$D3 BLO B2DIR LDA PVELY,U GOING DOWN? BMI B2DIR BR=NO JMP BOLAVA STANDARD WAY TO AVOID THE LAVA * B2DIR LDA PVELX,U WHICH DIRECTION GOING? BEQ B2DIRA BPL B2DILR PSHS B LDD PVELY,U SEEKING DESTINATION CLIFF ASLB ROLA ASLB ROLA ASLB ROLA PULS B LDY PPOSY,U LDX PPOSX,U LEAY A,Y LDA BCKXTB-B2XLEN,X ANDA BCKYTB,Y BEQ B2DIRA BR=YES CLR PFACE,U FACE RIGHT BRA B2DICL * B2DILR PSHS B LDD PVELY,U ASLB ROLA ASLB ROLA ASLB ROLA PULS B LDY PPOSY,U LDX PPOSX,U LEAY A,Y LDA BCKXTB+B2XLEN,X ANDA BCKYTB,Y BEQ B2DIRA BR=YES LDA #-1 STA PFACE,U FACE LEFT B2DICL LDD #B2AV SLOW DOWN!!! GOING INTO A CLIFF STD PJOY,U LDA #8 STA PJOYT,U LDB #1 * B2DIRA LDA PBUMPX,U FACE, BUMPED DIRECTION BEQ B2FDIR STA PFACE,U B2FDIR LDA PFACE,U BMI B2DN1C LDA #1 STD CURJOY RTS * B2DN1C LDA #-1 STD CURJOY RTS * * B2LEV2 LDD #B2LEV1 STD PJOY,U B2LEVA CLRB WINGS UP JMP B2LE11 * B2BRA2 JMP B2UNDR BACK TO THE BRAINS * B2UP1 LDD PVELY,U GOING DOWN? BPL B2UP11 BR=NO ADDD PDIST,U BMI B2BRA2 BACK TO THE BRAINS STD PDIST,U B2UP11 DEC PJOYT,U TIME TO FLAP WINGS BGT B2UP1B BR=NO INC PJOYT,U LDD PVELY,U CMPD HUUPVY #-$0100 BLT B2UP1B B2UP1A LDD #B2UP2 FLAP WINGS STD PJOY,U LDA HUUPWD #2 STA PJOYT,U WING DOWN TIME LDB #$01 JMP B2DIRL * B2UP1B CLRB WINGS UP JMP B2DIRL * B2AV CLRB DEC PJOYT,U BGT B2DIRA JMP B2UNDR * B2UP3 LDD #B2UP3A LEVEL FLIGHT, READY TO GO UP STD PJOY,U LDD PPOSY,U REMEMBER LINE TO TRACK STD PDIST,U LDA #20+1 TIME UNTIL NEXT DECISION STA PJOYT,U * B2UP3A LDX PPOSX,U CLIFF IN THE WAY?? LDY PPOSY,U LDA BCKXTB,X ANDA BCKYTB-B2YLEN,Y LBEQ B2UPST DEC PJOYT,U LBLE B2UNDR LDD PVELY,U FALLING FAST ENOUGH? ADDD #-$0040 BMI B2UP3B BR=NO LDB PDIST+1,U ABOVE TRACKING LINE CMPB PPOSY+1,U BLO B2UP3B BR=YES LDD #B2UP4 STD PJOY,U LDB #$01 FLAP WINGS JMP B2DIRA * B2UP4 LDD #B2UP3A STD PJOY,U B2UP3B CLRB FLAP WINGS JMP B2DIRA * * SHADOW LORD * SHYLEN EQU $14-6 SHXLEN EQU 27+4 * SHADOW DEC PLAVT,U BGT 1$ LDA LNTLAV LINE TRACKING LAVA TROLL LOOKER STA PLAVT,U LDX PPREV LAVA TROLL AFTER ME? LDA PID,X CMPA #LAVID BEQ SHUPST 1$ JSR SELPLY SELECT TARGETED PLAYER LBEQ SHLEV BR=NO PLAYERS HERE LDD PPOSY,X SUBD PPOSY,U LBLT SHUNUP SHUNDN SUBD SHDNRG #SHYLEN LONG OR SHORT RANGE SEEK BLT SHLEP BR=SHORT RANGE SEEK * SHDN LDD #SHDN2 NO FLAPING WINGS STD PJOY,U CLRB WINGS UP LDA PPOSY+1,U BELOW CLIF5? CMPA #$D3 BLO 3$ BR=NO LDA PVELX,U FALLING? BMI 3$ BR=NO INCB FLAP YOUR WINGS!!!, HOT LAVA BELOW 3$ JMP SHDIRB * SHUNUP CMPD SHUPRG #-SHYLEN LONG OR SHORT RANGE SEEK BGT SHLEP BR=SHORTEST RANGE SEEK LDX PPOSX,U CLIFF IN THE WAY?? LDY PPOSY,U LDA BCKXTB,X ANDA BCKYTB-SHYLEN,Y LBNE SHUP3 BR=YES SHUPST LDD #SHUP1 STD PJOY,U SHUP0 CLRB WINGS UP JMP SHDIRB * SHUP1 LDD #SHADOW FLAP WINGS STD PJOY,U LDD PVELY,U CMPD SHUPVY #-$0200 BLT SHUP0 LDB #$01 JMP SHDIRB * SHLEP LDD #SHLEP1 LEVEL FLIGHT STD PJOY,U LDB PPOSY+1,X PLAYERS LINE TO TRACK STB PDIST+1,U LDA PVELX,X & PLAYERS VELOCITY STA PPVELX,U LDA SHUPTM #8+1 TIME UNTIL NEXT DECISION STA PJOYT,U * SHLEP1 DEC PJOYT,U LBLE SHBRA2 LDB PPOSY+1,U CMPB #$D3 GETTING TOO CLOSE TO THE LAVA? BLO 2$ BR=YES LDA PVELY,U ALREADY GOING UP? BPL SHFAST BR=NO 2$ CMPB PDIST+1,U ABOVE TRACKING LINE BLS SHLEPA BR=YES SHFAST LDD #SHLEP2 STD PJOY,U LDB #$01 FLAP WINGS BRA SHLEPB * SHLEP2 LDD #SHLEP1 STD PJOY,U SHLEPA CLRB WINGS UP SHLEPB LDA PPVELX,U DO NOT COPY PLAYERS MOVES TOO OFTEN CMPA PVELX,U LBNE SHDIRA DEC PRDIR,U LBMI SHDIRA CLR PRDIR,U COM PFACE,U TRY THE OTHER DIRECTION JMP SHDIRA * SHLEV LDD #SHLEV1 LEVEL FLIGHT STD PJOY,U LDB PPOSY+1,U REMEMBER LINE TO TRACK STB PDIST+1,U LDA SHLETM #8+1 TIME UNTIL NEXT DECISION STA PJOYT,U * SHLEV1 DEC PJOYT,U LBLE SHBRA2 LDA PVELY,U FALLING? LBMI SHLEVA BR=NO LDB PDIST+1,U ABOVE TRACKING LINE CMPB PPOSY+1,U LBLO SHLEVA BR=YES LDD #SHLEV2 STD PJOY,U LDB #$01 FLAP WINGS * SHDIR LDA PPOSY+1,U BELOW CLIF5? CMPA #$D0 BLO 1$ BR=NO LDA PVELY,U FALLING DOWN? LBPL BOLAVA BR=YES, AVOID THE LAVA 1$ LDA PVELX,U WHICH DIRECTION GOING? BEQ SHDIRA BPL SHDILR PSHS B LDD PVELY,U SEEKING DESTINATION CLIFF ASLB ROLA ASLB ROLA ASLB ROLA PULS B LDY PPOSY,U LDX PPOSX,U LEAY A,Y LDA BCKXTB-SHXLEN,X ANDA BCKYTB,Y BEQ SHDIRA BR=YES CLR PFACE,U FACE RIGHT BRA SHDICL * SHDILR PSHS B LDD PVELY,U ASLB ROLA ASLB ROLA ASLB ROLA PULS B LDY PPOSY,U LDX PPOSX,U LEAY A,Y LDA BCKXTB+SHXLEN,X ANDA BCKYTB,Y BEQ SHDIRA BR=YES LDA #-1 STA PFACE,U FACE LEFT SHDICL LDD #SHAV SLOW DOWN!!! GOING INTO A CLIFF STD PJOY,U LDA SHCLTM #8 STA PJOYT,U LDB #1 * SHDIRA LDA PBUMPX,U FACE, BUMPED DIRECTION BEQ SHFDIR STA PFACE,U SHFDIR LDA PFACE,U BMI SHDN1C LDA #1 STD CURJOY RTS * SHDIRB LDA PVELX,U BEQ SHDIRA CLRA STD CURJOY RTS * SHDN1C LDA #-1 STD CURJOY RTS * * SHLEV2 LDD #SHLEV1 STD PJOY,U SHLEVA CLRB WINGS UP JMP SHDIR * SHBRA2 JMP SHADOW BACK TO THE BRAINS * SHAV CLRB DEC PJOYT,U BGT SHDIRA JMP SHADOW * SHUP3 LDD #SHUP3A LEVEL FLIGHT, READY TO GO UP STD PJOY,U LDB PPOSY+1,U REMEMBER LINE TO TRACK STB PDIST+1,U LDA #20+1 TIME UNTIL NEXT DECISION STA PJOYT,U * SHUP3A LDX PPOSX,U CLIFF IN THE WAY?? LDY PPOSY,U LDA BCKXTB,X ANDA BCKYTB-SHYLEN,Y LBEQ SHUPST DEC PJOYT,U LBLE SHADOW LDD PVELY,U FALLING FAST ENOUGH? ADDD #-$0040 BMI SHUP3B BR=NO LDB PDIST+1,U ABOVE TRACKING LINE CMPB PPOSY+1,U BLO SHUP3B BR=YES LDD #SHUP4 STD PJOY,U LDB #$01 FLAP WINGS JMP SHDIRA * SHUP4 LDD #SHUP3A STD PJOY,U SHUP3B CLRB FLAP WINGS JMP SHDIRA * SHDN2 LDD #SHADOW STD PJOY,U CLRB LDA PVELX,U LBEQ SHDIRA LDA PSTATE,U ON THE GROUND? BEQ 1$ BR=NO IN THE AIR LDX PPOSX,U CLIF3U IN THE WAY? LDA BCKXTB,X LDX PPOSY,U ANDA BCKYTB,X BEQ 1$ BR=NO LDB #1 FLAP WINGS 1$ CLRA STD CURJOY RTS * * * SELECT CLOSEST PLAYER * OUTPUT REG.X, TARGETED PLAYER (IF STATUS .NE. IS TRUE) * SELPLY LDX TARPLY GET TARGETED PLAYER TO KILL BEQ SPNONE LDA TARTM1 DELAY TIMER AT ZERO? BEQ 20$ BR=NO, TRY PLAYER 2 LDX TARPL2 PLAYER 2 HERE? BEQ SPNONE BR=NO LDA TARTM2 PLAYER 2'S DELAY TIMER AT ZERO? BEQ SPN3PL BR=GET PLAYER 2! BRA SPNONE BR=NO ONE TO CHASE * 20$ LDY TARPL2 PLAYER #2 BEQ SPN3PL BR=ONLY 1 PLAYER NOW LDA TARTM2 BNE SPN3PL LDB PPOSY+1,X SUBB PPOSY+1,U FIND CLOSEST CO-ORDINANT BLO SPRYX NEGB SPRYX STB ,-S LDD PPOSX,X SUBD PPOSX,U BLO SPRXX COMA COMB ADDD #-1 SPRXX TSTA BNE SPRLOX CMPB ,S BHI SPRLOX STB ,S SPRLOX EQU * * LDB PPOSY+1,Y SUBB PPOSY+1,U FIND CLOSEST CO-ORDINANT BLO SPRYY NEGB SPRYY STB ,-S LDD PPOSX,Y SUBD PPOSX,U BLO SPRXY COMA COMB ADDD #-1 SPRXY TSTA BNE SPRLOY CMPB ,S BHI SPRLOY STB ,S SPRLOY EQU * * CMPB 1,S PULS D BLO SPN3PL SPN2PL LDX TARPL2 SPN3PL ANDCC #!N$04 CLEAR ZERO BIT FOR .NE. BEING TRUE RTS * SPNONE ORCC #$04 SETT ZERO BIT FOR .EQ. BEING TRUE RTS * * KEN LANTZ SPECIAL EFFECTS, PLAYER POOF (DEATH) * * a sequence of three images lasting 1 sec total DEATH LDD PPOSX,U CMPD #4 LET PLAYER SEE THE EXPLOSION BGT 2$ LDD #4 NEW POSITION IN X DIRECTION 2$ CMPD #288 BLT 1$ LDD #288 1$ STD PPOSX,U LDY POOF1 POOF FRAME 1 JSR WRREGY PCNAP 5 LDY POOF1 JSR CLREGY LDY POOF2 POOF FRAME 2 JSR WRREGY PCNAP 8 LDY POOF2 JSR CLREGY LDY POOF3 POOF FRAME 3 JSR WRREGY PCNAP 12 LDY POOF3 JSR CLREGY * test PPOSX/Y for nearest cliff and refresh if necessary LDX PPOSX,U LDY PPOSY,U LDA BCKYTB-15,Y ORA BCKYTB-13,Y ANDA BCKXTB,X ORA BCKRFS STA BCKRFS JMP VSUCIDE * * PROCESS TO DESTROY A CLIFF * BY KEN LANTZ 6/10/82 * INPUT PFRAME-2,U = CLIFF TO DESTROY * CLFDES LDA #5 STA PFRAME,U number of shakes to do 1$ LDY PFRAME-2,U JSR BCKYUP PCNAP 10 ! LDY PFRAME-2,U ! JSR BCKYUP ! LDA #$2A by altering the cliffs flavor STA WCDMA,X PCNAP 10 DEC PFRAME,U BNE 1$ JSR LOCCLR go erase the image as we will replace with PCNAP 2 debris ****************************************************************************** LDY #FIRSTI point to the image area LDA #5 where there are five images STA PFRAME+2,U 2$ LDX PFRAME-2,U CMPX $0000 here we do adjustments to center BNE 21$ and offset out debris images on the LDX #$F145 larger and edge located cliffs BRA 22$ 21$ CMPX $0004 $0000 and $0004 are CLIF1L and CLIF2 vectors, BNE 23$ respectively LDX #$3151 BRA 22$ 23$ LDX 4,X Get destination 22$ STX PFRAME,U Adjust destination for centering on cliffs BSR CLIFER STY PFRAME+3,U we must maintain our why PCNAP 8 while we sleep a little LDY PFRAME+3,U DEC PFRAME+2,U BNE 2$ BSR LOCCLR a final erase of the image area JMP VSUCIDE end the process * ****************************************************************************** * X contains screen location Y contains table location of image to be 'drawn' * (PFRAME,U) CLIFER LDX PFRAME,U 2$ LDA ,Y+ lo nybble is color, hi nybble is length BEQ 1$ length & color equ 0, end of image ANDA #$0F LDB #17 replicate lo nybble ($0A-=-$AA) for color MUL LDA -1,Y ANDA #$F0 length nybble is extracted LSRA and adjusted LSRA LSRA LSRA BNE 3$ if length equ 0, end of line LDX PFRAME,U next line is always 1 down LEAX 1,X STX PFRAME,U BRA 2$ 3$ BEQ 2$ (test is on top for minimal memory) CMPA #1 last byte is always one pixel to enhance debris image BNE 31$ while all others are bytes for minimal memory ANDB #$F0 requirements 31$ STB ,X LEAX $100,X next location is over 1 as our images are horizontally CMPX #$9800 BHI 2$ DECA oriented BRA 3$ 1$ RTS * LOCCLR LDB WCLENY,Y CALC LOWEST POINT EORB #!WDMAFIX ADDB WCY,Y JSR VCL1ALL clear cliff away LDD #$1200 with a constant substitution of 00 color STD WCDMA,X in the DMA command LDY PFRAME-2,U the source is read for location and size LDD WCSRC,Y source is not use but is specified STD WCSRC,X LDD WCDEST,Y destination STD PFRAME,U STD WCDEST,X LDD WCLEN,Y vertical length is extended to cover EORB #!WDMAFIX the falling debris ADDB #10+1 EORB #!WDMAFIX STD WCLEN,X RTS *******************************END OF CLIFF DESTROIER*********************** * * START PLAYER 1 & 2 IN TARGET AREA(S) * STPLY1 STPLY2 LDD TARPLY IS THIS SPOT EMPTY? BNE 1$ BR=NO STU TARPLY IT IS NOW IN USE LDA TARTIM GIVE CURRENT TIME DELAY TIME STA TARTM1 RTS 1$ STU TARPL2 USING SECOND AREA LDA TARTIM GIVE CURRENT TIME DELAY TIME STA TARTM2 RTS * * DEATH OF PLAYER 1 * DEATH1 CLR EGGS1 INC PLYD1 REMEMBER PLYR DIED IN THIS WAVE(SURVIVAL WAVE) BRA SPDIE REMOVE TARGET PLAYER POINTER * * DEATH OF PLAYER 2 * DEATH2 CLR EGGS2 INC PLYD2 REMEMBER PLYR DIED IN THIS WAVE(SURVIVAL WAVE) SPDIE LDB #5*60/8 BAITER REMOVAL TIME STB DBAIT LEAX ,X DEATH BY LAVA BEQ SPDIE2 BR=YES LDY PDECSN,X GET WINNING PLAYER/ENEMY DECISION BLOCK BEQ SPDIE3 BR=MUST BE A WINNING ENEMY LDY DGLAD,Y GET GLADIATOR ENTRY BEQ SPDIE3 BR=MUST BE AN ENEMY INC ,Y KEEP TRACK OF PLAYER VS. PLAYER KILLS BGT SPDIE2 BEQ SPDGLA BR=GLADIATOR WAVE, SCORE THE WINNING PLAYER DEC ,Y (KEEP THE NBR POSITIVE) BRA SPDIE2 * SPDGLA CLR PLYG1 ONLY 1 GLADIATOR IN THE WAVE CLR PLYG2 LDA #$80 INDICATE TRUE WINNING GLADIATOR STA ,Y LDX PDECSN,X GET WINNING GLADIATOR/PLAYERS SCORE AREA PSHS X LDA #$30 SCORE 3,000 JSR SCRHUN LDX #SCRAIR DISPLAY SCORE ON THE SCREEN LDD #EGGID*256+$FF JSR VCUPROC LDD PPOSX,U PUT SCORE IN LOSERS AREA ADDD #6 (CENTER IN LOSERS KILL AREA) STD PPOSX,Y LDD PPOSY,U STD PPOSY,Y LDA #MSGTH3 DISPLAY 3,000 POINTS PULS X GET WINNERS DECSION TABLE BACK LDB DCONST,X STD PRDIR,Y LDX #SNBOUN AWARD BOUNTY SOUND JSR VSND BRA SPDIE2 * * PLAYER KILLED BY ENEMY OR PTERODACTYL * SPDIE3 LDA GOVER ATTRACT MODE? BPL SPDIE2 BR=YES LDA TTROLL 1ST, 2ND, OR 3RD WAVE? BEQ SPDIE2 BR=NO LDA #2 STA EMYTIM SLOW DOWN THE ENEMY ONLY! SPDIE2 LDX #DEATH create a primary process for player death LDD #$2000 POOF PROCESS I.D. JSR VCUPROC LDD PPOSX,U STD PPOSX,Y LDD PPOSY,U STD PPOSY,Y LDX PDECSN,U SCORE 50 POINTS FOR DYING LDA #$50 JSR SCRTEN IFE DEBUG JSR LZAP ENDIF * IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA PID,U THIS BETTER BE THE PLAYER CMPA #PLYID BEQ 12$ SWI 12$ ENDIF ???????????? END OF DEBUG ???????????? LDX #SNPDIE PLAYER DIES JSR VSND CMPU TARPLY REMOVE PLAYER FROM TARGET AREA, CORRECT PLAYER? BNE 1$ BR=NO LDD TARPL2 STD TARPLY HERE IF YES LDA TARTM2 STA TARTM1 1$ LDD #0 ASSUME OTHER POINTER STD TARPL2 * * CHECK FOR AN END OF GAME * 2$ LDX PDECSN,U LDX DSCORE,X GET PLAYER SCORE/LIVES AREA IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA 6,X HOW MANY AUX LIVES ARE LEFT??? BNE 22$ BR=NONE SWI 22$ ENDIF ???????????? END OF DEBUG ???????????? DEC 6,X SUBTRACT TO PLAYERS AUX NUMBER OF LIVES BNE 5$ 4$ LDA GOVER ATTRACT MODE? BPL 5$ BR=YES, GAME IS ALREADY OVER LDA SPLY1+6 BOTH PLAYERS DEAD? ORA SPLY2+6 BNE 6$ BR=NO PSHS U LDU PDUMMY PUT AT BEGINNING OF LIST LDX #GAMOVR LDD #$3400 JSR VCUPROC PULS U 5$ RTS 6$ LDX #GAMOV1 GAME OVER FOR PLAYER 1 OR 2 LDD #PLYID*256+$FF JSR VCUPROC LDA #3*60/8 3 SECOND MESSAGE STA PJOYT,Y LDX PDECSN,U STX PDECSN,Y RTS * GAMOV1 LDX PDECSN,U LDB DCONST,X BSR 10$ PCNAP 8 LDA GOVER GAME OVER? BEQ 1$ DEC PJOYT,U BNE GAMOV1 1$ LDX PDECSN,U CLRB BSR 10$ JMP VSUCIDE * 10$ LDA DGAMO,X PUT UP PLAYER 1/2 GAME OVER LDX #$296C JSR OUTPHR LEAX $300,X (SPACE CHARACTER) LDA #MSGAMO JMP OUTPHR * * COLISION DETECT BETWEEN OPPONENTS VS ALL OPPONENTS * (A SECONDARY PROCESS BEFORE COLISIONABLE PLAYERS) * OPPCOL PCNAP 1 COLISION DETECT ROUTINE IFN DEBUG ???????????? DEBUG PARAMATER ????????? STU COLU ENDIF ???????????? END OF DEBUG ???????????? 20$ IFN DEBUG ???????????? DEBUG PARAMATER ????????? CMPU COLU BEQ 21$ SWI 21$ ENDIF ???????????? END OF DEBUG ???????????? 25$ LDU PLINK,U FIND TWO COLISIONAL OSTRICHES BEQ OPPCOL BR= END OF COLISION LDA PID,U BPL 25$ STU COLU * LEAX ,U FOUND 1ST OSRICH, FIND SECOND IFN DEBUG ???????????? DEBUG PARAMATER ????????? STX COLOBJ ENDIF ???????????? END OF DEBUG ???????????? 40$ IFN DEBUG ???????????? DEBUG PARAMATER ????????? CMPX COLOBJ BEQ 41$ SWI 41$ CMPU COLU BEQ 42$ SWI 42$ ENDIF ???????????? END OF DEBUG ???????????? 45$ LDX PLINK,X BEQ 20$ BR= END OF PAIRS OF COLISION LDA PID,X BPL 45$ ANDA PID,U BITA #$01 ENEMY/PTERO VS. ENEMY/PTERO BEQ 45$ BSR HITEM BCC 40$ THERE IS SOMETHING TO COLISION WITH BRA 20$ * * COLISION DETECT BETWEEN PLAYERS VS ALL OPPONENTS * (A PROCESS BEFORE COLISIONABLE PLAYERS) * PLYCOL PCNAP 1 COLISION DETECT ROUTINE LDA TARTM1 DECREMENT TARGETED PLAYERS TIME BEQ 10$ DEC TARTM1 10$ LDA TARTM2 DECREMENT TARGETED PLAYERS TIME BEQ 15$ DEC TARTM2 15$ IFN DEBUG ???????????? DEBUG PARAMATER ????????? STU COLU ENDIF ???????????? END OF DEBUG ???????????? 20$ IFN DEBUG ???????????? DEBUG PARAMATER ????????? CMPU COLU BEQ 21$ SWI 21$ ENDIF ???????????? END OF DEBUG ???????????? 25$ LDU PLINK,U FIND TWO COLISIONAL OSTRICHES BEQ PLYCOL BR= END OF COLISION LDA PID,U CMPA #PLYID+$80 BNE 25$ STU COLU LEAX ,U FOUND 1ST OSRICH, FIND SECOND 35$ LDX PLINK,X BEQ PLYCOL BR= END OF PAIRS OF COLISION LDA PID,X BPL 35$ BSR HITEM BCS 20$ 40$ IFN DEBUG ???????????? DEBUG PARAMATER ????????? CMPX COLOBJ BEQ 41$ SWI 41$ CMPU COLU BEQ 42$ SWI 42$ ENDIF ???????????? END OF DEBUG ???????????? 45$ LDX PLINK,X BEQ 20$ BR= END OF PAIRS OF COLISION LDA PID,X BPL 45$ BSR HITEM BCC 40$ THERE IS SOMETHING TO COLISION WITH BRA 20$ * * COLISION DETECT THESE TWO OBJECTS (REG.U & REG.X) * CARRY =1 FOR KILLING REG.U OBJECT * REG.X & REG.U ARE INTACT * HITEM STX COLOBJ LDD PPOSX,U WITHIN X INTERSECTION SQUARES? SUBD PCOLX,X BGT HITEM1 BR=NO LDD PPOSX,X CMPD PCOLX,U BGT HITEM1 SUBD PPOSX,U STD COLDX * LDD PCOLY1,X WITHIN Y INTERSECTION SQUARES? CMPB PCOLY1,U BHI HITEM1 BR=NO CMPA PCOLY2,U BLO HITEM1 LDY [PPICH,X] IFN DEBUG ???????????? DEBUG PARAMATER ????????? BGT 31$ SWI 31$ ENDIF ???????????? END OF DEBUG ???????????? LDX [PPICH,U] IFN DEBUG ???????????? DEBUG PARAMATER ????????? BGT 32$ SWI 32$ ENDIF ???????????? END OF DEBUG ???????????? SUBB PCOLY2,U ASLB MAXIMUM Y DIFFERENCE = $1F ASLB BMI OSTXP2 BR=X BOX ON TOP ABX BRA OSTXYP OSTXP2 NEGB LEAY B,Y OSTXYP JSR BPCOL BCS OSTHIT HITEM2 LDX COLOBJ HITEM1 ANDCC #$FE RTS * * PIXEL COLISION HAS HAPPENED, DECIDE WHAT TO DO WITH THE COLISION * OSTHIT LDX COLOBJ GET OTHER COLISIONED PARTY LDA PID,U ENEMIES DO NOT KILL EACH OTHER ANDA PID,X BITA #$01 BNE 100$ BR=PTE/PLY/EMY COLISION BITA #$02 LBEQ PLYEGG BR=CORRECT PERSON HIT EGG SWI FICTISIOUS COLISION 100$ BITA #$04 BNE OSTHT2 BR=NO KILL (ENEMY VS. ENEMY, PTERO VS. PTERO) BITA #$08 PTERODACTYL VS. PLAYER? BNE OSTBO BR=NO BUZZARD VS. PLAYER IF DEBUG LDA PID,X BETTER BE A BUZZARD CMPA #PTEID+$80 BEQ 1$ SWI 1$ ENDIF LDB PLANTZ,U LANTZ ON CORRECT LINE? ADDB PPOSY+1,U SUBB PPOSY+1,X LDA PIMAGE,X PFRAME,X CMPA #FLY2-FLY1 ATTACKING FRAME? BLS 13$ BR=NO WINGS DOWN FRAME **PTE SUBB #7 15-7 FUDGE FROM LANTZ TO CENTER OF PTERO-MOUTH SUBB #15-7 FUDGE FROM LANTZ TO CENTER OF PTERO-MOUTH BPL 15$ NEGB 15$ CMPB #3 WITHIN 7 PIXELS? BRA 14$ * 13$ **PTE SUBB #5 15-4 FUDGE FROM LANTZ TO CENTER OF PTERO-MOUTH SUBB #15-5 FUDGE FROM LANTZ TO CENTER OF PTERO-MOUTH BPL 10$ NEGB 10$ CMPB #2 WITHIN 5 PIXELS? 14$ BHI OSTBO BR=NO, CANNOT KILL PTERODACTYL LDA PFACE,U FACING IN OPPSITE DIRECTIONS? EORA PFACE,X BPL OSTBO BR=NO, CANNOT KILL PTERODACTYL LDD COLDX FACING PTERODACTYL? BPL 12$ LDA PFACE,U PTERODACTYL ON LEFT, PLAYER ON RIGHT BPL OSTBO BR=NO, CANNOT KILL PTERODACTYL 11$ JMP OSTPYP BOUNCE KILLER AWAY FROM PTERODACTYL * 12$ LDA PFACE,U PTERODACTYL ON RIGHT, PLAYER ON LEFT BPL 11$ BR=YES, KILLED PTERODACTYL OSTBO LDB PLANTZ,U SEX STD ,--S LDB PLANTZ,X WHICH LANTZ IS ON TOP? SEX SUBD ,S++ ADDD PPOSY,X (DETERMINATION OF WHO IS KILLED) SUBD PPOSY,U BEQ 1$ BR=BOTH ON SAME LEVEL BMI OSTXT3 JMP OSTPYP BR=REG.Y ON TOP * 1$ LDX #SNPTHD PLAYERS COLIDE JSR VSND LDX COLOBJ BRA OSTXTT * OSTHT2 LDX #SNETHD ENEMIES COLIDE JSR VSND LDX COLOBJ LDA PID,U CMPA #$80+PTEID PTERODACTYL? BEQ OSTH12 BR=YES LDA PID,X CMPA #$80+PTEID BEQ OSTH13 BR=YES OSTH11 JSR OSTBMP NO-ONE DIES, BUT BUMP EACH OTHER ANYWAYS JMP HITEM2 * OSTH12 LDA PID,X 2 PTERODACTYL'S? CMPA #$80+PTEID BEQ OSTH11 BR=YES, SAME OLD COLISION OSTPX JSR PTEBRD COLIDE PTERODACTYL & BIRD JMP HITEM2 * REG.U IS PTERODACTYL OSTH13 EXG X,U JSR PTEBRD COLIDE PTERODACTYL & BIRD EXG X,U JMP HITEM2 * OSTBMP LDB PPOSY+1,X DETERMINATION OF WHO HAS BEEN BUMPED SUBB PPOSY+1,U LBPL OSTUTP LBEQ OSTLR JMP OSTXTP * OSTXT3 LDX COLOBJ THE VICTOR!!! JSR OSTWIN LDA PID,X IS THE WINNER A PTERODACTYL? CMPA #$80+PTEID BEQ OSTXPT OSTXTT JSR OSTXTP REG.X WILL BE RESTORIED BRA OSTX12 REG.U GUY IS DEAD, GET NEXT REG.U GUY * OSTXPT EXG X,U JSR PTEBRD COLIDE PTERODACTYL & BIRD EXG X,U OSTX12 ORCC #$01 REG.U GUY IS DEAD, GET NEXT REG.U GUY RTS * * OSTRICH GENERAL KILL ROUTINE * REG.X = THE WINNER * REG.U = THE LOSER OSTWIN PSHS X,U NEVER DESTROY THIS WORKSPACE POINTER LDA PID,U MAKE THIS MAN DEAD ANDA #$7F STA PID,U LDD #0 STD PRIDER,U LDY PDECSN,U LDD #AUTOFF MOVE OSTRICH OFF SCREEN STD PJOY,U JSR [DDEAD,Y] CALL DEATH ROUTINE (REG.X VICTOR, REG.U DEAD) LDU 2,S RESTORE REG.U LDY PDECSN,U GET DEAD OBJECTS SCORE LDA DVALUE,Y LDX ,S RESTORE REG.X LDX PDECSN,X JSR [DVALUR,Y] SCORE ROUTINE PULS X,U,PC * OSTPYP LDX COLOBJ GET THE LOSER EXG X,U SORT REGIES FOR DEATH WISH JSR OSTWIN EXG X,U SORT REGIES FOR DEATH WISH LDA PID,U IS THE WINNER A PTERODACTYL? CMPA #$80+PTEID BEQ OSTPX OSTYTT BSR OSTUTP REG.X WILL BE RESTORIED JMP HITEM2 REG.X IS DEAD, GET NEW REG.X * * BOUNCER ROUTINE * PLAYER VS. PLAYER & ENEMY VS. PLAYER & ENEMY VS. ENEMY * & PTERODACTYL VS. PTERODACTYL * OSTUTP LDX COLOBJ EXG X,U JSR OSTXUP MOVE REG.U GUY UP EXG X,U JSR OSTXDN & REG.X GUY DOWN BRA OSTLR * OSTXTP LDX COLOBJ EXG X,U JSR OSTXDN MOVE REG.U GUY DOWN EXG X,U JSR OSTXUP & REG.X GUY UP * OSTLR LDX COLOBJ LDD COLDX NOW BOUNCE IN X DIRECTION BEQ OSTNLR BR=CENTER TO CENTER COLISION BPL OSTURT BR=X ON RIGHT OSTXLF LDA PVELX,X U IS ON RIGHT, MOVE X LEFT BLE 1$ SO MAKE NEGA ADDA #2 SLOW DOWN A BIT STA PVELX,X 1$ NEGA BUMP OTHER PERSON ADDA #2 ASRA STA PBUMPX,U LDA #-1 MAKE X FACE LEFT STA PFACE,X LDA PVELX,U U IS ON RIGHT, MAKE U GO RIGHT BGE 2$ NEGA SUBA #2 SLOW DOWN A BIT STA PVELX,U 2$ ADDA #2 BUMP OTHER PERSON NEGA ASRA STA PBUMPX,X CLR PFACE,U MAKE U FACE RIGHT BRA OSTNLR * OSTURT LDA PVELX,X X IS ON RIGHT, MAKE X GO RIGHT BGE 1$ NEGA SUBA #2 SLOW DOWN A BIT STA PVELX,X 1$ ADDA #2 BUMP OTHER PERSON NEGA ASRA STA PBUMPX,U CLR PFACE,X MAKE X FACE RIGHT LDA PVELX,U X IS ON RIGHT, MAKE U GO LEFT BLE 2$ NEGA ADDA #2 SLOW DOWN A BIT STA PVELX,U 2$ NEGA BUMP OTHER PERSON ADDA #2 ASRA STA PBUMPX,X LDA #-1 MAKE U FACE LEFT STA PFACE,U * OSTNLR RTS FCB $CE LZAPPER FUDGE * * OSTXUP LDA #-2 STA PBUMPY,X X IS ON TOP, MAKE X GO UP LDD PVELY,X BLE 2$ COMA NEGB SBCA #-1 ASRA SLOW DOWN A BIT RORB STD PVELY,X 2$ RTS * OSTXDN LDA #2 STA PBUMPY,X U IS ON TOP, MAKE X LOWER LDD PVELY,X BGE 2$ COMA NEGB SBCA #-1 ASRA SLOW DOWN A BIT RORB STD PVELY,X 2$ RTS * IFE DEBUG LZAP LDX LZAP1 LDD #34 1$ ADDA ,X+ DECB BNE 1$ CMPA #$32 LZAPPER DATA BEQ 2$ LDX [PFREE] INC 1,X 2$ RTS ENDIF * * COLIDE PTERODACTYL & BIRD * REG.U = PTERODACTYL * REG.X = BIRD PTEBRD CLRA DETERMINE WHO IS ON TOP LDB PCOLY1,X SUBB PCOLY1,U SBCA #0 ADDB PCOLY2,X ADCA #0 SUBB PCOLY2,U SBCA #0 BPL 1$ BR=PTERODACTYL IS ON TOP BSR OSTXUP BIRD IS ON TOP, MAKE HIM HIGHER LDA #-5 STA PBUMPY,X A HARD BUMP BRA 2$ * 1$ BSR OSTXDN MAKE BIRD LOWER LDA #5 STA PBUMPY,X A HARD BUMP 2$ LDD PPOSX,X SUBD PPOSX,U ADDD PCOLX,X SUBD PCOLX,U WHO IS ON THE RIGHT OF WHO?? BPL 3$ BR=BIRD IS ON THE RIGHT, SO BUMP HIM RIGHT LDA PVELX,X THE BIRD MOVES LEFT NOW BLE 21$ SUBA #2 SLOW DOWN A BIT NEGA STA PVELX,X 21$ LDA PVELX,U BUMP BIRD NEGA ASLA STA PBUMPX,X LDA #$FF STA PFACE,X MAKE X FACE LEFT RTS * 3$ LDA PVELX,X THE BIRD MOVES RIGHT NOW BGE 31$ NEGA SUBA #2 SLOW DOWN A BIT STA PVELX,X 31$ LDA PVELX,U BUMP BIRD NEGA ASLA STA PBUMPX,X CLR PFACE,X MAKE X FACE RIGHT RTS LZAP1 FDB $F320 * * LAVA FLAMES (BURNING THE BRIDGE) * LAVAB PCNAP 4 LDA SAFRM2+1 LAVA TOPPED OFF? CMPA #FLOOR BHI LAVAB BR=NO, WAIT FOR LAVA TO RISE TO THE TOP LAVABN PCNAP 1 LAVABC LDX PDIST,U MODIFY CLIFF5 LANDING AREA LDA LNDXTB,X EORA LNDXS3,X GET XOR OF CORRECT BIT ANDA #$20 GET BIT TO CHANGE EORA LNDXTB,X GET TRUE STATE OF BIT STA LNDXTB,X STORE IT AWAY! ANDA #$20 HIT CLIFF5? BNE 2$ BR=YES, STOP!!! LDB PJOYT,U MOVE FLAME LEAX B,X STX PDIST,U LDB PVELX,U TAKE CARE OF FLAME OFFSET LEAX B,X CMPX #ELEFT-4 TOO FAR LEFT? BLT LAVABN BR=YES CMPX #ERIGHT+4 TO FAR RIGHT? BGT LAVABN BR=YES STX PPOSX,U NEW POSITION IN X DIRECTION INC PFRAME,U LDA PFRAME,U JSR WFLAME RE=WRITE FLAME PCNAP 6 LDA PFRAME,U JSR CFLAME ERASE FLAME INC PFRAME,U LDA PFRAME,U JSR WFLAME RE=WRITE FLAME PCNAP 6 LDA PFRAME,U JSR CFLAME ERASE FLAME BRA LAVABC LOOP ON EATING FLAME * END OF BRIDGE COLAPSE, SO DROP THE FLAME INTO LAVA 2$ INC PFRAME,U LDA PFRAME,U JSR WFLAME RE=WRITE FLAME PCNAP 6 LDA PFRAME,U JSR CFLAME ERASE FLAME LDA PFRAME,U ANDA #$03 BNE 2$ INC PPOSY+1,U LDA PPOSY+1,U CMPA #FLOOR+16 DOWN IN THE DEPTHS? BLO 2$ BR=YES LDA #$80 REFRESH CLIFF5 ORA BCKRFS STA BCKRFS JMP VSUCIDE * * LAVA FLAMES (NORMAL) * LAVAF LDA PFRAME,U JSR CFLAME INC PFRAME,U NEXT FRAME LDB PPOSY+1,U RAISE FLAME? CMPB #FLOOR BLS 1$ BR=NO DEC PPOSY+1,U HERE IF YES 1$ LDA PFRAME,U JSR WFLAME WRITE THE NEXT FLAME PCNAP 6 BRA LAVAF * WFLAME PSHS A INPUT 0-3 FRAME NUMBER JSR VWR1CLS BRA WCFLAM * CFLAME PSHS A JSR VCL1CLS WCFLAM PULS A LDY IFLAME ANDA #3 COUNTS 0 TO 3 ASLA LEAY A,Y ASLA LEAY A,Y JSR WRHOR2 JMP CLIPER CLIF THE BOTTOM OF THE FLAME * * PUT THE NUMBER OF PLAYERS LIVES UP ON THE SCREEN * INPUT; * REG.X HAS DECISION BLOCK ADDRESS (P1DEC OR P2DEC) * REG.A HAS NUMBER OF LIVES TO PUT UP ON SCREEN * OUTPUT; NEW LIFES & SCREEN UPDATED IMMEDIATELY * REG.X - INTACT * PLYRUP PSHS A SAVE NUMBER OF LIVES PLYRUL JSR INCLIV ADD 1 LIFE TO PLAYER DEC ,S BNE PLYRUL GET NBR OF PLAYERS UP ON SCREEN PULS A,PC * * ADD 1 LIFE ON THE SCREEN * REG.X HAS DECISION BLOCK * OUTPUT; NEW LIFE & SCREEN UPDATED IMMEDIATELY * REG.X - INTACT * INCLIV PSHS X,CC SAVE INTERUPT STATUS LDX DSCORE,X GET PLAYER SCORE/LIVES AREA BEQ INLDON INC 5,X ADD TO PLAYERS NUMBER OF LIVES INC 6,X (ADD TO AUX NUMBER OF LIVES LEFT BNE INLMAX BR=NOT EXCEEDED 255 LIVES DEC 5,X WHAT I GIVETH, I TAKETH AWAY DEC 6,X INLMAX LDA 5,X CMPA #5 BHI INLDON ASLA CALC PROPER SCREEN LOCATION TO UPDATE ADDA 5,X SUBA #3 CLRB LDX 1,S GET REG.X DECISION BLOCK BACK ADDD DSCLOC,X ORCC #$F0 NO INTERUPTS FOR DMA STD DDMA LDD #$0307!XDMAFIX CHARACTER SIZE STD WDMA LDD DSCPLY,X GET PLAYERS SOURCE CHARACTER ADDRESS STD SDMA LDA #$0A DMA CONTROL STA DMA INLDON PULS X,CC,PC * * DECREMENT (BY 1) THE NUMBER OF LIVES A PLAYER HAS * REG.X HAS DECISION BLOCK * OUTPUT; 1 LESS LIFE & SCREEN UPDATED IMMEDIATELY * STATUS .EQ. NO MORE LIVES LEFT * .NE. MORE LIVES LEFT * REG.X - INTACT * DECLIV PSHS X LDX DSCORE,X GET PLAYER SCORE/LIVES AREA BEQ DCLNON LDA 5,X BEQ DCLNON LDB GOVER BPL 10$ LDB #7 BOOKS, NUMBER OF MEN PLAYED JSR AUDIT1 10$ DECA 1 LESS MAN LEFT STA 5,X SAVE THIS AS NBR OF LIVES LEFT CMPA #5-1 BHI DCLDON ASLA ADDA 5,X CLRB LDX ,S GET REG.X DECISION BLOCK BACK ADDD DSCLOC,X PSHS CC SAVE INTERUPT STATUS ORCC #$F0 NO INTERUPTS FOR DMA STD DDMA LDD #$0307!XDMAFIX CHARACTER SIZE STD WDMA LDD DSCPLY,X GET PLAYERS SOURCE CHARACTER ADDRESS STD SDMA LDD #$1A*256+(DKB*$11) DMA CONTROL & ERASE CONSTANT STB KDMA STA DMA PULS CC DCLDON LDA #1 STATUS NE DCLNON PULS X,PC * * GENERAL DMA PUTTER-UPPER * (REG.X) HAS LENGTH, THEN SOURCE ADDRESS (X+2) * REG.D HAS DESTINATION ADDRESS * REG.Y HAS DMA CONTROL & CONSTANT * GENDMA PSHS CC ORCC #$F0 NO INTERUPTS FOR DMA STD DDMA LDD ,X++ EORA #!HDMAFIX EORB #!HDMAFIX STD WDMA STX SDMA TFR Y,D STB KDMA STA DMA PULS CC,PC * * FIND A FREE (NOT CROWDED) TRANSPORTER TO USE * REG.X = ADDRESS OF FREE TRANSPORTER BOUNDS TABLE * FREET PSHS X LDD CURTR1 CALCULATE FOR A FREE TRANSPORTER STD STTR1 LDD CURTR3 STD STTR3 LDU [PDUMMY] SEARCH THE LIST CRENPR LDU PLINK,U FOR OTHER FLYING OBJECTS BNE CREID BR=NOT END OF LIST PULS X,PC CREID LDA PID,U PROCESS ACTIVE ON SCREEN? BPL CRENPR BR=NO CMPA #$80+EGGID AN EGG? BNE 1$ BR=NO LDD PDIST,U CALLING A BIRD? BEQ CRENPR BR=NO, SO IGNORE HIM 1$ LDB PVELX,U LDY ,S GET TRANSPORTER BOUNDS TABLE LDX ,Y++ SPEED FUDGE TABLE LDD B,X ADDD PPOSX,U CMPD #ELEFT BGE 10$ ADDD #ERIGHT-ELEFT 10$ CMPD #ERIGHT BLE 20$ ADDD #ELEFT-ERIGHT 20$ TFR D,X LDA PPOSY+1,U CMPA #$51+7 UPPER LEVEL? BHI 30$ BR=NO LDA STTR1 TRANSPORTER DISABLED? BNE CRENPR BR=YES, NEXT PERSON BSR TRBOND CHECK IF THIS TRANSPORTER IS AVAILABLE BRA CRENPR NEXT PERSON * 30$ CMPA #$8A+7 MIDDLE LEVEL? BHI 40$ BR=NO LEAY FTLEN,Y NEXT ENTRY LDA STTR2 TRANSPORTER DISABLED? BNE 35$ BR=YES, NEXT PERSON BSR TRBOND CHECK IF THIS TRANSPORTER IS AVAILABLE 35$ LDA STTR3 TRANSPORTER DISABLED? BNE CRENPR BR=YES, NEXT PERSON LEAY FTLEN,Y NEXT ENTRY BSR TRBOND CHECK IF THIS TRANSPORTER IS AVAILABLE BRA CRENPR NEXT PERSON * 40$ CMPA #$A3+7 LOWER LEVEL? BLO CRENPR BR=NO LDA STTR4 TRANSPORTER DISABLED? BNE CRENPR BR=YES, NEXT PERSON LEAY FTLEN+FTLEN+FTLEN,Y NEXT ENTRY BSR TRBOND CHECK IF THIS TRANSPORTER IS AVAILABLE BRA CRENPR NEXT PERSON * TRBOND LDB FXREV,Y WRAP AROUND COMPARE? BNE 10$ BR=YES CMPX FXMIN,Y IS OBJECT FAR AWAY ENOUGH TO LEFT? BLO 30$ BR=YES CMPX FXMAX,Y IS OBJECT FAR AWAY ENOUGH TO RIGHT? BHI 30$ BR=YES BRA 20$ FAIL THIS TRANSPORTER * 10$ CMPX FXMIN,Y IS OBJECT FAR AWAY ENOUGH TO LEFT? BHI 20$ BR=NO CMPX FXMAX,Y IS OBJECT FAR AWAY ENOUGH TO RIGHT? BHI 30$ BR=YES 20$ INC [FLEVEL,Y] NO, FAIL TRANSPORTER 30$ RTS * * ENEMY TRANSPORTER BOUNDS * TRENY FDB SPDFDG FCB 0 TOP TRANSPORTER FDB $6A-66,$6A+14+66,STTR1 FCB 0 MIDDLE RT TRANSPORTER FDB $E0-66,$E0+14+39,STTR2 FCB 1 MIDDLE LF TRANSPORTER FDB $10-39+ERIGHT,$10+14+66,STTR3 FCB 0 BOTTOM TRANSPORTER FDB $78-66,$78+14+66,STTR4 * * * PLAYERS TRANSPORTER BOUNDS * TRPLY FDB SPDFDG FCB 0 TOP TRANSPORTER FDB $6A-90,$6A+14+90,STTR1 FCB 1 MIDDLE RT TRANSPORTER FDB $E0-90,$E0+14+90-ERIGHT,STTR2 FCB 1 MIDDLE LF TRANSPORTER FDB $10-90+ERIGHT,$10+14+90,STTR3 FCB 0 BOTTOM TRANSPORTER FDB $78-90,$78+14+90,STTR4 * FDB -60,-30,-15,-8 SPDFDG FDB 0,8,15,30,60 SPEED FUDGE * G1DEC FDB G1JOY,G1JOY,SPLY1,$39D9,SCOPL1,PLYR1,TREPL1,CREP1 PLAYER 1 FDB DEATH1,EGGS1,STPLY1,SCRHUN,PLYG1,PLYTIM FDB SNPLWU,SNPLWD,SNPLSK,SNPLS2,SNPRU1,SNPRU2,SNPFAL,0,SNPCR1 FCB PL1*$11,$20,MSP1 G2DEC FDB G2JOY,G2JOY,SPLY2,$60D9,SCOPL2,PLYR2,TREPL2,CREP2 PLAYER 2 FDB DEATH2,EGGS2,STPLY2,SCRHUN,PLYG2,PLYTIM FDB SNPLWU,SNPLWD,SNPLSK,SNPLS2,SNPRU1,SNPRU2,SNPFAL,0,SNPCR2 FCB PL2*$11,$20,MSP2 P1DEC FDB P1JOY,P1JOY,SPLY1,$39D9,SCOPL1,PLYR1,TREPL1,CREP1 PLAYER 1 FDB DEATH1,EGGS1,STPLY1,SCRHUN,PLYG1,PLYTIM FDB SNPLWU,SNPLWD,SNPLSK,SNPLS2,SNPRU1,SNPRU2,SNPFAL,SNPTREF,SNPCR1 FCB PL1*$11,$20,MSP1 P2DEC FDB P2JOY,P2JOY,SPLY2,$60D9,SCOPL2,PLYR2,TREPL2,CREP2 PLAYER 2 FDB DEATH2,EGGS2,STPLY2,SCRHUN,PLYG2,PLYTIM FDB SNPLWU,SNPLWD,SNPLSK,SNPLS2,SNPRU1,SNPRU2,SNPFAL,SNPTREF,SNPCR2 FCB PL2*$11,$20,MSP2 P3DEC FDB AUTOFF,AUTOFF,0000,$0000,SCOPL2,PLYR3,TREPL3,EMYDIE FDB DEATH3,0,STENMY,SCRTEN,0,EMYTIM FDB SNELWU,SNELWD,SNEMSK,SNEMS2,SNERU1,SNERU2,SNEFAL,0,SNECRE FCB WHI*$11,$10,MSGAMO P4DEC FDB LINET,BOUNDR,0000,$0000,SCOPL2,PLYR3,TREPL3,EMYDIE FDB DEATH3,0,STENMY,SCRTEN,0,EMYTIM FDB SNELWU,SNELWD,SNEMSK,SNEMS2,SNERU1,SNERU2,SNEFAL,0,SNECRE FCB WHI*$11,$05,MSGAMO P5DEC FDB LINET,B2UNDR,0000,$0000,SCOPL2,PLYR4,TREPL3,EMYDIE FDB DEATH3,0,STENMY,SCRTEN,0,EMYTIM FDB SNELWU,SNELWD,SNEMSK,SNEMS2,SNERU1,SNERU2,SNEFAL,0,SNECRE FCB WHI*$11,$57,MSGAMO P6DEC FDB LINET,SHADOW,0000,$0000,SCOPL2,PLYR5,TREPL3,EMYDIE FDB DEATH3,0,STENMY,SCRHUN,0,EMYTIM FDB SNELWU,SNELWD,SNEMSK,SNEMS2,SNERU1,SNERU2,SNEFAL,0,SNECRE FCB WHI*$11,$15,MSGAMO P7DEC FDB LINET,PTERO,0000,$0000,SCOPL2,0,TREPL3,EMYDIE FDB DEATH4,0,STENMY,SCRHUN,0,EMYTIM FDB SNELWU,SNELWD,SNEMSK,SNEMS2,0,0,SNEFAL,0,SNECRE FCB WHI*$11,$10,MSGAMO * * TRANSPORTER COLOR EFFECT * TREPL1 FCB PL1*$11,PL1*$11,WHI*$11,PL1*$11,PL1*$11,GRY*$11,PL1*$11,PL1*$11 TREPL2 FCB PL2*$11,PL2*$11,WHI*$11,PL2*$11,PL2*$11,GRY*$11,PL2*$11,PL2*$11 TREPL3 FCB WHI*$11,WHI*$11,GRY*$11,WHI*$11,WHI*$11,GRY*$11,WHI*$11,WHI*$11 * * TRANSPORTER LOCATION TABLE * TR1ID FDB TRANS1,$6A+7,$51-1,CURTR1 TR2ID FDB TRANS2,$E0+7,$81-1,CURTR2 TR3ID FDB TRANS3,$10+7,$8A-1,CURTR3 TR4ID FDB TRANS4,$78+7,$D3-1,CURTR4 * * START THE ENEMY * STENMY RTS IFE DEBUG * * AND THE EVER POPULAR COPYRIGHT MESSAGE * FCC 'JOUST (C) 1982 WILLIAMS ELECTRONICS INC.' ENDIF PLYTIM FCB 1 * * PLAYER, & ENEMY FINALLY DIE * PLYDIE EMYDIE JMP VSUCIDE * * BEING CREATED/RE-CREATED * CREP1 EQU * * * * * CREATE PLAYER 1 CREP2 EQU * * * * * CREATE PLAYER 2 LDX PDECSN,U GET DECISION BLOCK! JSR DECLIV DECREMENT NBR OF LIVES BEQ PLYDIE LDA NPSERV TAKE A NUMBER TO BE SERVED BY THE TRANSPORTER STA PTIMX,U INC NPSERV BRA CRELP * CREPLY CMPB LPSERV IS IT THIS PLAYERS TURN? BNE CRELP BR=NO, FAIL THIS GUY CLR AREA1 FIND A CLEAR AREA TO APPEAR FROM CLR AREA2 CLR AREA3 LDX [PDUMMY] SEARCH THE LIST 10$ LDX PLINK,X FOR OTHER FLYING OBJECTS BEQ 40$ BR=END OF LIST LDA PID,X PROCESS ACTIVE ON SCREEN? BPL 10$ BR=NO CMPA #$80+EGGID AN EGG? BNE 30$ BR=NO LDD PDIST,X CALLING A BIRD? BEQ 10$ BR=NO, SO IGNORE HIM 30$ JSR SELARE CHECK IF AREA IS CLEAR BRA 10$ * 40$ LDD CURTR1 CALCULATE FOR A FREE TRANSPORTER STD STTR1 LDD CURTR3 STD STTR3 LDA AREA3 BOTTOM AREA EMPYT? BNE 50$ BR=NO LDA STTR4 BOTTOM TRANSPORTER NOT IN USE? BEQ GOTR4 BR=NO, GO USE IT 50$ LDA AREA2 MIDDLE AREA EMPYT? BNE 60$ BR=NO LDA STTR2 RIGHT MIDDLE TRANSPORTER NOT IN USE? BEQ GOTR2 BR=NO, GO USE IT LDA STTR3 LEFT MIDDLE TRANSPORTER NOT IN USE? BEQ GOTR3 BR=NO, GO USE IT 60$ LDA AREA1 TOP AREA EMPYT? BNE 70$ BR=NO LDA STTR1 TOP TRANSPORTER NOT IN USE? BEQ GOTR1 BR=NO, GO USE IT 70$ LDX #TRPLY TRANSPORTER SAFTEY AREA LDA TRSMALL SMALLER TRANSPORTER AREA? BNE CREALL BR=NO LDX #TRENY NARROWER TRANSPORTER SAFTEY AREA BRA CREALL GO CREATE VIA DEFAULT WAY * * CREATE THE ENEMY (BOO HISS..) * CREEM EQU * * * * * CREATE ENEMY LDA NESERV TAKE A NUMBER TO BE SERVED BY THE TRANSPORTER STA PTIMX,U INC NESERV CRELP PCNAP 1 LDB PTIMX,U PLEASE HAVE YOUR NUMBER READY FOR THE OPERATOR LDA PID,U CMPA #PLYID A NORMAL PLAYER? BEQ CREPLY LDA NPSERV ANY PLAYERS HOLDING A NUMBER? CMPA LPSERV BNE CRELP BR=YES, LET THEM FIND A TRANSPORTER 1ST CMPB LESERV IS IT THIS ENEMIES TURN? BNE CRELP BR=NO, FAIL THIS GUY LDX #TRENY TRANSPORTER SAFTEY AREA CREALL JSR FREET JSR VRAND BCC GOTR12 RORA BCS GOTR4 BRA GOTR3 GOTR12 RORA BCS GOTR2 GOTR1 LDX #TR1ID LDA STTR1 TOP MOST TRANSPORTER? BEQ GOTTR GOTR2 LDX #TR2ID LDA STTR2 NEXT MIDDLE TRANSPORTER? BEQ GOTTR GOTR3 LDX #TR3ID LDA STTR3 NEXT MIDDLE TRANSPORTER? BEQ GOTTR GOTR4 LDX #TR4ID LDA STTR4 BOTTOM TRANSPORTER? BEQ GOTTR LDX #TR1ID LDA STTR1 TOP MOST TRANSPORTER? BEQ GOTTR LDX #TR2ID LDA STTR2 NEXT MIDDLE TRANSPORTER? BEQ GOTTR LDX #TR3ID LDA STTR3 NEXT MIDDLE TRANSPORTER? BEQ GOTTR LDX #TR4ID LDA STTR4 BOTTOM TRANSPORTER? BNE CRELP GOTTR INC [TCURUSE,X] CURRENTLY THIS TRANSPORTER IN USE LDU PEXEC LDD TPOSX,X & INITIAL STANDING POSITION STD PPOSX,U LDD TPOSY,X STD PPOSY,U STX PSTATE,U TEMPORARY TRANSPORTER LEVEL LDX PDECSN,U LDX DSNCRE,X LDA PID,U CMPA #PLYID BNE 2$ INC LPSERV ALLOW PLAYERS NEXT NUMBERED CARD TO USE TRANSPORTER BRA 3$ 2$ INC LESERV ALLOW ENEMIES NEXT NUMBERED CARD TO USE TRANSPORTER 3$ JSR VSND LDA #30 STA PFRAME,U LDY PDECSN,U LDD [DPLYR,Y] STD PRIDER,U PUT RIDER ON HORSE LDA #STAND JSR SRCADA TREFF LDX PSTATE,U LDY [TIMAGE,X] JSR BCKYUP LDA ,X CONSTANT FILL OF TRANSPORTER ORA #$10 LDY PDECSN,U LDB DCONST,Y COLORED TRANSPORTER WHEN ACTIVE STD ,X LDA PFRAME,U CMPA #20 BGT TREFF2 ******************************************************************************* * * PATCHED-IN SPECIAL EFFECTS * by Kenneth F. Lantz Williams Electronics May 1982 * ******************************************************************************* JSR WPLYR LDB PFRAME,U TFR B,A COMA VERT SIZE ASRA ANDA #$0F EORA #$04 STA WCLENY,X TFR A,B CMPA #3 BLE 2$ LDB #3 2$ STB (WCLENY-10),X EORA #$04 NEGA INCA INCA ANDA #$0F TFR A,B ADDA WCY,X ADDB WCY-10,X STA WCY,X STB (WCY-10),X * LDB WCLENY,X MAKE SURE BUZARD/OSTRICH LENGTH IS NOT TOO LONG EORB #!WDMAFIX ADDB WCY,X CMPB PPOSY+1,U BLS 3$ LDB PPOSY+1,U INCB SUBB WCY,X CALC NEW LENGTH THAT IS NOT BELOW TRANSPORTER EORB #!WDMAFIX STB WCLENY,X * 3$ LDY PDECSN,U LDB DCONST,Y LDA WCDMA,X ORA #$10 STD WCDMA,X STD WCDMA-10,X ******************************************************************************* TREFF2 PCNAP 1 EFFECTS TIME JSR CNORIA LDA #$12 STA WCDMA,X LDD PPOSX,U ASRA RORB STB WCX,X LDA #18/2!X(!WDMAFIX) PROPER X LENGTH FOR BOX ERASE STA WCLENX,X DEC PFRAME,U LBNE TREFF * * WAIT FOR 1ST MOVE, OR TIME OUT; WHICH EVER COMES FIRST * LDX PDECSN,U LDD DJOY,X SELECT PROPER JOYSTICK ROUTINE STD PJOY,U LDA #16*2 STA PFEET,U LSRA STA PACCX,U LDA #2 STA PLANTZ,U CLR PTIMUP,U CLR PTIMX,U ******** CLR PADGRA+0,U ASSUME ALL LAST SWITCH POSITIONS OFF ******** CLR PADGRA+1,U ******** CMPX #P1DEC PLAYER1 JOYSTICK? ******** BEQ 10$ BR=YES ******** CMPX #P2DEC PLAYER2 JOYSTICK? ******** BNE 40$ BR=NO, NO SWITCHES WILL BE USED ********10$ JSR [DJOY,X] GET 1ST JOYSTICK POSITION ******** STD PADGRA,U REMEMBER THE SWITCHES BRA 40$ * 20$ PCNAP 1 40$ JSR [PJOY,U] GET JOYSTICK/DECISION LDD CURJOY ******** CMPA PADGRA+0,U JOYSTICK IN LAST POSITION? ******** BEQ 140$ BR=YES, IGNORE THESE SWITCHES ******** CLR PADGRA+0,U NO, REMEMBER NO SWITCHES ON ******** TSTA JOYSTICK SWITCHES ON? ******** BNE 51$ BR=PLAYER/ENEMY WANTS TO MOVE ********140$ CMPB PADGRA+1,U FLAP SWITCH IN LAST POSITION? ******** BEQ 141$ BR=YES, IGNORE THIS SWITCH ******** CLR PADGRA+1,U NO, REMEMBER NO SWITCHES ON ******** TSTB JOYSTICK SWITCHES ON? BNE 51$ BR=PLAYER/ENEMY WANTS TO FLAP ********141$ DEC PTIMUP,U TIME TO CHANGE SPEEDS? BGT 41$ LDA #75 STA PTIMUP,U LSR PFEET,U BEQ 50$ 41$ JSR WPLYR LDX PSTATE,U CLIFF TRANSPORTER HI-LIGHT LDY [TIMAGE,X] JSR BCKYUP LDY PDECSN,U LDY DTREFF,Y LEAX -10-10,X BACKUP TO 1ST BUFFER LDB PLANTZ,U BSR 45$ DECB BSR 45$ DECB BSR 45$ DEC PACCX,U CHANGE EFFECT BGT 42$ INC PLANTZ,U BLINK CLIFF TRANSPORTER ON/OFF LDA PFEET,U STA PACCX,U 42$ LDA PFEET,U LSRA BNE 20$ INC PTIMX,U BRA 20$ * 45$ PSHS B ANDB #$07 BNE 47$ LDB #2 STB PLANTZ,U STB ,S 47$ LDB B,Y TST PTIMX,U BEQ 48$ CMPB #PL1*$11 BEQ 49$ CMPB #PL2*$11 BEQ 49$ 48$ LDA WCDMA,X ORA #$10 STD WCDMA,X 49$ LEAX 10,X NEXT DMA BUFFER PULS B,PC * 51$ LDX PDECSN,U ABORTED EARLY, KILL SOUND LDX DSNTREF,X BEQ 50$ BR=NO SOUND JSR VSND 50$ JSR CPLYR LDX PSTATE,U CLIFF TRANSPORTER BACK TO NORMAL DEC [TCURUSE,X] CURRENTLY THIS TRANSPORTER NOT IN USE LDY [TIMAGE,X] JSR BCKYUP LDU PEXEC GET WORKSPACE BACK LDX PDECSN,U JSR [DSTART,X] START THE ENEMIES AFTER THE PLAYER BSR PLYINT RE-INCARNATED ENEMY/PLAYER LDD CURJOY GIVE CURRENT JOYSTICK BRA PLYRS2 * * INITILIZE SOME PLAYERS WORKSPACE * PLYINT LDD [DPLYR,X] STD PRIDER,U PUT RIDER ON HORSE LDD #PLYBR START AT GROUND STATE B STD PSTATE,U LDD #0 NO PVELY, (FOR INTELLIGENCE) STD PVELY,U CLR PVELX,U EVERYONE STARTS FROMA STAND STILL CLR PTIMX,U CLR PFRAME,U CLR PTIMUP,U CLR PACCX,U CLR PBUMPX,U HAVE NOT BEEN BUMPED REGISTER CLR PBUMPY,U LDA #$80 ENABLE THIS PLAYERS COLISIONS ORA PID,U STA PID,U LDA #STAND STANDING POSITION JMP SRCADG GET CORRECT SOURCE ADDRESS FOR THE GROUND * * PLAYER(S) MOVING RULES * PLAYR EQU * PLAYER 1 & 2 START LDD #LAND5 START Y POSITION STD PPOSY,U PCNAP 60 WAIT A SECOND THEN.. LDX PDECSN,U GET DECISION BLOCK! JSR DECLIV DECREMENT NBR OF LIVES LDU PEXEC GET WORKSPACE BACK LDX PDECSN,U JSR [DSTART,X] START THE ENEMIES AFTER THE PLAYER LDX PDECSN,U LDD DJOY,X SELECT PROPER JOYSTICK ROUTINE STD PJOY,U PLYLI2 BSR PLYINT RE-INCARNATED ENEMY JSR WPLYR * * MAIN RUNNING/STANDING/SKIDDING LOOP * PLYRLP LDX PDECSN,U LDA [DTIME,X] JSR VNAPTPC JSR [PJOY,U] PLYRS2 IFN DEBUG ???????????? DEBUG PARAMATER ????????? CMPA #-1 BLT 1$ CMPA #1 BGT 1$ CMPB #1 BLS 2$ 1$ SWI 2$ ENDIF ???????????? END OF DEBUG ???????????? TST PTIMUP,U FLAP BUTTON WAS RELEASED, WASNT IT? BNE PLNFLY BR=YES TSTB STARTING TO FLY?? LBNE STFLY BR=YES PLNFLY STB PTIMUP,U WAIT UNTIL BUTTON RELEASED LDB PFACE,U WHICH DIRECTION FACING? BPL PLFRIT BR=RIGHT NEGA REVERSE JOYSTICK FOR LEFT OPERATION PLFRIT LDB PACCX,U TIME TO UPDATE STATE TABLE? BEQ UPDSTA BR=YES DEC PACCX,U BNE UPDNON BR=NO UPDSTA LDX PSTATE,U ADDA #4 GET NEXT OFFSET TO NEW STATE LDB A,X OFFSET TO NEXT STATE IN REG.B BEQ UPDNON BR= SAME STATE LDA #8 NEW STATE, WAIT FOR NEXT STATE STA PACCX,U CLR PTIMX,U NEW STATES UPDATE POSITION LEAX B,X STX PSTATE,U CMPX #PLYLR START END OF SKID SOUND? BNE UPDNON BR=NO LDX PDECSN,U HERE IF YES, GET PROPER SOUND LDX DSNSK2,X JSR VSND MAKE END OF SKIDDING SOUND UPDNON DEC PTIMX,U TIME TO UPDATE POSITION? BLE UPDNO2 BR=YES LDB PBUMPX,U BEEN BUMPED? BEQ PLYRLP BR=NO JSR CPLYR ERASE PLAYER CLRB BRA PL2RIT HERE IS YES * UPDNO2 JSR CPLYR ERASE PLAYER LDD CURJOY GET CURRENT JOYSTICK POSITION LDX PSTATE,U LDA 6,X UPDATE FICTISIOUS VELX FOR BUMPING STA PVELX,U LDA ,X+ GET NEXT WAIT TIME STA PTIMX,U NEW WAIT TIME TILL NEXT STATE JSR [,X] GET REG.B=DELTA X, REG.X FRAME TO SHOW STA PIMAGE,U REMEMBER LAST FRAME LDA PFACE,U BPL PL2RIT NEG PVELX,U NEGB REVERSE DIRECTION FOR LEFT OPERATION PL2RIT JSR WRAPX ADD BUMP & WRAP AROUND IN THE X DIRECTION LDX PPOSX,U STILL WALKING ON THE CLIFF? LDY PPOSY,U LDA LNDXTB,X ANDA LNDYTB+1,Y ANDA #$7F IGNORE LAVA TROLL LBEQ STFALL BR=NO, MUST BE FALLING LDA BCKXTB+6,X BUMPING INTO CLIFF3U?? ANDA BCKYTB,Y BEQ PL2EDG BR=NO ORA BCKRFS REFRESH CLIFF 3U STA BCKRFS CLR PFACE,U FACE LEFT LDA PBUMPX,U BPL PL2LF2 NEGA PL2LF2 ADDA #3 STA PBUMPX,U PL2EDG BSR SRCADH GET CORRECT SOURCE ADDRESS BSR WPLYR JMP PLYRLP * * CALC WRITE IMAGE SOURCE ADDRESS * SRCADG STA PIMAGE,U COLISION DETECT ON THE GROUND SRCADH LDB PPOSY+1,U STB PCOLY1,U A LARGE COLISION DETECT BOX SUBB #$14-1 TOP LINE OF COLISION DETECTS BOX STB PCOLY2,U BRA SRCCOM * SRCADA STA PIMAGE,U IN THE AIR IMAGE SRCADR LDB PPOSY+1,U SUBB #6 A SMALLER COLISION DETECT BOX STB PCOLY1,U SUBB #$14-1-6 TOP LINE OF COLISION DETECTS BOX STB PCOLY2,U SRCCOM LDD PPOSX,U ADDD #18-1-1 STD PCOLX,U MAINTAIN COLISION DETECT POINTERS CLR PLANTZ,U LANTZ OFFSET IS ZERO CLRB LDA PFACE,U FACE OFFSET BPL SRCNOF LDB #6 SRCNOF ADDB PIMAGE,U LDX PHORSE,U CALCULATE HORSE FRAME OFFSET ABX STX PPICH,U LDX PRIDER,U CALCULATE RIDERS FRAME OFFSET BEQ WPNORI BR=NO RIDER CMPB #STAND *FOR NOW, RUN1 TO FLY3 USES STANDING IMAGE BLO SRCSKP * SUBB PIMAGE,U * ADDB #STAND * ABX WPNORI STX PPICR,U STORE RESULTANT RIDER FRAME RTS * SRCSKP ABX STX PPICR,U STORE RESULTANT RIDER FRAME LDB #2 SKIDDING OSTRICH HAS A LANTZ 2 PIXELS LOWER STB PLANTZ,U RTS * * WRITE OR CLEAR IMAGE * INPUT REG.X ADDRESS OF TOTAL IMAGE TO PUT TOGETHER * WPLYR LDU PEXEC LDY PPICR,U BEQ WNORIA BR=NO RIDER JSR VWR2CLS GET 2 DMA BLOCKS FOR RIDER/HORSE WRRIDR LDD 2,Y WRITE PLAYER ADDA CLSX ADDB CLSY STD WCDEST,X LDY 4,Y LDD ,Y++ STD WCLEN,X STY WCSRC,X LEAX 10,X * WRHORS LDY PPICH,U WRITE HORSE WRHOR2 LDD 2,Y ADDA CLSX ADDB CLSY STD WCDEST,X LDY 4,Y LDD ,Y++ STD WCLEN,X STY WCSRC,X WRRTS RTS * WNORIA LDY PPICH,U WRITE THE HORSE BEQ WRRTS WRREGY JSR VWR1CLS BRA WRHOR2 * * CLEAR LAST IMAGE PLOTTED AT LAST PPOSX & Y * (ORDER IS NOT IMPORTANT FOR ERASEING OBJECT) * CPLYR LDY PPICR,U BEQ CNORIA BR=NO RIDER JSR VCL2CLS GET 2 DMA BLOCKS FOR RIDER/HORSE BRA WRRIDR * CNORIA LDY PPICH,U CLEAR THE HORSE BEQ WRRTS CLREGY JSR VCL1CLS BRA WRHOR2 * * START TO FLY * STFLY JSR CPLYR ERASE PLAYER LDD #-$0080 INITIAL Y VELOCITY STD PVELY,U STKILL DEC PPOSY+1,U JUMP UP 1 PIXEL (GET OUT OF LANDING AREA) STFLY2 CLR PPOSY+2,U RESET FRACTIONAL DISTANCES CLR PPOSX+2,U CLR PBUMPY,U RESET BUMP Y REGISTER LDD #0 STD PSTATE,U FLYING STATE LDD #ADDGRA NORMAL GRAVITY ROUTINE (NOT LAVA TROLLS) STD PADGRA,U INC PACCX,U MAKE WINGS SHOW UP (1 FRAME), THEN DOWN JMP FLAST2 * * START TO FALL * STFALL LDA PFRAME,U A SKIDDING FALL OFF A CLIFF? BPL 1$ BR=NO LDX PDECSN,U START FALLING SOUND (STOP SKIDDING SOUND) LDX DSNFAL,X JSR VSND 1$ CLR PPOSY+2,U RESET FRACTIONAL DISTANCES CLR PPOSX+2,U CLR PBUMPY,U RESET BUMP Y REGISTER LDA #10 STA PACCX,U SLOW TIME TO RAISE WINGS LDD #0 STD PVELY,U INITIAL Y VELOCITY STD PSTATE,U FLYING STATE LDD #ADDGRA NORMAL GRAVITY ROUTINE (NOT LAVA TROLLS) STD PADGRA,U CLR PTIMUP,U NEEDS TO BE DONE LDA CURJOY+1 FLAP BUTTON PRESSED? BNE FLAPS2 BR=YES BRA FLIPS2 NO, START AT CORRECT FRAME * * FLYING FLAP/FLIP LOOPS * * WINGS ARE DOWN LOOP (FLAP PRESSED) * FLAPLP JSR WPLYR LDX PDECSN,U LDA [DTIME,X] JSR VNAPTPC JSR AIROVR FLYING OVERHEAD TSTB FLAP BUTTON STILL PRESSE? BEQ GOFLIP BR=NO FLAPS2 CLRB NO OFFSET TO GRAVITY FLAPST LDX #FLYX BIRDS X VELOCITY TABLE JSR [PADGRA,U] ADD IN GRAVITY LDA PACCX,U MAINTAIN MINIMUM WING DOWN TIME BLE WINGDN DEC PACCX,U WINGDN LDA #FLY1 WINGS DOWN WINGFK JSR SRCADA JSR CKGND LANDED? BNE FLAPLP BR=NO BRA STLAN START LANDING PROCEDURES * GOFLIP LDX PDECSN,U LDX DSNWU,X GET WING UP SOUND JSR VSND CLR PTIMUP,U RE-INIT BUTTON PRESSES BRA FLIPS2 * * WINGS ARE UP LOOP (FLAP RELEASED) * FLIPLP JSR WPLYR LDX PDECSN,U LDA [DTIME,X] JSR VNAPTPC JSR AIROVR FLYING OVERHEAD TSTB FLAP BUTTON STILL RELEASED? BNE GOFLAP BR=NO FLIPS2 LDB #$04 OFFSET TO GRAVITY FLIPST LDX #FLYX BIRDS X VELOCITY TABLE JSR [PADGRA,U] ADD IN GRAVITY LDA PACCX,U MAINTAIN MINIMUM WING DOWN TIME BLE 1$ DEC PACCX,U LDA #FLY1 PSYDO-WINGS DOWN FRAME (THEY ARE REALLY UP) BRA GOTFIT * 1$ LDA #FLY3 WINGS UP GOTFIT JSR SRCADA JSR CKGND LANDED? BNE FLIPLP BR=NO BRA STLAN START LANDING PROCEDURES * GOFLAP JSR ADDFLP ADD IN NEW X & Y VELOCITIES CLRB NO OFFSET TO GRAVITY (WINGS WILL BE DOWN) LDX #FLYX BIRDS X VELOCITY TABLE JSR [PADGRA,U] ADD IN GRAVITY FLAST2 LDX PDECSN,U LDX DSNWD,X GET WING UP SOUND JSR VSND CLR PTIMUP,U LDB PACCX,U SAVE MINIMUM WING DOWN TIME LDA #5 WING DOWN MINIMUM TIME STA PACCX,U TSTB WERE WINGS ALLOWED TO GO UP? BLE WINGDN BR=YES, SHOW NORMAL WINGS DOWN LDA #FLY3 FAKE WINGS UP FRAME BRA WINGFK * * START LANDING PROCEDURES * 1 - DETERMINE RUNNING POSITION BASED ON VELOCITY X * 2 - DETERMINE RUNNING SPEED VIA TABLE LOOK UP (ROUNDING) * 3 - GIVE JOYSTICK POISTION FOR RUNNING DECISIONS * STLAN LDA PVELX,U WHICH DIRECTION? BEQ STLDIR LAND IN SAME DIRECTION OF FLYING, CLR PFACE,U ASSUME FACING RIGHT TSTA BPL STLDIR LANDING RIGHT COM PFACE,U FACING LEFT NEGA NEED A POSITIVE SPEED STLDIR LDX #FRCONV CONVERT FLYING TO RUNNING LDX A,X GET STATE STX PSTATE,U & REMEMBER IT CLR PTIMX,U ALSO CHANGE ANIMATION FRAME CLR PACCX,U IMMEDIATE LAND JOYSTICK SERVICE LDA #1 MINIMUM DOWN TIME STA PTIMUP,U LDD #0 NO PVELY, (FOR INTELLIGENCE) STD PVELY,U LDA #STAND LAND STANDING STA PIMAGE,U JMP PL2EDG NO MORE FLYING * FRCONV FDB PLYBR STAND STILL FDB PLYCR NAP 8 - SLOWEST SPEED FDB PLYDR NAP 4 FDB PLYER NAP 2 FDB PLYFR NAP 1 - FASTEST SPEED * ENDAD1 EQU * CURRENT END ADDRESS IFGE *-$8FFF FCB $1111 ERROR, $6000-$8FFF MODULE IS TOO LONG ENDIF ORG $D800 * * SEARCH FOR A FREE AREA * INPUT REG.X = WORKSPACE OF PROCESS WITH A VALID Y POSITION * SELARE LDA PPOSY+1,X CMPA #$A3+6 $8A+6 BOTTOM AREA3 FREE? BLO 1$ BR=YES INC AREA3 HERE IF NO! RTS * 1$ CMPA #$51 MIDDLE AREA2 FREE? BLO 2$ BR=YES INC AREA2 HERE IF NO! RTS * 2$ INC AREA1 MUST BE IN TOP AREA1 RTS * * ADD IN THE FLAP TO FLIP VELOCITIES * ADDFLP LDB PTIMUP,U NOW CALC GAINED Y VELOCITY LDA #256*96/255 CALC NBR -96 TO 0 FROM 0 TO 255 MUL TFR A,B CLRA SUBD #96 NEW DELTA-Y, USE IN GRAVITY CALC ADDD PVELY,U STD PVELY,U LDA CURJOY ADD IN JOYSTICKS LEFT OR RIGHT POSITION ASLA ADDA PVELX,U GET CURRENT TABLE VELOCITY-X SPEED BLT ADXMAX CMPA #MAXVX PASSED MAXIMUM X VELOCITY? BGT ADXMX2 BR=NO STA PVELX,U RTS * ADXMAX CMPA #-MAXVX PASSED MINIMUM X VELOCITY? BLT ADXMX2 BR=NO STA PVELX,U ADXMX2 RTS * * IN THE AIR OVERHEAD * 0 - GET JOYSTICK POSITION, (UPDATES CLEAR POINTERS) * 1 - FACE THE JOYSTICKS DIRECTION * 2 - INCREMENT FLAP/FLIP TIMER * AIROVR JSR [PJOY,U] READ JOYSTICK IFN DEBUG ???????????? DEBUG PARAMATER ????????? CMPA #-1 BLT 1$ CMPA #1 BGT 1$ CMPB #-1 BEQ 2$ CMPB #1 BLS 2$ 1$ SWI 2$ ENDIF ???????????? END OF DEBUG ???????????? TSTA FACE RIGHT/LEFT?? BEQ AIRTIM BR=USE LAST DIRECTION CLR PFACE,U ASSUME RIGHT TSTA BPL AIRTIM COM PFACE,U FACEING LEFT AIRTIM INC PTIMUP,U NBR OF TICKS IN THE AIR BNE AIRRTS DEC PTIMUP,U NO OVERFLOW, JUST SATURATE AIRRTS JSR CPLYR ERASE PLAYER LDD CURJOY GIVE BACK JOYSTICK POSITION RTS * * ADD IN GRAVITY * INPUT REG.B = ADDITION TO GRAVITY (VELOCITY) * REG.X = X DRECTION VELOCITY TABLE * 1 - MODIFY VELOCITY Y FOR GRAVITY * 2 - CALC NEW POSITIONS * ADDGRA ADDB GRAV ADD IN VARIABLE GRAVITY SEX ADDD PVELY,U STD PVELY,U NEW Y VELOCITY * ADDGRX ADDD PPOSY+1,U ADD IN FRACTIONAL DISTANCE ADDA PBUMPY,U ADD IN BUMPING REGISTER CLR PBUMPY,U CMPA #CEILNG HIGHEST POSITION ***** BHI ADGCEI BR=HAVE NOT HIT CEILING INC PBUMPY,U LDD PVELY,U BPL ADGDWN BR=ALREADY GOING DOWN, DON'T GO UP COMA NEGB SBCA #-1 INVERT VELOCITY STD PVELY,U ADGDWN LDD #CEILNG*256 BRA ADGCEI ADGCEI CMPA #FLOOR+7 BELOW SEA LEVEL (ON THE FLOOR)? BHS ADGFLR BR=YES, TOO BAD, YOU ARE DEAD STD PPOSY+1,U * LDA PVELX,U LDD A,X ADDB PVELX+2,U ADD IN FRACTIONAL DISTANCE STB PVELX+2,U ADCA #0 CARRY TO POSITION X TFR A,B JMP WRAPX * * * DEATH VIA SWIMMING IN THE LAVA * ADGFLR IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA PID,U ONLY PLAYERS & EMIES SHOULD GET HERE CMPA #$80+PLYID BEQ 123$ CMPA #$80+EMYID BEQ 123$ SWI 123$ ENDIF ???????????? END OF DEBUG ???????????? LDX #SNPLAV LDA PID,U CMPA #$80+PLYID PLAYER BEQ 1$ LDX #SNELAV ENEMY IN LAVA 1$ JSR VSND ADGLAV JSR WPLYR WRITE THE PLAYER JSR FCLIP CLIP THE IMAGE BASED ON THE FLOOR PCNAP 3 JSR CPLYR ERASE THE PLAYER JSR FCLIP CLIP THE IMAGE BASED ON THE FLOOR LDA PID,U IS THE GUY DEAD OR JUST HERE FOR THE RIDE? BPL ADGDED BR=DEAD IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDB PPICR,U THERE IS A RIDER ISN'T THERE? BNE 1$ SWI 1$ ENDIF ???????????? END OF DEBUG ???????????? LDB WCLENY,X HAS THE GUYS LENGTH CHANGED? (IN LAVA) CMPB #7!X(!WDMAFIX) GUYS LENGTH IS ASSUMED TO BE 7 PIXELS TALL BEQ ADGDED BR=NO, THE GUY IS STILL ABOVE THE LAVA ANDA #$7F NOW THIS GUY IS DEAD STA PID,U LDD #0 STD PPICR,U STD PRIDER,U LDX #0 NO VICTOR LDY PDECSN,U JSR [DDEAD,Y] CALL DEATH ROUTINE (REG.X VICTOR, REG.U DEAD) * ADGDED INC PPOSY+1,U LDA PPOSY+1,U CMPA #FLOOR+20+1 ALL THE WAY IN THE LAVA? BLO ADGLAV BR=NO, IT'S NOT SOUP YET! PCNAP 30 LDX PDECSN,U TRY TO RE-CREATE THIS GUY JMP [DCRE,X] * * FLOOR CLIPPING ROUTINE FOR THE BIRDS * FCLIP BSR CLIPER CLIP THE OSTRICH LDD PPICR,U IS A RIDER PRESENT? BEQ CLPRTS BR=NO LEAX -10,X MUST BE, SO CLIP HIM ALSO * * GENERAL CLIPPING ROUTINE FOR AFTER CLxCLS or WRxCLS WITH OFFSETS * CLIPER LDA WCLENY,X FIND BOTTOM LINE OF OBJECT EORA #!WDMAFIX ADDA WCY,X CMPA #FLOOR+1 BELOW THE FLOOR BLO CLPRTS BR=NO LDA WCY,X YES, IS THE TOP BELOW THE FLOOR? CMPA #FLOOR+1 BELOW THE FLOOR BLO CLPIT BR=NO, JUST THE BOTTOM LDA #$F0 WELL, WRITE THIS OFF SCREEN, A ROM STA WCX,X IS OK TO WRITE INTO (I HOPE) LDD #$0000!XDMAFIX A 1 BYTE TRANSFER STD WCLEN,X CLPRTS RTS * CLPIT NEGA ADDA #FLOOR+1 NEW LENGTH EORA #!WDMAFIX STA WCLENY,X RTS * * ADD IN LAVA TROLLS GRAVITY * INPUT REG.B ADDITION TO GRAVITY (VELOCITY) * 1 - MODIFY VELOCITY Y FOR GRAVITY * 2 - CALC NEW POSITIONS * ADDLAV CLR PBUMPX,U NO BUMPAGE ALLOWED CLR PBUMPY,U CLR PVELX,U THE PLAYER IS NOT GOING ANYWERE SEX ADDD CLVGRA PATCH3 ******** ADDD LAVGRA ADDD PVELY,U STD PVELY,U NEW Y VELOCITY CMPD #-$0180 BREAK FREE VELOCITY? BLT ADLFRE BR=NO, SO STOP FALLING ADDD PPOSY+1,U ADD IN FRACTIONAL DISTANCE STD PPOSY+1,U CMPA #FLOOR+7 BIRD IN THE LAVA? BLO ADLX BR=NO LDX PLINK,U KILL LAVA TROLL TASKS LDA PID,X ANOTHER PROCESS CAN SNEAK IN, CMPA #LAVID+1 SO, CHECK TO MAKE SURE THIS IS THE TROLL BNE 11$ LDD #LT2DIE ERASE & STOP GRAB ROUTINE STD PPC,X 11$ LDX PPREV IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA PID,X CMPA #LAVID BEQ 2$ SWI BRA 22$ 2$ ENDIF ???????????? END OF DEBUG ???????????? LDD #LT1DON STOP RAISE/LOWER HAND ROUTINE STD PPC,X LDD #ADDGRA BACK TO NORMAL GRAVITY STD PADGRA,U 22$ JMP ADGFLR NOW, THE GUY IS IN THE LAVA * ADLX LDD PPOSX,U PUT THE GUY ON THE VISABLE SCREEN CMPD #ELEFT+14+4 BGT 10$ LDD #ELEFT+14+4 10$ CMPD #ERIGHT-14 BLT 11$ LDD #ERIGHT-14 11$ STD PPOSX,U TFR U,Y JSR LAVVI3 BIRD OUT OF LAVA TROLLS RANGE? BNE ADLFRE BR=YES IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDX PLINK,U LAVA TROLL STILL ACTIVE? LDA PID,X CMPA #LAVID+1 BEQ 12$ BR=NO, A PROBLEM EXISTS SWI 12$ ENDIF ???????????? END OF DEBUG ???????????? RTS * ADLFRE LDA PID,U IS THE PERSON ALIVE BPL 33$ LDA #$50 SCORE 50 POINTS FOR BREAKING FREE LDX PDECSN,U JSR SCRTEN 33$ LDX PLINK,U KILL LAVA TROLL GRAB TASK LDA PID,X ANOTHER PROCESS CAN SNEAK IN, CMPA #LAVID+1 SO, CHECK TO MAKE SURE THIS IS THE TROLL BNE 11$ LDD #LT2DIE STD PPC,X 11$ LDX PPREV DROP THE HAND IFN DEBUG ???????????? DEBUG PARAMATER ????????? LDA PID,X DEBUG CMPA #LAVID BEQ 2$ SWI BRA 22$ 2$ ENDIF ???????????? END OF DEBUG ???????????? LDD #LT1DRP STD PPC,X LDA #1 STA PNAP,X 22$ LDD #ADDGRA BACK TO NORMAL GRAVITY STD PADGRA,U LDD PVELY,U SHOW NEW HIGHER POSITION ADDD PPOSY+1,U ADD IN FRACTIONAL DISTANCE STD PPOSY+1,U RTS * * CHECK IF ON THE GROUND, FROM PPOSX & PPOSY * STATUS NE = STILL IN THE AIR * EQ = ON THE GROUND * OUTPUTS REG.B = Y LOCATION * CKGND LDX PPOSX,U GET X LOCATION OF OBJECT LDY PPOSY,U GET Y LOCATION OF OBJECT LDA LNDXTB,X STARTING TO LAND ON A CLIFF? ANDA LNDYTB,Y BNE LND18 BR=STARTING TO LAND(CANNOT COLIDE WITH BCKGND) LDA BCKXTB,X BACKGROUND MAP IN X DIRECTION ANDA BCKYTB,Y BACKGROUND MAP IN Y DIRECTION BEQ CKG2 BR=NO BOX COLLISION WITH BACKGROUND JSR BCKCOL PIXEL HIT BACKGROUND IMAGE? CKG2 LDA #1 NOT ON GROUND RTS * LND18 CMPA #$08 BLO LND13 BEQ LNDB3 LND47 CMPA #$20 BLO LNDB4 BITA #$20 BNE LNDB5 BRA LNDB7 * LND13 CMPA #$02 BEQ LNDB1 BHI LNDB2 * LNDB0 EQU * CLIF1L & CLIF1R LDB #$0045-1 ON TOP OF CLIFF PIXEL HEIGHT STB PPOSY+1,U CLRA RTS * LNDB1 EQU * CLIF2 LDB #$0051-1 ON TOP OF CLIFF PIXEL HEIGHT STB PPOSY+1,U CLRA RTS * LNDB2 EQU * CLIF3R LDB #$0081-1 ON TOP OF CLIFF PIXEL HEIGHT STB PPOSY+1,U CLRA RTS * LNDB3 EQU * CLIF3L & CLIF3R LDB #$008A-1 ON TOP OF CLIFF PIXEL HEIGHT STB PPOSY+1,U CLRA RTS * LNDB4 EQU * CLIF4 LDB #$00A3-1 ON TOP OF CLIFF PIXEL HEIGHT STB PPOSY+1,U CLRA RTS * LNDB5 EQU * CLIF5 LDB #$00D3-1 ON TOP OF CLIFF PIXEL HEIGHT STB PPOSY+1,U CLRA RTS * LNDB7 EQU * LAVA TROLLS LDA TTROLL LAVA TROLL ACTIVE? BNE LNDB7C BR=NO LDA LAVNBR TOO MANY LAVA TROLLS? BNE LNDB7C BR=YES, DO NOT START ANOTHER LDA PID,U CHOOSY MOTHER CHOOSE JIFF??? CMPA #$80+PLYID PLAYER? BEQ 1$ CMPA #$80+EMYID ENEMY? BNE LNDB7C ANY ONE ELSE, JUST IGNORE 1$ INC LAVNBR 1 MORE LAVA TROLL LDA #LAVID LAVATROLL I.D. LDB PPRI,U ALSO COPY PIRORITY VALUE LDX #LAVAT1 START LAVA TROLL PROCESS LDU PPREV AFTER PREVIOUS PROCESS (BEFORE THIS ONE) JSR VCUPROC CREATE A PROCESS, ABRAKADABRA... LDU PEXEC HU HUM... BACK TO SAME OLD WORKSPACE STU PJOY,Y FINGER PRINT THIS PROCESS FOR THE LAVA TROLL CLR PFRAME,Y LAVA TROLL FRAME ZERO TO START LDD #FLOOR-9 STARTING AT THE GROUND FLOOR STD PPOSY,Y BUT NEXT WEEK HE'LL GET A PROMOTION LDD PPOSX,U START X POSITION ADDD #-2 LAVA TROLL OFFSET STD PPOSX,Y LDD #0 STD PPICH,Y NO PREMATURE CLEAR OF AN IMAGE LDA #1 START FIRST FRAME STA PJOYT,Y LNDB7C LDB PPOSY+1,U INDICATE NOT TO LAND RTS * * DETECT & BOUNCE OFF BACKGROUND COLISION (FROM PPOSX & PPOSY) * INPUT: REG.A - COLISION BIT OF ROUGH BACKGROUND COLISION * REG.U - THE OBJECT COLIDING WITH * BCKCOL TFR A,B ORA BCKRFS REFRESH THIS BACKGROUND IMAGE WHEN NECESSARY STA BCKRFS TSTB LBMI BCKB7 CMPB #$08 BLO BCK13 LBEQ BCKB3 BCK47 ANDB #$70 CMPB #$20 LBHI BCKB6 BLO BCKB4 JMP BCKB5 * BCK13 CMPB #$02 BEQ BCKB1 LBHI BCKB2 * BCKB0 EQU * BIT 0 = CLIF1L LDY [CLIF1L] COLISION DETECT POINTERS LDD #-32 LDX #69 BRA BCKB04 * BCKB4 EQU * BIT 4 = CLIF3L LDY [CLIF3L] COLISION DETECT POINTERS LDD #-32 LDX #138 BCKB04 PSHS Y JSR BCKPIX BCC NOBCK CMPY ,S++ BNE BCCOML LDA 1*4,X TOP COLISION? ,LOWER 4 LINES OF BIRD/HORSE? BMI 1$ BR=YES LDA 2*4,X BMI 1$ BR=YES LDA 3*4,X BMI 1$ BR=YES LDA 4*4,X BPL BCCOML BR=NO, MUST OF HIT PLAYERS HEAD 1$ JMP BCTOP * BCCOML LDA 4,Y BOTTOM COLISION? BMI BCBOT2 BR=YES LDD ,Y LEFT OR RIGHT SIDE? ADDD 2,Y TO DECIDE TAKE A TYPE OF AVERAGE FOR THIS SUBD ,X COLISIONED LINE SUBD 2,X ADDD COLDX ADDD COLDX LBMI BCRIT JMP BCBOT BR=OBJECT ON LEFT * NOBCK LEAS 2,S NOBCK2 RTS * BCKB1 EQU * BIT 1 = CLIF1R LDY [CLIF1R] COLISION DETECT POINTERS LDD #252 LDX #69 BRA BCKB15 * BCKB5 EQU * BIT 5 = CLIF3R LDY [CLIF3R] COLISION DETECT POINTERS LDD #202 LDX #129 JSR BCKPIX BCC NOBCK2 LDB PPOSY+1,U CMPB #$89+4+6 BHI BCCOMR BRA BCK15C * BCKB3 EQU * BIT 3 = CLIF3U LDY [CLIF3R] COLISION DETECT POINTERS LDD #202 LDX #129 BCKB15 PSHS Y JSR BCKPIX BCC NOBCK CMPY ,S++ BNE BCCOMR BCK15C LDA 1*4,X TOP COLISION?, LOWER 4 LINES OF BIRD/HORSE? BMI 1$ BR=YES LDA 2*4,X BMI 1$ BR=YES LDA 3*4,X BMI 1$ BR=YES LDA 4*4,X BPL BCCOMR BR=NO, MUST OF HIT PLAYERS HEAD 1$ JMP BCTOP * BCCOMR LDA 4,Y BOTTOM COLISION? BMI BCBOT2 BR=YES LDD ,Y LEFT OR RIGHT SIDE? ADDD 2,Y TO DECIDE TAKE A TYPE OF AVERAGE FOR THIS SUBD ,X COLISIONED LINE SUBD 2,X ADDD COLDX ADDD COLDX LBPL BCLFT BR=OBJECT ON LEFT BCBOT2 JMP BCBOT * BCKB7 EQU * BIT 7 = CLIF5 LDY [CLIF5] COLISION DETECT POINTERS LDD #54 LDX #211 BRA BCKB27 * BCKB2 EQU * BIT 2 = CLIF2 LDY [CLIF2] COLISION DETECT POINTERS LDD #86 LDX #81 BRA BCKB27 * NOBCKB LEAS 2,S RTS * BCKB6 EQU * BIT 6 = CLIF4 LDY [CLIF4] COLISION DETECT POINTERS LDD #106 LDX #163 BCKB27 PSHS Y JSR BCKPIX BCC NOBCKB CMPY ,S++ BNE BCCOM LDA 1*4,X TOP OF CLIFF?, LOWER 4 LINES OF BIRD/HORSE? BMI BCTOP BR=NO LDA 2*4,X BMI BCTOP BR=NO LDA 3*4,X BMI BCTOP BR=NO LDA 4*4,X BMI BCTOP BR=NO BCCOM LDA 4,Y BOTTOM COLISION? BMI BCBOT BR=YES BCLR LDD ,Y LEFT OR RIGHT SIDE? ADDD 2,Y TO DECIDE TAKE A TYPE OF AVERAGE FOR THIS SUBD ,X COLISIONED LINE SUBD 2,X ADDD COLDX ADDD COLDX BPL BCLFT BR=OBJECT ON LEFT * BCRIT LDA PVELX,U MAKE VELOCITY X DIRECTION POSITIVE BGE BCRITB NEGA BCRITM SUBA #2 SLOW DOWN X VELOCITY STA PVELX,U BCRITB ADDA #6 BRA BCLFTV * BCBOT LDD PVELY,U MAKE VELOCITY Y POSITIVE BPL BCBOTM COMA NEGB SBCA #-1 ASRA RORB STD PVELY,U BCBOTM BRA BCLFTE * BCLFT LDA PVELX,U MAKE VELOCITY X DIRECTION NEGATIVE BLE BCLFTB NEGA ADDA #2 SLOW DOWN X VELOCITY STA PVELX,U BCLFTB SUBA #6 BCLFTV STA PBUMPX,U LDD PVELY,U FALL A LITTLE BIT MORE CMPD #-$0040 BPL BCLFTH LDD #-$0040 BCLFTH STD PVELY,U BCLFTE LDA #2 STA PBUMPY,U LDX #SNCTHD JMP VSND * BCTOP LDD PVELY,U MAKE VELOCITY Y NEGATIVE BMI BCTOPC COMA COMB ASRA RORB STD PVELY,U BCTOPC LDA #-2 STA PBUMPY,U LDA PVELX,U BNE BCUP BOUNCE LEFT/RIGHT IF NO VELOCITY X LDD ,Y LEFT OR RIGHT SIDE? ADDD 2,Y TO DECIDE TAKE A TYPE OF AVERAGE FOR THIS SUBD ,X COLISIONED LINE SUBD 2,X ADDD COLDX ADDD COLDX BPL BCTL BR=OBJECT ON LEFT LDA #2 STA PVELX,U BCUP LDX #SNCTHD JMP VSND * BCTL LDA #-2 STA PVELX,U LDX #SNCTHD JMP VSND * * PIXEL BACKGROUND COLISION DETECT ROUTINE * NEEDS; REG.U = PROCESS BLOCK WITH VALID PPOSX & PPOSY2 & PPICH * REG.Y = CLIFFS COLISION DETECT POINTER * REG.X = TOP LINE OF CLIFF (Y POSITION) * REG.D = LEFT COLUMN OF CLIFF (X POSITION) * OUTPUTS; REG.X = CURRENT OBJECTS COLISION POINTER * REG.Y = CURRENT BACKGROUNDS COLISION POINTER * STATUS C=0 (CC) - NO COLISION * C=1 (CS) - COLSION * BCKPIX SUBD PPOSX,U GET DIFFERENCES IN X DIRECTION STD COLDX REMEMBER THIS DIFFERENCE TFR X,D FIGURE WHO IS ON TOP OF WHO LDX [PPICH,U] (AND GET OBJECTS COLISION DETECT DATA) SUBB PCOLY2,U COLISION DETECT UPON TOP LINE OF OBJECT BMI BPYONX BR=Y (BCKGND) IS ON TOP OF X (OBJECT) ASLB X (OBJECT) IS ON TOP, MATCH X LEVEL TO Y ASLB (DIFFERENCE X4, OR 2 WORDS PER LINE) ROLA (MAXIMUM DIFFERENCE DELTA Y = $7F) LEAX D,X BRA BPCOL * BPYONX NEGB MAKE DIFFERENCE POSITIVE ASLB ASLB ROLA LEAY D,Y BRA BPCOL * BP1STA LDA ,X BP1STB ORA ,Y RORA CONTINUATION OR END OF TABLE POINTER? BCS BPEN BR=END OF TABLE POINTER LEAX 4,X NEXT POINTERS LEAY 4,Y BPCOL LDD 2,X BLT BP1STB SUBD ,Y BVS BP1STA SUBD COLDX BLT BPYX4 BR=NO COLISION BUT Y ON LEFT OF X LDD ,X SUBD 2,Y SUBD COLDX BGT BPXY4 BR=NO COLISION BUT X ON LEFT OF Y COMA COLISION RTS * BPYX0 LEAX 4+4+4+4,X Y ON LEFT OF X LEAY 4+4+4+4,Y NEXT POINTERS LDD 2,X BLT BPEN SUBD ,Y BVS BPEN SUBD COLDX BLT BPYX4 BR=NO COLISION COMA COLISION, Y ON LEFT OF X RTS * BPYX4 LDD 4+2,X BLT BPEN SUBD 4+0,Y BVS BPEN SUBD COLDX BLT BPYX8 BR=NO COLISION LEAX 4,X LEAY 4,Y COMA COLISION, Y ON LEFT OF X RTS * BPYX8 LDD 4+4+2,X BLT BPEN SUBD 4+4+0,Y BVS BPEN SUBD COLDX BLT BPYXC BR=NO COLISION LEAX 4+4,X LEAY 4+4,Y COMA COLISION, Y ON LEFT OF X RTS * BPYXC LDD 4+4+4+2,X BLT BPEN SUBD 4+4+4+0,Y BVS BPEN SUBD COLDX BLT BPYX0 BR=NO COLISION LEAX 4+4+4,X LEAY 4+4+4,Y COMA COLISION, Y ON LEFT OF X RTS * BPEN CLRA NO COLISION RTS * BPXY0 LEAX 4+4+4+4,X X ON LEFT OF Y LEAY 4+4+4+4,Y NEXT POINTERS LDD 0,X BLT BPEN SUBD 2,Y BVS BPEN SUBD COLDX BGT BPXY4 BR=NO COLISION COMA RTS * BPXY4 LDD 4+0,X BLT BPEN SUBD 4+2,Y BVS BPEN SUBD COLDX BGT BPXY8 BR=NO COLISION LEAX 4,X LEAY 4,Y COMA RTS * BPXY8 LDD 4+4+0,X BLT BPEN SUBD 4+4+2,Y BVS BPEN SUBD COLDX BGT BPXYC BR=NO COLISION LEAX 4+4,X LEAY 4+4,Y COMA COLISION, X ON LEFT OF Y RTS * BPXYC LDD 4+4+4+0,X BLT BPEN SUBD 4+4+4+2,Y BVS BPEN SUBD COLDX BGT BPXY0 BR=NO COLISION LEAX 4+4+4,X LEAY 4+4+4,Y COMA COLISION, X ON LEFT OF Y RTS * * * BIRDS X VELOCITY TABLE * FDB -$0200 FDB -$0100 FDB -$0080 FDB -$0040 FLYX FDB $0000 FDB $0040 FDB $0080 FDB $0100 FDB $0200 * STATE MACRO WAIT,CALL,MINUS,ZERO,PLUS,FLYVEL FCB WAIT,!HCALL,!WCALL,MINUS-*,ZERO-*,PLUS-*,FLYVEL ENDM PLYAR STATE 8,REVR,PLYBR,PLYBR,PLYBR,0 PLYBR STATE 0,STANDR,PLYAR,PLYBR,PLYCR,0 PLYCR STATE 8,RUNR,PLYGR,PLYCR,PLYDR,2 PLYDR STATE 4,RUNR,PLYCR,PLYDR,PLYER,4 PLYER STATE 2,RUNR,PLYHR,PLYER,PLYFR,6 PLYFR STATE 1,RUNR,PLYIR,PLYFR,PLYFR,8 PLYGR STATE 2,RUNSR,PLYBR,PLYBR,PLYCR,2 PLYHR STATE 2,SKIDR,PLYKR,PLYKR,PLYDR,4 PLYIR STATE 2,SKIDR,PLYJR,PLYJR,PLYER,6 PLYJR STATE 2,SKIDR,PLYKR,PLYKR,PLYDR,4 PLYKR STATE 2,SKIDR,PLYLR,PLYLR,PLYDR,4 PLYLR STATE 4,SKIDR,PLYMR,PLYMR,PLYCR,2 PLYMR STATE 4,SKIDR,PLYBR,PLYBR,PLYCR,2 * * LEFT RIGHT TYPES OF MOVEMENTS * REVR COM PFACE,U REVERSE DIRECTION * STANDR LDD #STAND*256+0 GET STANDING FRAME & DELTA POSITION CLR PFRAME,U RTS * ORRUN FCB RUN1,0 INITIAL FRAME FROM STANDSTILL TO FRAME 1 FCB RUN4,3 PIXEL JUMP FROM FRAME 3 TO 4 (PFRAME 2 TO 1) FCB RUN3,2 PIXEL JUMP FROM FRAME 2 TO 3 (PFRAME 3 TO 2) FCB RUN2,1 PIXEL JUMP FROM FRAME 1 TO 2 (PFRAME 4 TO 3) FCB RUN1,2 PIXEL JUMP FROM FRAME 4 TO 1 (PFRAME 1 TO 4) * RUNR LDB PFRAME,U NEXT FRAME BLE RUNRST BR=STARTING TO RUN DECB BGT RUNFRM BR=CORRECT FRAME NBR LDB #4 START FRAME 4 THEN 3,2,1 RUNFRM STB PFRAME,U CMPB #1 RUNNING THUMP FRAME? BNE 1$ BR=NO LDX PDECSN,U INC PFEET,U NEXT FOOT SOUND LDA PFEET,U RORA BCC 3$ LDX DSNRU1,X FIRST FOOT RUNNING SOUND BRA 2$ * 3$ LDX DSNRU2,X SECOND FOOT RUNNING SOUND 2$ JSR VSND LDB PFRAME,U 1$ ASLB X2 LDX #ORRUN GET RUNNING INFORMATION. ABX LDD ,X GET DELTA X DIRECTION & FRAME OFFSET RTS * RUNRST LDB #4 CURRENT FRAME STB PFRAME,U LDD ORRUN STARTING RUNNING ANIMATION FRAME & FRAME OFFSET RTS * FCB 0 STOP RUNNING OFFSET FROM A SKID STPRUN FCB 0 STOP RUNNING OFFSET FROM STANDING POSITION FCB 2 STOP RUNNING OFFSET FROM FRAME 4 FCB 4 STOP RUNNING OFFSET FROM FRAME 3 FCB 1 STOP RUNNING OFFSET FROM FRAME 2 FCB 1 STOP RUNNING OFFSET FROM FRAME 1 * RUNSR LDX #STPRUN STOP RUNNING DELTA LDB PFRAME,U LDB B,X GET CORRECT DELTA X FOR SKID LDA #STAND CLR PFRAME,U RTS * SKIDR LDA PFRAME,U BMI 1$ BR=ALREADY SKIDDING LDX PDECSN,U LDX DSNSK,X GIVE SKIDDING SOUND JSR VSND 1$ LDA #-1 STA PFRAME,U -1 FRAME NBR LDD #SKID*256+2 GET CORRECT DELTA X & PICTURE FOR SKID RTS * * PLAYER 1 -READ JOYSTICK * P1JOY LDA WCPIAB SELECT HALF OF MUX ORA #$08 BRA P2SAM SAME AS PLAYER 2 JOYSTICK * * PLAYER 2-READ JOYSTICK * P2JOY LDA WCPIAB ANDA #$F7 P2SAM STA WCPIAB LDA WPIAA READ JOYSTICK CLRB ASSUME JUMP BUTTON NOT PRESSED BITA #$04 IS JUMP BUTTON PRESSED? BEQ P2NJMP BR=NO INCB INDICATE JUMP PRESSED P2NJMP ANDA #$03 CONVERT JOYSTICK TO + (RIGHT), 0, - (LEFT) ASRA VIA MATHAMATICAL EXPRESSION SBCA #0 STD CURJOY STORE AS CURRENT JOYSTICK RTS * * ADD BUMP,U OFFSET & WRAP AROUND IN THE X DIRECTION * INPUT REG.B = NEW DELTA X POSITION * WRAPX LDA PBUMPX,U ALSO ADD IN BUMP REGISTER BEQ WRPWRD NO BUMPING! BLT WRPBLF BR=BUMPING LEFT CMPA #3 BLE WRPBRM BR=BUMP REMAINING TIME ADDB #3 SUBA #3 STA PBUMPX,U BRA WRPWRD * WRPBLF CMPA #-3 BGE WRPBRM BR=BUMP REMAINING TIME ADDB #-3 SUBA #-3 STA PBUMPX,U BRA WRPWRD * WRPBRM ADDB PBUMPX,U CLR PBUMPX,U AND RESET BUMP REGISTER * WRPWRD SEX NEW DELTA DISTANCE ADDD PPOSX,U CHECK IF .EQ. OR BETWEEN -11 TO 296 CMPD #ERIGHT BLE WRXMAX ADDD #-(ERIGHT-ELEFT+1) WRXMAX CMPD #ELEFT BGE WRXMIN ADDD #(ERIGHT-ELEFT+1) WRXMIN STD PPOSX,U RTS * * DYNAMIC CHANGES IN INTELLIGENCE * DYTBL DYWORD $000B,$0006,$0004,-01,$0001,$FA86,$4433,$21 LAVTIM DYWORD $0004,$0006,$0008,+02,$002D,$FA86,$4333,$21 LAVGRA DYWORD $0010,$0008,$0004,-01,$0001,$FA86,$4433,$21 LAVLAV DYWORD $0060,$0040,$0020,-02,$0010,$FFCA,$8643,$21 EGGWT DYWORD $5A+4,$34+4,$1E+4,-04,$0008,$CA53,$A525,$21 EGGWT2 DYWORD $000E,$000E,$000C,-01,$000B,$FFFF,$FFF8,$42 BODNRG DYWORD $F000,$F200,$F800,$20,$FF00,$4211,$4214,$21 BODNDI DYWORD $0080,$0100,$0200,$20,$0300,$4211,$F813,$21 BODNVY DYWORD $FFF1,$FFF2,$FFF4,+01,$FFF5,$FFFF,$FFF8,$42 BOUPRG DYWORD $1000,$0E00,$0800,$E0,$0100,$4211,$4214,$21 BOUPDI DYWORD $0003,$0002,$0001,-01,$0001,$FA86,$4433,$21 BOUPWD DYWORD $000A,$0008,$0006,-01,$0002,$FA86,$4433,$21 BOUPWU DYWORD $0020,$0015,$0010,-01,$0002,$7766,$4433,$21 BOLETM DYWORD $000F,$000E,$000C,-01,$000B,$FFFF,$FFFA,$22 HUDNRG DYWORD $F000,$F200,$F800,$20,$FF00,$FFFF,$FF84,$22 HUDNDI DYWORD $0100,$0200,$0300,$20,$0380,$FFFF,$FF84,$84 HUDNVY DYWORD $FFF1,$FFF2,$FFF4,+01,$FFF5,$FFFF,$FFF8,$22 HUUPRG DYWORD $1000,$0E00,$0800,$E0,$0100,$FFF8,$FF84,$22 HUUPDI DYWORD $0003,$0002,$0001,-01,$0001,$FFF8,$FF83,$22 HUUPWD DYWORD $000A,$0008,$0006,-01,$0002,$FFF8,$FF83,$22 HUUPWU DYWORD $FF80,$FF00,$FE00,$20,$FE00,$FFFF,$FF84,$84 HUUPVY DYWORD $0020,$0015,$0010,-01,$0002,$FFF8,$8433,$22 HULETM DYWORD $0014,$0010,$000E,-01,$000C,$FFFF,$FFFA,$82 SHDNRG DYWORD $FFEC,$FFE0,$FFF2,+01,$FFF4,$FFFF,$FFFA,$82 SHUPRG DYWORD $FFF0,$FE00,$FD00,$20,$FC00,$FFFF,$FFFA,$84 SHUPVY DYWORD $0014,$000A,$0008,-01,$0002,$FFFF,$FFFA,$82 SHUPTM DYWORD $0020,$0015,$0010,-01,$0002,$FFFF,$FFFA,$82 SHLETM DYWORD $000A,$0008,$0006,-01,$0002,$FFFF,$FFFA,$61 SHCLTM DYEND EQU * * **************************************************************************** **************************************************************************** * * PATCHES TO PREVENT PLAYER FROM PTERODACTYL HUNTING * * 1ST PATCH, INITILIZE LAVA TROLL KILL TIME. * INITILIZE LAVA TROLL VARIABLE GRAVITY * * PATCH1 STD PPICH,Y OLD INSTRUCTION LDD #30*60 30 SECOND WAIT TILL TOUGHER LAVA TROLL STD LAVKLL LDD LAVGRA GIVE CURRENT LAVA TROLL GRAVITY STD CLVGRA RTS * * 2ND PATCH, IF TIMER NOT EQUAL TO ZERO DECREMENT TIMER * IF TIMER EQUAL TO ZERO, INCREASE LAVA TROLL PULL * * PATCH2 LDD LAVKLL CHECK LAVA TROOL TIMER ADDD #-1 BGT 10$ LDD CLVGRA CMPD #$500 MAXIMUM LAVA TROLL GRAVITY BHI 5$ ADDD #1 STD CLVGRA 5$ LDD #1 10$ STD LAVKLL LDA #1 JMP VNAPTIM * * 3RD PATCH, USE LAVA TROLLS NEW VARIABLE GRAVITY (IN "ADDLAV") * * END OF 3RD PATCH PATCH3 EQU * NO ROUTINES NEEDED * * FUDGE TO MAKE THIS PROM CHECKSUM CORRECTLY * FCB $1D (ZAPPER) FUDGE TO GET THIS PART ($D000) ADD UP TO $3D * ENDAD2 EQU * CURRENT END ADDRESS IFGE *-$DFFF FCB $1111 ERROR, $D800-$DFFF MODULE IS TOO LONG ENDIF ORG $E6A8 * * INCREMENT SCORE BY THOUSANDS AND HUNDREDS * INPUT REG.X - DECISION BLOCK * REG.A - THOUSANDS & HUNDREDS BCD DIGIT * DESTROIES REG.Y & REG.D * SAVES REG.X * SCRHUN LDY DSCORE,X GET SCORE AREA BEQ SCRRTS ADDA 2,Y BRA SCRCOM * * INCREMENT SCORE BY HUNDREDS AND TENS * INPUT REG.X - DECISION BLOCK * REG.A - TENS & HUNDREDS BCD DIGIT (BACKWARDS) * DESTROIES REG.Y & REG.D * SAVES REG.X * SCRTEN LDY DSCORE,X GET SCORE AREA BEQ SCRRTS TFR A,B ANDA #$F0 SCORE TENS ANDB #$0F & HUNDREDS ADDA 3,Y DAA STA 3,Y TFR B,A ADCA 2,Y SCRCOM DAA STA 2,Y INC 4,Y SCORE OCCURED LDA 1,Y ADCA #0 DAA STA 1,Y LDA ,Y ADCA #0 DAA BCC 1$ ADDA #$10 PEGG TEN MILLIONS FOR ZERO SURPRESSION DETECT 1$ STA ,Y LDD LEVPAS IF LEVEL PASS =0 THEN NO EXTRA MEN BEQ SCRRTS SCRLEV LDD 1,Y GET 100'S OF THOUSANDS TO 100'S. ADDA 7,Y ADD OFFSET FOR NO OVERFLOW DAA CMPD 8,Y PAST LEVEL FOR EXTRA MAN? BLO SCRRTS BR=NO LDA 9,Y FIGURE OUT NEXT LEVEL ADDA LEVPAS+1 DAA STA 9,Y LDA 8,Y ADCA LEVPAS DAA STA 8,Y CMPA #$30 THE MAGIC NUMBER IS 3000XX BEFORE NEW OFFSET BLO SCRPLY AWARD THE EXTRA PLAYER ADDA #$A0-$20 SUBTRACT BCD 20 DAA STA 8,Y LDA 7,Y ALSO OFFSET THE SCORE TO REFLECT THE NEW LEVEL ADDA #$A0-$20 SUBTRACT BCD 20 DAA STA 7,Y SCRPLY PSHS X,Y SAVE DECISION BLOCK JSR INCLIV AWARD THE PLAYER LDX #SNREPL MAKE REPLAY SOUND JSR VSND LDB #5 INCREMENT BOOKS NBR OF FREE MEN JSR AUDIT1 PULS X,Y BRA SCRLEV RE-CHECK FOR LEVEL PASS (LOW LEVELS) * SCRRTS RTS * * SCORE TABLE FOR PLAYER 1 * SCRPL1 FDB SPLY1+4 SCORE CHANGED FLAG FDB $1A00+PL1*$11 SCORE COLOR FDB SPLY1+0,$24D9,BCDLSN 1,000,000 DIGIT INFORMATION FDB SPLY1+1,$27D9,BCDMSN 100,000 DIGIT INFORMATION FDB SPLY1+1,$2AD9,BCDLSN 10,000 DIGIT INFORMATION FDB SPLY1+2,$2DD9,BCDMSN 1,000 DIGIT INFORMATION FDB SPLY1+2,$30D9,BCDLSN 100 DIGIT INFORMATION FDB SPLY1+3,$33D9,BCDMSN 10 DIGIT INFORMATION FCB 0,0,-1 END OF SCORE INFORMATION SCRINT FDB SPLY1+3,$36D9,BCDLSN 1 DIGIT INFORMATION FCB 0,0,-1 END OF SCORE INFORMATION * * SCORE TABLE FOR PLAYER 2 * SCRPL2 FDB SPLY2+4 SCORE CHANGED FLAG FDB $1A00+PL2*$11 SCORE COLOR FDB SPLY2+0,$4BD9,BCDLSN 1,000,000 DIGIT INFORMATION FDB SPLY2+1,$4ED9,BCDMSN 100,000 DIGIT INFORMATION FDB SPLY2+1,$51D9,BCDLSN 10,000 DIGIT INFORMATION FDB SPLY2+2,$54D9,BCDMSN 1,000 DIGIT INFORMATION FDB SPLY2+2,$57D9,BCDLSN 100 DIGIT INFORMATION FDB SPLY2+3,$5AD9,BCDMSN 10 DIGIT INFORMATION FCB 0,0,-1 END OF SCORE INFORMATION FDB SPLY2+3,$5DD9,BCDLSN 1 DIGIT INFORMATION FCB 0,0,-1 END OF SCORE INFORMATION * * BCD DISPLAY OF SCORE (PLAYER 1 & 2) * INPUT: PRAM,U - ADDRESS OF SCORE TABLE * SCODSP LDX PRAM,U PUT UP SCORE ZERO LEAX SCRINT-SCRPL1,X * 100$ STX PRAM+2,U REMEMBER DIGIT TO PUT UP LDY PRAM,U GET DMA CONTROL & COLOR NIBBLE LDU 2,Y LDY 2,X GET DESTINATION ADDRESS BMI 1$ BR=END OF LIST LDB [,X] GET SCORE BYTE JSR [4,X] CALL OUTPUT ROUTINE & WAIT LDX PRAM+2,U NEXT DIGIT LEAX 6,X BRA 100$ * 1$ PCNAP 2 LDX PRAM,U SCORE CHANGED? LDB [,X] BEQ 1$ BR=NO CLR [,X] RESET CHANGED SCORE FLAG LEAX 4,X LDB [,X] LEADING ZERO BLANKING BNE 100$ BR=MILLIONS TO SCORE LEAX 6,X LDB [,X] 100,000 & 10,000 CHECK BEQ 2$ BR=CHECK HUNDREDS DIGIT ANDB #$F0 BNE 100$ BR=100,000 LEAX 6,X BRA 100$ HERE IF 10,000 * 2$ LEAX 6+6,X LDB [,X] 1,000 & 100 CHECK BEQ 3$ BR=NO DIGITS HERE ANDB #$F0 BNE 100$ LEAX 6,X 100'S TO DISPLAY BRA 100$ * 3$ LEAX 6+6,X BRA 100$ 10'S TO DISPLAY * * DISPLAY BCD SCORE, (NAPS BETWEEN DIGITS) * REG.B HAS NIBBLE, * REG.Y HAS DESTINATION ADDRESS * REG.U HAS DMA CONTROL & CONSTANT * BCDMSN RORB HIGH BYTE SHIFT RORB RORB RORB BCDLSN ANDB #$0F LOW BYTE SHIFT LDA #3*7+2 FONT SIZE IS 6X7 PIXELS PLUS 2BYTE SIZE MUL PSHS CC ORCC #$F0 NO INTERUPTS FOR DMA (TIME FOR INT TO SETTLE) ADDD [FONT5] ADDD #2 SKIP THE SIZE, IT IS 3X7 STD SDMA LDD #$0307!XDMAFIX STD WDMA STY DDMA LDD #$12*256+(DKB*$11) ERASE OLD DIGIT STB KDMA STA DMA TFR U,D STB KDMA WRITE NEW DIGIT STA DMA PULS CC NAP BEFORE RETURNING TO CALLER LDA #1 JMP VNAPTPC NAP OF 1, BEFORE NEXT DIGIT(S) * ******** NLIST DON'T BOTHER WITH DATA LISTS * * LITTLE PLAYERS SITTING ON BOXES, READY TO PLAY * SCOPL1 EQU * PLAYER 1 IMAGES LEFT (SIZE $0307) FCB $00,PL1*$10+WHI,$00 FCB $00,PL1*$11,$00 FCB $00,PL1*$10,$00 FCB PL1,PL1*$11,$00 FCB PL1,PL1*$11,$00 FCB $00,PL1*$11,PL1*$10 FCB WHI,WHI*$10,PL1*$11 * SCOPL2 EQU * PLAYER 2 IMAGES LEFT (SIZE $0307) FCB $00,YELLOW*$10+PL2,$00 FCB $00,PL2*$11,$00 FCB $00,PL2,$00 FCB $00,PL2*$11,PL2*$10 FCB $00,PL2*$11,PL2*$10 FCB PL2,PL2*$11,$00 FCB PL2*$11,WHI,WHI*$10 * * BACKGROUND BOX COLISION TABLE, Y DIRECTION * BIT 0 = CLIF1L * BIT 1 = CLIF1R * BIT 2 = CLIF2 * BIT 3 = CLIF3U * BIT 4 = CLIF3L * BIT 5 = CLIF3R * BIT 6 = CLIF4 * BIT 7 = CLIF5 * BCKYTB FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $00 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $10 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $20 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $30 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $40 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000011 FCB %00000011,%00000011,%00000011,%00000011 FCB %00000011,%00000011,%00000011,%00000011 CRT LINE $50 FCB %00000011,%00000011,%00000011,%00000111 FCB %00000111,%00000111,%00000111,%00000111 FCB %00000111,%00000111,%00000111,%00000100 FCB %00000100,%00000100,%00000100,%00000100 CRT LINE $60 FCB %00000100,%00000100,%00000100,%00000100 FCB %00000100,%00000100,%00000100,%00000100 FCB %00000100,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $70 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $80 FCB %00000000,%00000000,%00000000,%00001000 FCB %00001000,%00001000,%00001000,%00001000 FCB %00001000,%00001000,%00001000,%00001000 FCB %00111000,%00111000,%00111000,%00111000 CRT LINE $90 FCB %00111000,%00111000,%00111000,%00111000 FCB %00111000,%00111000,%00111000,%00111000 FCB %00111000,%00111000,%00111000,%00110000 FCB %00110000,%00110000,%00110000,%00110000 CRT LINE $A0 FCB %00010000,%00000000,%00000000,%00000000 FCB %00000000,%01000000,%01000000,%01000000 FCB %01000000,%01000000,%01000000,%01000000 FCB %01000000,%01000000,%01000000,%01000000 CRT LINE $B0 FCB %01000000,%01000000,%01000000,%01000000 FCB %01000000,%01000000,%01000000,%01000000 FCB %01000000,%01000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $C0 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $D0 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 CRT LINE $E0 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 CRT LINE $F0 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 * * TABLE FOR X DIRECTION, RANGE -$10 TO $128 * BCKXS1 EQU * FCB %00010001,%00010001,%00010001,%00010001 CRT PIXEL -$20 FCB %00010001,%00010001,%00010001,%00010001 FCB %00010001,%00010001,%00010001,%00010001 FCB %00010001,%00010001,%00010001,%00010001 FCB %00010001,%00010001,%00010001,%00010001 CRT PIXEL -$10 FCB %00010001,%00010001,%00010001,%00010001 FCB %00010001,%00010001,%00010001,%00010001 FCB %00010001,%00010001,%00010001,%00010001 * * LABEL BCKXTB OR POSITION ZERO IN X DIRECTION * FCB %00010001,%00010001,%00010001,%00010001 CRT PIXEL $00 FCB %00010001,%00010001,%00010001,%00010001 FCB %00010001,%00010001,%00010001,%00010001 FCB %00010001,%00010001,%00010001,%00010001 FCB %00010001,%00010001,%00010001,%00010001 CRT PIXEL $10 FCB %00010001,%00010001,%00010001,%00010001 FCB %00010001,%00010001,%00010001,%00010001 FCB %00010001,%00010001,%00010001,%00010001 FCB %00010001,%00010001,%00010001,%00010001 CRT PIXEL $20 FCB %00010000,%10010000,%10010000,%10010000 FCB %10010000,%10010000,%10010000,%10010000 FCB %10010000,%10010000,%10010000,%10010000 FCB %10010000,%10010000,%10010000,%10010000 CRT PIXEL $30 FCB %10010000,%10010000,%10010000,%10010000 FCB %10010000,%10010000,%10010000,%10010000 FCB %10010000,%10010000,%10010000,%10010000 FCB %10010000,%10010000,%10000000,%10000000 CRT PIXEL $40 FCB %10000000,%10000100,%10000100,%10000100 FCB %10000100,%10000100,%10000100,%10000100 FCB %10000100,%10000100,%10000100,%10000100 FCB %10000100,%10000100,%10000100,%10000100 CRT PIXEL $50 FCB %10000100,%10000100,%10000100,%10000100 FCB %10000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 CRT PIXEL $60 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 CRT PIXEL $70 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 CRT PIXEL $80 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 CRT PIXEL $90 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%11000100,%11000100 CRT PIXEL $A0 FCB %11000100,%11000100,%11000100,%11000100 FCB %11000100,%11000100,%10000100,%10000100 FCB %10000100,%10000100,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 CRT PIXEL $B0 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10001000,%10001000,%10001000 FCB %10001000,%10001000,%10001000,%10001000 FCB %10001000,%10001000,%10001000,%10001000 CRT PIXEL $C0 FCB %10001000,%10001000,%10001000,%10001000 FCB %10001000,%10001000,%10001000,%10001000 FCB %10001000,%10001000,%10001000,%10001000 FCB %10001000,%10001000,%10001000,%10001000 CRT PIXEL $D0 FCB %10001000,%10001000,%10001000,%10001000 FCB %10001000,%10001000,%10001000,%10001000 FCB %10001000,%10001000,%10001000,%10001000 FCB %10001000,%10001000,%10001000,%10001000 CRT PIXEL $E0 FCB %10001000,%10001000,%10001000,%10001000 FCB %10001000,%10001000,%10001000,%10001010 FCB %10001010,%10001010,%10101010,%10101010 FCB %00101010,%00101010,%00101010,%00101010 CRT PIXEL $F0 FCB %00101010,%00101010,%00101010,%00101010 FCB %00101010,%00101010,%00101010,%00101010 FCB %00101010,%00101010,%00101010,%00101010 FCB %00101010,%00101010,%00101010,%00101010 CRT PIXEL $100 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 CRT PIXEL $110 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 CRT PIXEL $120 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 CRT PIXEL $130 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 BCKXS2 EQU * * * BACKGROUND BOX LANDING TABLE, Y DIRECTION * BIT 0 = CLIF1L & CLIF1R * BIT 1 = CLIF2 * BIT 2 = CLIF3R (TOP) * BIT 3 = CLIF3L & CLIF3R * BIT 4 = CLIF4 * BIT 5 = CLIF5 * BIT 6 = LAVA TROLLS LEFT & RIGHT * LNDYTB FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $00 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $10 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $20 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $30 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $40 FCB %00000000,%00000001,%00000001,%00000001 FCB %00000001,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000010,%00000010,%00000010 CRT LINE $50 FCB %00000010,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $60 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $70 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000100,%00000100,%00000100 CRT LINE $80 FCB %00000100,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00001000,%00001000 FCB %00001000,%00001000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $90 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00010000 CRT LINE $A0 FCB %00010000,%00010000,%00010000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $B0 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%00000000 CRT LINE $C0 FCB %00000000,%00000000,%00000000,%00000000 FCB %00000000,%00000000,%00000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10100000 CRT LINE $D0 FCB %10100000,%10100000,%10100000,%10100000 FCB %10100000,%10100000,%10100000,%10100000 FCB %10100000,%10100000,%10100000,%10100000 FCB %10100000,%10100000,%10100000,%10100000 CRT LINE $E0 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 CRT LINE $F0 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 FCB %10000000,%10000000,%10000000,%10000000 FCB $18 KZAPPER FUDGE * * TABLE FOR X DIRECTION, RANGE -$10 TO $128 * LNDXS1 EQU * FCB %10001001,%10001001,%10001001,%10001001 CRT PIXEL -$20 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 CRT PIXEL -$10 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 * *LABEL LNDXTB OR THE ZERO POINT ON SCREEN * LNDXS3 FCB %10001001,%10001001,%10001001,%10001001 CRT PIXEL $00 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 CRT PIXEL $10 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001000 FCB %10001000,%10001000,%10001000,%10001000 FCB %10001000,%10001000,%10001000,%10001000 CRT PIXEL $20 FCB %10001000,%10001000,%10001000,%00001000 FCB %00001000,%00001000,%00001000,%00001000 FCB %00001000,%00101000,%00101000,%00101000 FCB %00101000,%00101000,%00101000,%00101000 CRT PIXEL $30 FCB %00101000,%00101000,%00101000,%00101000 FCB %00101000,%00100000,%00100000,%00100000 FCB %00100000,%00100000,%00100000,%00100000 FCB %00100000,%00100000,%00100000,%00100000 CRT PIXEL $40 FCB %00100000,%00100000,%00100000,%00100000 FCB %00100000,%00100000,%00100000,%00100000 FCB %00100000,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 CRT PIXEL $50 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00100010,%00100010,%00100010 FCB %00100010,%00110010,%00110010,%00110010 CRT PIXEL $60 FCB %00110010,%00110010,%00110010,%00110010 FCB %00110010,%00110010,%00110010,%00110010 FCB %00110010,%00110010,%00110010,%00110010 FCB %00110010,%00110010,%00110010,%00110010 CRT PIXEL $70 FCB %00110010,%00110010,%00110010,%00110010 FCB %00110010,%00110010,%00110010,%00110010 FCB %00110010,%00110010,%00110010,%00110010 FCB %00110010,%00110010,%00110010,%00110010 CRT PIXEL $80 FCB %00110010,%00110010,%00110010,%00110010 FCB %00110010,%00110010,%00110010,%00110010 FCB %00110010,%00110010,%00110010,%00110010 FCB %00110010,%00110010,%00110010,%00110010 CRT PIXEL $90 FCB %00110010,%00110010,%00110010,%00110010 FCB %00110010,%00110010,%00110010,%00110010 FCB %00110010,%00110010,%00110010,%00110010 FCB %00110010,%00100010,%00100010,%00100010 CRT PIXEL $A0 FCB %00100010,%00100010,%00100000,%00100000 FCB %00100000,%00100000,%00100000,%00100000 FCB %00100000,%00100000,%00100000,%00100000 FCB %00100000,%00100000,%00100000,%00100000 CRT PIXEL $B0 FCB %00100000,%00100000,%00100000,%00100000 FCB %00100000,%00100000,%00100000,%00100000 FCB %00100000,%00100000,%00100000,%00100000 FCB %00100000,%00100100,%00100100,%00100100 CRT PIXEL $C0 FCB %00100100,%00100100,%00100100,%00100100 FCB %00100100,%00100100,%00100100,%00100100 FCB %00100100,%00100100,%00100100,%00100100 FCB %00100100,%00100100,%00100100,%00100100 CRT PIXEL $D0 FCB %00100100,%00100100,%00100100,%00100100 FCB %00100100,%00100100,%00100100,%00100100 FCB %00100100,%00100100,%00100100,%00100100 FCB %00100100,%00100100,%00100100,%00100100 CRT PIXEL $E0 FCB %00100100,%00100100,%00100100,%00000100 FCB %00000100,%00000100,%00000100,%00000100 FCB %00000100,%00000100,%00000100,%10000100 FCB %10000100,%10001100,%10001100,%10001100 CRT PIXEL $F0 FCB %10001101,%10001101,%10001101,%10001101 FCB %10001101,%10001101,%10001101,%10001101 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 CRT PIXEL $100 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 CRT PIXEL $110 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 CRT PIXEL $120 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 CRT PIXEL $130 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 FCB %10001001,%10001001,%10001001,%10001001 LNDXS2 EQU * IFE DEBUG KZAP CLR PRAM,U CLR PRAM+1,U CLR PRAM+2,U 1$ PCNAP 1 LDX PRAM,U LDA ,X++ ADDA PRAM+2,U STA PRAM+2,U STX PRAM,U BPL 1$ CMPA KZAP1 BEQ KZAP JSR RADDR BRA KZAP ENDIF * ******************************************************************************* * * KEN LANTZ CLIFF DESTROIER, COMPACT DATA TABLE * (RUN LENGTH [UPPER NIBBLE], THEN COLOR NIBBLE [LOWER NIBBLE]) ****************************************************************************** FIRSTI FCB $F0,$F0,$20,$01 FCB $80,$40+LIB,$40,$40+LIB,$E0,$01 FCB $F0+LIB,$F0+LIB,$20+LIB,$01 FCB $10,$F0+LIB,$60+LIB,$50+DKB,$40+LIB,$10,$01 FCB $20,$20+LIB,$50+DKB,$20+LIB,$50+MEB,$20+MEB,$20+LIB FCB $20+DKB,$60+MEB,$20,$01 FCB $30,$50+MEB,$30+DKB,$20+LIB,$30+MEB,$30+DKB,$20+MEB FCB $20+DKB,$40+MEB,$50,$01 FCB $40,$B0+MEB,$40+DKB,$90+MEB,$40,$01 FCB $80,$80+MEB,$30+DKB,$20+MEB,$B0,$01 FCB $D0,$20+MEB,$20+DKB,$40+MEB,$C0,$01 FCB $00 *SECOND IMAGE FCB $10,$01 FCB $F0,$F0,$20,$01 FCB $F0,$F0,$20,$01 FCB $70,$50+LIB,$30,$50+LIB,$E0,$01 FCB $10,$A0+MEB,$B0+LIB,$50+DKB,$40+MEB,$10,$01 FCB $20,$20+MEB,$50+DKB,$90+MEB,$20+LIB,$20+DKB,$60+MEB,$20,$01 FCB $30,$30+MEB,$50+DKB,$50+MEB,$30+DKB,$20+MEB,$20+DKB FCB $40+MEB,$50,$01 FCB $40,$90+MEB,$80+DKB,$70+MEB,$40,$01 FCB $80,$60+MEB,$30,$20+DKB,$20+MEB,$B0,$01 FCB $D0,$10+MEB,$10+DKB,$20,$30+MEB,$C0,$01 FCB $00 *THIRD IMAGE FCB $10,$01 FCB $10,$01 FCB $10,$01 FCB $F0,$F0,$20,$01 FCB $F0,$F0,$20,$01 FCB $70,$50+MEB,$30,$50+MEB,$E0,$01 FCB $10,$A0+DKB,$B0+MEB,$50+DKB,$20+MEB,$10+DKB,$10+MEB,$10,$01 FCB $20,$20+MEB,$50+DKB,$20+MEB,$30+DKB,$60+MEB,$20+DKB FCB $20+MEB,$40+MEB,$20,$01 FCB $30,$30+MEB,$70+DKB,$30+MEB,$30+DKB,$10+MEB,$10+MEB FCB $30+DKB,$30+MEB,$50,$01 FCB $40,$10+MEB,$20+MEB,$30+MEB,$20+MEB,$10+MEB,$80+DKB FCB $20+MEB,$30+DKB,$20+MEB,$40,$01 FCB $80,$10+MEB,$40+DKB,$10+MEB,$30,$20+DKB,$20+MEB,$B0,$01 FCB $F0,$F0,$20,$01 FCB $D0,$10+DKB,$10+DKB,$20,$30+DKB,$C0,$01 FCB $00 *FOURTH IMAGE FCB $10,$01 FCB $10,$01 FCB $10,$01 FCB $10,$01 FCB $10,$01 FCB $F0,$F0,$20,$01 FCB $F0,$F0,$20,$01 FCB $70,$50+DKB,$30,$50+DKB,$E0,$01 FCB $10,$A0+DKB,$40+DKB,$30+MEB,$90+DKB,$10+MEB,$20+DKB FCB $10+DKB,$10+DKB,$10,$01 FCB $20,$20+MEB,$50+DKB,$20+MEB,$30+DKB,$20+MEB,$50+DKB FCB $30+MEB,$20+MEB,$40,$01 FCB $30,$30+MEB,$70+DKB,$30+MEB,$30+DKB,$10+MEB,$10+MEB FCB $30+DKB,$30+MEB,$50,$01 FCB $40,$10+DKB,$20+MEB,$30+DKB,$20+DKB,$10+MEB,$80+DKB FCB $20+DKB,$50+DKB,$40,$01 FCB $80,$10+DKB,$40+DKB,$10+DKB,$50,$20+DKB,$B0,$01 FCB $A0,$10+DKB,$20,$10+DKB,$10+DKB,$10,$10+DKB,$20 FCB $10+DKB,$10+DKB,$C0,$01 FCB $B0,$10+DKB,$10,$10+DKB,$20,$20+DKB,$10,$C0,$01 FCB $00 *FIFTH IMAGE FCB $10,$01 FCB $10,$01 FCB $10,$01 FCB $10,$01 FCB $10,$01 FCB $10,$01 FCB $10,$01 FCB $F0,$F0,$20,$01 FCB $F0,$F0,$20,$01 FCB $F0,$F0,$20,$01 FCB $10,$A0+DKB,$10,$20+DKB,$10,$30+DKB,$90,$10+DKB,$20 FCB $10+DKB,$10+DKB,$10,$01 FCB $20,$20+DKB,$50+DKB,$20+DKB,$30+DKB,$20+DKB,$50,$30+DKB FCB $20+DKB,$40,$01 FCB $30,$30+DKB,$10,$10+DKB,$20,$10+DKB,$20,$10+DKB,$30+DKB FCB $30,$10+DKB,$10+DKB,$30,$30+DKB,$50,$01 FCB $40,$10+DKB,$20+DKB,$30+DKB,$20+DKB,$10+DKB,$20+DKB,$20 FCB $10+DKB,$10,$10+DKB,$20,$10+DKB,$50,$20+DKB,$40,$01 FCB $80,$10+DKB,$40,$10+DKB,$50,$20+DKB,$B0,$01 FCB $F0,$F0,$20,$01 FCB $A0,$10+DKB,$20,$10+DKB,$10,$10,$10+DKB,$20,$10,$10+DKB,$C0,$01 FCB $C0,$10+DKB,$10,$10+DKB,$20,$10+DKB,$20,$C0,$01 FCB $00 KZAP1 FCB $E8 KZAPPER DATA LIST * AOFFL1 EQU $45 AOFFL2 EQU $81 AOFFL3 EQU $D0 AOFFUD EQU $20 * * AUTO MATIC REMOVAL OF PLAYER * AUTOFF LDD PPOSX,U OFF SCREEN? CMPD #ELEFT+3 BLT AUTSCR CMPD #ERIGHT-3 BGT AUTSCR AUT2 LDA #AOFFL1 ASSUME NEAR TRACKING LINE 1 LDB PPOSY+1,U CMPB #AOFFL1+AOFFUD BLO AUTTRK BR=TRACK ON LINE 1 LDA #AOFFL2 ASSUME NEAR TRACKING LINE 2 CMPB #AOFFL2+AOFFUD BLO AUTTRK BR=TRACK ON LINE 2 LDA #AOFFL3 ASSUME NEAR TRACKING LINE 3 AUTTRK CLRB ASSUME ON TRACKING LINE SUBA PPOSY+1,U ABOVE OR BELOW LINE? BPL AUTFLP BR=AROUND THE LINE LDA PVELY,U ALREADY GOING UP? BMI AUTFLP BR=YES, SO WAIT TILL NEXT TIME LDD #AUTOFP GET OFF GROUND OR JUST FLAP STD PJOY,U LDB #1 AUTFLP LDA PFACE,U MOVE IN DIRECTION OF FACING BMI AUTLF2 LDA #1 STD CURJOY RTS * AUTLF2 LDA #-1 STD CURJOY RTS * AUTSCR JSR CPLYR ERASE PLAYER FOR THE LAST TIME PCNAP 60 WAIT A SECOND LDX #150 TRY TO START PLAYER AGAIN STX PPOSX,U LDX PDECSN,U JMP [DCRE,X] * AUTOFP LDD #AUTOFF STD PJOY,U CLRB BRA AUTFLP * * * SOUND TABLE * PIRORITY,SOUND,LENGTH (IF M.S.BIT SET ON SOUND, SOUND,LENGTH) * SOUND !N$00 DOES NOT DISTURBE THE SOUND, BUT EXTENDS TIMER * SOUND !N$FF TURNS OFF (KILLS) THE SOUND * SOUND !N$xx (RANGE 01-3E) SENDS THE CORRESPONDING SOUND * SNCRED FCB 200,!N$0A!.$7F,40 CREDIT CHANGE SOUND SNGS FCB 200,!N$1B!.$7F,1 GAME START SNHI2 FCB 190,!N$1C!.$7F,6 HIGH SCORE TO DATE END SOUND SNHIGH FCB 190 HIGH SCORE TO DATE FCB !N$11!+$80,60 FCB !N$10!+$80,20 FCB !N$10!+$80,30 FCB !N$0F!+$80,2*60 FCB !N$10!+$80,60 FCB !N$10!+$80,100 FCB !N$0F!+$80,4*60 FCB !N$1A!+$80,20 FCB !N$1A!+$80,100 FCB !N$10!+$80,60 FCB !N$0F!+$80,4*60 FCB !N$1A!+$80,30 FCB !N$18!+$80,4*60 * FCB !N$10!+$80,80 FCB !N$10!+$80,60 FCB !N$10!+$80,20 FCB !N$0F!+$80,4*60 FCB !N$10!+$80,20 FCB !N$10!+$80,60 FCB !N$10!+$80,80 FCB !N$10!+$80,60 FCB !N$10!+$80,20 FCB !N$10!+$80,60 FCB !N$0F!+$80,4*60 FCB !N$10!+$80,20 FCB !N$10!+$80,60 FCB !N$10!+$80,80 FCB !N$10!+$80,60 FCB !N$10!+$80,20 FCB !N$10!+$80,60 FCB !N$10!+$80,80 FCB !N$0F!+$80,2*60 FCB !N$0F!.$7F,4*60 SNREPL FCB 100,!N$0B!.$7F,90 EXTRA MAN SNCLIF FCB 067,!N$19!.$7F,90 CLIFF DESTROYER SNPTED FCB 066,!N$16!+$80,15,!N$16!+$80,15 PTERODACTYL DYING SOUND FCB !N$16!+$80,07,!N$16!+$80,7 FCB !N$16!.$7F,90 SNPTEI FCB 065,!N$24!+$80,30,!N$25!.$7F,30 PTERODACTYL INTRODUCTION SCREAM SNPTE FCB 065,!N$24!.$7F,120 PTERODACTYL SCREAM SNBOUN FCB 050,!N$1C!.$7F,60 COLLECT BOUNTY SNTROL FCB 050,!N$09!.$7F,30 CAPTURED BY LAVA TROLL SOUND SNEGG FCB 045,!N$03!.$7F,30 PLAYER HITS EGG SOUND SNEGGH FCB 045,!N$02!.$7F,30 EGG HATCHING SOUND SNMOUN FCB 045,!N$0C!.$7F,30 ENEMY MOUNTING THE BIRD SNCTHD FCB 010,!N$06!.$7F,10 CLIFF THUD * SNECRE FCB 040,!N$07!+$80,90,$00,1 ENEMY RE-CREATED (TRANSPORTER) SNEDIE FCB 040,!N$16!.$7F,20 ENEMY DIES SNELAV FCB 040,!N$0D!.$7F,30 ENEMY IN LAVA SNETHD FCB 009,!N$08!+$80,30,$00,1 ENEMIES THUD SNELWU FCB 006,!N$21!.$7F,60 ENEMIES WING UP SOUND SNELWD FCB 006,!N$20!.$7F,60 ENEMIES WING DOWN SOUND SNERU1 FCB 006,!N$22!.$7F,60 ENEMY RUNS SNERU2 FCB 006,!N$23!.$7F,60 ENEMY RUNS SNEMSK FCB 006,!N$26!.$7F,60 ENEMIES SKIDDING SOUND SNEMS2 FCB 006,!N$27!.$7F,30 END OF ENEMIES SKIDDING SOUND SNEFAL FCB 006,!N$FF!.$7F,1 ENEMY STARTING TO FALL (SKID STOP) * SNPDIE FCB 080,!N$16!.$7F,20 PLAYER DIES SNPCR1 FCB 070,!N$12!+$80,30 PLAYER 1 RE-CREATED (TRANSPORTER) FCB !N$14!+$80,255 PLAYER FADING IN (TRANSPORTER) FCB !N$00!.$7F,165 SNPCR2 FCB 070,!N$12!+$80,30+13 PLAYER 2 RE-CREATED (TRANSPORTER) FCB !N$15!+$80,255 PLAYER FADING IN (TRANSPORTER) FCB !N$00!.$7F,165-13 SNPTREF FCB 070,!N$FF!.$7F,1 PLAYER ABORTED FADING IN (TRANSPORTER) SNPLAV FCB 060,!N$0D!.$7F,30 PLAYER IN LAVA SNPTHD FCB 020,!N$08!+$80,30,$00,1 AT LEAST 1 PERSON THUD'ED SNPLWU FCB 010,!N$21!.$7F,90 PLAYERS WING UP SOUND SNPLWD FCB 010,!N$20!.$7F,90 PLAYERS WING DOWN SOUND SNPRU1 FCB 010,!N$22!.$7F,70 PLAYER RUNS SNPRU2 FCB 010,!N$23!.$7F,70 PLAYER RUNS SNPLSK FCB 010,!N$26!.$7F,70 PLAYERS SKIDDING SOUND SNPLS2 FCB 010,!N$27!.$7F,40 END OF PLAYERS SKIDDING SOUND SNPFAL FCB 010,!N$FF!.$7F,60 PLAYER STARTING TO FALL (SKID STOP) * ENDA1A EQU ENDAD1 CURRENT END ADDRESS OF $6000 - $8FFF ENDA2A EQU ENDAD2 CURRENT END ADDRESS OF $D800 - $DFFF ENDAD3 EQU * CURRENT END ADDRESS OF $E6A8 - $EFF0 IFGE *-$EFF0 FCB $1111 ERROR, $E6A8-$EFF0 MODULE IS TOO LONG ENDIF END VINIT2