Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //; X = metasprite address
  2. //; A = metasprite bank
  3. updateMetaSprites:
  4.  
  5.     inx
  6.     stx.w tempLong
  7.    
  8.     ldx.w #OAMT_LOC
  9.     stx.w tempWord
  10.    
  11.     //; push metasprite bank
  12.     pha
  13.    
  14.     sep #$10
  15.    
  16.     //; push MAX_ST_ENTRIES - actor.oamIndex
  17.     ldy.b #actor.oamIndex
  18.     lda.b #MAX_ST_ENTRIES-1
  19.     sec
  20.     sbc (ADTI),y
  21.    
  22.     pha
  23.     iny
  24.    
  25.     //; get metasprite count and iterate through each one
  26.     lda (ADTI),y
  27.     tax
  28.    
  29.     -
  30.         cpx.b #0
  31.         beq +
  32.        
  33.         //; push X
  34.         ldy.b #actor.x
  35.         lda (ADTI),y
  36.         pha
  37.        
  38.         //; push Y
  39.         iny
  40.         lda (ADTI),y
  41.         pha
  42.  
  43.         //; push sprite flag
  44.         iny
  45.         lda (ADTI),y
  46.         pha
  47.        
  48.         phb
  49.        
  50.         //; bankswitch to metasprite bank
  51.         lda $06,s
  52.         pha
  53.         plb
  54.        
  55.         //; store metasprite X
  56.         ldy.b #0
  57.         lda (tempLong),y
  58.         sta.b sprCallback
  59.         iny
  60.        
  61.         //; get metasprite Y
  62.         lda (tempLong),y
  63.        
  64.         //; bankswitch back to actor space
  65.         plb
  66.        
  67.         //; metasprite Y + actor Y
  68.         clc
  69.         adc $02,s
  70.         sta $02,s
  71.        
  72.         //; metasprite X + actor X
  73.         lda.b sprCallback
  74.         adc $03,s
  75.         sta $03,s
  76.        
  77.         //; get OAM address from slot index
  78.         rep #$30
  79.         lda $04,s
  80.         and.w #$00FF
  81.         asl
  82.         asl
  83.         tay
  84.         sep #$20
  85.        
  86.         //; store calculated X and Y into OAMT
  87.         lda $03,s
  88.         sta [tempWord],y
  89.         iny
  90.         lda $02,s
  91.         sta [tempWord],y
  92.  
  93.         //; store tile flag into OAMT
  94.         iny
  95.         iny
  96.         lda $01,s
  97.         sta [tempWord],y
  98.  
  99.         //; decrement slot index
  100.         dex
  101.         clc
  102.         lda $04,s
  103.         dec
  104.         sta $04,s
  105.        
  106.         //; increment metasprite address
  107.         lda tempLong
  108.         clc
  109.         adc.b #5
  110.         sta.b tempLong
  111.        
  112.         sep #$10
  113.        
  114.         //; clean our precious stack
  115.         pla
  116.         pla
  117.         pla
  118.        
  119.         //; loop back until we've gotten every metasprite
  120.         bra -
  121.        
  122.     +
  123.    
  124.     pla
  125.     pla
  126.    
  127.     rep #$10
  128.    
  129.     rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement