123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- ; MOVE.S
- ; THIS FILE CONTAINS THE GENERAL MOVEMENT ROUTINE, USED BY ALL MOVING
- ; CHARACTERS.
- ; IT DOES A TWO-BYTE FIXNUM X,Y SPEED VECTOR ADD.
- GLBL MOVE
- GLBL MKSPLAT
- MOVE
- TXA ; SEE IF THIS IS A FOOD OR A CHARACTER
- CMP #FOODSTRT
- BPL MOVE0011 ; IF A FOOD, NO ANIMATE COUNTER
- ; BMI MOVE001 ; IT'S A CHARACTER---
- MOVE001
- DEC CFRAME+1,X ; ANIMATE COUNTER
- BPL MOVE0011 ; DON'T CHANGE UNTIL LESS THAN ZERO
- ; SINCE THE DRIVERS NEED IT AT ZERO
- LDA CSPEED+1,X ; IF MINUS, RESET
- AND #$7F
- CLC
- ADC #7
- STA CFRAME+1,X
- MOVE0011 LDA CFRAME,X ; CURRENT FRAME COUNT FOR CHARACTER
- AND #$7F ; TOP BIT MEANS DOUBLE SPEED
- BEQ DOMOVE ; MOVE IF IT'S ZERO
- DEC CFRAME,X ; ELSE DECREMENT AND RETURN
- RTS ; JMP MOVEBYE
- DOMOVE LDA CSPEED,X
- STA CFRAME,X ; RESET CFRAME FOR NEXT TIME
- ; TEST TO SEE IF CHARACTER HAS PASSED RIGHT OR LEFT BORDER:
- LDA CXPOS,X
- CMP #XMIN ; LEFT BORDER
- BCC MSKIP11 ; "BCC XLDTST"
- CMP #$C8 ; BIGGER THAN RIGHT SIDE
- BCC MSKIP1
- MSKIP11 JMP XLDTST ; LEFT DIRECTION TEST
- MSKIP1 CLC
- ADC CWIDTH,X ; ADD WIDTH OF CHARACTER
- CMP #XMAX ; RIGHT BORDER
- BCC ZMSKIP21
- JMP XRDTST ; RIGHT DIRECTION TEST
- ZMSKIP21
- XOK ; FINALLY, DO X AXIS MOVEMENT
- LDA CFRAME,X
- BPL XNODBL
- ; BMI XDOUBLE ; BIT 7 MEANS TWICE THE SPEED
- XDOUBLE LDA CXSPEEDL,X ; IDENTICAL; DOES IT TWICE
- CLC
- ADC CXPOSL,X
- STA CXPOSL,X
- LDA CXSPEED,X
- ADC CXPOS,X
- STA CXPOS,X
- XNODBL LDA CXSPEEDL,X
- CLC
- ADC CXPOSL,X
- STA CXPOSL,X
- LDA CXSPEED,X
- ADC CXPOS,X
- STA CXPOS,X
- JMP SKSKIPX
- SKIPX
- TXA
- CMP #FOODSTRT ; IF IT'S A FOOD, REMOVE IT
- BPL FWLHIT
- LDA CSTATE,X
- CMP #LEAVING
- BEQ CHERASE
- ; TEST TO SEE IF CHARACTER HAS PASSED TOP OR BOTTOM BORDER:
- SKSKIPX
- LDA CYPOS,X
- CMP #YMAX ; TOP BORDER
- BCC ZMSKIP22
- JMP YUDTST ; UP DIRECTION TEST
- ZMSKIP22 SEC
- SBC CHEIGHT,X ; SUBTRACT HEIGHT OF CHARACTER
- CMP #YMIN ; BOTTOM BORDER
- BCS ZMSKIP23
- JMP YDDTST ; DOWN DIRECTION TEST
- ZMSKIP23
- YOK
- LDA CFRAME,X
- BPL YNODBL
- ; BMI YDOUBLE ; BIT 7 MEANS DOUBLE SPEED
- YDOUBLE LDA CYSPEEDL,X
- CLC
- ADC CYPOSL,X
- STA CYPOSL,X
- LDA CYSPEED,X
- ADC CYPOS,X
- STA CYPOS,X
- YNODBL LDA CYSPEEDL,X
- CLC
- ADC CYPOSL,X
- STA CYPOSL,X
- LDA CYSPEED,X
- ADC CYPOS,X
- STA CYPOS,X
- JMP SKSKIPY
- SKIPY
- TXA
- CMP #FOODSTRT ; IF IT'S A FOOD, REMOVE IT
- BPL FWLHIT
- LDA CSTATE,X
- CMP #LEAVING
- BEQ CHERASE
- SKSKIPY
- MOVEBYE
- RTS
- ; THIS CODE MAKES A FOOD SPLAT ON THE SCORE
- FWLHIT LDA STATUS ; GIVE BONUS POINTS IF
- CMP #STATBON ; THIS IS A BONUS FOOD
- BEQ FWLH00
- CMP #STATHIT
- BNE NONIADEC
- DEC NUMINAIR
- NONIADEC LDA #0 just erase food in all other cases
- STA CYPOS,X
- RTS ; JMP MOVEBYE
- FWLH00 TXA
- TAY
- JSR MKSPLAT
- LDX #1 ; 100 POINTS BONUS FOR THE FOOD
- JMP ADDSCORE ; WAS JSR, FOLLOWED BY RTS
- ; RTS
- CHERASE LDA #0
- STA CYPOS,X
- STA CYPOS+1,X
- STA CYPOS+2,X
- LDA #DEAD
- STA CSTATE,X
- LDA NUMFALL
- CMP #4
- BNE CHERASE9
- ; ELSE, ALL THE CHEFS ARE GONE-- MAKE HIM RISE IMMEDIATELY
- LDA #0
- STA CACOUNT,X
- STA CACOUNT+1,X
- RTS ; JMP MOVEBYE
- CHERASE9 LDA #$1F ; SET REBIRTH TIMER
- STA CACOUNT,X ; LOW BYTE
- LDA #$01
- STA CACOUNT+1,X ; HIGH BYTE
- RTS ; JMP MOVEBYE
- ; THE FOUR BORDER DIRECTION TESTS FOLLOW.
- JSKIPX JMP SKIPX
- XRDTST LDA CDIR,X ; IF 1,2,3 SKIP X MOVEMENT
- CMP #1
- BPL MAYBE1 ; IF GREATER THAN 1, MAYBE SKIP
- LDA CXPOS,X
- JMP XOK ; ELSE IT'S ZERO, OK.
- MAYBE1 CMP #4
- BMI JSKIPX
- ZMSKIP11 LDA CXPOS,X
- JMP XOK ; ELSE DO IT.
- XLDTST LDA CDIR,X ; CAN'T BE GREATER THAN 4
- CMP #5
- BPL JSKIPX
- ZMSKIP12 LDA CXPOS,X
- JMP XOK
- JSKIPY JMP SKIPY
- YUDTST LDA STATUS ; IF HITTING SCORE, THEN THERE'S NO
- CMP #STATBON ; DIRECTION
- BEQ JSKIPY
- LDA CDIR,X ; CAN'T BE 0,1, OR 7
- CMP #7
- BEQ JSKIPY
- ZMSKIP93 CMP #2
- BMI JSKIPY
- ZMSKIP13 LDA CYPOS,X
- JMP YOK
- YDDTST LDA CDIR,X ; CAN'T BE 3,4,5
- CMP #3
- BPL MAYBE2
- LDA CYPOS,X
- JMP YOK
- MAYBE2 CMP #6
- BMI JSKIPY
- ZMSKIP19 LDA CYPOS,X
- JMP YOK
|