Advertisement
Guest User

Untitled

a guest
Jan 13th, 2017
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.10 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. call _NewLine
  51. jp _PutS
  52. MissingAppVar:
  53. .db "LIBLOAD not present!",0
  54. RelocationStart:
  55. .db 0C0h, "GRAPHX", 0, 4
  56. gfx_Begin:
  57. jp 0
  58. gfx_End:
  59. jp 1*3
  60. gfx_SetDraw:
  61. jp 9*3
  62. gfx_SetDefaultPalette:
  63. jp 3*3
  64. gfx_FillScreen:
  65. jp 5*3
  66. gfx_PrintChar:
  67. jp 42
  68. gfx_PrintStringXY:
  69. jp 18*3
  70. gfx_SetTextBGColor:
  71. jp 20*3
  72. gfx_SetTextFGColor:
  73. jp 63
  74. gfx_Sprite:
  75. jp 57*3
  76. gfx_SSprite:
  77. jp 62*3
  78. gfx_FillRectangle:
  79. jp 36*3
  80. gfx_SetTextScale:
  81. jp 74*3
  82.  
  83.  
  84. ; Set up and initialize graphics
  85. di
  86. call _ClrScrn
  87. call _RunIndicOff
  88.  
  89. ld a,r ;\
  90. ld h,a ; |
  91. xor 77 ; |Seed the RNG
  92. ld l,a ; |
  93. ld (seed1),hl ; |
  94. ld (seed2),hl ;/
  95. ld hl,lcdbpp8
  96. push hl
  97. call gfx_Begin
  98. pop hl
  99. ld hl, 0 \ push hl
  100. call gfx_SetDraw
  101. pop hl
  102.  
  103. ; Check for game save
  104. ld hl, YahtzeeSave
  105. call _Mov9ToOP1
  106. ld a, AppVarObj
  107. ld (OP1), a
  108. call _ChkFindSym ; return pointer to savefile, or set carry flag if not found
  109. jr c,_initfile ; if file not found, skip save file loading
  110. ;loadfile: ; check if file is in RAM or Archive. If not in RAM, put it there
  111. call _ChkInRAM
  112. jr z,SaveFile_InRAM
  113. call _PushOP1
  114. call _Arc_UnArc
  115. call _PopOP1
  116. SaveFile_InRAM: ; once file in RAM, copy saved game to gamestate and then start (resume) gameplay
  117. ld de, gameRAM
  118. ld hl, YahtzeeData
  119. ld bc, YahtzeeDataEnd-YahtzeeData
  120. ldir
  121. jp GameStart
  122. _initfile: ; if save file not found, zero gamestate. Then start gameplay
  123. ld hl, gameRAM
  124. ld bc, YahtzeeDataEnd-YahtzeeData
  125. ld a, 0
  126. call _MemSet
  127.  
  128. call MainMenu
  129. ld a, 0
  130. splash_GetCSC_loop:
  131. call _kbdscan
  132. ld a, (kbdScanCode)
  133. or a \ jr z, splash_GetCSC_loop
  134.  
  135. ; main menu
  136.  
  137. GameStart:
  138. ld a, 0
  139. KeyGetLoop:
  140. call _kbdscan
  141. ld a, (kbdScanCode)
  142. or a \ jr z, KeyGetLoop
  143. ; keypad reading
  144. ld hl, playsAllowedFlags
  145. bit playRoll, (hl)
  146. jr z, noRolls
  147. cp sk2nd
  148. jp z, RollDie
  149. bit playScore, (hl)
  150. jr z, noScores
  151. noRolls:
  152. ; Scoring
  153. cp skDown
  154. jp z, SwapRow
  155. cp skUp
  156. jp z, SwapRow
  157. cp skRight
  158. jp z, MoveRight
  159. cp skLeft
  160. jp z, MoveLeft
  161. cp skEnter
  162. jp z, ScoreCombo
  163. noScores:
  164. cp skClear
  165. jp z, Quit
  166. cp skMode
  167. jp z, ShowControls
  168. ld a, 0 \ jr KeyGetLoop
  169.  
  170. GameLoop_End:
  171. call RefreshScreen
  172. call CalcCurrentScore
  173. ld hl, comboFlags1 \ ld a, (hl)
  174. cp %00111111 \ jr nz, GameStart
  175. ld hl, comboFlags2 \ ld a, (hl)
  176. cp %01111111 \ jr nz, GameStart
  177. jr GameOver
  178. ; exit game conditions
  179. jr GameStart
  180.  
  181. GameOver:
  182. ld hl, Score \ ld bc, (hl)
  183. ld hl, HighScore \ ld hl, (hl)
  184. or a \ sbc hl, bc \ jp nc, MainMenu
  185. ld hl, HighScore \ ld (hl), bc
  186. jp MainMenu
  187.  
  188.  
  189.  
  190.  
  191. MoveRight:
  192. ld hl, comboSelected
  193. ld a, (hl)
  194. cp 12
  195. jp z, GameLoop_End
  196. inc a
  197. jr Move_End
  198. MoveLeft:
  199. ld hl, comboSelected
  200. ld a, (hl)
  201. cp 0
  202. jp z, GameLoop_End
  203. dec a
  204. Move_End:
  205. ld (hl), a
  206. jp GameLoop_End
  207.  
  208. SwapRow:
  209. ld hl, comboSelected
  210. ld a, (hl)
  211. cp 12
  212. jp z, GameLoop_End
  213. cp 6
  214. jr c, swap_tobottom
  215. ;swap_totop:
  216. sub 6
  217. jr swap_end
  218. swap_tobottom:
  219. ld b,6
  220. add a,b
  221. swap_end:
  222. ld (hl), a
  223. jp GameLoop_End
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230. RollDie:
  231. ld de, dieValues
  232. ld a, 5 \ call rand \ inc a
  233. ld (de), a \ inc de
  234. ld a, 5 \ call rand \ inc a
  235. ld (de), a \ inc de
  236. ld a, 5 \ call rand \ inc a
  237. ld (de), a \ inc de
  238. ld a, 5 \ call rand \ inc a
  239. ld (de), a \ inc de
  240. ld a, 5 \ call rand \ inc a
  241. ld (de), a \ inc de
  242. jp GameLoop_End
  243.  
  244. Quit:
  245. call _ClrScrn
  246. ld a,lcdbpp16
  247. ld (mpLcdCtrl),a
  248. call _DrawStatusBar
  249. ei
  250. ret
  251.  
  252.  
  253.  
  254.  
  255.  
  256. RefreshScreen:
  257. ret
  258.  
  259. ShowControls
  260. call _GetKey
  261. jp GameStart
  262.  
  263.  
  264. rand:
  265. ;;Input: A is the range.
  266. ;;Output: Returns in A a random number from 0 to (input)A-1.
  267. ;; B=0
  268. ;; DE is a pseudo-random 16-bit integer.
  269. ;;Destroys:
  270. ;; HL
  271. ;;Speed:
  272. push af
  273. call prng24
  274. ex de,hl
  275. pop af
  276. or a \ sbc hl,hl
  277. ld b,h
  278. add a,a \ jr nc,$+5 \ push de \ pop hl
  279. add hl,hl \ rla \ jr nc,$+4 \ add hl,de \ adc a,b
  280. add hl,hl \ rla \ jr nc,$+4 \ add hl,de \ adc a,b
  281. add hl,hl \ rla \ jr nc,$+4 \ add hl,de \ adc a,b
  282. add hl,hl \ rla \ jr nc,$+4 \ add hl,de \ adc a,b
  283. add hl,hl \ rla \ jr nc,$+4 \ add hl,de \ adc a,b
  284. add hl,hl \ rla \ jr nc,$+4 \ add hl,de \ adc a,b
  285. add hl,hl \ rla \ ret nc \ add hl,de \ adc a,b
  286. ret
  287.  
  288. prng24:
  289. ;collab with Runer112
  290. ;;Output:
  291. ;; HL is a pseudo-random int
  292. ;; A and BC are also, but much weaker and smaller cycles
  293. ;; Preserves DE
  294. ;;148cc, super fast
  295. ;;26 bytes
  296. ;;period length: 4,294,901,760
  297. seed1=$+1
  298. ld hl,9999
  299. ld b,h
  300. ld c,l
  301. add hl,hl
  302. add hl,hl
  303. inc l
  304. add hl,bc
  305. ld (seed1),hl
  306. seed2=$+1
  307. ld hl,987
  308. add hl,hl
  309. sbc a,a
  310. and %00101101
  311. xor l
  312. ld l,a
  313. ld (seed2),hl
  314. add hl,bc
  315. ret
  316.  
  317.  
  318. TitleText:
  319. .db "TI - Yahtzee",0
  320. AnyKeyText:
  321. .db "Press any key to start",0
  322.  
  323. LibLoadAppVar:
  324. .db 0,"LibLoad",0
  325. YahtzeeSave:
  326. .db 0,"YahtSav",0
  327.  
  328. YahtzeeData:
  329. .dw 0,0 ; Score, High Score (6 bytes)
  330. .db 0,0,0,0,0 ; Die Values (5 bytes)
  331. .db %00000000 ; Die Held? (1 byte)
  332. .db 0 ; Number Rolls (1 byte)
  333. .db %00000001 ; Plays Allowed - Roll Only, Score Only, Both
  334. .db %00000000 ; Combo Scored 1's - 6's (1 byte)
  335. .db %00000000 ; Combo Scored 3k, 4k, FH, SS, LS, CH, YATZ (1 byte)
  336. .db 0,0,0,0,0,0 ; Combo Scores 1's - 6's (6 bytes)
  337. .db 0,0,0,0,0,0,0 ; Combo Scores 3k - YATZ (7 bytes)
  338. .db 0,0,0,0 ; Selected Combo, Calculated Score, 1-6s Bonus, Yahtzee Bonus
  339. .db %00000000 ; bonus flags (0 = 1-6's)
  340. .db %00000000 ; bonus apply flags (yatz = 0, Ns = 1)
  341. YahtzeeDataEnd:
  342.  
  343.  
  344. Score equ gameRAM
  345. HighScore equ Score+3
  346. dieValues equ HighScore+3
  347. dieHoldFlags equ dieValues+5
  348. dieRolls equ dieHoldFlags+1
  349. playsAllowedFlags equ dieRolls+1
  350. comboFlags1 equ dieHoldFlags+1
  351. comboFlags2 equ comboFlags1+1
  352. comboScores equ comboFlags2+1
  353. comboSelected equ comboScores+13
  354. calcedScore equ comboSelected+1
  355. calcedNsBonus equ calcedScore+1
  356. calcedYatzBonus equ calcedNsBonus+1
  357. bonusFlags equ calcedBonus+1
  358. bonusApplyFlags equ bonusFlags+1
  359. ; bit values for Plays Allowed
  360. playRoll equ 0
  361. playScore equ 1
  362. ; bit balues for combo flags 1
  363. c1s equ 0
  364. c2s equ 1
  365. c3s equ 2
  366. c4s equ 3
  367. c5s equ 4
  368. c6s equ 5
  369. ; bit values for combo flags 2
  370. c3K equ 0
  371. c4K equ 1
  372. cFH equ 2
  373. cSS equ 3
  374. cLS equ 4
  375. cCH equ 5
  376. cYATZ equ 6
  377.  
  378.  
  379. #include "source/yahtzee/gfx.asm"
  380. #include "source/yahtzee/combos.asm"
  381. #include "source/yahtzee/data.asm"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement