Advertisement
Guest User

Din mamma

a guest
May 21st, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.34 KB | None | 0 0
  1. # This file contains the source code of our Flappy Bird game
  2.  
  3. # Wait counters
  4. alias counter1 r5
  5. alias counter2 r6
  6.  
  7. # Sprite values
  8. alias sprite_x r0
  9. alias sprite_y r1
  10. alias sprite_speed r2
  11. alias fall_speed r4
  12.  
  13. alias layer_target r3
  14.  
  15. # Sprite locations
  16. alias loc_layer_target $00
  17. alias _loc_layer_target &$00
  18. alias loc_bird $01
  19. alias loc_cloud1 $04
  20. alias loc_cloud2 $07
  21. alias loc_pipe1 $0A
  22. alias loc_pipe2 $0E
  23. alias loc_ground1 $11
  24. alias loc_ground2 $14
  25. alias loc_ground3 $17
  26. alias loc_ground4 $20
  27.  
  28. # Sprite layers
  29. alias bird_l 0
  30. alias cloud_l 1
  31. alias ground_l 2
  32. alias pipe_l 3
  33.  
  34. # Sprite IDs
  35. alias bird 0
  36. alias ground 1
  37. alias pipe 5
  38. alias cloud 8
  39.  
  40. # Constants
  41. alias col_check 30 # 0000000000011110
  42. alias width 320
  43. alias width_n $FEC0 # -320
  44. alias gns $FFCE # Godtycklig Negativ Siffra = -50
  45.  
  46. # KEYS
  47. alias k_jump 0
  48. alias k_pause 16
  49.  
  50. # COUNTERS
  51. alias tick_counter r11
  52. alias tick r13
  53.  
  54. # Help registers
  55. alias RND r12
  56. alias IM r14
  57. alias TMP r15
  58.  
  59. JMP INIT
  60.  
  61. # == SPRITE FUNCTIONS == #
  62. FETCH_SPRITE:
  63. LDI IM 1
  64.  
  65. # Get x
  66. ST loc_layer_target layer_target
  67. LD sprite_x _loc_layer_target
  68.  
  69. # Get y
  70. ADD layer_target IM
  71. ST loc_layer_target layer_target
  72. LD sprite_y _loc_layer_target
  73.  
  74. # Get speed
  75. ADD layer_target IM
  76. ST loc_layer_target layer_target
  77. LD sprite_speed _loc_layer_target
  78.  
  79. RET
  80.  
  81. SAVE_SPRITE:
  82. LDI IM 1
  83.  
  84. # Save speed
  85. ST _loc_layer_target sprite_speed
  86.  
  87. # Save y
  88. SUB layer_target IM
  89. ST loc_layer_target layer_target
  90. ST _loc_layer_target sprite_y
  91.  
  92. # Save x
  93. SUB layer_target IM
  94. ST loc_layer_target layer_target
  95. ST _loc_layer_target sprite_x
  96.  
  97. RET
  98.  
  99. # Returns a sprite to x = width (320) and gives it a random y.
  100. RETURN:
  101. LDI sprite_x width
  102. CPY sprite_y RND
  103. RET
  104.  
  105. RETURN_SIMPLE:
  106. LDI sprite_x width
  107. RET
  108.  
  109. # == HELPER == #
  110.  
  111. # Waits for x ticks.
  112. WAIT:
  113. LDI counter2 7
  114. LDI IM 1
  115. WAIT_LOOP_START:
  116. LDI counter1 $FFFF
  117. WAIT_LOOP1:
  118. SUB counter1 IM
  119. BEQ WAIT_LOOP2
  120. JMP WAIT_LOOP1
  121. WAIT_LOOP2:
  122. SUB counter2 IM
  123. BEQ WAIT_DONE
  124. JMP WAIT_LOOP_START
  125. WAIT_DONE:
  126. RET
  127.  
  128. # Maintains a "random" number between 20 - 220 in RND.
  129. RANDOM:
  130. LDI IM 1
  131. ADD RND IM
  132. LDI IM 220
  133. CMP RND IM
  134. BEQ RND_RESET
  135. RET
  136.  
  137. RND_RESET:
  138. LDI RND 20
  139. RET
  140.  
  141. # Pauses if P pressed
  142. PAUSE:
  143. KBD k_pause
  144. BEQ PAUSE_LOOP
  145. RET
  146. PAUSE_LOOP:
  147. KBD k_pause
  148. BNE PAUSE_LOOP
  149. RET
  150.  
  151. # == CORE == #
  152.  
  153. INIT:
  154.  
  155. # Set values
  156. LDI tick_counter 6
  157. LDI tick 0
  158. LDI RND 20
  159.  
  160. # Set bird starting values.
  161. LDI layer_target loc_bird
  162. CALL FETCH_SPRITE
  163. LDI sprite_x 40
  164. LDI sprite_y 120
  165. LDI sprite_speed 5
  166.  
  167. # Set ground1 starting values
  168. LDI layer_target loc_ground1
  169. CALL FETCH_SPRITE
  170. LDI sprite_x 0
  171. LDI sprite_y 310
  172. LDI sprite_speed 1
  173.  
  174. # Set ground2 starting values
  175. LDI layer_target loc_ground2
  176. CALL FETCH_SPRITE
  177. LDI sprite_x 80
  178. LDI sprite_y 310
  179. LDI sprite_speed 1
  180.  
  181. # Set ground3 starting values
  182. LDI layer_target loc_ground3
  183. CALL FETCH_SPRITE
  184. LDI sprite_x 160
  185. LDI sprite_y 310
  186. LDI sprite_speed 1
  187.  
  188. # Set ground4 starting values
  189. LDI layer_target loc_ground4
  190. CALL FETCH_SPRITE
  191. LDI sprite_x 240
  192. LDI sprite_y 310
  193. LDI sprite_speed 1
  194.  
  195. # Set cloud1 starting values
  196. LDI layer_target loc_cloud1
  197. CALL FETCH_SPRITE
  198. LDI sprite_x width
  199. LDI sprite_speed 1
  200.  
  201. # Set cloud2 starting values
  202. LDI layer_target loc_cloud2
  203. CALL FETCH_SPRITE
  204. LDI sprite_x width
  205. LDI sprite_speed 2
  206.  
  207. JMP GAME_LOOP
  208.  
  209.  
  210. GAME_LOOP:
  211.  
  212. # ==== Bird ====
  213. LDI layer_target loc_bird
  214. CALL FETCH_SPRITE
  215. CALL BIRD
  216. DRW bird_l bird sprite_x sprite_y
  217.  
  218. # ==== Ground ====
  219. LDI layer_target loc_ground1
  220. CALL FETCH_SPRITE
  221. CALL GROUND
  222. DRW ground_l ground sprite_x sprite_y
  223. CALL SAVE_SPRITE
  224.  
  225. LDI layer_target loc_ground2
  226. CALL FETCH_SPRITE
  227. CALL GROUND
  228. DRW ground_l ground sprite_x sprite_y
  229. CALL SAVE_SPRITE
  230.  
  231. LDI layer_target loc_ground3
  232. CALL FETCH_SPRITE
  233. CALL GROUND
  234. DRW ground_l ground sprite_x sprite_y
  235. CALL SAVE_SPRITE
  236.  
  237. LDI layer_target loc_ground4
  238. CALL FETCH_SPRITE
  239. CALL GROUND
  240. DRW ground_l ground sprite_x sprite_y
  241. CALL SAVE_SPRITE
  242.  
  243. # ==== Pipe ====
  244. LDI layer_target loc_pipe1
  245. CALL FETCH_SPRITE
  246. CALL PIPE
  247. DRW pipe_l pipe sprite_x sprite_y
  248. CALL SAVE_SPRITE
  249.  
  250. LDI layer_target loc_pipe2
  251. CALL FETCH_SPRITE
  252. CALL PIPE
  253. DRW pipe_l pipe sprite_x sprite_y
  254. CALL SAVE_SPRITE
  255.  
  256. # ==== Cloud ====
  257. LDI layer_target loc_cloud1
  258. CALL FETCH_SPRITE
  259. CALL CLOUD
  260. DRW cloud_l cloud sprite_x sprite_y
  261. CALL SAVE_SPRITE
  262.  
  263. LDI layer_target loc_cloud2
  264. CALL FETCH_SPRITE
  265. CALL CLOUD
  266. DRW cloud_l cloud sprite_x sprite_y
  267. CALL SAVE_SPRITE
  268.  
  269. FWDB
  270.  
  271. LDI IM 1
  272. ADD tick IM
  273.  
  274. CALL RANDOM
  275. CALL WAIT
  276.  
  277. # Pause
  278. CALL PAUSE
  279.  
  280. JMP GAME_LOOP
  281.  
  282. # == SPRITE BEHAVIOUR FUNCTIONS == #
  283.  
  284. # Checks for collision, actions and controlls the flapping.
  285. BIRD:
  286. # Check for collision.
  287. COL bird TMP
  288. LDI IM col_check
  289. AND TMP IM
  290. BPL GAME_OVER
  291.  
  292. # Check if space is pressed or still traveling from previous jump, return if not.
  293. KBD k_jump
  294. BEQ FLAP
  295. LDI IM 0
  296. CMP sprite_speed IM
  297. BPL FLAP2
  298.  
  299. #Falling
  300. LDI IM 1
  301. SUB tick_counter IM
  302. BPL NO_SPEED_CHANGE
  303. ADD fall_speed IM
  304. LDI tick_counter 6
  305. NO_SPEED_CHANGE:
  306. ADD sprite_y fall_speed # Always moves bird down, unless flap.
  307. RET
  308.  
  309. # Bird flap function. Returns to game loop.
  310. FLAP:
  311. LDI sprite_speed 4
  312. LDI fall_speed 0
  313. LDI tick_counter 6
  314. FLAP2:
  315. LDI IM 1
  316. SUB tick_counter IM
  317. BPL NO_LIFT_CHANGE
  318. SUB sprite_speed IM
  319. LDI tick_counter 6
  320. NO_LIFT_CHANGE:
  321. SUB sprite_y sprite_speed# Speed is in this case used as jump height.
  322.  
  323. RET
  324.  
  325.  
  326. # Moves from right to left. Checks if x == 0 then x = 320
  327. GROUND:
  328. LDI IM 1
  329. SUB sprite_x IM
  330. LDI IM width_n
  331. CMP sprite_x IM # Check if ground has traveled all the way to the left.
  332. BEQ RETURN_SIMPLE
  333. RET
  334.  
  335. # Moves from right to left. One in the "Ceiling" and one in the ground. Random y
  336. PIPE:
  337. LDI IM 1
  338. SUB sprite_x IM
  339. LDI IM gns
  340. CMP sprite_x IM # Check if pipe has traveled off screen.
  341. BEQ RETURN
  342. RET
  343.  
  344. # Moves from right to left. Random y.
  345. CLOUD:
  346. LDI IM 1
  347. SUB sprite_x IM
  348. LDI IM gns
  349. CMP sprite_x IM # Check if cloud has traveled off screen.
  350. BEQ RETURN
  351. RET
  352.  
  353.  
  354. GAME_OVER:
  355. JMP GAME_OVER
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement