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