Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- print "INIT ",pc
- JSR SUB_HORZ_POS
- TYA
- STA $157C,x
- LDA #$19
- STA $1528,x
- RTL
- print "MAIN ",pc
- PHB ;\
- PHK ; | Change the data bank to the one our code is running from.
- PLB ; | This is a good practice.
- JSR SpriteCode ; | Jump to the sprite's function.
- PLB ; | Restore old data bank.
- RTL ;/ And return.
- ;===================================
- ;Sprite Function
- ;===================================
- RETURN: RTS
- LeftSpd: db $00,$9D,$A0,$A3,$A5,$A8,$AA,$B0,$B4,$B8,$BB,$BD,$C0,$C7,$C8,$C9,$CA,$D0,$D1,$D8,$D9,$E0,$E1,$F6,$F7,$F8
- RightSpd: db $00,$75,$72,$6F,$6C,$6A,$67,$5F,$58,$53,$4F,$4B,$49,$3F,$3D,$3B,$3A,$31,$30,$2F,$2E,$21,$20,$0E,$0D,$0C
- NameTable: db $11,$19,$78 ;HP:
- !NameSize = $02
- !Position = $0F24
- SpriteCode:
- JSR SUB_GFX
- PHX
- JSR DrawTilemaps ; Draw the tilemaps.
- PLX
- LDA $1528,x
- PHX
- JSR HexDec
- STX !Position+!NameSize+1
- STA !Position+!NameSize+2
- PLX
- LDA $14C8,x ;\
- CMP #$08 ; | If sprite dead,
- BNE RETURN ;/ Return.
- LDA $9D ;\
- BNE RETURN ;/ If locked, return.
- LDA $1588,x
- AND #$03
- BEQ NoFlip ; If touching an object ...
- LDA $157C,x
- EOR #$01 ; Flip direction.
- STA $157C,x
- NoFlip:
- JSR SUB_OFF_SCREEN_X0 ; Handle offscreen.
- LDY $1528,x
- LDA $157C,x
- BEQ Right
- LDA LeftSpd,y
- BRA DoSpeed
- Right:
- LDA RightSpd,y
- DoSpeed:
- STA $B6,x
- LDA #$10
- STA $AA,x
- JSL $01802A
- LDA $1594,x
- CMP #$D5
- BEQ TIME_TO_SHOOT
- INC $1594,x
- BRA SHARED
- TIME_TO_SHOOT:
- JSR DrawSmoke
- JSR SUB_FIRE_THROW
- STZ $1594,x
- SHARED:
- JSL $01802A
- JSL $03B664
- JSR GetSpriteClipping
- JSL $03B72B
- BCC NoContact
- JSR SUB_VERT_POS
- LDA $0E
- CMP #$E6
- BPL SpriteWins
- JSL $01AB99
- JSL $01AA33
- LDA #$A0
- STA $7D
- DEC $1528,x
- LDA $1528,x
- BEQ KillSprite
- LDA #$54
- STA $1DFC ; SFX When jumping on the sprite.
- RTS
- SpriteWins:
- LDA $1490
- BNE NoContact ; NOTE: Don't kill the sprite when having a star.
- JSL $00F5B7
- NoContact:
- RTS
- KillSprite:
- STZ $14C8,x ; die
- LDA #$3C
- STA $1DFC
- JSR DrawSmoke
- JSL $07FC3B
- LDA #$80
- STA $1DFB
- LDA #$FF
- STA $1493 ; activate "end level" flag
- LDA #$00
- STA $141C ; normal path
- LDA #$0B
- STA $71
- RTS
- ;==================================================================
- ;Draw Tiles To Status Bar.
- ;==================================================================
- DrawTilemaps:
- LDX #!NameSize
- DrawLoop:
- LDA NameTable,x ; Load the tile data indexed by the size.
- STA !Position,x ; .. and store to appriopriate tile.
- DEX
- BPL DrawLoop ; So far, it draws "AAAA"
- RTS ; We draw the health routine later, after pulling X.
- ; ORLY
- ;==================================================================
- ;Hex/Dec Subroutine.
- ;==================================================================
- HexDec:
- LDX #$00
- HexLoop:
- CMP #$0A ; While (A == $0A) {
- BCC NoConvo ; }
- SBC #$0A ; Else { DrawLine.(A - 10); Fail C++ ftw.
- INX ; (X + 1) }
- BRA HexLoop ; Cout << ("C++ Fail ftw");
- NoConvo: ; Oh wait where's the cin command?!
- RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; fire routine
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- XF_OFFSET: db $13,$FC
- XF_OFFSET2: db $00,$FF
- RETURN68: RTS
- SUB_FIRE_THROW: ;LDA $15A0,x ; no fire if off screen
- LDA $186C,x
- ORA $15D0,x
- BNE RETURN68
- JSL $02A9DE ; \ get an index to an unused sprite slot, return if all slots full
- BMI RETURN68 ; / after: Y has index of sprite being generated
- LDA #$01 ; \ set sprite status for new sprite
- STA $14C8,y ; /
- LDA #$B6 ;sprite to fire
- STA $009E,y
- PHY ; set x position for new sprite
- LDA $157C,x
- TAY
- LDA $E4,x
- CLC
- ADC XF_OFFSET,y
- PLY
- STA $00E4,y
- PHY ; set x position for new sprite
- LDA $157C,x
- TAY
- LDA $14E0,x
- ADC XF_OFFSET2,y
- PLY
- STA $14E0,y
- LDA $D8,x ; \ set y position for new sprite
- SEC ; | (y position of generator - 1)
- SBC #$03 ; |
- STA $00D8,y ; |
- LDA $14D4,x ; |
- SBC #$00 ; |
- STA $14D4,y ; /
- PHX ; \ before: X must have index of sprite being generated
- TYX ; | routine clears *all* old sprite values...
- JSL $07F7D2 ; | ...and loads in new values for the 6 main sprite tables
- PLX ; /
- LDA #$09
- STA $1DFC
- RETURN67: RTS ; return
- DrawSmoke: LDY #$03 ; \ find a free slot to display effect
- FINDFREE: LDA $17C0,y ; |
- BEQ FOUNDONE ; |
- DEY ; |
- BPL FINDFREE ; |
- RTS ; / return if no slots open
- FOUNDONE: LDA #$01 ; \ set effect graphic to smoke graphic
- STA $17C0,y ; /
- LDA #$1B ; \ set time to show smoke
- STA $17CC,y ; /
- LDA $D8,x ; \ smoke y position = generator y position
- STA $17C4,y ; /
- LDA $E4,x ; \ load generator x position and store it for later
- STA $17C8,y ; /
- RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; sprite clipping routine
- ; ripped and modified by Roy, then modified more by Sonikku
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- GetSpriteClipping:
- PHY
- PHX
- TXY
- LDA $00E4,y
- CLC
- ADC #$04 ; Starting X pos of sprite clipping = sprite center position - $0C ($0C pixels to the left)
- STA $04
- LDA $14E0,y
- ADC #$00
- STA $0A
- LDA #$30 ; Width of sprite clipping
- STA $06
- LDA $00D8,y
- SEC
- SBC #$20 ; Starting Y pos of sprite clipping = sprite center position - $2C ($2C pixels above)
- STA $05
- LDA $14D4,y
- SBC #$00
- STA $0B
- LDA #$30 ; Height of sprite clipping
- STA $07
- PLX
- PLY
- RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; graphics routine
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- TILEMAP: db $84,$82,$80 ; facing right
- db $A4,$A2,$A0
- db $C4,$C2,$C0
- db $80,$82,$84 ; facing left
- db $A0,$A2,$A4
- db $C0,$C2,$C4
- db $8A,$88,$86 ; facing right
- db $AA,$A8,$A6
- db $CA,$C8,$C6
- db $86,$88,$8A ; facing left
- db $A6,$A8,$AA
- db $C6,$C8,$CA
- X_OFFSET: db $00,$10,$20
- db $00,$10,$20
- db $00,$10,$20
- Y_OFFSET: db $E0,$E0,$E0
- db $F0,$F0,$F0
- db $00,$00,$00
- PROPERTIES: db $40,$40,$40
- db $40,$40,$40
- db $40,$40,$40
- db $00,$00,$00
- db $00,$00,$00
- db $00,$00,$00
- SUB_GFX: JSR GET_DRAW_INFO ; sets y = OAM offset
- LDA $157C,x
- STA $04
- ASL A
- ASL A
- ASL A
- CLC
- ADC $04
- STA $02
- PHX
- LDX #$08
- LOOP_START: PHX
- LDA X_OFFSET,x
- CLC
- ADC $00 ; \ tile x position = sprite y location ($01)
- STA $0300,y ; /
- LDA Y_OFFSET,x
- CLC
- ADC $01 ; \ tile y position = sprite x location ($00)
- STA $0301,y ; /
- TXA
- CLC
- ADC $02
- TAX
- PHX
- LDA $14
- LSR A
- LSR A
- LSR A
- AND #$01
- BNE SKIP
- TXA
- CLC
- ADC #$12
- TAX
- SKIP: LDA TILEMAP,x
- STA $0302,y
- PLX
- PHX
- LDX $15E9
- LDA $15F6,x ; tile properties xyppccct, format
- PLX
- ORA PROPERTIES,x
- ORA $64 ; add in tile priority of level
- STA $0303,y ; store tile properties
- PLX
- INY ; \ increase index to sprite tile map ($300)...
- INY ; | ...we wrote 1 16x16 tile...
- INY ; | ...sprite OAM is 8x8...
- INY ; / ...so increment 4 times
- DEX
- BPL LOOP_START
- PLX
- LDY #$02 ; \ 460 = 2 (all 16x16 tiles)
- LDA #$08 ; | A = (number of tiles drawn - 1)
- JSL $01B7B3 ; / don't draw if offscreen
- RTS ; return
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; GET_DRAW_INFO
- ; This is a helper for the graphics routine. It sets off screen flags, and sets up
- ; variables. It will return with the following:
- ;
- ; Y = index to sprite OAM ($300)
- ; $00 = sprite x position relative to screen boarder
- ; $01 = sprite y position relative to screen boarder
- ;
- ; It is adapted from the subroutine at $03B760
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- SPR_T1: db $0C,$1C
- SPR_T2: db $01,$02
- GET_DRAW_INFO: STZ $186C,x ; reset sprite offscreen flag, vertical
- STZ $15A0,x ; reset sprite offscreen flag, horizontal
- LDA $E4,x ; \
- CMP $1A ; | set horizontal offscreen if necessary
- LDA $14E0,x ; |
- SBC $1B ; |
- BEQ ON_SCREEN_X ; |
- INC $15A0,x ; /
- ON_SCREEN_X: LDA $14E0,x ; \
- XBA ; |
- LDA $E4,x ; |
- REP #$20 ; |
- SEC ; |
- SBC $1A ; | mark sprite invalid if far enough off screen
- CLC ; |
- ADC.w #$0040 ; |
- CMP.w #$0180 ; |
- SEP #$20 ; |
- ROL A ; |
- AND #$01 ; |
- STA $15C4,x ; /
- BNE INVALID ;
- LDY #$00 ; \ set up loop:
- LDA $1662,x ; |
- AND #$20 ; | if not smushed (1662 & 0x20), go through loop twice
- BEQ ON_SCREEN_LOOP ; | else, go through loop once
- INY ; /
- ON_SCREEN_LOOP: LDA $D8,x ; \
- CLC ; | set vertical offscreen if necessary
- ADC SPR_T1,y ; |
- PHP ; |
- CMP $1C ; | (vert screen boundry)
- ROL $00 ; |
- PLP ; |
- LDA $14D4,x ; |
- ADC #$00 ; |
- LSR $00 ; |
- SBC $1D ; |
- BEQ ON_SCREEN_Y ; |
- LDA $186C,x ; | (vert offscreen)
- ORA SPR_T2,y ; |
- STA $186C,x ; |
- ON_SCREEN_Y: DEY ; |
- BPL ON_SCREEN_LOOP ; /
- LDY $15EA,x ; get offset to sprite OAM
- LDA $E4,x ; \
- SEC ; |
- SBC $1A ; | $00 = sprite x position relative to screen boarder
- STA $00 ; /
- LDA $D8,x ; \
- SEC ; |
- SBC $1C ; | $01 = sprite y position relative to screen boarder
- STA $01 ; /
- RTS ; return
- INVALID: PLA ; \ return from *main gfx routine* subroutine...
- PLA ; | ...(not just this subroutine)
- RTS ; /
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; SUB_OFF_SCREEN
- ; This subroutine deals with sprites that have moved off screen
- ; It is adapted from the subroutine at $01AC0D
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- SPR_T12: db $40,$B0
- SPR_T13: db $01,$FF
- SPR_T14: db $30,$C0,$A0,$C0,$A0,$F0,$60,$90 ;bank 1 sizes
- db $30,$C0,$A0,$80,$A0,$40,$60,$B0 ;bank 3 sizes
- SPR_T15: db $01,$FF,$01,$FF,$01,$FF,$01,$FF ;bank 1 sizes
- db $01,$FF,$01,$FF,$01,$00,$01,$FF ;bank 3 sizes
- SUB_OFF_SCREEN_X1: LDA #$02 ; \ entry point of routine determines value of $03
- BRA STORE_03 ; | (table entry to use on horizontal levels)
- SUB_OFF_SCREEN_X2: LDA #$04 ; |
- BRA STORE_03 ; |
- SUB_OFF_SCREEN_X3: LDA #$06 ; |
- BRA STORE_03 ; |
- SUB_OFF_SCREEN_X4: LDA #$08 ; |
- BRA STORE_03 ; |
- SUB_OFF_SCREEN_X5: LDA #$0A ; |
- BRA STORE_03 ; |
- SUB_OFF_SCREEN_X6: LDA #$0C ; |
- BRA STORE_03 ; |
- SUB_OFF_SCREEN_X7: LDA #$0E ; |
- STORE_03: STA $03 ; |
- BRA START_SUB ; |
- SUB_OFF_SCREEN_X0: STZ $03 ; /
- START_SUB: JSR SUB_IS_OFF_SCREEN ; \ if sprite is not off screen, return
- BEQ RETURN_35 ; /
- LDA $5B ; \ goto VERTICAL_LEVEL if vertical level
- AND #$01 ; |
- BNE VERTICAL_LEVEL ; /
- LDA $D8,x ; \
- CLC ; |
- ADC #$50 ; | if the sprite has gone off the bottom of the level...
- LDA $14D4,x ; | (if adding 0x50 to the sprite y position would make the high byte >= 2)
- ADC #$00 ; |
- CMP #$02 ; |
- BPL ERASE_SPRITE ; / ...erase the sprite
- LDA $167A,x ; \ if "process offscreen" flag is set, return
- AND #$04 ; |
- BNE RETURN_35 ; /
- LDA $13 ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0756 VC:176 00 FL:205
- AND #$01 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0780 VC:176 00 FL:205
- ORA $03 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0796 VC:176 00 FL:205
- STA $01 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0820 VC:176 00 FL:205
- TAY ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0844 VC:176 00 FL:205
- LDA $1A ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0858 VC:176 00 FL:205
- CLC ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0882 VC:176 00 FL:205
- ADC SPR_T14,y ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0896 VC:176 00 FL:205
- ROL $00 ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizcHC:0928 VC:176 00 FL:205
- CMP $E4,x ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:0966 VC:176 00 FL:205
- PHP ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:0996 VC:176 00 FL:205
- LDA $1B ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdizCHC:1018 VC:176 00 FL:205
- LSR $00 ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdiZCHC:1042 VC:176 00 FL:205
- ADC SPR_T15,y ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdizcHC:1080 VC:176 00 FL:205
- PLP ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F0 P:eNvMXdizcHC:1112 VC:176 00 FL:205
- SBC $14E0,x ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1140 VC:176 00 FL:205
- STA $00 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:1172 VC:176 00 FL:205
- LSR $01 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:1196 VC:176 00 FL:205
- BCC SPR_L31 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZCHC:1234 VC:176 00 FL:205
- EOR #$80 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZCHC:1250 VC:176 00 FL:205
- STA $00 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1266 VC:176 00 FL:205
- SPR_L31: LDA $00 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1290 VC:176 00 FL:205
- BPL RETURN_35 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1314 VC:176 00 FL:205
- ERASE_SPRITE: LDA $14C8,x ; \ if sprite status < 8, permanently erase sprite
- CMP #$08 ; |
- BCC KILL_SPRITE ; /
- LDY $161A,x ;A:FF08 X:0007 Y:0001 D:0000 DB:01 S:01F3 P:envMXdiZCHC:1108 VC:059 00 FL:2878
- CPY #$FF ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdiZCHC:1140 VC:059 00 FL:2878
- BEQ KILL_SPRITE ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdizcHC:1156 VC:059 00 FL:2878
- LDA #$00 ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdizcHC:1172 VC:059 00 FL:2878
- STA $1938,y ;A:FF00 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdiZcHC:1188 VC:059 00 FL:2878
- KILL_SPRITE: STZ $14C8,x ; erase sprite
- RETURN_35: RTS ; return
- VERTICAL_LEVEL: LDA $167A,x ; \ if "process offscreen" flag is set, return
- AND #$04 ; |
- BNE RETURN_35 ; /
- LDA $13 ; \
- LSR A ; |
- BCS RETURN_35 ; /
- LDA $E4,x ; \
- CMP #$00 ; | if the sprite has gone off the side of the level...
- LDA $14E0,x ; |
- SBC #$00 ; |
- CMP #$02 ; |
- BCS ERASE_SPRITE ; / ...erase the sprite
- LDA $13 ;A:0000 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:1218 VC:250 00 FL:5379
- LSR A ;A:0016 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1242 VC:250 00 FL:5379
- AND #$01 ;A:000B X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1256 VC:250 00 FL:5379
- STA $01 ;A:0001 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1272 VC:250 00 FL:5379
- TAY ;A:0001 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1296 VC:250 00 FL:5379
- LDA $1C ;A:001A X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0052 VC:251 00 FL:5379
- CLC ;A:00BD X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0076 VC:251 00 FL:5379
- ADC SPR_T12,y ;A:00BD X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0090 VC:251 00 FL:5379
- ROL $00 ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:enVMXdizCHC:0122 VC:251 00 FL:5379
- CMP $D8,x ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0160 VC:251 00 FL:5379
- PHP ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0190 VC:251 00 FL:5379
- LDA $001D ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F2 P:eNVMXdizcHC:0212 VC:251 00 FL:5379
- LSR $00 ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:enVMXdiZcHC:0244 VC:251 00 FL:5379
- ADC SPR_T13,y ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:enVMXdizCHC:0282 VC:251 00 FL:5379
- PLP ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:envMXdiZCHC:0314 VC:251 00 FL:5379
- SBC $14D4,x ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0342 VC:251 00 FL:5379
- STA $00 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0374 VC:251 00 FL:5379
- LDY $01 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0398 VC:251 00 FL:5379
- BEQ SPR_L38 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0422 VC:251 00 FL:5379
- EOR #$80 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0438 VC:251 00 FL:5379
- STA $00 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0454 VC:251 00 FL:5379
- SPR_L38: LDA $00 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0478 VC:251 00 FL:5379
- BPL RETURN_35 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0502 VC:251 00 FL:5379
- BMI ERASE_SPRITE ;A:8AFF X:0002 Y:0000 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0704 VC:184 00 FL:5490
- SUB_IS_OFF_SCREEN: LDA $15A0,x ; \ if sprite is on screen, accumulator = 0
- ORA $186C,x ; |
- RTS ; / return
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; SUB_VERT_POS
- ; This routine determines if Mario is above or below the sprite. It sets the Y register
- ; to the direction such that the sprite would face Mario
- ; It is ripped from $03B829
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- SUB_VERT_POS: LDY #$00 ;A:25A1 X:0007 Y:0001 D:0000 DB:03 S:01EA P:envMXdizCHC:0130 VC:085 00 FL:924
- LDA $96 ;A:25A1 X:0007 Y:0000 D:0000 DB:03 S:01EA P:envMXdiZCHC:0146 VC:085 00 FL:924
- SEC ;A:2546 X:0007 Y:0000 D:0000 DB:03 S:01EA P:envMXdizCHC:0170 VC:085 00 FL:924
- SBC $D8,x ;A:2546 X:0007 Y:0000 D:0000 DB:03 S:01EA P:envMXdizCHC:0184 VC:085 00 FL:924
- CLC
- ADC #$20
- STA $0E ;A:25D6 X:0007 Y:0000 D:0000 DB:03 S:01EA P:eNvMXdizcHC:0214 VC:085 00 FL:924
- LDA $97 ;A:25D6 X:0007 Y:0000 D:0000 DB:03 S:01EA P:eNvMXdizcHC:0238 VC:085 00 FL:924
- SBC $14D4,x ;A:2501 X:0007 Y:0000 D:0000 DB:03 S:01EA P:envMXdizcHC:0262 VC:085 00 FL:924
- BPL SPR_L11 ;A:25FF X:0007 Y:0000 D:0000 DB:03 S:01EA P:eNvMXdizcHC:0294 VC:085 00 FL:924
- INY ;A:25FF X:0007 Y:0000 D:0000 DB:03 S:01EA P:eNvMXdizcHC:0310 VC:085 00 FL:924
- SPR_L11: RTS ;A:25FF X:0007 Y:0001 D:0000 DB:03 S:01EA P:envMXdizcHC:0324 VC:085 00 FL:924
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; SUB HORZ POS
- ;
- ; $B817 - horizontal mario/sprite check - shared
- ; Y = 1 if mario left of sprite??
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;org $03B817
- SUB_HORZ_POS: LDY #$00 ;A:25D0 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1020 VC:097 00 FL:31642
- LDA $94 ;A:25D0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:envMXdiZCHC:1036 VC:097 00 FL:31642
- SEC ;A:25F0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1060 VC:097 00 FL:31642
- SBC $E4,x ;A:25F0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1074 VC:097 00 FL:31642
- STA $0F ;A:25F4 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1104 VC:097 00 FL:31642
- LDA $95 ;A:25F4 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1128 VC:097 00 FL:31642
- SBC $14E0,x ;A:2500 X:0006 Y:0000 D:0000 DB:03 S:01ED P:envMXdiZcHC:1152 VC:097 00 FL:31642
- BPL LABEL16 ;A:25FF X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1184 VC:097 00 FL:31642
- INY ;A:25FF X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1200 VC:097 00 FL:31642
- LABEL16: RTS ;A:25FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:1214 VC:097 00 FL:31642
- print 'Insert size: ',bytes
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement