Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //; X = metasprite address
- //; A = metasprite bank
- updateMetaSprites:
- inx
- stx.w tempLong
- ldx.w #OAMT_LOC
- stx.w tempWord
- //; push metasprite bank
- pha
- sep #$10
- //; push MAX_ST_ENTRIES - actor.oamIndex
- ldy.b #actor.oamIndex
- lda.b #MAX_ST_ENTRIES-1
- sec
- sbc (ADTI),y
- pha
- iny
- //; get metasprite count and iterate through each one
- lda (ADTI),y
- tax
- -
- cpx.b #0
- beq +
- //; push X
- ldy.b #actor.x
- lda (ADTI),y
- pha
- //; push Y
- iny
- lda (ADTI),y
- pha
- //; push sprite flag
- iny
- lda (ADTI),y
- pha
- phb
- //; bankswitch to metasprite bank
- lda $06,s
- pha
- plb
- //; store metasprite X
- ldy.b #0
- lda (tempLong),y
- sta.b sprCallback
- iny
- //; get metasprite Y
- lda (tempLong),y
- //; bankswitch back to actor space
- plb
- //; metasprite Y + actor Y
- clc
- adc $02,s
- sta $02,s
- //; metasprite X + actor X
- lda.b sprCallback
- adc $03,s
- sta $03,s
- //; get OAM address from slot index
- rep #$30
- lda $04,s
- and.w #$00FF
- asl
- asl
- tay
- sep #$20
- //; store calculated X and Y into OAMT
- lda $03,s
- sta [tempWord],y
- iny
- lda $02,s
- sta [tempWord],y
- //; store tile flag into OAMT
- iny
- iny
- lda $01,s
- sta [tempWord],y
- //; decrement slot index
- dex
- clc
- lda $04,s
- dec
- sta $04,s
- //; increment metasprite address
- lda tempLong
- clc
- adc.b #5
- sta.b tempLong
- sep #$10
- //; clean our precious stack
- pla
- pla
- pla
- //; loop back until we've gotten every metasprite
- bra -
- +
- pla
- pla
- rep #$10
- rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement