       PAGE
SCREN2 JSR SETSC2
       CLR ARBORN CLEAR IMPORTANT FLAGS
       CLR CLIMB
       CLR POP
       CLR FIRETM
       CLR TOOKUM
       CLR TOOKBC
       CLR TOOKFE
       LDA #1
       STA MARIOD DIRECTION
       LDY #MARIOR
       STY MARIO SHAPE
       LDD #30*256+184
       STD MARIOX
       JSR SHAPE
RAT    CLR MOVED NO MOVEMENT YET
       TST ARBORN IN AIR, ALREADY JUMPED!
       LBNE O@
       TST CLIMB ON LADDER, NO JUMP
       LBNE P@
       LDA $FF00
       LSRA
       LBCS P@ NO BUTTON, NO JUMP
       TST FIRETM FIRE EXTINGUISHER IN USE?
       LBEQ A@ NO, THEN JUMP
       LDY #CLOUD ELSE, SPRAY
       LDD MARIOX
       TST MARIOD FACING LEFT OR RIGHT?
       BNE G@
       SUBA #12 FACING LEFT
       STD DATA
       ADDA #6
       JSR SHAPE DRAW CLOUD
       LDX #FIRESO EXTINGUISHING SOUND
       JSR NOTE
       LDX #ENMYTB
J@     LDD DATA
       TST ,X LOOP CHECK IF HIT A FIRE
       BEQ I@
       CMPB 1,X
       BNE I@ MUST HAVE SAME Y AS MARIO
       CMPA ,X
       BHI I@ AND BE IN THE CLOUD SOMEWHERE
       ADDA #14
       CMPA ,X
       BLO I@
       LDA ,X
       LDY #FIRE ERASE DEAD FIRE
       JSR ERASE
       LDD #5*256+3 IT'S ALL WORTH 500 POINTS
       JSR ADSCOR
       CLR ,X ERASE FIRE INDEX
I@     LEAX 11,X
       CMPX #ETABOT
       BLT J@
       LDY #CLOUD
       LDD DATA
       ADDA #3
       JSR ERASE
       LBRA P@ DONE FIRE EXTINGUISH LEFT
G@     ADDA #14 FIRE EXTINGUISH TO RIGHT
       STD DATA
       JSR SHAPE
       LDX #FIRESO
       JSR NOTE
       LDX #ENMYTB
Y@     LDD DATA
       TST ,X
       BEQ RFDN
       CMPB 1,X
       BNE RFDN
       CMPA ,X
       BHI RFDN
       ADDA #7
       CMPA ,X
       BLO RFDN
       LDA ,X
       LDY #FIRE
       JSR ERASE
       LDD #5*256+3
       JSR ADSCOR
       CLR ,X
RFDN   LEAX 11,X
       CMPX #ETABOT
       BLT Y@
       LDY #CLOUD
       LDD DATA
       JSR ERASE
       LBRA P@
A@     JSR JUMP SOUND FOR JUMP
       LDA MARIOY
       STA JBOTOM
       SUBA #20
       STA JTOP
       CLR DOWN
       INC ARBORN
O@     LDY MARIO ALREADY IN AIR
       LDD MARIOX
       TST DOWN IF NOT DOWN, UP
       BNE R@
       CMPB JTOP
       BLS R@ TIME TO FALL?
       LDX #0*256+4
       JSR MOVE
       SUBB #4
       BRA S@
R@     INC DOWN FALL
       CMPB JBOTOM
       BLO Q@ DONE IF=JBOTOM
       CLR ARBORN
       BRA P@
Q@     LDX #1*256+4
       JSR MOVE
       ADDB #4
S@     STD MARIOX
P@     JSR [$A00A] READ JOYSTICK
       TST CLIMB ON LADDER?
       BNE C@ YES, NO LEFT/RIGHT
       LDA $015A ELSE, CHECK L/R
       CMPA #51 >51 =MOVE RIGHT
       BLE B@
       LDA #1
       STA MARIOD MOVE LEFT
       LDY #MARIOR
       TST FIRETM
       BEQ RNFE
       LDY #MARIFR
RNFE   STY MARIO
       LDD MARIOX
       CMPA #120
       BHS C@
       LDX #3*256+2
       JSR MOVE
       ADDA #2
       STA MARIOX
       INC MOVED WE HAVE MOVED
       BRA C@
B@     CMPA #11 <11 =MOVE LEFT
       BGE C@
       LDY #MARIOL
       TST FIRETM
       BEQ LNFE
       LDY #MARIFL
LNFE   STY MARIO
       CLR MARIOD
       LDD MARIOX
       CMPA #2
       BLS C@
       LDX #2*256+2
       JSR MOVE
       SUBA #2
       STA MARIOX
       INC MOVED
C@     LDA $015B CHECK UP/DOWN
       CMPA #11 <11 MOVE UP
       LBGE D@
       TST CLIMB IF FLAGGED THEN
       BNE E@ ON LADDER ALREADY
       TST FIRETM IF HOLDING F.E, CAN'T CLIMB
       BNE D@
       LDX #ZIG2
F@     LDD ,X++
       LBEQ K@ NOT NEAR LADDER
       CMPD MARIOX
       BEQ H@
       DECA
       CMPD MARIOX
       BNE F@
H@     LDA MARIOX
       STD LADRBT BOTTOM LADDER
       SUBB #35
       STD LADRTP TOP LADDER
       LDY #MAC0
       STY MARIO
       CLR MARIOV
       INC CLIMB
E@     INC MOVED MOVING UP LADR
       LDY #MARIOC
       LDA MARIOV
       INC MARIOV
       ANDA #3
       LSLA
       LDY A,Y
       STY MARIO
       LDD MARIOX
       LDX #0*256+2
       JSR MOVE
       SUBB #2
       STD MARIOX
       LDB LADRTP+1
       CMPB MARIOY
       LBLO K@ NOT UP YET
       LDD MARIOX
       JSR ERASE
       LDB LADRTP+1
       STB MARIOY
       LDY #MARIOT TOP OF LADDER
       STY MARIO
       JSR SHAPE
       CLR CLIMB
       BRA K@
D@     CMPA #51 >51 MOVE DOWN
       LBLE K@
       TST CLIMB IF FLAGGED THEN
       BNE L@ ON LADDER ALREADY
       TST FIRETM IF HOLDING F.E., CAN'T CLIMB
       BNE K@
       LDX #ZIG2
M@     LDD ,X++
       BEQ K@
       SUBB #35
       CMPD MARIOX
       BEQ N@
       DECA
       CMPD MARIOX
       BNE M@
N@     LDA MARIOX
       STD LADRTP
       ADDB #35
       STD LADRBT
       LDY #MAC1
       STY MARIO
       CLR MARIOV
       INC CLIMB
L@     INC MOVED MOVING DOWN LDR
       LDY #MARIOC
       LDA MARIOV
       INC MARIOV
       ANDA #3
       LSLA
       LDY A,Y
       STY MARIO
       LDD MARIOX
       LDX #1*256+2
       JSR MOVE
       ADDB #2
       STD MARIOX
       LDB LADRBT+1
       CMPB MARIOY
       BHI K@
       LDD MARIOX
       JSR ERASE
       LDB LADRBT+1
       JSR SHAPE
       STB MARIOY
       CLR CLIMB
K@     TST ARBORN
       LBNE X@
       TST MOVED IF MOVED, THEN
       BEQ Z@ BLIP FOR WALK
       JSR WALK
       LDD #S2KONG CHECK MARIO HITTING KONG
       CMPB MARIOY
       BLO Z@
       ADDA #17
       CMPA MARIOX
       BLS Z@
       SUBA #24
       CMPA MARIOX
       LBLS FALLDD
Z@     TST CLIMB
       LBNE SC2DLY NO POP ON LDR
       TST POP IF JUST POPPED A RIVET
       BEQ W@ THEN WE CAN'T FALL
       DEC POP FOR AT LEAST 3 MOVES
       LBRA SC2DLY
W@     LDD MARIOX
       TST FIRETM GOT F.E.?
       BEQ DHFE
       TST MARIOD
       BNE DHFE
       ADDA #6 ACCOUNT FOR POSITION OFFSET BY MOVING LEFT W/FE
DHFE   ADDA #4
       INCB
       JSR READPX
       TSTA
       BNE X@
       TST FIRETM
       LBEQ FALLDD
       TST MARIOD
       BNE DHFER
       LDD MARIOX
       ADDA #6
       STD MARIOX
       LDY #MARIOL
       STY MARIO
       LBRA FALLDD
DHFER  LDY #MARIOR
       STY MARIO
       LBRA FALLDD
X@     LDX #8 CHECK POPPED RIVET
       LDY #RIVLCL
U@     LDA ,Y
       SUBA #3
       CMPA MARIOX
       BEQ T@
       INCA
       CMPA MARIOX
       BEQ T@
       INCA
       CMPA MARIOX
       BNE V@
T@     LDB 1,Y
       SUBB MARIOY
       CMPB #26
       BHI V@
       TFR X,D CHECK IF RIVET
       LDX #RIVETS POPED ALREADY
       TST B,X
       LBEQ SC2DLY
       CLR B,X IF NOT, THEN POP
       LDD ,Y
       LDY #RIVET
       JSR ERASEB
       JSR ERASE
       LDD #1*256+3 SCORE 100 POINTS
       JSR ADSCOR
       LDA #3
       STA POP
       DEC RIVETS ALL RIVETS POPPED?
       LBNE SC2DLY NO, THEN CONTINUE
       BEQ KFALL ELSE, DROP KONG
V@     LEAY 2,Y
       LEAX -1,X
       BNE U@
       LBRA SC2DLY

       PAGE
*POPPED ALL OF THE RIVETS ON THE RIVETS SCREEN
*KONG FALLS, AND BUMPS HIS HEAD
KFALL  LDD #1*256+4
       JSR ADSCOR
       LDY #DROP
       LDA RIVLCL
       LDB #184
       JSR ERASEB
       LDA #4
       STA C0
       LDY #GIRDER
       LDA RIVLCL
       LDB #185
C@     PSH D
       LDA #8
       STA T0
       LDD ,S
D@     ADDA #5
       JSR BSHAPE
       DEC T0
       BNE D@
       PUL D
       SUBB #5
       DEC C0
       BNE C@
       JSR COPYBF
       LDY #KONG1 ACTUAL KONG FALL
       LDD #S2KONG
       JSR ERASEB
       LDX #1*256+4
E@     PSH D
       ADDD #9*256+1
       JSR READPX CHECK IF HIT BOTTOM
       TSTA
       BNE F@
       PUL D
       JSR MOVE
       ADDB #4
       BRA E@
F@     LDY #KONG4
       PUL D
       JSR SHAPE
       JSR KBUMP
       LDY #GIRL
       LDD #55*256+44
       JSR SHAPE
       LDY #MARIOL
       LDD #66*256+44
       JSR SHAPE
       LDX #30000
       JSR HOLD
       LDD #SOFT
       STD VOLUME
       LDX #CHEEK
       LDY #20
       INC JBFLAG ALLOW JUMP BACK
       JSR SONDSL
       LDX #10000
       JSR HOLD
       LBRA NEXTSC

*HERE, WE LAUNCH AND MOVE THE FIRES AND THEN EXECUTE THE PROPER
*DELAY BEFORE CONTINUEING PROGRAM EXECUTION.
SC2DLY JSR [$A000]
       CMPA #'S
       BNE XXCC1
XXWW1  JSR [$A000]
       CMPA #'G
       BNE XXWW1

XXCC1  TST FIRETM
       BEQ G@
       DEC FIRETM
       BNE G@
       LDY MARIO
       LDD MARIOX
       JSR ERASE
       TST MARIOD
       BEQ H@
       LDY #MARIOR
       BRA M@
H@     LDY #MARIOL
M@     JSR SHAPE
       STY MARIO
G@     TST TOOKUM SEE IF MARIO GOT THE UMBRELLA
       BNE B@
       LDD MARIOX
       CMPD #25*256+44
       BEQ A@
       INCA
       CMPD #25*256+44
       BNE B@
A@     LDY #UMBRLA
       LDD #25*256+44
       INC TOOKUM
       BRA C@
B@     LDD MARIOX
       TST TOOKBC MARIO GOT THE BIRTHDAY CAKE?
       BNE E@
       CMPD #70*256+184
       BEQ D@
       INCA
       CMPD #70*256+184
       BNE E@
D@     LDY #BCAKE
       LDD #70*256+184
       INC TOOKBC
C@     JSR ERASEB
       JSR ERASE
       LDD MARIOX
       LDY MARIO
       JSR SHAPE
       LDD #2*256+3
       JSR ADSCOR
       BRA F@
E@     TST TOOKFE DID HE TAKE F.E. YET?
       BNE F@
       LDD MARIOX
       CMPA FIRETC
       BLO F@
       CMPA FIREBC
       BHI F@
       CMPB FIRETC+1
       BLO F@
       CMPB FIREBC+1
       BHI F@
       LDA #200
       STA FIRETM
       LDD #66*256+67
       LDY #FIREXR
       INC TOOKFE
       BRA C@ ERASE IT
F@     LDA LTIMER CHECK IF TIME TO LAUNCH ANOTHER FIRE
       DECA
       STA LTIMER
       LBNE FIREMV
       LDA #67
       STA LTIMER
       LDA CLOCK USE THE SOFTWARE CLOCK TO PICK POSITION
       ROLA
       ROLA
       ROLA
       ADDA SEED
       RORA
       STA SEED
       ANDA #7
       LSLA
       LDX #FINTAB
       LDD A,X
       LDX #ENMYTB
I@     TST ,X
       BEQ J@
       LEAX 11,X
       CMPX #ETABOT
       BLT I@
       BRA FIREMV NO PLACE TO LAUNCH A NEW FIRE
J@     STD ,X
       LDY #FIRE
       JSR SHAPE
       LDA EDELAY
       STA 3,X
       CLR 4,X
       CLR 9,X
       CLR 10,X

       PAGE
FIREMV LDD MARIOX SETUP CHECK VALUES FOR
       SUBA #6 MARIO HITTING FIRE AND THUS
       SUBB #14 BECOMMING DECEASED
       STD MRIOTC STORE TOP CORNER FOR CHECK
       LDD MARIOX AND THEN BOTTOM
       ADDA #7
       ADDB #7
       STD MRIOBC
       ADDB #13
       STB MRIOAB
       LDU #ENMYTB LOOP THROUGH FIRE TABLE
L@     TST ,U SEE IF FIRE HERE
       BNE T@ NO, SO CHECK NEXT
       LDX #300
U@     LEAX -1,X
       BNE U@
       LBRA K@
T@     DEC 3,U
       LBNE J@
       LDA EDELAY
       STA 3,U
       LDD 9,U
       BNE R@
       LDD MARIOX
R@     STD POINTX
       LDA 1,U GET FIRE Y
       CMPA POINTY
       BHS A@
       TST 4,U
       BNE B@
       LDY #ZIG2
C@     LDD ,Y++
       LBEQ E@
       SUBB #35
       CMPD ,U
       BEQ D@
       INCA
       CMPD ,U
       BNE C@
D@     STD 5,U
       ADDB #35
       STD 7,U
       INC 4,U
B@     LDD ,U
       LDY #FIRE
       JSR ERASE
       ADDB #2
       JSR SHAPE
       STD ,U
       LDB 8,U
       CMPB 1,U
       BHI E@ AT BOTTOM, SO GET OFF LADDER
       LDD ,U
       JSR ERASE
       LDB 8,U
       JSR SHAPE
       STB 1,U
       CLR 4,U
       CLR 9,U
       CLR 10,U
       BRA S@
A@     LBEQ E@ CHECK NEED TO MOVE UP TO GET MARIO
       TST 4,U
       BNE G@
       LDY #ZIG2
H@     LDD ,Y++
       LBEQ E@ NEED TO BE NEAR TO CLIMB
       CMPD ,U
       BEQ I@
       DECA
       CMPD ,U
       BNE H@
I@     STD 7,U
       SUBB #35
       STD 5,U
       INC 4,U
G@     LDD ,U
       LDY #FIRE
       JSR ERASE
       SUBB #2
       JSR SHAPE
       STD ,U
       LDB 6,U
       CMPB 1,U
       BLO E@ TOP OF LADDER, GET OFF
       LDD ,U
       JSR ERASE
       LDB 6,U
       STB 1,U
       JSR SHAPE
       CLR 4,U
       CLR 9,U
       CLR 10,U
S@     LDD MARIOX
       STD POINTX
E@     TST 4,U IF ON LADDER, CAN'T GO RIGHT OR LEFT
       BNE J@
       LDD ,U
       CMPA POINTX
       BHS F@
       INCB
       ADDA #5 CHECK MIDSECTION+MOVE OF FIRE FOR BELOW
       JSR READPX
       TSTA
       BNE O@
       LDB 1,U
       SUBB #35
       LDA CLOCK
       LSRA
       BCC P@
       ADDB #70
P@     LDA ,U
       SUBA #30
       STD POINTX
       STD 9,U
       BRA J@
O@     LDD ,U
       LDY #FIRE
       JSR ERASE
       ADDA #2
       JSR SHAPE
       STA ,U
       BRA J@
F@     INCB
       INCA CHECK MIDSECTION+MOVE OF FIRE FOR BELOW
       JSR READPX
       TSTA
       BNE M@
       LDB 1,U
       SUBB #35
       LDA CLOCK
       LSRA
       BCC Q@
       ADDB #70
Q@     LDA ,U
       ADDA #30
       STD POINTX
       STD 9,U
       BRA J@
M@     LDD ,U
       LDY #FIRE
       JSR ERASE
       SUBA #2
       JSR SHAPE
       STA ,U
J@     LDD ,U CHECK IF MARIO BURNS
       CMPA MRIOTC FORMULA IS:
       BLO K@ MRIOTC<FIREXY<MRIOBC
       CMPA MRIOBC
       BHI K@
       CMPB MRIOTC+1
       BLO K@
       CMPB MRIOBC+1
       LBLS FALLDD
       TST ARBORN
       BEQ K@
       CMPB MRIOAB
       BHI N@
       CMPA MARIOX MAKE SURE ONLY SCORES ONCE PER JUMP
       BEQ W@
       INCA
       CMPA MARIOX
       BNE N@
W@     LDD #3*256+3
       JSR ADSCOR
N@     LDY #FIRE
       LDD ,U
       JSR SHAPE
K@     LEAU 11,U CHECK NEXT FIRE
       CMPU #ETABOT
       LBLT L@
       LDX #3250 DELAY BEFORE NEXT RUN
Z@     LEAX -1,X
       BNE Z@
       LBRA RAT

       PAGE
*SETUP RIVET POPPING PATTERN
SETSC2 JSR CLEARB
       LDA #8 SET RIVETS TO POP
       STA RIVETS
       LDB #8 NO RIVETS POPED
       LDX #RIVETS
       LDA #1
I@     STA B,X
       DECB
       BNE I@
       LDA #20
       STA LTIMER
       LDU #ZIGURT
       LDY #GIRDER
A@     LDD ,U++
       BEQ C@
       LDX ,U++
B@     JSR BSHAPE
       ADDA #5
       DEX
       BNE B@
       BRA A@
C@     LDD RIVLCL RIVET LOC LEFT
       LDY #RIVET
       LDX #4
D@     JSR BSHAPE
       SUBB #35
       LEAX -1,X
       BNE D@
       LDD RIVLCR RIVET LOC RITE
       LDX #4
E@     JSR BSHAPE
       SUBB #35
       DEX
       BNE E@
       LDU #ZIG2
       LDY #LADDER
F@     LDD ,U++
       BEQ H@
       LDX #6
G@     JSR BSHAPE
       SUBB #5
       DEX
       BNE G@
       BRA F@
H@     LDY #KONG1
       LDD #S2KONG
       JSR BSHAPE
       LDY #UMBRLA
       LDD #25*256+44
       JSR BSHAPE
       LDY #BCAKE
       LDD #70*256+184
       JSR BSHAPE
       LDY #FIREXR
       LDD #66*256+67
       JSR BSHAPE
       JSR HOWMNY
       JSR COPYBF
       CLRA
       LDB #1
       LDY #SCORE
       LBRA DECOUT

