12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517 |
- ( HOCKEY HI-LEVEL MAF JDS KAL PMA JJT 16:09 08/27/87 )
- ( Last change: Screen 027 MAF 10:09 04/09/87 )
- .NOLIST
- -HEADERS
-
- ( SQUARE TABLE 1/212:41 02/12/87 )
- DECIMAL L: SQUARE-TABLE
- 00000 , 00001 , 00004 , 00009 , 00016 , 00025 , 00036 ,
- 00049 , 00064 , 00081 , 00100 , 00121 , 00144 , 00169 ,
- 00196 , 00225 , 00256 , 00289 , 00324 , 00361 , 00400 ,
- 00441 , 00484 , 00529 , 00576 , 00625 , 00676 , 00729 ,
- 00784 , 00841 , 00900 , 00961 , 01024 , 01089 , 01156 ,
- 01225 , 01296 , 01369 , 01444 , 01521 , 01600 , 01681 ,
- 01764 , 01849 , 01936 , 02025 , 02116 , 02209 , 02304 ,
- 02401 , 02500 , 02601 , 02704 , 02809 , 02916 , 03025 ,
- 03136 , 03249 , 03364 , 03481 , 03600 , 03721 , 03844 ,
- 03969 , 04096 , 04225 , 04356 , 04489 , 04624 , 04761 ,
- 04900 , 05041 , 05184 , 05329 , 05476 , 05625 , 05776 ,
- 05929 , 06084 , 06241 , 06400 , 06561 , 06724 , 06889 ,
- 07056 , 07225 , 07396 , 07569 , 07744 , 07921 , 08100 ,
- 08281 , 08464 , 08649 , 08836 , 09025 , 09216 , 09409 ,
- ( SQUARE TABLE 2/2 12:41 02/12/87 )
- 09604 , 09801 , 10000 , 10201 , 10404 , 10609 , 10816 ,
- 11025 , 11236 , 11449 , 11664 , 11881 , 12100 , 12321 ,
- 12544 , 12769 , 12996 , 13225 , 13456 , 13689 , 13924 ,
- 14161 , 14400 , 14641 , 14884 , 15129 , 15376 , 15625 ,
- 15876 , 16129 , 16384 , 16641 , 16900 , 17161 , 17424 ,
- 17689 , 17956 , 18225 , 18496 , 18769 , 19044 , 19321 ,
- 19600 , 19881 , 20164 , 20449 , 20736 , 21025 , 21316 ,
- 21609 , 21904 , 22201 , 22500 , 22801 , 23104 , 23409 ,
- 23716 , 24025 , 24336 , 24649 , 24964 , 25281 , 25600 ,
- 25921 , 26244 , 26569 , 26896 , 27225 , 27556 , 27889 ,
- 28224 , 28561 , 28900 , 29241 , 29584 , 29929 , 30276 ,
- 30625 , 30976 , 31329 , 31684 , 32041 , 32400 , 32761 ,
- 33124 , 33489 , 33856 , 34225 , 34596 , 34969 , 35344 ,
- 35721 , 36100 , 36481 , 36864 , 37249 , 37636 , 38025 ,
- 38416 , 38809 , 39204 , 39601 , 40000 ,
- ( RAM LOCATIONS FOR GAME PLAY 11:18 02/05/87 )
- : SQUARE 2* SQUARE-TABLE + @ ;
- END-TABLE-PLUG 3 + EQU PLAYER1
- PLAYER1 15 + EQU PLAYER2
- PLAYER2 15 + EQU puck puck15 + EQU SCORE1
- SCORE1 2 + EQU SCORE2 SCORE2 2 + EQU SAVES1
- SAVES1 2 + EQU SAVES2 SAVES2 2+ EQU WHIZ-DONE
- WHIZ-DONE 2 + EQU WHIZ-COUNT
- ( 12:00 02/19/87 )
- WHIZ-COUNT 2+ EQU DX DX 2+ EQU DY DY 2+ EQU SHOOTFLAG1
- SHOOTFLAG1 2+ EQU SHOOTFLAG2 SHOOTFLAG2 2+ EQU OLDJOY1
- OLDJOY1 1+ EQU OLDJOY2 OLDJOY2 1+ EQU SKILL
- SKILL 1+ EQU GOALIE1-Y
- GOALIE1-Y 2+ EQU GOALIE2-Y
- GOALIE2-Y 2+ EQU CYCLE#
- CYCLE# 2+ EQU OLD-XY
- OLD-XY 4 + EQU END-OF-RAM
- ( ANIMATION TABLES 13:03 02/12/87 )
- ( ADDRESSED BY ORIENTATION * 4 + ANIMATION 3 AND + )
- L: PLAYER2-IMAGES
- RPFE C, RPFER C, RPFE C, RPFEL C,
- RPFNE C, RPFNER C, RPFNE C, RPFNEL C,
- RPFN C, RPFNR C, RPFN C, RPFNL C,
- RPFNW C, RPFNWR C, RPFNW C, RPFNWL C,
- RPFW C, RPFWR C, RPFW C, RPFWL C,
- RPFSW C, RPFSWR C, RPFSW C, RPFSWL C,
- RPFS C, RPFSR C, RPFS C, RPFSL C,
- RPFSE C, RPFSER C, RPFSE C, RPFSEL C,
- ( ANIMATION TABLES 13:03 02/12/87 )
- ( ADDRESSED BY ORIENTATION * 4 + ANIMATION 3 AND + )
- L: PLAYER1-IMAGES
- BPFE C, BPFER C, BPFE C, BPFEL C,
- BPFNE C, BPFNER C, BPFNE C, BPFNEL C,
- BPFN C, BPFNR C, BPFN C, BPFNL C,
- BPFNW C, BPFNWR C, BPFNW C, BPFNWL C,
- BPFW C, BPFWR C, BPFW C, BPFWL C,
- BPFSW C, BPFSWR C, BPFSW C, BPFSWL C,
- BPFS C, BPFSR C, BPFS C, BPFSL C,
- BPFSE C, BPFSER C, BPFSE C, BPFSEL C,
- ( 256/ 256*13:46 08/27/87 )
- CODE 256/( note: ROUNDS & UNSIGNED! jjt)
- TOS 1+ LDY TOS LDA 0< IF INY THEN
- TOS STY 0 # LDA TOS 1+ STA
- NEXT JMP END-CODE
- CODE 256*TOSLDA TOS 1+ STA
- TOS STY NEXT JMP
- END-CODE
- ( HOCKEY LIMIT PARAMETERS/EQUATES 13:50 02/19/87 )
- DECIMAL 4 EQU DIAM ( PUCK DIAMETER )
- 33 EQU LOG(FAT) ( GIRTH OF PLAYER )
- 30 ( 30 ) EQU PUCK-STICK-THRESHOLD
- 120 EQU PLAYER-PLAYER-THRESHOLD
- 08 256 * EQU LEFT-LINE151 256 * EQU RIGHT-LINE
- 40 256 * EQU TOP-LINE 184 256 * EQU BOTTOM-LINE
- TOP-LINE 50 256 * + EQU GOAL-TOP
- BOTTOM-LINE 52 256 * - EQU GOAL-BOTTOM
- LEFT-LINE 5 256 * - EQU GOAL-LEFT
- RIGHT-LINE 5 256 * +EQU GOAL-RIGHT
- 12 256 * EQU GOAL-HEIGHT ( 24)
- 6 EQU GOAL-WIDTH
- LEFT-LINE GOAL-WIDTH 256 * + EQU GOAL1-X
- RIGHT-LINE GOAL-WIDTH 1 + 256 * - EQU GOAL2-X
- (18:20 05/11/87 )
- 08 EQU LEFT-LINEH151 EQU RIGHT-LINEH
- 40 EQU TOP-LINEH 184 EQU BOTTOM-LINEH
- TOP-LINEH 50 + EQU GOAL-TOPH
- BOTTOM-LINEH 52 - EQU GOAL-BOTTOMH
- LEFT-LINEH 5 - EQU GOAL-LEFTH
- RIGHT-LINEH 5 + EQU GOAL-RIGHTH
- oops deleted a word here - tas 11/2/87
- EQU GOAL-HEIGHTH ( 24)
- ( ANIMATOR1/2 rev. jjt 09:03 08/27/87 )
- : ANIMATOR
- PLAYER2 @XY V256/ REDD-Y C! REDD-X C!
- PLAYER2 @ORIENTATION 2* 2* PLAYER2-IMAGES +
- DX1 C@ DY1 C@ OR PLAYER2 @FLAG 2 AND OR IF
- PLAYER2-FEET C@ DUP 1+
- PLAYER2-FEET C! 3 AND +
- DUP3 AND 0= WHIZ-COUNT C@ 0= AND IF SKRITCH-SND THEN
- THEN ( no skritching while whizzing...)
- PLAYER1 @XY V256/ BLUE-Y C! BLUE-X C!
- PLAYER1 @ORIENTATION 2* 2* PLAYER1-IMAGES +
- DX0 C@ DY0 C@ OR PLAYER1
- @FLAG 2 AND OR IF
- PLAYER1-FEET C@ DUP 1+ PLAYER1-FEET C! 3 AND +
- DUP 2+ 3 AND 0= WHIZ-COUNT C@ 0= AND IF SKRITCH-SND THEN
- THEN ( and less often at that! )
- puck @XY V256/ PUCK-Y C! PUCK-X C!
- ( ANIMATOR 2/2 13:10 02/12/87 )
- BEGIN ?VBLANK UNTIL BLUE-ERASE BLUE-GOALY-ERASE BLUE-PLAYER-FRAME
- BEGIN ?VBLANK 0= UNTIL
- BEGIN ?VBLANK UNTIL
- PUCK-ERASE PUCK-FRAME
- REDD-ERASE REDD-GOALY-ERASE REDD-PLAYER-FRAME ;
-
- ( GENERATE SQUARE TABLE 13:30 02/05/87 )
- 0 .IF
- VARIABLE LINE# VARIABLE BLOCK#
- : MAKE-SQUARES 179 BLOCK# ! 2 LINE# !
- 0 BEGINDUP 7 MOD 0= IF 1 LINE# +!
- LINE# @ 15 > IF 1 LINE# ! 1 BLOCK# +! THEN THEN
- DUP DUP * 0 <# # # # # # #> ( N ADDR COUNT )
- BLOCK# @ BLOCK UPDATE
- LINE# @ 64 * + ( N ADDR COUNT ADDR )
- 3 PICK 7 MOD 8 * + DUP >R SWAP
- CMOVE ASCII , R> 6 + C!
- 1+ DUP 200 > UNTIL DROP FLUSH ;
- .THEN
- ( ANGLE 11:08 02/05/87 )
- L: ANGLE-TAB 0 C, 6 C, 0 C, 2 C, 4 C, 6 C, 4 C, 2 C,
- 7 C, 7 C, 1 C, 1 C, 5 C, 5 C, 3 C, 3 C,
- 0 .IF
- : ANGLE ( X1 Y1 X2 Y2 ---- a )
- ( algorithm courtesy Lee Actor) ( Bally Sente )
- ROT - DY ! SWAP - DX ! ( Calculate deltax, deltay )
- 0 DX @ DUP 0< IF NEGATE DX ! 4 OR ELSE DROP THEN
- DY @ DUP 0< IF NEGATE DY ! 2 OR ELSE DROP THEN
- DY @ DX @ > IF 1 OR DY @ DX @ 2* < IF 8 OR THEN
- ELSE DX @ DY @ 2* < IF 8 OR THEN
- THEN ANGLE-TAB + C@ ;
- .THEN
- ( ANGLE JDS 11:10 03/23/87 )
- CODE (ANGLE) ( X1 Y1 X2 Y2 ---- a )
- SEC TOS LDA TOS 4 + SBC DY STA
- TOS 1+ LDA TOS 5 + SBC DY 1+
- STA ( DELTA Y FOUND )
- SEC TOS 2+ LDA TOS 6 + SBC DX STA
- TOS 3 +LDA TOS 7 + SBC DX 1+ STA ( DELTA X FOUND )
- TXA CLC 6 # ADC TAX TYA PHA ( PTR BYTE & XTRA STK)
- DX 1+ LDA 0< IF SEC TYA DX SBC DX STA TYA DX 1+ SBC DX 1+ STA
- PLA 4 # ORA PHA THEN
- ( IF LESS THAN 0 , TURN POSITIVE )
- DY 1+ LDA 0< IF SEC TYA DY SBC DY STA TYA DY 1+ SBC DY 1+ STA
- PLA 2 # ORA PHA THEN ( IF LESS THAN 0 , TURN POSITIVE )
- SEC DX LDA DY SBC DX 1+ LDA DY 1+ SBC ( CS: X >= Y ELSE Y > X )
- CS NOT IF PLA 1 # ORA PHA
- DX 1+ LDA TOS 1+ STA DX LD
- A TOS STA TOS ASL TOS 1+ ROL ( DX 2*)
- SEC DY LDA TOS SBC DY 1+ LDA TOS 1+ SBC CS NOT IF ( DY<DX2*)
- PLA 8 # ORA PHA THEN ELSE
- ( ANGLE JDS 2/2 11:10 03/23/87 )
- DY 1+ LDA TOS 1+ STA DY LDA TOS STA TOS ASL TOS 1+ ROL ( DY 2*)
- SEC DX LDA TOS SBC DX
- 1+ LDA TOS 1+ SBC CS NOT IF ( DX<DY2*)
- PLA 8 # ORA PHA THEN THEN
- ANGLE-TAB >HI # LDA TOS 1+ STA
- ANGLE-TAB >LO # LDA TOSSTA
- PLA CLC TOS ADC TOS
- STA CS IF TOS 1+ INC THEN
- TOS X) LDA TOS STA TOS 1+ STY RTS END-CODE
- CODE ANGLE ' (ANGLE) >BODY JSR NEXT JMP END-CODE
- ( structures for players and puck 11:13 02/05/87 )
- (2 = COMPUTER CONTROL )
- : @TIMER 10 + C@ ;
- : !TIMER 10 + C! ;
- : @SHOOT-COUNT 12 + C@ ;
- : !SHOOT-COUNT 12 + C! ;
- : @POSSESSION 13 + C@ ;
- : !POSSESSION 13 + C! ;
- : @ANIMATION 14 + C@ ;
- : !ANIMATION 14 + C! ;
- 13:28 02/20/87 )
- PROC X2@ ( ADDR -- D )TOS LDA N STA TOS 1+ LDA N 1+ STA 0 # LD
- Y DEX DEX N )Y LDA TOS STA INY N )Y LDA TOS 1+ STA
- INY N )Y LDA TOS 2+ STA
- INY N )Y LDA TOS 3 + STA
- NEXT JMP END-PROC
- PROC X2! ( D ADDR -- ) TOS L
- DA N STA TOS 1+ LDA N 1+ STA 0 # LDY
- INX INX TOS LDA N )Y STA
- INX INY TOS LDA N )Y STA
- INX INY TOS LDA N )Y STA
- INX INY TOS LDA N )Y STA INX
- NEXT JMP END-PROC
- ( @XY !XY @VELOCITY !VELOCITY 13:51 02/20/87 )
- CODE @XY ( : @XY 4 + 2@;
- ( PLAYER --- X Y )
- CLC 4 # LDA TOS ADC TOS STA
- TYA TOS 1+ ADC TOS 1+ STA
- X2@ JMP END-CODE
- CODE !XY ( : !XY 4 + 2!; ( X Y PLAYER ---- )
- CLC 4 # LDA TOS ADC TOS STA
- TYA TOS 1+ ADC TOS 1+ STA
- X2! JMP END-CODE
- CODE @VELOCITY X2@ JMP END-CODE
- CODE !VELOCITY X2! JMP END-CODE
- ( XC@ XC! @OREINTATION !ORIENTATION14:00 02/20/87 )
- PROC XC@TOS X) LDA TOS STATOS 1+ STY NEXT JMP END-PROC
- PROC XC!NOS LDA TOS X) STAPOP2 JMP END-PROC
- CODE @ORIENTATION
- CLC 8 # LDA TOS ADC TOS STA
- CS IF TOS 1+ INC THEN
- XC@ JMP END-CODE
- CODE !ORIENTATION
- CLC 8 # LDA TOS ADC TOS STA
- CS IF TOS 1+ INC THEN
- XC! JMP END-CODE
- ( @FLAG !FLAG THUMP DECIMAL-INC 12:24 04/06/87 )
- CODE @FLAG
- CLC 9 # LDA TOS ADC TOS STA
- CS IF TOS 1+ INC THEN
- XC@ JMP END-CODE
- CODE !FLAG
- CLC 9 # LDA TOS ADC TOS STA
- CS IF TOS 1+ INC THEN
- XC! JMP END-CODE
- oops may have deleted something here tas 11/2/87
- X) STA
- INX INX NEXT JMP END-CODE
- ( RIGHT-LINE-CHECK MAF 10:05 04/09/87 )
- 0 .IF
- : RIGHT-LINE-CHECK ( X Y --- RX TRUE/ FALSE )
- OVER RIGHT-LINE
- U< IF 2DROP 0 EXIT THEN
- puck @VELOCITY SWAP NEGATE SWAP puck !VELOCITY
- DUP GOAL-TOP U< IF 2DROP
- [ RIGHT-LINE DIAM 256 * - ] LITERAL -1 EXIT THEN
- DUP GOAL-BOTTOM U> IF 2DROP
- [ RIGHT-LI
- NE DIAM 256 * - ] LITERAL -1 EXIT THEN
- DROP ( X ) GOAL-RIGHT > IF 0. puck !VELOCITY
- [ GOAL-RIGHT DIAM 256 * - ] LITERAL -1 ELSE 0 THEN ;
- ( LEFT-LINE-CHECK 22:13 02/09/87 )
- : LEFT-LINE-CHECK ( X Y --- LX TRUE/ FALSE )
- OVER LEFT-LINE U> IF 2DROP 0 EXIT THEN
- puck @VELOCITY SWAP NEGATE SWAP puck !VELOCITY
- DUP GOAL-TOP U< IF 2DROP LEFT-LINE -1 EXIT THEN
- DUP GOAL-BOTTOM U> IF 2DROP LEFT-LINE -1 EXIT THEN
- DROP ( X ) GOAL-LEFT > IF 0. puck !VELOCITY
- GOAL-LEFT -1 ELSE 0 THEN ;
- ( CHECK-PUCK-COLLISION MAF 10:05 04/09/87 )
- : CHECK-PUCK-COLLISION
- puck @XY DUP TOP-LINE U<
- IF DROP TOP-LINE 512 + puck !XY
- puck @VELOCITY NEGATE puck !VELOCITY BOUNCE-SND ELSE
- DUP BOTTOM-LINE DIAM 256* - U>
- IF DROP BOTTOM-LINE DIAM 256* - puck !XY
- puck @VELOCITY NEGATE puck
- !VELOCITY BOUNCE-SND ELSE 2DUP RIGHT-LINE-CHECK
- IF ROT DROP SWAP puck !XY
- BOUNCE-SND ELSE 2DUP LEFT-LINE-CHECK
- IF ROT DROP SWAP puck !XY
- BOUNCE-SND ELSE 2DROP THEN THEN THEN THEN ;
- .THEN
- ( SOUNDS ENTRANT FROM ASSEMBLY 14:48 05/13/87 )
- PROC (PL/EDGE-SND)
- L-PL/EDGE # LDA ' START-SO
- UND >BODY JSR RTS END-PROC
- PROC (BOUNCE-SND)
- L-BOUNCE # LDA ' START-SOUND >BODY JSR RTS END-PROC
- ( PUCK COLLISION MAF 10:05 04/09/87 )
- PROC NEGATE-YVELOCITY 0 # LDY
- 0 # LDA SEC OBJECT )Y SBC OBJECT )YSTA IN
- Y 0 # LDA OBJECT )Y SBC OBJECT )Y
- STA RTS END-PROC
- PROC NEGATE-XVELOCITY 2 # LDY
- 0 # LDA SEC OBJECT )Y SBC OBJECT )Y STA
- INY0 # LDA OBJECT )Y SBC OBJECT )Y STA
- RTS END-PROC
- CODE (NEGATE-YVELOCITY) NEGATE-YVELOCITY JSR NEXT JMP END-CODE
- CODE (NEGATE-XVELOCITY) NEGATE-XVELOCITY JSR NEXT JMP END-CODE
- ( PUCK COLLISIONS CONTINUED 11:32 04/08/87 )
- -1 .IF
- CODE CHECK-PUCK-COLLISION
- puck >HI # LDA OBJECT 1+ STA
- puck >LO # LDA OBJECTSTA
- puck 5 + LDA ( Y ) TOP-LINEH # CMP
- CS NOT IF TOP-LINEH # LDA puck 5 + STA
- (BOUNCE-SND) JSR NEGATE-YVELOCITY JSR
- 0 # LDY OBJECT )Y LDA SEC 1 # SBC OBJECT )Y STA NEXT JMP THEN
- BOTTOM-LINEH DIAM - # CMP
- CS IF BOTTOM-LINEH DIAM - # LDA puck 5 + STA
- (BOUNCE-SND) JSR NEGATE-YVELOCITY JSR
- 0 # LDY OBJECT )Y LDA CLC 1 # ADC OBJECT
- )Y STA NEXT JMP THEN
- ( PUCK COLLISION RIGHT SIDE11:35 04/08/87 )
- puck 7 + LDA ( X ) RIGHT-LINEH # CMP
- CS IF puck 5 + LDA GOAL-TOPH # CMP ( IN THE GOAL?)
- ( NO ) CS NOT IF NEGATE-XVELOCITY JSR
- (BOUNCE-SND) JSRRIGHT-LINEH DIAM - DIAM - # LDA
- puck 7 + STA NEXT JMP THEN
- GOAL-BOTTOMH # CMP CS IF NEGATE-XVELOCITY JSR (BOUNCE-SND) JSR
- RIGHT-LINEH DIAM - DIAM - # LDA puck 7 + STA NEXT JMP THEN
- ( puck 7 + LDA ( X ) ( GOAL-RIGHTH # CMP )
- ( 0< NOT IF ) 0 # LDA puck STA puck 1+ STA puck 2+ STA
- puck 3 + STA ( 0 VELOCITY) RIGHT-LINEH DIAM + # LDA
- puck 7 + STA ( THEN ) THEN
- ( PUCK COLLISION LEFT SIDE MAF 10:09 04/09/87 )
- puck 7 + LDA ( X ) LEFT-LINEH # CMP
- CS NOT IF puck 5 + LDA GOAL-TOPH # CMP ( IN THE GOAL?)
- ( NO ) CS NOT IF NEGATE-XVELOCITY JSR
- (BOUNCE-SND) JSRLEFT-LINEH # LDA puck 7 + STA
- NEXT JMP THEN GOAL-BOTTOMH # CMP
- CS IF NEGATE-XVELOCITY JSR (BOUNCE-SND) JSR
- LEFT-LINEH # LDA puck 7 + STA NEXT JMP THEN ( GOAL!)
- ( puck 7 + LDA ( X ) ( GOAL-LEFTH # CMP )
- ( CS IF ) 0 # LDA puck STA puck 1+ STA puck 2+ STA
- puck 3 + STA ( 0 VELOCITY)
- GOAL-LEFTH # LDA puck 7 + STA ( THEN ) THEN NEXT JMP END-CODE
- .THEN
- ( CHECK-PUCK-GOALIE21:36 02/22/87 )
- : CHECK-PUCK-GOALIE puck @XY
- DUP GOALIE1-Y @ 1+ U> OVER GOALIE1-Y @ GOAL-HEIGHT + U< AND
- 2 PICK GOAL1-X U< AND IF 2DROP puck @VELOCITY SWAP NEGATE SWAP
- puck !VELOCITY SAVES1 DECIMAL-INC UPDATE-SCORE SAVE-SND
- puck @XY SWAP DROP GOAL1-X SWAP puck !XY ELSE
- DUP GOALIE2-Y @ 1+ U> SWAP GOALIE2-Y @ GOAL-HEIGHT + U< AND
- SWAP GOAL2-X U> AND IF puck @VELOCITY SWAP NEGATE SWAP
- puck !VELOCITY SAVES2 DECIMAL-INC UPDATE-SCORE SAVE-SND
- puck @XY SWAP DROP GOAL2-X SWAP puck !XY
- THEN THEN ;
- (11:06 04/09/87 )
- ( : V- ROT SWAP - >R - R> ; )
- ( : V+ ROT + >R + R> ; )
- CODE V+ ( V1 V2 ---- V1+V2 )
- CLC TOS LDA NOS 2+ ADC NOS 2+ STA
- TOS 1+ LDA NOS 3 + ADC NOS 3 + STA
- CLC NOS LDA NOS 4 + ADC NOS 4 + STA
- NOS 1+ LDA NOS 5 + ADC NOS 5 + STA
- POP2 JMP END-CODE
- CODE V- ( V1 V2 ---- V1-V2 )
- SEC NOS 2+ LDA TOS SBC NOS 2+ STA
- NOS 3 + LDA TOS 1+ SBC NOS 3 + STA
- SEC NOS 4 + LDA NOS SBC NOS 4 + STA
- NOS 5 + LDA NOS 1+ SBC NOS 5 + STA
- POP2 JMP END-CODE
- ( NORM-SQ as PROC 11:59 04/09/87 )
- ( : NORM-SQ ABS SQUISH SQUARE SWAP ABS SQUISH SQUARE + ; )
- PROC (NORM-SQ) TOS 1+ LDA 0< IF ( ABS )
- SEC TYA TOS SBC TOS STA TYA TOS 1+ SBC TOS 1+ STA THEN
- 6 # LDY ( SQUISH- 7 0 DO 2/ LOOP 2* SQUARE + )
- 1$: TOS 1+ LSR TOS ROR DEY 1$ BNE
- TOS LDA 254 # AND TOS STA
- CLC SQUARE-TABLE >LO # LDA TOS ADC N STA
- SQUARE-TABLE >HI # LDA TOS 1+ ADC N 1+ STA
- N )Y LDA TOS STA INY N )Y LDA TOS 1+ STA
- (14:32 04/09/87 )
- NOS 1+
- LDA 0< IF SEC 0 # LDY
- TYA NOS SBC NOS STA TYA NOS 1+ SBC
- NOS 1+ STA THEN 6 # LDY ( SQUISH-1 TO GO TO SQUARE )
- 2$: NOS 1+ LSR NOS ROR DEY 2$ BNE
- NOS LDA 254 # AND NOS STA
- CLC SQUARE-TABLE >LO # LDA NOSADC NSTA
- SQUARE-TABLE >HI # LDA NOS 1+ ADC N 1+ STA
- CLC N )Y LDA TOS ADC NOS STA
- INY N )Y LDA TOS 1+ ADC NOS 1+ STA
- INX INX RTS ( POP JMP ) END-PROC
- CODE NORM-SQ (NORM-SQ) JSR NEXT JMP END-CODE
- ( NORM-SQ2 14:33 04/09/87 )
- ( : NORM-SQ2 ABS 256/ SQUARE SWAP ABS 256/ SQUARE + ; )
- CODE NORM-SQ2 TOS 1+ LDA 0< IF ( ABS )
- SEC TYA TOS SBC TOS STA TYA TOS 1+ SBC TOS 1+ STA THEN
- 7 # LDY ( SQUISH- 7 0 DO 2/ LOOP 2* SQUARE + )
- 1$: TOS 1+ LSR TOS ROR DEY 1$ BNE
- TOS LDA 254 # AND TOS STA CLC SQUARE-TABLE >LO # LDA TOSADC NSTA
- SQUARE-TABLE >HI # LDA TOS 1+ ADC N 1+ STA
- N )Y LDA TOS STA INY N )Y LDA TOS 1+ STA
- ( 14:32 04/09/87 )
- NOS 1+ LDA 0< IF SEC 0 #
- LDY TYA NOS SBC NOS STA TYA NOS 1+ SBC
- NOS 1+ STA THEN
- 7 # LDY ( SQUISH-1 TO GO TO SQUARE )
- 2$: NOS 1+ LSR NOS ROR DEY 2$ BNE
- NOS LDA 254 # AND NOS STA
- CLC SQUARE-TABLE >LO # LDA NOSADC NSTA
- SQUARE-TABLE >HI # LDA NOS 1+ ADC N 1+ STA
- CLC N )Y LDA TOS ADC NOS STA
- INY N )Y LDA TOS 1+ ADC NOS 1+ STA
- POP JMP END-CODE
- ( DECAY1 puck decelleration 15:03 04/09/87 )
- ( : DECAY1 DUP 0< SWAP ABS DUP -4 SHIFT - SWAP IF NEGATE THEN ;)
- CODE DECAY1 TOS 1+ LDA 0< IF ( ABS ) 255 # LDA N 3 + STA
- SEC TYA TOS SBC TOS STA TYA TOS 1+ SBC TOS 1+ STA
- ELSE 00 # LDA N 3 + STA THEN
- TOS LDA N STA TOS 1+ LDA N 1+ STA
- 5 # LDY 1$: N 1+ LSR N ROR DEY 1$ BNE
- SEC TOS LDA N SBC TOS STA
- TOS 1+ LDA N 1+ SBC TOS 1+ STA
- N 3 + LDA 0< IF ( FIX SIGN UP )
- SEC TYA TOS SBC TOS STA
- TYA TOS 1+ SBC TOS 1+ STA THEN
- NEXT JMP END-CODE
- ( DECAY2 player decelleration as CODE 15:14 04/09/87 )
- ( : XDECAY2 DUP 0< SWAP ABS DUP 5 SHIFT SWAP 2*
- - -5 SHIFT SWAP IF NEGATE THEN ; )
- CODE DECAY2 (DECAY2) JSR NEXT JMP END-CODE
- ( SLOW-DOWN-PUCK DECAY2 11:10 02/09/87 )
- : SLOW-DOWN-PUCK puck @VELOCITY 2DUP NORM-SQ 25 >
- IF DECAY1 SWAP DECAY1 SWAP
- puck !VELOCITY ELSE 2DROP THEN ;
- ( DECAY2 player decelleration as PROC 15:14 04/09/87 )
- ( : DECAY2 DUP 0< SWAP ABS DUP 5 SHIFT
- SWAP 2* - -5 SHIFT SWAP IF NEGATE THEN ; )
- PROC (DECAY2) TOS 1+ LDA 0< IF ( ABS ) 255 # LDA N 3 + STA
- SEC TYA TOS SBC TOS STA TYA TOS 1
- + SBC TOS 1+ STAELSE 00 # LDA N 3 + STA THEN
- TOS LDA N STA TOS 1+ LDA N 1+ STA
- 4 # LDY 1$: N ASL N 1+ ROL DEY 1$ BNE
- TOS ASL TOS 1+ ROL ( 2* )
- SEC N LDA TOS SBC TOS STA
- N 1+ LDA TOS 1+ SBC TOS 1+ STA
- 4 # LDY 2$: TOS 1+ LSR TOS ROR DEY 2$ BNE ( -5 SHIFT )
- N 3 + LDA 0< IF ( FIX SIGN UP )
- SEC TYA TOS SBC TOS STA
- TYA TOS 1+ SBC TOS 1+ STA THEN RTS END-PROC
- ( THUMP V256/ rounds it! JJT 09:27 08/27/87 )
- ( : SQUISH 7 0 DO 2/ LOOP ; : UNSQUISH 7 SHIFT ; )
- : RANDOM-SOUNDS CYCLE# C@ 63 AND 0= IF (RANDOM-SOUND) THEN ;
- : (RANDOM-SOUND)SYSTIMER C@ 3 AND CASE
- 0 OF BUGLE-SND ENDOF 1 OF HIWOLF-SND ENDOF
- 2 OF LOWOLF-SND ENDOF 3 OF UPWHIS-SND ENDOF UPWHIS-SND ENDCASE ;
- CODE V256/( N1 N2 --- N1/256 N2/256 modified--rounded)
- TOS 1+ LDY TOS LDA 0< IF INY THEN TOS STY
- NOS 1+ LDY NOS LDA 0< IF INY THEN NOS STY
- 0 # LDA TOS 1+ STA NOS 1+ STA NEXT JMP END-CODE
- ( SCALE VSCALE V* RESOLVE forget this!! 09:27 08/27/87 )
- 0 .IF
- : <IP> ROT * >R * R> + ;
- : SCALE ( A B-- A ) 0 DO 2/ LOOP ;
- : VSCALE ( A B C-- A B ) ROT ( B C A )
- OVER ( B C A C ) SCALE ( B C A ) ROT ( C A B )ROT ( A B C )
- SCALE ; ( A B ) : V* ROT OVER * ROT ROT * ;
- : RESOLVE ( EXPANDED IN LINE...SEE NEXT SCREEN )
- 2OVER ROT * >R * R> +
- LOG(FAT) 0 DO 2/ LOOP
- ROT OVER * ROT ROT * LOG(FAT)
- ROT OVER 0 DO 2/ LOOP
- ROT ROT 0 DO 2/ LOOP ;
- .THEN
- ( resolve 17:15 08/24/87 )
- 0 .IF
- /| v / | / | / |/|/----->----------------------->
- <a,v>a a
- : RESOLVE ( a v--<a,v>a) 2OVER <IP> LOG(FAT) SCALE
- V* LOG(FAT) VSCALE ;
- ( This calculation assumes that the norm or length of )
- ( a = ball diameter. Accuracy of the calculation varies )
- ( to the degree that this assumption is true. )
- .THEN
- ( COLLIDE 17:16 08/24/87 )
- ( calculate and store new velocities for PLAYER1 AND PLAYER2
- when they collide. Assumed they are currently touching )
- 0 .IF
- : COLLIDE ( -- )
- PLAYER1 @VELOCITY PLAYER2 @VELOCITY PLAYER2 @XY PLAYER1 @XY
- V- ( vx1 vy1 vx2 vy2 Dx Dy--) 2DUP NEGATE 2
- SWAP ( 90-ROT ) >R >R 2SWAP RESOLVE 2SWAP
- ( v1 v2 b1 ) R> R> 2SWAP RESOLVE V+
- ( <v2,b1>b1 b2 v1 )PLAYER1 @VELOCITY PLAYER2 @VELOCITY V+
- 2OVER V- PLAYER1 !VELOCITY PLAYER2 !VELOCITY ;
- .THEN
- 0 .IF
- : COLLIDE PLAYER1 @VELOCITY PLAYER2 @VELOCITY
- 2OVER 2/ SWAP 2/ SWAP 2OVER V+ PLAYER2 !VELOCITY
- 2/ SWAP 2/ SWAP V+ PLAYER1 !VELOCITY ;
- .THEN
- ( COLLIDE new improved and simplified--jjt 09:11 08/27/87 )
- -1 .IF
- : COLLIDE PLAYER1 @VELOCITY 2*
- PLAYER2 @VELOCITY 2*
- PLAYER1 !VELOCITY
- PLAYER2 !VELOCITY ;
- .THEN
- ( ORIENTATION TABLES RECTANGLES1 18:48 02/08/87 )
- L: RECTANGLES1 ( collision detection tables NO puck )
- ( ulx uly lrx lry puckx pucky )
- 2 C, 0 C, 15 C, 19 C, 15 , 16 , ( ORIENTATION 0 )
- 3 C, 2 C, 19 C, 15 C, 19 , 4 , ( 1 )
- 3 C, 0 C, 13 C, 18 C, 13 , -2 , ( 2 )
- 1 C, 0 C, 9 C, 24 C, 2 , 0 , ( 3 )
- 0 C, 0 C, 13 C, 19 C, -2 , 2 , ( 4 )
- 0 C, 2 C, 16 C, 15 C, -2 , 11 , ( 5 )
- 0 C, 2 C, 12 C, 20 C, 1 , 21 , ( 6 )
- 0 C, 2 C, 10 C, 24 C, 8 , 23 , ( 7 )
- ( ORIENTATION TABLES RECTANGLES2 18:48 02/08/87 )
- L: RECTANGLES2 ( collision detection tables WITH puck )
- ( ulx `E10 lrx lry puckx pucky )
- 2 C, 0 C, 15 DIAM + C, 19 C, 15 , 16 , ( ORIENTATION 0 )
- 3 C, 2 C, 19 C, 15 C, 19 , 4 , ( 1 )
- 3 C, 0 DIAM - C, 13 C, 18C, 13 , -2 , ( 2 )
- 1 C, 0 C, 9 C, 24 C, 2 , 0 , ( 3 )
- 0 DIAM - C, 0 C, 13 C, 19 C, -2 , 2 , ( 4 )
- -2 C, 2 C, 16 C, 15 C, -2 , 11 , ( 5 )
- 0 C, 2 C, 12 C, 20 DIAM + C, 1 , 21 , ( 6 )
- 0 C, 2 C, 10 C, 24 C, 8 , 23 , ( 7 )
- ( CALC-RTAB as CODE17:06 04/09/87 )
- CODE CALC-RTAB ( PLAYER ---- )
- CLC 8 # LDA TOS ADC N STA TYA TOS 1+ ADC N 1+ STA
- N )Y LDA N STAN 1+ STY N
- ASL N 1+ ROL N ASL N 1+ ROL
- N ASL N 1+ ROL
- CLC 13 # LDA TOS ADC TOS STA
- CS IF TOS 1+ INC THEN
- TOS X) LDA 0= IF RECTANGLES1 >LO # LDA RTABSTA
- RECTANGLES1 >HI # LDA RTAB 1+ STA
- ELSE RECTANGLES2 >LO # LDA RTAB
- STA RECTANGLES2 >HI # LDA RTAB 1+ STA
- THEN CLC RTAB LDA
- N ADC RTAB STA RTAB 1+ LDA N 1+ ADC RTAB 1+
- STA POP JMP END-CODE
- ( CALC-RTAB px py 19:41 02/08/87 )
- 0 .IF
- : CALC-RTAB ( PLAYER ---- ) DUP >R @ORIENTATION 2 * 2* 2*
- R> @POSSESSION IF RECTANGLES2 ELSE RECTANGLES1 THEN + RTAB !;
- : px ( --- px ) RTAB @ 4 + @ 256* ;
- : py ( --- py ) RTAB @ 6 + @ 256* ;
- .THEN
- ( lrx lry 12:21 03/31/87 )
- CODE lrx DEX DEX TOS STY 2 # LDY
- RTAB )Y LDA TOS 1+ STA NEXT JMP END-CODE
- CODE lry DEX DEX TOS STY 3 # LDY
- RTAB )Y LDA TOS 1+ STA NEXT JMP END-CODE
- CODE px DEX DEX TOS STY 4 # LDY
- RTAB )Y LDA TOS 1+ STA NEXT JMP END-CODE
- CODE py DEX DEX TOS STY 6 # LDY
- RTAB )Y LDA TOS 1+ STA NEXT JMP END-CODE
- ( ulx uly 14:48 02/20/87 )
- CODE ulx DEX DEX TOS STY
- RTAB )Y LDA TOS 1+ STA NEXT JMP END-CODE
- CODE uly DEX DEX TOS STY
- INY RTAB )Y LDA TOS 1+ STA NEXT JMP END-CODE
- CODE !OBJECT puck >HI # LDA OBJECT 1+ STA
- puck >LO # LDA OBJECTSTA NEXT JMP END-CODE
- ( CHECK-PUCK-PLAYER orig 21:37 02/08/87 )
- 0 .IF
- : CHECK-PUCK-PLAYER DUP >R @POSSESSION ?DUP
- IF 1- ?DUP IF R> !POSSESSION ELSE R> DROP THEN
- ELSE PLAYER1 @POSSESSION PLAYER2 @POSSESSION + 2 <
- IF R@ @SHOOT-COUNT 0= IF R@ CALC-RTAB puck @XY R@
- @XY px py V+ V- NORM-SQ2
- PUCK-STICK-THRESHOLD U<
- IF R@ @XY px py V+ puck !XY
- 0 PLAYER1 !POSSESSION 0 PLAYER2 !POSSESSION
- 20 R@!POSSESSION 0. puck !VELOCITY
- puck @FLAG 1 OR puck !FLAG PICKUP-SND
- THEN THEN THEN R> DROP THEN ;
- .THEN
- : CHECK-PUCK-PLAYER DUP >R @POSSESSION ?DUP
- IF 1- ?DUP IF R> !POSSESSION ELSE R> DROP THEN
- ELSE PLAYER1 @POSSESSION PLAYER2 @POSSESSION + 2 <
- IF R@ @SHOOT-COUNT 0= IF R@ CALC-RTAB puck @XY R@
- @XY px py V+ V- NORM-SQ2 PUCK-STICK-THRESHOLD U<
- IF R@ @XY px py V+ puck !XY (RANDOM-SOUND)
- 0 PLAYER1 !POSSESSION 0 PLAYER2 !POSSESSION
- 10 R@!POSSESSION 0. puck !VELOCITY
- puck @FLAG 1 OR puck !FLAG PICKUP-SND
- ELSE !OBJECT ( PUCK-PLAYER-THRESHOLD= )
- ulx lrx + 2/ uly lry + 2/ R@ @XY
- V+ puck @XY V- NORM-SQ2 050 U<
- IF BOUNCE-SND (NEGATE-YVELOCITY)
- (NEGATE-XVELOCITY) THEN
- THEN THEN THEN R> DROP THEN ;
- ( MOVE-PUCK 13:31 02/05/87 )
- : MOVE-PUCK WHIZ-COUNT C@ 0= IF
- puck @FLAG 1 AND IF PLAYER1 @POSSESSION IF PLAYER1 DUP CALC-RTAB
- @XY px py V+ puck !XY
- ELSE PLAYER2 DUP CALC-RTAB
- @XY px py V+ puck !XY THEN
- ELSE puck @VELOCITY puck @XY ( DX DY X Y )
- V+ OVER [ 200 256 * ] LITERAL U> IF
- SWAP DROP 3 SWAP THEN
- puck !XY CHECK-PUCK-GOALIE CHECK-PUCK-COLLISION
- SLOW-DOWN-PUCK THEN PLAYER1 CHECK-PUCK-PLAYER
- PLAYER2 CHECK-PUCK-PLAYER
- THEN ;
- ( CHECK-PLAYER-PLAYER 10:49 02/11/87 )
- -1 .IF
- : CHECK-PLAYER-PLAYER PLAYER1 @XY PLAYER2 @XY V- ( DX DY ) NORM-SQ2
- PLAYER-PLAYER-THRESHOLD U< IF PL/PLYR-SND COLLIDE THEN ;
- .THEN
- 0 .IF ( DO NOT USE YET )
- : CHECK-PLAYER-PLAYER
- PLAYER1 @XY PLAYER2 @XY V- ( DX DY ) NORM-SQ2
- PLAYER-PLAYER-THRESHOLD U< IF PL/PLYR-SND
- PLAYER1 @VELOCITY PLAYER2 @VELOCITY
- PLAYER1 @XY PLAYER2 @XY
- ( v1 v2 c1 c2 ) 8 0 DO 7 PICK LOOP
- COLLIDE1 COLLIDE2 THEN ;
- .THEN
- ( PLAYER-COLLISION WITH WALLS 00:29 02/05/87 )
- 0 .IF
- : CHECK-PLAYER-COLLISION >R R@ @XY DUP
- uly + TOP-LINEU< IF DROP TOP-LINE uly - 2DUP
- R@ !XY PL/EDGE-SND R@ SLOW-DOWN-PLAYER R@ SLOW-DOWN-PLAYER
- R@ @VELOCITY NEGATE R@ !VELOCITY THEN DUP
- lry + BOTTOM-LINE U> IF DROP BOTTOM-LINE lry - 2DUP
- R@ !XY PL/EDGE-SND R@ SLOW-DOWN-PLAYER R@ SLOW-DOWN-PLAYER
- R@ @VELOCITY NEGATE R@ !VELOCITY THEN SWAP DUP
- lrx + RIGHT-LINE U> IF DROP RIGHT-LINE lrx - SWAP 2DUP
- R@ !XY PL/EDGE-SND R@ SLOW-DOWN-PLAYER R@ SLOW-DOWN-PLAYER
- R@ @VELOCITY SWAP NEGATE SWAP R@ !VELOCITY THEN
- DUP ulx + LEFT-LINE U< IF DROP LEFT-LINE ulx - SWAP 2DUP
- R@ !XY PL/EDGE-SND R@ SLOW-DOWN-PLAYER R@ SLOW-DOWN-PLAYER
- R@ @VELOCITY SWAP NEGATE SWAP R@ !VELOCITY THEN
- R> DROP 2DROP ;
- .THEN
- ( CHECK-PLAYER-COLLISION 6502 REMAKE MAF/JDS 1/2 04/13/87 )
- CODE CHECK-PLAYER-COLLISION ( PLAYER --- )
- TOS LDA OBJECT STA TOS 1+ LDA OBJECT 1+ STA
- 5 # LDY OBJECT )Y LDA CLC 1 # LDY RTAB )Y ADC
- TOP-LINEH # CMP CS NOTIF SEC TOP-LINEH #
- LDA RTAB )Y SBC 5 # LDY OBJECT )Y STA NEGATE-YVELOCITY JSR
- (PL/EDGE-SND) JSR THEN 5 # LDY OBJECT )Y LDA CL
- C 3 # LDY RTAB )Y ADC BOTTOM-LINEH # CMP CS
- IF SEC BOTTOM-LINEH # LDA RTAB )Y SBC 5 # LDY OBJECT )
- Y STA NEGATE-YVELOCITY JSR (PL/EDGE-SND) JSR
- THEN
- ( CHECK-PLAYER-COLLISION 6502 CONT. 2/210:22 04/13/87 )
- 7 # LDY OBJECT )Y LDA CLC 2 # LDY RTAB )Y ADC
- RIGHT-LINEH # CMP CS
- IF SEC RIGHT-LINEH # LDA RTAB )Y SBC 7 # LDY OBJECT )Y STA
- NEGATE-XVELOCITY JSR (PL/EDGE-SND) JSR
- THEN 7 # LDY OBJECT )Y LDA CLC 0 # LDY RTAB )Y ADC
- LEFT-LINEH # CMP CS NOT
- IF SEC LEFT-LINEH # LDA RTAB )Y SBC 7 # LDY OBJECT )Y STA
- NEGATE-XVELOCITY JSR (PL/EDGE-SND) JSR
- THEN POP JMP END-CODE
- ( CHECK-PLAYER-GOALIE CODE ... MAF11:57 04/13/87 )
- 0 .IF
- CODE (CHECK-PLAYER-GOALIE) ( PLAYER---)( misng CALC-RTAB )
- TOS LDA OBJECT STA TOS 1+ LDA OBJECT 1+ STA
- 7 # LDY CLC OBJECT )Y LDA 0 # LDY RTAB )Y ADC
- LEFT-LINEH GOAL-WIDTH + # CMP ( X:LEFTLINE) CS
- IF 5 # LDY OBJECT )Y LDA CLC 3 # LDY RTAB )Y ADC ( LY )
- GOALIE1-Y 1+ CMP CS NOT IF 5 # LDY OBJECT )Y LDA
- CLC 1 # LDY RTAB )Y ADC ( UY )
- N STA CLC GOALIE1-Y 1+ LDA GOAL-HEIGHTH # ADC
- N CMP CS NOT IF (PL-GO-BOUNCE) JSR THEN
- THEN POP JMP THEN
- ( CHECK-PLAYER-GOALIE called by hi-level 11:57 04/13/87 )
- 7 # LDY CLC OBJECT )Y LDA 2 # LDY RTAB )Y ADC
- RIGHT-LINEH GOAL-WIDTH 1+ - # CMP CS NOT
- IF 5 # LDY OBJECT )Y LDA CLC 3 # LDY RTAB )Y ADC
- GOALIE2-Y 1+ CMP CS NOT IF
- 5 # LDY OBJECT )Y LDA CLC 1 # LDY RTAB )Y ADC
- N STA CLC GOALIE2-Y 1+ LDA GOAL-HEIGHTH # ADC
- N CMP CS NOT IF (PL-GO-BOUNCE) JSR THEN
- THEN POP JMP THEN POP JMP END-CODE
- : CHECK-PLAYER-GOALIE ( PLAYER -- )
- DUP >R CALC-RTAB (CHECK-PLAYER-GOALIE) R> DROP ;
- .THEN
- : CHECK-PLAYER-GOALIE ( PLAYER )
- DUP >R CALC-RTAB R@ @XY DROP
- ulx + [ LEFT-LINE GOAL-WIDTH 256 * + ] LITERAL U<
- IF GOALIE1-Y @ GOAL-HEIGHT + uly R@ @XY SWAP DROP + U>
- GOALIE1-Y @ lry R@ @XY SWAP DROP +
- U< AND IF OLD-XY 2@ R@ !XY
- R@ @VELOCITY SWAP NEGATE SWAP
- NEGATE R@ !VELOCITY THEN ELSE
- R@ @XY DROP lrx +
- [ RIGHT-LINE GOAL-WIDTH 256 * - ] LITERAL U>
- IF uly R@ @XY SWAP DROP + GOALIE2-Y @ GOAL-HEIGHT + U<
- lry R@ @XY SWAP DROP + GOALIE2-Y @ U> AND IF OLD-XY 2@ R@ !XY
- R@ @VELOCITY SWAP NEGATE SWAP NEGATE R@ !VELOCITY THEN
- THEN THEN R> DROP ;
- ( CHECK-PLAYER-GOALIE in hi_levelMAF 11:57 04/13/87 )
- 0 .IF
- PROC (PL-GO-BOUNCE) OLD-XY 1+ LDA 5 # LDY OBJECT )Y STA
- OLD-XY 3 + LDA 7 # LDY OBJECT )Y STA
- NEGATE-XVELOCITY JSR RTS END-PROC
- CODE PL-GO-BOUNCE (PL-GO-BOUNCE) JSR NEXT JMP END-CODE
- : CHECK-PLAYER-GOALIE ( PLAYER ) DUP >R CALC-RTAB
- R@ @XY DROP ulx + [ LEFT-LINE GOAL-WIDTH 256 * + ] LITERAL U<
- IF GOALIE1-Y @ GOAL-HEIGHT + uly R@ @XY SWAP DROP + U>
- GOALIE1-Y @ lry R@ @XY SWAP DROP + U<
- AND IF PL-GO-BOUNCE THEN
- ( CHECK-PLAYER-GOALIE in 4TH MAF 11:57 04/13/87 )
- ELSE R@ @XY DROP lrx +
- [ RIGHT-LINE GOAL-WIDTH 256 * - ] LITERAL U>
- IF uly R@ @XY SWAP DROP + GOALIE2-Y @ GOAL-HEIGHT + U<
- lry R@ @XY SWAP DROP + GOALIE2-Y @
- U> AND IF PL-GO-BOUNCE THEN
- THEN THEN R> DROP ;
- .THEN
- ( SLOW-DOWN-PLAYER as PROC MAF14:01 07/14/87 )
- 0 .IF
- CODE (SLOW-DOWN-PLAYER) ( PLAYER -- )
- TOSLDA OBJECTSTA( PLAYER to OBJECT )
- TOS 1+ LDA OBJECT 1+ STA
- DEX DEX OBJECT )Y LDA TOS STA ( @VELOCITY )
- INY OBJECT )Y LDA TOS 1+ STA
- INY OBJECT )Y LDA TOS 2+ STA
- INY OBJECT )Y LDA TOS 3 + STA
- (DECAY2) JSR INX INX (DECAY2) JSR DEX DEX
- ( decayed velocity ) 0 # LDY TOS LDA OBJECT )Y STA
- ( !VELOCITY ) INY TOS 1+ LDA OBJECT )Y STA
- INY TOS 2+ LDA OBJECT )Y STA INY TOS 3 + LDA OBJECT )Y STA
- (NORM-SQ) JSR
- ( SLOW-DOWN-PLAYER as COLON 00:27 02/05/87 )
- TOS LDA TOS 1+ ORA
- 0= IF 0 # LDY OBJECT )Y STA
- INY OBJECT )Y STA
- INY OBJECT )Y STA
- INY OBJECT )Y STA THEN
- INX INX NEXT JMP END-CODE
- .THEN
- : SLOW-DOWN-PLAYER ( PLAYER --- )
- DUP @VELOCITY
- DECAY2SWAPDECAY2SWAP
- ( 2DUP NORM-SQ 0= IF 2DROP 0. THEN)
- ROT !VELOCITY ;
- ( NEAREST VELOCITY-TABLE 15:45 02/06/87 )
- : NEAREST ( START POS GOAL POS ---- NEXT ANGLE )
- ( Calculates the nearest way to get to a position )
- 2DUP = IF DROP ELSE
- 2DUP - 5 > ( COUNTERCLOCKWISE ) IF DROP 2+ ELSE( 1 ) 2DUP - 3 >
- ( COUNTERCLOCKWISE ) IF DROP 1+ ELSE
- 2DUP - -5 < ( CLOCKWISE )
- IF DROP 2- ELSE( 1 )
- 2DUP - -3 < ( CLOCKWISE )
- IF DROP 1- ELSE
- 2DUP > ( TOO FAR ) IF DROP 1- ELSE
- DROP 1+ THEN THEN THEN THEN THEN THEN 7 AND ;
- L: VELOCITY-TABLE ( Y X PER DIRECTION )
- 0 , 330 , -290 , 290 , -420 ,0 ,
- ( 0 1 2 ) -290 , -290 , 0 , -330 ,290 , -290 ,
- ( 3 4 5 ) 420 ,0 ,290 , 290
- , 0 ,0 , ( 6 7 8 ) ( was 320 400 640 )
- ( 09:42 08/27/87 )
- L: SHOOT-TABLE ( shoot orientation, idx'd by count)
- -1 , 1 , 1 , -1 ,
- ( : ZOOM 2* DUP 2* + ; ( velocity multiplier for shooting )
- : ZOOM 2* 2* 2* ;
- ( SHOOT SEQUENCE 09:36 02/09/87 )
- : SHOOT-SEQUENCE ( PLAYER --- )
- ( DUP ) >R ( @SHOOT-COUNT 1 AND 0= IF )
- R@ @SHOOT-COUNT 1- 2* SHOOT-TABLE + @
- R@ @ORIENTATION + 7 AND R@ !ORIENTATION
- R@ @SHOOT-COUNT 3 = R@ @POSSESSION AND
- IF ( KICK puck IN ASS ) ( player shoot-count --- )
- WHACK-SND 0 R@ !POSSESSION ( CLEAR PLAYER FLAG )
- R@ @ORIENTATION 2* 2* VELOCITY-TABLE + 2@
- ZOOM SWAP ZOOM SWAP ( R@ @VELOCITY V+ ) puck !VELOCITY
- puck @FLAG 254 AND puck !FLAG THEN ( THEN )
- R@ @SHOOT-COUNT 1- R> !SHOOT-COUNT ;
- ( APPLY-JOYSTICK MOVE-PLAYER 00:46 02/05/87 )
- ( 32) 2700 EQU PLAYER-SPEED-LIMIT-Y
- ( 16) 2000 EQU PLAYER-SPEED-LIMIT-X
- -2700 EQU -PLAYER-SPEED-LIMIT-Y
- -2000 EQU -PLAYER-SPEED-LIMIT-X
- : APPLY-JOYSTICK ( DIRECTION PLAYER ---- )
- >R 2* 2* VELOCITY-TABLE + 2@ R@ @VELOCITY D+
- DUP 0< IF -PLAYER-SPEED-LIMIT-Y MAX
- ELSE PLAYER-SPEED-LIMIT-Y MIN THEN
- SWAP DUP 0< IF -PLAYER-SPEED-LIMIT-X MAX
- ELSE PLAYER-SPEED-LIMIT-X MIN THEN
- SWAP R> !VELOCITY ;
- (12:47 08/29/87 )
- : MOVE-PLAYER ( PLAYER ---- )
- DUP >R @VELOCITY R@ @XY ( DX DY X Y ) 2DUP OLD-XY 2!
- V+ OVER [ 200 256 * ] LITERAL U> IF SWAP DROP 3 SWAP THEN
- R@ !XY R@ CALC-RTAB R@ CHECK-PLAYER-COLLISION
- R@ CHECK-PLAYER-GOALIE
- R> SLOW-DOWN-PLAYER ;
- ( READ-JOY1 JDS OPTIMIZED INLINE FORTH 17:04 03/24/87 )
- : READ-JOY1 ( --- ORIENTATION ) PLAYER1 @FLAG 2 AND
- IF [ PLAYER1 10 + ] LITERAL ( TIMER ) C@ 0=
- IF SKILL C@ SCORE2 @ SCORE1 @ - - 0 MAX 2 ( 32) MIN
- [ PLAYER1 10 + ] LITERAL C! [ PLAYER1 13 + ] LITERAL C@IF
- [ PLAYER1 4 + ] LITERAL 2@ ( XY) OVER 256/ 120 >
- IF 2DROP SHOOTFLAG1 ON 8 ELSE 156 111 2SWAP V256/ ANGLE 4 - 7 AND THEN
- ELSE [ PLAYER1 4 + ] LITERAL 2@ V256/
- [ puck 4 + ] LITERAL 2@ V256/ ANGLE THENELSE [ PLAYER1 10 + ]
- LITERAL C@ 1-[ PLAYER1 10 + ] LITERAL C!
- OLDJOY1 C@ THEN ELSE FB0 C@ IF SHOOTFLAG1 ON THEN
- ?BLUE-ACTION THEN DUP OLDJOY1 C! ;
- ( READ-JOY2 JDS OPTIMIZED INLINE FORTH17:04 03/24/87 )
- : READ-JOY2 ( --- ORIENTATION )
- PLAYER2 @FLAG 2 ANDIF [ PLAYER2 10 + ] LITERAL ( TIMER )
- C@ 0= IF SKILL C@ SCORE1 @ SCORE2 @ - - 0 MAX
- 2 ( 32) MIN[ PLAYER2 10 + ] LITERAL C! [ PLAYER2 13 + ]
- LITERAL C@IF [ PLAYER2 4 + ] LITERAL 2@ ( XY)
- OVER 256/ 35 < IF 2DROP SHOOTFLAG2 ON 8
- ( SHOOT PUCK ) ELSE 05 111 2SWAP V256/ ANGLE 4 - 7 AND THEN
- ELSE [ PLAYER2 4 + ] LITERAL 2@ V256/ [ puck 4 + ]
- LITERAL 2@ V256/ ANGLE THENELSE [ PLAYER2 10 + ]
- LITERAL C@ 1-[ PLAYER2 10 + ] LITERAL C! OLDJOY2 C@ THEN
- ELSE FB1 C@ IF SHOOTFLAG2 ON THEN ?REDD-ACTION
- THEN DUP OLDJOY2 C! ;
- ( UPDATE SCORE JDS 1/2 11:37 03/24/87 )
- HEX CODE (UPDATE-SCORE) SCORE1 LDA PHA 0F # AND CLC 48 # ADC
- NUM1-N STA 83 # LDA NUM1-A STAPLA A LSR A LSR A LSR A LSR CLC
- 48 # ADC NUM0-N STA 82 # LDA NUM0-A STA SCORE2 LDA PHA 0F #
- AND CLC 48 # ADC NUM3-N STA 85 # LDA NUM3-A STAPLA A LSR A LSR A
- LSR A LSR CLC 48 # ADC NUM2-N STA 84 # LDA NUM2-A STA SAVES1
- LDA PHA 0F # AND CLC 3E # ADC NUM8-N STA 8A # LDA NUM8-A STA
- PLA A LSR A LSR A LSR A LSR CLC 3E # ADC NUM7-N STA 89 #
- LDA NUM7-A STA
- ( UPDATE SCORE JDS 2/2 11:37 03/24/87 )
- SAVES2 LDA PHA 0F # AND CLC 3E # ADC
- NUMA-N STA 8C # LDA NUMA-A STAPLA A LSR A LS
- R A LSR A LSR CLC 3E # ADCNUM9-N STA 8B # LDA
- NUM9-A STADEX DL-TABLE-START >HI #LDA TOS STA
- DEX DL-TABLE-START >LO #LDA TOS STADEX PLAYERS-ITAB
- >HI #LDA TOS STADEX PLAYERS-ITAB >LO #LDA TOS STADEX NUMBERS-ETAB
- >HI #LDA TOS STADEX NUMBERS-ETAB >LO #LDA TOS STA
- BEGIN MSTAT BIT 0< UNTIL ( THEN WAIT FOR VBLANK )'
- (NEW-GRAPHICS) >BODY JMP ( N N N--) END-CODE
- CODE UPDATE-SCORE ' (UPDATE-SCORE) >BODY JSR NEXT JMP END-CODE
- DECIMAL
- ( WHIZZING LIGHTS 1/3 11:15 03/25/87 )
- HEX CODE (WHIZ)WHIZ-COUNT LDA 0= IF RTS THEN 0<
- IF WHIZ-COUNT INC WHIZ-COUNT 1+ LDA0=
- IF R-TWIRLB # LDA RUT-I STA
- RLT-I STAWHIZ-COUNT 1+ INC
- ELSE 1 # CMP 0= IF R-TWIRLD # LDA RUT-I STA RLT-I STA
- WHIZ-COUNT 1+ INC
- ELSE 2 # CMP 0=
- IF R-TWIRLC # LDA RUT-I STA RLT-I STAWHIZ-COUNT 1+ INC
- ELSE WHIZ-COUNT 1+ STY R-TWIRLA # LDA RUT-I STA RLT-I STA
- THEN THEN THEN 89 # LDA RUT-A STA RLT-A STA
- ( WHIZZING LIGHTS 2/3 12:04 03/25/87 )
- ELSE WHIZ-COUNT DEC WHIZ-COUNT 1+ LDA 0=
- IF B-TWIRLB # LDA BUT-I STA BLT-I STAWHIZ-COUNT 1+ INC
- ELSE 1 # CMP 0= IF B-TWIRLD # LDA
- BUT-I STA BLT-I STAWHIZ-COUNT 1+ INC ELSE
- 2 # CMP 0= IF B-TWIRLC # LDA BUT-I STA BLT-I STAWHIZ-COUNT 1+ INC
- ELSE WHIZ-COUNT 1+ STY B-TWIRLA # LDA BUT-I STA BLT-I STA
- THEN THEN THEN 88 # LDA
- BUT-A STA BLT-A STA THEN FF # LDA NETPLUG STA
- ( WHIZZING LIGHTS 3/3 11:15 03/25/87 )
- WHIZ-COUNT LDA 0= IF WHIZ-COUNT 1+ STY WHIZ-DONE
- DEC THEN DEX DL-TABLE-START >HI #LDA TOS STA
- DEX DL-TABLE-START >LO #LDA TOS STA
- DEX PLAYERS-ITAB >HI #LDA TOS STADEX PLAYERS-ITAB
- >LO #LDA TOS STADEX NETGOAL-ETAB >HI #
- LDA TOS STADEX NETGOAL-ETAB
- >LO #LDA TOS STABEGIN MSTAT BIT 0< UNTIL ( THEN WAIT FOR VBLANK )
- ' (NEW-GRAPHICS) >BODY JMP
- ( N N N--) END-CODE
- CODE WHIZ ' (WHIZ) >BODY
- JSR NEXT JMP END-CODE
- DECIMAL
- ( TWIRLS - WHIZZING DURING ZAMBONI 1/2 11:24 04/14/87 )
- HEX CODE (TWIRL)WHIZ-COUNT 1+ LDA 0=
- IF B-TWIRLB # LDA BUT-I STA BLT-I STA
- R-TWIRLB # LDA RUT-I STA RLT-I STAWHIZ-COUNT 1+ INC
- ELSE 1 # CMP 0= IF B-TWIRLD # LDA BUT-I STA BLT-I
- STAR-TWIRLD # LDA RUT-I STA
- RLT-I STAWHIZ-COUNT 1+ INC
- ELSE 2 # CMP 0= IF B-TWIRLC # LDA
- BUT-I STA BLT-I STAR-TWIRLC # LDA
- RUT-I STA RLT-I STA WHIZ-COUNT 1+ INC
- ELSE WHIZ-COUNT 1+ STY B-TWIRLA # LDA
- BUT-I STA BLT-I STAR-TWIRLA # LDA RUT-I STA RLT-I STA
- THEN THEN THEN
- 88 # LDA BUT-A STA BLT-A STA89 # LDA
- RUT-A STA RLT-A STA FF # LDA NETPLUG STA
- ( TWIRLS - WHIZZING DURING ZAMBONI 2/2 11:24 04/14/87 )
- DEX DL-TABLE-START
- >HI #LDA TOS STA
- DEX DL-TABLE-START
- >LO #LDA TOS STA
- DEX PLAYERS-ITAB
- >HI #LDA TOS STADEX PLAYERS-ITAB
- >LO #LDA TOS STADEX NETGOAL-ETAB >HI #LDA TOS STADEX NETGOAL-ETAB
- >LO #LDA TOS STABEGIN MSTAT BIT 0< UNTIL
- ( THEN WAIT FOR VBLANK )
- ' (NEW-GRAPHICS) >BODY JMP ( N N N--) END-CODE
- CODE TWIRL ' (TWIRL) >BODY JSR NEXT JMP END-CODE
- DECIMAL DECIMAL
- ( CHECK-FOR-GOAL 23:12 02/09/87 )
- : CHECK-FOR-GOAL
- puck @XY DUP GOAL-TOP U> IF GOAL-BOTTOM U<
- IF DUP RIGHT-LINE U> IF DROP -40 WHIZ-COUNT C!
- SCORE1 DECIMAL-INC GOAL-SND ELSE LEFT-LINE U< IF
- 40 WHIZ-COUNT C! SCORE2 DECIMAL-INC GOAL-SND
- THEN THEN
- WHIZ-COUNT C@
- IF puck @FLAG 254 AND puck !FLAG0 PLAYER1 !POSSESSION
- 0 PLAYER2 !POSSESSION UPDATE-SCORE WHIZ THEN
- ELSE DROP ( X---)THEN ELSE 2DROP ( X/Y) THEN ;
- ( SERVEfixed per memo. jjt 09:43 08/27/87 )
- : SERVE 0 puck!
- FLAG 0 PLAYER1 !SHOOT-COUNT 0 PLAYER2
- !SHOOT-COUNT
- 0 PLAYER1 !ORIENTATION 4 PLAYER2 !ORIENTATION
- 0 PLAYER1 !POSSESSION 0 PLAYER2 !POSSESSION
- 0 PLAYER1 !TIMER 0 PLAYER
- 2 !TIMER0 0 PLAYER1 !VELOCITY 57 256* 104 256*
- PLAYER1 !XY0 0 PLAYER2 !VELOCITY 86 256* 102
- 256* PLAYER2 !XY
- 8 OLDJOY1 C! 8 OLDJOY2 C! 0 SHOOTFLAG1 !
- 0 SHOOTFLAG2 ![ RIGHT-LINE LEFT-LINE - -1
- SHIFT 384 - LEFT-LINE + ] LITERAL
- [ 200 256 * ] LITERAL 0 puck
- !XY INIT-SOUND ANIMATOR 9000 0
- DO LOOP SERVE-SNDSYSTIMER C@ 4 AND 0=
- IF TOP-LINE 512 - puck !XY 0 2048
- ELSE BOTTOM-LINE 512 + puck !XY 0 -2048
- THEN puck !VELOCITY ANIMATOR ;
- ( PLAYER1-PROCESS00:38 02/05/87 )
- : PLAYER1-PROCESS
- SHOOTFLAG1 C@ IF 4 PLAYER1 !SHOOT-COUNT
- SHOOTFLAG1 OFF THEN
- PLAYER1 @SHOOT-COUNT
- IF PLAYER1 SHOOT-SEQUENCE
- ELSE READ-JOY1 DUP 8 = IF
- 150 111 PLAYER1 @XY( 156 )V256/ ANGLE 4 - 7 AND
- ELSE DUP THEN PLAYER1 @ORIENTATION SWAP NEAREST
- PLAYER1 !ORIENTATION PLAYER1 APPLY-JOYSTICK
- THEN PLAYER1 MOVE-PLAYER ;
- ( PLAYER2-PROCESS10:43 02/11/87 )
- : PLAYER2-PROCESS
- SHOOTFLAG2 C@ IF 4 PLAYER2 !SHOOT-COUNT SHOOTFLAG2 OFF
- THEN PLAYER2 @SHOOT-COUNT IF PLAYER2 SHOOT-SEQUENCE
- ELSE READ-JOY2 DUP 8 = IF05 111 PLAYER2 @XY V256/
- ANGLE 4 - 7 AND ELSE DUP THEN
- PLAYER2 @ORIENTATION SWAP NEAREST PLAYER2
- !ORIENTATION PLAYER2 APPLY-JOYSTICK
- THEN PLAYER2 MOVE-PLAYER ;
- ( UMIN UMAX DRAW-GOALIE1 DRAW-GOALIE216:39 02/22/87 )
- : UMIN 2DUP U>
- IF SWAP THEN DROP ;
- : UMAX 2DUP U< IF SWAP THEN DROP ;
- CODE DRAW-GOALIE1 TOS 1+
- LDA BLUE-GOALY-Y STA INX INX N
- EXT JMP END-CODECODE DRAW-GOALIE2 TOS 1+
- LDA REDD-GOALY-Y STA INX INX NEXT JMP END-CODE
- ( GOALIEN-PROCESS15:51 02/22/87 )
- L: GOALIE-MOVES ( JOYSTICK -> Y CHANGE )
- 0 , -2048 , -2048 , -2048 , 0 , 2048 , 2048 , 2048 , 0 ,
- : GOALIE1-PROCESS
- GOALIE1-Y @ OLDJOY1 C@ 2*
- GOALIE-MOVES + @ + GOAL-TOP UMAX
- [ GOAL-BOTTOM GOAL-HEIGHT - ] LITERAL UMIN
- DUP GOALIE1-Y !( GOAL1-X SWAP V256/) ( ---Y256*)
- DRAW-GOALIE1 ; : GOALIE2-PROCESS
- GOALIE2-Y @ OLDJOY2 C@ 2* GOALIE-MOVES + @ +
- GOAL-TOP UMAX [ GOAL-BOTTOM GOAL-HEIGHT - ]
- LITERAL UMIN DUP GOALIE2-Y !
- ( GOAL2-X SWAP V256/ ) ( ---Y256*)
- DRAW-GOALIE2 ;
- ( LIGHTEN-ICE DARKEN-ICE 13:26 04/09/87 )
- CODE (LIGHTEN-ICE) BG-TOP-ICE LDY INY BG-TOP-ICE STY RTS
- END-CODE
- CODE LIGHTEN-ICE ' (LIGHTEN-ICE) >BODY JSR
- NEXT JMP END-CODECODE (DARKEN-ICE) BG-TOP-ICE
- LDY DEY BG-TOP-ICE STY RTS
- END-CODE
- CODE DARKEN-ICE ' (DARKEN-ICE) >BODY JSR NEXT JMP END-CODE
- HEX
- ( TIMER-INIT UPDATE-TIMER SUBROUTINE 1/2 09:04 04/07/87 )
- CODE TIMER-INIT TIMER STY SECONDS STY SAVES1 STY
- SAVES2 STY SCORE1 STY SCORE2 STY BONUS STY 2 #
- LDY MINUTES STY (INIT-TIMER) JSR NEXT JMP END-CODE
- CODE BONUS-INIT TIMER STY MINUTES STY 20 # LDY
- SECONDS STY BONUS STY (INIT-TIMER) JSR NEXT JMP
- END-CODE
- CODE DEMO-TIMER TIMER STY
- MINUTES STY SAVES1 STY SAVES2 STY SCORE1 STY
- SCORE2 STY BONUS STY 20 # LDY SECONDS STY NEXT JMP END-CODE
- CODE (UPDATE-TIMER) TIMER LDA 3C # CMP CS
- IF SECONDS LDA SED SEC 1 # SBC CLD
- SECONDS STA TIMER STY THEN SECONDS LDA 0<
- IF MINUTES LDA SED SEC 1 # SBC CLD
- MINUTES STA 59 # LDA SECONDS STA
- MINUTES LDA 1 # CMP 0= NOT
- IF' (LIGHTEN-ICE) >BODY JSR THEN THEN
- ( UPDATE-TIMER SUBROUTINE CONT. 2/2 10:15 04/06/87 )
- L: (INIT-TIMER)SECONDS LDA PHA 0F # AND CLC 48 # ADC
- NUM6-N STA 88 # LDA NUM6-A STA
- PLA A LSR A LSR A LSR A LSR CLC 48 #
- ADCNUM5-N STA 87 # LDA
- NUM5-A STAMINUTES LDA CLC 48 #
- ADCNUM4-N STA 86 # LDA NUM4-A STA
- DEX DL-TABLE-START >HI #LDA TOS STA
- DEX DL-TABLE-START >LO #LDA TOS STA
- DEX PLAYERS-ITAB >HI #LDA TOS STA
- DEX PLAYERS-ITAB >LO #LDA TOS STA
- DEX NUMBERS-ETAB >HI #LDA TOS STA
- DEX NUMBERS-ETAB >LO #LDA TOS STA
- BEGIN MSTAT BIT 0< UNTIL ( THEN WAIT FOR VBLANK )
- ' (NEW-GRAPHICS) >BODY JMP
- ( N N N--) END-CODE
- ( UPDATE-TIMER MIN-SEC-CHECK09:03 04/07/87 )
- CODE UPDATE-TIMER' (UPDATE-TIMER) >BODY JSR NEXT JMP END-CODE
- CODE MIN-SEC-CHECK DEX TOS STY DEX TOS STY
- MINUTES LDA 0= IF SECONDS LDA 0=
- IF DEY TOS STY THEN THEN NEXT JMP END-CODE
- CODE OVERTIME-SIGN-ONBEGIN MSTA
- T BIT 0< UNTIL ( THEN WAIT FOR VBLANK )
- OVERT# LDA BLUE-IMAGE# STA3E # LDA BLUE-X STA
- B8 # LDA BLUE-Y STA8A # LDA BLUE-ALTER STA'
- (PLAYER-FRAME-DISPLAY)
- >BODY JSR NEXT JMP END-CODE
- ( GAMEOVER-SIGN-ON 14:50 04/08/87 )
- CODE GAMEOVER-SIGN-ONBEGIN MSTAT BIT 0< UNTIL
- ( THEN WAIT FOR VBLANK )GOVER
- # LDA BLUE-IMAGE# STA3E # LDA BLUE-X STAB8 # LDA BLUE-Y STA
- 8A # LDA BLUE-ALTER STA'
- (PLAYER-FRAME-DISPLAY) >BODY JSR NEXT JMP END-CODE
- CODE GAMEOVER-SIGN-OFFBEGIN MSTAT BIT 0< UNTIL
- ( THEN WAIT FOR VBLANK )PUCK # LDA BLUE-IMAGE# STA
- AA # LDA BLUE-X STAB8 # LDA BLUE-Y STA8A
- # LDA BLUE-ALTER STA'
- (PLAYER-FRAME-DISPLAY) >BODY JSR NEXT JMP END-CODE
- ( ZAMBONI-MOVE 1/2 INCLUDES DIRECT-RTN 15:55 04/07/87 )
- CODE ZAMBONI-MOVE ( FELLA-IMAGE#/DX/DY --- ) '
- (TWIRL) >BODY JSR BEGIN MSTAT BIT 0< UNTIL
- ( THEN WAIT FOR VBLANK ) 0 # LDY DEX DEX 0A # LDA TOS
- STA TOS 1+ STY DEX DEX 03 # LDA TOS STA
- TOS 1+ STY DEX DEX 14 # LDA TOS STA TOS 1+ STY
- ' (DIRECT-ERASE) >BODY JSR 0 # LDY
- DEX DEX 0B # LDA TOS STA TOS 1+ STY
- DEX DEX 03 # LDA TO
- S STA TOS 1+ STY DEX DEX
- 15 # LDA TOS STA TOS 1+ STY '
- (DIRECT-ERASE) >BODY JSR
- ( ZAMBONI-MOVE 2/3 11:34 04/07/87 )
- BLUE-IMAGE# LDA 1 # EOR BLUE-IMAGE# STA
- BLUE-X LDA CLC NOS ADC BLUE-X STA
- BLUE-Y LDA CLC TOS ADC BLU
- E-Y STA 8A # LDA BLUE-ALTER
- STA NOS 2+ LDA REDD-IMAGE# STA
- REDD-X LDA CLC NOS ADC REDD-X
- STA REDD-Y LDA CLC TOS ADC REDD-Y
- STA 8B # LDA REDD-ALTER STA
- ' (PLAYER-FRAME-DISPLAY) >BODY JSR
- ' (TWIRL) >BODY JSR
- INX INX INX INX INX INX NEXT JMP END-CODE
- ( ICE>LEFT 11:34 04/07/87 )
- CODE ZL ( ICE>LEFT) BLUE-X LDA BLUE-GO
- ALY-X STA REDD-GOALY-X STA PUCK-X STA
- BLUE-Y LDA BLUE-GOALY-Y STA CLC 8 # ADC
- REDD-GOALY-Y STA CLC 8 # ADC PUCK-Y STA
- BLUE-X LDA 1A # CMP CS IF 80 # LDA
- LONG-ICE # LDY ELSE 81 # LDA
- SHORT-ICE # LDY THENBLUE-GOALY-ALTER
- STA REDD-GOALY-ALTER STA PUCK-ALTER STA
- BLUE-GOALY-IMAGE# STY REDD-GOALY-IMAGE#
- STY PUCK-IMAGE# STY'
- (PLAYER-FRAME-DISPLAY)
- >BODY JSR NEXT JMP END
- -CODE
- ( ICE>RIGHT 11:34 04/07/87 )
- CODE ZR ( ICE>R
- IGHT) BLUE-Y LDA BLUE-GOALY-Y STA
- CLC 8 # ADC REDD-GOALY-Y STA CLC 8 # ADC PUC
- K-Y STABLUE-X LDA 7F # CMP CS
- NOTIF 80 # LDA LONG-ICE # LDY
- BLUE-GOALY-ALTER STAREDD-GOALY
- -ALTER STA PUCK-ALTER STA BLUE-GOALY-IMAGE
- # STY REDD-GOALY-IMAGE# STY PUCK-IMAGE
- # STY BLUE-X LDA SEC 74 # SBC BLUE-GOALY-X
- STA REDD-GOALY-X STA PUCK-X
- STA ELSE 81 # LDA SHORT-ICE # LDY
- BLUE-GOALY-ALTER STA
- REDD-GOALY-ALTER STA PUCK-ALTER STA
- BLUE-GOALY-IMAGE# STY REDD-GOA
- LY-IMAGE# STY PUCK-IMAGE# STY ( 83)
- BLUE-X LDASEC 8 # SBC BLUE-GOALY-X STA
- REDD-GOALY-X STA PUCK-X STA
- THEN ' (PLAYER-FRAME-DISPLAY)
- >BODY JSR NEXT JMP END-CODE
- ( SETUP-NET-ICE-RIGHT 14:11 05/12/87 )
- CODE SNIR ( SETUP-NET-ICE-RIGHT)
- BG-TOP-ICE LDA P6C1 STA P6C2
- STA P6C3 STA ( PAL 6)98 # LDA
- BLUE-GOALY-X STA REDD-GOALY-X
- STA PUCK-X STA 70 # LDA BLUE-GOALY-Y
- STA CLC 8 # ADC REDD-GOALY-Y STA
- CLC 8 # ADC PUCK-Y STA 81 # LDA
- BLUE-GOALY-ALTER STA REDD-GOALY-ALTER STA
- PUCK-ALTER STA NET-ICE # LDA BLUE-GOALY-IMAGE#
- STA REDD-GOALY-IMAGE# STA PUCK-IMAGE# STA
- ' (PLAYER-FRAME-DISPLAY) >BODY JSR NEXT JMP END-CODE
- ( SETUP-NET-ICE-LEFT 14:11 05/12/87 )
- CODE SNIL ( SETUP-NET-ICE-LEFT)
- BG-TOP-ICE LDA P6C1 STA P6C2 STA P6C3
- STA ( PAL 6)FC # LDA BLUE-GOALY-X STA
- REDD-GOALY-X STA PUCK-X STA
- 58 # LDA BLUE-GOALY-Y STA CLC 8 # ADC
- REDD-GOALY-Y STACLC 8 # ADC PUCK-Y
- STA 81 # LDA BLUE-GOALY-ALTER STA
- REDD-GOALY-ALTER STAPUCK-ALTER STA
- NET-ICE # LDA BLUE-GOALY-IMAGE# STA
- REDD-GOALY-IMAGE# STA
- PUCK-IMAGE# STA
- ' (PLAYER-FRAME-DISPLAY) >BODY JSR NEXT JMP END-CODE
- ( ZAMBONI-INIT 11:36 04/07/87 )
- CODE ZAMBONI-INIT
- ( ZAMBONI-X/ZAMBONI-Y --- )ZAM1 # LDA BLUE-IMAGE# STA
- NOS LDA BLUE-X STA TOS LDA BLUE-Y STA
- 8A # LDA BLUE-ALTER STA FELLA1 # LDA REDD-IMAGE#
- STA NOS LDA CLC 3 # ADC REDD-X STA
- TOS LDA CLC 6 # ADC REDD-Y STA
- 8B # LDA REDD-ALTER STA
- ' (PLAYER-FRAME-DISPLAY) >BODY JSR
- INX INX INX INX NEXT JMP END-CODE
- ( SCOREFLASH-PREP08:44 04/20/87 )
- : WAIT 50 0 DO 0 DROP LOOP SCOREFLASH-RTN ;
- CODE SCOREFLASH-PREP SCOREFLASH STY
- ( DELAY COUNTER ) SCORE1 1+ STY
- ( PHASE FLAG VIZ. ERASE OR DISPLAY)
- SCORE1 LDA SEC SCORE2 SBC SCORE1 STA
- ( WHO WON FLAG)0= IF NEXT JMP THEN
- 0< IF NUM2-N 1+ LDA SCORE2 STA NUM3-N
- 1+ LDA SCORE2 1+ STA ELSE NUM0-N 1+ LDA
- SCORE2 STA NUM1-N 1+ LDA SCORE2 1+ STA THEN NEXT JMP END-CODE
- ( SCOREFLASH-RTN 1/2 09:27 04/20/87 )
- CODE (SCOREFLASH-RTN) SCORE1 LDA 0= IF RTS
- THEN SCOREFLASH LDA 04 # CMP CS IF SCOREFLASH STY
- ELSE SCOREFLASH INC RTS THEN SCORE1 1+
- LDA 0= NOT IF SCORE1 1+ STY SCORE1 LDA 0<
- IF SCORE2 LDA NUM2-N 1+ STA SCORE2 1+ LDA
- NUM3-N 1+ STA84 # LDY NUM2-ASTY INY NUM3-ASTY
- ELSE SCORE2 LDA NUM0-N 1+ STA SCORE2 1+ LDA NUM1-N 1+ STA82 #
- LDY NUM0-ASTY INY NUM1-ASTY THEN
- ELSE DEY SCORE1 1+ STY SCORE1 LDA0<
- IF AA # LDA NUM2-N 1+ STA NUM3-N 1+ STA 84 #
- LDY NUM2-ASTY INY NUM3-ASTY
- ELSE AA # LDA NUM0-N 1+ STA NUM1-N 1+ STA 82
- # LDY NUM0-ASTY INY NUM1-ASTY THEN THEN
- ( SCOREFLASH-RTN 2/2 09:32 04/20/87 )
- DEX DL-TABLE-START >HI #LDA TOS STADEX DL
- -TABLE-START >LO #LDA TOS STADEX PLAYERS-ITAB
- >HI #LDA TOS STADEX PLAYERS-ITAB >LO #LDA TOS
- STADEX NUMBERS-ETAB >HI #LDA TOS STA
- DEX NUMBERS-ETAB >LO #LDA TOS STA BEGIN
- MSTAT BIT 0< UNTIL ( THEN WAIT FOR VBLANK )'
- (NEW-GRAPHICS) >BODY JMP ( N N N--) END-CODE
- CODE SCOREFLASH-RTN ' (SCOREFLASH-RTN) >BODY JSR NEXT JMP END-CODE
- DECIMAL
- ( REDO- ZAMBONI LOOP EXIT TO NEW GAME 1/2 15:25 06/09/87 )
- : WARM-RESET S0 @ SP! R0 @ RP! 0 SND?-FLAG C! INIT-SOUND 0
- SCORE1 ! 0 SCORE2 ! 0 SAVES1 ! 0 SAVES2 !
- 0 PLAYER1 !FLAG ( SKILL AND AUTOMATION STATE )( REMAIN UNCHANGED)
- BACKGROUND-INIT RED-CHECK MAIN-LOOP ;
- ( 19:22 08/29/87 )
- : ?REDO FB0 C@ FB1 C@ OR
- IF WARM-RESET THEN ;: CONSOLE-CHECK GETRAW ?RESET
- IF WARM-RESET THEN ?SELECT
- IF BEGIN GETRAW ?SELECT 0= UNTIL
- TITLE-UP WARM-RESET THENGETRAW ?PAUSE IF
- BEGIN GETRAW ?PAUSE 0= UNTIL ( DEBOUNCE )
- WORKAREA0 C@ -1 WORKAREA0 C! 0 AUDV0 C!
- ( AREA0 OFF) WORKAREA1 C@ -1
- WORKAREA1 C! 0 AUDV1 C! ( AREA1 OFF)
- BEGIN GETRAW ?SELECT IF BEGIN GETRAW ?SELECT 0= UNTIL
- TITLE-UP WARM-RESET THEN ?RESET
- IF WARM-RESET ( BYE) THEN ?PAUSE
- UNTIL ( PAUSE ) BEGIN GETRAW ?
- PAUSE 0= UNTIL WORKAREA1 C! WORKAREA0 C!
- THEN ( DEBOUNCE ) ;
- ( ZAMBONI-LOOP 1/2 16:00 04/07/87 )
- : ZAMBONI-LOOP SCORE
- FLASH-PREP PUCK-ERASE BLUE-GOALY-ERASE
- REDD-GOALY-ERASE BLUE-ERASE REDD-ERASE
- GAMEOVER-SIGN-ON4000 0 DO 0 DROP LOOP
- 09 40 ZAMBONI-INIT SNIR SNIL TURK-SND 2 0 DO65 0 DO FELLA1
- 2 0 ZAMBONI-MOVE ZR WAIT CONSOLE-CHECK ( NEXT-JOYS ) ?RED
- O LOOP ( I 0= IF TURK-SND THEN )FELLA2
- 0 0 ZAMBONI-MOVE WAIT WAIT 24 0 DO FELLA3
- 0 1 ZAMBONI-MOVE WAIT CONSOLE-CHEC
- K ( NEXT-JOYS) ?REDO LOOPFELLA4 0 0
- ZAMBONI-MOVE WAIT WAIT 65 0 DO FELLA5 -2 0
- ZAMBONI-MOVE ZL WAIT CONSOLE-CHECK( NEXT-JOYS )
- ?REDO LOOP FELLA4 0 0
- ZAMBONI-MOVE WAIT WAIT
- TURK-SND 24 0 DO FELLA3 0 1
- ZAMBONI-MOVE WAIT CONSOLE-CHECK ( NEXT-JOYS) ?REDO LOOPFELLA2 0 0
- ZAMBONI-MOVE WAIT WAIT LOOP
- ( ZAMBONI-LOOP 2/216:00 04/07/87 )
- 65 0 DO FELLA1 2 0
- ZAMBONI-MOVE ZR WAIT CONSOLE-CHECK
- ( NEXT-JOYS) ?REDO LOOP
- FELLA2 0 0 ZAMBONI-MOVE WAIT WAIT
- 24 0 DO FELLA3 0 1 ZAMBONI-MOVE
- WAIT CONSOLE-CHECK ( NEXT-JOYS)
- ?REDO LOOP FELLA4 0 0 ZAMBONI-MOVE
- WAIT WAIT 65 0 DO FELLA5 -2 0 ZAMBONI-MOVE ZL
- WAIT CONSOLE-CHECK( NEXT-JOYS) ?REDO LOOP ;
- CODE ?BONUS
- DEX TOS STY DEX TOS STY BONUS LDA 0=
- IF ( BONUS HASN'T BEEN GIVEN YET)
- SCORE1 LDA SCORE2 CMP 0= IF DEY TOS STY THEN ELSE BONUS STY THEN
- NEXT JMP END-CODE
- ( USER-CHOICE no exp/nov for 2-plr...jjt 09:57 08/27/87 )
- HEX CODE USER-CHOICE
- BG-FREE2 LDA( DY0 LDA DY1 ORA ) 1 # CMP 0=
- IF 1PLAYERB # LDA BLUE-IMAGE# STA
- ( two player ) 2PLAYERR # LDA REDD-IMAGE# STA
- EXPERTB # LDA BLUE-GOALY-IMAGE# STA ( turn off )NOVICEB # LDA
- REDD-GOALY-IMAGE# STA ( exp/novice)
- 0 # LDA PLAYER2 9 + STA 01 # LDA BG-FREE2 STA ELSE
- FF # CMP 0= IF1PLAYERR # LDA BLUE-IMAGE
- # STA ( one player)2PLAYERB # LDA REDD-IMAGE#
- STA2 # LDA PLAYER2 9 + STA FF # LDA BG-FREE2 STAEXP-NOV JSR
- THEN( DY=0) PLAYER2 9 + LDA 2 # CMP 0= IF EXP-NOV JSR
- THEN THEN
- ( USER-CHOICE CONT. REV. jjt 09:58 08/27/87 )
- 82 # LDA BLUE-ALTER STA 83 # LDA REDD-ALTER
- STA 85 # LDA BLUE-GOALY-ALTER STA 84 # LDA
- REDD-GOALY-ALTER STA
- ' (PLAYER-FRAME-DISPLAY) >BODY JSR NEXT JMPL
- : EXP-NOV BG-FREE3 LDA ( DX0 LDA DX1 ORA )
- L: LBL2 1 # CMP 0= IF NOVICEB #
- LDA REDD-GOALY-IMAGE# STA EXPERTR # LDA
- BLUE-GOALY-IMAGE# STA
- ( 3) 0 # LDA SKILL STA 01 # LDA BG-FREE3
- STA LBL1 JMP THEN FF # CMP 0= IF NOVICER #
- LDA REDD-GOALY-IMAGE# STAEXPERTB # LDA
- BLUE-GOALY-IMAGE# STA ( 6) 1 # LDA SKILL
- STA FF # LDA BG-FREE3 STA LBL1 JMP THEN SKILL
- LDA 0= IF 1 # LDA ELSE FF # LDA THEN LBL2 JMP
- L: LBL1 RTS END-CODE
- ( DEMO-LOOP ATARI00:38 02/05/87 )
- : DEMO-LOOP 1 SND?-FLAG C! DEMO-TIMER UPDATE-SCORE
- 200 0 DO 0 DROP LOOP BEGIN SERVE WHIZ-DONE OFF
- WHIZ-COUNT OFFBEGIN 1 CYCLE# +!
- WHIZ-COUNT @ 0= IF ( NEXT-JOYS )
- PLAYER1-PROCESS GOALIE1-PROCESS
- PLAYER2-PROCESS GOALIE2-PROCESS
- RANDOM-SOUNDS CHECK-PLAYER-PLAYER
- MOVE-PUCKTHEN WHIZ-COUNT
- C@ IF WHIZ ELSE CHECK-FOR-GOAL
- ANIMATOR UPDATE-TIMER UPDATE-SCORE
- THEN CONSOLE-C
- HECKWHIZ-DONE @ MIN-SEC-CHECK OR FB0 C@
- FB1 C@ OR OR UNTIL MIN-SEC-CHECK FB0 C@
- FB1 C@ OR OR UNTIL 0 SND?-FLAG C!
- INIT-SOUND ;
- ( DECIDE-SELECT 09:55 06/10/87 )
- ( PLAYER2 9+ = 2->ONE-PLAYER0->TWO-PLAYER )
- ( SKILL = 1->NOVICE 0->EXPERT )
- CODE DECIDE-SELECT PLAYER2 9 + LDA 0=
- IF SKILL LDA 0= IF ( 2PLAYER/EXPERT>1PLAYER/NOVICE)
- DEY DX0 STY DY0 STY
- ELSE ( 2PLAYER/NOVICE>2PLAYER/EXPERT)
- INY DX0 STY DY0 STY THEN ELSE SKILL LDA 0
- = IF ( 1PLAYER/EXPERT>2PLAYER/NOVICE) INY DY0 STY DEY DEYDX0 STY
- ELSE ( 1PLAYER/NOVICE>1PLAYER/EXPERT) DEY
- DY0 STY INY INYDX0 STYTHEN THEN NEXT JMP END-CODE
- ( TITLE-SELECT-BUTTON-RTN LIMITED-CONSOLE-09:20 06/10/87 )
- : LIMITED-CONSOLE-CHECK GETRAW ?PAUSE
- IF BEGIN GETRAW ?PAUSE 0= UNTIL
- ( DEBOUNCE ) WORKAREA0 C@ 0FF
- WORKAREA0 C! 0 AUDV0 C! ( AREA0 OFF)
- WORKAREA1 C@ 0FF WORKAREA1 C! 0 AUDV
- 1 C! ( AREA1 OFF) BEGIN GETRAW ?RESET IF -1 FB0 C!
- WORKAREA1 C! WORKAREA0 C!EXIT THEN
- ?PAUSE UNTIL ( PAUSE ) BEGIN GETRAW ?PAUSE 0= UNTIL
- WORKAREA1 C! WORKAREA0 C! THEN ( DEBOUNCE ) ?RESET FB0
- C! ;: TITLE-SELECT-BUTTON-RTN GETRAW ?SELECT IF BEGIN
- GETRAW ?SELECT 0= UNTIL ( DEBOUNCE ) DECIDE-SELECT THEN ;
- ( TITLE/DEMO-LOOP13:48 05/11/87 )
- : TITLE-RTN USER-CHOICE DY1 C@ DY0 C@ OR ?DUP
- IF BG-FREE2 C!
- THEN DX1 C@ DX0 C@ OR ?DUP IF BG-FREE3 C!
- THEN 0BEGIN ( NEXT-JOYS )
- ( TITLE-SELECT-BTN AFTER N-JOYS
- SINCE MODIFIES DX0/DY0)LIMITED-CONSOLE-CHECK
- USER-CHOICE 1+TITLE-SELECT-BUTTON-RTN
- DY1 C@ DY0 C@ OR ?DUP IF BG-FREE2 C!
- THEN DX1 C@ DX0 C@ OR ?DUP IF BG-FREE3 C! THEN
- DX0 C@ DY0 C@ OR DX1 C@ OR DY1 C@ OR
- IF DROP 0 THEN DUP 750 = FB0 C@ OR FB1 C@
- OR ?RESET OR UNTIL DROP ;
- ( TITLE SCREEN MANAGEMENT RTNS 14:49 04/17/87 )
- : DEMO-RTN FB0 C@ FB1 C@ OR ?RESET OR IF -1 EXIT
- THEN 0 SCORE1 ! 0 SCORE2 ! 0 SAVES1
- ! 0 SAVES2 ! 2 PLAYER1 !FLAG 2 PLAYER2
- !FLAG BACKGROUND-INIT RED-CHECK
- DEMO-LOOP 0 400 0 DO 0 DROP LOOP ;
- : TITLE-INIT 7B DUP BG-SCOREAREA C!
- BG-TOP-ICE C!GNE0 18 0F DL-INITGNE17 2 4 DL-INIT
- TITLE-ETAB-ROM PLAYERS-ETAB 30 PLAYERS-ETAB-INIT ;
- CODE FIRST-TITLE FF # LDA DY0 STA
- DX0 STA BG-FREE2 STA BG-FREE3 STA
- NEXT JMP END-CODE CODE REPEAT-TITLE BG-FREE2 LD
- A DY0 STA BG-FREE3 LDA DX0 STA
- NEXT JMP END-CODE
- ( RED-CHECK - DETERMINES RED/COMPUTER DISPLAY 12:23 04/17/87 )
- CODE RED-CHECK PLAYER2 9 +
- LDA 0= IFBEGIN MSTAT BIT 0< UNTIL
- ( THEN WAIT FOR VBLANK )VS-RED # LDA BLUE-IMAGE# STA
- 7C # LDA BLUE-X STA0E # LDA BLUE-Y STA
- 8D # LDA BLUE-ALTER STA
- ' (PLAYER-FRAME-DISPLAY) >BODY JSR
- THEN NEXT JMP END-CODE
- DECIMAL
- ( MAIN-LOOP ATARI rev. JJT 17:08 08/27/87 )
- : MAIN-LOOP TIMER-INITBEGIN UPDATE-SCORE 200 0 DO 0 DROP LOOP
- BEGIN WHIZ-DONE OFF WHIZ-COUNT OFF
- SERVE BEGIN CONSOLE-CHECK 1 CYCLE# +!
- WHIZ-COUNT C@ IF WHIZ ELSE PLAYER1-PROCESS GOALIE1-PROCESS
- PLAYER2-PROCESS GOALIE2-PROCESS
- CHECK-PLAYER-PLAYER MOVE-PUCK
- CHECK-FOR-GOAL ANIMATOR THEN
- UPDATE-TIMER UPDATE-SCORE RANDOM-SOUNDS
- WHIZ-DONE @ MIN-SEC-CHECK OR UNTIL
- BONUS C@ ( =20H IF OVERTIME) MIN-SEC-CHECK OR
- UNTIL ?BONUSIF OVERTIME-SIGN-ON
- OVERTIME-SND 30000 0 DO LOOP BONUS-INIT
- ELSE ENDGAME-SND ZAMBONI-LOOP TITLE-UP
- TIMER-INIT THENAGAIN ;
- ( HOCKEY22:45 02/07/87 )
- : FOREGRND-TASK 0 SND?-FLAG C! GRAPHICS-MODE
- INIT-SOUND TITLE-INIT FIRST-TITLE TITLE-RTN
- DEMO-RTN IF NEW-GAME ELSE TITLE-UP THEN ;
- : TITLE-UP 0 SND?-FLAG C! BEGIN INIT-SOUND TITLE-INIT
- REPEAT-TITLE TITLE-RTN DEMO-RTNUNTIL NEW-GAME ;
- : HOCKEY 0 SNd?-FLAG C! INIT-SOUND
- FANFARE-SNDBEGIN GETRAW ?RESET 0= UNTIL 0 SCORE1
- ! 0 SCORE2 ! 0 SAVES1 ! 0 SAVES2 ! 0
- PLAYER1 !FLAG BEGIN CONSOLE-CHECK
- WORKAREA1 C@ WORKAREA0 C@ AND 255 = UNTIL
- BACKGROUND-INIT RED-CHECK
- ( BEGIN-SNDS ) MAIN-LOOP ;
- ' HOCKEY main-loop !
- ' TITLE-UP select-rtn !
- ( ?DIFFR IF 0 ELSE 2 THEN PLAYER2 !FLAG )
- ( ?DIFFL IF 3 ELSE 6 THEN SKILL C!
- HIGHER IS MORE STUPID)
- ( LAST SCREEN--END OF MC ATARI 7800 23:52 05/22/86 )
- ' FOREGRND-TASK ' ABVAR >BODY !
- ( set the constant ABVAR )
- HEX ( reset bootup literals )( NMIRESET IRQ )
- FFF9 HERE - ALLOT 47 C,NMI ,
- ( VIDEO-INT-RTN )RESET , ( ORIGIN )
- IRQ , ( an RTI ) FF80 79 -1 FILLFORTH DEFINITIONS
- LATEST INIT-FORTH !THERE INIT-DP !
- ( X=14 SCOREBOARDA X=110 SCOREBOARDB)
|