123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- *** FLEA.S ***
- * SMD 8/8 ATTRACT MODE CORRECTED
- * DVP 7/6 SCORPION MOVEMENT ADDED
- * DVP 6/29 FLEA MOVEMENT ROUTINE FOR CENTIPEDE
- FLEASCRP
- LDA ATTRACT
- BPL NRMLFLEA
- FLOUT RTS
- NRMLFLEA LDA SHTRTIMR
- BNE FLOUT ;IF SHOOTER IS ALIVE
- LDA FLEAOFST ;MOVE IF ON SCREEN
- CMP #L(EXPLOS)
- BCS FLOUT
- BIT FLEASTAT
- BPL TRYFLEA
- BVS MOVEFLEA
- JMP MVSCORP
- ;OTHERWISE, DECIDE WHETHER TO START
- TRYFLEA LDX PLAYER ;FIRST RACK?
- LDA GAMETYPE
- CMP #1
- BEQ ZGMTPFL1
- LDX #0
- ZGMTPFL1 LDA CHAINSIZ,X
- CMP MAXSGCNT
- BCS FLOUT ;YES
- LDX PLAYER
- LDA GAMETYPE
- CMP #2
- BCC ZGMTPFL4
- LDX #2
- CMP #3
- BEQ ZGMTPFL4
- DEX ;X=1 HERE
- LDA SCORE2+1 ;IN COMPETITION GAME, USE PLAYER WITH
- CMP SCORE2 ; HIGHER SCORE
- BCS ZGMTPFL4
- DEX ;X=0 HERE
- ZGMTPFL4 LDA SCORE2,X ;DECIDE NUMBER OF MUSHROOMS IN INFIELD
- STA GTEMP5
- LDY #5 ; TO PREVENT FLEAS, MUST BE AT LEAST
- CMP #$02 ; 5 UP TO 20K
- BCC ENOUGHM ; 9 UP TO 120K
- LDY #9 ; 12 UP TO 140K
- CMP #$12 ; 13 UP TO 160K
- BCC ENOUGHM ; 14 UP TO 180K
- LSR A ; ONE MORE FOR EACH 20K
- CLC
- ADC #6
- TAY
- ENOUGHM LDX PLAYER ;ENOUGH MUSHROOMS?
- LDA GAMETYPE
- CMP #1
- BEQ ZGMTPFL2
- LDX #0
- ZGMTPFL2 TYA
- CMP MUSHCNT,X
- BCS NEWFLEA
- JMP TRYSCORP
- NEWFLEA LDA #4 ;FLEASND
- JSR TUNIN
- JSR RANDOM ;TIME FOR A NEW FLEA -- PICK A RANDOM
- AND #$1F ; ROW
- BEQ FLOUT
- CLC
- ADC #MINX/4-1 ;ADJUST FOR LEFT MARGIN
- ASL A
- ASL A
- STA FLEAX
- LDA #$C1 ;INITIALIZE OTHER FLEA VARIABLES
- STA FLEASTAT
- LDA #L(FLEA)
- STA FLEAOFST
- LDA #MINY
- STA FLEAY
- MOVEFLEA LDA FRMCNT ;CHANGE GRAPHICS EVERY 4TH FRAME
- LSR A
- AND #$06
- CLC
- ADC #L(FLEA)
- STA FLEAOFST
- LDA #0
- LDX DIFLEVEL
- BEQ SLOWFLEA
- LDA #2
- CPX #3
- BEQ SLOWFLEA ;ALWAYS FAST IN EXPERT GAME
- LDA FLEASTAT ;MOVE DOWN SCREEN
- AND #$03
- SLOWFLEA SEC ;1 PIXEL/FRAME, NOVICE GAME
- ADC FLEAY
- CMP #MAXY ;AT BOTTOM?
- BCS ENDFLEA ;YES
- STA FLEAY
- LDX #13 ;CHECK FOR COLLISION WITH PLAYER
- JSR SHTRCOLL
- LDA SHTRTIMR
- BNE FLEAOUT
- LDA FRMCNT ;GENERATE A NEW MUSHROOM EVERY 4 FRAMES
- AND #$03 ; AT MOST
- BNE FLEAOUT
- JSR RANDOM ;GENERATE ONLY 1/4 OF THE TIMES ALLOWED
- AND #$03
- BNE FLEAOUT
- ;CHECK WHETHER MUSHROOM ALREADY THERE
- LDA FLEAX
- STA GTEMP1
- LDA FLEAY
- CMP #MAXY-ZONELEN
- BCS FLEAOUT
- ; CLC
- SBC #3 ;CHECK 4 PIXELS BEHIND FLEA
- JSR OBSTAC
- BNE FLEAOUT ;MUSHROOM THERE
- LDA FLEAY ;PLACE MUSHROOM 4 PIXELS BEHIND FLEA
- SEC
- SBC #4
- JSR MUSHER ;INCREMENTS COUNT IF IN INFIELD
- FLEAOUT RTS
- ENDFLEA LDA #0
- STA FLEAOFST
- STA FLEASTAT
- LDA #4
- JSR SCRAPONE
- RTS
- *** START A SCORPION RATHER THAN A FLEA
- TRYSCORP
- LDA FRMCNT ;EVERY N FRAMES
- CMP #$93
- BNE FLEAOUT
- LDX PLAYER ;ONLY IN RACKS WITH SMALLER CENTIPEDES
- LDA GAMETYPE
- CMP #1
- BEQ ZGMTPFL3
- LDX #0
- ZGMTPFL3 LDY CHAINSIZ,X
- INY
- CPY MAXSGCNT
- BCS FLEAOUT
- JSR RANDOM ;ONLY 1/4 OF THE TIME
- AND #$03
- BNE FLEAOUT
- LDA #5
- JSR TUNIN
- ;START A NEW SCORPION
- LDA GTEMP5 ;IF SCORE < 20K USE SLOW
- CMP #2 ; (GTEMP5 SAVED IN TRYFLEA)
- BCC SLOWSCRP
- JSR RANDOM ;USE SLOW SCORPION 1/4 OF TIME
- AND #$03 ; RANDOMLY OVER 20K
- BEQ SLOWSCRP
- LDA #$82 ;BIT 2 SET, 1 CLEAR = FAST
- BNE SCRPRL
- SLOWSCRP LDA #$80 ;BIT 2 CLEAR, 1 SET = SLOW
- SCRPRL BIT RNDM
- BPL RGHTSCRP
- LEFTSCRP ORA #$01 ;BIT 0 SET FOR LEFT
- LDX #MAXX
- BNE SCRPDIR
- RGHTSCRP LDX #MINX-SCRPWDTH
- SCRPDIR STX FLEAX
- STA FLEASTAT
- JSR RANDOM ;PICK A VERTICAL POSITION
- AND #$1F
- TAY
- LDA SCRPROW,Y
- STA FLEAY
- *********** SCORPION MAIN ENTRY POINT
- MVSCORP LDA FRMCNT ;CHANGE SCORPION ANIMATION EVERY 4
- LSR A
- LSR A
- AND #$03
- TAX
- LDA FLEASTAT
- LSR A
- BCC SANM1
- LDA LSCRPANM,X
- BCS SANM2
- SANM1 LDA RSCRPANM,X
- SANM2 STA FLEAOFST
- SAMESCRP
- LDA FLEASTAT ;ADJUST SCORPION'S HORZ. POS.
- AND #$03
- LSR A ;CARRY SET = LEFT, CLEAR = RIGHT
- EOR #$01 ;CHECK SPEED (HOW OFTEN SHOULD SCORP.
- AND FRMCNT ; MOVE)?
- BNE RSRSRS
- BCC MVSCRPRT
- DEC FLEAX ;CARRY SET, MOVE LEFT
- BCS RSRSRS
- MVSCRPRT INC FLEAX ;CARRY CLEAR, MOVE RIGHT
- RSRSRS LDA FLEAX
- SEC
- SBC #HORIZPOS-SCRPWDTH ;EDGE DETECTION
- CMP #MAXX-(HORIZPOS-SCRPWDTH-1)
- BCS ENDSCRP
- LDA FLEAX
- SEC ;CHECK WHETHER IN BOUNDARY FOR POISON
- SBC #SCRPWDTH
- CMP #MAXX-(SCRPWDTH+4)
- BCS NOPOISON
- LDA FLEAX
- ;;;;; CLC
- ADC #4
- STA GTEMP1 ;FOR OBSTAC SUBR.
- LDA FLEAY ;TEST FOR MUSHROOM
- ;;;;; CLC
- ADC #4
- JSR OBSTAC
- CMP #L(QLIVE)
- BCC NOPOISON
- CMP #L(LIVE+1)
- BCS NOPOISON
- ORA #$08 ;IT'S THERE, POISON IT
- STA (GTEMP3),Y
- NOPOISON RTS
- ENDSCRP LDA #0
- STA FLEASTAT
- STA FLEAOFST
- LDA #5
- JSR SCRAPONE
- RTS
- SCRPROW DB 12,20,28,36,44,52,60,68,76,84
- DB 12,20,28,36,44,52,60,68,76,84
- DB 12,20,28,36,44,52,60,68,76,84
- DB 12,84
- LSCRPANM DB L(LSCRP),L(LSCRP+2),L(LSCRP+4),L(LSCRP+6)
- RSCRPANM DB L(RSCRP),L(RSCRP+2),L(RSCRP+4),L(RSCRP+6)
|