README.TXT ************************ * The Gloom 3D project * ************************ I hope making a subdirectory for Gloom will not be considered abuse of this archive. But, it's the only way I can see that will help this little experiment. It is my hope in putting all the data about this program here, that it will continue to be expanded upon and eventually turned into a game. As of now, I consider Gloom to be 'Openware'. The sources and documentation for this program are freely available so that any programmer may expand on them to make it a better program. Any revisions to the code are requested to be added back to this archive so that others can see how things are progressing and so that other programmers can also expand on these new additions. Here is the breakdown of what I've uploaded here; GLOOM.BIN The executable demo - actually 3 files combined into one (Gloom the program, the MAP.BIN file, and RADAR.BIN) GLOOM.ASM The EDTASM assembly source code for Gloom. MAP.BAS A simple basic editor for the map. MAP.BIN The binary MAP file used by the Gloom demo. MAKETABL.BAS The program I used to generate the RADAR table. RADAR.BIN The binary RADAR file used by the Gloom demo. LSAVEM.BAS basic utility I use to save binary files that load into high memory. ------------------------------------------------------------------------------- MAP.BAS is a simple basic program to edit the MAP file. It automatically loads MAP.BIN, re-organizes it as a 2D display on the screen, and lets you edit and re-save it. Use U,H,K and N to move the cursor on the screen. The J key toggles erase/draw modes. Pressing Q exits the editor and saves the file back to disk. The SPACEBAR lets you choose colors - after pressing space, type two numbers from 0-15, separated by commas and then press ENTER. The two numbers represent the two alternating colors that are used to simulate the more than 16 colors of the walls. The map is stored from $60000 to $63FFF. Each square on the map is stored as two bytes. The second byte is the color of the location, and the first byte is a code representing the minimum distance between that point and the closest wall (0 to 15), OR 128 ($80) if there is a wall on that square. (Expanded versions of this map editor will have to be created in order to accomodate larger dimension maps. It currently only allows 128x64 sized maps which are too small to be useful for a game) ------------------------------------------------------------------------------- MAKETABL.BAS simply creates a bunch of precalculated numbers that Gloom uses. The whole table is only there to speed up execution of the program. It would run tremendously slower if it had to calculate these numbers in real time. The table goes into memory locations $00000 to $17FFF. Gloom actually generates the second half of this table, making the whole table go from $00000 to $2FFFF. It's simply 512 sequences of 96x2 entry subtables that represent relative coordinates from the center point (player's point of view). Each sub-table contains 96 entries of two 16 bit words, one for X and one for Y. This table is used by Gloom to scan a pie slice of the map that is immediately in front of the player. ------------------------------------------------------------------------------- GLOOM.ASM is the source for the program itself. It assembles into less than 1K of code at the moment, $0E00 to $1148. All the program does is: A- RADAR SCAN - Continually scan a pie slice of the map directly in front of the player's field of view. B- Decode the scanned map into a table of 'what to draw' for the graphics routine. C- BAR GRAPH - Draw the graphics that are stored in this table onto the screen. D- Read the keyboard, and update your speed and heading as the key commands dictate. E- do it all again. Techniques are used to eliminate as many unneccessary CPU actions as possible: 1- Open spaces on the map have a number coded into them, this number tells the RADAR scanner to skip over parts of it's scan. 2- The graphics to be displayed are simplified into a 256 byte table. 3- The graphics TO BE displayed are compared to what IS displayed and only the differences are updated on the screen. 4- The video is set to 256 bytes per line mode, which simplifies calculating coordinates of the graphics on-screen. Here are some notes about future expandability of Gloom. - The program currently draws one copy of the sc`;^=\?YAWCUERGPJNLLNIPGSEUCWAZ?\=^;a9c7f5h3k1m/p.s,u*x(z'}%$"    #&),/258;> A D G J M PSVY\_behjmpsvx{!~"$%')*,.013579;=?ACEGJLNPSUWZ\^acfhkmpsuxz}  &,39?ELRX^dkqw} "',16;@EJOT{Xw]ranfjjeoas\wW|SNID@;61,&! |vpjc]WQKD>82+% }wqke_YSMGA<60*% {wrnjea\WS|NxItDp@l;h6d1a,]&Z!VSOL IEB?<9641.,)'$" |v p j c ]WQKD>82+%  }wqke_YS M"G%A'<*6,0/*1%47:=@ CFILPSWZ^aeimquy}|xtplhda]ZVSOLIEB ?<96 4&1+.1,7)='B$H"N TZ`flrx~   &,39?ELRX^ d k q w} "%'*,/147:=@CFI LPSW"Z'^,a1e6i;m@qEuJyO}TX]afjosw|  &+17=BHNTZ`flrx~}/p!cVJ=1%zjZI9)xog_}WkPYIGB5;#4.(" }jXE2 r_L8%wdQ>* mZH5##)/5HR\e nw,=N`q&8K]p  .AT g"z#%&&'''''(&<%O$b#u!  " 5H[n&8J\n~vmcZ PF+<<2L(\m}#1t?fMY[Ki=v/! zjZ)I49>)HR\enw}kYG5#}jXE2    "rffffffffTn"""JJJ""#fDn"""JJJJJ""#fDn"""""##fAn"""""##fAn"""""###fnfnn""""""####3333fnff""""""fn66̀"""""""fn63""f"n33ɀ 3""""f"n3 3"""V#n 33""V#333333333 33""""V 33""""V 33""""""U 33""""""""""U33""""""""""""""Uɀ̀Ufc333333333333333333""""""""n݀݀}wwoon݀woonn݀wwoonnn݀woonnnwwoonnn݀݀ހހހwoonnnnnnnnnnn݀݀݀xw݀oonnffffffffffxxoonnVxx݀oonnVxxހoonnVxxxހoonnVxxxoonnVހ݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀xxxxxxހooVoVVVV΀""""""VV<nǸ΀"""""VV<nǸ΀"""""VV<nGGGGGGǸ΀""""""fffffffffffV<nǸ΀ """"""DDEEVV<nǸ΀ """""""EVV<nǸ΀3"""UVV<nǸ΀3"""UVV<nǸ΀΀΀΀΀΀΀3""""#VVV<n^^^^^^^^^^^^^^^^^^^33"""#VVV<33"""#V< 33""""""VVV<333"""""VVV<333""""""""UVV<3333"""""""""""UVV""""""""DDEEUffffff:I@ד' =  = LTTTAVB`áS@HT'+%_GV+ 3D$J*._ 0&_ TS_&_A+@&ƿ _Z `X'\*_9 &9 Z&9P&ƿZ ƿʦ`Xʆ ,&;Oٷ@4PO]&=~#{oonnn"{oonnn{wwwwwoonnnwwwwoonnnnnnnnnnn"wwoonfffffffffff         wwonnVV"xxxxxxxxwwwwwonnVVxxxxxxwwwonnVVxxxxwwofnVVxxxxxwffffffffffffffVVV݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀xxxxwVVVVV؀؀xVVVV؀؀ހހxހހVVVVހހހVVVހހހVVVffffffffffVX^VVVVX^xxހVVVVX^EEEEEEEEEEހVVVV݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀;Vd2MfiY>!{Ce;?Dla@Bmpc efhjkmoqrtwy{~xj[K;)uX;h?  U*!5ALvY8err,HM$98Ls` v2M[[6RNm3 n$.Ef0~PBj-Z<i]_`bcefhjkmoqtvxv{h~YJ9(sV8e<R"-8rC4O\hnu'CG3'l;Oc+xERRD7R(mb!{!A"bpA~:`Ho߱WXZ[\^_acdfhjlnpusguXxH{8~&qT6b9O#n.09EPj]"jw>B-e(;#Nc=xJI;3NiWoc8Xz2o *7P^wߞQRSUVWYZ\]_`bdfhtkemWpGr6u$x{oR4`7 ~Lk-#.9fDP\i9v='_%76K_BsA2+MD_ zc V (%Hah'Np8ߍKLMNOQRSTVWY[]^`rbdeUgEj5l#orux|mP2^4 |Ig* !b+6BM5Yfs8"Y /0;CW9j* wC6YOiKT0Oo?`}DEFHIJKLMOPRSUWXqZc\T^Da3c"fhknqux|kO1\2yFd& ^'21=HT4`m}zT)4%27J"]qo;O !9@Rl H /1MRlo>?@ABCDEFHIJLMO~PpRbTSVCX2Z!\_adgjmqjtMx/|Z0wDb$[ }. +50@LxXdqO}z #.,&8Kh]q3F74L=et~%Eb89:;;<=>?@BCDEG}HoJaLRMBO1Q S UXZ]`beiiLl.osw{X.uB _!Yz* , +t5@LKWcvp|)&a!2+DVi>|.v3j%=Tm:V2234566789:;<>?|@nB`CQEAF0HJ LNPRUWZg]K`-c fjmq~uVy-}s@ ]Vw') q'G1 [T t%~&nD n(2=G R^iu |U~1f.?P#aYs&A%&&''())*+,,-./z0m1_2P3@5/67 9:<>@ADeFIH+J MORU|XT[*^aehpl=pty}ZR r#{#k Ak",6@KxU`Plwy,` R)9IZj9 !!""#$$%&&'z(l)^*O+?,.-. /123578e:H<*> @BDG{ISL)NQTWoZ<]adhXlptxP}q!y!i>+Y2p{4y  R *cD#"5H]rkAT$A`s5 p0)WG-O\@'}]C FcxIz  gg G Q  } K 9 X 8  v ?W}92+$ #)06=DL~Un]]fLp9z%z]=(;Odcz9 ~J.Lkh*c=e9?=l.j7n.MX_e[^ 0J z (  d [ ^ m  j ] ' +Qg"6/(!  "(/6=DzLjUY^Gg4q!| tW7-AU[k1uA 8V]vW$Jyq+/K{zWG~7+hHL(lD. @ s % t:  nI  z6 } 6 ;_r3,% !'.5  G ;w $p aP>!,)1:CMWamnyQ2W-%9qM=cyYQ/ Lkr#}&9p_Iv/\#1Q2&- hyJ ` h * qc  N; { 9 " Q 3|" |m] M;( (09BLWbjmLy- zQ''j;6Pf|PH2Phoqc<c;g2_ S.bh2^M &F l  GZ 0 , V  yjZI8%&/8BLVeaHm(yuL!c)/=Rh~H >5^SqfV?e-i ~ . S h G1-&=&C3=L+q z@I  @jouzysmf_XPH?6-#  '6EVgzr]H13OmsS1;csI@q[&H|@=; Sa : s 6 q  F Y  m * ? Srz q u{`18_e<ejpu{ztnhaZRKB:1' />O`r}jU?))EbhH&.U}e: /`}I4nh+'hh#9F  mV   mP # 5 Fk   ) _EIU=Z>TIAa#]Szafkq|vv|pic\UME=4+!  '7GXjv}bM7 :W}u]< GoW,Ol8 YTPQ xg, O8 K/ s \ E n U 0% (y"PCo{ 2\ag}lwrqwk}e^WPH@8/& /?PbnuZE//LsjR18t`I =[n' }D@~8:z_Ko 0 k ) P 6  Z F ( brr[wOqN^Y?px(8]W]~bygsmmrfx`~YRKC;3*   (8HzZglR=' %Ah^H}&*gQ<z+K\j/-hi#`F/xT  ` L  \ /  nc 0  e7 AE'G>(o.:LwPSXz]tbnhhmbs[yUNF>6.%!0@sR_dKw5}5^R=qZB.jo;IzWRS Fz-[8 @ . 8p F? g h 7 g ZXab5wZ, aN|SvXp]jcdh]nWtPzIA:1)  (8lIX[Cn.t*TF3dw M3!Z`+6gE;u>,nb=r l n P j  { A < [  qj Km0c N+ _1NuwIxNrSlXf^_cYiRnKtD{=5,$ x0eAQS<e&yjJ:)Xvk@#JsQ#Sp3$]o)RKYgP L 1 D d Q   r4 @@ @4m_[^c%v6(DtInNhSbX[^UcNiGo@u8|0(  q(^9JJ5\pa@.Ki_4:bvB ?p_! E[74x?G4 ) xu   sC &i D  w P3y!W(H-GI?pDjIdN]SWXP^JdCi;p4v+}#}k W0CA.SfzwX7"?\{}S'*Qyh3+[N-Gfl[{&'ou  TX K" F W _  wl Cm bJm%]WU\fm W:l?fD`IYNSSLYE^>d7j/p'w~ wdQ'<8'J]pnN- 2OnrG@hZ%zF=wz4MV>dN[ /: ~ m # x $ * ; FE D w 6N0Z|+ }76h:b?\DUIONHSAY:^2d+k"qxq^J6/ A Sf{eE$ %B`g< /VLj1-ag!3lA!aL,At_)D9mJEI>8Yw`G+ $/:FR`n}|qeY/LH>c0!!Flv_FG-xQ^ <KjV , [  br A  Pj 1 * {;q+ &LM] "\mJy0%jX1   +6BN\jy~sg\O)BC4]%y>e~gO6>o FkI&?\f; K QR  o } ;D  Oof?iza,r_qG_P:{l<' '2>JXftuj^R E$8=*Ws 7]pX@'5 e;xvV42uuMK  : d ?2  @ [ X & md #VKV Lx[*x 6<0{ wu%RM >#.:FSapwlaUI<.7Qm /Uy}bJ1+\0djB%h\>1 * }w E , Fm 3  y { U: <n/&/C<VO~JT1Klc4Xds *6BO]k{yodYL@2$1Kf(MktT;""Rr%Q^. ZnC/z  lZ &  t 1J  b S < !@^k4Zf -Nv #Q4uk0&2>KXgv{qg\PD7)+ E`| uE^lF-Hy_=R LV+j o Z<   ` a ' ~ Kl + # [}sz,v45)gm KCqP$w7: "-9FTb}qsi_SG;.  %?Yv~h=Pc8=nnM *F>i>ZS H Lz @  h 3F  yw /aUJUSc}J?-|er'!GC^k )5BO]ull|aVK?2%8Sor[4CZ*3c~];9t}/Rr'Ij7 5 7Z  Q b  ^M Dj65t@lX~QP!LClV $0=JwXngdwZNC6) 1Lh|eN+6Qy(XmK),fg!<c8O " u u ": } 9 =  i m B# &<B52vVH$sj!n"4=S  ,8yEpSgb]rRG;.!+E`}pYB#)Ho}M\:Y|Q&S'hq4  a V  f "\  O E & _~rfs[ <-q[/;L;`i\h'{3r@iN_]UlJ}?3&  $>YvzdM5?fmALs)Kg<DN_ Ls 8 P | 9 j 4g  x 3^Q6O&Zer3/[i yYj" }"t.k;bIXXNgCw7+6RnoYA)5\~]6;g=}wS'3vh5L 8V  9 Z  Q A uY;;.E{X4HwOm& N &.8AKVamz|yvsokgc&_>ZVVoPKF@93&,J%p GwNHqbhSD 4 [#  g ( _ t >] F)."(=u_X:/w!vS6. q8mD}Z ; $-6@JU`l|xzwtqmjfb^Z$U;PTKmF@:4-&$HmCtJDvgXIc9(  U  ` y Wc K 54  y2\=T"iwS.q '`j&@jFa &1 #+5>~H|Sz^wjuwrolhea]YU P"K9FQAk;5/(!!E j@p F|n?_P@/]  O Y  }k T N< # , cE&&Gw}Y[4amCN~`U00  !~*|3z=wGuQr]phmujgd`\YTPK G A7<O6h0*# Bg<l A|ugX9H}8' W H R v _ uG . E "  oP1:ic>KPvKz;f5i?h}{yw(u1s;pEnPk[hfesb_\XTPLGB=842L,f& >d 8h~93.2(J"c}  @;`4dyk7\rM=,.q J : z c AK 3  c 2  p Qo1ku_9J*k?},RS j:Kwusq nlj%h.e7bA`L]WZcVoS|OLHC?:50*$/G`{ 7\/_ugX2Hl8((kC 2t \ D 9+  Y ( f uF &c^guO}(:uV)ij7=aR)"y<qomj hfc#a,^5[?YJUUR`OmKzHD?;61,&!,D ]w4X+ZrdUE-5g$"d<o *W ~? % 0 O | ] = i VPiXBn)qDbVSl&}En 9Wkifdb_]!Z*W3T=QHNSK^GjDw@<73.)#) AZt 0T{}&pUaRC2'"a^4kS !: v!  & D v V }6  ] IB^7I]c5OsA? Ue,Tx9ruec`^[YVS(Q1N;JEGPD\@h<u84/*% &>Wq ,Pv|n!_PPA1 !ZV,ixP7  l  y 9q Q 0 q P ;}V3/9MWn)<c/+>Qt:_ yXT_\ZXU RPM&J/G9CC@N<Y9f5r0,'"  #;Sm'Lrzm^OK@|0 T Og$Op6  c  n n .N - d B x-Q($)|;N['W"l{qA%YK ?Z4YVTQO LIF#C-@6<A9L5W1c-p)}$  7Pj#Gmzl^O?E/v MG~gO5g  Y  cm L "+  W 4u M$vDVim|Fb%4= Tm 22 345%6.677@8J9T:_;j<v>?@BCEFHJLN2PJRbU|WZ]`cf6j[mquy}+Z,f!d; *  1   R ' !1 < G oR ^^jv[e~={%t6$GYkN~l> " 8+, --.&/.070A1J2U3`4k5w6789;<=?ABD3FKHcJ}LOQTWY7\\`cfjn-r\vz~.h#f> , 4 U  $   s( 2c=G_R^jiuC%{+V.?PatsF %&&''&(/)8)A*K+U,`,l-x./0123567 9:4<K>d@~ADFHJM8O]RUX[^.a]ehlp/tiy}%h@ / 6 X '  w fc",n6@KU`Hlw+1\ {N)%9IZ j  !'!/"8"B#L$V$a%l&x&'()*+,-. /152L3e578:<>@9B^DGILN/Q^TWZ]1akdhl&pitx}A 1 8 Z *  z igr &L/9C/MWb6mxa#T+ '09BLVamy !!"#$% &'5(M)e*,-.013:5_68:<?0A_CFHK2MlPSV'Yj]`dCgko 2s w | : \ , | lit O3 :$-6f?'HR\fYq1{  '09BLWamy 6Mf !"#$%&;'_)*,-/10`24683:m<>A(CkEHKDMPS 4V Y ] <` c g ^k n .r v z ~ nkw"R6=i+ ]5$- 5     ' 0 9 CLWbmy  6Nf;`1 a!#$%3&m()+)-l.02E357 49 ; > =@ B E _G I /L O Q T WoZ]m`dxgjn$ruTy}8?l-`8 (09CMWbmy    6 N f       ; ` 1a4n)mE 5   = ! " _# $ 0& ' ) * +p-.n02y357%9:U<>@9BDFAIKMmO/RTWYb\9^ad g @(09CMWbmy  6Ng;`2a4n)mE 5 = ` 0 pny&U9An/b: (09CMWbmy  6Nf;`1a4n)mE 5 = _ 0 pny%U9Am/b9 '09CLWbmy  6Nf;`1a3m)lE 4 = _ /  omx$T~8zvr?midl`-[VQL`G8B<7 1'09BLWamy 6Mf;_1`3m(kD 4 < ^ . ~ |nwskniwd_Z"T` ) q _  Q  @ @   ?a 4  )3>IUbo}"*2: C$M<WVaplx .Sz&"V5J_v(b_ *H5f " v  &4 Z  B   y* X W A8N=N+fn8`|# + r~ 1  Q b & >   ;\ #,6ALXer !)1:(C@MZWuamy3Y-]%9Mc0yj&i/@Lk .   3 9 _ Q    / h\ TLQRe-hR `@ * qP   N H  9   3 %/9DO[hu  (0,9DB^LyWbmy9^3c';P8fr|.rJ2Po 9   ?  < _c  -   y2 _e_ fSz .3hk ^[ &n l'   Gj 3  0   (1<FR^jx&0/H8bB}LVamy>c 9j)=?Rzh~7{ T5S Dq   L   l? e ;    3v`qyRJ+e&vY$ E d   =U $  # s!*4>IT`m{ 4%L.f7AKVamyBh?p*F>Si?^6 OT s  W   z ? Ie  & 2_O4`&_>>Qb ! Y  v /E y   #-6ALWcp}   7P#j,6?JU`#lGxmEvM+?TjGg  Y7 T s c  "   W> d 4 0\)HJ}vVWX E~>  J  e : f  &/9CNYfr # ;Sm"+4>HS'_LkrxK|T*? TOj$p  c 6 S nr  .   d < Ba -$+)V;[Bt'lKq%6uY 7 { Z 4 O(1;EP\hu&>Wq)2< G,RP]vjv!P!Z)>VSi,x  l  4 yQ o 9   q  P7 \;39#NM{n7<i+<t>$ta: ! cy T !*3=HS^jw)AZt &0 :0ETP{[ht&U'a'^<Qf4} ! v  & 0 M Dk   }  ] 1IUzBI]DpO)ZA*UaTJ  Gr  #,5?JU`mz,D]w $-48XBMYer+Z-g"d$9M<cy * ~  0  + OG e    i V(LPqXn7b)bHVzl&Kn9/k ' %.7ALWco|/G`{!7*\5?JVb/o_|2l(k  4CI^t 2   9   Y$ @ @ (] {  u c^@dg}(:R}ui3d=0fR"J '09CNYeq~2Jc} ;`'1<GR4_dkx7r.qJ/CX :n   A   c  27 S p  ok3uVzJu_ [<c|!vu%(DINSX^ciou| !.<KZj| (9J\p*Eb.K(iOw':Wb+e?p` E3}7 x l  G o  ) ) x S  s ( & {  Dk  h w qP3!>s]-Gg?DINSX^dipv}&4BP`p 0ASfz2Nj"?3\Z{4*eQy;u+[0s-fH 1[   0' o  F  T s K I + W   w  C (Fmq] WL\Em:?DINSY^djpw~,9GVfw'8J] p:Vs2>OenAr@hJFwBM\ H>   J N  b / * ~ # j x N * >  F9  A w UNv0 A* 376:?DINSY^dkqx $1?M\l}/AS(fB{^{ "%HBo`N /V Y1aT&3ql  _! a  c , t ~ G X  N q  Xc  a v k @ <etSKbMp['05:?CHNSY^ekry)6DRar&7I/\Jpf,R4zRp*ZDl/i#Ke|9Q " u B ! {  7Q   e 1  ; # x  (   B   p ?Fl&JG e+059>CHMSY_els z".;IXgw .@6RRfnz5 \&Db6g 2Y=w34veL6o 8  # 9c   Q. u  W Z > K .  S+  3 o I 7 l v9W}A%626@&+/49=BHMSY_fmt|'3@N]l} $$6>HY[vp?f5SrAs FKnDM~_S L   PC   j P 4  . x | ^  sQ  "O | Z 8 r  d /7i Yqgj"h!&*.38=BGMSY_ fm u,}8ESbr +,E>`Q}ey#Ho 'DbM 3Y[S5f'q 7 ao   f" b "  + Or  &  R ~  Dr  s I   a - ( [ b;@(;\ %).27<AGMSY`g$n0v=JXgw1"L4hFZn+Qy5S(rX, fFo!cM8~ " uQ  " } @ 9   iK  B '& t   h   o 2 ( V  P $ jknS"ESB$(-16;AFL SY`)h5oBxO]l|8S)o;Obw4Z &C3bc9 t2Z/r4Id 5 3 k 7   Q\   $ j ^ D H 6  75  @ 9 X  N~   vP GC"V{n"',05;@F LS"Z-a9hFpTybq %?Yv1CWk=c3=Qnp FEm>ZJz H  L L   h9 x 3  A y a  gU  U X c  [}   q?  5| lr!G,C !&*/5:@FL&S2Z>aKiXrg{v+E`|&8K_t El#HAy_R / VLj/_  Z  - `d   ~ S K  # ]} 8s  v $ w  " {5  3g "C{Vn %).27<AGMSY`gn$v0=JXgw"14LFhZn+Qy5Sr(X ,Ffo!cM~8 "Q u  " }@  9  K i  B ' t&   h   o  (2  V P  $jkSn"EBS!&*.38=BGMSY_f mu },8ESbr ,+>EQ`e}y#H o'DbM 3[YS5f'q7 o a  " fb  " + r O  & R  ~ D r  Is   a  (-  [b@;(;\&+/49=BHMSY_fmt|'3@N]l}$ 6$H>[Ypv?f5SrAs FnKDM~_S L  C P   jP  4 . | x ^ s Q " |O  8Z  r d 7/i qYgjh"+059>CHMSY_elsz ".;IXgw .@R6fRzn 5&\Db6g 2Y=w43evL6o 8 # c 9  . Qu   W Z K>  . S +  o3  7I  lvW9A}%662@05:?CHNSY^ekry)6DRar&7I\/pJf,4RRzp*ZDl/iK#|e9Q " uB  ! { Q 7  1 e  ; # x  (   B   p F?&lJG e6:?DINSY^dkqx $1?M\l}/ASf({B^{ %"BH`o N/V Y1aT3&lq ! _a   c, t  ~ X G  N q X c  va  @k e<StKbM[p':?DINSY^djpw~,9GVfw'8J]p :Vs2O>neA@rhJFwBM\> H   JN   b / ~ * # x j *N  > F 9  wA NU0v A* 37?DINSX^dipv}&4BP`p 0ASfz2Nj"?\3{Z*4Qey;+u[0s-fH[ 1  ' 0o   F T s K I W+   w  C (mF]q WL\mEDINSX^ciou| !.<KZj |(9J\p*Eb.Ki(Ow:'bW+?ep `E3}7x  l G  o ) ) x  S s ( &  { D k  wh Pq3!>s-]GgINSX^cint{(6ETdu 0ASey"=Yv:XvDk#JsI{#ST $M]gR  S g  T L l D 3  Q s U r C @ =CmV_u [<c|v!u(%NSX]chntz #0?N ^o(8I[n4Pm*Fd8_ 3Z ;l6 gC~;9u|,Qn :=   9  n N  j  y  { O </   q K0% Aj 1@N4wSX]bhmsy*8GW!h0y@Rdw+Gd5Rq-S|Bj-]Iz2lR&hF: ![ s   @ v / 8 W F *  h | 7 jeglZ~ Xn/9k '!*3=HS^jw)AZ t&0: E0PT[{ht&U'a'<^Qf}4 ! v  &0 M k D   }  ]1 UIzBID]p)OZA*aUJT  G r(1;EP\hu&>Wq)2<G R,]Pjvv!P!Z)>SVi,x  l 4 Q yo  9   q 7 P\ ;3#9N{Mn7i<+<t>$at: ! c y T &/9CNYfr  #;S"m+4>HS_'kLxrK|T*?T jO$p  c6 S r n  .   d< a B -$+V);[Bt'lKq%6uY 7 {  Z O4 #-6ALWcp}   7#P,j6?JU`l#xGmEv+M?TjGg 7 YT s  c  "  > Wd  4 0\)JH}vWVXE ~ > J   e f: !*4>IT`m{ %4.L7fAKVamyBh?p*>FSi?^6T Os   W   z? e I  & 2_O4`&_>Q> b Y!   /v yE   (1<FR^jx&/08HBbL}Vamy>c 9j)=R?hz~7{ T5Sq D   L  ? le  ;   3 `vqyR+Je&Yv$  dE   = U $ # s %/9DO[hu  (09,BDL^Wybmy9^3c';Pf8|r.r2JPo 9   ? < c _  -  2 y_ e_ Sfz .h3k ^[ & ln '  G j 3 0  #,6ALXer !)1:C(M@WZaumy3Y-%]9Mcy0j&i/L@k .   39 _  Q   / \ h TLQRe-h R`@ * q P  N  H 9   3 )3>IUbo}"*2:C M$W<aVlpx .Sz"&5VJ_v(b _*Hf5 " v 4 &Z   B  * yX  W AN8=+Nfn`8| +# r ~ 1 Q  b >&   ; \ '1;FR^ ly#+3;DM W a8lQwl)Mt 2FO[q Z$UB`+v  i- T { t  4 $ Q h  E .H}$'&a8V\ )` q  _ Q   @@   ? a 4$.8CO [hv$,3;DMV`k4vMg#Gn.BWGmxQ ;KZyk & \L s  f  $ J x W  3 @vZ =Wg $ lB   N?   ?_   ? k 9 Q !*5@ LXes%,4<DMV`ju/Hb~Ag)=Rg@~qH4RAq_C Oj   W  @ wo  F  !7 myQ N#L  e $  Hr   : ;  @(09CMWbmy  6Ng;`2a4n)mE 5 = ` 0 pny&U9An/b: (09CMWbmy     6 N f       ; `1a4n)mE 5  =! " # _$ & 0' ) * + -p.0n23y579%:<U>@B9DFIAKMOmR/TWY\b^9adg      ' 0 9CLWbmy  6Nf;` 1!a#$%&3(m)+-).l023E579 4; > @ =B E G _I L /O Q T W Zo]`mdgxjnr$uyT}8?l-`8 '09BLWamy 6M f!"#$%&';)_*,-/012`468:3<m>AC(EkHKMDPSV 4Y ] ` <c g k ^n r .v z  ~ nkw"R6=i+ ]5$-5 '09BLVamy !!"#$%& '(5)M*e,-.0135:6_8:<?A0C_FHKM2PlSVY']j`dgCkos 2w | : \ , | lit O 3$:-6?fH'R\fqY{1    !!'"/"8#B$L$V%a&l&x'()*+,-./ 1253L5e78:<>@B9D^GILNQ/T^WZ]a1dkhlp&tix}A 1 8 Z *  z igr &/L9CM/Wbm6xa#T+ %&&''(&)/)8*A+K,U,`-l.x/01235679 :<4>K@dA~DFHJMO8R]UX[^a.e]hlpt/yi}%h@ / 6 X '  w f"c,6n@KU`lHw+1\ {)N9%IZj +,- -./&0.071A2J3U4`5k6w789;<=?ABDF3HKJcL}OQTWY\7`\cfjnr-v\z~.h#f> , 4 U  $  ( s2 =cGR_^ijuC%{+.V?PastF 223 456%6.778@9J:T;_<j>v?@BCEFHJLNP2RJUbW|Z]`cfj6m[quy}+Z,f!d; *   1   R' 1 !< G R o^ j^v[e~={%6tG$Yk~Nl> "8 89: ;;<$=->6??@IBSC^DjEvGHJLMOQSUXZ1]I`ab{eilosw5{Y)Y*da8 ' |  -+ 5 @ NL W c p | k ZV`x !72DtVi|mF%b=4T m >?@ ABC#D,E5F>HHIRJ]LiMuOPRTVXZ\_ad0gGj`mzqtx|3W~(W(a^5  #+ x5 @ *L X d Jq }    f TPZ&q8K]0qmd=4Le~X* DEF HIJ#K+L4M>OGPRR\ShUtWXZ\^acfhkn/qFu_xx|1V|%U%_[ 2'2= H tT ` &m z  E     a OJ%7SJ]jq(d [! 9Rvl2LB@>< : 8 6420.,*(&$!"#%')+-/135 7 9=?GLOOM1 BIN GLOOM2 BIN;&GLOOM TXTAREADME TXT/Ml KLM NOQ"R*S3T=VFWQY[[g]s^`begjlorux-|E]w 0Tz#R#\ X!+6.B{MY f ps  ! ~  @   z  [ H0CCWjLc [6OQik's0@Oo QRSUVW!Y)Z2\;]E_O`Zbedqf~hkmprux{,C[u .Rx!P Y#.U9DP*\wiv  k   y  ;   t % T7 KA_s<DZ+DQ_zG` (Hhf28 rWXZ[\^_(a1c:dDfNhYjdlpn}psux{~*AZs +OuM~V#.9EQP]j&wr  f   s  5  ( m; N Mc x:4;Q3uN iG;8SXzW#*Pw a]_`bcef'h0j9kCmMoXqctov{x{~(?Xq)MsJ{"-R8CO \Mhu"n  a   m  .' ; O fc x F 2+27GRmj;!.AbEH:`m Ncefh jkm&o.q8rAtKwVya{m~z&>Vo&Jp Gw *5ANLYerHh  [   g$ 8 (L ` v _  > )"6(Rm=_/$Ewf!6Bqj8}<Zi ;jkmn prt$v-w6z@|J~U`lx$;Tm$Hm C't2=HTJan{Dc  U  2 `F [ p   W  5  2Mi2T!C"eiq'Dl`&BpjF &pqsu wxz#|+~5>HS^jw "9Qk!Ej#-@8pCO[ hFu?] O* > S Yh ~  }  N  , )Ea~&G<_w[@ahNAp~U03 vxy{ }!*3=GQ]hu  7OhB g(3><IlUbn |A|9} W  4 HH ] s R   u  E  ": V s1T:wiK6_P z:;ii.?b|~(1;EP[fs4Lf>d#-8C N8Zhgt<w4wQ(<Q Af }  J   l  <+ G d {x"E h,Z(Q;{?-\g'#XR( '09CNYeq~2Jc} @ ;'`1<GR_4kdx7r.q/JCXn :   A   c 7 2S p   ok3VuzJ>h*},J{RG}j:%` %.7ALWco|/G`{!*75\?JVbo/|_2l( k 4IC^t 2   9  $ Y@ ] ({   u c@^dg}(R:}u3id=0fR"J #,5?JU`mz,D]w $-84BXMYer+Z-g"$d9Mc<y * ~  0 + G Oe     i (VLqPXn7b)bHzVlK& < { C O  ' 2=HT a&o-}4<DMV_it*C]y;a%8Lb x8i?y,Ji6zS:a B   H 6 d g  4 , b ~ j FbgDz 0 [ e  ? Q  2 _  6  S J   $.9E!Q'^.k5z<DMU_hs~&>Xs 5 Z3G\q0a5$pA`,o F/V~ 4   8* X  V  " U  j T:wKO7{` ~ O  G 3  / ' | : ,  h B* j !+6"A(M/Z6h=vDLU^gq| !9Sn .-TA{Uk(X,8fVv c$9Jq % y  )K z  D  G y~  U +>h3(5lE @b   %' t g  n d  z  6?  _Z  '#2)>0J6V=dDrLU]fpz4Ni((;MOtdz P."L[kW=,ex  j = l s  2 7 n e  @ X'[) 0 zD  m d  E ^  > j  'Y  Q`"+ %$*/0:7F=RE`LnT}]eoy/Hc"5!HF]lrGx$A`Q K 0Wj  [- \  b  ' ]  P  *F I  g &  QM   K"  m X  y v0 ?j1} ! &+ 1+76>BENL\Tj\yenw)C]y .BV>ke>o6U tF?"Hp\ KL |  Q  K o  ; 2 p  o4yf i R z  < ,  6_   CG   aP +{<j "' ,28'>2E>LJSX[fdtlv $=Ws(;Nc7y]5e+Ig;v29uaM : :j   ?  @7 n [  & [  m VcK ;L  [ $ vx   v<  +{   Ju %{MR 2  #(-39?#E.L:SF[Scakpt~7Qm!4G[ p/U}+\<[z0j*%Qhy>(W * }  ,# Z  F  E y  U K</ # n/  < \ V  \~   nT  / K ac8d  $).49 ?EL*S6ZBbOj]sk|{1K f-@Sh}(Mt"0RNm%^@hZ/zCt  l  D t|  1 - l b  <2 x!  T   A  4 @ Z  Q -  vv  D4ok0 !&*/5:@FLS&Z2a>iKrX{gv+E`&|8K_t El#AH_yR /V L/j_  Z - d `   ~S  K  #] } 8 s  $v w  " { 5 3 g  W K$PjOw7="',05;@FL SZ"a-h9pFyTbq %?Y1vCWk=c3Q=pn FEm>JZz H L  L  9 hx  3 A  y a g U  XU  c [ }  q ? 5 |lrG!,C$(-16;AFLS Y`h)o5xBO]l|8)S;oObw4Z &Cb3c 92tZ/r4dI 53 k  7  \ Q  $ j  ^ HD  6 7 5  9@  X N ~  v PG2bewJ,W{]bgmrx~ $2 AQ(a8sHZl #> Z%xA^}!Go*QzN+\!Z/hS`#m/ x X   ` X   \ o  5 n  0 r S e ?A7';Kg.)Le wY\wa|glrw},; J/Z?lP~bu4P/nLj;b8`? p=nH D~>8z UK = 0 ; ) N 6  x Z K (* r [ ON/YUp%(k]arfxk~qv|  &4'C7SGdXvj}+G:dWu . UG~o0`O5 oY)jP=g " s O  u K - \ S  $ U r0_W [j"CHo &enjspyu{ -/<>LO]`or!)=EZbw".HUp} /P`#4\n'Th$9m   W m  U m # i . F  h G_1I&=&>3ILaq@S @jjoouuzz  ''66EEVVggzz33OOmm;;cc@@qqHH==  SS : : 6 6 F F   m m ? ? zzqquu11__<<nesjypu{- </L>]Oo`r!=)ZEwb"H.pU} P/`#\4nT'h$m9  W  m U  m i # . F h  G _1I&=&>3ILaq@Sraxf~kqv| & 4C'S7dGvXj}+Gd:Wu .U ~Go0`O5o Y)jP=g " s O  u K - \ S  $  Ur 0_W [j"HCo& w\|aglrw},;J Z/l?~Pbu4Pn/Lj;b8`?p =nH D~>8 zUK =  0 ; ) N  6 x K Z * ( r [ ON/YUp%(k]{W]bgmrx~ $2A Qa(s8HZl #>Z x%A^}!Go*QzN+\!Z/hS#`m / Xx    X `   o \ 5  n  r 0 S  e? A7';Kg).eL wYSX]bhmsy*8GWh!y0@Rdw+Gd5Rq-S|Bj-]I2zl&Rh:F ! s[   v @ / 8 W F *  h|  7j elg~Z X2bewJ,NSX]chntz #0?N^ o(8I[n4Pm*Fd8_ 3 Z;l 6Cg~9;|uQ,n : =  9  n N   j y  O { / <   q K0% Aj @1N4wINSX^cint{(6ETdu 0ASey"=Yv:XvDk#JIs{#TS M$]gR  S  g T  L l 3 D  s Q U  rC  @= CVm  WK $PjwO7=  $).4 9?E*L6SBZOb]jks{|1Kf -@Sh(}Mt"R0Nm%^@Zh/zC t l   tD | 1  - bl  < 2!x  T   A 4  @Z   Q-  v v D4ko0  #(-39#?.E:LFSS[acpkt~7Qm @!4G [/pU}+\<[z0j%*hQy>( *W }  , # Z F   yE  U <K/ #/ n <  \V  ~ \  T n  /K  ac8d " ',2'82>>EJLXSf[tdlv $=Ws(;N7c]y5e+Ig;v2u9aM :: j  ?  7 [n  &  [ m VcKL ; [  $x v  < v { +  u J% {M R2  !& ++167B>NE\LjTy\enw)C]y .B>Vek>o6 UFt?"Hp\ K L | Q   oK  ;  2 p o4fyi  Rz   <,  _ 6  G C  P a +{<j $%/*:0F7R=`EnL}T]eoy/Hc"!5FHl]rGx$AQ` K 0Wj  [ - \ b   ' ] P  * FI  g&  M Q  " K m  X y 0 v ?j1}  '2#>)J0V6d=rDLU]fpz4Ni((M;tOdz P".[LkW,=xe  j  = sl  2  7 en  @ 'X[) 0D z m  d E  ^ >  j Y '  Q`+" !+6A"M(Z/h6v=DLU^gq| !9Sn .T-{AUk(X,f8Vv c9$Jq % y  ) K z D   yG ~ U >+h35(lEb @  ' % tg   nd   z ? 6  _Z$ .9EQ!^'k.z5<DMU_hs~&>Xs5 Z 3G\q0a5p$A`,oF /V 4~   8 * X V  "  U j T:KwO7`{~  O G  3 /  ' |:  , h * B j '2 =HTa o&}-4<DMV_it*C]y;a%8L b8xi?y,J6izS: Ba   H  6 gd  4  , ~b j bFgzD0  [e   ?Q   2_   6 S  J  !*5@L Xes%,4<DMV`j/uHb~Ag)=R@gq~H4ARq_ OC j  W   w@ o F  ! 7myQ #NL  e$  r H   :;   <{ C  O $.8CO[ hv$,3;DMV`4kMvg#Gn.BGWxmQ K;Zyk  \& L s f  $  J Wx  3  @vZ =Wg $B l  ? N  _ ?   ?k 9  Q '1;FR^l y#+3;D M W8aQllw)Mt 2OF[q ZU$B`+v  i - T t{  4  $ hQ  E .H$}'&8aV\>h*},J{RGj}:%`|~(1;EP[fs4Lf>d#-8 C8NhZgt<w4wQ(< AQ f } J   l  < + G d{x" Eh,Z(;Q{?-g\'#RX(vxy {}!*3=GQ]hu  7OhBg (3<>lIUb nA||9} W  H4 H ] Rs   u  E  " : Vs1:TwiK6_Pz ;:ii?.bpqs uwx#z+|5~>HS^jw "9Qk!Ej#@-p8CO [Fhu?] O * > YS h ~ }  N  , )Ea~&G<w_[a@hNAp~U0 3jkm npr$t-v6w@zJ|U~`lx$;Tm$Hm Ct'2=HJTan{Dc  U   `2 F [ p  W  5  2Mi2T!"Ceiq'Dl`&BjpF &cef hjk&m.o8qArKtVwaym{z~&>Vo&JpG w *5NALYeHrh  [   g $ (8 L ` _v  > )"(6R=m_/$wE!f6qB8j}Z< ;i]_`bce'f0h9jCkMmXocqot{vx{~(?Xq)MsJ{"R-8C OM\hu"n  a   m  . ' ; fO c Fx 2+2G7Rjm;.!AbEH:`m NWXZ[\^(_1a:cDdNfYhdjpl}npsux{~*AZs +OuM~V#.9QEP]&jrw  f   s  5   m( ; MN c:x4;Qu3 NiG;S8XzW#*Pw aQRSUV!W)Y2Z;\E]O_Z`ebqd~fhkmprux{,C[u .Rx!P Y#U.9D*Pw\i v k   y  ;   t  T% 7AK_<sDZ+QD_zG` (Hfh2 r8KL MNO"Q*R3S=TFVQW[Yg[s]^`begjloru-xE|]w 0Tz#R#\ X!+.6{BM Y pf s ! ~  @   z  [  H0CCWLjc [6QOik's@0Oo DE FHI#J+K4L>MGORP\RhStUWXZ\^acfhk/nFq_uxx|1V|%U%_[ 2'2 = tH T &` m z E     a OJ%S7Jj]q(d[  !9vR2lL/M l>? @AB#C,D5E>FHHRI]JiLuMOPRTVXZ\_a0dGg`jzmqtx|3W~(W(a^5  # x+ 5 *@ L X Jd q }   f TPZq&8K0]qmd=4LeX~* 89 :;;$<-=6>??I@SB^CjDvEGHJLMOQSUX1ZI]a`{beilos5wY{)Y*da8 ' |  - + 5 N@ L W c p k| ZV`x 7!2tORID>671+=$i+ ]5 '09BLVamy 5Me:_0_2l'jC 2 : z v \q l ,f a \ |V PlJDi>7t1*# O 3:f'Y1 yn c'/8BLValx 5Le9^/^1k&iA~yt 1o j d 8_ Y S ZM G *@ 9 3 z, $ig rL/6|ap#dXL?T2+% &/8AKU`lx 4Kd~8].]/i}%yhtoi@d^X /R L E 6? 8 1 X) " '   w fcnH|+pcW1J</\!{N%  &.7AJU`kw3Kc}7\-\|.whrmh#bf\VP>JC< ,5 . & 4   U $ s c_j}qdCWI;%-{+VtFzhUA . %.7@JT_jv2Jb|6[+}Zxtoi,df^XR!LdE>7;0(! *   1 R ! o ^[|oebT~F8)= {t$Nn[Gl3>   $-6?IS^jv1Ia{5Y{wr)mYhb]W*PdJC=5a.&8 ' | - N  k uZhZVL>`/x 7tmo[GF2b4 y ` #,5>HR]iu0G`z3{Wv~rmhb(]WWQJD(=a6/'^5 # x * J  t f fX JT;,P Zq0m{fRd<'=X*gL1  #+4>GR\ht/F_x{wr1nVi|d^YS%MUF?81%*_" [2 t & Ex j \ M > a. OJSjz(ePd:$ [ v2y_CL(   "*3=FQ[gs-E]w|xtok f0`T[zUPIC#<R5.'#\X.{  p ! ~q c @T E 6 z&  [ HCLckV@ )[Q{k`'D( s@pO -!)2;EOZeq~,}Cy[uuqmhc^ Y.SRNxGA:3!,P%  YU*w  k{ m _ yP A ;1 !  t T A<wDaKZ5QGjN1`f2vT2 r(1:DNYdp}~zw*sAoZksfa]WR L+FO@u93+$M~ VQ&r{ l f^ O ? s/  5  m M :r4\F;.Qu G{_B;$SdWA# aa'09CMXco{~{xtqm(i?eX`q[VQKF@)9M2s+$ J{R M"|nn_ P a@ 0  m . f F q2[D+,2GjH)HvNVo4X {~:>p*e:OSPNKHFC@!<*946>2I.T*`&m!{ 4LfByhl^O?/?p F?hO6^ O m WL *  z I s &K "rD4|G`>e*>n-b!`vE;MJHEB? <96(21/<+F'R#^jx 0Hb}y>lc^O@0 9j?zi7Q{8 T D n M L, l ;s K " vqqByxC J_&#v$e#ET Uw$+GDB?<9 62/%+/(9$D O[hu ,D^yyl9^^PA1!3c8rkS.:r J 9q P . ? _ u -M $  y erB_fwzA 3\k [`n'Kjl3~,A?<962/,(#%,!6ALXe r(@Zuzm_3QYB3#-]0joW>&$i @t .T 2  3 Qy P ' h tTELRyBe [R]@PFeHt!<963/,)%" )3>I Ubo} $<Vp{na S.DS5z%&V(rbZB( _5yY "7 v & ~ BU ,  y Wy IA8|=FNn]8]|#~D1ab&n\l630-)&# '1; FR^ly  8Ql|obTF)7M'tOw _ZF-U+v_=  i  t \ 42  h  EO .$K'8aV#``E_`@lag4 0-*&# $ .8CO[hv4Mg}qdVH9#*Gn Gx|dLQ3 KfkD" \ fc : $ W W 3% R h*=ge!BI?c_mkf9  *'$  !*5@LXes/Hbr~fYK<-A g@qjR9HAmL_* O l WC   w F` / ! [#yq2#mL)$Pri;q{iC P%!  '2=HTao}*Ct]hy[M?0 ;a 8ipX@&? y6zvU3S B v M H"  g k 4:  ~ fj.b|g=zx30eZQq _x"oSU  $.9EQ^kz&v>jX]sPB3$5Z0wa_G-5p,o_=F 4 X . 8 Vw F " js ;TKJO `?~fG}/+:,yh*] !+6AMZhv x!l9`SSnE7( .T{~(gXN5,f icG%9 %e y;  ) DT !  y UI >3Y5ENbt('g9 d9(?hZ9   '2>JVdrznb4VNHi:, (Mtn VP>$ "[tSW0 ,xr H j  s b 20 e Y @ 'i) ZY >^.+P3-I`l94}%DJ2F~vn)e6[DQRFa;r/#/JfzdM5,RzoM*+Z/ii>#eP9t "9 u !| {9 7 e  e ;/ 0 { Z%?JlfJw~Gzelx pg$^1T?JM?\4l(} (B^o{YB*"Ho`>N VY*Tl8&qY  _ \ c  ~A G X  [qcJa%kV} <$t2b4,p'yri`W,M9CG8V,f w :zVesN7>erQ. ArnCJBU!\y= H = J h b * 0 j /Ny>9VAUAv ZAim*g3U{skcZQ&G4<B1P%`p 2pNZjC+3ZcB4e[0;ur0>s H_" 1 b  0 F F [ s I] +K#R(wFq 'L'Ew|ume] TJ!@.5<*KZj|{*fEPb9 (OvwU3'WtI+e\(`3E}  lD  oo $ ) 5 S (3 |{kWhq?V>csd[]Gg&~wog_VMC9(.6#ET dur"\=FY.vDikG%I{c7 TzG Mg+g k S& TN  lc  3 d  s PUC'=UCxVu #Zxb!AGo[N0!qZ=S\#m\  X <  X M  o J 5 2 r kS?-7M;aKkgi\)De Yw||uog`XPG>4*,;JZl~wbL64PnvV4;bvK?p^H*>E UB =j  ;~ + N %  xj K ?*k  +2/-U%mk>rx~}wpib[SJB8.$ &4CSdvnYC,+GdjJ '.U~g<0`K5ok).jl=( "M s ^ u -[ SC $| r>_]Wp[yjwhNH(&Vnsy~xrkd]UME<2(-<L]ozfQ:# !=Zw_="HpX, Pm8#\UTS$m| 0 W ? U 9  X O Nt  X  v  @ }Ye(SKEMB[0d5^:X?QCKHDN=S6Y.^&ekr y}kXD/&7I\p|]=4Rp\1sD>lZK|UQz-B5 'Qf 1 0 #T x l ( x Bx k p RF+&Xe R+a0Z5T9M>GC@H9M2S*Y"_elszweR> (.@RfzsT4 &D{bQ& f21YK 4eD6got#cl.uK ~ W 4 K J ST Q o B 7 & vcW&A6/6@]&]+W/P4J9C=<B5H.M&SY_ fmt|q_L7" $6H[pkL+ 5qSFrY $Fny<Mx~2SS_CT P1b . |   s) "1 | , 8  d h75OqgIh!!Y&S*L.F3?88=1B*G"MSY_fmu}}kYF1 ,>QeydD# 'gD<bM 3[k-5gf!@7oJ"b<|+rF  Ri D  I   a d ( = bh@(s]V O%I)B.;247-<&AGM SY`gnvwfS@+"4FZzn\<]52SruA  Fo]WM~{-Q5@%cK+ 'L t b  hl i o Y ( = P x 9k@SE&kBRLE$?(8-11)6";AF LSY`hoxr`N:%);OsbTw4} S&(Cbi5 2ZOG4dj3wk!m\K$|j0 H D 7K F 9 5 N  vN G f"^{n4sOHB;"4'-,&05;@FLSZahpy~m[H5  1ClWMk- tJ3Qp^)~EAm}8JzX cL W9x3cA  g& , X %  [  qZ 5$ l8G,,v< LE>81!)&"*/5 :@FLSZair{yhVC/&8eKF_%tk@#A_S r/4Vo(/_GP-dBSJ]l 8 $ w z " {] 33 WY $ _jCO=H B;4-& $).49?ELSZbjs|tcQ>* |-^@>Sh}b7 0N{mHe'@h`C7t> D|.k-l12Rxf Tn j A X @9 Qq 0 v D2UoE> 8 1*"# (-39?ELS[ckt~o^L9$ @u!W47G[pY.ELS[dl{vkYG4 oQ(1;NcyzQ&+gI3gM9aDe :jpd7n@o[c05 ; - $ v ^ v & + 7 J &{nR/2g?81*#  !&+17>ELT\ewnfwUB/i J*.BVkrI]6(Ut~A"|H6pVL`|RKXv3`  RpL+e{3Y) t d : =t # s2vgWF4" %.7A~KaVCa$myoF](*>S~iA|5T6Ts[J?eIg2x_|sO\7&_doQW  Y  U / y  sdTC1  #,6z?]J?U `lxjAV"+?wT9jt-J7TPs>y>d;Xh0\kaHJ}"MWVE<  J 6 j  f  qaQ@. "+v4Y>;HS_kxe<P*p?2Tjk%A6FSr2m<-aIX+ZVO6Btu7K>6"uf 7 {L z  O |n_O>,s)V27<GR]jva7 ~Ki)+>Sid8<4Qo'a 7\;IJ#N>{#7ai"}<'tv $La !. c\ zl\L;) oR&40:EP[h\t2xEc$'<Q\f}~/20|MkU 1.Uz;;.DpN)Zh*_a3qJ ? Gh  xiZI8& lO0$-8BMYXe.rs@ \$9UM cyw')r+GeKv!(L-q,7bn;HTzIKX/k$L 'o ugWG6$iK- !*5?|JTV*bo|n;V  N4I^otx!i $@@ @]{k @d(]R}*@3d4}0f@yJ 0S seUE3!fH* '1xhy.J {h*Gb}%`8|~qbSC1 cE&#u-L8"CNZget1K B(a<Qfh}W-+VGdt"}Ehe> (hQ{p -U\K#~Xv xy{}}o`Q@/ |`B$ qH(3>IUab-n|F< Z 4Ha] sO$M:iVsy{p1WTw0Y6 __B :i6h.bp qsuwxz|~{m_O>-y]@!nE#-8C]O([hu~A|6T*Z>ShG~C_)Ena~pdJ<"_JO@h0rA"pT3j kmnprtvwz|~zl]M=+w[=kB '2Y=$HTazn={w1N S2F@[pzh t&M/9CuMW'bzmx[L~2z l!^!O"?#.$% &'()*,-d.G0)1 3568z:R<(?ACFnH;KMPSWVY]`Odgkooswx| g<f qIq #v$-6W?HR\Hfyq{-yl]N>-  !"d#G$)% &')*z,R-(/024m6:8:<>VACEHNKMPnSVYv]`cfgkn;rvdz oGn s SD u$- 5( yk]N>-cF(yQ' !#m$9%&()U+-.0M235m79;u>@BeEGI:LOcQTW Z]`dgjnmruEy}lq Q Ar %yk]N>-   ~ c F (  yQ'l9UMmu !d"#$9&'b)*+ -.02 357l9:D<> @kBDFpIK MPORT W?Yq\^ad g#0 @{zn{zn"{zn{zn         "{oon#333{oon#33{oon"#####333{oonn#{oonnn         UUހVVVVUUހVffffffVffffffUހVV1 @UVVUVVUUVVUUffffffffffffVfffffffffffVnMxxEEEEEEEEEE"""""""""fffVVnM""""""""fVVnM""""VVnM"""VVnMU"""ffffffffffffffffV++nM"""VV<++nMUހ"""VV<++nM""VV<++nM̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀""VV<++nM̀""""""VVffffff<++nM̀΀"""""VV<nǸ瀌%?#ƀ 2O_큌%L8%QQ_OZ& CS%3 %ކ`D3DM'炌"01  N&.O&-,$_/$_  M& - L&.,$_/$_ .'=8 @ / j4MMMh5AF"@ %@ F~& =  = LTTTAVBA9̷*Sp=Ά=Ή}*CS9Iy%9 ;| 89:;01>?8234567? 06"58?/0 @ڀڀڀڀڀڀڀڀڀڀڀڀڀznڀڀڀznڀznڀznڀn}}}}}}}oon݀}}}}}}}}ڀooVxxV}EEEEEEEEEEV}݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀݀UU#3VwUU#3VwU#33V1 @U#33VU#333VUU#333VUU#3333VnxxEEEEEEEEEEހހހހހހ""#3333VnDDD"""""""""33VfnDDD"""""VfnDDD""""VenDDD"""VenJJJ""""VUnJJJ""VUnJJJ"""VTǹ̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀JJJ""""DDDDEEEEUU:$A@1DV'S=4~9+  }+  ݈`݀ݬB݋ݱ@}H̡݈. +-0&_990' }}ӈ݈0&_9 &|0*9 ܀*{S=-܋*4S=~~$0*$0*Z &==~~$0*f$ 0*TZ &=~t܋*2S=~~$*$0*Z &=~~$*$0*Z &_A!+,&%O_' `H'%?&9@&%ƪOƻ1 ܗ%ƪ?`X1(%1( :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::9__^][ZXWUSQOMKIUFUC@?@;36+0+* "  ri|;Oٷ@4PO]&=~b瀌%?#ƀ 2O_큌%L8%ҟҟ_OZ&01?  XI8XIS73D!%373H!%37">',3\"3}݈m1$3L!%3 & ?T1$3H!%3 &ǽτ&.жЄ&0-0, $_/ $_ ΄&-̈́&.,$_/$_. '7 4@  +4050"@ %@ ~9MgM*SpN=ON=PO}M*CS9ʆy%9 ;| 89:;01>?8234567? 06"58? #&),/258;>ADGJMPSVY\_behjmpsvx{~}{xurpmjgda^\YVSPMJGDA>;851.+(%" }zwurpmjhec`^\YWURPNLIGECA?=;97531/.,*('%$"} {xurpmjgda^\YVSP M J G D A >;851.+(%"   !"$%}'z)w*u,r.p0m1j3h5e7c9#_%L&8&%'''''&%$#w!d Q>*  mZH5#o]L:~)vmcZPF<2(tdTE6& tfYK=uGLOOM.BIN This program is simply an example. There has been talk on the CoCo listserver about 'Doom' for the CoCo, and most people's impression was that it was completely impossible. It was my opinion that is WAS possible, though it wouldn't be as fast or as graphically complex as the PC version. I don't have the time to make a game, but I did manage to scrape up a little demonstration of a first person perspective '3D' walk through maze program. I've kept it as elementary as possible to save time. (You can still walk right through walls. The minimum size of a 'square' on the map is very large. There is no 'anything' to this demo other than walking in a 128x64 map.) I've also kept it strictly 6809 code to make a point. If a stock 6809 can do THIS, imagine what a 6309 version would run like? The program runs in 256x192 in 16 colors. The graphics engine writes BYTES to the screen to improve performance, but that limits the effective resolution to 128x192. Overall it runs at about 15 frames per second, give or take a bit for variations in CPU power demanded. The program breaks down to: 96K of 'RADAR TABLE' (Data table used to eliminate on the fly calculations) 16K of 'MAP' (The 128x64 playing area) 1K of program code (actually, it's less than 1K.) I don't have the time to make a game, but I just felt I had to make a point. If anyone wants to make a first person perspective game out of this, contact me and I'll send you the source code. John Kowalski (Sock Master) sock@axess.com http://users.axess.com/twilight/sock/ reen, but it's probable that it will be necessary to draw two copies of the screen in memory to accomodate adding bit-mapped enemies to the game. Luckily, Gloom uses the 256 bytes per line mode, and only draws onto 128 of these bytes. It's simple to change it to use two screens side by side and only display one of them at a time. - The map size is currently programmed to be 128x64. Making the map larger will require a bit of extra program logic to switch parts of the map in and out of active memory. - Interaction with the environment (open/closing doors, pressing switches, etc...) is possible to add. Since the map is re-read and redrawn on the screen continually, changing the data in the map will immediately reflect on the screen. (Example; opening a door can be as easy as erasing a wall from the map data.) - Incorporating variable wall, floor and ceiling heights is a bit of a problem without slowing down the RADAR scanner significantly, but it ought to be possible. The problem with adding variable wall heights is that if a short wall is in front of you, the scanner has to keep scanning what's BEHIND that wall because it's possible that there is a taller wall behind it. The RADAR scanner is already one of the biggest slow-downs in Gloom. ------------------------------------------------------------------------------- That's all for now. Good luck! I hope to see something good turn out from this demo. Unfortunately, I do not have the free time to pursue this any further. It's hoped that some of the programmers in the CoCo community are interested in making further developments in this project and eventually turning it into a good game - be it like Doom, or Dungeons of Daggorath - it's bound to be something fantastic. John Kowalski (Sock Master) sock@axess.com http://users.axess.com/twilight/sock/