Classic Computer Magazine Archive PROGRAM LISTING: 89-07/EXWALL.M65


���_
X;EXWALLX;BY JEFF & ANDY BARTON#X;(c)1989, ANTIC PUBLISHING INC.(�LIST2EI<	�LISTFIPZEKdxi�START.OF.CODEn!�INIT.1;;START PROGRAMsX;xX;VARIABLES AND EQUATES}X;��RTCLOK;;HI-MID-LOW BYTE��DELAY��PMBASEԑ�BASEp;;2K BOUNDARY�
�BASEMs
�BASEP0t��BASEP1u�X;��HPOSP0Я�HPOSP1д�HPOSM0й�HPOSM1о�COLPM0�;;+1,2,3��COLPF0�;;+1,2,3,4��FLASHWALL�COLPF0��COLOR���SVCOLOR��X;�X;COLLISION REGISTERS��M0PF���M1PF���P0PF���P1PF��M0PL��M1PL	��P0PL��HITCLR�	X;�AUDF��AUDC�X;�IOCB@"�CIOVV�'�IOCOM,
�PUTCHR1
�GETCHR6�GRACTL�;�DMACTL/@X;E
�TRIG0�J
�TRIG1�O�STICK0xT�STICK1yYX;^
�VPOSP0c�PREVPOSP0h�SHDHPOSP0m�PREHPOSP0r
�VPOSP1w�PREVPOSP1|�SHDHPOSP1��PREHPOSP1�
�VPOSM0��SHDHPOSM0�
�VPOSM1��SHDHPOSM1�
�WALLX0�
�WALLY0�
�WALLX1�
�WALLY1��HORDIR0;;HOR. DIRECTION��HORDIR1;;VALUES 1,0,-1��VERDIR0;; 1,0,-1��VERDIR1;; 1,0,-1�X;��EX0;;COUNT EXPLOSION��EX1;;SIZE�=�SKM0;;USED IN MISSLE                         EXPANSION�=�SKM1;;USED IN MISSLE                         EXPANSION��EXP;;PENETRATION�X;��HITP0;;<>0=HIT,COUNT�C�HITP1;;CHANGE COLOR &                         INHIBIT JSTICK�X;��FIRE0;;1=ON 2=EXPLODE��FIRE1�X;�BUILD0;;<>1=NO 1=OK TO�BUILD1;;BUILD
�BUILDCOUNT0;;<>0 ENABLES�BUILDCOUNT1;;1-5 BLOCKS�SECONDLAYER0;;0=LAYER 1�SECONDLAYER1;;1=LAYER 2!X;&�MONLYMOVE;;0-3 START @ 3+X;0
�TOPLIM 5�ROUND:
�BOTLIM�?
�LLIMIT0D
�LLIMP1PI
�RLIMP0�N
�RLIMM0�S
�RLIMIT�X
�EXLIM0]
�EXLIM1bX;g�TEMPl�TEMP2q�TEMP3v�TEMP4{�TEMP5��ZTEMP΅X;�
�SCORE0�
�SCORE1�X;��VOL0��VOL1��WAIT0��WAIT1��WAITLIM�X;�
�TXROW��
�TXCOL���STRBUF�BASE�X;��FR0�;;FLOAT POINT NUM�;�FASC��;;F.P. TO ASCII                          STRING��IFP��;;INTEGER TO F.P.��INBUF�;;POINT TO STRING�X;�EI�X;�X;        MACROS�X;�CLEAR.PAGE X;%1 - START ADDRESSX;%2 - # OF PAGES$Q>.
P�ZTEMP8Q>B
P�ZTEMPL$>V
 �CPSUB`jX;t
�PLOT ~$�%�Q>�PUTCHR�
P�IOCOM�
 �IOSUB��X;��DRAWTO �$�%� �DRAWSUB��X;�COLOR 
Q>(Q2<
P�COLORFZX;d�HIT.WALL nX;%1 - (0-1) PLAYER#xC�COLOR ;;SET TO BKGRND                          TO ERASE WALL�
��SET.X.Y.MISSLE �
&�TEMP3�
'�TEMP4� �HIT.SUB�Q�EX0�	F�HW.1�X;�Q>�R�EX0;;LIMIT EX�	D�HW.1�X;�P�EXLIM0;;SHORTEN EX�E�HW.1.1�X;��HW.1 �M0.OFF
�HW.1.1"�SET.X.Y.MISSLE ,
&�TEMP36
'�TEMP4@ �HIT.SUBJQ�EX1T	F�HW.1YX;^Q>hR�EX1;;LIMIT EXr	D�HW.1wX;|P�EXLIM1;;SHORTEN EX�E�HW.1.1�X;��HW.1� �M1.OFF�
�HW.1.1���X;��CLEAR.MISSLE �X;%1 - VPOSM(0-1)�X;%2 - MISSLE DATA�X;%3 - EX(0-1)�Q>�
P�TEMP2QP�TEMP;;LOOP COUNT,&O0 �CLR.M.SUB:DX;N�FLASH XX;%1 - COLP(0-1)b,lQv �FLASH.SUB�P��X;��MOVE.PLAYER �X;%1 - (0-1) [PLAYER #]�X;%2 - HORDIRP(0-1)�X;%3 - VERDIRP(0-1)�<X;%4 - IF USED, TOGGLES                       LIMIT CHECK�Q�F�MP.VERT�X;�
�I�MP1;; RIGHT�X;�$�SHDHPOSP0
(�LLIMITF�MP.VERTX; *&�PREHPOSP04"�SHDHPOSP0;; MOVE LEFT>Q�SHDHPOSP0HP�HPOSP0R!�MP.VERT\�MP1f$�SHDHPOSP0p
z(�RLIMP0�F�MP.VERT�X;��&�PREHPOSP0�#�SHDHPOSP0;; MOVE RIGHT�Q�SHDHPOSP0�P�HPOSP0��I�MP2;; RIGHT�X;�$�SHDHPOSP1�
�(�LLIMP1�F�MP.VERT�X;�	&�PREHPOSP1	"�SHDHPOSP1;; MOVE LEFT	Q�SHDHPOSP1$	P�HPOSP1.	!�MP.VERT8	�MP2B	$�SHDHPOSP1L	
V	(�RLIMIT`	F�MP.VERTe	X;j	t	&�PREHPOSP1~	#�SHDHPOSP1;; MOVE RIGHT�	Q�SHDHPOSP1�	P�HPOSP1�	�	�MP.VERT�	Q�	H�MP.VERT.1�	X;�	!�MP.END�	X;�	
�MP.VERT.1�	
�	
I�MP.UP�	X;�	%�VPOSP0�	

)�BOTLIM

F�MP.END
X;

'�PREVPOSP0(
#�VPOSP0;; DOWN2
!�MP37
X;<
	�MP.UPF
%�VPOSP0P

Z
)�TOPLIMd
F�MP.ENDi
X;n
x
'�PREVPOSP0�
"�VPOSP0;; UP�
�MP3�
 �VERT.DRAW.P0�
X;�
�
I�MP1.UP�
X;�
%�VPOSP1�

�
)�BOTLIM�
F�MP.END�
X;�
�
'�PREVPOSP1�
#�VPOSP1;; DOWN!�MP4	X;
�MP1.UP%�VPOSP1"
,)�TOPLIM6F�MP.END;X;@J'�PREVPOSP1T"�VPOSP1;; UP^�MP4h �VERT.DRAW.P1r|
�MP.END��X;��SET.X.Y.WALL �HX;             CONVERT                  P/M COORDINATES -> SCREEN X,Y�$X;& PUT VALUES IN X & Y REGISTERS�X;%1 - (0-1) PLAYER'S #�X;�$>�
�:Q�DATAP09;;HEIGHT OF                             PLAYER�V?;;DIVIDE BY 2�,�9O�VPOSP0;;MIDDLE OF                             PLAYER�	P�TEMPQ�SHDHPOSP0,O>;;2 SPACE INFRONT& �SETXY.SUB0:Q�DATAP19;;PLAYER HEIGHTDV?;;DIVIDE BY 2N,XO�VPOSP1;;MID OF PLAYERb	P�TEMPlQ�SHDHPOSP1v;�S>;;2 SPACE INFRONT� �SETXY.SUB���X;��SET.X.Y.MISSLE �HX;             CONVERT                  P/M COORDINATES -> SCREEN X,Y�$X;& PUT VALUES IN X & Y REGISTERS�X;%1 - (0-1) MISSILE'S #�X;�
�Q�VPOSM0�>�;
S�EX0;;NO EFFECT IF =0
	P�TEMP
A 
,*
O�EX04
 �SETXY.SUB.1>
'�TEMP2H
#�SHDHPOSM0R
Q�SHDHPOSM0\
"�SHDHPOSM0f
 �SETXY.SUBp
z
Q�VPOSM1�
>�
;�
S�EX1�
	P�TEMP�
A�
,�
O�EX1�
 �SETXY.SUB.1�
'�TEMP2�
Q�SHDHPOSM1�
 �SETXY.SUB�
�
X;�?WALL X;IS THERE A WALL HERE?$X;%1 - WALLX(0-1).X;%2 - WALLY(0-1)8X;%3 - JUMP LABLEBX;%4 - PLAYER #L$V%`Q>�GETCHRj
P�IOCOMt
 �IOSUB~R>;;WALL COLOR�
�	H�WL.0�X;�!��WL.0� �B0.SUB2��	H�WL.1�X;�!��WL.1� �B1.SUB2��X;
�EXPAND.MISSILE X;%1 - (0-1) MISSILE #
(Q�EX02
P�TEMP2<V?F
E�EM0.0KX;PQ�VPOSM0Z	P�TEMPdQ>n
P�TEMP4xT?�
P�TEMP3�
 �EX.M.SUB�#�EX0�#�EX0�	�EM0.0�#�EX0��Q�EX1�
P�TEMP2�V?�
E�EM1.0�X;�Q�VPOSM1�	P�TEMP�Q>
P�TEMP3T?
P�TEMP4"
 �EX.M.SUB,#�EX16#�EX1@	�EM1.0E#�EX1JT^X;h�CENTER.M rX;%1 - MISSILE #(0-1)|$>�
�Q�DATAP09�	V?;;/2�,�O�VPOSP0�P�VPOSM0��Q�DATAP19�V?�,�O�VPOSP1�P�VPOSM1�?X;&�CHECK.STICK 0X;%1 - (0-1) PLAYER #: �CHECK.STICK.SUBD
N
D�CS.5ASX;X%>b'�TEMP2;; LEFTl
#�TEMP3v	�CS.5A�W?�	D�CS.6�X;�%>�'�TEMP2;; RIGHT�
&�TEMP3��
D�CS.5B�X;�%>�'�TEMP2;; LEFT�
&�TEMP3�	�CS.5B�W?�	D�CS.6�X;%>'�TEMP2;; RIGHT
#�TEMP3 *�CS.64>X;H�SOUND RX;%1 %2 %3 %4 SAME AS BASIC\ �SOUND.SUBf$>p
�zQ��Q>��
P�AUDF9�
��Q��Q>��,�O>�
P�AUDC9�X;	�POS !X;%1,%2 = X,Y POS. TEXT WINDOW$Q>.
P�TXCOL8Q>B
P�TXROWLVX;`�PRINT jX;%1 = STRING TO PRINTt!
yX;~�STR��
Q>4�STR�
P�ZTEMP�
Q>5�STR�
P�ZTEMP�%>;; STRING LENGTH� �PRINT.SUB��X;��PRINT.NUM �X;%1 = VARIABLE�X;SET POS FIRST�QP�FR0
Q>P�FR0 �PRINT.NUM.SUB(2X;'X;'X;INITIALIZE$'X;L'
�INIT.1V'Q>�ROUND1�`'
P�RDOFFSETj'Q>�ROUND1t'P�RDOFFSET~'X;�'X;INITIALIZE ROUNDS�'X;�'�INIT.ROUND�'X;�'
X;CLOSE #6�'$>`�'Q>;;CLOSE�'
P�IOCB9�'	 �CIOV�'
X;GR. 5�'$>`�'
Q>;;GR.5(
P�IOCB9
(Q>(
P�IOCB
9(Q>�SCREEN�((
P�IOCB92(Q>�SCREEN<(
P�IOCB9F(Q>P(
P�IOCB9Z(Q>d(
P�IOCB	9n(
Q>;;OPENx(
P�IOCB9�(	 �CIOV�(X;�(X;SET P/M BASES�(X;�(Q>�BASE�(P�PMBASE�(Q>�(P�GRACTL�(Q>>�(P�DMACTL�(X;�(P�;;CURSOR OFF�(Q>)PR;;RH TEXT MARGIN)X;)X;PRINT TITLES")X;,)�POS =6)�PRINT A�A@)�POS =J)_�PRINT A� EXWALL     PLAYER 1     ZONE       PLAYER 2    AT)�POS =^))�PRINT A
<- RANK ->            Ah)X;r)X;SOUNDS OFF|)$>�)Q>�)�SF�)
P�AUDF9�)0�)I�SF�)X;�)X;CLEAR P/M AREA�)X;�)�CLEAR.PAGE �BASEM=�)X;�)X;CLEAR HIT REGISTERS�)X;�)P�HITCLR�)X;*X;DRAW SCREEN*X;*
#�ROUND&*X;0*�R1.05*%>:*X;D* �RDOFFSET.TO.ZTEMPN*�COLOR ;;WATERX*
 �DRAW.SUBb*X;l* �INC.ZTEMPv*�COLOR ;;WALLS�*
 �DRAW.SUB�*X;�* �INC.ZTEMP�*Q@�ZTEMP7�*P�SHDHPOSP0�*P�HPOSP0�* �INC.ZTEMP�*Q@�ZTEMP7�*P�SHDHPOSP1�*P�HPOSP1�* �INC.ZTEMP�*Q@�ZTEMP7�*P�VPOSP0+ �INC.ZTEMP+Q@�ZTEMP7+P�VPOSP1 +; �INC.ZTEMP;;POINT TO NEXT                         ROUND*+ �ZTEMP.TO.RDOFFSET4+X;>+X;LOAD PLAYER DATAH+X;R+Q>�;;GREEN\+P�COLPM0f+Q>X;;PURPLEp+P�COLPM0z+ �VERT.DRAW.P0�+ �VERT.DRAW.P1�+X;�+�POS =�+�PRINT.NUM �ROUND�+�POS =�+�PRINT.NUM �SCORE0�+�POS =�+�PRINT.NUM �SCORE1�+X;�+X;      MAIN PROGRAM LOOP�+X;,X;TIMER ROUTINE$,X;.,�TIME.DELAY8,Q�RTCLOK;;JIFFSB,
R�DELAYL,?D�TIME.DELAY;;LOOP UNTIL                             TIME UPV,Q>`,P�RTCLOK;;RESET CLOCKj,"�MONLYMOVE;;MISSILE MOVESt,I�HIT?;;4X FOR EACHy,X;~,Q>;;PLAYER MOVE�,=P�MONLYMOVE;;=0 PLAYER CAN                            MOVE�,�HIT?�,Q�P0PF;;PLAYER -> WALL�,	F�H1.1�,X;�,Q�HORDIR0�,	F�H0.1�,X;�,8N>�;;REVERSE                               DIRECTION�,P�HORDIR0�,�H0.1�,Q�VERDIR0�,	F�H0.2�,X;�,N>��,P�VERDIR0-�H0.2-%�MOVE.PLAYER =�HORDIR0=�VERDIR0
-Q>-P�HORDIR0-P�VERDIR0(-�H1.12-Q�P1PF;;PLAYER -> WALL<-	F�H2.1A-X;F-Q�HORDIR1P-	F�H1.2U-X;Z-8N>�;;REVERSE                               DIRECTIONd-P�HORDIR1n-�H1.2s-Q�VERDIR1x-	F�H1.3}-X;�-N>��-P�VERDIR1�-�H1.3
-%�MOVE.PLAYER =�HORDIR1=�VERDIR1�-Q>�-P�HORDIR1�-P�VERDIR1�-�H2.1�-Q�M0PF;;MISSLE -> WALL�-M>;; IGNORE WATER�-	F�H2.2�-�SOUND =(==�-#�HIT.WALL =�SHDHPOSM0=�VPOSM0�-�H2.2.Q�M1PF;;MISSLE -> WALL.M>;; IGNORE WATER.	F�H3.1.X;".�SOUND =(==,.#�HIT.WALL =�SHDHPOSM1=�VPOSM16.�H3.1@.Q�M0PL;MISSLE -> PLAYERJ.M>T.	F�H4.1Y.X;^.X;PLAYER EXPLODING ROUTINEh.#�SCORE0r. �M0.OFF|. �STOP.BUILD1.1�.
#�HITP1�.X;�.�H4.1�.Q�M1PL;;MISSLE -> PLAYER�.M>�.	F�H4.2�.X;�.#�SCORE1�. �M1.OFF�. �STOP.BUILD0.1�.
#�HITP0�.X;�.�H4.2/Q�P0PL;;PLAYER <--> PLAYER/	F�H5.1/X;/ �STOP.BUILD0.1&/ �STOP.BUILD1.10/
#�HITP0:/
#�HITP1D/X;N/�H5.1X/
Q�HITP0b/	F�H6.1g/X;l/�FLASH �COLPM0v/
#�HITP0�/
Q�HITP0�/V?�/M>�/N>�/	P�TEMP�/�SOUND =A==�TEMP�/Q>_;; LIMIT OF FLASHING�/
R�HITP0�/E�H6.1;; >= HITP0�/Q>�/
P�HITP0�/�CLEAR.PAGE �BASEP0=�/
Q�HITP10H�H6.1;;P1 EXPLODING0 �M1.OFF0 �STOP.BUILD1.10!�END.OF.ROUND 0�H6.1*0
Q�HITP140F�CLEAR.HIT>0�FLASH �COLPM0H0
#�HITP1R0
Q�HITP1\0V?f0M>p0N>z0	P�TEMP�0�SOUND =<==�TEMP�0Q>_;; LIMIT OF FLASHING�0
R�HITP1�0E�CLEAR.HIT;; >= HITP1�0Q>�0
P�HITP1�0�CLEAR.PAGE �BASEP1=�0
Q�HITP0�0H�CLEAR.HIT;; P0 EXPLODING�0 �M0.OFF�0 �STOP.BUILD0.1�0!�END.OF.ROUND�0X;�0
�CLEAR.HIT1P�HITCLR1X;1X;$1X;^^^^^ CHECK BUTTONA ^^^^^.1X;81
�BUTTON1.1B1
Q�WAIT0L1
F�BT1.1V1
"�WAIT0`1
!�BT2.1j1	�BT1.1t1
Q�HITP0~1H�BT2.1;;CAN'T FIRE WHEN HIT�1Q�EX0�1
H�BT2.1�1
Q�TRIG0�1H�BT2.1;; NOT PRESSED�1
Q>�WAITLIM�1
P�WAIT0�1
Q�FIRE0�1
H�BT1.2�1
#�FIRE0�1Q>�1	P�VOL0�1
!�BT2.12	�BT1.2
2	Q>�EXP2P�SKM0;;PENETRATION OF EXPLO2#�EX0;;SET MISSLE EXPLOTION(2Q>
22	P�VOL0<2	�BT2.1F2
Q�WAIT1P2F�BT2.1.1Z2
"�WAIT1d2	!�M0.0n2�BT2.1.1x2
Q�HITP1�2H�M0.0;;CAN'T FIRE WHEN HIT�2Q�EX1�2	H�M0.0�2
Q�TRIG1�2H�M0.0;; NOT PRESSED�2
Q>�WAITLIM�2
P�WAIT1�2
Q�FIRE1�2
H�BT2.2�2
#�FIRE1�2Q>�2	P�VOL1�2	!�M0.0�2X;3	�BT2.23	Q>�EXP3P�SKM1;;PREPAR OF EXPLOSO"3#�EX1;;SET MISSLE EXPLOTION,3Q>
63	P�VOL1T3X; MOVE MISSILE ROUTINEh3�M0.0r3
Q�FIRE0|3
H�M0.01�3X;�3	!�M1.0�3X;�3	�M0.01�3R>�3	H�M0.1�3X;�3Q�SHDHPOSP0�3,�3O>�3P�SHDHPOSM0�3�CENTER.M �3Q>�3L�BASEM8�3P�BASEM8�3
#�FIRE04�M0.14#�SHDHPOSM04%�SHDHPOSM0&4	'�TEMP04�SOUND =�TEMP==�VOL0:4'�HPOSM0D4)�RLIMM0N4	D�M0.2S4X;X4 �M0.OFFb4	!�M1.0g4X;l4�M0.2v4Q�EX0�4	F�M1.0�4X;�4R�EXLIM0�4
D�M0.21�4X;�4 �M0.OFF�4	!�M1.0�4X;�4	�M0.21�4	"�SKM0�4	H�M1.0�4X;�4	Q>�EXP�4	P�SKM0�4�EXPAND.MISSILE �4X;�4�M1.05
Q�FIRE15
H�M1.015X;5!�CK.M.ONLY5X; 5	�M1.01*5R>45	H�M1.195X;>5%�SHDHPOSP1H51R5'�SHDHPOSM1\5�CENTER.M f5Q>p5L�BASEM8z5P�BASEM8�5
#�FIRE1�5�M1.1�5"�SHDHPOSM1�5%�SHDHPOSM1�5C�5N>��5	P�TEMP�5�SOUND =�TEMP==�VOL1�5'�HPOSM1�5)�LLIMIT�5	E�M1.2�5X;�5 �M1.OFF�5!�CK.M.ONLY6X;6�M1.26Q�EX16F�CK.M.ONLY6X;$6R�EXLIM1.6
D�M1.2136X;86 �M1.OFFB6!�CK.M.ONLYG6X;L6	�M1.21V6	"�SKM1`6H�CK.M.ONLYe6X;j6	Q>�EXPt6	P�SKM1~6�EXPAND.MISSILE �6X;�6
�CK.M.ONLY�6Q�MONLYMOVE;;MISSLE MOVES�6F�CHECK.STICK0�6X;�6!�TIME.DELAY�6X;�6�CHECK.STICK0�6Q>�6$>��6%�BUILD0�6)>7	F�S0.17X;
7P�BUILD07�S0.17%�HITP0;;CAN'T MOVE IF HIT(7H�S0.1.1-7X;27Q><7N�STICK0F7H�S0.2;;MOVEMENT DETECTEDK7X;P7
�S0.1.1Z7P�VERDIR0d7P�HORDIR0n7$�BUILD0x7H�S0.1.2}7X;�7�SOUND ===�7
�S0.1.2�7!�CHECK.STICK1
7X;�7�S0.2�75�7A�75�7�SOUND =�==�77�7>�77�7%>�7	'�TEMP8
'�TEMP28%�BUILD08
'�TEMP3"8�CHECK.STICK ,8	Q�TEMP68P�VERDIR0@8
Q�TEMP2J8P�HORDIR0T8
Q�TEMP3^8P�BUILD0h8R>r8F�CHECK.STICK1w8X;|8Q�BUILDCOUNT0�8F�CHECK.STICK1�8X;�8 �STOP.BUILD0�8X;�8�CHECK.STICK1�8Q>�8$>��8%�BUILD1�8)>�8	F�S1.1�8X;�8P�BUILD1�8�S1.1�8%�HITP1;;CAN'T MOVE IF HIT�8H�S1.1.19X;9Q>9N�STICK19H�S1.2;;MOVEMENT DETECTED!9X;&9
�S1.1.109P�VERDIR1:9P�HORDIR1D9$�BUILD1N9H�S1.1.2S9X;X9�SOUND ===b9
�S1.1.2l9
!�MP0.0q9X;v9�S1.2�95�9A�95�9�SOUND =�==�97�9>�97�9%>�9	'�TEMP�9
'�TEMP2�9%�BUILD1�9
'�TEMP3�9�CHECK.STICK :	Q�TEMP:P�VERDIR1:
Q�TEMP2 :P�HORDIR1*:
Q�TEMP34:P�BUILD1>:R>H:
F�MP0.0M:X;R:Q�BUILDCOUNT1\:
F�MP0.0a:X;f: �STOP.BUILD1p:X;�:X; MOVE PLAYER ROUTINE�:	�MP0.0�:(�MOVE.PLAYER =�HORDIR0=�VERDIR0=�:	�MP1.0�:(�MOVE.PLAYER =�HORDIR1=�VERDIR1=�:X;�:X; BUILD WALLS  ROUTINE�:�B0.0�:Q�BUILD0�:R>;
F�B0.01;X;;	!�B1.0;X;;	�B0.01;�SOUND =<==$;$�WALLX0.;
H�B0.02/;X;8;Q>B;P�BUILDCOUNT0L;�SET.X.Y.WALL V;&�WALLX0`;'�WALLY0j;	�B0.02t;Q>~;R�BUILDCOUNT0�;	H�B0.1�;X;�;T�BUILDCOUNT0�;#�?WALL �WALLX0=�WALLY0=�B0.1=�;	!�B1.0�;X;�;�B0.1�;Q>�;R�BUILDCOUNT0�;	H�B0.2�;X;�;T�BUILDCOUNT0�; �B0.SUB1�;"�WALLY0�;#�?WALL �WALLX0=�WALLY0=�B0.2=<	!�B1.0<X;
<�B0.2<Q><R�BUILDCOUNT0(<	H�B0.3-<X;2<T�BUILDCOUNT0<< �B0.SUB1F<#�WALLY0P<#�WALLY0Z<#�?WALL �WALLX0=�WALLY0=�B0.3=d<	!�B1.0j<X;n<�B0.3x<Q>�<R�BUILDCOUNT0�<	H�B0.4�<X;�<T�BUILDCOUNT0�< �B0.SUB1�<"�WALLY0�<"�WALLY0�<"�WALLY0�<#�?WALL �WALLX0=�WALLY0=�B0.4=�<	!�B1.0�<X;�<�B0.4�<Q>�<R�BUILDCOUNT0�<	H�B0.5�<X;=T�BUILDCOUNT0= �B0.SUB1=#�WALLY0"=#�WALLY0,=#�WALLY06=#�WALLY0@=#�?WALL �WALLX0=�WALLY0=�B0.5=J=	!�B1.0O=X;T=�B0.5^= �B0.SUB1h=Q�SECONDLAYER0r=	H�B0.6w=X;|=#�SECONDLAYER0�="�WALLX0�="�WALLY0�="�WALLY0�=Q>�=P�BUILDCOUNT0�=	!�B1.0�=X;�=�B0.6�= �STOP.BUILD0�=X;�=�B1.0�=Q�BUILD1�=R>�=
F�B1.01�=X;>!�B2
>X;>	�B1.01>�SOUND =<==&>$�WALLX10>
H�B1.025>X;:>Q>D>P�BUILDCOUNT1N>�SET.X.Y.WALL X>&�WALLX1b>'�WALLY1l>	�B1.02v>Q>�>R�BUILDCOUNT1�>	H�B1.1�>X;�>T�BUILDCOUNT1�>#�?WALL �WALLX1=�WALLY1=�B1.1=�>!�B2�>X;�>�B1.1�>Q>�>R�BUILDCOUNT1�>	H�B1.2�>X;�>T�BUILDCOUNT1�> �B1.SUB1�>"�WALLY1�>#�?WALL �WALLX1=�WALLY1=�B1.2=?!�B2?X;?�B1.2?Q> ?R�BUILDCOUNT1*?	H�B1.3/?X;4?T�BUILDCOUNT1>? �B1.SUB1H?#�WALLY1R?#�WALLY1\?#�?WALL �WALLX1=�WALLY1=�B1.3=f?!�B2k?X;p?�B1.3z?Q>�?R�BUILDCOUNT1�?	H�B1.4�?X;�?T�BUILDCOUNT1�? �B1.SUB1�?"�WALLY1�?"�WALLY1�?"�WALLY1�?#�?WALL �WALLX1=�WALLY1=�B1.4=�?!�B2�?X;�?�B1.4�?Q>�?R�BUILDCOUNT1�?	H�B1.5@X;@T�BUILDCOUNT1@ �B1.SUB1@#�WALLY1$@#�WALLY1.@#�WALLY18@#�WALLY1B@#�?WALL �WALLX1=�WALLY1=�B1.5=L@!�B2Q@X;V@�B1.5`@ �B1.SUB1j@Q�SECONDLAYER1t@	H�B1.6y@X;~@#�SECONDLAYER1�@#�WALLX1�@"�WALLY1�@"�WALLY1�@Q>�@P�BUILDCOUNT1�@!�B2�@X;�@�B1.6�@ �STOP.BUILD1�@�B2�@!�TIME.DELAY�@X;
A�END.OF.ROUNDA%>A �RDOFFSET.TO.ZTEMP(AQ@�ZTEMP72AR>�<AH�ER1;;MORE ROUNDSAAX;FA'�ROUND;; RESETPAQ>�ROUND1�ZA
P�RDOFFSETdAQ>�ROUND1nAP�RDOFFSETxA�ER1�A!�INIT.ROUND�AX;�A�SCREENA�S:A�AX; NX;SUBROUTINES>N	�CPSUBHN%>RN�CPS.1P@�ZTEMP7\N3fN
H�CPS.1kNX;pN0zN
H�CPS.2NX;�N:�N�CPS.2#�ZTEMP�N
!�CPS.1�NX;�N
�INC.ZTEMP�N
#�ZTEMP�N
H�IT1.1�NX;�N
#�ZTEMP�N
�IT1.1:�NX;�N�SET.UP.PLOT�N �INC.ZTEMP�NQ@�ZTEMP7O	P�TEMPO �INC.ZTEMPOQ@�ZTEMP7$O
P�TEMP2.O:8OX;BO�VERT.DRAW.P0LO%>VO!Q�DATAP08;; # OF BYTES TO LOAD`O?jO$�VPOSP0;; OFFSET FROM BASEtO	�VD1.0~OQ�DATAP08�OP�BASEP09�O2�O1�O
H�VD1.0�OX;�O:�OX;�O�VERT.DRAW.P1�O%>�O!Q�DATAP18;; # OF BYTES TO LOAD�O?�O$�VPOSP1;; OFFSET FROM BASE�O	�VD1.1PQ�DATAP18
PP�BASEP19P2P1(P
H�VD1.1-PX;2P:<PX;FP	�IOSUBPP'T;; ROWCRSZP&U;; COLCRSdPQ>nPPV;; MSB COLCRSxP$>`�PP�IOCB9;;BUFF LENGTH�PP�IOCB	9;; "     "�PQ�IOCOM;;PUTCHR / GETCHR�P
P�IOCB9�PQ�COLOR;; PLAYFIELD #�P	 �CIOV�P:�PX;�P�DRAWSUB�P
Q�COLOR�P!P�SVCOLOR;; COLOR TO DRAW WITH�PQT�PPZ;;OLD ROWCRSQ"UQQUQP[;;OLD COLCRS"Q'T;;ROWCRS,Q&U;;COLCRS6QQ>@QPV;;MSBJQ$>`;;IOCB #6TQ
Q>;;DRAW^Q
P�IOCB9hQ	 �CIOVrQ:|QX;�Q
�M0.OFF�Q�SOUND ===�Q!�CLEAR.MISSLE �VPOSM0=�=�EX0�Q�M0.OFF.1�QQ>�QP�SHDHPOSM0�QP�HPOSM0�Q
P�FIRE0�QP�EX0�Q	P�SKM0�QQ>�QP�EXLIM0�Q:RX;R
�M1.OFFR�SOUND ===&R!�CLEAR.MISSLE �VPOSM1=�=�EX10R�M1.OFF.1:RQ>DRP�SHDHPOSM1NRP�HPOSM1XR
P�FIRE1bRP�EX1lR	P�SKM1vRQ>�RP�EXLIM1�R:�RX;�R
�CLR.M.SUB�R>�RT�TEMP;;COUNT * 2�R�CM.1�RQ�BASEM9�R
M�TEMP2�RP�BASEM9�R0�R	"�TEMP�R	I�CM.1�RX;S:SX;S
�FLASH.SUB SO>;;INC HUE*S	P�TEMP4SM>;;GET LUMIN.>S
F�FL1.1CSX;HSQ>�RSM�TEMP;;INVERT LUMIN.\S:aSX;fS	�FL1.1pSQ>zSL�TEMP;;INVERT LUMIN.�S:�SX;�S�CHECK.STICK.SUB�SW?�S	D�CS.3�SX;�S%>�S
'�TEMP;;UP�S
&�TEMP3�S�CS.3�SW?�S	D�CS.4�SX;�S%>�S'�TEMP;; DOWNT
&�TEMP3T�CS.4TW?$T:.TX;8T
�SETXY.SUBBT;LTS>0;;START OF SCREEN LEFTVTV?;;DIV BY 2`T>;;= SCREEN X COORDINATEjT	Q�TEMPtT�SETXY.SUB.1~T;�TS> ;;START OF SCREEN TOP�TV?;;DIV BY 4�TV?�TR>2;;IF OFF TOP�TD�SETXY.SUB.2;;OF SCREEN�TX;�TQ>;;SET TO = 0�T�SETXY.SUB.2�T?;;= SCREEN Y COORDINATE�T:�TX;�T�B0.SUB1�T
�COLOR U�PLOT �WALLX0=�WALLY0
U:UX;U�B0.SUB2(U
�COLOR 2U�PLOT �WALLX0=�WALLY0<U:FUX;PU�B1.SUB1ZU
�COLOR dU�PLOT �WALLX1=�WALLY1nU:xUX;�U�B1.SUB2�U
�COLOR �U�PLOT �WALLX1=�WALLY1�U:�UX;�U�EX.M.SUB�UX;X     = EX(0-1)�UX;TEMP  = VPOSM(0-1)�UX;TEMP3 = MISSILE SHAPE DATA�UX;TEMP4 = MISSILE SHAPE DATA�UX;�U	Q�TEMP�U;V
S�TEMP2V?V
Q�TEMP4"VL�BASEM8,VP�BASEM86V3@V3JV
Q�TEMP3TVL�BASEM8^VP�BASEM8hVX;rV	Q�TEMP|V,�V
O�TEMP2�V?�V
Q�TEMP4�VL�BASEM8�VP�BASEM8�V1�V1�V
Q�TEMP3�VL�BASEM8�VP�BASEM8�V:�VX;�V�RDOFFSET.TO.ZTEMPW
Q�RDOFFSETW
P�ZTEMPWQ�RDOFFSET&W
P�ZTEMP0W::WX;DW�ZTEMP.TO.RDOFFSETNW
Q�ZTEMPXW
P�RDOFFSETbW
Q�ZTEMPlWP�RDOFFSETvW:�WX;�W�STOP.BUILD0�W �B0.SUB1�W�STOP.BUILD0.1�W�SOUND ===�W%>�W'�WALLY0�W'�WALLX0�W'�BUILD0�W'�BUILDCOUNT0�W'�SECONDLAYER0�W:�WX;X�STOP.BUILD1X �B1.SUB1X�STOP.BUILD1.1 X�SOUND ===*X%>4X'�WALLY1>X'�WALLX1HX'�BUILD1RX'�BUILDCOUNT1\X'�SECONDLAYER1fX:pXX;zX
�SOUND.SUB�XQ>�XP�;;AUDCTL�XQ>�XP�;;SKCTL�XP2;;& SHADOW�X:�XX;�X�PUTCHR.SUB�X$>�X&�IOCB�X&�IOCB	�XQ>�PUTCHR�XP�IOCBY
�PCLOOPY	%�TEMPYQ�STRBUF8$Y	 �CIOV.Y	"�TEMP8YI�PCLOOP=YX;BY:LYX;VY
�PRINT.SUB`Y1jY	'�TEMPtY$>~Y	�SLOOP�YQ@�ZTEMP7;;REVERSE ORDER�YP�STRBUF9;;OF CHARACERS�Y2;;IN STRING�Y1�Y
I�SLOOP�YX;�Y �PUTCHR.SUB�Y:�YX;�Y�PRINT.NUM.SUB�Y �IFP;;INT. TO F.P.�Y �FASC;;F.P. TO ASCII STRING�YX;Z%>
Z�PN1ZQ@�INBUF7;;COUNT CHARACTERSZG�PN2;;IN STRING#ZX;(Z32Z!�PN17ZX;<Z�PN2FZ	'�TEMPPZ$>ZZ�PN3dZQ@�INBUF7;;REVERSE STRING &nZM>;;CLEAR BIT 7xZP�STRBUF9�Z2�Z1�ZI�PN3
ZX;�Z �PUTCHR.SUB�Z:�ZX;�Z�DRAW.SUB�ZQ@�ZTEMP7;;NUM OF X,Y; X,Y�ZF�R1.2;;SKIP IF "0"�ZX;�ZP�TEMP5;;# PLOT DRAWTO SETS�Z�R1.1�Z �SET.UP.PLOT�Z �INC.ZTEMP[Q@�ZTEMP7[
P�TEMP3[ �INC.ZTEMP"[Q@�ZTEMP7,[
P�TEMP46[�PLOT �TEMP=�TEMP2@[�DRAWTO �TEMP3=�TEMP4J[%>T[
"�TEMP5^[H�R1.1;;DO NEXT SETc[X;h[�R1.2r[ �INC.ZTEMP|["Q@�ZTEMP7;; NUM PLOT POINT SETS�[F�R1.4;;SKIP IF "0"�[X;�[P�TEMP5;; SETS�[�R1.3�[ �SET.UP.PLOT�[�PLOT �TEMP=�TEMP2�[%>�[
"�TEMP5�[	H�R1.3�[X;�[�R1.4�[:�[X;�[�HIT.SUB�[�HS.LOOP\Q>�GETCHR\
P�IOCOM\
 �IOSUB&\R>0\F�HS.LOOP.15\X;:\Q>�PUTCHRD\
P�IOCOMN\
$�TEMP3X\
%�TEMP4b\
 �IOSUBl\
�HS.LOOP.1v\
%�TEMP4�\
)�TEMP2�\	F�HS.1�\X;�\
$�TEMP3�\
#�TEMP4�\
%�TEMP4�\!�HS.LOOP�\X;�\�HS.1�\:�\X;�\EIHq�RqX;^^^^^^^^^^^^\qX;PLAYER DATA FormataqX;     1- # of data bytesfqX;     2- '0' first bytekq@X;     3- player byte data in                   reverse orderpqX;     4- '0' last byteuqX;^^^^^^^^^^^^zq(�DATAP0	==f=�=8=�=�=�=�=�q(�DATAP1	==V=�====�=�=�qX;�q�COLPM0�q	�=��t��0u%X;********************************:u8X;DATA FOR SCREEN DISPLAY OF EACH               ROUNDDuX;Format: COLOR 2  waterNu$X;       1- # of plot/drawto setsXu#X;       2- 4 byte sets x,y, x,ybu#X;       3- # of plot point setsluX;       4- 2 byte sets x,yvuX;        COLOR 1  walls�u$X;       5- # of plot/drawto sets�u#X;       6- 4 byte sets x,y, x,y�u#X;       7- # of plot point sets�uX;       8- 2 byte sets x,y�u#X;       9- P0 horz. pos. X*2+48�u X;      10- P1  "     "     "�u%X;      11- P0 vert. offset Y*4+32�u"X;      12- P1  "      "      "�uX;�uiX;      13- "255" FLAGS END OF                  DATA. AFTER LAST                        SCREEN ONLY !!�u%X;********************************�u+�RDOFFSET	;;ROUNDS DATA OFFSET POINTER�u(�ROUND1='=='='=(==(='=vr$=
==
==========
==
=====================vc===
====
====
====================vc================6==1==7==2==8==3==0==0= vc1==1==2==2==1= =6=%=2= =7=%=3= =8=%=@==@= =A==A= =B==B= *v6C==C= =D==D= =E==E= ==4=�=P=�4vm�ROUND2='=='==(==(==)==)==*==*==(==(= ='==%=#='= =%=%=&=%='='>vo&=&=&='=========8==<==8==;===
==
==========
==
Hvc====>=
=@=
====A=====A====
=A=
=>==@===$==&==$==&Rv3=$=6=&=4=$=6=&=\vf=
======
==F==B==B==F== == =
=!==!=="=="==#==#=
fvW$==$=
=*==*=
=+==+=
=,==,==-==-==.==.=
====pvZ=====!==%=>==9==7==:==<=!=<=%=== =;= =0=�=m=mzvy�ROUND3
===F=&=	==G=&=========H=%=K=&=G='=O='===='===='=@==G=�vA==J==�vr=====	==	==
==
======	==	==
==
=============�vc========?=
=?==@==@==?==?==@==@==A==A==F==F=�vBG==G==H==H==F==F= =G==G= =H==H= =�v4=�=D=��vp�ROUND4=&======
==	========= ==!=
=!= ="=="==$==%==&=�vi'=='==)=!=,==-==.==/==/==2==3==4==5==8==9==9==<====�v!E==G==G=
=H==K=�vf=
==============================
=%�vc===%====%=C==<==D=====E==>==<==<========>==>=�vN@==@==<==C=%====D=%=>==E=%==A==A==
==
=�v@=�=�=��vm�ROUND5===8=	===8=
=9=	=C=
=9=
=B==?=
=@==C==@==?====?===wK============
======6=&===6='w===@====7='w-===7====7====7==$wP=�=`=x.w"�ROUND6====2=�=(=d8w"�ROUND7====l=�=l=lBwU�ROUND8
===='=@==@='===;====;====;===$=;=$Lw`==?====?====?=== =?= =====?====?===R=�=d=ttw-�;; *** FLAG END OF LAST SCREEN DATA ***~wX;y�"y	�START.OF.CODE,y

Back to previous page