FSM.S 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614
  1. * 1830 040784
  2. *
  3. ** FSM.S **
  4. ** ASTEROIDS FOR THE ATARI 3600 **
  5. ** THIS FILE CONTAINS THE FINITE STATE MACHINE FOR ASTEROIDS. **
  6. ** GAME SEQUENCER TO HANDLE INDIVIDUAL PLAYER'S EVENT TIMING. **
  7. FSM:
  8. LDX PLAYER ;PLAYER MUST CONTAIN CURRENT PLAYER
  9. LDA STATE,X ;CURRENT STATE OF PLAYER
  10. BEQ CKCOMPLY ;CHECK IF COMP PLAY
  11. BPL DECTIMER ;IF IN ACTIVE STATE THEN TAKE ACTION
  12. RTS ;IF MINUS, RTS (I GUESS)
  13. DECTIMER:
  14. DEC TIMER,X ;DECREMENT EVENT TIMER
  15. CMP #BIRTH ;BIRTH STATE?
  16. BEQ BIRTHD
  17. CMP #HYPER ;HYPERSPACE STATE?
  18. BNE ZCKCOMP
  19. JMP HYPERD
  20. ZCKCOMP:
  21. CMP #COMPOVER ;COMP PLAY OVER?
  22. BNE ZCKDTH
  23. JMP COVERD
  24. ZCKDTH:
  25. CMP #DEATH ;DEATH STATE?
  26. BNE FSMRTS
  27. JMP DEATHD
  28. FSMRTS:
  29. RTS
  30. CKCOMPLY:
  31. LDA COMPFLAG ;CHECK IF ANYBODY DIED YET
  32. BEQ FSMRTS
  33. JSR CMPSCOR ;COMPARE SCORES
  34. BMI FSMRTS
  35. CMP PLAYER ;HISCORE = FIRST TO DIE?
  36. BNE FSMRTS ;YES, CONTINUE PLAY
  37. TAX
  38. LDA #COMPOVER
  39. STA STATE,X ;STATE IS REZ OUT VICTOR
  40. LDA #$FF
  41. STA COMPFLAG
  42. LDA #0
  43. STA MENLEFT,X ;NO MORE LIVES
  44. LDA #$0D
  45. STA FLASH
  46. LDA #$0
  47. JSR DOTUNE ;VICTOR REZOUT SOUND
  48. RTS
  49. CMPSCOR:
  50. LDX #0 ;COMPARE SCORES
  51. CMPSLOOP:
  52. LDA SCORE,X ;FIRST SCORE
  53. CMP SCORE2,X ;SECOND SCORE
  54. BCC P2BIGGR ;SCORE < SCORE2
  55. BEQ BUMPX
  56. BCS P1BIGGR ;SCORE > SCORE2
  57. BUMPX:
  58. INX ;LOOK AT NEXT BYTE
  59. CPX #5
  60. BNE CMPSLOOP
  61. LDA #$FF ;SCORE = SCORE2
  62. RTS
  63. P2BIGGR:
  64. LDA #1
  65. RTS
  66. P1BIGGR:
  67. LDA #0
  68. RTS
  69. ** BIRTH DISPACHER - HANDLES TIMING OF BIRTH EVENTS. **
  70. BIRTHD:
  71. LDY OFFPLAY2 ;IF PLAYER IS NOT THERE, DON'T
  72. LDA STATUS+24,Y ; DO REZ TWINKLE
  73. BMI ZNOREZ
  74. ;DO REZ TWINKLE
  75. LDA #$05 ;DEFAULT LUME FOR AUTOPLAY
  76. LDY GAMSTATE
  77. CPY #PLAYST
  78. BNE ZREZGO ;IF NOT IN PLAY STATE, DO AUTO REZ
  79. LDA FRMCNT ;USE FRAME COUNT LO BITS FOR LUME
  80. ASL
  81. ZREZGO:
  82. JSR PAINTSHP ;PAINT THE SHIP, BODY AND DEJAG COLORS
  83. LDX PLAYER
  84. ZNOREZ:
  85. LDA TIMER,X ;CHECK TIMER TO DISPATCH
  86. CMP #PMSGT ;TIME TO PUT UP PLAYER MESSAGE?
  87. BEQ PMSG ; YES, PUT IT UP
  88. CMP #PMSGOFFT ;TIME TO TAKE DOWN MESSAGE?
  89. BEQ PMSGOFF ; YES, TAKE IT DOWN
  90. CMP #RESINT ;TIME TO RES IN?
  91. BEQ RESIN ; YES, RES IN. IF LATER THAN RESINT,
  92. BCC OPTENTER ; CHECK FOR OPTIONAL ENTER (JSTICK)
  93. RTS ;OTHERWISE, JUST RTS
  94. * ROUTINE TO PUT UP THE PLAYER X MESSAGE IF NEEDED. *
  95. PMSG:
  96. LDA MODE ;NO MESSAGES IN TEAM MODES
  97. CMP #1
  98. BPL ZPLRTS
  99. JSR SETMSG
  100. ZPLRTS:
  101. RTS
  102. * ROUTINE TO TURN PLAYER X MESSAGE OFF. *
  103. PMSGOFF:
  104. LDA #$FF ;TURN OFF HIGH MESSAGE
  105. STA STATUS+34
  106. RTS
  107. * ROUTINE TO ENTER THE SHIP IF DESIRED OR NEEDED. *
  108. OPTENTER:
  109. LDA GAMSTATE ;DO ONLY IF GAMEPLAY STATE
  110. CMP #PLAYST
  111. BNE ZCKTIMM
  112. ;FIRST CHECK TO SEE IF PLAYER IS FORCING SHIP IN
  113. LDA FIREBUT1,X ;FIRE BUTTON
  114. AND HYPBUT1,X ;HYPERSPACE BUTTON
  115. BPL ENTSHIP ; IS PRESSED! ENTER HIM
  116. LDA SWCHA ;JOYSTICK
  117. EOR #$FF ; (INVERTED)
  118. AND JOYTBL,X ; (LOOK AT ONLY CORRECT PLAYER'S BITS)
  119. BNE ENTSHIP ; IS HIT! ENTER HIM
  120. ;NOW CHECK IF IT IS TIME, AND IS SAFE.
  121. ZCKTIMM:
  122. LDA TIMER,X ;CHECK TIMER
  123. CMP #ENTERT
  124. BCS ENTRTS ;NOT TIME YET, DON'T BOTHER
  125. LDA OFFPLAY2 ;CHECK SAFTEY
  126. CLC
  127. ADC #24
  128. TAX
  129. JSR ISSAFE ;CHECK IF AREA SAFE TO ENTER
  130. BEQ ENTSHIP ;YES, CONTINUE
  131. ;NOT SAFE, HOLD TIMER HERE INDEFINITELY
  132. LDX PLAYER
  133. INC TIMER,X
  134. ENTRTS:
  135. RTS
  136. ENTSHIP:
  137. LDA #2 ;KILL TWINKLING
  138. JSR KILLTUNE
  139. LDA #$3 ;ADD BUZZING IN
  140. JSR DOTUNE
  141. LDA PLAYER ;CHANGE BODY COLOR
  142. ASL
  143. ASL
  144. TAX
  145. LDA COLORS+2,X
  146. STA SOFTCOLR+2,X
  147. LDA COLORS+3,X
  148. STA SOFTCOLR+3,X
  149. LDX PLAYER
  150. LDA #1 ;DEBOUNCE ENTER/FIRE BUTTON
  151. STA FIRESTAT,X
  152. LDA #OK ;SET STATE AS OK
  153. STA STATE,X
  154. RTS
  155. ** ROUTINE TO RESIN AND TWINKLE SHIP AT ENTERING. **
  156. RESIN:
  157. LDA STATUS+25 ;CHECK STATUS OF UFO
  158. BMI ZGONOW ;DON'T BRING SHIP IN IF UFO
  159. INC TIMER,X
  160. RTS
  161. ZGONOW:
  162. LDA GAMSTATE ;DON'T DECREMENT IF AUTOPLAY
  163. CMP #AUTOST
  164. BEQ ZNODECM
  165. LDA MODE ;CHECK TO DEC FROM COMMON POOL
  166. CMP #1
  167. BNE ZNOPOOL
  168. LDA MENLEFTC ;CHECK: IF NO MENLEFT, JUST HANG OUT
  169. CMP #1 ; AND WAIT; PERHAPS OTHER PLAYER WILL
  170. BCS ZYESMEN ; BRING HIM IN A LIFE.
  171. INC TIMER,X ; (HOLD TIMER AT THIS POINT IN TIME)
  172. RTS
  173. ZYESMEN:
  174. LDX #2 ;2 = COMMON POOL
  175. ZNOPOOL:
  176. DEC MENLEFT,X ;DEC FROM PLAYERS LIVES
  177. JSR UPDATMEN
  178. ZNODECM:
  179. LDA #2 ;TWINKLING SOUND
  180. JSR DOTUNE
  181. ZINITPOS:
  182. LDX OFFPLAY2 ;INITIALIZE THE SHIP'S POSITION
  183. LDA #0
  184. STA XVELH+24,X
  185. STA YVELH+24,X
  186. STA XVELL+24,X
  187. STA YVELL+24,X
  188. STA GOATMILK ;??
  189. LDA MODE
  190. CMP #1
  191. BMI ZCENTERS
  192. LDY PLAYER
  193. LDA INITSX,Y ;GET X POS VALUE FOR PLAYER
  194. BPL ZSTORSX ;BPL = JMP HERE.
  195. ZCENTERS:
  196. LDA #$50
  197. ZSTORSX:
  198. STA XPOSH+24,X
  199. CLC
  200. ADC DELTAX+3 ;COULD SQUEEZE A BYTE HERE: USE IMMED.
  201. STA COLXPOSH+24,X
  202. LDA #$50
  203. STA YPOSH+24,X
  204. CLC
  205. ADC DELTAY+3 ;COULD SQUEEZE HERE TOO.
  206. STA COLYPOSH+24,X
  207. LDX PLAYER ;STORE FIRST ANIMATION
  208. LDA SHIPDIR,X
  209. LSR
  210. LSR
  211. LSR
  212. AND #$FE
  213. CLC
  214. ADC #SHIP1 & 255
  215. LDX OFFPLAY2
  216. STA ACYC+24,X
  217. LDA #SHIP ;STORE STATUS AS SHIP
  218. STA STATUS+24,X
  219. RTS
  220. INITSX:
  221. .DC.B $30,$70 ;XPOS VALUES FOR INITIAL SHIP POS
  222. JOYTBL:
  223. .DC.B $F0,$0F ;JSTICK MASKS, INDEXED BY PLAYER.
  224. ** HYPER SPACE DISPACHER - HANDLES TIMING OF HYPER SPACE EVENTS. **
  225. HYPERD:
  226. LDA TIMER,X ;CURRENT PLAYERS EVENT TIMER
  227. CMP #HYPERT ;TIME TO JUMP HYPERSPACE?
  228. BEQ HYPERGO ; YES, DO IT.
  229. CMP #HYPENDT ;TIME TO END HYPERSPACE
  230. BEQ HYPEND ; YES, DO IT.
  231. RTS ;OTHERWISE, JUST RTS
  232. * ROUTINE TO HANDLE THE JUMP TO HYPERSPACE. *
  233. HYPERGO:
  234. LDA #$01 ;SOUND
  235. JSR DOTUNE
  236. LDX OFFPLAY2 ;NULL OUT SHIP
  237. LDA #$FF
  238. STA STATUS+24,X
  239. LDA #0 ;NULL VELOCITY
  240. STA XVELL+24,X
  241. STA XVELH+24,X
  242. STA YVELL+24,X
  243. STA YVELH+24,X
  244. RTS
  245. * ROUTINE TO HANDLE THE RETURN FROM HYPERSPACE. *
  246. HYPEND:
  247. LDA #24
  248. CLC
  249. ADC OFFPLAY2
  250. TAX
  251. JSR NEWRAND ;GET NEW SHIP POSITION
  252. LSR ; AVOID EXTREME SIDES
  253. ADC #$D ; (BETWEEN $D AND $8C)
  254. STA XPOSH,X
  255. JSR NEWRAND ;GET Y POSITION; AVOID TOP AND BOTTOM
  256. LSR
  257. ADC #$10 ; (BETWEEN $10 AND $90)
  258. STA YPOSH,X
  259. JSR ISSAFE ;SAFE TO ENTER
  260. BEQ GOBIGRED ;YOU BET
  261. LDX PLAYER ;SORRY CHARLIE
  262. INC TIMER,X
  263. RTS
  264. GOBIGRED:
  265. JSR NEWRAND ;GET RANDOM VALUE
  266. CMP #50 ;SOMETIMES LET THE SHIP EXPLODE
  267. BCS NOBLOW ;OTHERWISE SET NEW POSITION
  268. ;EXPLODE HIM!
  269. LDA #24 ;WITHOUT THIS X = 'FF' SOMETIMES
  270. CLC
  271. ADC OFFPLAY2
  272. TAX
  273. LDA #$A3 ;BOOM !! SET HIGH BIT OF STATUS
  274. STA STATUS,X
  275. LDA ELBOUND+3 ;SET ANIMATION STAMP
  276. STA ACYC,X
  277. LDA #5 ;START SHIP EXPLOSION SOUND
  278. JSR DOTUNE
  279. LDX PLAYER
  280. BLOW:
  281. LDA #DEATH ;SET STATE
  282. LDX PLAYER
  283. STA STATE,X
  284. LDA #DIET+$28 ;ENTER TIMELINE AT TOP
  285. STA TIMER,X
  286. RTS
  287. NOBLOW:
  288. LDA #3 ;BUZZ SOUND
  289. JSR DOTUNE
  290. LDA #SHIP ;RESTORE SHIP
  291. LDX TEMP
  292. STA STATUS,X
  293. LDX PLAYER
  294. LDA #OK ;RETURN STATE TO OK.
  295. STA STATE,X
  296. RTS
  297. ** COMP PLAY OVER DISPACHER - HANDLES TAKING SHIP OUT. **
  298. COVERD:
  299. * LDX PLAYER
  300. LDA FLASH
  301. INC FLASH
  302. CMP #$20
  303. BEQ ZTAB
  304. CMP #$2E
  305. BNE CCONTIN ;ALL DONE
  306. JMP BLOW ;JUMP INTO HYPER CODE
  307. CCONTIN:
  308. BIT BPLOP
  309. BEQ DOPAINT
  310. EOR #$1F
  311. DOPAINT:
  312. JSR PAINTSHP
  313. RTS
  314. ZTAB:
  315. LDX OFFPLAY2 ;NUKE SHIP
  316. LDA #$FF
  317. STA STATUS+24,X
  318. RTS
  319. ** DEATH DISPACHER - HANDLES TIMING OF DEATH SEQUENCE. **
  320. DEATHD:
  321. LDA TIMER,X ;CURRENT PLAYERS EVENT TIMER
  322. CMP #DIET ;TOP OF DEATH TIMELINE?
  323. BEQ DIE ; YES, GO TO DIE HANDLER
  324. CMP #SWITCHT ;TIME TO SWITCH PLAYER?
  325. BNE ZCKPOT
  326. JMP SWITCH ; YES, SWITCH.
  327. ZCKPOT:
  328. CMP #POMSGT ;TIME TO DISPLAY PLAYERX OVER?
  329. BNE ZCOKE
  330. JMP POMSG ; YES, DO IT.
  331. ZCOKE:
  332. CMP #POMSGOFT ;TIME TO TURN OFF MESSAGE?
  333. BEQ POMSGOFF ; YES, DO IT.
  334. CMP #GOVERT ;TIME TO DISPLAY GAME OVER MESSAGE?
  335. BEQ GOVER ; YES, DO IT.
  336. CMP #NEWGAMET ;END OF DEATH TIMELINE?
  337. BNE DEATHRTS
  338. ;YES, SET UP FOR HIGH SCORE CART
  339. JSR CLEARTUN ;GET RID OF ANY TUNES
  340. JSR NULLOBJS ;GET RID OF ANY OBJECTS
  341. JSR HSCDOENT
  342. JMP DOTITLE
  343. DEATHRTS:
  344. RTS
  345. * ROUTINE TO TAKE DOWN THE ABOVE *
  346. POMSGOFF:
  347. LDA #$FF ;NULL OUT BOTH MESSAGES
  348. STA STATUS+34
  349. STA STATUS+35
  350. TXA ;CHECK OTHER PLAYER FOR GAME OVER COND.
  351. EOR #$01 ; HERE'S HOW IT WORKS: ONLY ONE PLAYER
  352. TAY ; ACTUALLY MAKES IT TO THE GAME OVER
  353. LDA #DEAD ; MESSAGE TIME. SO, THE FIRST PLAYER
  354. CMP STATE,Y ; TO MAKE IT TO POMSGOFF BECOMES DEAD
  355. BEQ DEATHRTS ; THE OTHER LIVES ON TO GET TO GOVER!
  356. STA STATE,X ;MAKE PLAYER DEAD, SINCE OTHER IS LIVE.
  357. LDA MODE ;IN TWO PLAYER MODE, SWITCH DATA NOW
  358. BNE DEATHRTS ; SO WE DON'T GET STUCK PLAYING
  359. JMP SWITCH ; A DEAD PLAYER (FSM WON'T RUN ON HIM)
  360. RTS
  361. * ROUTINE TO PUT UP GAME OVER MESSAGE *
  362. GOVER:
  363. LDX #2 ;GAME OVER MESSAGE
  364. JSR SETMSG
  365. JSR HIGHSCOR
  366. RTS
  367. * ROUTINE TO HANDLE DEATH OF A SHIP. *
  368. * ALL DEATHS GO HERE. THIS ROUTINE FIGURES OUT WHERE WE SHOULD BE GOING. *
  369. DIE:
  370. JSR INITHUMP ;REINIT THUMP RATE
  371. LDA #$11 ;KILL THRUST SOUND
  372. JSR KILLTUNE
  373. LDX PLAYER ;RESTORE X, TRASHED BY KILLTUNE
  374. ;HANDLE MODES DIFFERENTLY
  375. LDY MODE
  376. LDA MENLEFTC ;LOAD TEAMPLAY MENLEFT AS DEFAULT
  377. CPY #1
  378. BEQ ZDIEMN1 ;IF NOT TEAMPLAY MODE
  379. LDA MENLEFT,X ; USE CURRENT MENLEFT
  380. ZDIEMN1:
  381. CMP #1 ;IF WE HAVE NO MEN LEFT
  382. BCC NOMENLFT ; HANDLE THIS SITUATION
  383. CPY #0 ;ELSE IF NOT TWO PLAYER MODE
  384. BNE GIVEBRTH ; SIMPLY TRY TO GIVE BIRTH.
  385. TXA ;ELSE TWO PLAYER MODE:
  386. EOR #$01 ; CHECK OTHER PLAYER'S MENLEFT.
  387. TAX
  388. LDA MENLEFT,X
  389. CMP #1 ; IF HE HAS MEN LEFT THEN
  390. BCS DEATHRTS ; SIMPLY RTS. SWITCH WILL DO THE TRICK
  391. JMP GIVBRTH2 ; ELES SKIP THE SWITCH. GIVE BIRTH NOW
  392. NOMENLFT:
  393. CPY #$FF ;ELSE, IF ONE PLAYER MODE
  394. BEQ DIEGOVER ; DIE WITH SIMPLE GAMEOVER (NO PMSG)
  395. CPY #$1 ;ELSE, IF NOT IN TEAM PLAY MODE
  396. BNE DIEPOVER ; DIE WITH PLAYER OVER MESSAGE
  397. TXA ;ELSE CHECK OTHER PLAYER'S STATE
  398. EOR #$01 ; TO SEE WHETHER TO END THE GAME
  399. TAX
  400. LDA STATE,X
  401. CMP #BIRTH ; IF OTHER PLAYER IS NOT IN BIRTH
  402. BNE GIVEBRTH ; THEN TRY TO GIVE BIRTH.
  403. LDA OFFPLAY2 ; OTHERWISE,
  404. EOR #$08 ; (TOGGLE OFFPLAY2)
  405. TAY
  406. LDA STATUS+24,Y ; IF HE IS NOT YET BORN, THEN
  407. CMP #SHIP ; FORGET IT BUD. AIN'T NO LIVES LEFT
  408. BEQ GIVEBRTH ; FOR EITHER OF THEM.
  409. LDA #DEAD ; NUKE OTHER PLAYER OUT OF BIRTHST
  410. STA STATE,X ; TO PREVENT A NEW RACK FROM STARTING
  411. DIEGOVER:
  412. LDA #GOVERT+3 ;DIE WITH GAME OVER MESSAGE ONLY
  413. BNE ZDIEOVER ; BNE = JMP
  414. DIEPOVER:
  415. LDA #POMSGT+3 ;DIE WITH PLAYER N GAME OVER MESSAGE
  416. ZDIEOVER:
  417. LDX PLAYER
  418. STA TIMER,X
  419. RTS
  420. GIVEBRTH:
  421. LDX PLAYER
  422. LDA #BIRTH ;GIVE BIRTH
  423. STA STATE,X
  424. LDA #RESINT+3 ;AT TIMER RESIN+3
  425. STA TIMER,X
  426. RTS
  427. * ROUTINE TO PUT UP PLAYERX GAME OVER MESSAGE *
  428. POMSG:
  429. LDX PLAYER ;PLAYERX MESSAGE
  430. LDA COMPFLAG
  431. BMI PVICTOR
  432. BEQ PPLAYER
  433. JSR CMPSCOR ;COMPARE SCORES
  434. TAX
  435. BPL PVICTOR
  436. ; TIE SCORE
  437. LDA GOATMILK ;CHECK FLAG
  438. BNE PUNTTHIS ;SHIP TO SHIP
  439. LDX PLAYER ;NO, PUT MESSAGE FOR THIS GUY
  440. BPL PVICTOR ; = JMP
  441. PUNTTHIS:
  442. LDA #$FF ;RETURN W/OUT MSG IF EQUAL
  443. STA STATUS+34 ;TAKE MSG DOWN BEFORE SEEN
  444. STA STATUS+35
  445. RTS
  446. PPLAYER:
  447. JSR SETMSG
  448. LDX #2
  449. DOMSG:
  450. JSR SETMSG
  451. LDX MODE
  452. CPX #2
  453. BNE ZPORTS
  454. STX COMPFLAG
  455. ZPORTS:
  456. RTS
  457. PVICTOR:
  458. JSR SETMSG ;X HAS PLAYER
  459. LDX #3
  460. BPL DOMSG ;BPL = JMP
  461. * ROUTINE TO SWITCH THE TWO DATA SETS WHEN NEEDED. *
  462. SWITCH:
  463. TXA ;TOGGLE CURRENT PLAYER # AND OFFSET
  464. EOR #$01
  465. TAX
  466. STA PLAYER
  467. BEQ ZSTOFFP2
  468. LDA #8
  469. ZSTOFFP2:
  470. STA OFFPLAY2
  471. LDA #$FF ;NULL OUT SPACE OBJECTS
  472. LDX #7 ; (31-23=8 OBJECTS)
  473. SWCHNULL:
  474. STA STATUS+24,X
  475. DEX
  476. BPL SWCHNULL
  477. LDA #0
  478. STA RACKDLY ;NO DELAY AFTER SWITCH
  479. LDA #$50
  480. STA RTIMER ;RESET UFO FREQUENCY AND TIMER
  481. LDA #$92
  482. STA SDELAY
  483. STA EDELAY
  484. JSR CLEARTUN ;KILL TUNES, ESP. UFO
  485. LDY #23
  486. SWCHLOOP:
  487. LDX STATUS,Y
  488. LDA STATUS2,Y
  489. STA STATUS,Y
  490. TXA
  491. STA STATUS2,Y
  492. *
  493. LDX ACYC,Y
  494. LDA ACYC2,Y
  495. STA ACYC,Y
  496. TXA
  497. STA ACYC2,Y
  498. *
  499. LDX PALS,Y
  500. LDA PALS2,Y
  501. STA PALS,Y
  502. TXA
  503. STA PALS2,Y
  504. *
  505. LDX XVELH,Y
  506. LDA XVELH2,Y
  507. STA XVELH,Y
  508. TXA
  509. STA XVELH2,Y
  510. *
  511. LDX YVELH,Y
  512. LDA YVELH2,Y
  513. STA YVELH,Y
  514. TXA
  515. STA YVELH2,Y
  516. *
  517. LDX XVELL,Y
  518. LDA XVELL2,Y
  519. STA XVELL,Y
  520. TXA
  521. STA XVELL2,Y
  522. *
  523. LDX YVELL,Y
  524. LDA YVELL2,Y
  525. STA YVELL,Y
  526. TXA
  527. STA YVELL2,Y
  528. *
  529. LDX XPOSH,Y
  530. LDA XPOSH2,Y
  531. STA XPOSH,Y
  532. TXA
  533. STA XPOSH2,Y
  534. *
  535. LDX YPOSH,Y
  536. LDA YPOSH2,Y
  537. STA YPOSH,Y
  538. TXA
  539. STA YPOSH2,Y
  540. DEY
  541. BPL SWCHLOOP
  542. GIVBRTH2:
  543. LDX PLAYER ;GIVE BIRTH, TWO PLAYER STYLE (PMSG)
  544. LDA #BIRTH ;GIVE BIRTH
  545. STA STATE,X
  546. LDA #PMSGT+$20 ;AT TIMER PMSGT+20
  547. STA TIMER,X
  548. RTS