Advertisement
Guest User

Zniggy v0.2

a guest
Jun 8th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ; Zniggy the Znig
  3. ; Copyright 2019 anonymous
  4. ; 4chan /vr/ board
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  6.  
  7. ; ZX Spectrum Memory Map
  8. ; 0x0000 - 0x3FFF RESERVED: basic ROM
  9. ; 0x4000 - 0x57FF RAM: Screen 256x192 1bpp
  10. ; 0x5800 - 0x5AFF RAM: 8x8 color cells 32x24
  11. ; 0x5B00 - 0x5BFF RESERVED: Printer Buffer (?)
  12. ; 0x5C00 - 0x5CBF RESERVED: System variables (?)
  13. ; 0x5CC0 - 0x5CCA RESERVED: ???
  14. ; 0x5CCB - 0xFF57 FREE RAM OUR GAME
  15. ; 0xFF58 - 0xFFFF RESERVED: ???
  16.  
  17. org $8000
  18.  
  19. ;==============================================================
  20. ; Defines
  21. ;==============================================================
  22.  
  23. SCREEN_PIXEL_START          equ $4000
  24. SCREEN_PIXEL_SIZE           equ $1800
  25.  
  26. SCREEN_ATTRIBUTE_START      equ $5800
  27. SCREEN_ATTRIBUTE_SIZE       equ $0300
  28.  
  29. SCREEN_BORDER_COLOR         equ $FE ; Last 3 bits defines color
  30.  
  31. BLACK_INK                   equ $00
  32. BLUE_INK                    equ $01
  33. RED_INK                     equ $02
  34. PURPLE_INK                  equ $03
  35. GREEN_INK                   equ $04
  36. CYAN_INK                    equ $05
  37. YELLOW_INK                  equ $06
  38. WHITE_INK                   equ $07
  39.  
  40. BLACK_PAPER                 equ BLACK_INK << 3
  41. BLUE_PAPER                  equ BLUE_INK << 3
  42. RED_PAPER                   equ RED_INK << 3
  43. PURPLE_PAPER                equ PURPLE_INK << 3
  44. GREEN_PAPER                 equ GREEN_INK << 3
  45. CYAN_PAPER                  equ CYAN_INK << 3
  46. YELLOW_PAPER                equ YELLOW_INK << 3
  47. WHITE_PAPER                 equ WHITE_INK << 3
  48.  
  49. FLASH                       equ $80
  50. BRIGHT                      equ $40
  51.  
  52. SCRATCH_ADDRESS1            equ $5CCB
  53. SCRATCH_ADDRESS2            equ $5CCD
  54. SCRATCH_ADDRESS3            equ $5CD3
  55. CURRENT_ROOM_ADDRESS        equ $5CCE
  56. CURRENT_ROOM_NUMBER         equ $5CD0
  57. CURRENT_ROOM_GEMS           equ $5CF0
  58. CURRENT_SPRITE              equ $5CD4
  59. SPRITE_LENGTH               equ $5CD2
  60. BUG_COUNT                   equ $5FFF
  61. WALKER_COUNT                equ $5FFE
  62.  
  63. COLLECTED_GEMS              equ $60A0
  64. GEM_COLOR                   equ $5EFF
  65.  
  66. PLAYER_POS                  equ $5D00
  67. PLAYER_X                    equ $5D00
  68. PLAYER_Y                    equ $5D01
  69. PLAYER_VEL                  equ $5D02
  70. PLAYER_ANIM                 equ $5D03
  71. PLAYER_SPRITE               equ $5D04
  72. PLAYER_GEMS                 equ $5D06
  73. PLAYER_ENTRY_X              equ $5D07
  74. PLAYER_ENTRY_Y              equ $5D08
  75.  
  76.  
  77. MONSTER_START               equ $6000
  78. MONSTER_POS                 equ $6000
  79. MONSTER_X                   equ $6000
  80. MONSTER_Y                   equ $6001
  81. MONSTER_SPRITE              equ $6002
  82. MONSTER_DIR                 equ $6004
  83. MONSTER_SIZE                equ 5
  84.  
  85. ROOM_WIDTH                  equ 32
  86. ROOM_HEIGHT                 equ 18
  87. ROOM_SIZE                   equ 32*18
  88. SCREEN_HEIGHT               equ 24
  89. MAP_WIDTH                   equ 2
  90.  
  91. CHAR_A equ 33
  92. CHAR_B equ 34
  93. CHAR_C equ 35
  94. CHAR_D equ 36
  95. CHAR_E equ 37
  96. CHAR_F equ 38
  97. CHAR_G equ 39
  98. CHAR_H equ 40
  99. CHAR_I equ 41
  100. CHAR_J equ 42
  101. CHAR_K equ 43
  102. CHAR_L equ 44
  103. CHAR_M equ 45
  104. CHAR_N equ 46
  105. CHAR_O equ 47
  106. CHAR_P equ 48
  107. CHAR_Q equ 49
  108. CHAR_R equ 50
  109. CHAR_S equ 51
  110. CHAR_T equ 52
  111. CHAR_U equ 53
  112. CHAR_V equ 54
  113. CHAR_W equ 55
  114. CHAR_X equ 56
  115. CHAR_Y equ 57
  116. CHAR_Z equ 58
  117. CHAR_COLON equ 26
  118. CHAR_SQ equ 7
  119. CHAR_SPACE equ 96
  120. CHAR_ZERO equ 16
  121. LC equ 32
  122.  
  123.  
  124. ;==============================================================
  125. ; Data
  126. ;==============================================================
  127.  
  128. DATA_LIVES_STRING:
  129. db CHAR_Z, CHAR_N, CHAR_I, CHAR_G, CHAR_S, CHAR_COLON
  130. PLAYER_LIVES:
  131. db CHAR_ZERO + 9, 0
  132. DATA_GEMS_STRING:
  133. db CHAR_G, CHAR_E, CHAR_M, CHAR_S, CHAR_COLON
  134. PLAYER_GEM_TEXT:
  135. db CHAR_ZERO + 0, CHAR_ZERO + 9, 0
  136.  
  137. DATA_TILE_PIXELS:
  138.  
  139. DATA_SPRITES:
  140. DATA_ZIGGY_RIGHT:
  141. ; zniggy_0
  142. db %00011000>>0, %00011000<<8
  143. db %00111100>>0, %00111100<<8
  144. db %01111010>>0, %01111010<<8
  145. db %11111111>>0, %11111111<<8
  146. db %01110000>>0, %01110000<<8
  147. db %00111100>>0, %00111100<<8
  148. db %00011000>>0, %00011000<<8
  149. db %00111100>>0, %00111100<<8
  150.  
  151. db %01111110>>0, %01111110<<8
  152. db %11111111>>0, %11111111<<8
  153. db %01111110>>0, %01111110<<8
  154. db %00111100>>0, %00111100<<8
  155. db %00011000>>0, %00011000<<8
  156. db %00011000>>0, %00011000<<8
  157. db %00011000>>0, %00011000<<8
  158. db %00011110>>0, %00011110<<8
  159. ; zniggy_1
  160. db %00011000>>1, %00011000<<7
  161. db %00111100>>1, %00111100<<7
  162. db %01111010>>1, %01111010<<7
  163. db %11111111>>1, %11111111<<7
  164. db %01110000>>1, %01110000<<7
  165. db %00111100>>1, %00111100<<7
  166. db %00011000>>1, %00011000<<7
  167. db %00111100>>1, %00111100<<7
  168.  
  169. db %01111110>>1, %01111110<<7
  170. db %11111111>>1, %11111111<<7
  171. db %01111110>>1, %01111110<<7
  172. db %00111100>>1, %00111100<<7
  173. db %00011000>>1, %00011000<<7
  174. db %01101100>>1, %01101100<<7
  175. db %10000111>>1, %10000111<<7
  176. db %01000000>>1, %01000000<<7
  177. ; zniggy_2
  178. db %00011000>>2, %00011000<<6
  179. db %00111100>>2, %00111100<<6
  180. db %01111010>>2, %01111010<<6
  181. db %11111111>>2, %11111111<<6
  182. db %01110000>>2, %01110000<<6
  183. db %00111100>>2, %00111100<<6
  184. db %00011000>>2, %00011000<<6
  185. db %00111100>>2, %00111100<<6
  186.  
  187. db %01111110>>2, %01111110<<6
  188. db %11111111>>2, %11111111<<6
  189. db %01111110>>2, %01111110<<6
  190. db %00111100>>2, %00111100<<6
  191. db %00011000>>2, %00011000<<6
  192. db %00101001>>2, %00101001<<6
  193. db %01000110>>2, %01000110<<6
  194. db %10000100>>2, %10000100<<6
  195. ; zniggy_3
  196. db %00011000>>3, %00011000<<5
  197. db %00111100>>3, %00111100<<5
  198. db %01111010>>3, %01111010<<5
  199. db %11111111>>3, %11111111<<5
  200. db %01110000>>3, %01110000<<5
  201. db %00111100>>3, %00111100<<5
  202. db %00011000>>3, %00011000<<5
  203. db %00111100>>3, %00111100<<5
  204.  
  205. db %01111110>>3, %01111110<<5
  206. db %11111111>>3, %11111111<<5
  207. db %01111110>>3, %01111110<<5
  208. db %00111100>>3, %00111100<<5
  209. db %00011000>>3, %00011000<<5
  210. db %00101000>>3, %00101000<<5
  211. db %01010000>>3, %01010000<<5
  212. db %01011110>>3, %01011110<<5
  213.  
  214. ; zniggy_4
  215. db %00011000>>4, %00011000<<4
  216. db %00111100>>4, %00111100<<4
  217. db %01111010>>4, %01111010<<4
  218. db %11111111>>4, %11111111<<4
  219. db %01110000>>4, %01110000<<4
  220. db %00111100>>4, %00111100<<4
  221. db %00011000>>4, %00011000<<4
  222. db %00111100>>4, %00111100<<4
  223.  
  224. db %01111110>>4, %01111110<<4
  225. db %11111111>>4, %11111111<<4
  226. db %01111110>>4, %01111110<<4
  227. db %00111100>>4, %00111100<<4
  228. db %00011000>>4, %00011000<<4
  229. db %00011000>>4, %00011000<<4
  230. db %00011000>>4, %00011000<<4
  231. db %00011110>>4, %00011110<<4
  232. ; zniggy_5
  233. db %00011000>>5, %00011000<<3
  234. db %00111100>>5, %00111100<<3
  235. db %01111010>>5, %01111010<<3
  236. db %11111111>>5, %11111111<<3
  237. db %01110000>>5, %01110000<<3
  238. db %00111100>>5, %00111100<<3
  239. db %00011000>>5, %00011000<<3
  240. db %00111100>>5, %00111100<<3
  241.  
  242. db %01111110>>5, %01111110<<3
  243. db %11111111>>5, %11111111<<3
  244. db %01111110>>5, %01111110<<3
  245. db %00111100>>5, %00111100<<3
  246. db %00011000>>5, %00011000<<3
  247. db %01101100>>5, %01101100<<3
  248. db %10000111>>5, %10000111<<3
  249. db %01000000>>5, %01000000<<3
  250. ; zniggy_6
  251. db %00011000>>6, %00011000<<2
  252. db %00111100>>6, %00111100<<2
  253. db %01111010>>6, %01111010<<2
  254. db %11111111>>6, %11111111<<2
  255. db %01110000>>6, %01110000<<2
  256. db %00111100>>6, %00111100<<2
  257. db %00011000>>6, %00011000<<2
  258. db %00111100>>6, %00111100<<2
  259.  
  260. db %01111110>>6, %01111110<<2
  261. db %11111111>>6, %11111111<<2
  262. db %01111110>>6, %01111110<<2
  263. db %00111100>>6, %00111100<<2
  264. db %00011000>>6, %00011000<<2
  265. db %00101001>>6, %00101001<<2
  266. db %01000110>>6, %01000110<<2
  267. db %10000100>>6, %10000100<<2
  268. ; zniggy_7
  269. db %00011000>>7, %00011000<<1
  270. db %00111100>>7, %00111100<<1
  271. db %01111010>>7, %01111010<<1
  272. db %11111111>>7, %11111111<<1
  273. db %01110000>>7, %01110000<<1
  274. db %00111100>>7, %00111100<<1
  275. db %00011000>>7, %00011000<<1
  276. db %00111100>>7, %00111100<<1
  277.  
  278. db %01111110>>7, %01111110<<1
  279. db %11111111>>7, %11111111<<1
  280. db %01111110>>7, %01111110<<1
  281. db %00111100>>7, %00111100<<1
  282. db %00011000>>7, %00011000<<1
  283. db %00101000>>7, %00101000<<1
  284. db %01010000>>7, %01010000<<1
  285. db %01011110>>7, %01011110<<1
  286.  
  287.  
  288.  
  289. DATA_ZIGGY_LEFT:
  290. ; zniggy_0
  291. db %00011000>>0, %00011000<<8
  292. db %00111100>>0, %00111100<<8
  293. db %01011110>>0, %01011110<<8
  294. db %11111111>>0, %11111111<<8
  295. db %00001110>>0, %00001110<<8
  296. db %00111100>>0, %00111100<<8
  297. db %00011000>>0, %00011000<<8
  298. db %00111100>>0, %00111100<<8
  299.  
  300. db %01111110>>0, %01111110<<8
  301. db %11111111>>0, %11111111<<8
  302. db %01111110>>0, %01111110<<8
  303. db %00111100>>0, %00111100<<8
  304. db %00011000>>0, %00011000<<8
  305. db %00011000>>0, %00011000<<8
  306. db %00011000>>0, %00011000<<8
  307. db %01111000>>0, %01111000<<8
  308. ; zniggy_1
  309. db %00011000>>1, %00011000<<7
  310. db %00111100>>1, %00111100<<7
  311. db %01011110>>1, %01011110<<7
  312. db %11111111>>1, %11111111<<7
  313. db %00001110>>1, %00001110<<7
  314. db %00111100>>1, %00111100<<7
  315. db %00011000>>1, %00011000<<7
  316. db %00111100>>1, %00111100<<7
  317.  
  318. db %01111110>>1, %01111110<<7
  319. db %11111111>>1, %11111111<<7
  320. db %01111110>>1, %01111110<<7
  321. db %00111100>>1, %00111100<<7
  322. db %00011000>>1, %00011000<<7
  323. db %00110110>>1, %00110110<<7
  324. db %11100001>>1, %11100001<<7
  325. db %00000010>>1, %00000010<<7
  326. ; zniggy_2
  327. db %00011000>>2, %00011000<<6
  328. db %00111100>>2, %00111100<<6
  329. db %01011110>>2, %01011110<<6
  330. db %11111111>>2, %11111111<<6
  331. db %00001110>>2, %00001110<<6
  332. db %00111100>>2, %00111100<<6
  333. db %00011000>>2, %00011000<<6
  334. db %00111100>>2, %00111100<<6
  335.  
  336. db %01111110>>2, %01111110<<6
  337. db %11111111>>2, %11111111<<6
  338. db %01111110>>2, %01111110<<6
  339. db %00111100>>2, %00111100<<6
  340. db %00011000>>2, %00011000<<6
  341. db %10010100>>2, %10010100<<6
  342. db %01100010>>2, %01100010<<6
  343. db %00100001>>2, %00100001<<6
  344. ; zniggy_3
  345. db %00011000>>3, %00011000<<5
  346. db %00111100>>3, %00111100<<5
  347. db %01011110>>3, %01011110<<5
  348. db %11111111>>3, %11111111<<5
  349. db %00001110>>3, %00001110<<5
  350. db %00111100>>3, %00111100<<5
  351. db %00011000>>3, %00011000<<5
  352. db %00111100>>3, %00111100<<5
  353.  
  354. db %01111110>>3, %01111110<<5
  355. db %11111111>>3, %11111111<<5
  356. db %01111110>>3, %01111110<<5
  357. db %00111100>>3, %00111100<<5
  358. db %00011000>>3, %00011000<<5
  359. db %00010100>>3, %00010100<<5
  360. db %00001010>>3, %00001010<<5
  361. db %01111010>>3, %01111010<<5
  362.  
  363. ; zniggy_4
  364. db %00011000>>4, %00011000<<4
  365. db %00111100>>4, %00111100<<4
  366. db %01011110>>4, %01011110<<4
  367. db %11111111>>4, %11111111<<4
  368. db %00001110>>4, %00001110<<4
  369. db %00111100>>4, %00111100<<4
  370. db %00011000>>4, %00011000<<4
  371. db %00111100>>4, %00111100<<4
  372.  
  373. db %01111110>>4, %01111110<<4
  374. db %11111111>>4, %11111111<<4
  375. db %01111110>>4, %01111110<<4
  376. db %00111100>>4, %00111100<<4
  377. db %00011000>>4, %00011000<<4
  378. db %00011000>>4, %00011000<<4
  379. db %00011000>>4, %00011000<<4
  380. db %01111000>>4, %01111000<<4
  381. ; zniggy_5
  382. db %00011000>>5, %00011000<<3
  383. db %00111100>>5, %00111100<<3
  384. db %01011110>>5, %01011110<<3
  385. db %11111111>>5, %11111111<<3
  386. db %00001110>>5, %00001110<<3
  387. db %00111100>>5, %00111100<<3
  388. db %00011000>>5, %00011000<<3
  389. db %00111100>>5, %00111100<<3
  390.  
  391. db %01111110>>5, %01111110<<3
  392. db %11111111>>5, %11111111<<3
  393. db %01111110>>5, %01111110<<3
  394. db %00111100>>5, %00111100<<3
  395. db %00011000>>5, %00011000<<3
  396. db %00110110>>5, %00110110<<3
  397. db %11100001>>5, %11100001<<3
  398. db %00000010>>5, %00000010<<3
  399. ; zniggy_6
  400. db %00011000>>6, %00011000<<2
  401. db %00111100>>6, %00111100<<2
  402. db %01011110>>6, %01011110<<2
  403. db %11111111>>6, %11111111<<2
  404. db %00001110>>6, %00001110<<2
  405. db %00111100>>6, %00111100<<2
  406. db %00011000>>6, %00011000<<2
  407. db %00111100>>6, %00111100<<2
  408.  
  409. db %01111110>>6, %01111110<<2
  410. db %11111111>>6, %11111111<<2
  411. db %01111110>>6, %01111110<<2
  412. db %00111100>>6, %00111100<<2
  413. db %00011000>>6, %00011000<<2
  414. db %10010100>>6, %10010100<<2
  415. db %01100010>>6, %01100010<<2
  416. db %00100001>>6, %00100001<<2
  417. ; zniggy_7
  418. db %00011000>>7, %00011000<<1
  419. db %00111100>>7, %00111100<<1
  420. db %01011110>>7, %01011110<<1
  421. db %11111111>>7, %11111111<<1
  422. db %00001110>>7, %00001110<<1
  423. db %00111100>>7, %00111100<<1
  424. db %00011000>>7, %00011000<<1
  425. db %00111100>>7, %00111100<<1
  426.  
  427. db %01111110>>7, %01111110<<1
  428. db %11111111>>7, %11111111<<1
  429. db %01111110>>7, %01111110<<1
  430. db %00111100>>7, %00111100<<1
  431. db %00011000>>7, %00011000<<1
  432. db %00010100>>7, %00010100<<1
  433. db %00001010>>7, %00001010<<1
  434. db %01111010>>7, %01111010<<1
  435.  
  436.  
  437. DATA_BUG:
  438. db %00001100, %00110000
  439. db %00010011, %11001000
  440. db %00000011, %11000000
  441. db %00001111, %11110000
  442. db %00000101, %10100000
  443. db %10011110, %01111001
  444. db %01111000, %00011110
  445. db %00010110, %01101000
  446.  
  447. db %00010010, %01001000
  448. db %00010010, %01001000
  449. db %11110010, %01001111
  450. db %00110000, %00001100
  451. db %00111111, %11111100
  452. db %01001011, %11010010
  453. db %00000111, %11100000
  454. db %00000001, %10000000
  455.  
  456. DATA_GEM:
  457. db %00111100
  458. db %01011010
  459. db %11111111
  460. db %01011010
  461. db %00111100
  462. db %00111100
  463. db %00011000
  464. db %00011000
  465.  
  466. DATA_BLOCK_SPRITES:
  467. ; TODO: FIX ADDRESSING BUG WRITING TO THIS MEMORY
  468. db 0,0,0,0
  469. BLOCK_0:
  470. db %00000000
  471. db %00000000
  472. db %00000000
  473. db %00000000
  474. db %00000000
  475. db %00000000
  476. db %00000000
  477. db %00000000
  478. BLOCK_1:
  479. db %10110100
  480. db %11111111
  481. db %11111111
  482. db %11111111
  483. db %11111111
  484. db %11111111
  485. db %11111111
  486. db %11111111
  487. BLOCK_2:
  488. db %00000000
  489. db %00000000
  490. db %00000000
  491. db %00000000
  492. db %00000000
  493. db %00000000
  494. db %00000000
  495. db %00000000
  496. BLOCK_3:
  497. db %00011100
  498. db %00111111
  499. db %00111111
  500. db %01111111
  501. db %01111111
  502. db %01111111
  503. db %01111111
  504. db %00111111
  505. BLOCK_4:
  506. db %01110110
  507. db %11111111
  508. db %11111111
  509. db %11111111
  510. db %11111111
  511. db %11111111
  512. db %11111111
  513. db %11111111
  514. BLOCK_5:
  515. db %01100000
  516. db %11111000
  517. db %11111100
  518. db %11111000
  519. db %11111100
  520. db %11111110
  521. db %11111110
  522. db %11111100
  523. BLOCK_6:
  524. db %01111111
  525. db %01111111
  526. db %00111111
  527. db %00111111
  528. db %00111111
  529. db %01111111
  530. db %00111110
  531. db %00111100
  532. BLOCK_7:
  533. db %11111111
  534. db %11111111
  535. db %11111111
  536. db %11111111
  537. db %11111111
  538. db %11111111
  539. db %11111111
  540. db %01001110
  541. BLOCK_8:
  542. db %11111100
  543. db %11111110
  544. db %11111110
  545. db %11111100
  546. db %11111110
  547. db %11111110
  548. db %11111110
  549. db %11001000
  550.  
  551. DATA_BLOCK_ATTRIBS:
  552. db BLACK_PAPER | BLACK_INK | BRIGHT
  553. db BLACK_PAPER | GREEN_INK | BRIGHT
  554. db GREEN_PAPER | GREEN_INK | BRIGHT
  555. db BLACK_PAPER | WHITE_INK | BRIGHT
  556. db BLACK_PAPER | WHITE_INK | BRIGHT
  557. db BLACK_PAPER | WHITE_INK | BRIGHT
  558. db BLACK_PAPER | WHITE_INK | BRIGHT
  559. db BLACK_PAPER | WHITE_INK | BRIGHT
  560. db BLACK_PAPER | WHITE_INK | BRIGHT
  561.  
  562. DATA_ROOMS:
  563. ROOM_0:
  564. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  565. db 0,3,4,4,5,0,0,0,0,0,0,0,0,3,4,4,4,4,5,0,0,0,0,0,0,0,3,4,4,5,0,0
  566. db 0,6,7,7,8,0,0,3,4,5,0,0,0,6,7,7,7,7,8,0,0,3,5,0,0,0,6,7,7,8,0,0
  567. db 0,0,0,0,0,0,0,6,7,8,0,0,0,0,0,0,0,0,0,0,0,6,7,0,0,0,0,0,0,0,0,0
  568. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  569. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  570. db 0,0,0,0,0,0,0,0,0,0,0,3,4,4,4,4,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  571. db 0,0,0,0,0,0,0,0,0,0,0,6,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  572. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  573. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  574. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  575. db 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  576. db 0,0,0,0,1,2,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  577. db 0,0,0,1,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0
  578. db 0,0,1,2,2,2,2,2,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,1,0,0
  579. db 1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1
  580. db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
  581. db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
  582. ;Monsters
  583. db 1,1
  584. db 136, 70, DATA_BUG, DATA_BUG>>8, 1
  585. db 160, 103, DATA_ZIGGY_LEFT, DATA_ZIGGY_LEFT>>8, 1
  586. ; Room name
  587. db CHAR_Z, CHAR_N + LC, CHAR_I + LC, CHAR_G + LC, CHAR_G + LC, CHAR_Y + LC
  588. db CHAR_SQ, CHAR_S + LC, CHAR_SPACE, CHAR_F, CHAR_O + LC, CHAR_R + LC
  589. db CHAR_E + LC, CHAR_S + LC, CHAR_T + LC, 0
  590. ; Gems
  591. db $08,$40,$09,$40,$0A,$40,$0B,$40,$0C,$40,$0D,$40
  592.  
  593. ROOM_1:
  594. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  595. db 0,3,4,4,4,4,4,5,0,0,0,0,0,3,4,4,4,4,5,0,0,0,0,0,0,0,3,4,4,5,0,0
  596. db 0,6,7,7,7,7,7,8,0,0,0,0,0,6,7,7,7,7,8,0,0,0,0,0,0,0,6,7,7,8,0,0
  597. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  598. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  599. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,5,0,0,0,0,0,0,0,0,0
  600. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,0,0,0,0,0,0,0,0,0
  601. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  602. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,5,0,0,0,0,0,0,0,0,0,0,0
  603. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,0,0,0,0,0,0,0,0,0,0,0
  604. db 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  605. db 0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  606. db 0,0,0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  607. db 0,0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,1,1,1,0,0,0
  608. db 0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,1,1,1,2,2,2,1,0,0
  609. db 1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,1,1,2,2,2,2,2,2,2,1,1
  610. db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2
  611. db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2
  612.  
  613. db 4,0
  614. db 40, 70, DATA_BUG, DATA_BUG>>8, 1
  615. db 88, 35, DATA_BUG, DATA_BUG>>8, 1
  616. db 184, 35, DATA_BUG, DATA_BUG>>8, 1
  617. db 168, 70, DATA_BUG, DATA_BUG>>8, 1
  618.  
  619. db CHAR_B, CHAR_I+LC, CHAR_G+LC, CHAR_SPACE
  620. db CHAR_C, CHAR_H+LC, CHAR_A+LC, CHAR_S+LC, CHAR_M+LC, 0
  621.  
  622. ; Gems
  623. db $08,$40,$09,$40,$0A,$40,$0B,$40,$0C,$40,$0D,$40
  624.  
  625. ROOM_2:
  626. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  627. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  628. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  629. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  630. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  631. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  632. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  633. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  634. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  635. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  636. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  637. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  638. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  639. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  640. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  641. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  642. db 0,3,4,4,4,4,4,4,4,5,0,0,0,3,4,4,4,4,4,5,0,0,0,0,0,0,3,4,4,5,0,0
  643. db 0,6,7,7,7,7,7,7,7,8,0,0,0,6,7,7,7,7,7,8,0,0,0,0,0,0,6,7,7,8,0,0
  644.  
  645. db 0,0
  646.  
  647. db CHAR_A, CHAR_B+LC, CHAR_O+LC, CHAR_V+LC, CHAR_E+LC, CHAR_SPACE
  648. db CHAR_T, CHAR_H+LC, CHAR_E+LC, CHAR_SPACE
  649. db CHAR_F, CHAR_O+LC, CHAR_R+LC, CHAR_E+LC, CHAR_S+LC, CHAR_T+LC,0
  650. ; Gems
  651. db $10,$60,$13,$60,$16,$60,$19,$60,$1B,$60,$0D,$60
  652.  
  653. ROOM_3:
  654. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  655. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  656. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  657. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  658. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  659. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  660. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  661. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  662. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  663. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  664. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  665. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  666. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  667. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  668. db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  669. db 0,3,4,4,5,0,0,0,0,0,0,0,0,3,4,4,4,4,5,0,0,0,0,0,3,4,4,4,4,4,5,0
  670. db 0,6,7,7,8,0,0,3,4,5,0,0,0,6,7,7,7,7,8,0,0,3,5,0,6,7,7,7,7,7,8,0
  671. db 0,0,0,0,0,0,0,6,7,8,0,0,0,0,0,0,0,0,0,0,0,6,7,0,0,0,0,0,0,0,0,0
  672.  
  673. db 0,0
  674.  
  675. db CHAR_C, CHAR_L+LC, CHAR_O+LC, CHAR_U+LC, CHAR_D+LC, CHAR_SPACE
  676. db CHAR_E, CHAR_N+LC, CHAR_T+LC, CHAR_R+LC, CHAR_A+LC, CHAR_N+LC
  677. db CHAR_C+LC, CHAR_E+LC,0
  678. ; Gems
  679. db $10,$60,$13,$60,$16,$60,$19,$60,$1B,$60,$0D,$60
  680.  
  681. DATA_ROOM_LIST:
  682. db ROOM_0>>8, ROOM_0, ROOM_1>>8, ROOM_1
  683. db ROOM_2>>8, ROOM_2, ROOM_3>>8, ROOM_3
  684.  
  685.  
  686. ;==============================================================
  687. ; Utility Functions
  688. ;==============================================================
  689.  
  690. ;--------------------------------------------------------------
  691. PROC
  692. proc_clear_screen_pixels
  693. ;--------------------------------------------------------------
  694.     ; IN: -
  695.     ; OUT: -
  696.     ; Affects hl, de, bc
  697.  
  698.     ld hl, SCREEN_PIXEL_START
  699.     ld de, SCREEN_PIXEL_START + 1
  700.     ld bc, SCREEN_PIXEL_SIZE - 1
  701.     ld (hl), 0
  702.     ldir
  703. ret
  704. ENDP
  705.  
  706. ;--------------------------------------------------------------
  707. PROC
  708. proc_fill_screen_attribute:
  709. ;--------------------------------------------------------------
  710.     ; IN:   a = attribute
  711.     ; OUT:  -  
  712.     ; AFFECTS: hl, de, bc
  713.  
  714.     ld hl, SCREEN_ATTRIBUTE_START
  715.     ld de, SCREEN_ATTRIBUTE_START + 1
  716.     ld bc, SCREEN_ATTRIBUTE_SIZE - 1
  717.     ld (hl), a
  718.     ldir
  719. ret
  720. ENDP
  721.  
  722. ;-------------------------------------------------------------
  723. PROC
  724. proc_get_screen_attribute_address:
  725. ;-------------------------------------------------------------
  726.     ; IN: b = y-cell coord (0..23), c: x-cell coord (0..31)
  727.     ; OUT: hl = attribute address
  728.     ; AFFECTS: hl, de, a
  729.    
  730.     ; Explanation
  731.     ; b = -- -- -- y4 y3 y2 y1 y0
  732.     ; c = -- -- -- x4 x3 x2 x1 x0
  733.     ; hl = addr + y * 32 + x = addr + de
  734.     ; y7 y6 y5 and x7 x6 x5 are all zero since x,y<32
  735.     ; de = -- -- -- -- -- -- y4 y3|y2 y1 y0 x4 x3 x2 x1 x0
  736.     ;      -----------d-----------|------------e----------
  737.  
  738.     ; put y4 y3 into lower two bits in d
  739.     ld a, b
  740.     and $18
  741.     sra a
  742.     sra a
  743.     sra a
  744.     ld d, a
  745.  
  746.     ; put y2..y0 in upper bits of e
  747.     ld a, b
  748.     sla a
  749.     sla a
  750.     sla a
  751.     sla a
  752.     sla a
  753.  
  754.     ; put x4...x0 in lower bits of e
  755.     add a, c
  756.     ld e, a
  757.  
  758.     ld hl, SCREEN_ATTRIBUTE_START
  759.     add hl, de
  760. ret
  761. ENDP
  762.  
  763. ;-------------------------------------------------------------
  764. PROC
  765. proc_get_screen_pixel_address:
  766. ;-------------------------------------------------------------
  767.     ; IN: b = y-pixel coord (0..191), c: x-cell coord (0..31)
  768.     ; OUT: hl = screen address
  769.     ; AFFECTS: hl, de, a
  770.  
  771.     ld a, b         ; Work on the upper byte of the address
  772.     and %00000111   ; a = Y2 Y1 y0
  773.     or %01000000    ; first three bits are always 010
  774.     ld h,a          ; store in h
  775.     ld a,b          ; get bits Y7, Y6
  776.     rra             ; move them into place
  777.     rra             ;
  778.     rra             ;
  779.     and %00011000   ; mask off
  780.     or h            ; a = 0 1 0 Y7 Y6 Y2 Y1 Y0
  781.     ld h,a          ; calculation of h is now complete
  782.     ld a,b          ; get y
  783.     rla             ;
  784.     rla             ;
  785.     and %11100000   ; a = y5 y4 y3 0 0 0 0 0
  786.     ld l,a          ; store in l
  787.     ld a,c          ;
  788.     and %00011111   ; a = X4 X3 X2 X1
  789.     or l            ; a = Y5 Y4 Y3 X4 X3 X2 X1
  790.     ld l,a          ; calculation of l is complete
  791. ret
  792. ENDP
  793.  
  794.  
  795. ;-------------------------------------------------------------
  796. PROC
  797. proc_get_cell_coord:
  798. ;-------------------------------------------------------------
  799.     ; IN: b = y-pixel coord (0..191), c: x-pixel coord (0..248)
  800.     ; OUT: b = y-cell coord (0..23), c: x-pixel coord (0..31)
  801.     ; AFFECTS: a, b, c
  802.     ld a,b
  803.     ccf
  804.     and %11111000
  805.     rra
  806.     rra
  807.     rra
  808.     ld b,a
  809.     ld a,c
  810.     and %11111000
  811.     rra
  812.     rra
  813.     rra
  814.     ld c,a
  815. ret
  816. ENDP
  817.  
  818. ;-------------------------------------------------------------
  819. PROC
  820. proc_get_cell_index:
  821. ;-------------------------------------------------------------
  822.     ; IN: b = y-cell coord (0..23), c: x-pixel coord (0..31)
  823.     ; OUT: hl = cell index (0..767)
  824.     ; AFFECTS: a, b, c, hl
  825.     ld a,b
  826.     ccf
  827.     and %11111000
  828.     rra
  829.     rra
  830.     rra
  831.     ld b,a
  832.     ld a,c
  833.     and %11111000
  834.     rra
  835.     rra
  836.     rra
  837.     ld c,a
  838. ret
  839. ENDP
  840.  
  841.  
  842. ;-------------------------------------------------------------
  843. PROC
  844. proc_move_player_right:
  845. ;-------------------------------------------------------------
  846.     inc b
  847.     inc d
  848.     ld hl, DATA_ZIGGY_RIGHT
  849.     ld (PLAYER_SPRITE), hl
  850. ret
  851. ENDP
  852.  
  853. ;-------------------------------------------------------------
  854. PROC
  855. proc_move_player_left:
  856. ;-------------------------------------------------------------
  857.     dec b
  858.     inc d
  859.     ld hl, DATA_ZIGGY_LEFT
  860.     ld (PLAYER_SPRITE), hl
  861. ret
  862. ENDP
  863.  
  864. ;-------------------------------------------------------------
  865. PROC
  866. proc_move_player_out_walls:
  867. ;-------------------------------------------------------------
  868.     ld a,(PLAYER_X)
  869.     rra
  870.     rra
  871.     rra
  872.     and %00011111
  873.     ld c,a
  874.     ld a,(PLAYER_Y)
  875.     add a,16
  876.     ld b,a
  877.     push bc
  878.     call proc_get_block_index
  879.     ld a,(hl)
  880.     cp 0
  881.     jr z, proc_move_player_out_walls2
  882.     ld a,(PLAYER_X)
  883.     and %11111000
  884.     add a,8
  885.     ld (PLAYER_X),a
  886. proc_move_player_out_walls2:
  887.     pop bc
  888.     push bc
  889.     inc c
  890.     call proc_get_block_index
  891.     ld a,(hl)
  892.     cp 0
  893.     jr z, proc_move_player_out_walls3
  894.     ld a,(PLAYER_X)
  895.     and %11111000
  896.     dec a
  897.     ld (PLAYER_X),a
  898. proc_move_player_out_walls3:
  899.     pop bc
  900.     ld a,b
  901.     sub 18
  902.     ret c
  903.     ld b,a
  904.     call proc_get_block_index
  905.     ld a,(hl)
  906.     cp 0
  907.     ret z
  908.     ld a,(PLAYER_VEL)
  909.     xor a
  910.     ld (PLAYER_VEL),a
  911. ret
  912. ENDP
  913.  
  914. ;-------------------------------------------------------------
  915. PROC
  916. proc_check_transition:
  917. ;-------------------------------------------------------------
  918.     ld a,(PLAYER_X)
  919.     ld b,a
  920.     ld a, 246
  921.     cp b
  922.     jr nc, proc_check_transition2
  923.     ld a,8
  924.     ld (PLAYER_X),a
  925.     ld a,(CURRENT_ROOM_NUMBER)
  926.     inc a
  927.     and MAP_WIDTH-1
  928.     ld c,a
  929.     ld a,(CURRENT_ROOM_NUMBER)
  930.     and ~(MAP_WIDTH-1)
  931.     add a,c
  932.     ld (CURRENT_ROOM_NUMBER),a
  933.     call proc_load_map
  934.     ret
  935. proc_check_transition2:
  936.     ld a,2
  937.     cp b
  938.     jr c, proc_check_transition3
  939.     ld a,240
  940.     ld (PLAYER_X),a
  941.     ld a,(CURRENT_ROOM_NUMBER)
  942.     dec a
  943.     and MAP_WIDTH-1
  944.     ld c,a
  945.     ld a,(CURRENT_ROOM_NUMBER)
  946.     and ~(MAP_WIDTH-1)
  947.     add a,c
  948.     ld (CURRENT_ROOM_NUMBER),a
  949.     call proc_load_map
  950.     ret
  951. proc_check_transition3:
  952.     ld a,(PLAYER_Y)
  953.     ld b,a
  954.     ld a,120
  955.     cp b
  956.     jr nc, proc_check_transition4
  957.     ld a, 8
  958.     ld (PLAYER_Y),a
  959.     ld a,(CURRENT_ROOM_NUMBER)
  960.     sub MAP_WIDTH
  961.     and %00000011
  962.     ld (CURRENT_ROOM_NUMBER),a
  963.     call proc_load_map
  964.     ret
  965. proc_check_transition4:
  966.     ld a,2
  967.     cp b
  968.     ret c
  969.     ld a, 111
  970.     ld (PLAYER_Y),a
  971.     ld a,(CURRENT_ROOM_NUMBER)
  972.     add a,MAP_WIDTH
  973.     and %00000011
  974.     ld (CURRENT_ROOM_NUMBER),a
  975.     call proc_load_map
  976. ret
  977. ENDP
  978.  
  979. ;-------------------------------------------------------------
  980. PROC
  981. proc_check_player_collect:
  982. ;-------------------------------------------------------------
  983.     ld a,(PLAYER_X)
  984.     add a,4
  985.     rra
  986.     rra
  987.     rra
  988.     and %00011111
  989.     ld c,a
  990.     ld a,(PLAYER_Y)
  991.     add a,16
  992.     ld e,a
  993.     ld ix,CURRENT_ROOM_GEMS
  994.     ld d,1
  995. proc_check_player_collect_loop:
  996.     ld a,(ix)
  997.     cp $FF
  998.     jr z,proc_check_player_collect_loop_end
  999.     cp c
  1000.     jr nz,proc_check_player_collect_loop_end
  1001.     ld a,(ix+1)
  1002.     cp e
  1003.     jr nc,proc_check_player_collect_loop_end
  1004.     add a,4
  1005.     ld hl,PLAYER_Y
  1006.     cp (hl)
  1007.     jr c,proc_check_player_collect_loop_end
  1008.     ld hl,COLLECTED_GEMS
  1009.     ld a,(CURRENT_ROOM_NUMBER)
  1010.     ld b,0
  1011.     ld c,a
  1012.     add hl,bc
  1013.     ld a,(hl)
  1014.     or d
  1015.     ld (hl),a
  1016.     call proc_set_gem_data
  1017.     ld a,(PLAYER_GEMS)
  1018.     add a,1
  1019.     daa
  1020.     ld (PLAYER_GEMS),a
  1021.     call proc_draw_values_text
  1022. proc_check_player_collect_loop_end:
  1023.     inc ix
  1024.     inc ix
  1025.     xor a
  1026.     rl d
  1027.     ld a,d
  1028.     and %00111111
  1029.     jr nz, proc_check_player_collect_loop
  1030. ret
  1031. ENDP
  1032.  
  1033. ;-------------------------------------------------------------
  1034. PROC
  1035. proc_check_player_death:
  1036. ;-------------------------------------------------------------
  1037.     ld ix,MONSTER_START
  1038.     ld a,(PLAYER_X)
  1039.     add a,6
  1040.     ld c,a
  1041.     ld a,(PLAYER_Y)
  1042.     add a,16
  1043.     ld b,a
  1044.     ld a,(BUG_COUNT)
  1045.     ld d,a
  1046.     ld a,(WALKER_COUNT)
  1047.     add a,d
  1048.     cp 0
  1049.     jr z,proc_check_player_death_loop_end
  1050.     ld d,a
  1051. proc_check_player_death_loop:
  1052.     push de
  1053.     ld de,(PLAYER_POS)
  1054.     ld a,(ix)
  1055.     cp c
  1056.     jr nc,proc_check_player_death_end
  1057.     add a,14
  1058.     cp e
  1059.     jr c,proc_check_player_death_end
  1060.     ld a,(ix+1)
  1061.     cp b
  1062.     jr nc,proc_check_player_death_end
  1063.     add a,8
  1064.     cp d
  1065.     jr c,proc_check_player_death_end
  1066.     ld a,(PLAYER_LIVES)
  1067.     dec a
  1068.     ld (PLAYER_LIVES),a
  1069.     ld a,(PLAYER_ENTRY_X)
  1070.     ld (PLAYER_X),a
  1071.     ld a,(PLAYER_ENTRY_Y)
  1072.     ld (PLAYER_Y),a
  1073.     call proc_load_map
  1074.     pop de
  1075.     jr proc_check_player_death_loop_end
  1076. proc_check_player_death_end:
  1077.     ld de,MONSTER_SIZE
  1078.     add ix,de
  1079.     pop de
  1080.     dec d
  1081.     jr nz,proc_check_player_death_loop
  1082.    
  1083. proc_check_player_death_loop_end:
  1084. ret
  1085. ENDP
  1086.  
  1087. ;-------------------------------------------------------------
  1088. PROC
  1089. proc_update_player:
  1090. ;-------------------------------------------------------------
  1091.     ; AFFECTS: hl, de, a, b
  1092.     ld bc, &FDFE
  1093.     ld d,0
  1094.     in a,(c)
  1095.     ld (SCRATCH_ADDRESS1),a
  1096.     bit 2,a
  1097.     ld hl, PLAYER_X
  1098.     ld b,(hl)
  1099.     call z, proc_move_player_right
  1100.     bit 0,a
  1101.     call z, proc_move_player_left
  1102. proc_update_player_vel:
  1103.     ld hl, PLAYER_X
  1104.     ld (hl),b
  1105.     inc hl
  1106.     ld b,(hl)
  1107.     inc hl
  1108.     ld a,(hl)
  1109.     inc a
  1110.     cp 5
  1111.     jr nz, proc_update_player_cap
  1112.     ld a,4
  1113. proc_update_player_cap:
  1114.     push de
  1115.     push bc
  1116.     push hl
  1117.     push af
  1118.     add a,1
  1119.     ld a,(PLAYER_X)
  1120.     add a,4
  1121.     rra
  1122.     rra
  1123.     rra
  1124.     and %00011111
  1125.     ld c,a 
  1126.     ld a,(PLAYER_Y)
  1127.     add a,23
  1128.     and %11111000
  1129.     ld b,a
  1130.     call proc_get_block_index
  1131.     ld d,(hl)
  1132.     pop af
  1133.     inc d
  1134.     dec d
  1135.     ld (SCRATCH_ADDRESS2),a
  1136.     jr z, proc_update_player_reset_vel
  1137.     pop hl
  1138.     pop bc
  1139.     ld a,b
  1140.     or %00000111
  1141.     ld b,a
  1142.     push bc
  1143.     push hl
  1144.     xor a
  1145.     ld (SCRATCH_ADDRESS2),a
  1146.     ld bc,&FBFE
  1147.     in a,(c)
  1148.     bit 1,a
  1149.     jr nz, proc_update_player_reset_vel
  1150.     ld a,248
  1151.     ld (SCRATCH_ADDRESS2),a
  1152.    
  1153. proc_update_player_reset_vel:
  1154.     ld a,(SCRATCH_ADDRESS2)
  1155.     pop hl
  1156.     pop bc
  1157.     pop de
  1158.     ld (hl),a
  1159.     dec hl
  1160.     add a,b
  1161.     ld (hl),a
  1162.    
  1163. proc_update_player_anim:
  1164.     ld hl,PLAYER_ANIM
  1165.     ld a,d
  1166.     cp 0
  1167.     jr nz,proc_update_player_anim_r
  1168.     ld (hl),0
  1169.     jr proc_update_player_end
  1170. proc_update_player_anim_r:
  1171.     inc (hl)
  1172.     ld a,16
  1173.     cp (hl)
  1174.     jr nz, proc_update_player_end
  1175.     ld (hl),0
  1176. proc_update_player_end:
  1177.     call proc_move_player_out_walls
  1178.     call proc_check_transition
  1179. ret
  1180. ENDP
  1181.  
  1182.  
  1183. ;-------------------------------------------------------------
  1184. PROC
  1185. proc_update_bugs:
  1186. ;-------------------------------------------------------------
  1187.     push ix
  1188.     ld ix,MONSTER_X
  1189.     ld a,(BUG_COUNT)
  1190.     cp 0
  1191.     jr z,proc_update_bugs_end
  1192. proc_update_bugs_loop:
  1193.     push af
  1194.     ld a,(ix)
  1195.     rra
  1196.     rra
  1197.     rra
  1198.     and %00011111
  1199.     ld c,a
  1200.     ld a,(ix+4)
  1201.     cp 0
  1202.     jr nz, proc_update_bugs2
  1203.     ld a,(ix+1)
  1204.     inc a
  1205.     ld (ix+1),a
  1206.     add a,17
  1207.     ld b,a
  1208.     jr proc_update_bugs3
  1209. proc_update_bugs2:
  1210.     ld a,(ix+1)
  1211.     dec a
  1212.     ld (ix+1),a
  1213.     sub 2
  1214.     ld b,a
  1215. proc_update_bugs3:
  1216.     call proc_get_block_index
  1217.     ld a,(hl)
  1218.     cp 0
  1219.     jr nz, proc_update_bugs4
  1220.     ld a,(ix+1)
  1221.     cp 1
  1222.     jr z, proc_update_bugs4
  1223.     cp 127
  1224.     jr z, proc_update_bugs4
  1225.     jr proc_update_bugs_loop_end
  1226. proc_update_bugs4:
  1227.     ld a,(ix+4)
  1228.     ld b,a
  1229.     ld a,1
  1230.     sub b
  1231.     ld (ix+4),a
  1232. proc_update_bugs_loop_end
  1233.     ld de,5
  1234.     add ix,de
  1235.     pop af
  1236.     dec a
  1237.     jr nz,proc_update_bugs_loop
  1238. proc_update_bugs_end:
  1239.     pop ix
  1240. ret
  1241. ENDP
  1242.  
  1243.  
  1244. ;-------------------------------------------------------------
  1245. PROC
  1246. proc_update_walkers:
  1247. ;-------------------------------------------------------------
  1248.     ld a,(BUG_COUNT)
  1249.     ld b,a
  1250.     rla
  1251.     rla
  1252.     add a,b
  1253.     ld b,0
  1254.     ld c,a
  1255.     push ix
  1256.     ld ix,MONSTER_POS
  1257.     add ix,bc ; ix now contains the first address of walkers
  1258.     ld a,(WALKER_COUNT)
  1259.     cp 0
  1260.     jr z,proc_update_walkers_loop_end
  1261.     ld b,a
  1262. proc_update_walkers_loop:
  1263.     push bc
  1264.     ld a,(ix+4)
  1265.     cp 0
  1266.     ld a,(ix)
  1267.     jr nz, proc_update_walkers_2
  1268.     inc a
  1269.     ld (ix),a
  1270.     add a,9
  1271.     jr proc_update_walkers_3
  1272. proc_update_walkers_2:
  1273.     dec a
  1274.     ld (ix),a
  1275.     dec a
  1276. proc_update_walkers_3:
  1277.     rra
  1278.     rra
  1279.     rra
  1280.     and %00011111
  1281.     ld c,a
  1282.     ld a,(ix+1)
  1283.     add a,9
  1284.     ld b,a
  1285.     call proc_get_block_index
  1286.     ld a,(hl)
  1287.     cp 0
  1288.     jr z, proc_update_walkers_end
  1289.     ld b,(ix+4)
  1290.     ld a,1
  1291.     sub b
  1292.     ld (ix+4),a
  1293. proc_update_walkers_end:
  1294.     pop bc
  1295.     ld de,MONSTER_SIZE
  1296.     add ix,de
  1297.     dec b
  1298.     jr nz,proc_update_walkers_loop
  1299. proc_update_walkers_loop_end:
  1300.    
  1301.  
  1302.     pop ix
  1303. ret
  1304. ENDP
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310. ;-------------------------------------------------------------
  1311. PROC
  1312. proc_draw_sprite:
  1313. ;-------------------------------------------------------------
  1314.     ;Input: b: y-position, c: x-position, d: sprite attribute ix: sprite address
  1315.     ;Affects: Everything
  1316.    
  1317. ;Get sprite address from x value
  1318.     ld a,c
  1319.     rla
  1320.     rla
  1321.     rla
  1322.     rla
  1323.     rla
  1324.     and %11100000
  1325.     push bc
  1326.     ld b,0
  1327.     ld c,a
  1328.     add ix,bc ;ix now contains the sprite address
  1329.     pop bc
  1330.     ld a,c
  1331.     rra
  1332.     rra
  1333.     rra
  1334.     and %00011111
  1335.     ld c,a
  1336.    
  1337.     push bc
  1338.     push de
  1339.     ld a,b
  1340.     rra
  1341.     rra
  1342.     rra
  1343.     and %00011111
  1344.     ld b,a
  1345.     call proc_get_screen_attribute_address
  1346.     pop de
  1347.     ld bc,32
  1348.     ld a,d
  1349.     ld (hl),a
  1350.     inc hl
  1351.     ld (hl),a
  1352.     add hl,bc
  1353.     ld (hl),a
  1354.     dec hl
  1355.     ld (hl),a
  1356.     add hl,bc
  1357.     ld (hl),a
  1358.     inc hl
  1359.     ld (hl),a
  1360.     pop bc
  1361.    
  1362.     ld d,16
  1363. proc_draw_sprite_loop:
  1364.     push de
  1365.     call proc_get_screen_pixel_address
  1366.     ld a,(ix)
  1367.     ld (hl),a
  1368.     inc hl
  1369.     inc ix
  1370.     ld a,(ix)
  1371.     ld (hl),a  
  1372.     inc hl
  1373.     inc ix
  1374.     pop de
  1375.     inc b
  1376.     dec d
  1377.     jr nz, proc_draw_sprite_loop
  1378. ret
  1379. ENDP
  1380.  
  1381.  
  1382. ;-------------------------------------------------------------
  1383. PROC
  1384. proc_draw_sprites:
  1385. ;-------------------------------------------------------------
  1386.     ; AFFECTS: everything
  1387.     ; Draws player
  1388.    
  1389.  
  1390.     ld bc,(PLAYER_POS)
  1391.     ld ix,(PLAYER_SPRITE)
  1392.     ld d,BLACK_PAPER | PURPLE_INK | BRIGHT
  1393.     call proc_draw_sprite  
  1394.    
  1395.     ld iy,MONSTER_X
  1396.     ld a,(BUG_COUNT)
  1397.     ld b,a
  1398.     ld a,(WALKER_COUNT)
  1399.     add a,b
  1400.     cp 0
  1401.     jr z,proc_draw_sprites_bugs_end
  1402.     ld b,a
  1403.     ld a,0
  1404.     ld (SCRATCH_ADDRESS3),a
  1405. proc_draw_sprites_loop:
  1406.     ld a,b
  1407.     push bc
  1408.     ld a,(iy)
  1409.     ld c,a
  1410.     ld a,(iy+1)
  1411.     ld b,a
  1412.     ld a,(iy+2)
  1413.     ld (CURRENT_SPRITE),a
  1414.     ld a,(iy+3)
  1415.     ld (CURRENT_SPRITE+1),a
  1416.     ld ix,(CURRENT_SPRITE)
  1417.     ld d,BLACK_PAPER | YELLOW_INK | BRIGHT
  1418.     call proc_draw_sprite
  1419.     ld bc,MONSTER_SIZE
  1420.     add iy,bc
  1421.     pop bc
  1422.     dec b
  1423.     jr nz,proc_draw_sprites_loop
  1424. proc_draw_sprites_bugs_end:
  1425. ret
  1426. ENDP
  1427.  
  1428.  
  1429. ;-------------------------------------------------------------
  1430. PROC
  1431. proc_get_block_index:
  1432. ;-------------------------------------------------------------
  1433.     ; IN: b = y-pixel coord (0..191), c: x-cell coord (0..31)
  1434.     ; OUT: hl = block address
  1435.     ; AFFECTS: a,bc,hl
  1436.     ld a,b
  1437.     and %11111000
  1438.     ld b,0
  1439.     ld hl,(CURRENT_ROOM_ADDRESS)
  1440.     rla
  1441.     rl b
  1442.     rla
  1443.     rl b
  1444.     add a,c
  1445.     ld c,a
  1446.     xor a
  1447.     adc a,b
  1448.     add hl,bc
  1449. ret
  1450. ENDP   
  1451.  
  1452. ;-------------------------------------------------------------
  1453. PROC
  1454. proc_draw_block:
  1455. ;-------------------------------------------------------------
  1456.     ; AFFECTS: everything
  1457.     call proc_get_screen_attribute_address
  1458.     ld (SCRATCH_ADDRESS1),hl
  1459.     ld a,b
  1460.     ld b,0
  1461.     rla
  1462.     rla
  1463.     rla
  1464.     and %11111000
  1465.     ld b,a
  1466.     call proc_get_screen_pixel_address
  1467.     push hl
  1468.     call proc_get_block_index
  1469.     ld a,(hl) ; Get block number
  1470.     ld hl,DATA_BLOCK_ATTRIBS
  1471.     push af ; Store block number
  1472.     push bc
  1473.     ld b,0
  1474.     ld c,a
  1475.     ld de,(SCRATCH_ADDRESS1)
  1476.     add hl,bc
  1477.     ld a,(hl)
  1478.     ld (de),a
  1479.     pop bc
  1480.     pop af
  1481.     rla
  1482.     rla
  1483.     rla
  1484.     ld bc,0
  1485.     ld c,a
  1486.     ld hl,BLOCK_0
  1487.     add hl,bc
  1488.     ld b,h
  1489.     ld c,l
  1490.     pop hl
  1491.     ld d,8
  1492. proc_draw_block_loop:
  1493.     ld a,(bc)
  1494.     ld (hl),a
  1495.     inc bc
  1496.     push de
  1497.     ld de,32*8
  1498.     add hl,de
  1499.     pop de
  1500.     dec d
  1501.     jr nz, proc_draw_block_loop
  1502. ret
  1503. ENDP
  1504.    
  1505. ;-------------------------------------------------------------
  1506. PROC
  1507. proc_draw_blocks:
  1508. ;-------------------------------------------------------------
  1509.     ; AFFECTS: everything
  1510.     ld bc,0
  1511. proc_draw_blocks_loop:
  1512.     push bc
  1513.     call proc_draw_block
  1514.     pop bc
  1515.     inc c
  1516.     ld a,32
  1517.     cp c
  1518.     jr nz,proc_draw_blocks_loop
  1519.     ld c,0
  1520.     inc b
  1521.     ld a,ROOM_HEIGHT
  1522.     cp b
  1523.     jr nz,proc_draw_blocks_loop
  1524. ret
  1525. ENDP
  1526.  
  1527. ;-------------------------------------------------------------
  1528. PROC
  1529. proc_redraw_blocks:
  1530. ;-------------------------------------------------------------
  1531.     ; AFFECTS: everything
  1532.     ld bc,(PLAYER_POS)
  1533.     ld a,b
  1534.     rra
  1535.     rra
  1536.     rra
  1537.     and %00011111
  1538.     ld b,a
  1539.     ld a,c
  1540.     rra
  1541.     rra
  1542.     rra
  1543.     and %00011111
  1544.     ld c,a
  1545.     push bc
  1546.     call proc_draw_block
  1547.     pop bc
  1548.     inc c
  1549.     push bc
  1550.     call proc_draw_block
  1551.     pop bc
  1552.     inc b
  1553.     push bc
  1554.     call proc_draw_block
  1555.     pop bc
  1556.     dec c
  1557.     push bc
  1558.     call proc_draw_block
  1559.     pop bc
  1560.     inc b
  1561.     push bc
  1562.     call proc_draw_block
  1563.     pop bc
  1564.     inc c
  1565.     call proc_draw_block
  1566.    
  1567.     ld iy,MONSTER_START
  1568.     ld a,(BUG_COUNT)
  1569.     cp 0
  1570.     jr z, proc_redraw_blocks_bugs_end
  1571.     ld b,a
  1572. proc_redraw_blocks_loop:
  1573.     push bc
  1574.     ld a,(iy)
  1575.     rra
  1576.     rra
  1577.     rra
  1578.     and %00011111
  1579.     ld c,a
  1580.     ld a,(iy+1)
  1581.     dec a
  1582.     ld b,a
  1583.     ld a,(iy+4)
  1584.     cp 0
  1585.     jr z,proc_redraw_blocks2
  1586.     ld a,b
  1587.     add a,17
  1588.     ld b,a
  1589. proc_redraw_blocks2:
  1590.     push bc
  1591.     call proc_get_block_index
  1592.     pop bc
  1593.     ld (CURRENT_SPRITE),hl
  1594.     ld ix,(CURRENT_SPRITE)
  1595.     call proc_get_screen_pixel_address
  1596.     ld a,(ix)
  1597.     ld (hl),a
  1598.     inc ix
  1599.     inc hl
  1600.     ld a,(ix)
  1601.     ld (hl),a
  1602.     ld de,MONSTER_SIZE
  1603.     add iy,de
  1604.     pop bc
  1605.     dec b
  1606.     jr nz,proc_redraw_blocks_loop
  1607. proc_redraw_blocks_bugs_end:
  1608.     ld a,(WALKER_COUNT)
  1609.     cp 0
  1610.     jr z,proc_redreaw_blocks_walkers_end
  1611.     ld b,a
  1612. proc_redraw_blocks_loop2:
  1613.     push bc
  1614.     ld a,(iy)
  1615.     and %00000111
  1616.     jr nz, proc_redraw_blocks_loop2_end
  1617.     ld a,(iy)
  1618.     dec a
  1619.     rra
  1620.     rra
  1621.     rra
  1622.     and %00011111
  1623.     ld c,a
  1624.     ld a,(iy+1)
  1625.     rra
  1626.     rra
  1627.     rra
  1628.     and %00011111
  1629.     ld b,a
  1630.     inc b
  1631.     push bc
  1632.     call proc_draw_block
  1633.     pop bc
  1634.     inc b
  1635.     call proc_draw_block
  1636. proc_redraw_blocks_loop2_end:
  1637.     pop bc
  1638.     ld de, 5
  1639.     add iy,de
  1640.     dec b
  1641.     jr nz,proc_redraw_blocks_loop2
  1642. proc_redreaw_blocks_walkers_end:
  1643. ret
  1644. ENDP
  1645.  
  1646. ;-------------------------------------------------------------
  1647. PROC
  1648. proc_draw_gems:
  1649. ;-------------------------------------------------------------
  1650.     ; AFFECTS: everything
  1651.     push iy
  1652.     push ix
  1653.    
  1654.     ld a,(GEM_COLOR)
  1655.     inc a
  1656.     and %00000111
  1657.     jr nz,proc_draw_gems2
  1658.     inc a
  1659. proc_draw_gems2:
  1660.     or BLACK_PAPER
  1661.     ld (GEM_COLOR),a
  1662.    
  1663.     ld ix,CURRENT_ROOM_GEMS
  1664.     ld b,6
  1665. proc_draw_gems_loop:
  1666.     push bc
  1667.     ld a,$FF
  1668.     cp (ix)
  1669.     jr z, proc_draw_gems_loop_end
  1670.     ld b,(ix+1)
  1671.     ld c,(ix)
  1672.     push bc
  1673.     ld a,b
  1674.     rra
  1675.     rra
  1676.     rra
  1677.     and %00011111
  1678.     ld b,a
  1679.     call proc_get_screen_attribute_address
  1680.     ld a, (GEM_COLOR)
  1681.     ld (hl),a
  1682.     pop bc
  1683.     call proc_get_screen_pixel_address
  1684.     ld de, 32*8
  1685.     ld b,8
  1686.     ld iy,DATA_GEM
  1687. proc_draw_gems_loop2:
  1688.     ld a,(iy)
  1689.     ld (hl),a
  1690.     inc iy
  1691.     add hl,de
  1692.     dec b
  1693.     jr nz,proc_draw_gems_loop2
  1694. proc_draw_gems_loop_end:
  1695.     inc ix
  1696.     inc ix
  1697.     pop bc
  1698.     dec b
  1699.     jr nz, proc_draw_gems_loop
  1700.    
  1701.     pop ix
  1702.     pop iy
  1703. ret
  1704. ENDP
  1705.    
  1706. ;-------------------------------------------------------------
  1707. PROC
  1708. proc_set_gem_data:
  1709. ;-------------------------------------------------------------
  1710.     ; AFFECTS: a, bc, hl
  1711.     ld b,0
  1712.     ld a,(CURRENT_ROOM_NUMBER)
  1713.     ld c,a
  1714.     ld hl,COLLECTED_GEMS
  1715.     add hl,bc
  1716.     ld a,(hl) ; a contains gem bits and such
  1717.     ld c,6
  1718.     ld hl,CURRENT_ROOM_GEMS
  1719. proc_set_gem_loop:
  1720.     bit 0,a
  1721.     jr z,proc_set_gem_loop_end
  1722.     ld (hl),$FF
  1723. proc_set_gem_loop_end:
  1724.     inc l
  1725.     inc l
  1726.     rra
  1727.     dec c
  1728.     jr nz,proc_set_gem_loop
  1729. ret
  1730. ENDP
  1731.  
  1732. ;-------------------------------------------------------------
  1733. PROC
  1734. proc_draw_text:
  1735. ;-------------------------------------------------------------
  1736.     ; Input: b: y-position, c: x-cell, a: character
  1737.     ; AFFECTS: everything
  1738.     ld d,0
  1739.     rla
  1740.     rl d
  1741.     rla
  1742.     rl d
  1743.     rla
  1744.     rl d
  1745.     and %11111000
  1746.     ld e,a
  1747.     ld ix,$3D00
  1748.     add ix,de
  1749.     call proc_get_screen_pixel_address
  1750.     ld b,8
  1751.     ld de,32*8
  1752. proc_draw_text_loop:
  1753.     ld a,(ix)
  1754.     ld (hl),a
  1755.     inc ix
  1756.     add hl,de
  1757.     dec b
  1758.     jr nz,proc_draw_text_loop
  1759. ret
  1760. ENDP
  1761.  
  1762. ;-------------------------------------------------------------
  1763. PROC
  1764. proc_draw_string:
  1765. ;-------------------------------------------------------------
  1766.     ; Input: b: y-position, c: x-cell, hl: string address
  1767.     ; AFFECTS: everything
  1768.     ld a,(hl)
  1769.     cp 0
  1770.     ret z
  1771.     push hl
  1772.     push bc
  1773.     call proc_draw_text
  1774.     pop bc
  1775.     pop hl
  1776.     inc hl
  1777.     inc c
  1778.     jr proc_draw_string
  1779. ENDP
  1780.  
  1781.  
  1782. ;-------------------------------------------------------------
  1783. PROC
  1784. proc_draw_values_text:
  1785. ;-------------------------------------------------------------
  1786.     ld a,(PLAYER_GEMS)
  1787.     and $0F
  1788.     add a,CHAR_ZERO
  1789.     ld (PLAYER_GEM_TEXT+1),a
  1790.     ld a,(PLAYER_GEMS)
  1791.     rra
  1792.     rra
  1793.     rra
  1794.     rra
  1795.     and $0F
  1796.     add a,CHAR_ZERO
  1797.     ld (PLAYER_GEM_TEXT),a
  1798.    
  1799.     ld bc,$A003
  1800.     ld hl,DATA_LIVES_STRING
  1801.     call proc_draw_string
  1802.     inc hl
  1803.     ld c, 20
  1804.     call proc_draw_string
  1805. ret
  1806. ENDP
  1807.  
  1808. ;-------------------------------------------------------------
  1809. PROC
  1810. proc_load_map:
  1811. ;-------------------------------------------------------------
  1812.     ; Input: None
  1813.     ; AFFECTS: everything
  1814.     ld a,(PLAYER_X)
  1815.     ld (PLAYER_ENTRY_X),a
  1816.     ld a,(PLAYER_Y)
  1817.     ld (PLAYER_ENTRY_Y),a
  1818.    
  1819.     xor a
  1820.     ld hl, $50C0
  1821.     ld bc,$0820
  1822.     ld de,32*7
  1823. proc_load_map_loop:
  1824.     ld (hl),a
  1825.     inc hl
  1826.     dec c
  1827.     jr nz,proc_load_map_loop
  1828.     ld c,32
  1829.     add hl,de
  1830.     dec b
  1831.     jr nz,proc_load_map_loop
  1832.    
  1833.    
  1834.     ld b,0
  1835.     ld a,(CURRENT_ROOM_NUMBER)
  1836.     rla
  1837.     and %00000110
  1838.     ld c,a
  1839.     ld hl,DATA_ROOM_LIST
  1840.     add hl,bc
  1841.     ld b,(hl)
  1842.     inc hl
  1843.     ld c,(hl)
  1844.     ld (CURRENT_ROOM_ADDRESS),bc
  1845.    
  1846.     push bc
  1847.     call proc_draw_blocks
  1848.     pop hl
  1849.     ld bc,ROOM_SIZE
  1850.     add hl,bc
  1851.     ld a,(hl)
  1852.     ld de,MONSTER_START
  1853.     ld (BUG_COUNT),a
  1854.     ld b,a
  1855.     inc hl
  1856.     ld a,(hl)
  1857.     ld (WALKER_COUNT),a
  1858.     add a,b
  1859.    
  1860.     ld b,a
  1861.     rla
  1862.     rla
  1863.     add a,b
  1864.     ld b,0
  1865.     ld c,a
  1866.     inc c
  1867.     inc hl
  1868.     ldir
  1869.     dec hl
  1870.     ld bc,$B001
  1871.     call proc_draw_string
  1872.    
  1873.     inc hl
  1874.     ld bc,12
  1875.     ld de,CURRENT_ROOM_GEMS
  1876.     ldir
  1877.     call proc_set_gem_data
  1878.     call proc_draw_values_text
  1879.    
  1880.    
  1881. ret
  1882. ENDP
  1883.  
  1884.  
  1885. ;==============================================================
  1886. ; Initialization
  1887. ;==============================================================
  1888. start:
  1889.     ld a, BLUE_PAPER | WHITE_INK
  1890.     call proc_fill_screen_attribute
  1891.     ld hl, PLAYER_POS
  1892.     ld a, 40
  1893.     ld (hl),a
  1894.     ld a, 24
  1895.     inc hl
  1896.     ld (hl),a
  1897.     xor a
  1898.     ld (PLAYER_GEMS),a
  1899.     inc hl
  1900.     ld (hl),a
  1901.     ld hl, PLAYER_ANIM
  1902.     ld (hl),a
  1903.     ld hl, DATA_ZIGGY_RIGHT
  1904.     ld (PLAYER_SPRITE), hl
  1905.     ld hl, CURRENT_ROOM_NUMBER
  1906.     ld (hl),0
  1907.     ld a,CHAR_ZERO+3
  1908.     ld (PLAYER_LIVES),a
  1909.    
  1910.     ld hl,COLLECTED_GEMS
  1911.     xor a
  1912.     ld b,64
  1913. start_reset_loop:
  1914.     ld (hl),a
  1915.     inc hl
  1916.     dec b
  1917.     jr nz,start_reset_loop
  1918.    
  1919.     call proc_load_map
  1920. loopyboy:
  1921.     halt
  1922.     call proc_redraw_blocks
  1923.     call proc_update_player
  1924.     call proc_draw_sprites
  1925.     call proc_draw_gems
  1926.     call proc_update_bugs
  1927.     call proc_update_walkers
  1928.     call proc_check_player_collect
  1929.     call proc_check_player_death
  1930.     ld a,(PLAYER_LIVES)
  1931.     cp CHAR_ZERO-1
  1932.     jr nz,loopyboy
  1933.     jr start
  1934. ret
  1935. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement