Advertisement
AnthonyCagliano

Die Roll/Die Render Crash

Jan 14th, 2017
451
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.96 KB | None | 0 0
  1. ; YAHTZEE CE EDITION
  2. ; Version 0.1 beta
  3. ; by ACagliano
  4.  
  5. #include "inc/ti84pce.inc"
  6.  
  7. .assume ADL=1
  8. .org userMem-2
  9. .db tExtTok,tAsm84CeCmp
  10.  
  11. cRed equ 224
  12. cWhite equ 255
  13. cBlue equ 24
  14. cBlack equ 0
  15. cGreen equ 4
  16. cYellow equ 231
  17.  
  18. gameRAM equ pixelShadow
  19. scratchRAM equ YahtzeeDataEnd-YahtzeeData+gameRAM
  20.  
  21. Start:
  22. ld hl, LibLoadAppVar
  23. call _Mov9ToOP1
  24. ld a, AppVarObj
  25. ld (OP1), a
  26. _: call _ChkFindSym
  27. jr c, NotFound
  28. call _ChkInRAM
  29. jr nz, InArc
  30. call _PushOP1
  31. call _Arc_UnArc
  32. call _PopOP1
  33. jr -_
  34. InArc:
  35. ex de, hl
  36. ld de, 9
  37. add hl, de
  38. ld e, (hl)
  39. add hl, de
  40. inc hl
  41. inc hl
  42. inc hl
  43. ld de, RelocationStart
  44. jp (hl)
  45. NotFound:
  46. call _ClrScrn
  47. call _HomeUp
  48. ld hl, MissingAppVar
  49. call _PutS
  50. jp _NewLine
  51. MissingAppVar:
  52. .db "LIBLOAD not present!",0
  53. RelocationStart:
  54. .db 0C0h, "GRAPHX", 0, 4
  55. gfx_Begin:
  56. jp 0
  57. gfx_End:
  58. jp 1*3
  59. gfx_SetDraw:
  60. jp 9*3
  61. gfx_SetDefaultPalette:
  62. jp 3*3
  63. gfx_FillScreen:
  64. jp 5*3
  65. gfx_PrintChar:
  66. jp 42
  67. gfx_PrintStringXY:
  68. jp 18*3
  69. gfx_SetTextBGColor:
  70. jp 20*3
  71. gfx_SetTextFGColor:
  72. jp 63
  73. gfx_Sprite:
  74. jp 57*3
  75. gfx_SSprite:
  76. jp 62*3
  77. gfx_FillRectangle:
  78. jp 36*3
  79. gfx_SetTextScale:
  80. jp 74*3
  81.  
  82.  
  83. ; Set up and initialize graphics
  84. di
  85. call _ClrScrn
  86. call _RunIndicOff
  87.  
  88. ld a,r ;\
  89. ld h,a ; |
  90. xor 77 ; |Seed the RNG
  91. ld l,a ; |
  92. ld (seed1),hl ; |
  93. ld (seed2),hl ;/
  94. ld hl,lcdbpp8
  95. push hl
  96. call gfx_Begin
  97. pop hl
  98. ld hl, 0 \ push hl
  99. call gfx_SetDraw
  100. pop hl
  101.  
  102. _initfile: ; if save file not found, zero gamestate. Then start gameplay
  103. ld de, gameRAM
  104. ld hl, YahtzeeData
  105. ld bc, YahtzeeDataEnd-YahtzeeData
  106. ldir
  107. ld hl, playsAllowedFlags
  108. set playRoll, (hl)
  109.  
  110. call MainMenu
  111. ld a, 0
  112. splash_GetCSC_loop:
  113. call _kbdscan
  114. ld a, (kbdScanCode)
  115. cp skEnter \ jr nz, splash_GetCSC_loop
  116.  
  117. ; main menu
  118.  
  119. GameStart:
  120. call RefreshScreen
  121. ld a, 0
  122. KeyGetLoop:
  123. call _kbdscan
  124. ld a, (kbdScanCode)
  125. or a \ jr z, KeyGetLoop
  126. ; keypad reading
  127. ld hl, playsAllowedFlags
  128. bit playRoll, (hl)
  129. jr z, noRolls
  130. cp sk2nd
  131. jp z, RollDie
  132. cp skYequ \ jp z, holdDie
  133. cp skWindow \ jp z, holdDie
  134. cp skZoom \ jp z, holdDie
  135. cp skTrace \ jp z, holdDie
  136. cp skGraph \ jp z, holdDie
  137. bit playScore, (hl)
  138. jr z, noScores
  139. noRolls:
  140. ; Scoring
  141. bit playScore, (hl)
  142. jr z, noScores
  143. cp skDown
  144. jp z, SwapRow
  145. cp skUp
  146. jp z, SwapRow
  147. cp skRight
  148. jp z, MoveRight
  149. cp skLeft
  150. jp z, MoveLeft
  151. cp skEnter
  152. jp z, ScoreCombo
  153. noScores:
  154. cp skClear
  155. jp z, Quit
  156. ld a, 0 \ jr KeyGetLoop
  157.  
  158. GameLoop_End:
  159. call CalcCurrentScore
  160. ld hl, comboFlags1 \ ld a, (hl)
  161. cp %00111111 \ jr nz, GameStart
  162. ld hl, comboFlags2 \ ld a, (hl)
  163. cp %01111111 \ jp nz, GameStart
  164. jr GameOver
  165. ; exit game conditions
  166. jp GameStart
  167.  
  168. GameOver:
  169. ld hl, Score \ ld bc, (hl)
  170. ld hl, HighScore \ ld hl, (hl)
  171. or a \ sbc hl, bc \ jp nc, MainMenu
  172. ld hl, HighScore \ ld (hl), bc
  173. jp MainMenu
  174.  
  175.  
  176.  
  177.  
  178. MoveRight:
  179. ld hl, comboSelected
  180. ld a, (hl)
  181. cp 12
  182. jp z, GameLoop_End
  183. inc a
  184. jr Move_End
  185. MoveLeft:
  186. ld hl, comboSelected
  187. ld a, (hl)
  188. cp 0
  189. jp z, GameLoop_End
  190. dec a
  191. Move_End:
  192. ld (hl), a
  193. jp GameLoop_End
  194.  
  195. SwapRow:
  196. ld hl, comboSelected
  197. ld a, (hl)
  198. cp 12
  199. jp z, GameLoop_End
  200. cp 6
  201. jr c, swap_tobottom
  202. ;swap_totop:
  203. sub 6
  204. jr swap_end
  205. swap_tobottom:
  206. ld b,6
  207. add a,b
  208. swap_end:
  209. ld (hl), a
  210. jp GameLoop_End
  211.  
  212.  
  213. holdDie:
  214. jp GameLoop_End
  215.  
  216.  
  217.  
  218. RollDie:
  219. ld de, dieValues
  220. ; roll die 1
  221. ld a, 6
  222. push de \ call rand \ pop de
  223. inc a
  224. ld (de), a \ inc de
  225. ; roll die 2
  226. ld a, 6
  227. push de \ call rand \ pop de
  228. inc a
  229. ld (de), a \ inc de
  230. ; roll die 3
  231. ld a, 6
  232. push de \ call rand \ pop de
  233. inc a
  234. ld (de), a \ inc de
  235. ; roll die 4
  236. ld a, 6
  237. push de \ call rand \ pop de
  238. inc a
  239. ld (de), a \ inc de
  240. ; roll die 5
  241. ld a, 6
  242. push de \ call rand \ pop de
  243. inc a
  244. ld (de), a
  245. ld hl, playsAllowedFlags
  246. set playScore, (hl)
  247. jp GameLoop_End
  248.  
  249. Quit:
  250. call _ClrScrn
  251. call gfx_End
  252. ld iy, flags
  253. jp _DrawStatusBar
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260. RefreshScreen:
  261. call gfx_ClearVram
  262. ld a, cYellow \ ld hl, 0
  263. ld l, a
  264. push hl
  265. call gfx_SetTextFGColor
  266. pop hl
  267. ld a, cRed \ ld l, a
  268. push hl
  269. call gfx_SetTextBGColor
  270. pop hl
  271. ; draw game banner
  272. ld hl, 320*220+vram
  273. ld bc, 20*320
  274. ld a, cRed
  275. call _MemSet
  276. ld hl,1
  277. push hl
  278. push hl
  279. call gfx_setTextScale
  280. pop hl
  281. pop hl
  282. ld hl,227 \ push hl
  283. ld hl, 5 \ push hl
  284. ld hl, GameLBannerText \ push hl
  285. call gfx_PrintStringXY
  286. pop hl
  287. pop hl
  288. pop hl
  289. ; draw key assist
  290. ld hl, 320*155+vram
  291. ld bc, 320*65
  292. ld a, cYellow
  293. call _MemSet
  294. ld a, cRed \ ld hl, 0
  295. ld l, a
  296. push hl
  297. call gfx_SetTextFGColor
  298. pop hl
  299. ld a, cYellow \ ld l, a
  300. push hl
  301. call gfx_SetTextBGColor
  302. pop hl
  303. ld hl, 180 \ push hl
  304. ld hl, 30 \ push hl
  305. ld hl, KeyAssistHold \ push hl
  306. call gfx_PrintStringXY
  307. pop hl
  308. pop hl
  309. pop hl
  310. ld hl, 190 \ push hl
  311. ld hl, 30 \ push hl
  312. ld hl, KeyAssistArrows \ push hl
  313. call gfx_PrintStringXY
  314. pop hl
  315. pop hl
  316. pop hl
  317. ld hl, 200 \ push hl
  318. ld hl, 30 \ push hl
  319. ld hl, KeyAssistScore \ push hl
  320. call gfx_PrintStringXY
  321. pop hl
  322. pop hl
  323. pop hl
  324. ld hl, 210 \ push hl
  325. ld hl, 30 \ push hl
  326. ld hl, KeyAssistRoll \ push hl
  327. call gfx_PrintStringXY
  328. pop hl
  329. pop hl
  330. pop hl
  331. ld hl, 320*175+vram
  332. ld bc, 320
  333. ld a, cRed
  334. call _MemSet
  335. ld hl, 320*155+vram
  336. ld bc, 320
  337. call _MemSet
  338. ld hl, 162 \ push hl
  339. ld hl, 20 \ push hl
  340. ld hl, playsAllowedFlags \ ld a, (hl)
  341. cp %00000001 \ jr nz, gameScrn_skipRoll
  342. ld hl, MoveAssistRoll \ push hl
  343. jr gameScrn_endActionText
  344. gameScrn_skipRoll:
  345. cp %00000010 \ jr nz, gameScrn_skipScore
  346. ld hl, MoveAssistScore \ push hl
  347. jr gameScrn_endActionText
  348. gameScrn_skipScore:
  349. ld hl, MoveAssistBoth \ push hl
  350. gameScrn_endActionText:
  351. call gfx_PrintStringXY
  352. pop hl
  353. pop hl
  354. pop hl
  355. ld a, cRed
  356. ld hl, vram
  357. ld bc, 36*320
  358. call _MemSet
  359. ld hl, 2 \ push hl \ push hl
  360. ld hl, 2 \ push hl
  361. ld hl, 70
  362. ld de, dieValues-1 \ ld b, 5
  363. dierender_foreach:
  364. ; we enter this loop with the sprite x and y scale, and y position pushed
  365. ; the x position is in hl, and the pointer to the die value array -1 is in ix
  366. push hl
  367. ld hl, scratchRAM \ ld (hl), bc
  368. call sprite_getPointer
  369. push hl
  370. call gfx_SSprite
  371. pop hl
  372. ld hl, scratchRAM \ ld bc, (hl)
  373. pop hl
  374. ld a, b
  375. ld bc, 34 \ add hl, bc
  376. ld b, a
  377. djnz dierender_foreach
  378. pop hl
  379. pop hl
  380. pop hl
  381. ret
  382.  
  383. sprite_getPointer:
  384. ; in = ix pointing to byte before die value
  385. ; out = ix advanced 1, hl points to sprite
  386. push bc
  387. inc de \ ld a, (de) \ inc a
  388. ld hl, DieSpritesStart-258
  389. ld bc, 258
  390. ld b, a
  391. jumptospriteloop:
  392. add hl, bc
  393. djnz jumptospriteloop
  394. pop bc
  395. ret
  396.  
  397.  
  398. rand:
  399. ;;Input: A is the range.
  400. ;;Output: Returns in A a random number from 0 to (input)A-1.
  401. ;; B=0
  402. ;; DE is a pseudo-random 16-bit integer.
  403. ;;Destroys:
  404. ;; HL
  405. ;;Speed:
  406. push af
  407. call prng24
  408. ex de,hl
  409. pop af
  410. or a \ sbc hl,hl
  411. ld b,h
  412. add a,a \ jr nc,$+5 \ push de \ pop hl
  413. add hl,hl \ rla \ jr nc,$+4 \ add hl,de \ adc a,b
  414. add hl,hl \ rla \ jr nc,$+4 \ add hl,de \ adc a,b
  415. add hl,hl \ rla \ jr nc,$+4 \ add hl,de \ adc a,b
  416. add hl,hl \ rla \ jr nc,$+4 \ add hl,de \ adc a,b
  417. add hl,hl \ rla \ jr nc,$+4 \ add hl,de \ adc a,b
  418. add hl,hl \ rla \ jr nc,$+4 \ add hl,de \ adc a,b
  419. add hl,hl \ rla \ ret nc \ add hl,de \ adc a,b
  420. ret
  421.  
  422. prng24:
  423. ;collab with Runer112
  424. ;;Output:
  425. ;; HL is a pseudo-random int
  426. ;; A and BC are also, but much weaker and smaller cycles
  427. ;; Preserves DE
  428. ;;148cc, super fast
  429. ;;26 bytes
  430. ;;period length: 4,294,901,760
  431. seed1=$+1
  432. ld hl,9999
  433. ld b,h
  434. ld c,l
  435. add hl,hl
  436. add hl,hl
  437. inc l
  438. add hl,bc
  439. ld (seed1),hl
  440. seed2=$+1
  441. ld hl,987
  442. add hl,hl
  443. sbc a,a
  444. and %00101101
  445. xor l
  446. ld l,a
  447. ld (seed2),hl
  448. add hl,bc
  449. ret
  450.  
  451.  
  452. TitleText:
  453. .db "TI - Yahtzee",0
  454. AnyKeyText:
  455. .db "Press [Enter] to start",0
  456.  
  457. GameLBannerText:
  458. .db "Yahtzee CE, Version 1.0, by ACagliano",0
  459.  
  460. KeyAssistHold:
  461. .db "[Y= <> Graph] = Hold Die",0
  462. KeyAssistArrows:
  463. .db "[Arrow Keys] = Select Combo",0
  464. KeyAssistScore:
  465. .db "[Enter] = Score Combo",0
  466. KeyAssistRoll:
  467. .db "[2nd] = Roll Die, [Clear] = Quit",0
  468.  
  469. MoveAssistRoll:
  470. .db "Roll Die Now!",0
  471. MoveAssistScore:
  472. .db "Score a Combo Now!",0
  473. MoveAssistBoth:
  474. .db "Roll Die or Score Combo",0
  475.  
  476. LibLoadAppVar:
  477. .db 0,"LibLoad",0
  478. YahtzeeSave:
  479. .db 0,"YahtSav",0
  480.  
  481. YahtzeeData:
  482. .dw 0,0 ; Score, High Score (6 bytes)
  483. .db 0,0,0,0,0 ; Die Values (5 bytes)
  484. .db %00000000 ; Die Held? (1 byte)
  485. .db 0 ; Number Rolls (1 byte)
  486. .db %00000001 ; Plays Allowed - Roll Only, Score Only, Both
  487. .db %00000000 ; Combo Scored 1's - 6's (1 byte)
  488. .db %00000000 ; Combo Scored 3k, 4k, FH, SS, LS, CH, YATZ (1 byte)
  489. .db 0,0,0,0,0,0 ; Combo Scores 1's - 6's (6 bytes)
  490. .db 0,0,0,0,0,0,0 ; Combo Scores 3k - YATZ (7 bytes)
  491. .db 0,0,0,0 ; Selected Combo, Calculated Score, 1-6s Bonus, Yahtzee Bonus
  492. .db %00000000 ; bonus flags (0 = 1-6's)
  493. .db %00000000 ; bonus apply flags (yatz = 0, Ns = 1)
  494. YahtzeeDataEnd:
  495.  
  496.  
  497. Score equ gameRAM
  498. HighScore equ Score+3
  499. dieValues equ HighScore+3
  500. dieHoldFlags equ dieValues+5
  501. dieRolls equ dieHoldFlags+1
  502. playsAllowedFlags equ dieRolls+1
  503. comboFlags1 equ dieHoldFlags+1
  504. comboFlags2 equ comboFlags1+1
  505. comboScores equ comboFlags2+1
  506. comboSelected equ comboScores+13
  507. calcedScore equ comboSelected+1
  508. calcedNsBonus equ calcedScore+1
  509. calcedYatzBonus equ calcedNsBonus+1
  510. bonusFlags equ calcedBonus+1
  511. bonusApplyFlags equ bonusFlags+1
  512. ; bit values for Plays Allowed
  513. playRoll equ 0
  514. playScore equ 1
  515. ; bit balues for combo flags 1
  516. c1s equ 0
  517. c2s equ 1
  518. c3s equ 2
  519. c4s equ 3
  520. c5s equ 4
  521. c6s equ 5
  522. ; bit values for combo flags 2
  523. c3K equ 0
  524. c4K equ 1
  525. cFH equ 2
  526. cSS equ 3
  527. cLS equ 4
  528. cCH equ 5
  529. cYATZ equ 6
  530.  
  531.  
  532. #include "source/yahtzee/gfx.asm"
  533. #include "source/yahtzee/combos.asm"
  534. #include "source/yahtzee/data.asm"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement