COLLIDE.S 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. * 1515 030784
  2. *
  3. *
  4. ** COLLIDE.S **
  5. ** ASTEROIDS FOR THE ATARI 3600 **
  6. ** THIS FILE CONTAINS THE COLLISION HANDLING ROUTINE. **
  7. **
  8. ** INDEXING - ROCKS 0 THRU 23
  9. ** SHIP 24
  10. ** UFO 25
  11. ** UFOSHOT 26 THRU 27
  12. ** SHIPSHOT 28 THRU 31
  13. ** SHIP2 32
  14. **
  15. ** STATUS - LO NYBBLE - OBJECT TYPE - 0 - SMALL ROCK
  16. ** 1 - MEDIUM ROCK
  17. ** 2 - LARGE ROCK
  18. ** 3 - SHIP
  19. ** 4 - SMALL UFO
  20. ** 5 - LARGE UFO
  21. ** 6 - SHOT
  22. ** 7 - SHIP'S PARTS (+MISC JUNK)
  23. ** HI NYBBLE - OBJECT SIZE - INDEX INTO SIZE TABLES
  24. ** (UNUSED, I BELIEVE)
  25. **
  26. ** < 0 - NULL OBJECT
  27. **
  28. ** USES TEMP LOCATIONS AS FOLLOWS:
  29. ** TEMP DX (REUSED LATER)
  30. ** TEMP+1 DY
  31. ** TEMP+2 DX+DY (MANHATTAN DISTANCE)
  32. ** TEMP+3,TEMP+4 SAVE AREA FOR INDEX REGISTERS X & Y
  33. ** TEMP+5,TEMP+6 SAVE AREA FOR 'TYPE NYBBLES'
  34. ** (IE, LO NYBBLE OF STATUS BYTE)
  35. ** TEMP+7 ROCK TYPE, IN THE EVENT OF AN EXPLOSION
  36. ** TEMP+8,TEMP+9 SHORT TERM SCRATCH TEMP
  37. ** TEMP+10 SHIP'S DIRECTION INDEX
  38. **
  39. ********************************************************************************
  40. COLLIDE:
  41. LDA RUBFLAG ;DECREMENT RUBBER SHIP FLAG IF NEEDED
  42. BMI ZNODERUB
  43. DEC RUBFLAG
  44. ZNODERUB:
  45. LDX #32 ;START CHECKING WITH SHIP2
  46. COLNXTX:
  47. LDA STATUS,X ;IF OBJECT X DOESN'T EXIST THEN
  48. BMI DECX ;GO ON TO NEXT X
  49. LDY COLTAB-24,X ;FETCH FIRST OBJECT TO CHECK
  50. COLNXTY:
  51. LDA STATUS,Y ;IF OBJECT Y DOESN'T EXIST THEN
  52. BMI DECY ;GO ON TO NEXT Y
  53. STX TEMP+3 ;SAVE X AND Y
  54. STY TEMP+4
  55. JMP COLCHK ;CHECK FOR COLLISION
  56. RESTORE:
  57. LDX TEMP+3 ;RESTORE X AND Y
  58. LDY TEMP+4
  59. DECY:
  60. DEY
  61. BPL COLNXTY
  62. DECX:
  63. DEX
  64. CPX #24
  65. BPL COLNXTX
  66. COLRTS:
  67. RTS
  68. * CHECK FOR AN ACTUAL COLLISION BETWEEN OBJECTS WHOSE INDICES ARE IN X AND Y.
  69. COLCHK:
  70. LDA COLXPOSH,X ;COMPUTE DX
  71. SEC
  72. SBC COLXPOSH,Y
  73. BCS DXPOS ;TAKE ABSOLUTE VALUE
  74. EOR #$FF
  75. ; CLC ;CARRY MUST ALREADY BE CLR (BCS ABOVE)
  76. ADC #1
  77. DXPOS:
  78. CMP #XPOSMAX-13 ;CHECK FOR WRAPAROUND (WIDEST OBJ=12)
  79. BCC DXOK ;NO WRAP
  80. CPX #25 ;DON'T X-WRAP THE UFO
  81. BEQ DXOK
  82. CPY #25
  83. BEQ DXOK
  84. SEC
  85. SBC #XPOSMAX+1 ;USE WRAPPED DISTANCE
  86. EOR #$FF
  87. ; CLC ;CARRY IS CLEAR FROM SBC (IE, BORROW)
  88. ADC #1
  89. DXOK:
  90. CMP #10 ;FURTHEST COLLISION HAS DX OF ONLY 10
  91. BCS NOCOL ; IF >= 11, NO COLLISION.
  92. STA TEMP
  93. LDA COLYPOSH,X ;COMPUTE DY
  94. SEC
  95. SBC COLYPOSH,Y
  96. BCS DYPOS ;TAKE ABSOLUTE VALUE
  97. EOR #$FF
  98. ; CLC ;CARRY MUST ALREADY BE CLR (BCS ABOVE)
  99. ADC #1
  100. DYPOS:
  101. CMP #YPOSMAX-17 ;CHECK FOR WRAPAROUND (TALLEST OBJ=16)
  102. BCC DYOK ;NO WRAP
  103. SBC #YPOSMAX+1 ;USE WRAPPED DISTANCE
  104. EOR #$FF
  105. ; CLC ;CARRY IS CLEAR FROM SBC (IE, BORROW)
  106. ADC #1
  107. DYOK:
  108. CMP #14 ;FURTHEST COLLISION HAS DY OF ONLY 14
  109. BCS NOCOL ; IF >= 15, NO COLLISION.
  110. STA TEMP+1
  111. * AT THIS POINT, WE MUST DO CLOSER INSPECTION, SINCE THE OBJECTS ARE CLOSE.
  112. CLC ;COMPUTE MANHATTAN DISTANCE (DX+DY)
  113. ADC TEMP
  114. STA TEMP+2
  115. LDA STATUS,X ;TEMP+5 <- TYPE OF OBJECT X
  116. AND #$0F
  117. STA TEMP+5
  118. LDA STATUS,Y ;TEMP+6 <- TYPE OF OBJECT Y
  119. AND #$0F
  120. STA TEMP+6
  121. STY TEMP+9 ;SAVE Y, WE NEED AN INDEX REGISTER!
  122. TAY
  123. LDA OBJDIAG,Y ;GET WIDTH OF SECOND OBJECT
  124. LDY TEMP+5
  125. ADC OBJDIAG,Y ;ADD IN WIDTH OF FIRST OBJECT
  126. CMP TEMP+2 ;COMPARE WITH MANHATTAN DISTANCE
  127. BMI NOCOL1 ;TOO FAR AWAY, NO COLLISION.
  128. LDA OBJWID,Y ;DO MORE PRECISE XTENT CHECKING
  129. LDY TEMP+6
  130. CLC
  131. ADC OBJWID,Y
  132. CMP TEMP
  133. BCC NOCOL1 ;TOO FAR TO THE SIDE: NO COLLISION
  134. LDA OBJHEIT,Y ;DO MORE PRECISE YTENT CHECKING
  135. LDY TEMP+5
  136. CLC
  137. ADC OBJHEIT,Y
  138. CMP TEMP+1
  139. BCS YESCOL ;WE HAVE A COLLISION.
  140. NOCOL1:
  141. LDY TEMP+9 ;RESTORE Y
  142. NOCOL:
  143. CPY #40 ;DECREMENT INDICES WITHOUT RESTORING
  144. BEQ COLSETX ; IF WE ARE DOING SPECIAL CHECKING
  145. BCS DECY1
  146. CPX #40
  147. BEQ RESTORE1
  148. CPX #37
  149. BCC RESTORE1
  150. BCS DECX1 ;(UNCONDITIONAL)
  151. COLSETX:
  152. CPX #37 ;SET X AND Y TO LOOP OVER SHIP'S PARTS
  153. BCC RESTORE1
  154. BCS COLSETY ;(UNCONDITIONAL)
  155. COLSETY:
  156. LDY #43 ;RESET Y FOR NEXT ROUND
  157. DECX1:
  158. DEX
  159. JMP COLCHK
  160. DECY1:
  161. DEY
  162. JMP COLCHK
  163. * COME HERE IN THE EVENT OF A POSSIBLE COLLISION.
  164. YESCOL:
  165. ;COMPUTE LOWEST P2 BULLET OR SHIP FOR THIS MODE. IN TEAM MODES
  166. ;WE SHARE BULLETS. RESULT IS LEFT IN TEMP FOR LATER.
  167. LDA #32 ;ASSUME 30 AND 31 ARE NOT P2'S
  168. LDY MODE
  169. CPY #1
  170. BMI NOTEAMSC ;NOT TEAMPLAY, DON'T SPLIT BULLETS
  171. LDA #30 ;30 AND 31 ARE P2'S
  172. NOTEAMSC:
  173. STA TEMP
  174. LDY TEMP+9 ;RESTORE Y
  175. * PERFORM ACTIONS DEPENDENT UPON THE SPECIAL CASE OBJECTS
  176. CPX #32
  177. BEQ COLP2X ;FIRST OBJECT IS P2 SHIP
  178. CPX #24
  179. BEQ COLP1X ;FIRST OBJECT IS P1 SHIP
  180. CPY #24
  181. BEQ COLP1Y ;SECOND OBJECT IS P1 SHIP
  182. LDX TEMP+3 ;RESTORE X AND Y
  183. LDY TEMP+4
  184. JSR DOCOL ;DO THE COLLISION
  185. JMP DECX ;AND THE NEXT ITERATION
  186. RESTORE1:
  187. JMP RESTORE ;AND CONTINUE
  188. COLP2X:
  189. LDA STATE+1 ;DON'T COLLIDE IF SHIP ISN'T OK
  190. BNE RESTORE1
  191. LDA MODE ;IN COMPETITIVE, P1'S SHOTS KILL P2
  192. CMP #2
  193. BEQ COLP2XGO
  194. CPY #28 ; (P1'S SHOTS ARE 28 AND 29)
  195. BCS RESTORE1 ;OTHERWISE, IGNORE THEM
  196. COLP2XGO:
  197. LDX #39 ;POINT TO SHIP2'S PARTS
  198. JSR P2SETUP ;SET UP FOR SPECIAL P2 CHECKING
  199. CPY #24 ;IS IT SHIP1 VS SHIP2?
  200. BNE COLNOP1Y ;NOPE
  201. LDA MODE
  202. CMP #2 ;IN COMPETITIVE PLAY, DON'T BOUNCE,
  203. BEQ COLP1Y ; COLLIDE!
  204. LDA STATE ;IF SHIP NOT OK, DON'T COLLIDE
  205. BNE RESTORE1
  206. JMP RUBBERS ;LET'S GO BOUNCY BOUNCY...
  207. COLP1Y:
  208. LDA STATE ;DON'T COLLIDE IF SHIP ISN'T OK
  209. BNE RESTORE1
  210. CPX #28 ;ANYTHING LESS THAN 28 IS HARMFUL
  211. BCC COLP1YGO
  212. ;IN TEAM PLAY, IGNORE THE COLLISION: THEY ARE FRIENDS
  213. LDA MODE
  214. CMP #1
  215. BEQ RESTORE1
  216. CPX TEMP ;CHECK AGAINST P2'S BULLETS.
  217. BCC RESTORE1 ; IF < TEMP, IT IS SAFE
  218. ;NOT SAFE: CHECK SHIP'S PARTS
  219. COLP1YGO:
  220. LDY #43 ;POINT TO SHIP1'S PARTS
  221. COLP1GO:
  222. JSR P1SETUP ;SET THEM UP
  223. COLNOP1Y:
  224. JMP COLCHK ;AND CONTINUE
  225. COLP1X:
  226. LDA STATE ;DON'T COLLIDE IF SHIP ISN'T OK
  227. BNE RESTORE1
  228. LDX #43 ;POINT TO SHIP1'S PARTS
  229. BNE COLP1GO ;CONTINUE AS ABOVE (UNCONDITIONAL)
  230. * P1SETUP: SET UP STATUS ENTRIES FOR THE PARTS OF THE SHIP TO CHECK
  231. P1SETUP:
  232. STX TEMP+8
  233. LDA SHIPDIR ;GENERATE SHIP DIRECTION INDEX
  234. LSR
  235. LSR
  236. LSR
  237. LSR
  238. TAX
  239. LDA SHNOSEX,X
  240. CLC
  241. ADC XPOSH+24
  242. STA COLXPOSH+40
  243. LDA SHNOSEY,X
  244. ADC YPOSH+24
  245. STA COLYPOSH+40
  246. LDA SHRTAILX,X
  247. ; CLC
  248. ADC XPOSH+24
  249. STA COLXPOSH+41
  250. LDA SHRTAILY,X
  251. ADC YPOSH+24
  252. STA COLYPOSH+41
  253. LDA SHLTAILX,X
  254. ; CLC
  255. ADC XPOSH+24
  256. STA COLXPOSH+42
  257. LDA SHLTAILY,X
  258. ADC YPOSH+24
  259. STA COLYPOSH+42
  260. LDA COLXPOSH+24
  261. STA COLXPOSH+43
  262. LDA COLYPOSH+24
  263. STA COLYPOSH+43
  264. LDX TEMP+8
  265. RTS
  266. * P2SETUP: SET UP STATUS ENTRIES FOR THE PARTS OF THE SHIP TO CHECK
  267. P2SETUP:
  268. STX TEMP+8
  269. LDA SHIPDIR+1 ;GENERATE SHIP DIRECTION INDEX
  270. LSR
  271. LSR
  272. LSR
  273. LSR
  274. TAX
  275. LDA SHNOSEX,X
  276. CLC
  277. ADC XPOSH+32
  278. STA COLXPOSH+36
  279. LDA SHNOSEY,X
  280. ADC YPOSH+32
  281. STA COLYPOSH+36
  282. LDA SHRTAILX,X
  283. ; CLC
  284. ADC XPOSH+32
  285. STA COLXPOSH+37
  286. LDA SHRTAILY,X
  287. ADC YPOSH+32
  288. STA COLYPOSH+37
  289. LDA SHLTAILX,X
  290. ; CLC
  291. ADC XPOSH+32
  292. STA COLXPOSH+38
  293. LDA SHLTAILY,X
  294. ADC YPOSH+32
  295. STA COLYPOSH+38
  296. LDA COLXPOSH+32
  297. STA COLXPOSH+39
  298. LDA COLYPOSH+32
  299. STA COLYPOSH+39
  300. LDX TEMP+8
  301. RTS
  302. * DOCOL1: PERFORM CERTAIN COMMON ACTIONS ON AN OBJECT EXPLODING.
  303. * ON ENTRANCE, X IS THE INDEX OF OBJECT COLLIDING. ON EXIT, TEMP+6 HAS THE
  304. * 'TYPE NYBBLE'. OH, AND BY THE WAY, X AND Y ARE TRASHED.
  305. DOCOL1:
  306. STX TEMP+8 ;SAVE X
  307. LDA STATUS,X
  308. ORA #$80 ;TAG THIS OBJECT AS "EXPLODING"
  309. STA STATUS,X
  310. AND #$0F ;COMPUTE OBJECT TYPE (AGAIN)
  311. STA TEMP+6 ;STORE IT
  312. CMP #6
  313. BCS NOEXPSND ;OBJECTS >= 6 MAKE NO EXPLOSION SOUNDS
  314. CMP #4
  315. BCS COLUFO ;UFO COLLIDING: HANDLE IT
  316. CMP #3
  317. BCS COLSHIP ;SHIP COLLIDING: HANDLE IT
  318. ; CLC ;CARRY IS CLEAR
  319. ADC #$0A ;ADD OFFSET OF ROCK TUNES
  320. PHA ;THIS IS 'ROCKSND'
  321. LDA #$0A ; (KILL OFF ANY CURRENT ROCK SOUNDS)
  322. JSR KILLTUNE
  323. LDA #$0B
  324. JSR KILLTUNE
  325. LDA #$0C
  326. JSR KILLTUNE
  327. PLA
  328. CONT:
  329. JSR DOTUNE
  330. LDX TEMP+8 ;RESTORE X, TRASHED BY DOTUNE
  331. NOEXPSND:
  332. LDY TEMP+6 ;GET TYPE NYBBLE
  333. LDA ELBOUND,Y ;SET UP EXPLOSION ANIMATION
  334. STA ACYC,X
  335. RTS
  336. COLUFO:
  337. TAX
  338. SEC
  339. SBC #2 ;COMPUTE INDEX INTO LVLINC
  340. JSR INCLVL ;MAKE IT HARDER NOW
  341. CPX #4 ;ONLY MR. BILL CHANGES ACCURACY
  342. BNE ZNOBILAC
  343. LDA UFOACC
  344. CMP #4 ;DON'T GO BELOW 3
  345. BCC ZNOBILAC
  346. DEC UFOACC ;TIGHTEN UP MR. BILL'S ACCURACY
  347. ZNOBILAC:
  348. TXA ;DO TUNES: CANCEL THEME AND PLAY EXPL.
  349. CLC
  350. ADC #2 ;EXPLOSION = TYPE + 2
  351. PHA ;PUSH IT FOR LATER
  352. ADC #2 ;THEME = TYPE + 4
  353. JSR KILLTUNE
  354. PLA ;PULL EXPLOSION SOUND
  355. BPL CONT ;BPL = JMP
  356. COLSHIP:
  357. LDA TEMP+8 ;FIGURE OUT WHICH SHIP DIED
  358. LDX #0 ;DEFAULT TO SHIP 1
  359. CMP #32 ;FIGURE OUT WHICH SHIP DIED
  360. BNE NOP2DIE
  361. INX ;INCREMENT TO SHIP 2
  362. NOP2DIE:
  363. LDA #DEATH ;INDUCE A FATAL DEATH
  364. STA STATE,X
  365. LDA #DIET+$28 ;AT TIMER 'DIE TIME' + $28
  366. STA TIMER,X
  367. LDA #$05 ;SHIP EXPLOSION = 05
  368. BPL CONT ;BPL = JMP
  369. * WE HAVE A COLLISION, FOLKS! DO WHAT NEEDS TO BE DONE (EXPLODING, SCORING)
  370. DOCOL:
  371. ;DEBUGGING PATCH
  372. ; LDA #$0A ;USE SMALL ROCK EXPLOSION SOUND
  373. ; JSR DOTUNE
  374. ; LDX TEMP+3
  375. ; LDY TEMP+4
  376. ; RTS
  377. * FIRST DO TUNES AND EXPLOSION ANIMATIONS
  378. ; LDX TEMP+3
  379. JSR DOCOL1
  380. LDA TEMP+6 ;TRANSFER TYPE NYBBLE
  381. STA TEMP+5 ; TO PROPER PLACE
  382. LDX TEMP+4
  383. JSR DOCOL1
  384. * NOW DO SCORING
  385. LDX TEMP+6 ;SCORE ONE OBJECT
  386. LDY TEMP+3
  387. JSR DOSCOR
  388. LDX TEMP+5 ;SCORE OTHER OBJECT
  389. LDY TEMP+4
  390. JSR DOSCOR
  391. CPY #24 ;SEE IF WE HAVE ANY EXPLODING ROCKS
  392. BCC ROCKEXPL
  393. LDX TEMP+3 ;RESTORE X
  394. RTS
  395. * SCORE OBJECT OF TYPE X ACCORDINGLY AS IT WERE SHOT BY OBJECT Y
  396. * I.E., IF Y CONTAINS INDEX OF PLAYER ONE'S SHOT, SCORE A HIT ON AN 'X' TO
  397. * PLAYER ONE.
  398. DOSCOR:
  399. CPY TEMP ;CHECK P2'S BULLETS OR SHIP
  400. BPL SCORP2 ;CREDIT OBJECT TO P2'S SCORE
  401. CPY #28 ;CHECK P1'S BULLETS
  402. BPL SCORPL ;CREDIT OBJECT TO CURRENT PLAYER
  403. CPY #24 ;CHECK P1'S SHIP
  404. BNE SCORERTS ;NONE OF THE ABOVE: RTS
  405. CPX #3 ;IS IT A SHIP THAT #24 IS HITTING?
  406. BNE SCORPL ;NO. JUST SCORE IT.
  407. LDA #17 ;SOUR THE GOATMILK
  408. STA GOATMILK
  409. ; RTS ;RTS IF YOU DON'T WANT TO SCORE THESE.
  410. SCORPL:
  411. LDA PLAYER ;SCORE IT TO THE CURRENT PLAYER
  412. SCORIT:
  413. STA SCORER ;MARK THE SCORER
  414. JSR ADDPOINT ;RACK 'EM UP
  415. SCORERTS:
  416. RTS
  417. SCORP2:
  418. LDA #1 ;SCORE FOR P2 REGARDLESS OF PLAYER
  419. BPL SCORIT ;BPL = JMP
  420. * HANDLE EXPLODING (="SPLITTING") ROCKS.
  421. ROCKEXPL:
  422. LDA STATUS,Y ;CHECK THE EXPLODING ROCK
  423. SEC
  424. SBC #$91 ;WIDTH IS LO NYBBLE. IF =1, THEN SMALL
  425. BMI SPLITRTS ;THIS IS CLEVER. B2-91=21, ETC...
  426. STA TEMP+7 ;SAVE IT FOR NEWROCK TO USE...
  427. LDA #$50 ;RESET 5.2 SEC UFO COUNTER
  428. STA RTIMER
  429. ;CREATE ONE, TWO, OR THREE NEW ROCKS, BASED ON DIFF.
  430. LDA DIFF ;UNLESS AT A WHIPPY LEVEL THEN ONE
  431. BEQ ONEROCK
  432. CMP #3 ;AT EXPERT LEVEL, MAYBE > 2 ROCKS!
  433. BCC TWOROCKS
  434. LDA RANDPTR0 ;USE PTR AS RANDOM (NEWRAND SCREWS Y)
  435. AND #$03
  436. BNE TWOROCKS
  437. JSR NEWROCK ;CREATE EACH NEW ROCK IF POSSIBLE;
  438. TWOROCKS:
  439. JSR NEWROCK ;NEWROCK RETURNS "EMPTY HANDED" IF NOT.
  440. ONEROCK:
  441. JSR NEWROCK
  442. LDX TEMP+3 ;RESTORE X, TRASHED IN NEWROCK
  443. SPLITRTS:
  444. RTS
  445. NEWROCK:
  446. LDX #23 ;FIND A FREE ROCK SLOT
  447. ROCKLOOP:
  448. LDA STATUS,X
  449. CMP #$FF
  450. BEQ THISROCK
  451. DEX
  452. BPL ROCKLOOP
  453. RTS
  454. THISROCK:
  455. LDA XPOSL,Y ;INITIALIZE NEW ROCK (X) FROM OLD (Y)
  456. STA XPOSL,X
  457. LDA XPOSH,Y
  458. STA XPOSH,X
  459. LDA YPOSL,Y
  460. STA YPOSL,X
  461. LDA YPOSH,Y
  462. STA YPOSH,X
  463. LDA COLXPOSH,Y ;THESE AREN'T QUITE RIGHT, BUT CLOSE.
  464. STA COLXPOSH,X
  465. LDA COLYPOSH,Y
  466. STA COLYPOSH,X
  467. LDA PALS,Y ;ADJUST WIDTH TO SMALLER ROCK SIZE
  468. CLC
  469. ADC #1
  470. STA PALS,X
  471. LDA TEMP+7 ;GIVE IT THE PROPER ROCK TYPE STATUS
  472. STA STATUS,X
  473. AND #$0F ;SET FIRST ANIMATION FRAME
  474. TAY
  475. LDA ROCKCYC,Y
  476. STA ACYC,X
  477. JSR RANDVEL ;SET UP RANDOM VELOCITIES.
  478. LDX PLAYER
  479. INC ROCKTOT,X ;THERE IS NOW ONE MORE ROCK!
  480. LDY TEMP+4 ;RESTORE Y, TRASHED ABOVE
  481. RTS
  482. ;RUBBER SHIPS
  483. RUBBERS:
  484. LDA RUBFLAG ;HAVE WE BEEN HERE BEFORE?
  485. BPL ZNORUB ;YUP. DON'T BOUNCE BACK
  486. LDA XVELH+24
  487. CMP #$80 ;SIGNED 16 BIT DIVIDE BY TWO
  488. ROR
  489. PHA
  490. LDA XVELL+24
  491. ROR
  492. PHA
  493. LDA XVELH+32
  494. CMP #$80
  495. ROR
  496. STA XVELH+24
  497. LDA XVELL+32
  498. ROR
  499. STA XVELL+24
  500. PLA
  501. STA XVELL+32
  502. PLA
  503. STA XVELH+32
  504. LDA YVELH+24
  505. CMP #$80
  506. ROR
  507. PHA
  508. LDA YVELL+24
  509. ROR
  510. PHA
  511. LDA YVELH+32
  512. CMP #$80
  513. ROR
  514. STA YVELH+24
  515. LDA YVELL+32
  516. ROR
  517. STA YVELL+24
  518. PLA
  519. STA YVELL+32
  520. PLA
  521. STA YVELH+32
  522. ZNORUB:
  523. LDA #1 ;PREVENT A SECOND BOUNCE
  524. STA RUBFLAG
  525. JMP RESTORE
  526. * TABLE OF STARTING VALUES FOR 'Y' IN COLLIDE LOOP: ESSENTIALLY, THESE ARE
  527. * THE HIGHEST NUMBERED OBJECTS WE MUST COMPARE TO FOR A GIVEN X.
  528. * THESE ARE OFFSET BY 24, SINCE THE LOWEST X WE CHECK IS 24 (SHIP1)
  529. *
  530. COLTAB:
  531. .DC.B 23,24,24,24,25,25,25,25,29
  532. * WIDTH TABLES FOR COLLISION PURPOSES
  533. OBJWID:
  534. .DC.B 2,4,5,3,2,4,1,1;X-EXTENTS (XTENTS)
  535. OBJHEIT:
  536. .DC.B 3,6,8,6,2,3,1,1;Y-EXTENTS (YTENTS)
  537. OBJDIAG:
  538. .DC.B 3,6,9,6,2,3,2,1;DIAGONALS
  539. * OFFSET (INTO THE STAMP) OF SHARP POINTS OF THE SHIP
  540. SHLTAILX:
  541. .DC.B 1,0,0,1,1,2,3,4,5,5,6,5,5,4,3,2
  542. SHLTAILY:
  543. .DC.B 5,7,9,11,12,13,14,14,13,11,9,7,6,5,4,4
  544. SHRTAILX:
  545. .DC.B 5,4,3,2,1,1,0,0,1,2,3,4,5,5,6,5
  546. SHRTAILY:
  547. .DC.B 5,4,4,5,6,7,9,11,13,14,14,13,12,11,9,7