home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume20 / xboing / part05 < prev    next >
Encoding:
Text File  |  1993-09-03  |  54.6 KB  |  1,408 lines

  1. Newsgroups: comp.sources.x
  2. From: jck@kimba.catt.citri.edu.au (Justin Kibell)
  3. Subject: v20i112:  xboing - a simple blockout type game, Part05/26
  4. Message-ID: <1993Sep3.123109.6887@sparky.sterling.com>
  5. X-Md4-Signature: 89ba0f554fa382ad2330f921865c33b1
  6. Sender: chris@sparky.sterling.com (Chris Olson)
  7. Organization: Sterling Software
  8. Date: Fri, 3 Sep 1993 12:31:09 GMT
  9. Approved: chris@sterling.com
  10.  
  11. Submitted-by: jck@kimba.catt.citri.edu.au (Justin Kibell)
  12. Posting-number: Volume 20, Issue 112
  13. Archive-name: xboing/part05
  14. Environment: X11, xpm, color
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then feed it
  18. # into a shell via "sh file" or similar.  To overwrite existing files,
  19. # type "sh file -c".
  20. # Contents:  bitmaps/earth.xpm.Z.u.b blocks.c1
  21. # Wrapped by chris@sparky on Fri Sep  3 07:14:42 1993
  22. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  23. echo If this archive is complete, you will see the following message:
  24. echo '          "shar: End of archive 5 (of 26)."'
  25. if test -f 'bitmaps/earth.xpm.Z.u.b' -a "${1}" != "-c" ; then 
  26.   echo shar: Will not clobber existing file \"'bitmaps/earth.xpm.Z.u.b'\"
  27. else
  28.   echo shar: Extracting \"'bitmaps/earth.xpm.Z.u.b'\" \(20450 characters\)
  29.   sed "s/^X//" >'bitmaps/earth.xpm.Z.u.b' <<'END_OF_FILE'
  30. XMT3IDBK%W%^F+0*7T\FEM:&Z.,*\I7&AC=+;R%(FY,5=BH;Q,$H4&>Y5AP;0\
  31. XM'X9=?*BD#W:+T_$1PJ\()),R4 V"RZD&S'#PBBPT*T@]W1Z=P9X(MZ8W).<5
  32. XM!Z,/XR)/9B;OON=H&AY-^&07*KRS($!"FPA%@O QC0Q;[QV/$NSHSP8+$]<H
  33. XMO9B+5HR#7=?$Z$6AO& ^6W*=19)TE#FR)M8N@P)BM:HQP(G3H=9&ZG$6&0+B
  34. XMQ[Z$8S)Q2"2'#&+:0'T5$"PL#HQ]$]Q!+GC18FUQ*2@MUR'\E@O)3G/)+!KA
  35. XMG&XBZ,21R)XP9R"4D_EU]*HGTI721MJS*X:,.SX1FU"4X\*8E" O0'D?"OQ 
  36. XM>41* H,#"M?NI3BLXS<V,224FD_5EQ3G8=?,DD>D), HPL@]T=<RK('>R$^R
  37. XM@-1@RI6QW_A26U+5<6A>749G T)HV;%2P0D$F(RE'D01OK';#@8$WW&ZU-9 
  38. XML<0=Z:G[#BHDK!.3.O<E*E!'B! 83"_N0'5AR^ <4LX. @DS4DHQ=R#/U+Q8
  39. XM]1"8**1)@^(CTW!F:AO<,!28"[\K9E='.Z*T,KUL/;PX&9&M0QWA9(C8(7=&
  40. XM'BH<EP4=4D8$_:7-,$OQ.$>/%#/4X6LH<[@Q(?GI/,.&IT7&DXK,_=&*@_&T
  41. XM@(Y!!P\2#S]/KB%8ZJB0N[8S*D;/4QIDYI&H$!U&.U,Z:9SRQXQ"5OFFN6'<
  42. XM+CN&\<P/8AIC/A7%JBQJ3[@++C!"D)TEP42WK#AAA%!3WC-#3W!._Z+.TZTT
  43. XM(&AR*"36)/H!@ZF2=$O (:J;(-".$/6/'=)-.NRH_R)K#LV<A)W#&5CZ(I>M
  44. XMUAR!%*0H1Z6BUH3A4V9(.VPSTD;97V_E=&2O&I69'_%5UTZSUE)(##7)U'=1
  45. XM@0X3YJ1B#H(A:7>3.';. N>,00(,1-#FQ^E+\:(5&:H-0Z\NB, .H^9RH%>%
  46. XM!*E;&E"(2W E^?$.BGB8H*Q]:4H+CKY".>E#X,P<$[8<7(WVY?Q#IY-(JJ]-
  47. XM\(Q)LLI_AF@C@. 1ZN(MO2"(J[4XI*I!IV#F$ 7BR[0INKL"W\%O+_5TBI[H
  48. XMEQ">+$Z*TX'!Q 8%O6BA#ER58\PA!UDFGK 8ZA*4%B2..(WC1\(BI-"TN%K=
  49. XM3RZ"K*J"#[GFQ:"^@@JABT!I)Q\8C4^FA3"(B,*@$R2@+QZF1APM%>@S.VIH
  50. XM.-\B.2"(5=-FR<B!:Y8!M,:&6[4XI%5B<@'62"II^GY<&*R+FH9"PV3+65KI
  51. XM0LE4. L/E-0#");R>U1<O;0/OYWGY@OA^6>9W'WR/N$> 2SIY"O$W?CJX&'X
  52. XM+1 )&*V"A;7PCY1$BQ@1*;U^IA=(TEUB(:IU*/Q9&DR'6-' #9"!S(:6PL1%
  53. XM.0 >.A&,S<4RRNGXH)JM;\ADL\*L0%+M/?8TE%$^JS9)IS$6EFIH9;*.^26Y
  54. XM]HA47*@,''NG++*&Z;4PDW8T$[KYR&OHUC&(P'<9.NNA#- _Q&@RU6-]VF#)
  55. XM$  WW+^-2(R*"$J(T5# GEX,)!AD(:&1K;?J $:T,)V9HX-Y@T^&'H&BR=U8
  56. XM(CDI4),FD('Q)$F7:'<\,(*  D24WU;M$,J6O$FFZ@QEX2&[T)UA.[0KP@B:
  57. XM#EY"ZE N6;#F8S#VFP?QJ0A6)\:85PG@SG'UFV(RYXXL-1KE!<)F>0'<08RF
  58. XMTJ)&4CLA&?@ AZ!;<-R4&CT&?AP3%7,+]23H9&!VYK)Z.]&X0G:MY1?IU$S(
  59. XM6J@34U&U E$KSL)%*=!(.$I,G@FDAA6QO_/ D(/9S%AKO35"WT.S#94#X2*\
  60. XMB<X_]"GLPDT%R6@D@B;=)UMUJC@HQ<D,262L&;OXO^A/VR,4QG"P?@;@L5%A
  61. XM+&<0"E =9=NRP56\VH?E(]P^LP^)0@<PLU.ZR:)@P XH+0;&0_#(O!D\6OW4
  62. XM)B!V@+ZB@O# ,P%^]---]WYEQDP0"<]KRL%\<.3$1]$<]\451VVDXH'R:Y,-
  63. XMQ4Y^,I'[V._0;]2-B-.%8R1J>8CD7\>(94)ZZ4T9,2@L7A7IB?SEFY7%6;4P
  64. XMM:8(B:_?'3J3"U3%6EMFD-9><(^KE_HG83&\BXIH!Q-V3X.R@S+B)*/?2_^(
  65. XMX^0IH=$DA:"T!JF7?!RP$D97OX]A4GI0'&%;D<KH0=B'>X1 P_C$&()W)(.1
  66. XM#4=H;DC_EX]O#6'(\)S@-5Y:=".F@@UO2^0T2"&-7?QVN1&!7C.*[(/^2P%Y
  67. XM+N=!HU"RE(HLP)A P&%8?9"==)RK&R &TD5UB'XL\!H7"T_ITT^GK-#R4OWT
  68. XM37((;Z<H:-FHJGFB6^Z(1@=TGM'3W#WEVE=HH-@%,D@IO;!E:# G+\$.[!_-
  69. XM8G0Z@#)+*;3,W<?\R_/U^8H5"R#'5 V+E^*3&HCU$N"3"A!T5XL%__=),&Q^
  70. XMAM1L51).TBK2Q09GX(]XWG8(X8E;Z?%+,>HKFFI=(40)#@M*A0$#!R>IL/$ 
  71. XM:EQ2X1@M(_!&@4 G.ATV2Q4S72SO&VO4*GJF?)FX$-Z-1L,%3G>#(=+GN)TH
  72. XM2O(H):AT2J]%!Y &VZ8MPUZ.(LS0E_]KF4 %; [JI20_[1N*4JFC?/&$23,P
  73. XMK/01T0>)R4:D81(=ZGQ8$7AV=2^#Y"UGX /G>4LH?-2>Q4)<ETV+TR&)HYA(
  74. XM%N ).ZTAG*R.ZRG-''8Y9,(K^I?(ST),<9 )X9AN[%BCK"QHPDER0^DC=4F$
  75. XM%3Z+5(IW9SG2CZ+ "#^2;>Q_Q XI95%M:K8Z8Z')P0QI]<<.1^>*Q<F9S,;P
  76. XM9=8HB3HNTBH'1%&U6CQ9-Q93!J!KX#8%8Q(#(JK]T9H8FKD43  CRA$BQ8+:
  77. XM0U46>ZIHH<T"QT 0"9W$RH@5)2K%5$"CSH(#6MM1;,8]"SA^$Z3S*DI%2U(\
  78. XM2Z41)[K3G*($!8%8F(C\-3 AW8UW9WAAD>&NFI7UM.H<V[!GU>7B.2*'Y&RE
  79. XM/E]7'Z2^5>,'$\2BV@Y)2&Y1P S@'B&A;D0P@("E2:FFL8,E!LQ+;T'%:()-
  80. XM(_,3!:6GZ>6@8QF>2I"8:%(Q>Z\U1.?A;Q,0L]/<#=4LGC>D@H>+CM"0? 7A
  81. XMYLZ4 2"SYS[A$#%U,)MJ3$=7RH5IRB4,?:;-F+ZI#P8875%MJ48#B_.\LU+,
  82. XM*[5;$K2H'&DP&F>K[' II)Y(:RQ.HHQ"S] N+*)\O"(KZQ^]7DJEUT!KRMT\
  83. XM-&UA6XN^Q)U3?6H>6M^M%+A(R 7WA0(!RH#6:(JY+!-"RZZ1U'[2WL5PTP":
  84. XM29R$P8:Y 9=K@&H[+4,02AL)M,N8!RD-ZV"B$%!X/XTGG C_"(>L,T;GR(&P
  85. XM<MY$70C04;G"#[2W0#@-3F069,'$X@C!,%.SA%:E/QI/@"RWQ85IWR%@M _6
  86. XMW]Z=9HY5H.:3-?+N$-TT;U"A&90\XA9F&!,?W-$T%LINJXGD!,%GS&!V&*2N
  87. XM#^M(PHK(U<,.E\>(.$3^$3Y6"@G$4/N!H+43M4$28/8--X3T 8>J.F0\N3\D
  88. XM5B9IF[^1:6X"RC2M,#@(&683"K^D'%T%N824; =I*#A!\,]QB#?EM&$J8<:8
  89. XM34(;NLG9'\<J#-BN^O&-330?K(9;::2(PB-(/3RM:6Q"+XP8C0L'4O::V57\
  90. XM)B)K)M3M15)"M2,0R<U<#B%6=%+C9%A")9DH59MNM8(1D(=+P_>QP5":&1XR
  91. XM'Q88H)L?W^/3FV$:D5X6/[ ?T< A2]  W[+*@17MG;P(U:8<2;2IQ(G^FBQL
  92. XM5,2GH0U%T#/(_L;<9+E0-UY=K1;0$100S9:4Z(G24'M14:,'4N!,);$9F5K8
  93. XMGVPH1T*P8KT%&.3M0Y945(U!J2+2T%OL;F2^X7F8;E02&DH=*7O4DTH5O4!6
  94. XM$'A5>0?>V&8#16-J*6]0_Y"06)?3&[AHZ%596@*A:W07Y!AKW?:@3G'.TGM2
  95. XM,?])^SE[U&S"JE8,44>B"T5$.0APA5@/Y\:>*,!YA$*8J$6&R'QB'./1L?4T
  96. XM0',6?SLAC5IS-8EP8$]H,0@-)!&<'D*MF)%S,*F4UQH/N[HB(LZ124AB*.)5
  97. XM$&:J,55PATP59A)*E3F0O'"J\M%;F.AL)L+,T'X>$C!W$[I;B?<#Z7&8>'R-
  98. XM= X-.+.=DAMP@+6[$>L(A[8KH\^IXDUDPU*(07ADEVJ2SR"[$/@MS^/38@$I
  99. XM.]@A#8A"794@Z=!,779"(3!#=(FE6+?!N('PN760JS(-/(J#1H:BH[)*T)#X
  100. XM<3P*>#M5&2U)'CHH=:*N39&6'E,JP],"HL!'L$\$7<H9-0K<3]\4'ME"&6U8
  101. XM)$HG"A&D A<K=5IJ@D30?YY!>KSB$R"1]UCM$*\TA_@CU L7AU%L';D.%4A]
  102. XM=394D0M7J 3-[^EAY.%T&$RAP<9PG7LJ&VEI:?,L(JPB<QX;QX8$#(A>X3HH
  103. XM6;80)CG71^!$YIG!^33LZM*44P?<Z:$T+_GG:Q^4TE(S@$ LR&'"F ":882,
  104. XMH.QE]P\8QR(HRW,]"V)!IH8L*:0J3R,E]5CB:DE10@X&#:^MQ0;MGZ6. R"5
  105. XM-I!>C8U)A7JK0D.?"9VP-T)B5)3?HRNKK I(/2(,6$=;OHJ*WBCMV9-@)1V-
  106. XM->\3,U#HAZR$ZTFZ.62D-;8*;5/G:J 44GI)M:DR'MLN> ?Q DU!G[ ^P'^,
  107. XM(<XBE*]*W]9L28K)*%$9:WH(]:+KB= CHP1\ O"D**,-(ZR1 1.#I4 GV?.0
  108. XM5WX3\JXKF>Y$8=)A^!WP)C*::QFA0_,3840DQ6Y:1VNH=S&:C:;#3#)EI7=T
  109. XM&[R)JJ?_2_ .V21C3#$J<7 Q@)KSY574+IFAK$U(4<>IY0-F ILUEP%A "6,
  110. XM](H,[#+A#\-#%3%)$XD!.Y@DOB_K"='NB=5=03%6=E@F,BHACG!NC$9&VX&"
  111. XM>6)C9S(^1]9P5%*_L?E-XG8\WA!+)UR((Z%Z9+)"38D["*G2)?FS9;*3H,7\
  112. XM',0.QC(U4S<$VO-N" !2/+><C\ZEI89R$P.X**!F1>VFM];R@F$"18-#J""X
  113. XM/YA_ZT8C21SL:O8NLPO!0"9QT2 KB+.&<+6O&4((5KY9XZV]UA&BOI6?V'*X
  114. XMCYZ0& D6P!N5J*3"HVD.)S</,DK5V(?,>-(Y33I]6^MMF5:]00.!1[J_,&E\
  115. XMFH!:TJ)LD.5!,N3#E*8P5*PY"$W0J*&4$^-)]9A^4NT+2Q XS5\M@8J<+'&2
  116. XMXHH].A6-AB_SP6F"*LGX8Y"#@*AHH4D%(]%#\9>L5NP?YYHJ3;<'NV8_"K[%
  117. XM_8IB_Z_\Y&7CJ@"(DSQ&\=XB7+RCGZK!TBH$:K(Z69UL,RAJ8#VN&W)$.<'T
  118. XM-, .J8=:C/%B0UI9LN<-3@81905T9N, R,EJY5<>)S6L=E.['<4"P_"8,%QD
  119. XM3> *6\D_FG/J&()&"P'"5M%GIA:WBGWH4G,MZ2R4;[Y&?SRF!%;K/)9:4-NT
  120. XM&NT<,PBPQH1M^6?S[+'F<O25-\WVHF-C,I=S<S@H4W&7BJH]XM=+WM#O8O.T
  121. XM:-(4>X;K2[5HPJ%N,7O:Z\Q$3Y0TGN N_"<!'<!<+"F>>DGV 1G"P4!9X'B(
  122. XM$7JGBX2$V\+%/^%$] X2G<YD2,23#T4"\552$>C94O<=FT<!8G/H.@2JL1')
  123. XMK&I[QA<UF0Y)&;IP48SY,GLMSTD]&.E)XLIZ@V2 !ST^>8L.S<F5R6<RPU#D
  124. XM$20F% :# V-$R_IUPJGA//:2GR1&HUL'F*=738]26".!CJ"40V$T_A"M8918
  125. XM)0@M^%;Q@7O"]$(OTU$,0;X;12[$5^ED>I$EM71-.K0F=18C%50.Z[+'48>M
  126. XM070M,<9K6)_%0Y8$S'D27-5L!I&@J7]+<Z>AJ7,0G4(:2*62*Z[ [;H\Z7U2
  127. XM4H /!U.^#A1H3B&;J'$X.&@\1 X9ISP.]RFL(FUB,.T&YKM7J PDE^ESY9U>
  128. XM*]IGBH5,*HGAH_E4ZN)I=3(?"(_P(;$,[(&;RD&(0V@S/K)W5.5FC":"*4?5
  129. XMNWY.!@6ZB']45AA#.TL1!%D<XRV0)\'+[_%1@'^E14(WP\+&S  6W*I;NE>H
  130. XM9T2$^ 1QGWC"Y]%YL(4455@Z(M!1&05+0[/;#)2F*4U!<H4"J8YT=RIBY:GF
  131. XM&>:JFRP4!$B!CG<^R/1!'RZ:9)@-2\/C]C/@RH  $= *R:-$TIN(R(.F&;;D
  132. XMYWI=^[E8V#]K$ZDH$Y<I.X!N[S,09YP$,-CFN?V( E>@^);;ZP+43" S\%R5
  133. XM(' //E-@1DDDN0'MD,6(58M8_KP8DH!.8YIM'(VR8QL(00<#QJU.S-IF<,6:
  134. XM&APW'H_>Z4COU;!'"(*E\U)CV88I1M90O5'^>& <1P*#TXQ]@TMU=9.4I&40
  135. XM;QY<UQ6;V68,=49<?*01J(Y:U)60PU(BTLJM.#6,S80@Q2^Z2<!I-UB /3SP
  136. XMBH0-W*,Q2;C(\/@]\4&<.@\.["MTE76-\+J#F]M16(,17*O<FH()593$&C'P
  137. XM5.D0.8R"1N\A6Z+'" ?F.2X<QXPW!98UZ.+]$)8<:I)V2Q5O203'9^2E2M/P
  138. XM#'9>74+^Z@N-/@:$BX5)MPR8K:F:0XUEF3&9RTVD3[2QVUB6AG3.@&FK7'=1
  139. XM@^A;THS 5(>C(/.K,6ZH,=2Q9E..:2-A+XLH+?P50YV90@NN5G)C5[,GH:YN
  140. XM(9(6S(- 1_0#HUE7@FI0+Z,;J"/&$9<T66A=,%55C/YR))78Y(8-JA'Z0HO^
  141. XMR3!_[J0"Q_ BSU,VFGB2<C*'6D&LAQ(6S\F$/1*L[WJ039C"* 1%;#>%W;B(
  142. XM. "PQY1A#5OKZ_)CP["Z1W^S/5GXZ+J00]E'2.:E%T S\PVAAO+"H B?F"8<
  143. XM$O:%%I*;!/>1%\*5?)RN.J)#%\[E9Y!IE7-"J)AB459RFB=0AC(VB[6)Q/S=
  144. XMQR9OS2'F&'GFN?G0D%\E/JPO" =Z"J,'+9N696F01XA-N8I8'0*56!(697YX
  145. XM(G(A;Y/2!. P1M=\M>J14_N5!53(@PTR^XI/N2TD' P2(QYW0N]T**M%.#KU
  146. XM((0D  HV!\9BFI7E"I[V1"@BLS0WR";(WQ*[X*4]FH07 L3_6VBC>&9F@V/N
  147. XM(8,;%5>-B]9#4+14^7PP6RPL(@$RP4$)=*JO%%08O9XUUIRB!CG6# +?4(U\
  148. XM4^AJ.)AGXR^+YE>*Q:3Z0?.2QDF@Q %B$^(8:5A88!ZCC@?WP0+C_-$@26BH
  149. XM.3PL68_#8%,L^@"#(B$$&KY5/RG$%/$%I^*42#LQQN0I9ZFEV82,#":6*TQY
  150. XM*]0JP(M)A@@.E( DW62\,R6Q;0+0*7ZV'R26L(%T%VP(_I6/#UE%R6 JX_*-
  151. XM: Z<2DOTY:JUA?E',"JX336FV[_C["M6=4)1H D" CVLRCZ\0Y\6@H-" UHV
  152. XM(I9"WJK^1G0VL(1<P9*\I"!"K+FTU))!A&G54@VFS;9SAQ#)1PX"_E$(H;^\
  153. XM#@8AFU-P1!GI[=*:+8ZA>12+54T$;(7UQF*X^^O@45(3GPC**49+E9E_BUJ5
  154. XM7ARB[E%8J\Q3-EN-G./]ZQ8IA W%PE](A@!7J$.0$K=<SX]FB"X&SR3%.#GX
  155. XML\!]%JM[!DUC[/7@VN6H9(QA'C*&B&M+ 0'Z"HD9&Q815I*4CC%)?@<WRY4<
  156. XMR>)O -9.IIM@?;=VF9VRKCZ:F8C: KFD!S$NF?=D=#*.:Y;6J/^PC[FQPSUL
  157. XM4I\DBI*'J* T!2%?\'0,,F:NJ;ERK2+OR-@.E$L,$F9.G$$$#@M$Y(K $>R<
  158. XM#*)%IM;=R8MEKD8RV!,ERT9LEJZF([WLEQE,)#PML':5]@C>7J0-GSCE0$6L
  159. XM9J4$A"-![3JV0FE!2GX(/ 89C0J<7JWCD$!'8<SEG? 2R5?[W<'JHW"@3="2
  160. XM;7.JT0_D1F_A#P)G0D@$'?X?F4*D8+,%#J%[K,F8/\EYFL#23#!1J;.V\@Q2
  161. XMH&([U]1=D4"$FQ$@JXF-SC)K?\^ &>.C&;J05'7=,.(B,)PM;6N$/NLY-?.H
  162. XM+! U"%K,HM[P=P&JJ+[RE=82(@@GC"<+)>.)^V7\3QVB:M.00C'44MN7G8BD
  163. XM1E,00@WOS77#P:"/Y9V^.E0)!R\6!PO)\I#30 %:.F,X9R'-#U2.@9#^&ZF$
  164. XM;.05."<79"-%Z)?Y++,9U7@M>K9<#;8A!B2=Z718) I]U)Y;AS?P:0NU'<D.
  165. XM"7(?^+;-Q$OU&^DU=!A-4'84MB:OF]=&H5#W[(NQ-)5&(4FH@Y,VGQ&\(T-(
  166. XM45UE 3/[1'RA3Z)(A1I>^PHGT;W"1++,+RIY@-W\JPHAWY"O$<O)5,5X.()9
  167. XM(I0DA1YEG)(ABY+)6),IRI9AWC*:F*&M:-HB0KW@</XE<)K<70'C518KL[A0
  168. XM;BNWEMNF R;VB1I,:4AF;0<0UXBNA8Y.&Z*ENI&IBN872XU4BOI'K,"ZY?Z1
  169. XM]"XWE=K?SN/E&2=V#1W!'9H6LEA^*'%$I)#D0TJ]C'Q!#QRHW1VC:A5NX5W8
  170. XM1CJD4XKJ'4V(#F*[DA52$$U?[*WAQ.SLOTCJ%'\&?YPLWD;51#I/QY"I2)YX
  171. XM;X<$LBRS4H C^6 W1>5-/OZSGYG/S*<"YC?0,U*D2#@,,;X!PJ?H)$7#4[NM
  172. XM3RZ'?]76HIN"O8D1(W#I?LX+XP8ZKDC!5_6:R6C0W:0(G#"FQB*"SJ*;.^>-
  173. XM(!=RFIWOQ(@R&M7BB)<%U[0"]#&'AP?MIL96+(2P2FP=CATND/=B1,$B63)<
  174. XM00&UXHN2!W6R7$CL?(8^6O$6*!ABRO,"Z6)'$O[])]-YF:QOGI!+RHBB4!XT
  175. XM<W$B#91#J0VRLZ&S[)D #SUD^BJE1!W"=*B)P. (GY(7VL_$'_S%0=%Y^AL2
  176. XM#')UHH@_V#5(E8<PX)#==I: U\O/F*4+7/@PZ5[J-)M(M9#D63=)>^+UA'KD
  177. XM$$H;)]SLI@=CP,K@$1&61A=UZTL8KOHFMO(V\?8]H+2),]#H'ELO!@%4* Q>
  178. XMF>1S#,2;)&L#F$?#.YU$'T@?G#'H+=_T0 9!H%HBZ-@+E,9:Y2.Q-7&(VO=T
  179. XM/WY!S!BO1)M$AJ?<<; ,4!0A)@#3HG,/*; :XZ:-RW!33B_80N^GNO3 R$_*
  180. XM5<]WWILM O=VMOK&)1(0=/,59LJIU8FK5 7=8>C"<!5>[POWY&K% ;+(/-2J
  181. XM1AP[' T,R$ZGSZ)<P7IT*T 0PY/0B,G-7J;\JXD]""T*;UB.#HSJ;7N*/;%]
  182. XM*1ZZ3X"NAM(E8G10:!L )U)%888Q8@ AA@. HY!YU2Z&-C/<F2]2TD@:M!M]
  183. XM2S<IFK<9Q X/-S1!".BR+=D$:CA:)MGV_P&P8+H)7@80/PC=Q!MT=O* PK.(
  184. XMM_"L-\<'R;H$>]'-J*JM=JMJ? Y/EQ/UL%!4!,9^/XF+_R]B7_2A@=*_I-_6
  185. XM[?P/"B\<5=7HMK<N8'/@H#XGLJO;!GH!0K-W:MUD)E1D+%,)F^YP0C8&$X/E
  186. XMQ"ALM;+/T/T/R%#Q</X%;C!U?I(G2%/7TN8N,)A*5^V@3YNP2VF$\"+,I4-\
  187. XM\XRY^8KEP?PAF-=N48MTI'8E(S_NYZS,5:?B.R#X.Q(KECXRV8$MC79@6A]P
  188. XM25@.*K*36&_N;,1>XZM8=@0QCX]]35"'E6$';- D=K0\E+I+!ND,G59.>X8]
  189. XMPU:#M+/+GDL)5A=2TFYT5>L6\060B7BW6/LDD,[AVZ80Z00RQ7POK?778+)8
  190. XM=5<5.8ET8MZFC$F%@!_81# 9+X[6+CODXJI]\J8=<(&.7*SUA)JL62;@98;Q
  191. XM6D::?<0 %/JQY?'3F3GR;Y)9I-O$%ZX,^QA,8LX(B98N$A%31(L(W';5&H-!
  192. XMR_9DOLBQ8>$M&>/II"/LT)@:.JN+#17'LGN9E*7H<NUUIAM0:IP!<<&E()@(
  193. XM7LPSFY:/#W_Q6\-BX2K$5 \(1E8KAB;-X+C-D,5),69E58Q8R,UF+N<Q74 0
  194. XM!#N*NT+4XO_M;5M*\/S80!0&(:CAB$RF85)TP_YL@Q1?""3<"6/1Y=-*6L/4
  195. XMQT1H D(]WTXW,/;MI,8P*-,/T0VCBH(#X7!HH!.$+^Z\ZT5G[D3AY]7IL#GY
  196. XM9S<M$Y55Q&-C<87RF(! 405TM9"3SQ8%FP0N/8VZQFHB+ KWUK^V#+%)N7IP
  197. XMT#J\U3))X\=F0Y%=DP,Y9%")/A#)5 >7@7M* A]XPNBH?:<J71-&8;#S BG"
  198. XM_Q!H(%':6= 6,<B"341,1[JX\@D3E(HW9#*))=.L9?-&$#MW2(O&O)K4<H&5
  199. XM8]4W18EG;3GHD$C/B3W&!P,+K8Y4Q"WV"%?DK?9Z-6BV7IPO OYC.G*:$5'$
  200. XMCK@>1C"@VD;Q,W84F+,]P<B#YQN22%8/]%#T\&]LWY01&B)"Q4+NK4*:.60)
  201. XM%E0'ZC=!VF!/3'B]E);!MQ)?.(853; #P_$/<DR //XI+-XH07DWXN/"7)24
  202. XM1M4Q=2/ZA5_". 'QK59L9#R6JJLUBQ'CCX+ITR8]+(U%[J2@*L6#GJ*-PWIT
  203. XMW+Y 0@5U',R,3!9#([2!#N4? :W<FGG5FL(+.5?HW\IRE J+Y::NI4#3/4&P
  204. XM0/JNJZBA98L/\VDF-!"6OJ)R/D]CQ!&7<+$71,$")H"- I#QKFM6VZ)/B?&Z
  205. XM$U2R_;#YB_<$9T*7-<]D,!25JZMME-<A<PJ>K,9<8P]&)\W:U!3CJC;6/?DX
  206. XMGE@R@,P+DA7)]#CBPTVY!E>#]%2 @SKN\C-<$6J%:A9M)!Z\R*IN.=8]2 &5
  207. XMDABI>**<3(IC:!;_BS3V(C%_CU^_)_FEF\)(<F^LQ2 79(Z$K;<U<( Q6%U)
  208. XM7[NC#R57C$H%?;OYB$H45>H7:AM_E3+N/&+1/(8TX2X70Y#UC02-&M/BF%EJ
  209. XMWL >F(V'"49"6.3, S\"&9]U9+#1EQB,T)?>*Q8U'_$DF8FG6YL'"*!FTRL5
  210. XMG]Y!UI2SE7=+Y]1/<K1&/.B^]+%TF0BXY:N3O.@69=LMM[P/'/8BZ++4'=Q$
  211. XM?:4$:]G5S_G7<!(E0B6 %1YT9!5CRIO"-4+,<">]GPY;C IDB8HGGH68\&D=
  212. XM/8X0 +O%#CAD!< C9)<9^XYFV(82VM\5@? 0M76P^RBBX[*E&M"-S 'S2&0I
  213. XM<3"4R;4 $DI&S>:'R4WM:Q*,DYCTP<U23IL%;O<MU<QL%=&JC,*D4K*_^?QU
  214. XM($5/=%[6;,&7ML'Y9<6298@;+P@Z)UBAU9#LW0&G-@04AJH(9,5*1I$UVG6\
  215. XMZ6I3>M)G@V+%8&#_T&Z8P2HE%HQ34G)E]+@?O$&N;G&M>!GYAR4-N[<5*/IA
  216. XMO;P.3K2Y$YO)GP13>MYU71XOQQ[SB[7Q5*D,[?W2?2NR*M^7&&ED^P+\Z;, 
  217. XMZB8B]!-5 ^;W3_("A@%S?@&<>(AW0M%"TS#?>_YY*%8;A^#_175#&X)GP*-,
  218. XMLBX+JSF;;/#AJK(ND,751F!=.(P='N<NGQMF(SYF)^(*!@3OYU)-5[@$E+,5
  219. XMU[@DGJ[SC=X!'9,G%&=F4Z C51K[X[]D6L=E8FK=99:\(5U#&<XS%3B"NKV(
  220. XM;U(C\J]D3 YG%"'^Q>7Z"6+  $Y]PEA/R'9DT#EN0SBE/Q=R!4@5-Q'#N0%'
  221. XM?-\F<Q* 6C3DCI%INHY@C5I*-UL&AD[DP\'=&7#Q'&9.G5Y!*=+2ZW$*7 (B
  222. XM!0IMT[*#26C#:&0^FT:$##AD/@#^QFRLW:7]2,ED3!H>*C%O&;(-2O>/^K[X
  223. XM?L0FF!*8RINGP] "%L &"H[!Y=3; N>V$F&0P"WL3Y I%0R.! KP$9IN?-;"
  224. XM5KTI%A9Y"UR7U9CER5R<?>DEF^#X6R%A.-$_*'*59,8Z:J8>[B#B-E43=E&.
  225. XMP2Q=)+;@V'Z.)6,EC <ITRP@78V3R67*#)FSXI;99%,[71PW9DBCVXF6FB-Z
  226. XMA,9>"@UNYV^(:N%0T"'4/HK!S9SIVERJ7%@9G%-D8/X-)XJ43 X!?$(I556D
  227. XM;S!L09)@\ !"\8*9DW.$ ;4_0(5#""4&)T'_P.G9/]H<1$BJQ;!4#B2QO..E
  228. XM'%02?\\]F3D-I CK+=R:SK1C1K!_EC,##<*I0K-TMU) >9ZZWU9G.21RZAM9
  229. XM+L*?4Q1[YZ!5Y_6)M7(N/U(1$@VO3!ZX>PL:#@W'),NI@EDJ;)7BLI)V8)$*
  230. XMN9(I^$Y=I=Q!DYG@4)>H1IP=E!6JJT4*= +5,%L:.T@E&1%\,&>P<L%G/+<=
  231. XM>#%=F]1J(%@57.@L&[%]>%V4FC@'"H>VFY3B<"PR%A-K=",)VGA%1$)K(JB5
  232. XMNMY\YHW:YQ4C,F:J)0WI5,0GXAN<6D%C/<P>W@/;9V.2(UNB3=C!AN*B:"(>
  233. XM-?2OT5ZTBL\DO*&;3<W<,.)OQ0=4DZAJ4R**..4(B@Q@5PL%6L^D/^:KJY5 
  234. XM,#;!:<Z%QZPL2Y<1V9>AI=I]+[3J[IRV)JP-+;BH0QJ9-=Q7W\& F0&=,I7)
  235. XMR7Q?/]X0J.ACGK+5[$DV-_YH5P^0K)ZDVL"8Z1- 0>Z\9]/VB!@"\&(-=E[\
  236. XM3J,^(E/<BD;EF *]$.DQ3=%TJ#"I7);4:O=<"4JRR[P7R".(!ZG'IO*[\;3!
  237. XML28>]\XA8/)/C$MPU9G!%<'$?N'=87JVE 1!@*=<,0=S3X!3!"NU-A:(L@$.
  238. XM)PQ E)6,A$7RCF'LV*CH2XR$;E6KF@9O!4$COK0F8,9/HTP][\(W4N*)D-&B
  239. XM>,0._YJT,&Z%GLH38Z00WY(E*A[;+FP7P2/M\00RH*YJJ(@"3\3C-$,0JU?\
  240. XM;O2ZQ\O0F7W7TCD$?-;="AV_Q\2X8ICL^L79 7/R)8M;2)WU05A7 *33 K+"
  241. XM=7&(R1*+)/7B-69Z>'8P[D!Q#<(K[0.A(>R):0]'O-[#L-8]+_O7&L&16&X 
  242. XM<SB?Y8W;RF5C2:*( D=<4+49OT5,G\6#V!&I6*08)49P;@Q,AL*#,YCS2T;P
  243. XMX?8<>0QV5H,.]*58.A *W8"99&*R(?6N.+FD\5%>HS)W?9F8Q51.B:&V[:9H
  244. XMJ!+&#PG="B7DLZ$^ TP%^^0FZ S-K]071VQ,D!B_<).] P@YC=;P")A, 7LL
  245. XM.]8IH:/8;NCLOBL8>5A*358M?,HWQS9S0^)F#9U 1YX\2B6/AC>)EWIINKK<
  246. XM@NV]7\*XXH#0+TS E62\=*LW)R>#7Z0A,=+":?%,(P(:91GN7ZPC.(,:U)0\
  247. XM=HB'AH*Z2?GWR!M*$!03@ND3#]_OR6]I04(:J3_91A2]W$],G\'QBL$\;0(K
  248. XM21P8C@L+!I0I:69.$LY%)HD@H$^&")N&:)HY68YF])0FCC31ET^W5DCT!8E>
  249. XM2@6.6YFC4'@3DV B0>)D9,5],CR( A\2.-$%"YHT1'(.+$@#2A<!I1BVL!&W
  250. XM"6YL206HB) MP<HC!D+,)R)+>XN+4QRD?/(Y#@\7>47&ZPU97.1$3('#$Q%C
  251. XM!3.6NC/BGF-2V'#)^/VE4-@0B;F28ARQ'Q@"#O"Z*),"^-YNVI5IN[(7[ YU
  252. XMK1HD-S!;W%#3A"@W8&-]1B8AUHV0QM8$6(=GZ+9&C1W&6(+)L6>B1[(LQCGP
  253. XMB#<@WF,.B)MB'SSL\YF(/:HLC]Z.[P>TFY&EZ^XBV*07Q8X2E+PRB4&[0P_[
  254. XM6NYOTSPZ48?(?%,Z)E#]O_JU>%]PXP(X*4#WC98-A)&05I)%4/$XN<0#X7H0
  255. XM.-82PJ)ETKWOD^&B@818+C@?&]B 1548ZFL]7MAVBI:(W+NBA8OBXU/53;P,
  256. XM+EH;4"83<OFD6:'H_6@$03 9CJ3+QC5-4@J5(+)]0[H5-.1!:[,B-Z5.0XL9
  257. XM0O9SI;$?\H[SQ'HHP\09/4W%.S/?(3 39SPA$Y>MQ"PQKA[M5G %/D0%.GX\
  258. XM$* FU31B!VNDIMHH_"TPC'4L&&0N092*AE=Y:-'<4? 7;(=,"Q[EHPN19*?!
  259. XM.&PC^T7\8WT4,Q7O6\VAD*UMBHP^!W4C/#1.L:J51=0;40>Q!U(#BH"DBX6M
  260. XM/$=H26'VQJ=2BJ$[S@)?B -D%5EH,@ 9)/9K7/0T4$@'3]CYXKSS=18\#7$H
  261. XM,5\(? ;9:N18:EPE0!;#>.^C7@YF\><!X%&D'::0)SFQ$XXC(/EX3X.S(AW/
  262. XM_9!*Z9PV,M5FE8K/O89$.4BS&4OAJ@V/^]=IVCPV;U6#?([R5%D/<C(Z.^'Y
  263. XM#O?&4M+T9[B-D-89(\\=]R)R7)#9I^:1:K,E]L!8-9N^GV0N,J4 "Y L;HTN
  264. XM@R?&Y:S1 U7#QLLC)OE2OCC&HHXVA>!%<F+94JMD,PY&@T&W HLBJC3Y<!JN
  265. XM@+!722Z)6OU5:Z8U$Z%!0IRB6I9TRL(1YWGY;-X^P_1\_V,!V+;57I:1.]=F
  266. XM+<YQ%@OKA03-RE(V$FT.;%0-%F0P1BC92^#D6B10' XG&Q!M0X-CZB9ZT+< 
  267. XM(> MXV.?2;HEG2F7>(8<'!:F9V3K4&UL0YH-X<<8B2]H; [*H:LN$)/%VG'Z
  268. XMWYA>)D7KH65M-3&N>#D:/<&-.K-*VDX7=R8Z<V9,181R/I/Y(LO-5_>4&&:H
  269. XMC%0IH!8&1DC9C3M6MH>*Y(0?0HMNB9['_T+. F*PD'AC#-:"QRJBPZ&Y0&WP
  270. XM.@!':]O(9'SIE)1N&V;<(-HEU W)@M$$%E'V(6D";KT]]3+#LJ'L:\=/W8>(
  271. XM;X8J6Y1N!MH0/_;A720W.M-F3*7%BUHE0W/R[2K+BM4[BH,S3*5DM$Q:[B+7
  272. XM";)NJ.6:0M+O(]'3P$80,_P:+[NCC9)AB!):GF;QD#(7 LUC!IQJ O9$L<5H
  273. XM.=QZL#K!#F"*V[C3)#TH6-";W1;WQ]*L7[LN,VL8535P*(-TUG-'*C-PA6@^
  274. XME,5M^5HXB?%@(]&F^V>T.3:Y>A"S#^F@OJN*Z!.'+LC)A1OTLDKB#$L1;CM\
  275. XM&LVW38E+71_5)=N8-# S,SC&^Y'^1W"9WX'14',Q32PG"QPP'+4.1F5Q@=W@
  276. XM'YE%KRC:"_ P3DOWH5&@@><5&C,($':)VRD3LYEU-9UA^+'.&-&(@"@)&6Y8
  277. XM72"7?HMPH.+ B&&Y*-L4BT6RI>4P07QWL])!-FDL<4>=SJFP")$-6?)\<)1"
  278. XM)CL9(Y!2'(5D.D2U8)Q>6C A.9,,"%TMIV2$)((@#'Q2RR>7& ;WV'%><%@I
  279. XMJV)0VZU!S9&X9*KHW8PE3Q=C7V+<5$3I-JG"J9)0QF(X8J^4C.LV%_*Q$">#
  280. XM+U#,]E!HE\HALR ?3M=E-(BOO*#DQ=Q68C'6.&(H>W.Q&9'"WG1$*<:DFJT,
  281. XMSK8OF8O_R,,B)T7!T74D97 Y"(O%4[<HJ#/>PF_QJ;8D,M'"%V_IU_'WU$EB
  282. XM?T<;CN1L1'X28G0,R?GU@\8?UPBN2$@63X%JMH>*",<-VV.=PR,B.4OR74WL
  283. XM9G9NN(Y?<=]W433(J>^2-9\O[F6/1*7DJTN<R/19@O41U"+@BCXU>>4ZT6*P
  284. XMA^*UV"$$%L* #18)J]9=C:08BK%]+5RQ7_LM$W7,*VD(< ISCO;F1=PXR83<
  285. XM<E4:Y69%1]8-G< =;5$(>FPZW#\E2+#. 6M4@0&R&XG&Y>%T#B#E<D(_<6]L
  286. XM*#J/X.94!<2$M:&4J$+4NZX\)(>L H;-@W1^DCZ5."]?L4<3:_%,WPM4(PCC
  287. XM+-D;#8_32ZI"2(PIX8">F8T&:68R@7R*E(R&.,'D'$"-PKXC878C-;%3NS# 
  288. XM$SIF[I8NCBIUQ$%]8!.GVU8G$V:2AK*%.-788R9QX:Y3  2YH.K3@V2M@T\:
  289. XM5D#%F.8RF6+7_Z8 9BZV=BF3&97RB2V*^$!>_HZ8E_T$9[MDL%LB4K(IJ^4&
  290. XM+$"=K:\2G1=U::%V<XT2)Y0DE]-JS'OCG]C%,<XMN0H+LQCY$ =F:UN56\A9
  291. XM/169JXLV$DTF5-.UVMMP\2K#>C)GK$A,2HH?LPS?&F^-F!),R?_"Q$QNSCJ#
  292. XM8K;..>*!Q@1E)3N>4+P*GX +FX]:HPRU-K+  ?(:N7 3CIV-+B3K6W%SMC,P
  293. XM6Z2RXZJ,'9&$1!>["D)RE=8/8T"7Z#HQC;,U% ^?6+/,B^9V<4>9Q)P"WBUL
  294. XMD=D:QF<S0<>MNFI*WO"56_)AA!-2Q-&#VU!FG#M\.<81[(V?!V^II^,J[D[^
  295. XM<D"F'R$P8($DP?!-TWHD@/J$*5%S[G^+CYEN2CR)^P(D[C2R<097;<C.*F:6
  296. XM&EX;W(?(Q$@BY$PF(#[>%#05LPD:3MNAXA!=A: P>^)"7=40#*DDKKQ609+P
  297. XM/'HH\^57(D[MF9'-XUC\4;@1LYP2,#ODU>/8^^9^#:I@L@R9*"J8]QK9W%KR
  298. XM3L#"76/-DG^$YIOU0N9B=QK/;(_\LSK#YJKG_5W0'58-'H;P8^?'52*0PCK9
  299. XM2> ^^&6OG0QENV)GP&SX6OHC4XX%#9/ASS9/6Y#MG(DK&]+#Y"OP7WEE+#8:
  300. XMI59Q-PVV'K3V5T-^P83P>;XTE(C*PM4Y\RN&5F>XAM"L1 A^X;D%I'H';:JP
  301. XM"?$-:+>M8.&+8'$\:B/7/^!0F<-\,L1DNTNPL+"P4E4?8^-3- 2,4?L3XV0$
  302. XMF%$7"TER@@;'KC*#LK3H#:L/][\]],6">LF_@*,P)@:^*^A*M)DG=>?YE7*H
  303. XMDU<\0(MEA/".C;KI"_'$.;K'1XQN\J1TGWB;56UTHR5I%Y&[\HMX?4-*T7/8
  304. XMHF"W7C#?S007\-10N6D>50(S-4W? T^F'P:9Y$1W,9YQS(@9ZAZ"!:W.> ,4
  305. XM<ENN+8=Z!V."H[#G:5[P>?JYFZZ*QH)&@0:RL/^]332ZN^;ZR,,&0,%TA5I8
  306. XM)/)QF8MBA]J0D205TFQ((SU"] :)5J3E^34%A2DX]10C,*.X$$3"PR"YJ2.!
  307. XMH:O'M +L&A7U)[+/R E]&)98T8LU6%(7LP.1E&3 #="8<^ JBV/'P?'!ZH(!
  308. XM2)0?=XR<PQDF':EXAC V*U(C 0VQ*O2!20<Q4G=HZH23, 5/&W8"Q$IVVR=2
  309. XM[*RK;H>G[Z@ M&(EN$2_H/UA@@T"Q=+B#J8M$U-P_RBZ.8B2!FQ$Q-$HK3]R
  310. XM+XR&)AA-B?%W6^JIJ$=/2H]'%!WM+7QU*?U6::((+[P? A/]U]4A4MH!G%#$
  311. XMNI0O" F87SI%<.<_0SB(I6<1RF@/Q@M*61R);DP0<MX,+N:==&\''1;G>.CI
  312. XM9G!(I&.\S*8,I82BF/H\1L +FS6P\%^BF[P#%4YD2CP;@QUU9KV5TB&_BBW 
  313. XMFJZU3H2(XLVUE?5-><6\0=VDK0=^])M /C5ND#S()X(7L@EQ(,7XI]% ^3QX
  314. XM1-"MD(NB;HP"F.,VR]!Y>% I_92NY#=:UMCH11%[?P,ULS!'S37D/S-A+;_:
  315. XM(&V3Q[VS+EH'1'5NFR4Y%'Y 8H5ZQXOD54"6+MQ@U[3"/ VU-*>68-&2!6@(
  316. XM@Q0I9@[F"M5"@OP0X;E$-\P+P1XWBKO1,0GS$ILQ3]%L]B>Q@W6(>957$<-%
  317. XMZS2+=SP/=>EJ-A?,@[I]BQ870@=S6!J"8W@KZ$]S";8EK&;*,_Y"<E,QAG;(
  318. XM&3P<&+2WR6;C\KK2H0RV8CHN@PUS&+6G?&HVIHW8*# 7(N,5F]WK)(FBGL:8
  319. XM)Y:*3D5]Y ]AW"M>?1U E?RKK 99PB3Z,_QXOA2X ( A*5)H!?Z"?[)#4K:4
  320. XM4MVJ8V';"\ZJ73E6O8IAPH .%[X#$"_8%-W:#7&$6K1/RY2*W,<FDT6R,(]=
  321. XM@PL-<\Y?'+:.MJ+L^T86M/R C=:7](DY,RU+V4PO:YX]F]HOA8M&?8-V@3SM
  322. XM;VTONE[8:GV"JJ%1@'  //POE@VA] 2#A:Q<<8.:5V!J?R,+C$[#\>!I$R_5
  323. XM*/!=185<#FGZ3LN0JM_B(' >D5A>@8L:3$!2QMZ<E+\-089,"T+D+8$RC1(S
  324. XMI+,7YH5%RN0Y=7P1?O^B@-,B:1&[M$($J8%VD:O&>&4]0!KUUJ[8C3JR0(P\
  325. XM<E)*EH< )8H7N J$.,/="W;580)_M(0C-M'7J"Q<C8\2R0U3Q>&CRD+BZ#-X
  326. XM&OR ]D?B*:##_?LYMC,O6=[*CHP?80_X)!5 P?*D)O ,78[4J("*ZO.*L8W)
  327. XM3SD9NPM%M<F"4>TGV$R'D1<6GMM3<M*8,7(TP3,34Y 2"99=\;Z$(^QNR5Z(
  328. XM-2K5B)SJ<QS$I]440RK<0D0,V\(>Q&5OO6=>^&@6C!=1*(@]W//E/T(]QC(H
  329. XMI_\$XR>X7;1"HP"6ELMBCC$8QA32[[Z9*H,*,_;Y;M(Y8PULA-,MU8'@<:'T
  330. XM49;00S5/%[FJL)EL>!#9;JD^"4%FT+I9+BNR0$Z?JW_6@ (L /8&#;NV#;Z>
  331. XM6W0.$Q6/!<-A?'*7?KX8^W@.IY<AU-%&/.VF*)Z4-2*O\CY+F%&4#</+DB;L
  332. XM9N02D5',\PV83WVK3DH?(;;4B^HN-:I@_+2NUE3P&!*ISHJK;HW7#ITZCG9H
  333. XM1=3.4IGPL "8D>0:.;P$FJ6]7%^(AF%5:GV+'/WR,+1O 4I5I )UK&!2)4XH
  334. XM0236G )T]9J I+RL 4E$-DXC] [TK4X:T*%]:7[@*/##Y>-URZNL9Q)HGD.P
  335. XMS8H;6ZR'PZIC&VI2[A^!14B_5!OM'Z2$])N[<+U KB,%NFLVP7\:6B'HN#]P
  336. XM,784<&N -9P"&MPXR4@;6!X[O%BOB.;"N"JG@VXD-E[7"U-*Q!Y:H?$=-*^(
  337. XM>+N*"EAS2RD'6# Y"%^["=!:D>@,0\_"@US'2%];5'0F.V#B"HMF@LJYOLV2
  338. XM3-$JQC:Z-)W(6BJ8KN^*)XXF!)D^S5?TZ_!C8$R".28,^VFG MJZ4> "@+UM
  339. XMA4W#1PWBZ\9%XU*L#F^0-;N*LX^EF%^B_M18+I\80Z8]WAI^X=S4+P+D*J\@
  340. XMK0>#S@LP1!QB@GM_-C>LL%G8O.O)\TUZAN$C=F#C<3G74NNT+0T; W*Z3A27
  341. XMI\_&EQ2!3)D:A?7!VGP@4^ M_PFWPN58M"MI^E[GKI_8D *,@8"*&5&Q=6TT
  342. XM)FP05=TS=">6*A-J,4H8VQ[.(U,N"B%GB/BQ$&0/,(90NI *0VLY:WNN<.\V
  343. XML8\%!NP[013[<-)Y&-*Z&GH:\F$NAB="*M/%B7%P,GIAMS![\Y5DD<&]\5S[
  344. XM5QO2.(^2R$,BP6IN60#UK.D'D6P\ 5K+# VPL4$D-8X2%DT_MM\:(1E&=11]
  345. XM8M,EJ2PZ,":20+V!L5UCLD&[1<.?A^G7D)'"OA_$L@,'584$]H/VLWO5)2,G
  346. XM:S87Y9*%"##;/;,??9/ D1T[H>7BB0[)\L"YT,!<LL=S(HL\A!M;5?#,KEC7
  347. XMONRN] EK=I.DCRVNV/I2/TX5O3/)'FRUDRVJAG'@B;^#?0Z>RV;+:%W<L*!R
  348. XMK]$K8H-U-CL;CBTJ<!9,5O?8-&:"S%C%\Q#:G4, :V'49Z_90G<2!!H@AN$^
  349. XM0]P=KHV.R15VE:UD8"K@KL_6%.M5@;-@A70Y'FFSAK'9)H[0,FOJ365 ?5/+
  350. XMK=UZ&I?+W)D"F!M"ODO75!3:2 >&]N3Z^:;*[C:0-3 ;NDKQR2KIBQF>.)?L
  351. XM-AT+F(H^@UXOM^(C-C*(>%RRU1ZKR2L;FX![Y6HC"8+6@":XM6>FF.*^)A_K
  352. XM=,['*>0R\X&I+Z'?;;Q,M T39FP:CY6!@.W5/D_6M9T$T((VS3/:!S&O+I>4
  353. XMCP_/%(^/1EC#APTZ?G\,B6W7<H@AHO?85_)( &K[K%/:SXFJ FK"@;V^+K"0
  354. XMCU/(9VW,MEE[L^W#!O\"9</-VH_9@6,;I2VY]FHK#<H^C8D^=E$EAD)J>5\K
  355. XM4\0:BN(#B[ABD)U6"")LM>_:"EO<=K;# @)H8N^NMJW6?11*:7XX? +>X5$4
  356. XM4:@JNNT_:FD[N7U&<0&4CQA I^1 +T-WNGUN5>+9MNG:S&T7\'([NQU(=6Y7
  357. XMKU0HW&-T2S#7&GS=.'=05;#;W&V'<'J;I7%UVS]+L5L4((D'"*QJ6H#>7F^C
  358. XMF;?;]NW\=G(:LJW?[F]?D/';_NT MV1"J"W@+G#[>@G<!NX$]XH7P*W@;G"O
  359. XA*Q#<#NX(]WU;PDWA#FKSMRO<&&ZK<(9[PTV!Z /L !0 
  360. Xend
  361. END_OF_FILE
  362.   if test 20450 -ne `wc -c <'bitmaps/earth.xpm.Z.u.b'`; then
  363.     echo shar: \"'bitmaps/earth.xpm.Z.u.b'\" unpacked with wrong size!
  364.   fi
  365.   # end of 'bitmaps/earth.xpm.Z.u.b'
  366. fi
  367. if test -f 'blocks.c1' -a "${1}" != "-c" ; then 
  368.   echo shar: Will not clobber existing file \"'blocks.c1'\"
  369. else
  370.   echo shar: Extracting \"'blocks.c1'\" \(31252 characters\)
  371.   sed "s/^X//" >'blocks.c1' <<'END_OF_FILE'
  372. X#include "copyright.h"
  373. X
  374. X/*
  375. X *  Include file dependencies:
  376. X */
  377. X
  378. X#include <stdio.h>
  379. X#include <stdlib.h>
  380. X#include <stddef.h>
  381. X#include <X11/Xlib.h>
  382. X#include <X11/Xutil.h>
  383. X#include <X11/Xos.h>
  384. X#include <xpm.h>
  385. X
  386. X#include "bitmaps/blueblock.xpm"
  387. X#include "bitmaps/exblueblock1.xpm"
  388. X#include "bitmaps/exblueblock2.xpm"
  389. X#include "bitmaps/exblueblock3.xpm"
  390. X
  391. X#include "bitmaps/redblock.xpm"
  392. X#include "bitmaps/exredblock1.xpm"
  393. X#include "bitmaps/exredblock2.xpm"
  394. X#include "bitmaps/exredblock3.xpm"
  395. X
  396. X#include "bitmaps/yellowblock.xpm"
  397. X#include "bitmaps/exyellowblock1.xpm"
  398. X#include "bitmaps/exyellowblock2.xpm"
  399. X#include "bitmaps/exyellowblock3.xpm"
  400. X
  401. X#include "bitmaps/greenblock.xpm"
  402. X#include "bitmaps/exgreenblock1.xpm"
  403. X#include "bitmaps/exgreenblock2.xpm"
  404. X#include "bitmaps/exgreenblock3.xpm"
  405. X
  406. X#include "bitmaps/tanblock.xpm"
  407. X#include "bitmaps/extanblock1.xpm"
  408. X#include "bitmaps/extanblock2.xpm"
  409. X#include "bitmaps/extanblock3.xpm"
  410. X
  411. X#include "bitmaps/purpleblock.xpm"
  412. X#include "bitmaps/expurpleblock1.xpm"
  413. X#include "bitmaps/expurpleblock2.xpm"
  414. X#include "bitmaps/expurpleblock3.xpm"
  415. X
  416. X#include "bitmaps/bombblock.xpm"
  417. X#include "bitmaps/exbombblock1.xpm"
  418. X#include "bitmaps/exbombblock2.xpm"
  419. X#include "bitmaps/exbombblock3.xpm"
  420. X
  421. X#include "bitmaps/counterblock1.xpm"
  422. X#include "bitmaps/counterblock2.xpm"
  423. X#include "bitmaps/counterblock3.xpm"
  424. X#include "bitmaps/counterblock4.xpm"
  425. X#include "bitmaps/counterblock5.xpm"
  426. X#include "bitmaps/counterblock.xpm"
  427. X#include "bitmaps/excounterblock1.xpm"
  428. X#include "bitmaps/excounterblock2.xpm"
  429. X#include "bitmaps/excounterblock3.xpm"
  430. X
  431. X#include "bitmaps/blackblock.xpm"
  432. X#include "bitmaps/reverse.xpm"
  433. X#include "bitmaps/hyperspace.xpm"
  434. X#include "bitmaps/machinegun.xpm"
  435. X#include "bitmaps/walloff.xpm"
  436. X#include "bitmaps/multiballblock.xpm"
  437. X#include "bitmaps/stickyblock.xpm"
  438. X#include "bitmaps/paddleshrink.xpm"
  439. X#include "bitmaps/paddleexpand.xpm"
  440. X
  441. X#include "bitmaps/xtraball.xpm"
  442. X#include "bitmaps/xtraball2.xpm"
  443. X
  444. X#include "bitmaps/x2bonus1.xpm"
  445. X#include "bitmaps/x2bonus2.xpm"
  446. X#include "bitmaps/x2bonus3.xpm"
  447. X#include "bitmaps/x2bonus4.xpm"
  448. X
  449. X#include "bitmaps/x4bonus1.xpm"
  450. X#include "bitmaps/x4bonus2.xpm"
  451. X#include "bitmaps/x4bonus3.xpm"
  452. X#include "bitmaps/x4bonus4.xpm"
  453. X
  454. X#include "bitmaps/bonus1.xpm"
  455. X#include "bitmaps/bonus2.xpm"
  456. X#include "bitmaps/bonus3.xpm"
  457. X#include "bitmaps/bonus4.xpm"
  458. X
  459. X#include "bitmaps/exx2bonus1.xpm"
  460. X#include "bitmaps/exx2bonus2.xpm"
  461. X#include "bitmaps/exx2bonus3.xpm"
  462. X
  463. X#include "bitmaps/death1.xpm"
  464. X#include "bitmaps/death2.xpm"
  465. X#include "bitmaps/death3.xpm"
  466. X#include "bitmaps/death4.xpm"
  467. X#include "bitmaps/death5.xpm"
  468. X
  469. X#include "bitmaps/exdeath1.xpm"
  470. X#include "bitmaps/exdeath2.xpm"
  471. X#include "bitmaps/exdeath3.xpm"
  472. X#include "bitmaps/exdeath4.xpm"
  473. X
  474. X#include "audio.h"
  475. X#include "misc.h"
  476. X#include "mess.h"
  477. X#include "gun.h"
  478. X#include "error.h"
  479. X#include "bonus.h"
  480. X#include "special.h"
  481. X#include "main.h"
  482. X#include "init.h"
  483. X#include "stage.h"
  484. X#include "ball.h"
  485. X#include "score.h"
  486. X#include "paddle.h"
  487. X#include "level.h"
  488. X#include "sfx.h"
  489. X
  490. X#include "blocks.h"
  491. X
  492. X/*
  493. X *  Internal macro definitions:
  494. X */
  495. X
  496. X#define EXPLODE_DELAY                10    
  497. X#define BONUS_DELAY                    150    
  498. X#define BONUS_LENGTH                2000
  499. X#define NUMBER_OF_BULLETS_NEW_LEVEL 4
  500. X#define DEATH_DELAY1                100
  501. X#define DEATH_DELAY2                700
  502. X#define EXTRABALL_DELAY                300
  503. X#define RANDOM_DELAY                500
  504. X
  505. X/*
  506. X *  Internal type declarations:
  507. X */
  508. X
  509. X#if NeedFunctionPrototypes
  510. Xstatic void ClearBlock(int row, int col);
  511. Xstatic void CalculateBlockGeometry(int row, int col);
  512. Xstatic void SetBlockUpForExplosion(int row, int col, int frame);
  513. X#else
  514. Xstatic void SetBlockUpForExplosion();
  515. Xstatic void ClearBlock();
  516. Xstatic void CalculateBlockGeometry();
  517. X#endif
  518. X
  519. X/*
  520. X *  Internal variable declarations:
  521. X */
  522. X
  523. Xstatic Pixmap    exredblock[3],        exredblockM[3];
  524. Xstatic Pixmap    extanblock[3],        extanblockM[3];
  525. Xstatic Pixmap    exyellowblock[3],    exyellowblockM[3];
  526. Xstatic Pixmap    exgreenblock[3],    exgreenblockM[3];
  527. Xstatic Pixmap    exblueblock[3],        exblueblockM[3];
  528. Xstatic Pixmap    expurpleblock[3],    expurpleblockM[3];
  529. Xstatic Pixmap    exbombblock[3],        exbombblockM[3];
  530. Xstatic Pixmap    excounterblock[3],    excounterblockM[3];
  531. Xstatic Pixmap    exx2bonus[3],        exx2bonusM[3];
  532. Xstatic Pixmap    x2bonus[4],            x2bonusM[4];
  533. Xstatic Pixmap    x4bonus[4],            x4bonusM[4];
  534. Xstatic Pixmap    Bonus[4],            BonusM[4];
  535. Xstatic Pixmap    death[5],            deathM[5];
  536. Xstatic Pixmap    exdeath[5],            exdeathM[5];
  537. Xstatic Pixmap    counterblock[6],    counterblockM[6];
  538. Xstatic Pixmap    extraball[3],        extraballM[3];
  539. X
  540. Xstatic Pixmap    redblock, greenblock, blueblock, yellowblock, purpleblock;    
  541. Xstatic Pixmap    tanblock, blackblock, bombblock, revblock,     hyperblock;
  542. Xstatic Pixmap    mgunblock, walloffblock, multiball, sticky, paddleshrink;
  543. Xstatic Pixmap    paddleexpand;
  544. X
  545. Xstatic Pixmap    redblockM, greenblockM, blueblockM, yellowblockM, purpleblockM;    
  546. Xstatic Pixmap    tanblockM, blackblockM, bombblockM, revblockM,     hyperblockM;
  547. Xstatic Pixmap    mgunblockM, walloffblockM, multiballM, stickyM, paddleshrinkM;
  548. Xstatic Pixmap    paddleexpandM;
  549. X
  550. Xstruct aBlock     blocks[MAX_ROW][MAX_COL];
  551. Xint            blocksExploding = 0;
  552. Xint            rowHeight;
  553. Xint            colWidth;
  554. X
  555. X#if NeedFunctionPrototypes
  556. Xvoid InitialiseBlocks(Display *display, Window window, Colormap colormap)
  557. X#else
  558. Xvoid InitialiseBlocks(display, window, colormap)
  559. X    Display *display;
  560. X    Window window;
  561. X    Colormap colormap;
  562. X#endif
  563. X{
  564. X    XpmAttributes   attributes;
  565. X    int             XpmErrorStatus;
  566. X
  567. X    attributes.valuemask = XpmColormap;
  568. X    attributes.colormap = colormap;
  569. X
  570. X    /* Create all xpm pixmap blocks from the files */
  571. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, redblock_xpm, 
  572. X        &redblock, &redblockM, &attributes);
  573. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(red)");
  574. X
  575. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, blueblock_xpm, 
  576. X        &blueblock, &blueblockM, &attributes);
  577. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(blue)");
  578. X
  579. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, greenblock_xpm, 
  580. X        &greenblock, &greenblockM, &attributes);
  581. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(green)");
  582. X
  583. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, yellowblock_xpm, 
  584. X        &yellowblock, &yellowblockM, &attributes);
  585. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(yellow)");
  586. X
  587. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, tanblock_xpm, 
  588. X        &tanblock, &tanblockM, &attributes);
  589. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(tan)");
  590. X
  591. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, purpleblock_xpm, 
  592. X        &purpleblock, &purpleblockM, &attributes);
  593. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(purple)");
  594. X
  595. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, blackblock_xpm, 
  596. X        &blackblock, &blackblockM, &attributes);
  597. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(wall)");
  598. X
  599. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, bombblock_xpm, 
  600. X        &bombblock, &bombblockM, &attributes);
  601. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(bomb)");
  602. X
  603. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, reverse_xpm, 
  604. X        &revblock, &revblockM, &attributes);
  605. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(reverse)");
  606. X
  607. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, hyperspace_xpm, 
  608. X        &hyperblock, &hyperblockM, &attributes);
  609. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(hyperspace)");
  610. X
  611. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, machinegun_xpm, 
  612. X        &mgunblock, &mgunblockM, &attributes);
  613. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(machinegun)");
  614. X
  615. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, walloff_xpm, 
  616. X        &walloffblock, &walloffblockM, &attributes);
  617. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(walloff)");
  618. X
  619. X    /* Explosion for yellow block */
  620. X
  621. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  622. X        exyellowblock1_xpm, &exyellowblock[0], &exyellowblockM[0], 
  623. X        &attributes);
  624. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exyellow)");
  625. X
  626. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  627. X        exyellowblock2_xpm, &exyellowblock[1], &exyellowblockM[1], 
  628. X        &attributes);
  629. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exyellow)");
  630. X
  631. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  632. X        exyellowblock3_xpm, &exyellowblock[2], &exyellowblockM[2], 
  633. X        &attributes);
  634. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exyellow)");
  635. X
  636. X    /* Explosion for red block */
  637. X
  638. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, exredblock1_xpm, 
  639. X        &exredblock[0], &exredblockM[0], &attributes);
  640. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exred)");
  641. X
  642. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, exredblock2_xpm, 
  643. X        &exredblock[1], &exredblockM[1], &attributes);
  644. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exred)");
  645. X
  646. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, exredblock3_xpm, 
  647. X        &exredblock[2], &exredblockM[2], &attributes);
  648. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exred)");
  649. X
  650. X    /* Explosion for green block */
  651. X
  652. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  653. X        exgreenblock1_xpm, &exgreenblock[0], &exgreenblockM[0], &attributes);
  654. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exgreen)");
  655. X
  656. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  657. X        exgreenblock2_xpm, &exgreenblock[1], &exgreenblockM[1], &attributes);
  658. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exgreen)");
  659. X
  660. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  661. X        exgreenblock3_xpm, &exgreenblock[2], &exgreenblockM[2], &attributes);
  662. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exgreen)");
  663. X
  664. X    /* Explosion for blue block */
  665. X
  666. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  667. X        exblueblock1_xpm, &exblueblock[0], &exblueblockM[0], &attributes);
  668. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exblue)");
  669. X
  670. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  671. X        exblueblock2_xpm, &exblueblock[1], &exblueblockM[1], &attributes);
  672. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exblue)");
  673. X
  674. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  675. X        exblueblock3_xpm, &exblueblock[2], &exblueblockM[2], &attributes);
  676. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exblue)");
  677. X
  678. X    /* Explosion for tan block */
  679. X
  680. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  681. X        extanblock1_xpm, &extanblock[0], &extanblockM[0], &attributes);
  682. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(extan)");
  683. X
  684. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  685. X        extanblock2_xpm, &extanblock[1], &extanblockM[1], &attributes);
  686. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(extan)");
  687. X
  688. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  689. X        extanblock3_xpm, &extanblock[2], &extanblockM[2], &attributes);
  690. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(extan)");
  691. X
  692. X    /* Explosion for purple block */
  693. X
  694. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  695. X        expurpleblock1_xpm, &expurpleblock[0], &expurpleblockM[0], 
  696. X        &attributes);
  697. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(expurple)");
  698. X
  699. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  700. X        expurpleblock2_xpm, &expurpleblock[1], &expurpleblockM[1], 
  701. X        &attributes);
  702. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(expurple)");
  703. X
  704. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  705. X        expurpleblock3_xpm, &expurpleblock[2], &expurpleblockM[2], 
  706. X        &attributes);
  707. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(expurple)");
  708. X
  709. X    /* Explosion for bomb block */
  710. X
  711. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  712. X        exbombblock1_xpm, &exbombblock[0], &exbombblockM[0], &attributes);
  713. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exbomb)");
  714. X
  715. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  716. X        exbombblock2_xpm, &exbombblock[1], &exbombblockM[1], &attributes);
  717. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exbomb)");
  718. X
  719. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  720. X        exbombblock3_xpm, &exbombblock[2], &exbombblockM[2], &attributes);
  721. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exbomb)");
  722. X
  723. X    /* Explosion for counter block */
  724. X
  725. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  726. X        excounterblock1_xpm, &excounterblock[0], &excounterblockM[0], 
  727. X        &attributes);
  728. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(excounter)");
  729. X
  730. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  731. X        excounterblock2_xpm, &excounterblock[1], &excounterblockM[1], 
  732. X        &attributes);
  733. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(excounter)");
  734. X
  735. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  736. X        excounterblock3_xpm, &excounterblock[2], &excounterblockM[2], 
  737. X        &attributes);
  738. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(excounter)");
  739. X
  740. X    /* countdown for counter block */
  741. X
  742. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  743. X        counterblock_xpm, &counterblock[0], &counterblockM[0], 
  744. X        &attributes);
  745. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(counter0)");
  746. X
  747. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  748. X        counterblock1_xpm, &counterblock[1], &counterblockM[1], 
  749. X        &attributes);
  750. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(counter1)");
  751. X
  752. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  753. X        counterblock2_xpm, &counterblock[2], &counterblockM[2], 
  754. X        &attributes);
  755. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(counter2)");
  756. X
  757. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  758. X        counterblock3_xpm, &counterblock[3], &counterblockM[3], 
  759. X        &attributes);
  760. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(counter3)");
  761. X
  762. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  763. X        counterblock4_xpm, &counterblock[4], &counterblockM[4], 
  764. X        &attributes);
  765. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(counter4)");
  766. X
  767. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  768. X        counterblock5_xpm, &counterblock[5], &counterblockM[5], 
  769. X        &attributes);
  770. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(counter5)");
  771. X
  772. X    /* Bonus block stuff */
  773. X
  774. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  775. X        x2bonus1_xpm, &x2bonus[0], &x2bonusM[0], &attributes);
  776. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(x2bonus1)");
  777. X
  778. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  779. X        x2bonus2_xpm, &x2bonus[1], &x2bonusM[1], &attributes);
  780. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(x2bonus2)");
  781. X
  782. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  783. X        x2bonus3_xpm, &x2bonus[2], &x2bonusM[2], &attributes);
  784. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(x2bonus3)");
  785. X
  786. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  787. X        x2bonus4_xpm, &x2bonus[3], &x2bonusM[3], &attributes);
  788. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(x2bonus4)");
  789. X
  790. X
  791. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  792. X        x4bonus1_xpm, &x4bonus[0], &x4bonusM[0], &attributes);
  793. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(x4bonus1)");
  794. X
  795. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  796. X        x4bonus2_xpm, &x4bonus[1], &x4bonusM[1], &attributes);
  797. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(x4bonus2)");
  798. X
  799. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  800. X        x4bonus3_xpm, &x4bonus[2], &x4bonusM[2], &attributes);
  801. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(x4bonus3)");
  802. X
  803. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  804. X        x4bonus4_xpm, &x4bonus[3], &x4bonusM[3], &attributes);
  805. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(x4bonus4)");
  806. X
  807. X
  808. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  809. X        bonus1_xpm, &Bonus[0], &BonusM[0], &attributes);
  810. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(bonus1)");
  811. X
  812. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  813. X        bonus2_xpm, &Bonus[1], &BonusM[1], &attributes);
  814. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(bonus2)");
  815. X
  816. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  817. X        bonus3_xpm, &Bonus[2], &BonusM[2], &attributes);
  818. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(bonus3)");
  819. X
  820. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  821. X        bonus4_xpm, &Bonus[3], &BonusM[3], &attributes);
  822. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(bonus4)");
  823. X
  824. X
  825. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  826. X        exx2bonus1_xpm, &exx2bonus[0], &exx2bonusM[0], &attributes);
  827. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exbonus)");
  828. X
  829. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  830. X        exx2bonus2_xpm, &exx2bonus[1], &exx2bonusM[1], &attributes);
  831. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exbonus)");
  832. X
  833. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  834. X        exx2bonus3_xpm, &exx2bonus[2], &exx2bonusM[2], &attributes);
  835. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exbonus)");
  836. X
  837. X    /* Death block initialisation */
  838. X
  839. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  840. X        death1_xpm, &death[0], &deathM[0], &attributes);
  841. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(death)");
  842. X
  843. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  844. X        death2_xpm, &death[1], &deathM[1], &attributes);
  845. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(death)");
  846. X
  847. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  848. X        death3_xpm, &death[2], &deathM[2], &attributes);
  849. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(death)");
  850. X
  851. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  852. X        death4_xpm, &death[3], &deathM[3], &attributes);
  853. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(death)");
  854. X
  855. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  856. X        death5_xpm, &death[4], &deathM[4], &attributes);
  857. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(death)");
  858. X
  859. X    /* Death block explosion init */
  860. X
  861. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  862. X        exdeath1_xpm, &exdeath[0], &exdeathM[0], &attributes);
  863. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exdeath)");
  864. X
  865. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  866. X        exdeath2_xpm, &exdeath[1], &exdeathM[1], &attributes);
  867. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exdeath)");
  868. X
  869. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  870. X        exdeath3_xpm, &exdeath[2], &exdeathM[2], &attributes);
  871. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exdeath)");
  872. X
  873. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  874. X        exdeath4_xpm, &exdeath[3], &exdeathM[3], &attributes);
  875. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(exdeath)");
  876. X
  877. X    /* Extra balll pixmaps */
  878. X
  879. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  880. X        xtraball_xpm, &extraball[0], &extraballM[0], &attributes);
  881. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(extraball)");
  882. X
  883. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  884. X        xtraball2_xpm, &extraball[1], &extraballM[1], &attributes);
  885. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(extraball)");
  886. X
  887. X    /* Multiple ball pixmap */
  888. X
  889. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  890. X        multiballblock_xpm, &multiball, &multiballM, &attributes);
  891. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(multiball)");
  892. X
  893. X    /* Sticky block */
  894. X
  895. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  896. X        stickyblock_xpm, &sticky, &stickyM, &attributes);
  897. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(sticky)");
  898. X
  899. X    /* paddle shrink and expand block */
  900. X
  901. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  902. X        paddleshrink_xpm, &paddleshrink, &paddleshrinkM, &attributes);
  903. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(paddleshrink)");
  904. X
  905. X    XpmErrorStatus = XpmCreatePixmapFromData(display, window, 
  906. X        paddleexpand_xpm, &paddleexpand, &paddleexpandM, &attributes);
  907. X    HandleXPMError(display, XpmErrorStatus, "InitialiseBlocks(paddleexpand)");
  908. X
  909. X    /* Free the xpm pixmap attributes */
  910. X    XpmFreeAttributes(&attributes);
  911. X}
  912. X
  913. X#if NeedFunctionPrototypes
  914. Xvoid PlaySoundForBlock(int type)
  915. X#else
  916. Xvoid PlaySoundForBlock(type)
  917. X    int type;
  918. X#endif
  919. X{
  920. X    /* If no sound the no sound */
  921. X    if (noSound == True) return;
  922. X
  923. X    /* Play the sound effect for the block being hit */
  924. X    switch (type)
  925. X    {
  926. X        case BOMB_BLK:        
  927. X            playSoundFile("bomb", 50);
  928. X            break;
  929. X
  930. X        case BULLET_BLK:
  931. X            playSoundFile("ammo", 50);
  932. X            break;
  933. X
  934. X        case RED_BLK:
  935. X        case GREEN_BLK:        
  936. X        case BLUE_BLK:    
  937. X        case TAN_BLK:
  938. X        case PURPLE_BLK:    
  939. X        case YELLOW_BLK:
  940. X        case COUNTER_BLK:
  941. X        case RANDOM_BLK:
  942. X            playSoundFile("touch", 100);
  943. X            break;
  944. X
  945. X        case BONUSX2_BLK:    
  946. X        case BONUSX4_BLK:    
  947. X        case BONUS_BLK:    
  948. X        case MGUN_BLK:    
  949. X        case EXTRABALL_BLK:    
  950. X        case WALLOFF_BLK:    
  951. X        case REVERSE_BLK:    
  952. X        case MULTIBALL_BLK:
  953. X        case STICKY_BLK:
  954. X        case PAD_SHRINK_BLK:
  955. X        case PAD_EXPAND_BLK:
  956. X            playSoundFile("bonus", 50);
  957. X            break;
  958. X
  959. X        case DEATH_BLK:    
  960. X            playSoundFile("evillaugh", 100);
  961. X            break;
  962. X
  963. X        case BLACK_BLK:        
  964. X            playSoundFile("touch", 50);
  965. X            break;
  966. X
  967. X        case HYPERSPACE_BLK:
  968. X            playSoundFile("hyperspace", 70);
  969. X            break;
  970. X
  971. X        case KILL_BLK:
  972. X            ErrorMessage("Error: kill block type in PlaySoundForBlock()");
  973. X            break;
  974. X
  975. X        default:
  976. X            ErrorMessage("Error: Unknown block type in PlaySoundForBlock()");
  977. X            break;
  978. X    }
  979. X}
  980. X
  981. X#if NeedFunctionPrototypes
  982. Xvoid ExplodeBlockType(Display *display, Window window, int x, int y, 
  983. X    int type, int slide)
  984. X#else
  985. Xvoid ExplodeBlockType(display, window, x, y, type, slide)
  986. X    Display *display;
  987. X    Window window;
  988. X    int x;
  989. X    int y; 
  990. X    int type;
  991. X    int slide;
  992. X#endif
  993. X{
  994. X    /* Draw a frame from the blocks explode animation */
  995. X    switch (type)
  996. X    {
  997. X        case BOMB_BLK:        /* Draw the bomb block explosion slide */
  998. X            RenderShape(display, window, exbombblock[slide], 
  999. X                exbombblockM[slide], x, y, 30, 30, True);
  1000. X            break;
  1001. X
  1002. X        case MULTIBALL_BLK:
  1003. X        case RED_BLK:        /* Draw a red block explosion slide */
  1004. X            RenderShape(display, window, exredblock[slide], 
  1005. X                exredblockM[slide], x, y, 40, 20, True);
  1006. X            break;
  1007. X
  1008. X        case GREEN_BLK:        /* Draw a green block explosion slide */
  1009. X            RenderShape(display, window, exgreenblock[slide], 
  1010. X                exgreenblockM[slide], x, y, 40, 20, True);
  1011. X            break;
  1012. X
  1013. X        case BLUE_BLK:        /* Draw a blue block explosion slide */
  1014. X            RenderShape(display, window, exblueblock[slide], 
  1015. X                exblueblockM[slide], x, y, 40, 20, True);
  1016. X            break;
  1017. X
  1018. X        case TAN_BLK:        /* Draw a tan block explosion slide */
  1019. X            RenderShape(display, window, extanblock[slide], 
  1020. X                extanblockM[slide], x, y, 40, 20, True);
  1021. X            break;
  1022. X
  1023. X        case PURPLE_BLK:    /* Draw a purple block explosion slide */
  1024. X            RenderShape(display, window, expurpleblock[slide], 
  1025. X                expurpleblockM[slide], x, y, 40, 20, True);
  1026. X            break;
  1027. X
  1028. X        case BULLET_BLK:    /* Draw a bullet block explosion slide */
  1029. X        case YELLOW_BLK:    /* Draw a yellow block explosion slide */
  1030. X            RenderShape(display, window, exyellowblock[slide], 
  1031. X                exyellowblockM[slide], x, y, 40, 20, True);
  1032. X            break;
  1033. X
  1034. X        case COUNTER_BLK:    /* Draw a counter block explosion slide */
  1035. X            RenderShape(display, window, excounterblock[slide], 
  1036. X                excounterblockM[slide], x, y, 40, 20, True);
  1037. X            break;
  1038. X
  1039. X        case BONUS_BLK:        /* Draw a bonus coin block explosion slide */
  1040. X        case BONUSX4_BLK:    /* Draw a bonus x2 oin block explosion slide */
  1041. X        case BONUSX2_BLK:    /* Draw a bonus x4 coin block explosion slide */
  1042. X            RenderShape(display, window, exx2bonus[slide], 
  1043. X                exx2bonusM[slide], x, y, 27, 27, True);
  1044. X            break;
  1045. X
  1046. X        case DEATH_BLK:        /* Draw a pirate death block explosion slide */
  1047. X            RenderShape(display, window, exdeath[slide], 
  1048. X                exdeathM[slide], x, y, 30, 30, True);
  1049. X            break;
  1050. X
  1051. X        case BLACK_BLK:        /* The wall doesn't have any animation */
  1052. X        case REVERSE_BLK:    /* The reverse doesn't have any animation */
  1053. X        case HYPERSPACE_BLK:/* The hyperspace doesn't have any animation */
  1054. X        case EXTRABALL_BLK:    /* The extra ball doesn't have any animation */
  1055. X        case MGUN_BLK:        /* The machine gun doesn't have any animation */
  1056. X        case WALLOFF_BLK:    /* The wall off doesn't have any animation */
  1057. X        case STICKY_BLK:    /* No animation for sticky block either */
  1058. X        case PAD_SHRINK_BLK:
  1059. X        case PAD_EXPAND_BLK:
  1060. X            break;
  1061. X
  1062. X            break;
  1063. X
  1064. X        default:
  1065. X            ErrorMessage("Error: Unknown block type in ExplodeBlockType()");
  1066. X            break;
  1067. X    }
  1068. X}
  1069. X
  1070. X#if NeedFunctionPrototypes
  1071. Xvoid AddBonusBlock(Display *display, Window window, int *row, int *col, 
  1072. X    int type)
  1073. X#else
  1074. Xvoid AddBonusBlock(display, window, row, col, type)
  1075. X    Display *display;
  1076. X    Window window;
  1077. X    int *row;
  1078. X    int *col;
  1079. X    int type;
  1080. X#endif
  1081. X{
  1082. X    int r, c;
  1083. X    struct aBlock *blockP;
  1084. X
  1085. X    /* Give me a new random block position */
  1086. X    r = rand() % (MAX_ROW - 4);
  1087. X    c = rand() % MAX_COL;
  1088. X
  1089. X    /* Pointer to the correct block we need - speed things up */
  1090. X    blockP = &blocks[r][c];
  1091. X
  1092. X    /* Add a bonus coin in this block only if it isn't occupied and 
  1093. X     * it isn't exploding.
  1094. X     */
  1095. X    if ((blockP->occupied == False) && (blockP->explodeStartFrame == 0))
  1096. X    {
  1097. X        AddNewBlock(display, window, r, c, type, 0);
  1098. X        bonusBlock = True;
  1099. X
  1100. X        /* Setup the block structure for new block */
  1101. X        blockP->nextFrame         = frame + BONUS_DELAY;
  1102. X        blockP->lastFrame         = frame + BONUS_LENGTH;
  1103. X        blockP->bonusSlide         = 3;
  1104. X
  1105. X        /* Return the new bonus row & coloumn position */
  1106. X        *row = r; *col = c;
  1107. X    }
  1108. X}
  1109. X
  1110. X#if NeedFunctionPrototypes
  1111. Xstatic int GetRandomType(void)
  1112. X#else
  1113. Xstatic int GetRandomType()
  1114. X#endif
  1115. X{
  1116. X    /* This function will return a random new block block type */
  1117. X    switch (rand() % 7)
  1118. X    {
  1119. X        case 0:
  1120. X            return RED_BLK;
  1121. X
  1122. X        case 1:
  1123. X            return BLUE_BLK;
  1124. X
  1125. X        case 2:
  1126. X            return GREEN_BLK;
  1127. X
  1128. X        case 3:
  1129. X            return TAN_BLK;
  1130. X
  1131. X        case 4:
  1132. X            return YELLOW_BLK;
  1133. X
  1134. X        case 5:
  1135. X            return PURPLE_BLK;
  1136. X
  1137. X        case 6:
  1138. X            return BULLET_BLK;
  1139. X    }
  1140. X
  1141. X    /* Shouldn't get here but it stops warnings on compiler */
  1142. X    return YELLOW_BLK;
  1143. X}
  1144. X
  1145. X#if NeedFunctionPrototypes
  1146. Xvoid HandlePendingBonuses(Display *display, Window window, int type, 
  1147. X    int r, int c)
  1148. X#else
  1149. Xvoid HandlePendingBonuses(display, window, type, r, c)
  1150. X    Display *display;
  1151. X    Window window;
  1152. X    int type;
  1153. X    int r, c;
  1154. X#endif
  1155. X{
  1156. X    struct aBlock *blockP;
  1157. X
  1158. X    blockP = &blocks[r][c];
  1159. X
  1160. X    if (blockP->nextFrame == frame) 
  1161. X    {
  1162. X        if (frame <= blockP->lastFrame)
  1163. X        {
  1164. X            /* Advance to the next frame of animation */
  1165. X            DrawTheBlock(display, window, 
  1166. X                blockP->x, blockP->y, 
  1167. X                type, blockP->bonusSlide);
  1168. X
  1169. X                blockP->nextFrame = frame + BONUS_DELAY;
  1170. X                blockP->bonusSlide--;
  1171. X
  1172. X                if (blockP->bonusSlide < 0)
  1173. X                blockP->bonusSlide = 3;
  1174. X        }
  1175. X        else
  1176. X        {
  1177. X            /* Kill off bonus block */
  1178. X            bonusBlock = False;
  1179. X            blockP->occupied = False;
  1180. X            XClearArea(display, window, 
  1181. X                blockP->x, blockP->y,
  1182. X                blockP->width, blockP->height, 
  1183. X                False);
  1184. X        }
  1185. X    }
  1186. X}
  1187. X
  1188. X#if NeedFunctionPrototypes
  1189. Xvoid HandlePendingAnimations(Display *display, Window window)
  1190. X#else
  1191. Xvoid HandlePendingAnimations(display, window)
  1192. X    Display *display;
  1193. X    Window window;
  1194. X#endif
  1195. X{
  1196. X    int r, c;
  1197. X    struct aBlock *blockP;
  1198. X
  1199. X    /* Cycle through all rows and columns and update any animations that
  1200. X     * need to be done every frame. ie: bonus etc
  1201. X     */
  1202. X    for (r = 0; r < MAX_ROW; r++)
  1203. X    {
  1204. X        for (c = 0; c < MAX_COL; c++)
  1205. X        {
  1206. X            blockP = &blocks[r][c];
  1207. X
  1208. X            /* Only bother if the block is occupied! */
  1209. X            if (blockP->occupied == True) 
  1210. X            {
  1211. X                switch (blockP->blockType)
  1212. X                {
  1213. X                    case BONUS_BLK:    /* Bonus coin symbol */
  1214. X                        HandlePendingBonuses(display, window, BONUS_BLK, r, c);
  1215. X                        break;
  1216. X
  1217. X                    case BONUSX2_BLK:    /* Bonus x2 coin symbol */
  1218. X                        HandlePendingBonuses(display, window, BONUSX2_BLK, r,c);
  1219. X                        break;
  1220. X
  1221. X                    case BONUSX4_BLK:    /* Bonus x4 coin symbol */
  1222. X                        HandlePendingBonuses(display, window, BONUSX4_BLK, r,c);
  1223. X                        break;
  1224. X
  1225. X                    case DEATH_BLK:    /* Death block animation */
  1226. X                        if (blockP->nextFrame == frame) 
  1227. X                        {
  1228. X                            /* Advance to the next frame of animation */
  1229. X                            DrawTheBlock(display, window, 
  1230. X                                blockP->x, blockP->y, 
  1231. X                                DEATH_BLK, blockP->bonusSlide);
  1232. X
  1233. X                            blockP->nextFrame = frame + DEATH_DELAY1;
  1234. X                            blockP->bonusSlide++;
  1235. X
  1236. X                            /* Have the delay bit between winks */
  1237. X                            if (blockP->bonusSlide > 4)
  1238. X                            {
  1239. X                                blockP->bonusSlide = 0;
  1240. X                                blockP->nextFrame = frame + DEATH_DELAY2;
  1241. X                                DrawTheBlock(display, window, 
  1242. X                                    blockP->x, blockP->y, 
  1243. X                                    DEATH_BLK, blockP->bonusSlide);
  1244. X                            }
  1245. X                        }
  1246. X                        break;
  1247. X
  1248. X                    case EXTRABALL_BLK:    /* extra ball block animation */
  1249. X                        if (blockP->nextFrame == frame) 
  1250. X                        {
  1251. X                            /* Advance to the next frame of animation */
  1252. X                            DrawTheBlock(display, window, 
  1253. X                                blockP->x, blockP->y, 
  1254. X                                EXTRABALL_BLK, blockP->bonusSlide);
  1255. X
  1256. X                            blockP->nextFrame = frame + EXTRABALL_DELAY;
  1257. X                            blockP->bonusSlide++;
  1258. X
  1259. X                            /* Have the delay bit between flashes */
  1260. X                            if (blockP->bonusSlide > 1)
  1261. X                                blockP->bonusSlide = 0;
  1262. X                        }
  1263. X                        break;
  1264. X                }
  1265. X
  1266. X                /* If it is a random block then change? */
  1267. X                if (blockP->random == True)
  1268. X                {
  1269. X                    if (blockP->nextFrame == frame) 
  1270. X                    {
  1271. X                        /* Change the block to a new block block. We should
  1272. X                         * be allright in just changing the blocktype etc.
  1273. X                         * as the blocks are all the same .
  1274. X                         */
  1275. X                        blockP->blockType = GetRandomType();
  1276. X                        blockP->bonusSlide = 0;
  1277. X
  1278. X                        DrawTheBlock(display, window, 
  1279. X                            blockP->x, blockP->y, 
  1280. X                            blockP->blockType, blockP->bonusSlide);
  1281. X
  1282. X                        blockP->nextFrame = 
  1283. X                            frame + (rand() % RANDOM_DELAY) + 300;
  1284. X                    }    
  1285. X                }
  1286. X            }
  1287. X        }
  1288. X    }
  1289. X}
  1290. X
  1291. X#if NeedFunctionPrototypes
  1292. Xvoid ExplodeBlocksPending(Display *display, Window window)
  1293. X#else
  1294. Xvoid ExplodeBlocksPending(display, window)
  1295. X    Display *display;
  1296. X    Window window;
  1297. X#endif
  1298. X{
  1299. X    int r, c, x, y, type;
  1300. X    struct aBlock *blockP;
  1301. X    char str[50];
  1302. X
  1303. X    /* If none are exploding then bug out */
  1304. X    if (blocksExploding == 0) return;
  1305. X
  1306. X    /* Cycle through all blocks exploding pending animation blocks */
  1307. X    for (r = 0; r < MAX_ROW; r++)
  1308. X    {
  1309. X        for (c = 0; c < MAX_COL; c++)
  1310. X        {
  1311. X            /* Get the pointer to the block we need */
  1312. X            blockP = &blocks[r][c];
  1313. X
  1314. X            /* Will be non-zero if animation is required */
  1315. X            if (blockP->explodeStartFrame)
  1316. X            {
  1317. X                /* Is it time to explode this frame */
  1318. X                if (blockP->explodeNextFrame == frame) 
  1319. X                {
  1320. X                    x = blockP->x;
  1321. X                    y = blockP->y;
  1322. X                    type = blockP->blockType;
  1323. X
  1324. X                    /* Switch on slide of animation */
  1325. X                    switch (blockP->explodeSlide)
  1326. X                    {
  1327. X                        case 1:    /* First frame of animation */
  1328. X                            ExplodeBlockType(display, window, x, y, type, 0);
  1329. X                            blockP->explodeNextFrame =
  1330. X                                blockP->explodeStartFrame;
  1331. X                            break;
  1332. X    
  1333. X                        case 2:    /* Second frame of animation */
  1334. X                            ExplodeBlockType(display, window, x, y, type, 1);
  1335. X                            break;
  1336. X    
  1337. X                        case 3:    /* Third frame of animation */
  1338. X                            ExplodeBlockType(display, window, x, y, type, 2);
  1339. X                            break;
  1340. X    
  1341. X                        case 4:    /* Last frame of animation  - clear */
  1342. X                            XClearArea(display, window, x, y, 
  1343. X                                blockP->width, 
  1344. X                                blockP->height, False);
  1345. X                            break;
  1346. X                    }
  1347. X    
  1348. X                    /* procede to next frame in animation */
  1349. X                    blockP->explodeSlide++;
  1350. X                    blockP->explodeNextFrame += EXPLODE_DELAY;
  1351. X    
  1352. X                    /* last frame so clean up animation and block */
  1353. X                    if (blockP->explodeSlide > 4)
  1354. X                    {
  1355. X                        blocksExploding--;
  1356. X                        blockP->occupied = 0;
  1357. X                        blockP->exploding = False;
  1358. X
  1359. X                        AddToScore((u_long) blockP->hitPoints);
  1360. X                        DisplayScore(display, scoreWindow, score);
  1361. X
  1362. X                        switch (blockP->blockType)
  1363. X                        {
  1364. X                            case BLACK_BLK:
  1365. X                            case PAD_SHRINK_BLK:
  1366. X                            case PAD_EXPAND_BLK:
  1367. X                                break;
  1368. X
  1369. X                            case BOMB_BLK:
  1370. X                                /* Explode all the ones around it */
  1371. X                                SetBlockUpForExplosion(r+1, c, 
  1372. END_OF_FILE
  1373.   if test 31252 -ne `wc -c <'blocks.c1'`; then
  1374.     echo shar: \"'blocks.c1'\" unpacked with wrong size!
  1375.   fi
  1376.   # end of 'blocks.c1'
  1377. fi
  1378. echo shar: End of archive 5 \(of 26\).
  1379. cp /dev/null ark5isdone
  1380. MISSING=""
  1381. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ; do
  1382.     if test ! -f ark${I}isdone ; then
  1383.     MISSING="${MISSING} ${I}"
  1384.     fi
  1385. done
  1386. if test "${MISSING}" = "" ; then
  1387.     echo You have unpacked all 26 archives.
  1388.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1389.     echo "merging split files..."
  1390.     cat blocks.c[12] > blocks.c
  1391.     rm blocks.c[12]
  1392.     echo "blocks.c done"
  1393.     cat bitmaps/earth.xpm.Z.u.[ab] > bitmaps/earth.xpm.Z.uue
  1394.     rm bitmaps/earth.xpm.Z.u.[ab]
  1395.     echo "bitmaps/earth.xpm.Z.uue done"
  1396. else
  1397.     echo You still must unpack the following archives:
  1398.     echo "        " ${MISSING}
  1399. fi
  1400. exit 0
  1401. exit 0 # Just in case...
  1402. -- 
  1403.   // chris@Sterling.COM           | Send comp.sources.x submissions to:
  1404. \X/  Amiga - The only way to fly! |    sources-x@sterling.com
  1405.  "It's intuitively obvious to the |
  1406.   most casual observer..."        | GCS d+/-- p+ c++ l+ m+ s++/+ g+ w+ t+ r+ x+
  1407.