Romano338

Ceiling thwimp

Jul 30th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.16 KB | None | 0 0
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;
  3. ; Ceiling Thwimp
  4. ; by Mandew
  5. ; based on mikeyk's Thwimp disassembly
  6. ;
  7. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  8.  
  9. ; DEFINES
  10.  
  11. !MaxFallSpeed = $C0
  12. !JumpSpeed = #$60
  13.  
  14. ; GRAPHICS
  15.  
  16. !Tile = $A2
  17.  
  18. ; SPRITE TABLES
  19.  
  20. !SpriteYSpeed = !AA
  21. !SpriteXSpeed = !B6
  22. !SpriteBehavior = !C2
  23. !SpriteStatus = !14C8
  24. !SpriteStunTimer = !1528
  25. !SpriteObjectsStatus = !1588
  26. !SpriteSlopeStatus = !15B8
  27. !SpriteYPosLo = !D8
  28. !SpriteYPosHi = !14D4
  29.  
  30.  
  31. ; ENGINE
  32.  
  33. !LockFlag = $9D
  34.  
  35. ; ROUTINES
  36. !MarioInteract = $01A7DC
  37. !UpdateYPos = $01801A
  38. !UpdateXPos = $018022
  39. !ObjectsInteract = $019138
  40.  
  41. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  42. ; CODE START
  43. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  44.  
  45.  
  46. print "INIT ",pc
  47. RTL
  48. print "MAIN ",pc
  49. PHB
  50. PHK
  51. PLB
  52. JSR MainCode
  53. PLB
  54. RTL
  55.  
  56. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  57. ; Main
  58. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  59. Return:
  60. LDA #$01 ;x movement related
  61. JSL $018042 ; I don't know what this is for, but it sounds important
  62. RTS
  63.  
  64. MainCode:
  65. JSR DrawGFX
  66.  
  67. LDA !SpriteStatus,x
  68. CMP #$08
  69. BNE Return
  70. LDA !LockFlag
  71. BNE Return
  72. LDY #$00
  73. %SubOffScreen()
  74. JSL !MarioInteract
  75. JSL !UpdateYPos
  76. JSL !UpdateXPos
  77. JSL !ObjectsInteract
  78.  
  79. LDA !SpriteYSpeed,x
  80. ;BEQ YoureFine
  81. BPL GoingDownwards
  82.  
  83. ;YoureFine:
  84. CMP #$C0
  85. BCC MaximumSpeed
  86.  
  87. SEC
  88. SBC #$08
  89. BRA CheckCeilings
  90.  
  91. GoingDownwards:
  92. SEC
  93. SBC #$03
  94. BRA CheckCeilings
  95.  
  96. MaximumSpeed:
  97. LDA #$C0
  98.  
  99. CheckCeilings:
  100. STA !SpriteYSpeed,x
  101.  
  102. LDA !SpriteObjectsStatus,x
  103. AND #$04
  104. BEQ CheckFloors
  105. LDA #$F0
  106. STA !SpriteYSpeed,x
  107.  
  108. CheckFloors:
  109.  
  110. LDA !SpriteObjectsStatus,x
  111. AND #$08
  112. BEQ Return2
  113.  
  114. LDA !SpriteYSpeed,x
  115.  
  116. BPL NotShtick
  117. Shtick:
  118. STZ !SpriteXSpeed,x
  119. STZ !SpriteYSpeed,x
  120.  
  121. JSR CeilingShtick
  122.  
  123.  
  124. NotShtick:
  125.  
  126.  
  127. LDA !SpriteStunTimer,x
  128. BEQ SetTimer ; If this branches, that means the timer hasn't been set yet.
  129. DEC
  130. STA !SpriteStunTimer,x
  131. BNE Return2
  132.  
  133. LDA #$60
  134. STA !SpriteYSpeed,x
  135.  
  136. INC !SpriteBehavior,x
  137. LDA !SpriteBehavior,x
  138. LSR
  139. LDA #$10
  140. BCC GoingRight
  141. GoingLeft:
  142. LDA #$F0
  143. GoingRight:
  144. STA !SpriteXSpeed,x
  145. BRA Return2
  146.  
  147. SetTimer:
  148. LDA #$01 ;
  149. STA $1DF9|!Base2 ; Play 'thump' sound (Thwimp has landed)
  150. LDA #$10
  151. STA !SpriteStunTimer,x ; Set timer for next jump
  152.  
  153. Return2:
  154. LDA #$01 ;x movement related
  155. JSL $018042 ; I don't know what this is for, but it sounds important
  156. RTS
  157.  
  158. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  159. ;
  160. ;
  161. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  162.  
  163. CeilingShtick:
  164. LDA !SpriteYPosLo,x
  165. AND #$F0
  166. CLC
  167. ADC #$0E
  168. STA !SpriteYPosLo,x
  169. LDA !SpriteYPosHi,x
  170. ADC #$00
  171. STA !SpriteYPosHi,x
  172.  
  173. RTS
  174.  
  175. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  176. ; Sub_9A04
  177. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  178.  
  179. Sub_9A04:
  180. LDA !SpriteObjectsStatus,x
  181. BMI Sub_9A04_L1
  182. LDA #$00
  183. LDY !SpriteSlopeStatus,x
  184. BEQ Sub_9A04_L2
  185. Sub_9A04_L1:
  186. LDA #$E8
  187. Sub_9A04_L2:
  188. STA !SpriteYSpeed,x
  189. RTS
  190.  
  191. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  192. ; GENERIC GRAPHICS ROUTINE
  193. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  194.  
  195. DrawGFX: %GetDrawInfo() ; after: Y = index to sprite OAM ($300)
  196. ; $00 = sprite x position relative to screen boarder
  197. ; $01 = sprite y position relative to screen boarder
  198.  
  199. LDA $00 ; set x position of the tile
  200. STA $0300|!Base2,y
  201.  
  202. LDA $01 ; set y position of the tile
  203. STA $0301|!Base2,y
  204.  
  205. LDA #!Tile
  206. STA $0302|!Base2,y
  207.  
  208. LDA !15F6,x ; get sprite palette info
  209. ORA $64 ; add in the priority bits from the level settings
  210. STA $0303|!Base2,y ; set properties
  211.  
  212. LDY #$00 ; #$02 means the tiles are 16x16
  213. LDA #$00 ; This means we drew one tile
  214. JSL $01B7B3
  215. RTS
Add Comment
Please, Sign In to add comment