SCORE.S 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. * 1820 040784
  2. *
  3. *
  4. ** SCORE.S **
  5. ** ASTEROIDS FOR THE ATARI 3600 **
  6. ** THIS FILE CONTAINS PLAYER POINT TOTALLER AND SCORE DRIVER. **
  7. ** HANDLES PLAYER1 AND PLAYER2 SCORES **
  8. ** EXTRA SHIPS AND HIGH SCORE **
  9. ** COMBINED SCORE AND COMBINED EXTRA SHIPS **
  10. ** TRASHES ACC, TEMP+12, TEMP+13, TEMP+14, AND TEMP+15 **
  11. ** USES TEMP+12 AS COMPARE VALUE = 4 FOR SCORER 0 AND 8 FOR SCORER 1 **
  12. ** USES TEMP+15 FOR POINTER INTO CHARACTER MAP, NEXT POSITION FOR CHARACTER **
  13. ** SAVES X AND Y IN TEMP+13 AND TEMP+14 **
  14. ** PLAYER ONE SET SCORER TO 0 **
  15. ** SCORE THRU SCORE+3 CURRENT SCORE **
  16. ** MENLEFT NUMBER OF SHIPS REMAINING **
  17. ** ONLY MAXIMUM OF 3 ARE SHOWN **
  18. ** SCORMAP1 PLAYER1 SCORE CHARACTER MAP **
  19. ** PLAYER TWO SET SCORER TO 1 **
  20. ** SCORE2 THRU SCORE2+3 CURRENT SCORE **
  21. ** MENLEFT2 NUMBER OF SHIPS REMAINING **
  22. ** SCORMAP2 PLAYER2 SCORE CHARACTER MAP **
  23. ** HIGHSCORE HISCORE CURRENT HIGH SCORE **
  24. ** SCORCMHS HISCORE CHARACTER MAP **
  25. ** COMBINED SCORE COMBSCOR COMBINED PLAYER 1 AND PLAYER 2 SCORES
  26. ** SCORECMC COMBINED SCORE CHARACTER MAP **
  27. ADDPOINT:
  28. LDA GAMSTATE ;ONLY SCORE DURING GAME PLAY STATE
  29. CMP #PLAYST
  30. BNE ADDRTS
  31. JSR ADDSCORE ;SCORE THE SCORER
  32. LDA MODE ;IN TEAMPLAY, SCORE THE TEAM
  33. CMP #1
  34. BNE ADDRTS
  35. LDA #2 ;2 = TEAM ENTITY
  36. STA SCORER
  37. JSR ADDSCORE
  38. ADDRTS:
  39. RTS
  40. ADDSCORE:
  41. STX TEMP+13 ;SAVE REGISTERS
  42. STY TEMP+14
  43. ;EACH TIME SOMEONE SCORES, RESET UFOTIMER
  44. ; LDA #0
  45. ; STA UFOTIMER ;INCREMENTED ONLY WHILE "LURKING"
  46. LDA SCORER ;CALCULATE OFFSET INTO SCORE
  47. ASL
  48. ASL
  49. TAY
  50. SED ;DO ARITHMETIC IN DECIMAL MODE
  51. CLC
  52. LDA LOSCOTAB,X ;GET OBJECT SCORE VALUE
  53. ADC SCORE+3,Y ;ADD LOWEST BYTE
  54. STA SCORE+3,Y
  55. LDA HISCOTAB,X
  56. ADC SCORE+2,Y ;ADD NEXT BYTE WITH CARRY
  57. STA SCORE+2,Y
  58. BCC NOADD ;EVERY 10000 POINTS GET ADDITIONAL MAN
  59. LDA MODE ;DON'T DO FOR TEAM PLAY INDIV SCORES
  60. CMP #1
  61. BNE DOINCM
  62. LDA SCORER
  63. CMP #2
  64. BNE TEAMCK
  65. DOINCM:
  66. CLD
  67. LDA #0 ;TYPE 0 = POINTS INCREMENT
  68. JSR INCLVL
  69. LDX SCORER
  70. INC MENLEFT,X
  71. JSR PUTMEN ;PUT UP EXTRA MAN
  72. LDA #4 ;EXTRA SHIP FANFARE
  73. JSR DOTUNE
  74. LDA SCORER
  75. ASL
  76. ASL
  77. TAY
  78. TEAMCK:
  79. SEC
  80. NOADD:
  81. LDA #0
  82. SED
  83. ADC SCORE+1,Y ;ADD NEXT BYTE WITH CARRY
  84. STA SCORE+1,Y
  85. LDA #0
  86. ADC SCORE,Y ;ADD HIGHEST BYTE WITH CARRY
  87. STA SCORE,Y
  88. CLD ;RETURN FROM DECIMAL MODE
  89. JSR PUTSCRNS
  90. DONESCOR:
  91. LDX TEMP+13 ;DONE RESTORE REGISTERS
  92. LDY TEMP+14
  93. RTS
  94. ** PUTSCORE, ROUTINE TO PUT SCORE INTO PLAYERS CHARACTER MAP **
  95. PUTSCORE:
  96. STX TEMP+13 ;SAVE REGISTERS
  97. STY TEMP+14
  98. PUTSCRNS:
  99. LDA SCORER ;CALCULATE OFFSET 0 OR 4
  100. ASL
  101. ASL
  102. TAX ;PUT IN X
  103. ASL ;CALCULATE OFFSET 0 OR 16
  104. ASL
  105. STA TEMP+15 ;PUT INTO TEMP+15
  106. TXA
  107. CLC ;COMPARE VALUE FOR TERMINATION
  108. ADC #4
  109. STA TEMP+12
  110. SCORLOOP:
  111. LDA SCORE,X ;GET NEXT BYTE OF SCORE
  112. LSR
  113. LSR
  114. LSR
  115. LSR ;GET HIGH NYBBLE
  116. BNE PUTHINUM ;IF NOT ZERO PUT NUMBER FROM HI NYBBLE
  117. JSR PUTBLANK ;IF ZERO PUT IN BLANK
  118. LDA SCORE,X
  119. AND #$F ;GET LO NYBBLE
  120. BNE PUTLONUM ;IF NOT ZERO PUT NUMBER FROM LO NYBBLE
  121. JSR PUTBLANK ;IF ZERO PUT IN BLANK
  122. INX
  123. CPX TEMP+12 ;4 BYTES OF SCORE
  124. BMI SCORLOOP
  125. LDA #CHARS+1 & 255 ;PUT UP A ZERO IF NO POINTS YET
  126. DEC TEMP+15
  127. JSR WRTCHAR
  128. RTS
  129. ** PUTNUMS, ROUTINE TO PUT NUMBERS FROM PLAYERS SCORE INTO CHARACTER MAP **
  130. PUTNUMS:
  131. LDA SCORE,X ;GET NEXT BYTE OF SCORE
  132. LSR
  133. LSR
  134. LSR
  135. LSR ;GET HI NYBBLE
  136. ** PUTHINUM, ROUTINE TO PUT HIGH BYTE NUMBERS INTO CHARACTER MAP **
  137. PUTHINUM:
  138. CLC ;POINT TO NUMBER IN CHARS
  139. ADC #(CHARS+1) & 255
  140. JSR WRTCHAR ;WRITE CHAR IN CHARACTER MAP
  141. LDA SCORE,X ;GET NEXT, ONCE A NUMBER IS FOUND,
  142. ; ; NEVER WORRY ABOUT FINDING A BLANK.
  143. AND #$F ;GET LO NYBBLE
  144. ** PUTLONUM, ROUTINE TO PUT LOW BYTE NUMBERS INTO CHARACTER MAP **
  145. PUTLONUM:
  146. CLC ;POINT TO NUMBER IN CHARS
  147. ADC #(CHARS+1) & 255
  148. JSR WRTCHAR ;WRITE CHAR IN CHARACTER MAP
  149. INX
  150. CPX TEMP+12 ;4 BYTE OF SCORE DATA
  151. BMI PUTNUMS
  152. RTS
  153. ** PUTBLANK, ROUTINE TO PUT A BLANK SPACE INTO NEXT POS IN CMAP1 **
  154. PUTBLANK:
  155. LDA #(CHARS) & 255 ;FIRST CHARACTER IN CHARS IS A BLANK
  156. ** WRTCHAR, ROUTINE TO WRITE A CHARACTER INTO NEXT POS IN CMAP1 **
  157. ** ACC MUST BE LOW BYTE OF CHARACTER. **
  158. WRTCHAR:
  159. LDY TEMP+15 ;POSITION
  160. STA CHARMAPS,Y ;PUT CHAR IN CHARACTER MAP
  161. INC TEMP+15
  162. RTS
  163. ** PUTMEN, ROUTINE TO PUT PLAYERS MENLEFT INTO CHARACTER MAPS. **
  164. PUTMEN:
  165. LDX SCORER ;WHICH SCORER
  166. TXA
  167. ASL ;COMPUTE INDICES AND POINTERS
  168. ASL
  169. ASL
  170. ASL
  171. CLC
  172. ADC #8
  173. TAY
  174. LDA #CHARS & 255 ;PAD WITH BLANK, ONE FOR SPACE
  175. STA CHARMAPS,Y
  176. INY
  177. STY TEMP+15
  178. STA CHARMAPS,Y
  179. INY
  180. STA CHARMAPS,Y
  181. INY
  182. STA CHARMAPS,Y
  183. INY
  184. STA CHARMAPS,Y
  185. LDX SCORER
  186. LDA MENLEFT,X ;PUT UP ONE SHIP FOR EACH MAN LEFT
  187. BEQ DONEPUTM
  188. CMP #5 ;DISPLAY ONLY 4 SHIPS MAXIMUM
  189. BCC PUTMENUP
  190. LDA #4
  191. PUTMENUP:
  192. TAX
  193. PUTMENLP:
  194. LDA #(CHARS+11) & 255 ;POINT TO SMALL SHIP SYMBOL
  195. JSR WRTCHAR ;PUT IT IN CMAP1
  196. DEX
  197. BNE PUTMENLP ;CONTINUE UNTIL MENLEFT IS ZERO
  198. DONEPUTM:
  199. RTS
  200. ** HIGH SCORE ROUTINES. **
  201. PUTHISCR:
  202. LDX #0
  203. STX TEMP+15 ;START AT BEGINNING AND REMOVE ZEROS.
  204. HISCRLP:
  205. LDA HISCORE,X ;GET NEXT BYTE OF SCORE
  206. LSR
  207. LSR
  208. LSR
  209. LSR ;GET HIGH NYBBLE
  210. BNE PUTHNUMH ;IF NOT ZERO PUT NUMBER FROM HI NYBBLE
  211. JSR PUTBLKHS ;IF ZERO PUT IN BLANK
  212. LDA HISCORE,X
  213. AND #$F ;GET LO NYBBLE
  214. BNE PUTLNUMH ;IF NOT ZERO PUT NUMBER FROM LO NYBBLE
  215. JSR PUTBLKHS ;IF ZERO PUT IN BLANK
  216. INX
  217. CPX #4 ;4 BYTES OF SCORE
  218. BMI HISCRLP
  219. JMP DONEHSCR ;DONE WITH HIGH SCORE
  220. PUTHSNUM:
  221. LDA HISCORE,X ;GET NEXT BYTE OF SCORE
  222. LSR
  223. LSR
  224. LSR
  225. LSR ;GET HI NYBBLE
  226. PUTHNUMH:
  227. CLC ;POINT TO NUMBER IN CHARS
  228. ADC #(CHARS+12) & 255
  229. JSR WRTCHRHS ;WRITE CHAR IN CHARACTER MAP
  230. LDA HISCORE,X ;GET NEXT, ONCE A NUMBER IS FOUND,
  231. ; ; NEVER WORRY ABOUT FINDING A BLANK.
  232. AND #$F ;GET LO NYBBLE
  233. PUTLNUMH:
  234. CLC ;POINT TO NUMBER IN CHARS
  235. ADC #(CHARS+12) & 255
  236. JSR WRTCHRHS ;WRITE CHAR IN CHARACTER MAP
  237. INX
  238. CPX #4 ;4 BYTE OF SCORE DATA
  239. BMI PUTHSNUM
  240. DONEHSCR:
  241. RTS
  242. PUTBLKHS:
  243. LDA #CHARS & 255 ;FIRST CHARACTER IN CHARS IS A BLANK
  244. WRTCHRHS:
  245. LDY TEMP+15 ;POSITION
  246. STA SCORCMHS,Y ;PUT CHAR IN CHARACTER MAP
  247. INC TEMP+15
  248. RTS
  249. ** HIGHSCORE HANDLING ROUTINE TO CHECK FOR NEW HIGHSCORE. **
  250. HIGHSCOR:
  251. LDY #0 ;0 = PLAYER 1 SCORE
  252. LDA MODE
  253. BMI HSONE ;ONE PLAYER ONLY
  254. LDY #8 ;8 = COMBINED SCORE
  255. CMP #1 ;MODE 1 WE USE COMBINED SCORE
  256. BEQ HSONE ; AND AS ONE PLAYER ONLY
  257. LDY #0 ;CHECK BOTH PLAYERS
  258. JSR CKHISCOR
  259. LDY #4 ;4 = PLAYER 2 SCORE
  260. HSONE:
  261. JSR CKHISCOR
  262. JSR PUTHISCR ;UPDATE HIGHSCORE ON SCREEN
  263. RTS
  264. * CKHISCOR -- ROUTINE TO DO THE ACTUAL CHECK. ON ENTRY, Y CONTAINS SCORE OFFSET
  265. CKHISCOR:
  266. LDX #0
  267. HSLOOP:
  268. LDA SCORE,Y
  269. CMP HISCORE,X
  270. BCC HSRTS ;LOWER: WE'RE DONE.
  271. BEQ HSLOOPCK ;EQUAL PLACE: PROCEED TO NEXT PLACE
  272. NEWHIGH:
  273. STA HISCORE,X ;HIGHER: BEGIN REPLACING HIGH SCORE
  274. INY
  275. INX
  276. LDA SCORE,Y
  277. CPX #4
  278. BCC NEWHIGH
  279. RTS
  280. HSLOOPCK:
  281. INY
  282. INX
  283. CPX #4
  284. BCC HSLOOP
  285. HSRTS:
  286. RTS
  287. ** ROUTINE TO UPDATE THE MENLEFT DISPLAY AFTER MENLEFT,X IS DECREMENTED. **
  288. UPDATMEN:
  289. LDA MODE ;ONE POOL OF LIVES FOR TEAM PLAY
  290. CMP #1
  291. BNE UPPLMEN
  292. LDA #2
  293. STA SCORER
  294. JSR PUTMEN
  295. RTS
  296. UPPLMEN:
  297. LDA #0
  298. STA SCORER
  299. JSR PUTMEN
  300. LDA MODE ;DON'T DISPLAY PLAYER2 FOR SINGLE PLAY
  301. BPL UPDATPL2
  302. RTS
  303. UPDATPL2:
  304. LDA #1
  305. STA SCORER
  306. JSR PUTMEN
  307. BYEBYE:
  308. RTS
  309. ** MESSAGE HANDLING ROUTINE TO FACILITATE PUTING MESSAGE ON SCREEN. **
  310. * LOAD X WITH MESSAGE NUMBER. *
  311. * MESSAGE 0 PLAYER 1
  312. * MESSAGE 1 PLAYER 2
  313. * MESSAGE 2 GAME OVER
  314. * MESSAGE 3 WINS
  315. SETMSG:
  316. LDA GAMSTATE ;NO MESSAGES UNLESS IN GAME
  317. CMP #PLAYST
  318. BNE BYEBYE
  319. TXA ;SET UP X AND Y FOR DOICON
  320. CLC
  321. ADC #18
  322. TAY
  323. TXA
  324. CMP #2
  325. BCS ZFOO
  326. LDX #34
  327. BPL ZMOO ;= JMP
  328. ZFOO:
  329. LDX #35
  330. ZMOO:
  331. JMP DOICON ; SAVE A BYTE
  332. ENDSCOR:
  333. DS.B 0