ANIMATE.S 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
  1. * ANIMATE.S THE MS PAC MAN ANIMATIONS
  2. * START THE ANIMATIONS
  3. ANIMATE STA ANWHICH ;STORE WHICH ANIMATION
  4. JSR CLEARTUN
  5. JSR CLRSCRN ;TURN OFF INDICATORS
  6. PFILL SCREEN,#$00,#$04 ;ERASE SCREEN
  7. * JSR LOADDLST ;RE-LOAD DISPLAY LIST
  8. LDA #WHITE ;SET UP COLOR FOR WORDS
  9. LDY #$18
  10. ANLOOP0 STA P0C3,Y
  11. DEY
  12. DEY
  13. DEY
  14. DEY
  15. BPL ANLOOP0
  16. JSR BARSOFF ;GET BLACK BARS OFF THE SCREEN
  17. JSR ANITUNE ;START TUNE
  18. JSR ANIWORDS ;PUT UP ACT
  19. PFILL SCREEN,#$00,#$04 ;ERASE SCREEN
  20. LDX ANWHICH
  21. LDA ANASTART,X ;GET OFFSET INTO ANIMATION DATA
  22. STA ANAOFF
  23. LDA ANSSTART,X ;GET OFFSET INTO SEGMENT DATA
  24. STA ANSOFF
  25. LDA ANFRAMES,X ;GET NUMBER OF FRAMES PER TIC
  26. STA ANFRM
  27. JSR ANINEXT ;DO ANIMATION
  28. ABOGLOOP JSR SEEBNORM
  29. LDA TUNON ;MAKE SURE TUNE OVER
  30. BNE ABOGLOOP
  31. RTS
  32. * START THE ANIMATION TUNE
  33. ANITUNE LDX ANWHICH
  34. LDA TUNE1,X
  35. JSR DOTUNE
  36. LDA TUNE2,X
  37. JMP DOTUNE
  38. * PUT THE INITIAL MESSAGE UP
  39. ANIWORDS LDA ANWHICH
  40. CLC
  41. ADC #$1B
  42. TAY
  43. JSR WRTMESG ;WRITE THE ACT NUMBER
  44. LDA ANWHICH
  45. CLC
  46. ADC #$1E
  47. TAY
  48. JSR WRTMESG ;WRITE THE MESSAGE
  49. LDX #$02 ;SET UP BASE OF CLAPBOARD
  50. AWLOOP2 LDA ACTBASH,X
  51. STA HPLIST+3,X
  52. LDA ACTBASV,X
  53. JSR VTOZO
  54. STA VOLIST+3,X
  55. TYA
  56. STA VZLIST+3,X
  57. LDA ACTBASSL,X
  58. STA SLLIST+3,X
  59. LDA ACTBASSH,X
  60. STA SHLIST+3,X
  61. STA DOLIST+3,X
  62. DEX
  63. BPL AWLOOP2
  64. JSR AWUPSTMP ;WRITE UP CLAPBOARD
  65. LDA #$40 ;DO A LITTLE WAIT
  66. JSR AWWAIT
  67. JSR AWDNSTMP ;WRITE DOWN CLAPBOARD
  68. LDA #$10 ;DO A LITTLE WAIT
  69. JSR AWWAIT
  70. JSR AWUPSTMP ;WRITE UP CLAPBOARD
  71. LDA #$30 ;DO A LITTLE WAIT
  72. JSR AWWAIT
  73. RTS
  74. * WAIT A BIT - VALUE OF RTLOCAL+1 IN A
  75. AWWAIT CLC ;ADD IT TO PRESENT TIME
  76. ADC RTLOCAL+1
  77. STA TEMP16
  78. AWWLOOP JSR SEEBNORM ;SEE IF ANYTHING TO DO
  79. LDA TEMP16 ;SEE IF DONE YET
  80. CMP RTLOCAL+1
  81. BPL AWWLOOP
  82. RTS
  83. * SET UP STAMPS FOR UP CLAPBOARD
  84. AWUPSTMP LDX #$02 ;SET UP BASE OF CLAPBOARD
  85. AULOOP LDA ACTUPH,X
  86. STA HPLIST,X
  87. LDA ACTUPV,X
  88. JSR VTOZO
  89. STA VOLIST,X
  90. TYA
  91. STA VZLIST,X
  92. LDA ACTUPSL,X
  93. STA SLLIST,X
  94. LDA ACTUPSH,X
  95. STA SHLIST,X
  96. STA DOLIST,X
  97. DEX
  98. BPL AULOOP
  99. RTS
  100. * SET UP STAMPS FOR DOWN CLAPBOARD
  101. AWDNSTMP LDX #$02 ;SET UP BASE OF CLAPBOARD
  102. ADLOOP LDA ACTDNH,X
  103. STA HPLIST,X
  104. LDA ACTDNV,X
  105. JSR VTOZO
  106. STA VOLIST,X
  107. TYA
  108. STA VZLIST,X
  109. LDA ACTDNSL,X
  110. STA SLLIST,X
  111. LDA ACTDNSH,X
  112. STA SHLIST,X
  113. STA DOLIST,X
  114. DEX
  115. BPL ADLOOP
  116. RTS
  117. * SET UP THE STATE FOR AN ANIMATION SEGMENT AND DO IT
  118. ANINEXT JSR ANICLEAR ;CLEAR THE OLD ANIMATIONS
  119. LDX ANAOFF ;LOAD IN A SET OF ANIMATIONS
  120. INC ANAOFF
  121. LDA ANCHARS,X ;NUMBER TO SET UP THIS TIME
  122. BNE ANCONT
  123. RTS ;ALL DONE
  124. ANCONT STA TEMP0
  125. LDA ANTICS,X ;SEE HOW MANY TICS TILL NEXT SEGMENT
  126. STA ANCOUNT
  127. LDA #$00 ;WILL USE ANSTATE FOR WHICH CHAR SLOT
  128. STA ANSTATE
  129. ANLOOP LDY ANSOFF ;Y IS OFFSET INTO SEGMENT DATA
  130. LDX ANSTATE ;X IS WHAT CHARACTER SLOT WE DEAL WITH
  131. LDA #$01
  132. STA A0ENABLE,X ;TURN THIS ONE ON
  133. LDA ANIHPOS,Y ;STORE THE STAMP INFO
  134. BEQ ANLJMP0 ;IF 0 - LEAVE CURRENT HPOS
  135. STA HPLIST,X
  136. ANLJMP0 LDA ANIVPOS,Y
  137. BEQ ANLJMP1 ;IF 0 - LEAVE CURRENT VPOS
  138. STA A0VPOS,X ;STORE VPOS
  139. ANLJMP1 LDA ANICHAR,Y ;STORE STARTING CHARACTER
  140. STA A0CHAR,X
  141. LDA ANIHPDIF,Y ;STORE WHERE DELTAS TO POSITION ARE
  142. STA A0HPDIF,X
  143. LDA ANIVPDIF,Y
  144. STA A0VPDIF,X
  145. LDA ANIANDIF,Y ;AND ANIMATION SEQUENCE
  146. STA A0ANDIF,X
  147. LDA ANIPALET,Y ;SET COLORS
  148. TAY ;Y IS NOW OFFSET INTO PALETTE INFO
  149. TXA ;SET X TO 4*CHAR NUMBER
  150. ASL A ; THUS, INDEX INTO PALETTES
  151. ASL A
  152. TAX
  153. LDA ANPALET1,Y
  154. STA P1C1,X
  155. LDA ANPALET2,Y
  156. STA P1C2,X
  157. LDA ANPALET3,Y
  158. STA P1C3,X
  159. INC ANSTATE ;UPDATE STATE VARIABLES
  160. INC ANSOFF
  161. DEC TEMP0
  162. BNE ANLOOP
  163. JSR CHRCLEAR ;CLEAR SCREEN
  164. LDA #$07
  165. STA ANSTATE ;THIS WILL NOW BE 7,6,5,4,3,2,1,0,7,...
  166. * MAIN LOOP FOR THE CURRENT ANIMATION
  167. ANIDOIT JSR ANIMOVE ;MOVE THEM ALL
  168. LDA RTLOCAL+1 ;WAIT FOR A BIT
  169. CLC
  170. ADC ANFRM
  171. STA TEMP16
  172. ADWLOOP JSR SEEBNORM ;SEE IF ANY BUTTONS HIT
  173. LDA TEMP16 ;SEE IF WAIT OVER YET
  174. CMP RTLOCAL+1
  175. BNE ADWLOOP
  176. DEC ANCOUNT
  177. BNE ANIDOIT
  178. JMP ANINEXT ;TIME FOR NEXT READ
  179. * MOVE THE ANIMATION CHARACTERS
  180. ANIMOVE LDX #$05 ;MOVE THEM ALL
  181. ANMLOOP LDA A0ENABLE,X
  182. BEQ ANMNEXT
  183. JSR ANIDISP ;SHOW THE ANIMATION
  184. ANMNEXT DEX
  185. BPL ANMLOOP
  186. LDX #$05 ;SET UP FOR WHICHEVER LOOP
  187. DEC ANSTATE ;NEXT STATE
  188. BPL ANMINC ;SEE IF WRAP
  189. LDA ANSTATE ;WRAP - GET ANSTATE BACK AGAIN
  190. AND #$07
  191. STA ANSTATE
  192. ANMWLOOP LDA A0HPDIF,X ;AND WRAP THE OFFSETS BACK AGAIN
  193. SEC
  194. SBC #$07
  195. STA A0HPDIF,X
  196. LDA A0VPDIF,X
  197. SEC
  198. SBC #$07
  199. STA A0VPDIF,X
  200. LDA A0ANDIF,X
  201. SEC
  202. SBC #$07
  203. STA A0ANDIF,X
  204. DEX
  205. BPL ANMWLOOP
  206. RTS
  207. ANMINC INC A0HPDIF,X ;INCREMENT OUR OFFSETS
  208. INC A0VPDIF,X
  209. INC A0ANDIF,X
  210. DEX
  211. BPL ANMINC
  212. RTS
  213. * THIS ROUTINE MOVES A SINGLE ANIMATION FIGURE. THE CHARACTER IS IN X, THIS
  214. * MUST BE PRESERVED
  215. ANIDISP LDA HPLIST,X ;MODIFY HPOS
  216. LDY A0HPDIF,X ;INDEX FOR MODIFICATION
  217. CLC
  218. ADC ANHPMOVE,Y ;MODIFICATION
  219. STA HPLIST,X
  220. LDA A0VPOS,X ;MODIFY VPOS
  221. LDY A0VPDIF,X ;INDEX FOR MODIFICATION
  222. CLC
  223. ADC ANVPMOVE,Y ;MODIFICATION
  224. STA A0VPOS,X
  225. JSR VTOZO ;CONVERT IT TO ZONE AND COLUMN
  226. STA VOLIST,X
  227. TYA
  228. STA VZLIST,X
  229. LDA A0CHAR,X ;MODIFY CHAR
  230. LDY A0ANDIF,X ;INDEX FOR MODIFICATION
  231. CLC
  232. ADC ANANMOVE,Y ;MODIFICATION
  233. STA A0CHAR,X
  234. TAY ;GET THE NEW STAMP
  235. LDA #L(MSCHAR) ;OFFSET FROM THE BASE OF MSCHAR
  236. CLC
  237. ADC CHAROFFL,Y
  238. STA SLLIST,X
  239. LDA #H(MSCHAR)
  240. ADC CHAROFFH,Y
  241. STA SHLIST,X
  242. STA DOLIST,X ;AND TELL LOADER TO DISPLAY IT
  243. RTS
  244. * CLEAR OUT THE ANIMATION THINGS
  245. ANICLEAR LDY #$05
  246. LDA #$00
  247. ACLOOP STA A0ENABLE,Y
  248. DEY
  249. BPL ACLOOP
  250. RTS
  251. * CLEAR OUT THE CHARACTER THINGS
  252. CHRCLEAR LDY #$05
  253. LDA #OFFSCRN
  254. CCLOOP LDX A0ENABLE,Y
  255. BNE CCNEXT
  256. STA HPLIST,Y
  257. STA DOLIST,Y
  258. CCNEXT DEY
  259. BPL CCLOOP
  260. RTS
  261. * TUNES FOR THE ANIMATIONS
  262. TUNE1 DB 2,4,8
  263. TUNE2 DB 3,6,9
  264. * TABLES FOR POSITIONS OF CLAPBOARD STAMPS
  265. ACTBASH ;HORIZONTAL POSITIONS
  266. ACTUPH
  267. ACTDNH DB $0E+LEFTSIDE,$16+LEFTSIDE,$1E+LEFTSIDE
  268. ACTBASV DB $55,$55,$55 ;VERTICAL POSITONS
  269. ACTUPV DB $4A,$42,$3A
  270. ACTDNV DB $51,$51,$51
  271. ACTBASSL DB L(CLAPBRD),L(CLAPBRD+24),L(CLAPBRD+48) ;STAMP LOW BYTE
  272. ACTUPSL DB L(CLAPBRDU),L(CLAPBRDU+24),L(CLAPBRDU+48)
  273. ACTDNSL DB L(CLAPBRDD),L(CLAPBRDD+24),L(CLAPBRDD+48)
  274. ACTBASSH DB H(CLAPBRD),H(CLAPBRD+24),H(CLAPBRD+48) ;STAMP HI BYTE
  275. ACTUPSH DB H(CLAPBRDU),H(CLAPBRDU+24),H(CLAPBRDU+48)
  276. ACTDNSH DB H(CLAPBRDD),H(CLAPBRDD+24),H(CLAPBRDD+48)
  277. * OFFSET TABLES FROM CHARACTER INDEX TO OFFSET
  278. CHAROFFL DB $00,$18,$30,$48,$60,$78,$90,$A8
  279. DB $C0,$D8,$F0,$08,$20,$38,$50,$68
  280. DB $80,$98,$B0,$C8,$E0,$F8,$10,$28
  281. DB $40,$58,$70,$88,$A0,$B8,$D0,$E8
  282. DB $00,$18,$30,$48,$60,$78,$90,$A8
  283. DB $C0,$D8,$F0,$08,$20,$38,$50,$68
  284. CHAROFFH DB $00,$00,$00,$00,$00,$00,$00,$00
  285. DB $00,$00,$00,$01,$01,$01,$01,$01
  286. DB $01,$01,$01,$01,$01,$01,$02,$02
  287. DB $02,$02,$02,$02,$02,$02,$02,$02
  288. DB $03,$03,$03,$03,$03,$03,$03,$03
  289. DB $03,$03,$03,$04,$04,$04,$04,$04
  290. * GLOBAL INFORMATION FOR ANIMATIONS
  291. ANASTART DB $00,$07,$0F ;OFFSET INTO ANIMATION INFORMATION
  292. ANSSTART DB $00,$16,$22 ;OFFSET INTO ANIMATION SEGMENT INFO
  293. ANFRAMES DB $01,$01,$02 ;FRAMES PER TIC
  294. * INFORMATION ABOUT EACH ANIMATION
  295. ANTICS DB $DB,$4D,$0E,$18,$0C,$1D,$00 ;TICS PER ANIMATION SEGMENT
  296. DB $22,$D6,$BE,$BE,$32,$38,$60,$00
  297. DB $30,$20,$10,$30,$00
  298. ANCHARS DB 4,4,4,4,3,3,0 ;CHARACTERS PER ANIMATION
  299. DB 1,2,2,2,2,2,1,0
  300. DB 6,6,6,6,0
  301. * INFORMATION ABOUT EACH ANIMATION SEGMENT
  302. ANIHPOS DB $FF,$90,$E0,$B0 ;STARTING HPOS
  303. DB $91,$FE,$A5,$EA
  304. DB $00,$00,$00,$00
  305. DB $00,$00,$00,$00
  306. DB $00,$00,$48
  307. DB $00,$00,$00
  308. DB $F0
  309. DB $E0,$FF
  310. DB $90,$B0
  311. DB $E0,$FF
  312. DB $90,$B0
  313. DB $E0,$FF
  314. DB $F0
  315. DB $10,$20,$8E,$90,$98,$A0
  316. DB $00,$00,$00,$00,$00,$00
  317. DB $00,$00,$00,$00,$00,$00
  318. DB $00,$00,$00,$00,$00,$00
  319. ANIVPOS DB $60,$A0,$60,$A0 ;STARTING VPOS
  320. DB $80,$80,$80,$80
  321. DB $00,$00,$00,$00
  322. DB $00,$00,$00,$00
  323. DB $00,$00,$28
  324. DB $00,$00,$00
  325. DB $00
  326. DB $40,$40
  327. DB $80,$80
  328. DB $60,$60
  329. DB $40,$40
  330. DB $80,$80
  331. DB $00
  332. DB $80,$80,$40,$3E,$3E,$3E
  333. DB $00,$00,$00,$00,$00,$00
  334. DB $00,$00,$00,$00,$00,$00
  335. DB $00,$00,$00,$00,$00,$00
  336. ANICHAR DB $00,$12,$18,$1C ;STARTING CHARACTER
  337. DB $06,$0C,$1C,$18
  338. DB $09,$15,$1C,$18
  339. DB $09,$15,$18,$1C
  340. DB $06,$0C,$26
  341. DB $08,$0E,$26
  342. DB $00
  343. DB $00,$0C
  344. DB $06,$12
  345. DB $00,$0C
  346. DB $06,$12
  347. DB $00,$0C
  348. DB $00
  349. DB $02,$0E,$27,$29,$2A,$2C
  350. DB $02,$0E,$27,$29,$2A,$2C
  351. DB $02,$0E,$27,$29,$2A,$2C
  352. DB $02,$0E,$28,$29,$2A,$2C
  353. ANIPALET DB $00,$00,$01,$02 ;PALETTE
  354. DB $00,$00,$01,$02
  355. DB $00,$00,$01,$02
  356. DB $00,$00,$01,$02
  357. DB $00,$00,$00
  358. DB $00,$00,$00
  359. DB $00
  360. DB $00,$00
  361. DB $00,$00
  362. DB $00,$00
  363. DB $00,$00
  364. DB $00,$00
  365. DB $00
  366. DB $00,$00,$03,$03,$03,$03
  367. DB $00,$00,$03,$03,$03,$03
  368. DB $00,$00,$03,$03,$03,$03
  369. DB $00,$00,$00,$03,$03,$03
  370. ANIHPDIF DB $10,$28,$18,$30 ;CHANGES TO HPOS
  371. DB $28,$10,$30,$18
  372. DB $00,$00,$30,$18
  373. DB $00,$00,$08,$20
  374. DB $00,$00,$00
  375. DB $00,$00,$00
  376. DB $00
  377. DB $18,$10
  378. DB $28,$30
  379. DB $18,$10
  380. DB $48,$50
  381. DB $40,$38
  382. DB $00
  383. DB $00,$00,$30,$30,$30,$30
  384. DB $00,$00,$30,$30,$30,$30
  385. DB $00,$00,$20,$30,$30,$30
  386. DB $00,$00,$00,$30,$30,$30
  387. ANIVPDIF DB $00,$00,$00,$00 ;CHANGES TO VPOS
  388. DB $00,$00,$00,$00
  389. DB $08,$08,$00,$00
  390. DB $08,$08,$10,$10
  391. DB $00,$00,$00
  392. DB $00,$00,$00
  393. DB $00
  394. DB $00,$00
  395. DB $00,$00
  396. DB $00,$00
  397. DB $00,$00
  398. DB $00,$00
  399. DB $00
  400. DB $00,$00,$00,$00,$20,$20
  401. DB $00,$00,$18,$00,$20,$20
  402. DB $00,$00,$10,$00,$20,$20
  403. DB $00,$00,$00,$00,$20,$20
  404. ANIANDIF DB $08,$08,$10,$10 ;CHANGES TO ANIMATION CHARS
  405. DB $08,$08,$10,$10
  406. DB $08,$08,$10,$10
  407. DB $08,$08,$10,$10
  408. DB $08,$08,$00
  409. DB $00,$00,$00
  410. DB $00
  411. DB $08,$08
  412. DB $08,$08
  413. DB $08,$08
  414. DB $08,$08
  415. DB $08,$08
  416. DB $00
  417. DB $00,$00,$00,$00,$18,$18
  418. DB $00,$00,$00,$00,$18,$18
  419. DB $00,$00,$00,$00,$18,$18
  420. DB $00,$00,$00,$00,$18,$18
  421. * PALETTE TABLES
  422. ANPALET1 DB YELLOW,RED,LTBLUE,YELLOW ;PALETTES FOR STAMPS
  423. ANPALET2 DB PINK,WHITE,WHITE,BLUE
  424. ANPALET3 DB BLACK,BLUE,BLUE,WHITE
  425. * HPOS MOVEMENT TABLES
  426. ANHPMOVE DB 0,0,0,0,0,0,0,0 ;0 POSSIBLE MOVEMENTS FOR CHARS
  427. DB 1,0,1,0,1,0,1,0 ;8
  428. DB 1,1,1,1,1,1,1,0 ;10
  429. DB 1,1,1,1,1,1,1,1 ;18
  430. DB -1,0,-1,0,-1,0,-1,0 ;20
  431. DB -1,-1,-1,-1,-1,-1,-1,0 ;28
  432. DB -1,-1,-1,-1,-1,-1,-1,-1 ;30
  433. DB 3,3,2,3,3,2,3,2 ;38
  434. DB 3,3,3,3,3,3,3,3 ;40
  435. DB -3,-3,-2,-3,-3,-2,-3,-2 ;48
  436. DB -3,-3,-3,-3,-3,-3,-3,-3 ;50
  437. * VPOS MOVEMENT TABLES
  438. ANVPMOVE DB 0,0,0,0,0,0,0,0 ;0 POSSIBLE MOVEMENTS FOR CHARS
  439. DB -2,-2,-2,-2,-2,-2,-2,-2 ;8
  440. DB -1,-1,0,0,1,1,0,0 ;10
  441. DB 2,2,2,2,2,2,2,2 ;18
  442. DB 0,0,-2,0,0,0,2,0 ;20
  443. * ANIMATION TABLES
  444. ANANMOVE DB 0,0,0,0,0,0,0,0 ;0 MOVEMENTS FOR ANIMATIONS
  445. DB 0,1,0,1,0,-1,0,-1 ;8
  446. DB 0,1,0,-1,0,1,0,-1 ;10
  447. DB 0,0,1,0,0,0,-1,0 ;18