Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;SMB3 - Rocky Wrench
- ;by smkdan with gfx ripped by andy_k_250
- DIR: = $03
- !PROPRAM = $04
- !TEMP = $09
- ;!SET TO WRENCH SPRITE!
- !SPRITE_GEN = $35
- ;sprite table definitions
- !STATE = $1528 ;my typical state/counter duo
- !COUNTER = $1602
- !FRAMEINDEX = $1570 ;index of frame to use
- !WRENCHHOLD = $1662 ;hold wrench
- ;state defines
- !HIDE = $00 ;hiding pefore peeking
- !PEEK = $01 ;peeking, killable now
- !RISING = $02 ;rising, normal pose
- !FIRING = $03 ;firing, wait arm cocked, fire, arm forward
- !SINKING = $04 ;sinking, normal pose
- ;counter defines
- !HIDECNT = $40
- !PEEKCNT = $40
- !FIRECNT = $40
- !FIRESHT = $10
- !RISECNT = $1B
- !SINKCNT = $22
- ;frame defines
- !FRMIDLE = $00
- !FRMTHROW1 = $01
- !FRMTHROW2 = $02
- !FRMDUCK = $03
- !FRMDIE = $04
- PRINT "INIT ",pc
- LDA $14D4,x ;ypos high
- XBA
- LDA $D8,x ;ypos low
- REP #$20
- CLC
- ADC.w #$10 ;16pix under
- SEP #$20
- STA $D8,x ;new ypos low
- XBA
- STA $14D4,x ;new ypos high
- LDA #!HIDECNT ;set hiding counter
- STA !COUNTER,x
- RTL
- PRINT_TWO: "MAIN ",pc
- PHB
- PHK
- PLB
- JSR Run
- PLB
- RTL
- RETURN_I:
- RTS
- Run:
- LDA $14C8,x ;draw nothing if DIEING or spin jumped
- BEQ RETURN_I ;is dead? (one frame)
- CMP #$04
- BEQ RETURN_I ;is spin jumped? no graphics here
- LDA $14C8,x
- STA $0EF9
- JSR SUB_OFF_SCREEN_X0
- JSR GET_DRAW_INFO
- JSR GFX ;draw sprite
- LDA $14C8,x
- CMP #$08
- BNE RETURN_I ;otherwise RETURN
- LDA $9D ;locked sprites?
- BNE RETURN_I
- LDA $15D0,x ;yoshi eating?
- BNE RETURN_I
- JSL $01A7DC ;mario interact
- JSL $018032 ;sprite interact
- JSL $01801A ;no gravity yspeed update
- LDA !STATE,x ;load state
- ASL A ;x2
- TAX ;into X
- JSR (JUMPTABLE,x) ;jump to state code
- RTS
- ;TRASM's brokenness means it required the AND
- JUMPTABLE:
- dw DOHIDE&$FFFF
- dw DOPEEK&$FFFF
- dw DORISING&$FFFF
- dw DOFIRING&$FFFF
- dw DOSINKING&$FFFF
- DOHIDE:
- LDX $15E9 ;restore sprite index
- LDA #!FRMIDLE ;set idle frame
- STA !FRAMEINDEX,x
- STZ $AA,x ;halt yspd
- DEC !COUNTER,x ;just dec counter
- BNE RETURN_I
- LDA #!PEEK ;move to peek
- STA !STATE,x
- LDA #!PEEKCNT ;counter
- STA !COUNTER,x
- LDA $14D4,x ;ypos high
- XBA
- LDA $D8,x ;ypos low
- REP #$20
- SEC
- SBC.w #$04 ;4pix
- SEP #$20
- STA $D8,x ;new ypos low
- XBA
- STA $14D4,x ;new ypos high
- JSR SUB_HORZ_POS
- TYA
- STA $157C,x ;face mario
- RTS
- DOPEEK:
- LDX $15E9 ;restore sprite index
- DEC !COUNTER,x ;dec counter for peeking time
- BNE RETURN
- LDA #!RISING ;move to rising
- STA !STATE,x
- LDA #!RISECNT ;counter to rise
- STA !COUNTER,x
- RTS
- DORISING:
- LDX $15E9 ;restore sprite index
- DEC !COUNTER,x ;dec counter for rising time
- BEQ GOFIRING
- LDA #$F8 ;set rising yspd
- STA $AA,x
- RTS
- GOFIRING:
- STZ $AA,x ;halt yspd
- LDA #!FIRING ;set fire status
- STA !STATE,x
- LDA #!FIRECNT ;total fire time
- STA !COUNTER,x
- RTS
- DOFIRING:
- LDX $15E9 ;restore sprite index
- DEC !COUNTER,x ;dec counter for duration of firing
- BEQ GOSINKING
- ;go through poses and generate sprite
- LDA !COUNTER,x ;frame depending on count
- CMP #$20 ;less than 20: arm cocked
- BEQ GENFIRE ;half = fire
- BCS PREFIRE ;less = holding
- ;PostFire
- RTS
- PREFIRE:
- LDA #!FRMTHROW1 ;first throwing frame
- STA !FRAMEINDEX,x
- LDA #$01 ;set holding wrench
- STA !WRENCHHOLD,x
- RTS
- GENFIRE:
- LDA #!FRMTHROW2 ;second throwing frame
- STA !FRAMEINDEX,x
- STZ !WRENCHHOLD,x
- JSR GENERATEC ;generate projectile
- RTS
- GOSINKING:
- LDA #!FRMIDLE ;idle frame
- STA !FRAMEINDEX,x
- LDA #!SINKING ;set sinking status
- STA !STATE,x
- LDA #!SINKCNT ;duration of sinking
- STA !COUNTER,x
- RTS
- DOSINKING:
- LDX $15E9 ;restore sprite index
- DEC !COUNTER,x ;dec counter for sinking time
- BEQ GOHIDE
- LDA #$08 ;set sinking yspd
- STA $AA,x
- RTS
- GOHIDE:
- LDA #!HIDE ;set hide state
- STA !STATE,x
- LDA #!HIDECNT ;duration of hiding
- STA !COUNTER,x
- RTS
- RETURN:
- RTS
- ;=====
- TILEMAP: db $00,$24 ;idle; two tiles
- db $02,$24 ;throwing 1
- db $04,$24 ;throwing 2
- db $08,$24 ;ducking
- db $06,$26 ;DIEING
- YDISP: db $00,$10 ;only possible combination
- GFX:
- LDA $14C8,x ;DIEING
- CMP #$02
- BEQ DIEING
- CMP #$03
- BEQ DIEING
- BRA NOTDIEING
- DIEING:
- STZ !WRENCHHOLD,x ;no holding wrench
- LDA #!FRMDIE
- STA !FRAMEINDEX,x ;set DIEING frame index
- LDA $14 ;toggle direction
- LSR A
- LSR A ;every 4th frame
- AND #$01
- STA $157C,x
- NOTDIEING:
- LDA !FRAMEINDEX,x;set appropriate frame index
- ASL A ;2 frames
- STA !TEMP
- LDA $15F6,x ;properties...
- STA !PROPRAM
- LDA $157C,x ;direction...
- BEQ NOFLIP
- LDA #$40 ;set xflip
- TSB !PROPRAM
- NOFLIP:
- LDA !WRENCHHOLD,x ;draw wrench?
- BEQ NOWRENCH
- ;draw wrench tile
- LDA $157C,x ;direction into X
- TAX
- LDA $00
- CLC
- ADC WRENCHXDISP,x
- STA $0300,y
- LDA $01
- CLC
- ADC #!WRENCHYDISP
- STA $0301,y
- LDA #!WRENCHTILE
- STA $0302,y
- LDA #!WRENCHPROP
- STA $0303,y
- INY ;next tile
- INY
- INY
- INY
- LDX $15E9 ;restore sprite index
- NOWRENCH:
- LDX #$00 ;reset loop counter
- OAM_LOOP:
- LDA $00
- STA $0300,y ;static ypos
- LDA $01
- CLC
- ADC YDISP,x
- STA $0301,y ;not static ypos
- PHX
- LDX !TEMP
- LDA TILEMAP,x
- STA $0302,y ;chr
- PLX
- LDA !PROPRAM
- ;ORA $64
- STA $0303,y ;properties
- INY
- INY
- INY
- INY ;next tile
- INC !TEMP ;increment frame index
- INX ;next loop
- CPX #$02 ;2 tiles
- BNE OAM_LOOP
- LDX $15E9 ;restore sprite index
- LDA !WRENCHHOLD,x
- TAY
- LDA TILESCOUNT,y
- LDY #$02 ;16x16
- JSL $01B7B3 ;reserve
- RTS
- WRENCHXDISP: db $02,$04
- !WRENCHYDISP = $F6
- !WRENCHTILE = $0A
- !WRENCHPROP = 03
- TILESCOUNT: db $01,$02 ;2 no wrench, 3 with
- ;generate custom sprite
- ;======================
- GENPOS: dw $0008,$FFFC
- GENERATEC:
- JSL $02A9E4 ;grab free sprite slot
- BMI RETURNGC ;RETURN if none left...
- LDA #$08
- STA $14C8,y ;normal status
- LDA #!SPRITE_GEN ;load sprite to generate...
- PHX ;only xreg can be used with long absolute indexed
- TYX ;Y->X
- STA $7FAB9E,X
- TXY ;X->Y
- PLX ;and restore
- TYX ;new sprite slot into X
- JSL $07F7D2 ;create
- JSL $0187A7
- LDA #$88 ;set as custom sprite
- STA $7FAB10,X
- LDX $15E9 ;restore sprite index
- LDA $E4,x ;store 16bits xposition at $00
- STA $00
- LDA $14E0,x
- STA $01
- PHY
- LDY $157C,x ;direction of thrower
- TYA
- ASL A ;16bits
- TAY
- REP #$20
- LDA GENPOS,y
- CLC
- ADC $00
- SEP #$20
- PLY
- STA $00E4,y ;store ypositions
- XBA
- STA $14E0,y
- LDA $D8,x
- SEC
- SBC #$0E ;-14
- STA $00D8,y ;Ypos
- LDA $14D4,x
- SBC #$00 ;transfer carry
- STA $14D4,y ;same screen
- LDA $157C,x
- STA $157C,y ;set direction
- RETURNGC:
- RTS
- ;=================
- ;BORROWED ROUTINES
- ;=================
- ;GET_DRAW_INFO
- ;==============
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; $B760 - graphics routine helper - shared
- ; sets off screen flags and sets index to OAM
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- 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.w $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_HORZ_POS
- ; This routine determines which side of the sprite Mario is on. It sets the Y register
- ; to the direction such that the sprite would face Mario
- ; It is ripped from $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 $D1 ;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 $D2 ;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 SPR_L16 ;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
- SPR_L16: RTS ;A:25FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:1214 VC:097 00 FL:31642
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement