Advertisement
Arnethegreat

Sprite Data routine

Oct 23rd, 2016
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.59 KB | None | 0 0
  1. org $098000
  2.  
  3. ; r1 = camera x + offset (288 right or 48 left)
  4. ; r2 = camera y - 32
  5. ; r3 = camera y + offset (272 down or 32 up)
  6. ; r4 = camera x - 48
  7. cache ; $098000 |
  8. from r1 ; $098001 |
  9. asr ; $098002 |\
  10. asr ; $098003 | |
  11. asr ; $098004 | |
  12. to r1 ; $098005 | |
  13. asr ; $098006 | |
  14. from r2 ; $098007 | |
  15. asr ; $098008 | |
  16. asr ; $098009 | |
  17. asr ; $09800A | |
  18. to r2 ; $09800B | |
  19. asr ; $09800C | | divide camera positions by 16
  20. from r3 ; $09800D | |
  21. asr ; $09800E | |
  22. asr ; $09800F | |
  23. asr ; $098010 | |
  24. to r3 ; $098011 | |
  25. asr ; $098012 | |
  26. from r4 ; $098013 | |
  27. asr ; $098014 | |
  28. asr ; $098015 | |
  29. asr ; $098016 | |
  30. to r4 ; $098017 | |
  31. asr ; $098018 |/
  32. ibt r5,#$FFFF ; $098019 |
  33. iwt r6,#$01FF ; $09801B |
  34. ibt r7,#$0016 ; $09801E |
  35. ibt r13,#$0014 ; $098020 |
  36. ibt r8,#$0000 ; $098022 |
  37. iwt r9,#$28CA ; $098024 |
  38. iwt r10,#$27CE ; $098027 | #$27CE into r10 (first word is sprite ID)
  39. lm r0,($2602) ; $09802A |\ set the value in $702602 as the ROM data bank
  40. romb ; $09802E |/
  41. lm r14,($2600) ; $098030 | r14 = ROM address
  42.  
  43. ; loop begins here
  44. CODE_098034:
  45. ldb (r9) ; $098034 |\
  46. dec r0 ; $098036 | |
  47. bmi CODE_098041 ; $098037 | |
  48. getb ; $098039 | | loop until <= 0
  49. with r14 ; $09803A | |
  50. add #3 ; $09803B | | in 7028CA table
  51. inc r8 ; $09803D | |
  52. bra CODE_098034 ; $09803E | |
  53. inc r9 ; $098040 |/
  54.  
  55. CODE_098041:
  56. inc r14 ; $098041 |
  57. to r12 ; $098042 |
  58. getbh ; $098043 |
  59. from r12 ; $098045 |
  60. sub r5 ; $098046 | r12 - r5 -> r0
  61. beq CODE_098080 ; $098047 |
  62. inc r14 ; $098049 |
  63. from r12 ; $09804A |
  64. and r6 ; $09804B |\ sprite ID -> $7027CE
  65. stw (r10) ; $09804C |/
  66. to r11 ; $09804D |
  67. getb ; $09804E | r11 = passed in table,x
  68. inc r14 ; $09804F | inc r14
  69. from r12 ; $098050 |
  70. hib ; $098051 | load high byte of r12 to r0
  71. lsr ; $098052 | multiply r0 by 2
  72. move r12,r0 ; $098053 | move r0 into r12
  73. sub r3 ; $098055 | r0 - ((camera y + offset)/16) -> r0
  74. bne CODE_098060 ; $098056 |\
  75. from r11 ; $098058 |
  76. sub r4 ; $098059 |/ r11 - ((camera x - 48)/16) -> r0
  77. bmi CODE_09805F ; $09805A |\
  78. sub r7 ; $09805C |/ r0 - r7 -> r0
  79. bmi CODE_09806B ; $09805D |\
  80.  
  81. CODE_09805F:
  82. from r11 ; $09805F |
  83.  
  84. CODE_098060:
  85. sub r1 ; $098060 |/ r11 - ((camera x + offset)/16) -> r0
  86. bne CODE_09807C ; $098061 |\
  87. from r12 ; $098063 |
  88. sub r2 ; $098064 |/ r12 - ((camera y - 32)/16) -> r0
  89. bmi CODE_09807C ; $098065 |\
  90. sub r13 ; $098067 |/ r0 - r13 -> r0
  91. bpl CODE_09807C ; $098068 |\
  92. nop ; $09806A |/
  93.  
  94. CODE_09806B:
  95. inc r10 ; $09806B |\
  96. inc r10 ; $09806C | | x tile position -> $7027D0,x
  97. from r11 ; $09806D | |
  98. stw (r10) ; $09806E |/
  99. inc r10 ; $09806F |\
  100. inc r10 ; $098070 | | y tile position -> $7027D2,x
  101. from r12 ; $098071 | |
  102. stw (r10) ; $098072 |/
  103. inc r10 ; $098073 |\
  104. inc r10 ; $098074 | | stage ID -> $7027D4,x
  105. from r8 ; $098075 | |
  106. stw (r10) ; $098076 |/
  107. inc r10 ; $098077 |\
  108. inc r10 ; $098078 | | $FF -> $7028CA + stage ID
  109. from r5 ; $098079 | | this marks stage ID as "spawned in"
  110. stb (r9) ; $09807A |/ so, don't spawn again
  111.  
  112. CODE_09807C:
  113. inc r8 ; $09807C |
  114. bra CODE_098034 ; $09807D |\ loop back up
  115.  
  116. inc r9 ; $09807F |/
  117.  
  118. CODE_098080:
  119. from r5 ; $098080 |
  120. stw (r10) ; $098081 | $FFFF -> r10
  121. stop ; $098082 |
  122. nop ; $098083 |
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement