HOCKEY.SML 52 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517
  1. ( HOCKEY HI-LEVEL MAF JDS KAL PMA JJT 16:09 08/27/87 )
  2. ( Last change: Screen 027 MAF 10:09 04/09/87 )
  3. .NOLIST
  4. -HEADERS
  5. ( SQUARE TABLE 1/212:41 02/12/87 )
  6. DECIMAL L: SQUARE-TABLE
  7. 00000 , 00001 , 00004 , 00009 , 00016 , 00025 , 00036 ,
  8. 00049 , 00064 , 00081 , 00100 , 00121 , 00144 , 00169 ,
  9. 00196 , 00225 , 00256 , 00289 , 00324 , 00361 , 00400 ,
  10. 00441 , 00484 , 00529 , 00576 , 00625 , 00676 , 00729 ,
  11. 00784 , 00841 , 00900 , 00961 , 01024 , 01089 , 01156 ,
  12. 01225 , 01296 , 01369 , 01444 , 01521 , 01600 , 01681 ,
  13. 01764 , 01849 , 01936 , 02025 , 02116 , 02209 , 02304 ,
  14. 02401 , 02500 , 02601 , 02704 , 02809 , 02916 , 03025 ,
  15. 03136 , 03249 , 03364 , 03481 , 03600 , 03721 , 03844 ,
  16. 03969 , 04096 , 04225 , 04356 , 04489 , 04624 , 04761 ,
  17. 04900 , 05041 , 05184 , 05329 , 05476 , 05625 , 05776 ,
  18. 05929 , 06084 , 06241 , 06400 , 06561 , 06724 , 06889 ,
  19. 07056 , 07225 , 07396 , 07569 , 07744 , 07921 , 08100 ,
  20. 08281 , 08464 , 08649 , 08836 , 09025 , 09216 , 09409 ,
  21. ( SQUARE TABLE 2/2 12:41 02/12/87 )
  22. 09604 , 09801 , 10000 , 10201 , 10404 , 10609 , 10816 ,
  23. 11025 , 11236 , 11449 , 11664 , 11881 , 12100 , 12321 ,
  24. 12544 , 12769 , 12996 , 13225 , 13456 , 13689 , 13924 ,
  25. 14161 , 14400 , 14641 , 14884 , 15129 , 15376 , 15625 ,
  26. 15876 , 16129 , 16384 , 16641 , 16900 , 17161 , 17424 ,
  27. 17689 , 17956 , 18225 , 18496 , 18769 , 19044 , 19321 ,
  28. 19600 , 19881 , 20164 , 20449 , 20736 , 21025 , 21316 ,
  29. 21609 , 21904 , 22201 , 22500 , 22801 , 23104 , 23409 ,
  30. 23716 , 24025 , 24336 , 24649 , 24964 , 25281 , 25600 ,
  31. 25921 , 26244 , 26569 , 26896 , 27225 , 27556 , 27889 ,
  32. 28224 , 28561 , 28900 , 29241 , 29584 , 29929 , 30276 ,
  33. 30625 , 30976 , 31329 , 31684 , 32041 , 32400 , 32761 ,
  34. 33124 , 33489 , 33856 , 34225 , 34596 , 34969 , 35344 ,
  35. 35721 , 36100 , 36481 , 36864 , 37249 , 37636 , 38025 ,
  36. 38416 , 38809 , 39204 , 39601 , 40000 ,
  37. ( RAM LOCATIONS FOR GAME PLAY 11:18 02/05/87 )
  38. : SQUARE 2* SQUARE-TABLE + @ ;
  39. END-TABLE-PLUG 3 + EQU PLAYER1
  40. PLAYER1 15 + EQU PLAYER2
  41. PLAYER2 15 + EQU puck puck15 + EQU SCORE1
  42. SCORE1 2 + EQU SCORE2 SCORE2 2 + EQU SAVES1
  43. SAVES1 2 + EQU SAVES2 SAVES2 2+ EQU WHIZ-DONE
  44. WHIZ-DONE 2 + EQU WHIZ-COUNT
  45. ( 12:00 02/19/87 )
  46. WHIZ-COUNT 2+ EQU DX DX 2+ EQU DY DY 2+ EQU SHOOTFLAG1
  47. SHOOTFLAG1 2+ EQU SHOOTFLAG2 SHOOTFLAG2 2+ EQU OLDJOY1
  48. OLDJOY1 1+ EQU OLDJOY2 OLDJOY2 1+ EQU SKILL
  49. SKILL 1+ EQU GOALIE1-Y
  50. GOALIE1-Y 2+ EQU GOALIE2-Y
  51. GOALIE2-Y 2+ EQU CYCLE#
  52. CYCLE# 2+ EQU OLD-XY
  53. OLD-XY 4 + EQU END-OF-RAM
  54. ( ANIMATION TABLES 13:03 02/12/87 )
  55. ( ADDRESSED BY ORIENTATION * 4 + ANIMATION 3 AND + )
  56. L: PLAYER2-IMAGES
  57. RPFE C, RPFER C, RPFE C, RPFEL C,
  58. RPFNE C, RPFNER C, RPFNE C, RPFNEL C,
  59. RPFN C, RPFNR C, RPFN C, RPFNL C,
  60. RPFNW C, RPFNWR C, RPFNW C, RPFNWL C,
  61. RPFW C, RPFWR C, RPFW C, RPFWL C,
  62. RPFSW C, RPFSWR C, RPFSW C, RPFSWL C,
  63. RPFS C, RPFSR C, RPFS C, RPFSL C,
  64. RPFSE C, RPFSER C, RPFSE C, RPFSEL C,
  65. ( ANIMATION TABLES 13:03 02/12/87 )
  66. ( ADDRESSED BY ORIENTATION * 4 + ANIMATION 3 AND + )
  67. L: PLAYER1-IMAGES
  68. BPFE C, BPFER C, BPFE C, BPFEL C,
  69. BPFNE C, BPFNER C, BPFNE C, BPFNEL C,
  70. BPFN C, BPFNR C, BPFN C, BPFNL C,
  71. BPFNW C, BPFNWR C, BPFNW C, BPFNWL C,
  72. BPFW C, BPFWR C, BPFW C, BPFWL C,
  73. BPFSW C, BPFSWR C, BPFSW C, BPFSWL C,
  74. BPFS C, BPFSR C, BPFS C, BPFSL C,
  75. BPFSE C, BPFSER C, BPFSE C, BPFSEL C,
  76. ( 256/ 256*13:46 08/27/87 )
  77. CODE 256/( note: ROUNDS & UNSIGNED! jjt)
  78. TOS 1+ LDY TOS LDA 0< IF INY THEN
  79. TOS STY 0 # LDA TOS 1+ STA
  80. NEXT JMP END-CODE
  81. CODE 256*TOSLDA TOS 1+ STA
  82. TOS STY NEXT JMP
  83. END-CODE
  84. ( HOCKEY LIMIT PARAMETERS/EQUATES 13:50 02/19/87 )
  85. DECIMAL 4 EQU DIAM ( PUCK DIAMETER )
  86. 33 EQU LOG(FAT) ( GIRTH OF PLAYER )
  87. 30 ( 30 ) EQU PUCK-STICK-THRESHOLD
  88. 120 EQU PLAYER-PLAYER-THRESHOLD
  89. 08 256 * EQU LEFT-LINE151 256 * EQU RIGHT-LINE
  90. 40 256 * EQU TOP-LINE 184 256 * EQU BOTTOM-LINE
  91. TOP-LINE 50 256 * + EQU GOAL-TOP
  92. BOTTOM-LINE 52 256 * - EQU GOAL-BOTTOM
  93. LEFT-LINE 5 256 * - EQU GOAL-LEFT
  94. RIGHT-LINE 5 256 * +EQU GOAL-RIGHT
  95. 12 256 * EQU GOAL-HEIGHT ( 24)
  96. 6 EQU GOAL-WIDTH
  97. LEFT-LINE GOAL-WIDTH 256 * + EQU GOAL1-X
  98. RIGHT-LINE GOAL-WIDTH 1 + 256 * - EQU GOAL2-X
  99. (18:20 05/11/87 )
  100. 08 EQU LEFT-LINEH151 EQU RIGHT-LINEH
  101. 40 EQU TOP-LINEH 184 EQU BOTTOM-LINEH
  102. TOP-LINEH 50 + EQU GOAL-TOPH
  103. BOTTOM-LINEH 52 - EQU GOAL-BOTTOMH
  104. LEFT-LINEH 5 - EQU GOAL-LEFTH
  105. RIGHT-LINEH 5 + EQU GOAL-RIGHTH
  106. oops deleted a word here - tas 11/2/87
  107. EQU GOAL-HEIGHTH ( 24)
  108. ( ANIMATOR1/2 rev. jjt 09:03 08/27/87 )
  109. : ANIMATOR
  110. PLAYER2 @XY V256/ REDD-Y C! REDD-X C!
  111. PLAYER2 @ORIENTATION 2* 2* PLAYER2-IMAGES +
  112. DX1 C@ DY1 C@ OR PLAYER2 @FLAG 2 AND OR IF
  113. PLAYER2-FEET C@ DUP 1+
  114. PLAYER2-FEET C! 3 AND +
  115. DUP3 AND 0= WHIZ-COUNT C@ 0= AND IF SKRITCH-SND THEN
  116. THEN ( no skritching while whizzing...)
  117. PLAYER1 @XY V256/ BLUE-Y C! BLUE-X C!
  118. PLAYER1 @ORIENTATION 2* 2* PLAYER1-IMAGES +
  119. DX0 C@ DY0 C@ OR PLAYER1
  120. @FLAG 2 AND OR IF
  121. PLAYER1-FEET C@ DUP 1+ PLAYER1-FEET C! 3 AND +
  122. DUP 2+ 3 AND 0= WHIZ-COUNT C@ 0= AND IF SKRITCH-SND THEN
  123. THEN ( and less often at that! )
  124. puck @XY V256/ PUCK-Y C! PUCK-X C!
  125. ( ANIMATOR 2/2 13:10 02/12/87 )
  126. BEGIN ?VBLANK UNTIL BLUE-ERASE BLUE-GOALY-ERASE BLUE-PLAYER-FRAME
  127. BEGIN ?VBLANK 0= UNTIL
  128. BEGIN ?VBLANK UNTIL
  129. PUCK-ERASE PUCK-FRAME
  130. REDD-ERASE REDD-GOALY-ERASE REDD-PLAYER-FRAME ;
  131. ( GENERATE SQUARE TABLE 13:30 02/05/87 )
  132. 0 .IF
  133. VARIABLE LINE# VARIABLE BLOCK#
  134. : MAKE-SQUARES 179 BLOCK# ! 2 LINE# !
  135. 0 BEGINDUP 7 MOD 0= IF 1 LINE# +!
  136. LINE# @ 15 > IF 1 LINE# ! 1 BLOCK# +! THEN THEN
  137. DUP DUP * 0 <# # # # # # #> ( N ADDR COUNT )
  138. BLOCK# @ BLOCK UPDATE
  139. LINE# @ 64 * + ( N ADDR COUNT ADDR )
  140. 3 PICK 7 MOD 8 * + DUP >R SWAP
  141. CMOVE ASCII , R> 6 + C!
  142. 1+ DUP 200 > UNTIL DROP FLUSH ;
  143. .THEN
  144. ( ANGLE 11:08 02/05/87 )
  145. L: ANGLE-TAB 0 C, 6 C, 0 C, 2 C, 4 C, 6 C, 4 C, 2 C,
  146. 7 C, 7 C, 1 C, 1 C, 5 C, 5 C, 3 C, 3 C,
  147. 0 .IF
  148. : ANGLE ( X1 Y1 X2 Y2 ---- a )
  149. ( algorithm courtesy Lee Actor) ( Bally Sente )
  150. ROT - DY ! SWAP - DX ! ( Calculate deltax, deltay )
  151. 0 DX @ DUP 0< IF NEGATE DX ! 4 OR ELSE DROP THEN
  152. DY @ DUP 0< IF NEGATE DY ! 2 OR ELSE DROP THEN
  153. DY @ DX @ > IF 1 OR DY @ DX @ 2* < IF 8 OR THEN
  154. ELSE DX @ DY @ 2* < IF 8 OR THEN
  155. THEN ANGLE-TAB + C@ ;
  156. .THEN
  157. ( ANGLE JDS 11:10 03/23/87 )
  158. CODE (ANGLE) ( X1 Y1 X2 Y2 ---- a )
  159. SEC TOS LDA TOS 4 + SBC DY STA
  160. TOS 1+ LDA TOS 5 + SBC DY 1+
  161. STA ( DELTA Y FOUND )
  162. SEC TOS 2+ LDA TOS 6 + SBC DX STA
  163. TOS 3 +LDA TOS 7 + SBC DX 1+ STA ( DELTA X FOUND )
  164. TXA CLC 6 # ADC TAX TYA PHA ( PTR BYTE & XTRA STK)
  165. DX 1+ LDA 0< IF SEC TYA DX SBC DX STA TYA DX 1+ SBC DX 1+ STA
  166. PLA 4 # ORA PHA THEN
  167. ( IF LESS THAN 0 , TURN POSITIVE )
  168. DY 1+ LDA 0< IF SEC TYA DY SBC DY STA TYA DY 1+ SBC DY 1+ STA
  169. PLA 2 # ORA PHA THEN ( IF LESS THAN 0 , TURN POSITIVE )
  170. SEC DX LDA DY SBC DX 1+ LDA DY 1+ SBC ( CS: X >= Y ELSE Y > X )
  171. CS NOT IF PLA 1 # ORA PHA
  172. DX 1+ LDA TOS 1+ STA DX LD
  173. A TOS STA TOS ASL TOS 1+ ROL ( DX 2*)
  174. SEC DY LDA TOS SBC DY 1+ LDA TOS 1+ SBC CS NOT IF ( DY<DX2*)
  175. PLA 8 # ORA PHA THEN ELSE
  176. ( ANGLE JDS 2/2 11:10 03/23/87 )
  177. DY 1+ LDA TOS 1+ STA DY LDA TOS STA TOS ASL TOS 1+ ROL ( DY 2*)
  178. SEC DX LDA TOS SBC DX
  179. 1+ LDA TOS 1+ SBC CS NOT IF ( DX<DY2*)
  180. PLA 8 # ORA PHA THEN THEN
  181. ANGLE-TAB >HI # LDA TOS 1+ STA
  182. ANGLE-TAB >LO # LDA TOSSTA
  183. PLA CLC TOS ADC TOS
  184. STA CS IF TOS 1+ INC THEN
  185. TOS X) LDA TOS STA TOS 1+ STY RTS END-CODE
  186. CODE ANGLE ' (ANGLE) >BODY JSR NEXT JMP END-CODE
  187. ( structures for players and puck 11:13 02/05/87 )
  188. (2 = COMPUTER CONTROL )
  189. : @TIMER 10 + C@ ;
  190. : !TIMER 10 + C! ;
  191. : @SHOOT-COUNT 12 + C@ ;
  192. : !SHOOT-COUNT 12 + C! ;
  193. : @POSSESSION 13 + C@ ;
  194. : !POSSESSION 13 + C! ;
  195. : @ANIMATION 14 + C@ ;
  196. : !ANIMATION 14 + C! ;
  197. 13:28 02/20/87 )
  198. PROC X2@ ( ADDR -- D )TOS LDA N STA TOS 1+ LDA N 1+ STA 0 # LD
  199. Y DEX DEX N )Y LDA TOS STA INY N )Y LDA TOS 1+ STA
  200. INY N )Y LDA TOS 2+ STA
  201. INY N )Y LDA TOS 3 + STA
  202. NEXT JMP END-PROC
  203. PROC X2! ( D ADDR -- ) TOS L
  204. DA N STA TOS 1+ LDA N 1+ STA 0 # LDY
  205. INX INX TOS LDA N )Y STA
  206. INX INY TOS LDA N )Y STA
  207. INX INY TOS LDA N )Y STA
  208. INX INY TOS LDA N )Y STA INX
  209. NEXT JMP END-PROC
  210. ( @XY !XY @VELOCITY !VELOCITY 13:51 02/20/87 )
  211. CODE @XY ( : @XY 4 + 2@;
  212. ( PLAYER --- X Y )
  213. CLC 4 # LDA TOS ADC TOS STA
  214. TYA TOS 1+ ADC TOS 1+ STA
  215. X2@ JMP END-CODE
  216. CODE !XY ( : !XY 4 + 2!; ( X Y PLAYER ---- )
  217. CLC 4 # LDA TOS ADC TOS STA
  218. TYA TOS 1+ ADC TOS 1+ STA
  219. X2! JMP END-CODE
  220. CODE @VELOCITY X2@ JMP END-CODE
  221. CODE !VELOCITY X2! JMP END-CODE
  222. ( XC@ XC! @OREINTATION !ORIENTATION14:00 02/20/87 )
  223. PROC XC@TOS X) LDA TOS STATOS 1+ STY NEXT JMP END-PROC
  224. PROC XC!NOS LDA TOS X) STAPOP2 JMP END-PROC
  225. CODE @ORIENTATION
  226. CLC 8 # LDA TOS ADC TOS STA
  227. CS IF TOS 1+ INC THEN
  228. XC@ JMP END-CODE
  229. CODE !ORIENTATION
  230. CLC 8 # LDA TOS ADC TOS STA
  231. CS IF TOS 1+ INC THEN
  232. XC! JMP END-CODE
  233. ( @FLAG !FLAG THUMP DECIMAL-INC 12:24 04/06/87 )
  234. CODE @FLAG
  235. CLC 9 # LDA TOS ADC TOS STA
  236. CS IF TOS 1+ INC THEN
  237. XC@ JMP END-CODE
  238. CODE !FLAG
  239. CLC 9 # LDA TOS ADC TOS STA
  240. CS IF TOS 1+ INC THEN
  241. XC! JMP END-CODE
  242. oops may have deleted something here tas 11/2/87
  243. X) STA
  244. INX INX NEXT JMP END-CODE
  245. ( RIGHT-LINE-CHECK MAF 10:05 04/09/87 )
  246. 0 .IF
  247. : RIGHT-LINE-CHECK ( X Y --- RX TRUE/ FALSE )
  248. OVER RIGHT-LINE
  249. U< IF 2DROP 0 EXIT THEN
  250. puck @VELOCITY SWAP NEGATE SWAP puck !VELOCITY
  251. DUP GOAL-TOP U< IF 2DROP
  252. [ RIGHT-LINE DIAM 256 * - ] LITERAL -1 EXIT THEN
  253. DUP GOAL-BOTTOM U> IF 2DROP
  254. [ RIGHT-LI
  255. NE DIAM 256 * - ] LITERAL -1 EXIT THEN
  256. DROP ( X ) GOAL-RIGHT > IF 0. puck !VELOCITY
  257. [ GOAL-RIGHT DIAM 256 * - ] LITERAL -1 ELSE 0 THEN ;
  258. ( LEFT-LINE-CHECK 22:13 02/09/87 )
  259. : LEFT-LINE-CHECK ( X Y --- LX TRUE/ FALSE )
  260. OVER LEFT-LINE U> IF 2DROP 0 EXIT THEN
  261. puck @VELOCITY SWAP NEGATE SWAP puck !VELOCITY
  262. DUP GOAL-TOP U< IF 2DROP LEFT-LINE -1 EXIT THEN
  263. DUP GOAL-BOTTOM U> IF 2DROP LEFT-LINE -1 EXIT THEN
  264. DROP ( X ) GOAL-LEFT > IF 0. puck !VELOCITY
  265. GOAL-LEFT -1 ELSE 0 THEN ;
  266. ( CHECK-PUCK-COLLISION MAF 10:05 04/09/87 )
  267. : CHECK-PUCK-COLLISION
  268. puck @XY DUP TOP-LINE U<
  269. IF DROP TOP-LINE 512 + puck !XY
  270. puck @VELOCITY NEGATE puck !VELOCITY BOUNCE-SND ELSE
  271. DUP BOTTOM-LINE DIAM 256* - U>
  272. IF DROP BOTTOM-LINE DIAM 256* - puck !XY
  273. puck @VELOCITY NEGATE puck
  274. !VELOCITY BOUNCE-SND ELSE 2DUP RIGHT-LINE-CHECK
  275. IF ROT DROP SWAP puck !XY
  276. BOUNCE-SND ELSE 2DUP LEFT-LINE-CHECK
  277. IF ROT DROP SWAP puck !XY
  278. BOUNCE-SND ELSE 2DROP THEN THEN THEN THEN ;
  279. .THEN
  280. ( SOUNDS ENTRANT FROM ASSEMBLY 14:48 05/13/87 )
  281. PROC (PL/EDGE-SND)
  282. L-PL/EDGE # LDA ' START-SO
  283. UND >BODY JSR RTS END-PROC
  284. PROC (BOUNCE-SND)
  285. L-BOUNCE # LDA ' START-SOUND >BODY JSR RTS END-PROC
  286. ( PUCK COLLISION MAF 10:05 04/09/87 )
  287. PROC NEGATE-YVELOCITY 0 # LDY
  288. 0 # LDA SEC OBJECT )Y SBC OBJECT )YSTA IN
  289. Y 0 # LDA OBJECT )Y SBC OBJECT )Y
  290. STA RTS END-PROC
  291. PROC NEGATE-XVELOCITY 2 # LDY
  292. 0 # LDA SEC OBJECT )Y SBC OBJECT )Y STA
  293. INY0 # LDA OBJECT )Y SBC OBJECT )Y STA
  294. RTS END-PROC
  295. CODE (NEGATE-YVELOCITY) NEGATE-YVELOCITY JSR NEXT JMP END-CODE
  296. CODE (NEGATE-XVELOCITY) NEGATE-XVELOCITY JSR NEXT JMP END-CODE
  297. ( PUCK COLLISIONS CONTINUED 11:32 04/08/87 )
  298. -1 .IF
  299. CODE CHECK-PUCK-COLLISION
  300. puck >HI # LDA OBJECT 1+ STA
  301. puck >LO # LDA OBJECTSTA
  302. puck 5 + LDA ( Y ) TOP-LINEH # CMP
  303. CS NOT IF TOP-LINEH # LDA puck 5 + STA
  304. (BOUNCE-SND) JSR NEGATE-YVELOCITY JSR
  305. 0 # LDY OBJECT )Y LDA SEC 1 # SBC OBJECT )Y STA NEXT JMP THEN
  306. BOTTOM-LINEH DIAM - # CMP
  307. CS IF BOTTOM-LINEH DIAM - # LDA puck 5 + STA
  308. (BOUNCE-SND) JSR NEGATE-YVELOCITY JSR
  309. 0 # LDY OBJECT )Y LDA CLC 1 # ADC OBJECT
  310. )Y STA NEXT JMP THEN
  311. ( PUCK COLLISION RIGHT SIDE11:35 04/08/87 )
  312. puck 7 + LDA ( X ) RIGHT-LINEH # CMP
  313. CS IF puck 5 + LDA GOAL-TOPH # CMP ( IN THE GOAL?)
  314. ( NO ) CS NOT IF NEGATE-XVELOCITY JSR
  315. (BOUNCE-SND) JSRRIGHT-LINEH DIAM - DIAM - # LDA
  316. puck 7 + STA NEXT JMP THEN
  317. GOAL-BOTTOMH # CMP CS IF NEGATE-XVELOCITY JSR (BOUNCE-SND) JSR
  318. RIGHT-LINEH DIAM - DIAM - # LDA puck 7 + STA NEXT JMP THEN
  319. ( puck 7 + LDA ( X ) ( GOAL-RIGHTH # CMP )
  320. ( 0< NOT IF ) 0 # LDA puck STA puck 1+ STA puck 2+ STA
  321. puck 3 + STA ( 0 VELOCITY) RIGHT-LINEH DIAM + # LDA
  322. puck 7 + STA ( THEN ) THEN
  323. ( PUCK COLLISION LEFT SIDE MAF 10:09 04/09/87 )
  324. puck 7 + LDA ( X ) LEFT-LINEH # CMP
  325. CS NOT IF puck 5 + LDA GOAL-TOPH # CMP ( IN THE GOAL?)
  326. ( NO ) CS NOT IF NEGATE-XVELOCITY JSR
  327. (BOUNCE-SND) JSRLEFT-LINEH # LDA puck 7 + STA
  328. NEXT JMP THEN GOAL-BOTTOMH # CMP
  329. CS IF NEGATE-XVELOCITY JSR (BOUNCE-SND) JSR
  330. LEFT-LINEH # LDA puck 7 + STA NEXT JMP THEN ( GOAL!)
  331. ( puck 7 + LDA ( X ) ( GOAL-LEFTH # CMP )
  332. ( CS IF ) 0 # LDA puck STA puck 1+ STA puck 2+ STA
  333. puck 3 + STA ( 0 VELOCITY)
  334. GOAL-LEFTH # LDA puck 7 + STA ( THEN ) THEN NEXT JMP END-CODE
  335. .THEN
  336. ( CHECK-PUCK-GOALIE21:36 02/22/87 )
  337. : CHECK-PUCK-GOALIE puck @XY
  338. DUP GOALIE1-Y @ 1+ U> OVER GOALIE1-Y @ GOAL-HEIGHT + U< AND
  339. 2 PICK GOAL1-X U< AND IF 2DROP puck @VELOCITY SWAP NEGATE SWAP
  340. puck !VELOCITY SAVES1 DECIMAL-INC UPDATE-SCORE SAVE-SND
  341. puck @XY SWAP DROP GOAL1-X SWAP puck !XY ELSE
  342. DUP GOALIE2-Y @ 1+ U> SWAP GOALIE2-Y @ GOAL-HEIGHT + U< AND
  343. SWAP GOAL2-X U> AND IF puck @VELOCITY SWAP NEGATE SWAP
  344. puck !VELOCITY SAVES2 DECIMAL-INC UPDATE-SCORE SAVE-SND
  345. puck @XY SWAP DROP GOAL2-X SWAP puck !XY
  346. THEN THEN ;
  347. (11:06 04/09/87 )
  348. ( : V- ROT SWAP - >R - R> ; )
  349. ( : V+ ROT + >R + R> ; )
  350. CODE V+ ( V1 V2 ---- V1+V2 )
  351. CLC TOS LDA NOS 2+ ADC NOS 2+ STA
  352. TOS 1+ LDA NOS 3 + ADC NOS 3 + STA
  353. CLC NOS LDA NOS 4 + ADC NOS 4 + STA
  354. NOS 1+ LDA NOS 5 + ADC NOS 5 + STA
  355. POP2 JMP END-CODE
  356. CODE V- ( V1 V2 ---- V1-V2 )
  357. SEC NOS 2+ LDA TOS SBC NOS 2+ STA
  358. NOS 3 + LDA TOS 1+ SBC NOS 3 + STA
  359. SEC NOS 4 + LDA NOS SBC NOS 4 + STA
  360. NOS 5 + LDA NOS 1+ SBC NOS 5 + STA
  361. POP2 JMP END-CODE
  362. ( NORM-SQ as PROC 11:59 04/09/87 )
  363. ( : NORM-SQ ABS SQUISH SQUARE SWAP ABS SQUISH SQUARE + ; )
  364. PROC (NORM-SQ) TOS 1+ LDA 0< IF ( ABS )
  365. SEC TYA TOS SBC TOS STA TYA TOS 1+ SBC TOS 1+ STA THEN
  366. 6 # LDY ( SQUISH- 7 0 DO 2/ LOOP 2* SQUARE + )
  367. 1$: TOS 1+ LSR TOS ROR DEY 1$ BNE
  368. TOS LDA 254 # AND TOS STA
  369. CLC SQUARE-TABLE >LO # LDA TOS ADC N STA
  370. SQUARE-TABLE >HI # LDA TOS 1+ ADC N 1+ STA
  371. N )Y LDA TOS STA INY N )Y LDA TOS 1+ STA
  372. (14:32 04/09/87 )
  373. NOS 1+
  374. LDA 0< IF SEC 0 # LDY
  375. TYA NOS SBC NOS STA TYA NOS 1+ SBC
  376. NOS 1+ STA THEN 6 # LDY ( SQUISH-1 TO GO TO SQUARE )
  377. 2$: NOS 1+ LSR NOS ROR DEY 2$ BNE
  378. NOS LDA 254 # AND NOS STA
  379. CLC SQUARE-TABLE >LO # LDA NOSADC NSTA
  380. SQUARE-TABLE >HI # LDA NOS 1+ ADC N 1+ STA
  381. CLC N )Y LDA TOS ADC NOS STA
  382. INY N )Y LDA TOS 1+ ADC NOS 1+ STA
  383. INX INX RTS ( POP JMP ) END-PROC
  384. CODE NORM-SQ (NORM-SQ) JSR NEXT JMP END-CODE
  385. ( NORM-SQ2 14:33 04/09/87 )
  386. ( : NORM-SQ2 ABS 256/ SQUARE SWAP ABS 256/ SQUARE + ; )
  387. CODE NORM-SQ2 TOS 1+ LDA 0< IF ( ABS )
  388. SEC TYA TOS SBC TOS STA TYA TOS 1+ SBC TOS 1+ STA THEN
  389. 7 # LDY ( SQUISH- 7 0 DO 2/ LOOP 2* SQUARE + )
  390. 1$: TOS 1+ LSR TOS ROR DEY 1$ BNE
  391. TOS LDA 254 # AND TOS STA CLC SQUARE-TABLE >LO # LDA TOSADC NSTA
  392. SQUARE-TABLE >HI # LDA TOS 1+ ADC N 1+ STA
  393. N )Y LDA TOS STA INY N )Y LDA TOS 1+ STA
  394. ( 14:32 04/09/87 )
  395. NOS 1+ LDA 0< IF SEC 0 #
  396. LDY TYA NOS SBC NOS STA TYA NOS 1+ SBC
  397. NOS 1+ STA THEN
  398. 7 # LDY ( SQUISH-1 TO GO TO SQUARE )
  399. 2$: NOS 1+ LSR NOS ROR DEY 2$ BNE
  400. NOS LDA 254 # AND NOS STA
  401. CLC SQUARE-TABLE >LO # LDA NOSADC NSTA
  402. SQUARE-TABLE >HI # LDA NOS 1+ ADC N 1+ STA
  403. CLC N )Y LDA TOS ADC NOS STA
  404. INY N )Y LDA TOS 1+ ADC NOS 1+ STA
  405. POP JMP END-CODE
  406. ( DECAY1 puck decelleration 15:03 04/09/87 )
  407. ( : DECAY1 DUP 0< SWAP ABS DUP -4 SHIFT - SWAP IF NEGATE THEN ;)
  408. CODE DECAY1 TOS 1+ LDA 0< IF ( ABS ) 255 # LDA N 3 + STA
  409. SEC TYA TOS SBC TOS STA TYA TOS 1+ SBC TOS 1+ STA
  410. ELSE 00 # LDA N 3 + STA THEN
  411. TOS LDA N STA TOS 1+ LDA N 1+ STA
  412. 5 # LDY 1$: N 1+ LSR N ROR DEY 1$ BNE
  413. SEC TOS LDA N SBC TOS STA
  414. TOS 1+ LDA N 1+ SBC TOS 1+ STA
  415. N 3 + LDA 0< IF ( FIX SIGN UP )
  416. SEC TYA TOS SBC TOS STA
  417. TYA TOS 1+ SBC TOS 1+ STA THEN
  418. NEXT JMP END-CODE
  419. ( DECAY2 player decelleration as CODE 15:14 04/09/87 )
  420. ( : XDECAY2 DUP 0< SWAP ABS DUP 5 SHIFT SWAP 2*
  421. - -5 SHIFT SWAP IF NEGATE THEN ; )
  422. CODE DECAY2 (DECAY2) JSR NEXT JMP END-CODE
  423. ( SLOW-DOWN-PUCK DECAY2 11:10 02/09/87 )
  424. : SLOW-DOWN-PUCK puck @VELOCITY 2DUP NORM-SQ 25 >
  425. IF DECAY1 SWAP DECAY1 SWAP
  426. puck !VELOCITY ELSE 2DROP THEN ;
  427. ( DECAY2 player decelleration as PROC 15:14 04/09/87 )
  428. ( : DECAY2 DUP 0< SWAP ABS DUP 5 SHIFT
  429. SWAP 2* - -5 SHIFT SWAP IF NEGATE THEN ; )
  430. PROC (DECAY2) TOS 1+ LDA 0< IF ( ABS ) 255 # LDA N 3 + STA
  431. SEC TYA TOS SBC TOS STA TYA TOS 1
  432. + SBC TOS 1+ STAELSE 00 # LDA N 3 + STA THEN
  433. TOS LDA N STA TOS 1+ LDA N 1+ STA
  434. 4 # LDY 1$: N ASL N 1+ ROL DEY 1$ BNE
  435. TOS ASL TOS 1+ ROL ( 2* )
  436. SEC N LDA TOS SBC TOS STA
  437. N 1+ LDA TOS 1+ SBC TOS 1+ STA
  438. 4 # LDY 2$: TOS 1+ LSR TOS ROR DEY 2$ BNE ( -5 SHIFT )
  439. N 3 + LDA 0< IF ( FIX SIGN UP )
  440. SEC TYA TOS SBC TOS STA
  441. TYA TOS 1+ SBC TOS 1+ STA THEN RTS END-PROC
  442. ( THUMP V256/ rounds it! JJT 09:27 08/27/87 )
  443. ( : SQUISH 7 0 DO 2/ LOOP ; : UNSQUISH 7 SHIFT ; )
  444. : RANDOM-SOUNDS CYCLE# C@ 63 AND 0= IF (RANDOM-SOUND) THEN ;
  445. : (RANDOM-SOUND)SYSTIMER C@ 3 AND CASE
  446. 0 OF BUGLE-SND ENDOF 1 OF HIWOLF-SND ENDOF
  447. 2 OF LOWOLF-SND ENDOF 3 OF UPWHIS-SND ENDOF UPWHIS-SND ENDCASE ;
  448. CODE V256/( N1 N2 --- N1/256 N2/256 modified--rounded)
  449. TOS 1+ LDY TOS LDA 0< IF INY THEN TOS STY
  450. NOS 1+ LDY NOS LDA 0< IF INY THEN NOS STY
  451. 0 # LDA TOS 1+ STA NOS 1+ STA NEXT JMP END-CODE
  452. ( SCALE VSCALE V* RESOLVE forget this!! 09:27 08/27/87 )
  453. 0 .IF
  454. : <IP> ROT * >R * R> + ;
  455. : SCALE ( A B-- A ) 0 DO 2/ LOOP ;
  456. : VSCALE ( A B C-- A B ) ROT ( B C A )
  457. OVER ( B C A C ) SCALE ( B C A ) ROT ( C A B )ROT ( A B C )
  458. SCALE ; ( A B ) : V* ROT OVER * ROT ROT * ;
  459. : RESOLVE ( EXPANDED IN LINE...SEE NEXT SCREEN )
  460. 2OVER ROT * >R * R> +
  461. LOG(FAT) 0 DO 2/ LOOP
  462. ROT OVER * ROT ROT * LOG(FAT)
  463. ROT OVER 0 DO 2/ LOOP
  464. ROT ROT 0 DO 2/ LOOP ;
  465. .THEN
  466. ( resolve 17:15 08/24/87 )
  467. 0 .IF
  468. /| v / | / | / |/|/----->----------------------->
  469. <a,v>a a
  470. : RESOLVE ( a v--<a,v>a) 2OVER <IP> LOG(FAT) SCALE
  471. V* LOG(FAT) VSCALE ;
  472. ( This calculation assumes that the norm or length of )
  473. ( a = ball diameter. Accuracy of the calculation varies )
  474. ( to the degree that this assumption is true. )
  475. .THEN
  476. ( COLLIDE 17:16 08/24/87 )
  477. ( calculate and store new velocities for PLAYER1 AND PLAYER2
  478. when they collide. Assumed they are currently touching )
  479. 0 .IF
  480. : COLLIDE ( -- )
  481. PLAYER1 @VELOCITY PLAYER2 @VELOCITY PLAYER2 @XY PLAYER1 @XY
  482. V- ( vx1 vy1 vx2 vy2 Dx Dy--) 2DUP NEGATE 2
  483. SWAP ( 90-ROT ) >R >R 2SWAP RESOLVE 2SWAP
  484. ( v1 v2 b1 ) R> R> 2SWAP RESOLVE V+
  485. ( <v2,b1>b1 b2 v1 )PLAYER1 @VELOCITY PLAYER2 @VELOCITY V+
  486. 2OVER V- PLAYER1 !VELOCITY PLAYER2 !VELOCITY ;
  487. .THEN
  488. 0 .IF
  489. : COLLIDE PLAYER1 @VELOCITY PLAYER2 @VELOCITY
  490. 2OVER 2/ SWAP 2/ SWAP 2OVER V+ PLAYER2 !VELOCITY
  491. 2/ SWAP 2/ SWAP V+ PLAYER1 !VELOCITY ;
  492. .THEN
  493. ( COLLIDE new improved and simplified--jjt 09:11 08/27/87 )
  494. -1 .IF
  495. : COLLIDE PLAYER1 @VELOCITY 2*
  496. PLAYER2 @VELOCITY 2*
  497. PLAYER1 !VELOCITY
  498. PLAYER2 !VELOCITY ;
  499. .THEN
  500. ( ORIENTATION TABLES RECTANGLES1 18:48 02/08/87 )
  501. L: RECTANGLES1 ( collision detection tables NO puck )
  502. ( ulx uly lrx lry puckx pucky )
  503. 2 C, 0 C, 15 C, 19 C, 15 , 16 , ( ORIENTATION 0 )
  504. 3 C, 2 C, 19 C, 15 C, 19 , 4 , ( 1 )
  505. 3 C, 0 C, 13 C, 18 C, 13 , -2 , ( 2 )
  506. 1 C, 0 C, 9 C, 24 C, 2 , 0 , ( 3 )
  507. 0 C, 0 C, 13 C, 19 C, -2 , 2 , ( 4 )
  508. 0 C, 2 C, 16 C, 15 C, -2 , 11 , ( 5 )
  509. 0 C, 2 C, 12 C, 20 C, 1 , 21 , ( 6 )
  510. 0 C, 2 C, 10 C, 24 C, 8 , 23 , ( 7 )
  511. ( ORIENTATION TABLES RECTANGLES2 18:48 02/08/87 )
  512. L: RECTANGLES2 ( collision detection tables WITH puck )
  513. ( ulx `E10 lrx lry puckx pucky )
  514. 2 C, 0 C, 15 DIAM + C, 19 C, 15 , 16 , ( ORIENTATION 0 )
  515. 3 C, 2 C, 19 C, 15 C, 19 , 4 , ( 1 )
  516. 3 C, 0 DIAM - C, 13 C, 18C, 13 , -2 , ( 2 )
  517. 1 C, 0 C, 9 C, 24 C, 2 , 0 , ( 3 )
  518. 0 DIAM - C, 0 C, 13 C, 19 C, -2 , 2 , ( 4 )
  519. -2 C, 2 C, 16 C, 15 C, -2 , 11 , ( 5 )
  520. 0 C, 2 C, 12 C, 20 DIAM + C, 1 , 21 , ( 6 )
  521. 0 C, 2 C, 10 C, 24 C, 8 , 23 , ( 7 )
  522. ( CALC-RTAB as CODE17:06 04/09/87 )
  523. CODE CALC-RTAB ( PLAYER ---- )
  524. CLC 8 # LDA TOS ADC N STA TYA TOS 1+ ADC N 1+ STA
  525. N )Y LDA N STAN 1+ STY N
  526. ASL N 1+ ROL N ASL N 1+ ROL
  527. N ASL N 1+ ROL
  528. CLC 13 # LDA TOS ADC TOS STA
  529. CS IF TOS 1+ INC THEN
  530. TOS X) LDA 0= IF RECTANGLES1 >LO # LDA RTABSTA
  531. RECTANGLES1 >HI # LDA RTAB 1+ STA
  532. ELSE RECTANGLES2 >LO # LDA RTAB
  533. STA RECTANGLES2 >HI # LDA RTAB 1+ STA
  534. THEN CLC RTAB LDA
  535. N ADC RTAB STA RTAB 1+ LDA N 1+ ADC RTAB 1+
  536. STA POP JMP END-CODE
  537. ( CALC-RTAB px py 19:41 02/08/87 )
  538. 0 .IF
  539. : CALC-RTAB ( PLAYER ---- ) DUP >R @ORIENTATION 2 * 2* 2*
  540. R> @POSSESSION IF RECTANGLES2 ELSE RECTANGLES1 THEN + RTAB !;
  541. : px ( --- px ) RTAB @ 4 + @ 256* ;
  542. : py ( --- py ) RTAB @ 6 + @ 256* ;
  543. .THEN
  544. ( lrx lry 12:21 03/31/87 )
  545. CODE lrx DEX DEX TOS STY 2 # LDY
  546. RTAB )Y LDA TOS 1+ STA NEXT JMP END-CODE
  547. CODE lry DEX DEX TOS STY 3 # LDY
  548. RTAB )Y LDA TOS 1+ STA NEXT JMP END-CODE
  549. CODE px DEX DEX TOS STY 4 # LDY
  550. RTAB )Y LDA TOS 1+ STA NEXT JMP END-CODE
  551. CODE py DEX DEX TOS STY 6 # LDY
  552. RTAB )Y LDA TOS 1+ STA NEXT JMP END-CODE
  553. ( ulx uly 14:48 02/20/87 )
  554. CODE ulx DEX DEX TOS STY
  555. RTAB )Y LDA TOS 1+ STA NEXT JMP END-CODE
  556. CODE uly DEX DEX TOS STY
  557. INY RTAB )Y LDA TOS 1+ STA NEXT JMP END-CODE
  558. CODE !OBJECT puck >HI # LDA OBJECT 1+ STA
  559. puck >LO # LDA OBJECTSTA NEXT JMP END-CODE
  560. ( CHECK-PUCK-PLAYER orig 21:37 02/08/87 )
  561. 0 .IF
  562. : CHECK-PUCK-PLAYER DUP >R @POSSESSION ?DUP
  563. IF 1- ?DUP IF R> !POSSESSION ELSE R> DROP THEN
  564. ELSE PLAYER1 @POSSESSION PLAYER2 @POSSESSION + 2 <
  565. IF R@ @SHOOT-COUNT 0= IF R@ CALC-RTAB puck @XY R@
  566. @XY px py V+ V- NORM-SQ2
  567. PUCK-STICK-THRESHOLD U<
  568. IF R@ @XY px py V+ puck !XY
  569. 0 PLAYER1 !POSSESSION 0 PLAYER2 !POSSESSION
  570. 20 R@!POSSESSION 0. puck !VELOCITY
  571. puck @FLAG 1 OR puck !FLAG PICKUP-SND
  572. THEN THEN THEN R> DROP THEN ;
  573. .THEN
  574. : CHECK-PUCK-PLAYER DUP >R @POSSESSION ?DUP
  575. IF 1- ?DUP IF R> !POSSESSION ELSE R> DROP THEN
  576. ELSE PLAYER1 @POSSESSION PLAYER2 @POSSESSION + 2 <
  577. IF R@ @SHOOT-COUNT 0= IF R@ CALC-RTAB puck @XY R@
  578. @XY px py V+ V- NORM-SQ2 PUCK-STICK-THRESHOLD U<
  579. IF R@ @XY px py V+ puck !XY (RANDOM-SOUND)
  580. 0 PLAYER1 !POSSESSION 0 PLAYER2 !POSSESSION
  581. 10 R@!POSSESSION 0. puck !VELOCITY
  582. puck @FLAG 1 OR puck !FLAG PICKUP-SND
  583. ELSE !OBJECT ( PUCK-PLAYER-THRESHOLD= )
  584. ulx lrx + 2/ uly lry + 2/ R@ @XY
  585. V+ puck @XY V- NORM-SQ2 050 U<
  586. IF BOUNCE-SND (NEGATE-YVELOCITY)
  587. (NEGATE-XVELOCITY) THEN
  588. THEN THEN THEN R> DROP THEN ;
  589. ( MOVE-PUCK 13:31 02/05/87 )
  590. : MOVE-PUCK WHIZ-COUNT C@ 0= IF
  591. puck @FLAG 1 AND IF PLAYER1 @POSSESSION IF PLAYER1 DUP CALC-RTAB
  592. @XY px py V+ puck !XY
  593. ELSE PLAYER2 DUP CALC-RTAB
  594. @XY px py V+ puck !XY THEN
  595. ELSE puck @VELOCITY puck @XY ( DX DY X Y )
  596. V+ OVER [ 200 256 * ] LITERAL U> IF
  597. SWAP DROP 3 SWAP THEN
  598. puck !XY CHECK-PUCK-GOALIE CHECK-PUCK-COLLISION
  599. SLOW-DOWN-PUCK THEN PLAYER1 CHECK-PUCK-PLAYER
  600. PLAYER2 CHECK-PUCK-PLAYER
  601. THEN ;
  602. ( CHECK-PLAYER-PLAYER 10:49 02/11/87 )
  603. -1 .IF
  604. : CHECK-PLAYER-PLAYER PLAYER1 @XY PLAYER2 @XY V- ( DX DY ) NORM-SQ2
  605. PLAYER-PLAYER-THRESHOLD U< IF PL/PLYR-SND COLLIDE THEN ;
  606. .THEN
  607. 0 .IF ( DO NOT USE YET )
  608. : CHECK-PLAYER-PLAYER
  609. PLAYER1 @XY PLAYER2 @XY V- ( DX DY ) NORM-SQ2
  610. PLAYER-PLAYER-THRESHOLD U< IF PL/PLYR-SND
  611. PLAYER1 @VELOCITY PLAYER2 @VELOCITY
  612. PLAYER1 @XY PLAYER2 @XY
  613. ( v1 v2 c1 c2 ) 8 0 DO 7 PICK LOOP
  614. COLLIDE1 COLLIDE2 THEN ;
  615. .THEN
  616. ( PLAYER-COLLISION WITH WALLS 00:29 02/05/87 )
  617. 0 .IF
  618. : CHECK-PLAYER-COLLISION >R R@ @XY DUP
  619. uly + TOP-LINEU< IF DROP TOP-LINE uly - 2DUP
  620. R@ !XY PL/EDGE-SND R@ SLOW-DOWN-PLAYER R@ SLOW-DOWN-PLAYER
  621. R@ @VELOCITY NEGATE R@ !VELOCITY THEN DUP
  622. lry + BOTTOM-LINE U> IF DROP BOTTOM-LINE lry - 2DUP
  623. R@ !XY PL/EDGE-SND R@ SLOW-DOWN-PLAYER R@ SLOW-DOWN-PLAYER
  624. R@ @VELOCITY NEGATE R@ !VELOCITY THEN SWAP DUP
  625. lrx + RIGHT-LINE U> IF DROP RIGHT-LINE lrx - SWAP 2DUP
  626. R@ !XY PL/EDGE-SND R@ SLOW-DOWN-PLAYER R@ SLOW-DOWN-PLAYER
  627. R@ @VELOCITY SWAP NEGATE SWAP R@ !VELOCITY THEN
  628. DUP ulx + LEFT-LINE U< IF DROP LEFT-LINE ulx - SWAP 2DUP
  629. R@ !XY PL/EDGE-SND R@ SLOW-DOWN-PLAYER R@ SLOW-DOWN-PLAYER
  630. R@ @VELOCITY SWAP NEGATE SWAP R@ !VELOCITY THEN
  631. R> DROP 2DROP ;
  632. .THEN
  633. ( CHECK-PLAYER-COLLISION 6502 REMAKE MAF/JDS 1/2 04/13/87 )
  634. CODE CHECK-PLAYER-COLLISION ( PLAYER --- )
  635. TOS LDA OBJECT STA TOS 1+ LDA OBJECT 1+ STA
  636. 5 # LDY OBJECT )Y LDA CLC 1 # LDY RTAB )Y ADC
  637. TOP-LINEH # CMP CS NOTIF SEC TOP-LINEH #
  638. LDA RTAB )Y SBC 5 # LDY OBJECT )Y STA NEGATE-YVELOCITY JSR
  639. (PL/EDGE-SND) JSR THEN 5 # LDY OBJECT )Y LDA CL
  640. C 3 # LDY RTAB )Y ADC BOTTOM-LINEH # CMP CS
  641. IF SEC BOTTOM-LINEH # LDA RTAB )Y SBC 5 # LDY OBJECT )
  642. Y STA NEGATE-YVELOCITY JSR (PL/EDGE-SND) JSR
  643. THEN
  644. ( CHECK-PLAYER-COLLISION 6502 CONT. 2/210:22 04/13/87 )
  645. 7 # LDY OBJECT )Y LDA CLC 2 # LDY RTAB )Y ADC
  646. RIGHT-LINEH # CMP CS
  647. IF SEC RIGHT-LINEH # LDA RTAB )Y SBC 7 # LDY OBJECT )Y STA
  648. NEGATE-XVELOCITY JSR (PL/EDGE-SND) JSR
  649. THEN 7 # LDY OBJECT )Y LDA CLC 0 # LDY RTAB )Y ADC
  650. LEFT-LINEH # CMP CS NOT
  651. IF SEC LEFT-LINEH # LDA RTAB )Y SBC 7 # LDY OBJECT )Y STA
  652. NEGATE-XVELOCITY JSR (PL/EDGE-SND) JSR
  653. THEN POP JMP END-CODE
  654. ( CHECK-PLAYER-GOALIE CODE ... MAF11:57 04/13/87 )
  655. 0 .IF
  656. CODE (CHECK-PLAYER-GOALIE) ( PLAYER---)( misng CALC-RTAB )
  657. TOS LDA OBJECT STA TOS 1+ LDA OBJECT 1+ STA
  658. 7 # LDY CLC OBJECT )Y LDA 0 # LDY RTAB )Y ADC
  659. LEFT-LINEH GOAL-WIDTH + # CMP ( X:LEFTLINE) CS
  660. IF 5 # LDY OBJECT )Y LDA CLC 3 # LDY RTAB )Y ADC ( LY )
  661. GOALIE1-Y 1+ CMP CS NOT IF 5 # LDY OBJECT )Y LDA
  662. CLC 1 # LDY RTAB )Y ADC ( UY )
  663. N STA CLC GOALIE1-Y 1+ LDA GOAL-HEIGHTH # ADC
  664. N CMP CS NOT IF (PL-GO-BOUNCE) JSR THEN
  665. THEN POP JMP THEN
  666. ( CHECK-PLAYER-GOALIE called by hi-level 11:57 04/13/87 )
  667. 7 # LDY CLC OBJECT )Y LDA 2 # LDY RTAB )Y ADC
  668. RIGHT-LINEH GOAL-WIDTH 1+ - # CMP CS NOT
  669. IF 5 # LDY OBJECT )Y LDA CLC 3 # LDY RTAB )Y ADC
  670. GOALIE2-Y 1+ CMP CS NOT IF
  671. 5 # LDY OBJECT )Y LDA CLC 1 # LDY RTAB )Y ADC
  672. N STA CLC GOALIE2-Y 1+ LDA GOAL-HEIGHTH # ADC
  673. N CMP CS NOT IF (PL-GO-BOUNCE) JSR THEN
  674. THEN POP JMP THEN POP JMP END-CODE
  675. : CHECK-PLAYER-GOALIE ( PLAYER -- )
  676. DUP >R CALC-RTAB (CHECK-PLAYER-GOALIE) R> DROP ;
  677. .THEN
  678. : CHECK-PLAYER-GOALIE ( PLAYER )
  679. DUP >R CALC-RTAB R@ @XY DROP
  680. ulx + [ LEFT-LINE GOAL-WIDTH 256 * + ] LITERAL U<
  681. IF GOALIE1-Y @ GOAL-HEIGHT + uly R@ @XY SWAP DROP + U>
  682. GOALIE1-Y @ lry R@ @XY SWAP DROP +
  683. U< AND IF OLD-XY 2@ R@ !XY
  684. R@ @VELOCITY SWAP NEGATE SWAP
  685. NEGATE R@ !VELOCITY THEN ELSE
  686. R@ @XY DROP lrx +
  687. [ RIGHT-LINE GOAL-WIDTH 256 * - ] LITERAL U>
  688. IF uly R@ @XY SWAP DROP + GOALIE2-Y @ GOAL-HEIGHT + U<
  689. lry R@ @XY SWAP DROP + GOALIE2-Y @ U> AND IF OLD-XY 2@ R@ !XY
  690. R@ @VELOCITY SWAP NEGATE SWAP NEGATE R@ !VELOCITY THEN
  691. THEN THEN R> DROP ;
  692. ( CHECK-PLAYER-GOALIE in hi_levelMAF 11:57 04/13/87 )
  693. 0 .IF
  694. PROC (PL-GO-BOUNCE) OLD-XY 1+ LDA 5 # LDY OBJECT )Y STA
  695. OLD-XY 3 + LDA 7 # LDY OBJECT )Y STA
  696. NEGATE-XVELOCITY JSR RTS END-PROC
  697. CODE PL-GO-BOUNCE (PL-GO-BOUNCE) JSR NEXT JMP END-CODE
  698. : CHECK-PLAYER-GOALIE ( PLAYER ) DUP >R CALC-RTAB
  699. R@ @XY DROP ulx + [ LEFT-LINE GOAL-WIDTH 256 * + ] LITERAL U<
  700. IF GOALIE1-Y @ GOAL-HEIGHT + uly R@ @XY SWAP DROP + U>
  701. GOALIE1-Y @ lry R@ @XY SWAP DROP + U<
  702. AND IF PL-GO-BOUNCE THEN
  703. ( CHECK-PLAYER-GOALIE in 4TH MAF 11:57 04/13/87 )
  704. ELSE R@ @XY DROP lrx +
  705. [ RIGHT-LINE GOAL-WIDTH 256 * - ] LITERAL U>
  706. IF uly R@ @XY SWAP DROP + GOALIE2-Y @ GOAL-HEIGHT + U<
  707. lry R@ @XY SWAP DROP + GOALIE2-Y @
  708. U> AND IF PL-GO-BOUNCE THEN
  709. THEN THEN R> DROP ;
  710. .THEN
  711. ( SLOW-DOWN-PLAYER as PROC MAF14:01 07/14/87 )
  712. 0 .IF
  713. CODE (SLOW-DOWN-PLAYER) ( PLAYER -- )
  714. TOSLDA OBJECTSTA( PLAYER to OBJECT )
  715. TOS 1+ LDA OBJECT 1+ STA
  716. DEX DEX OBJECT )Y LDA TOS STA ( @VELOCITY )
  717. INY OBJECT )Y LDA TOS 1+ STA
  718. INY OBJECT )Y LDA TOS 2+ STA
  719. INY OBJECT )Y LDA TOS 3 + STA
  720. (DECAY2) JSR INX INX (DECAY2) JSR DEX DEX
  721. ( decayed velocity ) 0 # LDY TOS LDA OBJECT )Y STA
  722. ( !VELOCITY ) INY TOS 1+ LDA OBJECT )Y STA
  723. INY TOS 2+ LDA OBJECT )Y STA INY TOS 3 + LDA OBJECT )Y STA
  724. (NORM-SQ) JSR
  725. ( SLOW-DOWN-PLAYER as COLON 00:27 02/05/87 )
  726. TOS LDA TOS 1+ ORA
  727. 0= IF 0 # LDY OBJECT )Y STA
  728. INY OBJECT )Y STA
  729. INY OBJECT )Y STA
  730. INY OBJECT )Y STA THEN
  731. INX INX NEXT JMP END-CODE
  732. .THEN
  733. : SLOW-DOWN-PLAYER ( PLAYER --- )
  734. DUP @VELOCITY
  735. DECAY2SWAPDECAY2SWAP
  736. ( 2DUP NORM-SQ 0= IF 2DROP 0. THEN)
  737. ROT !VELOCITY ;
  738. ( NEAREST VELOCITY-TABLE 15:45 02/06/87 )
  739. : NEAREST ( START POS GOAL POS ---- NEXT ANGLE )
  740. ( Calculates the nearest way to get to a position )
  741. 2DUP = IF DROP ELSE
  742. 2DUP - 5 > ( COUNTERCLOCKWISE ) IF DROP 2+ ELSE( 1 ) 2DUP - 3 >
  743. ( COUNTERCLOCKWISE ) IF DROP 1+ ELSE
  744. 2DUP - -5 < ( CLOCKWISE )
  745. IF DROP 2- ELSE( 1 )
  746. 2DUP - -3 < ( CLOCKWISE )
  747. IF DROP 1- ELSE
  748. 2DUP > ( TOO FAR ) IF DROP 1- ELSE
  749. DROP 1+ THEN THEN THEN THEN THEN THEN 7 AND ;
  750. L: VELOCITY-TABLE ( Y X PER DIRECTION )
  751. 0 , 330 , -290 , 290 , -420 ,0 ,
  752. ( 0 1 2 ) -290 , -290 , 0 , -330 ,290 , -290 ,
  753. ( 3 4 5 ) 420 ,0 ,290 , 290
  754. , 0 ,0 , ( 6 7 8 ) ( was 320 400 640 )
  755. ( 09:42 08/27/87 )
  756. L: SHOOT-TABLE ( shoot orientation, idx'd by count)
  757. -1 , 1 , 1 , -1 ,
  758. ( : ZOOM 2* DUP 2* + ; ( velocity multiplier for shooting )
  759. : ZOOM 2* 2* 2* ;
  760. ( SHOOT SEQUENCE 09:36 02/09/87 )
  761. : SHOOT-SEQUENCE ( PLAYER --- )
  762. ( DUP ) >R ( @SHOOT-COUNT 1 AND 0= IF )
  763. R@ @SHOOT-COUNT 1- 2* SHOOT-TABLE + @
  764. R@ @ORIENTATION + 7 AND R@ !ORIENTATION
  765. R@ @SHOOT-COUNT 3 = R@ @POSSESSION AND
  766. IF ( KICK puck IN ASS ) ( player shoot-count --- )
  767. WHACK-SND 0 R@ !POSSESSION ( CLEAR PLAYER FLAG )
  768. R@ @ORIENTATION 2* 2* VELOCITY-TABLE + 2@
  769. ZOOM SWAP ZOOM SWAP ( R@ @VELOCITY V+ ) puck !VELOCITY
  770. puck @FLAG 254 AND puck !FLAG THEN ( THEN )
  771. R@ @SHOOT-COUNT 1- R> !SHOOT-COUNT ;
  772. ( APPLY-JOYSTICK MOVE-PLAYER 00:46 02/05/87 )
  773. ( 32) 2700 EQU PLAYER-SPEED-LIMIT-Y
  774. ( 16) 2000 EQU PLAYER-SPEED-LIMIT-X
  775. -2700 EQU -PLAYER-SPEED-LIMIT-Y
  776. -2000 EQU -PLAYER-SPEED-LIMIT-X
  777. : APPLY-JOYSTICK ( DIRECTION PLAYER ---- )
  778. >R 2* 2* VELOCITY-TABLE + 2@ R@ @VELOCITY D+
  779. DUP 0< IF -PLAYER-SPEED-LIMIT-Y MAX
  780. ELSE PLAYER-SPEED-LIMIT-Y MIN THEN
  781. SWAP DUP 0< IF -PLAYER-SPEED-LIMIT-X MAX
  782. ELSE PLAYER-SPEED-LIMIT-X MIN THEN
  783. SWAP R> !VELOCITY ;
  784. (12:47 08/29/87 )
  785. : MOVE-PLAYER ( PLAYER ---- )
  786. DUP >R @VELOCITY R@ @XY ( DX DY X Y ) 2DUP OLD-XY 2!
  787. V+ OVER [ 200 256 * ] LITERAL U> IF SWAP DROP 3 SWAP THEN
  788. R@ !XY R@ CALC-RTAB R@ CHECK-PLAYER-COLLISION
  789. R@ CHECK-PLAYER-GOALIE
  790. R> SLOW-DOWN-PLAYER ;
  791. ( READ-JOY1 JDS OPTIMIZED INLINE FORTH 17:04 03/24/87 )
  792. : READ-JOY1 ( --- ORIENTATION ) PLAYER1 @FLAG 2 AND
  793. IF [ PLAYER1 10 + ] LITERAL ( TIMER ) C@ 0=
  794. IF SKILL C@ SCORE2 @ SCORE1 @ - - 0 MAX 2 ( 32) MIN
  795. [ PLAYER1 10 + ] LITERAL C! [ PLAYER1 13 + ] LITERAL C@IF
  796. [ PLAYER1 4 + ] LITERAL 2@ ( XY) OVER 256/ 120 >
  797. IF 2DROP SHOOTFLAG1 ON 8 ELSE 156 111 2SWAP V256/ ANGLE 4 - 7 AND THEN
  798. ELSE [ PLAYER1 4 + ] LITERAL 2@ V256/
  799. [ puck 4 + ] LITERAL 2@ V256/ ANGLE THENELSE [ PLAYER1 10 + ]
  800. LITERAL C@ 1-[ PLAYER1 10 + ] LITERAL C!
  801. OLDJOY1 C@ THEN ELSE FB0 C@ IF SHOOTFLAG1 ON THEN
  802. ?BLUE-ACTION THEN DUP OLDJOY1 C! ;
  803. ( READ-JOY2 JDS OPTIMIZED INLINE FORTH17:04 03/24/87 )
  804. : READ-JOY2 ( --- ORIENTATION )
  805. PLAYER2 @FLAG 2 ANDIF [ PLAYER2 10 + ] LITERAL ( TIMER )
  806. C@ 0= IF SKILL C@ SCORE1 @ SCORE2 @ - - 0 MAX
  807. 2 ( 32) MIN[ PLAYER2 10 + ] LITERAL C! [ PLAYER2 13 + ]
  808. LITERAL C@IF [ PLAYER2 4 + ] LITERAL 2@ ( XY)
  809. OVER 256/ 35 < IF 2DROP SHOOTFLAG2 ON 8
  810. ( SHOOT PUCK ) ELSE 05 111 2SWAP V256/ ANGLE 4 - 7 AND THEN
  811. ELSE [ PLAYER2 4 + ] LITERAL 2@ V256/ [ puck 4 + ]
  812. LITERAL 2@ V256/ ANGLE THENELSE [ PLAYER2 10 + ]
  813. LITERAL C@ 1-[ PLAYER2 10 + ] LITERAL C! OLDJOY2 C@ THEN
  814. ELSE FB1 C@ IF SHOOTFLAG2 ON THEN ?REDD-ACTION
  815. THEN DUP OLDJOY2 C! ;
  816. ( UPDATE SCORE JDS 1/2 11:37 03/24/87 )
  817. HEX CODE (UPDATE-SCORE) SCORE1 LDA PHA 0F # AND CLC 48 # ADC
  818. NUM1-N STA 83 # LDA NUM1-A STAPLA A LSR A LSR A LSR A LSR CLC
  819. 48 # ADC NUM0-N STA 82 # LDA NUM0-A STA SCORE2 LDA PHA 0F #
  820. AND CLC 48 # ADC NUM3-N STA 85 # LDA NUM3-A STAPLA A LSR A LSR A
  821. LSR A LSR CLC 48 # ADC NUM2-N STA 84 # LDA NUM2-A STA SAVES1
  822. LDA PHA 0F # AND CLC 3E # ADC NUM8-N STA 8A # LDA NUM8-A STA
  823. PLA A LSR A LSR A LSR A LSR CLC 3E # ADC NUM7-N STA 89 #
  824. LDA NUM7-A STA
  825. ( UPDATE SCORE JDS 2/2 11:37 03/24/87 )
  826. SAVES2 LDA PHA 0F # AND CLC 3E # ADC
  827. NUMA-N STA 8C # LDA NUMA-A STAPLA A LSR A LS
  828. R A LSR A LSR CLC 3E # ADCNUM9-N STA 8B # LDA
  829. NUM9-A STADEX DL-TABLE-START >HI #LDA TOS STA
  830. DEX DL-TABLE-START >LO #LDA TOS STADEX PLAYERS-ITAB
  831. >HI #LDA TOS STADEX PLAYERS-ITAB >LO #LDA TOS STADEX NUMBERS-ETAB
  832. >HI #LDA TOS STADEX NUMBERS-ETAB >LO #LDA TOS STA
  833. BEGIN MSTAT BIT 0< UNTIL ( THEN WAIT FOR VBLANK )'
  834. (NEW-GRAPHICS) >BODY JMP ( N N N--) END-CODE
  835. CODE UPDATE-SCORE ' (UPDATE-SCORE) >BODY JSR NEXT JMP END-CODE
  836. DECIMAL
  837. ( WHIZZING LIGHTS 1/3 11:15 03/25/87 )
  838. HEX CODE (WHIZ)WHIZ-COUNT LDA 0= IF RTS THEN 0<
  839. IF WHIZ-COUNT INC WHIZ-COUNT 1+ LDA0=
  840. IF R-TWIRLB # LDA RUT-I STA
  841. RLT-I STAWHIZ-COUNT 1+ INC
  842. ELSE 1 # CMP 0= IF R-TWIRLD # LDA RUT-I STA RLT-I STA
  843. WHIZ-COUNT 1+ INC
  844. ELSE 2 # CMP 0=
  845. IF R-TWIRLC # LDA RUT-I STA RLT-I STAWHIZ-COUNT 1+ INC
  846. ELSE WHIZ-COUNT 1+ STY R-TWIRLA # LDA RUT-I STA RLT-I STA
  847. THEN THEN THEN 89 # LDA RUT-A STA RLT-A STA
  848. ( WHIZZING LIGHTS 2/3 12:04 03/25/87 )
  849. ELSE WHIZ-COUNT DEC WHIZ-COUNT 1+ LDA 0=
  850. IF B-TWIRLB # LDA BUT-I STA BLT-I STAWHIZ-COUNT 1+ INC
  851. ELSE 1 # CMP 0= IF B-TWIRLD # LDA
  852. BUT-I STA BLT-I STAWHIZ-COUNT 1+ INC ELSE
  853. 2 # CMP 0= IF B-TWIRLC # LDA BUT-I STA BLT-I STAWHIZ-COUNT 1+ INC
  854. ELSE WHIZ-COUNT 1+ STY B-TWIRLA # LDA BUT-I STA BLT-I STA
  855. THEN THEN THEN 88 # LDA
  856. BUT-A STA BLT-A STA THEN FF # LDA NETPLUG STA
  857. ( WHIZZING LIGHTS 3/3 11:15 03/25/87 )
  858. WHIZ-COUNT LDA 0= IF WHIZ-COUNT 1+ STY WHIZ-DONE
  859. DEC THEN DEX DL-TABLE-START >HI #LDA TOS STA
  860. DEX DL-TABLE-START >LO #LDA TOS STA
  861. DEX PLAYERS-ITAB >HI #LDA TOS STADEX PLAYERS-ITAB
  862. >LO #LDA TOS STADEX NETGOAL-ETAB >HI #
  863. LDA TOS STADEX NETGOAL-ETAB
  864. >LO #LDA TOS STABEGIN MSTAT BIT 0< UNTIL ( THEN WAIT FOR VBLANK )
  865. ' (NEW-GRAPHICS) >BODY JMP
  866. ( N N N--) END-CODE
  867. CODE WHIZ ' (WHIZ) >BODY
  868. JSR NEXT JMP END-CODE
  869. DECIMAL
  870. ( TWIRLS - WHIZZING DURING ZAMBONI 1/2 11:24 04/14/87 )
  871. HEX CODE (TWIRL)WHIZ-COUNT 1+ LDA 0=
  872. IF B-TWIRLB # LDA BUT-I STA BLT-I STA
  873. R-TWIRLB # LDA RUT-I STA RLT-I STAWHIZ-COUNT 1+ INC
  874. ELSE 1 # CMP 0= IF B-TWIRLD # LDA BUT-I STA BLT-I
  875. STAR-TWIRLD # LDA RUT-I STA
  876. RLT-I STAWHIZ-COUNT 1+ INC
  877. ELSE 2 # CMP 0= IF B-TWIRLC # LDA
  878. BUT-I STA BLT-I STAR-TWIRLC # LDA
  879. RUT-I STA RLT-I STA WHIZ-COUNT 1+ INC
  880. ELSE WHIZ-COUNT 1+ STY B-TWIRLA # LDA
  881. BUT-I STA BLT-I STAR-TWIRLA # LDA RUT-I STA RLT-I STA
  882. THEN THEN THEN
  883. 88 # LDA BUT-A STA BLT-A STA89 # LDA
  884. RUT-A STA RLT-A STA FF # LDA NETPLUG STA
  885. ( TWIRLS - WHIZZING DURING ZAMBONI 2/2 11:24 04/14/87 )
  886. DEX DL-TABLE-START
  887. >HI #LDA TOS STA
  888. DEX DL-TABLE-START
  889. >LO #LDA TOS STA
  890. DEX PLAYERS-ITAB
  891. >HI #LDA TOS STADEX PLAYERS-ITAB
  892. >LO #LDA TOS STADEX NETGOAL-ETAB >HI #LDA TOS STADEX NETGOAL-ETAB
  893. >LO #LDA TOS STABEGIN MSTAT BIT 0< UNTIL
  894. ( THEN WAIT FOR VBLANK )
  895. ' (NEW-GRAPHICS) >BODY JMP ( N N N--) END-CODE
  896. CODE TWIRL ' (TWIRL) >BODY JSR NEXT JMP END-CODE
  897. DECIMAL DECIMAL
  898. ( CHECK-FOR-GOAL 23:12 02/09/87 )
  899. : CHECK-FOR-GOAL
  900. puck @XY DUP GOAL-TOP U> IF GOAL-BOTTOM U<
  901. IF DUP RIGHT-LINE U> IF DROP -40 WHIZ-COUNT C!
  902. SCORE1 DECIMAL-INC GOAL-SND ELSE LEFT-LINE U< IF
  903. 40 WHIZ-COUNT C! SCORE2 DECIMAL-INC GOAL-SND
  904. THEN THEN
  905. WHIZ-COUNT C@
  906. IF puck @FLAG 254 AND puck !FLAG0 PLAYER1 !POSSESSION
  907. 0 PLAYER2 !POSSESSION UPDATE-SCORE WHIZ THEN
  908. ELSE DROP ( X---)THEN ELSE 2DROP ( X/Y) THEN ;
  909. ( SERVEfixed per memo. jjt 09:43 08/27/87 )
  910. : SERVE 0 puck!
  911. FLAG 0 PLAYER1 !SHOOT-COUNT 0 PLAYER2
  912. !SHOOT-COUNT
  913. 0 PLAYER1 !ORIENTATION 4 PLAYER2 !ORIENTATION
  914. 0 PLAYER1 !POSSESSION 0 PLAYER2 !POSSESSION
  915. 0 PLAYER1 !TIMER 0 PLAYER
  916. 2 !TIMER0 0 PLAYER1 !VELOCITY 57 256* 104 256*
  917. PLAYER1 !XY0 0 PLAYER2 !VELOCITY 86 256* 102
  918. 256* PLAYER2 !XY
  919. 8 OLDJOY1 C! 8 OLDJOY2 C! 0 SHOOTFLAG1 !
  920. 0 SHOOTFLAG2 ![ RIGHT-LINE LEFT-LINE - -1
  921. SHIFT 384 - LEFT-LINE + ] LITERAL
  922. [ 200 256 * ] LITERAL 0 puck
  923. !XY INIT-SOUND ANIMATOR 9000 0
  924. DO LOOP SERVE-SNDSYSTIMER C@ 4 AND 0=
  925. IF TOP-LINE 512 - puck !XY 0 2048
  926. ELSE BOTTOM-LINE 512 + puck !XY 0 -2048
  927. THEN puck !VELOCITY ANIMATOR ;
  928. ( PLAYER1-PROCESS00:38 02/05/87 )
  929. : PLAYER1-PROCESS
  930. SHOOTFLAG1 C@ IF 4 PLAYER1 !SHOOT-COUNT
  931. SHOOTFLAG1 OFF THEN
  932. PLAYER1 @SHOOT-COUNT
  933. IF PLAYER1 SHOOT-SEQUENCE
  934. ELSE READ-JOY1 DUP 8 = IF
  935. 150 111 PLAYER1 @XY( 156 )V256/ ANGLE 4 - 7 AND
  936. ELSE DUP THEN PLAYER1 @ORIENTATION SWAP NEAREST
  937. PLAYER1 !ORIENTATION PLAYER1 APPLY-JOYSTICK
  938. THEN PLAYER1 MOVE-PLAYER ;
  939. ( PLAYER2-PROCESS10:43 02/11/87 )
  940. : PLAYER2-PROCESS
  941. SHOOTFLAG2 C@ IF 4 PLAYER2 !SHOOT-COUNT SHOOTFLAG2 OFF
  942. THEN PLAYER2 @SHOOT-COUNT IF PLAYER2 SHOOT-SEQUENCE
  943. ELSE READ-JOY2 DUP 8 = IF05 111 PLAYER2 @XY V256/
  944. ANGLE 4 - 7 AND ELSE DUP THEN
  945. PLAYER2 @ORIENTATION SWAP NEAREST PLAYER2
  946. !ORIENTATION PLAYER2 APPLY-JOYSTICK
  947. THEN PLAYER2 MOVE-PLAYER ;
  948. ( UMIN UMAX DRAW-GOALIE1 DRAW-GOALIE216:39 02/22/87 )
  949. : UMIN 2DUP U>
  950. IF SWAP THEN DROP ;
  951. : UMAX 2DUP U< IF SWAP THEN DROP ;
  952. CODE DRAW-GOALIE1 TOS 1+
  953. LDA BLUE-GOALY-Y STA INX INX N
  954. EXT JMP END-CODECODE DRAW-GOALIE2 TOS 1+
  955. LDA REDD-GOALY-Y STA INX INX NEXT JMP END-CODE
  956. ( GOALIEN-PROCESS15:51 02/22/87 )
  957. L: GOALIE-MOVES ( JOYSTICK -> Y CHANGE )
  958. 0 , -2048 , -2048 , -2048 , 0 , 2048 , 2048 , 2048 , 0 ,
  959. : GOALIE1-PROCESS
  960. GOALIE1-Y @ OLDJOY1 C@ 2*
  961. GOALIE-MOVES + @ + GOAL-TOP UMAX
  962. [ GOAL-BOTTOM GOAL-HEIGHT - ] LITERAL UMIN
  963. DUP GOALIE1-Y !( GOAL1-X SWAP V256/) ( ---Y256*)
  964. DRAW-GOALIE1 ; : GOALIE2-PROCESS
  965. GOALIE2-Y @ OLDJOY2 C@ 2* GOALIE-MOVES + @ +
  966. GOAL-TOP UMAX [ GOAL-BOTTOM GOAL-HEIGHT - ]
  967. LITERAL UMIN DUP GOALIE2-Y !
  968. ( GOAL2-X SWAP V256/ ) ( ---Y256*)
  969. DRAW-GOALIE2 ;
  970. ( LIGHTEN-ICE DARKEN-ICE 13:26 04/09/87 )
  971. CODE (LIGHTEN-ICE) BG-TOP-ICE LDY INY BG-TOP-ICE STY RTS
  972. END-CODE
  973. CODE LIGHTEN-ICE ' (LIGHTEN-ICE) >BODY JSR
  974. NEXT JMP END-CODECODE (DARKEN-ICE) BG-TOP-ICE
  975. LDY DEY BG-TOP-ICE STY RTS
  976. END-CODE
  977. CODE DARKEN-ICE ' (DARKEN-ICE) >BODY JSR NEXT JMP END-CODE
  978. HEX
  979. ( TIMER-INIT UPDATE-TIMER SUBROUTINE 1/2 09:04 04/07/87 )
  980. CODE TIMER-INIT TIMER STY SECONDS STY SAVES1 STY
  981. SAVES2 STY SCORE1 STY SCORE2 STY BONUS STY 2 #
  982. LDY MINUTES STY (INIT-TIMER) JSR NEXT JMP END-CODE
  983. CODE BONUS-INIT TIMER STY MINUTES STY 20 # LDY
  984. SECONDS STY BONUS STY (INIT-TIMER) JSR NEXT JMP
  985. END-CODE
  986. CODE DEMO-TIMER TIMER STY
  987. MINUTES STY SAVES1 STY SAVES2 STY SCORE1 STY
  988. SCORE2 STY BONUS STY 20 # LDY SECONDS STY NEXT JMP END-CODE
  989. CODE (UPDATE-TIMER) TIMER LDA 3C # CMP CS
  990. IF SECONDS LDA SED SEC 1 # SBC CLD
  991. SECONDS STA TIMER STY THEN SECONDS LDA 0<
  992. IF MINUTES LDA SED SEC 1 # SBC CLD
  993. MINUTES STA 59 # LDA SECONDS STA
  994. MINUTES LDA 1 # CMP 0= NOT
  995. IF' (LIGHTEN-ICE) >BODY JSR THEN THEN
  996. ( UPDATE-TIMER SUBROUTINE CONT. 2/2 10:15 04/06/87 )
  997. L: (INIT-TIMER)SECONDS LDA PHA 0F # AND CLC 48 # ADC
  998. NUM6-N STA 88 # LDA NUM6-A STA
  999. PLA A LSR A LSR A LSR A LSR CLC 48 #
  1000. ADCNUM5-N STA 87 # LDA
  1001. NUM5-A STAMINUTES LDA CLC 48 #
  1002. ADCNUM4-N STA 86 # LDA NUM4-A STA
  1003. DEX DL-TABLE-START >HI #LDA TOS STA
  1004. DEX DL-TABLE-START >LO #LDA TOS STA
  1005. DEX PLAYERS-ITAB >HI #LDA TOS STA
  1006. DEX PLAYERS-ITAB >LO #LDA TOS STA
  1007. DEX NUMBERS-ETAB >HI #LDA TOS STA
  1008. DEX NUMBERS-ETAB >LO #LDA TOS STA
  1009. BEGIN MSTAT BIT 0< UNTIL ( THEN WAIT FOR VBLANK )
  1010. ' (NEW-GRAPHICS) >BODY JMP
  1011. ( N N N--) END-CODE
  1012. ( UPDATE-TIMER MIN-SEC-CHECK09:03 04/07/87 )
  1013. CODE UPDATE-TIMER' (UPDATE-TIMER) >BODY JSR NEXT JMP END-CODE
  1014. CODE MIN-SEC-CHECK DEX TOS STY DEX TOS STY
  1015. MINUTES LDA 0= IF SECONDS LDA 0=
  1016. IF DEY TOS STY THEN THEN NEXT JMP END-CODE
  1017. CODE OVERTIME-SIGN-ONBEGIN MSTA
  1018. T BIT 0< UNTIL ( THEN WAIT FOR VBLANK )
  1019. OVERT# LDA BLUE-IMAGE# STA3E # LDA BLUE-X STA
  1020. B8 # LDA BLUE-Y STA8A # LDA BLUE-ALTER STA'
  1021. (PLAYER-FRAME-DISPLAY)
  1022. >BODY JSR NEXT JMP END-CODE
  1023. ( GAMEOVER-SIGN-ON 14:50 04/08/87 )
  1024. CODE GAMEOVER-SIGN-ONBEGIN MSTAT BIT 0< UNTIL
  1025. ( THEN WAIT FOR VBLANK )GOVER
  1026. # LDA BLUE-IMAGE# STA3E # LDA BLUE-X STAB8 # LDA BLUE-Y STA
  1027. 8A # LDA BLUE-ALTER STA'
  1028. (PLAYER-FRAME-DISPLAY) >BODY JSR NEXT JMP END-CODE
  1029. CODE GAMEOVER-SIGN-OFFBEGIN MSTAT BIT 0< UNTIL
  1030. ( THEN WAIT FOR VBLANK )PUCK # LDA BLUE-IMAGE# STA
  1031. AA # LDA BLUE-X STAB8 # LDA BLUE-Y STA8A
  1032. # LDA BLUE-ALTER STA'
  1033. (PLAYER-FRAME-DISPLAY) >BODY JSR NEXT JMP END-CODE
  1034. ( ZAMBONI-MOVE 1/2 INCLUDES DIRECT-RTN 15:55 04/07/87 )
  1035. CODE ZAMBONI-MOVE ( FELLA-IMAGE#/DX/DY --- ) '
  1036. (TWIRL) >BODY JSR BEGIN MSTAT BIT 0< UNTIL
  1037. ( THEN WAIT FOR VBLANK ) 0 # LDY DEX DEX 0A # LDA TOS
  1038. STA TOS 1+ STY DEX DEX 03 # LDA TOS STA
  1039. TOS 1+ STY DEX DEX 14 # LDA TOS STA TOS 1+ STY
  1040. ' (DIRECT-ERASE) >BODY JSR 0 # LDY
  1041. DEX DEX 0B # LDA TOS STA TOS 1+ STY
  1042. DEX DEX 03 # LDA TO
  1043. S STA TOS 1+ STY DEX DEX
  1044. 15 # LDA TOS STA TOS 1+ STY '
  1045. (DIRECT-ERASE) >BODY JSR
  1046. ( ZAMBONI-MOVE 2/3 11:34 04/07/87 )
  1047. BLUE-IMAGE# LDA 1 # EOR BLUE-IMAGE# STA
  1048. BLUE-X LDA CLC NOS ADC BLUE-X STA
  1049. BLUE-Y LDA CLC TOS ADC BLU
  1050. E-Y STA 8A # LDA BLUE-ALTER
  1051. STA NOS 2+ LDA REDD-IMAGE# STA
  1052. REDD-X LDA CLC NOS ADC REDD-X
  1053. STA REDD-Y LDA CLC TOS ADC REDD-Y
  1054. STA 8B # LDA REDD-ALTER STA
  1055. ' (PLAYER-FRAME-DISPLAY) >BODY JSR
  1056. ' (TWIRL) >BODY JSR
  1057. INX INX INX INX INX INX NEXT JMP END-CODE
  1058. ( ICE>LEFT 11:34 04/07/87 )
  1059. CODE ZL ( ICE>LEFT) BLUE-X LDA BLUE-GO
  1060. ALY-X STA REDD-GOALY-X STA PUCK-X STA
  1061. BLUE-Y LDA BLUE-GOALY-Y STA CLC 8 # ADC
  1062. REDD-GOALY-Y STA CLC 8 # ADC PUCK-Y STA
  1063. BLUE-X LDA 1A # CMP CS IF 80 # LDA
  1064. LONG-ICE # LDY ELSE 81 # LDA
  1065. SHORT-ICE # LDY THENBLUE-GOALY-ALTER
  1066. STA REDD-GOALY-ALTER STA PUCK-ALTER STA
  1067. BLUE-GOALY-IMAGE# STY REDD-GOALY-IMAGE#
  1068. STY PUCK-IMAGE# STY'
  1069. (PLAYER-FRAME-DISPLAY)
  1070. >BODY JSR NEXT JMP END
  1071. -CODE
  1072. ( ICE>RIGHT 11:34 04/07/87 )
  1073. CODE ZR ( ICE>R
  1074. IGHT) BLUE-Y LDA BLUE-GOALY-Y STA
  1075. CLC 8 # ADC REDD-GOALY-Y STA CLC 8 # ADC PUC
  1076. K-Y STABLUE-X LDA 7F # CMP CS
  1077. NOTIF 80 # LDA LONG-ICE # LDY
  1078. BLUE-GOALY-ALTER STAREDD-GOALY
  1079. -ALTER STA PUCK-ALTER STA BLUE-GOALY-IMAGE
  1080. # STY REDD-GOALY-IMAGE# STY PUCK-IMAGE
  1081. # STY BLUE-X LDA SEC 74 # SBC BLUE-GOALY-X
  1082. STA REDD-GOALY-X STA PUCK-X
  1083. STA ELSE 81 # LDA SHORT-ICE # LDY
  1084. BLUE-GOALY-ALTER STA
  1085. REDD-GOALY-ALTER STA PUCK-ALTER STA
  1086. BLUE-GOALY-IMAGE# STY REDD-GOA
  1087. LY-IMAGE# STY PUCK-IMAGE# STY ( 83)
  1088. BLUE-X LDASEC 8 # SBC BLUE-GOALY-X STA
  1089. REDD-GOALY-X STA PUCK-X STA
  1090. THEN ' (PLAYER-FRAME-DISPLAY)
  1091. >BODY JSR NEXT JMP END-CODE
  1092. ( SETUP-NET-ICE-RIGHT 14:11 05/12/87 )
  1093. CODE SNIR ( SETUP-NET-ICE-RIGHT)
  1094. BG-TOP-ICE LDA P6C1 STA P6C2
  1095. STA P6C3 STA ( PAL 6)98 # LDA
  1096. BLUE-GOALY-X STA REDD-GOALY-X
  1097. STA PUCK-X STA 70 # LDA BLUE-GOALY-Y
  1098. STA CLC 8 # ADC REDD-GOALY-Y STA
  1099. CLC 8 # ADC PUCK-Y STA 81 # LDA
  1100. BLUE-GOALY-ALTER STA REDD-GOALY-ALTER STA
  1101. PUCK-ALTER STA NET-ICE # LDA BLUE-GOALY-IMAGE#
  1102. STA REDD-GOALY-IMAGE# STA PUCK-IMAGE# STA
  1103. ' (PLAYER-FRAME-DISPLAY) >BODY JSR NEXT JMP END-CODE
  1104. ( SETUP-NET-ICE-LEFT 14:11 05/12/87 )
  1105. CODE SNIL ( SETUP-NET-ICE-LEFT)
  1106. BG-TOP-ICE LDA P6C1 STA P6C2 STA P6C3
  1107. STA ( PAL 6)FC # LDA BLUE-GOALY-X STA
  1108. REDD-GOALY-X STA PUCK-X STA
  1109. 58 # LDA BLUE-GOALY-Y STA CLC 8 # ADC
  1110. REDD-GOALY-Y STACLC 8 # ADC PUCK-Y
  1111. STA 81 # LDA BLUE-GOALY-ALTER STA
  1112. REDD-GOALY-ALTER STAPUCK-ALTER STA
  1113. NET-ICE # LDA BLUE-GOALY-IMAGE# STA
  1114. REDD-GOALY-IMAGE# STA
  1115. PUCK-IMAGE# STA
  1116. ' (PLAYER-FRAME-DISPLAY) >BODY JSR NEXT JMP END-CODE
  1117. ( ZAMBONI-INIT 11:36 04/07/87 )
  1118. CODE ZAMBONI-INIT
  1119. ( ZAMBONI-X/ZAMBONI-Y --- )ZAM1 # LDA BLUE-IMAGE# STA
  1120. NOS LDA BLUE-X STA TOS LDA BLUE-Y STA
  1121. 8A # LDA BLUE-ALTER STA FELLA1 # LDA REDD-IMAGE#
  1122. STA NOS LDA CLC 3 # ADC REDD-X STA
  1123. TOS LDA CLC 6 # ADC REDD-Y STA
  1124. 8B # LDA REDD-ALTER STA
  1125. ' (PLAYER-FRAME-DISPLAY) >BODY JSR
  1126. INX INX INX INX NEXT JMP END-CODE
  1127. ( SCOREFLASH-PREP08:44 04/20/87 )
  1128. : WAIT 50 0 DO 0 DROP LOOP SCOREFLASH-RTN ;
  1129. CODE SCOREFLASH-PREP SCOREFLASH STY
  1130. ( DELAY COUNTER ) SCORE1 1+ STY
  1131. ( PHASE FLAG VIZ. ERASE OR DISPLAY)
  1132. SCORE1 LDA SEC SCORE2 SBC SCORE1 STA
  1133. ( WHO WON FLAG)0= IF NEXT JMP THEN
  1134. 0< IF NUM2-N 1+ LDA SCORE2 STA NUM3-N
  1135. 1+ LDA SCORE2 1+ STA ELSE NUM0-N 1+ LDA
  1136. SCORE2 STA NUM1-N 1+ LDA SCORE2 1+ STA THEN NEXT JMP END-CODE
  1137. ( SCOREFLASH-RTN 1/2 09:27 04/20/87 )
  1138. CODE (SCOREFLASH-RTN) SCORE1 LDA 0= IF RTS
  1139. THEN SCOREFLASH LDA 04 # CMP CS IF SCOREFLASH STY
  1140. ELSE SCOREFLASH INC RTS THEN SCORE1 1+
  1141. LDA 0= NOT IF SCORE1 1+ STY SCORE1 LDA 0<
  1142. IF SCORE2 LDA NUM2-N 1+ STA SCORE2 1+ LDA
  1143. NUM3-N 1+ STA84 # LDY NUM2-ASTY INY NUM3-ASTY
  1144. ELSE SCORE2 LDA NUM0-N 1+ STA SCORE2 1+ LDA NUM1-N 1+ STA82 #
  1145. LDY NUM0-ASTY INY NUM1-ASTY THEN
  1146. ELSE DEY SCORE1 1+ STY SCORE1 LDA0<
  1147. IF AA # LDA NUM2-N 1+ STA NUM3-N 1+ STA 84 #
  1148. LDY NUM2-ASTY INY NUM3-ASTY
  1149. ELSE AA # LDA NUM0-N 1+ STA NUM1-N 1+ STA 82
  1150. # LDY NUM0-ASTY INY NUM1-ASTY THEN THEN
  1151. ( SCOREFLASH-RTN 2/2 09:32 04/20/87 )
  1152. DEX DL-TABLE-START >HI #LDA TOS STADEX DL
  1153. -TABLE-START >LO #LDA TOS STADEX PLAYERS-ITAB
  1154. >HI #LDA TOS STADEX PLAYERS-ITAB >LO #LDA TOS
  1155. STADEX NUMBERS-ETAB >HI #LDA TOS STA
  1156. DEX NUMBERS-ETAB >LO #LDA TOS STA BEGIN
  1157. MSTAT BIT 0< UNTIL ( THEN WAIT FOR VBLANK )'
  1158. (NEW-GRAPHICS) >BODY JMP ( N N N--) END-CODE
  1159. CODE SCOREFLASH-RTN ' (SCOREFLASH-RTN) >BODY JSR NEXT JMP END-CODE
  1160. DECIMAL
  1161. ( REDO- ZAMBONI LOOP EXIT TO NEW GAME 1/2 15:25 06/09/87 )
  1162. : WARM-RESET S0 @ SP! R0 @ RP! 0 SND?-FLAG C! INIT-SOUND 0
  1163. SCORE1 ! 0 SCORE2 ! 0 SAVES1 ! 0 SAVES2 !
  1164. 0 PLAYER1 !FLAG ( SKILL AND AUTOMATION STATE )( REMAIN UNCHANGED)
  1165. BACKGROUND-INIT RED-CHECK MAIN-LOOP ;
  1166. ( 19:22 08/29/87 )
  1167. : ?REDO FB0 C@ FB1 C@ OR
  1168. IF WARM-RESET THEN ;: CONSOLE-CHECK GETRAW ?RESET
  1169. IF WARM-RESET THEN ?SELECT
  1170. IF BEGIN GETRAW ?SELECT 0= UNTIL
  1171. TITLE-UP WARM-RESET THENGETRAW ?PAUSE IF
  1172. BEGIN GETRAW ?PAUSE 0= UNTIL ( DEBOUNCE )
  1173. WORKAREA0 C@ -1 WORKAREA0 C! 0 AUDV0 C!
  1174. ( AREA0 OFF) WORKAREA1 C@ -1
  1175. WORKAREA1 C! 0 AUDV1 C! ( AREA1 OFF)
  1176. BEGIN GETRAW ?SELECT IF BEGIN GETRAW ?SELECT 0= UNTIL
  1177. TITLE-UP WARM-RESET THEN ?RESET
  1178. IF WARM-RESET ( BYE) THEN ?PAUSE
  1179. UNTIL ( PAUSE ) BEGIN GETRAW ?
  1180. PAUSE 0= UNTIL WORKAREA1 C! WORKAREA0 C!
  1181. THEN ( DEBOUNCE ) ;
  1182. ( ZAMBONI-LOOP 1/2 16:00 04/07/87 )
  1183. : ZAMBONI-LOOP SCORE
  1184. FLASH-PREP PUCK-ERASE BLUE-GOALY-ERASE
  1185. REDD-GOALY-ERASE BLUE-ERASE REDD-ERASE
  1186. GAMEOVER-SIGN-ON4000 0 DO 0 DROP LOOP
  1187. 09 40 ZAMBONI-INIT SNIR SNIL TURK-SND 2 0 DO65 0 DO FELLA1
  1188. 2 0 ZAMBONI-MOVE ZR WAIT CONSOLE-CHECK ( NEXT-JOYS ) ?RED
  1189. O LOOP ( I 0= IF TURK-SND THEN )FELLA2
  1190. 0 0 ZAMBONI-MOVE WAIT WAIT 24 0 DO FELLA3
  1191. 0 1 ZAMBONI-MOVE WAIT CONSOLE-CHEC
  1192. K ( NEXT-JOYS) ?REDO LOOPFELLA4 0 0
  1193. ZAMBONI-MOVE WAIT WAIT 65 0 DO FELLA5 -2 0
  1194. ZAMBONI-MOVE ZL WAIT CONSOLE-CHECK( NEXT-JOYS )
  1195. ?REDO LOOP FELLA4 0 0
  1196. ZAMBONI-MOVE WAIT WAIT
  1197. TURK-SND 24 0 DO FELLA3 0 1
  1198. ZAMBONI-MOVE WAIT CONSOLE-CHECK ( NEXT-JOYS) ?REDO LOOPFELLA2 0 0
  1199. ZAMBONI-MOVE WAIT WAIT LOOP
  1200. ( ZAMBONI-LOOP 2/216:00 04/07/87 )
  1201. 65 0 DO FELLA1 2 0
  1202. ZAMBONI-MOVE ZR WAIT CONSOLE-CHECK
  1203. ( NEXT-JOYS) ?REDO LOOP
  1204. FELLA2 0 0 ZAMBONI-MOVE WAIT WAIT
  1205. 24 0 DO FELLA3 0 1 ZAMBONI-MOVE
  1206. WAIT CONSOLE-CHECK ( NEXT-JOYS)
  1207. ?REDO LOOP FELLA4 0 0 ZAMBONI-MOVE
  1208. WAIT WAIT 65 0 DO FELLA5 -2 0 ZAMBONI-MOVE ZL
  1209. WAIT CONSOLE-CHECK( NEXT-JOYS) ?REDO LOOP ;
  1210. CODE ?BONUS
  1211. DEX TOS STY DEX TOS STY BONUS LDA 0=
  1212. IF ( BONUS HASN'T BEEN GIVEN YET)
  1213. SCORE1 LDA SCORE2 CMP 0= IF DEY TOS STY THEN ELSE BONUS STY THEN
  1214. NEXT JMP END-CODE
  1215. ( USER-CHOICE no exp/nov for 2-plr...jjt 09:57 08/27/87 )
  1216. HEX CODE USER-CHOICE
  1217. BG-FREE2 LDA( DY0 LDA DY1 ORA ) 1 # CMP 0=
  1218. IF 1PLAYERB # LDA BLUE-IMAGE# STA
  1219. ( two player ) 2PLAYERR # LDA REDD-IMAGE# STA
  1220. EXPERTB # LDA BLUE-GOALY-IMAGE# STA ( turn off )NOVICEB # LDA
  1221. REDD-GOALY-IMAGE# STA ( exp/novice)
  1222. 0 # LDA PLAYER2 9 + STA 01 # LDA BG-FREE2 STA ELSE
  1223. FF # CMP 0= IF1PLAYERR # LDA BLUE-IMAGE
  1224. # STA ( one player)2PLAYERB # LDA REDD-IMAGE#
  1225. STA2 # LDA PLAYER2 9 + STA FF # LDA BG-FREE2 STAEXP-NOV JSR
  1226. THEN( DY=0) PLAYER2 9 + LDA 2 # CMP 0= IF EXP-NOV JSR
  1227. THEN THEN
  1228. ( USER-CHOICE CONT. REV. jjt 09:58 08/27/87 )
  1229. 82 # LDA BLUE-ALTER STA 83 # LDA REDD-ALTER
  1230. STA 85 # LDA BLUE-GOALY-ALTER STA 84 # LDA
  1231. REDD-GOALY-ALTER STA
  1232. ' (PLAYER-FRAME-DISPLAY) >BODY JSR NEXT JMPL
  1233. : EXP-NOV BG-FREE3 LDA ( DX0 LDA DX1 ORA )
  1234. L: LBL2 1 # CMP 0= IF NOVICEB #
  1235. LDA REDD-GOALY-IMAGE# STA EXPERTR # LDA
  1236. BLUE-GOALY-IMAGE# STA
  1237. ( 3) 0 # LDA SKILL STA 01 # LDA BG-FREE3
  1238. STA LBL1 JMP THEN FF # CMP 0= IF NOVICER #
  1239. LDA REDD-GOALY-IMAGE# STAEXPERTB # LDA
  1240. BLUE-GOALY-IMAGE# STA ( 6) 1 # LDA SKILL
  1241. STA FF # LDA BG-FREE3 STA LBL1 JMP THEN SKILL
  1242. LDA 0= IF 1 # LDA ELSE FF # LDA THEN LBL2 JMP
  1243. L: LBL1 RTS END-CODE
  1244. ( DEMO-LOOP ATARI00:38 02/05/87 )
  1245. : DEMO-LOOP 1 SND?-FLAG C! DEMO-TIMER UPDATE-SCORE
  1246. 200 0 DO 0 DROP LOOP BEGIN SERVE WHIZ-DONE OFF
  1247. WHIZ-COUNT OFFBEGIN 1 CYCLE# +!
  1248. WHIZ-COUNT @ 0= IF ( NEXT-JOYS )
  1249. PLAYER1-PROCESS GOALIE1-PROCESS
  1250. PLAYER2-PROCESS GOALIE2-PROCESS
  1251. RANDOM-SOUNDS CHECK-PLAYER-PLAYER
  1252. MOVE-PUCKTHEN WHIZ-COUNT
  1253. C@ IF WHIZ ELSE CHECK-FOR-GOAL
  1254. ANIMATOR UPDATE-TIMER UPDATE-SCORE
  1255. THEN CONSOLE-C
  1256. HECKWHIZ-DONE @ MIN-SEC-CHECK OR FB0 C@
  1257. FB1 C@ OR OR UNTIL MIN-SEC-CHECK FB0 C@
  1258. FB1 C@ OR OR UNTIL 0 SND?-FLAG C!
  1259. INIT-SOUND ;
  1260. ( DECIDE-SELECT 09:55 06/10/87 )
  1261. ( PLAYER2 9+ = 2->ONE-PLAYER0->TWO-PLAYER )
  1262. ( SKILL = 1->NOVICE 0->EXPERT )
  1263. CODE DECIDE-SELECT PLAYER2 9 + LDA 0=
  1264. IF SKILL LDA 0= IF ( 2PLAYER/EXPERT>1PLAYER/NOVICE)
  1265. DEY DX0 STY DY0 STY
  1266. ELSE ( 2PLAYER/NOVICE>2PLAYER/EXPERT)
  1267. INY DX0 STY DY0 STY THEN ELSE SKILL LDA 0
  1268. = IF ( 1PLAYER/EXPERT>2PLAYER/NOVICE) INY DY0 STY DEY DEYDX0 STY
  1269. ELSE ( 1PLAYER/NOVICE>1PLAYER/EXPERT) DEY
  1270. DY0 STY INY INYDX0 STYTHEN THEN NEXT JMP END-CODE
  1271. ( TITLE-SELECT-BUTTON-RTN LIMITED-CONSOLE-09:20 06/10/87 )
  1272. : LIMITED-CONSOLE-CHECK GETRAW ?PAUSE
  1273. IF BEGIN GETRAW ?PAUSE 0= UNTIL
  1274. ( DEBOUNCE ) WORKAREA0 C@ 0FF
  1275. WORKAREA0 C! 0 AUDV0 C! ( AREA0 OFF)
  1276. WORKAREA1 C@ 0FF WORKAREA1 C! 0 AUDV
  1277. 1 C! ( AREA1 OFF) BEGIN GETRAW ?RESET IF -1 FB0 C!
  1278. WORKAREA1 C! WORKAREA0 C!EXIT THEN
  1279. ?PAUSE UNTIL ( PAUSE ) BEGIN GETRAW ?PAUSE 0= UNTIL
  1280. WORKAREA1 C! WORKAREA0 C! THEN ( DEBOUNCE ) ?RESET FB0
  1281. C! ;: TITLE-SELECT-BUTTON-RTN GETRAW ?SELECT IF BEGIN
  1282. GETRAW ?SELECT 0= UNTIL ( DEBOUNCE ) DECIDE-SELECT THEN ;
  1283. ( TITLE/DEMO-LOOP13:48 05/11/87 )
  1284. : TITLE-RTN USER-CHOICE DY1 C@ DY0 C@ OR ?DUP
  1285. IF BG-FREE2 C!
  1286. THEN DX1 C@ DX0 C@ OR ?DUP IF BG-FREE3 C!
  1287. THEN 0BEGIN ( NEXT-JOYS )
  1288. ( TITLE-SELECT-BTN AFTER N-JOYS
  1289. SINCE MODIFIES DX0/DY0)LIMITED-CONSOLE-CHECK
  1290. USER-CHOICE 1+TITLE-SELECT-BUTTON-RTN
  1291. DY1 C@ DY0 C@ OR ?DUP IF BG-FREE2 C!
  1292. THEN DX1 C@ DX0 C@ OR ?DUP IF BG-FREE3 C! THEN
  1293. DX0 C@ DY0 C@ OR DX1 C@ OR DY1 C@ OR
  1294. IF DROP 0 THEN DUP 750 = FB0 C@ OR FB1 C@
  1295. OR ?RESET OR UNTIL DROP ;
  1296. ( TITLE SCREEN MANAGEMENT RTNS 14:49 04/17/87 )
  1297. : DEMO-RTN FB0 C@ FB1 C@ OR ?RESET OR IF -1 EXIT
  1298. THEN 0 SCORE1 ! 0 SCORE2 ! 0 SAVES1
  1299. ! 0 SAVES2 ! 2 PLAYER1 !FLAG 2 PLAYER2
  1300. !FLAG BACKGROUND-INIT RED-CHECK
  1301. DEMO-LOOP 0 400 0 DO 0 DROP LOOP ;
  1302. : TITLE-INIT 7B DUP BG-SCOREAREA C!
  1303. BG-TOP-ICE C!GNE0 18 0F DL-INITGNE17 2 4 DL-INIT
  1304. TITLE-ETAB-ROM PLAYERS-ETAB 30 PLAYERS-ETAB-INIT ;
  1305. CODE FIRST-TITLE FF # LDA DY0 STA
  1306. DX0 STA BG-FREE2 STA BG-FREE3 STA
  1307. NEXT JMP END-CODE CODE REPEAT-TITLE BG-FREE2 LD
  1308. A DY0 STA BG-FREE3 LDA DX0 STA
  1309. NEXT JMP END-CODE
  1310. ( RED-CHECK - DETERMINES RED/COMPUTER DISPLAY 12:23 04/17/87 )
  1311. CODE RED-CHECK PLAYER2 9 +
  1312. LDA 0= IFBEGIN MSTAT BIT 0< UNTIL
  1313. ( THEN WAIT FOR VBLANK )VS-RED # LDA BLUE-IMAGE# STA
  1314. 7C # LDA BLUE-X STA0E # LDA BLUE-Y STA
  1315. 8D # LDA BLUE-ALTER STA
  1316. ' (PLAYER-FRAME-DISPLAY) >BODY JSR
  1317. THEN NEXT JMP END-CODE
  1318. DECIMAL
  1319. ( MAIN-LOOP ATARI rev. JJT 17:08 08/27/87 )
  1320. : MAIN-LOOP TIMER-INITBEGIN UPDATE-SCORE 200 0 DO 0 DROP LOOP
  1321. BEGIN WHIZ-DONE OFF WHIZ-COUNT OFF
  1322. SERVE BEGIN CONSOLE-CHECK 1 CYCLE# +!
  1323. WHIZ-COUNT C@ IF WHIZ ELSE PLAYER1-PROCESS GOALIE1-PROCESS
  1324. PLAYER2-PROCESS GOALIE2-PROCESS
  1325. CHECK-PLAYER-PLAYER MOVE-PUCK
  1326. CHECK-FOR-GOAL ANIMATOR THEN
  1327. UPDATE-TIMER UPDATE-SCORE RANDOM-SOUNDS
  1328. WHIZ-DONE @ MIN-SEC-CHECK OR UNTIL
  1329. BONUS C@ ( =20H IF OVERTIME) MIN-SEC-CHECK OR
  1330. UNTIL ?BONUSIF OVERTIME-SIGN-ON
  1331. OVERTIME-SND 30000 0 DO LOOP BONUS-INIT
  1332. ELSE ENDGAME-SND ZAMBONI-LOOP TITLE-UP
  1333. TIMER-INIT THENAGAIN ;
  1334. ( HOCKEY22:45 02/07/87 )
  1335. : FOREGRND-TASK 0 SND?-FLAG C! GRAPHICS-MODE
  1336. INIT-SOUND TITLE-INIT FIRST-TITLE TITLE-RTN
  1337. DEMO-RTN IF NEW-GAME ELSE TITLE-UP THEN ;
  1338. : TITLE-UP 0 SND?-FLAG C! BEGIN INIT-SOUND TITLE-INIT
  1339. REPEAT-TITLE TITLE-RTN DEMO-RTNUNTIL NEW-GAME ;
  1340. : HOCKEY 0 SNd?-FLAG C! INIT-SOUND
  1341. FANFARE-SNDBEGIN GETRAW ?RESET 0= UNTIL 0 SCORE1
  1342. ! 0 SCORE2 ! 0 SAVES1 ! 0 SAVES2 ! 0
  1343. PLAYER1 !FLAG BEGIN CONSOLE-CHECK
  1344. WORKAREA1 C@ WORKAREA0 C@ AND 255 = UNTIL
  1345. BACKGROUND-INIT RED-CHECK
  1346. ( BEGIN-SNDS ) MAIN-LOOP ;
  1347. ' HOCKEY main-loop !
  1348. ' TITLE-UP select-rtn !
  1349. ( ?DIFFR IF 0 ELSE 2 THEN PLAYER2 !FLAG )
  1350. ( ?DIFFL IF 3 ELSE 6 THEN SKILL C!
  1351. HIGHER IS MORE STUPID)
  1352. ( LAST SCREEN--END OF MC ATARI 7800 23:52 05/22/86 )
  1353. ' FOREGRND-TASK ' ABVAR >BODY !
  1354. ( set the constant ABVAR )
  1355. HEX ( reset bootup literals )( NMIRESET IRQ )
  1356. FFF9 HERE - ALLOT 47 C,NMI ,
  1357. ( VIDEO-INT-RTN )RESET , ( ORIGIN )
  1358. IRQ , ( an RTI ) FF80 79 -1 FILLFORTH DEFINITIONS
  1359. LATEST INIT-FORTH !THERE INIT-DP !
  1360. ( X=14 SCOREBOARDA X=110 SCOREBOARDB)