Вы находитесь на странице: 1из 83

* ****** * * * * * ******

2600 * * * * * * ******* * * * * * *

JOUST **** * * * * ****** * * * * * *

JULY05.S * * ** * * * * * * * * * * * * * * ** **** ****** * * * * * * ***** * **** * * * * **** ****** * * ** ** * * * * * * * * * * * * * ***** * * **** * * *****

;THIS IS THE NECESSARY PROLOG FOR STELLA (TIA) CODE ; PIA AND TIMER (6532) LOCATIONS SWCHA SWCHB CTLSWA CTLSWB INTIM TIM8T TIM64T EQU EQU EQU EQU EQU EQU EQU $280 $282 $281 $283 $284 $295 $296 ;PO, P1 JOYSTICKS ;CONSOLE SWITCHES ;INTERVAL TIMER IN ;TIMER 8T WRITE OUT ;TIMER 64T WRITE OUT

; STELLA (TIA) REGISTER ADDRESSES VSYNC VBLANK WSYNC RSYNC NUSIZ0 NUSIZ1 COLUP0 COLUP1 COLUPF COLUBK CTRLPF REFP0 REFP1 PF0 PF1 PF2 RESP0 RESP1 RESM0 RESM1 RESBL AUDC0 AUDC1 AUDF0 AUDF1 AUDV0 AUDV1 GRP0 GRP1 ENAM0 ENAM1 ENABL HMP0 HMP1 HMM0 EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU $00 $01 $02 $03 $04 $05 $06 $07 $08 $09 $0A $0B $0C $0D $0E $0F $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1A $1B $1C $1D $1E $1F $20 $21 $22 ;BIT 1 ;BIT 1 ;STROBE ;STROBE ;BITS 54 210 ;BITS 54 210 ;BITS 7654321 ;BITS 7654321 ;BITS 7654321 ;BITS 7654321 ;BITS 7 54 210 ;BIT 3 ;BIT 3 ;BITS 7654 ;BITS ALL ;BITS ALL ;STROBE ;STROBE ;STROBE ;STROBE ;STROBE ;BITS 3210 ;BITS 3210 ;BITS 3210 ;BITS 3210 ;BITS 3210 ;BITS 3210 ;BITS ALL ;BITS ALL ;BIT 1 ;BIT 1 ;BIT 1 ;BITS 7654 ;BITS 7654 ;BITS 7654 VERTICAL SYNC SET-CLR VERTICAL BLANK SET-CLR WAIT FOR HORIZ BLANK RESET HORIZ SYNC COUNTER NUMBER-SIZE PLAYER/MISSILE 0 NUMBER-SIZE PLAYER/MISSILE 1 COLOR(4)-LUM(3) PLAYER 0 COLOR(4)-LUM(3) PLAYER 1 COLOR(4)-LUM(3) PLAYFIELD COLOR(4)-LUM(3) BACKGROUND PLAYFIELD CONTROL REFLECT PLAYER 0 REFLECT PLAYER 1 PLAYFIELD REG BYTE 0 PLAYFIELD REG BYTE 1 PLAYFIELD REG BYTE 2 RESET PLAYER 0 RESET PLAYER 1 RESET MISSILE 0 RESET MISSILE 1 RESET BALL AUDIO CONTROL 0 AUDIO CONTROL 1 AUDIO FREQUENCY 0 AUDIO FREQUENCY 1 AUDIO VOLUME 0 AUDIO VOLUME 1 GRAPHICS FOR PLAYER 0 GRAPHICS FOR PLAYER 1 ENABLE MISSILE 0 ENABLE MISSILE 1 ENABLE BALL HORIZ MOTION PLAYER 0 HORIZ MOTION PLAYER 1 HORIZ MOTION MISSILE 0

HMM1 HMBL VDELP0 VDELP1 VDELBL RESMP0 RESMP1 HMOVE HMCLR CXCLR CXM0P CXM1P CXP0FB CXP1FB CXM0FB CXM1FB CXBLPF CXPPMM INPT0 INPT1 INPT2 INPT3 INPT4 INPT5

EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU

$23 $24 $25 $26 $27 $28 $29 $2A $2B $2C $30 $31 $32 $33 $34 $35 $36 $37 $38 $39 $3A $3B $3C $3D

;BITS 7654 HORIZ MOTION MISSILE 1 ;BITS 7654 HORIZ MOTION BALL ;BIT 0 VERTICAL DELAY PLAYER 0 ;BIT 0 VERTICAL DELAY PLAYER 1 ;BIT 0 VERTICAL DELAY BALL ;BIT 1 RESET MISSILE TO PLAYER 0 ;BIT 1 RESET MISSILE TO PLAYER 1 ;STROBE ACT ON HORIZ MOTION ;STROBE CLEAR ALL HM REGISTERS ;STROBE CLEAR ALL COLLISION LATCHES ;READ ADDRESSES BITS 6 + 7 ONLY

************ CONSTANTS PFCOLOR1 EQU $28 PFCOLOR2 EQU $26 PFCOLOR3 EQU $24 PFCOLOR4 EQU $22 HEIGHT EQU 5 UPPER EQU $34 LOWER EQU $6C ;ZERO PAGE RAM ORG $80 FRMCNT DS 1 LIVES DS 2 HISCORE DS 2 MIDSCORE DS 2 LOWSCORE DS 2 ATTRACT DS 1 RACKNUM TIMER PTR0 TEMPM4FC PTR0H TEMP4 PTR1 PTR1H STAMP0 PTR2 PTR2H PTR3 STAMP1 PTR3H PTR4 PTR4H P0VTBL DS DS DS EQU DS EQU DS DS DS EQU EQU EQU DS EQU EQU EQU DS 1 1 1 PTR0 1 PTR0H 1 1 3 STAMP0 STAMP0+1 STAMP0+2 3 STAMP1 STAMP1+1 STAMP1+2 3

****************

;UPPER ZONE BOUNDARY ;LOWER ZONE BOUNDARY

;FOR NOW BIT 7 AUTOPLAY BIT 6 FOR ;SHOW TITLE ;BOTTOM 5 BITS FOR DEBOUNCE COUNTER

;ALSO PTR2-PTR3H

;ALSO PTR4-PTR5H

PTR5 EQU P0VTBL PTR5H EQU P0VTBL+1 P1VTBL DS 3 P0HPOS DS 3 P1HPOS DS 3 ;THESE REDEFINE P0HPOS THRU P1HPOS TOPDEX EQU P0HPOS MIDDEX EQU P0HPOS+2 BOTDEX EQU P1HPOS+1 P0CNT DS 1 P1CNT DS 1 COLOR0 DS 3 SCNTRLI0 EQU COLOR0+0 SCNTRLI1 EQU COLOR0+1 COLOR1 DS 3 INFP0 DS 3 PLAYCOL EQU INFP0 LINECNT EQU INFP0+1 COLORCNT INFP1 TEMP0 TEMP1 P0VOFF TEMP2 P1VOFF PREVIOUS TEMP3 MPTR ZONECNT CFIGINDX XPOS YPOSINT STATES EQU DS DS DS EQU DS EQU EQU DS EQU DS DS DS DS DS INFP0+2 3 1 1 TEMP1 1 TEMP2 TEMP2 1 TEMP3 1 1 8 8 2

AS TEMPS FOR CROSSING ROUTINE

SOUND CONTROL INPUT 0 SOUND CONTROL INPUT 1 ;COLOR OF JOUST BITMAP ;NUMBER OF LINES DOWN THAT BITMAP ;STARTS ;INDEX INTO COLOR ROT TABLE

INDEX INTO CLIFF CONFIGURATIONS X POSSITION FOR ALL MOVABLE OBJECTS INTEGER Y " " " " " ;BIT 7 FACING ;BIT 6 WALKING FOR PLAYERS ;BIT 5 FLY/SKID FOR PLAYERS ; FOR NON-WALKING PLAYERS ;BITS 54 ANIMATION # FOR PLAYERS ; WALKING ;BOTTOME NYBBLE,ENEMY TYPE X VELOCITY AND GONE DEATH.... CODES EFFECTIVENESS/DELAY TIMER FOR PLAYERS ;BITS 76543210 PLAYER Y POSSITION FRAC ; IF FLYING ;BITS 210 CLIFF NUMBER ;BITS 7 BUTTON MEMORY FOR W/S ;VERTICAL SPEED PLAYER Y VELOCITY INTEGER BIRTH ANIMATION COUNTER SHEILD SECOND PLAYER Y VELOCITY FRAC SHEILD TIMER PLAYER GONE TIMER

;TYPE MUST FOLLOW TYPE DS STAT2 DS GEN2 DS GENERALS DS SPEED DS

STATES 6 2 2 2 6

ASPEED EGGO EGGSCORE YVELINT PDTHSNUM BIRTHAN SHLDSEC YVELFRAC PDETHTIM SHLDTIM PGONETIM

DS DS DS DS EQU EQU EQU DS EQU EQU EQU

6 6 2 2 YVELINT YVELINT YVELINT 2 YVELFRAC YVELFRAC YVELFRAC

BIRTHTIM EQU ENEMA DS

YVELFRAC 1

BIRTH TIMER ;NUMBER OF ENEMIES

SNDTIM0 SNDTIM1 SNDINDX0 SNDINDX1 SNDTYP0 SNDTYP1 DEPNUM TOPCNT MIDCNT BOTCNT TERYCNT TERYTIME TITIMNDX GAMETYPE GLADRAG * NOTSOUND WLKSOUND FLPSOUND BNCSOUND SKDSOUND STPSKDSN XPLSOUND BIRTHSND SHLDSND STPSHLDS TIESOUND SCREETCH VBRTHSND EGGHTCH EATEGG EXTRAMAN * PDETHSTM SHIELD BIRTH1ST PGONE PDEATH EXP0SNUM EXP2SNP1 ISTATB1 ISTA2B1 ISTA2SLD ISTA2WLK

DS DS DS DS DS DS DS DS DS DS DS DS DS DS

1 1 1 1 1 1 1 1 1 1 1 1 1 1

TIMER SOUND 0 TIMER SOUND 1 SOUND INDEX 0 SOUND INDEX 1 ;SOUND TYPE 0 ;SOUND TYPE 1 ;NUMBER OF ENEMIES DEPLOYED

NUMBER OF TERRIES CURRENTLY OUT TIMER FOR TERRY DEPLOYMENT INDEX INTO INITIAL TERRY TIMES TABLE ;BIT 0 FOR 1 OR 2 PLAYERS ;BIT 1 FOR REGULAR OR BONZO DS 1 ;GLADIATOR, SURVIVAL, TEAM FLAGS ;BIT 7 FOR GLADIATOR ;BIT 6 FOR SURVIVAL, TEAM THESE CONSTANTS ARE THE BITS PATTERNS RETURNED BY PMOTION FOR SOUNDS EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

THESE ARE THE CONSTANTS RELATIVE TO PLAYER DEATH AND EXPLOIN ANIMATION EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 3 11 13 14 15 7 10 $F0 $0D $0B $05 53 5

SHLDITIM EQU BRTHITIM EQU

GONEITIM EQU * * * UPVMAX DWNVMAX * *

$EE

THE FOLLOWING EQUIVILENCES ARE THE UP AND DOWN TERMINAL VELOCITIES ONLY THE INTEGER PART OF THE VELOCITY IS CHECKED; THEREFORE THE FOLLOWING ARE THE INTEGER TERMINAL VELOCITIES EQU EQU $FD $2

THE FOLLOWING CONSTANTS ARE THE BOUNDS ON LEGAL X VALUES FOR A STAMP. THERE ARE TWO RIGHTS, SET AND COMPARE. 1 126 127

LMOSTPXL EQU RMSTSPXL EQU RMSTCPXL EQU

* THE FOLLOWING CONSTANT IS THE TOP OF SCREEN COMPARISON NUMBER TOPSCNUM EQU 191 * TERYFLAG LTERYTYP RTERYTYP LTERYSPD RTERYSPD ITITI * TERRY CONSTANTS EQU EQU EQU EQU EQU EQU $60 $8C $0C 4 0 4 TELLS BADGUY TO DEPLOY TERRY AT FLAG INITIAL TYPE FOR A LEFT TERRY INITIAL TYPE FOR A RIGHT TERRY INITIAL LEFT TERRY SPEED INITIAL RIGHT TERRY SPEED INITIAL TERRY INITIAL TIME INDEX

THE FOLLOWING ARE BOUNDS FOR DELAY FOR WALK/SKID 12 8 MAXIMUM WALK DELAY MAXIMUM SKID DELAY

MAXWDLAY EQU MAXSDLAY EQU * FBFRAC * *

THIS IS THE FLYING CLIFF TOP BOUNCE Y FRACTION EQU $80

THE FOLLOWING ARE THE NUMBERS TO SET TO ALLOW AND TEST FOR HAPPENING FIRST EFFECTIVE FLYING FRAME. THESE GO IN DELAY/EFFECT. 5 4

FLYFEFST EQU FLYFEFCP EQU ENDRAM E000 E001 E002 E003 ORG DB DB DB DB

$E000 0 0 0 0

;STORE 80 IN HERE TO FREEZE ;SLOWDOWN SPEED ;TEMP ;WHEN FROZEN, NUMBER OF FRAMES TO ;ADVANCE BEFORE STOPPING. THE SPEED ;OF ADVANCEMENT IS SET IN E001

FRZEOS

FREEZER

ORG LDX BMI DEX BPL BMI LDX

$E100 E000 FREEZER HOLDF NEWFRRTS E003

BEQ LDY DEY BPL NEWFRRTS RTS HOLDF PLA PLA JMP FRZEBL LDX BMI DEX STX BPL LDA STA RTS LDX BEQ LDY DEY STY BPL DEC LDA STA RTS PLA PLA JMP

HOLDF E002 HOLDF

OWLOOP E000 FRZE E000 HOLDFB E001 E000 E003 HOLDFB E002 E002 HOLDFB E003 E001 E002

FRZE

HOLDFB

DONE

* START OF EXECUTABLE CODE ===================================================== ORG $F000 FBANK NOSEL JMP BMI BIT BVC NORESET LDX BEQ LDA AND STA AND BNE DEX STX BPL DOCOLROT LDX LDA AND BNE COLORCNT FRMCNT #$03 JMPOW ;INC INDEX EVERY FOUR FRAMES START JMPOW ATTRACT REGDRVER LINECNT DOCOLROT FRMCNT #$77 PLAYCOL #$03 JMPOW LINECNT JMPOW ;CHECK FOR TITLE PAGE ;IF LINECNT IS 0, WE ARE DONE ;FRMCNT IS ANDED TO GET BITMAP COLOR

;NOW AND FRMCNT WITH 3 TO GET RATE ;OF BITMAP RISING ;DEX TO MOVE BITMAP UP ONE LINE ;STORE AWAY LINECNT

INX STX CPX BCS LDA STA JMPOW JMP

COLORCNT #9 JMPOW ROT,X PLAYCOL OWLOOP FRMCNT #$03 TEMPM4FC

;PEG IT AT EIGHT ;READ PLAYER COLORS OUT OF TABLE

;;;;;;;;;; REGDRVER LDA AND STA

LDA #0 STA SCNTRLI0 STA SCNTRLI1 ******************************************************************************** * * * PLAYER 0 MOTION * * * ******************************************************************************** ; ; BIT BPL LDA BMI ATTRACT GPSKP005 #0 GPSKP010 IF NOT IN AUTOPLAY GOTO CONTROL READER ;A IS STILL ZERO ELSE DO AUTOPLAY CONTROL SIMULATION

GPSKP005 LDA SWCHA FORMAT CONTROLS INTO ACC EOR #$F0 LSR A LSR A LSR A LSR A LDX INPT4 BMI GPSKP010 ORA #$80 GPSKP010 LDX #0 SELECT INDEX FOR PLAYER 0 JSR PMOTION DO PLAYER 0'S MOTION CMP SCNTRLI0 ;CHECK FOR PRIORITIES BMI GPSKP011 STA SCNTRLI0 GPSKP011 ******************************************************************************** * * * PLAYER 0 / ENEMY COLLISION DETECT * * * ******************************************************************************** LDX LDA CMP BPL LDA LSR BCC LDX LDY JSR #0 STAT2,X #SHIELD ENDHITP0 FRMCNT A ODD #0 #2 BONK IF PLAYER 0 NOT PRESENT SKIP ENEMY

;X IS ALREADY ZERO

LDX LDY JSR LDX LDY JSR JMP ODD ; LDX LDY JSR LDX LDY JSR LDX LDY JSR

#0 #4 BONK #0 #6 BONK ENDHITP0 #0 #3 BONK #0 #5 BONK #0 #7 BONK ;X IS ALREADY ZERO

ENDHITP0 ******************************************************************************** * * * ENEMY MOTION * * * ******************************************************************************** LDA BNE LDA CMP BCS DEC BPL LDA BEQ CMP BCS LDA BPL LDA CMP BCC UNTIME INC JMP FRMCNT PAST1 GAMETYPE #2 JND TERYTIME TTIME ENEMA UNTIME #6 UNTIME DEPNUM UNTIME TERYCNT #3 DOTERYFL TERYTIME TTIME #5 TYPE,X NOWTERY NEXTENMY TTIME #TERYFLAG FLAG AN ENEMY AREA TO DEPLOY A TERRY ;NO TERRIES IN BONZO MODE

CONDITIONALS, FORCED TERRY DEPLOYMENT

DOTERYFL LDX NEXTENMY LDA BEQ DEX BPL BMI NOWTERY LDA

STA LDY DEY BPL LDY PTERY100 STY LDA STA BPL

TYPE,X TITIMNDX PTERY100 #1 TITIMNDX TITIMES,Y TERYTIME TTIME ;CAN SKIP THIS IF WE WANT TO ;ON FALL THROUGH SET UP NEW TERRY TIMER

PAST1 JND TTIME TRYLP

AND BEQ JMP LDX LDA CMP BEQ DEX BPL JMP

#$3F TTIME NODEP #5 TYPE,X #TERYFLAG TRYIT TRYLP ENDEMOVE ZONECNT #5 TYPE,Y #$0F NEY YPOSINT+2,Y #2 #UPPER+4 STEP #LOWER+4 STEP LB,X NEY SPHINX-1,X TOPCNT,X LBOUNDLP #1 LIVES YIS1 LIVES+1 YIS0 HISCORE HISCORE+1 YIS1

TRYIT STX LDY LBOUNDLP LDA AND BEQ LDA LDX CMP BCC DEX CMP BCC DEX STEP CMP BCC LDA TAX INC DEY BPL LDY LDA BMI LDA BMI LDA CMP BCC DEY

NEY

YIS0

YIS1

CHECKME

LDA LDX CMP BCC INX CMP BCC INX LDA BEQ CMP BCS CPX BEQ INX LDA DEX CMP BNE LDX LDA BEQ CMP BCS CPX BEQ INX LDA DEX CMP BNE DEX BPL LDA LDX STA JMP

YPOSINT,Y #0 #UPPER+4 CHECKME #LOWER+4 CHECKME TOPCNT,X GOHERE #2 NOJLM #2 GOHERE TOPCNT,X #2 GOHERE #2 TOPCNT,X GOHERE #2 MOREX #2 GOHERE TOPCNT,X #2 GOHERE ANSRCH #TERYFLAG ZONECNT TYPE,X JEM YVELFRAC TEMP2 A TEMP0 #1 MIDDER BOTTER ;DO IN TOPZONE #$0B STORER #$10 TOPPER STORER #$20 STORER #$1B TEMP0 TEMP0 REVZONE,X ;TERY FLAG IS ALREADY HERE

NOJLM ANSRCH

MOREX

GOHERE

LDA ORA LSR STA CPX BEQ BCS LDA BNE AND BEQ BNE AND BNE LDA AND STA LDA

TOPPER MIDDER BOTTER LDA1F STORER

TAY LDA CLC ADC LDX STA INC INC LDA LSR BCC LDA BMI LDA LSR BCC LDA BPL LDA CMP BCC LDA STA LDY LDA BNE LDA STA LDY LDA STY STA LDA CMP BCC STA BCS CMP BCC STA JMP DB

UB,Y TEMP0 ZONECNT YPOSINT+2,X ENEMA TERYCNT GAMETYPE A NOHER1 LIVES CHKHER1 TEMP3 A CHKHER1 XPOS GOAHEAD XPOS+1 #$40 LEFTTER #RMSTSPXL XPOS+2,X #LTERYTYP #LTERYSPD COMTERY #LMOSTPXL XPOS+2,X #RTERYTYP #RTERYSPD TYPE,X SPEED,X #SCREETCH SCNTRLI0 CHSCN1 SCNTRLI0 JEM SCNTRLI1 JEM SCNTRLI1 ENDEMOVE 2,1

;RANDOM FACTOR???

NOHER1 CHKHER1 GOAHEAD

DEPLOY A NEW TERRY ON THE RIGHT

LEFTTER

COMTERY

CHSCN1

JEM SPHINX

;PUT THIS CODE BEFORE CALLS TO BADGUY-- IT DERIVES WHICH ZONES THE HEROES ARE IN NODEP LDY #2 LDA YPOSINT CMP #$FF BEQ LDYFF0 CMP #UPPER BCC DRIVE0 CMP #LOWER DEY BCC DRIVE0 DEY

DRIVE0

LDYFF0 STYTEM0

LDA CMP BEQ CMP BNE LDY STY LDY LDA CMP BEQ CMP BCC CMP DEY BCC DEY LDA CMP BEQ CMP BNE LDY STY LDA LSR BCC LDX JSR LDX JSR LDX JSR JMP

STAT2 #SHIELD LDYFF0 #$E STYTEM0 #$FF TEMP2 #2 YPOSINT+1 #$FF LDYFF1 #UPPER DRIVE #LOWER DRIVE STAT2+1 #SHIELD LDYFF1 #$E STYTEM3 #$FF TEMP2+1 FRMCNT A ODD1 #0 BADGUY #2 BADGUY #4 BADGUY ENDEMOVE #1 BADGUY #3 BADGUY #5 BADGUY

DRIVE

LDYFF1 STYTEM3

;X IS FF ON FALL THROUGH

ODD1 LDX JSR LDX JSR LDX JSR ENDEMOVE ******************************************************************************** LDA LSR BCC GAMETYPE A OWLOOP IF A TWO PLAYER GAME

******************************************************************************** * * * PLAYER 1 MOTION * * * ******************************************************************************** P1MOSHUN

LDA BIT BMI GPSKP015 LDA EOR AND LDX BMI ORA GPSKP020 LDX JSR CMP BMI STA

#0 ATTRACT GPSKP020 SWCHA #$0F #$0F INPT5 GPSKP020 #$80 #1 PMOTION SCNTRLI1 PPCOL SCNTRLI1

IF NOT IN AUTOPLAY GOTO CONTROL READER FORMAT CONTROLS FOR PLAYER 1

SELECT INDEX FOR PLAYER 0 DO PLAYER 1'S MOTION ;CHECK FOR PRIORITIES

******************************************************************************** * * * PLAYER / PLAYER COLLISION * * * ******************************************************************************** PPCOL LDA CMP BPL LDA CMP BPL LDX LDY JSR PPCOLEND OWLOOP LDA BNE INTIM OWLOOP STAT2+0 #SHIELD PPCOLEND STAT2+1 #SHIELD PPCOLEND #0 #1 NOPUNT IF PLAYER 0 NOT PRESENT SKIP COLLISIONS IF PLAYER 1 NOT PRESENT SKIP COLLISIONS

* VERTICAL BLANK =============================================================== NOOW STA LDX STX STX LDA BPL DONTDO STA STA JMP LDA STA LDA BEQ LDA AND BNE WSYNC #2 VSYNC VBLANK DEPNUM DOMORE WSYNC WSYNC NODEPL #$20 EGGO,Y #0 EGGBCK FRMCNT #$1F DONTDO ;2 Turn on vertical sync and blanking ;5 ;8 ;11 ;13/14 ;16 ;3 ;3 ;5 ;9 ;11 ;14 ;17 ;19 ;21/22

EGGER

DOMORE

LSR BCC LDX LDA STA LDA STA LDY DEY TYA SEC SBC TAY LDA STA CMP STA BCS STA STA TYA AND TAX BEQ LDA ORA STA LDA CMP BCS LDA CMP BCC STA INCDEP INC LDA CMP STA BNE LDA STA LDA STA STA BIT ; BEGBLNK STA LDA STA

SWCHB DONTDO RACKNUM RACKLO,X PTR0 #H(RACK0ENM) PTR0H ENEMA

;26 ;28/29 NOT WHEN RESET IS DOWN ;31 ;35 ;38 ;40 ;43 ;46 ;48 ;50 ;52 ;55 ;57 ;62 ;66 ;68 ;71 ;2/3 ;18 WHEN AN EGG ;22 ;24 ;26 CAN'T SHIFT BECAUSE WE NEED X ;28 ;30/31 ;34 ;36 ;40 ;44 ;46 ;48/49 ;50 QUEUE UP BIRTH SOUND ;54 ;56/57 ;60 ;65 ;68 ;71 ;74 ;2/3 ;4 ;7

DEPNUM (PTR0),Y TYPE,Y #4 WSYNC EGGER SPEED,Y ASPEED,Y #$01 PUNTNEG SPEED,Y #$04 SPEED,Y TYPE,Y #$4 INCDEP #VBRTHSND SCNTRLI0,X INCDEP SCNTRLI0,X DEPNUM DEPNUM ENEMA WSYNC NODEPL #$FF DEPNUM #0 PF1 PF2 ATTRACT WSYNC #0 VSYNC

EGGBCK

PUNTNEG

ENDDEP NODEPL

;FOR BEGINNING OF BLANKING ;10 ; Turn off vertical sync

LDA STA **** ; JSR BVC JMP NOTITLE

;WON'T HELP TO PUT THIS IN VSYNC SINCE WE ARE ONLY WORRIED ;ABOUT TIME AFTER THE STORE TO THE TIMER #$2D ; (43 decimal) Count vertical blanking TIM64T FRZEBL NOTITLE GOBANKD ;COMMENT THIS OUT FOR NO FREEZE FRAMER ;OR TO BURN A CART

******************************************************************************** * * * RACK ADVANCE CONDITIONALS * * * ******************************************************************************** CADVNTRY LDA BEQ JCAD JMP DECTIMER DEC BNE ENEMA DECTIMER CADVEXIT TIMER JCAD IF ENEMIES DON'T ADVANCE CLIFFS

IF TIMER NOT OUT DON'T ADVANCE THIS IS ONLY FOR QUICKY ENEMY DEPLOY

******************************************************************************** * * * ADVANCE RACK NUMBER AND CLIFF CONFIGURATION * * * ******************************************************************************** LDA CMP BCS BIT BVC LDA BMI LDA LDY TAX JSR PLAY1 LDA LSR BCC LDA BMI LDA LDY LDX JSR LDY INY GAMETYPE #2 REAGAN GLADRAG NOBONUS LIVES PLAY1 #$00 #$30 ADDSCORE GAMETYPE A NOBONUS LIVES+1 NOBONUS #$00 #$30 #1 ADDSCORE RACKNUM

;Y SHOULD STILL BE 30

NOBONUS

STRCK

BUSH

CPY BNE LDY STY TYA AND CMP BNE LDA ORA BMI CMP BNE LDA ORA BNE LDA STA LDY INY CPY BNE LDY STY

#27 STRCK #19 RACKNUM #3 #2 BUSH GLADRAG #$80 NANCY #1 CASPAR GLADRAG #$40 NANCY #0 GLADRAG CFIGINDX #15 STCFIG #3 CFIGINDX

CASPAR NANCY REAGAN

STCFIG

******************************************************************************** * * * HAVE PLAYERS FALL OFF DISOLVED CLIFFS * * * ******************************************************************************** GPSKP98A LDX GPSKP98B LDA AND BEQ STX LDA AND CMP BNE CPY BNE LDA CMP BCC CMP BCS LDA STA BEQ GPSKP98C TAX LDA #1 STATES,X #$60 GPSKP98D TEMP0 GENERALS,X #$7 #1 GPSKP98C #2 GPSKP98D XPOS,X LEFTSM4 FLYTRANS RIGHTSM1 FLYTRANS #0 GENERALS,X GPSKP98D CNUMASKS,X SETUP PLAYER INDEX IF PLAYER FLYING SKIP CLIFF EXISTENCE CHECK

GET CLIFF NUMER INTO X

LDX AND BNE FLYTRANS LDA STA LDA AND STA LDA STA STA STA GPSKP98D DEX BPL JSR LDA BIT BMI LDX STX LDA STA LDA AND STA JMPVB JMP

TEMP0 CLIFIGS,Y GPSKP98D #1 GEN2,X STATES,X #$8F STATES,X #0 YVELINT,X YVELFRAC,X GENERALS,X GPSKP98B DEPENMYS #0 ENEMA STZTT #ITITI TITIMNDX #11 TERYTIME ENEMA #$7F ENEMA VBEND

IF CLIFF DOESN'T EXIST ANYMORE SKIP TO TRANS TO FLY SECTION TRANSITION TO FLYING

IF NEED BE DO NEXT PLAYER DEPLOY ENEMIES

RESET TERRY TIMER...

STZTT

;TO PREVENT SCREEN FLIPS

CADVEXIT ******************************************************************************** * * * PLAYER 1 / ENEMY COLLISION * * ******************************************************************************** LDX LDA CMP BPL LDA LSR BCC LDA LSR BCC LDY JSR LDX LDY JSR LDX LDY JSR #1 STAT2+1 #SHIELD ENDHITP1 GAMETYPE A VBEND FRMCNT A ODD2 #2 BONK #1 #4 BONK #1 #6 BONK ;X IS STILL ONE IF PLAYER 1 NOT PRESENT SKIP ENEMY

JMP ODD2 LDY JSR LDX LDY JSR LDX LDY JSR ENDHITP1 VBEND BLOAD JMP PMOSKP05 LDA AND

ENDHITP1 ;X IS STILL ONE #3 BONK #1 #5 BONK #1 #7 BONK

GOBANKD STATES,X #$60

;IF NOT FLYING BNE PMOSKP10 GOTO WALK SKID COMMON FRONT END START JMP FLYENTRY PMOSKP10 JMP WSFENTRY ;=============================================================================== * * * * * * * * * * PMOTION SUBROUTINE PMOTION THIS SUBROUTINE DOES THE MOTION FOR A PLAYER INPUTS THE CONTROLS SHOULD BE IN THE ACC, BIT 7 SET/RESET BUTTON D/U BITS 3210 INVERTED JOYSTICK INPUT AN INDEX FOR THE PLAYER SHOULD BE IN X OUTPUTS ALL THE FIELDS OF A PLAYER'S DATA MIGHT BE CHANGED THE ACC WILL HAVE A SOUND CONTROL CODE STX STA LDA CMP BMI CMP BNE PDTHSK02 LDY DEY BMI STY BPL PDTHSK10 STY LDY STY BNE PDTHSNUM,X #PDETHSTM PDETHTIM,X PDTHSK15 TEMP0 TEMP1 STAT2,X #SHIELD PMOSKP05 #PDEATH GBSENTRY PDETHTIM,X PDTHSK05 PDETHTIM,X PDTHSK15 STORE PLAYER INDEX STORE CONTROLS

PDTHSK05 LDY INY CPY BNE LDA STA LDA STA PGONE010 PDTHSK15 LDA RTS GBSENTRY CMP BNE LDA BMI DEC BNE PGONE020 DEC BMI LDA STA LDA STA LDA STA LDA STA LDA STA CMP LDA STA ROL STA LDA STA LDA BEQ LDY LDA STA NONEWTT BSENTRY LDA RTS CMP BEQ DEC BNE

PDTHSNUM,X #EXP2SNP1 PDTHSK10 #PGONE STAT2,X #GONEITIM PGONETIM,X #NOTSOUND #PGONE BSENTRY LIVES,X PGONE010 PGONETIM,X PGONE010 LIVES,X PGONE010 C1XPOS,X XPOS,X TOPSM9 YPOSINT,X #ISTATB1 STATES,X #ISTA2B1 STAT2,X #$01 BIRTHAN,X CFIGINDX #0 EGGSCORE,X A GENERALS,X #BRTHITIM BIRTHTIM,X TERYCNT NONEWTT TITIMNDX TITIMES,Y TERYTIME #BIRTHSND #SHIELD SHLDNTRY BIRTHTIM,X PGONE010

ALWAY DO BIRTH ON CLIFF ONE FOR NOW

PUT PLAYER ON CORRECT CLIFF

SET UP NEW TERRY TIMER

BIRTH010 DEC INC LDA CMP BNE LDA STA LDA STA LDA STA LDA RTS BIRTH030 LDA STA PGONE011 LDA RTS SHLDNTRY LDA BEQ SHLD005 LDA STA LDA RTS DEC BNE LDY INY CPY BEQ STY LDA STA LDA RTS

YPOSINT,X BIRTHAN,X BIRTHAN,X #7 BIRTH030 #SHLDITIM SHLDTIM,X #1 SHLDSEC,X #ISTA2SLD STAT2,X #SHLDSND #BRTHITIM BIRTHTIM,X #NOTSOUND TEMP1 SHLD010 #ISTA2WLK STAT2,X #STPSHLDS SHLDTIM,X PGONE011 SHLDSEC,X #7 SHLD005 SHLDSEC,X #SHLDITIM SHLDTIM,X #NOTSOUND

SHLD010 SHLD020

SHLD030 WSFSKP18

;============================================================================== WSFENTRY LDA STA LDA BMI LDY BPL LDA BNE WSFSKP05 LDY #NOTSOUND TEMP4 GENERALS,X WSFSKP05 TEMP1 WSFSKP10 #FLYFEFST WSFSKP15 TEMP1 STORE DEFAULT SOUND CONTROL CODE IN TEMP IF BUTTON HAS NOT BEEN UP YET GOTO BUTTON STILL DOWN CHECK IF BUTTON IS UP GOTO STILL ON CLIFF CHECK SETUP AND GOTO TRANS TO FLY IF BUTTON STILL DOWN

BMI AND STA WSFSKP10 LDA AND TAY STA LDA CMP BCC CMP BCC WSFSKP14 LDA WSFSKP15 STA LDA STA AND STA LDA STA STA STA LDA AND BNE LDA RTS WSFSKP20 LDA AND BNE JMP

WSFSKP10 #$7F GENERALS,X GENERALS,X #$7 TEMP3 XPOS,X LEFTSM4,Y WSFSKP14 RIGHTSM1,Y WSFSKP20 #1 GEN2,X STATES,X TEMP2 #$8F STATES,X #0 YVELINT,X YVELFRAC,X GENERALS,X TEMP2 #$40 WSFSKP18 #STPSKDSN STATES,X #$40 WFENTRY SFENTRY

GOTO STILL ON CLIFF CHECK CLEAR BUTTON DOWN BIT CHECK IF STILL ON CLIFF GET CLIFF # INTO Y ALONE STORE CLIFF # FOR W/S BACK END USE IF LEFT OF CENTER SECTION OF CLIFF GOTO TRANS TO FLY IF NOT RIGHT OF CENTER SECTION OF CLIFF GOTO BRANCHES FOR WALK/SKID FRONT ENDS TRANSITION TO FLY MAINTAIN FACING ;RESET FLY BITS, CLEAR WALK/SKID BITS

IF WERE SKIDDING RETURN WITH STOP SKID SOUND

BRANCH OUT TO INDIVIDUAL WALK AND SKID FRONT ENDS

;=============================================================================== WFENTRY LDA CMP BPL CMP BMI LDA AND BNE BEQ WFESKP05 CMP BMI LDA AND BEQ STAT2,X #5 WFESKP05 #3 WBENTRY0 TEMP1 #$04 WFESKP10 WBENTRY0 #8 WBENTRY0 TEMP1 #$08 WBENTRY0 WALK FRONT END GOTO LEFT SPEED AND STICK CHECK IF RIGHT SPEED < 3 GOTO WALK BACK END IF STICK LEFT GOTO TRANSITION TO SKID ELSE GOTO WALK BACK END LEFT SPEED AND STICK CHECK IF LEFT SPEED < 8 GOTO WALK BACK END IF NOT STICK RIGHT GOTO WALK BACK END

WFESKP10 LDA AND ORA STA INC INC LDA STA LDA RTS

STATES,X #$8F #$20 STATES,X YPOSINT,X YPOSINT,X #MAXSDLAY GEN2,X #SKDSOUND

TRANSITION TO SKID CLEAR WALK AND SET SKID BIT

;=============================================================================== WBESKP03 STY GEN2,X JMP WBESKP25 GOTO GET DELTA X SECTION WBENTRY0 LDY DEY BNE GEN2,X WBESKP03 WALK BACK END IF DELAY NOW ZERO THEN GOTO SPEED CHANGE/DELAY RESET SPOT

LDY LDA AND BEQ AND BNE

STAT2,X TEMP1 #$0C WBESKP25 #$08 WBESKP10

SPEED CHANGE SECTION

GET SPED INTO Y

GET EAST/WEST BITS INTO ACC ALONE IF NOT CHANGE GOTO GET DELTA X SPOT IF EAST NOT SET GOTO RIGHT STICK SPEED CHANGE ;LEFT STICK SPEED CHANGE SECTION ;CLEAR OUT OLD SPEED HUAL IN NEW SPEED GOTO FACING SETING SECTION ;RIGHT STICK SPEED CHANGE SECTION ;CLEAR OUT OLD SPEED HUAL IN NEW SPEED STORE NEW STATES UNTIL CONVIENIENT ;SET FACING IN DIRECTION OF SPEED IF LEFT SPEED GOTO SET LEFT FACING SPOT GET IN NEW STATES CLEAR FACING BIT FOR FACING RIGHT GOTO STORE TEMPS AND DELTA X SET FACING IN DIRECTION OF SPEED STORE NEW STATES

LDA JMP WBESKP10 LDA WBESKP15 STA CMP BPL LDA AND BPL WBESKP20 LDA ORA WBESKP23 STA LDA

SPEDCNGL,Y WBESKP15

SPEDCNGR,Y STAT2,X #5 WBESKP20 STATES,X #$7F WBESKP23 STATES,X #$80 STATES,X #MAXWDLAY

STA WBESKP25 LDA ASL ASL ADC TAY LDA TAY LDA BEQ CMP BNE WBESKP28 LDA AND ORA STA JMP50 JMP WBESKP30 TYA ; BNE BEQ WBESKP35 LDA AND BEQ SEC SBC STA CMP BNE LDA STA WBESKP50 LDA AND ORA STA TYA JMP WBESKP55 LDA STA BNE

GEN2,X STAT2,X A A TEMPM4FC DELTAX,Y STAT2,X WBESKP28 #5 WBESKP30 STATES,X #$CF #$30 STATES,X WSBSKP50 WBESKP35 JMP50 STATES,X #$30 WBESKP55 #$10 TEMP2 #$10 WBESKP50 #WLKSOUND TEMP4 STATES,X #$CF TEMP2 STATES,X WSBENTRY #$30 TEMP2 WBESKP50 IF NOT AT FOOT DOWN GOTO STORE NEW AN # SECTION QUE UP FOOT DOWN NOISE GET DELTA X INTO Y

IF NOT MOVING GOTO STAND SECTION IF MOVING GOTO ANIMATION SECTION CLEAR OUT OLD ANIMATION # AND SELECT 3 WHICH IS USED FOR STANDING GOTO NO SOUND RETURN SECTION IF MOTION THIS FRAME GOTO ANIMATION INCREMENT ELSE GOTO NO SOUND RETURN GET AN # INTO ACC ALONE, BUT UNSHIFTED IF AN # IS ZERO GOTO START NEW CYCLE SECTION SUBTRACT "1" FROM AN #

KILL OLD AN # HUAL IN NEW ONE GOTO COMMON WALK SKID BACK END

;=============================================================================== SFENTRY LDA BEQ CMP BEQ BMI LDA STAT2,X SFESKP10 #5 SFESKP10 SFESKP05 TEMP1 SKID FRONT END IF SPEED RIGHT 0 GOTO WALK TRANS IF SPEED LEFT 0 GOTO WALK TRANS IF LEFT GOTO LEFT STICK CHECK

AND BEQ BNE SFESKP05 LDA AND BEQ SFESKP10 LDA AND ORA STA DEC DEC LDA STA LDA RTS

#$04 SBENTRY0 SFESKP10 TEMP1 #$08 SBENTRY0 STATES,X #$8F #$70 STATES,X YPOSINT,X YPOSINT,X #MAXWDLAY GEN2,X #STPSKDSN

IF STICK LEFT

IF STICK RIGHT ELSE GOTO SKID BACK END TRANSITION TO WALK CLEAR OUT SKID INDICATIONS HUAL IN WALK STUFF

;=============================================================================== SBENTRY0 LDY DEY BEQ STY LDA JMP SBESKP05 LDA STA LDY LDA STA SBENTRY1 SBESKP25 TYA SBESKP26 ASL ASL ADC TAY LDA A A TEMPM4FC DELTAX,Y GEN2,X SBESKP05 GEN2,X STAT2,X SBESKP26 #MAXSDLAY GEN2,X STAT2,X SPEEDEC,Y STAT2,X ;GET CURRENT SPEED INTO Y GET AND DECREMENT DELAY IF DELAY = 0 THEN GOTO SPEED CHANGE/DELAY RESET SPOT REBUILD GENERALS WITH NEW DELAY GOTO GET DELTA X SECTION SPEED CHANGE SECTION

HUAL IN SMALLER SPEED ;QUE UP SKID NOISE Y ;SPEED IS STILL IN Y

;=============================================================================== ;WALK AND SKID COMMON BACK END DEALING WITH X MOTION AND WRAP AROUND WSBENTRY ; BNE BEQ WSBSKP35 CLC ADC WSBSKP35 WSBSKP50 XPOS,X ; IF HORIZONTAL MOTION THIS FRAME GOTO X CALC AND CHECK SECTION ELSE SELECT NO SOUND AND RETURN CALCULATE NEW X POSSITION

CMP BPL LDA BNE WSBSKP40 CMP BMI LDA WSBSKP41 STA WSBSKP42 LDY LDA AND ORA STA JMP WSBSKP45 STA WSBSKP50 LDA RTS

#LMOSTPXL WSBSKP40 #RMSTSPXL WSBSKP41 #RMSTCPXL WSBSKP45 #LMOSTPXL XPOS,X TEMP3 GENERALS,X #$F8 CLIFWRAP,Y GENERALS,X WSBSKP50 XPOS,X TEMP4

IF TO RIGHT OF LEFTMOST LEGAL PIXEL GOTO RIGHT EDGE CHECK SECTION SET TO RIGHT OF SCREEN GOTO CLIFF WRAP SECTION IF IN CENTER OF SCREEN GOTO STORE NEW X SECTION SET TO LEFT OF SCREEN GET CLIFF NUMBER INTO Y KILL CLIFF #, BITS 210 HUAL IN WRAPED AROUND CLIFF #

GET POSSIBLE SOUND

;============================================================================== ; FLYING SECTION FLYSK12B LDA JMP FLYSK12C AND TAY LDA AND CPY BEQ ORA FLYSK12D STA LDA JMP FLYENTRY * * * * * * * * * * * * * * * * STAT2,X FLYSKP08 #$04 STATES,X #$7F #0 FLYSK12D #$80 STATES,X STAT2,X FLYSKP08 SETUP AND GOTO GET DELTA X SECTION GET WEST CONTROL BIT INTO Y ALONE GET STATES AND CLEAR OLD FACING BIT IF WEST IS SET SET LEFT FACING BIT

SUBPROCESS GET RAW Y THIS SUBPROCESS LOOKS AT THE CONTROLS AND STATE FOR THE "PASSED" PLAYER BIRD AND UPDATES ITS VERTICLE VELOCITY, POSSITION AND DELAY EFFECTIVENESS FOR EFFECTIVE FLAPPING FRAMES. THE ONLY BOUNDRY CONDITION DEALT WITH IN THE SUBPROCESS IS TERMINAL VELOCITIES. INPUTS THE CONTROLS FOR THIS BIRD SHOULD BE IN THE ACC AND AN INDEX AS TO WHICH PLAYER IN X OUTPUTS THE FOLLOWING FIELDS OF THE PLAYER BIRD ARE UPDATED: YPOSINT, GENERALS (YPOSFRAC, DELAY/EFFECT), YVELINT, YVELFRAC SIDE EFFECTS THE PROCESSOR STATUS IS ABOUT YPOSINT. THE ACC CONTAINS YPOSINT. RAM LOC TEMP2 CONTAINS DELAY/EFFECT

* * LDA BMI LDA BNE GETMGF LDY BNE

Y IS TRASHED. TEMP1 GETYSKP0 #FLYFEFST GETYSKP #2 GETYSKP2 GEN2,X GETMGF GET CONTROLS IF BUTTON DOWN GOTO SECTION FOR BUTTON DOWN ;SECTION FOR BUTTON UP RESET FLYING EFFECTIVENESS GOTO VELOCITY CALC SECTION ;SECTION FOR EFFECTIVEFLAPPING SELECT RESULTANT UPWARD ACCELERATION GOTO VELOCITY CALC SECTION ;SECTION FOR BUTTON DOWN GET DELAY/EFFECT INTO Y ALONE DECREMENT DELAY/EFFECT IF DELAY/EFFECT = 0 GOTO NON-EFFECTIVE FLAPPING SPOT ;SECTION FOR NON-EFFECTIVE FLAPS SET D/E TO ALLOW MORE NON-EFFECT SELECT GRAVITAITIONAL ACCELERATION TEMP STORE NEW DELAY EFFECT ;SECTION FOR VELOCITY CALC CALC AND STORE YVELFRAC YVELFRAC,X ACCELS,Y YVELFRAC,X YVELINT,X ACCELS,Y #$0F TERMVELS,Y YVELINT,X GENERALS,X YVELFRAC,X GENERALS,X YVELINT,X YPOSINT,X YPOSINT,X TEMP1 #$0C FLYSK12B GEN2,X #FLYFEFCP FLYSK12C A A A ;POSSITION CALC SECTION STORE INTEGER VELOCITY GET OLD YPOSFRAC INTO CALC NEW YPOSFRAC CALC AND STORE YPOSINT ADJUST INDEX FOR ACCEL INT CALCULATE YVELINT ;GET INTEGER PART OF VELOCITY IN BOUNDS VIA TABLE LOOKUP ON COMPUTED SPEED

GETYSKP0 LDY DEY TYA BNE

GETYSKP1 LDA GETYSKP LDY GETYSKP2 STA CLC LDA ADC STA INY LDA ADC AND TAY LDA GETYSKP4 STA LDA CLC ADC STA LDA ADC STA LDA AND BEQ LDY CPY BNE LSR LSR LSR

#1 #0 GEN2,X

IF NO STICK GOTO SETUP AND THEN GET DELTA X SPOT IF NOT FIRST EFFECTIVE FLAP FRAME GOTO FACING CHANGE ONLY COMPUTE INDEX INTO NEW FLYING STATES TABLE, BITS 4-1 X SPEED, BIT 0 WEST

LDA ROL TAY ROR LDA ROR STA LDA STA FLYSKP08 ASL ASL ADC TAY LDA ADC CMP BPL LDA BNE FLYSKP10 CMP BMI LDA FLYSKP12 STA STA FLYSKP13 LDY BPL LDY BPL CPY BMI LDA SEC SBC STA LDA AND TAY LDA STA LDY JMP FLYS160 FLYS161 JMP JMP

STAT2,X A A #0 A STATES,X NFSTAT2,Y STAT2,X HUAL IN AND STORE NEW STATES ;GET NEW X SECTION ;GET DELTA X A A TEMPM4FC DELTAX,Y XPOS,X #LMOSTPXL FLYSKP10 #RMSTSPXL FLYSKP12 #RMSTCPXL FLYSKP12 #LMOSTPXL TEMP2 XPOS,X YVELINT,X FLYSKP14 YPOSINT,X FLYSKP14 #TOPSCNUM FLYSKP14 #0 YPOSINT,X YPOSINT,X YVELINT,X #$0F CLFBVELS,Y YVELINT,X TEMP0 FLYSKP22 FLYSKP21 FLYSKP20 IGNORE Y FRAC IT IS INSIGNIFICANT GET REFLECTED AND DAMPED Y VELOCITY FROM TABLE RESTORE PLAYER INDEX INTO Y GOTO FLAP SOUND CHECK GOTO LAVA SECTION GOTO RIGHT EDGE CHECK SECTION ;HORIZONTAL WRAP AROUND SECTION IF TO RIGHT OF LEFTMOST LEGAL X GOTO RIGHT EDGE CHECK SECTION SET TO RIGHT OF SCREEN GOTO TOP OF SCREEN REFLECT CHECK SECTION IF TO LEFT OF RIGHTMOST LEGAL X GOTO SCREEN TOP CHECK SECTION SET TO LEFT EDGE STORE NEW X ;TOP OF SCREEN REFLECT CHECK SECTION IF GOING DOWN GOTO CLIFF COLLISION CHECK SECTION IF NOT PAST TOP OF SCREEN GOTO CLIFF COLLISION CHECK SECTION ;TOP OF SCREEN REFLECT SECTION

WCLFSK10 LDA LDY CMP BPL LDX BNE FLYSKP14 LDA * * * * * * * * * * *

CFIGINDX TEMP0 #2 FLYSKP16 #1 FLYSKP16 YPOSINT,X ;CLIFF COLLISION CHECK SECTION GET STAMP'S Y INTO ACC FOR WHATCLIF

SUBPROCESS WHATCLIF THIS SUBPROCESS DETERMINES WHAT CLIFF, IF ANY, THE "PASSED" STAMP MIGHT BE IN. INPUTS THE Y OF THE STAMP SHOULD BE IN THE ACC THE X " " " " " " LOCATION OUTPUTS THE CLIFF # IS IN X; IF NO CLIFF, X IS GARBAGE A A CCHKNUMS,Y WCLFSK10 TEMP2 #80 WCLFSKP7 WCLFWRAP,X CFIGINDX CLIFIGS,Y TEMP0 CNUMASKS,X FLYS160 TEMP2 RIGHTSM1,X FLYS161 LEFTSM4,X FLYSKP19 YVELINT,Y FLYSKP18 2 2 2 4 2 3 2 2 4 2 3 4 3 4 2 DIVIDE STAMP'S Y BY 4 GET LEFT CLIFF NUMBER INTO Y IF ON BOTTOM OF SCREEN GOTO ITS SPOT IF ON LEFT SIDE OF SCREEN DON'T WRAP TO GET RIGHT CLIFF NUMBER GET RIGHT WRAPED CLIFF NUMBER HAUL IN CONFIG INDEX GET CLIFF CONFIG INTO ACC RESTORE PLAYER INDEX INTO Y MASK FOR CURRENT CLIFF IF CLIFF CHECK, ELSE GO FLAP SND AREA TEMP2

WHATCLIF LSR LSR TAY LDX BEQ LDA CMP BMI LDA TAX WCLFSKP7 LDY LDA LDY AND BEQ FLYSKP16 LDA CMP BCS CMP BCC FLYSK16A LDA BMI

;POSSIBLE CLIFF # IS IN X GET NEW X INTO ACC ;MID CLIFF CHECK SECTION IF IN THE CENTER SECTION OF CLIFF THEN DROP THRU TO CENTER CLIFF SECTION ELSE GOTO PROPER EDGE CHECK SECTION

IF VELOCITY NEG GOTO MIDCLIFF GOING UP ;GOING DOWN MIDCLIFF HIT AND WALK CHECK CALC DISTANE A WALK STAMP INTO CLIFF IF NOT IN CLIFF GOTO FLAP SOUND CHECK ;TRANSITION TO WALK

FLYS16A2 LDA SEC SBC BMI LDA STA

YPOSINT,Y TOPSM15,X FLYS162 TOPSM15,X YPOSINT,Y

PUT BIRD ON CLIFF

TXA ORA STA LDA STA LDA ASL LDA ROL TAX LDA STA LDA RTS FLYSKP18 LDA SEC SBC BMI BEQ CMP BPL CLC ADC STA LDA AND TAX LDA STA LDA RTS FLYS162 JMP

BUILD GENERALS BASED ON CLIFF NUMBER #$80 GENERALS,Y #MAXWDLAY GEN2,Y STATES,Y A STAT2,Y A IWLKSTAT,X STATES,Y #NOTSOUND BUILD INDEX INTO NEW WALK STATES FROM HORIZONTAL SPEED AND FACING HUAL IN NEW INITIAL WALK STATE NO SOUND RETURN RETURN FROM PMOTION SUBROUTINE ;MIDCLIFF GOING UP SECTION CALCULATE DISTANCE INTO CLIFF IF NOT INTO CLIFF THEN GOTO FLAP SOUND SECTION

BOTSP1,X YPOSINT,Y FLYS162 FLYS162 #5 FLYS162

;HIT MIDCLIFF GOING UP CALCULATE BOUNCED Y YPOSINT,Y YPOSINT,Y YVELINT,Y #$0F CLFBVELS,X YVELINT,Y #BNCSOUND FLYSKP22 LEFTSM7,X FLYSKP21 YPOSINT,Y TOPSM11,X FLYSKP22 BOTSP1,X FLYSKP22 LEFTSM7,X #1 XPOS,Y GET REFLECTED AND DAMPED Y VELOCITY FROM TABLE QUE UP BOUND SOUND RETURN FROM PMOTION SUBROUTINE GOTO FLAP SOUND SECTION IF LEFT OF POSSIBLE CLIFF THEN GOTO LAVA SECTION ;LEFT PIXELS VERT ZONE CHECK

FLYSKP19 CMP BCC LDA CMP BMI CMP BPL LDA SEC SBC STA

IF STAMP ABOVE CLIFF THEN GOTO FLAP SOUND SECTION IF STAMP BELOW CLIFF THEN GOTO FLAP SOUND SECTION ;HAVE HIT LEFT EDGE OF CLIFF #X BOUNCE MOVE STAMP JUST LEFT OF CLIFF

LDX LDA STA LDA RTS FLYSKP20 CMP BCS LDA CMP BMI CMP BPL LDA STA LDX LDA STA LDA RTS FLYSKP21 LDA BPL CMP BMI LDA STA STY LDX LDA LDY JSR LDY

STAT2,Y SPCNGIFR,X STAT2,Y #BNCSOUND

GET H SPEED INTO X ALONE HUAL IN POSSIBLE CHANGED SPEED QUE UP BOUNCE SOUND RETURN FROM PMOTION SUBROUTINE ;CHECK FOR RIGHT EDGE HIT SECTION IF RIGHT OF CLIFF THEN GOTO LAVA GET NEW Y IF ABOVE CLIFF THEN GOTO FLAP SOUND SECTION IF BELOW CLIFF THEN GOTO FLAP SOUND SECTION ;HIT RIGHT EDGE PUT STAMP JUST RIGHT OF CLIFF GET OLD H SPEED INTO X ALONE HUAL IN POSSIBLE CHANGE SPEED

RIGHTSP1,X FLYSKP21 YPOSINT,Y TOPSM11,X FLYSKP22 BOTSP1,X FLYSKP22 RIGHTSP1,X XPOS,Y STAT2,Y SPCNGIFL,X STAT2,Y #BNCSOUND YPOSINT,Y FLYSKP22 #LAVAM11 FLYSKP22 #PDEATH STAT2,Y TEMP2 TEMP2 #$50 #0 ADDSCORE TEMP2

QUE UP BOUNCE NOISE RETURN FROM PMOTION SUBROUTINE LAVA CHECK

LDA STA LDA STA LDA RTS FLYSKP22 LDA CMP BNE LDA RTS

#EXP0SNUM PDTHSNUM,Y #PDETHSTM PDETHTIM,Y #XPLSOUND

QUE UP EXPLOSION NOISE RETURN FROM PMOTION SUBROUTINE ;SOUND SECTION FOR POSSIBLE WING NOISE

GEN2,Y #FLYFEFCP FLYSKP25 #FLPSOUND

IF FIRST EFFECTIVE FLAP FRAME THEN QUE UP FLAP NOISE RETURN FROM PMOTION SUBROUTINE

FLYSKP25 LDA #NOTSOUND NO SOUND RTS RETURN FROM PMOTION SUBROUTINE ******************************************************************************** ADDSCORE BIT BMI SED CLC ADC STA TYA ADC STA BCC LDA LSR BCC INC LDA STA SEC LDA ADC STA CLD ATTRACT ADSCEXIT IF AUTOPLAY FORGET SCORING

LOWSCORE,X LOWSCORE,X MIDSCORE,X MIDSCORE,X CLEARD HISCORE,X A NOINCLS LIVES,X #EXTRAMAN SCNTRLI0,X HISCORE,X #0 HISCORE,X

NOINCLS

CLEARD

ADSCEXIT RTS ******************************************************************************** DEPENMYS LDA CMP BCC LDA STA LDA BNE NOBONZ LDX LDA STAENM STA LDA STA STA LDA STA STA LDA STA STA ENEMA #$D YPOSINT+2 YPOSINT+3 #UPPER+10 YPOSINT+4 YPOSINT+5 #LOWER+10 YPOSINT+6 YPOSINT+7 ;FOR NOW LEAVE X AND Y ALONE RACKNUM ENEMATBL,X GAMETYPE #2 NOBONZ #0 RACKNUM #1 STAENM

LDA LDX STA STX STA STX STA STX LDA LDX STA DEX BPL STA STA STA STX STA RTS

#9 #$72 XPOS+2 XPOS+3 XPOS+4 XPOS+5 XPOS+6 XPOS+7 #0 #5 TYPE,X ZERTPLP EGGSCORE EGGSCORE+1 DEPNUM TIMER TERYCNT

ZERTPLP

;ZERO OUT ALL TYPES FIRST

BGEND

******************************************************************************** ;ENEMY DRIVER ; TYPE BITS ; BITS ; BIT ; BITS ; BIT ;SPEED BITS ; BITS ; BITS BADGUY ;SOME LDA AND BEQ AND CMP BNE JMP ;YVELOCITY BCHECK LDA AND STA LDA CMP LDY BCC CMP DEY BCC DEY BOUNDS SEC SBC CMP BCC ENEMY TYPE--0=NOTHING,1=RED,2=GREY.3=BLUE 00=REGULAR,01=EGG,10=EXPLOSION,11=TERRY 4 ANIMATION NUMBER--0=WINGUP 56 UNUSED OR FLAG TO DEPLOY THIS AS A TERRY 7 DIRECTION 1=LEFT 210 XVELOCITY CODE 543 YVELOCITY CODE 76 UP.DOWN ZONE CROSSING FLAGS LOGIC SHOULD GO HERE TO DO DIFFERENT TYPES OF ENEMIES/EGG 32 TYPE,X #$0F BGEND #$C #$C BCHECK PTERRY TYPE,X #7 ZONECNT YPOSINT+2,X #UPPER #2 BOUNDS #LOWER BOUNDS 10

UB,Y #2 UNTEN

;UPPER BOUNDS TABLE ;BOUNCE DOWN

LDA SBC CMP BCS OBEN LDA AND BNE LDY LDA STA DEC BNE LDA BMI LDY LDA STA INC NORM LDA AND ASL ASL STA LDA ORA TAY LDA CLC ADC STA LDA AND BNE LDA EOR STA XDRIVE LDA AND ASL ASL STA LDA AND STA ORA TAY LDA CMP LDA BCS AND BPL

LB,Y YPOSINT+2,X #2 NORM SPEED,X #$40 NORM ZONECNT UPSPEED,Y ASPEED,X YPOSINT+2,X NORM SPEED,X NORM ZONECNT DWNSPD,Y ASPEED,X YPOSINT+2,X FRMCNT #$E A A TEMP0 ASPEED,X TEMP0 YSPEED0,Y YPOSINT+2,X YPOSINT+2,X #8 FRMCNT XDRIVE TYPE,X #$10 TYPE,X FRMCNT #$0E A A TEMP0 SPEED,X #7 TEMP1 TEMP0 TEMP1 #4 TYPE,X SEDIRR #$7F DOPOS ;BEFORE BEING USED ;YSPEED0 IS ADD FACTOR FOR FRAME ZERO

;ZONE CROSSING FLAG SET, IGNORE BOUND

UNTEN

;JMP ;BOUNCE DOWN ;ZONE CROSSING UP--DON'T BOUNCE DOWN

ENDVERT

SEDIRR DOPOS

WRAPLT WRAPRT NOWRAP

ORA STA LDA CLC ADC CMP BCS CMP BCS CMP BCS LDA BNE LDA STA LDA AND BNE LDY LDA AND BEQ JMP

#$80 TYPE,X XSPEED,Y XPOS+2,X #RMSTCPXL+4 WRAPLT #RMSTCPXL WRAPRT #LMOSTPXL NOWRAP #RMSTSPXL NOWRAP #LMOSTPXL XPOS+2,X ZONECNT #4 JNSEEK ZONECNT FRMCNT SKIPMSK,Y ATTACK NOSEEK

;WRAP IT AROUND

JNSEEK

;HERO SEEK LOGIC ;TEMP2 CONTAINS THE ZONE NUMBER OF HERO0, TEMP3-HERO1 ATTACK LDA YPOSINT+2,X LDY #2 CMP #UPPER BCC GOON CMP #LOWER DEY BCC GOON DEY GOON ; STY TEMP1 ;NOT NECESSARY SINCE NEVER USED CPY TEMP2 BEQ CKH1 ;CHECK HERO1 ONLY CPY TEMP3 BNE NOSEEK LDY #1 BNE GOFORIT ;DOHERO1 CKH1 CPY TEMP3 BNE DOHERO0 ;DETERMINE WHICH DOBOTH LDY LDA SEC SBC BPL EOR XSTDF1 STA LDA SEC SBC BPL EOR IS CLOSER #1 YPOSINT+2,X YPOSINT XSTDF1 #$FF TEMP0 YPOSINT+2,X YPOSINT+1 XSTDF2 #$FF ;PRELOAD FOR PLAYER 1

XSTDF2 DOHERO0 GOFORIT

CMP BCS LDY LDA STA LDA SEC SBC STA LDY LDA AND BNE LDY LDA CMP LDA STA BCS LDY STY LDA AND STA LDA AND ORA STA TYA ORA STA LDA CMP LDY BCS LDA BCC

TEMP0 GOFORIT #0 XPOS,Y TEMP3 YPOSINT,Y #5 TEMP2 ZONECNT SKIPDIR,Y FRMCNT VSEEK #$80 XPOS+2,X TEMP3 #4 TEMP4 STXDIR #0 TEMP4 TYPE,X #$7F TEMP0 SPEED,X #$FB TEMP4 SPEED,X TEMP0 TYPE,X YPOSINT+2,X TEMP2 ZONECNT GOUP DWNSPD,Y STORMY UPSPEED,Y ASPEED,X

;HERO1 CLOSER VERTICALLY

;PRELOAD LEFT ;TEMP3 IS XPOS ;GO LEFT

STXDIR

VSEEK ;TEMP2 IS YPOSINT

GOUP STORMY NOSEEK LDA AND BEQ LDA AND BNE LDA CMP BNE ZONECNT #4 CLIFF FRMCNT #$E CLIFF EGGO,X #4 DECEGG LDA STA

LDA CMP BCC STA DECEGG DEC BNE LDA CMP LDA AND BCS CMP BCS ADC STA LDA AND ORA STA AND STA LDA STA STX LDA LSR LSR TAY LDX BEQ LDA CMP BMI LDA TAX LDY LDA LDY AND BEQ

#EGGHTCH SCNTRLI0 DECEGG SCNTRLI0 EGGO,X CLIFF GAMETYPE #2 ZONECNT #3 SKIPINC #3 SKIPINC #1 TEMP1 TYPE,X #$F0 TEMP1 TYPE,X #$F SPEED,X XPOS+2,X TEMP1 TEMP0 YPOSINT+2,X A A CCHKNUMS,Y CLF10 TEMP1 #80 CLF7 WCLFWRAP,X CFIGINDX CLIFIGS,Y TEMP0 CNUMASKS,X FLY162 TEMP1 RIGHTSM1,X MORECOMP FLY20 LEFTSM4,X FLY19 ASPEED,Y #$4 FLY18 YPOSINT+2,Y #4 FLY162

SKIPINC

;ENEMY TYPE

CLIFF

CLF7

FLY16

LDA CMP BCC JMP MORECOMP CMP BCC LDA AND BNE LDA CMP BCC

SBC SBC BMI LDA STA LDX DEC RTS FLY18 LDA SBC BMI BEQ CMP BPL CLC ADC STA FLY162 CLF10 LDA LDY CMP BPL LDX BNE FLY19 CMP BCC LDA CMP BMI LDA SEC SBC STA UPY LDA AND CMP BEQ LDA ASL ASL LDA ORA BCS ORA STA RTS RTS

#4 TOPSM15,X FLY162 #4 ASPEED,Y TEMP0 YPOSINT+2,X

;CARRY IS SET

;QUICKER IN X

BOTSP1,X YPOSINT+2,Y FLY162 FLY162 #5 FLY162 YPOSINT+2,Y YPOSINT+2,Y

;CARRY IS SET

CFIGINDX TEMP0 #2 FLY16 #1 FLY16 LEFTSM7,X FLY22 YPOSINT+2,Y TOPSM11,X FLY22 LEFTSM7,X #1 XPOS+2,Y TYPE,Y #$0C #4 EGGDROP SPEED,Y A A ASPEED,Y #$01 COMUPPY #$4 ASPEED,Y

COMUPPY FLY22 FLY20

CMP BCS LDA CMP BMI CMP BPL LDA STA BNE EGGDROP LDA EOR STA RTS

RIGHTSP1,X FLY22 YPOSINT+2,Y TOPSM11,X FLY22 BOTSP1,X FLY22 RIGHTSP1,X XPOS+2,Y UPY SPEED,Y #$4 SPEED,Y

;SHOULD NOT BE ZERO

;NOTE THERE IS NO MORE CHECK FOR EXPLOSION IN LAVA SINCE THE ENEMIES SHOULD ;NEVER BE ABLE TO GET THERE

PTERRY SETBTLP LDY LDA SEC SBC CMP BCC CMP BCS DEY BPL BMI LDA ORA STA NOSET LDY LDA AND CMP BCC BEQ DEY ONLY2D DEY DEY BMI BPL PTERY010 CMP BCC INY ONLY2I INY INY BPL XPOS+2,X SPEED,X #6 #4 PTERY010 ONLY2D MOVE TERRY #1 YPOSINT+2,X YPOSINT,Y #2 SETBIT #-2 SETBIT SETBTLP NOSET SPEED,X #2 SPEED,X

SETBIT

+/- ONE PIXEL BASED ON SPEED DIRECTION

PTERY040 PTERY050 #2 ONLY2I

PTERY050

PTERY040 DEC DEC LDA CMP BNE LDA STA RTS PTERY050 STY LDA AND STA LDA AND ORA STA RTS PTERY055 LDA STA RTS

ENEMA TERYCNT ENEMA TERYCNT PTERY055 #0 TYPE,X XPOS+2,X FRMCNT #$10 TEMP0 TYPE,X #$8F TEMP0 TYPE,X

HAVE WRAP AROUND IF ONLY TERRIES OUT HAVE THIS TERRY VANISH, ELSE DO WRAP

XPOS AND YPOS ????????????? STORE NEW X POSSITION AND SET WING POSSITION

#TERYFLAG TYPE,X

SKIPMSK SKIPDIR UPSPEED DWNSPD XSPEED XSPEED1 XSPEED2 XSPEED3 XSPEED4 XSPEED5 XSPEED6 XSPEED7 YSPEED0 SPEED1 SPEED2 SPEED3 SPEED4 SPEED5 SPEED6 SPEED7 UB LB REVZONE

DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB

0,$FE,$1E,$6 0,$FE,$7E,$3E $04,$05,$06,$07,$04,$04,$04,$04 0,1,$02,$03,0,0,0,0 01,01,01,02,-1,-1,-1,-2 01,01,02,02,-1,-1,-2,-2 01,02,01,02,-1,-2,-1,-2 01,01,01,02,-1,-1,-1,-2 01,01,02,02,-1,-1,-2,-2 01,01,01,02,-1,-1,-1,-2 01,02,01,02,-1,-2,-1,-2 01,01,02,02,-1,-1,-2,-2 01,01,01,01,-1,-1,-1,-1 00,00,00,01,00,00,00,-1 00,01,01,01,00,-1,-1,-1 00,00,01,01,00,00,-1,-1 01,01,00,01,-1,-1,00,-1 00,00,01,01,00,00,-1,-1 00,01,01,01,00,-1,-1,-1 00,00,00,01,00,00,00,-1 LOWER+4,UPPER+4,0 LAVAM11-1,LOWER-21,UPPER-21 2,1,0 SPEED0 POSITIVE-DOWN

SPEED4

NEGATIVE-UP

******************************************************************************** EXPLH LDA STA #EXP0SNUM PDTHSNUM,X START PLAYER X EXLODING

LDA STA LDA STA STY LDA LDY BIT BMI SED CLC ADC STA TYA ADC STA BCC LDA LSR BCC INC LDA STA SEC LDA ADC STA CLD LDY JMP LDA ORA STA LDA STA LDA STA LDY LDA SEC LDY SBC BPL INY INY BNE DEY DEY LDA STA TYA AND

#PDETHSTM PDETHTIM,X #PDEATH STAT2,X ZONECNT #$50 #0 ATTRACT KGOEXIT ;ZONECNT IS USED AS A TEMP HERE

IF AUTOPLAY FORGET SCORING

LOWSCORE,X LOWSCORE,X MIDSCORE,X MIDSCORE,X CLRD HISCORE,X A ANOINK LIVES,X #EXTRAMAN SCNTRLI0,X HISCORE,X #0 HISCORE,X ZONECNT EXPL020 TYPE-2,X #4 TYPE-2,X #$20 EGGO-2,X #0 SPEED-2,X TEMP2 XPOS,Y XPOS,X XPOS,X DECXP STXP #4 SPEED-2,X #$7F START ENEMY EXPLODING

ANOINK

CLRD KGOEXIT EXPLE

DECXP

STXP

STA EXPL020 TXA AND TAX LDA CMP BCC STA RTS

XPOS,X #$1 #XPLSOUND SCNTRLI0,X RETEXPL SCNTRLI0,X

RETEXPL

******************************************************************************** ******************************************************************************** TCOLIDE SEC LDA SBC CMP BCC CMP BCC TCOLI030 STA SEC LDA SBC CMP BCC CMP BCS TCOLI010 RTS TCOLI020 STA LDA CMP BCC CMP BCS CMP BCC CMP BCC TCOLI050 JMP TCOLI070 LDA BMI LDA BMI TCOLI080 JMP TCOLI090 LDA BMI TCOLI100 LDA CMP YPOSINT,X YPOSINT,Y #9 TCOLI030 #-9 TCOLI010 TEMP0 TERRY COLLISION DETECTOR... XPOS,X XPOS,Y #16 TCOLI020 #-7 TCOLI020 TEMP1 TEMP0 #2 TCOLI070 #-1 TCOLI070 #9 TCOLI050 #-9 TCOLI010 EXPLH TEMP1 TCOLI090 STATES,X TCOLI100 EXPLH STATES,X TCOLI080 #TIESOUND SCNTRLI0,X TERY LEFT OF PLAYER HORIZONTAL INTERSECT GOTO VERT CHECK PLAYER LEFT OF TERY

STORE FOR LATTER FACING CHECK GOTO CHECK FOR POSSIBLE PLAYER WIN

GOTO KILL PLAYER

KILL THIS PLAYER QUICKLY! PLAY MAY KILL TERRY IF FACING CORRECT

GOTO KILL TERRY ELSE KILL PLAYER FAST KILL PLAYER KILL THIS TERRY !!

BCC STA NOEXPL DEC DEC LDA STA LDY JMP

NOEXPL SCNTRLI0,X TERYCNT ENEMA #0 TYPE-2,Y #$10 ADDSCORE

BONK LDA AND CMP BEQ AND BEQ AND BEQ JMP NOPUNT STX STY LDA SEC SBC STA CMP BCC CMP BCC XCHECK LDA SEC SBC CMP BCC CMP BCS CMP BPL CMP BCC CMP BCS BCC CMP BCC CMP BCS LDA BNE JMP PUNT RTS TEMP2 TEMP3 YPOSINT,X YPOSINT,Y PTR4H #11 XCHECK #-10 PUNT XPOS,X XPOS,Y #8 VCHECK #-8 VCHECK #0 C113120 #-126 PUNT #-124 PUNT VCHECK #124 PUNT #126 PUNT PTR4H NOBOINK BOINK ;TIE TYPE-2,Y #$F #$C TCOLIDE #7 PUNT #4 NOPUNT OMELETTE

IF TERRY GOTO TERRY COLLISION CHECKER

C113120

VCHECK

NOBOINK BMI YWIN JSR CPY BEQ LDA LSR BCS LDA AND STA RTS XWIN EXPLH #1 CONFRONT GAMETYPE A NOSURV GLADRAG #$BF GLADRAG #1 YVELINT+1 NOBNC1 #$FF YVELINT+1 GLADRAG NOBONE #$7F GLADRAG #$50 #0 ADDSCORE GLADRAG #$BF GLADRAG #$20 #0 ADDSCORE ;CLEAR FLAG FOR TEAM WAVE KILL PLAYER 0

;CLEAR FLAG FOR SURVIVAL WAVE

NOSURV

CONFRONT LDX LDA BMI LDA STA NOBNC1 BIT BPL AND STA LDY LDA JMP LDA AND STA LDY LDA JMP RTS LDA BMI LDA STA CPY BNE LDX LDA BPL AND STA LDA LDY JSR LDX JMP LDA

NOBONE

; XWIN

YVELINT,X NOBNC2 #$FF YVELINT,X #1 XWIN010 TEMP2 GLADRAG BONO #$7F GLADRAG #0 #$50 ADDSCORE TEMP3 EXPLH GLADRAG IF PLAYER 0 KILLED PLAYER 1 AWARD 2000

NOBNC2 ;

BONO

;CLEAR FLAG FOR TEAM WAVE

AND STA LDA LDY JSR LDX JMP XWIN010 LDA AND TAX LDA LDY LDX JSR LDX JMP RTS STX STY SEC LDA SBC CMP BCC CMP BCC LDA SEC SBC CMP BCC CMP BCC LDA STA LDX LDA CMP BCC STA DEC LDA BMI DEC LDY LDA LDX TAY TXA LDX JSR

#$BF GLADRAG #0 #$20 ADDSCORE TEMP3 EXPLH TYPE-2,Y #3 ENSCRLOW,X ENSCRMID,X TEMP2 ADDSCORE TEMP3 EXPLE AWARD ENEMY VALUE TO WHATEVER PLAYER KILLED IT

; OMELETTE

TEMP2 TEMP3 YPOSINT,X YPOSINT,Y #2 EXCHEK #-9 MOO XPOS,X XPOS,Y #6 SKEGGS #-6 MOO #0 TYPE-2,Y TEMP2 #EATEGG SCNTRLI0,X DECENMA SCNTRLI0,X ENEMA DEPNUM NOFUN DEPNUM EGGSCORE,X EGMID,Y EGLO,Y TEMP2 ADDSCORE

POSLIM NEGLIM EXCHEK

SKEGGS

DECENMA

NOFUN

MOO EGLO ENSCRLOW ENSCRMID EGMID BOINK

LDX LDY INY CPY BCS STY RTS DB DB DB DB LDA SEC SBC BMI CMP BCS LDA CLC ADC CMP BCC LDA STA LDA SEC SBC BPL LDA STA JMP CMP BCC LDA CLC ADC CMP BCC LDA STA LDA SEC SBC BPL LDA STA LDY LDA STA LDA EOR STA LDX

TEMP2 EGGSCORE,X #4 MOO EGGSCORE,X

;IS THIS NEEDED???

$50,$00,$50 0,0,$50 0,5,7,$15 $02,$05,$07,$10 XPOS,X XPOS,Y DECX #117 DXCX XPOS,X #1 #RMSTCPXL STBX #LMOSTPXL XPOS,X XPOS,Y #1 STBY #RMSTSPXL XPOS,Y DELTAV #-123 INCX XPOS,Y #1 #RMSTCPXL STBY1 #LMOSTPXL XPOS,Y XPOS,X #1 STBX1 #RMSTSPXL XPOS,X

;NEEDS FOLLOWING ZERO ;NEEDS FOLLOWING ZERO

INCX

STBX

STBY DECX DXCX

STBY1

STBX1 DELTAV

;HEAD ON HEAD TIE, CHANGE VELOC, ETC STAT2,X REVERSO,Y STAT2,X STATES,X #$80 STATES,X TEMP3

CPX BNE LDY LDA STA LDA EOR STA JMP DV010 LDA AND TAY LDA STA TXA AND TAX LDA CMP BCC STA RTS

#1 DV010 STAT2,X REVERSO,Y STAT2,X STATES,X #$80 STATES,X DV020 SPEED-2,X #7 EREVERSE,Y SPEED-2,X #1 #TIESOUND SCNTRLI0,X RETBNK SCNTRLI0,X 5,6,7,8,9,0,1,2,3,4 4,5,6,7,0,1,2,3

DV020

RETBNK

REVERSO DB EREVERSE DB * ROT RACKLO

THIS IS A VECTOR OF COLORS TO ROTATE THRU FOR THE TITLE PAGE ????? DB DB DB DB DB DB DB $40,$52,$64,$76,$88,$9A,$AC,$0E,$28 L(RACK0ENM),L(RACK1ENM),L(RACK2ENM),L(RACK3ENM),L(RACK4ENM) L(RACK5ENM),L(RACK6ENM),L(RACK7ENM),L(RACK8ENM),L(RACK9ENM) L(RACK10EN),L(RACK11EN),L(RACK12EN),L(RACK13EN),L(RACK14EN) L(RACK15EN),L(RACK16EN),L(RACK17EN),L(RACK18EN),L(RACK19EN) L(RACK20EN),L(RACK21EN),L(RACK22EN),L(RACK23EN),L(RACK24EN) L(RACK25EN),L(RACK26EN)

******************************************************************************** RACK7ENM RACK3ENM DB 4,4,4,4,4,4 RACK15EN RACK19EN RACK11EN DB 5,5,5,5,5,5 RACK0ENM RACK1ENM RACK4ENM ;PLUS A TERRY RACK2ENM DB 1 RACK10EN RACK5ENM DB 1 RACK8ENM ;PLUS A TERRY RACK9ENM RACK6ENM RACK12EN DB 1,2,2,2,3 RACK14EN ;PLUS A TERRY RACK13EN DB 1

RACK16EN RACK18EN RACK17EN RACK20EN RACK22EN RACK24EN RACK25EN RACK26EN RACK21EN RACK23EN

DB DB

2 ;PLUS A TERRY 2 ;PLUS A TERRY ;PLUS A TERRY

DB DB

3,3,3,3,3,3 6,6,6,6,6,6 2,3,4,6,$83,4,4,6,$83,4,5,6,5,5,$84,6,5,5,$85,6,6,6,$85,6,6,6 $85 $FD40

ENEMATBL DB DB ENDF * * * * * ORG

CCHKNUMS IS A VECTOR OF CLIFF NUMBERS. THERE IS ONE ENTRY FOR EVERY FOUR LINES. THESE ARE LEFTS CLIFF NUMBERS. IF THE STAMP IS ON THE RIGHT OF THE SCREEN THE CLIFF NUMBER MUST BE WRAPED AROUND USING THE VECTOR WCLFWRAP. 5,5,5,5,5,5,5,5,6,6 6,6,6,2,2,2,2,2,2,2 2,2,3,3,3,3,3,0,0,0 0,0,0,0,0,0,0,0,0,0 0,1,4,3,2,7,6,5

CCHKNUMS DB DB DB DB CLIFWRAP WCLFWRAP DB * * *RIGHTS *LEFTS *TOPS *BOTS * *RIGHTSM2 RIGHTSM1 RIGHTSP1 LEFTSM4 LEFTSM7 TOPSM9 TOPSM11 TOPSM15 BOTSP1 LAVA LAVAM11 * * * CLIFIGS

THESE VECTORS CONTAIN THE BOUNDRY PIXELS OF THE CLIFFS THE REGULAR VALUES ARE NEVER USED ONLY THE ONES WITH +'S AND -'S DB DB DB DB 096,148,032,080,148,024,084,148 032,001,001,048,096,001,044,104 156,156,084,104,084,028,048,028 191,159,087,107,087,031,051,031

THESE VECTORS CONTAIN CLIFF BOUNDIES +/- (P/M) A CONSTANT DB DB DB DB DB DB DB DB DB EQU EQU 094,146,030,078,146,022,082,146 095,147,031,079,147,023,083,147 097,129,033,081,129,025,085,129 028,000,000,044,092,000,040,100 025,000,000,041,089,000,037,097 147 ;,147,075,095,075,019,039,019 145,145,073,093,073,017,037,017 141,141,069,089,069,013,033,013 192,160,088,108,088,032,052,032 158 147

CLIFIGS IS A VECTOR OF CLIF CONFIGURATIONS. THE CURRENT ONE IS INDEXED BY CFIGINDX IN RAM. BITS ARE SET IDICATING WHICH CLIFFS ARE IN THE CURRENT CONFIGURATION. MAPPED AS 76543210 DB DB DB DB $FF,$B7,$B5,$FD $BD,$1D,$15,$FD $5D,$55,$15,$FD $F5,$B5,$15

* * *

CNUMASKS IS A VECTOR OF MASKS FOR EACH CLIFF NUMBER. THESE ARE USED WITH THE CONFIGURATIONS ABOVE TO DETERMINE IF A GIVEN CLIFF IS IN A PARTICULAR RACK. $01,$02,$04,$08,$10,$20,$40,$80

CNUMASKS DB * * TITIMES * * ACCELS

THIS VECTOR IS THE NUMBER OF FRAME COUNT WRAPS FOR INITIALIZES THE TERRY TIMES DB 3,4,5,9,11

ACCELS IS A VECTOR CONTAINING THE GRAVITATIONAL AND RESULTANT UPWARD ACCELERATIONS. THE UNITS ARE RASTERS PER FRAME SQUARED DB DB DB DB $0B $0 $C0 $FF ;GRAVITY ACCEL FRACTION ;GRAVITY ACCEL INTEGER ;UP ACCEL FRACTION ;UP ACCEL INTEGER

THE NEXT TWO VECTORS ARE THE HORIZONT SPEEDS CHANGE 1 LEFT OR RIGHT 1,2,3,4,4,0,5,6,7,8 5,0,1,2,3,6,7,8,9,9

SPEDCNGR DB SPEDCNGL DB *

THESE VECTORS CONTAIN X SPEED CHANGED AND INVERTED IF MOVING L/R 6,6,6,7,7,5,6,7,8,9 0,1,2,3,4,1,1,1,2,2

SPCNGIFR DB SPCNGIFL DB * SPEEDEC * * NFSTAT2 * DELTAX * C1XPOS *

THIS VECTOR CONTAINS X SPEED SLOWED BY ONE DB 0,0,1,2,3,5,5,6,7,8

THESE NUMBERS ARE NEW FLYING SPEEDS INDEXED BY SPEED AND ONE BIT FOR STICK LEFT/RIGHT DB DB $01,$06,$02,$00,$04,$01,$04,$02,$04,$02 $01,$06,$05,$07,$06,$09,$07,$09,$07,$09

THESE ARE THE DELTA X NUMBERS FOR ALL SPEEDS BY MOD 4 FRAME COUNT DB DB 0,0,0,0,1,0,0,0,1,0,1,0,1,1,1,0,1,1,1,1 0,0,0,0,-1,0,0,0,-1,0,-1,0,-1,-1,-1,0,-1,-1,-1,-1

THESE ARE THE STARTING X POSSITIONS FOR CLIFF ONE BIRTHS DB 40,82

THIS VECTOR CONTAINS THE INITIAL WALK STATES BASED ON SPEED AND FACING $70,$F0,$70,$70,$70,$70,$70,$70,$70,$70 $70,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0

IWLKSTAT DB DB *

THIS VECTOR CONTAINS THE INITIAL WALK GENERALS BASED ON CLIFF NUMBER $8C,$9C,$AC,$BC,$CC,$DC,$EC,$FC

*IWLKGENS DB *

THIS VECTOR CONTAINS THE RESULTANT INTEGER VELOCITIES

TERMVELS DB DB * *

0,1,2,2,2,2,2,2 -3,-3,-3,-3,-3,-3,-2,-1

THIS VECTOR CONTAINS THE CLIFF BOTTOM BOUNCE VELOCITIES INDEXED BY OLD YVELINT AND #$0F 0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0 $FFF2 DOBANKD NOSEL $FFFC L(FBANK),H(FBANK) $D000 ; INTERRUPT RESET VECTOR

CLFBVELS DB ENDFF GOBANKD DOBANKF ORG JMP JMP ORG DB ORG NOP NOP NOP SEI CLD LDX TXS LDA STA DEX BNE LDA STA LDA STA JSR LDA STA JMP ***********

START

#$FF #0 WSYNC,X INITRAM #$C0 ATTRACT #1 GAMETYPE GMINIT #29 LINECNT NEWFRAME

INITRAM

;POSITION PLAYERS FOR BITMAP BITMAP STA WSYNC BITMAPPL LDA #3 STA VDELP1 STA NUSIZ0 STA NUSIZ1 LDA #0 STA GRP0 STA GRP1 STA GRP0 LDX #$40 STX HMP0 LDA #$50 STA HMP1 NOP NOP NOP

;2 ;5 ;8 ;11 ;13 ;16 ;19 ;22 ;24 ;27 ;29 ;32 ;34 ;36 ;38

MINBIT

BITLP

STA STA STY LDA STA LDA TAX STA STA LDA STA LDA STA LDA STA LDA TAY LDA DEC STA STX STY STA LDY LDA STA LDA TAX TYA NOP BPL LDA STA STA STA RTS BIT BVC JMP

RESP0 RESP1 TEMP0 (PTR0),Y GRP0 (PTR4),Y WSYNC HMOVE (PTR1),Y GRP1 (PTR2),Y GRP0 (PTR3),Y PREVIOUS (PTR5),Y PREVIOUS TEMP0 GRP1 GRP0 GRP1 GRP0 TEMP0 (PTR0),Y GRP0 (PTR4),Y

BITLP #0 GRP0 GRP1 GRP0

;41 ;44 ;47 ;52 ;55 ;60 ;62 ;65 ;3 ;8 ;11 ;16 ;19 ;24 ;27 ;32 ;34 ;37 ;42 ;45 ;48 ;51 ;54 ;57 ;62 ;65 ;70 ;72 ;74 ;76 ;2 (3) ;4 ;7 ;10 ;13 ;19

DLOAD ATTRACT DOLOAD BWLOOP #4 LDYINDX #7 SNDINDX0,X STVOL TEMP1 SNDINDX0,X #3 TEMP0 SNDINDX0,X A A TEMP1 #EGGHTCH ;PLEASE DON'T LET THESE START A PAGE!!

VOL4 VOL7 LDYINDX

LDA BNE LDA LDY BPL

MAJKLDG STY LDA AND STA LDA LSR LSR TAY LDA CMP

NOEGGH

BNE LDY LDA LDY BPL

NOEGGH TEMP0 (PTR0),Y TEMP0 STVOL

DOLOAD SNDRIVER BIT BMI DOSND LDA STA STA LDX SOUNDLP LDA CMP BCC STA TAY LDA STA LDA STA LDA STA SNDSKP10 LDY BEQ CPY BEQ CPY BEQ LDA STA CPY BEQ CPY BEQ CPY BEQ CPY BEQ LDA STA CPY BEQ CPY BEQ CPY SNDTYP0,X NULL #STPSKDSN NULL #STPSHLDS NULL LFTABL-1,Y PTR1 #SHLDSND VOL4 #VBRTHSND VOL4 #SKDSOUND VOL7 #SCREETCH VOL7 LVTABL-1,Y PTR0 #TIESOUND MAJKLDG #EXTRAMAN MAJKLDG #EGGHTCH SCNTRLI0,X SNDTYP0,X SNDSKP10 SNDTYP0,X DUR-1,Y SNDTIM0,X SCNTRLS-1,Y AUDC0,X LENGTH-1,Y SNDINDX0,X IF SOUND CONTROL >= CURRENT SOUND THEN INITIATE SOUND OF SOUND CONTROL ELSE DO CURRENT SOUND #H(SOUNDS) PTR0H PTR1H #1 ATTRACT SNDEXIT

BEQ LDY LDA STA LDA STA DEC BPL DEC BMI LDY LDA STA BPL ENDSND LDA BEQ NULL LDA STA SNDSKP29 STA SNDSKP30 DEX BPL SNDEXIT

MAJKLDG SNDINDX0,X (PTR0),Y AUDV0,X (PTR1),Y AUDF0,X SNDTIM0,X SNDSKP30 SNDINDX0,X ENDSND SNDTYP0,X DUR-1,Y SNDTIM0,X SNDSKP30 #0 SNDSKP29 #0 AUDV0,X SNDTYP0,X SOUNDLP

STVOL

;ZONE CROSSING CODE ;TTHIS SETS BITS IN ENEMY SPEED BYTE FOR POSSIBILITY OF UP OR DOWN ;ZONE CROSSING. BIT 7 IS UP, BIT 6 IS DOWN. OBJECTS IN THE TOP ZONE ;WILL HAVE THEIR UP BITS ALWAYS ON, OBJECTS IN THE BOTTOM ZONE WILL HAVE THEIR ;DOWN BITS ALWAYS ON ;THIS ROUTINE NEEDS NINE BYTES OF TEMPS, CONTIGUOUS IF POSSIBLE. THIS SHOULD ;NOT BE A PROBLEM ;THE TEMPS ARE ;TOPCNT, MIDCNT, BOTCNT ;TOPDEX, MIDDEX, BOTDEX CROSS BIT BPL LDA STA STA STA FILLP LDX LDA AND BEQ LDA CMP BCC CMP BCS DEPNUM JDONE #0 TOPCNT MIDCNT BOTCNT #5 TYPE,X #$0F NOPE1 YPOSINT+2,X #UPPER+4 DOTOP #LOWER+4 DOLOW ;DONT RUN THIS UNTIL ALL ENEMIES ARE ;OUT (1 BYTE EACH) (2 BYTES EACH)

;OTHERWISE IN MIDDLE LDY STX INC BNE DOTOP LDY STX INC BNE LDY STX INC LDA AND STA DEX BPL LDA CMP BNE CMP BNE CMP BEQ DOREST LDX BEQ CPX BEQ LDA CMP BEQ BNE SPECIAL LDX LDA ORA SPECFLO STA SPECIAL2 LDX LDA ORA STA JDONE JMP DOTOP2 LDA BNE LDA CMP BEQ MIDCNT DOMID BOTCNT #2 SPECIAL2 MIDDEX SPEED,X #$40 SPEED,X TOPDEX SPEED,X #$40 SPEED,X DONE ;1-1-1 CASE ALL GO DOWN TOPCNT DOMID #2 DOTOP2 MIDCNT #2 DOMID SETDN MIDCNT MIDDEX,Y MIDCNT NOPE TOPCNT TOPDEX,Y TOPCNT NOPE BOTCNT BOTDEX,Y BOTCNT SPEED,X #$3F SPEED,X FILLP #1 TOPCNT DOREST MIDCNT DOREST BOTCNT SPECIAL

DOLOW

NOPE NOPE1

SETDN LDX LDA ORA STA DOMID LDX BEQ CPX BEQ LDA LDX CMP BEQ LDA ORA STA LDA CMP BEQ LDA ORA BNE LDX LDA BNE LDA ORA STA LDX LDA ORA STA LDA BNE LDX LDA ORA STA LDX LDA ORA STA MIDCNT DOBOT #2 DOMID2 TOPCNT MIDDEX #2 CHK1BOT SPEED,X #$80 SPEED,X BOTCNT #2 DOBOT SPEED,X #$40 DOBOTM MIDDEX TOPCNT CHK2BOT SPEED,X #$80 SPEED,X MIDDEX+1 SPEED,X #$80 SPEED,X BOTCNT DOBOT MIDDEX SPEED,X #$40 SPEED,X MIDDEX+1 SPEED,X #$40 SPEED,X ;SHOULD BE ZEROTH ONE TOPDEX SPEED,X #$40 SPEED,X

CHK1BOT

DOMID2

CHK2BOT

DOBOTM DOBOT

LDY BEQ CPY BEQ DEY LDA CMP BEQ

BOTCNT DONE #2 DOBOT2 ;Y NOW IS 0 MIDCNT #2 DONE

BNE DOBOT2 LDA BNE LDY LDA BEQ DEY SETUP SETUPLP LDX LDA ORA STA DEY BPL LDA AND STA LDA STA STA STA STA STA STA STA STA LDA LSR BCC PLDLP LDX LDA CMP BEQ LDA CMP BCS INC TXA BEQ STA BNE STA DEX BPL BMI LDY LDA AND BEQ

SETUP MIDCNT DONE #1 TOPCNT SETUP

BOTDEX,Y SPEED,X #$80 SPEED,X SETUPLP SWCHB #8 TEMP3 #0 P0VTBL P1VTBL P0VTBL+1 P1VTBL+1 P0VTBL+2 P1VTBL+2 P0CNT P1CNT FRMCNT A ELOAD #1 STAT2,X #PGONE ANOTHX XPOS,X #$7A ANOTHX P0CNT,X PLAY0 P1VTBL ANOTHX P0VTBL PLDLP RESTLOAD #7 TYPE-2,Y #$0F LABEL

DONE

PLAY0 ANOTHX

ELOAD LOOP

LDA CMP BCS LDA CMP LDX BCC DEX CMP BCC DEX STUFFIT TXA LSR BCS LDA BNE STY INC BNE

XPOS,Y #$7A LABEL YPOSINT,Y #UPPER #2 STUFFIT #LOWER STUFFIT

USE0

A BRADKLDG P0VTBL,X USE1 P0VTBL,X P0CNT LABEL P1VTBL,X USE0 P1VTBL,X P1CNT #1 LOOP #L(P0VTBL) PTR0 ;Y GOES FROM 1 TO 0 PTR0H #L(P1VTBL) PTR1 SQUISH P0CNT DOP0 P0HPOS P0VTBL P0VOFF DONEP0 P0CNT #0 ZONECNT PREVIOUS #0 INFP0,Y P0VTBL,Y PICKSTP

BRADKLDG LDA BNE USE1 LABEL STY INC DEY CPY BNE LDA STA DEY STY LDA STA JMP RESTLOAD LDY BNE STY DEY STY STY JMP DOP0 DEY STY LDA STA

P0LOADLP STY LDA STA LDX JSR

;THIS IS INDEX OF HIGHEST ONE

STA LDY LDA LDY STA CPX BCS LDA CMP BEQ CMP BNE DOCHEK LDA AND BEQ LDA BNE LDA AND BEQ CMP BEQ LDA STA LDY BNE LDY BNE LDA AND TAY INY TYA CLC ADC TAY LDA LDY STA LDA AND LSR LSR LSR LSR ORA STA LDA LSR LSR TAX

STAMP0,Y XPOS,X HTABLE,Y PREVIOUS P0HPOS,Y #2 ENMYCOL STAT2,X #BIRTH1ST DOCHEK #SHIELD USEYCOL FRMCNT #8 USEYCOL #$0E FORCE0 TYPE-2,X #$0C DOENM #4 ANEGG #$80 INFP0,Y #6 USEYCOL #5 USEYCOL TYPE-2,X #$03

ENMYCOL

;OTHERWISE, A TERRY

ANEGG DOENM

USEYCOL

TEMP3 COLORTAB,Y PREVIOUS COLOR0,Y STATES,X #$80 A A A A INFP0,Y INFP0,Y YPOSINT,X A A

FORCE0

INX CLC ADC PHA TXA SEC SBC STA PLA STA DEY BMI JMP DONEP0 LDY BNE STY DEY STY STY JMP DOP1 DEY STY LDA STA

#6

ZONECNT P0VTBL,Y ZONECNT DONEP0 P0LOADLP

P1CNT DOP1 P1HPOS P1VTBL P1VOFF DONEP1 P1CNT #0 ZONECNT PREVIOUS #0 INFP1,Y P1VTBL,Y PICKSTP STAMP1,Y XPOS,X HTABLE,Y PREVIOUS P1HPOS,Y #2 USETYPE1 STAT2,X #BIRTH1ST DOWHT #SHIELD USEYCOL1 FRMCNT #4 USEYCOL1 #$0E FORCE1 TYPE-2,X

P1LOADLP STY LDA STA LDX JSR STA LDY LDA LDY STA CPX BCS INY LDA CMP BEQ CMP BNE DOWHT LDA AND BEQ LDA BNE USETYPE1 LDA

;THIS IS INDEX OF HIGHEST ONE

AND BEQ CMP BEQ LDA STA LDY BNE ANEGG1 LDY BNE DOENM1 LDA AND TAY INY USEYCOL1 TYA CLC ADC TAY LDA FORCE1 LDY STA LDA AND LSR LSR LSR LSR ORA STA LDA LSR LSR TAX INX CLC ADC PHA TXA SEC SBC STA PLA STA DEY BMI JMP DONEP1 LDA STA LDX LDA STA LDX LDA

#$0C DOENM1 #4 ANEGG1 #$80 INFP1,Y #6 USEYCOL1 #5 USEYCOL1 TYPE-2,X #$03

;OTHERWISE, A TERRY

TEMP3 COLORTAB,Y PREVIOUS COLOR1,Y STATES,X #$80 A A A A INFP1,Y INFP1,Y YPOSINT,X A A

#6

ZONECNT P1VTBL,Y ZONECNT DONEP1 P1LOADLP

#40 ZONECNT P0CNT P0VTBL,X P0VOFF P1CNT P1VTBL,X

STA LDX LDA STA LDA STA STA LDA STA BWLOOP JKERN LENGTH LOWBYTE LDA BNE JMP DB DB DB DB DB DB DB DB DB DB DB DB DB DB

P1VOFF CFIGINDX MTINDX,X MPTR #H(RWALK0) PTR0H PTR1H #1 VDELP0 INTIM BWLOOP KERNAL 0,4,4,23,0,9,7,21,0,15,19,12,11,13,23 L(RWALK0),L(RWALK1),L(RWALK2),L(RWALK3),L(RSKID) L(RWINGUP),L(RWINGDWN),L(REXPL0),L(REXPL1),L(REXPL2) L(RTERYWUP),L(RTERYWDN),L(EGG) $D2,$95,$95,$95,$95,$95,$95 L(WALKFRQ) L(FLAPFRQ),L(BNCEFRQ) L(SKIDFRQ),L(NULL) L(EXPLFRQ),L(BRTHFRQ) L(SHLDFRQ),L(NULL) L(TIEDFRQ) L(SCRCHFRQ),L(VBRTHFRQ) L(EGGHHFRQ),L(EATEGFRQ) L(EXTRFRQ)

LIVES1 LFTABL

ENDSOUND SOUNDS EATEGFRQ DB TIEDFRQ DB BRTHFRQ DB EXPLFRQ DB DB SHLDFRQ DB DB VBRTHFRQ DB DB BNCEFRQ DB DB SCRCHFRQ DB DB EGGHHFRQ DB EGGHHVOL DB EXTRFRQ DB FLAPVOL DB $C,$D,$E,$F,$10,$11,$12,$13,$15,$17,$19,$1B,$1D,$1F $12,$11,$10,$0F $10,$1D,$00,$11,$1E,$00,$12 ;THESE TWO ARE CONNECTED $1F,$1E,$1D,$1B,$19,$17,$15,$13,$11 $F $0B,$0C,$0D,$0E,$0F,$10,$11,$12 $13 ;THESE TWO ARE CONNECTED $14,$15,$16,$17,$18,$19,$1A,$1B $1C,$1D,$1E,$1F $1F,$D,$C,$B ;THESE TWO ARE CONNECTED $A $F,$F,$F,$E,$E,$D,$C,$B,$A,$9,$8,$7,$6,$6,$6,$6,$6,$6 $6,$6 0,3,7,9 0,7,6,5 $16,$11,$E,$C 2,3,5,6

TIEDVOL EXPLVOL WALKFRQ WALKVOL SKIDFRQ FLAPFRQ BNCEVOL BRTHVOL

DB DB DB DB DB DB DB DB DB DB DB DB

3 2,4,6,8 1,2,3 4,5,6 7,8,9 ;THESE TWO ARE CONNECTED $19,$1B,$1C,$1A,$18,$1B,$17,$19,$1A,$19,$1C,$18 $1A,$17,$19,$1C,$1A,$17,$1B,$19,$18,$19,$1B $18,$18,$18,$18 ;THESE TWO ARE CONNECTED $18 6,6,6 ;THESE TWO ARE CONNECTED 6,6,0,6,6,0,6 6 2,3,4,4,5,5,6,7,8,9,$A,$A,$B,$B 2,4,6,7,9,$B $38,$6C,$6C,$7C,$54,$BA,$C6

EATEGVOL DB EXTRVOL DB TEDDY ENDLOAD ORG KERNAL STA LDA STA LDA STA BIT BVC NOP JMP DB

$D4F6 WSYNC #0 VBLANK #$E2 TIM64T ATTRACT STRTKERN TTLKERN ;2 ;5 ;17 ONLY FOR TITLE PAGE ;21 ;8 ;12/13 ;15

STRTKERN LDX LDA STA LDY LDA STA BPL LDY STY LDX LDA STA LDY LDA STA BPL LDY STY STA LDA STA LDA LDX STA P0CNT STAMP0,X PTR0 #0 INFP0,X REFP0 STNZ0 #5 NUSIZ0 P1CNT STAMP1,X PTR1 #0 INFP1,X REFP1 STNZ1 #5 NUSIZ1 WSYNC COLOR1,X COLUP1 P1HPOS,X P0CNT HMP1 ;16 ;20 ;23 ;32 ;36 ;39 ;41/42 ;43 ;46 ;49 ;53 ;56 ;58 ;62 ;65 ;67/68 ;69 ;72 ;75 ;4 ;7 ;11 ;14 ;17

STNZ0

STNZ1 ;RASTER 2

PS1

AND TAY DEY BPL STA STA DEC DEC LDA STA AND TAY DEY BPL STA STA STA LDA STA LDA STA LDA INY LDX STA BEQ DEC BNE STA

#$F PS1 RESP1 WSYNC P0VOFF ZONECNT P0HPOS,X HMP0 #$F PS0 RESP0 WSYNC HMOVE #5 CTRLPF COLOR0,X COLUP0 #HEIGHT P0VOFF HMCLR DOAP0 P1VOFF PP0PP1 P1VOFF PP0DP1 P0VOFF P1VOFF DDP P1VOFF DP0DP1 DP0PP1

;19 ;21 ;23 ;25/26 ;28---->68 ;71 ;5 ;10 ;14 ;17 ;19 ;21 ;23 ;25/26 ;28--->68 ;71 ;3 ;5 ;8 ;12 ;15 ;17 ;19 ;22 ;25 ;27/28 ;32 ;34/35 ;37 ;40 ;31 ;36 ;38/39 ;41 ;44 ;42

;RASTER 3

PS0

;RASTER 4

DOAP0

DDP

JMP STA DEC BNE STA JMP JMP

;POSITION BOTH ;RASTER1 PP0PP1 STA LDA STA LDX LDA STA LDA STA LDY LDA STA BPL LDY STNSIZ0 STY LDX LDA STA

WSYNC #PFCOLOR1 COLUPF P0CNT STAMP0,X PTR0 COLOR0,X COLUP0 #0 INFP0,X REFP0 STNSIZ0 #5 NUSIZ0 P1CNT STAMP1,X PTR1

;2 ;5 ;8 ;12 ;15 ;19 ;22 ;24 ;28 ;31 ;33/34 ;35 ;38 ;41 ;45 ;48

STNSIZ1 ;RASTER 2

LDA STA LDY LDA STA BPL LDY STY STA LDA STA DEC LDA STA AND TAY DEY BPL STA LDX STA LDA STA DEC LDA STA AND TAY DEY BPL STA LDX LDA STA STA STX LDX BNE JMP LDY BEQ DEC BNE STA STA

COLOR1,X COLUP1 #0 INFP1,X REFP1 STNSIZ1 #5 NUSIZ1 WSYNC #PFCOLOR2 COLUPF P0VOFF P1HPOS,X HMP1 #$F POS1 RESP1 P0CNT WSYNC #PFCOLOR3 COLUPF ZONECNT P0HPOS,X HMP0 #$F POS0 RESP0 #PFCOLOR4 #HEIGHT WSYNC HMOVE COLUPF ZONECNT NOEND ENDKERN P0VOFF GOINP0 P1VOFF POOPP1PF P1VOFF HMCLR PP0DP1PF P0VOFF P1VOFF DPFPP0 P1VOFF DP0DP1PF WASTE303

;52 ;55 ;57 ;61 ;64 ;66/67 ;68 ;71 ;74 ;2 ;5 ;10 ;14 ;17 ;19 ;21 ;23 ;25/26 ;28---->68 ;71 ;74 ;2 ;5 ;10 ;14 ;17 ;19 ;21 ;23 ;25/26 ;28--->68 ;70 ;72 ;75 ;3 ;6 ;9 ;11/12 ;15 ;17/18 ;22 ;24/25 ;27 ;30 ;21 ;26 ;28/29 ;31 ;34 ;32 ;27 (28 ON PAGE CROSS) ;32 ;34

POS1

;RASTER 3

POS0

;RASTER 4

NOEND

JMP STA DEC BNE STA JMP DPFPP0 JMP POOPP1PF NOP WASTE102 NOP NOP WASTE101 NOP GOINP0

;WASTE TIME HERE PP0PP1PF STA OHMY TXA LSR LDY LDA BEQ INC AND ARNDINC LDY BCC STA STY JMP PF1ST STY STA JMP AROUND STA NOP BEQ

HMCLR A MPTR PF,X AROUND MPTR MTABLE,Y #0 PF1ST PF2+$100 PF1 PP0PP1 PF2 PF1 PP0PP1 HMCLR ARNDINC

;37 ;39 ;41 ;44 ;48 ;50/51 ;55 ;59 ;61 ;63/64 ;66 ;69 ;72 ;67 ;70 ;73 ;

3 5 7 10 14 16/17 21 25 27 29/30 32 35 38 33 36 39

;DRAW PLAYER1 ;RASTER 1 PP0DP1 STA WSYNC LDA #PFCOLOR1 STA COLUPF LDA (PTR1),Y STA GRP1 LDX P0CNT LDA STAMP0,X STA PTR0 LDA COLOR0,X STA COLUP0 LDA INFP0,X STA REFP0 BPL STNS0 LDY #5 STNS0 STY NUSIZ0 INC PTR1 LDY #0 STY TEMP0 LDA (PTR1),Y LDY #PFCOLOR2 INC PTR1 LDX P0CNT STY COLUPF STA WSYNC ;RASTER 2 STA GRP1 LDY #0 DEC P0VOFF LDA P0HPOS,X STA HMP0 AND #$F TAX POS0A DEX BPL POS0A STA RESP0 ;3 CYCLES AVAILABLE HERE

;2 ;5 ;10 ;13 ;16 ;20 ;23 ;27 ;30 ;34 ;37 ;39/40 ;41 ;44 ;49 ;51 ;54 ;59 ;61 ;66 ;69 ;72 ;75

LDA STA ;RASTER 3 STA STA LDA STA INC DEC BNE LDA STA LDX DEX LDA STA TXA BPL STX INX STX LDA LDX DEC INC STA

#PFCOLOR3 WSYNC HMOVE COLUPF (PTR1),Y GRP1 PTR1 P1VOFF DONE31A #$40 TEMP0 P1CNT P1VTBL,X P1VOFF NO1A P1VOFF P1CNT (PTR1),Y #PFCOLOR4 ZONECNT PTR1 WSYNC GRP1 COLUPF ZONECNT FOOBAR ENDKERN #HEIGHT TEMP0 P0VOFF NXTP0 WASTCAS WASTE102 P0VOFF DODP0PP1 HMCLR DP0PP1PF DP0DP1PF ;3 ;6 ;11 ;14 ;19 ;24 ;26/27 ;28 ;31 ;34 ;36 ;40 ;43 ;45 ;47/48 ;50 ;52 ;55 ;60 ;62 ;67 ;72 ;75

NO1A DONE31A

;RASTER 4 STA STX LDX BNE JMP FOOBAR LDA BIT LDY BEQ BVC JMP NXTP0 STA BVC STA JMP DODP0PP1 NOP JMP WASTCAS NOP NOP NOP STA PP0DP1PF STA TXA LSR LDY LDA BEQ INC AND UNINC LDY BCC STA STY

;3 NOP'S THEN POS BOTH

HMCLR HMCLR A MPTR PF,X UNINCM MPTR MTABLE,Y #0 PF1OK PF2+$100 PF1

;3 ;5 ;7 ;10 ;14 ;16/17 ;21 ;25 ;27

JMP STY STA JMP UNINCM STA NOP BEQ ;DRAW BOTH CASE ;RASTER1 DP0DP1 STA LDA STA LDA STA LDA STA INC INC LDA STA LDA LDX INC INC STY STA PF1OK ;RASTER2 STA STX DEC DEC DEC BNE LDA STA LDX DEX LDA STA TXA BPL STX INX STX LDA STA LDA STA STA STA LDA STA INC INC LDA BNE

PP0DP1 PF2 PF1 PP0DP1 HMCLR UNINC WSYNC #PFCOLOR1 COLUPF (PTR0),Y GRP0 (PTR1),Y GRP1 PTR0 PTR1 (PTR0),Y GRP0 (PTR1),Y #PFCOLOR2 PTR0 PTR1 TEMP0 WSYNC

;20 ;22 ;25

;2 ;5 ;10 ;13 ;18 ;21 ;26 ;31 ;36 ;39 ;44 ;46 ;51 ;56 ;59 ;62

GRP1 COLUPF ZONECNT P1VOFF P0VOFF NOTEST #$80 TEMP0 P0CNT P0VTBL,X P0VOFF NO0 P0VOFF P0CNT (PTR0),Y GRP0 (PTR1),Y WSYNC HMOVE GRP1 #PFCOLOR3 COLUPF PTR0 PTR1 P1VOFF DONE3

NO0 NOTEST

;3 ;6 ;11 ;16 ;21 ;23/24 ;25 ;28 ;31 ;33 ;37 ;40 ;42 ;44/45 ;47 ;49 ;52 ;57 ;60 ;65 ;68 ;3 ;6 ;8 ;11 ;16 ;21 ;24 ;27/28

;RASTER3

NO1 DONE3

LDA ORA STA LDX DEX LDA STA TXA BPL STX INX STX LDA STA LDA LDX STA

TEMP0 #$40 TEMP0 P1CNT P1VTBL,X P1VOFF NO1 P1VOFF P1CNT (PTR0),Y GRP0 (PTR1),Y #PFCOLOR4 WSYNC

;29 ;31 ;34 ;37 ;39 ;43 ;46 ;48 ;50/51 ;53 ;55 ;58 ;63 ;66 ;71 ;73 ;76

;RASTER4 STA GRP1 STX COLUPF LDX ZONECNT BNE MORE JMP ENDKERN MORE INC PTR0 INC PTR1 BIT TEMP0 BMI GOTOP0 BVC WASTEDD NOP JMP DP0PP1PF GOTOP0 BVC DOPP0DP1 STA HMCLR+$100 JMP OHMY DOPP0DP1 JMP PP0DP1PF ;PADDING AS NEEDED WASTEDD NOP NOP DP0DP1PF STA HMCLR TXA LSR A LDY MPTR LDA PF,X BEQ NOINCMK INC MPTR AND MTABLE,Y NOINCM LDY #0 BCC PF1IN STA PF2+$100 STY PF1 JMP DP0DP1 PF1IN STY PF2 STA PF1 JMP DP0DP1 NOINCMK STA HMCLR NOP BEQ NOINCM ;3 ;6 ;9 ;11/12 ;14 ;17 ;22 ;25 ;27/28 ;29/30 ;25 ;30/31 ;34 ;37 ;27

;26 ;28 ;30 ;33 ;37 ;39/40 ;44 ;48 47 ON BRANCH ;50 ;52/53 ;55 ;58 ;61 ;56 ;59 ;62

;THIS TABLE IS HERE FOR PAGE BOUNDARY CROSSING PROTECTION

MTABLE

DB DB DB DB ;DRAW PLAYER0 ;RASTER 1 DP0PP1 STA LDA STA LDA STA STY LDX LDA STA LDA STA LDA STA BPL LDY STNS1 STY INC LDY LDA INC STY STA STY STA ;RASTER 2 LDA STA DEC LDA STA AND TAX POS1A DEX BPL STA LDA STA ;RASTER 3 LDX STX STA STY INC DEC BNE LDA STA LDX DEX LDA STA TXA BPL

$00,$00,$FF,$00 $FF,$FF,$FF,$FF $00,$FF,$00,$00 $FF,$FF,$00 WSYNC #PFCOLOR1 COLUPF (PTR0),Y GRP0 GRP1 P1CNT STAMP1,X PTR1 COLOR1,X COLUP1 INFP1,X REFP1 STNS1 #5 NUSIZ1 PTR0 #0 (PTR0),Y PTR0 TEMP0 GRP0 GRP1 WSYNC #PFCOLOR2 COLUPF P1VOFF P1HPOS,X HMP1 #$F POS1A RESP1 (PTR0),Y WSYNC #PFCOLOR3 COLUPF GRP0 GRP1 PTR0 P0VOFF DONE30A #$40 TEMP0 P0CNT P0VTBL,X P0VOFF NO0A

;2 ;5 ;10 ;13 ;16 ;19 ;23 ;26 ;30 ;33 ;37 ;40 ;42/43 ;44 ;47 ;52 ;54 ;59 ;64 ;67 ;70 ;73 ;76 ;2 ;5 ;10 ;14 ;17 ;19 ;21 ;23 ;25 ;28

;2 ;5 ;8 ;11 ;16 ;21 ;23/24 ;25 ;28 ;31 ;33 ;37 ;40 ;42 ;44/45

NO0A DONE30A

STX INX STX LDA LDX DEC INC STA STA

P0VOFF P0CNT (PTR0),Y #PFCOLOR4 ZONECNT PTR0 GRP0 WSYNC HMOVE GRP1 COLUPF ZONECNT ENDKERN #HEIGHT TEMP0 P1VOFF NXTP1 WASTE0 HMCLR WASTE101 P1VOFF DPP0DP1 PP0DP1PF DP0DP1PF HMCLR HMCLR A MPTR PF,X UNINCMX MPTR MTABLE,Y #0 PF10K PF2+$100 PF1 DP0PP1 PF2 PF1 DP0PP1 HMCLR UNINCX

;47 ;49 ;52 ;57 ;59 ;64 ;69 ;72 ;75 ;3 ;6 ;9 ;12 ;14/15 ;16 ;19 ;22 ;24/25 ;26/27 ;29 ;32 ;28 ;30/31 ;33 ;34

;RASTER 4 STA STY STX LDX BEQ LDA BIT LDY BEQ BVC STA JMP NXTP1 STA BVC JMP DPP0DP1 JMP WASTE0 NOP STA WASTE303 NOP DP0PP1PF STA TXA LSR LDY LDA BEQ INC AND UNINCX LDY BCC STA STY JMP PF10K STY STA JMP UNINCMX STA NOP BEQ SQUISH LDX SQUISHER LDY LDA BNE INY LDA BNE INY LDA #1 #0 (PTR0),Y TOPNOTB ;Y=1 (PTR0),Y TOPYMIDN (PTR0),Y ;Y=2 ;NOW TOP AND MIDDLE ARE BLANK

1 NOP'S THEN POS BOTH

;30 ;32 ;34 ;37 ;41 ;43/44 ;48 ;52 ;54 ;56/57 ;59 ;62 ;65 ;60 ;63 ;66 ;47

LDY STA BEQ TOPNOTB INY LDA BEQ BNE TOPYMIDN LDA DEY STA HALFWAY LDY LDA DEY STA LOOPER LDA STA DEX BPL JMP ENDKERN LDA STA STA STA STA STA LDA STA LDY LDA CMP BMI STX NOTHING LDA CMP BCC LDA STA LDA STA BCS NONTED SEC LDA AND BNE STY BEQ LSR STA STA STX STX STX DEX LDA

#0 (PTR0),Y LOOPER (PTR0),Y HALFWAY LOOPER (PTR0),Y (PTR0),Y #2 (PTR0),Y (PTR0),Y PTR1 PTR0 SQUISHER RESTLOAD #H(ZERO) PTR0H PTR1H PTR2H PTR3H PTR4H #$26 COLUPF #L(BLANK) CFIGINDX #2 NOTHING MPTR GAMETYPE #2 NONTED #H(TEDDY) PTR0H #L(TEDDY) PTR0 NEXT3 HISCORE #$F0 DOIT4 PTR0 NEXT3 A PTR0 WSYNC GRP0 GRP1 PTR5 MPTR

;Y=0 ;Y=1

;Y STILL = 1 ;Y = 0 ;Y = 2 ;Y = 1

;17 ;20 ;23 ;26 ;29 ;32 ;34 ;37 ;39 ;42 ;44 ;46/47 ;49 ;52 ;54 ;56/57 ;58 ;61 ;63 ;66 ;69 ;59 ;62 ;64 ;66/67 ;69 ;72 ;69 ;72 ;75 ;3 ;6 ;9 ;11 ;14

DOIT4 NEXT3

ST2ONLY

BEQ STX STX STY STY LDA AND BCC BNE STY BEQ ASL ASL ASL STA LDA AND BCC BNE STY BEQ LSR STA LDA AND STA BCC BNE STY NOP NOP BEQ NOP ASL ASL ASL STA LDA AND BCC BNE STY BEQ NOP LSR STA LDA STA STA LDA STA LDY LDA PHA LDA PHA LDA

ST2ONLY PF1 PF2 REFP0 REFP1 HISCORE #$0F DOIT3 DOIT3 PTR1 NEXT2 A A A PTR1 MIDSCORE #$F0 DOIT2 DOIT2 PTR2 NEXT1 A PTR2 MIDSCORE #$0F WSYNC DOIT1A DOIT1 PTR3 NEXT0 A A A PTR3 LOWSCORE #$F0 DOIT0A DOIT0 PTR4 NOMORE A PTR4 #$28 COLUP0 COLUP1 #H(ZERO) PTR5H #$6 #H(RETURN-1) #L(RETURN-1) #$1

;16/17 ;19 ;22 ;25 ;28 ;33 ;35 ;37/38 ;39/40 ;42 ;45 ;42 ;44 ;46 ;49 ;52 ;54 ;56/57 ;58/59 ;61 ;64 ;61 ;64 ;67 ;69 ;72 ;2/3 ;4/5 ;7 ;14 ;5 ;7 ;9 ;11 ;14 ;17 ;19 ;21/22 ;23/24 ;26 ;29 ;24 ;26 ;29 ;36 ;39 ;42 ;44 ;46 ;49 ;51 ;54 ;56

NOTED

SUCKER DOIT3

NEXT2

DOIT2 NEXT1

DOIT1A DOIT1

NEXT0

DOIT0A DOIT0 NOMORE

STA LDA NOP NOP NOP STX STA JMP RETURN LDA CMP LDY BCS SEC LDA AND BNE STY BEQ LSR STA LDA AND BCC BNE STY BEQ ASL ASL ASL STA LDA AND BCC BNE STA STY BEQ STA LSR STA LDA STA LDA AND BCC BNE STY BEQ ASL ASL ASL STA LDA AND BCC BNE STY BEQ

PF2 #$42

PF1 COLUPF BITMAPPL GAMETYPE #2 #L(BLANK) OEXT3 HISCORE+1 #$F0 OOIT4 PTR0 OEXT3 A PTR0 HISCORE+1 #$0F OOIT3 OOIT3 PTR1 OEXT2 A A A PTR1 MIDSCORE+1 #$F0 OOIT2 OOIT2 WSYNC PTR2 OEXT1 WSYNC A PTR2 #$FF PF2 MIDSCORE+1 #$0F OOIT1 OOIT1 PTR3 OEXT0 A A A PTR3 LOWSCORE+1 #$F0 OOIT0 OOIT0 PTR4 OOMORE

;59 ;61 ;63 ;65 ;67 ;70 ;73 ;76 ;22 ;24 ;26 ;28/29 ;30 ;33 ;35 ;37/38 ;40 ;43 ;40 ;43 ;46 ;48 ;50/51 ;52/53 ;55 ;58 ;55 ;57 ;59 ;62 ;65 ;67 ;69/70 ;71/72 ;74 ;3 ;6 ;75 ;2 ;5 ;8 ;11 ;14 ;16 ;18/19 ;20/21 ;23 ;26 ;23 ;25 ;27 ;30 ;33 ;35 ;37/38 ;39/40 ;42 ;45

OOIT4 OEXT3

OOIT3

OEXT2

OOIT2 OEXT1

OOIT1

OEXT0

OOIT0

LSR STA OOMORE LDY LDA STA STA LDA LSR BCC LDA STA DOBITMAP JSR LDA STA LDA STA LDX LDY STA STA STY LDA BPL TXA BPL CMP10 CMP BCC LDA AROO ASL ASL ASL STPR0 STA LDA LSR BCC LDA BPL DOBLNK TXA BPL CMP10A CMP BCC LDA ARF ASL ASL ASL STPR1 STA LDY LDX STX STX LDX STA LDA STA LDA STA STA STX LIFLUP LDA STA

A PTR4 #6 #$76 COLUP0 COLUP1 GAMETYPE A DOBITMAP #1 PF2 BITMAP #$70 HMP0 #$80 HMP1 #L(BLANK) #$FF WSYNC HMOVE PF2 LIVES CMP10 STPR0 #10 AROO #9 A A A PTR0 GAMETYPE A DOBLNK LIVES+1 CMP10A STPR1 #10 ARF #9 A A A PTR1 #6 #2 NUSIZ0 NUSIZ1 #$28 WSYNC #0 PF2 #H(ZERO) PTR0H WSYNC COLUP0 (PTR0),Y GRP0

;42 ;45 ;47 ;49 ;52 ;55 ;58 ;60 ;62/63 ;64 ;67 ;73 WORST CASE ;57 ;60 ;62 ;65 ;5 ;67 ;75 ;3 ;70 ;8 ;10/11 :12 ;15 ;13 ;15/16 ;17 ;19 ;21 ;23 ;26 ;34 ;36/37 ;29 ;31/32 ;38 ;41 ;39 ;41/42 ;43 ;45 ;47 ;49 ;52 ;54 ;56 ;59 ;62 ;64 ;70

;29 ;67 ;8 ;11

LDA STA LDA STA LDX STX LDA NOP NOP STX LDX STA STX STA LDX STX DEY STA BPL INY STY STY STY STA DEY STY STA INY STY STY JMP

LIVES1,Y GRP1 LIVES0,Y GRP0 #$26 COLUP1 (PTR1),Y COLUP0 #$76 GRP1 COLUP1 GRP0 #$28 COLUP0 WSYNC LIFLUP GRP0 GRP1 VDELP1 WSYNC PF2 WSYNC PF1 PF2 NEWFRAME

;15 ;18 ;22 ;25 ;27 ;30 ;35 ;37 ;42 ;44 ;47 ;50 ;53 ;55 ;58 ;60 ;63 ;2/3

; ; ; ;

* VISIBLE ====================================================================== TTLKERN LDA STA STA LDX STX STX STA STA STX STA STA LDX STX LDA STA STA LDA STA STA LDA CLC ADC #3 VDELP0 VDELP1 #0 GRP0 GRP1 RESP0+$100 RESP1 GRP0 NUSIZ0 NUSIZ1 #$40 HMP0 #$50 HMP1 WSYNC PLAYCOL COLUP0 COLUP1 #L(LOGO0) LINECNT ;23 ;26 ;29 ;31 ;34 ;37 ;41 ;44 ;47 ;50 ;53 ;55 ;58 ;60 ;63 ;66 ;3 ;6 ;9 ;11 ;13 ;16 NEED VERT. DELAY AND NUSIZE FOR BITMAP

POSITION FOR BITMAP

THESE ARE ONE TO THE LEFT OF THE ONE CURRENTLY IN JOUST BUT THESE ARE CENTERED

STORE PLAYER COLORS FOR BITMAP POINTERS ARE LOW BYTE PLUS LINECNT SO THAT THE TOP IS ALWAYS DRAWN

STA LDA ADC STA LDA ADC STA LDA ADC STA LDA ADC STA LDA ADC STA LDA STA STA LDA STA STA STA STA STA STA LDA STA LDA SEC SBC TAY LDA CLC ADC TAX STA DEX BPL STX STA STA LDA STA TYA BPL STA BMI JSR STA LDX STX STA STA INX STX

PTR0 #L(LOGO1) LINECNT PTR1 #L(LOGO2) LINECNT PTR2 #L(LOGO3) LINECNT PTR3 #L(LOGO4) LINECNT PTR4 #L(LOGO5) LINECNT PTR5 #$52 COLUPF WSYNC #H(LOGO0) PTR0H PTR1H PTR2H PTR3H PTR4H PTR5H #1 CTRLPF #28 LINECNT #74 LINECNT WSYNC WAITLP PF2 WSYNC WSYNC #7 PF2 DOBITM WSYNC NOBITM MINBIT WSYNC #$FF PF2 WSYNC WSYNC PF2

;19 ;21 ;24 ;27 ;29 ;32 ;35 ;37 ;40 ;43 ;45 ;48 ;51 ;53 ;58 ;61 ;63 ;66 ;69 ;2 ;5 ;8 ;11 ;14 ;17 ;20

CARRY REMAINS CLEAR THROUGHOUT

COLOR OF PLAYFIELD BOX

STORE HIGH POINTERS

WAITLP

;22 ;24 ;27 ;29 ;31 ;33 ;36 ;38 ;41 ;

Y IS NUMBER OF LINES USED BY BITMAP ROUTINE X IS NUMBER OF LINES TO WAIT BEFORE DRAWING BITMAP THIS LOOP WAITS UNTIL BITMAP IS TO START

;X IS FF, FOR TOP OF BOX ;FOR TWO LINES, JUST HAVE TOP OF BOX ;NO MAKE HOLE IN BOX ;IF Y IS NEGATIVE, DON'T CALL BITMAP ;EXTRA WSYNC TO KEEP BOX IN ONE SPOT ;ON SCREEN ;DRAW "JOUST" ;END OF BLANK LINE UNDER JOUST ;MAKE BOTTOM OF BOX ;IT LASTS FOR TWO LINES ;NOW CLEAR OUT PLAYFIELD 2

DOBITM NOBITM

CPWAIT

LDA BNE LDA STA STA STA STA STA STA LDA STA LDA STA LDA STA LDA STA LDA STA LDA STA STA STA LDY LDA STA STA LDX STA DEX BNE JSR

LINECNT VWLOOP #H(COPY0) PTR0H PTR1H PTR2H PTR3H PTR4H PTR5H #L(COPY0) PTR0 #L(COPY1) PTR1 #L(COPY2) PTR2 #L(COPY3) PTR3 #L(COPY4) PTR4 #L(COPY5) WSYNC PTR5 HMCLR #6 #$26 COLUP0 COLUP1 #29 WSYNC CPWAIT MINBIT

;22 IF LINECNT = 0, DO COPYRIGHT ;24/25 ;26 SET HIGH BYTES ;29 ;32 ;35 ;38 ;41 ;44 ;46 AND LOW BYTES ;49 ;51 ;54 ;56 ;59 ;61 ;64 ;66 ;69 ;71 ;74 ;3 ;6 CLEAR OUT HM'S ;8 Y = 6 FOR HEIGHT OF COPY ;MAKE IT A DARKER YELLOW THAN JOUST ;WAIT THIS MANY LINES BEFOR DOING COPY

*********** ;NOW LET TIMER RUN OUT FOR END OF SCREEN VWLOOP LDA BNE STA INTIM VWLOOP WSYNC

* OVERSCAN ===================================================================== NEWFRAME LDA STA ; * GPENTRY JSR #$24 TIM64T FRZEOS ; (35 decimal) ;COMMENT THIS OUT FOR NO FREEZE FRAMER ;OR TO BURN A CART ;MAY NOT HAVE ROM FOR THIS NOW

GAME OVERSCAN MAINLINE INC BNE LDA AND BEQ LDA FRMCNT NOALT ATTRACT #$C0 NOALT ATTRACT #$40

DOALT EOR

STA LDA STA LDA STA NOALT LDA AND BEQ BIT BPL BIT BPL NOAXE DOASET LSR BCS JSR LDA AND STA

ATTRACT #29 LINECNT #0 COLORCNT ATTRACT #$C0 NOAXE INPT4 DOASET INPT5 DOASET SWCHB NORST GMINIT ATTRACT #$3F ATTRACT #0 SNDTYP0 SNDTYP1 #5 SCNTRLI0 SCNTRLI1 HISCORE,X SCOREZIP ;NEED MINUS SET FOR BANK SELECT GBEF LIVES SELCHK GAMETYPE A GAMEOVER LIVES+1 SELCHK #$C0 ATTRACT GMINIT #29 LINECNT #0 FRMCNT CFIGINDX AUDV0 AUDV1 COLORCNT ;CLEAR ATTRACT AND TITLE

LDA STA STA LDX STA STA SCOREZIP STA DEX BPL JMP NORST LDA BPL LDA LSR BCC LDA BPL LDA STA JSR LDA STA LDA STA STA STA STA STA

CLEAR SCORE

GAMEOVER

;TO INSURE FULL TITLE PAGE

BEQ SELCHK LDA LSR LSR BCC LDA AND BCS LDA STA STA LDA AND ORA STA AND BEQ CMP BNE LDA AND STA TOGGLE LDX INX TXA AND STA LSR BCC LDA BNE LDA STA LDA AND CLC ADC STA LDA AND ORA STA LDA JMP

GBEF SWCHB A A SELHIT ATTRACT #$C0 GBEFM #0 AUDV0 AUDV1 ATTRACT #$BF #$80 ATTRACT #$1F TOGGLE #$1F ORON ATTRACT #$C0 ATTRACT

;STORES ATTRACT

SELHIT

;CLEAR TITLE

;CLEAR COUNTER

GAMETYPE #3 GAMETYPE A DOAFF #$8D STYPOS1 #$FF YPOSINT+1 ATTRACT #$1F #1 TEMP0 ATTRACT #$C0 TEMP0 ATTRACT #0 GOBANKF ;CAN'T GO OVER $1F

DOAFF STYPOS1 ORON

GBEFM GBEF

PICKSTP LDY CPX BCC LDA AND #4 #2 DOPICK TYPE-2,X #$0C

BEQ LDY CMP BEQ DEY LDA AND BNE DEY BNE REGULAR LDA AND BNE BEQ DOPICK LDA CMP BEQ CMP BEQ LDA AND BEQ CMP BEQ WALKER LDA AND LSR LSR LSR LSR TAY BPL DEY BPL LDY BNE LDA CMP BEQ

REGULAR #12 #$04 P050 ;OTHERWISE A TERRY TYPE-2,X #$10 P050 P050 TYPE-2,X #$10 WDN WUP STAT2,X #BIRTH1ST BSTAND #PDEATH P019 STATES,X #$60 P015 #$20 P020 STATES,X #$30 A A A A P050 P050 PDTHSNUM,X P050 GEN2,X #FLYFEFST P018

BSTAND P019 P015

SIXER WDN INY WUP P018 P020 INY ;ENTER HERE FOR Y = 6 ;ENTER HERE FOR Y = 5 ;ENTER HERE FOR Y = 4

P050 LDA AND STA LDA SEC SBC LDY RTS GMINIT LDX STX LDA STA LDA LSR LDA STA BCS LDA STA LDA STA LDA STA LDA STA STA LDA STA STA LDX STX STX LDX STX DEX STX STX STX STX DEX STX STX STX RTS ENDD #ITITI TITIMNDX #11 TERYTIME GAMETYPE A #141 YPOSINT STY1 #$FF YPOSINT+1 #40 XPOS #82 XPOS+1 #1 GENERALS GENERALS+1 #$70 STATES STATES+1 #4 LIVES LIVES+1 #1 TIMER ENEMA STAT2 STAT2+1 GLADRAG RACKNUM CFIGINDX DEPNUM SET UP TERRY TIMER... YPOSINT,X #3 TEMP0 LOWBYTE,Y TEMP0 PREVIOUS

STY1

;SETS UP END OF RACK FF

DUR

DB DB

$00,$02,$00,$00,$00,$02,$03,$0D,$00,$02,$01,$02 1,0,1

LVTABL

DB DB DB DB DB DB DB DB DB COLORTAB DB DB SCNTRLS DB ENDDC *

L(WALKVOL) L(FLAPVOL),L(BNCEVOL) L(NULL),L(NULL) L(EXPLVOL),L(BRTHVOL) L(NULL),L(NULL) L(TIEDVOL) L(NULL),L(NULL) L(EGGHHVOL),L(EATEGVOL) L(EXTRVOL) $0E,$0A,$08,$06,$0A,$08,$06,0 $2A,$78,$56,$08,$D8,$C8,$46 6,8,4,4,0,8,$D,7,0,4,7,3,8,4,4

THE FOLLOWING ARE PLAYER STAMPS

ORG $DD00 ;ALL STAMPS ON THIS PAGE HAVE BEEN PACKED . DON'T TOUCH WITHOUT CARE DB 0,0,0 RWALK0 DB $06,$37,$26,$32,$3F,$32,$7A,$FE,$FC,$78,$60,$70,$18,$40,$60,0 DB 0,0,0,0 RWALK1 DB $06,$37,$26,$32,$3F,$32,$7A,$FE,$FC,$78,$30,$60,$30,$20,$30,0 DB 0,0,0,0 RWALK2 DB $06,$37,$26,$32,$3F,$32,$7A,$FE,$FC,$78,$70,$50,$50,$90,$08,0 DB 0,0,0,0 RWALK3 DB $06,$37,$26,$32,$3F,$32,$7A,$FE,$FC,$78,$30,$28,$28,$24,$24,0 DB 0,0,0,0 RSKID DB $0C,$6E,$4C,$68,$7F,$34,$7A,$FE,$FC,$78,$28,$24,$12,$00,$00,0 DB 0,0,0,0 RWINGDWN DB $06,$37,$26,$32,$3F,$32,$7A,$FE,$FC,$78,$70,$60,$40,$00,$00,0 DB 0,0,0,0 RWINGUP DB $06,$B7,$E6,$F2,$FF,$F2,$7A,$FE,$FC,$78,$10,$00,$00,$00,$00,0 DB 0 REXPL0 DB $00,$00,$00,$08,$1C,$36,$1C,$08,$00,$00,$00,$00,$00,$00,$00,0 DB 0,0 REXPL1 DB $00,$00,$49,$2A,$1C,$77,$1C,$2A,$49,$00,$00,$00,$00,$00,$00,0 DB 0,0,0,0 REXPL2 DB $14,$08,$49,$22,$00,$63,$00,$22,$49,$08,$14,$00,$00,$00,$00,0 DB 0,0,0,0 RTERYWUP DB $00,$E0,$71,$3E,$74,$FE,$7D,$00,$00,$00,$00,$00,$00,$00,$00,0 DB 0,0 RTERYWDN DB $00,$00,$00,$0F,$74,$FF,$7C,$38,$70,$E0,$00,$00,$00,$00,$00,0 DB 0,0,0,0 EGG DB $18,$3C,$7C,$7C,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,0 DB 0,0,0,0 ENDSTAMP ENDDD ORG $DE00 ZERO ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE BLANK DB DB DB DB DB DB DB DB DB DB DB $38,$6C,$6C,$6C,$6C,$7C,$38,0 $7E,$18,$18,$18,$18,$58,$38,0 $7E,$7A,$38,$1C,$0C,$6C,$38,0 $38,$6C,$0C,$18,$0C,$6C,$38,0 $1C,$0C,$FE,$CC,$6C,$3C,$1C,0 $38,$6C,$0C,$6C,$78,$40,$7C,0 $38,$6C,$6C,$78,$60,$6C,$38,0 $70,$70,$30,$18,$4C,$64,$7C,0 $38,$6C,$6C,$38,$6C,$6C,$38,0 $38,$18,$0C,$3C,$66,$66,$3C,0 $00,$00,$00,$00

;GRAPHICS FOR JOUST LOGO LOGO0 DB 0,0,0,$FE,$FF,$FF,$FF,$FF,$FF,$07,$03,$03,$03,$03,$03,$03 DB $03,$43,$63,$73,$7F,$3F,$3F,$1F,$0F,$03,0,0 LOGO1 LOGO2 LOGO3 LOGO4 LOGO5 DB DB DB DB DB DB DB DB DB DB 0,$0F,$1F,$1F,$3F,$3F,$BF,$BF,$F9,$F9,$F0,$F0,$F0,$F0,$F0 $F0,$F0,$F0,$F0,$F0,$F9,$B9,$BF,$BF,$DF,$DF,$DF,$0F,0 $03,$07,$8F,$8F,$DF,$DF,$DF,$DE,$FC,$FC,$F8,$F8,$F8,$F8,$F8 $F8,$F8,$F8,$F8,$F8,$F8,$D8,$DC,$DC,$DC,$8C,$8C,$1C,$3E $80,$C1,$E7,$EF,$FF,$FF,$FF,$FE,$7C,$78,$38,$38,$38,$39,$3B $3F,$3F,$3F,$3F,$3F,$3F,$3F,$77,$77,$73,$63,$61,$60,$F0 0,$F0,$F8,$FD,$FF,$FF,$1F,$0F,$0F,$1F,$3F,$7F,$FD,$FD,$F9 $F0,$E0,$C0,$82,$03,$07,$8F,$9F,$FF,$FE,$FC,$F8,$F0 0,0,0,$FF,$FF,$FF,$FF,$FF,$FF,$E0,$C0,$C0,$C0,$E0,$E0,$E0 $F0,$70,$FF,$FF,$FF,$FF,$FE,$F8,$F8,$98,$0C,$04,0

ENDDE ORG MTINDX DB DB DB DB DB DB DB DB DB DB DB DB DB $DF00 4,7,7,4 2,10,0,4 3,11,0,4 5,7,0 $60,$50,$40,$30,$20,$10,$00,$F0,$E0,$D0,$C0,$B0,$A0,$90,$80 $61,$51,$41,$31,$21,$11,$01,$F1,$E1,$D1,$C1,$B1,$A1,$91,$81 $62,$52,$42,$32,$22,$12,$02,$F2,$E2,$D2,$C2,$B2,$A2,$92,$82 $63,$53,$43,$33,$23,$13,$03,$F3,$E3,$D3,$C3,$B3,$A3,$93,$83 $64,$54,$44,$34,$24,$14,$04,$F4,$E4,$D4,$C4,$B4,$A4,$94,$84 $65,$55,$45,$35,$25,$15,$05,$F5,$E5,$D5,$C5,$B5,$A5,$95,$85 $66,$56,$46,$36,$26,$16,$06,$F6,$E6,$D6,$C6,$B6,$A6,$96,$86 $67,$57,$47,$37,$27,$17,$07,$F7,$E7,$D7,$C7,$B7,$A7,$97,$87 $68,$58,$48,$38,$28,$18,$08,$F8,$E8,$D8,$C8,$B8,$A8,$98,$88

HTABLE

;GRAPHICS COPY0 COPY1 COPY2 COPY3 COPY4 COPY5 LIVES0 PF

FOR COPYRIGHT (38 BYTES) DB $06,$09,$16,$14,$16,$09,$06 DB 0,$29,$A9,$B9,$A9,$13 DB 0,$2A,$2A,$3B,$2A,$93 DB 0,$A3,$A1,$21,$A3,$A1 DB 0,$97,$15,$77,$55,$77 DB 0,$70,$10,$30,$10,$70,0 DB DB DB DB DB $EE,$82,$82,$CE,$88,$88,$EE $00,$00,$00,$00,$00,$00,$00 $00,$00,$00,$00,$00,$00,$F0,$00,$00,$00,$00,$FF,$00,$00,$00 $00,$00,$00,$00,$00,$F8,$00,$00,$00,$00,$FC,$00,$00,$00,$00 $00,$00,$00,$00

ENDDF GOBANKF ORG JMP $DFF2 DOBANKF

DOBANKD

JMP ORG DB END

DLOAD $DFFC L(START),H(START) $F000

Вам также может понравиться