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