JOYSTICK.S 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543
  1. ;PLAYER JOYSTICK MOVEMENT CONTROL
  2. WLIM EQU MINX
  3. ELIM EQU MAXX-5 ;CHANGED FROM 135 DVP
  4. ;CHANGED BACK TO 135 FROM 136 11/29
  5. TOPLIM EQU 144
  6. BOTLIM EQU 184
  7. JOYSTICK LDA SHTRTIMR
  8. BEQ SKPJOY1
  9. ENDOFJOY RTS
  10. SKPJOY1 LDA GAMETYPE ;IS THIS A 2 PLAYER SIMULTANEOUS OR
  11. CMP #2 ; TEAM PLAY GAME?
  12. BCC HAVEJOY ;NO, PROCEED NORMALLY
  13. LDA #0 ;PLR 1 FIRST
  14. STA PLAYER
  15. BIT SHTRSTAT+1 ;ONLY PLR 1 IF 2 GAME OVER
  16. BVS HAVEJOY
  17. BIT SHTRSTAT ;ONLY PLR 2 IF 1 GAME OVER
  18. BVS JOYPL2
  19. JSR HAVEJOY ;RUN JOYSTICK CODE FOR PLR 1 THEN 2
  20. JOYPL2 INC PLAYER
  21. HAVEJOY BIT ATTRACT
  22. BMI ENDOFJOY ;RTS
  23. BVS SKPJOY2
  24. JMP NRMLJOYS
  25. ******************************************
  26. * ATTRACT MODE MOVEMENT
  27. ******************************************
  28. SKPJOY2 LDX PLAYER ;INCREMENT THE ATTRACT MODE GAME TIMER
  29. LDA FRMCNT ; EVERY SECOND OR SO
  30. AND #$3F
  31. BNE SKPCRSEC
  32. LDA ATGMTMR
  33. AND #$7F
  34. CMP #$7F
  35. BEQ SKPCRSEC
  36. INC ATGMTMR
  37. SKPCRSEC DEC ATSITTMR,X ;COUNT FOR MOTION
  38. BNE CHKMVMNT
  39. LDA #$80
  40. STA ATSITTMR,X ;RESET MOTION COUNT
  41. LDA ATGMTMR,X ;FLIP MOTION FLAG
  42. EOR #$80
  43. STA ATGMTMR,X
  44. CHKMVMNT LDA ATGMTMR,X
  45. BPL YESMOVE
  46. JMP ENDATJOY ;MOVING IF BIT 7 = 0
  47. YESMOVE LDX PLAYER ;MOVE HORIZONTALLY ON EVERY OTHER
  48. LDA SHOOTERY,X ; VERTICAL MOVEMENT
  49. AND #$01
  50. BEQ NOEWCHNG
  51. * CHECK FOR LEFT/RIGHT MOVEMENT IN ATTRACT MODE
  52. LDA #0
  53. LDY ATTSHTRX,X
  54. BMI SKPXADJ
  55. LDA #4
  56. SKPXADJ CLC
  57. ADC SHOOTERX,X
  58. STA GTEMP1
  59. LDA SHOOTERY,X
  60. ADC #4
  61. JSR OBSTAC
  62. BNE NOEWCHNG
  63. JSR BUMPEW ;OTHER PLAYER IN THE WAY?
  64. BEQ NOATBMPE
  65. STA GTEMP1
  66. LDA ATTSHTRX,X
  67. BPL ATTEAST
  68. LDA GTEMP1
  69. EOR #$FF
  70. CLC
  71. ADC #1
  72. JMP ATTEW
  73. ATTEAST LDA GTEMP1
  74. ATTEW
  75. CMP #-4
  76. BCS NOEWCHNG ;YES, OTHER PLAYER THERE
  77. NOATBMPE JSR STOPRES
  78. LDA SHOOTERX,X
  79. CLC
  80. ADC ATTSHTRX,X
  81. STA SHOOTERX,X
  82. CMP #ELIM
  83. BCS CHNGEWDR
  84. CMP #WLIM+1
  85. BCS NOEWCHNG
  86. CHNGEWDR LDA ATTSHTRX,X
  87. EOR #$FF
  88. CLC
  89. ADC #1
  90. STA ATTSHTRX,X
  91. * CHECK FOR UP/DOWN MOVEMENT IN ATTRACT MODE
  92. NOEWCHNG
  93. LDA SHOOTERX,X
  94. CLC
  95. ADC #2
  96. STA GTEMP1
  97. LDA #5
  98. LDY ATTSHTRY,X
  99. BPL SKPYADJ
  100. LDA #3
  101. SKPYADJ ; CLC
  102. ADC SHOOTERY,X
  103. JSR OBSTAC
  104. BNE ENDATJOY
  105. JSR BUMPNS ;OTHER PLAYER IN THE WAY?
  106. BEQ NOATBMPS
  107. STA GTEMP1
  108. LDA ATTSHTRY,X
  109. BPL ATTSOUTH
  110. LDA GTEMP1
  111. EOR #$FF
  112. CLC
  113. ADC #1
  114. JMP ATTNS
  115. ATTSOUTH LDA GTEMP1
  116. ATTNS
  117. CMP #-5
  118. BCS ENDATJOY
  119. NOATBMPS JSR STOPRES
  120. LDA SHOOTERY,X
  121. CLC
  122. ADC ATTSHTRY,X
  123. STA SHOOTERY,X
  124. CMP #TOPLIM+1
  125. BCC CHNGVDIR
  126. CMP #BOTLIM
  127. BCC ENDATJOY
  128. CHNGVDIR LDA ATTSHTRY,X
  129. EOR #$FF
  130. CLC
  131. ADC #1
  132. STA ATTSHTRY,X
  133. ENDATJOY LDA SHOTSTAT,X
  134. LSR A
  135. BCS NOADJSHT ;SHOT HAS BEEN FIRED
  136. LDA SHOOTERX,X
  137. ; CLC
  138. ADC #2
  139. STA SHOTX,X
  140. LDA SHOOTERY,X
  141. ; CLC
  142. ADC #-1
  143. STA SHOTY,X
  144. NOADJSHT RTS
  145. ******************************************
  146. * GAME PLAY MOVEMENT
  147. ******************************************
  148. NRMLJOYS LDA #0
  149. STA CRAP
  150. LDX PLAYER
  151. LDA TRACKF,X
  152. BEQ NRML
  153. TRK2P ;X COMING IN HERE IS NOT NECC. PLAYER
  154. LDA DELTAY,X ;SHADOW THESE FOR TWO PLAYER WEIRDNESS
  155. JSR SCALE
  156. STA TTEMP2
  157. LDA DELTAX,X
  158. BEQ NORTACK ;THIS BRANCH PREVENTS DE-REZZING
  159. JSR SCALE
  160. STA TTEMP1
  161. LDX PLAYER
  162. TAY ;SET FLAGS
  163. BPL EAST
  164. JMP WEST
  165. NORTACK LDA TTEMP2
  166. BEQ ENDATJOY ;THIS BRANCH PREVENTS DE-REZZING
  167. BMI JNORTH
  168. JMP SOUTH
  169. JNORTH JMP NORTH
  170. ; LDA SHOOTERX,X
  171. ; CLC
  172. ; ADC GTEMP1
  173. ; CMP #WLIM
  174. ; BCS CKMO
  175. ; LDA #WLIM
  176. ; BNE STSHX
  177. ;CKMO CMP #ELIM
  178. ; BCC STSHX
  179. ; LDA #ELIM-1
  180. ;STSHX
  181. ; STA SHOOTERX,X
  182. ;YCALC LDA SHOOTERY,X
  183. ; CLC
  184. ; ADC GTEMP2
  185. ; CMP #TOPLIM
  186. ; BCS CKMOR
  187. ; LDA #TOPLIM
  188. ; BNE STSHY
  189. ;CKMOR CMP #BOTLIM
  190. ; BCC STSHY
  191. ; LDA #BOTLIM
  192. ;STSHY
  193. ; STA SHOOTERY,X
  194. ;JMEAT JMP ENDATJOY
  195. NRML ;WATCH OUT FOR MAJOR KLUDGE HERE
  196. LDA TRACKF ;IF THERE WASN'T A TRACKBALL IN 0
  197. BEQ REALN ;NO NEED TO DO KLUDGOMATIC
  198. CPX #1
  199. BNE REALN
  200. LDA ALTCTRLS ;DOES S/HE REALLY WANT TO SWAP?
  201. CMP #1
  202. BNE REALN
  203. LDA BUTNIB ;COERCE FIRING FOR PLAYER2 FROM JACK0
  204. STA BUTNIB+1
  205. LDA #1
  206. STA CRAP
  207. LDX #0 ;COERCE FIRST TRACKBALL FOR TWO PLAY
  208. BEQ TRK2P
  209. REALN LDA FRMCNT
  210. AND #1
  211. STA GTEMP5
  212. LDA #0
  213. STA CTLSWA
  214. LDA SWCHA
  215. LDX PLAYER
  216. BNE PLAY1
  217. AND #$F0
  218. BNE STCTL ;JMP
  219. PLAY1 ASL A
  220. ASL A
  221. ASL A
  222. ASL A
  223. STCTL STA GTEMP2
  224. ASL A
  225. BCC EAST
  226. ASL A
  227. BCS BLAH1
  228. JMP WEST
  229. BLAH1 ASL A
  230. BCS BLAH
  231. JMP SOUTH
  232. BLAH ASL A
  233. BCS STOP
  234. JMP NORTH
  235. STOP LDA #1
  236. STA AXCOUNT,X
  237. LDA SHOOTERX,X
  238. SEC
  239. SBC #16
  240. LSR A
  241. BCS GOONA
  242. LSR A
  243. BCS GOONA ;NOT EVENLY DIVISABLE BY FOUR
  244. LDA #0
  245. STA AXCOUNT,X
  246. RETJOY RTS
  247. GOONA LDA SHTRSTAT,X
  248. AND #$20
  249. BEQ WEST
  250. ******************************************
  251. EAST LDA #5 ;IS A MUSHROOM THERE?
  252. LDY #5
  253. JSR CHECKMSH
  254. BNE NORTE ;YES, MUSHROOM IN THE WAY
  255. LDA SHTRSTAT,X
  256. AND #$20
  257. BNE ARCLEAR ;GOING EAST LAST TIME
  258. LDA #0
  259. STA AXCOUNT,X ;IF YOU WERE GOING WEST CLEAR ACCEL
  260. LDA SHTRSTAT,X
  261. ORA #$20
  262. STA SHTRSTAT,X ;SET EAST BIT
  263. ARCLEAR JSR ACCEL ;DEAL WITH ACCELERATION
  264. JSR BUMPEW ;OTHER PLAYER IN THE WAY?
  265. BEQ NOBMPE
  266. CLC
  267. ADC GTEMP6
  268. CMP #-4
  269. BCS NORTE ;YES, OTHER PLAYER THERE
  270. NOBMPE LDA GTEMP6
  271. CLC
  272. ;;;;; LDX PLAYER
  273. ADC SHOOTERX,X
  274. CMP #ELIM
  275. BCC STOX ;NOT AT LIMIT, STORE
  276. LDA #ELIM
  277. STOX JMP STOXW
  278. ******************************************
  279. WEST LDA #0 ;IS MUSHROOM IN THE WAY?
  280. LDY #5
  281. JSR CHECKMSH
  282. BNE NORTE ;YES, MUSHROOM THERE
  283. LDA SHTRSTAT,X
  284. AND #$20
  285. BEQ ACLEAR ;GOING WEST LAST TIME
  286. LDA #0
  287. STA AXCOUNT,X ;IF YOU WERE GOING EAST CLEAR ACCEL
  288. LDA SHTRSTAT,X
  289. AND #$DF
  290. STA SHTRSTAT,X ;CLEAR WEST BIT
  291. ACLEAR JSR ACCEL ;DEAL WITH ACCELERATION
  292. JSR BUMPEW ;OTHER PLAYER IN THE WAY?
  293. BEQ NOBMPW
  294. SEC
  295. SBC GTEMP6
  296. CMP #4
  297. BCC NORTE
  298. NOBMPW
  299. ;;;;; LDX PLAYER
  300. LDA SHOOTERX,X
  301. SEC
  302. SBC GTEMP6
  303. CMP #WLIM
  304. BCS STOXW ;NOT AT LIMIT, STORE
  305. LDA #WLIM
  306. STOXW STA SHOOTERX,X
  307. JSR STOPRES
  308. NORTE LDA TRACKF,X
  309. BNE JNRTE
  310. LDA CRAP
  311. BEQ NORAE
  312. JNRTE JMP NORTACK
  313. NORAE LDA GTEMP2
  314. ASL A
  315. ASL A
  316. ASL A
  317. BCC SOUTH
  318. ASL A
  319. BCC NORTH
  320. ;NO MORE MOVEMENT
  321. JMP ENDATJOY ;ADJUST SHOT POSITION
  322. ******************************************
  323. SOUTH LDA #2 ;IS MUSHROOM IN THE WAY?
  324. LDY #5
  325. JSR CHECKMSH
  326. BNE RETS ;YES, MUSHROOM THERE
  327. JSR BUMPNS ;OTHER PLAYER IN THE WAY?
  328. BEQ NOBMPS
  329. CMP #-6
  330. BCS RETS
  331. NOBMPS JSR VMOVER ;DEAL WITH TRACKBALL
  332. BNE GAGA
  333. LDY SHOOTERY,X
  334. INY
  335. INY
  336. GAGA CPY #BOTLIM
  337. BCC STXYPOS
  338. LDY #BOTLIM
  339. STXYPOS JMP STYPOS
  340. ******************************************
  341. NORTH LDA #2 ;IS MUSHROOM IN THE WAY?
  342. LDY #3
  343. JSR CHECKMSH
  344. BNE RETS ;YES, MUSHROOM THERE
  345. JSR BUMPNS ;OTHER PLAYER IN THE WAY?
  346. BEQ NOBMPN
  347. CMP #7
  348. BCC RETS
  349. NOBMPN JSR VMOVER ;DEAL WITH TRACKBALL MOVEMENT
  350. BNE GOOGOO
  351. LDY SHOOTERY,X
  352. DEY
  353. DEY
  354. GOOGOO CPY #TOPLIM
  355. BCS STYPOS
  356. LDY #TOPLIM
  357. STYPOS STY SHOOTERY,X
  358. JSR STOPRES
  359. RETS JMP ENDATJOY ;ADJUST SHOT POSITION
  360. CHECKMSH
  361. CLC
  362. ADC SHOOTERX,X
  363. STA GTEMP1
  364. TYA
  365. ;;;;; CLC
  366. ADC SHOOTERY,X
  367. JSR OBSTAC
  368. RTS
  369. BUMPNS
  370. LDX PLAYER
  371. LDY #$FF ;FLAG FOR NO BUMP
  372. LDA SHTRSTAT
  373. AND SHTRSTAT+1
  374. BPL ENDBUMP
  375. LDA SHOOTERX
  376. SEC
  377. SBC SHOOTERX+1
  378. BPL ABSBUMP
  379. EOR #$FF
  380. CLC
  381. ADC #1
  382. ABSBUMP CMP #4
  383. BCS ENDBUMP
  384. TXA
  385. EOR #1
  386. TAY
  387. LDA SHOOTERY,X
  388. SEC
  389. SBC SHOOTERY,Y
  390. ENDBUMP CPY #$FF
  391. RTS
  392. BUMPEW
  393. LDX PLAYER
  394. LDY #$FF ;FLAG FOR NO BUMP
  395. LDA SHTRSTAT
  396. AND SHTRSTAT+1
  397. BPL ENDBUMP
  398. LDA SHOOTERY
  399. SEC
  400. SBC SHOOTERY+1
  401. BPL ABSBMPEW
  402. EOR #$FF
  403. CLC
  404. ADC #1
  405. ABSBMPEW CMP #5
  406. BCS ENDBUMP
  407. TXA
  408. EOR #1
  409. TAY
  410. LDA SHOOTERX,X
  411. SEC
  412. SBC SHOOTERX,Y
  413. CPY #$FF
  414. RTS
  415. ******************************************
  416. * ACCEL -- DEAL WITH SHOOTER ACCELERATION
  417. * RETURNS WITH NUMBER OF PIXELS TO MUSH IN GTEMP6
  418. ******************************************
  419. ACCEL LDA TRACKF,X
  420. BNE THETHE
  421. LDA CRAP
  422. BNE THETHE
  423. LDY PLAYER
  424. LDX AXCOUNT,Y
  425. LDA GTEMP5
  426. BNE SKIPP
  427. INX
  428. CPX #$10
  429. BNE NORM
  430. DEX ;PEG IT AT F
  431. NORM TXA
  432. STA AXCOUNT,Y
  433. SKIPP TXA
  434. ASL A
  435. ORA GTEMP5
  436. TAX
  437. LDA ADDTABL,X
  438. STA GTEMP6
  439. RTS
  440. THETHE LDA TTEMP1
  441. BPL STGT6
  442. EOR #$FF ;MAKE THE ABSOLUTE VALUE HO HO
  443. CLC
  444. ADC #1
  445. STGT6 STA GTEMP6
  446. LDX PLAYER
  447. RTS
  448. ADDTABL DB 1,0 ;0
  449. DB 0,1 ;1
  450. DB 1,0 ;2
  451. DB 1,1 ;3
  452. DB 1,1 ;4
  453. DB 1,1 ;5
  454. DB 2,1 ;6
  455. DB 1,2 ;7
  456. DB 2,1 ;8
  457. DB 1,2 ;9
  458. DB 2,2 ;10
  459. DB 2,2 ;11
  460. DB 2,2 ;12
  461. DB 2,2 ;13
  462. DB 2,3 ;14
  463. DB 3,2 ;15
  464. DB 2,3 ;16
  465. VMOVER LDX PLAYER
  466. LDA TRACKF,X
  467. BNE DOTHE
  468. LDA CRAP
  469. BEQ RETSE ;NO TRACKB THIS TIME
  470. DOTHE
  471. LDA SHOOTERY,X
  472. CLC
  473. ADC TTEMP2
  474. TAY
  475. LDA #1 ;CLR ZFLAG
  476. RETSE RTS ;ZFLAG APP SET