From 3257a529ba622d3016aaaf7b9a519db811005c02 Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Wed, 5 Dec 2012 04:44:42 +1000 Subject: [PATCH 1/2] fixed up the core sampler + gave it a placeholder sprite, made geo data actually persist across turfs and ores, cleaned up some new xenoarch stuff Signed-off-by: Cael_Aislinn --- code/modules/mining/mine_turfs.dm | 35 +++-- code/modules/mining/ores_materials_coins.dm | 10 +- .../research/xenoarchaeology/core_sampler.dm | 120 +++++++++++------- .../modules/research/xenoarchaeology/finds.dm | 23 +--- .../research/xenoarchaeology/geosample.dm | 17 ++- icons/obj/device.dmi | Bin 16615 -> 17186 bytes 6 files changed, 128 insertions(+), 77 deletions(-) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 7285b4628b0..192446d262b 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -16,6 +16,7 @@ var/spreadChance = 0 //the percentual chance of an ore spreading to the neighbouring tiles var/artifactChance = 0.3 //percent chance to spawn a xenoarchaelogical artifact var/last_act = 0 + var/datum/geosample/geological_data /turf/simulated/mineral/Del() return @@ -54,6 +55,9 @@ if (T) T.overlays += image('icons/turf/walls.dmi', "rock_side_e", layer=6) + src.geological_data = new /datum/geosample + src.geological_data.UpdateTurf(src) + if (mineralName && mineralAmt && spread && spreadChance) if(prob(spreadChance)) if(istype(get_step(src, SOUTH), /turf/simulated/mineral/random)) @@ -102,6 +106,9 @@ if(M) src = M M.levelupdate() + if(!geological_data) + src.geological_data = new /datum/geosample + src.geological_data.UpdateTurf(src) else if (prob(artifactChance)) //spawn a rare, xeno-arch artifact here new/obj/machinery/artifact(src) @@ -220,6 +227,11 @@ usr << "\red You don't have the dexterity to do this!" return + if (istype(W, /obj/item/device/core_sampler)) + var/obj/item/device/core_sampler/C = W + C.sample_item(src, user) + return + if (istype(W, /obj/item/weapon/pickaxe)) var/turf/T = user.loc if (!( istype(T, /turf) )) @@ -250,27 +262,34 @@ if ((src.mineralName != "") && (src.mineralAmt > 0) && (src.mineralAmt < 11)) var/i for (i=0;i{%mO%2u*7c11|mEHj8y_6pe*q3pYCBeIj75M$qW zW1ICkr|$fPo|Bc0Ha)?|#SJuh#)U_O_$LlfIoUID#-9SiU(Xs=#kz zEs<}0;v9d;@w-L$)hf}!Y&G{MQ^(faGIlKfkle^X&9kB%Wp5TA4>DfnLKR=0wBGEv z?5V*Je8jWqmHhO*Sjn4slce~^D!#1AeeppVhYTht=1-f&XGB6gUHbF5Ws>-`k~vb7 zLh+@M&Vs*690k5tsfm4*?=C;Elb-vr>9H0?KFQ-ZD7w*q=6wLm>+VGNl;?ua6C8&u zAiYQQ7e(K76FZa)>{G>Va!tM3zire*>#CVP_fsRqY!Gujw~f(BccIvk zTI*X!cf@Y9I2@>|j8KH>d(C{qG~V!BinI$OaMEMX9E1`YpUycLs-)ylPg1#flBHXU zb!K(E;Y?5w^*bOhO=z1tD=$jr+!xk(cevrbZol${Z|!pxFP11nCsua8h0;?yt8!^R zg}Lo8w&nJ>x65@IfuM(9362p?N3GC_v3y7&of;5 z>_r&%^9_1puas#kFK+dlWb-u1X1_wdq7i#m6uc&Q|A!T4@a#+fmCDvvCK7X>Ot%KL zVB^b22`)(QRi(&V58E+po!`qq9j4eHBLf)%) z-MUQmY;D+3IpGuQwVC9jn8$-X65{WYG@td&V!stxzO%b=vY_L**BiL3Vy$c=2LVB@g(?hF0o3lL{46bETgHriGWl z2WhhKnfgq7_pQHkYOg~}1`+3&G9WC2XnXW{}m$S69?HGyM={ zk5D^l4EzQ>_3g=E1)893Q}O(B)5D>vz7$t7u!tYllkzh35l zvDTt@2U`fiA66s1IF9rQBlXmlQBimJ28s;=0R$Mmif_dw| zO#z^hN0yOJzT489Za=oB>L9>g+;K$KOD!nWgd5G2v_U*lqW`A7jVimdyRC(FOWfB@ zLUV2y32fu+6bZ++p4yra;1>f9;Dg*X9lb1fD=X$l;E8lS`X-P$Kd-tX-KqPD0SQ4P ziCAQw=gr-f5^EVh^yNDuMDg^k5!L6!UIlE4-7#m!jJcM?H=%a+m_*=4uEJfV>+k6}r8M@O9UO8Nzq=;DjObSMABt#jEAAb; zMVfNbnae2|rIed*LQTuaGo(`yK+weg^7UuKmkqcSBc)LRXLXhE6%vj=xl#fobPx-e z;5HBXGFZcYIqxxKj8`tdM{ZqOntg6~9knyKUc>K`dc&=~J-pvd%wzfI!36qUVxr@I z>X?UVHWtDsE3G4-m~gehvN~U`rx)SRAPG!8IVvxo_Qt>oVCok zo!Qvb;9~`!8Z_s6hMZ54gwK|_{PE0-kRg0ONPx9Qh=RCv8c)8Hw*3^2{{v>9%-F5xGKS3UY@-Hs4l{kZGJsFXV z!Dk?%uL9WWfatG&d@jUg<%dHjkw1pqRIeVoop4DxUL8C{ME7++&^{n*dcz`|y|M9x z6UcMsTU&LosRCE-k@DxW%e*XRWTp*%lB8YX)R!?90CTR5lLSPNH>nEH&{3+U=7V*S z{rql`;s}#PUOD@?%~pNYi_e9QciVYwmk&3SE1Q}_PNCgaQfEAtDwRllV|1JV=&CpK$&_0gM? zMjpm@0z(Xz5)P%C^DK?QIqH^^K*&K5+nlSq#Xep{qcM%bJ-28Ni=$D7D9PQ{FJBT) z7R&r?LSe!I_1vC$&prAS&p~1I?K`u^;6edoVP(PIlt#^zdd~l@SyUXbftIgK z&CQ>9+)Q)zk)vX(azhp2I^~pfBPUJ8VWi(>w}DQ~yU*2q2`J{$siq+b`Y_{>-y#rm*_=lH?v$Dq&~GUyd^GC@>3$mv9O; z#EfXeKH=~jIbT}(?h!v57AD_&*OJ@%Nv%fSuj28RKkTYe$ntdJ@0QW3%PdFrb^!oc zQ!p9j%o7=6BRnIx_P#1Quq^H!j{obzI@v2ZZ*-MPqRHQ^|Z2l&LQNQ|Fgc_u6sR)o)cv9h-^kP{vQRcv_7A9V2;ofCH4S8jXH{YQH{ z8E~Wc+i9h*ZT5$S(;+;n+eVgAMUc)$bhApey8sSC*?+=|_yH|qNi^H*+-VHNVt$`M zmbgf_BCe;nwY|p$q@G}$t3{D}Y3w~O;p;ft_9)ed599CW4}OI}K#Kr9!TaaAD>9A? zF-lSh4&|%hrfzRP`J&akJpcHMYh@;D#2pCmlKywZ1j85v$f-I};>X&rt*w>VbutfE zx<(yeysKwqw0sDU`FK>tu5L4eHb1D~Bz)MxY9!u!h?*rMzXt|^A6%hKsjTL5l{Is}IRI+lpuWrf3 zxc!}w?&$;HSF#>UzuIDWp%;aO=3f{H<){nA%?G; z@1OGZ9csCSRrqGRqo9bAt~+g)1M>ko75M7IdIz%9-CO9SXC~c{BO(l;o0HX9Zm7m% zyz^b)(Kc?&rRKD?WlQH>f#Me*VFkp6&UalU=?=;VIJ9~?Y}$Q!aZyu?YE=*lE$$R~ z7II+wa$Se&S;@-mEW0K+KR<8g;~O)cI=-1)ze47$?11&6>|Y(qbsy4>s+NE4yaIWE z>OZ^ulG8P4XjNkIqo-2&D`m9f;YBjKfZ+4P5DLZ62J%k7D=t z_MSX{{u~mR7+Ei=V`-UACw{7KC|IBH`EKF_PT|z-a4uF-iR}v90wQ=6ipA~sHT<+4 zJ*y8n%KCC8UupD!{o6_VD|JXebaeZ*AywB7Hh>RQC56y!4kam*s zak&DxyQ3X50$J<4H=Cz?P*GmaqgMT~{KnM|Q8#qQ-k&qC743YlPBsMnsRX*`$st`O zkPF%j~`9NvQpNKz77Jt^b1kRtRp9UDg@4hTBgU(Twp=h|QHqXY`f%1^^aYIvfT z^3_@KaqC9qfmm-GW+`QgF#KVhA_=|=XSVpIb@#4X@e5b9;@Vh278KKpS@gPm^=fk@ zySSKr*SVe#*U4z6{b;@+Z~{5^l0xDH)CYN6!Ru}t08FQj=~aZi;UIdxTM35TrsBU% z#pF)^3M9km@4$sn#tY=989~C#FBU|_A4>K28MJ&Lbyl$gNc8v=8F=z5#`DS`We#on zb4h5>sSZ@jYj7K3)G*ZiZOt5inpmOFBypTIqx_E<@Hn{2t6lI&PtUy+%!t!UE-V}M z4$AART)Tg=92UlpN2|Ypjm@85$ohGNLhyo+Mg=(gkfVp7gT-yLPbE$UOipV2Fsm__ zkSM^k)F$kGTAB-)xlnMTsD;yhs_UhH&eT|4UG4Jq@{$BHKYeO`n+AX_rw~mM;!pl| zkN0(_&R&s|lRNLI+^>t&Kqhx5LbI~7$>-am)$AX}e|80LatGN5a9pN&2zsu%Wc&M9X%|x_OXv&4){X}dRDWWF3uoXx4P<9$Q|)FnF0um3 zoVOO)Hl^o@+tsJZf$ejR!P(h@GHE)C2fJVT0HDH~aV>{gAd@sd&zDhzXdNKvf%D5N z{5y|LlJt{H4*R&_^d>EYDY3=Wva@Afh~ph=^Do7e0GDEbF*ScaF4yfFg@#vDMw^Hh z)sHu*0wS^q(9+VnuR}Oh^zOS8=3>s}mJ9>lHkaxt)$K+fNJ^rjrh>M!GN0bNn=OErikY_E~pp9GoXyt-?9riTKm~Byjh<2?0`a zb<~z5$C}1#CF!|jGV7rX-CT0sJs&C`oD}!=wZF`OtN2;-r|RS`!kZq#F*LKO3X{)> zF%%RkT~Lp;rhzt&j^M14TAK7n#IA=*54=@`jqp7-a{cn6I@IY)?(PX#{pdEv%hi_9 z3Aa%qY|Kk}cXt;E0-+setd|+ty%eE`IZGMtEV06~p!h$>Dnn_4)?M=}4WEBQ(L-0Y%VaAY(CN&Ke2iO@q7$>_mhG#It?I zKcErmcEE~0?}yxTLNi^)qa)DW6^{l^P1Smp167D52&X#v!LKwUb0@3B;V&tJL|Cd z&qKM8a8>5Ld(YnC)_9eG4kbbo;INjr3#JDsqZvm#Q(%^q$0iJzRfbmHGo|;*GEp+8 z&hUk|@PE$D6`luIyvtL#amNt5Sh7Bp8`F2PkQF59JUT;^BZ!)Q5&^-k9>qDXOY1f` zxmLFz@#CO|mu#O+ljvS{FR5`3+D%8a7=*TEq@)Np9M450Z%?_mbKjC|r8uXY2!-9z z)TC~U;*RM0`c+xciOTR;8l2Zl(*D1Xti=P+R`UZ((cE&esi_-M#Ljm@1G&1q_Cm2c zO_DV`jv#2>Ln@VJoEP=#3((ka&^>gyg?!H$d~OU&=0{`&dz2XYo4T!*h-{B!SxaQV zM5*`y_8^%41DIAIn7%BIR6=se?=SU9k02la*q3TIJbKq4=e^MswwycDL?>O-i=D4V z*|g`2i`jKBnmauR!}2t+TqMd^zd^dT<@@gLUb|O&rpGhwwDO^xaH(zAe!}tk*pnaC z7PVFm;+NNVeh^fDT^DS*L9_;_zj_%D(w>k1{gaspjW(QXeR(6xS^@Cb3b~61k_%oug!kR(Ubl{i zIoI`VOjBfC+aqh5-4?Ao-I)JuNa82YKNf?C&({6*pJERAG}74rTrb78kq?B4b0dB?uM9L`Iy8A*2}KItLk4F zpovt`8@dwpJ2yddp_Sc(iJAuO8zvwh$kqSe!M_``9)7>9y}LdO_O@m@=13}u&{wT^ zhx0=<+50aiF>X(Zw)m8L#N(;WN4B-x$5rzWabq*Lv~!Bh>pGc{d3y|vxC~=#f;t`5 z_lM-3lzRI$G8cW5+gm9v(uASWo=>Lh*@6B_XQPer@^(*0clT25Kzz(-=S*lQ`DZ-$ zQ|>U15&jSo+~IfEF)*7=8id=8hWX-~W*^(Va*MvN8BM$0P+*cKGc0H>+TK~F(Z;*0 z6X@iv8mHIx^5yvDL)3pyi&vg)1~YChSFT*q{s}P|!Bsw6)G{+POc(|i8E692a@Y3# zx5&{wBrKmhQd_1xZB~}S;E24mS-5Xz0k=+LTwpw9b@GjEJR?5-;twds$pf>>wtDo^ zR)rqO^gXn(pZFf%-7m6!1(VfZycIgr2{O47tM4H}$Xv)&WQAG;tA@6ArF=kht1i{! zg&@J%pkZTKxteF}jVDW-T;|^*36~F`#wAVO3mr_p1d6kY%8WiLv4YgEU%$>PDr$RK zIE=+1;rj$=x#DA<0SGatx+S0*Zj7Z{nn^e&t&$XE`d+SQ^DYCSKtA-})~ zc-xMA?F78ZIv(eJ{=h>12`@VFq^^ClgZK>>Hps289gN}9AkB!>#sTF#kZudPA``^gdtd zmX8eAeRuck-dn$4yG&MH8Cu*I^RBbFDk383qR_Jg<6O~7RSdk@A9MZ;9&M&h4^G(c ze)Nb;Zn%!sw!S_%NFOt3#0I7fthzMyqTzN zp3{Jx!l6q}SA-h$0{&7`@~HB&*f*`0-EP1hRJ`CfP-2CgpYl}n zzzP2TAnTFyY)gm(_niU^WIxR7lc|8w$NEBsp{kf;G?q!mDh<)m7Oo%G#-W!#|L&Rx zSyL=Or~c;&WQ~(DYf;e5CaSje;l@PeUG_w0<+k~?u+d*Qiif@J+?r1JC{ncjc?57# zlDxvW+r2`QicLb3=16SroqH{1pP?p=^e~4fLHn*pk2Sj|OqNi-M^jDWeG)pqDrq#k z6DS($!Ps(Ba3_}Eb^BmtfDFuaBoxR|i%bxg+oWqfZ-LQY!9g7hEC_ad=+iEbbktVK zud-g!fmQGtgZ#H>TKjIIXgrvxvpyy&nd9*Aqmsdmswb;=eVu+t08NQ7o*(rma`*Pt z#WzBgmGG8&J|gjbxxZq5U$L%OpWyP@GN5xFyMLiqw>c)7Q`}w6>a2NNkwqTW$F_OR z{xnAUleq|J$+`auAc{OGCK`CyfL5fz|*B3cA)4izES6}dtWUdRi5>| z{)Ft>Zhn%)#xusmp^}wncR@l z_*7KRw26A)Ps7tAdDu=vwAX~Tl4mQ z%4MWSpQHBAVA9#C{)*))y!!+a*BI!Vryh2Lio|EuQgPLJe;jsYnBYZ|t%7yCRua08 zx-X~PD=s94*-Mi}*&`z{vdV^GF|>bWBqED~ualA%D{UPd=l?qNi!SB=pR4%K{R&l` z|95+(>*n7&R@cA2<5!x$(7!mKi@1iRE`3{)4=FtEerDEwSe^MWAeCP!K{*kOOiDL| zerPps=}>)&0akOB67Y@2mIi_kxo(CQfrRt8BQ7DF9Y3(la5bo>k<*z_@pw>r`RB(N zOi@1nQ}nTWfX5aW>owy{XN$isKF)Z3_OnuN^2LHnY6#C0GJ3x94E5RPKMw2Qcooy> z#N5XFFJH)>`m7Xy&uahuN{t4|v^1ugeNtI6xp^O%Fm{r*{q8PX%02N<<1vJl14=IC zLtc2Sn3eK;sCJ4TW%Vpgm-2-g+0pnWW)0oFX})+rpT zCoc*N8U~UZqYo!z0fX-cFRls;lL6VEKVNAfw2dJuBs0CTm3nZp)$=&7MH!zhF2&;+ z*b0gWi_K0cwP}?jz5P{taILI7B`asi`N@r@>g+{{h8jX^0jGJ4N!k(&-?WRQ5>TM2_jJKP@Yo;own9sGQGy<&!43PR35d$5+)Y}nmB+(!1aCu zF}o!g8qGri)Js3UF^aGll2LqqV{}X+nyje_ixE~2681b)8C=hhI8jLba^*2s2Abz* zfQ1S&n4krWN!O1xV0~(`oY`>sRjfd4)dAJkd2GoI#m9rW$6L)*sfzwmPF-%5D7FVV z_XZ?UU?T3lwSu;^Uy`JA0_yoCozxX6*Bm8&cSfhLW7PZ3Opggc&dRN=t-ro`2!TE& z=U#qZ9+l^HxU6T*#V*LbjWGs<%ZG%7gdAMW;NW0vRpmLDvZSTy+TpzTB(hS1PA|qy zn@kz0Pv}aW+_h|v_Wf!-QCNLR*!o@C6qnAg;Fr6hp((ST(~%fV`2-DZGqe_W0sljq z`t^(VMtzJIFw}K4`Vgyip^Qwfre>iG@@QV8oct8_fVhN&I|zy6V)@ru>(TRHUXs_A zIK>zBRdY!7oCnK%G<#=J9kW?HZ0stA*eGTgxOjH_gN*xy ztyL7Sq@?7pYMdLf&eLTOY6tH>z}>hyN(^#qEhkaEf`TVFvx>|8YUDq5i=(aQe!R|;c?y8D1z%Qjp9`I2;={*n zW{4xCr~TbnoWACJA#!p)o|bSVY{lX~bwek3zu4K?ec0N0IA79LY)N@g!VcF>WLjjX zyCmb~^8nx<3zAP{`>NE>5jy}!+)jbjonGMlc3J|ykw)5dU0u=Sn`{>Fe0*F`y1;Ii z`}2gNcS45P!m9}FgPRt;PyO%^O1(Btw@e%Kin061QG~wz3nhkS_QAsVsxQnfz|I zZ0HP-40^pUQzcjstz?6Q?%(gH{5Te5m#(4t{S+DQdn(zDL53#mmDtN@)Gy4XD2~|b zcYLA?9Q|?#k53Q6`*EMT-71yt$EsdV=!2-eK=oge5qCY>dQQHwT_u>V9`r2HFbh|_ zIdO3q@ownKFwDLb@e?;yL%71r~2>^K6-gg?66aQdnw^j@f%(G#hJ^- zYZHwS5(?Mz6A5_C#|Po`E9Ykl^;Q^oi5UQwOh1PbZigMne3+lFsDzkRnfFpb_-*oY zeL1$jorrQm3attJa_u!+!9>>2U!Pk^A*>uydP+Yz@CcH>z7|Kj*L(gh2RtZf-COWG z^Ty`RDg%_L`oa_fFf%8gpht$y)jDsEjeiP1UD;e9P0umMkf1S1F#WaZU5xZcoIj8O zFj+&qhcUKdAsYUC=kbmB7}~ni+r=2_7+MdDwnM_#jQ6Xk0J0~On0H?Y%C9Aq_zju7 zA%d8=A87RiB!cK;IaPbGyR3GCXL<}*DG;2I;}?wLi6UaVgwM-5ox5>EJkD-M@|G~6 z?DuFXUgQxAuVY8dMbI(xn!sVRwqdB1#n*>tZ7xE_f`B8BTXz(rIT;b;8h^XykTayh zg`mMH*AM})ToD=cSHa_dQ_lDwC<1@xGDHM=_3c&AMUIJDhy^TYbi1wIQo^H$bP?!d zvagWN`%GcE8E_2f!)tN1TO?Qb87@-1FPAZTb|=!0kC}8Tm;zV?)4BgRQeig-k0bMV z!2sVc^cm*0=LheAB>++jH}SQ7kj-y>MLvdTOy0Smb@sVC@`0iwRv1genzeOn}c%?ih_!#kca29{D9J5O|o+OZZxPTd_le=A^!k63t zs-VvOGx9JEl{vm)gW~dnI~VHYQwZQB4N_eR3fLrPpyOif`Xta+OwaQdw5;r5!A!|& zj4Q&%Mx}!gd#b}jD39l7M+cStK(cRbz{t&>9e?I^IIJHWBpNG_Y5CODSB|-uE0JyO zlVqF)A-TS1ZyhY2fTQEUuO-LGgW2@6?@2)^iK~e}k#8sCUjX*Jd742si4dB#{YaNU zIvW-Wqvv*;%^Ks?JDa+!b_W1rXrT5tZrmvGa(QiSG{3#j?qPttZ3n!9cX#ZM)(s^(N*2vdK>%&C9U6Z;H2+k>KWID*L_UkJ* zoUMj8oBlo|3YJm8Vwg(g%Rjk`|K6O%DZdMAd!H_Rnd|5G+#IB6QIDoQkwOKl{HHd> zt1(u*=mlRM@;jBT&v5(GKgI?pdt|z#y!t(17rxm0WGg-YZ72hDWESLrsuNUyj1H}y z3p*g-;*ra?IM5uI%H%-(sk$$S1HO} zV=aKuU~IcHK75#wN{>JI@R$%UjPl|QP0TpcvxRQ{MfWZ4P9`s%5Qv87J(vDQE9J` zDan{es z$Vffb!pUtHO1qb+Ar|_@Bi1I;WwUw&<3p0M3Vi3)gVreLaV0vAev;h%&HiC=Y!YYl z@T8$I#sogTSlrpYM*K4Y&k1=o>|aKfGn;2q*}(qZWD2Bz1>at_?m5KfQ?zv*k}TxK z5#=!X^7FVj=>KPYgTzn~VN!VI^D}cE5~TM#uKZEfKM@G zuaE8BMD9OUfb`{2UKsexZY-_{N2&+7ysjWHlhwvb}mHe6PI>#fDx75t>Gn@oM{GQstvrcwt)fatwcRcX8Omf3-k2 zlypAM51e#`9WFgaU&3+AELWsPfheND%}wPKMLO9TW-lRt36AJ@i$a;X^gKZ#O|1%^ zATR=xe`8_e-$do5#cR%J!ZkbVxigzyZ^HJ5wlVa^i%0bxLz6yz*AOzUq-*{=t#ad~ zHc2w@k01H(C=xREpVd!fW6@*@r~l}jD0*J;nO#Tq3H`aht*D(>k4_`u&1Lz2+~^oy zx%U5>f8`{>u2Kr6ERT?ldEgg@P+Hz*j)IUpHER7RVn8C4``R5J6CD3Zgi@}uz;uvT2m5&jT7nE_to^j~G{^PerRn%DL?SLbEiMVhNZxC^j#I3Yi!rB=Tfkel;><)a0+I1ue5Rc7HwJm*;A9$U zR#VB<{TCBk?_@*&UiQ^7yv%6}2fD~wZkhkr5?DyZ>Q@6LoKpX%l9fN;7#p-o+$g_= z;=lFseDP)5PaUBSb{u?hccQ*AxAzjW^dC>u|A{@w1_m(IO&lfr=P zEse<6oxhxM1YHIg_-6SZZFNaJH>dxk-2We&^60Tbi{0VIcop^8OB$g5s{PA@-2MiC zpKD4xQnATzW{tL*2zcy3osZkb?{5#1#`gD3dHw~Eg@5-fHRAq-3}A%*aI+z|MnrQc z^;@oUXD{809S**r>x^nt03=@O?USt>jO(sU)ky;qNyH;0QGq}>Le^W(8soe<2Y{eh{tW6_cvvioY4fwmcYLdvcCF z@QSn}ZJ6rac2Y1*-0HG*otGS0PwugGI8nfx8e72QCjU^4?Gw(5XTlk@ML?o1EPneGm<~ec_)isFs-cgEc)^a4ZOH^2@NFe2Y5a9w__kvlkCi5&SDb zV^Z}X*5XrieRFW=k6T(NB=@mL)NQ6bseVNA9!Vz(deWtxm0X3U`k<(G7mFe`b}lc{ z)2`_aCNof74+?NWtCCTMmaV+n%|}wLS%aQJ6lDJg0wvAcH2Gc7JtEW(JG4#UH2AZD zO-$fk9+Th_C)Y#AUJidBs&X+ycGH1u98U%k4i%G%OTjp@ze%?7>=8?o;fWfY*zyrK zed-r2f{)UwbPq4yjlgbJJL?>IrK{sDNdo^RX;=nz9$PBwbR!kG-&HIsE|qn|Scb15 zEkBJHR}Sss=x=*~sl%^0zZ6)(Rb=(S_3rIWtV28u8n+P>5kUqFkB)xwS|8P(PAq2F zOTCmu&&%$%9O6s=iac^TMv3d^_g6pG_S!LrmzJ*kA3m7`)72lHr?32E5IYHb2ymoK zF6=xWElAokGBaEE4*r@POV%+N^L<0g7@^c`EJMjZSiD8f*SyVuDctqXk4oA+GNOr$ z-*ihrHa0ePR)B>SWJdniug$Fy7$}@BkNW5S1z{klJxuooJ3ITY+NvKV!ok5gY$msy z1Mi`o6O>-!k|$vcL=+|3Y~g4xtzrSYZR`J|=TN#6D&5j){_UBXN8{e`vzgrVE?>S` zGIB=cy-jZPeOXZk%3^c+74g5f=s~yi*@ICg$kVia_K~L?9cFCKz^?{>X;F*Xg#(9d z5;$do;Itzx2VAC*z5p^|5_hVehQVN{Y=My9w7Kb*e8hGN@T8|Js#9fxvs@;8y;k5{ zs(ivlZF!S%e{n0fC|KjZm$^BYX|-#i#P?4A`Ej|Q;sKz%;^j9vZ@yw(-V8}T3lb^` zdhgKk0g9@Rz$%Vw2Fel^)9CK5Mb}{ll>UJ|?F9!J;L&uwY_hc5v|V}x8`Q>s%x?@9 z*ubpl;j__XR6V`sal#LKrA2D1zgDKwO-;4<+snkwgM*dHT!#Di@9SAwZh4vf@#%`Y z-bUm}n--i!oK79d;GHxyHFxXG|7Ze>JJ>!u9R$7WqkKLZgbrnB(xC$3S0YyKg6{=b z_E$yT;Q|x!Ui&paM0TD^tJeiup!HlXoC4?N5v|I3SiVP)XJib_oiauhP;@BCE2 zRrL>x2J4l5sj~K66}$68C6DyEwi^9wuPk0%V(u^WRe3HN#zaEH()C1kCB0`BiC96T&TA&3oqbs48=NCcn`{_U{b4J8a__p|TuDn1iDO?y5{ zJ7weTl&el*%m;O4NiZ9E)4bl72~5VkFj-e6k@@ZTMK!hKeb`$LA$k4KZ~LaULznia z=G&s)E%m0f$2vF7KGgv9KodYqQ6Ibh@<9bwj~x}%D~n_kZcrioKv_To$aw19f_kKu406>ClEHwG?c z4$Q7_-~*;#^^uZqiI@_=zo=B{Epq0rR_KWukpw$8K)iv~Rk3<3bCb1A<=jh=+de;9 zR46$jEG_w*^GHyO>?)+GmpJCG2y)knUFBzR?BA`z0dkah- zMj*GirJP3#cI6Nt>eCipWMO4p+j{Q1*u_%qhz6R5zdVRCjv)u6d1aZA8+(i0m#Kjy~R3?zZh$B{QvdIhD=8$~j&VLu51YU8t$bEVkD91if;7{4LK@^%x#CQ2w8) zBlPy|+ozx;6x5quo=4&qp%&sx+0Cz5u3o$L-qLqAEH-h!nFboltfJj4B%}^^ZeUi) zNQgf%4t4V!36l3wo~rX6FUy%0O0^ua?#s zfbYuVv#Aje;@($KH_h|Q^<^l5^Vr)8~D?)m_tsm0(?Km ze?82=%=t;o`=^Iw+WrueO-jCO+_YaX`=(Lxi&sRXG(zS*>`pdnV;d<13($|KsTuI~ zqXpiB)!Ta`R|GF!ykadN-QGE`lUrU&?dmQYyWnr)_ob-lj)Q|ke};nZj#XY|1_!Y6 z``gx+kdTA!y?si;>8DDR=d|`Y8LjA6u-ix<&gxpW`!y$pTNJs65i1m*Nq<;%{;}mB zho>r&LGcNCWBhDTel90qZw{w0ujCW(Ytl};Il`*JAmi3e<)x6xt|BHF0KD-3-pTgW zBuoQo2;~#Tn>J(?OcT-@nrv2y46j6xD@5e0ZA6`S#1r-CNbkujDdQBJPc4S#w`+O( zPNJT1dTq4*t4%b=?rAeZ*p`W+kkk(A*TlJ(Q=#)*nay@xQmP-I3BfeNNfIr!<@7SA|Mnh)iV6-U3~h{I@&k zGmI)!ueJYGdj20JIsT2{6ih6EauzQ7aJ%8IKU|q|E&*>?9R3JV!RQIdf+*Vcek9Ml z!L*|dRHqES=QPTC_C^`$A$gVZ6`DbLG3r7!5iqz(`D$O+B&tg*crjz{w*BV^ABb)U zEGJk94LebfIv=braEEIABsVvAzO7HqST4AGl^5B z3o%k?sqf&qCmnIe_J1onCn{Z>m;6Y(Zg$>?5qx}$9(*JZe1z`$dd#Jwk?S#gi+z2( z$0;G-*CD{kKBWyP#B^1MT$;#$q|tfkoOl*Ac&A(pGpdBna@>l2Np1fKjBBfrc$C#5^s&+fXP#IEx0l6LdYG`UijNh$l}@!;&~ zU1B-f-yWlIxUPNRbaIzy^7URd%9i2rH^@PVGj8`AgPB?n_JM~)xX6B@GlSU@TLYc~ zySTH@a_k{Zafkp<+p#*{l6UlDMPI_YewjM)XLB zBK$YTgb^1?P_{+{m5Z5xX}z)kud6oGutsB#UpEk64@>Of1K`vnz(6Cp#qi@+07<3S zjlThQTE*2>wAOp`D^9HrfkCfIl_!tf#^5Etj{wTcKfQEW&K1BCGL&|tl~p-$rb8)8 z75E5F9E|#qXc~+BxD-cRue8B^p<51WWL^lz%JQw__hd6+W?Q^c1*@`r!pSJWYOyQ6 z3Y0H@F)FqMf)xA@jn{-kZ@-LXhbyEpO29))_PRk01Ug@(!v-0`rE&oW7PO@hy=D%U zj8`Xk3s+o1@*z83q`p*wy7n($z8E4-NOaj9PN5G61F53x`90WH4e zASWPz4){yk4wTG(PP}Ja2;fx7v6E*GGgvlIkH!!9CJ1yP-AL;!E8^*V+!-e#BImQo zmQnfcXMTd?1?#(+N8nw7l)}=4Bw3f_xb?F&h$t&WycJP91ke7^2A>qtosq=v{s>kmKSijYQ*FI(NlX2oTm0v~vxqGnNyjsCBT zN%}p+@7r7eWoziGq>GHn{>?{g{(XGAeGfQLvPryMOa|sg=4%YmXI4HUh>jPzAQ;}~ zhNprG(_qynsj%gMTZNRsHP;WZLt?4(98q&WhL0_O@;n@7+AVDij*~NX>{Yub|)__)rqf%1UEFLC>!=H=V0i!bUGE zRWzO>^uOjC-l*;5x&>%*#=|zToO(TkKYOhyze`&saj*D-%=v4SUVdtt4hURTNG*)lAVUJI zx)VfdS^bFkBQhXIC(Wrt^W@PXs8r%FeFK(%mPncRA6JSC34#cU6s6aIh)PG44oO6cC{mQ7bP+_Q_f9Ax z3PLE-OXwX!2_^kI=>4o`-kDkRKJ)!GYY8iyoL}2#muv5R9U~3(wK-S?SOEawxT$mf zE&$MEfj{Ol zVkR=yre92z%8R)5Ho5cVuLv0MZ0!ZUc%#ABj#LEt_7xn~rcFo`QW=qNtjH$lhF6Ec zofo8`bI})Wc}cUDbkBUg;hm2s%p5wd?IdJE&taQ^Ju`Ig=Y7HZ z*%ng`+JVB_Jn~Poxc%Qq`U@SgjgQkj6}w12zpCAGpIE2yI7H`hMb$p`GI+|dgIbYMVG4yo+n%FBP>58=0#RN6{Qw;?>JCZ$XrMll<5InB(Mx{$Q_DW3lu1anPk3epRr@zJA@W9&IG?V)vVIVR&p|REyyiUog4YeBe{0hCH9u+=~FS&wwF78NYc#(7pqjc z1ii!Ld}4opeuUmQoipvu3eCH?(x65&tzn`OWTj>y8XcSq3=VVhYKT} zSR#I|Os=eKC+%UWGRi;Q|H1b=rlyP<%wpf%3wau7L%B6(cr|I}o?bnbXA1tI6J&n| zdH3$!d`m9yp2v(SQ_Nza%+t=Qa^z_)L@Y2Bt-N6ve(GnLeD}2H6dFM(Yh62*s_Yhj z`N1}Af08cZ=>b{ReO!?Rc+izR-y@I!45FB=z#rESF-L60CK*` zQvCH2Iez$6Uy^)L5Y`q@FJh$LB1mrq%7N=Tq0?0Xr29neOx96wB^*82TE&oupmL;&HJ^{3O0u^2|p4|Q@sM_ zdcaVjNWUeyl;iLx9U^O<44(AtYN^Z61=3t&vv5 z6+^bI;ohq~jW)`c-A0cVHS8sOU3O={z1nS;YYpe%t+grGWGbK`FDRh4jzhiXUZ7Qk zuRc|e;1s@$VM~%RfO7!vj4ZIS!Mzi{bO2#8SmDOy`u)|)A^V|18vwxTknl&I=OpnJ zu;X9c-lMKUm{dRQyV-s`@ZCFT7{lkf67=@+;(XzkAi=mJS95Y`fJ=J_E>V_O$wOz9 zua(7oqr(q190&lJ@s*hBIvR{0!MiE{Rw9&tYN2fn5qi*!9`udM!{enFO7;2 z6R(PenH{*HJ%zrK^s4^c%q8jje&USf}0%Cgj?hYkMHJK~f?pAGexEv+gxL zEvxwp7k+yyOY7ZT!ztno`wykOxAnXsaT9Rj`b8JX&wF)*{fIpKAp3yYb$IW55?Q>n zQ}vV8v{}X`qku0QCZx;=nEw_+o_ji4t2Y9lt`2ep z?yYSNdL=4>U ztby@g35_8&{(9bj_x7&GXgN#D6}P*z`V+j;3JOE)VTPzefu5R(wm~Fd2O2#v-cb0G zm5nSCEblgI{NDY+4lnsNrORdL97UnZqiS3xBZ79ycaaG&Vr4ZnHh+=c5Gd7!G{qxo zop`UDmdG@~PTmq7TW3OIu?=SL(fZVOtE!V_jgyy9waZ0czp|dvO(M9FV-E#f_7Hso zTv66<({6dpqp|sSNJwmm-FWrmzRCIqbtNS3>Cpn=%ucA|wm@dR(7V^gBxK-2sO#uA zB-TX_R_|AGcKTri^bwGD)w^T17IFu-F=6$@{6=ty@xu4Yq2_#Bb5KT|%H?*-&+M=% z%jkSxU#i)V&ib~;ZBN+#Ak%C4t+3_gO8k6jphGxJDu^Wf^s~RizHR(@8`j0159Z*5 z0`|j7Z`3`Pnx;E5z4Kufg|x)@LkXpi{klJ^o*@A5`XGJ~EFC~m+OQs;=*3(J5I%eM ztY?jN$LdF;bXwpM!?$AlR*5o=AI^v-wmZ7FZV6pT>YR0Fifb7xuu6dXFD|~eP=*r3 z(J}%`!1Xu_81@L#va8fo+~axN{Cx7_saD60R3$(_vjC6Zc?74_ql3Em&I3~$aZ+gI zg5ry=)RZKQAqk@AHr}{0UFYE%WK&a_G9z2YQ}VB?$W z`+O&{1`98-W=XGu;n=O(L!OTBX5ner0pdP3B5#^B^!=<+tc5XsQfC;MxG#n6Y`vr% zBU14Vwb2fVV|lkS`$+cGN*1H5eJH%*j-v#jmr;#KZe)redNs2 z{dmJdMD5wZ903pTO}|}ToW-D{D!;|Od&dm?Xk0l*$`nW%sq^Bk5*NB(4BP$UnSiP*sBmF3Ji z$b0zqDB)LMzn;r6%`u^)%?w2g*6p9$(I0%=edajAl^}t9`a4}YB8IguAsMZ0)UWD% zt&1-T0N6KBOcjuP8sN6mF3g_jxU#ZR{HXWj?+Vw*Z(6Sm&CC|J;6u&(0rkliblaOl z17fnWy~d~y63aaw=q~m32X6$~&Aa*4ogsPxnB->B%X)QZ<VLcnV_HbCI;^TNJhSji5J)!*LP33iX;{R-(H_tl7fuEoWrugfwf^W?jUFpiu( z)~{k~kZev@I$ETR)K9w_wp!#-KYvq0lj|KJJY8|fHc;C7LeeR&93$Q(W+6|^hke|$ zu6N4onWxMo`(?UiA~H?oGQC`mv!!G$RbetRGO#~D&xo_Rv@@uP$KyF~%lYKem62ZY z%lOa-(zpCH*mHtkuq4&e>TIy=k37u4r?r2T%%V-#HhOCY&t8@D+KD+4Lz@Z9#|Rd1 z$LHE-_qz&{L&&BW7wI?T2exS5Nce<&=9@P>)9AfJfuzF;PHW>eyuOqEl7sn{VKmPf z?Yq93bf~2D^?7b3AJrA%xQ$Yz=3A5r9Y*Q$hiH))?)Vh=?|y>g!+wYZoF|38o?HIz zql0ZaV4*wh)%Ld6uQX+Tp!mVSxgd*KxT0mIhy_l&2-XF}@bF<-)RIultvA_}&qGbpUwRDMSxoS?T&dJ|$%p7?*s;FJrs5neKiH z*Dupo^nLm1t@rQWclddG%LAENSuKfa02$YwOkJ^)bNwec-ZhxuJ*%Lga5Pu!&+J_} zx=DtXmM=>jzGs$x?J!jU2V_C*01m+`w*{`a-D}#f_|&QWWm@C#5YAp+UJ_0N+(1+6 zwI{MZzmCr{_i&zUh6XNK0O}NLS&C)^Ck@co*B5$VFySW-WF};8zuL3fqHlv!J^IqYk zJo^p{N6Gt1R1lU{Tf?{j#ivWLJQ_au!$o2@M4(}U3EVIEQ6^M`4Nd%;H(9A9hH=T~ z1Gt;|M&Zyxwa^rgMy33OET|XRjQ^;ef6|3Y;*-7gR<5uxU`+-JI4;U?nI*fwa7D~^ zx2vY2e%qpi)FxXi<2K|;jzRbW0+op)6ZGV*^IkN-75(=iYk7qsd5*ek7!=GOCX%QW zfcvcElDiGFF+_SpDKCCyovgOLFh)k!k#PLY@=rdkQy{EtVeznqIg0pe`B<{HoiD#i zFJ)c|p0yU5SacBC<&){85yGRQ$IIio|550*n4vq$wjA@7iYi=1^6>J~0PnT54n7nc zo;Y;)Z`<=mv@;_kBf%@&;1?pR4!ID|Bv*dwzL|`nTKSa+-A7>*MI7A* z#J)RIhy_^yieh{5#cpm+4$E#8k2Sm(E=8f%(k@j#^JNG^U_11dt{&LV53GqB5|;Uw zlbi#lN%=_lZLlYR}ict}b&uN79u0ZQau@wwlTy-OpH9Y_XIAjR!#Saca+I ztxw{6Ar|mDUrNc+khhGY#)}m5I)45`^OgH+>Rj34|GD}9=N{wsG*u;$e{)37w0}#X zA&fBFK>Bd#X};0_tQtQZa4eMP^*k3r$35#c$?kNW2%}?F44m+~?{b9{`SA?8v-2&S z(4TQqR`y6(SeO_>@`O5ksp{Yu3vh)!aFFIejb-!sX+2MBf>b5`Sng1Od4*;cw2}NF zwg+E@Ykvlnkuj*9PqaEr?Ev*_*Pb19W)34=|1GmoXV9_U$53bMul0kg=@tUjR;07d zg~H63Wv?ngnyv%E$(Lz>pmA=MesYl7cv?sz1UP-AzQ~rVz&kU8;z|0@hq8NCUg;TM zte%Yt08K~Qs*)bC_MPwskiyD7p~k$Itm*DL)1nB+Y*oBjJ+Gb;LrYZsD57l9AxX0t zoOZR*0tQ944O8q6X(ar-w|eaEpLwUbW#j=uSF0hQl%{`HPR{5=QDLF!r?IWDsxg@e z8*l_|w3#U=+z=e%h-jI=zJ@o-mx|SnIkJ+(Md;G-1?K1GbigtIEs&j)W54!J_EXXA zizp$LCkx#bzftzXWt@u-&~F>YD&1P~4<#L_6+;2Ph^-13yD_Q$i;sFltzAvR0!12G za;S>#ktp|3DL+cD(CvEK+rAl$>KkL7C2regl?SV41?>vL%J%|z&#Z0^H$ES}a;EbN zRSdZK)!Y0x{qeZb?|f8rjPVRU{L)8zRWMV#dS|(0V%~dru-O^~J>0ln(3Tc}e7Y_Z zG>IyL%@)t5Anvv9QFEZ-q@9JXCqEXErd4?3_mtaZ)Z#s%SRu8f)m0h*JlI{0rMJS$ zAwgGz<~A+L{bYg6!2OL|%p=oDHMO4vK5wzB?lQW?Jxyw;ApAgoHe8S#=_NuW8%e{KWEUg})6PlCDB8DRU4h`VmnHGS}qsbOj? zX#QeQHS?oQTy5v+qe+^AjU~5N)Xs(6poN;Pds1U0s%vob!*rOj4R6^z6LO$S?b&P$ zm?fF%Vl*KV5#{G6Lb=QI3d92&!3CO&Fker z#FMS&A@N}@Mn+paNEe!VdeLTm>fFPvyIU%496;n1qLGo2>R@yCI`m`($6X^MF>Q)& z+m2^<_qOk&=Sc#Mi0!LU?@0Nl;HpA3e)PWNE%%IN>du1pBZgHUi$0)2B!7el<7mQ!ws65b0KuqNz+E)}BoYk2NPG%}2lTS;WY3{!)CMIE_ zc>lqJd$ZqP1BbBEet%;kQTZ@2TUkYv>oZE8I(2p(izJ@;ozHpX5HLWZU;|XzybNL; z8n=h4Z{t)gRPsM&+DJ-AjcVy>ZT zc|#N;xFFx_{dd?A1{@PnZw#dz z-$kb=pdTM>+WS$%c+}LHK`1W4^7H4<&xM8GYX=|3+IR<_nT)+dlsb2==Zle~6$sK4 z0v||kAIGNdgcg9lr|m$KLr|KXDYmtDsZu$pp3Dx>Sj#EB2W#3#3@WKEsel+2&n)?CfWjI)aEMvjD4k|2(p=Z{2PV`Z7mu z?UQ5J;ZRKprwliNU~n5&-N}mgSO2ITlgPuv6B`?gOoG8j_98@jK?I7Z_c|$Oc59;g z*Wu{pftFrQ|5VDs;Xr?Xe?_0Q<6wlnbLY;HLAq<2Uuj;8s9M(U4qC;<#XS>I4Y2FW zzF8^40)jVTN>o%;PE-{8S#fdAWVwgY?Rm!2xQ*$%xaO{}wB@C>jA2vq_oWrY&Y``VnsV(&U=xDE8ApVx3AfDdX%r znTf&m3!l-?vfZs09#za=&>a+?Bwz9x{*|J@C8*$jT}vzMQbT_JFMDt1!;s|olP5b$ zVBnzY{!MeZ<|6V&jEJ;e^5vgc;?5$vs$3P!lh$z$@88$)DrjwJWg4&GX%gmi9`En$ z5P5w9rGP&AD+zwEQH;jrA$-_urG?z^{;_`h%4zyvva{*Osyx~grLE$ZxBcINvi$-s zTe@4^f~e?CQ1o7j?~QrKO2&<~AIhfq!*br^WI?Q`C+fld^YK7gh0t_ZXkB&2f}hA#)O@r2b8(6mtatyNnZRi%j|di z_Gsb6{Tthxn)4nmDAc*tU`K*#`{{d~iPC!nGe>zshUx>b_OVw~P+;=OcXhDqBvs?` zp!&Fc5ks}GcpN7a-nzW%|A5Z~^mZq#81gAfb9-aq(q zau7vIgMJ7mb_3%y5?qHH{NXZ@LL;p_Prq2!Vsv6FXkgCT*M zW&y126m0<_Z4{Bmpq1|G4T1T}t z-6e>xO!@Z(na|E@={k2E&M69w?!24!$j1*)OFFAfZmX$H&QKmZ?;o zt$qCZ^IK(OZ`x#LBJGW609ept;K_n}*)K?EF)u9{N4z#sVXT(%=JA0K%g6Dd1wXGk zXY;y59yd6Te>p7Ubti4gRH@I#b*5s=n>Qm{*A};q z?>>xAxM^rZADyOrCo%3wDRhph?}*0CtB0%$y3)Me_}fJV)EYMhy4Md;Q3NG*pRgGA zzjcUTh0kOU^Oq&i$sYfEX_zDBKQC&$s19tN2O(_DkLA3ty!O!9mZj~bTxdEubol1C z0c0ZC@yo~HF~Q!Gvd!_3SH1JS1_%`*OUc_8b-W=<;_6_6^$;PN$j7gHjEO7Ds6G1l z)u8Hi`x}Tgye6w?9`?KCMenb;-I21ToW@n><3dV4?63^gSN=N-%a&$;2UDK3&@UUv zJz&ne*$c6Px6<6--8oYqGYlWgH8Afa&deosc%ISD#Az2IelM*S+fjyENC7Xdp!iOl zIB_>)VTe8rJNt@1=+pb&HEqNifrH8L`#wf@X{hLNOE||F;MpQ*jRMn?opa z*XE^Y2sAq6i&5_fo4Vp?_2n295M{f!C}74{w^#v8(32u*xa##XSl910N*}q4_j&iw zx9OTCsW+iq7Y3)nrCLT=`XFQQ{(xpj(9J){E+8-$9~4xH(tHjfGF3RVa{}ryBC7Gz zcC#+fao0z}%P|+JKdc^aBzvW*2J&H1R0G^P(Lkq8L|$eAHx4ZhvLyX_Gj_Ek@WFJLM5C$1{EeeySUtw0eY907I2(E|>K*#71C zyXBwg?pj#9Z;j%%+)K*g#4{H&g8hb76D)M&>CBF}HUMDtQ$s6Y1DB%>l0z%xU(W(P z)bz%VBU6{s8e(w-N&Nu+T$fvd?UIeJ`e6xu9$6@!CbYohYTvxo_}~|DiiH&$uvCJ- z=q|XEc}eZ@jO4){>0;{DC#N5DcvL~T-%1(`%45o%`s3|Y^%Mf$%R1cX@jre0-IT0* z4)m-);QV!ndB^358@%;TNzoP4C~Q^fdgqggvGH-6+lHJX&e2`~F9FvK6a2Kh)T@bq z4F0B5y^=Kjh`Q+>B8~!M>?51Ql?9UpjTp=zqVdoK#4+GqJ-2|9>A?#-Na!?C!cU1;xh}2NRi+R4m169kEb;PjFT|kR47Yy{mwCA73Vce ze(WX(e=E&pFv963kN*~e!iA8;7ey1V6&$`tolu066dUV2#U23@Py6)%B=&-J)BFD1 z;Kba;rHirDr?F_ubtWL2h_~}!!?(Y#5$1xb&_6_{xA|A-@b14nbxQIhrOz>Ff1=8s zsFef@g<3L~_p1)0Ajw4+D*Rus?Yazni+xh&2(K^@;q)a6HXcJ0a??ZdN=vsqnrT12 zy7;X`CgxsCD9dMXjJ&-3wM8hLRNa0=l-#?XA@9pS8SKm8{58)T@#)hC#>*}ng~jBo zPMJ|i!F@+Ziw$Pu+2YP3Tc+LOV{nh86Z0|Erxm?@jR5;0WPK8UA?6Xs4_Cy+dtF5~ zbgWU?6cEB2!E9A%3J$)t*Uk*m1Lw^jO;)God7}$k!%M;|?9i;A+vw zd%w?ogvf;rQ7mjWd!79N>9;&Ff{m3|nm3Sdo!-(6%STFTlP(dwikFCe>&2hh6 ze4<`5rBK1r{c@}!5JJOPCmp$eBy&7x;5;=?*_U+}hV^3EH5*wwlp=hu3}NJ~4!h6E zN_a0|B2&FA({OBHo}WxL``FlIEc3u7lIy^B?nP<}4c3VR6s`Tv%3T*SO(rY@nh#i3 z!BtE3)J771Up*#oBI(&!DAMN95Qf=X{wPG_Q@eg8N83R3>V%IVs7N%}Li1-{09Uy_ z!^(>H#LH01k8KoTh3*yyvu1dvMT;-Z#O^LslLtxAO_FuSVX_**r$83N*tRh*@z+0|DSPBc1%(=~0Cd+&$vD_^In@@Qul>caL#;2v;J< z1cwz_NYvw3fW-44x$k}95Yeed;hUdB1C)aZ;+@ncBp-mx&OS{OEH7_nSo=M=a_Je3 z^u^g-x=#n1r$#IPL>xF`zxm?oV*uCw2|5F5w`1(xQ@=={BSHkcj!jx^iHiu#G)ApA z9D|b!TkN1(W+#OZh24zjf>gpZw&GeK*cDGe&UhvPgs zm^W4U?=Q?&(`;!Y!HN_byeg4>*vZgnY4hY20=pge82>l@i~lao3{Ph&FRwQLs_4g^ zcGc%w&vdIBDu;=T>p#rxXBCX;-sGHQ1wVrq5UzOd3APJh9=Os^O3vJIQl&xXGo9@H z^DV@Rl1Xz}z7F*ivGXl+`!uHk`q<4DCjQmUtu{7$H+sTy?qT7#zlbQ*vk`a+*Zpz> zl1SqT)f|snd~>)Mc&0$OW*YZ{U+<1QO=saf?H9HBrBY8` zL%FjAvBg^=3L3*Sb6Azo0k_y@{g!r3!SjdGL@}d;u2NdS8iOHk>b}+u04QRUaV#w@ zE%x{R;$${M+sN;);Sziv=aL8>6kM8IUzly0*9}(#TTq85 zARRnsjJ?`?2px1Uyz0_{{afUZ*=v6Zyz^G}{O3|#|N4SUK;5W}sJpLVz<$nSW)o)}ClTaX!U=)Za}VCg{40|ytsCzz$^G+4V?Zj)7vB6Q{SRvAN{6Fx zU>oOfb@16h+A}-zpIKDV9oi~*sS<2cgN;~b*_3xn;d;zs5`=$Q?El~P?0-?#|MxWS z+T#0*_95-n>0brOAMkIXdN+232Uh~v!^X3b%^ty3}abg|UH_Tp)546r+ z`|LIsCXh+}McSh<_49#|H5ZXt+}NHY!Wupx6ied1$H|^~CYuoLJkM;XdY-3FItb>1bk|U7s1LTDH$DrccnoBP5i5MIPC~=YFQE8* z5?~%XuWZ19YNmK{FlKFgH4IMJZF-_EHbtI|34L<$WJw)qtFeJ4@|Yjznd`sPfa?d( zuc1`ohzi*}aLu#}Gfk_LVXx_U|vH9h-ojr<;O@SD!$i`e*JvQutM| zU+-kamsEI9-`+evWaRx3ocuNZEhD>OxXWOE$pkjWZ(H&dm%84rK#bFtFKj~C#Z$7$+)cO4;HT68$(ab8ua}ziJdPL0a4Djh`oMcc6dh_<}9UB{I zKex58W^uln5xqPX{i8kwuSV=2T5v4=afrzj#r?pcpmJx85^H$V#M)_v1}BEQ`AHDw zdby~i?YydIe_Uf{)VhZS;0Wde6^{tB<5-*7-mf%mUig87JdQS9Fy*5gP+Z&28@i_I z8ipBjyn&Z?3Ca7Tp3AwAfq?;<6wJK_Qgib3y&96GHhEIH^{=|3Kxk0-K(PVtqak`n zw?2({=c9YbD}{RB$~Z5P8%KSTFt;ISnnPf7XEDh)gyIukVoNdK5_AsPY5Z}98?=_; z`r6;+QjZToO#*cxWj^vA=~{7H#*-&ONl-@8{|ga1e3^*r7sH5M3;$oZEi93Z1`+U& zcaewRNJw-%!{Le(|BspqmxaIInr+twiizjYTkqu_3fM|&%8S}n;t{QlcxVPR>KbbMKP0x|}WrUnVOp#=?nLf>lo`?MpNC5im zk14@d$+PV-NpqRUq44@_&ZGX8U~82oQ#LetLwnxgilbxDKt!z1*TJv2yF z@#g{C2VCa7+e1dtG}p5@{~Z{<@lQUJ7(!NhUrXz*o};;iA80*UvO_gE$%Lk$ z+M0Ecx21;dtPu0wEO(!{y5!Z$nyF4j=I7^o@)bnJA&_8#KQjSgRwg~89ln72fkjBf zV_<;Qw1OAFCxe0Jk*X#G@)mIFi~hf{748$3PH;Bd2@nF6Z|-Y>!3eUEB_C(g{58`Q zzsu7JFG!2t_Z3a-EDE!k9~vXwGsBY$Vocx&j6xkLAo2l1LxUE`tgPe%c?>vzSfkpH zz~rc_LH9{%Y%@xt_l{#B2#M6^MiM%~iEDG{`z^%9$9=hepsgVtvU{Mc+9>8_?yWqobJ_d0)S_gs~B1;PQXK*D;`JwMFuMe*Sq^TN~%mgeD|b%e2Q5!bVP> zj}b>L?17Ty0?1eJ0kP*%7C6^kIJl@W)d}i-1)fD%>B}xeLti>(8W{E zUGooCkr9tT=UXVpJI#LIZ3V-!D99iUYj6Z0xSDc{SlmyXgK+X zeQP+_?QKoAgp_b<%4dQEG3#ni8VrKkV6yrr*Tg2}w6z`V!0rl2s+dNNJh8mj%D6h= z&>o!tT1#uJ%VColFuZ%0XZwn5kiwcWw!R-5=re9|=&EC2D4j;~o>gxix2$5CzSH(x z!f_>@NBs|qLCO*XM`q(!9~gdcOxG8?_uk{t{>Fy`Z?Pge^420hnfwt(!eUYqnO0n% z{5%}nlX(qnz=&a89gq?L_-O#R=r(G1JB4qOmSX_<+XOq^8sX4E$CdfH{AkFZveWB8gDf<(+fjqOK=rJl-iW91f8pYw%I1ylSrndLX}ixnVu z{bK$KGLtjKB+rx~4F&QoKMlTl`SRt{eU%x2>(?PA2npLaxdtlDp{k9jCL5oI+=w61jvFxs62p)Q33@ zar*}M@mf@>7J|B-4N{$GFsOxO7XSd;;NL#!DTtk#e{ps)E9>MTmvjzY(|937(@1<2G_ZYtZO)}{-{p{poBWGO?JIU2Za&ZO#n!a@*=P6qSZS$X89SY`kn(DsVi$<#(ahC+)s2SGBlywCJf* z3>T8vz}FE#A}BX##PM4&(hUE`3GGj1*7 zDpYNxM7-%F?Z-UExdytGz8u{j8giM?Mp70Efzuwu!Z4XiegCVXE$e>6BNEipJuPIPnfY zOG^Pj^pqo=HCun&n^KylkM_#wG-W2>M`tJ7a@q8i82>U)dk1D|>qp&}z(NjTPY|U4 z8h;|Lh8bJAxW~ln?9nwgAlLTjxbMOd4NbrHK-l|@iphZTbjXPJdF<|EQqa&MEsd5l zDoO%C2dGeqD@Vci|Kf||QfB8KCv^@C(^nM>>9EwFZ!k796IWJNo1o*714WG zW@h@fM_Z8sI{d>|k&tz{f`FqnoMF5|R4$-N@BO7V`)sCElw)X}NDsT%J03OU&xWZv zwt+P;Napd!rojtr4ShTiSX;X-95_`X3`d21+ehi8FhsXTX#20l7p#SFR2MC?_)Ns? zlOEJ`UG;UKy~Ql=GU#dsw&e9#AnMvcLPCPl+_{4UDYN)xpIwcY#weQxBy9qehvY-y zx=y0f;RlMcNIseK`~z%-;MAPx$E#_w0rp?+IM31Cd=s0R8nv?GoNu*%va~EWyx!18 zUKG#fM+t> zZ}YAf0b-%C2ciE9QvVkV{d^54SRv8zymaZ(^`a0%^TXoef68G0n}~9o9uh5of}Z(7 z0sEiGexz!xDp2)0(IG6B?gx1Ntz^;l`HlpQD~({M@ieT8C*dsv!A9!Nh(R_Aa;}KC zhD`j>H(-#8*uG_K%6gu9pZ}bcO$!M@9K#q|Se*R@y*GR@>iCu0Kf0lEa=bAr+svj{ z))2pfZavHDlb0F(hN6#~4WC(6^wSdzEkQX=9s@&CoSu2U|U z8XKFFPaW3!+VC`&MabGAFdywQ=p>zv2e0*i^?_M>tAnP6AkViSq6BB?g#(X<3WY~2 zT==Uf<{IdU;shDQAJ@fc%?6x#HwJNNkJ?gXEoL^Lz78ShY7v>P94xYqQbNdK9AhZ; zo;?|ri79>~$}uTZ00?J4aW4rb22$As{xV1}wl`9tz|?YUq&TcD$6X9?9VulvcI?=- z#j=;`@Ox2qG;_Ra;@TY^1tvZ%8EeD#0|b0%%na;I6T-3_A$sGJLcY4c1M_ednd#nr z|5oK?y7hhjfM6=C>m(&C*M!m!5-I0lCHEM>w^KL(^OAdEJQ{q2WB-L|X|awVc+TiV zeGAFuKTQh^775bFb8WwqblkiggU@IG05+ozQ>fum$5)qLKRYS_7Ov$f2PzTkCpXB; z;_?x0J4r5FV+$Z&XCTgRZi!T~DFp$6zSTt&cdIs6uRKpM{Mlg}7T?^jLMdO6`ICm=CGlq2qv~w@&Rk{oVTva&dj71Jqy2bFp#K#ctqsCa)3Iz zMokb!Xm)*^GRtc_=ojp!2|oLS3;jfWk2wEC9aTC3z5fEMB&wW@0qpSG^Una!h;?=?nxh0BSX- zzK{DMc_3x#V@cwBRqwCwR~^Ptw~E1k)PQD6{<#v0Yx6w1n`aGO+0W&HT6&^xVPwX# z`*!nUfQ%wg;w^I;G#= Date: Wed, 5 Dec 2012 04:46:45 +1000 Subject: [PATCH 2/2] added functional bunsen burner (with placeholder sprite), added capability for heated chem recipes, added preservation of data across chemical reactions for xenoarch (not sure if it actually works, seemed a bit buggy), added tungsten as a dispensable reagent for xenoarch Signed-off-by: Cael_Aislinn --- baystation12.dme | 1 + code/modules/reagents/Chemistry-Holder.dm | 37 +++++++++++- code/modules/reagents/Chemistry-Machinery.dm | 21 ++++++- code/modules/reagents/Chemistry-Recipes.dm | 2 + .../reagents/reagent_containers/glass.dm | 4 ++ .../research/xenoarchaeology/archaeo_chem.dm | 11 ++-- .../research/xenoarchaeology/bunsen_burner.dm | 58 +++++++++++++++++++ 7 files changed, 125 insertions(+), 9 deletions(-) create mode 100644 code/modules/research/xenoarchaeology/bunsen_burner.dm diff --git a/baystation12.dme b/baystation12.dme index 5ab7609868a..70310f66450 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1301,6 +1301,7 @@ #include "code\modules\research\xenoarchaeology\artifact_harvester.dm" #include "code\modules\research\xenoarchaeology\artifact_misc.dm" #include "code\modules\research\xenoarchaeology\artifact_synthetic.dm" +#include "code\modules\research\xenoarchaeology\bunsen_burner.dm" #include "code\modules\research\xenoarchaeology\core_sampler.dm" #include "code\modules\research\xenoarchaeology\finds.dm" #include "code\modules\research\xenoarchaeology\geosample.dm" diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index f73c1797fa4..9065c68d7fb 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -204,6 +204,14 @@ datum do reaction_occured = 0 for(var/datum/chemical_reaction/C in chemical_reactions_list) + //check if this recipe needs to be heated to mix + if(C.requires_heating) + if(istype(my_atom.loc, /obj/machinery/bunsen_burner)) + if(!my_atom.loc:heated) + continue + else + continue + var/total_required_reagents = C.required_reagents.len var/total_matching_reagents = 0 var/total_required_catalysts = C.required_catalysts.len @@ -242,7 +250,14 @@ datum if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other) var/multiplier = min(multipliers) - for(var/B in C.required_reagents) + //try and grab any data so we can preserve it across reactions + //added for xenoarchaeology, might be used for other things but this is a bit dodge + var/preserved_data = null + for(var/B in src.reagent_list) + if(!preserved_data) + var/temp_data = get_data(B) + if(temp_data) + preserved_data = temp_data remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1) var/created_volume = C.result_amount*multiplier @@ -250,6 +265,11 @@ datum feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]") multiplier = max(multiplier, 1) //this shouldnt happen ... add_reagent(C.result, C.result_amount*multiplier) + set_data(C.result, preserved_data) + + //add secondary products + for(var/S in C.secondary_results) + add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier) if(!isliving(my_atom)) for(var/mob/M in viewers(4, get_turf(my_atom)) ) @@ -442,6 +462,21 @@ datum return res + //two slightly dodge helper functions to preserve data across reactions (needed for xenoarch) + get_data(var/reagent_id) + for(var/R in reagent_list) + var/datum/reagent/D = reagent_list[R] + if(D.id == reagent_id) + world << "proffering a data-carrying reagent ([reagent_id])" + return D.data + + set_data(var/reagent_id, var/new_data) + for(var/R in reagent_list) + var/datum/reagent/D = reagent_list[R] + if(D.id == reagent_id) + world << "reagent data set ([reagent_id])" + D.data = new_data + /////////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index f8d22288bd5..01eef07caf0 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -17,7 +17,7 @@ var/recharged = 0 var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine", "sodium","aluminum","silicon","phosphorus","sulfur","chlorine","potassium","iron", - "copper","mercury","radium","water","ethanol","sugar","sacid","milk") + "copper","mercury","radium","water","ethanol","sugar","sacid","tungsten","milk") /obj/machinery/chem_dispenser/proc/recharge() if(stat & (BROKEN|NOPOWER)) return @@ -734,6 +734,8 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/wheat = list("flour" = -5), /obj/item/weapon/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0), + //archaeology! + /obj/item/weapon/rocksliver = list("ground_rock" = 50), //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! @@ -995,7 +997,8 @@ inuse = 1 spawn(60) inuse = 0 - interact(usr) + if(get_dist(usr,src) < 2) + interact(usr) //Snacks and Plants for (var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) @@ -1061,6 +1064,20 @@ break remove_object(O) + //xenoarch + for(var/obj/item/weapon/rocksliver/O in holdingitems) + if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + var/allowed = get_allowed_by_id(O) + for (var/r_id in allowed) + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = allowed[r_id] + beaker.reagents.add_reagent(r_id,min(amount, space), O.geological_data) + + if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + remove_object(O) + //Everything else - Transfers reagents from it into beaker for (var/obj/item/weapon/reagent_containers/O in holdingitems) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index b1e972b502d..0c849879d05 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -13,6 +13,8 @@ datum var/result_amount = 0 var/secondary = 0 // set to nonzero if secondary reaction + var/list/secondary_results = list() //additional reagents produced by the reaction + var/requires_heating = 0 proc on_reaction(var/datum/reagents/holder, var/created_volume) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 3a89cef6dd4..5f2db222668 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -83,6 +83,10 @@ else if(istype(target, /obj/item/clothing/suit/space/space_ninja)) return + //bunsen burner handles all of this as well + else if(istype(target, /obj/machinery/bunsen_burner)) + return + else if(reagents.total_volume) user << "\blue You splash the solution onto [target]." src.reagents.reaction(target, TOUCH) diff --git a/code/modules/research/xenoarchaeology/archaeo_chem.dm b/code/modules/research/xenoarchaeology/archaeo_chem.dm index 4b81fd774b1..a39120e7864 100644 --- a/code/modules/research/xenoarchaeology/archaeo_chem.dm +++ b/code/modules/research/xenoarchaeology/archaeo_chem.dm @@ -1,6 +1,5 @@ //chemistry stuff here so that it can be easily viewed/modified -/* datum reagent tungsten //used purely to make lith-sodi-tungs @@ -20,18 +19,18 @@ datum ground_rock name = "Ground Rock" id = "ground_rock" - description = "A fine dust made of ground up geological samples." + description = "A fine dust made of ground up rock." reagent_state = SOLID color = "#C81040" //rgb: 200, 16, 64 //todo: make this brown density_separated_sample - name = "Density separated sample" + name = "Analysis sample" id = "density_separated_sample" - description = "A watery paste which has had density separation applied to its contents." + description = "A watery paste used in chemical analysis." reagent_state = LIQUID color = "#C81040" //rgb: 200, 16, 64 - //todo: make this white + //todo: make this browny-white analysis_sample name = "Analysis sample" @@ -57,6 +56,7 @@ datum result = "lithiumsodiumtungstate" required_reagents = list("lithium" = 1, "sodium" = 2, "tungsten" = 1, "oxygen" = 4) result_amount = 8 + requires_heating = 1 density_separated_liquid name = "Density separated sample" @@ -74,4 +74,3 @@ datum required_reagents = list("density_separated_sample" = 5) result_amount = 4 requires_heating = 1 -*/ \ No newline at end of file diff --git a/code/modules/research/xenoarchaeology/bunsen_burner.dm b/code/modules/research/xenoarchaeology/bunsen_burner.dm new file mode 100644 index 00000000000..bbb3d0c9c94 --- /dev/null +++ b/code/modules/research/xenoarchaeology/bunsen_burner.dm @@ -0,0 +1,58 @@ + +/obj/machinery/bunsen_burner + name = "bunsen burner" + desc = "A flat, self-heating device designed for bringing chemical mixtures to boil." + icon = 'icons/obj/device.dmi' + icon_state = "bunsen0" + var/heating = 0 //whether the bunsen is turned on + var/heated = 0 //whether the bunsen has been on long enough to let stuff react + var/obj/item/weapon/reagent_containers/held_container + var/heat_time = 50 + +/obj/machinery/bunsen_burner/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/reagent_containers)) + if(held_container) + user << "\red You must remove the [held_container] first." + else + user.drop_item(src) + held_container = W + held_container.loc = src + user << "\blue You put the [held_container] onto the [src]." + var/image/I = image("icon"=W, "layer"=FLOAT_LAYER) + underlays += I + if(heating) + spawn(heat_time) + try_heating() + else + user << "\red You can't put the [W] onto the [src]." + + + +/obj/machinery/bunsen_burner/attack_hand(mob/user as mob) + if(held_container) + underlays = null + user << "\blue You remove the [held_container] from the [src]." + held_container.loc = src.loc + held_container.attack_hand(user) + held_container = null + else + user << "\red There is nothing on the [src]." + +/obj/machinery/bunsen_burner/proc/try_heating() + if(held_container && heating) + heated = 1 + held_container.reagents.handle_reactions() + heated = 0 + spawn(heat_time) + try_heating() + +/obj/machinery/bunsen_burner/verb/toggle() + set src in oview(1) + set name = "Toggle bunsen burner" + set category = "IC" + + heating = !heating + icon_state = "bunsen[heating]" + if(heating) + spawn(heat_time) + try_heating()