Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Foliage the Para-Plant
- ;; For Morton's Empire
- ;;;;;;;;;;;;;;;;;;;;;;;;;
- !RAM_SprClipXDisp = $7FABAA ; 12 bytes of free RAM used for the X displacement of a custom sprite clipping field
- !RAM_SprClipYDisp = $7FABB6 ; 12 bytes of free RAM used for the Y displacement of a custom sprite clipping field
- !RAM_SprClipWidth = $7FABC2 ; 12 bytes of free RAM used for the width of a custom sprite clipping field
- !RAM_SprClipHeight = $7FABCE ; 12 bytes of free RAM used for the height of a custom sprite clipping field
- ;;; INIT Routine wrapper
- print "INIT ",pc
- LDA #$6F ;\ Set timer
- STA $1540,x ; |
- LDA #$DF ; |
- STA $15AC,x ;/
- LDA #$0F
- STA $154C,x
- STZ $1528,x ;/
- STZ $18BB
- STZ $151C,x
- LDA #$F0
- STA !RAM_SprClipXDisp,x
- LDA #$00
- STA !RAM_SprClipYDisp,x
- LDA #32
- STA !RAM_SprClipWidth,x
- LDA #48
- STA !RAM_SprClipHeight,x
- PHY
- JSR SubHorzPos
- TYA
- STA $157C,x
- PLY
- RTL
- ;;; Main Routine wrapper
- print "MAIN ",pc
- PHB
- PHK
- PLB
- JSR MainRt
- PLB
- RTL
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;Main routine
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MainRt:
- JSR SubGFX
- LDA $14C8,x ;\ Return if status ain't normal
- CMP #$08 ; |
- BNE Return ;/
- LDA $9D ;\ If sprites locked, return
- BNE Return ;/
- LDA $1528,x
- CMP #$04
- BCS +++
- JSL $01A7DC
- BCC +++
- LDA $7D
- BMI +
- LDA $140D
- ORA $187A
- BEQ +
- BRA ++
- +
- JSL $00F5B7
- BRA +++
- ++
- LDA #$02
- STA $1DF9
- JSL $01AA33
- JSL $01AB99
- +++
- LDA $C2,x ;\ Set pointers
- JSL $0086DF ;/
- ;pointers:
- dw FaceMario ; State 0: Mario faces the plant in a fght pose
- dw SetX ; State 1: Set up X positions
- dw Fireballs ; State 2: Rising (fireballs and go up??)
- dw Bombs ; State 3: Rising (bombs and go up??)
- dw Hit ; State 4: Get hit
- dw Ded ; State 5: Dead
- dw lol
- dw FireAtkSet
- dw FireAtk
- RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;State 0: Facing Mario
- FaceMario:
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- LDY #$00
- LDA $15AC,x ;\ Continue if facing time is over
- BEQ .go ;/
- STZ $76 ;\
- STZ $7B ; | Lock player
- STZ $7D ;/
- LDA #$B5 ;\ Set the player pose
- STA $13E0 ;/
- LDA $154C,x
- BEQ +
- RTS
- +
- LDA #$04
- STA $1DF9
- LDA $1540,x ;\ Set X Speed depending on time
- BNE + ; |
- INY ;/
- +
- LDA Yspd,y
- STA $AA,x
- JSL $01802A
- RTS
- .go
- LDA #$02
- STA $15AC,x
- INC $C2,x
- Return:
- RTS
- Yspd: db $FA,$EC
- AngryYSpd: db $F0,$DC
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;State 1: Set up X Positions
- SetX:
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- LDA $15AC,x
- BNE .done
- LDA #$6F
- STA $1540,x
- LDA $1528,x
- CMP #$02
- BCS +
- LDA #$45
- STA $154C,x
- LDA #$D5
- STA $15AC,x
- BRA ++
- + LDA #$2F
- STA $154C,x
- LDA #$95
- STA $15AC,x
- LDA $1528,x
- CMP #$02
- BCS .newloop
- ++ LDA #$05
- JSR Random
- TAY
- LDA attack,y
- STA $C2,x
- RTS
- .newloop
- LDA #$05
- JSR Random
- TAY
- LDA angryatk,y
- STA $C2,x
- RTS
- .done
- LDA #$02
- JSR Random
- TAY
- LDA XPos,y ;\
- STA $E4,x ; | Set sprite position
- LDA #$01 ; |
- STA $14D4,x ; |
- LDA #$80 ; |
- STA $D8,x ;/
- LDA #$04
- STA $1DF9
- RTS
- XPos: db $40,$80,$C0
- attack: db $02,$03,$03,$03,$02,$02
- angryatk: db $02,$02,$03,$03,$07,$07
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;State 2: Rise
- Fireballs:
- Bombs:
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- LDA $15AC,x
- BEQ .Return
- LDY #$00
- +
- LDA $1540,x
- BNE +
- INY
- +
- LDA $1528,x
- CMP #$02
- BCS +
- LDA Yspd,y ;\ Rise
- STA $AA,x ;/
- JSL $01802A
- BRA ++
- + LDA AngryYSpd,y
- STA $AA,x
- JSL $01802A
- ;attacks
- ++ LDA $1564,x
- BNE +
- JSR BobOmb
- +
- LDA $C2,x
- CMP #$02
- BEQ .Fire
- LDA $154C,x
- BNE +
- LDY $18BB
- LDA .Spr,y
- JSR Spawn
- + RTS
- .Spr db $14,$40
- .Return
- LDA #$02
- STA $15AC,x
- LDA #$04
- STA $1DF9
- LDA #$01
- STA $C2,x
- .Fire
- LDA $154C,x
- BNE +
- LDA #$10
- JSR SpitFire
- LDA #$F0
- JSR SpitFire
- + RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; State 5: Fire Attack
- FireAtkSet:
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- LDA #$02
- JSR Random
- TAY
- LDA XPos,y ;\
- STA $E4,x ; | Set sprite position
- LDA #$D0
- STA $D8,x
- STZ $14D4,x
- INC $C2,x
- RTS
- FireAtk:
- JSR DownGraphics
- LDA $15AC,x
- BEQ .Return
- LDY #$00
- LDA $1540,x
- BNE +
- INY
- +
- LDA DownYspd,y ;\ Rise
- STA $AA,x ;/
- JSL $01802A
- LDA $1564,x
- BNE +
- JSR BobOmb
- +
- LDA $154C,x
- BNE +
- JSR FireSpawn
- + RTS
- .Return
- LDA #$02
- STA $15AC,x
- LDA #$04
- STA $1DF9
- LDA #$01
- STA $C2,x
- RTS
- DownYspd: db $10,$24
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; State 3: Get hit
- Hit:
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- JSR FlashGFX
- LDA $154C,x
- BEQ .Done
- LDY #$00
- LDA $1540,x
- CMP #$2F
- BCC +
- INY
- +
- LDA speedb,y ;\ Set faster Y speed
- STA $AA,x ;/
- JSL $01802A
- RTS
- .Done
- LDA #$02
- STA $15AC,x
- LDA #$01
- STA $C2,x
- RTS
- speedb: db $E9,$00
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; State 4: Die
- Ded:
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- LDA #$F0
- STA $AA,x
- JSL $01802A
- JSR KillSprites
- LDA #$35
- STA $15AC,x
- LDA $D8,x
- CMP #$21
- BCS +
- INC $C2,x
- + RTS
- lol:
- JSR DownGraphics
- STZ $AA,x
- JSL $01802A
- LDA $15AC,x
- BEQ +
- LDA #$30
- STA $154C,x
- RTS
- +
- JSR DownGraphics
- LDA $154C,x
- BEQ +
- LDA #$23
- STA $1DF9
- RTS
- + LDA #$45
- STA $AA,x
- JSL $01802A
- JSR DownGraphics
- LDA #$80
- STA $1DFB
- LDA #$FF
- STA $1493 ; activate "end level" flag
- LDA #$00
- STA $141C ; normal path
- LDA #$0B
- STA $71
- RTS
- ;==================================================================
- ; Spit Fireball Subroutine
- ;==================================================================
- SpitFire:
- XBA
- LDA $1564,x
- BNE +
- JSR BobOmb
- +
- LDA $1528,x
- CMP #$02
- BCC +
- LDA #$35
- STA $154C,x
- BRA ++
- + LDA #$50 ;\ Set a timer
- STA $154C,x ;/
- ++
- LDA #$06
- STA $1DFC
- LDY #$07 ; 8 extended sprite indexes to loop through
- - LDA $170B,y ; check this slot
- BEQ + ; if the slot is free, we can use it for a fireball
- DEY ; if not, decrement the index
- BPL - ; and try again
- RTS
- +
- LDA $1528,x
- CMP #$02
- BCC +
- LDA #$04 ; extended sprite number = 0B
- STA $170B,y ; piranha fireball
- BRA ++
- + LDA #$0B ; extended sprite number = 0B
- STA $170B,y ; piranha fireball
- ++ LDA $E4,x ; sprite X position
- SEC
- SBC #8
- STA $171F,y
- LDA $14E0,x
- STA $1733,y
- LDA $D8,x
- STA $1715,y ; same Y position as the plant
- LDA $14D4,x
- STA $1729,y
- LDA #$D0 ; extended sprite Y speed = D0
- STA $173D,y
- XBA
- STA $1747,y
- RTS
- ;============;
- ;RNG by 1024
- ;============;
- Random:
- PHX
- PHP
- SEP #$30
- PHA
- JSL $01ACF9
- PLX
- CPX #$FF
- BNE NORMALRT
- LDA $148D
- BRA ENDRANDOM
- NORMALRT:
- INX
- LDA $148D
- STA $4202
- STX $4203
- NOP #4
- LDA $4217
- ENDRANDOM:
- PLP
- PLX
- RTS
- ;============================
- FireSpawn:
- ;============================
- PHA : PHX : PHY
- LDA $1564,x
- BNE +
- JSR BobOmb
- +
- PLY : PLX
- LDA #$C0
- STA $154C,x
- LDA #$06
- STA $1DFC
- PLA
- LDA $186C,x
- BNE EndSpawn
- JSL $02A9DE
- BMI EndSpawn
- LDA #$01 ; Sprite state ($14C8,x).
- STA $14C8,y
- PHX
- TYX
- LDA #$6A ; This the sprite number to spawn.
- STA $7FAB9E,x
- PLX
- LDA $E4,x
- SEC
- SBC #8
- STA $00E4,y
- LDA $14E0,x
- STA $14E0,y
- LDA $D8,x
- CLC
- ADC #24
- STA $00D8,y
- LDA $14D4,x
- INC
- STA $14D4,y
- PHX
- TYX
- JSL $07F7D2
- JSL $0187A7
- LDA #$08
- STA $7FAB10,x
- PLX
- EndSpawn:
- RTS
- ;============================
- KillSprites:
- ;============================
- LDY #$09 ; setup loop
- - LDA $14C8,y ;\ if sprite non-existent,
- BEQ ++ ;/ branch
- LDA.w $9E,y ;
- CMP #$A9 ;\ if sprite is Reznor,
- BEQ ++ ;/ branch
- CMP #$29 ;\ if sprite is Koopa Kid,
- BEQ ++ ;/ branch
- CMP #$A0 ;\ if sprite is Bowser,
- BEQ ++ ;/ branch
- CMP #$C5 ;\ if sprite is Big Boo Boss,
- BEQ ++ ;/ branch
- LDA $7FAB9E,x ;\ if custom sprite is same number as this one (i.e. one of the dummies),
- PHX ; |
- TYX ; |
- CMP $7FAB9E,x ; |
- BEQ + ;/ branch
- LDA #$04 ;\ set sprite status (killed by spinjump)
- STA $14C8,y ;/
- LDA #$1F ;\ set time to show smoke cloud
- STA $1540,y ;/
- + PLX
- ++ DEY ; decrease sprite index
- BPL - ; if still sprites left to check, branch
- RTS ; return
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Spawn Sprite
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- SprXPos: db $10,$D0
- Spawn:
- XBA
- PHA : PHX : PHY
- LDA $1564,x
- BNE +
- JSR BobOmb
- +
- PLY : PLX
- LDA #$C0
- STA $154C,x
- PLA
- ;Spawn a normal sprite.
- ;Replace !SpriteNumber with the number of the sprite.
- LDA $186C,x
- BNE .EndSpawn
- JSL $02A9DE
- BMI .EndSpawn
- LDA #$01
- STA $14C8,y
- XBA
- STA $009E,y
- LDA #$01
- JSR Random
- TAX
- LDA SprXPos,x
- STA $00E4,y
- LDA $14E0,x
- STA $14E0,y
- LDA #$00
- STA $00D8,y
- LDA #$01
- STA $14D4,y
- PHX
- TYX
- JSL $07F7D2
- PLX
- LDA $18BB
- BNE +
- INC $18BB
- .EndSpawn
- RTS
- + DEC $18BB : RTS
- ;==========================
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Be killed by bob-ombs
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- BobOmb:
- LDY #$09 ; \ Loop over sprites:
- --
- LDA $1534,y ; \ Bomb-omb is exploding!
- BNE .HandleExplode ; /
- -
- DEY ; |
- BPL -- ; /
- .ReturnBob
- RTS ; Return
- .HandleExplode
- LDA $00E4,Y ; \
- SEC ; | This is all mikey's code...
- SBC #$1A ; |
- STA $00 ; |
- LDA $14E0,Y ; | ...I don't know what it does...
- SBC #$00 ; |
- STA $08 ; |
- LDA #$44 ; | ...lols...
- STA $02 ; |
- LDA $00D8,Y ; |
- STA $01 ; | ...but it seems to detect item proximity...
- LDA $14D4,Y ; |
- STA $09 ; |
- LDA #$10 ; | ...so I'm using it for the bob-omb check.
- STA $03 ; |
- JSL $03B69F ; |
- JSL $03B72B ; /
- BCC - ; If not close to bomb, go back to main loop
- LDA $14C8,y ; \
- CMP #$08 ; | If the bob-omb is dead, don't count it (this is important!!)
- BNE .ReturnBob ; /
- LDA #$A0 ; \ Grant brief immunity to bombs
- STA $1564,x ; /
- INC $1528,x ; Increase hit counter
- LDA $1528,x
- CMP #$04
- BCS +
- LDA #$C0
- EOR $D8,x
- STA $154C,x
- LDA #$28 ; \ Play hit sound
- STA $1DFC ; /
- LDA #$04
- STA $C2,x
- BRA ++
- +
- LDA #$28
- STA $1DFC
- LDA #$05
- STA $C2,x
- ++ RTS
- ;====================================================
- ;================Graphics Routine====================
- ;====================================================
- ;Tables for Frames:
- ;############### Tables for FPP1 #############
- PROPERTIES_FPP1: db $09,$09,$49,$49,$0B,$0B
- TILEMAP_FPP1: db $C0,$E0,$A0,$EE,$88,$8A
- XDISP_FPP1: db $F0,$00,$00,$F0,$F0,$00
- YDISP_FPP1: db $00,$00,$10,$10,$20,$20
- ;############### Tables for FPP2 #############
- PROPERTIES_FPP2: db $09,$09,$09,$09,$0B,$0B
- TILEMAP_FPP2: db $C4,$86,$A4,$A6,$8C,$8E
- XDISP_FPP2: db $F0,$00,$F0,$00,$F0,$00
- YDISP_FPP2: db $00,$00,$10,$10,$20,$20
- SubGFX:
- JSR Main_Start
- RTS
- ;########################################################################
- Main_Start:
- LDA $14
- LSR A
- LSR A
- LSR A
- AND #$01
- Main_Frame_1:
- CMP #$00
- BNE Main_Frame_2
- JSR FPP1_Start
- RTS
- Main_Frame_2:
- CMP #$01
- BNE Main_End_Code
- JSR FPP2_Start
- Main_End_Code:
- RTS
- ;########################################################################
- FPP1_Start:
- JSR GetDrawInfo
- PHX
- LDX #$05
- Loop_FPP1:
- LDA $00
- CLC
- ADC XDISP_FPP1,x
- STA $0300,y
- LDA $01
- CLC
- ADC YDISP_FPP1,x
- STA $0301,y
- LDA TILEMAP_FPP1,x
- STA $0302,y
- LDA PROPERTIES_FPP1,x
- ORA $64
- STA $0303,y
- ++
- INY
- INY
- INY
- INY
- DEX
- BPL Loop_FPP1
- PLX
- LDY #$02
- LDA #$05
- JSL $01B7B3
- RTS
- ;########################################################################
- FPP2_Start:
- JSR GetDrawInfo
- PHX
- LDX #$05
- Loop_FPP2:
- LDA $00
- CLC
- ADC XDISP_FPP2,x
- STA $0300,y
- LDA $01
- CLC
- ADC YDISP_FPP2,x
- STA $0301,y
- LDA TILEMAP_FPP2,x
- STA $0302,y
- LDA PROPERTIES_FPP2,x
- ORA $64
- STA $0303,y
- INY
- INY
- INY
- INY
- DEX
- BPL Loop_FPP2
- PLX
- LDY #$02
- LDA #$05
- JSL $01B7B3
- RTS
- ;########################################################################
- ;====================================================
- ;================Graphics Routine====================
- ;====================================================
- ;Tables for Frames:
- ;############### Tables for FPP1 #############
- PROPERTIES_Flash1: db $05,$05,$45,$45,$0B,$0B
- TILEMAP_Flash1: db $C0,$E0,$A0,$EE,$88,$8A
- XDISP_Flash1: db $F0,$00,$00,$F0,$F0,$00
- YDISP_Flash1: db $00,$00,$10,$10,$20,$20
- ;############### Tables for FPP2 #############
- PROPERTIES_Flash2: db $05,$05,$05,$05,$0B,$0B
- TILEMAP_Flash2: db $C4,$86,$A4,$A6,$8C,$8E
- XDISP_Flash2: db $F0,$00,$F0,$00,$F0,$00
- YDISP_Flash2: db $00,$00,$10,$10,$20,$20
- FlashGFX:
- JSR MainFlash_Start
- RTS
- ;########################################################################
- MainFlash_Start:
- LDA $14
- LSR A
- LSR A
- LSR A
- AND #$01
- MainFlash_Frame_1:
- CMP #$00
- BNE MainFlash_Frame_2
- JSR Flash1_Start
- RTS
- MainFlash_Frame_2:
- CMP #$01
- BNE MainFlash_End_Code
- JSR Flash2_Start
- MainFlash_End_Code:
- RTS
- ;########################################################################
- FlashTable:
- db $08,$08,$0C,$0C,$0C,$06,$06,$06
- Flash1_Start:
- JSR GetDrawInfo
- PHX
- LDX #$05
- Loop_Flash1:
- LDA $00
- CLC
- ADC XDISP_Flash1,x
- STA $0300,y
- LDA $01
- CLC
- ADC YDISP_Flash1,x
- STA $0301,y
- LDA TILEMAP_Flash1,x
- STA $0302,y
- LDA PROPERTIES_Flash1,x
- ORA $64
- STA $0303,y
- INY
- INY
- INY
- INY
- DEX
- BPL Loop_Flash1
- PLX
- LDY #$02
- LDA #$05
- JSL $01B7B3
- RTS
- ;########################################################################
- Flash2_Start:
- JSR GetDrawInfo
- PHX
- LDX #$05
- Loop_Flash2:
- LDA $00
- CLC
- ADC XDISP_Flash2,x
- STA $0300,y
- LDA $01
- CLC
- ADC YDISP_Flash2,x
- STA $0301,y
- LDA TILEMAP_Flash2,x
- STA $0302,y
- LDA PROPERTIES_Flash2,x
- ORA $64
- STA $0303,y
- INY
- INY
- INY
- INY
- DEX
- BPL Loop_Flash2
- PLX
- LDY #$02
- LDA #$05
- JSL $01B7B3
- RTS
- ;########################################################################
- ;====================================================
- ;================Graphics Routine====================
- ;====================================================
- ;Tables for Frames:
- ;############### Tables for Frame1 #############
- PROPERTIES_Frame1: db $AB,$AB,$A9,$A9,$A9,$A9
- TILEMAP_Frame1: db $88,$8A,$A0,$EE,$C0,$E0
- XDISP_Frame1: db $F0,$00,$F0,$00,$F0,$00
- YDISP_Frame1: db $0,$0,$10,$10,$20,$20
- ;############### Tables for Frame2 #############
- PROPERTIES_Frame2: db $AB,$AB,$A9,$A9,$A9,$A9
- TILEMAP_Frame2: db $8C,$8E,$A4,$A6,$C4,$86
- XDISP_Frame2: db $F0,$00,$F0,$00,$F0,$00
- YDISP_Frame2: db $00,$00,$10,$10,$20,$20
- DownGraphics:
- JSR Down_Start
- RTS
- ;########################################################################
- Down_Start:
- LDA $14
- LSR A
- LSR A
- LSR A
- LSR A
- LSR A
- AND #$01
- Down_Frame_1:
- CMP #$00
- BNE Down_Frame_2
- JSR Frame1_Start
- BRA Down_End_Code
- Down_Frame_2:
- CMP #$01
- BNE Down_Frame_3
- JSR Frame2_Start
- BRA Down_End_Code
- Down_Frame_3:
- Down_End_Code:
- ;Your Code for Down
- ;Hallo
- RTS
- ;########################################################################
- Frame1_Start:
- JSR GetDrawInfo
- PHX
- LDX #$05
- Loop_Frame1:
- LDA $00
- CLC
- ADC XDISP_Frame1,x
- STA $0300,y
- LDA $01
- CLC
- ADC YDISP_Frame1,x
- STA $0301,y
- LDA TILEMAP_Frame1,x
- STA $0302,y
- LDA PROPERTIES_Frame1,x
- ORA $64
- STA $0303,y
- INY
- INY
- INY
- INY
- DEX
- BPL Loop_Frame1
- PLX
- LDY #$02
- LDA #$05
- JSL $01B7B3
- RTS
- ;########################################################################
- Frame2_Start:
- JSR GetDrawInfo
- PHX
- LDX #$05
- Loop_Frame2:
- LDA $00
- CLC
- ADC XDISP_Frame2,x
- STA $0300,y
- LDA $01
- CLC
- ADC YDISP_Frame2,x
- STA $0301,y
- LDA TILEMAP_Frame2,x
- STA $0302,y
- LDA PROPERTIES_Frame2,x
- ORA $64
- STA $0303,y
- INY
- INY
- INY
- INY
- DEX
- BPL Loop_Frame2
- PLX
- LDY #$02
- LDA #$05
- JSL $01B7B3
- RTS
- ;########################################################################
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;Misc routines
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; $B760 - graphics routine helper - shared
- ; sets off screen flags and sets index to OAM
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;org $03B75C
- TABLE1: db $0C,$1C
- TABLE2: db $01,$02
- GetDrawInfo: 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 TABLE1,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 TABLE2,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 HORZ POS
- ;
- ; $B817 - horizontal mario/sprite check - shared
- ; Y = 1 if mario left of sprite??
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- SubHorzPos: 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement