From 0be7709d92c1c0982e248afbc69dba5da7fb0c54 Mon Sep 17 00:00:00 2001 From: Xhuis Date: Fri, 6 Mar 2015 23:16:05 -0500 Subject: [PATCH 01/65] Adds cigar cases; sprites by Nienhaus --- code/game/machinery/vending.dm | 3 +- .../objects/items/weapons/storage/fancy.dm | 43 ++++++++++++++++++ html/changelogs/Xhuis-CigarCases.yml | 5 ++ icons/obj/cigarettes.dmi | Bin 10587 -> 12147 bytes 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/Xhuis-CigarCases.yml diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index eb35481a9bc..45dbe118bf0 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -744,7 +744,8 @@ /obj/item/weapon/lighter/grayscale = 4, /obj/item/weapon/storage/fancy/rollingpapers = 5) contraband = list(/obj/item/weapon/lighter/zippo = 4) - premium = list(/obj/item/clothing/mask/cigarette/cigar/havana = 2, /obj/item/weapon/storage/fancy/cigarettes/cigpack_robustgold = 1) + premium = list(/obj/item/weapon/storage/fancy/cigarettes/cigpack_robustgold = 2, \ + /obj/item/weapon/storage/fancy/cigars = 1, /obj/item/weapon/storage/fancy/cigars/havana = 1, /obj/item/weapon/storage/fancy/cigars/cohiba = 1) refill_canister = /obj/item/weapon/vending_refill/cigarette diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 209191666fc..75ec895ea74 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -11,6 +11,7 @@ * Candle Box * Crayon Box * Cigarette Box + * Cigar Case */ /obj/item/weapon/storage/fancy/ @@ -273,3 +274,45 @@ ..() for(var/i = 1 to storage_slots) new /obj/item/weapon/rollingpaper(src) + +///////////// +//CIGAR BOX// +///////////// + +/obj/item/weapon/storage/fancy/cigars + name = "\improper premium cigar case" + desc = "A case of premium cigars. Very expensive." + icon = 'icons/obj/cigarettes.dmi' + icon_state = "cigarcasep" + item_state = "cigarcasep" + w_class = 3 + throwforce = 0 + slot_flags = SLOT_BELT + storage_slots = 7 + can_hold = list(/obj/item/clothing/mask/cigarette/cigar) + icon_type = "cigar" + var/cigar_type = /obj/item/clothing/mask/cigarette/cigar + +/obj/item/weapon/storage/fancy/cigars/New() + ..() + flags |= NOREACT + for(var/i = 1 to storage_slots) + new cigar_type(src) + +/obj/item/weapon/storage/fancy/cigars/update_icon() + icon_state = "[initial(icon_state)][contents.len]" + return + +/obj/item/weapon/storage/fancy/cigars/cohiba + name = "\improper cohiba robusto cigar case" + desc = "A case of imported Cohiba cigars, renowned for their strong flavor." + icon_state = "cigarcase" + item_state = "cigarcase" + cigar_type = /obj/item/clothing/mask/cigarette/cigar/cohiba + +/obj/item/weapon/storage/fancy/cigars/havana + name = "\improper premium havanian cigar case" + desc = "A case of classy Havanian cigars." + icon_state = "cigarcase" + item_state = "cigarcase" + cigar_type = /obj/item/clothing/mask/cigarette/cigar/havana diff --git a/html/changelogs/Xhuis-CigarCases.yml b/html/changelogs/Xhuis-CigarCases.yml new file mode 100644 index 00000000000..29197d8555d --- /dev/null +++ b/html/changelogs/Xhuis-CigarCases.yml @@ -0,0 +1,5 @@ +author: Xhuis +delete-after: true + +changes: + - rscadd: "Added cigar cases. They come in three flavors and can be bought from cigarette machines." diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi index 5bf0a0fc68744f8c43114dfd91983a1683fd442e..8a22d33423e8de9c8c49d620b77105dce2f6cb21 100644 GIT binary patch literal 12147 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

&K|C=OrK!Hf(te>D2m-LB z2RO?(cDSvR(KMpKqVA}rLMzo49(;h)v%$UO4epXhxUqKh3v)9S{Vt@?c)&re>-i~d z7R}THE`~LlzdSlB4Fi|*04Jyul;0>`w2FHGM>rdG?dpj-;oME)(%^pe(Fea0D_V~# z*xK7Gk?VMjkh?gruq^87zifCd7F)m-v{mzHrC)en&>~T&t$#PO@79;^^FIjM70Y62 zzxRh1R~~yTiFi~tU7pVtW?4n}T2a8IL!PMC3$2_sGE3vzNAnxb?$kSM_?gBDArF_^ zdi7cloEh5ZDiPv;238El&?~R)@m|xHdI(%36SF_b)I$nptKXt#(_$@!8<*-^E7S=; zLbSmK9pgh(ila>`L#U?Hv2?;#KmnI>hqxzblE;0Bz*k0qhSL z^?GJ_1!$G?`J5y$fj=W{GZ4}vV?n2F;~LsRpu z%*k-f{`^A?yHX8N@?plXIzz$yAg)08q_BM?XP z)8?lw>h>BR#f=kJ>!Xi;CAQJdR|c`Q--0$-4+BK0d+G!PC_qrt^TvG?@7o6g7}jfM_0J;|{cC&wB4JZ*zl9pzsdkZE`@g zT|K&XFZkc1Zo%z*q`aE)_XJbc8KYG}SpWadCD$oXeFa5p=(a#W5QPI+XhsUK)FO=1O7tV|0P?QE5aV~Nf)xi49J=TuNtI(0`Y6k^n%cuG;`D)u| z6#@wLZ_b@P#n6TS(9KWlHlRiQ%yRE5+rOG*sbNEHV6EMAv3C)|DmgUzW!W9JprKCk z=-hPvDnIbcB=+#i7`%_FC3xClWT0{QbF9AdMngAAZX!Z1Fv-xCRK*6mXZBmHYXcHKpt z&>>}7u4nO1L&LitnT_C>8ZmgJm{H1A(odjuIx?DrRa&90k_661Pxyzrt!wl_PR2Lq)f{ZSzTYcaazn=h5z8hu;>Thsby1?t;K6XFT8I8*upoR#2}_%^%G>__^T6Yn@tCaEXt4kxCdsl@<+BtiE&` zX(VcaogL%*xr_JzHhQ5N?-W(Nwf2RF?`onlEMOVbq`woPE4>zx)rv@Hed)?+1G6Z; zYAnAV86e6B0_iX++n%|15h6y3$|q)VETZq1iz;)dzlFBnXman5YRcb?f`k}*_#kfG zX*b#Y+?|s>kp17#p>M|M_S3nb*j6Zoz6G_~_s4F)-hLVtdV>J!!iXK2-@h?LiqMmi zwF-eEQzvDt{6&VzCTg|1hJ7+UH1OWAxPNbz=_xXhdw7PPHjVlk1lDSMy(~ z%ERQLhF7`I(*v;WA1%pO;s}p+0V%J4Te5dXHaQUgrd9GJ6fC9(bhQjLKdQsR{|C=7 Bl}rEt literal 10587 zcmb7q2UJtvv+fBkH0jMk6+{IAktSV=fOJp+r71{n(rZGmQdF9P^d?oLNDqRDfHdhy z2p|x8=me6$J@~ujf8ToR-TPQ8i=1RW`N&o;ZXsD|g002Z0 zd~uPJfuD3)mu`a>2mTL@Jyl+KSh?G~dD^?W0Dy01%0#P6hX@nt++9CPs`1)T#osqH zUp&0sE}#-A^{wmp^`D{TO&KoLiNbvj37#ODUyW+svaFbl#7*-bNQpMPiHv&scg70B z3oCt0Z4B>>3tv98_bA054jZb+g+NYCV42Id^G@W7?H%xp&+d z)A#jBU_5O9plJ&qO_J?XIzscNu$m)>VWU;$sqpZCX6+8cX0ys~q2Wr++SL)KT^;s8 zTKCffWn1mlulo8w2jd)Ib`SU7=D+9U9K%z8T!w0hi)b%3opmOZjvtw=t6pQ#IC+n6 zWRv2#MwLnbmXs!@hp70Qb%@pT&+T__o5;IOa71RUO2*)CnUK96SqfZvxL0l157iat zlp71gKHS?e?5EA)%;>Ol3(HMU%y5u*DLroZxcsN+{XZ8Wv{wyl2ZCQ3{_NHk=ad`^ zoO!tS(y;%Z3&m!EN3XJr?&H|qa^^#z(j2}yOCeBy@ZV|(w28yl(?`wKIOM*M2eydW z%~K)D)fA%Uz+rVx~{!Wu)H{l~g}Pm*_Ku&ybLRv<&|IdG|e?@*BRMEm?TD zi9`?Ck@ND#7QQWe5O%G3uLm}m`SW-w^WB|02G5>xlXI&ivZ=5J(Y_5OwmHo1%zJzNqzPw&3ujl0554mK&zrKh6iH`VNzllayH@21mcJ@vHBT zaIT-K^X&DRxc7XzrBwg)WmG=3L9JGJz4T$9tt9KQDY~tSGpos`vJ_5zvdX%esG<_d z1z2ajkmn1cbAuoYqA9Mw5CN#66c5+IYUwV7c!(2|8`ew!JOeC>}z)`6^VzsKm z=T8JJ8RY@Lmqcv|lpcohr(1#sv&yqw|5+vYCCDGKb{bvqwt?K_8AMmo`;}umF zoS1={;KquEFR{(FsN7l09B>PK)ZBnsk9u~rn74)(?;5H(JIlkpt%Y=q z9_9?JKJ@z2*VnfsIk@4vcf4_r(Q@NAE7H(lrC7m+@LFa0oryaVElEswL>!ZEs3gt8 z>UOcMg}wt|z-Zj-$(fshka7XOQFAp{J#qsN8I_AlFJ~tuaUE?;F$!}`MV6jiD)8Kj zMJ4#N0o&HY_wk?4tWQ=GP2dIel>lYLoBS?Oz&hb4<@BZxz|m4R;6b!Fy2HpO`@F;! z8Gc9ZAqLX+!BcB1JsAKR9>eI(B99Ksn=yS^rDxEhY}o5l^@2saYFT6*{ozle2&aJ6 z5TfJ#cZ|Mvhb=h-m~Qw$+~qKxr#jE=o)H%X%8-Ak&r~VC#s8XB@|v-a;?I}J_=KwL z4t7pSo=p_U5$s#V*{A78YCON{q|0v%GA#Qvnyn1y+p44JhcuGzdMx|G z+Ky&3&;-eG<^}%9pGlMpw0?em@(S?$LoV1m(RZ*Dt7%UA@THf6go<5`-xr0YD$VP-&fk6x7_0if)`qz+9^GX3&V>A$V0L~beiPVWg! z-xmvMPsj07uru2zBr$%@mQz&9dnMEvaJA6GXt*ny0))E?y>~M^u>D(~_D|!6U#KP{ z0gMVUL_!vgJpCG%;#yi{XO3Rz%9_;DcPFwdn>ou(H|q-=yW}k=429F>G?hLW|Kru| z@Rfs$Tc4y;xaB`X%J3~}MWtw$X8?neClzrLUEWjB86C3YzoJk0mEd=_HWV%V65Qb= zxlI&=72!oQk6uA_TGFOIcxrs024yU_70bX*TV(xOPzq4@1YDSX_vc$Fc?zq<@ z=qMb>H&#hGDv6Yn=$uVzY~t~wrDC$53mC`CO|Dj%)I>UqsE4+(r!oYBI8Tz2Cgtn& z6-=V5J0B{044+t-!ixg!F&#?A3hxr-T*VbKJcjdBZ~vyzZQXs)d{4o5XCbFvro=YX zTKd02MK0yLbUsJ+&<{Utrbu%>eiE@cTM73a$ycM5&4AMZZi5X>czpFoAb8?zTfRK| zXH>to2=WYu4oX@Ey#d_n?+wls8zAyD=&4UihgoI4#?savA+N zS}&l(WpCiaujLOiSM$`go-@XE@hH^YyinDOZ?pZe-tQ=kpartbpC#&q?G$Z>u5}Z) zc2;dk>%q;mfA-K7n|&=JuP ze?Om2c$hVg<<=W%uPd<=5<#&XAILgSdIAB-sMcPCV^im*(@wz&6nX0%bRCsK#Nwj$ zpum-I?>i(nbd14Tv75%s?PT9bX~t*fWie=q^W4^)I3-(s>6l-&}nmOm1^0YJy)m`K?sKIHdiB%#78iI?If1z7=My>$|CDB0k# zmPp6R8I_#&p85kb|^bVd!db6rll>q;bVj=RjpiKSmypk@=tP&nbgD)Q!LET7&Tk>;^FeLIN_ z3lU)pJ&R&~g;-g+F^HkPgJcAz`cvtBB4?kx5qRl}BKI}ExL7p8PAt^mQ+I1EOT`2VZ z_BB`r{p#M=@2F>U1yRG*Re?!`vz{Jh+RbX z;|>_T=pXWE&8Zu&PJNd(#J-7I|8())LRLta^$C6V7Q&TW7GUT}Dxi>Gw#G1G-T7T1EFm<`R_+1TQ zte_7ivrL|Afw5cAIE3@|h_D5Jzt8$UfKAcRkP(oyoz89rdwSms=_Ome znxAxulkl9N!tP6bo>;J^mjCZe^FJjeh9RWo%+q>oAX(9~aY5}Z&wC049s=*-whVxL zTK{8^Q)byTnV>-z>}w`DQQ)jwXK{C?X_a^iHTO;r{fUMr!pH6r9PlazNx#yq#Ur zv+BUBj`X2-YyyRjw&aLDNPC6%rR03H;J$TBTSrsVac3%AvI)qCT%kD)Akeh)e~%9n zTkS46*(;xO=FY*g(?CmS{k2L^c47|Zv=xLW6Jf%LVY_eHv;R>Go5I&`Y4>u)HZ}GA zI7{TTM4lL83lHvz-9<+0iU4dtpR#J{(f74Ap+7(0=?=BxZsXC=GhGja(&NW0v2k&7 zeQtDmw0g5m%ofQhezO9)jtU;9fyR`763?Q*h|f8DJ?y#y5UBt7+GuuGRs!sfE#(2H zSv~b-+X1FE40P_*HSgPtiyLngX7;Qy#MqWrHzEg{>V2!2_eX?(Rf*rRxsu$! ze9_l7>Q%Ls|6K0seL?d;nbOjMywAJYC1oD-#c;8C^g3Bifi;g{s^;e|_a5}ST|K;6 z(>_>FnhjNCP>hXT1ae|ftR^NV&j|8}Y>GFjsn@cRv&=rc)Fi+|sWS?IO{9jbSm34} z+Ozci>A7R!*o${)dI7hil^x%M6qg3io|r#p4GH-#9!-8;I?FSvLbY3pEX`NrpzTTFQYkk@x0PfB5mzDk&NO$zxawvVG*^pwJcwy=i`O4vRN(J zMMXtJcS)Io0k?y-M}xLKJ^lQ|wGII2x>xx9x$FG<$gsOLGL{`d8t2ZDaKx(#XMV`O zs)2!S1JXtPmsbN)TZC;v-^hq{oa>7C8pq^j+VGGbw0Q4kr5Wy05bjVJGmBDob`C3r zfyFrug5XifEg(Skxa<+3roFxYgAUXFNR^uR2Ajb7b`4x4Ps;KZK5eO&DbiYt2qBi4 zhd*%m6ok|GvD>V-yg4=j4?8&#_+(6%YUL4&vW!-H&?^E?VP$$OoQic|KEu_U>#7wQ z_$&bF+|p8^4H&7#JS*ihu-2cX5)S|42v+Ym2~Vo6x{d9-6RLkze;(Z4-YCQ3qJ+}b zj@mOhFYl~j)aFp|MiN^2NeWuIx%Ur`w?*lZYz(isq7rBr9`ezIO4ud>afyzH3JaR)+T8>P8Df#w!>> z`p@ewolH60UGO27Y4|anb;aqJBFu@u{ElB+i~WR40jO=U5C{nuxBq>LInY*a!1uoM zt*DlEs}n3&ZNF?y284luYqryZ0r?549-aLv zaQWioruQK3UJ#B_@B#%CBoO$V@^UR{GyRav(wmu;CGFrmhL>y=h=&4M(pC6nskGDq z-fO%+{4+e*`amPvIx8&_hZaxN&qa(0nWd#A z`E@vUd;a|>;t~vjA-jV!67E?g1fj_BHQ}qJnDD;=!lxIc_RIp0v8G=Xn6>A z2QE2GrMRmhySwhkJ^ViP$M{BcQ5lD#z~l1v-s4BUxD{)0an!j=Vl`-F*m>9rxe(%b z=}i#q)TCqo6VrE2xR-W{8$zb?#lM;z6MyvnSoO{O_cxykrh$dX#KK+>PPEzwW3Jsh zWR9DNJ)DML$Fc`o1TJ-0#Z^q6^_EMlH))^1jH$c?K>efr6d`+U)K%=#)6p<;gpXYG zuD}7;FN~X1u=5x=+ZfQ;?U&DEiUtZb)1FV7`ON#R&q%DhySs~>%OfpK)*6#|7$>n9 z8@0QOix3#*U#Fx*EG#_N^3B)W>+L+xY9FUbi$R3Ih6{>{dKvjsEm3V+gSNf6)_|i@ zd6I-j@b(eQCkiQMAb>5ZuE)dE?2Y1%_My6p-9Q|eHWUI*aYV)<{_Mf8lBkpw2(LF1 zNs_-K`f900Hbz!xU*}v?3cv*7(59VhV`a)hEY1YlNsZEoE&Wuo!p(x zqwb}E4>I%VClZH)jgb_tp7!+LpPVvs&4+#I0-M$AgTM~ zx=~TmN;pX8iMRv=`WStY916n=KgD9?L6VK_X@?`p=9ZanfH&&6lcmCW4y48GbxyLO z87jQ@fu1fVv9*0Aq8r3zm>GhDJKo>2EwDh<6?4e|;q!+qw+g{qV9F~dbs;hdP}kIa z+t=GGwZwOSjxIe3u*7z;{7=mOUjX%Y=zLwfzKWk;k-#dtr%m_LqWKdFh=^y2NvABRhNh)I#$V&XlSCFpN#)~O?WqMCB z_YG{7;|d*z;xGp_!Hu&xrTpNrJ^t#bFs_alRbu67raBSQtGNJh9{`?g0o!wUCO>8Q8DIM=7ykX+r zxY;Wv-rqkX3M>z%)lI`*oVn`LUUGsv!kt?$llBQHA40`Q4qbwI?AQVSU175(rp~P< zDw-(b`}x&fyT4r#W3_@j(UKWU^qb`}Sw;7#RQ6Du+w{Sg=GcL($f}(F+|9<(^`q!u*8}L28lL!bx z1+k*fmMp{$0-(XawwY_mxnAHPT&GB%YDHpn1wPGofLik+(Iuidmtg-R0WjmO#LIg( z+kSjOelrTiq|k!z7T*qlwu?d_g8sO%U8pSmbTcGYaqx6pN8gK!a&Q2(7Su7K+uZ`+ zkDm~0W(Uiobek^$@*}av?f37q*f}Y*m%uQ^{E41Dw14MMZF@ z+=BnJrH~3QpKDMZfzRpviRy?yTGBr7ie7<*CvfcEtwew_1?OGPnI$~9n4HE@jk4SJ zu8PE%wwbcRh9M;1%n8uITc1`Ui+vEnuYz!~LZNG>BJbQvKD_7{uegmd`t*BKq|%jC(IBcs%v(J$}XhkR&U(sPiTNAT}{UX3k>myMNb5Jq(24FnkK!nIka)QP%1 zwv(L!F>2(edt(piHYa3Q;#6VyMUCwBaR@fQ_beQYwIJ^0+P(5adT5W7K&WYaxKL8z zLkv)+8WGulEg|kqLm4J~89h=Xy4>pD9`&@sFaR0|n%I9bMWrcGP-`+#@qyj&!Z}I@ z+lCGQTY^;pWO4U(pTTtRrW%nE{ylN(n;DY&nC=-kKEb8D_ zAV+dI5**1PSSD_%j=P-0UE%ZTkExo(*@?v}FQ-T4T{U9yyVML5AOpTmXjIw21 z7PiZq@al3@cToA$;#^L}3{ksH#7rqQ4}SaRzgHHy3qHWjPQgLO=}m84D_M@nP?aVH zh6YQ~+{6iQ#~2@i1-RiQT@DrN*g{8i5tmMbmm&Tg#bdbe;%u5+^5H+M+UuKOhCWg5 z!~hQ$dvEi<`1q(W`cRFCRjY`lRiTh(tGB-p{64H5;}`t#H43@Hlq2?2NR;L#|E>$G-OS zyEPl28#cV4!UU@Gc_<9fVktVWC({>R@l^S`k|$R8XSOhL`_P5Uyi2w@$JqSnSu}T5 zcAXTJngXGE2(#^qJtS_A{w&(=l&a>NQrytM1`4SI{r$`mBt`*Pkn&fr z9pOM#@$PMSo9Wp~K3l8Xvp7c4sG%#7ftFI-!%)|#CH{j%c}hU4#rqau=S@n+tpWlL zCh9-01hm)Mj{suXud3JWC~3H>$%#eOCy9A^Po4o}(b1Rb>6Au8AZ$P{1s#TtB=}L; z;}}5}ZeDd?7AeJrew%k+=J%WNXM6jEgS&gQRW9a;2{{w9G zwFxM=j_Pp14q*RnU&_-ZP^Mh-Ko0J4m9;YdI{&7e;St1lAtPl|{)(R+g0FN7sB%7G zs!_}Sp71AZY&5VKQ9m0`tBblZnmsy|^PjCRKujP^_^jW3rdZ>midD7owDTEQ^JGBt z<9K9b%m==|Z3sa2tMPC?8Nz!Gp$N}tA`cA_)Z!O<)->BX|6QqIG^Cw{(I3#+!(L1& z@4c~01cmZqt#=C^NKpL-j^cw%~nb)B$V z@R7RWyH_O;aT0&uD#L$h8r8(1f^A*Dmu&G7T1UtOm2`I)Og?y7<`Wu?4%qtE2IkD1 zfM9*b;HjydO&>VQPv0&ggn#B!86WP;s=<3xxp z=*QkW(JSUNIPNh5+8;r(@6rt?aPQ}3pR$45|3Q`RDg{xlLL&d#GUVpHl_0?+7}$9W zO8)e;&LIWOd=vE8cDe_V)D0if1-F_u4AzD&Y@tmlp-`M#*7;=Vxff7zh6PEmEyC`} z5x!%X_|V9E*~qLbBPg+mQpU8ALd{8A`6;3M49-1P>uK9S0ZDo<{;=%8dE!)K8( za%UEfM9iSeAKEm-O61UK$hCqA2tgX ztLhtuuKv*W{%x7sIX$h+=p7kAjaW~*C91{z+yN0Y<$dy)E7HGR&7BLizCV_#mGCeA zL*mKOkcdoBmQ0;>BiD*ee~g55IN=nF!8krBgP!Y7Jo_oLm#`TCw%|_ z%6xtn;1TKDpmBIFR_-4v=^AMX*0nbbi$Km8aO5)Pqx8>D(6ewwdAFvjL9e1@%^z8< zMq?*NeHb5Fx8CF%=}9NoX62=)(9(7Kc#te^96OZi!Ox3gf4X_F>eGh-lY3(i&y!ry zV(C^QN$l)T`=cH^2k21NFPC(u%CD)q{#fIH%b&-R1CAZnk=Wm?tsP(?$TkN8Pk$t7 zX6xMYBXQ@mfhV}96aT^XUeGNWr9Q!`8a@&+;c$ozt4e!ZJ8`OgBTZ}%=Wv#bC2T>S z2(nOTh*9*-V(sGwWg2VmCgz>Xh30`g7Uy!I|Jq+8W$kkquaK5x!1UnSpZi5za0 zotQoUE60j~k9BELh=GBTmpaRjrMR9}@q^*_F-K9INwfD?!tNZdho91NsJgp*=x(Q1 z91m*S5$qk;X47L+FK3My18$uQL9o}p(Agz4FH`v@YQdwzZgb+j8*YlYAp7(>7pTP6 zPdPRC?(p~@ZCwD)-*5zM-0t_c#Izon|2!thQ)Omlar``rx&TH3na0L8v<$4)UiPys zrci;LsEH|oP7Vyq)@5TiZ=@}nR6Opnsp)BKY%D#JcNJd@;Hm<=bc#z)!{8jT-zwRy z1~^lJ(dW>d^I2gucajUiP&_g+BKNhV=B$eeSMGS4b`OjK z7pD|*0xkVkPHo^EmG{-b9>&fBEx^HSM$SM3j*%-wicFb?f$Gj1>C2y%-g1~bx+>RG zMl`3KXHrDaux81bjhx*d&TM^TM};8m6(f|cx*)?4T|*J~MNp%0>#hrw{cvN+z?f<& z5z$oipaINf6(AZ7sJ?s_E6kku#z}E~aPd*P$8G@{{V^h<^e8k+hf|aR*!BVR&R(Xg zn1QqCxrpkJT4k5ILc>pHp9O&2xXs;7-=*nuI3u+`W6TSwT9~N`euX zvuwPi+FYj~C&&I>^N|vv+v!^QX@ocIPvP;3!r}E_;09U>k@zqe{UZOPALk5qyK}eR z`L`G?R~Ic{SeN=XiNfxZ*4gEF3vRgyjzgkh&c;*quQoN@+}sebn3%42&Zu?%Ez#2~ z$+iw7^-zs)s;o-upPG`lg(hLXgZzHdB6C};Ewqks8#X@yyubX+K$UbYQ^)IpI$Q;N zm14LXse%K?iymTFO~TW;=VFFHeE!+>V4xg7G|HFVS8K>lGUmwvYNwpAd0Ssf%o-Wa zHg<{3VaG4(dR5^hCloQ_MA8&*GBVcp_7WxH)ebjWpWUD%yk6($9S6HZw5NX88JfNK z8@EDQh{h7{4GWK-FXgC4(s*)8%14-9I;{G%wpOgs(ivXx3U&2{0>6*_xcn)asRg^1 zkx8tUM{`z1D(|Bs?X#8n{za}rC;<=wZ$+vuDA-hQ?mITZ;!k>ic-WG*?=F9eQlF~& zClFb@T(fdGHX()X0do~gu~?ydqn#kjGyGJqpmmMWU+zXe=xtEN$x3+ZzS4YVd(ON^ zh(`PMPE@?^Au%8&)ciW{^>2r|2NkZ-If0c>1%Qc#Sz~3!M8Hhz+|C`)|E*;X8u70A zaAcw1T@{NM?rGf)Xt&TeVK597j4(5^y~Xl?r# I$ujic0Kr^<9{>OV From 282d0231e0766bd924d5381fd2d6d6eb7a16bbac Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 8 Mar 2015 16:22:41 +0100 Subject: [PATCH 02/65] WIP moving carbon/life to living/life() --- code/game/gamemodes/blob/blobs/blob_mobs.dm | 6 +- code/modules/mining/equipment_locker.dm | 2 +- code/modules/mob/living/carbon/death.dm | 2 + code/modules/mob/living/carbon/life.dm | 87 ++----- code/modules/mob/living/life.dm | 228 ++++++++++++++++++ code/modules/mob/living/living.dm | 1 - code/modules/mob/living/silicon/robot/life.dm | 4 +- .../mob/living/simple_animal/constructs.dm | 2 +- .../living/simple_animal/friendly/corgi.dm | 4 +- .../simple_animal/friendly/drone/_drone.dm | 4 +- .../simple_animal/friendly/farm_animals.dm | 4 +- .../living/simple_animal/friendly/mouse.dm | 6 +- .../living/simple_animal/friendly/slime.dm | 2 +- .../mob/living/simple_animal/hostile/alien.dm | 4 +- .../mob/living/simple_animal/hostile/bees.dm | 4 +- .../mob/living/simple_animal/hostile/carp.dm | 2 +- .../living/simple_animal/hostile/eyeballs.dm | 2 +- .../living/simple_animal/hostile/hivebot.dm | 4 +- .../living/simple_animal/hostile/hostile.dm | 4 +- .../mob/living/simple_animal/hostile/mimic.dm | 14 +- .../simple_animal/hostile/mining_mobs.dm | 22 +- .../living/simple_animal/hostile/mushroom.dm | 4 +- .../living/simple_animal/hostile/pirate.dm | 4 +- .../living/simple_animal/hostile/russian.dm | 4 +- .../living/simple_animal/hostile/syndicate.dm | 8 +- .../mob/living/simple_animal/hostile/tree.dm | 8 +- .../mob/living/simple_animal/parrot.dm | 4 +- .../mob/living/simple_animal/simple_animal.dm | 38 +-- tgstation.dme | 1 + 29 files changed, 325 insertions(+), 154 deletions(-) create mode 100644 code/modules/mob/living/life.dm diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index d3a367e5e64..2df7b07445a 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -92,7 +92,7 @@ H.loc = src loc.visible_message(" The corpse of [H.name] suddenly rises!") -/mob/living/simple_animal/hostile/blob/blobspore/Die() +/mob/living/simple_animal/hostile/blob/blobspore/death(gibbed) // On death, create a small smoke of harmful gas (s-Acid) var/datum/effect/effect/system/chem_smoke_spread/S = new var/turf/location = get_turf(src) @@ -165,6 +165,6 @@ /mob/living/simple_animal/hostile/blob/blobbernaut/blob_act() return -/mob/living/simple_animal/hostile/blob/blobbernaut/Die() - ..() +/mob/living/simple_animal/hostile/blob/blobbernaut/death(gibbed) + ..(gibbed) flick("blobbernaut_death", src) \ No newline at end of file diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 4ce35c8a06e..402fa8f956a 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -628,7 +628,7 @@ return ..() -/mob/living/simple_animal/hostile/mining_drone/Die() +/mob/living/simple_animal/hostile/mining_drone/death() ..() visible_message("[src] is destroyed!") new /obj/effect/decal/cleanable/robot_debris(src.loc) diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index deca15ff0f7..7994f95978a 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -1,4 +1,6 @@ /mob/living/carbon/death(gibbed) + eye_blind = max(eye_blind, 1) + silent = 0 med_hud_set_health() med_hud_set_status() ..(gibbed) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index b4181b590a0..29bf40ef11a 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -67,7 +67,7 @@ /////////////// //Start of a breath chain, calls breathe() -/mob/living/carbon/proc/handle_breathing() +/mob/living/carbon/handle_breathing() if(SSmob.times_fired%4==2 || failed_last_breath) breathe() //Breathe per 4 ticks, unless suffocating else @@ -253,10 +253,10 @@ return -/mob/living/carbon/proc/handle_changeling() +/mob/living/carbon/handle_changeling() return -/mob/living/carbon/proc/handle_mutations_and_radiation() +/mob/living/carbon/handle_mutations_and_radiation() if(radiation) switch(radiation) @@ -281,7 +281,7 @@ radiation = Clamp(radiation, 0, 100) -/mob/living/carbon/proc/handle_chemicals_in_body() +/mob/living/carbon/handle_chemicals_in_body() if(reagents) reagents.metabolize(src) @@ -304,16 +304,16 @@ updatehealth() return -/mob/living/carbon/proc/handle_blood() +/mob/living/carbon/handle_blood() return -/mob/living/carbon/proc/handle_random_events() +/mob/living/carbon/handle_random_events() return -/mob/living/carbon/proc/handle_environment(var/datum/gas_mixture/environment) +/mob/living/carbon/handle_environment(var/datum/gas_mixture/environment) return -/mob/living/carbon/proc/handle_stomach() +/mob/living/carbon/handle_stomach() spawn(0) for(var/mob/living/M in stomach_contents) if(M.loc != src) @@ -330,26 +330,21 @@ M.adjustBruteLoss(5) nutrition += 10 -/mob/living/carbon/proc/handle_regular_status_updates() +/mob/living/carbon/handle_regular_status_updates() - if(stat == DEAD) - eye_blind = max(eye_blind, 1) - silent = 0 - else - updatehealth() - if(health <= config.health_threshold_dead || !getorgan(/obj/item/organ/brain)) - death() - eye_blind = max(eye_blind, 1) - silent = 0 - return 1 + updatehealth() + if(health <= config.health_threshold_dead || !getorgan(/obj/item/organ/brain)) + death() + return - if( (getOxyLoss() > 50) || (config.health_threshold_crit >= health) ) + if(stat != DEAD) + + if(getOxyLoss() > 50 || health <= config.health_threshold_crit) Paralyse(3) - if(paralysis) - AdjustParalysis(-1) - stat = UNCONSCIOUS - else if(sleeping) + ..() + + if(sleeping && !paralysis) handle_dreams() adjustStaminaLoss(-10) sleeping = max(sleeping-1, 0) @@ -358,14 +353,6 @@ spawn(0) emote("snore") - else if (status_flags & FAKEDEATH) - stat = UNCONSCIOUS - - else - stat = CONSCIOUS - - handle_disabilities() - //Dizziness if(dizziness) var/client/C = client @@ -419,16 +406,6 @@ if(druggy) druggy = max(druggy-1, 0) - if(stunned) - AdjustStunned(-1) - if(!stunned) - update_icons() - - if(weakened) - weakened = max(weakened-1,0) - if(!weakened) - update_icons() - if(hallucination) spawn handle_hallucinations() @@ -442,28 +419,10 @@ qdel(a) CheckStamina() - return 1 - -/mob/living/carbon/proc/handle_disabilities() - //Eyes - if(disabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own - eye_blind = max(eye_blind, 1) - else if(eye_blind) //blindness, heals slowly over time - eye_blind = max(eye_blind-1,0) - else if(eye_blurry) //blurry eyes heal slowly - eye_blurry = max(eye_blurry-1, 0) - - //Ears - if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own - setEarDamage(-1, max(ear_deaf, 1)) - else - // deafness heals slowly over time, unless ear_damage is over 100 - if(ear_damage < 100) - adjustEarDamage(-0.05,-1) - + return 1 //this handles hud updates. Calles update_vision() and handle_hud_icons() -/mob/living/carbon/proc/handle_regular_hud_updates() +/mob/living/carbon/handle_regular_hud_updates() if(!client) return 0 update_action_buttons() @@ -550,7 +509,7 @@ return 1 -/mob/living/carbon/proc/handle_vision() +/mob/living/carbon/handle_vision() client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask) @@ -597,7 +556,7 @@ if(!client.adminobs) reset_view(null) -/mob/living/carbon/proc/handle_hud_icons() +/mob/living/carbon/handle_hud_icons() return /mob/living/carbon/proc/handle_hud_icons_health() diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm new file mode 100644 index 00000000000..effe89bda3e --- /dev/null +++ b/code/modules/mob/living/life.dm @@ -0,0 +1,228 @@ +/mob/living/Life() + set invisibility = 0 + set background = BACKGROUND_ENABLED + + if (notransform) + return + if(!loc) + return + var/datum/gas_mixture/environment = loc.return_air() + + if(stat != DEAD) + + //Breathing, if applicable + handle_breathing() + + //Updates the number of stored chemicals for powers + handle_changeling() + + //Mutations and radiation + handle_mutations_and_radiation() + + //Chemicals in the body + handle_chemicals_in_body() + + //Blud + handle_blood() + + //Random events (vomiting etc) + handle_random_events() + + . = 1 + + //Handle temperature/pressure differences between body and environment + handle_environment(environment) + + handle_fire() + + //stuff in the stomach + handle_stomach() + + update_canmove() + + update_gravity(mob_has_gravity()) + + for(var/obj/item/weapon/grab/G in src) + G.process() + + handle_regular_status_updates() // Status updates, death etc. + + if(client) + handle_regular_hud_updates() + + return . + + + +/mob/living/proc/handle_breathing() + +/mob/living/proc/handle_changeling() + return + +/mob/living/proc/handle_mutations_and_radiation() + if(radiation) + + switch(radiation) + if(0 to 50) + radiation-- + if(prob(25)) + adjustToxLoss(1) + updatehealth() + + if(50 to 75) + radiation -= 2 + adjustToxLoss(1) + if(prob(5)) + radiation -= 5 + updatehealth() + + if(75 to 100) + radiation -= 3 + adjustToxLoss(3) + updatehealth() + + radiation = Clamp(radiation, 0, 100) + + +/mob/living/proc/handle_chemicals_in_body() + if(reagents) + reagents.metabolize(src) + + if(drowsyness) + drowsyness-- + eye_blurry = max(2, eye_blurry) + if(prob(5)) + sleeping += 1 + Paralyse(5) + + confused = max(0, confused - 1) + // decrement dizziness counter, clamped to 0 + if(resting) + dizziness = max(0, dizziness - 5) + jitteriness = max(0, jitteriness - 5) + else + dizziness = max(0, dizziness - 1) + jitteriness = max(0, jitteriness - 1) + + updatehealth() + return + +/mob/living/proc/handle_blood() + return + +/mob/living/proc/handle_random_events() + return + +/mob/living/proc/handle_environment(var/datum/gas_mixture/environment) + return + +/mob/living/proc/handle_stomach() + return + +/mob/living/proc/handle_regular_status_updates() + + if(stat != DEAD) + updatehealth() + + if(paralysis) + AdjustParalysis(-1) + stat = UNCONSCIOUS + + else if (status_flags & FAKEDEATH) + stat = UNCONSCIOUS + + else + stat = CONSCIOUS + + handle_disabilities() + + if(stunned) + AdjustStunned(-1) + if(!stunned) + update_icons() + + if(weakened) + weakened = max(weakened-1,0) + if(!weakened) + update_icons() + + return 1 + +/mob/living/proc/handle_disabilities() + //Eyes + if(disabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own + eye_blind = max(eye_blind, 1) + else if(eye_blind) //blindness, heals slowly over time + eye_blind = max(eye_blind-1,0) + else if(eye_blurry) //blurry eyes heal slowly + eye_blurry = max(eye_blurry-1, 0) + + //Ears + if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own + setEarDamage(-1, max(ear_deaf, 1)) + else + // deafness heals slowly over time, unless ear_damage is over 100 + if(ear_damage < 100) + adjustEarDamage(-0.05,-1) + + +//this handles hud updates. Calles update_vision() and handle_hud_icons() +/mob/living/proc/handle_regular_hud_updates() + if(!client) return 0 + + handle_vision() + handle_hud_icons() + + return 1 + +/mob/living/proc/handle_vision() + + client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask) + + if(stat == DEAD) + sight |= SEE_TURFS + sight |= SEE_MOBS + sight |= SEE_OBJS + see_in_dark = 8 + see_invisible = SEE_INVISIBLE_LEVEL_TWO + else + sight &= ~SEE_TURFS + sight &= ~SEE_MOBS + sight &= ~SEE_OBJS + see_in_dark = 2 + see_invisible = SEE_INVISIBLE_LIVING + if(see_override) + see_invisible = see_override + + if(blind) + if(eye_blind) + blind.layer = 18 + else + blind.layer = 0 + + if (disabilities & NEARSIGHT) + client.screen += global_hud.vimpaired + + if (eye_blurry) + client.screen += global_hud.blurry + + if (druggy) + client.screen += global_hud.druggy + + if(eye_stat > 20) + if(eye_stat > 30) + client.screen += global_hud.darkMask + else + client.screen += global_hud.vimpaired + + if(machine) + if (!( machine.check_eye(src) )) + reset_view(null) + else + if(!client.adminobs) + reset_view(null) + +/mob/living/proc/handle_hud_icons() + return + + diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 9dc994a1bad..66350b14641 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -8,7 +8,6 @@ Sorry Giacom. Please don't be mad :( push_mob_back(src, A.push_dir) */ - /mob/living/New() . = ..() generateStaticOverlay() diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index d90e464cee2..5fbf63a2a70 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -58,7 +58,7 @@ src.stat = 1 -/mob/living/silicon/robot/proc/handle_regular_status_updates() +/mob/living/silicon/robot/handle_regular_status_updates() if(src.camera && !scrambledcodes) if(src.stat == 2 || wires.IsCameraCut()) @@ -129,7 +129,7 @@ return 1 -/mob/living/silicon/robot/proc/handle_regular_hud_updates() +/mob/living/silicon/robot/handle_regular_hud_updates() if (src.stat == 2 || src.sight_mode & BORGXRAY) src.sight |= SEE_TURFS diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 2f515596d37..336ca05e96a 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -34,7 +34,7 @@ for(var/spell in construct_spells) mob_spell_list += new spell(src) -/mob/living/simple_animal/construct/Die() +/mob/living/simple_animal/construct/death() ..() new /obj/item/weapon/ectoplasm (src.loc) visible_message("[src] collapses in a shattered heap.") diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 6cfff764b88..da97a78c75d 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -29,8 +29,8 @@ ..() regenerate_icons() -/mob/living/simple_animal/corgi/Die() - ..() +/mob/living/simple_animal/corgi/death(gibbed) + ..(gibbed) regenerate_icons() /mob/living/simple_animal/corgi/revive() diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index 4a003c9a72f..704338b87b9 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -94,8 +94,8 @@ pickVisualAppearence() -/mob/living/simple_animal/drone/Die() - ..() +/mob/living/simple_animal/drone/death(gibbed) + ..(gibbed) drop_l_hand() drop_r_hand() if(internal_storage) diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index d976a50bf86..48349474c2d 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -223,8 +223,8 @@ var/global/chicken_count = 0 pixel_y = rand(0, 10) chicken_count += 1 -/mob/living/simple_animal/chicken/Die() - ..() +/mob/living/simple_animal/chicken/death(gibbed) + ..(gibbed) chicken_count -= 1 /mob/living/simple_animal/chicken/attackby(var/obj/item/O as obj, var/mob/user as mob, params) diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index ae67489e9e0..a20a7801d3b 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -36,10 +36,10 @@ /mob/living/simple_animal/mouse/proc/splat() src.health = 0 src.icon_dead = "mouse_[body_color]_splat" - Die() + death() -/mob/living/simple_animal/mouse/Die() - ..() +/mob/living/simple_animal/mouse/death(gibbed) + ..(gibbed) if(!ckey) var/obj/item/trash/deadmouse/M = new(src.loc) M.icon_state = src.icon_dead diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm index 85405278096..eed4bc24848 100644 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ b/code/modules/mob/living/simple_animal/friendly/slime.dm @@ -25,7 +25,7 @@ ..() overlays += "aslime-:33" -/mob/living/simple_animal/slime/adult/Die() +/mob/living/simple_animal/slime/adult/death(gibbed) for(var/i = 0, i<=1, i++) var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc) S1.icon_state = "[colour] baby slime" diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index e08f84a93fd..909e17a36e6 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -92,7 +92,7 @@ damage = 30 icon_state = "toxin" -/mob/living/simple_animal/hostile/alien/Die() - ..() +/mob/living/simple_animal/hostile/alien/death(gibbed) + ..(gibbed) visible_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...") playsound(src, 'sound/voice/hiss6.ogg', 100, 1) diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 66707ccf069..9a07fae29f4 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -40,8 +40,8 @@ ..() update_bees() -/mob/living/simple_animal/hostile/poison/bees/Die() - ..() +/mob/living/simple_animal/hostile/poison/bees/death(gibbed) + ..(gibbed) qdel(src) return diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index a7683dd7847..2c4fe2f9de8 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -57,7 +57,7 @@ icon_living = "holocarp" maxbodytemp = INFINITY -/mob/living/simple_animal/hostile/carp/holocarp/Die() +/mob/living/simple_animal/hostile/carp/holocarp/death() qdel(src) return diff --git a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm index 46f2e679e22..4bebf1eaa72 100644 --- a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm +++ b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm @@ -29,6 +29,6 @@ if(.) emote("me", 1, "glares at [.]") -/mob/living/simple_animal/hostile/carp/eyeball/Die() +/mob/living/simple_animal/hostile/carp/eyeball/death() qdel(src) return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 11bbfa8a561..f6b7bfbf731 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -46,8 +46,8 @@ health = 80 ranged = 1 -/mob/living/simple_animal/hostile/hivebot/Die() - ..() +/mob/living/simple_animal/hostile/hivebot/death(gibbed) + ..(gibbed) visible_message("[src] blows apart!") new /obj/effect/decal/cleanable/robot_debris(src.loc) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 3828dbdce6c..31a27c5246d 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -229,9 +229,9 @@ //////////////END HOSTILE MOB TARGETTING AND AGGRESSION//////////// -/mob/living/simple_animal/hostile/Die() +/mob/living/simple_animal/hostile/death(gibbed) LoseAggro() - ..() + ..(gibbed) walk(src, 0) /mob/living/simple_animal/hostile/proc/OpenFire(var/the_target) diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index e6f77f15489..4003bda143b 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -41,8 +41,8 @@ if(.) emote("me", 1, "[Attackemote] [.].") -/mob/living/simple_animal/hostile/mimic/Die() - ..() +/mob/living/simple_animal/hostile/mimic/death(gibbed) + ..(gibbed) visible_message("[src] stops moving!") qdel(src) @@ -107,13 +107,13 @@ ..() icon_state = initial(icon_state) -/mob/living/simple_animal/hostile/mimic/crate/Die() +/mob/living/simple_animal/hostile/mimic/crate/death(gibbed) var/obj/structure/closet/crate/C = new(get_turf(src)) // Put loot in crate for(var/obj/O in src) O.loc = C - ..() + ..(gibbed) /mob/living/simple_animal/hostile/mimic/crate/AttackingTarget() . =..() @@ -144,13 +144,13 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca /mob/living/simple_animal/hostile/mimic/copy/Life() ..() for(var/mob/living/M in contents) //a fix for animated statues from the flesh to stone spell - Die() + death() -/mob/living/simple_animal/hostile/mimic/copy/Die() +/mob/living/simple_animal/hostile/mimic/copy/death(gibbed) for(var/atom/movable/M in src) M.loc = get_turf(src) - ..() + ..(gibbed) /mob/living/simple_animal/hostile/mimic/copy/ListTargets() // Return a list of targets that isn't the creator diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 0e62f7f61b7..8bbfc2e7c7e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -108,12 +108,12 @@ if(3.0) adjustBruteLoss(110) -/mob/living/simple_animal/hostile/asteroid/basilisk/Die() +/mob/living/simple_animal/hostile/asteroid/basilisk/death(gibbed) var/counter for(counter=0, counter<2, counter++) var/obj/item/weapon/ore/diamond/D = new /obj/item/weapon/ore/diamond(src.loc) D.layer = 4.1 - ..() + ..(gibbed) /mob/living/simple_animal/hostile/asteroid/goldgrub name = "goldgrub" @@ -204,10 +204,10 @@ visible_message("The [P.name] was repelled by [src.name]'s girth!") return -/mob/living/simple_animal/hostile/asteroid/goldgrub/Die() +/mob/living/simple_animal/hostile/asteroid/goldgrub/death(gibbed) alerted = 0 Reward() - ..() + ..(gibbed) /mob/living/simple_animal/hostile/asteroid/goldgrub/adjustBruteLoss(var/damage) idle_vision_range = 9 @@ -253,10 +253,10 @@ /mob/living/simple_animal/hostile/asteroid/hivelord/AttackingTarget() OpenFire() -/mob/living/simple_animal/hostile/asteroid/hivelord/Die() +/mob/living/simple_animal/hostile/asteroid/hivelord/death(gibbed) new /obj/item/asteroid/hivelord_core(src.loc) mouse_opacity = 1 - ..() + ..(gibbed) /obj/item/asteroid/hivelord_core name = "hivelord remains" @@ -318,7 +318,7 @@ spawn(100) qdel(src) -/mob/living/simple_animal/hostile/asteroid/hivelordbrood/Die() +/mob/living/simple_animal/hostile/asteroid/hivelordbrood/death() qdel(src) /mob/living/simple_animal/hostile/asteroid/goliath @@ -367,9 +367,9 @@ anchored = 1 ..() -/mob/living/simple_animal/hostile/asteroid/goliath/Die() +/mob/living/simple_animal/hostile/asteroid/goliath/death(gibbed) anchored = 0 - ..() + ..(gibbed) /mob/living/simple_animal/hostile/asteroid/goliath/OpenFire() var/tturf = get_turf(target) @@ -434,10 +434,10 @@ spawn(50) qdel(src) -/mob/living/simple_animal/hostile/asteroid/goliath/Die() +/mob/living/simple_animal/hostile/asteroid/goliath/death(gibbed) var/obj/item/asteroid/goliath_hide/G = new /obj/item/asteroid/goliath_hide(src.loc) G.layer = 4.1 - ..() + ..(gibbed) /obj/item/asteroid/goliath_hide name = "goliath hide plates" diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index c93b394050e..f06f3d4c28c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -87,9 +87,9 @@ icon_state = "mushroom_color" UpdateMushroomCap() -/mob/living/simple_animal/hostile/mushroom/Die() +/mob/living/simple_animal/hostile/mushroom/death(gibbed) visible_message("[src] fainted.") - ..() + ..(gibbed) UpdateMushroomCap() /mob/living/simple_animal/hostile/mushroom/proc/UpdateMushroomCap() diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index aae825a6538..71dde5bdd9a 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -49,8 +49,8 @@ weapon1 = /obj/item/weapon/gun/energy/laser -/mob/living/simple_animal/hostile/pirate/Die() - ..() +/mob/living/simple_animal/hostile/pirate/death(gibbed) + ..(gibbed) if(corpse) new corpse (src.loc) if(weapon1) diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index 3f143ea19fe..568d89794e4 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -51,8 +51,8 @@ weapon1 = /obj/item/weapon/gun/projectile/shotgun/boltaction casingtype = /obj/item/ammo_casing/a762 -/mob/living/simple_animal/hostile/russian/Die() - ..() +/mob/living/simple_animal/hostile/russian/death(gibbed) + ..(gibbed) if(corpse) new corpse (src.loc) if(weapon1) diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 72b30675077..cfa97043bfd 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -34,8 +34,8 @@ faction = list("syndicate") status_flags = CANPUSH -/mob/living/simple_animal/hostile/syndicate/Die() - ..() +/mob/living/simple_animal/hostile/syndicate/death(gibbed) + ..(gibbed) if(corpse) new corpse (src.loc) if(weapon1) @@ -160,8 +160,8 @@ minbodytemp = 0 mob_size = 0 -/mob/living/simple_animal/hostile/viscerator/Die() - ..() +/mob/living/simple_animal/hostile/viscerator/death(gibbed) + ..(gibbed) visible_message("[src] is smashed into pieces!") qdel(src) return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 43ee23cf49b..c4ed28b8e18 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -50,8 +50,8 @@ L.Weaken(3) L.visible_message("\The [src] knocks down \the [L]!") -/mob/living/simple_animal/hostile/tree/Die() - ..() +/mob/living/simple_animal/hostile/tree/death(gibbed) + ..(gibbed) visible_message("[src] is hacked into pieces!") new /obj/item/stack/sheet/mineral/wood(loc) qdel(src) @@ -64,8 +64,8 @@ icon_dead = "festivus_pole" icon_gib = "festivus_pole" -/mob/living/simple_animal/hostile/tree/festivus/Die() - ..() +/mob/living/simple_animal/hostile/tree/festivus/death(gibbed) + ..(gibbed) visible_message("[src] is hacked into pieces!") new /obj/item/stack/rods(loc) qdel(src) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index d49855fc02f..27549fcbfbc 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -113,12 +113,12 @@ /mob/living/simple_animal/parrot/proc/toggle_mode) -/mob/living/simple_animal/parrot/Die() +/mob/living/simple_animal/parrot/death(gibbed) if(held_item) held_item.loc = src.loc held_item = null walk(src,0) - ..() + ..(gibbed) /mob/living/simple_animal/parrot/Stat() ..() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 0570e89ff65..b6bb2e9d2aa 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -81,13 +81,12 @@ ..() /mob/living/simple_animal/updatehealth() + if(health > maxHealth) + health = maxHealth return /mob/living/simple_animal/Life() - update_gravity(mob_has_gravity()) - - //Health if(stat == DEAD) if(health > 0) icon_state = icon_living @@ -98,21 +97,12 @@ update_canmove() return 0 + updatehealth() - if(health < 1 && stat != DEAD) - Die() - - if(health > maxHealth) - health = maxHealth - - if(stunned) - AdjustStunned(-1) - if(weakened) - AdjustWeakened(-1) - if(paralysis) - AdjustParalysis(-1) - - adjustEarDamage((ear_damage < 25 ? -0.05 : 0), -1) + if(health < 1) + death() + else + handle_regular_status_updates() //Movement if(!client && !stop_automated_movement && wander) @@ -392,22 +382,14 @@ if(statpanel("Status")) stat(null, "Health: [round((health / maxHealth) * 100)]%") -/mob/living/simple_animal/proc/Die() +/mob/living/simple_animal/death(gibbed) health = 0 // so /mob/living/simple_animal/Life() doesn't magically revive them - dead_mob_list += src icon_state = icon_dead stat = DEAD density = 0 - return - -/mob/living/simple_animal/death(gibbed) - if(stat == DEAD) - return - if(!gibbed) visible_message("\the [src] stops moving...") - - Die() + ..() /mob/living/simple_animal/ex_act(severity, target) ..() @@ -426,7 +408,7 @@ /mob/living/simple_animal/adjustBruteLoss(damage) health = Clamp(health - damage, 0, maxHealth) if(health < 1 && stat != DEAD) - Die() + death() /mob/living/simple_animal/proc/CanAttack(var/atom/the_target) if(see_invisible < the_target.invisibility) diff --git a/tgstation.dme b/tgstation.dme index a74a3ce7694..a923cd4885f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1045,6 +1045,7 @@ #include "code\modules\mob\living\damage_procs.dm" #include "code\modules\mob\living\death.dm" #include "code\modules\mob\living\emote.dm" +#include "code\modules\mob\living\life.dm" #include "code\modules\mob\living\living.dm" #include "code\modules\mob\living\living_defense.dm" #include "code\modules\mob\living\living_defines.dm" From 1e720ae0336e61291b4371813f2debb8b032c3ea Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 14 Mar 2015 16:30:59 +0100 Subject: [PATCH 03/65] More work on living/life.dm(), simple_animal/life() and robot/life(). --- code/modules/mob/living/carbon/alien/life.dm | 38 +-- code/modules/mob/living/carbon/life.dm | 84 +------ code/modules/mob/living/life.dm | 63 ++--- code/modules/mob/living/silicon/ai/life.dm | 4 +- code/modules/mob/living/silicon/pai/life.dm | 2 +- .../modules/mob/living/silicon/robot/death.dm | 6 +- code/modules/mob/living/silicon/robot/life.dm | 237 +++++++----------- .../mob/living/simple_animal/parrot.dm | 14 +- .../modules/mob/living/simple_animal/shade.dm | 14 +- .../mob/living/simple_animal/simple_animal.dm | 47 ++-- 10 files changed, 167 insertions(+), 342 deletions(-) diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 248333825ae..8e0df9d0053 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -41,15 +41,13 @@ /mob/living/carbon/alien/handle_vision() - client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask) - - if (stat == 2) + if (stat == DEAD) sight |= SEE_TURFS sight |= SEE_MOBS sight |= SEE_OBJS see_in_dark = 8 see_invisible = SEE_INVISIBLE_LEVEL_TWO - else if (stat != 2) + else if (stat != DEAD) sight |= SEE_MOBS sight &= ~SEE_TURFS sight &= ~SEE_OBJS @@ -62,40 +60,8 @@ if(see_override) see_invisible = see_override - if ((blind && stat != 2)) - if((eye_blind)) - blind.layer = 18 - else - blind.layer = 0 - - if (disabilities & NEARSIGHT) - client.screen += global_hud.vimpaired - - if (eye_blurry) - client.screen += global_hud.blurry - - if (druggy) - client.screen += global_hud.druggy - - if (stat != 2) - if(machine) - if (!( machine.check_eye(src) )) - reset_view(null) - else - if(!client.adminobs) - reset_view(null) - - /mob/living/carbon/alien/handle_hud_icons() handle_hud_icons_health() - if(pullin) - if(pulling) - pullin.icon_state = "pull" - else - pullin.icon_state = "pull0" - - - return 1 diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 29bf40ef11a..974efde0342 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -14,54 +14,12 @@ return if(!loc) return - var/datum/gas_mixture/environment = loc.return_air() - - if(stat != DEAD) - - //Breathing, if applicable - handle_breathing() + if(..()) //Updates the number of stored chemicals for powers handle_changeling() - - //Mutations and radiation - handle_mutations_and_radiation() - - //Chemicals in the body - handle_chemicals_in_body() - - //Blud - handle_blood() - - //Random events (vomiting etc) - handle_random_events() - . = 1 - //Handle temperature/pressure differences between body and environment - handle_environment(environment) - - handle_fire() - - //stuff in the stomach - handle_stomach() - - update_canmove() - - update_gravity(mob_has_gravity()) - - for(var/obj/item/weapon/grab/G in src) - G.process() - - handle_regular_status_updates() // Status updates, death etc. - - if(client) - handle_regular_hud_updates() - - return . - - - /////////////// // BREATHING // /////////////// @@ -253,7 +211,7 @@ return -/mob/living/carbon/handle_changeling() +/mob/living/carbon/proc/handle_changeling() return /mob/living/carbon/handle_mutations_and_radiation() @@ -341,6 +299,7 @@ if(getOxyLoss() > 50 || health <= config.health_threshold_crit) Paralyse(3) + stat = UNCONSCIOUS ..() @@ -503,15 +462,11 @@ damageoverlay.overlays += I damageoverlay.overlays += black - - handle_vision() - handle_hud_icons() + ..() return 1 -/mob/living/carbon/handle_vision() - - client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask) +/mob/living/carbon/update_sight() if(stat == DEAD) sight |= SEE_TURFS @@ -528,38 +483,11 @@ if(see_override) see_invisible = see_override - if(blind) - if(eye_blind) - blind.layer = 18 - else - blind.layer = 0 - - if (disabilities & NEARSIGHT) - client.screen += global_hud.vimpaired - - if (eye_blurry) - client.screen += global_hud.blurry - - if (druggy) - client.screen += global_hud.druggy - - if(eye_stat > 20) - if(eye_stat > 30) - client.screen += global_hud.darkMask - else - client.screen += global_hud.vimpaired - - if(machine) - if (!( machine.check_eye(src) )) - reset_view(null) - else - if(!client.adminobs) - reset_view(null) /mob/living/carbon/handle_hud_icons() return -/mob/living/carbon/proc/handle_hud_icons_health() +/mob/living/carbon/handle_hud_icons_health() if(healths) if (stat != DEAD) switch(health) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index effe89bda3e..01d8261f293 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -13,9 +13,6 @@ //Breathing, if applicable handle_breathing() - //Updates the number of stored chemicals for powers - handle_changeling() - //Mutations and radiation handle_mutations_and_radiation() @@ -28,10 +25,16 @@ //Random events (vomiting etc) handle_random_events() + if(!client && !stat) + handle_automated_movement() + + handle_automated_speech() + . = 1 //Handle temperature/pressure differences between body and environment - handle_environment(environment) + if(environment) + handle_environment(environment) handle_fire() @@ -56,9 +59,6 @@ /mob/living/proc/handle_breathing() -/mob/living/proc/handle_changeling() - return - /mob/living/proc/handle_mutations_and_radiation() if(radiation) @@ -88,23 +88,6 @@ if(reagents) reagents.metabolize(src) - if(drowsyness) - drowsyness-- - eye_blurry = max(2, eye_blurry) - if(prob(5)) - sleeping += 1 - Paralyse(5) - - confused = max(0, confused - 1) - // decrement dizziness counter, clamped to 0 - if(resting) - dizziness = max(0, dizziness - 5) - jitteriness = max(0, jitteriness - 5) - else - dizziness = max(0, dizziness - 1) - jitteriness = max(0, jitteriness - 1) - - updatehealth() return /mob/living/proc/handle_blood() @@ -121,8 +104,9 @@ /mob/living/proc/handle_regular_status_updates() + updatehealth() + if(stat != DEAD) - updatehealth() if(paralysis) AdjustParalysis(-1) @@ -148,6 +132,12 @@ return 1 +/mob/living/proc/handle_automated_movement() + return + +/mob/living/proc/handle_automated_speech() + return + /mob/living/proc/handle_disabilities() //Eyes if(disabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own @@ -179,21 +169,9 @@ client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask) - if(stat == DEAD) - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - else - sight &= ~SEE_TURFS - sight &= ~SEE_MOBS - sight &= ~SEE_OBJS - see_in_dark = 2 - see_invisible = SEE_INVISIBLE_LIVING - if(see_override) - see_invisible = see_override + update_sight() + if(stat != DEAD) if(blind) if(eye_blind) blind.layer = 18 @@ -222,7 +200,12 @@ if(!client.adminobs) reset_view(null) -/mob/living/proc/handle_hud_icons() +/mob/living/proc/update_sight() return +/mob/living/proc/handle_hud_icons() + handle_hud_icons_health() + return +/mob/living/proc/handle_hud_icons_health() + return diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index a3fd584aac4..8566b31eff0 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -1,11 +1,11 @@ /mob/living/silicon/ai/Life() - if (src.stat == 2) + if (src.stat == DEAD) return else //I'm not removing that shitton of tabs, unneeded as they are. -- Urist //Being dead doesn't mean your temperature never changes var/turf/T = get_turf(src) - if (src.stat!=0) + if (src.stat!= CONSCIOUS) src.cameraFollow = null src.reset_view(null) src.unset_machine() diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm index 04e80299d9a..c0017863de6 100644 --- a/code/modules/mob/living/silicon/pai/life.dm +++ b/code/modules/mob/living/silicon/pai/life.dm @@ -1,5 +1,5 @@ /mob/living/silicon/pai/Life() - if (src.stat == 2) + if (src.stat == DEAD) return if(src.cable) if(get_dist(src, src.cable) > 1) diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index e8767275e01..e12b5db835b 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -19,7 +19,8 @@ ..(animate, "dust-r") /mob/living/silicon/robot/death(gibbed) - if(stat == DEAD) return + if(stat == DEAD) + return if(!gibbed) emote("deathgasp") stat = DEAD @@ -29,7 +30,8 @@ uneq_all() // particularly to ensure sight modes are cleared - if(blind) blind.layer = 0 + if(blind) + blind.layer = 0 sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS see_in_dark = 8 see_invisible = SEE_INVISIBLE_LEVEL_TWO diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 5fbf63a2a70..ba45e348d94 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -5,23 +5,8 @@ if (src.notransform) return - //Status updates, death etc. clamp_values() - handle_regular_status_updates() - - if(client) - handle_regular_hud_updates() - update_items() - if (src.stat != DEAD) //still using power - use_power() - - update_canmove() - - update_gravity(mob_has_gravity()) - - handle_fire() - - + ..() /mob/living/silicon/robot/proc/clamp_values() @@ -36,51 +21,40 @@ /mob/living/silicon/robot/proc/use_power() - if (src.cell) - if(src.cell.charge <= 0) + if(cell) + if(cell.charge <= 0) uneq_all() - src.stat = 1 - else if (src.cell.charge <= 100) + stat = UNCONSCIOUS + else if (cell.charge <= 100) uneq_all() - src.cell.use(1) + cell.use(1) else - if(src.module_state_1) - src.cell.use(5) - if(src.module_state_2) - src.cell.use(5) - if(src.module_state_3) - src.cell.use(5) - src.cell.use(1) - src.eye_blind = 0 - src.stat = 0 + if(module_state_1) + cell.use(5) + if(module_state_2) + cell.use(5) + if(module_state_3) + cell.use(5) + cell.use(1) else uneq_all() - src.stat = 1 + stat = UNCONSCIOUS /mob/living/silicon/robot/handle_regular_status_updates() - if(src.camera && !scrambledcodes) - if(src.stat == 2 || wires.IsCameraCut()) - src.camera.status = 0 + if(camera && !scrambledcodes) + if(stat == DEAD || wires.IsCameraCut()) + camera.status = 0 else - src.camera.status = 1 + camera.status = 1 - health = maxHealth - (getOxyLoss() + getFireLoss() + getBruteLoss()) + updatehealth() - if(getOxyLoss() > 50) Paralyse(3) - - if(src.sleeping) - Paralyse(3) - src.sleeping-- - - if(src.resting) - Weaken(5) - - if(health <= config.health_threshold_dead && src.stat != 2) //die only once + if(health <= config.health_threshold_dead && stat != DEAD) //die only once death() - if (src.stat != 2) //Alive. + if (stat != DEAD) //Alive. if(health < 50) //Gradual break down of modules as more damage is sustained if(uneq_module(module_state_3)) src << "SYSTEM ERROR: Module 3 OFFLINE." @@ -91,47 +65,58 @@ if(uneq_module(module_state_1)) src << "CRITICAL ERROR: All modules OFFLINE." - if (src.paralysis || src.stunned || src.weakened) //Stunned etc. - src.stat = 1 - if (src.stunned > 0) + if(getOxyLoss() > 50) + Paralyse(3) + + if (paralysis || stunned || weakened) //Stunned etc. + stat = UNCONSCIOUS + if (stunned > 0) AdjustStunned(-1) - if (src.weakened > 0) + if (weakened > 0) AdjustWeakened(-1) - if (src.paralysis > 0) + if (paralysis > 0) AdjustParalysis(-1) - src.eye_blind = max(eye_blind, 1) - else - src.eye_blind = 0 + eye_blind = max(eye_blind, 1) else //Not stunned. - src.stat = 0 + src.stat = CONSCIOUS - else //Dead. - src.eye_blind = 1 + if (stuttering) + stuttering-- - if (src.stuttering) src.stuttering-- + if (druggy) + druggy = max(0, druggy-1) - if (src.eye_blind) - src.eye_blind-- + handle_disabilities() - src.density = !( src.lying ) + use_power() - if (src.disabilities & BLIND) - src.eye_blind = max(1, eye_blind) - - if (src.eye_blurry > 0) - src.eye_blurry-- - src.eye_blurry = max(0, src.eye_blurry) - - if (src.druggy > 0) - src.druggy-- - src.druggy = max(0, src.druggy) - - return 1 + return 1 /mob/living/silicon/robot/handle_regular_hud_updates() - if (src.stat == 2 || src.sight_mode & BORGXRAY) + if(!client) + return + + if (syndicate) + if(ticker.mode.name == "traitor") + for(var/datum/mind/tra in ticker.mode.traitors) + if(tra.current) + var/I = image('icons/mob/mob.dmi', loc = tra.current, icon_state = "traitor") //no traitor sprite in that dmi! + src.client.images += I + if(connected_ai) + connected_ai.connected_robots -= src + connected_ai = null + if(mind) + if(!mind.special_role) + mind.special_role = "traitor" + ticker.mode.traitors += mind + ..() + return 1 + +/mob/living/silicon/robot/update_sight() + + if (stat == DEAD || src.sight_mode & BORGXRAY) src.sight |= SEE_TURFS src.sight |= SEE_MOBS src.sight |= SEE_OBJS @@ -150,7 +135,7 @@ else if (src.sight_mode & BORGTHERM) src.sight |= SEE_MOBS src.see_invisible = SEE_INVISIBLE_LEVEL_TWO - else if (src.stat != 2) + else if (src.stat != DEAD) src.sight &= ~SEE_MOBS src.sight &= ~SEE_TURFS src.sight &= ~SEE_OBJS @@ -158,39 +143,32 @@ if(see_override) see_invisible = see_override - if (src.healths) - if (src.stat != 2) +/mob/living/silicon/robot/handle_hud_icons() + update_items() + update_cell() + ..() + +/mob/living/silicon/robot/handle_hud_icons_health() + if (healths) + if (stat != DEAD) switch(health) if(100 to INFINITY) - src.healths.icon_state = "health0" + healths.icon_state = "health0" if(50 to 100) - src.healths.icon_state = "health2" + healths.icon_state = "health2" if(0 to 50) - src.healths.icon_state = "health3" + healths.icon_state = "health3" if(-50 to 0) - src.healths.icon_state = "health4" + healths.icon_state = "health4" if(config.health_threshold_dead to -50) - src.healths.icon_state = "health5" + healths.icon_state = "health5" else - src.healths.icon_state = "health6" + healths.icon_state = "health6" else - src.healths.icon_state = "health7" + healths.icon_state = "health7" - if (src.syndicate && src.client) - if(ticker.mode.name == "traitor") - for(var/datum/mind/tra in ticker.mode.traitors) - if(tra.current) - var/I = image('icons/mob/mob.dmi', loc = tra.current, icon_state = "traitor") - src.client.images += I - if(src.connected_ai) - src.connected_ai.connected_robots -= src - src.connected_ai = null - if(src.mind) - if(!src.mind.special_role) - src.mind.special_role = "traitor" - ticker.mode.traitors += src.mind - - if (src.cell) +/mob/living/silicon/robot/proc/update_cell() + if (cell) var/cellcharge = src.cell.charge/src.cell.maxcharge switch(cellcharge) if(0.75 to INFINITY) @@ -206,51 +184,18 @@ else throw_alert("charge","nocell") - - if(pullin) - if(pulling) - pullin.icon_state = "pull" - else - pullin.icon_state = "pull0" - - client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired) - - if ((src.blind && src.stat != 2)) - if(src.eye_blind) - src.blind.layer = 18 - else - src.blind.layer = 0 - if (src.disabilities & NEARSIGHT) - src.client.screen += global_hud.vimpaired - - if (src.eye_blurry) - src.client.screen += global_hud.blurry - - if (src.druggy) - src.client.screen += global_hud.druggy - - if (src.stat != 2) - if (src.machine) - if (!( src.machine.check_eye(src) )) - src.reset_view(null) - else - if(!client.adminobs) - reset_view(null) - - return 1 - /mob/living/silicon/robot/proc/update_items() - if (src.client) - src.client.screen -= src.contents - for(var/obj/I in src.contents) + if (client) + client.screen -= contents + for(var/obj/I in contents) if(I && !(istype(I,/obj/item/weapon/stock_parts/cell) || istype(I,/obj/item/device/radio) || istype(I,/obj/machinery/camera) || istype(I,/obj/item/device/mmi))) - src.client.screen += I - if(src.module_state_1) - src.module_state_1:screen_loc = ui_inv1 - if(src.module_state_2) - src.module_state_2:screen_loc = ui_inv2 - if(src.module_state_3) - src.module_state_3:screen_loc = ui_inv3 + client.screen += I + if(module_state_1) + module_state_1:screen_loc = ui_inv1 + if(module_state_2) + module_state_2:screen_loc = ui_inv2 + if(module_state_3) + module_state_3:screen_loc = ui_inv3 //Robots on fire @@ -276,6 +221,8 @@ IgniteMob() /mob/living/silicon/robot/update_canmove() - if(paralysis || stunned || weakened || buckled || lockcharge) canmove = 0 - else canmove = 1 + if(paralysis || stunned || weakened || buckled || lockcharge) + canmove = 0 + else + canmove = 1 return canmove diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 27549fcbfbc..330d52fef83 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -347,25 +347,21 @@ /mob/living/simple_animal/parrot/Life() ..() - //Sprite and AI update for when a parrot gets pulled + //Sprite update for when a parrot gets pulled if(pulledby && stat == CONSCIOUS) icon_state = "parrot_fly" if(!client) parrot_state = PARROT_WANDER return - if(client || stat) - return //Lets not force players or dead/incap parrots to move - - if(!isturf(src.loc) || !canmove || buckled) - return //If it can't move, dont let it move. (The buckled check probably isn't necessary thanks to canmove) - //-----SPEECH /* Parrot speech mimickry! Phrases that the parrot Hear()s get added to speach_buffer. Every once in a while, the parrot picks one of the lines from the buffer and replaces an element of the 'speech' list. Then it clears the buffer to make sure they dont magically remember something from hours ago. */ +/mob/living/simple_animal/parrot/handle_automated_speech() + ..() if(speech_buffer.len && prob(10)) if(speak.len) speak.Remove(pick(speak)) @@ -374,6 +370,10 @@ clearlist(speech_buffer) +/mob/living/simple_animal/parrot/handle_automated_movement() + if(!..()) + return //If it can't or shouldn't move, dont let it move. + //-----SLEEPING if(parrot_state == PARROT_PERCH) if(parrot_perch && parrot_perch.loc != src.loc) //Make sure someone hasnt moved our perch on us diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index ebca47633b9..15ff46d6403 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -28,14 +28,12 @@ status_flags = CANPUSH -/mob/living/simple_animal/shade/Life() - ..() - if(stat == 2) - new /obj/item/weapon/ectoplasm (src.loc) - visible_message("[src] lets out a contented sigh as their form unwinds.") - ghostize() - qdel(src) - return +/mob/living/simple_animal/shade/death() + new /obj/item/weapon/ectoplasm (src.loc) + visible_message("[src] lets out a contented sigh as their form unwinds.") + ghostize() + qdel(src) + return /mob/living/simple_animal/shade/attackby(var/obj/item/O as obj, var/mob/user as mob, params) //Marker -Agouri diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index b6bb2e9d2aa..85c019a9b0a 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -85,27 +85,24 @@ health = maxHealth return -/mob/living/simple_animal/Life() +/mob/living/simple_animal/handle_regular_status_updates() + if(!..()) + auto_revive() - if(stat == DEAD) - if(health > 0) - icon_state = icon_living - dead_mob_list -= src - living_mob_list += src - stat = CONSCIOUS - density = 1 - update_canmove() - return 0 - - updatehealth() - - if(health < 1) + else if(health < 1) death() - else - handle_regular_status_updates() - //Movement - if(!client && !stop_automated_movement && wander) +/mob/living/simple_animal/proc/auto_revive() + if(stat == DEAD && health > 0) + icon_state = icon_living + dead_mob_list -= src + living_mob_list += src + stat = CONSCIOUS + density = 1 + update_canmove() + +/mob/living/simple_animal/handle_automated_movement() + if(!stop_automated_movement && wander) if(isturf(src.loc) && !resting && !buckled && canmove) //This is so it only moves if it's not inside a closet, gentics machine, etc. turns_since_move++ if(turns_since_move >= turns_per_move) @@ -114,9 +111,10 @@ if(Process_Spacemove(anydir)) Move(get_step(src, anydir), anydir) turns_since_move = 0 + return 1 - //Speaking - if(!client && speak_chance) +/mob/living/simple_animal/handle_automated_speech() + if(speak_chance) if(rand(0,200) < speak_chance) if(speak && speak.len) if((emote_hear && emote_hear.len) || (emote_see && emote_see.len)) @@ -150,7 +148,7 @@ emote("me", 2, pick(emote_hear)) - //Atmos +/mob/living/simple_animal/handle_environment() var/atmos_suitable = 1 var/atom/A = src.loc @@ -204,7 +202,8 @@ if(!atmos_suitable) adjustBruteLoss(unsuitable_atmos_damage) - return 1 + + /mob/living/simple_animal/gib(var/animation = 0) if(icon_gib) @@ -383,7 +382,7 @@ stat(null, "Health: [round((health / maxHealth) * 100)]%") /mob/living/simple_animal/death(gibbed) - health = 0 // so /mob/living/simple_animal/Life() doesn't magically revive them + health = 0 // so /mob/living/simple_animal/handle_regular_status_updates() doesn't magically revive them icon_state = icon_dead stat = DEAD density = 0 @@ -423,6 +422,8 @@ return 0 return 1 +/mob/living/simple_animal/handle_fire() + return /mob/living/simple_animal/update_fire() return From 456a64f8fdfba3513c4b071e90feec6727741fda Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 14 Mar 2015 23:40:57 +0100 Subject: [PATCH 04/65] slime from carbon to simple animal --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 4 +- code/__HELPERS/unsorted.dm | 2 +- code/_onclick/other_mobs.dm | 4 +- code/datums/diseases/transformation.dm | 2 +- code/datums/mind.dm | 2 +- code/game/machinery/computer/shuttle.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 2 +- code/game/machinery/telecomms/logbrowser.dm | 2 +- .../mecha/equipment/tools/medical_tools.dm | 2 +- code/game/mecha/mecha.dm | 2 +- code/game/objects/buckling.dm | 2 +- code/game/objects/items.dm | 2 +- code/game/objects/items/devices/scanners.dm | 2 +- .../items/weapons/implants/implantchair.dm | 2 +- code/game/objects/structures/grille.dm | 2 +- code/game/objects/structures/window.dm | 2 +- code/game/verbs/suicide.dm | 19 -- code/modules/admin/topic.dm | 2 +- code/modules/awaymissions/corpse.dm | 4 +- code/modules/events/anomaly_pyro.dm | 2 +- .../kitchen machinery/processor.dm | 4 +- .../living/carbon/alien/humanoid/humanoid.dm | 2 +- .../mob/living/carbon/alien/larva/larva.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 28 --- .../mob/living/carbon/carbon_defense.dm | 2 +- code/modules/mob/living/carbon/death.dm | 1 - .../mob/living/carbon/human/human_defense.dm | 2 +- .../mob/living/carbon/human/species_types.dm | 2 +- .../mob/living/carbon/monkey/monkey.dm | 2 +- .../mob/living/carbon/slime/examine.dm | 31 --- code/modules/mob/living/carbon/slime/login.dm | 4 - .../mob/living/carbon/slime/update_icons.dm | 4 - code/modules/mob/living/death.dm | 1 + code/modules/mob/living/living.dm | 29 ++- code/modules/mob/living/living_defense.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 2 +- .../living/simple_animal/friendly/slime.dm | 35 --- .../mob/living/simple_animal/simple_animal.dm | 8 +- .../{carbon => simple_animal}/slime/death.dm | 6 +- .../{carbon => simple_animal}/slime/emote.dm | 2 +- .../{carbon => simple_animal}/slime/life.dm | 44 ++-- .../mob/living/simple_animal/slime/login.dm | 4 + .../{carbon => simple_animal}/slime/powers.dm | 20 +- .../{carbon => simple_animal}/slime/say.dm | 6 +- .../{carbon => simple_animal}/slime/slime.dm | 207 +++++++++++------- .../slime/subtypes.dm | 2 +- .../simple_animal/slime/update_icons.dm | 4 + code/modules/mob/mob_helpers.dm | 2 +- code/modules/mob/transform_procs.dm | 6 +- code/modules/projectiles/projectile/magic.dm | 4 +- .../Chemistry-Reagents/Chemistry-Reagents.dm | 4 +- .../Consumable-Reagents/Food-Reagents.dm | 14 +- code/modules/reagents/Chemistry-Recipes.dm | 4 +- code/modules/surgery/core_removal.dm | 4 +- tgstation.dme | 20 +- 56 files changed, 265 insertions(+), 314 deletions(-) delete mode 100644 code/modules/mob/living/carbon/slime/examine.dm delete mode 100644 code/modules/mob/living/carbon/slime/login.dm delete mode 100644 code/modules/mob/living/carbon/slime/update_icons.dm delete mode 100644 code/modules/mob/living/simple_animal/friendly/slime.dm rename code/modules/mob/living/{carbon => simple_animal}/slime/death.dm (75%) rename code/modules/mob/living/{carbon => simple_animal}/slime/emote.dm (97%) rename code/modules/mob/living/{carbon => simple_animal}/slime/life.dm (90%) create mode 100644 code/modules/mob/living/simple_animal/slime/login.dm rename code/modules/mob/living/{carbon => simple_animal}/slime/powers.dm (90%) rename code/modules/mob/living/{carbon => simple_animal}/slime/say.dm (65%) rename code/modules/mob/living/{carbon => simple_animal}/slime/slime.dm (82%) rename code/modules/mob/living/{carbon => simple_animal}/slime/subtypes.dm (95%) create mode 100644 code/modules/mob/living/simple_animal/slime/update_icons.dm diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index d54c10c66f8..e4cf985977c 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -5148,7 +5148,7 @@ "bVf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bVg" = (/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bVh" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) -"bVi" = (/mob/living/carbon/slime,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bVi" = (/mob/living/simple_animal/slime,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bVj" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/turf/simulated/floor/engine,/area/toxins/xenobiology) "bVk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/turf/simulated/floor/engine,/area/toxins/xenobiology) "bVl" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab) @@ -6468,7 +6468,7 @@ "cuA" = (/obj/structure/sign/directions/medical{dir = 4; icon_state = "direction_med"; pixel_x = 32; pixel_y = -24; tag = "icon-direction_med (EAST)"},/obj/structure/sign/directions/science{dir = 4; icon_state = "direction_sci"; pixel_x = 32; pixel_y = -32; tag = "icon-direction_sci (EAST)"},/obj/structure/sign/directions/engineering{pixel_x = 32; pixel_y = -40},/turf/simulated/floor/plasteel,/area/hallway/primary/central) "cuB" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/sign/directions/engineering{pixel_x = -32; pixel_y = -40},/obj/structure/sign/directions/medical{dir = 4; icon_state = "direction_med"; pixel_x = -32; pixel_y = -24; tag = "icon-direction_med (EAST)"},/obj/structure/sign/directions/evac{dir = 4; icon_state = "direction_evac"; pixel_x = -32; pixel_y = -32; tag = "icon-direction_evac (EAST)"},/turf/simulated/floor/plasteel,/area/hallway/primary/central) "cuD" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/camera{c_tag = "Custodial Closet"},/obj/structure/stool/bed/chair/janicart,/turf/simulated/floor/plasteel,/area/janitor) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index f3b61f94ba4..3abd1211ee4 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -506,7 +506,7 @@ Turf and target are seperate in case you want to teleport some distance from a t moblist.Add(M) for(var/mob/living/carbon/monkey/M in sortmob) moblist.Add(M) - for(var/mob/living/carbon/slime/M in sortmob) + for(var/mob/living/simple_animal/slime/M in sortmob) moblist.Add(M) for(var/mob/living/simple_animal/M in sortmob) moblist.Add(M) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index b6060e3d3f7..515f0368ec6 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -117,11 +117,11 @@ Slimes Nothing happening here */ -/mob/living/carbon/slime/UnarmedAttack(var/atom/A) +/mob/living/simple_animal/slime/UnarmedAttack(var/atom/A) A.attack_slime(src) /atom/proc/attack_slime(mob/user as mob) return -/mob/living/carbon/slime/RestrainedClickOn(var/atom/A) +/mob/living/simple_animal/slime/RestrainedClickOn(var/atom/A) return /* diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index 2aaea111eb1..c8eda50e5a4 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -189,7 +189,7 @@ stage3 = list("Your limbs are getting oozy.", "Your skin begins to peel away.") stage4 = list("You are turning into a slime.") stage5 = list("You have become a slime.") - new_form = /mob/living/carbon/slime + new_form = /mob/living/simple_animal/slime /datum/disease/transformation/slime/stage_act() ..() diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 9f8acdd9c52..761bff2ca6c 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1334,7 +1334,7 @@ ..() //slime -/mob/living/carbon/slime/mind_initialize() +/mob/living/simple_animal/slime/mind_initialize() ..() mind.special_role = "slime" mind.assigned_role = "slime" diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm index 73be97cc324..814bf42382a 100644 --- a/code/game/machinery/computer/shuttle.dm +++ b/code/game/machinery/computer/shuttle.dm @@ -92,7 +92,7 @@ else if(istype(A, /mob/living)) // You Shall Not Pass! var/mob/living/M = A - if(!M.lying && !istype(M, /mob/living/carbon/monkey) && !istype(M, /mob/living/carbon/slime)) //If your not laying down, or a small creature, no pass. + if(!M.lying && !istype(M, /mob/living/carbon/monkey) && !istype(M, /mob/living/simple_animal/slime)) //If your not laying down, or a small creature, no pass. return 0 return ..() diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index d9a02cecbfa..8880b6eafdd 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -233,7 +233,7 @@ attack_generic(M, M.melee_damage_upper) -/obj/machinery/door/window/attack_slime(mob/living/carbon/slime/user as mob) +/obj/machinery/door/window/attack_slime(mob/living/simple_animal/slime/user as mob) user.do_attack_animation(src) if(!user.is_adult) return diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index 829af0c35d1..b7ebd4314ac 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -75,7 +75,7 @@ var/list/humans = typesof(/mob/living/carbon/human, /mob/living/carbon/brain) var/list/monkeys = typesof(/mob/living/carbon/monkey) var/list/silicons = typesof(/mob/living/silicon) - var/list/slimes = typesof(/mob/living/carbon/slime) + var/list/slimes = typesof(/mob/living/simple_animal/slime) var/list/animals = typesof(/mob/living/simple_animal) if(mobtype in humans) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index fb01666acf5..e4dd14fd485 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -47,7 +47,7 @@ if(occupant) occupant_message("The sleeper is already occupied") return - for(var/mob/living/carbon/slime/M in range(1,target)) + for(var/mob/living/simple_animal/slime/M in range(1,target)) if(M.Victim == target) occupant_message("[target] will not fit into the sleeper because they have a slime latched onto their head.") return diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 3594f1d0e4a..4c768ff6722 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -947,7 +947,7 @@ obj/mecha/proc/can_use(mob/user) user << "Access denied." src.log_append_to_last("Permission denied.") return - for(var/mob/living/carbon/slime/S in range(1,user)) + for(var/mob/living/simple_animal/slime/S in range(1,user)) if(S.Victim == user) user << "You're too busy getting your life sucked out of you." return diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 78933650b03..6fa7f816840 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -34,7 +34,7 @@ if(!can_buckle || !istype(M) || (M.loc != loc) || M.buckled || (buckle_requires_restraints && !M.restrained())) return 0 - if (istype(M, /mob/living/carbon/slime) || istype(M, /mob/living/simple_animal/slime)) + if (istype(M, /mob/living/simple_animal/slime) || istype(M, /mob/living/simple_animal/slime)) return 0 M.buckled = src diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index cf8461e8b75..d5b7dc79037 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -328,7 +328,7 @@ user << "You're going to need to remove that mask/helmet/glasses first." return - if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))//Aliens don't have eyes./N slimes also don't have eyes! + if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/simple_animal/slime))//Aliens don't have eyes./N slimes also don't have eyes! user << "You cannot locate any eyes on this creature!" return diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 833cf976128..73f8efae0f3 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -381,7 +381,7 @@ MASS SPECTROMETER if (!isslime(M)) user.show_message("This device can only scan slimes!", 1) return - var/mob/living/carbon/slime/T = M + var/mob/living/simple_animal/slime/T = M user.show_message("Slime scan results:", 1) user.show_message(text("[T.colour] [] slime", T.is_adult ? "adult" : "baby"), 1) user.show_message(text("Nutrition: [T.nutrition]/[]", T.get_max_nutrition()), 1) diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index 8b31a4f662a..dbee45843d5 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -77,7 +77,7 @@ if(istype(G, /obj/item/weapon/grab)) if(!ismob(G:affecting)) return - for(var/mob/living/carbon/slime/M in range(1,G:affecting)) + for(var/mob/living/simple_animal/slime/M in range(1,G:affecting)) if(M.Victim == G:affecting) usr << "[G:affecting:name] will not fit into the [src.name] because they have a slime latched onto their head." return diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 211b3ec3491..03df21e80a9 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -63,7 +63,7 @@ healthcheck() return -/obj/structure/grille/attack_slime(mob/living/carbon/slime/user as mob) +/obj/structure/grille/attack_slime(mob/living/simple_animal/slime/user as mob) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) if(!user.is_adult) return diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index a38bcadf6e0..42be0f87cec 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -172,7 +172,7 @@ attack_generic(M, M.melee_damage_upper) update_nearby_icons() -/obj/structure/window/attack_slime(mob/living/carbon/slime/user as mob) +/obj/structure/window/attack_slime(mob/living/simple_animal/slime/user as mob) user.do_attack_animation(src) if(!user.is_adult) return diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index f743889fcf9..7fc2486a184 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -150,25 +150,6 @@ adjustOxyLoss(max(175 - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) updatehealth() - -/mob/living/carbon/slime/verb/suicide() - set hidden = 1 - if(!canSuicide()) - return - var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") - if(!canSuicide()) - return - if(confirm == "Yes") - suiciding = 1 - visible_message("[src] is growing dull and lifeless. It looks like it's lost the will to live.", \ - "[src] is growing dull and lifeless. It looks like it's lost the will to live.") - setOxyLoss(100) - adjustBruteLoss(100 - getBruteLoss()) - setToxLoss(100) - setCloneLoss(100) - - updatehealth() - /mob/living/simple_animal/verb/suicide() set hidden = 1 if(!canSuicide()) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index ddb5f5c3868..b5c694343eb 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -250,7 +250,7 @@ if("sentinel") M.change_mob_type( /mob/living/carbon/alien/humanoid/sentinel , null, null, delmob ) if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob ) if("human") M.change_mob_type( /mob/living/carbon/human , null, null, delmob ) - if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob ) + if("slime") M.change_mob_type( /mob/living/simple_animal/slime , null, null, delmob ) if("monkey") M.change_mob_type( /mob/living/carbon/monkey , null, null, delmob ) if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob ) if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob ) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 703962ae3ba..59693e1ce0e 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -105,10 +105,10 @@ icon_state = "grey baby slime" //sets the icon in the map editor /obj/effect/landmark/corpse/slimeCorpse/createCorpse() //proc creates a dead slime - var/A = locate(/mob/living/carbon/slime/) in loc //variable A looks for a slime at the location of the landmark + var/A = locate(/mob/living/simple_animal/slime/) in loc //variable A looks for a slime at the location of the landmark if(A) //if variable A is true return //stop executing the proc - var/mob/living/carbon/slime/M = new(src.loc) //variable M is a new slime at the location of the landmark + var/mob/living/simple_animal/slime/M = new(src.loc) //variable M is a new slime at the location of the landmark M.colour = src.mobcolour //slime colour is set by landmark's mobcolour var M.adjustToxLoss(9001) //kills the slime, death() doesn't update its icon correctly qdel(src) diff --git a/code/modules/events/anomaly_pyro.dm b/code/modules/events/anomaly_pyro.dm index 237e59a1d48..9f5feea38e1 100644 --- a/code/modules/events/anomaly_pyro.dm +++ b/code/modules/events/anomaly_pyro.dm @@ -30,7 +30,7 @@ if(newAnomaly.loc) explosion(get_turf(newAnomaly), -1,0,3, flame_range = 4) - var/mob/living/carbon/slime/S = new/mob/living/carbon/slime(get_turf(newAnomaly)) + var/mob/living/simple_animal/slime/S = new/mob/living/simple_animal/slime(get_turf(newAnomaly)) S.colour = pick("red", "orange") qdel(newAnomaly) \ No newline at end of file diff --git a/code/modules/food&drinks/kitchen machinery/processor.dm b/code/modules/food&drinks/kitchen machinery/processor.dm index 1a3be0f8587..f34053de43c 100644 --- a/code/modules/food&drinks/kitchen machinery/processor.dm +++ b/code/modules/food&drinks/kitchen machinery/processor.dm @@ -53,7 +53,7 @@ /datum/food_processor_process/mob/slime/process(loc, what) - var/mob/living/carbon/slime/S = what + var/mob/living/simple_animal/slime/S = what var/C = S.cores if(S.stat != DEAD) S.loc = loc @@ -64,7 +64,7 @@ feedback_add_details("slime_core_harvested","[replacetext(S.colour," ","_")]") ..() -/datum/food_processor_process/mob/slime/input = /mob/living/carbon/slime +/datum/food_processor_process/mob/slime/input = /mob/living/simple_animal/slime /datum/food_processor_process/mob/slime/output = null /datum/food_processor_process/mob/monkey/process(loc, what) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 50f8ed4b4a1..39228e2eaac 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -28,7 +28,7 @@ if(l_store) l_store.emp_act(severity) ..() -/mob/living/carbon/alien/humanoid/attack_slime(mob/living/carbon/slime/M as mob) +/mob/living/carbon/alien/humanoid/attack_slime(mob/living/simple_animal/slime/M as mob) ..() var/damage = rand(5, 35) if(M.is_adult) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 6bdcbb4307d..59116a12a28 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -38,7 +38,7 @@ /mob/living/carbon/alien/larva/attack_ui(slot_id) return -/mob/living/carbon/alien/larva/attack_slime(mob/living/carbon/slime/M as mob) +/mob/living/carbon/alien/larva/attack_slime(mob/living/simple_animal/slime/M as mob) ..() var/damage = rand(5, 35) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index a9b1f519542..9223abf649b 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -276,34 +276,6 @@ legcuffed = null update_inv_legcuffed(0) - -/mob/living/carbon/proc/get_temperature(var/datum/gas_mixture/environment) - var/loc_temp = T0C - if(istype(loc, /obj/mecha)) - var/obj/mecha/M = loc - loc_temp = M.return_temperature() - - else if(istype(loc, /obj/structure/transit_tube_pod)) - loc_temp = environment.temperature - - else if(istype(get_turf(src), /turf/space)) - var/turf/heat_turf = get_turf(src) - loc_temp = heat_turf.temperature - - else if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) - var/obj/machinery/atmospherics/unary/cryo_cell/C = loc - - if(C.air_contents.total_moles() < 10) - loc_temp = environment.temperature - else - loc_temp = C.air_contents.temperature - - else - loc_temp = environment.temperature - - return loc_temp - - /mob/living/carbon/show_inv(mob/user) user.set_machine(src) var/dat = {" diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 6e6516ccd0f..d2741d8ffea 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -65,7 +65,7 @@ return 0 -/mob/living/carbon/attack_slime(mob/living/carbon/slime/M) +/mob/living/carbon/attack_slime(mob/living/simple_animal/slime/M) if(..()) var/power = M.powerlevel + rand(0,3) Weaken(power) diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index 7994f95978a..2cef64b3c89 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -1,5 +1,4 @@ /mob/living/carbon/death(gibbed) - eye_blind = max(eye_blind, 1) silent = 0 med_hud_set_health() med_hud_set_status() diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 0748e9d3747..2806784e41c 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -398,7 +398,7 @@ emp_act updatehealth() -/mob/living/carbon/human/attack_slime(mob/living/carbon/slime/M as mob) +/mob/living/carbon/human/attack_slime(mob/living/simple_animal/slime/M as mob) ..() var/damage = rand(1, 3) diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index f88fde9ee1b..1d1de70648c 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -157,7 +157,7 @@ specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD) hair_color = "mutcolor" hair_alpha = 150 - ignored_by = list(/mob/living/carbon/slime) + ignored_by = list(/mob/living/simple_animal/slime) meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/slime exotic_blood = /datum/reagent/toxin/slimejelly var/recently_changed = 1 diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 6519cd2b39a..233a8872a21 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -159,7 +159,7 @@ updatehealth() -/mob/living/carbon/monkey/attack_slime(mob/living/carbon/slime/M as mob) +/mob/living/carbon/monkey/attack_slime(mob/living/simple_animal/slime/M as mob) ..() var/damage = rand(1, 3) diff --git a/code/modules/mob/living/carbon/slime/examine.dm b/code/modules/mob/living/carbon/slime/examine.dm deleted file mode 100644 index 609addde9f5..00000000000 --- a/code/modules/mob/living/carbon/slime/examine.dm +++ /dev/null @@ -1,31 +0,0 @@ -/mob/living/carbon/slime/examine(mob/user) - - var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" - if (src.stat == DEAD) - msg += "It is limp and unresponsive.\n" - else - if (src.getBruteLoss()) - msg += "" - if (src.getBruteLoss() < 40) - msg += "It has some punctures in its flesh!" - else - msg += "It has severe punctures and tears in its flesh!" - msg += "\n" - - switch(powerlevel) - - if(2 to 3) - msg += "It is flickering gently with a little electrical activity.\n" - - if(4 to 5) - msg += "It is glowing gently with moderate levels of electrical activity.\n" - - if(6 to 9) - msg += "It is glowing brightly with high levels of electrical activity.\n" - - if(10) - msg += "It is radiating with massive levels of electrical activity!\n" - - msg += "*---------*" - user << msg - return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/slime/login.dm b/code/modules/mob/living/carbon/slime/login.dm deleted file mode 100644 index d3ac320f2f4..00000000000 --- a/code/modules/mob/living/carbon/slime/login.dm +++ /dev/null @@ -1,4 +0,0 @@ -/mob/living/carbon/slime/Login() - ..() - update_hud() - return diff --git a/code/modules/mob/living/carbon/slime/update_icons.dm b/code/modules/mob/living/carbon/slime/update_icons.dm deleted file mode 100644 index 3edf65b6f83..00000000000 --- a/code/modules/mob/living/carbon/slime/update_icons.dm +++ /dev/null @@ -1,4 +0,0 @@ -//no special icon processing - -/mob/living/carbon/slime/update_transform() //They're slimes, they don't lie down. - return \ No newline at end of file diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 9b0accbe230..a41939c595d 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -32,6 +32,7 @@ flick(flick_name, animate) /mob/living/death(gibbed) + eye_blind = max(eye_blind, 1) timeofdeath = world.time living_mob_list -= src diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 66350b14641..13de3a36afa 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -96,7 +96,7 @@ Sorry Giacom. Please don't be mad :( M.loc = oldloc M.LAssailant = src - for(var/mob/living/carbon/slime/slime in view(1,M)) + for(var/mob/living/simple_animal/slime/slime in view(1,M)) if(slime.Victim == M) slime.UpdateFeed() @@ -546,7 +546,7 @@ Sorry Giacom. Please don't be mad :( s_active.close(src) if(update_slimes) - for(var/mob/living/carbon/slime/M in view(1,src)) + for(var/mob/living/simple_animal/slime/M in view(1,src)) M.UpdateFeed(src) /mob/living/proc/makeTrail(var/turf/T, var/mob/living/M) @@ -866,3 +866,28 @@ Sorry Giacom. Please don't be mad :( animate(pixel_x = initial(pixel_x) , pixel_y = initial(pixel_y) , time = 2) floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure to restart it in next life(). +/mob/living/proc/get_temperature(var/datum/gas_mixture/environment) + var/loc_temp = T0C + if(istype(loc, /obj/mecha)) + var/obj/mecha/M = loc + loc_temp = M.return_temperature() + + else if(istype(loc, /obj/structure/transit_tube_pod)) + loc_temp = environment.temperature + + else if(istype(get_turf(src), /turf/space)) + var/turf/heat_turf = get_turf(src) + loc_temp = heat_turf.temperature + + else if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) + var/obj/machinery/atmospherics/unary/cryo_cell/C = loc + + if(C.air_contents.total_moles() < 10) + loc_temp = environment.temperature + else + loc_temp = C.air_contents.temperature + + else + loc_temp = environment.temperature + + return loc_temp \ No newline at end of file diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 812d9705c4f..01a9c8b3efa 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -162,7 +162,7 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I) visible_message("[user] has grabbed [src] passively!") -/mob/living/attack_slime(mob/living/carbon/slime/M as mob) +/mob/living/attack_slime(mob/living/simple_animal/slime/M as mob) if (!ticker) M << "You cannot attack people before the game has started." return diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 1b3b9fbe187..05ba0479602 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -783,6 +783,6 @@ var/list/ai_list = list() set_autosay() -/mob/living/silicon/ai/attack_slime(mob/living/carbon/slime/user) +/mob/living/silicon/ai/attack_slime(mob/living/simple_animal/slime/user) return diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 9b0ada14b2b..ec825b9cc30 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -636,7 +636,7 @@ -/mob/living/silicon/robot/attack_slime(mob/living/carbon/slime/M as mob) +/mob/living/silicon/robot/attack_slime(mob/living/simple_animal/slime/M as mob) if(..()) //successful slime shock flick("noise", flash) var/stunprob = M.powerlevel * 7 + 10 diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm deleted file mode 100644 index eed4bc24848..00000000000 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ /dev/null @@ -1,35 +0,0 @@ -/mob/living/simple_animal/slime - name = "pet slime" - desc = "A lovable, domesticated slime." - icon = 'icons/mob/slimes.dmi' - icon_state = "grey baby slime" - icon_living = "grey baby slime" - icon_dead = "grey baby slime dead" - speak_emote = list("chirps") - health = 100 - maxHealth = 100 - response_help = "pets" - response_disarm = "shoos" - response_harm = "stomps on" - emote_see = list("jiggles", "bounces in place") - ventcrawler = 2 - var/colour = "grey" - -/mob/living/simple_animal/slime/adult - health = 200 - maxHealth = 200 - icon_state = "grey adult slime" - icon_living = "grey adult slime" - -/mob/living/simple_animal/slime/adult/New() - ..() - overlays += "aslime-:33" - -/mob/living/simple_animal/slime/adult/death(gibbed) - for(var/i = 0, i<=1, i++) - var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc) - S1.icon_state = "[colour] baby slime" - S1.icon_living = "[colour] baby slime" - S1.icon_dead = "[colour] baby slime dead" - S1.colour = "[colour]" - qdel(src) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 85c019a9b0a..ab1601b2bd2 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -148,13 +148,13 @@ emote("me", 2, pick(emote_hear)) -/mob/living/simple_animal/handle_environment() +/mob/living/simple_animal/handle_environment(datum/gas_mixture/environment) var/atmos_suitable = 1 var/atom/A = src.loc if(isturf(A)) var/turf/T = A - var/areatemp = T.temperature + var/areatemp = get_temperature(environment) if( abs(areatemp - bodytemperature) > 40 ) var/diff = areatemp - bodytemperature diff = diff / 5 @@ -266,7 +266,7 @@ adjustBruteLoss(harm_intent_damage) add_logs(M, src, "attacked", admin=0) updatehealth() - return + return 1 /mob/living/simple_animal/attack_paw(mob/living/carbon/monkey/M as mob) if(..()) //successful monkey bite. @@ -297,7 +297,7 @@ L.amount_grown = min(L.amount_grown + damage, L.max_grown) attack_threshold_check(damage) -/mob/living/simple_animal/attack_slime(mob/living/carbon/slime/M as mob) +/mob/living/simple_animal/attack_slime(mob/living/simple_animal/slime/M as mob) ..() var/damage = rand(1, 3) diff --git a/code/modules/mob/living/carbon/slime/death.dm b/code/modules/mob/living/simple_animal/slime/death.dm similarity index 75% rename from code/modules/mob/living/carbon/slime/death.dm rename to code/modules/mob/living/simple_animal/slime/death.dm index ecf01af344b..894479322e4 100644 --- a/code/modules/mob/living/carbon/slime/death.dm +++ b/code/modules/mob/living/simple_animal/slime/death.dm @@ -1,9 +1,9 @@ -/mob/living/carbon/slime/death(gibbed) +/mob/living/simple_animal/slime/death(gibbed) if(stat == DEAD) return if(!gibbed) if(is_adult) - var/mob/living/carbon/slime/M = new /mob/living/carbon/slime(loc) + var/mob/living/simple_animal/slime/M = new /mob/living/simple_animal/slime(loc) M.colour = colour M.rabid = 1 is_adult = 0 @@ -28,6 +28,6 @@ return ..(gibbed) -/mob/living/carbon/slime/gib() +/mob/living/simple_animal/slime/gib() death(1) qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/slime/emote.dm b/code/modules/mob/living/simple_animal/slime/emote.dm similarity index 97% rename from code/modules/mob/living/carbon/slime/emote.dm rename to code/modules/mob/living/simple_animal/slime/emote.dm index d8d70595333..99c52b326ff 100644 --- a/code/modules/mob/living/carbon/slime/emote.dm +++ b/code/modules/mob/living/simple_animal/slime/emote.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/slime/emote(var/act) +/mob/living/simple_animal/slime/emote(var/act) if (findtext(act, "-", 1, null)) diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm similarity index 90% rename from code/modules/mob/living/carbon/slime/life.dm rename to code/modules/mob/living/simple_animal/slime/life.dm index f15fd5196a7..76217699b78 100644 --- a/code/modules/mob/living/carbon/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -1,11 +1,11 @@ -/mob/living/carbon/slime +/mob/living/simple_animal/slime var/AIproc = 0 // determines if the AI loop is activated var/Atkcool = 0 // attack cooldown var/Tempstun = 0 // temporary temperature stuns var/Discipline = 0 // if a slime has been hit with a freeze gun, or wrestled/attacked off a human, they become disciplined and don't attack anymore for a while var/SStun = 0 // stun variable -/mob/living/carbon/slime/Life() +/mob/living/simple_animal/slime/Life() set invisibility = 0 set background = BACKGROUND_ENABLED @@ -17,10 +17,10 @@ if (!ckey) handle_speech_and_mood() -/mob/living/carbon/slime/handle_breathing() +/mob/living/simple_animal/slime/handle_breathing() return -/mob/living/carbon/slime/proc/AIprocess() // the master AI process +/mob/living/simple_animal/slime/proc/AIprocess() // the master AI process if(AIproc || stat == DEAD || client) return @@ -45,7 +45,7 @@ break if(Target) - for(var/mob/living/carbon/slime/M in view(1,Target)) + for(var/mob/living/simple_animal/slime/M in view(1,Target)) if(M.Victim == Target) Target = null AIproc = 0 @@ -99,7 +99,7 @@ AIproc = 0 -/mob/living/carbon/slime/handle_environment(datum/gas_mixture/environment) +/mob/living/simple_animal/slime/handle_environment(datum/gas_mixture/environment) if(!environment) adjustToxLoss(rand(10,20)) return @@ -131,7 +131,7 @@ return //TODO: DEFERRED -/mob/living/carbon/slime/proc/adjust_body_temperature(current, loc_temp, boost) +/mob/living/simple_animal/slime/proc/adjust_body_temperature(current, loc_temp, boost) var/temperature = current var/difference = abs(current-loc_temp) //get difference var/increments// = difference/10 //find how many increments apart they are @@ -148,7 +148,7 @@ temp_change = (temperature - current) return temp_change -/mob/living/carbon/slime/handle_chemicals_in_body() +/mob/living/simple_animal/slime/handle_chemicals_in_body() if(reagents) reagents.metabolize(src) @@ -163,13 +163,13 @@ return //TODO: DEFERRED -/mob/living/carbon/slime/handle_mutations_and_radiation() +/mob/living/simple_animal/slime/handle_mutations_and_radiation() return -/mob/living/carbon/slime/handle_regular_hud_updates() +/mob/living/simple_animal/slime/handle_regular_hud_updates() return -/mob/living/carbon/slime/handle_regular_status_updates() +/mob/living/simple_animal/slime/handle_regular_status_updates() if(is_adult) health = 200 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) @@ -232,7 +232,7 @@ return 1 -/mob/living/carbon/slime/proc/handle_nutrition() +/mob/living/simple_animal/slime/proc/handle_nutrition() if(prob(15)) nutrition -= 1 + is_adult @@ -252,7 +252,7 @@ else Evolve() -/mob/living/carbon/slime/proc/add_nutrition(var/nutrition_to_add = 0, var/lastnut = 0) +/mob/living/simple_animal/slime/proc/add_nutrition(var/nutrition_to_add = 0, var/lastnut = 0) nutrition = min((nutrition + nutrition_to_add), get_max_nutrition()) if(nutrition >= (lastnut + 50)) if(prob(80)) @@ -264,7 +264,7 @@ -/mob/living/carbon/slime/proc/handle_targets() +/mob/living/simple_animal/slime/proc/handle_targets() if(Tempstun) if(!Victim) // not while they're eating! canmove = 0 @@ -332,7 +332,7 @@ if(!L.canmove) // Only one slime can latch on at a time. var/notarget = 0 - for(var/mob/living/carbon/slime/M in view(1,L)) + for(var/mob/living/simple_animal/slime/M in view(1,L)) if(M.Victim == L) notarget = 1 if(notarget) @@ -381,7 +381,7 @@ spawn() AIprocess() -/mob/living/carbon/slime/proc/handle_speech_and_mood() +/mob/living/simple_animal/slime/proc/handle_speech_and_mood() //Mood starts here var/newmood = "" if (rabid || attacked) newmood = "angry" @@ -538,23 +538,23 @@ phrases += "[M]... feed me..." say (pick(phrases)) -/mob/living/carbon/slime/proc/get_max_nutrition() // Can't go above it +/mob/living/simple_animal/slime/proc/get_max_nutrition() // Can't go above it if (is_adult) return 1200 else return 1000 -/mob/living/carbon/slime/proc/get_grow_nutrition() // Above it we grow, below it we can eat +/mob/living/simple_animal/slime/proc/get_grow_nutrition() // Above it we grow, below it we can eat if (is_adult) return 1000 else return 800 -/mob/living/carbon/slime/proc/get_hunger_nutrition() // Below it we will always eat +/mob/living/simple_animal/slime/proc/get_hunger_nutrition() // Below it we will always eat if (is_adult) return 600 else return 500 -/mob/living/carbon/slime/proc/get_starve_nutrition() // Below it we will eat before everything else - if (is_adult) return 300 +/mob/living/simple_animal/slime/proc/get_starve_nutrition() // Below it we will eat before everything else + if(is_adult) return 300 else return 200 -/mob/living/carbon/slime/proc/will_hunt(var/hunger = -1) // Check for being stopped from feeding and chasing +/mob/living/simple_animal/slime/proc/will_hunt(var/hunger = -1) // Check for being stopped from feeding and chasing if (hunger == 2 || rabid || attacked) return 1 if (Leader) return 0 if (holding_still) return 0 diff --git a/code/modules/mob/living/simple_animal/slime/login.dm b/code/modules/mob/living/simple_animal/slime/login.dm new file mode 100644 index 00000000000..8fffb30ded6 --- /dev/null +++ b/code/modules/mob/living/simple_animal/slime/login.dm @@ -0,0 +1,4 @@ +/mob/living/simple_animal/slime/Login() + ..() + update_hud() + return diff --git a/code/modules/mob/living/carbon/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm similarity index 90% rename from code/modules/mob/living/carbon/slime/powers.dm rename to code/modules/mob/living/simple_animal/slime/powers.dm index ef91582c3ec..52728e3012e 100644 --- a/code/modules/mob/living/carbon/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/slime/verb/Feed() +/mob/living/simple_animal/slime/verb/Feed() set category = "Slime" set desc = "This will let you feed on any valid creature in the surrounding area. This should also be used to halt the feeding process." if(Victim) @@ -11,7 +11,7 @@ var/list/choices = list() for(var/mob/living/C in view(1,src)) - if(C!=src && !istype(C,/mob/living/carbon/slime) && Adjacent(C)) + if(C!=src && !istype(C,/mob/living/simple_animal/slime) && Adjacent(C)) choices += C var/mob/living/M = input(src,"Who do you wish to feed on?") in null|choices @@ -30,7 +30,7 @@ src << "This subject does not have a strong enough life energy..." return 0 - for(var/mob/living/carbon/slime/met in view()) + for(var/mob/living/simple_animal/slime/met in view()) if(met.Victim == M && met != src) src << "The [met.name] is already feeding on this subject..." return 0 @@ -42,7 +42,7 @@ return 1 -/mob/living/carbon/slime/proc/Feedon(var/mob/living/M) +/mob/living/simple_animal/slime/proc/Feedon(var/mob/living/M) Victim = M src.loc = M.loc canmove = 0 @@ -155,18 +155,18 @@ Victim = null -/mob/living/carbon/slime/proc/Feedstop() +/mob/living/simple_animal/slime/proc/Feedstop() if(Victim) if(Victim.client) Victim << "[src] has let go of your head!" Victim = null -/mob/living/carbon/slime/proc/UpdateFeed(var/mob/M) +/mob/living/simple_animal/slime/proc/UpdateFeed(var/mob/M) if(Victim) if(Victim == M) loc = M.loc // simple "attach to head" effect! -/mob/living/carbon/slime/verb/Evolve() +/mob/living/simple_animal/slime/verb/Evolve() set category = "Slime" set desc = "This will let you evolve from baby to adult slime." @@ -185,7 +185,7 @@ else src << "I have already evolved..." -/mob/living/carbon/slime/verb/Reproduce() +/mob/living/simple_animal/slime/verb/Reproduce() set category = "Slime" set desc = "This will make you split into four Slimes." @@ -203,7 +203,7 @@ var/new_nutrition = round(nutrition * 0.9) var/new_powerlevel = round(powerlevel / 4) for(var/i=1,i<=4,i++) - var/mob/living/carbon/slime/M = new /mob/living/carbon/slime/(loc) + var/mob/living/simple_animal/slime/M = new /mob/living/simple_animal/slime/(loc) if(prob(mutation_chance)) M.colour = slime_mutation[rand(1,4)] else @@ -215,7 +215,7 @@ babies += M feedback_add_details("slime_babies_born","slimebirth_[replacetext(M.colour," ","_")]") - var/mob/living/carbon/slime/new_slime = pick(babies) + var/mob/living/simple_animal/slime/new_slime = pick(babies) new_slime.a_intent = "harm" new_slime.languages = languages if(src.mind) diff --git a/code/modules/mob/living/carbon/slime/say.dm b/code/modules/mob/living/simple_animal/slime/say.dm similarity index 65% rename from code/modules/mob/living/carbon/slime/say.dm rename to code/modules/mob/living/simple_animal/slime/say.dm index b7049020653..d4de87b04e8 100644 --- a/code/modules/mob/living/carbon/slime/say.dm +++ b/code/modules/mob/living/simple_animal/slime/say.dm @@ -1,7 +1,7 @@ -/mob/living/carbon/slime/say(var/message) +/mob/living/simple_animal/slime/say(var/message) ..() -/mob/living/carbon/slime/say_quote(var/text) +/mob/living/simple_animal/slime/say_quote(var/text) var/ending = copytext(text, length(text)) if (ending == "?") @@ -11,7 +11,7 @@ return "telepathically chirps, \"[text]\""; -/mob/living/carbon/slime/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq) +/mob/living/simple_animal/slime/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq) if(speaker != src && !radio_freq) if (speaker in Friends) speech_buffer = list() diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm similarity index 82% rename from code/modules/mob/living/carbon/slime/slime.dm rename to code/modules/mob/living/simple_animal/slime/slime.dm index aa3af4b45ec..45b908af267 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/slime +/mob/living/simple_animal/slime name = "baby slime" icon = 'icons/mob/slimes.dmi' icon_state = "grey baby slime" @@ -9,6 +9,15 @@ languages = SLIME | HUMAN faction = list("slime") + harm_intent_damage = 5 + icon_living = "grey baby slime" + icon_dead = "grey baby slime dead" + response_help = "pets" + response_disarm = "shoos" + response_harm = "stomps on" + emote_see = list("jiggles", "bounces in place") + speak_emote = list("chirps") + layer = 5 maxHealth = 150 @@ -54,7 +63,36 @@ var/coretype = /obj/item/slime_extract/grey var/list/slime_mutation[4] -/mob/living/carbon/slime/New() +/* +/mob/living/simple_animal/slime //repath it to slime/pet??? + name = "pet slime" + desc = "A lovable, domesticated slime." + health = 100 + maxHealth = 100 + icon = 'icons/mob/slimes.dmi' +*/ + +/mob/living/simple_animal/slime/adult + health = 200 + maxHealth = 200 + icon_state = "grey adult slime" + icon_living = "grey adult slime" +/* +/mob/living/simple_animal/slime/adult/New() + ..() + overlays += "aslime-:33" + +/mob/living/simple_animal/slime/adult/death(gibbed) + for(var/i = 0, i<=1, i++) + var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc) + S1.icon_state = "[colour] baby slime" + S1.icon_living = "[colour] baby slime" + S1.icon_dead = "[colour] baby slime dead" + S1.colour = "[colour]" + qdel(src) +*/ + +/mob/living/simple_animal/slime/New() create_reagents(100) spawn (0) number = rand(1, 1000) @@ -67,14 +105,14 @@ coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]") ..() -/mob/living/carbon/slime/regenerate_icons() +/mob/living/simple_animal/slime/regenerate_icons() icon_state = "[colour] [is_adult ? "adult" : "baby"] slime" overlays.len = 0 if (mood) overlays += image('icons/mob/slimes.dmi', icon_state = "aslime-[mood]") ..() -/mob/living/carbon/slime/movement_delay() +/mob/living/simple_animal/slime/movement_delay() if (bodytemperature >= 330.23) // 135 F return -1 // slimes become supercharged at high temperatures @@ -98,7 +136,7 @@ return tally + config.slime_delay -/mob/living/carbon/slime/ObjBump(obj/O) +/mob/living/simple_animal/slime/ObjBump(obj/O) if(!client && powerlevel > 0) var/probab = 10 switch(powerlevel) @@ -117,17 +155,17 @@ spawn(45) Atkcool = 0 -/mob/living/carbon/slime/MobBump(mob/M) +/mob/living/simple_animal/slime/MobBump(mob/M) if(istype(M, /mob/living/carbon/human)) //pushing humans if(is_adult && prob(10)) //only if we're adult, and 10% of the time return 0 else return 1 -/mob/living/carbon/slime/Process_Spacemove(var/movement_dir = 0) +/mob/living/simple_animal/slime/Process_Spacemove(var/movement_dir = 0) return 2 -/mob/living/carbon/slime/Stat() +/mob/living/simple_animal/slime/Stat() ..() if(statpanel("Status")) @@ -145,20 +183,20 @@ stat(null,"Power Level: [powerlevel]") -/mob/living/carbon/slime/adjustFireLoss(amount) +/mob/living/simple_animal/slime/adjustFireLoss(amount) ..(-abs(amount)) // Heals them return -/mob/living/carbon/slime/bullet_act(var/obj/item/projectile/Proj) +/mob/living/simple_animal/slime/bullet_act(var/obj/item/projectile/Proj) attacked += 10 ..(Proj) return 0 -/mob/living/carbon/slime/emp_act(severity) +/mob/living/simple_animal/slime/emp_act(severity) powerlevel = 0 // oh no, the power! ..() -/mob/living/carbon/slime/ex_act(severity, target) +/mob/living/simple_animal/slime/ex_act(severity, target) ..() switch (severity) @@ -175,23 +213,23 @@ updatehealth() -/mob/living/carbon/slime/MouseDrop(var/atom/movable/A as mob|obj) +/mob/living/simple_animal/slime/MouseDrop(var/atom/movable/A as mob|obj) if(isliving(A) && A != src && usr == src) var/mob/living/Food = A if(Food.Adjacent(src) && !stat && Food.stat != DEAD) //messy Feedon(Food) ..() -/mob/living/carbon/slime/unEquip(obj/item/W as obj) +/mob/living/simple_animal/slime/unEquip(obj/item/W as obj) return -/mob/living/carbon/slime/start_pulling(var/atom/movable/AM) +/mob/living/simple_animal/slime/start_pulling(var/atom/movable/AM) return -/mob/living/carbon/slime/attack_ui(slot) +/mob/living/simple_animal/slime/attack_ui(slot) return -/mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M as mob) +/mob/living/simple_animal/slime/attack_slime(mob/living/simple_animal/slime/M as mob) ..() if(src.Victim) src.Victim = null @@ -208,14 +246,14 @@ M.updatehealth() return -/mob/living/carbon/slime/attack_animal(mob/living/simple_animal/M as mob) +/mob/living/simple_animal/slime/attack_animal(mob/living/simple_animal/M as mob) if(..()) var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) attacked += 10 adjustBruteLoss(damage) updatehealth() -/mob/living/carbon/slime/attack_paw(mob/living/carbon/monkey/M as mob) +/mob/living/simple_animal/slime/attack_paw(mob/living/carbon/monkey/M as mob) if(..()) //successful monkey bite. if(stat != DEAD) attacked += 10 @@ -223,7 +261,7 @@ updatehealth() return -/mob/living/carbon/slime/attack_larva(mob/living/carbon/alien/larva/L as mob) +/mob/living/simple_animal/slime/attack_larva(mob/living/carbon/alien/larva/L as mob) if(..()) //successful larva bite. var/damage = rand(1, 3) if(stat != DEAD) @@ -231,7 +269,7 @@ adjustBruteLoss(damage) updatehealth() -/mob/living/carbon/slime/attack_hulk(mob/living/carbon/human/user) +/mob/living/simple_animal/slime/attack_hulk(mob/living/carbon/human/user) if(user.a_intent == "harm") adjustBruteLoss(5) if(Victim || Target) @@ -246,7 +284,7 @@ step_away(src,user,15) -/mob/living/carbon/slime/attack_hand(mob/living/carbon/human/M as mob) +/mob/living/simple_animal/slime/attack_hand(mob/living/carbon/human/M as mob) if(Victim) if(Victim == M) if(prob(60)) @@ -270,8 +308,6 @@ anchored = 0 step_away(src,M) - return - else M.do_attack_animation(src) if(prob(30)) @@ -299,37 +335,13 @@ anchored = 0 step_away(src,M) - return - - if(..()) //To allow surgery to return properly. return - switch(M.a_intent) - if("help") - help_shake_act(M) - if("grab") - grabbedby(M) - else - M.do_attack_animation(src) - var/damage = rand(1, 9) - attacked += 10 - if (prob(90)) - playsound(loc, "punch", 25, 1, -1) - add_logs(M, src, "attacked", admin=0) - visible_message("[M] has punched [src]!", \ - "[M] has punched [src]!") - if (stat != DEAD) - adjustBruteLoss(damage) - updatehealth() - else - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message("[M] has attempted to punch [src]!") - return + if(..()) //successful attack + attacked += 10 - - -/mob/living/carbon/slime/attack_alien(mob/living/carbon/alien/humanoid/M as mob) +/mob/living/simple_animal/slime/attack_alien(mob/living/carbon/alien/humanoid/M as mob) if(..()) //if harm or disarm intent. if (M.a_intent == "harm") @@ -369,7 +381,7 @@ anchored = 0 if(prob(80) && !client) Discipline++ - if(!istype(src, /mob/living/carbon/slime)) + if(!istype(src, /mob/living/simple_animal/slime)) if(Discipline == 1) attacked = 0 @@ -393,7 +405,7 @@ updatehealth() return -/mob/living/carbon/slime/attackby(obj/item/W, mob/living/user, params) +/mob/living/simple_animal/slime/attackby(obj/item/W, mob/living/user, params) if(istype(W,/obj/item/stack/sheet/mineral/plasma)) //Let's you feed slimes plasma. if (user in Friends) ++Friends[user] @@ -464,16 +476,13 @@ canmove = 1 ..() -/mob/living/carbon/slime/restrained() +/mob/living/simple_animal/slime/restrained() return 0 -/mob/living/carbon/slime/show_inv(mob/user) +/mob/living/simple_animal/slime/show_inv(mob/user) return -/mob/living/carbon/slime/toggle_throw_mode() - return - -/mob/living/carbon/slime/proc/apply_water() +/mob/living/simple_animal/slime/proc/apply_water() adjustToxLoss(rand(15,20)) if (!client) if (Target) // Like cats @@ -495,18 +504,18 @@ var/Uses = 1 // uses before it goes inert var/enhanced = 0 //has it been enhanced before? - attackby(obj/item/O as obj, mob/user as mob) - if(istype(O, /obj/item/weapon/slimesteroid2)) - if(enhanced == 1) - user << " This extract has already been enhanced!" - return ..() - if(Uses == 0) - user << " You can't enhance a used extract!" - return ..() - user <<"You apply the enhancer. It now has triple the amount of uses." - Uses = 3 - enhanced = 1 - qdel(O) +/obj/item/slime_extract/attackby(obj/item/O as obj, mob/user as mob) + if(istype(O, /obj/item/weapon/slimesteroid2)) + if(enhanced == 1) + user << " This extract has already been enhanced!" + return ..() + if(Uses == 0) + user << " You can't enhance a used extract!" + return ..() + user <<"You apply the enhancer. It now has triple the amount of uses." + Uses = 3 + enhanced = 1 + qdel(O) /obj/item/slime_extract/New() ..() @@ -608,8 +617,8 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle19" - attack(mob/living/carbon/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime))//If target is not a slime. + attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) + if(!istype(M, /mob/living/simple_animal/slime))//If target is not a slime. user << " The potion only works on baby slimes!" return ..() if(M.is_adult) //Can't tame adults @@ -642,8 +651,8 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle19" -/obj/item/weapon/slimepotion2/attack(mob/living/carbon/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime/))//If target is not a slime. +/obj/item/weapon/slimepotion2/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) + if(!istype(M, /mob/living/simple_animal/slime/))//If target is not a slime. user << " The potion only works on slimes!" return ..() if(M.stat) @@ -674,8 +683,8 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" - attack(mob/living/carbon/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime))//If target is not a slime. + attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) + if(!istype(M, /mob/living/simple_animal/slime))//If target is not a slime. user << " The steroid only works on baby slimes!" return ..() if(M.is_adult) //Can't tame adults @@ -819,22 +828,54 @@ G << "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost." qdel(src) -/mob/living/carbon/slime/getTrail() +/mob/living/simple_animal/slime/getTrail() return null -/mob/living/carbon/slime/slip(var/s_amount, var/w_amount, var/obj/O, var/lube) +/mob/living/simple_animal/slime/slip(var/s_amount, var/w_amount, var/obj/O, var/lube) if(lube>=2) return 0 .=..() -/mob/living/carbon/slime/stripPanelUnequip(obj/item/what, mob/who) +/mob/living/simple_animal/slime/stripPanelUnequip(obj/item/what, mob/who) src << "You don't have the dexterity to do this!" return -/mob/living/carbon/slime/stripPanelEquip(obj/item/what, mob/who) +/mob/living/simple_animal/slime/stripPanelEquip(obj/item/what, mob/who) src << "You don't have the dexterity to do this!" return +/mob/living/simple_animal/slime/examine(mob/user) + + var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" + if (src.stat == DEAD) + msg += "It is limp and unresponsive.\n" + else + if (src.getBruteLoss()) + msg += "" + if (src.getBruteLoss() < 40) + msg += "It has some punctures in its flesh!" + else + msg += "It has severe punctures and tears in its flesh!" + msg += "\n" + + switch(powerlevel) + + if(2 to 3) + msg += "It is flickering gently with a little electrical activity.\n" + + if(4 to 5) + msg += "It is glowing gently with moderate levels of electrical activity.\n" + + if(6 to 9) + msg += "It is glowing brightly with high levels of electrical activity.\n" + + if(10) + msg += "It is radiating with massive levels of electrical activity!\n" + + msg += "*---------*" + user << msg + return + //////////////////////////////Old shit from metroids/RoRos, and the old cores, would not take much work to re-add them//////////////////////// @@ -904,7 +945,7 @@ src.visible_message(" The [name] pulsates and quivers!") spawn(rand(50,100)) src.visible_message(" The [name] bursts open!") - new/mob/living/carbon/slime(T) + new/mob/living/simple_animal/slime(T) qdel(src) @@ -919,4 +960,4 @@ return else ..() -*/ +*/ \ No newline at end of file diff --git a/code/modules/mob/living/carbon/slime/subtypes.dm b/code/modules/mob/living/simple_animal/slime/subtypes.dm similarity index 95% rename from code/modules/mob/living/carbon/slime/subtypes.dm rename to code/modules/mob/living/simple_animal/slime/subtypes.dm index 35d38e31a48..55a6eee734d 100644 --- a/code/modules/mob/living/carbon/slime/subtypes.dm +++ b/code/modules/mob/living/simple_animal/slime/subtypes.dm @@ -1,4 +1,4 @@ -proc/mutation_table(var/colour) +/mob/living/simple_animal/slime/proc/mutation_table(var/colour) var/list/slime_mutation[4] switch(colour) //Tier 1 diff --git a/code/modules/mob/living/simple_animal/slime/update_icons.dm b/code/modules/mob/living/simple_animal/slime/update_icons.dm new file mode 100644 index 00000000000..14525b1e8a0 --- /dev/null +++ b/code/modules/mob/living/simple_animal/slime/update_icons.dm @@ -0,0 +1,4 @@ +//no special icon processing + +/mob/living/simple_animal/slime/update_transform() //They're slimes, they don't lie down. + return \ No newline at end of file diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 6db29529209..370c070d1df 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -31,7 +31,7 @@ return 0 /proc/isslime(A) - if(istype(A, /mob/living/carbon/slime)) + if(istype(A, /mob/living/simple_animal/slime)) return 1 return 0 diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 00cbe4f88c1..e0c25efac08 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -373,18 +373,18 @@ for(var/t in organs) qdel(t) - var/mob/living/carbon/slime/new_slime + var/mob/living/simple_animal/slime/new_slime if(reproduce) var/number = pick(14;2,3,4) //reproduce (has a small chance of producing 3 or 4 offspring) var/list/babies = list() for(var/i=1,i<=number,i++) - var/mob/living/carbon/slime/M = new/mob/living/carbon/slime(loc) + var/mob/living/simple_animal/slime/M = new/mob/living/simple_animal/slime(loc) M.nutrition = round(nutrition/number) step_away(M,src) babies += M new_slime = pick(babies) else - new_slime = new /mob/living/carbon/slime(loc) + new_slime = new /mob/living/simple_animal/slime(loc) new_slime.a_intent = "harm" new_slime.key = key diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 845f914ac15..0586ab881db 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -164,9 +164,9 @@ proc/wabbajack(mob/living/M) else new_mob.languages |= HUMAN if("slime") - new_mob = new /mob/living/carbon/slime(M.loc) + new_mob = new /mob/living/simple_animal/slime(M.loc) if(prob(50)) - var/mob/living/carbon/slime/Slime = new_mob + var/mob/living/simple_animal/slime/Slime = new_mob Slime.is_adult = 1 new_mob.languages |= HUMAN if("xeno") diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm index 79a43aa5d05..5442dee8963 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm @@ -251,7 +251,7 @@ datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume) if(volume >= 10) T.MakeSlippery() - for(var/mob/living/carbon/slime/M in T) + for(var/mob/living/simple_animal/slime/M in T) M.apply_water() var/hotspot = (locate(/obj/effect/hotspot) in T) @@ -685,7 +685,7 @@ datum/reagent/space_cleaner/reaction_turf(var/turf/T, var/volume) for(var/obj/effect/decal/cleanable/C in T) qdel(C) - for(var/mob/living/carbon/slime/M in T) + for(var/mob/living/simple_animal/slime/M in T) M.adjustToxLoss(rand(5,10)) if(istype(T, /turf/simulated/floor)) var/turf/simulated/floor/F = T diff --git a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm index 994ef10178d..0fdbe462320 100644 --- a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm @@ -102,15 +102,15 @@ datum/reagent/consumable/capsaicin/on_mob_life(var/mob/living/M as mob) M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT if(holder.has_reagent("frostoil")) holder.remove_reagent("frostoil", 5) - if(istype(M, /mob/living/carbon/slime)) + if(istype(M, /mob/living/simple_animal/slime)) M.bodytemperature += rand(5,20) if(15 to 25) M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/carbon/slime)) + if(istype(M, /mob/living/simple_animal/slime)) M.bodytemperature += rand(10,20) if(25 to INFINITY) M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/carbon/slime)) + if(istype(M, /mob/living/simple_animal/slime)) M.bodytemperature += rand(15,20) data++ ..() @@ -203,17 +203,17 @@ datum/reagent/consumable/frostoil/on_mob_life(var/mob/living/M as mob) M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT if(holder.has_reagent("capsaicin")) holder.remove_reagent("capsaicin", 5) - if(istype(M, /mob/living/carbon/slime)) + if(istype(M, /mob/living/simple_animal/slime)) M.bodytemperature -= rand(5,20) if(15 to 25) M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/carbon/slime)) + if(istype(M, /mob/living/simple_animal/slime)) M.bodytemperature -= rand(10,20) if(25 to INFINITY) M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT if(prob(1)) M.emote("shiver") - if(istype(M, /mob/living/carbon/slime)) + if(istype(M, /mob/living/simple_animal/slime)) M.bodytemperature -= rand(15,20) data++ ..() @@ -221,7 +221,7 @@ datum/reagent/consumable/frostoil/on_mob_life(var/mob/living/M as mob) datum/reagent/consumable/frostoil/reaction_turf(var/turf/simulated/T, var/volume) if(volume >= 5) - for(var/mob/living/carbon/slime/M in T) + for(var/mob/living/simple_animal/slime/M in T) M.adjustToxLoss(rand(15,30)) //if(istype(T)) // T.atmos_spawn_air(SPAWN_COLD) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 2e52dc0ba70..b6028a7bedd 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -530,7 +530,7 @@ datum/chemical_reaction/pestkiller feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") for(var/mob/O in viewers(get_turf(holder.my_atom), null)) O.show_message(text("Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1) - var/mob/living/carbon/slime/S = new /mob/living/carbon/slime + var/mob/living/simple_animal/slime/S = new /mob/living/simple_animal/slime S.loc = get_turf(holder.my_atom) /datum/chemical_reaction/slimeinaprov @@ -854,7 +854,7 @@ datum/chemical_reaction/pestkiller required_other = 1 /datum/chemical_reaction/slimebloodlust/on_reaction(var/datum/reagents/holder) feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null)) + for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(holder.my_atom), null)) slime.rabid = 1 for(var/mob/O in viewers(get_turf(holder.my_atom), null)) O.show_message(text("The [slime] is driven into a frenzy!"), 1) diff --git a/code/modules/surgery/core_removal.dm b/code/modules/surgery/core_removal.dm index 0064b7d1541..2f8dff6988f 100644 --- a/code/modules/surgery/core_removal.dm +++ b/code/modules/surgery/core_removal.dm @@ -1,7 +1,7 @@ /datum/surgery/core_removal name = "core removal" steps = list(/datum/surgery_step/incise, /datum/surgery_step/incise, /datum/surgery_step/extract_core) - species = list(/mob/living/carbon/slime) + species = list(/mob/living/simple_animal/slime) target_must_be_dead = 1 @@ -14,7 +14,7 @@ user.visible_message("[user] begins to extract a core from [target].") /datum/surgery_step/extract_core/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - var/mob/living/carbon/slime/slime = target + var/mob/living/simple_animal/slime/slime = target if(slime.cores > 0) slime.cores-- user.visible_message("[user] successfully extracts a core from [target]!") diff --git a/tgstation.dme b/tgstation.dme index a923cd4885f..7ea25b17c4a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1127,16 +1127,6 @@ #include "code\modules\mob\living\carbon\monkey\monkey.dm" #include "code\modules\mob\living\carbon\monkey\say.dm" #include "code\modules\mob\living\carbon\monkey\update_icons.dm" -#include "code\modules\mob\living\carbon\slime\death.dm" -#include "code\modules\mob\living\carbon\slime\emote.dm" -#include "code\modules\mob\living\carbon\slime\examine.dm" -#include "code\modules\mob\living\carbon\slime\life.dm" -#include "code\modules\mob\living\carbon\slime\login.dm" -#include "code\modules\mob\living\carbon\slime\powers.dm" -#include "code\modules\mob\living\carbon\slime\say.dm" -#include "code\modules\mob\living\carbon\slime\slime.dm" -#include "code\modules\mob\living\carbon\slime\subtypes.dm" -#include "code\modules\mob\living\carbon\slime\update_icons.dm" #include "code\modules\mob\living\silicon\death.dm" #include "code\modules\mob\living\silicon\laws.dm" #include "code\modules\mob\living\silicon\login.dm" @@ -1188,7 +1178,6 @@ #include "code\modules\mob\living\simple_animal\friendly\lizard.dm" #include "code\modules\mob\living\simple_animal\friendly\mouse.dm" #include "code\modules\mob\living\simple_animal\friendly\pug.dm" -#include "code\modules\mob\living\simple_animal\friendly\slime.dm" #include "code\modules\mob\living\simple_animal\friendly\drone\_drone.dm" #include "code\modules\mob\living\simple_animal\friendly\drone\drones_as_items.dm" #include "code\modules\mob\living\simple_animal\friendly\drone\extra_drone_types.dm" @@ -1219,6 +1208,15 @@ #include "code\modules\mob\living\simple_animal\hostile\retaliate\bat.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm" +#include "code\modules\mob\living\simple_animal\slime\death.dm" +#include "code\modules\mob\living\simple_animal\slime\emote.dm" +#include "code\modules\mob\living\simple_animal\slime\life.dm" +#include "code\modules\mob\living\simple_animal\slime\login.dm" +#include "code\modules\mob\living\simple_animal\slime\powers.dm" +#include "code\modules\mob\living\simple_animal\slime\say.dm" +#include "code\modules\mob\living\simple_animal\slime\slime.dm" +#include "code\modules\mob\living\simple_animal\slime\subtypes.dm" +#include "code\modules\mob\living\simple_animal\slime\update_icons.dm" #include "code\modules\mob\new_player\login.dm" #include "code\modules\mob\new_player\logout.dm" #include "code\modules\mob\new_player\new_player.dm" From 5c813bfd72b530f8c2964837ada57f6d02c00e18 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Mon, 16 Mar 2015 02:19:47 +0000 Subject: [PATCH 05/65] No additional movement delay when using a jetpack in zero gravity. Remove unnecessary checks. --- .../mob/living/carbon/human/species.dm | 57 +++++++++---------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 61746a85d4e..25e55a5cbb1 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -657,40 +657,40 @@ /datum/species/proc/movement_delay(var/mob/living/carbon/human/H) var/mspeed = 0 - var/hasjetpack = 0 - if(istype(H.back, /obj/item/weapon/tank/jetpack)) - var/obj/item/weapon/tank/jetpack/J = H.back - if(J.allow_thrust(0.01, H)) - hasjetpack = 1 - var/grav = has_gravity(H) + if(!(H.status_flags & IGNORESLOWDOWN)) - if(!grav && !hasjetpack) - mspeed += 1 //Slower space without jetpack + var/hasjetpack = 0 + if(istype(H.back, /obj/item/weapon/tank/jetpack)) + var/obj/item/weapon/tank/jetpack/J = H.back + if(J.allow_thrust(0.01, H)) + hasjetpack = 1 + var/grav = has_gravity(H) - var/health_deficiency = (100 - H.health + H.staminaloss) - if(health_deficiency >= 40) - mspeed += (health_deficiency / 25) + if(grav || !hasjetpack) + if(!grav && !hasjetpack) + mspeed += 1 //Slower space without jetpack + else + var/health_deficiency = (100 - H.health + H.staminaloss) + if(health_deficiency >= 40) + mspeed += (health_deficiency / 25) - var/hungry = (500 - H.nutrition) / 5 //So overeat would be 100 and default level would be 80 - if(hungry >= 70) - mspeed += hungry / 50 + var/hungry = (500 - H.nutrition) / 5 //So overeat would be 100 and default level would be 80 + if(hungry >= 70) + mspeed += hungry / 50 - if(H.wear_suit && grav) - mspeed += H.wear_suit.slowdown - if(H.shoes && grav) - mspeed += H.shoes.slowdown - if(H.back && grav) - mspeed += H.back.slowdown + if(H.wear_suit) + mspeed += H.wear_suit.slowdown + if(H.shoes) + mspeed += H.shoes.slowdown + if(H.back) + mspeed += H.back.slowdown - if((H.disabilities & FAT) && grav) - mspeed += 1.5 - if(H.bodytemperature < 283.222) - mspeed += (283.222 - H.bodytemperature) / 10 * (grav+0.5) + if((H.disabilities & FAT)) + mspeed += 1.5 + if(H.bodytemperature < 283.222) + mspeed += (283.222 - H.bodytemperature) / 10 * (grav+0.5) - mspeed += speedmod - - if(H.status_flags & IGNORESLOWDOWN) - mspeed = 0 + mspeed += speedmod if(H.status_flags & GOTTAGOFAST) mspeed -= 1 @@ -698,7 +698,6 @@ if(H.status_flags & GOTTAGOREALLYFAST) mspeed -= 2 - return mspeed ////////////////// From 9af4972c4077b53b4ab70f3538e0dd8674501565 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Mon, 16 Mar 2015 17:49:05 +0000 Subject: [PATCH 06/65] Movement slowdowns only ignored with a jetpack. --- .../mob/living/carbon/human/species.dm | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 25e55a5cbb1..1b645b4563a 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -658,7 +658,6 @@ var/mspeed = 0 if(!(H.status_flags & IGNORESLOWDOWN)) - var/hasjetpack = 0 if(istype(H.back, /obj/item/weapon/tank/jetpack)) var/obj/item/weapon/tank/jetpack/J = H.back @@ -667,30 +666,30 @@ var/grav = has_gravity(H) if(grav || !hasjetpack) - if(!grav && !hasjetpack) + if(!grav) mspeed += 1 //Slower space without jetpack - else - var/health_deficiency = (100 - H.health + H.staminaloss) - if(health_deficiency >= 40) - mspeed += (health_deficiency / 25) - var/hungry = (500 - H.nutrition) / 5 //So overeat would be 100 and default level would be 80 - if(hungry >= 70) - mspeed += hungry / 50 + var/health_deficiency = (100 - H.health + H.staminaloss) + if(health_deficiency >= 40) + mspeed += (health_deficiency / 25) - if(H.wear_suit) - mspeed += H.wear_suit.slowdown - if(H.shoes) - mspeed += H.shoes.slowdown - if(H.back) - mspeed += H.back.slowdown + var/hungry = (500 - H.nutrition) / 5 //So overeat would be 100 and default level would be 80 + if(hungry >= 70) + mspeed += hungry / 50 - if((H.disabilities & FAT)) - mspeed += 1.5 - if(H.bodytemperature < 283.222) - mspeed += (283.222 - H.bodytemperature) / 10 * (grav+0.5) + if(H.wear_suit) + mspeed += H.wear_suit.slowdown + if(H.shoes) + mspeed += H.shoes.slowdown + if(H.back) + mspeed += H.back.slowdown - mspeed += speedmod + if((H.disabilities & FAT)) + mspeed += 1.5 + if(H.bodytemperature < 283.222) + mspeed += (283.222 - H.bodytemperature) / 10 * (grav+0.5) + + mspeed += speedmod if(H.status_flags & GOTTAGOFAST) mspeed -= 1 From a5ca0a2c415836d9ced1d7465a8a5557a626e1ef Mon Sep 17 00:00:00 2001 From: xxalpha Date: Mon, 16 Mar 2015 17:51:21 +0000 Subject: [PATCH 07/65] Changelog. --- html/changelogs/xxalpha-fasterspace.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/xxalpha-fasterspace.yml diff --git a/html/changelogs/xxalpha-fasterspace.yml b/html/changelogs/xxalpha-fasterspace.yml new file mode 100644 index 00000000000..cbbff3df300 --- /dev/null +++ b/html/changelogs/xxalpha-fasterspace.yml @@ -0,0 +1,6 @@ +author: xxalpha + +delete-after: True + +changes: + - tweak: "You will no longer be slowed down by anything if you use a jetpack in zero gravity." From 4b596b4b72d0e2b1fe563880d3d1670add77611b Mon Sep 17 00:00:00 2001 From: xxalpha Date: Mon, 16 Mar 2015 18:16:12 +0000 Subject: [PATCH 08/65] Small optimization. --- code/modules/mob/living/carbon/human/species.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 1b645b4563a..8a062045601 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -658,17 +658,17 @@ var/mspeed = 0 if(!(H.status_flags & IGNORESLOWDOWN)) - var/hasjetpack = 0 - if(istype(H.back, /obj/item/weapon/tank/jetpack)) - var/obj/item/weapon/tank/jetpack/J = H.back - if(J.allow_thrust(0.01, H)) - hasjetpack = 1 + var/grav = has_gravity(H) + var/hasjetpack = 0 + if(!grav) + if(istype(H.back, /obj/item/weapon/tank/jetpack)) + var/obj/item/weapon/tank/jetpack/J = H.back + if(J.allow_thrust(0.01, H)) + hasjetpack = 1 + mspeed = 1 - hasjetpack if(grav || !hasjetpack) - if(!grav) - mspeed += 1 //Slower space without jetpack - var/health_deficiency = (100 - H.health + H.staminaloss) if(health_deficiency >= 40) mspeed += (health_deficiency / 25) From 6f5ea7f5e74a15a6820d4fbe5214baa92852efb3 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Tue, 17 Mar 2015 18:42:29 +0000 Subject: [PATCH 09/65] Adds embedded jetpacks to hardsuits. --- .../objects/items/weapons/tanks/jetpack.dm | 60 ++++++++++++++++++- code/modules/clothing/spacesuits/hardsuit.dm | 1 + code/modules/clothing/suits/toggles.dm | 14 ++++- .../mob/living/carbon/human/human_movement.dm | 4 ++ .../mob/living/carbon/human/species.dm | 5 ++ 5 files changed, 82 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 6bb7562f847..f707edc7dc9 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -106,4 +106,62 @@ ..() ion_trail = new /datum/effect/effect/system/ion_trail_follow() ion_trail.set_up(src) - air_contents.carbon_dioxide = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) \ No newline at end of file + air_contents.carbon_dioxide = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + + +/obj/item/weapon/tank/jetpack/suit + name = "suit embedded jetpack" + desc = "A device that will use your internals tank as a gas source for propulsion." + icon_state = "jetpack-void" + item_state = "jetpack-void" + var/obj/item/weapon/tank/internals/tank = null + +/obj/item/weapon/tank/jetpack/suit/New() + ..() + SSobj.processing -= src + air_contents = null + +/obj/item/weapon/tank/jetpack/suit/toggle() + set name = "Toggle Jetpack" + set category = "Object" + + if(istype(loc.loc,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = loc.loc + + if(!H.wear_suit) + H << "You must be wearing the suit to use the embedded jetpack." + return + if(!istype(H.s_store,/obj/item/weapon/tank/internals)) + H << "You must have a tank in your suit's torage to use the embedded jetpack." + return + if(usr.stat || !usr.canmove || usr.restrained()) + return + + on = !on + if(on) + ion_trail.start() + tank = H.s_store + air_contents = tank.air_contents + SSobj.processing |= src + icon_state = "[icon_state]-on" + else + turn_off() + H << "You toggle the embedded jetpack [on? "on":"off"]." + +/obj/item/weapon/tank/jetpack/suit/proc/turn_off() + SSobj.processing -= src + ion_trail.stop() + air_contents = null + tank = null + icon_state = initial(icon_state) + on = 0 + +/obj/item/weapon/tank/jetpack/suit/process() + if(!istype(loc.loc,/mob/living/carbon/human)) + turn_off() + return + var/mob/living/carbon/human/H = loc.loc + if(!tank || tank != H.s_store) + turn_off() + return + ..() \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index c76fbd9c198..2f4fc73f3aa 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -45,6 +45,7 @@ var/obj/item/clothing/head/helmet/space/hardsuit/helmet action_button_name = "Toggle Helmet" var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit + var/obj/item/weapon/tank/jetpack/suit/jetpack = null //Atmospherics /obj/item/clothing/head/helmet/space/hardsuit/atmos diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index c9567e9c4ed..a6209bd3a68 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -80,6 +80,8 @@ /obj/item/clothing/suit/space/hardsuit/New() MakeHelmet() + jetpack = new /obj/item/weapon/tank/jetpack/suit() + jetpack.loc = src ..() /obj/item/clothing/suit/space/hardsuit/proc/MakeHelmet() @@ -136,4 +138,14 @@ else H << "You disengage the helmet on the hardsuit." playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) - RemoveHelmet() \ No newline at end of file + RemoveHelmet() + +/obj/item/clothing/suit/space/hardsuit/verb/Jetpack() + set name = "Toggle Jetpack" + set category = "Object" + jetpack.toggle() + +/obj/item/clothing/suit/space/hardsuit/verb/Jetpack_Rockets() + set name = "Toggle Jetpack Stabilization" + set category = "Object" + jetpack.toggle_rockets() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 01a14d53a6d..ae12ba0dcc8 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -15,6 +15,10 @@ var/obj/item/weapon/tank/jetpack/J = back if((movement_dir || J.stabilization_on) && J.allow_thrust(0.01, src)) return 1 + if(istype(wear_suit, /obj/item/clothing/suit/space/hardsuit) && isturf(loc)) //Second check is so you can't use a jetpack in a mech + var/obj/item/clothing/suit/space/hardsuit/C = wear_suit + if((movement_dir || C.jetpack.stabilization_on) && C.jetpack.allow_thrust(0.01, src)) + return 1 return 0 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 1db023ee37a..0de395d61ba 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -654,6 +654,11 @@ var/obj/item/weapon/tank/jetpack/J = H.back if(J.allow_thrust(0.01, H)) hasjetpack = 1 + else if(istype(H.wear_suit,/obj/item/clothing/suit/space/hardsuit)) + var/obj/item/clothing/suit/space/hardsuit/C = H.wear_suit + if(C.jetpack.allow_thrust(0.01, H)) + hasjetpack = 1 + var/grav = has_gravity(H) if(!grav && !hasjetpack) From 8fa8919e2eb3c253574ead29e70533646fe894ac Mon Sep 17 00:00:00 2001 From: xxalpha Date: Tue, 17 Mar 2015 19:41:58 +0000 Subject: [PATCH 10/65] Added a comment, removed unnecessary line. --- code/game/objects/items/weapons/tanks/jetpack.dm | 4 ++-- code/modules/clothing/suits/toggles.dm | 3 +-- code/modules/mob/living/carbon/human/species.dm | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index f707edc7dc9..201ff68bd9e 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -110,7 +110,7 @@ /obj/item/weapon/tank/jetpack/suit - name = "suit embedded jetpack" + name = "suit inbuilt jetpack" desc = "A device that will use your internals tank as a gas source for propulsion." icon_state = "jetpack-void" item_state = "jetpack-void" @@ -149,12 +149,12 @@ H << "You toggle the embedded jetpack [on? "on":"off"]." /obj/item/weapon/tank/jetpack/suit/proc/turn_off() + on = 0 SSobj.processing -= src ion_trail.stop() air_contents = null tank = null icon_state = initial(icon_state) - on = 0 /obj/item/weapon/tank/jetpack/suit/process() if(!istype(loc.loc,/mob/living/carbon/human)) diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index a6209bd3a68..a8d22c67765 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -80,8 +80,7 @@ /obj/item/clothing/suit/space/hardsuit/New() MakeHelmet() - jetpack = new /obj/item/weapon/tank/jetpack/suit() - jetpack.loc = src + jetpack = new /obj/item/weapon/tank/jetpack/suit(src) ..() /obj/item/clothing/suit/space/hardsuit/proc/MakeHelmet() diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 0de395d61ba..f2f5d6d2de1 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -654,7 +654,7 @@ var/obj/item/weapon/tank/jetpack/J = H.back if(J.allow_thrust(0.01, H)) hasjetpack = 1 - else if(istype(H.wear_suit,/obj/item/clothing/suit/space/hardsuit)) + else if(istype(H.wear_suit,/obj/item/clothing/suit/space/hardsuit)) //copypasta but faster implementation currently var/obj/item/clothing/suit/space/hardsuit/C = H.wear_suit if(C.jetpack.allow_thrust(0.01, H)) hasjetpack = 1 From edccabb0c4645a69aeaf7a175707ed5700f9e52c Mon Sep 17 00:00:00 2001 From: xxalpha Date: Wed, 18 Mar 2015 17:48:45 +0000 Subject: [PATCH 11/65] Only engineering type hardsuits have the inbuilt jetpack. --- code/game/machinery/suit_storage_unit.dm | 6 +-- .../objects/items/weapons/tanks/jetpack.dm | 6 +-- code/modules/awaymissions/corpse.dm | 2 +- code/modules/clothing/spacesuits/hardsuit.dm | 50 +++++++++++++++---- code/modules/clothing/suits/toggles.dm | 11 ---- .../mob/living/carbon/human/human_movement.dm | 4 +- .../mob/living/carbon/human/species.dm | 4 +- 7 files changed, 52 insertions(+), 31 deletions(-) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 77472452150..9b76cdb4f85 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -44,11 +44,11 @@ STORAGE_TYPE = /obj/item/weapon/tank/jetpack/oxygen /obj/machinery/suit_storage_unit/engine - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit + SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/engine MASK_TYPE = /obj/item/clothing/mask/breath /obj/machinery/suit_storage_unit/ce - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/elite + SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/engine/elite MASK_TYPE = /obj/item/clothing/mask/breath STORAGE_TYPE= /obj/item/clothing/shoes/magboots/advance @@ -61,7 +61,7 @@ MASK_TYPE = /obj/item/clothing/mask/gas/sechailer /obj/machinery/suit_storage_unit/atmos - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/atmos + SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/engine/atmos MASK_TYPE = /obj/item/clothing/mask/gas STORAGE_TYPE = /obj/item/weapon/watertank/atmos diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 201ff68bd9e..65a043fa5de 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -129,10 +129,10 @@ var/mob/living/carbon/human/H = loc.loc if(!H.wear_suit) - H << "You must be wearing the suit to use the embedded jetpack." + H << "You must be wearing the suit to use the inbuilt jetpack." return if(!istype(H.s_store,/obj/item/weapon/tank/internals)) - H << "You must have a tank in your suit's torage to use the embedded jetpack." + H << "You must have a tank in your suit's storage to use the inbuilt jetpack." return if(usr.stat || !usr.canmove || usr.restrained()) return @@ -146,7 +146,7 @@ icon_state = "[icon_state]-on" else turn_off() - H << "You toggle the embedded jetpack [on? "on":"off"]." + H << "You toggle the inbuilt jetpack [on? "on":"off"]." /obj/item/weapon/tank/jetpack/suit/proc/turn_off() on = 0 diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 703962ae3ba..bae1c5582cc 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -196,7 +196,7 @@ corpseidaccess = "Station Engineer" /obj/effect/landmark/corpse/engineer/rig - corpsesuit = /obj/item/clothing/suit/space/hardsuit + corpsesuit = /obj/item/clothing/suit/space/hardsuit/engine corpsemask = /obj/item/clothing/mask/breath /obj/effect/landmark/corpse/clown diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 2f4fc73f3aa..c626b9ff47b 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -1,6 +1,6 @@ - //Regular (engineering) hardsuits + //Baseline hardsuits /obj/item/clothing/head/helmet/space/hardsuit - name = "engineering hardsuit helmet" + name = "hardsuit helmet" desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." icon_state = "hardsuit0-engineering" item_state = "eng_helm" @@ -35,7 +35,7 @@ /obj/item/clothing/suit/space/hardsuit - name = "engineering hardsuit" + name = "hardsuit" desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding." icon_state = "hardsuit-engineering" item_state = "eng_hardsuit" @@ -45,10 +45,42 @@ var/obj/item/clothing/head/helmet/space/hardsuit/helmet action_button_name = "Toggle Helmet" var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit + + + //Engineering +/obj/item/clothing/head/helmet/space/hardsuit/engine + name = "engineering hardsuit helmet" + desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." + icon_state = "hardsuit0-engineering" + item_state = "eng_helm" + armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) + item_color = "engineering" + +/obj/item/clothing/suit/space/hardsuit/engine + name = "engineering hardsuit" + desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding." + icon_state = "hardsuit-engineering" + item_state = "eng_hardsuit" + armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine var/obj/item/weapon/tank/jetpack/suit/jetpack = null +/obj/item/clothing/suit/space/hardsuit/engine/New() + jetpack = new /obj/item/weapon/tank/jetpack/suit(src) + ..() + +/obj/item/clothing/suit/space/hardsuit/engine/verb/Jetpack() + set name = "Toggle Inbuilt Jetpack" + set category = "Object" + jetpack.toggle() + +/obj/item/clothing/suit/space/hardsuit/engine/verb/Jetpack_Rockets() + set name = "Toggle Inbuilt Jetpack Stabilization" + set category = "Object" + jetpack.toggle_rockets() + //Atmospherics -/obj/item/clothing/head/helmet/space/hardsuit/atmos +/obj/item/clothing/head/helmet/space/hardsuit/engine/atmos name = "atmospherics hardsuit helmet" desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has thermal shielding." icon_state = "hardsuit0-atmospherics" @@ -58,7 +90,7 @@ heat_protection = HEAD //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT -/obj/item/clothing/suit/space/hardsuit/atmos +/obj/item/clothing/suit/space/hardsuit/engine/atmos name = "atmospherics hardsuit" desc = "A special suit that protects against hazardous, low pressure environments. Has thermal shielding." icon_state = "hardsuit-atmospherics" @@ -66,11 +98,11 @@ armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 0) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/atmos + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/atmos //Chief Engineer's hardsuit -/obj/item/clothing/head/helmet/space/hardsuit/elite +/obj/item/clothing/head/helmet/space/hardsuit/engine/elite name = "advanced hardsuit helmet" desc = "An advanced helmet designed for work in a hazardous, low pressure environment. Shines with a high polish." icon_state = "hardsuit0-white" @@ -80,7 +112,7 @@ heat_protection = HEAD //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT -/obj/item/clothing/suit/space/hardsuit/elite +/obj/item/clothing/suit/space/hardsuit/engine/elite icon_state = "hardsuit-white" name = "advanced hardsuit" desc = "An advanced suit that protects against hazardous, low pressure environments. Shines with a high polish." @@ -88,7 +120,7 @@ armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 90) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/elite + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite //Mining hardsuit diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index a8d22c67765..1a4202e88b3 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -80,7 +80,6 @@ /obj/item/clothing/suit/space/hardsuit/New() MakeHelmet() - jetpack = new /obj/item/weapon/tank/jetpack/suit(src) ..() /obj/item/clothing/suit/space/hardsuit/proc/MakeHelmet() @@ -138,13 +137,3 @@ H << "You disengage the helmet on the hardsuit." playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) RemoveHelmet() - -/obj/item/clothing/suit/space/hardsuit/verb/Jetpack() - set name = "Toggle Jetpack" - set category = "Object" - jetpack.toggle() - -/obj/item/clothing/suit/space/hardsuit/verb/Jetpack_Rockets() - set name = "Toggle Jetpack Stabilization" - set category = "Object" - jetpack.toggle_rockets() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index ae12ba0dcc8..5e914e68242 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -15,8 +15,8 @@ var/obj/item/weapon/tank/jetpack/J = back if((movement_dir || J.stabilization_on) && J.allow_thrust(0.01, src)) return 1 - if(istype(wear_suit, /obj/item/clothing/suit/space/hardsuit) && isturf(loc)) //Second check is so you can't use a jetpack in a mech - var/obj/item/clothing/suit/space/hardsuit/C = wear_suit + if(istype(wear_suit, /obj/item/clothing/suit/space/hardsuit/engine) && isturf(loc)) //Second check is so you can't use a jetpack in a mech + var/obj/item/clothing/suit/space/hardsuit/engine/C = wear_suit if((movement_dir || C.jetpack.stabilization_on) && C.jetpack.allow_thrust(0.01, src)) return 1 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index f2f5d6d2de1..ed2c2e1d864 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -654,8 +654,8 @@ var/obj/item/weapon/tank/jetpack/J = H.back if(J.allow_thrust(0.01, H)) hasjetpack = 1 - else if(istype(H.wear_suit,/obj/item/clothing/suit/space/hardsuit)) //copypasta but faster implementation currently - var/obj/item/clothing/suit/space/hardsuit/C = H.wear_suit + else if(istype(H.wear_suit,/obj/item/clothing/suit/space/hardsuit/engine)) //copypasta but faster implementation currently + var/obj/item/clothing/suit/space/hardsuit/engine/C = H.wear_suit if(C.jetpack.allow_thrust(0.01, H)) hasjetpack = 1 From 182a3da16a0571f1afb45431a85d1f38be664968 Mon Sep 17 00:00:00 2001 From: phil235 Date: Fri, 20 Mar 2015 19:17:03 +0100 Subject: [PATCH 12/65] More work on slimes. Moving xenobiology items to modules/research/xenobiology --- .../mob/living/carbon/carbon_defense.dm | 4 +- code/modules/mob/living/carbon/human/human.dm | 22 +- code/modules/mob/living/carbon/life.dm | 2 +- .../mob/living/carbon/monkey/monkey.dm | 2 - code/modules/mob/living/life.dm | 25 +- .../mob/living/simple_animal/simple_animal.dm | 18 + .../mob/living/simple_animal/slime/death.dm | 9 +- .../mob/living/simple_animal/slime/emote.dm | 2 +- .../mob/living/simple_animal/slime/life.dm | 100 +--- .../mob/living/simple_animal/slime/slime.dm | 543 ++---------------- .../research/xenobiology/xenobiology.dm | 342 +++++++++++ tgstation.dme | 1 + 12 files changed, 453 insertions(+), 617 deletions(-) create mode 100644 code/modules/research/xenobiology/xenobiology.dm diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index d2741d8ffea..6cc72a0af26 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -13,7 +13,7 @@ /mob/living/carbon/attackby(obj/item/I, mob/user, params) - if(lying || isslime(src)) + if(lying) if(surgeries.len) if(user.a_intent == "help") for(var/datum/surgery/S in surgeries) @@ -34,7 +34,7 @@ if(D.IsSpreadByTouch()) ContractDisease(D) - if(lying || isslime(src)) + if(lying) if(user.a_intent == "help") if(surgeries.len) for(var/datum/surgery/S in surgeries) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 6e546dfaabf..1c07e08d86a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -651,19 +651,17 @@ -/mob/living/carbon/human/help_shake_act(mob/living/carbon/human/M) +/mob/living/carbon/human/help_shake_act(mob/living/carbon/M) if(!istype(M)) return - var/mob/living/carbon/human/H = src - if(health >= 0) if(src == M) visible_message( \ "[src] examines \himself.", \ "You check yourself for injuries.") - for(var/obj/item/organ/limb/org in H.organs) + for(var/obj/item/organ/limb/org in organs) var/status = "" var/brutedamage = org.brute_dam var/burndamage = org.burn_dam @@ -693,22 +691,22 @@ src << "\t [status == "OK" ? "\blue" : "\red"] My [org.getDisplayName()] is [status]." for(var/obj/item/I in org.embedded_objects) - src << "\t \red There is \a [I] embedded in your [org.getDisplayName()]!" + src << "\t \red There is \a [I] embedded in your [org.getDisplayName()]!" - if(H.blood_max) + if(blood_max) src << "You are bleeding!" if(staminaloss) if(staminaloss > 30) src << "You're completely exhausted." else src << "You feel fatigued." - if(dna && dna.species.id && dna.species.id == "skeleton" && !H.w_uniform && !H.wear_suit) - H.play_xylophone() + if(dna && dna.species.id && dna.species.id == "skeleton" && !w_uniform && !wear_suit) + play_xylophone() else - if(H.wear_suit) - H.wear_suit.add_fingerprint(M) - else if(H.w_uniform) - H.w_uniform.add_fingerprint(M) + if(wear_suit) + wear_suit.add_fingerprint(M) + else if(w_uniform) + w_uniform.add_fingerprint(M) ..() diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 974efde0342..15ffcedd6af 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -193,7 +193,7 @@ //Fourth and final link in a breath chain /mob/living/carbon/proc/handle_breath_temperature(datum/gas_mixture/breath) - + return /mob/living/carbon/proc/get_breath_from_internal(volume_needed) if(internal) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 233a8872a21..eb0c88549fd 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -138,7 +138,6 @@ if (M.a_intent == "disarm") playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) - var/damage = 5 if(prob(95)) Weaken(10) visible_message("[M] has tackled down [name]!", \ @@ -148,7 +147,6 @@ visible_message("[M] has disarmed [name]!", \ "[M] has disarmed [name]!") add_logs(M, src, "disarmed", admin=0) - adjustBruteLoss(damage) updatehealth() return diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 01d8261f293..9341e679715 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -58,31 +58,10 @@ /mob/living/proc/handle_breathing() + return /mob/living/proc/handle_mutations_and_radiation() - if(radiation) - - switch(radiation) - if(0 to 50) - radiation-- - if(prob(25)) - adjustToxLoss(1) - updatehealth() - - if(50 to 75) - radiation -= 2 - adjustToxLoss(1) - if(prob(5)) - radiation -= 5 - updatehealth() - - if(75 to 100) - radiation -= 3 - adjustToxLoss(3) - updatehealth() - - radiation = Clamp(radiation, 0, 100) - + return /mob/living/proc/handle_chemicals_in_body() if(reagents) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index ab1601b2bd2..9b02bcb3d1a 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -83,6 +83,7 @@ /mob/living/simple_animal/updatehealth() if(health > maxHealth) health = maxHealth + ..() return /mob/living/simple_animal/handle_regular_status_updates() @@ -91,6 +92,23 @@ else if(health < 1) death() + else + if(stuttering) + stuttering = 0 + + if(eye_blind) + eye_blind = min(eye_blind, 1) + + setEarDamage((ear_damage < 25 ? 0 : ear_damage),(disabilities & DEAF ? 1 :0)) + + if(disabilities & BLIND) + eye_blind = max(eye_blind, 1) + + if(eye_blurry > 0) + eye_blurry = 0 + + if(druggy > 0) + druggy = 0 /mob/living/simple_animal/proc/auto_revive() if(stat == DEAD && health > 0) diff --git a/code/modules/mob/living/simple_animal/slime/death.dm b/code/modules/mob/living/simple_animal/slime/death.dm index 894479322e4..81493941d34 100644 --- a/code/modules/mob/living/simple_animal/slime/death.dm +++ b/code/modules/mob/living/simple_animal/slime/death.dm @@ -6,6 +6,7 @@ var/mob/living/simple_animal/slime/M = new /mob/living/simple_animal/slime(loc) M.colour = colour M.rabid = 1 + M.regenerate_icons() is_adult = 0 maxHealth = 150 revive() @@ -13,15 +14,13 @@ number = rand(1, 1000) name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])" return - else - visible_message("The [name] seizes up and falls limp...") stat = DEAD - icon_state = "[colour] baby slime dead" overlays.len = 0 update_canmove() - if(blind) blind.layer = 0 + if(blind) + blind.layer = 0 if(ticker && ticker.mode) ticker.mode.check_win() @@ -30,4 +29,4 @@ /mob/living/simple_animal/slime/gib() death(1) - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/mob/living/simple_animal/slime/emote.dm b/code/modules/mob/living/simple_animal/slime/emote.dm index 99c52b326ff..7f8127d3bcf 100644 --- a/code/modules/mob/living/simple_animal/slime/emote.dm +++ b/code/modules/mob/living/simple_animal/slime/emote.dm @@ -76,7 +76,7 @@ else src << "Unusable emote '[act]'. Say *help for a list." - if ((message && src.stat == 0)) + if ((message && stat == CONSCIOUS)) if(client) log_emote("[name]/[key] : [message]") if (m_type & 1) diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 76217699b78..ac0d2b68da3 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -15,10 +15,8 @@ handle_nutrition() handle_targets() if (!ckey) - handle_speech_and_mood() - -/mob/living/simple_animal/slime/handle_breathing() - return + handle_mood() + handle_speech() /mob/living/simple_animal/slime/proc/AIprocess() // the master AI process @@ -150,7 +148,8 @@ /mob/living/simple_animal/slime/handle_chemicals_in_body() - if(reagents) reagents.metabolize(src) + if(reagents) + reagents.metabolize(src) if (reagents.get_reagent_amount("plasma")>=5) mutation_chance = min(mutation_chance + 5,50) //Prevents mutation chance going >50% @@ -162,76 +161,17 @@ return //TODO: DEFERRED - -/mob/living/simple_animal/slime/handle_mutations_and_radiation() - return - -/mob/living/simple_animal/slime/handle_regular_hud_updates() - return - /mob/living/simple_animal/slime/handle_regular_status_updates() - if(is_adult) - health = 200 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) - else - health = 150 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) + ..() - if(health < config.health_threshold_dead && stat != DEAD) - death() - return - - else if(health < config.health_threshold_crit) - - if(!reagents.has_reagent("epinephrine")) - adjustOxyLoss(3) - - if(stat != DEAD) - Paralyse(3) - stat = UNCONSCIOUS - else - if(stat != DEAD) - stat = CONSCIOUS - - if(prob(30)) + if(stat != DEAD && prob(30)) adjustOxyLoss(-1) adjustToxLoss(-1) adjustFireLoss(-1) adjustCloneLoss(-1) adjustBruteLoss(-1) - if (stat == DEAD) - lying = 1 - eye_blind = max(eye_blind, 1) - else - if(stunned > 0) - AdjustStunned(-1) - if(weakened > 0) - AdjustWeakened(-1) - if (paralysis > 0) - AdjustParalysis(-1) - - if(stuttering) - stuttering = 0 - - if(eye_blind) - eye_blind = 0 - eye_blind = max(eye_blind, 1) - - setEarDamage((ear_damage < 25 ? 0 : ear_damage),(disabilities & DEAF ? 1 :0)) - - density = !( src.lying ) - - if(disabilities & BLIND) - eye_blind = max(eye_blind, 1) - - if(eye_blurry > 0) - eye_blurry = 0 - - if(druggy > 0) - druggy = 0 - - return 1 - /mob/living/simple_animal/slime/proc/handle_nutrition() if(prob(15)) @@ -252,6 +192,9 @@ else Evolve() +/mob/living/simple_animal/slime/pet/handle_nutrition() + return + /mob/living/simple_animal/slime/proc/add_nutrition(var/nutrition_to_add = 0, var/lastnut = 0) nutrition = min((nutrition + nutrition_to_add), get_max_nutrition()) if(nutrition >= (lastnut + 50)) @@ -381,11 +324,29 @@ spawn() AIprocess() -/mob/living/simple_animal/slime/proc/handle_speech_and_mood() +/mob/living/simple_animal/slime/pet/handle_targets() + if(attacked > 50) attacked = 50 + + if(attacked > 0) + attacked-- + + if(Discipline > 0) + + if(Discipline >= 5 && rabid) + if(prob(60)) + rabid = 0 + + if(prob(10)) + Discipline-- + return + +/mob/living/simple_animal/slime/proc/handle_mood() //Mood starts here var/newmood = "" - if (rabid || attacked) newmood = "angry" - else if (Target) newmood = "mischevous" + if (rabid || attacked) + newmood = "angry" + else if(Target) + newmood = "mischevous" if (!newmood) if (Discipline && prob(25)) @@ -400,6 +361,7 @@ mood = newmood regenerate_icons() +/mob/living/simple_animal/slime/proc/handle_speech() //Speech understanding starts here var/to_say if (speech_buffer.len > 0) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 45b908af267..ee23993a78e 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -63,41 +63,28 @@ var/coretype = /obj/item/slime_extract/grey var/list/slime_mutation[4] -/* -/mob/living/simple_animal/slime //repath it to slime/pet??? + +/mob/living/simple_animal/slime/pet name = "pet slime" desc = "A lovable, domesticated slime." health = 100 maxHealth = 100 - icon = 'icons/mob/slimes.dmi' -*/ -/mob/living/simple_animal/slime/adult - health = 200 - maxHealth = 200 - icon_state = "grey adult slime" - icon_living = "grey adult slime" -/* -/mob/living/simple_animal/slime/adult/New() +/mob/living/simple_animal/slime/pet/New() ..() - overlays += "aslime-:33" - -/mob/living/simple_animal/slime/adult/death(gibbed) - for(var/i = 0, i<=1, i++) - var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc) - S1.icon_state = "[colour] baby slime" - S1.icon_living = "[colour] baby slime" - S1.icon_dead = "[colour] baby slime dead" - S1.colour = "[colour]" - qdel(src) -*/ + if(is_adult) + overlays += "aslime-:33" /mob/living/simple_animal/slime/New() + if(is_adult) + health = 200 + maxHealth = 200 create_reagents(100) spawn (0) number = rand(1, 1000) name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])" icon_state = "[colour] [is_adult ? "adult" : "baby"] slime" + icon_dead = "[icon_state] dead" real_name = name slime_mutation = mutation_table(colour) mutation_chance = rand(25, 35) @@ -107,13 +94,14 @@ /mob/living/simple_animal/slime/regenerate_icons() icon_state = "[colour] [is_adult ? "adult" : "baby"] slime" + icon_dead = "[icon_state] dead" overlays.len = 0 - if (mood) + if(mood) overlays += image('icons/mob/slimes.dmi', icon_state = "aslime-[mood]") ..() /mob/living/simple_animal/slime/movement_delay() - if (bodytemperature >= 330.23) // 135 F + if(bodytemperature >= 330.23) // 135 F return -1 // slimes become supercharged at high temperatures var/tally = 0 @@ -121,7 +109,7 @@ var/health_deficiency = (100 - health) if(health_deficiency >= 45) tally += (health_deficiency / 25) - if (bodytemperature < 183.222) + if(bodytemperature < 183.222) tally += (283.222 - bodytemperature) / 10 * 1.75 if(reagents) @@ -231,8 +219,8 @@ /mob/living/simple_animal/slime/attack_slime(mob/living/simple_animal/slime/M as mob) ..() - if(src.Victim) - src.Victim = null + if(Victim) + Victim = null visible_message("[M] pulls [src] off!") return attacked += 5 @@ -424,410 +412,46 @@ if(Discipline && prob(50)) // wow, buddy, why am I getting attacked?? Discipline = 0 else if(W.force >= 3) + var/force_effect = 2 * W.force if(is_adult) - if(prob(5 + round(W.force/2))) - if(Victim || Target) - if(prob(80) && !client) - Discipline++ + force_effect = round(W.force/2) + if(prob(10 + force_effect)) + if(Victim || Target) + if(prob(80) && !client) + Discipline++ + if(Discipline == 1 && !is_adult) + attacked = 0 + spawn() + SStun = 1 + sleep(rand(5,20)) + SStun = 0 - Victim = null - Target = null - anchored = 0 + Victim = null + Target = null + anchored = 0 - spawn() - SStun = 1 - sleep(rand(5,20)) - SStun = 0 - - spawn(0) - if(user) - canmove = 0 - step_away(src, user) - if(prob(25 + W.force)) - sleep(2) - if(user) - step_away(src, user) - canmove = 1 - - else - if(prob(10 + W.force*2)) - if(Victim || Target) - if(prob(80) && !client) - Discipline++ - if(Discipline == 1) - attacked = 0 - spawn() - SStun = 1 - sleep(rand(5,20)) - SStun = 0 - - Victim = null - Target = null - anchored = 0 - - spawn(0) - if(user) - canmove = 0 - step_away(src, user) - if(prob(25 + W.force*4)) - sleep(2) - if(user) - step_away(src, user) - canmove = 1 + spawn(0) + if(user) + canmove = 0 + step_away(src, user) + if(prob(25 + 2*force_effect)) + sleep(2) + if(user) + step_away(src, user) + canmove = 1 ..() -/mob/living/simple_animal/slime/restrained() - return 0 - /mob/living/simple_animal/slime/show_inv(mob/user) return /mob/living/simple_animal/slime/proc/apply_water() adjustToxLoss(rand(15,20)) - if (!client) - if (Target) // Like cats + if(!client) + if(Target) // Like cats Target = null ++Discipline return -/obj/item/slime_extract - name = "slime extract" - desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"." - icon = 'icons/mob/slimes.dmi' - icon_state = "grey slime extract" - force = 1.0 - w_class = 1.0 - throwforce = 0 - throw_speed = 3 - throw_range = 6 - origin_tech = "biotech=4" - var/Uses = 1 // uses before it goes inert - var/enhanced = 0 //has it been enhanced before? - -/obj/item/slime_extract/attackby(obj/item/O as obj, mob/user as mob) - if(istype(O, /obj/item/weapon/slimesteroid2)) - if(enhanced == 1) - user << " This extract has already been enhanced!" - return ..() - if(Uses == 0) - user << " You can't enhance a used extract!" - return ..() - user <<"You apply the enhancer. It now has triple the amount of uses." - Uses = 3 - enhanced = 1 - qdel(O) - -/obj/item/slime_extract/New() - ..() - create_reagents(100) - -/obj/item/slime_extract/grey - name = "grey slime extract" - icon_state = "grey slime extract" - -/obj/item/slime_extract/gold - name = "gold slime extract" - icon_state = "gold slime extract" - -/obj/item/slime_extract/silver - name = "silver slime extract" - icon_state = "silver slime extract" - -/obj/item/slime_extract/metal - name = "metal slime extract" - icon_state = "metal slime extract" - -/obj/item/slime_extract/purple - name = "purple slime extract" - icon_state = "purple slime extract" - -/obj/item/slime_extract/darkpurple - name = "dark purple slime extract" - icon_state = "dark purple slime extract" - -/obj/item/slime_extract/orange - name = "orange slime extract" - icon_state = "orange slime extract" - -/obj/item/slime_extract/yellow - name = "yellow slime extract" - icon_state = "yellow slime extract" - -/obj/item/slime_extract/red - name = "red slime extract" - icon_state = "red slime extract" - -/obj/item/slime_extract/blue - name = "blue slime extract" - icon_state = "blue slime extract" - -/obj/item/slime_extract/darkblue - name = "dark blue slime extract" - icon_state = "dark blue slime extract" - -/obj/item/slime_extract/pink - name = "pink slime extract" - icon_state = "pink slime extract" - -/obj/item/slime_extract/green - name = "green slime extract" - icon_state = "green slime extract" - -/obj/item/slime_extract/lightpink - name = "light pink slime extract" - icon_state = "light pink slime extract" - -/obj/item/slime_extract/black - name = "black slime extract" - icon_state = "black slime extract" - -/obj/item/slime_extract/oil - name = "oil slime extract" - icon_state = "oil slime extract" - -/obj/item/slime_extract/adamantine - name = "adamantine slime extract" - icon_state = "adamantine slime extract" - -/obj/item/slime_extract/bluespace - name = "bluespace slime extract" - icon_state = "bluespace slime extract" - -/obj/item/slime_extract/pyrite - name = "pyrite slime extract" - icon_state = "pyrite slime extract" - -/obj/item/slime_extract/cerulean - name = "cerulean slime extract" - icon_state = "cerulean slime extract" - -/obj/item/slime_extract/sepia - name = "sepia slime extract" - icon_state = "sepia slime extract" - -/obj/item/slime_extract/rainbow - name = "rainbow slime extract" - icon_state = "rainbow slime extract" - -////Pet Slime Creation/// - -/obj/item/weapon/slimepotion - name = "docility potion" - desc = "A potent chemical mix that will nullify a slime's powers, causing it to become docile and tame." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle19" - - attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/simple_animal/slime))//If target is not a slime. - user << " The potion only works on baby slimes!" - return ..() - if(M.is_adult) //Can't tame adults - user << " Only baby slimes can be tamed!" - return..() - if(M.stat) - user << " The slime is dead!" - return..() - if(M.mind) - user << " The slime resists!" - return ..() - var/mob/living/simple_animal/slime/pet = new /mob/living/simple_animal/slime(M.loc) - pet.icon_state = "[M.colour] baby slime" - pet.icon_living = "[M.colour] baby slime" - pet.icon_dead = "[M.colour] baby slime dead" - pet.colour = "[M.colour]" - user <<"You feed the slime the potion, removing it's powers and calming it." - qdel(M) - var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN) - - if (!newname) - newname = "pet slime" - pet.name = newname - pet.real_name = newname - qdel(src) - -/obj/item/weapon/slimepotion2 - name = "advanced docility potion" - desc = "A potent chemical mix that will nullify a slime's powers, causing it to become docile and tame. This one is meant for adult slimes" - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle19" - -/obj/item/weapon/slimepotion2/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/simple_animal/slime/))//If target is not a slime. - user << " The potion only works on slimes!" - return ..() - if(M.stat) - user << " The slime is dead!" - return..() - if(M.mind) - user << " The slime resists!" - return ..() - var/mob/living/simple_animal/slime/adult/pet = new /mob/living/simple_animal/slime/adult(M.loc) - pet.icon_state = "[M.colour] adult slime" - pet.icon_living = "[M.colour] adult slime" - pet.icon_dead = "[M.colour] baby slime dead" - pet.colour = "[M.colour]" - user <<"You feed the slime the potion, removing it's powers and calming it." - qdel(M) - var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN) - - if (!newname) - newname = "pet slime" - pet.name = newname - pet.real_name = newname - qdel(src) - - -/obj/item/weapon/slimesteroid - name = "slime steroid" - desc = "A potent chemical mix that will cause a slime to generate more extract." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle16" - - attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/simple_animal/slime))//If target is not a slime. - user << " The steroid only works on baby slimes!" - return ..() - if(M.is_adult) //Can't tame adults - user << " Only baby slimes can use the steroid!" - return..() - if(M.stat) - user << " The slime is dead!" - return..() - if(M.cores == 3) - user <<" The slime already has the maximum amount of extract!" - return..() - - user <<"You feed the slime the steroid. It now has triple the amount of extract." - M.cores = 3 - qdel(src) - -/obj/item/weapon/slimesteroid2 - name = "extract enhancer" - desc = "A potent chemical mix that will give a slime extract three uses." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle17" - - /*afterattack(obj/target, mob/user , flag) - if(istype(target, /obj/item/slime_extract)) - if(target.enhanced == 1) - user << " This extract has already been enhanced!" - return ..() - if(target.Uses == 0) - user << " You can't enhance a used extract!" - return ..() - user <<"You apply the enhancer. It now has triple the amount of uses." - target.Uses = 3 - target.enahnced = 1 - qdel(src)*/ - -////////Adamantine Golem stuff I dunno where else to put it - -// This will eventually be removed. - -/obj/item/clothing/under/golem - name = "adamantine skin" - desc = "a golem's skin" - icon_state = "golem" - item_state = "golem" - item_color = "golem" - flags = ABSTRACT | NODROP - has_sensor = 0 - -/obj/item/clothing/suit/golem - name = "adamantine shell" - desc = "a golem's thick outter shell" - icon_state = "golem" - item_state = "golem" - w_class = 4//bulky item - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - body_parts_covered = FULL_BODY - flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT - flags = ABSTRACT | NODROP - -/obj/item/clothing/shoes/golem - name = "golem's feet" - desc = "sturdy adamantine feet" - icon_state = "golem" - item_state = null - flags = NOSLIP | ABSTRACT | NODROP - - -/obj/item/clothing/mask/breath/golem - name = "golem's face" - desc = "the imposing face of an adamantine golem" - icon_state = "golem" - item_state = "golem" - siemens_coefficient = 0 - unacidable = 1 - flags = ABSTRACT | NODROP - - -/obj/item/clothing/gloves/golem - name = "golem's hands" - desc = "strong adamantine hands" - icon_state = "golem" - item_state = null - siemens_coefficient = 0 - flags = ABSTRACT | NODROP - - -/obj/item/clothing/head/space/golem - icon_state = "golem" - item_state = "dermal" - item_color = "dermal" - name = "golem's head" - desc = "a golem's head" - unacidable = 1 - flags = ABSTRACT | NODROP - -/obj/effect/golemrune - anchored = 1 - desc = "a strange rune used to create golems. It glows when spirits are nearby." - name = "rune" - icon = 'icons/obj/rune.dmi' - icon_state = "golem" - unacidable = 1 - layer = TURF_LAYER - - New() - ..() - SSobj.processing |= src - -/obj/effect/golemrune/process() - var/mob/dead/observer/ghost - for(var/mob/dead/observer/O in src.loc) - if(!O.client) continue - if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue - ghost = O - break - if(ghost) - icon_state = "golem2" - else - icon_state = "golem" - -/obj/effect/golemrune/attack_hand(mob/living/user as mob) - var/mob/dead/observer/ghost - for(var/mob/dead/observer/O in src.loc) - if(!O.client) continue - if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue - ghost = O - break - if(!ghost) - user << "The rune fizzles uselessly. There is no spirit nearby." - return - var/mob/living/carbon/human/G = new /mob/living/carbon/human - if(prob(50)) G.gender = "female" - hardset_dna(G, null, null, null, null, /datum/species/golem/adamantine) - - G.set_cloned_appearance() - G.real_name = text("Adamantine Golem ([rand(1, 1000)])") - G.dna.species.auto_equip(G) - G.loc = src.loc - G.key = ghost.key - G << "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost." - qdel(src) - /mob/living/simple_animal/slime/getTrail() return null @@ -876,88 +500,3 @@ user << msg return - -//////////////////////////////Old shit from metroids/RoRos, and the old cores, would not take much work to re-add them//////////////////////// - -/* -// Basically this slime Core catalyzes reactions that normally wouldn't happen anywhere -/obj/item/slime_core - name = "slime extract" - desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"." - icon = 'icons/mob/slimes.dmi' - icon_state = "slime extract" - force = 1.0 - w_class = 1.0 - throwforce = 1.0 - throw_speed = 2 - throw_range = 6 - origin_tech = "biotech=4" - var/POWERFLAG = 0 // sshhhhhhh - var/Flush = 30 - var/Uses = 5 // uses before it goes inert - -/obj/item/slime_core/New() - ..() - create_reagents(100) - POWERFLAG = rand(1,10) - Uses = rand(7, 25) - //flags |= NOREACT -/* - spawn() - Life() - - proc/Life() - while(src) - sleep(25) - Flush-- - if(Flush <= 0) - reagents.clear_reagents() - Flush = 30 -*/ - - - -/obj/item/weapon/reagent_containers/food/snacks/egg/slime - name = "slime egg" - desc = "A small, gelatinous egg." - icon = 'icons/mob/mob.dmi' - icon_state = "slime egg-growing" - bitesize = 12 - origin_tech = "biotech=4" - var/grown = 0 - -/obj/item/weapon/reagent_containers/food/snacks/egg/slime/New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("slimejelly", 1) - spawn(rand(1200,1500))//the egg takes a while to "ripen" - Grow() - -/obj/item/weapon/reagent_containers/food/snacks/egg/slime/proc/Grow() - grown = 1 - icon_state = "slime egg-grown" - SSobj.processing.Add(src) - return - -/obj/item/weapon/reagent_containers/food/snacks/egg/slime/proc/Hatch() - SSobj.processing.Remove(src) - var/turf/T = get_turf(src) - src.visible_message(" The [name] pulsates and quivers!") - spawn(rand(50,100)) - src.visible_message(" The [name] bursts open!") - new/mob/living/simple_animal/slime(T) - qdel(src) - - -/obj/item/weapon/reagent_containers/food/snacks/egg/slime/process() - var/turf/location = get_turf(src) - var/datum/gas_mixture/environment = location.return_air() - if (environment.toxins > MOLES_PLASMA_VISIBLE)//plasma exposure causes the egg to hatch - src.Hatch() - -/obj/item/weapon/reagent_containers/food/snacks/egg/slime/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype( W, /obj/item/toy/crayon )) - return - else - ..() -*/ \ No newline at end of file diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm new file mode 100644 index 00000000000..7187a28e6a9 --- /dev/null +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -0,0 +1,342 @@ + +/// Slime Extracts /// + +/obj/item/slime_extract + name = "slime extract" + desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"." + icon = 'icons/mob/slimes.dmi' + icon_state = "grey slime extract" + force = 1.0 + w_class = 1.0 + throwforce = 0 + throw_speed = 3 + throw_range = 6 + origin_tech = "biotech=4" + var/Uses = 1 // uses before it goes inert + var/enhanced = 0 //has it been enhanced before? + +/obj/item/slime_extract/attackby(obj/item/O as obj, mob/user as mob) + if(istype(O, /obj/item/weapon/slimesteroid2)) + if(enhanced == 1) + user << " This extract has already been enhanced!" + return ..() + if(Uses == 0) + user << " You can't enhance a used extract!" + return ..() + user <<"You apply the enhancer. It now has triple the amount of uses." + Uses = 3 + enhanced = 1 + qdel(O) + +/obj/item/slime_extract/New() + ..() + create_reagents(100) + +/obj/item/slime_extract/grey + name = "grey slime extract" + icon_state = "grey slime extract" + +/obj/item/slime_extract/gold + name = "gold slime extract" + icon_state = "gold slime extract" + +/obj/item/slime_extract/silver + name = "silver slime extract" + icon_state = "silver slime extract" + +/obj/item/slime_extract/metal + name = "metal slime extract" + icon_state = "metal slime extract" + +/obj/item/slime_extract/purple + name = "purple slime extract" + icon_state = "purple slime extract" + +/obj/item/slime_extract/darkpurple + name = "dark purple slime extract" + icon_state = "dark purple slime extract" + +/obj/item/slime_extract/orange + name = "orange slime extract" + icon_state = "orange slime extract" + +/obj/item/slime_extract/yellow + name = "yellow slime extract" + icon_state = "yellow slime extract" + +/obj/item/slime_extract/red + name = "red slime extract" + icon_state = "red slime extract" + +/obj/item/slime_extract/blue + name = "blue slime extract" + icon_state = "blue slime extract" + +/obj/item/slime_extract/darkblue + name = "dark blue slime extract" + icon_state = "dark blue slime extract" + +/obj/item/slime_extract/pink + name = "pink slime extract" + icon_state = "pink slime extract" + +/obj/item/slime_extract/green + name = "green slime extract" + icon_state = "green slime extract" + +/obj/item/slime_extract/lightpink + name = "light pink slime extract" + icon_state = "light pink slime extract" + +/obj/item/slime_extract/black + name = "black slime extract" + icon_state = "black slime extract" + +/obj/item/slime_extract/oil + name = "oil slime extract" + icon_state = "oil slime extract" + +/obj/item/slime_extract/adamantine + name = "adamantine slime extract" + icon_state = "adamantine slime extract" + +/obj/item/slime_extract/bluespace + name = "bluespace slime extract" + icon_state = "bluespace slime extract" + +/obj/item/slime_extract/pyrite + name = "pyrite slime extract" + icon_state = "pyrite slime extract" + +/obj/item/slime_extract/cerulean + name = "cerulean slime extract" + icon_state = "cerulean slime extract" + +/obj/item/slime_extract/sepia + name = "sepia slime extract" + icon_state = "sepia slime extract" + +/obj/item/slime_extract/rainbow + name = "rainbow slime extract" + icon_state = "rainbow slime extract" + +////Pet Slime Creation/// + +/obj/item/weapon/slimepotion + name = "docility potion" + desc = "A potent chemical mix that will nullify a slime's powers, causing it to become docile and tame." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle19" + +/obj/item/weapon/slimepotion/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) + if(!istype(M, /mob/living/simple_animal/slime))//If target is not a slime. + user << " The potion only works on baby slimes!" + return ..() + if(M.is_adult) //Can't tame adults + user << " Only baby slimes can be tamed!" + return..() + if(M.stat) + user << " The slime is dead!" + return..() + if(M.mind) + user << " The slime resists!" + return ..() + var/mob/living/simple_animal/slime/pet = new /mob/living/simple_animal/slime/pet(M.loc) + pet.icon_state = "[M.colour] baby slime" + pet.icon_living = "[M.colour] baby slime" + pet.icon_dead = "[M.colour] baby slime dead" + pet.colour = "[M.colour]" + user <<"You feed the slime the potion, removing it's powers and calming it." + qdel(M) + var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN) + + if (!newname) + newname = "pet slime" + pet.name = newname + pet.real_name = newname + qdel(src) + +/obj/item/weapon/slimepotion2 + name = "advanced docility potion" + desc = "A potent chemical mix that will nullify a slime's powers, causing it to become docile and tame. This one is meant for adult slimes" + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle19" + +/obj/item/weapon/slimepotion2/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) + if(!istype(M, /mob/living/simple_animal/slime/))//If target is not a slime. + user << " The potion only works on slimes!" + return ..() + if(M.stat) + user << " The slime is dead!" + return..() + if(M.mind) + user << " The slime resists!" + return ..() + var/mob/living/simple_animal/slime/S = new /mob/living/simple_animal/slime/pet(M.loc) + S.is_adult = 1 + S.icon_state = "[M.colour] adult slime" + S.icon_living = "[M.colour] adult slime" + S.icon_dead = "[M.colour] baby slime dead" + S.colour = "[M.colour]" + user <<"You feed the slime the potion, removing it's powers and calming it." + qdel(M) + var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN) + + if (!newname) + newname = "pet slime" + S.name = newname + S.real_name = newname + qdel(src) + + +/obj/item/weapon/slimesteroid + name = "slime steroid" + desc = "A potent chemical mix that will cause a slime to generate more extract." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle16" + + attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) + if(!istype(M, /mob/living/simple_animal/slime))//If target is not a slime. + user << " The steroid only works on baby slimes!" + return ..() + if(M.is_adult) //Can't tame adults + user << " Only baby slimes can use the steroid!" + return..() + if(M.stat) + user << " The slime is dead!" + return..() + if(M.cores == 3) + user <<" The slime already has the maximum amount of extract!" + return..() + + user <<"You feed the slime the steroid. It now has triple the amount of extract." + M.cores = 3 + qdel(src) + +/obj/item/weapon/slimesteroid2 + name = "extract enhancer" + desc = "A potent chemical mix that will give a slime extract three uses." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle17" + + /*afterattack(obj/target, mob/user , flag) + if(istype(target, /obj/item/slime_extract)) + if(target.enhanced == 1) + user << " This extract has already been enhanced!" + return ..() + if(target.Uses == 0) + user << " You can't enhance a used extract!" + return ..() + user <<"You apply the enhancer. It now has triple the amount of uses." + target.Uses = 3 + target.enahnced = 1 + qdel(src)*/ + + +////////Adamantine Golem stuff I dunno where else to put it + +// This will eventually be removed. + +/obj/item/clothing/under/golem + name = "adamantine skin" + desc = "a golem's skin" + icon_state = "golem" + item_state = "golem" + item_color = "golem" + flags = ABSTRACT | NODROP + has_sensor = 0 + +/obj/item/clothing/suit/golem + name = "adamantine shell" + desc = "a golem's thick outter shell" + icon_state = "golem" + item_state = "golem" + w_class = 4//bulky item + gas_transfer_coefficient = 0.90 + permeability_coefficient = 0.50 + body_parts_covered = FULL_BODY + flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT + flags = ABSTRACT | NODROP + +/obj/item/clothing/shoes/golem + name = "golem's feet" + desc = "sturdy adamantine feet" + icon_state = "golem" + item_state = null + flags = NOSLIP | ABSTRACT | NODROP + + +/obj/item/clothing/mask/breath/golem + name = "golem's face" + desc = "the imposing face of an adamantine golem" + icon_state = "golem" + item_state = "golem" + siemens_coefficient = 0 + unacidable = 1 + flags = ABSTRACT | NODROP + + +/obj/item/clothing/gloves/golem + name = "golem's hands" + desc = "strong adamantine hands" + icon_state = "golem" + item_state = null + siemens_coefficient = 0 + flags = ABSTRACT | NODROP + + +/obj/item/clothing/head/space/golem + icon_state = "golem" + item_state = "dermal" + item_color = "dermal" + name = "golem's head" + desc = "a golem's head" + unacidable = 1 + flags = ABSTRACT | NODROP + +/obj/effect/golemrune + anchored = 1 + desc = "a strange rune used to create golems. It glows when spirits are nearby." + name = "rune" + icon = 'icons/obj/rune.dmi' + icon_state = "golem" + unacidable = 1 + layer = TURF_LAYER + + New() + ..() + SSobj.processing |= src + +/obj/effect/golemrune/process() + var/mob/dead/observer/ghost + for(var/mob/dead/observer/O in src.loc) + if(!O.client) continue + if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue + ghost = O + break + if(ghost) + icon_state = "golem2" + else + icon_state = "golem" + +/obj/effect/golemrune/attack_hand(mob/living/user as mob) + var/mob/dead/observer/ghost + for(var/mob/dead/observer/O in src.loc) + if(!O.client) continue + if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue + ghost = O + break + if(!ghost) + user << "The rune fizzles uselessly. There is no spirit nearby." + return + var/mob/living/carbon/human/G = new /mob/living/carbon/human + if(prob(50)) G.gender = "female" + hardset_dna(G, null, null, null, null, /datum/species/golem/adamantine) + + G.set_cloned_appearance() + G.real_name = text("Adamantine Golem ([rand(1, 1000)])") + G.dna.species.auto_equip(G) + G.loc = src.loc + G.key = ghost.key + G << "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost." + qdel(src) \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index 7ea25b17c4a..f906258151a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1367,6 +1367,7 @@ #include "code\modules\research\designs\stock_parts_designs.dm" #include "code\modules\research\designs\telecomms_designs.dm" #include "code\modules\research\designs\weapon_designs.dm" +#include "code\modules\research\xenobiology\xenobiology.dm" #include "code\modules\scripting\Errors.dm" #include "code\modules\scripting\IDE.dm" #include "code\modules\scripting\Options.dm" From 48bbf303da243335b32117b9707ddbca09266212 Mon Sep 17 00:00:00 2001 From: phil235 Date: Fri, 20 Mar 2015 22:05:09 +0100 Subject: [PATCH 13/65] Fix conflict in xenobiology.dm Simplify simple_animal/attackby() more work on slimes. --- code/_onclick/item_attack.dm | 11 ++ code/modules/mob/living/carbon/brain/life.dm | 3 - code/modules/mob/living/carbon/life.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 22 +--- .../mob/living/simple_animal/slime/life.dm | 25 +--- .../mob/living/simple_animal/slime/login.dm | 4 - .../mob/living/simple_animal/slime/slime.dm | 29 ++--- .../research/xenobiology/xenobiology.dm | 110 ++++++++---------- tgstation.dme | 1 - 9 files changed, 79 insertions(+), 128 deletions(-) delete mode 100644 code/modules/mob/living/simple_animal/slime/login.dm diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 75917f2de7d..b2f0fd6fcdf 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -39,6 +39,17 @@ visible_message("[attack_message]", "[attack_message]") +/mob/living/simple_animal/attacked_by(var/obj/item/I, var/mob/living/user) + if(!I.force) + user.visible_message("[user] gently taps [src] with [I].",\ + "This weapon is ineffective, it does no damage.") + else if(I.force >= force_threshold && I.damtype != STAMINA) + ..() + else + visible_message("[I] bounces harmlessly off of [src].",\ + "[I] bounces harmlessly off of [src].") + + // Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. // Click parameters is the params string from byond Click() code, see that documentation. diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index 0f1ef27541f..a24fd4b084c 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -65,9 +65,6 @@ eye_blind = max(eye_blind, 1) silent = 0 return 1 - if(health < config.health_threshold_crit) - stat = UNCONSCIOUS - eye_blind = max(eye_blind, 1) else stat = CONSCIOUS diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 15ffcedd6af..56b7affa3cb 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -293,7 +293,7 @@ updatehealth() if(health <= config.health_threshold_dead || !getorgan(/obj/item/organ/brain)) death() - return + return 1 if(stat != DEAD) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 9b02bcb3d1a..3eeb99e09e1 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -338,9 +338,8 @@ if(O.flags & NOBLUDGEON) return - user.changeNext_move(CLICK_CD_MELEE) - if(istype(O, /obj/item/stack/medical)) + user.changeNext_move(CLICK_CD_MELEE) if(stat != DEAD) var/obj/item/stack/medical/MED = O if(health < maxHealth) @@ -363,28 +362,13 @@ return if((meat_type || skin_type) && (stat == DEAD)) //if the animal has a meat, and if it is dead. + user.changeNext_move(CLICK_CD_MELEE) var/sharpness = is_sharp(O) if(sharpness) harvest(user, sharpness) return - user.do_attack_animation(src) - var/damage = 0 - if(O.force) - if(O.force >= force_threshold) - damage = O.force - if (O.damtype == STAMINA) - damage = 0 - visible_message("[user] has [O.attack_verb.len ? "[pick(O.attack_verb)]": "attacked"] [src] with [O]!",\ - "[user] has [O.attack_verb.len ? "[pick(O.attack_verb)]": "attacked"] you with [O]!") - else - visible_message("[O] bounces harmlessly off of [src].",\ - "[O] bounces harmlessly off of [src].") - playsound(loc, O.hitsound, 50, 1, -1) - else - user.visible_message("[user] gently taps [src] with [O].",\ - "This weapon is ineffective, it does no damage.") - adjustBruteLoss(damage) + ..() /mob/living/simple_animal/movement_delay() var/tally = 0 //Incase I need to add stuff other than "speed" later diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 395c6166b2a..c052df6175c 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -198,9 +198,6 @@ else Evolve() -/mob/living/simple_animal/slime/pet/handle_nutrition() - return - /mob/living/simple_animal/slime/proc/add_nutrition(var/nutrition_to_add = 0, var/lastnut = 0) nutrition = min((nutrition + nutrition_to_add), get_max_nutrition()) if(nutrition >= (lastnut + 50)) @@ -310,7 +307,7 @@ if(!Target) // If we have no target, we are wandering or following orders if (Leader) - if (holding_still) + if(holding_still) holding_still = max(holding_still - 1, 0) else if(canmove && isturf(loc)) step_to(src, Leader) @@ -322,7 +319,7 @@ step(src, pick(cardinal)) else - if (holding_still) + if(holding_still) holding_still = max(holding_still - 1, 0) else if (docile && pulledby) holding_still = 10 @@ -332,21 +329,11 @@ spawn() AIprocess() -/mob/living/simple_animal/slime/pet/handle_targets() - if(attacked > 50) attacked = 50 +/mob/living/simple_animal/slime/handle_automated_movement() + return //random movement is currently handled in handle_target() - if(attacked > 0) - attacked-- - - if(Discipline > 0) - - if(Discipline >= 5 && rabid) - if(prob(60)) - rabid = 0 - - if(prob(10)) - Discipline-- - return +/mob/living/simple_animal/slime/handle_automated_speech() + return //random speech is currently handled in handle_speech() /mob/living/simple_animal/slime/proc/handle_mood() //Mood starts here diff --git a/code/modules/mob/living/simple_animal/slime/login.dm b/code/modules/mob/living/simple_animal/slime/login.dm deleted file mode 100644 index 8fffb30ded6..00000000000 --- a/code/modules/mob/living/simple_animal/slime/login.dm +++ /dev/null @@ -1,4 +0,0 @@ -/mob/living/simple_animal/slime/Login() - ..() - update_hud() - return diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index ee23993a78e..9fbbc063c5d 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -6,6 +6,7 @@ say_message = "hums" ventcrawler = 2 var/is_adult = 0 + var/docile = 0 languages = SLIME | HUMAN faction = list("slime") @@ -24,7 +25,6 @@ health = 150 gender = NEUTER - update_icon = 0 nutrition = 700 see_in_dark = 8 @@ -63,18 +63,6 @@ var/coretype = /obj/item/slime_extract/grey var/list/slime_mutation[4] - -/mob/living/simple_animal/slime/pet - name = "pet slime" - desc = "A lovable, domesticated slime." - health = 100 - maxHealth = 100 - -/mob/living/simple_animal/slime/pet/New() - ..() - if(is_adult) - overlays += "aslime-:33" - /mob/living/simple_animal/slime/New() if(is_adult) health = 200 @@ -162,7 +150,8 @@ else stat(null, "Health: [round((health / 150) * 100)]%") - stat(null, "Nutrition: [nutrition]/[get_max_nutrition()]") + if(!docile) + stat(null, "Nutrition: [nutrition]/[get_max_nutrition()]") if(amount_grown >= 10) if(is_adult) stat(null, "You can reproduce!") @@ -323,10 +312,7 @@ anchored = 0 step_away(src,M) - return - - - if(..()) //successful attack + else if(..()) //successful attack attacked += 10 /mob/living/simple_animal/slime/attack_alien(mob/living/carbon/alien/humanoid/M as mob) @@ -403,7 +389,7 @@ var/obj/item/stack/sheet/mineral/plasma/S = W S.use(1) return - else if(W.force > 0) + if(W.force > 0) attacked += 10 if(prob(25)) user.do_attack_animation(src) @@ -411,7 +397,7 @@ return if(Discipline && prob(50)) // wow, buddy, why am I getting attacked?? Discipline = 0 - else if(W.force >= 3) + if(W.force >= 3) var/force_effect = 2 * W.force if(is_adult) force_effect = round(W.force/2) @@ -500,3 +486,6 @@ user << msg return +/mob/living/simple_animal/slime/pet + docile = 1 + diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 7187a28e6a9..4c214b8cb1d 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -122,72 +122,60 @@ ////Pet Slime Creation/// -/obj/item/weapon/slimepotion +/obj/item/slimepotion name = "docility potion" - desc = "A potent chemical mix that will nullify a slime's powers, causing it to become docile and tame." + desc = "A potent chemical mix that nullifies a slime's hunger, causing it to become docile and tame." icon = 'icons/obj/chemical.dmi' icon_state = "bottle19" -/obj/item/weapon/slimepotion/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/simple_animal/slime))//If target is not a slime. - user << " The potion only works on baby slimes!" +/obj/item/slimepotion/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) + if(!isslime(M)) + user << "The potion only works on slimes!" return ..() - if(M.is_adult) //Can't tame adults - user << " Only baby slimes can be tamed!" - return..() if(M.stat) - user << " The slime is dead!" + user << "The slime is dead!" return..() - if(M.mind) - user << " The slime resists!" - return ..() - var/mob/living/simple_animal/slime/pet = new /mob/living/simple_animal/slime/pet(M.loc) - pet.icon_state = "[M.colour] baby slime" - pet.icon_living = "[M.colour] baby slime" - pet.icon_dead = "[M.colour] baby slime dead" - pet.colour = "[M.colour]" - user <<"You feed the slime the potion, removing it's powers and calming it." - qdel(M) + + M.docile = 1 + M.nutrition = 700 + M <<" You absorb the potion and feel your intense desire to feed melt away." + user <<" You feed the slime the potion, removing it's hunger and calming it." var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN) if (!newname) newname = "pet slime" - pet.name = newname - pet.real_name = newname + M.name = newname + M.real_name = newname qdel(src) -/obj/item/weapon/slimepotion2 - name = "advanced docility potion" - desc = "A potent chemical mix that will nullify a slime's powers, causing it to become docile and tame. This one is meant for adult slimes" +/obj/item/slimepotion2 + name = "sentience potion" + desc = "A miraculous chemical mix that can raise the intelligence of creatures to human levels." icon = 'icons/obj/chemical.dmi' icon_state = "bottle19" -/obj/item/weapon/slimepotion2/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/simple_animal/slime/))//If target is not a slime. - user << " The potion only works on slimes!" +/obj/item/slimepotion2/afterattack(mob/living/M as mob, mob/user as mob) + if(!(isslime(M) || isanimal(M) || ismonkey(M) || !M.ckey)) //I'm sorry for this line + user << "[M] is already too intelligent for this to work!" return ..() if(M.stat) - user << " The slime is dead!" + user << "[M] is dead!" return..() - if(M.mind) - user << " The slime resists!" - return ..() - var/mob/living/simple_animal/slime/S = new /mob/living/simple_animal/slime/pet(M.loc) - S.is_adult = 1 - S.icon_state = "[M.colour] adult slime" - S.icon_living = "[M.colour] adult slime" - S.icon_dead = "[M.colour] baby slime dead" - S.colour = "[M.colour]" - user <<"You feed the slime the potion, removing it's powers and calming it." - qdel(M) - var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN) - if (!newname) - newname = "pet slime" - S.name = newname - S.real_name = newname - qdel(src) + var/list/candidates = get_candidates(BE_ALIEN, ALIEN_AFK_BRACKET) + var/client/C = null + if(candidates.len) + C = pick(candidates) + M.key = C.key + M.languages |= HUMAN + M << "All at once it makes sense, you know what you are and who you are! Self awareness is yours!" + M << "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost." + user << "[M] is suddenly attentive and aware. It worked!" + qdel(src) + else + user << "[M] looks interested for a moment, but then looks back down. Maybe you should try again later..." + ..() /obj/item/weapon/slimesteroid name = "slime steroid" @@ -195,23 +183,23 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" - attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/simple_animal/slime))//If target is not a slime. - user << " The steroid only works on baby slimes!" - return ..() - if(M.is_adult) //Can't tame adults - user << " Only baby slimes can use the steroid!" - return..() - if(M.stat) - user << " The slime is dead!" - return..() - if(M.cores == 3) - user <<" The slime already has the maximum amount of extract!" - return..() +/obj/item/weapon/slimesteroid/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) + if(!istype(M, /mob/living/simple_animal/slime))//If target is not a slime. + user << " The steroid only works on baby slimes!" + return ..() + if(M.is_adult) //Can't tame adults + user << " Only baby slimes can use the steroid!" + return..() + if(M.stat) + user << " The slime is dead!" + return..() + if(M.cores == 3) + user <<" The slime already has the maximum amount of extract!" + return..() - user <<"You feed the slime the steroid. It now has triple the amount of extract." - M.cores = 3 - qdel(src) + user <<"You feed the slime the steroid. It now has triple the amount of extract." + M.cores = 3 + qdel(src) /obj/item/weapon/slimesteroid2 name = "extract enhancer" diff --git a/tgstation.dme b/tgstation.dme index c67fd9d3e74..d35f40c877b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1207,7 +1207,6 @@ #include "code\modules\mob\living\simple_animal\slime\death.dm" #include "code\modules\mob\living\simple_animal\slime\emote.dm" #include "code\modules\mob\living\simple_animal\slime\life.dm" -#include "code\modules\mob\living\simple_animal\slime\login.dm" #include "code\modules\mob\living\simple_animal\slime\powers.dm" #include "code\modules\mob\living\simple_animal\slime\say.dm" #include "code\modules\mob\living\simple_animal\slime\slime.dm" From 902e50f6b2f94b2982b2e19f8ecec132941ea2f1 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Sat, 21 Mar 2015 00:46:39 +0000 Subject: [PATCH 14/65] Added inbuilt jetpack to syndicate hardsuit. --- code/modules/clothing/spacesuits/hardsuit.dm | 25 +++++++++++--------- code/modules/clothing/suits/toggles.dm | 3 +++ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index c626b9ff47b..d1c93d3f95f 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -45,7 +45,17 @@ var/obj/item/clothing/head/helmet/space/hardsuit/helmet action_button_name = "Toggle Helmet" var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit + var/obj/item/weapon/tank/jetpack/suit/jetpack = null +/obj/item/clothing/suit/space/hardsuit/verb/Jetpack() + set name = "Toggle Inbuilt Jetpack" + set category = "Object" + jetpack.toggle() + +/obj/item/clothing/suit/space/hardsuit/verb/Jetpack_Rockets() + set name = "Toggle Inbuilt Jetpack Stabilization" + set category = "Object" + jetpack.toggle_rockets() //Engineering /obj/item/clothing/head/helmet/space/hardsuit/engine @@ -63,22 +73,12 @@ item_state = "eng_hardsuit" armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine - var/obj/item/weapon/tank/jetpack/suit/jetpack = null + /obj/item/clothing/suit/space/hardsuit/engine/New() jetpack = new /obj/item/weapon/tank/jetpack/suit(src) ..() -/obj/item/clothing/suit/space/hardsuit/engine/verb/Jetpack() - set name = "Toggle Inbuilt Jetpack" - set category = "Object" - jetpack.toggle() - -/obj/item/clothing/suit/space/hardsuit/engine/verb/Jetpack_Rockets() - set name = "Toggle Inbuilt Jetpack Stabilization" - set category = "Object" - jetpack.toggle_rockets() - //Atmospherics /obj/item/clothing/head/helmet/space/hardsuit/engine/atmos name = "atmospherics hardsuit helmet" @@ -231,6 +231,9 @@ ..() flags ^= NODROP +/obj/item/clothing/suit/space/hardsuit/syndi/New() + jetpack = new /obj/item/weapon/tank/jetpack/suit(src) + ..() //The Owl Hardsuit /obj/item/clothing/head/helmet/space/hardsuit/syndi/owl diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 1a4202e88b3..380e0262597 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -80,6 +80,9 @@ /obj/item/clothing/suit/space/hardsuit/New() MakeHelmet() + if(!jetpack) + verbs -= /obj/item/clothing/suit/space/hardsuit/verb/Jetpack + verbs -= /obj/item/clothing/suit/space/hardsuit/verb/Jetpack_Rockets ..() /obj/item/clothing/suit/space/hardsuit/proc/MakeHelmet() From daa1bdf85669bab9f6b257f37dab0930dabd9145 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 21 Mar 2015 16:37:37 +0100 Subject: [PATCH 15/65] More work on slime procs. --- code/modules/admin/player_panel.dm | 4 +- .../mob/living/carbon/alien/alien_defense.dm | 8 + .../living/carbon/alien/humanoid/humanoid.dm | 10 - .../mob/living/carbon/alien/larva/larva.dm | 11 - .../mob/living/carbon/carbon_defense.dm | 32 ++- .../mob/living/carbon/human/human_defense.dm | 24 +- code/modules/mob/living/carbon/life.dm | 42 ++-- .../mob/living/carbon/monkey/monkey.dm | 19 +- code/modules/mob/living/life.dm | 5 +- code/modules/mob/living/living_defense.dm | 19 +- .../mob/living/simple_animal/simple_animal.dm | 40 +-- .../mob/living/simple_animal/slime/life.dm | 4 +- .../mob/living/simple_animal/slime/slime.dm | 234 ++++-------------- tgstation.dme | 1 - 14 files changed, 145 insertions(+), 308 deletions(-) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 10af3669fc4..e9bda2b7625 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -229,8 +229,6 @@ if(iscarbon(M)) //Carbon stuff if(ishuman(M)) M_job = M.job - else if(isslime(M)) - M_job = "slime" else if(ismonkey(M)) M_job = "Monkey" else if(isalien(M)) //aliens @@ -254,6 +252,8 @@ else if(isanimal(M)) //simple animals if(iscorgi(M)) M_job = "Corgi" + else if(isslime(M)) + M_job = "slime" else M_job = "Animal" diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index bb032d309ef..51e086ae669 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -76,3 +76,11 @@ In all, this is a lot like the monkey code. /N adjustBruteLoss(damage) updatehealth() +/mob/living/carbon/alien/attack_slime(mob/living/simple_animal/slime/M as mob) + if(..()) //successful slime attack + var/damage = rand(5, 35) + if(M.is_adult) + damage = rand(10, 40) + adjustBruteLoss(damage) + add_logs(M, src, "attacked", admin=0) + updatehealth() diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index e887a878c99..337f05ebbff 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -27,16 +27,6 @@ if(l_store) l_store.emp_act(severity) ..() -/mob/living/carbon/alien/humanoid/attack_slime(mob/living/simple_animal/slime/M as mob) - ..() - var/damage = rand(5, 35) - if(M.is_adult) - damage = rand(10, 40) - adjustBruteLoss(damage) - add_logs(M, src, "attacked", admin=0) - updatehealth() - return - /mob/living/carbon/alien/humanoid/attack_hulk(mob/living/carbon/human/user) if(user.a_intent == "harm") ..(user, 1) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 26991625701..c560c3d7f3e 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -38,17 +38,6 @@ /mob/living/carbon/alien/larva/attack_ui(slot_id) return -/mob/living/carbon/alien/larva/attack_slime(mob/living/simple_animal/slime/M as mob) - - ..() - var/damage = rand(5, 35) - if(M.is_adult) - damage = rand(20, 40) - adjustBruteLoss(damage) - add_logs(M, src, "attacked", admin=0) - updatehealth() - return - /mob/living/carbon/alien/larva/attack_hulk(mob/living/carbon/human/user) if(user.a_intent == "harm") ..(user, 1) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 6cc72a0af26..c22f1a12bc9 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -66,14 +66,26 @@ /mob/living/carbon/attack_slime(mob/living/simple_animal/slime/M) - if(..()) - var/power = M.powerlevel + rand(0,3) - Weaken(power) - if (stuttering < power) - stuttering = power - Stun(power) - var/stunprob = M.powerlevel * 7 + 10 - if (prob(stunprob) && M.powerlevel >= 8) - adjustFireLoss(M.powerlevel * rand(6,10)) - updatehealth() + if(..()) //successful slime attack + if(M.powerlevel > 0) + var/stunprob = M.powerlevel * 7 + 10 // 17 at level 1, 80 at level 10 + if(prob(stunprob)) + M.powerlevel -= 3 + if(M.powerlevel < 0) + M.powerlevel = 0 + + visible_message("The [M.name] has shocked [src]!", \ + "The [M.name] has shocked [src]!") + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + var/power = M.powerlevel + rand(0,3) + Weaken(power) + if(stuttering < power) + stuttering = power + Stun(power) + if (prob(stunprob) && M.powerlevel >= 8) + adjustFireLoss(M.powerlevel * rand(6,10)) + updatehealth() return 1 diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index fd98c22dcb2..555feee5791 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -399,24 +399,20 @@ emp_act /mob/living/carbon/human/attack_slime(mob/living/simple_animal/slime/M as mob) - ..() - var/damage = rand(1, 3) + if(..()) //successful slime attack + var/damage = rand(5, 25) + if(M.is_adult) + damage = rand(10, 35) - if(M.is_adult) - damage = rand(10, 35) - else - damage = rand(5, 25) + if(check_shields(damage, "the [M.name]")) + return 0 - if(check_shields(damage, "the [M.name]")) - return 0 + var/dam_zone = pick("head", "chest", "l_arm", "r_arm", "l_leg", "r_leg", "groin") - var/dam_zone = pick("head", "chest", "l_arm", "r_arm", "l_leg", "r_leg", "groin") + var/obj/item/organ/limb/affecting = get_organ(ran_zone(dam_zone)) + var/armor_block = run_armor_check(affecting, "melee") + apply_damage(damage, BRUTE, affecting, armor_block) - var/obj/item/organ/limb/affecting = get_organ(ran_zone(dam_zone)) - var/armor_block = run_armor_check(affecting, "melee") - apply_damage(damage, BRUTE, affecting, armor_block) - - return /mob/living/carbon/human/mech_melee_attack(obj/mecha/M) if(M.occupant.a_intent == "harm") diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 56b7affa3cb..5e58fc115c2 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -1,11 +1,3 @@ - -/mob/living/carbon - var/oxygen_alert = 0 - var/toxins_alert = 0 - var/fire_alert = 0 - var/pressure_alert = 0 - var/temperature_alert = 0 - /mob/living/carbon/Life() set invisibility = 0 set background = BACKGROUND_ENABLED @@ -243,22 +235,6 @@ if(reagents) reagents.metabolize(src) - if(drowsyness) - drowsyness-- - eye_blurry = max(2, eye_blurry) - if(prob(5)) - sleeping += 1 - Paralyse(5) - - confused = max(0, confused - 1) - // decrement dizziness counter, clamped to 0 - if(resting) - dizziness = max(0, dizziness - 5) - jitteriness = max(0, jitteriness - 5) - else - dizziness = max(0, dizziness - 1) - jitteriness = max(0, jitteriness - 1) - updatehealth() return @@ -312,6 +288,8 @@ spawn(0) emote("snore") + var/restingpwr = 1 + 4 * resting + //Dizziness if(dizziness) var/client/C = client @@ -319,7 +297,6 @@ var/pixel_y_diff = 0 var/temp var/saved_dizz = dizziness - dizziness = max(dizziness-1, 0) if(C) var/oldsrc = src var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70 // This shit is annoying at high strength @@ -345,11 +322,22 @@ C.pixel_x -= pixel_x_diff C.pixel_y -= pixel_y_diff src = oldsrc + dizziness = max(dizziness - restingpwr, 0) + + if(drowsyness) + dizziness = max(drowsyness - restingpwr, 0) + eye_blurry = max(2, eye_blurry) + if(prob(5)) + sleeping += 1 + Paralyse(5) + + if(confused) + confused = max(0, confused - 1) //Jitteryness if(jitteriness) do_jitter_animation(jitteriness) - jitteriness = max(jitteriness-1, 0) + jitteriness = max(jitteriness - restingpwr, 0) //Other @@ -380,7 +368,7 @@ CheckStamina() return 1 -//this handles hud updates. Calles update_vision() and handle_hud_icons() +//this handles hud updates. Calls update_vision() and handle_hud_icons() /mob/living/carbon/handle_regular_hud_updates() if(!client) return 0 diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 418ed7d2516..80191c09eea 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -157,17 +157,12 @@ /mob/living/carbon/monkey/attack_slime(mob/living/simple_animal/slime/M as mob) - ..() - var/damage = rand(1, 3) - - if(M.is_adult) - damage = rand(20, 40) - else - damage = rand(5, 35) - adjustBruteLoss(damage) - updatehealth() - - return + if(..()) //successful slime attack + var/damage = rand(5, 35) + if(M.is_adult) + damage = rand(20, 40) + adjustBruteLoss(damage) + updatehealth() /mob/living/carbon/monkey/Stat() ..() @@ -259,4 +254,4 @@ src << "Your mask protects you from the acid." return - take_organ_damage(min(6*toxpwr, acid_volume * toxpwr)) + take_organ_damage(min(6*toxpwr, acid_volume * toxpwr)) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 9341e679715..0f8e3a13d96 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -64,9 +64,6 @@ return /mob/living/proc/handle_chemicals_in_body() - if(reagents) - reagents.metabolize(src) - return /mob/living/proc/handle_blood() @@ -135,7 +132,7 @@ adjustEarDamage(-0.05,-1) -//this handles hud updates. Calles update_vision() and handle_hud_icons() +//this handles hud updates. Calls update_vision() and handle_hud_icons() /mob/living/proc/handle_regular_hud_updates() if(!client) return 0 diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index ab9865d044f..28acd2aa693 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -170,26 +170,11 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I) return // can't attack while eating! if (stat != DEAD) + add_logs(M, src, "attacked", admin=0) M.do_attack_animation(src) visible_message("The [M.name] glomps [src]!", \ "The [M.name] glomps [src]!") - - if(M.powerlevel > 0) - var/stunprob = M.powerlevel * 7 + 10 // 17 at level 1, 80 at level 10 - if(prob(stunprob)) - M.powerlevel -= 3 - if(M.powerlevel < 0) - M.powerlevel = 0 - - visible_message("The [M.name] has shocked [src]!", \ - "The [M.name] has shocked [src]!") - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - return 1 - add_logs(M, src, "attacked", admin=0) - return + return 1 /mob/living/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 3eeb99e09e1..01edcc5a149 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -257,6 +257,7 @@ if(..()) var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) attack_threshold_check(damage) + return 1 /mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) if(!Proj) @@ -291,6 +292,7 @@ if(stat != DEAD) var/damage = rand(1, 3) attack_threshold_check(damage) + return 1 if (M.a_intent == "help") if (health > 0) visible_message("[M.name] [response_help] [src].") @@ -300,13 +302,19 @@ /mob/living/simple_animal/attack_alien(mob/living/carbon/alien/humanoid/M as mob) if(..()) //if harm or disarm intent. - var/damage = rand(15, 30) - visible_message("[M] has slashed at [src]!", \ - "[M] has slashed at [src]!") - playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) - add_logs(M, src, "attacked", admin=0) - attack_threshold_check(damage) - return + if(M.a_intent == "disarm") + playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) + visible_message("[M] [response_disarm] [name]!", \ + "[M] [response_disarm] [name]!") + add_logs(M, src, "disarmed", admin=0) + else + var/damage = rand(15, 30) + visible_message("[M] has slashed at [src]!", \ + "[M] has slashed at [src]!") + playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) + add_logs(M, src, "attacked", admin=0) + attack_threshold_check(damage) + return 1 /mob/living/simple_animal/attack_larva(mob/living/carbon/alien/larva/L as mob) if(..()) //successful larva bite @@ -314,17 +322,15 @@ if(stat != DEAD) L.amount_grown = min(L.amount_grown + damage, L.max_grown) attack_threshold_check(damage) + return 1 /mob/living/simple_animal/attack_slime(mob/living/simple_animal/slime/M as mob) - ..() - var/damage = rand(1, 3) - - if(M.is_adult) - damage = rand(20, 40) - else - damage = rand(5, 35) - attack_threshold_check(damage) - return + if(..()) //successful slime attack + var/damage = rand(5, 30) + if(M.is_adult) + damage = rand(10, 40) + attack_threshold_check(damage) + return 1 /mob/living/simple_animal/proc/attack_threshold_check(var/damage) if(damage <= force_threshold) @@ -402,9 +408,9 @@ if (2.0) adjustBruteLoss(60) - if(3.0) adjustBruteLoss(30) + updatehealth() /mob/living/simple_animal/adjustBruteLoss(damage) health = Clamp(health - damage, 0, maxHealth) diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index c052df6175c..ace53c4346b 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -159,9 +159,7 @@ if (reagents.get_reagent_amount("epinephrine")>=5) mutation_chance = max(mutation_chance - 5,0) //Prevents muation chance going <0% reagents.remove_reagent("epinephrine", 5) - src.updatehealth() - - return //TODO: DEFERRED + updatehealth() /mob/living/simple_animal/slime/handle_regular_status_updates() diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 9fbbc063c5d..97d8865239c 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -95,7 +95,8 @@ var/tally = 0 var/health_deficiency = (100 - health) - if(health_deficiency >= 45) tally += (health_deficiency / 25) + if(health_deficiency >= 45) + tally += (health_deficiency / 25) if(bodytemperature < 183.222) tally += (283.222 - bodytemperature) / 10 * 1.75 @@ -145,10 +146,7 @@ ..() if(statpanel("Status")) - if(is_adult) - stat(null, "Health: [round((health / 200) * 100)]%") - else - stat(null, "Health: [round((health / 150) * 100)]%") + stat(null, "Health: [round((health / maxHealth) * 100)]%") if(!docile) stat(null, "Nutrition: [nutrition]/[get_max_nutrition()]") @@ -174,21 +172,10 @@ ..() /mob/living/simple_animal/slime/ex_act(severity, target) + if (severity == 2.0) + adjustFireLoss(60) ..() - switch (severity) - if (1.0) - gib() - return - - if (2.0) - adjustBruteLoss(60) - adjustFireLoss(60) - - if(3.0) - adjustBruteLoss(30) - - updatehealth() /mob/living/simple_animal/slime/MouseDrop(var/atom/movable/A as mob|obj) if(isliving(A) && A != src && usr == src) @@ -207,58 +194,36 @@ return /mob/living/simple_animal/slime/attack_slime(mob/living/simple_animal/slime/M as mob) - ..() - if(Victim) - Victim = null - visible_message("[M] pulls [src] off!") - return - attacked += 5 - if(src.nutrition >= 100) //steal some nutrition. negval handled in life() - src.nutrition -= (50 + (5 * M.amount_grown)) - M.add_nutrition(50 + (5 * M.amount_grown)) - if(src.health > 0) - src.adjustBruteLoss(4 + (2 * M.amount_grown)) //amt_grown isn't very linear but it works - src.updatehealth() - M.adjustBruteLoss(-4 + (-2 * M.amount_grown)) - M.updatehealth() - return + if(..()) //successful slime attack + if(Victim) + Victim = null + visible_message("[M] pulls [src] off!") + return + attacked += 5 + if(nutrition >= 100) //steal some nutrition. negval handled in life() + nutrition -= (50 + (5 * M.amount_grown)) + M.add_nutrition(50 + (5 * M.amount_grown)) + if(health > 0) + M.adjustBruteLoss(-4 + (-2 * M.amount_grown)) + M.updatehealth() /mob/living/simple_animal/slime/attack_animal(mob/living/simple_animal/M as mob) if(..()) - var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) attacked += 10 - adjustBruteLoss(damage) - updatehealth() + /mob/living/simple_animal/slime/attack_paw(mob/living/carbon/monkey/M as mob) if(..()) //successful monkey bite. - if(stat != DEAD) - attacked += 10 - adjustBruteLoss(rand(1, 3)) - updatehealth() - return + attacked += 10 /mob/living/simple_animal/slime/attack_larva(mob/living/carbon/alien/larva/L as mob) if(..()) //successful larva bite. - var/damage = rand(1, 3) - if(stat != DEAD) - L.amount_grown = min(L.amount_grown + damage, L.max_grown) - adjustBruteLoss(damage) - updatehealth() + attacked += 10 /mob/living/simple_animal/slime/attack_hulk(mob/living/carbon/human/user) if(user.a_intent == "harm") adjustBruteLoss(5) - if(Victim || Target) - Victim = null - Target = null - anchored = 0 - if(prob(80) && !client) - Discipline++ - spawn(0) - step_away(src,user,15) - sleep(3) - step_away(src,user,15) + discipline_slime(user) /mob/living/simple_animal/slime/attack_hand(mob/living/carbon/human/M as mob) @@ -272,18 +237,7 @@ visible_message(" [M] manages to wrestle \the [name] off!") playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - if(prob(90) && !client) - Discipline++ - - spawn() - SStun = 1 - sleep(rand(45,60)) - if(src) - SStun = 0 - - Victim = null - anchored = 0 - step_away(src,M) + discipline_slime(M) else M.do_attack_animation(src) @@ -295,89 +249,16 @@ visible_message(" [M] manages to wrestle \the [name] off of [Victim]!") playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - if(prob(80) && !client) - Discipline++ - - if(!is_adult) - if(Discipline == 1) - attacked = 0 - - spawn() - SStun = 1 - sleep(rand(55,65)) - if(src) - SStun = 0 - - Victim = null - anchored = 0 - step_away(src,M) + discipline_slime(M) else if(..()) //successful attack attacked += 10 /mob/living/simple_animal/slime/attack_alien(mob/living/carbon/alien/humanoid/M as mob) if(..()) //if harm or disarm intent. + attacked += 10 + discipline_slime(M) - if (M.a_intent == "harm") - if (prob(95)) - attacked += 10 - playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) - var/damage = rand(15, 30) - if (damage >= 25) - damage = rand(20, 40) - visible_message("[M] has slashed [name]!", \ - "[M] has slashed [name]!") - else - visible_message("[M] has wounded [name]!", \ - ")[M] has wounded [name]!") - - add_logs(M, src, "attacked", admin=0) - if (health != DEAD) - adjustBruteLoss(damage) - updatehealth() - else - playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1) - visible_message("[M] has attempted to lunge at [name]!", \ - "[M] has attempted to lunge at [name]!") - - if (M.a_intent == "disarm") - playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) - var/damage = 5 - attacked += 10 - - if(prob(95)) - visible_message("[M] has tackled [name]!", \ - "[M] has tackled [name]!") - - if(Victim || Target) - Victim = null - Target = null - anchored = 0 - if(prob(80) && !client) - Discipline++ - if(!istype(src, /mob/living/simple_animal/slime)) - if(Discipline == 1) - attacked = 0 - - spawn() - SStun = 1 - sleep(rand(5,20)) - SStun = 0 - - spawn(0) - - step_away(src,M,15) - sleep(3) - step_away(src,M,15) - - else - drop_item() - visible_message("[M] has disarmed [name]!", - "[M] has disarmed [name]!") - add_logs(M, src, "disarmed", admin=0) - adjustBruteLoss(damage) - updatehealth() - return /mob/living/simple_animal/slime/attackby(obj/item/W, mob/living/user, params) if(istype(W,/obj/item/stack/sheet/mineral/plasma)) //Let's you feed slimes plasma. @@ -402,29 +283,7 @@ if(is_adult) force_effect = round(W.force/2) if(prob(10 + force_effect)) - if(Victim || Target) - if(prob(80) && !client) - Discipline++ - if(Discipline == 1 && !is_adult) - attacked = 0 - spawn() - SStun = 1 - sleep(rand(5,20)) - SStun = 0 - - Victim = null - Target = null - anchored = 0 - - spawn(0) - if(user) - canmove = 0 - step_away(src, user) - if(prob(25 + 2*force_effect)) - sleep(2) - if(user) - step_away(src, user) - canmove = 1 + discipline_slime(user) ..() /mob/living/simple_animal/slime/show_inv(mob/user) @@ -441,19 +300,6 @@ /mob/living/simple_animal/slime/getTrail() return null -/mob/living/simple_animal/slime/slip(var/s_amount, var/w_amount, var/obj/O, var/lube) - if(lube>=2) - return 0 - .=..() - -/mob/living/simple_animal/slime/stripPanelUnequip(obj/item/what, mob/who) - src << "You don't have the dexterity to do this!" - return - -/mob/living/simple_animal/slime/stripPanelEquip(obj/item/what, mob/who) - src << "You don't have the dexterity to do this!" - return - /mob/living/simple_animal/slime/examine(mob/user) var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" @@ -486,6 +332,34 @@ user << msg return +/mob/living/simple_animal/slime/proc/discipline_slime(mob/user) + + if(prob(80) && !client) + Discipline++ + + if(!is_adult) + if(Discipline == 1) + attacked = 0 + + if(Victim || Target) + Victim = null + Target = null + anchored = 0 + + spawn(0) + SStun = 1 + sleep(rand(20,60)) + SStun = 0 + + spawn(0) + canmove = 0 + if(user) + step_away(src,user,15) + sleep(3) + if(user) + step_away(src,user,15) + canmove = 1 + /mob/living/simple_animal/slime/pet docile = 1 diff --git a/tgstation.dme b/tgstation.dme index d35f40c877b..39a1eaefec5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1053,7 +1053,6 @@ #include "code\modules\mob\living\carbon\carbon_defines.dm" #include "code\modules\mob\living\carbon\death.dm" #include "code\modules\mob\living\carbon\emote.dm" -#include "code\modules\mob\living\carbon\inventory.dm" #include "code\modules\mob\living\carbon\life.dm" #include "code\modules\mob\living\carbon\say.dm" #include "code\modules\mob\living\carbon\update_icons.dm" From 98f9916317e39a0d725420723c2093637f0ad2ec Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 21 Mar 2015 20:44:32 +0100 Subject: [PATCH 16/65] Yet more work on slime procs and life subprocs. --- code/game/gamemodes/blob/blobs/blob_mobs.dm | 9 +- code/modules/holiday/halloween.dm | 5 +- code/modules/mining/equipment_locker.dm | 9 +- code/modules/mob/living/carbon/alien/life.dm | 4 +- code/modules/mob/living/carbon/brain/life.dm | 9 +- code/modules/mob/living/carbon/life.dm | 153 +++++++++--------- code/modules/mob/living/life.dm | 44 ++--- code/modules/mob/living/silicon/robot/life.dm | 34 ++-- .../mob/living/simple_animal/constructs.dm | 9 +- .../simple_animal/friendly/drone/_drone.dm | 5 +- .../mob/living/simple_animal/hostile/alien.dm | 16 +- .../mob/living/simple_animal/hostile/bear.dm | 9 +- .../mob/living/simple_animal/hostile/bees.dm | 9 +- .../mob/living/simple_animal/hostile/carp.dm | 9 +- .../living/simple_animal/hostile/faithless.dm | 9 +- .../simple_animal/hostile/giant_spider.dm | 8 +- .../living/simple_animal/hostile/hivebot.dm | 9 +- .../simple_animal/hostile/killertomato.dm | 9 +- .../mob/living/simple_animal/hostile/mimic.dm | 9 +- .../simple_animal/hostile/mining_mobs.dm | 16 +- .../living/simple_animal/hostile/pirate.dm | 9 +- .../simple_animal/hostile/retaliate/bat.dm | 9 +- .../simple_animal/hostile/retaliate/clown.dm | 19 +-- .../living/simple_animal/hostile/russian.dm | 9 +- .../living/simple_animal/hostile/statue.dm | 9 +- .../living/simple_animal/hostile/syndicate.dm | 36 +---- .../mob/living/simple_animal/hostile/tree.dm | 9 +- .../modules/mob/living/simple_animal/shade.dm | 4 +- .../mob/living/simple_animal/simple_animal.dm | 114 ++++++------- .../mob/living/simple_animal/slime/life.dm | 19 ++- 30 files changed, 229 insertions(+), 392 deletions(-) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 7b814d860a5..dde6ec01bb4 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -8,14 +8,7 @@ icon = 'icons/mob/blob.dmi' pass_flags = PASSBLOB faction = list("blob") - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = 360 var/mob/camera/blob/overmind = null diff --git a/code/modules/holiday/halloween.dm b/code/modules/holiday/halloween.dm index 8850b6e3f4d..1f74c911de0 100644 --- a/code/modules/holiday/halloween.dm +++ b/code/modules/holiday/halloween.dm @@ -234,8 +234,6 @@ maxHealth = 1e6 health = 1e6 emote_see = list("silently stares") - heat_damage_per_tick = 0 - cold_damage_per_tick = 0 unsuitable_atmos_damage = 0 var/timer @@ -288,3 +286,6 @@ visible_message("[src] seems to be resisting the effect!") else ..() + +/mob/living/simple_animal/hostile/retaliate/clown/insane/handle_temperature_damage() + return \ No newline at end of file diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 2fdf99e3265..b8f160bf058 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -581,14 +581,7 @@ mouse_opacity = 1 faction = list("neutral") a_intent = "harm" - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 wander = 0 idle_vision_range = 5 diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 9c9f00f156d..4d8284343d8 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -31,14 +31,12 @@ handle_breath_temperature(breath) -/mob/living/carbon/alien/handle_regular_status_updates() +/mob/living/carbon/alien/handle_status_effects() ..() //natural reduction of movement delay due to stun. if(move_delay_add > 0) move_delay_add = max(0, move_delay_add - rand(1, 2)) - return 1 - /mob/living/carbon/alien/handle_vision() if(stat == DEAD) diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index a24fd4b084c..be2b01d8732 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -64,7 +64,7 @@ death() eye_blind = max(eye_blind, 1) silent = 0 - return 1 + return else stat = CONSCIOUS @@ -121,8 +121,13 @@ else eye_blind = 0 - return 1 + return 1 +/mob/living/carbon/brain/handle_disabilities() + return + +/mob/living/carbon/brain/handle_status_effects() + return /mob/living/carbon/brain/handle_regular_hud_updates() diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 5e58fc115c2..053d9ffee27 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -235,9 +235,6 @@ if(reagents) reagents.metabolize(src) - updatehealth() - return - /mob/living/carbon/handle_blood() return @@ -264,44 +261,59 @@ M.adjustBruteLoss(5) nutrition += 10 +//This updates the health and status of the mob (conscious, unconscious, dead) /mob/living/carbon/handle_regular_status_updates() - updatehealth() - if(health <= config.health_threshold_dead || !getorgan(/obj/item/organ/brain)) - death() - return 1 + if(..()) //alive - if(stat != DEAD) + if(health <= config.health_threshold_dead || !getorgan(/obj/item/organ/brain)) + death() + return if(getOxyLoss() > 50 || health <= config.health_threshold_crit) Paralyse(3) stat = UNCONSCIOUS - ..() - - if(sleeping && !paralysis) - handle_dreams() - adjustStaminaLoss(-10) - sleeping = max(sleeping-1, 0) + if(sleeping) stat = UNCONSCIOUS - if( prob(10) && health && !hal_crit ) - spawn(0) - emote("snore") - var/restingpwr = 1 + 4 * resting + CheckStamina() + return 1 - //Dizziness - if(dizziness) - var/client/C = client - var/pixel_x_diff = 0 - var/pixel_y_diff = 0 - var/temp - var/saved_dizz = dizziness - if(C) - var/oldsrc = src - var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70 // This shit is annoying at high strength - src = null - spawn(0) +//this updates all special effects: stunned, sleeping, weakened, druggy, stuttering, etc.. +/mob/living/carbon/handle_status_effects() + ..() + + if(sleeping) + handle_dreams() + adjustStaminaLoss(-10) + sleeping = max(sleeping-1, 0) + if( prob(10) && health && !hal_crit ) + spawn(0) + emote("snore") + + var/restingpwr = 1 + 4 * resting + + //Dizziness + if(dizziness) + var/client/C = client + var/pixel_x_diff = 0 + var/pixel_y_diff = 0 + var/temp + var/saved_dizz = dizziness + if(C) + var/oldsrc = src + var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70 // This shit is annoying at high strength + src = null + spawn(0) + if(C) + temp = amplitude * sin(0.008 * saved_dizz * world.time) + pixel_x_diff += temp + C.pixel_x += temp + temp = amplitude * cos(0.008 * saved_dizz * world.time) + pixel_y_diff += temp + C.pixel_y += temp + sleep(3) if(C) temp = amplitude * sin(0.008 * saved_dizz * world.time) pixel_x_diff += temp @@ -309,64 +321,51 @@ temp = amplitude * cos(0.008 * saved_dizz * world.time) pixel_y_diff += temp C.pixel_y += temp - sleep(3) - if(C) - temp = amplitude * sin(0.008 * saved_dizz * world.time) - pixel_x_diff += temp - C.pixel_x += temp - temp = amplitude * cos(0.008 * saved_dizz * world.time) - pixel_y_diff += temp - C.pixel_y += temp - sleep(3) - if(C) - C.pixel_x -= pixel_x_diff - C.pixel_y -= pixel_y_diff - src = oldsrc - dizziness = max(dizziness - restingpwr, 0) + sleep(3) + if(C) + C.pixel_x -= pixel_x_diff + C.pixel_y -= pixel_y_diff + src = oldsrc + dizziness = max(dizziness - restingpwr, 0) - if(drowsyness) - dizziness = max(drowsyness - restingpwr, 0) - eye_blurry = max(2, eye_blurry) - if(prob(5)) - sleeping += 1 - Paralyse(5) + if(drowsyness) + dizziness = max(drowsyness - restingpwr, 0) + eye_blurry = max(2, eye_blurry) + if(prob(5)) + sleeping += 1 + Paralyse(5) - if(confused) - confused = max(0, confused - 1) + if(confused) + confused = max(0, confused - 1) - //Jitteryness - if(jitteriness) - do_jitter_animation(jitteriness) - jitteriness = max(jitteriness - restingpwr, 0) + //Jitteryness + if(jitteriness) + do_jitter_animation(jitteriness) + jitteriness = max(jitteriness - restingpwr, 0) - //Other + if(stuttering) + stuttering = max(stuttering-1, 0) - if(stuttering) - stuttering = max(stuttering-1, 0) + if(slurring) + slurring = max(slurring-1,0) - if(slurring) - slurring = max(slurring-1,0) + if(silent) + silent = max(silent-1, 0) - if(silent) - silent = max(silent-1, 0) + if(druggy) + druggy = max(druggy-1, 0) - if(druggy) - druggy = max(druggy-1, 0) - - if(hallucination) - spawn handle_hallucinations() - - if(hallucination<=2) - hallucination = 0 - else - hallucination -= 2 + if(hallucination) + spawn handle_hallucinations() + if(hallucination<=2) + hallucination = 0 else - for(var/atom/a in hallucinations) - qdel(a) + hallucination -= 2 - CheckStamina() - return 1 + else + for(var/atom/a in hallucinations) + qdel(a) //this handles hud updates. Calls update_vision() and handle_hud_icons() /mob/living/carbon/handle_regular_hud_updates() diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 0f8e3a13d96..e0f7be65cde 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -41,14 +41,16 @@ //stuff in the stomach handle_stomach() - update_canmove() - update_gravity(mob_has_gravity()) for(var/obj/item/weapon/grab/G in src) G.process() - handle_regular_status_updates() // Status updates, death etc. + if(handle_regular_status_updates()) // Status & health update, are we dead or alive etc. + handle_disabilities() // eye, ear, brain damages + handle_status_effects() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc + + update_canmove() if(client) handle_regular_hud_updates() @@ -72,12 +74,19 @@ /mob/living/proc/handle_random_events() return +/mob/living/proc/handle_automated_movement() + return + +/mob/living/proc/handle_automated_speech() + return + /mob/living/proc/handle_environment(var/datum/gas_mixture/environment) return /mob/living/proc/handle_stomach() return +//This updates the health and status of the mob (conscious, unconscious, dead) /mob/living/proc/handle_regular_status_updates() updatehealth() @@ -85,7 +94,6 @@ if(stat != DEAD) if(paralysis) - AdjustParalysis(-1) stat = UNCONSCIOUS else if (status_flags & FAKEDEATH) @@ -94,25 +102,21 @@ else stat = CONSCIOUS - handle_disabilities() - - if(stunned) - AdjustStunned(-1) - if(!stunned) - update_icons() - - if(weakened) - weakened = max(weakened-1,0) - if(!weakened) - update_icons() - return 1 -/mob/living/proc/handle_automated_movement() - return +//this updates all special effects: stunned, sleeping, weakened, druggy, stuttering, etc.. +/mob/living/proc/handle_status_effects() + if(paralysis) + AdjustParalysis(-1) + if(stunned) + AdjustStunned(-1) + if(!stunned) + update_icons() -/mob/living/proc/handle_automated_speech() - return + if(weakened) + AdjustWeakened(-1) + if(!weakened) + update_icons() /mob/living/proc/handle_disabilities() //Eyes diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index ba45e348d94..09aef431b21 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -49,12 +49,12 @@ else camera.status = 1 - updatehealth() + if (..()) //Alive. - if(health <= config.health_threshold_dead && stat != DEAD) //die only once - death() + if(health <= config.health_threshold_dead) //die only once + death() + return - if (stat != DEAD) //Alive. if(health < 50) //Gradual break down of modules as more damage is sustained if(uneq_module(module_state_3)) src << "SYSTEM ERROR: Module 3 OFFLINE." @@ -70,29 +70,19 @@ if (paralysis || stunned || weakened) //Stunned etc. stat = UNCONSCIOUS - if (stunned > 0) - AdjustStunned(-1) - if (weakened > 0) - AdjustWeakened(-1) - if (paralysis > 0) - AdjustParalysis(-1) - eye_blind = max(eye_blind, 1) - - else //Not stunned. - src.stat = CONSCIOUS - - if (stuttering) - stuttering-- - - if (druggy) - druggy = max(0, druggy-1) - - handle_disabilities() use_power() return 1 +/mob/living/silicon/robot/handle_status_effects() + ..() + if (stuttering) + stuttering = max(0, stuttering - 1) + + if (druggy) + druggy = max(0, druggy - 1) + /mob/living/silicon/robot/handle_regular_hud_updates() if(!client) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index f47fb6e8584..8f00dc6ea8a 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -14,14 +14,7 @@ stop_automated_movement = 1 status_flags = CANPUSH attack_sound = 'sound/weapons/punch1.ogg' - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 faction = list("cult") var/list/construct_spells = list() diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index 158200a0de6..6b7f731e675 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -19,8 +19,6 @@ gender = NEUTER health = 30 maxHealth = 30 - heat_damage_per_tick = 0 - cold_damage_per_tick = 0 unsuitable_atmos_damage = 0 wander = 0 speed = 0 @@ -175,3 +173,6 @@ /mob/living/simple_animal/drone/check_eye_prot() return 2 + +/mob/living/simple_animal/drone/handle_temperature_damage() + return diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index acc9db2b3c0..1598ca78bc7 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -21,19 +21,11 @@ attacktext = "slashes" a_intent = "harm" attack_sound = 'sound/weapons/bladeslice.ogg' - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 15 faction = list("alien") status_flags = CANPUSH minbodytemp = 0 - heat_damage_per_tick = 20 /mob/living/simple_animal/hostile/alien/drone name = "alien drone" @@ -140,3 +132,9 @@ ..(gibbed) visible_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...") playsound(src, 'sound/voice/hiss6.ogg', 100, 1) + +/mob/living/simple_animal/hostile/alien/handle_temperature_damage() + if(bodytemperature < minbodytemp) + adjustBruteLoss(2) + else if(bodytemperature > maxbodytemp) + adjustBruteLoss(20) diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 6e6022cd1ee..5a05889ccd9 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -28,14 +28,7 @@ friendly = "bear hugs" //Space bears aren't affected by cold. - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = 1500 diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 9a07fae29f4..f5907498997 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -23,14 +23,7 @@ pass_flags = PASSTABLE //Spaceborn beings don't get hurt by space - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 /mob/living/simple_animal/hostile/poison/bees/Process_Spacemove(var/movement_dir = 0) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 95e35fa21eb..819ca1d98ce 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -23,14 +23,7 @@ attack_sound = 'sound/weapons/bite.ogg' //Space carp aren't affected by cold. - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = 1500 diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 51465393c2c..aa8912cb618 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -19,14 +19,7 @@ attacktext = "grips" attack_sound = 'sound/hallucinations/growl1.ogg' - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 faction = list("faithless") diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index b4582cd4d46..c0219aac81b 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -43,8 +43,6 @@ health = 200 melee_damage_lower = 15 melee_damage_upper = 20 - heat_damage_per_tick = 20 - cold_damage_per_tick = 20 faction = list("spiders") var/busy = 0 pass_flags = PASSTABLE @@ -264,6 +262,12 @@ busy = 0 stop_automated_movement = 0 +/mob/living/simple_animal/hostile/poison/giant_spider/handle_temperature_damage() + if(bodytemperature < minbodytemp) + adjustBruteLoss(20) + else if(bodytemperature > maxbodytemp) + adjustBruteLoss(20) + #undef SPINNING_WEB #undef LAYING_EGGS #undef MOVING_TO_TARGET diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 7613c0a1a82..cd357f5b84e 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -17,14 +17,7 @@ projectilesound = 'sound/weapons/Gunshot.ogg' projectiletype = /obj/item/projectile/hivebotbullet faction = list("hivebot") - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 /mob/living/simple_animal/hostile/hivebot/range diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm index 5f746f8a27f..efddba87b34 100644 --- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm +++ b/code/modules/mob/living/simple_animal/hostile/killertomato.dm @@ -20,13 +20,6 @@ ventcrawler = 2 faction = list("plants") - min_oxy = 5 - max_oxy = 0 - min_tox = 0 - max_tox = 5 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 150 maxbodytemp = 500 diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 4003bda143b..e4d98981ad3 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -23,14 +23,7 @@ attack_sound = 'sound/weapons/bite.ogg' var/Attackemote = "growls at" - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 faction = list("mimic") diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index e45d648f31c..917ee68f109 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -1,18 +1,10 @@ /mob/living/simple_animal/hostile/asteroid/ vision_range = 2 - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 15 faction = list("mining") environment_smash = 2 minbodytemp = 0 - heat_damage_per_tick = 20 response_help = "pokes" response_disarm = "shoves" response_harm = "strikes" @@ -481,3 +473,9 @@ else user << "You can't improve [D] any further." return + +/mob/living/simple_animal/hostile/asteroid/handle_temperature_damage() + if(bodytemperature < minbodytemp) + adjustBruteLoss(2) + else if(bodytemperature > maxbodytemp) + adjustBruteLoss(20) diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index 71dde5bdd9a..1e1fd61c691 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -20,14 +20,7 @@ attacktext = "slashes" attack_sound = 'sound/weapons/bladeslice.ogg' - min_oxy = 5 - max_oxy = 0 - min_tox = 0 - max_tox = 1 - min_co2 = 0 - max_co2 = 5 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 15 var/corpse = /obj/effect/landmark/mobcorpse/pirate var/weapon1 = /obj/item/weapon/melee/energy/sword/pirate diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm index 91284c9586a..0634b785801 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm @@ -27,12 +27,5 @@ //Space bats need no air to fly in. - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index 23fc3a7db42..3fca1ad51b4 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -25,16 +25,13 @@ attack_sound = 'sound/items/bikehorn.ogg' environment_smash = 0 - min_oxy = 5 - max_oxy = 0 - min_tox = 0 - max_tox = 1 - min_co2 = 0 - max_co2 = 5 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) minbodytemp = 270 maxbodytemp = 370 - heat_damage_per_tick = 15 //amount of damage applied if animal's body temperature is higher than maxbodytemp - cold_damage_per_tick = 10 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp - unsuitable_atmos_damage = 10 \ No newline at end of file + unsuitable_atmos_damage = 10 + +/mob/living/simple_animal/hostile/retaliate/clown/handle_temperature_damage() + if(bodytemperature < minbodytemp) + adjustBruteLoss(10) + else if(bodytemperature > maxbodytemp) + adjustBruteLoss(15) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index 568d89794e4..c98022a10cd 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -21,14 +21,7 @@ a_intent = "harm" var/corpse = /obj/effect/landmark/mobcorpse/russian var/weapon1 = /obj/item/weapon/kitchenknife - min_oxy = 5 - max_oxy = 0 - min_tox = 0 - max_tox = 1 - min_co2 = 0 - max_co2 = 5 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 15 faction = list("russian") status_flags = CANPUSH diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 5f9fcd35428..29dcdd93ebc 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -23,14 +23,7 @@ attacktext = "claws" attack_sound = 'sound/hallucinations/growl1.ogg' - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 faction = list("statue") diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index c17eecd7280..bfd39fc4f7c 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -22,14 +22,7 @@ var/corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier var/weapon1 var/weapon2 - min_oxy = 5 - max_oxy = 0 - min_tox = 0 - max_tox = 1 - min_co2 = 0 - max_co2 = 5 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 15 faction = list("syndicate") status_flags = CANPUSH @@ -84,14 +77,7 @@ /mob/living/simple_animal/hostile/syndicate/melee/space - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 icon_state = "syndicatemeleespace" icon_living = "syndicatemeleespace" @@ -119,14 +105,7 @@ icon_state = "syndicaterangedpsace" icon_living = "syndicaterangedpsace" name = "Syndicate Commando" - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 corpse = /obj/effect/landmark/mobcorpse/syndicatecommando speed = 1 @@ -149,14 +128,7 @@ attacktext = "cuts" attack_sound = 'sound/weapons/bladeslice.ogg' faction = list("syndicate") - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 mob_size = MOB_SIZE_SMALL diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 3c7cd705506..0205b68df60 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -25,14 +25,7 @@ attack_sound = 'sound/weapons/bite.ogg' //Space carp aren't affected by atmos. - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 faction = list("hostile") diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 15ff46d6403..e70e6560b33 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -18,9 +18,7 @@ attacktext = "drains the life from" minbodytemp = 0 maxbodytemp = 4000 - min_oxy = 0 - max_co2 = 0 - max_tox = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) speed = -1 stop_automated_movement = 1 status_flags = 0 diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 01edcc5a149..04039784b11 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -35,21 +35,11 @@ //Temperature effect var/minbodytemp = 250 var/maxbodytemp = 350 - var/heat_damage_per_tick = 3 //amount of damage applied if animal's body temperature is higher than maxbodytemp - var/cold_damage_per_tick = 2 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp //Atmos effect - Yes, you can make creatures that require plasma or co2 to survive. N2O is a trace gas and handled separately, hence why it isn't here. It'd be hard to add it. Hard and me don't mix (Yes, yes make all the dick jokes you want with that.) - Errorage - var/min_oxy = 5 - var/max_oxy = 0 //Leaving something at 0 means it's off - has no maximum - var/min_tox = 0 - var/max_tox = 1 - var/min_co2 = 0 - var/max_co2 = 5 - var/min_n2 = 0 - var/max_n2 = 0 + var/list/atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) //Leaving something at 0 means it's off - has no maximum var/unsuitable_atmos_damage = 2 //This damage is taken when atmos doesn't fit all the requirements above - //LETTING SIMPLE ANIMALS ATTACK? WHAT COULD GO WRONG. Defaults to zero so Ian can still be cuddly var/melee_damage_lower = 0 var/melee_damage_upper = 0 @@ -87,37 +77,33 @@ return /mob/living/simple_animal/handle_regular_status_updates() - if(!..()) - auto_revive() + if(..()) + if(health < 1) + death() - else if(health < 1) - death() +/mob/living/simple_animal/handle_disabilities() + //Eyes + if(disabilities & BLIND || stat) + eye_blind = max(eye_blind, 1) else - if(stuttering) - stuttering = 0 - if(eye_blind) - eye_blind = min(eye_blind, 1) - - setEarDamage((ear_damage < 25 ? 0 : ear_damage),(disabilities & DEAF ? 1 :0)) - - if(disabilities & BLIND) - eye_blind = max(eye_blind, 1) - - if(eye_blurry > 0) + eye_blind = 0 + if(eye_blurry) eye_blurry = 0 - if(druggy > 0) - druggy = 0 + //Ears + if(disabilities & DEAF) + setEarDamage(-1, max(ear_deaf, 1)) + else if(ear_damage < 100) + setEarDamage(0, 0) -/mob/living/simple_animal/proc/auto_revive() - if(stat == DEAD && health > 0) - icon_state = icon_living - dead_mob_list -= src - living_mob_list += src - stat = CONSCIOUS - density = 1 - update_canmove() +/mob/living/simple_animal/handle_status_effects() + ..() + if(stuttering) + stuttering = 0 + + if(druggy) + druggy = 0 /mob/living/simple_animal/handle_automated_movement() if(!stop_automated_movement && wander) @@ -187,41 +173,33 @@ var/n2 = ST.air.nitrogen var/co2 = ST.air.carbon_dioxide - if(min_oxy) - if(oxy < min_oxy) - atmos_suitable = 0 - if(max_oxy) - if(oxy > max_oxy) - atmos_suitable = 0 - if(min_tox) - if(tox < min_tox) - atmos_suitable = 0 - if(max_tox) - if(tox > max_tox) - atmos_suitable = 0 - if(min_n2) - if(n2 < min_n2) - atmos_suitable = 0 - if(max_n2) - if(n2 > max_n2) - atmos_suitable = 0 - if(min_co2) - if(co2 < min_co2) - atmos_suitable = 0 - if(max_co2) - if(co2 > max_co2) - atmos_suitable = 0 + if(atmos_requirements["min_oxy"] && oxy < atmos_requirements["min_oxy"]) + atmos_suitable = 0 + else if(atmos_requirements["max_oxy"] && oxy > atmos_requirements["max_oxy"]) + atmos_suitable = 0 + else if(atmos_requirements["min_tox"] && tox < atmos_requirements["min_tox"]) + atmos_suitable = 0 + else if(atmos_requirements["max_tox"] && tox > atmos_requirements["max_tox"]) + atmos_suitable = 0 + else if(atmos_requirements["min_n2"] && n2 < atmos_requirements["min_n2"]) + atmos_suitable = 0 + else if(atmos_requirements["max_n2"] && n2 > atmos_requirements["max_n2"]) + atmos_suitable = 0 + else if(atmos_requirements["min_co2"] && co2 < atmos_requirements["min_co2"]) + atmos_suitable = 0 + else if(atmos_requirements["max_co2"] && co2 > atmos_requirements["max_co2"]) + atmos_suitable = 0 - //Atmos effect + if(!atmos_suitable) + adjustBruteLoss(unsuitable_atmos_damage) + + handle_temperature_damage() + +/mob/living/simple_animal/proc/handle_temperature_damage() if(bodytemperature < minbodytemp) - adjustBruteLoss(cold_damage_per_tick) + adjustBruteLoss(2) else if(bodytemperature > maxbodytemp) - adjustBruteLoss(heat_damage_per_tick) - - if(!atmos_suitable) - adjustBruteLoss(unsuitable_atmos_damage) - - + adjustBruteLoss(3) /mob/living/simple_animal/gib(var/animation = 0) if(icon_gib) diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index ace53c4346b..bff37ced643 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -163,14 +163,13 @@ /mob/living/simple_animal/slime/handle_regular_status_updates() - ..() - - if(stat != DEAD && prob(30)) - adjustOxyLoss(-1) - adjustToxLoss(-1) - adjustFireLoss(-1) - adjustCloneLoss(-1) - adjustBruteLoss(-1) + if(..()) + if(prob(30)) + adjustOxyLoss(-1) + adjustToxLoss(-1) + adjustFireLoss(-1) + adjustCloneLoss(-1) + adjustBruteLoss(-1) /mob/living/simple_animal/slime/proc/handle_nutrition() @@ -328,10 +327,10 @@ AIprocess() /mob/living/simple_animal/slime/handle_automated_movement() - return //random movement is currently handled in handle_target() + return //slime random movement is currently handled in handle_target() /mob/living/simple_animal/slime/handle_automated_speech() - return //random speech is currently handled in handle_speech() + return //slime random speech is currently handled in handle_speech() /mob/living/simple_animal/slime/proc/handle_mood() //Mood starts here From 973f3742762094614945b492e0232dc3e073d8fe Mon Sep 17 00:00:00 2001 From: xxalpha Date: Sun, 22 Mar 2015 16:26:58 +0000 Subject: [PATCH 17/65] Fixed the C4 being planted on the DA. --- code/game/objects/items/weapons/explosives.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 18c0d9fb0a6..e82f7403012 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -63,6 +63,9 @@ return if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/)) return + if(loc == target) + return + user << "Planting explosives..." if(do_after(user, 50) && in_range(user, target)) From 7aa21179e0d47ba60523088d1a37281e5eccddc6 Mon Sep 17 00:00:00 2001 From: phil235 Date: Mon, 23 Mar 2015 16:34:48 +0100 Subject: [PATCH 18/65] small adjustments --- code/modules/mob/living/life.dm | 11 ----------- code/modules/mob/living/simple_animal/parrot.dm | 5 +++-- .../mob/living/simple_animal/simple_animal.dm | 13 ++++++++++--- .../mob/living/simple_animal/slime/slime.dm | 16 +++++++++++++--- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index e0f7be65cde..89a2a13a753 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -25,11 +25,6 @@ //Random events (vomiting etc) handle_random_events() - if(!client && !stat) - handle_automated_movement() - - handle_automated_speech() - . = 1 //Handle temperature/pressure differences between body and environment @@ -74,12 +69,6 @@ /mob/living/proc/handle_random_events() return -/mob/living/proc/handle_automated_movement() - return - -/mob/living/proc/handle_automated_speech() - return - /mob/living/proc/handle_environment(var/datum/gas_mixture/environment) return diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 7d6952f5acc..5a97ddb8bb4 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -371,8 +371,9 @@ /mob/living/simple_animal/parrot/handle_automated_movement() - if(!..()) - return //If it can't or shouldn't move, dont let it move. + if(!isturf(src.loc) || !canmove || buckled) + return //If it can't move, dont let it move. (The buckled check probably isn't necessary thanks to canmove) + //-----SLEEPING if(parrot_state == PARROT_PERCH) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 04039784b11..9bb92b61506 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -76,6 +76,13 @@ ..() return +/mob/living/simple_animal/Life() + if(..()) + if(!client && !stat) + handle_automated_movement() + + handle_automated_speech() + /mob/living/simple_animal/handle_regular_status_updates() if(..()) if(health < 1) @@ -105,19 +112,19 @@ if(druggy) druggy = 0 -/mob/living/simple_animal/handle_automated_movement() +/mob/living/simple_animal/proc/handle_automated_movement() if(!stop_automated_movement && wander) if(isturf(src.loc) && !resting && !buckled && canmove) //This is so it only moves if it's not inside a closet, gentics machine, etc. turns_since_move++ if(turns_since_move >= turns_per_move) - if(!(stop_automated_movement_when_pulled && pulledby)) //Soma animals don't move when pulled + if(!(stop_automated_movement_when_pulled && pulledby)) //Some animals don't move when pulled var/anydir = pick(cardinal) if(Process_Spacemove(anydir)) Move(get_step(src, anydir), anydir) turns_since_move = 0 return 1 -/mob/living/simple_animal/handle_automated_speech() +/mob/living/simple_animal/proc/handle_automated_speech() if(speak_chance) if(rand(0,200) < speak_chance) if(speak && speak.len) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 97d8865239c..da8b91c77e6 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -250,9 +250,14 @@ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) discipline_slime(M) - - else if(..()) //successful attack - attacked += 10 + else + if(stat == DEAD && surgeries.len) + if(M.a_intent == "help") + for(var/datum/surgery/S in surgeries) + if(S.next_step(M, src)) + return 1 + if(..()) //successful attack + attacked += 10 /mob/living/simple_animal/slime/attack_alien(mob/living/carbon/alien/humanoid/M as mob) if(..()) //if harm or disarm intent. @@ -261,6 +266,11 @@ /mob/living/simple_animal/slime/attackby(obj/item/W, mob/living/user, params) + if(stat == DEAD && surgeries.len) + if(user.a_intent == "help") + for(var/datum/surgery/S in surgeries) + if(S.next_step(user, src)) + return 1 if(istype(W,/obj/item/stack/sheet/mineral/plasma)) //Let's you feed slimes plasma. if (user in Friends) ++Friends[user] From 17fb9190204c245f50fc17874ac1c77ddd93c26a Mon Sep 17 00:00:00 2001 From: phil235 Date: Mon, 23 Mar 2015 17:11:07 +0100 Subject: [PATCH 19/65] More fixes --- code/modules/mob/living/carbon/alien/life.dm | 2 +- .../living/simple_animal/friendly/corgi.dm | 7 +-- .../mob/living/simple_animal/slime/say.dm | 3 +- .../mob/living/simple_animal/slime/slime.dm | 5 ++- .../reagents/Chemistry-Goon-Pyrotechnics.dm | 2 +- .../research/xenobiology/xenobiology.dm | 43 +++++++++++++++++-- 6 files changed, 51 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 4d8284343d8..4df5469296f 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -37,7 +37,7 @@ if(move_delay_add > 0) move_delay_add = max(0, move_delay_add - rand(1, 2)) -/mob/living/carbon/alien/handle_vision() +/mob/living/carbon/alien/update_sight() if(stat == DEAD) sight |= SEE_TURFS diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 57b67ba5993..1521cf8602e 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -24,8 +24,8 @@ pcollar = new(src) update_collar() -/mob/living/simple_animal/pet/Die() - ..() +/mob/living/simple_animal/pet/death(gibbed) + ..(gibbed) update_collar() /mob/living/simple_animal/pet/proc/update_collar() @@ -68,7 +68,8 @@ regenerate_icons() /mob/living/simple_animal/pet/corgi/death(gibbed) - ..(gibbed) regenerate_icons() + ..(gibbed) + regenerate_icons() /mob/living/simple_animal/pet/corgi/revive() ..() diff --git a/code/modules/mob/living/simple_animal/slime/say.dm b/code/modules/mob/living/simple_animal/slime/say.dm index 97e4b7f8f7c..bd8d13c185a 100644 --- a/code/modules/mob/living/simple_animal/slime/say.dm +++ b/code/modules/mob/living/simple_animal/slime/say.dm @@ -8,7 +8,8 @@ return "telepathically chirps, \"[text]\""; -/mob/living/simple_animal/slime/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans) if(speaker != src && !radio_freq) +/mob/living/simple_animal/slime/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans) + if(speaker != src && !radio_freq) if (speaker in Friends) speech_buffer = list() speech_buffer += speaker diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index da8b91c77e6..43f2230e234 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -3,7 +3,6 @@ icon = 'icons/mob/slimes.dmi' icon_state = "grey baby slime" pass_flags = PASSTABLE - say_message = "hums" ventcrawler = 2 var/is_adult = 0 var/docile = 0 @@ -30,6 +29,10 @@ see_in_dark = 8 update_slimes = 0 + verb_say = "telepathically chirps" + verb_ask = "telepathically asks" + verb_yell = "telephatically cries" + // canstun and canweaken don't affect slimes because they ignore stun and weakened variables // for the sake of cleanliness, though, here they are. status_flags = CANPARALYSE|CANPUSH diff --git a/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm index 4c596f27033..59ce545d9bc 100644 --- a/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm +++ b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm @@ -434,7 +434,7 @@ datum/reagent/cryostylane/on_mob_life(var/mob/living/M as mob) //TODO: code free datum/reagent/cryostylane/reaction_turf(var/turf/simulated/T, var/volume) if(volume >= 5) - for(var/mob/living/carbon/slime/M in T) + for(var/mob/living/simple_animal/slime/M in T) M.adjustToxLoss(rand(15,30)) datum/reagent/pyrosium diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 4c214b8cb1d..6f07e1b2ba3 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -153,8 +153,12 @@ desc = "A miraculous chemical mix that can raise the intelligence of creatures to human levels." icon = 'icons/obj/chemical.dmi' icon_state = "bottle19" + var/list/not_interested = list() + var/being_used = 0 /obj/item/slimepotion2/afterattack(mob/living/M as mob, mob/user as mob) + if(being_used || !ismob(M)) + return if(!(isslime(M) || isanimal(M) || ismonkey(M) || !M.ckey)) //I'm sorry for this line user << "[M] is already too intelligent for this to work!" return ..() @@ -162,19 +166,50 @@ user << "[M] is dead!" return..() - var/list/candidates = get_candidates(BE_ALIEN, ALIEN_AFK_BRACKET) - var/client/C = null + user << "You begin to apply the potion to [M]..." + being_used = 1 - if(candidates.len) - C = pick(candidates) + var/list/candidates = get_candidates(BE_ALIEN, ALIEN_AFK_BRACKET) + + shuffle(candidates) + + var/time_passed = world.time + var/list/consenting_candidates = list() + + for(var/candidate in candidates) + + if(candidate in not_interested) + continue + + spawn(0) + switch(alert(candidate, "Would you like to play as [M.name]? Please choose quickly!","Confirmation","Yes","No")) + if("Yes") + if((world.time-time_passed)>=50 || !src) + return + consenting_candidates += candidate + if("No") + if(!src) + return + not_interested += candidate + + sleep(50) + + if(!src) + return + + if(consenting_candidates.len) + var/client/C = null + C = pick(consenting_candidates) M.key = C.key M.languages |= HUMAN + M.faction -= "neutral" M << "All at once it makes sense, you know what you are and who you are! Self awareness is yours!" M << "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost." user << "[M] is suddenly attentive and aware. It worked!" qdel(src) else user << "[M] looks interested for a moment, but then looks back down. Maybe you should try again later..." + being_used = 0 ..() /obj/item/weapon/slimesteroid From b78ce020e7af013fefd3e00dfae58684b1641cf7 Mon Sep 17 00:00:00 2001 From: phil235 Date: Mon, 23 Mar 2015 19:47:39 +0100 Subject: [PATCH 20/65] fixing more stuff --- .../modules/mob/living/simple_animal/simple_animal.dm | 11 ++++------- code/modules/mob/living/simple_animal/slime/slime.dm | 9 +++++---- code/modules/research/xenobiology/xenobiology.dm | 2 +- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 0e394e56fe1..2a9e60ce9e3 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -82,6 +82,7 @@ handle_automated_movement() handle_automated_speech() + return 1 /mob/living/simple_animal/handle_regular_status_updates() if(..()) @@ -374,12 +375,13 @@ if(statpanel("Status")) stat(null, "Health: [round((health / maxHealth) * 100)]%") + return 1 /mob/living/simple_animal/death(gibbed) - health = 0 // so /mob/living/simple_animal/handle_regular_status_updates() doesn't magically revive them + health = 0 icon_state = icon_dead stat = DEAD - density = 0 + lying = 1 if(!gibbed) visible_message("\the [src] stops moving...") ..() @@ -398,11 +400,6 @@ adjustBruteLoss(30) updatehealth() -/mob/living/simple_animal/adjustBruteLoss(damage) - health = Clamp(health - damage, 0, maxHealth) - if(health < 1 && stat != DEAD) - death() - /mob/living/simple_animal/proc/CanAttack(var/atom/the_target) if(see_invisible < the_target.invisibility) return 0 diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 43f2230e234..00ef4a9e0a8 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -146,10 +146,7 @@ return 2 /mob/living/simple_animal/slime/Stat() - ..() - - if(statpanel("Status")) - stat(null, "Health: [round((health / maxHealth) * 100)]%") + if(..()) if(!docile) stat(null, "Nutrition: [nutrition]/[get_max_nutrition()]") @@ -287,6 +284,7 @@ attacked += 10 if(prob(25)) user.do_attack_animation(src) + user.changeNext_move(CLICK_CD_MELEE) user << "[W] passes right through [src]!" return if(Discipline && prob(50)) // wow, buddy, why am I getting attacked?? @@ -347,6 +345,9 @@ /mob/living/simple_animal/slime/proc/discipline_slime(mob/user) + if(stat == DEAD) + return + if(prob(80) && !client) Discipline++ diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 6f07e1b2ba3..b58eacfde4f 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -159,7 +159,7 @@ /obj/item/slimepotion2/afterattack(mob/living/M as mob, mob/user as mob) if(being_used || !ismob(M)) return - if(!(isslime(M) || isanimal(M) || ismonkey(M) || !M.ckey)) //I'm sorry for this line + if( !(isanimal(M) || ismonkey(M)) || M.ckey) //only works on monkeys and animals that aren't player controlled user << "[M] is already too intelligent for this to work!" return ..() if(M.stat) From b6c71dc50d5bba85359c297b6fe56613129ed542 Mon Sep 17 00:00:00 2001 From: MrPerson Date: Tue, 24 Mar 2015 11:43:42 -0700 Subject: [PATCH 21/65] Effect pooling obj/effect/effect all pool themselves. PoolOrNew() can now be passed a type and a list instead of a type and a location. In that case, the list will be passed to New() via arglist(). RCD's now delete their spark system and properly garbage collect. --- code/_onclick/telekinesis.dm | 3 +- code/game/gamemodes/antag_spawner.dm | 2 +- code/game/machinery/ai_slipper.dm | 2 +- code/game/machinery/bots/bots.dm | 2 +- code/game/machinery/bots/cleanbot.dm | 2 +- code/game/machinery/bots/ed209bot.dm | 2 +- code/game/machinery/machinery.dm | 2 +- code/game/mecha/equipment/tools/tools.dm | 2 +- code/game/objects/effects/anomalies.dm | 2 +- .../effects/effect_system/effect_system.dm | 13 +++++-- .../effects/effect_system/effects_foam.dm | 15 ++++++-- .../effects/effect_system/effects_other.dm | 9 +++-- .../effects/effect_system/effects_smoke.dm | 38 +++++++++---------- .../effects/effect_system/effects_sparks.dm | 17 ++++----- .../effects/effect_system/effects_water.dm | 22 ++++------- code/game/objects/empulse.dm | 2 +- .../objects/items/devices/chameleonproj.dm | 6 ++- code/game/objects/items/weapons/RCD.dm | 5 +++ .../objects/items/weapons/extinguisher.dm | 2 +- .../objects/items/weapons/tanks/watertank.dm | 10 ++--- code/game/pooling/atom_pool.dm | 34 +++++++++-------- code/modules/events/wizard/imposter.dm | 2 +- code/modules/power/singularity/narsie.dm | 2 +- code/modules/reagents/reagent_dispenser.dm | 6 +-- code/modules/telesci/bscrystal.dm | 4 +- 25 files changed, 108 insertions(+), 98 deletions(-) diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index b95575cec58..ba766fbee8c 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -168,8 +168,7 @@ var/const/tk_maxrange = 15 O.icon_state = "nothing" flick("empdisable",O) spawn(5) - O.delete() - return + qdel(O) /obj/item/tk_grab/update_icon() diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index f2a2ca65f29..7be421ee470 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -64,7 +64,7 @@ H << "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later." /obj/item/weapon/antag_spawner/contract/spawn_antag(var/client/C, var/turf/T, var/type = "") - new /obj/effect/effect/harmless_smoke(T) + PoolOrNew(/obj/effect/effect/harmless_smoke, T) var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) C.prefs.copy_to(M) M.key = C.key diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 734f483cf55..386c11d09c9 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -96,7 +96,7 @@ if(cooldown_on || disabled) return else - new /obj/effect/effect/foam(src.loc) + PoolOrNew(/obj/effect/effect/foam, loc) src.uses-- cooldown_on = 1 cooldown_time = world.timeofday + 100 diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index a749f95c488..f2bb4d9c38e 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -323,7 +323,7 @@ pulse2.dir = pick(cardinal) spawn(10) - pulse2.delete() + qdel(pulse2) if (on) turn_off() spawn(severity*300) diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm index 0a72528e8e7..b9b28435749 100644 --- a/code/game/machinery/bots/cleanbot.dm +++ b/code/game/machinery/bots/cleanbot.dm @@ -157,7 +157,7 @@ text("[on ? "On" : "Off"]")) if(prob(5)) //Spawns foam! visible_message("[src] whirs and bubbles violently, before releasing a plume of froth!") - new /obj/effect/effect/foam(loc) + PoolOrNew(/obj/effect/effect/foam, loc) else if (prob(5)) visible_message("[src] makes an excited beeping booping sound!") diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index faf974bb6db..8dfd48b56ea 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -513,7 +513,7 @@ Auto Patrol[]"}, pulse2.anchored = 1 pulse2.dir = pick(cardinal) spawn(10) - pulse2.delete() + qdel(pulse2) var/list/mob/living/carbon/targets = new for (var/mob/living/carbon/C in view(12,src)) if (C.stat==2) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index bd71a6f4005..83ea4df0f3d 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -143,7 +143,7 @@ Class Procs: pulse2.dir = pick(cardinal) spawn(10) - pulse2.delete() + qdel(pulse2) ..() /obj/machinery/proc/open_machine() diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index ac3841fcae2..05cb1cb48a4 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -211,7 +211,7 @@ var/list/the_targets = list(T,T1,T2) spawn(0) for(var/a=0, a<5, a++) - var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(chassis)) + var/obj/effect/effect/water/W = PoolOrNew(/obj/effect/effect/water, get_turf(chassis)) if(!W) return var/turf/my_target = pick(the_targets) diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index 5636d376136..3c314ee975c 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -27,7 +27,7 @@ /obj/effect/anomaly/proc/anomalyNeutralize() - new /obj/effect/effect/bad_smoke(loc) + PoolOrNew(/obj/effect/effect/bad_smoke, loc) for(var/atom/movable/O in src) O.loc = src.loc diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm index 9f3662ae8ed..e150828bc99 100644 --- a/code/game/objects/effects/effect_system/effect_system.dm +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -13,10 +13,10 @@ would spawn and follow the beaker, even if it is carried or thrown. unacidable = 1//So effect are not targeted by alien acid. pass_flags = PASSTABLE | PASSGRILLE -/obj/effect/proc/delete() - loc = null - if(reagents) - qdel(reagents) +/obj/effect/effect/Destroy() + ..() + PlaceInPool(src) + return 1 /datum/effect/effect/proc/fadeOut(var/atom/A, var/frames = 16) if(A.alpha == 0) //Handle already transparent case @@ -36,6 +36,11 @@ would spawn and follow the beaker, even if it is carried or thrown. var/atom/holder var/setup = 0 +/datum/effect/effect/system/Destroy() + holder = null + location = null + ..() + /datum/effect/effect/system/proc/set_up(n = 3, c = 0, turf/loc) if(n > 10) n = 10 diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index dd4270ece3f..892bd547dc3 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -33,6 +33,9 @@ SSobj.processing.Add(src) playsound(src, 'sound/effects/bubbles2.ogg', 80, 1, -3) +/obj/effect/effect/foam/Destroy() + SSobj.processing.Remove(src) + return ..() /obj/effect/effect/foam/metal/New(loc) ..() @@ -45,7 +48,7 @@ SSobj.processing.Remove(src) flick("[icon_state]-disolve", src) spawn(5) - delete() + qdel(src) /obj/effect/effect/foam/process() @@ -84,7 +87,7 @@ if(foundfoam) continue - var/obj/effect/effect/foam/F = new type(T) + var/obj/effect/effect/foam/F = PoolOrNew(/obj/effect/effect/foam, T) F.amount = amount reagents.copy_to(F, (reagents.total_volume)) F.color = color @@ -114,11 +117,15 @@ /datum/effect/effect/system/foam_spread/New() ..() - chemholder = new/obj() + chemholder = PoolOrNew(/obj) var/datum/reagents/R = new/datum/reagents(1000) chemholder.reagents = R R.my_atom = chemholder +/datum/effect/effect/system/foam_spread/Destroy() + qdel(chemholder) + chemholder = null + return ..() /datum/effect/effect/system/foam_spread/set_up(amt=5, loca, var/datum/reagents/carry = null) if(istype(loca, /turf/)) @@ -139,7 +146,7 @@ if(foundfoam)//If there was already foam where we start, we add our foaminess to it. foundfoam.amount += amount else - var/obj/effect/effect/foam/F = new foamtype(src.location) + var/obj/effect/effect/foam/F = PoolOrNew(foamtype, location) var/foamcolor = mix_color_from_reagents(chemholder.reagents.reagent_list) chemholder.reagents.copy_to(F, chemholder.reagents.total_volume) F.color = foamcolor diff --git a/code/game/objects/effects/effect_system/effects_other.dm b/code/game/objects/effects/effect_system/effects_other.dm index 4e58261b04b..0b54d310233 100644 --- a/code/game/objects/effects/effect_system/effects_other.dm +++ b/code/game/objects/effects/effect_system/effects_other.dm @@ -16,6 +16,10 @@ var/processing = 1 var/on = 1 +/datum/effect/effect/system/ion_trail_follow/Destroy() + oldposition = null + return ..() + /datum/effect/effect/system/ion_trail_follow/set_up(atom/atom) attach(atom) @@ -29,13 +33,12 @@ var/turf/T = get_turf(src.holder) if(T != src.oldposition) if(!has_gravity(T)) - var/obj/effect/effect/ion_trails/I = new /obj/effect/effect/ion_trails(src.oldposition) + var/obj/effect/effect/ion_trails/I = PoolOrNew(/obj/effect/effect/ion_trails, oldposition) I.dir = src.holder.dir flick("ion_fade", I) I.icon_state = "" spawn( 20 ) - if(I) - I.delete() + qdel(I) src.oldposition = T spawn(2) if(src.on) diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 59220d9cee6..d8a4a1804a6 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -28,12 +28,7 @@ /obj/effect/effect/harmless_smoke/New() ..() spawn (100) - delete() - return - -/obj/effect/effect/harmless_smoke/Move() - ..() - return + qdel(src) /datum/effect/effect/system/harmless_smoke_spread var/total_smoke = 0 // To stop it being spammed and lagging! @@ -60,7 +55,7 @@ spawn(0) if(holder) src.location = get_turf(holder) - var/obj/effect/effect/harmless_smoke/smoke = new /obj/effect/effect/harmless_smoke(src.location) + var/obj/effect/effect/harmless_smoke/smoke = PoolOrNew(/obj/effect/effect/harmless_smoke, location) src.total_smoke++ var/direction = src.direction if(!direction) @@ -74,7 +69,7 @@ spawn(75+rand(10,30)) if(smoke) fadeOut(smoke) - smoke.delete() + qdel(smoke) src.total_smoke-- @@ -96,8 +91,7 @@ /obj/effect/effect/bad_smoke/New() ..() spawn (200+rand(10,30)) - delete() - return + qdel(src) /obj/effect/effect/bad_smoke/Move() ..() @@ -163,7 +157,7 @@ spawn(0) if(holder) src.location = get_turf(holder) - var/obj/effect/effect/bad_smoke/smoke = new /obj/effect/effect/bad_smoke(src.location) + var/obj/effect/effect/bad_smoke/smoke = PoolOrNew(/obj/effect/effect/bad_smoke, location) src.total_smoke++ var/direction = src.direction if(!direction) @@ -177,7 +171,7 @@ spawn(150+rand(10,30)) if(smoke) fadeOut(smoke) - smoke.delete() + qdel(smoke) src.total_smoke-- @@ -201,8 +195,7 @@ ..() create_reagents(500) spawn(200+rand(10,30)) - delete() - return + qdel(src) /obj/effect/effect/chem_smoke/Move() @@ -228,11 +221,15 @@ /datum/effect/effect/system/chem_smoke_spread/New() ..() - chemholder = new/obj() + chemholder = PoolOrNew(/obj) var/datum/reagents/R = new/datum/reagents(500) chemholder.reagents = R R.my_atom = chemholder +/datum/effect/effect/system/chem_smoke_spread/Destroy() + PlaceInPool(chemholder) + chemholder = null + ..() /datum/effect/effect/system/chem_smoke_spread/set_up(var/datum/reagents/carry = null, n = 5, c = 0, loca, direct, silent = 0) if(n > 20) @@ -284,7 +281,7 @@ spawn(0) if(holder) src.location = get_turf(holder) - var/obj/effect/effect/chem_smoke/smoke = new /obj/effect/effect/chem_smoke(src.location) + var/obj/effect/effect/chem_smoke/smoke = PoolOrNew(/obj/effect/effect/chem_smoke, location) src.total_smoke++ var/direction = src.direction if(!direction) @@ -309,7 +306,7 @@ spawn(150+rand(10,30)) if(smoke) fadeOut(smoke) - smoke.delete() + qdel(smoke) src.total_smoke-- @@ -334,8 +331,7 @@ /obj/effect/effect/sleep_smoke/New() ..() spawn (200+rand(10,30)) - delete() - return + qdel(src) /obj/effect/effect/sleep_smoke/Move() ..() @@ -395,7 +391,7 @@ spawn(0) if(holder) src.location = get_turf(holder) - var/obj/effect/effect/sleep_smoke/smoke = new /obj/effect/effect/sleep_smoke(src.location) + var/obj/effect/effect/sleep_smoke/smoke = PoolOrNew(/obj/effect/effect/sleep_smoke, location) src.total_smoke++ var/direction = src.direction if(!direction) @@ -409,5 +405,5 @@ spawn(150+rand(10,30)) if(smoke) fadeOut(smoke) - smoke.delete() + qdel(smoke) src.total_smoke-- \ No newline at end of file diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm index 88f15977f84..2c7e6e9d6d1 100644 --- a/code/game/objects/effects/effect_system/effects_sparks.dm +++ b/code/game/objects/effects/effect_system/effects_sparks.dm @@ -14,20 +14,19 @@ /obj/effect/effect/sparks/New() ..() + flick("sparks", src) // replay the animation playsound(src.loc, "sparks", 100, 1) var/turf/T = src.loc if (istype(T, /turf)) T.hotspot_expose(1000,100) spawn (100) - delete() - return + qdel(src) /obj/effect/effect/sparks/Destroy() var/turf/T = src.loc if (istype(T, /turf)) T.hotspot_expose(1000,100) - ..() - return + return ..() /obj/effect/effect/sparks/Move() ..() @@ -57,7 +56,7 @@ spawn(0) if(holder) src.location = get_turf(holder) - var/obj/effect/effect/sparks/sparks = new /obj/effect/effect/sparks(src.location) + var/obj/effect/effect/sparks/sparks = PoolOrNew(/obj/effect/effect/sparks, location) src.total_sparks++ var/direction if(src.cardinals) @@ -68,8 +67,7 @@ sleep(5) step(sparks,direction) spawn(20) - if(sparks) // Might be deleted already - sparks.delete() + qdel(sparks) src.total_sparks-- @@ -101,7 +99,7 @@ spawn(0) if(holder) src.location = get_turf(holder) - var/obj/effect/effect/sparks/electricity/sparks = new /obj/effect/effect/sparks/electricity(src.location) + var/obj/effect/effect/sparks/electricity/sparks = PoolOrNew(/obj/effect/effect/sparks/electricity, location) src.total_sparks++ var/direction if(src.cardinals) @@ -112,6 +110,5 @@ sleep(5) step(sparks,direction) spawn(20) - if(sparks) // Might be deleted already - sparks.delete() + qdel(sparks) src.total_sparks-- \ No newline at end of file diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm index f559d9fd8f8..1f860327ceb 100644 --- a/code/game/objects/effects/effect_system/effects_water.dm +++ b/code/game/objects/effects/effect_system/effects_water.dm @@ -10,21 +10,13 @@ /obj/effect/effect/water/New() ..() - //var/turf/T = src.loc - //if (istype(T, /turf)) - // T.firelevel = 0 //TODO: FIX spawn( 70 ) - delete() - return - return + qdel(src) /obj/effect/effect/water/Move(turf/newloc) - //var/turf/T = src.loc - //if (istype(T, /turf)) - // T.firelevel = 0 //TODO: FIX if (--src.life < 1) - //SN src = null - delete() + qdel(src) + return 0 if(newloc.density) return 0 .=..() @@ -71,7 +63,7 @@ steam.start() -- spawns the effect spawn(0) if(holder) src.location = get_turf(holder) - var/obj/effect/effect/steam/steam = new /obj/effect/effect/steam(src.location) + var/obj/effect/effect/steam/steam = PoolOrNew(/obj/effect/effect/steam, location) var/direction if(src.cardinals) direction = pick(cardinal) @@ -81,7 +73,7 @@ steam.start() -- spawns the effect sleep(5) step(steam,direction) spawn(20) - steam.delete() + qdel(steam) ///////////////////////////////////////////// @@ -106,12 +98,12 @@ steam.start() -- spawns the effect src.processing = 0 spawn(0) if(src.number < 3) - var/obj/effect/effect/steam/I = new /obj/effect/effect/steam(src.oldposition) + var/obj/effect/effect/steam/I = PoolOrNew(/obj/effect/effect/steam, oldposition) src.number++ src.oldposition = get_turf(holder) I.dir = src.holder.dir spawn(10) - I.delete() + qdel(I) src.number-- spawn(2) if(src.on) diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index 4ccb47e18cd..4f6350832ae 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -15,7 +15,7 @@ proc/empulse(turf/epicenter, heavy_range, light_range, log=0) pulse.name = "emp pulse" pulse.anchored = 1 spawn(20) - pulse.delete() + qdel(pulse) if(heavy_range > light_range) light_range = heavy_range diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 6319441cb71..f7b754a93d5 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -49,7 +49,8 @@ var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' flick("emppulse",T) - spawn(8) T.delete() + spawn(8) + qdel(T) else playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) var/obj/O = new saved_item(src) @@ -61,7 +62,8 @@ var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' flick("emppulse",T) - spawn(8) T.delete() + spawn(8) + qdel(T) /obj/item/device/chameleon/proc/disrupt(var/delete_dummy = 1) if(active_dummy) diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index b71c719761a..e76181e672a 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -100,6 +100,11 @@ RCD return +/obj/item/weapon/rcd/Destroy() + qdel(spark_system) + spark_system = null + return ..() + /obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user, params) ..() if(istype(W, /obj/item/weapon/rcd_ammo)) diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 3b06377cccf..f4dd08ea68f 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -124,7 +124,7 @@ for(var/a=0, a<5, a++) spawn(0) - var/obj/effect/effect/water/W = new /obj/effect/effect/water( get_turf(src) ) + var/obj/effect/effect/water/W = PoolOrNew( /obj/effect/effect/water, get_turf(src) ) var/turf/my_target = pick(the_targets) if(precision) the_targets -= my_target diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index 010ae17b7da..72389fa1df1 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -290,7 +290,7 @@ if(!Adj|| !istype(target, /turf)) return if(metal_synthesis_cooldown < 5) - var/obj/effect/effect/foam/metal/F = new /obj/effect/effect/foam/metal(get_turf(target)) + var/obj/effect/effect/foam/metal/F = PoolOrNew(/obj/effect/effect/foam/metal, get_turf(target)) F.amount = 0 metal_synthesis_cooldown++ spawn(100) @@ -309,7 +309,7 @@ pass_flags = PASSTABLE /obj/effect/nanofrost_container/proc/Smoke() - new /obj/effect/effect/freezing_smoke(src.loc, 6, 1) + PoolOrNew(/obj/effect/effect/freezing_smoke, list(loc, 6, 1)) var/obj/effect/decal/cleanable/flour/F = new /obj/effect/decal/cleanable/flour(src.loc) F.color = "#B2FFFF" F.name = "nanofrost residue" @@ -332,7 +332,7 @@ /obj/effect/effect/freezing_smoke/New(loc, var/amt, var/blast) ..() spawn(100+rand(10,30)) - delete() + qdel(src) amount = amt if(amount) var/datum/effect/effect/system/freezing_smoke_spread/F = new /datum/effect/effect/system/freezing_smoke_spread @@ -377,7 +377,7 @@ var/i = 0 for(i=0, i[user] crushes [src]!") - new /obj/effect/effect/sparks(src.loc) + PoolOrNew(/obj/effect/effect/sparks, loc) playsound(src.loc, "sparks", 50, 1) blink_mob(user) user.drop_item() @@ -30,7 +30,7 @@ /obj/item/bluespace_crystal/throw_impact(atom/hit_atom) ..() visible_message("[src] fizzles and disappears upon impact!") - new /obj/effect/effect/sparks(src.loc) + PoolOrNew(/obj/effect/effect/sparks, loc) playsound(src.loc, "sparks", 50, 1) if(isliving(hit_atom)) blink_mob(hit_atom) From c7a93d2e6eba8f8d886bb1b8c9d5e70d45570525 Mon Sep 17 00:00:00 2001 From: AnturK Date: Tue, 24 Mar 2015 22:03:25 +0100 Subject: [PATCH 22/65] Adds Lightning Bolt spell --- code/datums/spell.dm | 7 +- code/datums/spells/lightning.dm | 89 ++++++++++++++++++++++++ code/game/gamemodes/wizard/spellbook.dm | 9 ++- icons/effects/effects.dmi | Bin 285953 -> 286530 bytes tgstation.dme | 1 + 5 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 code/datums/spells/lightning.dm diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 7137bbf9ad1..71a8b0db2df 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -245,6 +245,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin var/max_targets = 1 //leave 0 for unlimited targets in range, 1 for one selectable target in range, more for limited number of casts (can all target one guy, depends on target_ignore_prev) in range var/target_ignore_prev = 1 //only important if max_targets > 1, affects if the spell can be cast multiple times at one person from one cast var/include_user = 0 //if it includes usr in the target list + var/random_target = 0 // chooses random viable target instead of asking the caster /obj/effect/proc_holder/spell/aoe_turf //affects all turfs in view or range (depends) var/inner_radius = -1 //for all your ring spell needs @@ -269,7 +270,11 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin //targets += input("Choose the target for the spell.", "Targeting") as mob in possible_targets //Adds a safety check post-input to make sure those targets are actually in range. - var/mob/M = input("Choose the target for the spell.", "Targeting") as mob in possible_targets + var/mob/M + if(!random_target) + M = input("Choose the target for the spell.", "Targeting") as mob in possible_targets + else + M = pick(possible_targets) if(M in view_or_range(range, user, selection_type)) targets += M else diff --git a/code/datums/spells/lightning.dm b/code/datums/spells/lightning.dm new file mode 100644 index 00000000000..bda59d916b5 --- /dev/null +++ b/code/datums/spells/lightning.dm @@ -0,0 +1,89 @@ +/obj/effect/proc_holder/spell/targeted/lightning + name = "Lightning Bolt" + desc = "Throws a lightning bolt at the nearby enemy. Classic." + charge_type = "recharge" + charge_max = 300 + clothes_req = 1 + invocation = "UN'LTD P'WAH!" + invocation_type = "shout" + range = 7 + cooldown_min = 30 + selection_type = "view" + random_target = 1 + var/energy = 0 + var/ready = 0 + +/obj/effect/bolt + name = "Lightning bolt" + icon = 'icons/effects/effects.dmi' + icon_state = "lightning" + luminosity = 3 + +/obj/effect/proc_holder/spell/targeted/lightning/Click() + if(!ready) + if(cast_check()) + StartChargeup() + else + if(cast_check(skipcharge=1)) + choose_targets() + return 1 + +/obj/effect/proc_holder/spell/targeted/lightning/proc/StartChargeup(mob/user = usr) + ready = 1 + user << "You start gathering the power." + //TODO: Add visual indictaor of charging + spawn(0) + while(ready) + sleep(1) + energy++ + if(energy >= 100 && ready) + Discharge() + +/obj/effect/proc_holder/spell/targeted/lightning/proc/Discharge(mob/user = usr) + var/mob/living/M = user + M.electrocute_act(25,"Lightning Bolt") + M << "You lose control over the spell." + energy = 0 + ready = 0 + start_recharge() + + +/obj/effect/proc_holder/spell/targeted/lightning/cast(list/targets, mob/user = usr) + if(!targets.len) + user << "No target found in range." + return + + var/mob/living/carbon/target = targets[1] + + if(!(target in oview(range))) + user << "They are too far away!" + return + + user.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5) + + switch(energy) + if(0 to 25) + target.electrocute_act(10,"Lightning Bolt") + if(25 to 75) + target.electrocute_act(25,"Lightning Bolt") + if(75 to 100) + //CHAIN LIGHTNING + Bolt(user,target,energy,user) + ready = 0 + energy = 0 + +/obj/effect/proc_holder/spell/targeted/lightning/proc/Bolt(mob/origin,mob/target,bolt_energy,mob/user = usr) + origin.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5) + var/mob/living/carbon/current = target + if(bolt_energy < 75) + current.electrocute_act(25,"Lightning Bolt") + else + current.electrocute_act(25,"Lightning Bolt") + var/list/possible_targets = new + for(var/mob/living/M in view_or_range(range,target,"view")) + if(user == M || target == M) // || origin == M ? Not sure double shockings is good or not + continue + possible_targets += M + var/mob/living/next = pick(possible_targets) + if(next) + Bolt(current,next,bolt_energy-6,user) // 5 max bounces \ No newline at end of file diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index b7ff72de867..1becc5aa3d9 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -106,6 +106,9 @@ dat += "Flesh to Stone (60)
" dat += "This spell will curse a person to immediately turn into an unmoving statue. The effect will eventually wear off if the statue is not destroyed.
" + dat += "Lightning Bolt (30)
" + dat += "Charge up and throw lightning bolt at the nearby enemy. Classic. The longer you charge the more powerful the spell, beware of overcharge however!
" + dat += "Instant Summons (10)
" dat += "This spell can be used to bind a valuable item to you, bringing it to your hand at will. Using this spell while holding the bound item will allow you to unbind it. It does not require wizard garb.
" if(ticker.mode.name != "ragin' mages") // we totally need summon greentext x100 @@ -220,7 +223,7 @@ uses-- /* */ - var/list/available_spells = list(magicmissile = "Magic Missile", fireball = "Fireball", disintegrate = "Disintegrate", disabletech = "Disable Tech", repulse = "Repulse", smoke = "Smoke", blind = "Blind", mindswap = "Mind Transfer", forcewall = "Forcewall", blink = "Blink", teleport = "Teleport", mutate = "Mutate", etherealjaunt = "Ethereal Jaunt", knock = "Knock", barnyardcurse = "The Curse of the Barnyard", fleshtostone = "Flesh to Stone", summonitem = "Instant Summons", summonguns = "Summon Guns", summonmagic = "Summon Magic", summonevents = "Summon Events", staffchange = "Staff of Change", soulstone = "Six Soul Stone Shards and the spell Artificer", necrostone = "A Necromantic Stone", armor = "Mastercrafted Armor Set", staffanimate = "Staff of Animation", staffchaos = "Staff of Chaos", staffdoor = "Staff of Door Creation", wands = "Wand Assortment") + var/list/available_spells = list(magicmissile = "Magic Missile", fireball = "Fireball", disintegrate = "Disintegrate", disabletech = "Disable Tech", repulse = "Repulse", smoke = "Smoke", blind = "Blind", mindswap = "Mind Transfer", forcewall = "Forcewall", blink = "Blink", teleport = "Teleport", mutate = "Mutate", etherealjaunt = "Ethereal Jaunt", knock = "Knock", barnyardcurse = "The Curse of the Barnyard", fleshtostone = "Flesh to Stone", summonitem = "Instant Summons", summonguns = "Summon Guns", summonmagic = "Summon Magic", summonevents = "Summon Events", staffchange = "Staff of Change", soulstone = "Six Soul Stone Shards and the spell Artificer", necrostone = "A Necromantic Stone", armor = "Mastercrafted Armor Set", staffanimate = "Staff of Animation", staffchaos = "Staff of Chaos", staffdoor = "Staff of Door Creation", wands = "Wand Assortment", lightningbolt = "Lightning Bolt") var/already_knows = 0 for(var/obj/effect/proc_holder/spell/aspell in H.mind.spell_list) if(available_spells[href_list["spell_choice"]] == initial(aspell.name)) @@ -318,6 +321,10 @@ feedback_add_details("wizard_spell_learned","IS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells H.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/summonitem(null) temp = "You have learned instant summons." + if("lightningbolt") + feedback_add_details("wizard_spell_learned","LB") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + H.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/lightning(null) + temp = "You have learned lightning bolt." if("summonguns") feedback_add_details("wizard_spell_learned","SG") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells rightandwrong(0, H, 0) diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index d2bad4aa9dce457c0001b2c5e41f5a8e135c925c..0b9074d181bad13f21940ad94beaa997b472b724 100644 GIT binary patch delta 6851 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 delta 6275 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 Date: Wed, 25 Mar 2015 16:52:09 +1100 Subject: [PATCH 23/65] construction permit's w_class to 1 --- code/game/objects/items/blueprints.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index a7df044de11..0c5002a60f5 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -51,6 +51,7 @@ desc = "This is a one-use permit that allows the user to offically declare a built room as new addition to the station." fluffnotice = "Nanotrasen Engineering requires all on-station construction projects to be approved by a head of staff, as detailed in Nanotrasen Company Regulation 512-C (Mid-Shift Modifications to Company Property). \ By submitting this form, you accept any fines, fees, or personal injury/death that may occur during construction." + w_class = 1 /obj/item/areaeditor/permit/attack_self(mob/user as mob) From 9d91a5935cf6d24d476ebd20c70b340fcf9c939e Mon Sep 17 00:00:00 2001 From: joonoro Date: Wed, 25 Mar 2015 13:21:59 +0200 Subject: [PATCH 24/65] fix poddoors --- code/game/machinery/doors/poddoor.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 7c47ceba176..ac30218b651 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -73,13 +73,14 @@ flick("closing", src) icon_state = "closed" SetOpacity(1) + sleep(5) + density = 1 + sleep(5) air_update_turf(1) update_freelook_sight() sleep(5) crush() - density = 1 sleep(5) - operating = 0 From 0147d669f88b43e33632491721814c990312cbab Mon Sep 17 00:00:00 2001 From: Szunti Date: Wed, 25 Mar 2015 20:34:59 +0100 Subject: [PATCH 25/65] Added night vision to mining mobs. --- .../simple_animal/hostile/mining_mobs.dm | 2 ++ .../szunti-mining-mobs-night-vision.yml | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 html/changelogs/szunti-mining-mobs-night-vision.yml diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 062aab6e7cb..3114c124ddf 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -20,6 +20,8 @@ a_intent = "harm" var/throw_message = "bounces off of" var/icon_aggro = null // for swapping to when we get aggressive + see_in_dark = 8 + see_invisible = SEE_INVISIBLE_MINIMUM /mob/living/simple_animal/hostile/asteroid/Aggro() ..() diff --git a/html/changelogs/szunti-mining-mobs-night-vision.yml b/html/changelogs/szunti-mining-mobs-night-vision.yml new file mode 100644 index 00000000000..a1dfef5ae13 --- /dev/null +++ b/html/changelogs/szunti-mining-mobs-night-vision.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# spellcheck (typo fixes) +# experiment +# tgs (TG-ported fixes?) +################################# + +# Your name. +author: Szunti + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Mining mobs vision adapted to darkness of the asteroids." From 6fef7fefeac829ba26df2a856f7f46e8570d91dd Mon Sep 17 00:00:00 2001 From: AnturK Date: Wed, 25 Mar 2015 21:44:19 +0100 Subject: [PATCH 26/65] - adds LoS obstacle check - some sanity checks - Removes the blowback, now the spell just fizzles harmlessly --- code/datums/spell.dm | 29 ++++++++++++++++++++++++++++- code/datums/spells/lightning.dm | 25 +++++++++++++------------ 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 71a8b0db2df..587d5f1c646 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -1,3 +1,6 @@ +#define TARGET_CLOSEST 1 +#define TARGET_RANDOM 2 + /obj/effect/proc_holder var/panel = "Debug"//What panel the proc holder needs to go on. @@ -246,6 +249,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin var/target_ignore_prev = 1 //only important if max_targets > 1, affects if the spell can be cast multiple times at one person from one cast var/include_user = 0 //if it includes usr in the target list var/random_target = 0 // chooses random viable target instead of asking the caster + var/random_target_priority = TARGET_CLOSEST // if random_target is enabled how it will pick the target /obj/effect/proc_holder/spell/aoe_turf //affects all turfs in view or range (depends) var/inner_radius = -1 //for all your ring spell needs @@ -274,7 +278,18 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin if(!random_target) M = input("Choose the target for the spell.", "Targeting") as mob in possible_targets else - M = pick(possible_targets) + switch(random_target_priority) + if(TARGET_RANDOM) + M = pick(possible_targets) + if(TARGET_CLOSEST) + for(var/mob/living/L in possible_targets) + if(M) + if(get_dist(user,L) < get_dist(user,M)) + if(los_check(user,L)) + M = L + else + if(los_check(user,L)) + M = L if(M in view_or_range(range, user, selection_type)) targets += M else @@ -320,4 +335,16 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin /obj/effect/proc_holder/spell/proc/can_be_cast_by(mob/caster) if((human_req || clothes_req) && !ishuman(caster)) return 0 + return 1 + +/obj/effect/proc_holder/spell/targeted/proc/los_check(mob/A,mob/B) + //Checks for obstacles from A to B + var/obj/dummy = new(A.loc) + dummy.pass_flags |= PASSTABLE + for(var/turf/turf in getline(A,B)) + for(var/atom/movable/AM in turf) + if(!AM.CanPass(dummy,turf,1)) + qdel(dummy) + return 0 + qdel(dummy) return 1 \ No newline at end of file diff --git a/code/datums/spells/lightning.dm b/code/datums/spells/lightning.dm index bda59d916b5..197e72fcda4 100644 --- a/code/datums/spells/lightning.dm +++ b/code/datums/spells/lightning.dm @@ -13,12 +13,6 @@ var/energy = 0 var/ready = 0 -/obj/effect/bolt - name = "Lightning bolt" - icon = 'icons/effects/effects.dmi' - icon_state = "lightning" - luminosity = 3 - /obj/effect/proc_holder/spell/targeted/lightning/Click() if(!ready) if(cast_check()) @@ -39,9 +33,15 @@ if(energy >= 100 && ready) Discharge() +/obj/effect/proc_holder/spell/targeted/lightning/revert_cast(mob/user = usr) + user << "No target found in range." + ready = 0 + energy = 0 + ..() + /obj/effect/proc_holder/spell/targeted/lightning/proc/Discharge(mob/user = usr) var/mob/living/M = user - M.electrocute_act(25,"Lightning Bolt") + //M.electrocute_act(25,"Lightning Bolt") M << "You lose control over the spell." energy = 0 ready = 0 @@ -49,14 +49,13 @@ /obj/effect/proc_holder/spell/targeted/lightning/cast(list/targets, mob/user = usr) - if(!targets.len) - user << "No target found in range." - return var/mob/living/carbon/target = targets[1] - if(!(target in oview(range))) + if(get_dist(user,target)>range) user << "They are too far away!" + ready = 0 + energy = 0 return user.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5) @@ -81,9 +80,11 @@ current.electrocute_act(25,"Lightning Bolt") var/list/possible_targets = new for(var/mob/living/M in view_or_range(range,target,"view")) - if(user == M || target == M) // || origin == M ? Not sure double shockings is good or not + if(user == M || target == M && los_check(current,M)) // || origin == M ? Not sure double shockings is good or not continue possible_targets += M + if(!possible_targets.len) + return var/mob/living/next = pick(possible_targets) if(next) Bolt(current,next,bolt_energy-6,user) // 5 max bounces \ No newline at end of file From da2108891afdb0abe787058fde6b98b4677e74ee Mon Sep 17 00:00:00 2001 From: GunHog Date: Wed, 25 Mar 2015 16:22:21 -0500 Subject: [PATCH 27/65] NTSL Expansion Enables NTSL to read and set four radio span classes to messages. Also enables NTSL to set each of the say modification verbs to custom values. -Broadcast() proc of NTSL now accepts 5 additional parameters - spans and each of the Say verbs. --- .../scripting/Implementations/Telecomms.dm | 49 ++++++++++++++++--- html/changelogs/Gun_Hog_NTSL_Expansion.yml | 8 +++ 2 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 html/changelogs/Gun_Hog_NTSL_Expansion.yml diff --git a/code/modules/scripting/Implementations/Telecomms.dm b/code/modules/scripting/Implementations/Telecomms.dm index ea9fda485e7..42c5c7aec40 100644 --- a/code/modules/scripting/Implementations/Telecomms.dm +++ b/code/modules/scripting/Implementations/Telecomms.dm @@ -4,6 +4,9 @@ /* --- Traffic Control Scripting Language --- */ // Nanotrasen TCS Language - Made by Doohl +//Span classes that players are allowed to set in a radio transmission. +var/list/allowed_custom_spans = list(SPAN_ROBOT,SPAN_YELL,SPAN_ITALICS,SPAN_SANS) + /n_Interpreter/TCS_Interpreter var/datum/TCS_Compiler/Compiler @@ -96,6 +99,17 @@ interpreter.SetVar("$job" , signal.data["job"]) interpreter.SetVar("$sign" , signal) interpreter.SetVar("$pass" , !(signal.data["reject"])) // if the signal isn't rejected, pass = 1; if the signal IS rejected, pass = 0 + interpreter.SetVar("$filters" , signal.data["spans"]) //Important, this is given as a vector! (a list) + interpreter.SetVar("$say" , signal.data["verb_say"]) + interpreter.SetVar("$ask" , signal.data["verb_ask"]) + interpreter.SetVar("$yell" , signal.data["verb_yell"]) + interpreter.SetVar("$exclaim" , signal.data["verb_exclaim"]) + + //Current allowed span classes + interpreter.SetVar("$robot", SPAN_ROBOT) //The font used by silicons! + interpreter.SetVar("$loud", SPAN_YELL) //Bolding, applied when ending a message with several exclamation marks. + interpreter.SetVar("$emphasis", SPAN_ITALICS) //Italics + interpreter.SetVar("$wacky", SPAN_SANS) //Comic sans font, normally seen from the genetics power. //Language bitflags interpreter.SetVar("HUMAN" , HUMAN) @@ -124,9 +138,15 @@ @param content: Message to broadcast @param frequency: Frequency to broadcast to @param source: The name of the source you wish to imitate. Must be stored in stored_names list. - @param job: The name of the job. + @param job: The name of the job. + @param spans What span classes you want to apply to your message. Must be in the "allowed_custom_spans" list. + @param say Say verb used in messages ending in ".". + @param ask Say verb used in messages ending in "?". + @param yell Say verb used in messages ending in "!!" (or more). + @param exclaim Say verb used in messages ending in "!". + */ - interpreter.SetProc("broadcast", "tcombroadcast", signal, list("message", "freq", "source", "job")) + interpreter.SetProc("broadcast", "tcombroadcast", signal, list("message", "freq", "source", "job","spans","say","ask","yell","exclaim")) /* -> Send a code signal. @@ -214,9 +234,16 @@ if(signal.data["name"] != setname) signal.data["realname"] = setname - signal.data["name"] = setname - signal.data["job"] = interpreter.GetCleanVar("$job", signal.data["job"]) - signal.data["reject"] = !(interpreter.GetCleanVar("$pass")) // set reject to the opposite of $pass + signal.data["name"] = setname + signal.data["job"] = interpreter.GetCleanVar("$job", signal.data["job"]) + signal.data["reject"] = !(interpreter.GetCleanVar("$pass")) // set reject to the opposite of $pass + signal.data["verb_say"] = interpreter.GetCleanVar("$say") + signal.data["verb_ask"] = interpreter.GetCleanVar("$ask") + signal.data["verb_yell"] = interpreter.GetCleanVar("$yell") + signal.data["verb_exclaim"] = interpreter.GetCleanVar("$exclaim") + var/list/setspans = interpreter.GetCleanVar("$filters") //Save the span vector/list to a holder list + setspans &= allowed_custom_spans //Prune out any illegal ones. Go ahead, comment this line out. See the horror you can unleash! + signal.data["spans"] = setspans //Apply it to the signal // If the message is invalid, just don't broadcast it! if(signal.data["message"] == "" || !signal.data["message"]) @@ -271,7 +298,7 @@ datum/signal lastsignalers.Add("[time] : [S.id] sent a signal command, which was triggered by NTSL.: [format_frequency(freq)]/[code]") - proc/tcombroadcast(var/message, var/freq, var/source, var/job) + proc/tcombroadcast(var/message, var/freq, var/source, var/job, var/spans, var/say = "says", var/ask = "asks", var/yell = "yells", var/exclaim = "exclaims") var/datum/signal/newsign = new var/obj/machinery/telecomms/server/S = data["server"] @@ -294,6 +321,11 @@ datum/signal if(!job) job = "Unknown" + if(!islist(spans)) + spans = list() + else + spans &= allowed_custom_spans //Removes any spans not on the allowed list. Comment this out if want to let players use ANY span in stylesheet.dm! + //SAY REWRITE RELATED CODE. //This code is a little hacky, but it *should* work. Even though it'll result in a virtual speaker referencing another virtual speaker. vOv var/atom/movable/virtualspeaker/virt = PoolOrNew(/atom/movable/virtualspeaker,null) @@ -311,6 +343,11 @@ datum/signal newsign.data["compression"] = 0 newsign.data["message"] = message newsign.data["type"] = 2 // artificial broadcast + newsign.data["spans"] = spans + newsign.data["verb_say"] = say + newsign.data["verb_ask"] = ask + newsign.data["verb_yell"]= yell + newsign.data["verb_exclaim"] = exclaim if(!isnum(freq)) freq = text2num(freq) newsign.frequency = freq diff --git a/html/changelogs/Gun_Hog_NTSL_Expansion.yml b/html/changelogs/Gun_Hog_NTSL_Expansion.yml new file mode 100644 index 00000000000..967b8d001fc --- /dev/null +++ b/html/changelogs/Gun_Hog_NTSL_Expansion.yml @@ -0,0 +1,8 @@ +author: Gun Hog + +delete-after: True + +changes: + + - rscadd: "NTSL has been updated! It can now read and modify verbs (says, yells, asks)! You can set your own using $say, $yell, $ask, and $exclaim variables in your scripts." + - rscadd: "NTSL can now also modify the font, italics, and bolding of radio messages in four ways! In a script, place $loud, $wacky, $emphasis, and/or $robot in a vector to $filters. \ No newline at end of file From 92b0f9f4cdc406f4f487b4a57cd5327bf06f4f7b Mon Sep 17 00:00:00 2001 From: phil235 Date: Thu, 26 Mar 2015 02:23:39 +0100 Subject: [PATCH 28/65] Adding a changelog. Some work on death() procs of many animals. Replacing most istype(XYZ, mob/living/simple_animal/slime) by isslime(XYZ). Some work on slime feeding procs. Made simple animal aliens see in the dark like regular aliens (in case somone wants to control one). --- code/game/gamemodes/blob/blobs/blob_mobs.dm | 2 + code/game/machinery/computer/shuttle.dm | 2 +- code/game/objects/buckling.dm | 2 +- code/game/objects/items.dm | 2 +- code/modules/food&drinks/food/snacks.dm | 4 +- code/modules/mob/living/living.dm | 9 +- .../mob/living/simple_animal/constructs.dm | 5 +- .../friendly/drone/interaction.dm | 3 +- .../living/simple_animal/friendly/mouse.dm | 6 +- .../mob/living/simple_animal/hostile/alien.dm | 2 + .../mob/living/simple_animal/hostile/bees.dm | 4 +- .../mob/living/simple_animal/hostile/carp.dm | 2 + .../living/simple_animal/hostile/eyeballs.dm | 4 +- .../living/simple_animal/hostile/hivebot.dm | 66 +++++---- .../mob/living/simple_animal/hostile/mimic.dm | 15 +- .../living/simple_animal/hostile/mushroom.dm | 12 +- .../living/simple_animal/hostile/pirate.dm | 6 +- .../living/simple_animal/hostile/russian.dm | 4 +- .../mob/living/simple_animal/hostile/tree.dm | 14 +- .../modules/mob/living/simple_animal/shade.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 20 +-- .../mob/living/simple_animal/slime/life.dm | 37 +++-- .../mob/living/simple_animal/slime/powers.dm | 134 +++++++----------- .../mob/living/simple_animal/slime/slime.dm | 49 ++++--- .../Consumable-Reagents/Food-Reagents.dm | 12 +- .../research/xenobiology/xenobiology.dm | 2 +- html/changelogs/phil235-SlimeAnimal.yml | 7 + 27 files changed, 206 insertions(+), 221 deletions(-) create mode 100644 html/changelogs/phil235-SlimeAnimal.yml diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index dde6ec01bb4..d8b317d1eb6 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -87,6 +87,7 @@ loc.visible_message(" The corpse of [H.name] suddenly rises!") /mob/living/simple_animal/hostile/blob/blobspore/death(gibbed) + ..(1) // On death, create a small smoke of harmful gas (s-Acid) var/datum/effect/effect/system/chem_smoke_spread/S = new var/turf/location = get_turf(src) @@ -104,6 +105,7 @@ S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud S.start() + ghostize() qdel(src) /mob/living/simple_animal/hostile/blob/blobspore/Destroy() diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm index a6ca46fdac5..8d6f77e4a39 100644 --- a/code/game/machinery/computer/shuttle.dm +++ b/code/game/machinery/computer/shuttle.dm @@ -92,7 +92,7 @@ else if(istype(A, /mob/living)) // You Shall Not Pass! var/mob/living/M = A - if(!M.lying && !istype(M, /mob/living/carbon/monkey) && !istype(M, /mob/living/simple_animal/slime)) //If your not laying down, or a small creature, no pass. + if(!M.lying && !ismonkey(M) && !isslime(M)) //If your not laying down, or a small creature, no pass. return 0 return ..() diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 6fa7f816840..ffc4db6400c 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -34,7 +34,7 @@ if(!can_buckle || !istype(M) || (M.loc != loc) || M.buckled || (buckle_requires_restraints && !M.restrained())) return 0 - if (istype(M, /mob/living/simple_animal/slime) || istype(M, /mob/living/simple_animal/slime)) + if (isslime(M)) return 0 M.buckled = src diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 2cded397e04..8c9762f053c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -336,7 +336,7 @@ user << "You're going to need to remove that mask/helmet/glasses first." return - if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/simple_animal/slime))//Aliens don't have eyes./N slimes also don't have eyes! + if(isalien(M))//Aliens don't have eyes./N slimes also don't have eyes! user << "You cannot locate any eyes on this creature!" return diff --git a/code/modules/food&drinks/food/snacks.dm b/code/modules/food&drinks/food/snacks.dm index 4f2576ec72e..3199cde393a 100644 --- a/code/modules/food&drinks/food/snacks.dm +++ b/code/modules/food&drinks/food/snacks.dm @@ -51,7 +51,7 @@ M.unEquip(src) //so icons update :[ qdel(src) return 0 - if(istype(M, /mob/living/carbon)) + if(iscarbon(M)) if(!canconsume(M, user)) return 0 @@ -79,7 +79,7 @@ M << "You cannot force any more of \the [src] to go down your throat." return 0 else - if(! (isslime(M) || isbrain(M)) ) //If you're feeding it to someone else. + if(!isbrain(M)) //If you're feeding it to someone else. if(wrapped) return 0 if(fullness <= (600 * (1 + M.overeatduration / 1000))) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index af4e92ac905..8ad4fa5796c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -442,10 +442,10 @@ Sorry Giacom. Please don't be mad :( C.reagents.clear_reagents() for(var/datum/disease/D in viruses) D.cure(0) - if(stat == 2) + if(stat == DEAD) dead_mob_list -= src living_mob_list += src - if(!isanimal(src)) stat = CONSCIOUS + stat = CONSCIOUS if(ishuman(src)) var/mob/living/carbon/human/human_mob = src human_mob.restore_blood() @@ -453,8 +453,7 @@ Sorry Giacom. Please don't be mad :( update_fire() regenerate_icons() - ..() - return + /mob/living/proc/update_damage_overlays() return @@ -906,4 +905,4 @@ Sorry Giacom. Please don't be mad :( else loc_temp = environment.temperature - return loc_temp + return loc_temp diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 8f00dc6ea8a..4005451ecc9 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -7,7 +7,6 @@ response_help = "thinks better of touching" response_disarm = "flails at" response_harm = "punches" - icon_dead = "shade_dead" icon = 'icons/mob/mob.dmi' speed = 0 a_intent = "harm" @@ -28,7 +27,7 @@ mob_spell_list += new spell(src) /mob/living/simple_animal/construct/death() - ..() + ..(1) new /obj/item/weapon/ectoplasm (src.loc) visible_message("[src] collapses in a shattered heap.") ghostize() @@ -50,7 +49,7 @@ /mob/living/simple_animal/construct/attack_animal(mob/living/simple_animal/M as mob) if(istype(M, /mob/living/simple_animal/construct/builder)) - health += 5 + adjustBruteLoss(-5) M.emote("me", 1, "mends some of \the [src]'s wounds.") else if(src != M) ..() diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index 1a9dfb7db3e..d5d8cf19f5c 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -94,7 +94,8 @@ if(health < health_repair_max) user << "You start to tighten loose screws on [src]." if(do_after(user,80)) - health = health_repair_max + var/repair = health_repair_max - health + adjustBruteLoss(-repair) visible_message("[user] tightens [src == user ? "their" : "[src]'s"] loose screws!") else user << "You need to remain still to tighten [src]'s screws." diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index cd1e0366632..38e9f399ae1 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -39,11 +39,13 @@ death() /mob/living/simple_animal/mouse/death(gibbed) - ..(gibbed) if(!ckey) + ..(1) var/obj/item/trash/deadmouse/M = new(src.loc) - M.icon_state = src.icon_dead + M.icon_state = icon_dead qdel(src) + else + ..(gibbed) /mob/living/simple_animal/mouse/Crossed(AM as mob|obj) if( ishuman(AM) ) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 1598ca78bc7..0af9b62a638 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -26,6 +26,8 @@ faction = list("alien") status_flags = CANPUSH minbodytemp = 0 + see_in_dark = 8 + see_invisible = SEE_INVISIBLE_MINIMUM /mob/living/simple_animal/hostile/alien/drone name = "alien drone" diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index f5907498997..31316587039 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -3,7 +3,6 @@ desc = "" icon_state = "bee_1" icon_living = "bee" - icon_dead = "" speak_emote = list("buzzes") emote_hear = list("buzzes") turns_per_move = 0 @@ -34,7 +33,8 @@ update_bees() /mob/living/simple_animal/hostile/poison/bees/death(gibbed) - ..(gibbed) + ..(1) + ghostize() qdel(src) return diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 819ca1d98ce..651ed536c0d 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -51,6 +51,8 @@ maxbodytemp = INFINITY /mob/living/simple_animal/hostile/carp/holocarp/death() + ..(1) + ghostize() qdel(src) return diff --git a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm index 4bebf1eaa72..313798c6b22 100644 --- a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm +++ b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm @@ -5,7 +5,6 @@ desc = "An odd looking creature, it won't stop staring..." icon_state = "eyeball" icon_living = "eyeball" - icon_dead = "" icon_gib = "" meat_type = null meat_amount = 0 @@ -30,5 +29,6 @@ emote("me", 1, "glares at [.]") /mob/living/simple_animal/hostile/carp/eyeball/death() + ..(1) + ghostize() qdel(src) - return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index cd357f5b84e..b79fecee6ef 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -40,12 +40,13 @@ ranged = 1 /mob/living/simple_animal/hostile/hivebot/death(gibbed) - ..(gibbed) - visible_message("[src] blows apart!") + ..(1) + visible_message("[src] blows apart!") new /obj/effect/decal/cleanable/robot_debris(src.loc) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() + ghostize() qdel(src) return @@ -65,38 +66,35 @@ var/spawn_delay = 600 var/turn_on = 0 var/auto_spawn = 1 - proc - warpbots() + +/mob/living/simple_animal/hostile/hivebot/tele/New() + ..() + var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread() + smoke.set_up(5, 0, src.loc) + smoke.start() + visible_message("The [src] warps in!") + playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1) + +/mob/living/simple_animal/hostile/hivebot/tele/proc/warpbots() + icon_state = "def_radar" + visible_message("The [src] turns on!") + while(bot_amt > 0) + bot_amt-- + switch(bot_type) + if("norm") + new /mob/living/simple_animal/hostile/hivebot(get_turf(src)) + if("range") + new /mob/living/simple_animal/hostile/hivebot/range(get_turf(src)) + if("rapid") + new /mob/living/simple_animal/hostile/hivebot/rapid(get_turf(src)) + spawn(100) + qdel(src) + return - New() - ..() - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread() - smoke.set_up(5, 0, src.loc) - smoke.start() - visible_message("The [src] warps in!") - playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1) - - warpbots() - icon_state = "def_radar" - visible_message("The [src] turns on!") - while(bot_amt > 0) - bot_amt-- - switch(bot_type) - if("norm") - new /mob/living/simple_animal/hostile/hivebot(get_turf(src)) - if("range") - new /mob/living/simple_animal/hostile/hivebot/range(get_turf(src)) - if("rapid") - new /mob/living/simple_animal/hostile/hivebot/rapid(get_turf(src)) - spawn(100) - qdel(src) - return - - - Life() - ..() - if(stat == 0) - if(prob(2))//Might be a bit low, will mess with it likely - warpbots() +/mob/living/simple_animal/hostile/hivebot/tele/Life() + ..() + if(stat == 0) + if(prob(2))//Might be a bit low, will mess with it likely + warpbots() diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index e4d98981ad3..85089cae53c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -34,9 +34,10 @@ if(.) emote("me", 1, "[Attackemote] [.].") -/mob/living/simple_animal/hostile/mimic/death(gibbed) - ..(gibbed) - visible_message("[src] stops moving!") +/mob/living/simple_animal/hostile/mimic/death() + ..(1) + visible_message("[src] stops moving!") + ghostize() qdel(src) @@ -100,13 +101,13 @@ ..() icon_state = initial(icon_state) -/mob/living/simple_animal/hostile/mimic/crate/death(gibbed) +/mob/living/simple_animal/hostile/mimic/crate/death() var/obj/structure/closet/crate/C = new(get_turf(src)) // Put loot in crate for(var/obj/O in src) O.loc = C - ..(gibbed) + ..() /mob/living/simple_animal/hostile/mimic/crate/AttackingTarget() . =..() @@ -139,11 +140,11 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca for(var/mob/living/M in contents) //a fix for animated statues from the flesh to stone spell death() -/mob/living/simple_animal/hostile/mimic/copy/death(gibbed) +/mob/living/simple_animal/hostile/mimic/copy/death() for(var/atom/movable/M in src) M.loc = get_turf(src) - ..(gibbed) + ..() /mob/living/simple_animal/hostile/mimic/copy/ListTargets() // Return a list of targets that isn't the creator diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index f06f3d4c28c..aacc4da57f3 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -42,7 +42,7 @@ /mob/living/simple_animal/hostile/mushroom/Life() ..() if(!stat)//Mushrooms slowly regenerate if conscious, for people who want to save them from being eaten - health = min(health+2, maxHealth) + adjustBruteLoss(-2) /mob/living/simple_animal/hostile/mushroom/New()//Makes every shroom a little unique melee_damage_lower += rand(3, 5) @@ -78,7 +78,7 @@ if(level_gain < 1)//So we still gain a level if two mushrooms were the same level level_gain = 1 M.LevelUp(level_gain) - M.health = M.maxHealth + M.adjustBruteLoss(-M.maxHealth) qdel(src) ..() @@ -88,7 +88,8 @@ UpdateMushroomCap() /mob/living/simple_animal/hostile/mushroom/death(gibbed) - visible_message("[src] fainted.") + if(!gibbed) + visible_message("[src] fainted.") ..(gibbed) UpdateMushroomCap() @@ -101,9 +102,8 @@ /mob/living/simple_animal/hostile/mushroom/proc/Recover() visible_message("[src] slowly begins to recover.") - health = 5 faint_ticker = 0 - icon_state = icon_living + revive() UpdateMushroomCap() recovery_cooldown = 1 spawn(300) @@ -117,7 +117,7 @@ else melee_damage_upper += (level_gain * rand(1,5)) maxHealth += (level_gain * rand(1,5)) - health = maxHealth //They'll always heal, even if they don't gain a level, in case you want to keep this shroom around instead of harvesting it + adjustBruteLoss(-maxHealth) //They'll always heal, even if they don't gain a level, in case you want to keep this shroom around instead of harvesting it /mob/living/simple_animal/hostile/mushroom/proc/Bruise() if(!bruised && !stat) diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index 1e1fd61c691..2bd4ffb6341 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -42,11 +42,13 @@ weapon1 = /obj/item/weapon/gun/energy/laser -/mob/living/simple_animal/hostile/pirate/death(gibbed) - ..(gibbed) +/mob/living/simple_animal/hostile/pirate/death() + ..(1) + visible_message("[src] stops moving.") if(corpse) new corpse (src.loc) if(weapon1) new weapon1 (src.loc) + ghostize() qdel(src) return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index c98022a10cd..1f96f9533a4 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -45,10 +45,12 @@ casingtype = /obj/item/ammo_casing/a762 /mob/living/simple_animal/hostile/russian/death(gibbed) - ..(gibbed) + ..(1) + visible_message("[src] stops moving.") if(corpse) new corpse (src.loc) if(weapon1) new weapon1 (src.loc) + ghostize() qdel(src) return diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 0205b68df60..79edd57a33f 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -29,6 +29,7 @@ minbodytemp = 0 faction = list("hostile") + var/drop_type = /obj/item/stack/sheet/mineral/wood /mob/living/simple_animal/hostile/tree/FindTarget() . = ..() @@ -44,9 +45,10 @@ L.visible_message("\The [src] knocks down \the [L]!") /mob/living/simple_animal/hostile/tree/death(gibbed) - ..(gibbed) - visible_message("[src] is hacked into pieces!") - new /obj/item/stack/sheet/mineral/wood(loc) + ..(1) + visible_message("[src] is hacked into pieces!") + new drop_type(loc) + ghostize() qdel(src) /mob/living/simple_animal/hostile/tree/festivus @@ -56,9 +58,5 @@ icon_living = "festivus_pole" icon_dead = "festivus_pole" icon_gib = "festivus_pole" + drop_type = /obj/item/stack/rods -/mob/living/simple_animal/hostile/tree/festivus/death(gibbed) - ..(gibbed) - visible_message("[src] is hacked into pieces!") - new /obj/item/stack/rods(loc) - qdel(src) diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index e70e6560b33..a1982d4d0bd 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -5,7 +5,6 @@ icon = 'icons/mob/mob.dmi' icon_state = "shade" icon_living = "shade" - icon_dead = "shade_dead" maxHealth = 50 health = 50 speak_emote = list("hisses") @@ -27,6 +26,7 @@ /mob/living/simple_animal/shade/death() + ..(1) new /obj/item/weapon/ectoplasm (src.loc) visible_message("[src] lets out a contented sigh as their form unwinds.") ghostize() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 2a9e60ce9e3..00307a9d306 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -37,7 +37,7 @@ var/maxbodytemp = 350 //Atmos effect - Yes, you can make creatures that require plasma or co2 to survive. N2O is a trace gas and handled separately, hence why it isn't here. It'd be hard to add it. Hard and me don't mix (Yes, yes make all the dick jokes you want with that.) - Errorage - var/list/atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) //Leaving something at 0 means it's off - has no maximum + var/list/atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) //Leaving something at 0 means it's off - has no maximum var/unsuitable_atmos_damage = 2 //This damage is taken when atmos doesn't fit all the requirements above //LETTING SIMPLE ANIMALS ATTACK? WHAT COULD GO WRONG. Defaults to zero so Ian can still be cuddly @@ -71,10 +71,7 @@ ..() /mob/living/simple_animal/updatehealth() - if(health > maxHealth) - health = maxHealth - ..() - return + health = max(maxHealth - getBruteLoss(), 0) /mob/living/simple_animal/Life() if(..()) @@ -85,7 +82,7 @@ return 1 /mob/living/simple_animal/handle_regular_status_updates() - if(..()) + if(..()) //alive if(health < 1) death() @@ -269,7 +266,7 @@ M.do_attack_animation(src) visible_message("[M] [response_harm] [src]!") playsound(loc, "punch", 25, 1, -1) - adjustBruteLoss(harm_intent_damage) + attack_threshold_check(harm_intent_damage) add_logs(M, src, "attacked", admin=0) updatehealth() return 1 @@ -313,9 +310,9 @@ /mob/living/simple_animal/attack_slime(mob/living/simple_animal/slime/M as mob) if(..()) //successful slime attack - var/damage = rand(5, 30) + var/damage = rand(15, 25) if(M.is_adult) - damage = rand(10, 40) + damage = rand(20, 35) attack_threshold_check(damage) return 1 @@ -381,6 +378,7 @@ health = 0 icon_state = icon_dead stat = DEAD + density = 0 lying = 1 if(!gibbed) visible_message("\the [src] stops moving...") @@ -425,6 +423,10 @@ /mob/living/simple_animal/revive() health = maxHealth + icon_state = icon_living + lying = 0 + density = 1 + update_canmove() ..() /mob/living/simple_animal/proc/make_babies() // <3 <3 <3 diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index bff37ced643..904803ff26c 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -101,7 +101,6 @@ /mob/living/simple_animal/slime/handle_environment(datum/gas_mixture/environment) if(!environment) - adjustToxLoss(rand(10,20)) return //var/environment_heat_capacity = environment.heat_capacity() @@ -120,9 +119,9 @@ if(bodytemperature <= (T0C - 50)) // hurt temperature if(bodytemperature <= 50) // sqrting negative numbers is bad - adjustToxLoss(200) + adjustBruteLoss(200) else - adjustToxLoss(round(sqrt(bodytemperature)) * 2) + adjustBruteLoss(round(sqrt(bodytemperature)) * 2) else Tempstun = 0 @@ -165,10 +164,6 @@ if(..()) if(prob(30)) - adjustOxyLoss(-1) - adjustToxLoss(-1) - adjustFireLoss(-1) - adjustCloneLoss(-1) adjustBruteLoss(-1) /mob/living/simple_animal/slime/proc/handle_nutrition() @@ -183,7 +178,7 @@ if(nutrition <= 0) nutrition = 0 if(prob(75)) - adjustToxLoss(rand(0,5)) + adjustBruteLoss(rand(0,5)) else if (nutrition >= get_grow_nutrition() && amount_grown < 10) nutrition -= 20 @@ -203,7 +198,7 @@ powerlevel++ if(powerlevel > 10) powerlevel = 10 - adjustToxLoss(-10) + adjustBruteLoss(-10) @@ -327,13 +322,12 @@ AIprocess() /mob/living/simple_animal/slime/handle_automated_movement() - return //slime random movement is currently handled in handle_target() + return //slime random movement is currently handled in handle_targets() /mob/living/simple_animal/slime/handle_automated_speech() return //slime random speech is currently handled in handle_speech() /mob/living/simple_animal/slime/proc/handle_mood() - //Mood starts here var/newmood = "" if (rabid || attacked) newmood = "angry" @@ -349,7 +343,8 @@ newmood = pick("sad", ":3", "pout") if ((mood == "sad" || mood == ":3" || mood == "pout") && !newmood) - if (prob(75)) newmood = mood + if(prob(75)) + newmood = mood if (newmood != mood) // This is so we don't redraw them every time mood = newmood @@ -432,17 +427,17 @@ emote(pick("bounce","sway","light","vibrate","jiggle")) else var/t = 10 - var/slimes_near = -1 // Don't count myself + var/slimes_near = 0 var/dead_slimes = 0 var/friends_near = list() - for (var/mob/living/carbon/M in view(7,src)) - if (isslime(M)) + for (var/mob/living/L in view(7,src)) + if(isslime(L) && L != src) ++slimes_near - if (M.stat == DEAD) + if (L.stat == DEAD) ++dead_slimes - if (M in Friends) + if (L in Friends) t += 20 - friends_near += M + friends_near += L if (nutrition < get_hunger_nutrition()) t += 10 if (nutrition < get_starve_nutrition()) t += 10 if (prob(2) && prob(t)) @@ -468,12 +463,12 @@ phrases += "Purr..." if (attacked) phrases += "Grrr..." - if (getToxLoss() > 30) + if (bodytemperature < T0C) phrases += "Cold..." - if (getToxLoss() > 60) + if (bodytemperature < T0C - 30) phrases += "So... cold..." phrases += "Very... cold..." - if (getToxLoss() > 90) + if (bodytemperature < T0C - 50) phrases += "..." phrases += "C... c..." if (Victim) diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index d922d207313..e39b9400dfd 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -1,6 +1,25 @@ /mob/living/simple_animal/slime/verb/Feed() set category = "Slime" set desc = "This will let you feed on any valid creature in the surrounding area. This should also be used to halt the feeding process." + + if(stat) + return 0 + + var/list/choices = list() + for(var/mob/living/C in view(1,src)) + if(C!=src && !isslime(C) && Adjacent(C)) + choices += C + + var/mob/living/M = input(src,"Who do you wish to feed on?") in null|choices + if(!M) return 0 + if(CanFeedon(M)) + Feedon(M) + return 1 + +/mob/living/simple_animal/slime/proc/CanFeedon(var/mob/living/M) + if(!Adjacent(M)) + return 0 + if(Victim) Feedstop() return 0 @@ -13,64 +32,35 @@ src << "I must be conscious to do this..." return 0 - var/list/choices = list() - for(var/mob/living/C in view(1,src)) - if(C!=src && !istype(C,/mob/living/simple_animal/slime) && Adjacent(C)) - choices += C + if(M.stat == DEAD) + src << "This subject does not have a strong enough life energy..." + return 0 - var/mob/living/M = input(src,"Who do you wish to feed on?") in null|choices - if(!M) return 0 - if(Adjacent(M)) - - if(istype(M, /mob/living/carbon/brain)) - src << "This subject does not have an edible life energy..." + for(var/mob/living/simple_animal/slime/met in view()) + if(met.Victim == M && met != src) + src << "The [met.name] is already feeding on this subject..." return 0 - - if(istype(M, /mob/living/carbon) && (M.health < -70)) - src << "This subject does not have a strong enough life energy..." - return 0 - - if(istype(M, /mob/living/simple_animal) && (M.health < 1))//animals don't go into crit, stupid; fixes infinite energy exploit - src << "This subject does not have a strong enough life energy..." - return 0 - - for(var/mob/living/simple_animal/slime/met in view()) - if(met.Victim == M && met != src) - src << "The [met.name] is already feeding on this subject..." - return 0 - - src << "I have latched onto the subject and begun feeding..." - M << "The [src.name] has latched onto your head!" - - Feedon(M) - return 1 - + return 1 /mob/living/simple_animal/slime/proc/Feedon(var/mob/living/M) + + src << "I have latched onto the subject and begun feeding..." + M << "The [name] has latched onto [M.name]!" + Victim = M src.loc = M.loc canmove = 0 anchored = 1 var/lastnut = nutrition var/fed_succesfully = 0 - var/health_minimum = -70 - if(is_adult) - icon_state = "[colour] adult slime eat" - else - icon_state = "[colour] baby slime eat" - - - if(istype(Victim, /mob/living/simple_animal)) - health_minimum = 0 - - while(Victim && Victim.health > health_minimum && stat != 2) + while(Victim && Victim == M && Victim.stat != DEAD && stat != DEAD) canmove = 0 if(Adjacent(Victim)) loc = M.loc - if(istype(Victim, /mob/living/carbon)) + if(iscarbon(Victim)) Victim.adjustCloneLoss(rand(5,6)) Victim.adjustToxLoss(rand(1,2)) if(Victim.health <= 0) @@ -87,12 +77,12 @@ fed_succesfully = 1 - else if(health_minimum == 0) //we already know it's a simple_animal from above + else if(isanimal(Victim)) //we already know it's a simple_animal from above Victim.adjustBruteLoss(is_adult ? rand(7, 15) : rand(4, 12)) fed_succesfully = 1 else - src << "[pick("This subject is incompatable", \ + src << "[pick("This subject is incompatible", \ "This subject does not have a life energy", "This subject is empty", \ "I am not satisified", "I can not feed from this subject", \ "I do not feel nourished", "This subject is not food")]..." @@ -101,10 +91,7 @@ add_nutrition(rand(15,30), lastnut) //Heal yourself. - adjustOxyLoss(-10) adjustBruteLoss(-10) - adjustFireLoss(-10) - adjustCloneLoss(-10) updatehealth() if(Victim) @@ -115,53 +102,36 @@ else break - if(stat == 2) //why the fuck are you doing icon updating here - if(!is_adult) - icon_state = "[colour] baby slime dead" - - else - if(is_adult) - icon_state = "[colour] adult slime" - else - icon_state = "[colour] baby slime" - canmove = 1 anchored = 0 - if(M) - if(M.health < health_minimum) - M.canmove = 0 - if(!client) - if(Victim && !rabid && !attacked) - if(Victim.LAssailant && Victim.LAssailant != Victim) - if(prob(50)) - if(!(Victim.LAssailant in Friends)) - Friends[Victim.LAssailant] = 1 - //Friends.Add(Victim.LAssailant) // no idea why i was using the |= operator - else - ++Friends[Victim.LAssailant] + if(M && M.stat == DEAD) + if(!client) + if(Victim && !rabid && !attacked) + if(Victim.LAssailant && Victim.LAssailant != Victim) + if(prob(50)) + if(!(Victim.LAssailant in Friends)) + Friends[Victim.LAssailant] = 1 + else + ++Friends[Victim.LAssailant] - if(M.client && istype(src, /mob/living/carbon/human)) - if(prob(85)) - rabid = 1 // UUUNNBGHHHH GONNA EAT JUUUUUU + if(M.client && ishuman(M)) + if(prob(85)) + rabid = 1 // UUUNNBGHHHH GONNA EAT JUUUUUU - if(client) - src << "This subject does not have a strong enough life energy anymore..." - else - M.canmove = 1 - - if(client) - src << "I have stopped feeding..." - else if(client) - src << "I have stopped feeding..." + src << "This subject does not have a strong enough life energy anymore..." + + else if(client) + src << "I have stopped feeding..." Victim = null /mob/living/simple_animal/slime/proc/Feedstop() if(Victim) - if(Victim.client) Victim << "[src] has let go of your head!" + if(Victim.client) + Victim << "[src] has let go of your head!" Victim = null /mob/living/simple_animal/slime/proc/UpdateFeed(var/mob/M) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 00ef4a9e0a8..ed1cae9ac7b 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -20,6 +20,8 @@ layer = 5 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + maxHealth = 150 health = 150 gender = NEUTER @@ -84,11 +86,15 @@ ..() /mob/living/simple_animal/slime/regenerate_icons() - icon_state = "[colour] [is_adult ? "adult" : "baby"] slime" - icon_dead = "[icon_state] dead" overlays.len = 0 - if(mood) - overlays += image('icons/mob/slimes.dmi', icon_state = "aslime-[mood]") + var/icon_text = "[colour] [is_adult ? "adult" : "baby"] slime" + icon_dead = "[icon_text] dead" + if(stat != DEAD) + icon_state = icon_text + if(mood) + overlays += image('icons/mob/slimes.dmi', icon_state = "aslime-[mood]") + else + icon_state = icon_dead ..() /mob/living/simple_animal/slime/movement_delay() @@ -158,29 +164,25 @@ stat(null,"Power Level: [powerlevel]") -/mob/living/simple_animal/slime/adjustFireLoss(amount) - ..(-abs(amount)) // Heals them - return - /mob/living/simple_animal/slime/bullet_act(var/obj/item/projectile/Proj) + if(!Proj) + return attacked += 10 - ..(Proj) + if((Proj.damage_type == BURN)) + adjustBruteLoss(-abs(Proj.damage)) //fire projectiles heals slimes. + Proj.on_hit(src, 0) + else + ..(Proj) return 0 /mob/living/simple_animal/slime/emp_act(severity) powerlevel = 0 // oh no, the power! ..() -/mob/living/simple_animal/slime/ex_act(severity, target) - if (severity == 2.0) - adjustFireLoss(60) - ..() - - /mob/living/simple_animal/slime/MouseDrop(var/atom/movable/A as mob|obj) - if(isliving(A) && A != src && usr == src) + if(isliving(A) && A != src) var/mob/living/Food = A - if(Food.Adjacent(src) && !stat && Food.stat != DEAD) //messy + if(CanFeedon(Food)) Feedon(Food) ..() @@ -195,16 +197,18 @@ /mob/living/simple_animal/slime/attack_slime(mob/living/simple_animal/slime/M as mob) if(..()) //successful slime attack + if(M == src) + return if(Victim) Victim = null visible_message("[M] pulls [src] off!") return attacked += 5 if(nutrition >= 100) //steal some nutrition. negval handled in life() - nutrition -= (50 + (5 * M.amount_grown)) - M.add_nutrition(50 + (5 * M.amount_grown)) + nutrition -= (50 + (40 * M.is_adult)) + M.add_nutrition(50 + (40 * M.is_adult)) if(health > 0) - M.adjustBruteLoss(-4 + (-2 * M.amount_grown)) + M.adjustBruteLoss(-10 + (-10 * M.is_adult)) M.updatehealth() /mob/living/simple_animal/slime/attack_animal(mob/living/simple_animal/M as mob) @@ -222,7 +226,7 @@ /mob/living/simple_animal/slime/attack_hulk(mob/living/carbon/human/user) if(user.a_intent == "harm") - adjustBruteLoss(5) + adjustBruteLoss(10) discipline_slime(user) @@ -301,7 +305,7 @@ return /mob/living/simple_animal/slime/proc/apply_water() - adjustToxLoss(rand(15,20)) + adjustBruteLoss(rand(15,20)) if(!client) if(Target) // Like cats Target = null @@ -376,4 +380,3 @@ /mob/living/simple_animal/slime/pet docile = 1 - diff --git a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm index b01b5234b98..504f23c54c7 100644 --- a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm @@ -100,15 +100,15 @@ datum/reagent/consumable/capsaicin/on_mob_life(var/mob/living/M as mob) M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT if(holder.has_reagent("cryostylane")) holder.remove_reagent("cryostylane", 5) - if(istype(M, /mob/living/simple_animal/slime)) + if(isslime(M)) M.bodytemperature += rand(5,20) if(15 to 25) M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/simple_animal/slime)) + if(isslime(M)) M.bodytemperature += rand(10,20) if(25 to INFINITY) M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/simple_animal/slime)) + if(isslime(M)) M.bodytemperature += rand(15,20) ..() return @@ -125,17 +125,17 @@ datum/reagent/consumable/frostoil/on_mob_life(var/mob/living/M as mob) M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT if(holder.has_reagent("capsaicin")) holder.remove_reagent("capsaicin", 5) - if(istype(M, /mob/living/simple_animal/slime)) + if(isslime(M)) M.bodytemperature -= rand(5,20) if(15 to 25) M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/simple_animal/slime)) + if(isslime(M)) M.bodytemperature -= rand(10,20) if(25 to INFINITY) M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT if(prob(1)) M.emote("shiver") - if(istype(M, /mob/living/simple_animal/slime)) + if(isslime(M)) M.bodytemperature -= rand(15,20) ..() return diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index b58eacfde4f..12b76321f27 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -219,7 +219,7 @@ icon_state = "bottle16" /obj/item/weapon/slimesteroid/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/simple_animal/slime))//If target is not a slime. + if(!isslime(M))//If target is not a slime. user << " The steroid only works on baby slimes!" return ..() if(M.is_adult) //Can't tame adults diff --git a/html/changelogs/phil235-SlimeAnimal.yml b/html/changelogs/phil235-SlimeAnimal.yml new file mode 100644 index 00000000000..416a7460cab --- /dev/null +++ b/html/changelogs/phil235-SlimeAnimal.yml @@ -0,0 +1,7 @@ +author: phil235 +delete-after: True + +changes: + - tweak: "All slimes are now simple animals instead of carbon life forms." + - rscdel: "Remove crit status from brain and slimes." + - rscadd: "Simple animal aliens can now see in the dark like regular aliens." From 7a1232012b647daf51ab21f4316953cd8c25c602 Mon Sep 17 00:00:00 2001 From: phil235 Date: Thu, 26 Mar 2015 02:52:04 +0100 Subject: [PATCH 29/65] Fixes more merge conflicts --- _maps/map_files/MetaStation/MetaStation.v40D.dmm | 2 +- _maps/map_files/MiniStation/MiniStation.dmm | 4 ++-- code/modules/mob/living/simple_animal/hostile/headcrab.dm | 2 +- code/modules/mob/living/simple_animal/slime/slime.dm | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v40D.dmm b/_maps/map_files/MetaStation/MetaStation.v40D.dmm index db480a267f4..3e93cfc1116 100644 --- a/_maps/map_files/MetaStation/MetaStation.v40D.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v40D.dmm @@ -7790,7 +7790,7 @@ "cVB" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #1"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) "cVC" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #2"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) "cVD" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #2"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cVE" = (/mob/living/carbon/slime,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cVE" = (/mob/living/simple_animal/slime,/turf/simulated/floor/engine,/area/toxins/xenobiology) "cVG" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio3"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) "cVI" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cVK" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/xenobiology) diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm index 26440cffee6..392ef5442c9 100644 --- a/_maps/map_files/MiniStation/MiniStation.dmm +++ b/_maps/map_files/MiniStation/MiniStation.dmm @@ -134,7 +134,7 @@ "cD" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/plasteel,/area/security/brig) "cE" = (/obj/machinery/photocopier,/turf/simulated/floor/plasteel,/area/security/brig) "cF" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/engine,/area/medical/research{name = "Research Division"}) -"cG" = (/mob/living/carbon/slime,/turf/simulated/floor/engine,/area/medical/research{name = "Research Division"}) +"cG" = (/mob/living/simple_animal/slime,/turf/simulated/floor/engine,/area/medical/research{name = "Research Division"}) "cH" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/turf/simulated/floor/engine,/area/medical/research{name = "Research Division"}) "cI" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/medical/research{name = "Research Division"}) "cJ" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/medical/research{name = "Research Division"}) @@ -1703,7 +1703,7 @@ "GM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/computer) "GN" = (/obj/structure/closet/radiation,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/tcommsat/computer) "GO" = (/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 12; id = "ferry_home"; name = "station"; turf_type = /turf/space; width = 5},/turf/simulated/floor/plating,/area/space) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index 94ca1369239..4065fcfe198 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -29,7 +29,7 @@ var/mob/living/carbon/human/H = target if(H.stat == DEAD) Infect(target) - src.Die() + death() return target.attack_animal(src) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index ed1cae9ac7b..44cd079bca5 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -33,6 +33,7 @@ verb_say = "telepathically chirps" verb_ask = "telepathically asks" + verb_exclaim = "telepathically cries" verb_yell = "telephatically cries" // canstun and canweaken don't affect slimes because they ignore stun and weakened variables From 83961b85c9e3e262ed5f834e64ac850fa6fd806a Mon Sep 17 00:00:00 2001 From: tedward1337 Date: Wed, 25 Mar 2015 22:03:45 -0400 Subject: [PATCH 30/65] Adds a new button for admins with +fun to push. Sends bluespace artillery to the station at the whim of God. --- code/modules/admin/admin_verbs.dm | 3 +- code/modules/admin/topic.dm | 34 +---------------------- code/modules/admin/verbs/bluespacearty.dm | 34 +++++++++++++++++++++++ tgstation.dme | 1 + 4 files changed, 38 insertions(+), 34 deletions(-) create mode 100644 code/modules/admin/verbs/bluespacearty.dm diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 58469dfd03a..03913c95eaf 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -83,7 +83,8 @@ var/list/admin_verbs_fun = list( /client/proc/object_say, /client/proc/toggle_random_events, /client/proc/set_ooc, - /client/proc/forceEvent + /client/proc/forceEvent, + /client/proc/bluespace_artillery ) var/list/admin_verbs_spawn = list( /datum/admins/proc/spawn_atom, /*allows us to spawn instances*/ diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 348920560fb..a73185ba4c1 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1469,40 +1469,8 @@ H << "Your prayers have been answered!! You received the best cookie!" else if(href_list["BlueSpaceArtillery"]) - if(!check_rights(R_ADMIN|R_FUN)) return - var/mob/living/M = locate(href_list["BlueSpaceArtillery"]) - if(!isliving(M)) - usr << "This can only be used on instances of type /mob/living" - return - - if(alert(src.owner, "Are you sure you wish to hit [key_name(M)] with Blue Space Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes") - return - - if(BSACooldown) - src.owner << "Standby! Reload cycle in progress! Gunnary crews ready in five seconds!" - return - - BSACooldown = 1 - spawn(50) - BSACooldown = 0 - - M << "You've been hit by bluespace artillery!" - log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [src.owner]") - message_admins("[key_name(M)] has been hit by Bluespace Artillery fired by [src.owner]") - - var/turf/simulated/floor/T = get_turf(M) - if(istype(T)) - if(prob(80)) T.break_tile_to_plating() - else T.break_tile() - - if(M.health == 1) - M.gib() - else - M.adjustBruteLoss( min( 99 , (M.health - 1) ) ) - M.Stun(20) - M.Weaken(20) - M.stuttering = 20 + M.client.bluespace_artillery(M) else if(href_list["CentcommReply"]) var/mob/living/carbon/human/H = locate(href_list["CentcommReply"]) diff --git a/code/modules/admin/verbs/bluespacearty.dm b/code/modules/admin/verbs/bluespacearty.dm new file mode 100644 index 00000000000..c3c0c0d90b7 --- /dev/null +++ b/code/modules/admin/verbs/bluespacearty.dm @@ -0,0 +1,34 @@ +/client/proc/bluespace_artillery(var/mob/M in mob_list) + set name = "Bluespace Artillery" + set category = "Fun" + + if(!holder || !check_rights(R_FUN)) + return + + var/mob/living/target = M + + if(!isliving(target)) + usr << "This can only be used on instances of type /mob/living" + return + + if(alert(usr, "Are you sure you wish to hit [key_name(target)] with Blue Space Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes") + return + + explosion(target.loc, 0, 0, 0, 0) + + var/turf/simulated/floor/T = get_turf(target) + if(istype(T)) + if(prob(80)) T.break_tile_to_plating() + else T.break_tile() + + if(target.health <= 1) + target.gib() + else + target.adjustBruteLoss(min(99,(target.health - 1))) + target.Stun(20) + target.Weaken(20) + target.stuttering = 20 + + target << "You've been hit by bluespace artillery!" + log_admin("[target.name] has been hit by Bluespace Artillery fired by [usr]") + message_admins("[target.name] has been hit by Bluespace Artillery fired by [usr]") diff --git a/tgstation.dme b/tgstation.dme index 5fd45a7fa21..aa334c14ca2 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -790,6 +790,7 @@ #include "code\modules\admin\verbs\adminpm.dm" #include "code\modules\admin\verbs\adminsay.dm" #include "code\modules\admin\verbs\atmosdebug.dm" +#include "code\modules\admin\verbs\bluespacearty.dm" #include "code\modules\admin\verbs\BrokenInhands.dm" #include "code\modules\admin\verbs\buildmode.dm" #include "code\modules\admin\verbs\cinematic.dm" From 6881ac8c1de3c523eb76af96a1cf2ad89a06e736 Mon Sep 17 00:00:00 2001 From: MrPerson Date: Wed, 25 Mar 2015 22:17:03 -0700 Subject: [PATCH 31/65] Disallow doing surgery on yourself This doesn't solve the fact you can lie down with stuff in your hand (which isn't a bug imo) but it does stop people from cutting their brains out or giving themselves plastic surgery. Fixes #4001 --- code/modules/mob/living/carbon/carbon_defense.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 6e6516ccd0f..7e4e117d04a 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -15,7 +15,7 @@ /mob/living/carbon/attackby(obj/item/I, mob/user, params) if(lying || isslime(src)) if(surgeries.len) - if(user.a_intent == "help") + if(user != src && user.a_intent == "help") for(var/datum/surgery/S in surgeries) if(S.next_step(user, src)) return 1 From 4beac828e23faa56fb4d6577f8a926bf856be130 Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Thu, 26 Mar 2015 17:30:16 +1100 Subject: [PATCH 32/65] removes old player panel --- code/modules/admin/admin_verbs.dm | 12 +----- code/modules/admin/player_panel.dm | 60 ------------------------------ 2 files changed, 1 insertion(+), 71 deletions(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 58469dfd03a..e2ecd71dbe9 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -20,7 +20,6 @@ var/list/admin_verbs_default = list( /client/proc/stop_sounds ) var/list/admin_verbs_admin = list( - /client/proc/player_panel, /*shows an interface for all players, with links to various panels (old style)*/ /client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/ /client/proc/invisimin, /*allows our mob to go invisible/visible*/ // /datum/admins/proc/show_traitor_panel, /*interface which shows a mob's mind*/ -Removed due to rare practical use. Moved to debug verbs ~Errorage @@ -324,17 +323,8 @@ var/list/admin_verbs_hideable = list( mob.invisibility = INVISIBILITY_OBSERVER mob << "Invisimin on. You are now as invisible as a ghost." - -/client/proc/player_panel() - set name = "Player Panel" - set category = "Admin" - if(holder) - holder.player_panel_old() - feedback_add_details("admin_verb","PP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return - /client/proc/player_panel_new() - set name = "Player Panel New" + set name = "Player Panel" set category = "Admin" if(holder) holder.player_panel_new() diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 10af3669fc4..5b6a45e1366 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -304,66 +304,6 @@ usr << browse(dat, "window=players;size=600x480") -//The old one -/datum/admins/proc/player_panel_old() - if(!check_rights()) - return - var/dat = "Player Menu" - dat += "" - //add to this if wanting to add back in IP checking - //add if you want to know their ip to the lists below - var/list/mobs = sortmobs() - - for(var/mob/M in mobs) - if(!M.ckey) continue - - dat += "" - if(isAI(M)) - dat += "" - else if(isrobot(M)) - dat += "" - else if(ishuman(M)) - dat += "" - else if(istype(M, /mob/living/silicon/pai)) - dat += "" - else if(istype(M, /mob/new_player)) - dat += "" - else if(isobserver(M)) - dat += "" - else if(ismonkey(M)) - dat += "" - else if(isalien(M)) - dat += "" - else - dat += "" - - - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.mind && H.mind.assigned_role) - dat += "" - else - dat += "" - - - dat += {" - - - "} - switch(is_special_character(M)) - if(0) - dat += {""} - if(1) - dat += {""} - if(2) - dat += {""} - - dat += "
NameReal NameAssigned JobKeyOptionsPMTraitor?
IP:(IP: [M.lastKnownIP])
[M.name]AICyborg[M.real_name]pAINew PlayerGhostMonkeyAlienUnknown[H.mind.assigned_role]NA[(M.client ? "[M.client]" : "No client")]XPMTraitor?Traitor?Traitor?
" - - usr << browse(dat, "window=players;size=640x480") - - - /datum/admins/proc/check_antagonists() if (ticker && ticker.current_state >= GAME_STATE_PLAYING) var/dat = "Round Status

Round Status

" From 49388a2b820afeb855d43279b70e202f6567421c Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Thu, 26 Mar 2015 17:35:28 +1100 Subject: [PATCH 33/65] changelog --- html/changelogs/Jordie0608 pp.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/Jordie0608 pp.yml diff --git a/html/changelogs/Jordie0608 pp.yml b/html/changelogs/Jordie0608 pp.yml new file mode 100644 index 00000000000..23a673a3668 --- /dev/null +++ b/html/changelogs/Jordie0608 pp.yml @@ -0,0 +1,6 @@ +author: Jordie0608 + +delete-after: True + +changes: + - rscdel: "The admin's old player panel has been removed and the new one has taken it's name." \ No newline at end of file From 2f5fd8c7d451f99f0c15c6005868a31ce2908e92 Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Thu, 26 Mar 2015 19:23:01 +1100 Subject: [PATCH 34/65] renames player panel in hotkey help --- interface/interface.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/interface.dm b/interface/interface.dm index d8b7cc4613c..ffaeadc5776 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -66,7 +66,7 @@ var/adminhotkeys = {" Admin: \tF5 = Aghost (admin-ghost) -\tF6 = player-panel-new +\tF6 = player-panel \tF7 = admin-pm \tF8 = Invisimin "} From e0e2cdd985efe254b3a1ad7a46577bb08439eb0f Mon Sep 17 00:00:00 2001 From: GunHog Date: Thu, 26 Mar 2015 09:37:09 -0500 Subject: [PATCH 35/65] Fixes #8541 Fixes https://github.com/tgstation/-tg-station/issues/8541 Hardsuit helmets and other toggles should now work properly. --- code/modules/clothing/head/helmet.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index a80c9ab289b..f10de9605ce 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -161,6 +161,7 @@ obj/item/clothing/head/helmet/bluetaghelm /obj/item/clothing/head/helmet/ui_action_click() toggle_helmlight() + ..() /obj/item/clothing/head/helmet/attackby(var/obj/item/A as obj, mob/user as mob, params) if(istype(A, /obj/item/device/flashlight/seclite)) From 5b20448e2b61e19f3957cb1bde30b7be087c5f4e Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Thu, 26 Mar 2015 15:23:52 +0000 Subject: [PATCH 36/65] Monkeys can now wear hats! Monkeys can now also wear all masks, instead of the select few they had icons for (which have been removed, since they are no longer needed) --- code/_onclick/hud/_defines.dm | 1 + code/_onclick/hud/monkey.dm | 9 +++++ code/modules/mob/living/carbon/carbon.dm | 1 + .../mob/living/carbon/carbon_defines.dm | 1 + .../mob/living/carbon/human/human_defines.dm | 1 - .../mob/living/carbon/human/inventory.dm | 5 --- .../mob/living/carbon/human/update_icons.dm | 2 +- code/modules/mob/living/carbon/inventory.dm | 17 ++++++++- .../mob/living/carbon/monkey/examine.dm | 4 ++- .../mob/living/carbon/monkey/inventory.dm | 13 +++++++ .../mob/living/carbon/monkey/update_icons.dm | 33 ++++++++++++++---- code/modules/mob/update_icons.dm | 3 ++ icons/mob/monkey.dmi | Bin 22262 -> 1099 bytes 13 files changed, 75 insertions(+), 15 deletions(-) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index cbbd9bc7052..88dd74669d2 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -54,6 +54,7 @@ #define ui_borg_camera "CENTER+3:21,SOUTH:5" //borgs #define ui_borg_album "CENTER+4:21,SOUTH:5" //borgs +#define ui_monkey_head "CENTER-4:13,SOUTH:5" //monkey #define ui_monkey_mask "CENTER-3:14,SOUTH:5" //monkey #define ui_monkey_back "CENTER-2:15,SOUTH:5" //monkey diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index c96e2556de9..ad2d394d7b3 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -73,6 +73,15 @@ inv_box.layer = 19 adding += inv_box + inv_box = new /obj/screen/inventory() + inv_box.name = "head" + inv_box.icon = ui_style + inv_box.icon_state = "head" + inv_box.screen_loc = ui_monkey_head + inv_box.slot_id = slot_head + inv_box.layer = 19 + adding += inv_box + inv_box = new /obj/screen/inventory() inv_box.name = "back" inv_box.icon = ui_style diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 914f49ae833..f5cbb578b34 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -350,6 +350,7 @@
[name]
+
Head: [(head && !(head.flags&ABSTRACT)) ? head : "Nothing"]
Mask: [(wear_mask && !(wear_mask.flags&ABSTRACT)) ? wear_mask : "Nothing"]
Left Hand: [(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "Nothing"]
Right Hand: [(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "Nothing"]"} diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 7904c7cfb0f..1f96e677eaf 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -13,6 +13,7 @@ var/obj/item/back = null var/obj/item/clothing/mask/wear_mask = null var/obj/item/weapon/tank/internal = null + var/obj/item/head = null var/datum/dna/dna = null//Carbon var/heart_attack = 0 diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 189124770a2..df617e2c68e 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -31,7 +31,6 @@ var/obj/item/belt = null var/obj/item/gloves = null var/obj/item/glasses = null - var/obj/item/head = null var/obj/item/ears = null var/obj/item/wear_id = null var/obj/item/r_store = null diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 6da553aaf24..c1e89721f8a 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -268,11 +268,6 @@ else if(I == glasses) glasses = null update_inv_glasses(0) - else if(I == head) - head = null - if(I.flags & BLOCKHAIR) - update_hair(0) //rebuild hair - update_inv_head(0) else if(I == ears) ears = null update_inv_ears(0) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 3c324b4081d..8d1c801472a 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -138,7 +138,7 @@ Please contact me on #coderbus IRC. ~Carnie x //HAIR OVERLAY -/mob/living/carbon/human/proc/update_hair() +/mob/living/carbon/human/update_hair() //Reset our hair remove_overlay(HAIR_LAYER) diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 5a7455748cf..8dc0e485288 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -4,6 +4,8 @@ return back if(slot_wear_mask) return wear_mask + if(slot_head) + return head if(slot_handcuffed) return handcuffed if(slot_legcuffed) @@ -12,4 +14,17 @@ return l_hand if(slot_r_hand) return r_hand - return null \ No newline at end of file + return null + + +/mob/living/carbon/unEquip(obj/item/I) + . = ..() + if(!. || !I) + return + + if(I == head) + head = null + if(I.flags & BLOCKHAIR) + update_hair(0) + update_inv_head(0) + diff --git a/code/modules/mob/living/carbon/monkey/examine.dm b/code/modules/mob/living/carbon/monkey/examine.dm index a3686d7a478..48963b00eed 100644 --- a/code/modules/mob/living/carbon/monkey/examine.dm +++ b/code/modules/mob/living/carbon/monkey/examine.dm @@ -3,8 +3,10 @@ if (src.handcuffed) msg += "It is \icon[src.handcuffed] handcuffed!\n" + if (src.head) + msg += "It has \icon[src.head] \a [src.head] on its head. \n" if (src.wear_mask) - msg += "It has \icon[src.wear_mask] \a [src.wear_mask] on its head.\n" + msg += "It has \icon[src.wear_mask] \a [src.wear_mask] on its face.\n" if (src.l_hand) msg += "It has \icon[src.l_hand] \a [src.l_hand] in its left hand.\n" if (src.r_hand) diff --git a/code/modules/mob/living/carbon/monkey/inventory.dm b/code/modules/mob/living/carbon/monkey/inventory.dm index 95ff775c0a4..c0ae3e21920 100644 --- a/code/modules/mob/living/carbon/monkey/inventory.dm +++ b/code/modules/mob/living/carbon/monkey/inventory.dm @@ -14,6 +14,12 @@ if( !(I.slot_flags & SLOT_MASK) ) return 0 return 1 + if(slot_head) + if(head) + return 0 + if( !(I.slot_flags & SLOT_HEAD) ) + return 0 + return 1 if(slot_back) if(back) return 0 @@ -43,6 +49,10 @@ wear_mask = I I.equipped(src, slot) update_inv_wear_mask(redraw_mob) + if(slot_head) + head = I + I.equipped(src, slot) + update_inv_head(redraw_mob) if(slot_handcuffed) handcuffed = I update_inv_handcuffed(redraw_mob) @@ -70,3 +80,6 @@ I.loc = src I.equipped(src, slot) I.layer = 20 + + + diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index bcdbbb6b633..5be5fbc43b8 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -1,11 +1,12 @@ //Monkey Overlays Indexes//////// -#define M_FIRE_LAYER 6 -#define M_MASK_LAYER 5 +#define M_FIRE_LAYER 7 +#define M_MASK_LAYER 6 +#define M_HEAD_LAYER 5 #define M_BACK_LAYER 4 #define M_HANDCUFF_LAYER 3 #define M_L_HAND_LAYER 2 #define M_R_HAND_LAYER 1 -#define M_TOTAL_LAYERS 6 +#define M_TOTAL_LAYERS 7 ///////////////////////////////// /mob/living/carbon/monkey @@ -14,6 +15,7 @@ /mob/living/carbon/monkey/regenerate_icons() ..() update_inv_wear_mask(0) + update_inv_head(0) update_inv_back(0) update_inv_r_hand(0) update_inv_l_hand(0) @@ -39,7 +41,7 @@ if(client && hud_used) client.screen += wear_mask overlays -= overlays_standing[M_MASK_LAYER] - var/image/standing = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "[wear_mask.icon_state]", "layer" = -M_MASK_LAYER) + var/image/standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]", "layer" = -M_MASK_LAYER) if(!istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA ) standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood") overlays_standing[M_MASK_LAYER] = standing @@ -50,6 +52,21 @@ if(update_icons) update_icons() +/mob/living/carbon/monkey/update_inv_head(var/update_icons=1) + if(head) + head.screen_loc = ui_monkey_head + if(client && hud_used) + client.screen += head + overlays -= overlays_standing[M_HEAD_LAYER] + var/image/standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]", "layer" = -M_HEAD_LAYER) + overlays_standing[M_HEAD_LAYER] = standing + overlays += overlays_standing[M_HEAD_LAYER] + else + overlays -= overlays_standing[M_HEAD_LAYER] + overlays_standing[M_HEAD_LAYER] = null + if(update_icons) update_icons() + + /mob/living/carbon/monkey/update_inv_r_hand(var/update_icons=1) if (handcuffed) drop_r_hand() @@ -61,7 +78,9 @@ var/t_state = r_hand.item_state if(!t_state) t_state = r_hand.icon_state overlays -= overlays_standing[M_R_HAND_LAYER] - overlays_standing[M_R_HAND_LAYER] = image("icon" = r_hand.righthand_file, "icon_state" = t_state, "layer" = -M_R_HAND_LAYER) + var/image/standing = image("icon" = r_hand.righthand_file, "icon_state" = t_state, "layer" = -M_R_HAND_LAYER) + standing.pixel_y = 2 + overlays_standing[M_R_HAND_LAYER] = standing overlays += overlays_standing[M_R_HAND_LAYER] else overlays -= overlays_standing[M_R_HAND_LAYER] @@ -80,7 +99,9 @@ var/t_state = l_hand.item_state if(!t_state) t_state = l_hand.icon_state overlays -= overlays_standing[M_L_HAND_LAYER] - overlays_standing[M_L_HAND_LAYER] = image("icon" = l_hand.lefthand_file, "icon_state" = t_state, "layer" = -M_L_HAND_LAYER) + var/image/standing = image("icon" = l_hand.lefthand_file, "icon_state" = t_state, "layer" = -M_L_HAND_LAYER) + standing.pixel_y = 2 + overlays_standing[M_L_HAND_LAYER] = standing overlays += overlays_standing[M_L_HAND_LAYER] else overlays -= overlays_standing[M_L_HAND_LAYER] diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index 28934e23b88..13ec3f05463 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -43,6 +43,9 @@ /mob/proc/update_inv_head() return +/mob/proc/update_hair() + return + /mob/proc/update_inv_gloves() return diff --git a/icons/mob/monkey.dmi b/icons/mob/monkey.dmi index d1872d6aaff09c6b454b109fddb0b1f4a6bee8ca..fd2ca052740e5219867cc2dc7a9e8509df70046e 100644 GIT binary patch literal 1099 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 qPE~rV6i^q`sp@}VgZ{OZ}f`u*99abo)P(HA9X7 From f8bd5a4259f6662be4d05a5f973906ffe563a3fb Mon Sep 17 00:00:00 2001 From: phil235 Date: Thu, 26 Mar 2015 18:55:05 +0100 Subject: [PATCH 37/65] Adds a temporary fix to the conflict with metastation map. Small fix in simple_animal life subproc. --- code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm | 3 +++ code/modules/mob/living/simple_animal/simple_animal.dm | 2 ++ 2 files changed, 5 insertions(+) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm index 0634b785801..bf79c041a63 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm @@ -24,6 +24,9 @@ environment_smash = 0 ventcrawler = 2 mob_size = MOB_SIZE_SMALL + var/max_co2 = 0 //to be removed once metastation map no longer use those for Sgt Araneus + var/min_oxy = 0 + var/max_tox = 0 //Space bats need no air to fly in. diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 00307a9d306..f81bdac5d59 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -85,6 +85,8 @@ if(..()) //alive if(health < 1) death() + return 0 + return 1 /mob/living/simple_animal/handle_disabilities() //Eyes From 7b8971381687290569d2e1eb0ce9b63450871666 Mon Sep 17 00:00:00 2001 From: GunHog Date: Thu, 26 Mar 2015 15:28:58 -0500 Subject: [PATCH 38/65] Fixes 8558 - Helmet crates now come with the proper helmet type. --- code/datums/supplypacks.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 3fdfb2c17dc..119f1682296 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -185,9 +185,9 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/security/helmets name = "Helmets Crate" - contains = list(/obj/item/clothing/head/helmet, - /obj/item/clothing/head/helmet, - /obj/item/clothing/head/helmet) + contains = list(/obj/item/clothing/head/helmet/sec, + /obj/item/clothing/head/helmet/sec, + /obj/item/clothing/head/helmet/sec) cost = 10 containername = "helmet crate" From d37645640233fd5c1be766cf82c5b05835ca899b Mon Sep 17 00:00:00 2001 From: AnturK Date: Thu, 26 Mar 2015 22:49:42 +0100 Subject: [PATCH 39/65] - Adds simple charging visual - Adds sound effect - Changelog --- code/datums/spells/lightning.dm | 26 ++++++++++++++++-------- html/changelogs/AnturK-LightningBolt.yml | 6 ++++++ 2 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 html/changelogs/AnturK-LightningBolt.yml diff --git a/code/datums/spells/lightning.dm b/code/datums/spells/lightning.dm index 197e72fcda4..b3e813c7e0e 100644 --- a/code/datums/spells/lightning.dm +++ b/code/datums/spells/lightning.dm @@ -12,6 +12,7 @@ random_target = 1 var/energy = 0 var/ready = 0 + var/image/halo = null /obj/effect/proc_holder/spell/targeted/lightning/Click() if(!ready) @@ -25,7 +26,8 @@ /obj/effect/proc_holder/spell/targeted/lightning/proc/StartChargeup(mob/user = usr) ready = 1 user << "You start gathering the power." - //TODO: Add visual indictaor of charging + halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER) + user.overlays.Add(halo) spawn(0) while(ready) sleep(1) @@ -33,18 +35,22 @@ if(energy >= 100 && ready) Discharge() -/obj/effect/proc_holder/spell/targeted/lightning/revert_cast(mob/user = usr) - user << "No target found in range." +obj/effect/proc_holder/spell/targeted/lightning/proc/Reset(mob/user = usr) ready = 0 energy = 0 + if(halo) + user.overlays.Remove(halo) + +/obj/effect/proc_holder/spell/targeted/lightning/revert_cast(mob/user = usr) + user << "No target found in range." + Reset(user) ..() /obj/effect/proc_holder/spell/targeted/lightning/proc/Discharge(mob/user = usr) var/mob/living/M = user //M.electrocute_act(25,"Lightning Bolt") M << "You lose control over the spell." - energy = 0 - ready = 0 + Reset(user) start_recharge() @@ -54,8 +60,7 @@ if(get_dist(user,target)>range) user << "They are too far away!" - ready = 0 - energy = 0 + Reset(user) return user.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5) @@ -63,21 +68,24 @@ switch(energy) if(0 to 25) target.electrocute_act(10,"Lightning Bolt") + playsound(get_turf(target), 'sound/machines/defib_zap.ogg', 50, 1, -1) if(25 to 75) target.electrocute_act(25,"Lightning Bolt") + playsound(get_turf(target), 'sound/machines/defib_zap.ogg', 50, 1, -1) if(75 to 100) //CHAIN LIGHTNING Bolt(user,target,energy,user) - ready = 0 - energy = 0 + Reset(user) /obj/effect/proc_holder/spell/targeted/lightning/proc/Bolt(mob/origin,mob/target,bolt_energy,mob/user = usr) origin.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5) var/mob/living/carbon/current = target if(bolt_energy < 75) current.electrocute_act(25,"Lightning Bolt") + playsound(get_turf(current), 'sound/machines/defib_zap.ogg', 50, 1, -1) else current.electrocute_act(25,"Lightning Bolt") + playsound(get_turf(current), 'sound/machines/defib_zap.ogg', 50, 1, -1) var/list/possible_targets = new for(var/mob/living/M in view_or_range(range,target,"view")) if(user == M || target == M && los_check(current,M)) // || origin == M ? Not sure double shockings is good or not diff --git a/html/changelogs/AnturK-LightningBolt.yml b/html/changelogs/AnturK-LightningBolt.yml new file mode 100644 index 00000000000..c5d672d4ab7 --- /dev/null +++ b/html/changelogs/AnturK-LightningBolt.yml @@ -0,0 +1,6 @@ +author: AnturK + +delete-after: True + +changes: + - rscadd: "Added new wizard spell : Lightning Bolt" From 50ec2f3224ca73c821c8521cec3dffd51d97110f Mon Sep 17 00:00:00 2001 From: Incoming Date: Fri, 27 Mar 2015 01:32:28 -0400 Subject: [PATCH 40/65] Makes the ability for wizards to use summon guns, summon magic, and summon events a config option --- code/controllers/configuration.dm | 10 ++++++++++ code/game/gamemodes/wizard/spellbook.dm | 6 +++--- code/modules/events/wizard/summons.dm | 10 ++++++++++ config/game_options.txt | 10 +++++++++- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 6cc5abb7a18..515dfef3825 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -110,6 +110,10 @@ var/mutant_races = 0 //players can choose their mutant race before joining the game var/mutant_colors = 0 + var/no_summon_guns //No + var/no_summon_magic //Fun + var/no_summon_events //Allowed + var/alert_desc_green = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced." var/alert_desc_blue_upto = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted." var/alert_desc_blue_downto = "The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed." @@ -476,6 +480,12 @@ config.starlight = 1 if("grey_assistants") config.grey_assistants = 1 + if("no_summon_guns") + config.no_summon_guns = 1 + if("no_summon_magic") + config.no_summon_magic = 1 + if("no_summon_events") + config.no_summon_events = 1 else diary << "Unknown setting in configuration: '[name]'" diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index b7ff72de867..bfd371a30ec 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -108,7 +108,7 @@ dat += "Instant Summons (10)
" dat += "This spell can be used to bind a valuable item to you, bringing it to your hand at will. Using this spell while holding the bound item will allow you to unbind it. It does not require wizard garb.
" - if(ticker.mode.name != "ragin' mages") // we totally need summon greentext x100 + if(ticker.mode.name != "ragin' mages" && !config.no_summon_events) // we totally need summon greentext x100 dat += "Summon Events (One time use, persistent global spell)
" dat += "Give Murphy's law a little push and replace all events with special wizard ones that will confound and confuse everyone. Multiple castings increase the rate of these events.
" @@ -124,11 +124,11 @@ dat += "
" - if(!("summon guns" in active_challenges)) + if(!("summon guns" in active_challenges) && !config.no_summon_guns) dat += "Summon Guns (Single use only, global spell)
" dat += "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. Just be careful not to stand still too long!
" - if(!("summon magic" in active_challenges)) + if(!("summon magic" in active_challenges) && !config.no_summon_magic) dat += "Summon Magic (Single use only, global spell)
" dat += "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time.
" diff --git a/code/modules/events/wizard/summons.dm b/code/modules/events/wizard/summons.dm index afe85bad448..7b3e27e16c6 100644 --- a/code/modules/events/wizard/summons.dm +++ b/code/modules/events/wizard/summons.dm @@ -5,6 +5,11 @@ max_occurrences = 1 earliest_start = 0 +/datum/round_event_control/wizard/summonguns/New() + if(config.no_summon_guns) + weight = 0 + ..() + /datum/round_event/wizard/summonguns/start() rightandwrong(0,,10) @@ -15,5 +20,10 @@ max_occurrences = 1 earliest_start = 0 +/datum/round_event_control/wizard/summonmagic/New() + if(config.no_summon_magic) + weight = 0 + ..() + /datum/round_event/wizard/summonmagic/start() rightandwrong(1,,10) \ No newline at end of file diff --git a/config/game_options.txt b/config/game_options.txt index 84b6750c697..683ec17b46b 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -234,4 +234,12 @@ STARLIGHT MIDROUND_ANTAG_TIME_CHECK 60 ## A ratio of living to total crew members, the lower this is, the more people will have to die in order for midround antag to be skipped -MIDROUND_ANTAG_LIFE_CHECK 0.7 \ No newline at end of file +MIDROUND_ANTAG_LIFE_CHECK 0.7 + +###Limit Spell Choices## +## Uncomment to disallow wizards from using certain spells that may be too chaotic/fun for your playerbase + +#NO_SUMMON_GUNS +#NO_SUMMON_MAGIC +#NO_SUMMON_EVENTS + From c208a467fc0d4081be06f17f4c538c84e9c88f4e Mon Sep 17 00:00:00 2001 From: Sawu Date: Fri, 27 Mar 2015 20:52:24 +1100 Subject: [PATCH 41/65] Easter is Out! *Chickens have been refactored to be entirely interchangeable *Rabbits have been added, they will bounce around and place eggs, even in space! *A Rabbit Suit has been added, and can be won from opening easter eggs! *A Easter Basket spawns in the tunnels, allowing for easy carry of Easter Eggs! *Easter Eggs will spawn in maintenance *Easter Baskets also spawn in maintenance. --- code/modules/holiday/easter.dm | 154 ++++++++++++++++++ .../simple_animal/friendly/farm_animals.dm | 29 ++-- icons/mob/Easter.dmi | Bin 0 -> 14296 bytes icons/mob/head.dmi | Bin 111522 -> 112011 bytes icons/mob/suit.dmi | Bin 246438 -> 247550 bytes icons/obj/clothing/masks.dmi | Bin 18530 -> 18826 bytes icons/obj/clothing/suits.dmi | Bin 78616 -> 79317 bytes tgstation.dme | 1 + 8 files changed, 174 insertions(+), 10 deletions(-) create mode 100644 code/modules/holiday/easter.dm create mode 100644 icons/mob/Easter.dmi diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm new file mode 100644 index 00000000000..c61d6b41b8c --- /dev/null +++ b/code/modules/holiday/easter.dm @@ -0,0 +1,154 @@ +//Easter start +/datum/holiday/easter/greet() + return "Greetings! Have a Happy Easter and keep an eye out for Easter Bunnies!" + +/datum/round_event_control/easter + name = "2 SPOOKY! (Halloween)" + holidayID = EASTER + typepath = /datum/round_event/easter + weight = -1 + max_occurrences = 1 + earliest_start = 0 + +/datum/round_event/easter/announce() + priority_announce(pick("Hip-hop into Easter!","Find some Bunny's stash!","Today is National 'Hunt a Wabbit' Day.","Be kind, give Chocolate Eggs!")) + + +/datum/round_event_control/rabbitrelease + name = "Release the Rabbits!" + typepath = /datum/round_event/rabbitrelease + weight = 5 + max_occurrences = 10 + +/datum/round_event/rabbitrelease/announce() + priority_announce("Unidentified furry objects detected coming aboard [station_name()]. Beware of Adorable-ness.", "Fluffy Alert", 'sound/AI/aliens.ogg') + + +/datum/round_event/rabbitrelease/start() + for(var/obj/effect/landmark/R in landmarks_list) + if(R.name != "blobspawn") + if(prob(35)) + if(istype(R.loc,/turf/space)) + new /mob/living/simple_animal/chicken/rabbit/space(R.loc) + else + new /mob/living/simple_animal/chicken/rabbit(R.loc) + +/mob/living/simple_animal/chicken/rabbit + name = "\improper rabbit" + desc = "The hippiest hop around." + icon = 'icons/mob/Easter.dmi' + icon_state = "rabbit" + icon_living = "rabbit" + icon_dead = "rabbit_dead" + speak = list("Hop into Easter!","Come get your eggs!","Prizes for everyone!") + speak_emote = list("sniffles","twitches") + emote_hear = list("hops.") + emote_see = list("hops around","bounces up and down") + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat + egg_type = /obj/item/weapon/reagent_containers/food/snacks/egg/loaded + food_type = /obj/item/weapon/reagent_containers/food/snacks/grown/carrot + meat_amount = 1 + eggsleft = 10 + eggsFertile = FALSE + icon_prefix = "rabbit" + feedMessages = list("It nibbles happily.","It noms happily.") + layMessage = list("hides an egg.","scampers around suspiciously.","begins making a huge racket.","begins shuffling.") + +/mob/living/simple_animal/chicken/rabbit/space + icon_prefix = "s_rabbit" + icon_state = "s_rabbit" + icon_living = "s_rabbit" + icon_dead = "s_rabbit_dead" + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 + maxbodytemp = 1500 + unsuitable_atmos_damage = 0 //This damage is taken when atmos doesn't fit all the requirements above + +//Easter Baskets +/obj/item/weapon/storage/bag/easterbasket + name = "Easter Basket" + icon = 'icons/mob/Easter.dmi' + icon_state = "basket" + can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/egg,/obj/item/weapon/reagent_containers/food/snacks/chocolateegg,/obj/item/weapon/reagent_containers/food/snacks/boiledegg) + +/obj/item/weapon/storage/bag/easterbasket/proc/countEggs() + overlays.Cut() + overlays += image("icon" = icon, "icon_state" = "basket-grass", "layer" = -1) + overlays += image("icon" = icon, "icon_state" = "basket-egg[contents.len <= 5 ? contents.len : 5]", "layer" = -1) + +/obj/item/weapon/storage/bag/easterbasket/remove_from_storage(obj/item/W as obj, atom/new_location) + ..() + countEggs() + +/obj/item/weapon/storage/bag/easterbasket/handle_item_insertion(obj/item/I, prevent_warning = 0) + ..() + countEggs() + +//Bunny Suit +/obj/item/clothing/head/bunnyhead + name = "Easter Bunny Head" + icon = 'icons/mob/Easter.dmi' + icon_state = "bunnyhead" + item_state = "bunnyhead-i" + desc = "Considerably more cute than 'Frank'" + slowdown = -1 + flags = BLOCKHAIR + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE + +/obj/item/clothing/suit/bunnysuit + name = "Easter Bunny Suit" + desc = "Hop Hop Hop!" + icon = 'icons/mob/Easter.dmi' + icon_state = "bunnysuit" + item_state = "bunnysuit-i" + slowdown = -1 + body_parts_covered = CHEST|GROIN|LEGS|ARMS + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + +//Egg prizes and egg spawns! +/obj/item/weapon/reagent_containers/food/snacks/egg + var/containsPrize = FALSE + +/obj/item/weapon/reagent_containers/food/snacks/egg/loaded + containsPrize = TRUE + +/obj/item/weapon/reagent_containers/food/snacks/egg/loaded/New() + ..() + var/color = pick("blue","green","mime","orange","purple","rainbow","red","yellow") + icon_state = "egg-[color]" + item_color = "[color]" + +/obj/item/weapon/reagent_containers/food/snacks/egg/proc/dispensePrize(var/turf/where) + var/won = pick(/obj/item/clothing/head/bunnyhead, + /obj/item/clothing/suit/bunnysuit, + /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, + /obj/item/weapon/reagent_containers/food/snacks/chocolateegg, + /obj/item/toy/balloon, + /obj/item/toy/gun, + /obj/item/toy/sword, + /obj/item/toy/foamblade, + /obj/item/toy/prize/ripley, + /obj/item/toy/prize/honk, + /obj/item/toy/carpplushie, + /obj/item/toy/redbutton) + new won(where) + new/obj/item/weapon/reagent_containers/food/snacks/chocolateegg(where) + +/obj/item/weapon/reagent_containers/food/snacks/egg/attack_self(mob/user as mob) + ..() + if(containsPrize) + user << "You unwrap the [src] and find a prize inside!" + dispensePrize(get_turf(user)) + containsPrize = FALSE + qdel(src) + +/obj/effect/spawner/lootdrop/maintenance/New() + ..() + loot += list(/obj/item/weapon/reagent_containers/food/snacks/egg/loaded = 15, /obj/item/weapon/storage/bag/easterbasket = 15) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index b01d3ef8d56..6e26e2bbb10 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -201,6 +201,8 @@ var/global/chicken_count = 0 speak_chance = 2 turns_per_move = 3 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat + var/egg_type = /obj/item/weapon/reagent_containers/food/snacks/egg + var/food_type = /obj/item/weapon/reagent_containers/food/snacks/grown/wheat meat_amount = 2 response_help = "pets" response_disarm = "gently pushes aside" @@ -209,16 +211,21 @@ var/global/chicken_count = 0 health = 10 ventcrawler = 2 var/eggsleft = 0 + var/eggsFertile = TRUE var/body_color + var/icon_prefix = "chicken" pass_flags = PASSTABLE + var/list/feedMessages = list("It clucks happily.","It clucks happily.") + var/list/layMessage = list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.") + var/list/validColors = list("brown","black","white") /mob/living/simple_animal/chicken/New() ..() if(!body_color) - body_color = pick( list("brown","black","white") ) - icon_state = "chicken_[body_color]" - icon_living = "chicken_[body_color]" - icon_dead = "chicken_[body_color]_dead" + body_color = pick(validColors) + icon_state = "[icon_prefix]_[body_color]" + icon_living = "[icon_prefix]_[body_color]" + icon_dead = "[icon_prefix]_[body_color]_dead" pixel_x = rand(-6, 6) pixel_y = rand(0, 10) chicken_count += 1 @@ -228,9 +235,10 @@ var/global/chicken_count = 0 chicken_count -= 1 /mob/living/simple_animal/chicken/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/wheat)) //feedin' dem chickens + if(istype(O, food_type)) //feedin' dem chickens if(!stat && eggsleft < 8) - user.visible_message("[user] feeds [O] to [name]! It clucks happily.","You feed [O] to [name]! It clucks happily.") + var/feedmsg = "[user] feeds [O] to [name]! [pick(feedMessages)]" + user.visible_message(feedmsg) user.drop_item() qdel(O) eggsleft += rand(1, 4) @@ -245,13 +253,14 @@ var/global/chicken_count = 0 if(!.) return if(!stat && prob(3) && eggsleft > 0) - visible_message("[src] [pick("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.")]") + visible_message("[src] [pick(layMessage)]") eggsleft-- - var/obj/item/weapon/reagent_containers/food/snacks/egg/E = new(get_turf(src)) + var/obj/item/E = new egg_type(get_turf(src)) E.pixel_x = rand(-6,6) E.pixel_y = rand(-6,6) - if(chicken_count < MAX_CHICKENS && prob(25)) - SSobj.processing |= E + if(eggsFertile) + if(chicken_count < MAX_CHICKENS && prob(25)) + SSobj.processing |= E /obj/item/weapon/reagent_containers/food/snacks/egg/var/amount_grown = 0 /obj/item/weapon/reagent_containers/food/snacks/egg/process() diff --git a/icons/mob/Easter.dmi b/icons/mob/Easter.dmi new file mode 100644 index 0000000000000000000000000000000000000000..8e070c7fa006dbd6ccdbb0b76c2dc165b4d805ae GIT binary patch literal 14296 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 literal 0 HcmV?d00001 diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 9c6a3ea0254ab6a6b74d3a7fa37407598ac06ce7..b62a5d7b4dc956a9c825baee80e02bcda196fefd 100644 GIT binary patch delta 13930 zcmcJ#cT^Ki_%=+DB2oqE5F4N(T`2~LN>h=dD2UQKN);j0EC@;mQ4x@m2Meemy-Eok zsS!as1c>w!LMRC&*>`!K-#Op=&wI}M$M?=To1M(g?#}F7bI*NUbAMQ5jbCMbb(S%( zRLX%x(!I8CE${6vM$Btk)wU7v(gqHKK}1?3&&NNcBg9BFOEsE>@d*;B-_xR7GIGWq ztxXX*{_3YQSM`yWcCl*awF}cF=CXpHQwQTc?<9NvnJTMW)t=It$}wM^4_q$#ZvLp? ze)aIT`=#ciaeG%^{nNyG{3?6zk?Yr)&RT6{AzX%?n6BMOuT)Ma9PB(SzG?oNqD7)^ zon5WYsm$Ty08cR#pp(B8T`}`z`~Gg_me5zDn6)=S9VN^ zAH7#TSJ%fqD)?)BV5HtHQlexqT!$zjC?J3A4tz{n;1()WNAHv!GjlkqX`?uF9+v}* z)%e2U(wc9TDLky`nn`z9i3Gdl?Qcc_@Z)%xyb|~_uJJ14FE=H3q{W=@g?+}cCgb>< zeG(l=4N$_;!M>={QI}y{=I)A1j zH~?mmtFvJa1G1|9A1zAFq)-M2Ku9;)#05mUvue^_^Kdm;EcC|`CaUr>EC5O3-?W)} z*um|AFO5VjNF6%HP@#$Fe?!)5*UJMy`r2qI^P=ygK2l1i_NKEXNCnRP4YJJc&ObQdT@K(p3MV)pAL6m z^H7Q8EqBGb=zm!s;2zCMz}$-gAD?Smj$X&HXDu3uJp?5=?mQjse_YakY&3e9O{d|t z#4po<=q18z`0`-!ft@~je*FM&ygZm^a>={i7ZlMoLA{WZmhd?PpiU|hB0tU}ghN|W z$+1alV64ncOpd@>oX5!tQ$7TvE1QSkTdJQ;lj^E9o#scU+tAy24UHx~T7ZDrDf*n4 z4yVW%3fOs=zCJ)k+zQ2ZfKkV=b6XmoG|*+7r7%4Q_nC@Xbz0!0jA zme_CLbejeah~L${v$mStk6U}pR21Ypow{G3ij3o%zP$(297Z;`yr1u2T z8Z4zHPUxAAjVkK^b7AOF?))&Xs%sQNEhSl!YHI{hR74#8^XKwlw+kx6^S+_RGdGya zNaI_e8#rlNby7HVu5Yy3JH8U(&Qjyaqh?Ge^_}M=SpO`sm-6r~?ChWHb3A75N6d=n zRPZ@Jp!1x`PR3fH341dz$upn{)sLrEJF&;UQ<3!uh_NuD>|;sC-k zt(qF1z!{ICDUa1Jo2>+_%c!ZLF*qb_@yCNGIKDV9@8wEmMacG3D$dP(RrufoHuFEKr+Hd$)GF{v#3N>ll^TJUvh6XXN@F&hnkb*@^|uY8y9P2PJ7|Q`_A{je=A#AS($rb;o>6g@9z&;s7MKT zK+QC(jIp(~b=_P+QIY(#wi;d*)KUQhnpAU5ff%jX%BWVpmf4?tu#o0hGc&W+oXv4^ z#Fui=EiF3x%ddT|yq(E>k;WD1y;UWsH9Ujn!CHA#>*b*#4`=eX0(Y%F%V?cYm+GMktNdsMcAo87W zlgHxS-~BPP-nCJ`+eeQS1s92J!4|2;(XD){lJiQ$gUJM7&^e89z|tT*Q@*Zuhs?n9 z^7`bnF=yf&{P@vM0DSWJam{iW&=aVrDwer6Dp)~ZC?U`KMEQIQqvE7N)guVS-9HvM zjO#-0QBJXieD}gWI<3#+$S%P<56YL=qg?v4nhJ^=0UkxwUB8?0F!tU$wxn!ubWchJ zW#vF8ZT%Ke$%`T44TZJqUqQfvS!<+qs@To8*#2R96QL55qr3VI@N>W_1sxXA&oiT* z&08reUwp}<;6x=K*H1n#t)QT#1a<{}HMk)TKy5p*>bAEuPbS0&;lV1B&LnkzpcCvX zw(am-tW%@&Bm-nJhO*N`#w^Ovl()}x0N1Xu!n|cqiYILntC%=Alz(W_lb^62+Cs6# z_ddMa%0Y>D_y28NRi zH+8SwQ`zj7TJaLV8#D}6jn>sIt9g#=f^?e3&XCzyxhqems^`K)7Te$kSNo!Z3-RidEmSBogVo*dxH@oB4gqeyMJ+3PTEEjA9b9&T-m+GJ4Ft z*!tS&Vkcow&+%OB%p_&^fqNmBd*L>&JN*8L%E?eIcX=BQ*Y&AeekAPx!gL~V zpQ3d-Me!GD3*k04G8?bLD2(jT%L;gS!r$M1=FCqK2E}tn?foXS*XYz}2e!SDaaG+G z1I?G$PkBrj2aE<};nXm=&dMqykv5)}Q%-Ciq+&BFaY7b)CJKXg?s;cF5ui!0ly9Va z^Hkg4zrW2d`#$-rS^jbE>V{n)TN(IM#ymTGcADo3!%qcy`A-$k*b6KyNL!ny9-xb6 z9!}&9U1{oRjaDo_nfd$osebI=PL!8n*&G}#?n-|n0#jE8BUzp8CUi0`7i6W`Jk&Qz zv~P=HGVgugnJ{@VCMVpGZD05TYH;kJiQl+Mg5jY{uds=8ZC{LBrIU*&2gg33{KQ;? z0S45cw+W}OzWq8HQBr`1*+DK6ZxZ5)?cQT*@dLK|_wN@9FHMm#J&SDGAykELPYF8; z!DFmY9(N)qZUT>x>)WjRGp~DEj6AjS)TRHDz%ySe%z|-4plp#g>RL50=>;Qo`tP5R zGVCGY3k@7$aG9h12c_5=AV^_U!a$IU2&3sU~x!e*L z0o{o!3EF7%jk5_XROugz8Bf4WWo2dcb=G)_TJJyaN(EkhXNq->G>U04&gjuG2z$%5D4mrg5R8$J3;3M?;v3l}*IRaVrTPQ%gCCjP zbGY``r8MJbEWlDa)+zAjL4s7(4(SF3@j8vd^QY)V%PyM7uHw<`+|#E|&&kRo-r{+(BA)Dq(; zC!A?|PS`sdyU6_TsFt5(iqCKQF5y(w2lcDY&TbEbgQbC0Fg3USCu(nN5n)x~UQ#pH5O6-(a*wG1=oz z?u!O6O_Y$|byB=LGp4SLlaV32J+tCIlHY{`bj}Hv6>T3RNW{-?AG|$p77H1W?VG>b zl|``#RlqFocH+ENw_QzHZnN&|I?=6we~R*?_g^v@86Au*;hGi-`-biqXj3@7M0>-> zmDVPzli$C8c*`()s2wHmPUJ_58~l$UaCcuG8X+WShfg#W6_}g74HKm;V{hocxUqFq z-3}*Hh%Svpjty_04>Cz}V0(Gj7K5&+cm{-OW8MI#y{4FR9Po&Tp&@E?q5ZIqDl=%B zhn6+#w#Z<~h@$FKBnRJ0C%DMOq)7jKRsTn!(#eDr4;jZyxDEyM@TwT&9?i?mjmXLp z=fFLNPguj-JH`mRr_c3YTnc}Y*(LhQ7;3h{ggZy)oJa|<&Hw>A z_^N4Lc1!gL^JYK<+&fk!h>ewh-Fxw5+cM8Z*>M@Vb|DyxzVS)*yyuNju`(EK34xB) z4JbnrQ13T@OzZD;;X~cP+WODebXBM9F7Oe{iP(6>?^Wsd22;~t#yR}+c4_r%Mw#Q? z?;{kGx3}tdUFJtd?N&sY8oG#6|9LHVFtZs^6Z85w3k~NNK>EQ>&)?_ATpTP9lokZ0gP*X_1dHu`ijPb7g`D=~>zEgOV*@PTx~LWRZ)ZzZaLuz)Uwg zzrL=5o-O&48XlZ_bY^|-^EerU7?yDb>+0~JCdh%>O69@hL03Ssvtah9wI~=2^WjUu z|0NwHkdkE@6@XonrtcZmy0Ksse=QA*Q)|Kexv%4%wFeI1P-_z8UanE!;CH6_EKS!YLUfPw*zf zz)Bvbh=F_NRdQ=uD60DN=H#!1)JPd`om~+;?oah8_%wBK-kCHV!jp6cqL}?xR>yge zf7Ae`&VFFD-8cO~%$3*H+hKx<;06o?YE^%3U1r1EqSe2t*#;~A`b;clveNy;pLKe2 z_CE2?R4B^UAT2=R`4YkbgA=ml?MP&rtX)(SPig~+`Yn6~->q3Wbx&8`#2nGSW6}p0 zWJM~gk$Cz~`$#MzGJKPww{X%Ywg{wyi@-_Lxks68k%Xjkpl8xMK+U-6^KUY+H_Wc1 zua5)A3+CV_c7}-PLMn14tVvHd_{R-(hgom9|Ckw_qTiBohT{<$H*)Nx0Egsr@`dj= zZKELhCG2#{X2gTSfEP%E^`~Zs@1HBy8isj^hhFp0m*Pzvm|{uZ!gUl-nHvD8>M1uh z`u7K7n%Vky=@a5|px~RCBLtn~6B`4I?62?Q!L_I{yLq&v8vRWw&=(#b^YduziPmVy zG6%nS-enubW#`j1Gu_wM#}>TBXmWu>3F}y&4CK@K0i8JIMY4t`Cqr*gOpHW9t;`N! z@$3I+P<+Iz%4tu4{{$(%l#iy2@~8hzbBrfu{>z<~{C{2u{QvZ(rKwa{8FN+bI+Zux zrqowbr}H4{I6M3Ami} zWtc2L4`Q4sL{d&p{wGgaK{kgNW|$`bf}!IhQ^f>c!KOa_l+MeF30rIHzO^O~h4Ej( zZ^^?!5o7-&^eFmLjnJqmHhy`{0&5UMSrCIX7w_pnJj$ZOHX4tKq=u-{lh1%fN#Mse zgo5J44pHIoqsvq~3eJ=Qk%aS2qfl?OAU|zrXvnnTT|hFFJ;FrNW`_hpz6Z`<0%gb8 zW{rsXTx=v7yRdoib86pV7l3p{#Z7x59qv;P0}nMU z=pm1VaKdvVnW(G!Z69ngw^hCO-~O;Z=<4fR{3Ay2t7HeNnX6*=0Du2b%pm9`)clnf zAkMW<1}$bojp5}s*gObh5D*e74I;ZJ+~;A`tB znIudIA#5Rs<(RxPzJpy%&D@dmf#CM)NIXbnU`YnCM#t43Yl;c%t-(rfFmPF zMS$)|LHbh_YbaA`JyYP6EDcvgU<$Em21& zLrHz>TLg1Hx-FKP7DOd>GR_f0wGj*`Omacd4-TKj*Gp|ZMKFNs+cL|3wVta#HXJIC zQ?RAae`*itz#UR?6JOs`aHQ(%OnA)qM|)-7xNFMF!74s>(mOkk&Yk-S3AFD>{csg` zJmCu-RM{eo17wq*fB_z$lDnLocV@?2(LSzJTh-*eJm!1mjbYnF^j|7$;~mi0P93aW zgveZ|?Ky!t7yzVB06}%DdNXohXnZXVO^^MP&y_@wr9D%rrs82aZP9MTgQn!-<|@zY zxx5U=0QwhKy%K&{Om%Y)8AAWlr|=xZUu+BjrC+B1+HRb`>HYidaS;`8a#B|^&FVLI z(|Wk)#ug>QZC1t2l(kChtz~(4(DG+!jtJ`~oU_xRYr1guJzpxczVfTnl$hB+%_dq0 z`lK}RB)q6=mVB2}P@F{~fJbGLUXjXa`xM$$$w@iFw5G2MVUn8cszadfv&kR(V2e#GL~vOF`PXS;}`ez$E)h zs!z>&CC-0jYBYZBkiBaE@9eeQsq6T=i`tk;B(SM@;}NEpVrl8K@-_5&1v@a)Ia1=os;^fQ1H{CL8|Dky%gV}r{PrzQuXywb zAaQ!rT8zDOuWtE(|6S=)>QaOS1~pHlxn^IE^cB)CQUB=`p#1udVZ^nY>=~<}ipY(^ z&rd8>KEhlbZ+q_#Q^F%ltN!xE)+e)24Lt5#seYT9nnLUC%xcXdHzETgI(iH`k3Cas zCt=*~Yy+=xW91X;$iY1f*btbq-Wv*+W()D<_6v*_3Vd666TzNSUt}TrD;O%7sBeOw z;cmw)kSGv`7@*<;#Nq|zp01zNJaZ;;(5oaJXytq?Vt9)3Y2ZeOjEL6@51IR0=rTOw zJ$N=s`*+N-#wQEL1T6M_<|)}@+~VQe&%P7`iz~}Ifh*4mKOTl(`S%kh^xig^W41!M z+&Pe7xdv9UkWxAf4-@j z**_MZ_594kP?#lWdm|8{EV{(bqBDFQgB=aHWd88sm7Se~AlgnUWGF`c|2&Q>GXXv# zXd+!-cwb$6#_ADfVScSD-HG!AfuS`*@c+nJAfv$A+9D$s6J`B_O;dH1|C{x(7oGXR*{7)9(lJj zfH>@8JP_Yp;xl`lA97@CMfVR0Se{^bULMV3+uP1>*k$F*8FVPC8kft}b>ZFh2?HY| zxzC?0+likiPhwyk+}Lw)Wc-;bG9+>Gl^ogHbx?bPURCKTdWBb_T} ze@4jbMPjD1=l-2N#7=X0Q76#&EfyeLyiJBLW+kZ43*0b~Ax>{Qt-eW-(36RjEmC{0*upfta->5F8y;!lv;;0ZX-$xNM)!nA|&CBraa@p~e z@Q?1^qv3Jmp+5X|uE`GFZ<(}h%8xo4&(5c%{i+F3*s~R}Z_!krAgFX{vmXjEkgowX z!T-l+k$L|@OqzrfEYKJJ(b(2dJJqplajWtg1Xja!q+B zxZ40ibJFeH?b;&Jhe*1IVXdzyHq+|J-#HRo;Wf~Mm(fXiG#5elXfDk2XV6> zfG2BGdC{RXF;3<$1(AgpwTYCVzq8T6Bs(&ydODPOCMM)pHq8rOQd~OqUA6dGcmzWS$ME(d>P8PHZQDITDal~SwUcA8vB#Dsm84RQ2Y5W^g&y8eihU@nxI{0CUAp(-3Jo+jh`o{0?h6yKA#K;T2m=) zL^Tw3M4SDHzM17%6;QHACgRyy5qV`>JUR7T86Ci0BABbPkXew=W8XZ2;Zx9s1(8qD zxAiM!;=?tF{H`syU=kO0jz{F_4-MzPELMuj*APO63Go1Zn&- zhE}{6ZUE2PtH$}+MOYt3>|57~;$^SG%TWfNZ{knS##HuVE~3uM&sY+<3=}-hl(rKm zhq|aT*~KMzDg@(WA28<_DsNtFoGl?*#NNl_2IN7*w8m>^#Y-ne0a5U)3cWASnYzs7 z=24$%*!WE3@Ec$)Hkv#hF8EUQ%gW2$Jv@NzODO*x{U<+PrS;*f>$&$P`?%Cl3O4Kt z&q~Rxqb1u)s}vCuR94kT$Aw_0G_@B2-xa@d&GU^C%qyy`34>$AXIj5T3QEpwc|t)wJa-zvU!|DZ=m){@cbR%MV%Vu=z0tcyR0j2clajGfM_F`?m7ZST%YAtJ ziU5#wQZT|T!Svh`B?9>YBBfG-l2c>vHUc2{@qV*7dtCd7Ck4qtaOw|$@yuh4OvJ!} z)81#0%t$}AXQ75wGQ>K=3N9U>HpIM;N8E5Kxxs$faad9E$%L;^)0F8tYE2jZcy)F; zb(&S{sE2z%v9K?x7JlaUvsZQ~?iV`y$8C-|ePclCzUR()i=DEB>MkR8vD>f^!AD-i znc>Vgx+cP4B0P6LTZdCaF4MBfv7n)D=lq|`8=AE_2cHz0B#iIOEkppmkUA$y zxB2?(<-NH8x=yp{>dforhU>XAr(|A^yg;6w$28=q(myYX0tdGY_riCrAUt9}228j-QGYl@dsOtfhAp0(6&>v>PJeZ5ZRLM^Vll&R5sFT52DZi zrk}Al7bc`)W7z)tcPCA|lrj4-B0~z$xTc1cun&`TxG{1LJgo(JO4#AbNny|N3irW0 zBWQPJJgISNA3%9sDF;b{xYY+=f9FA0Bt}Ru!d|uqu^}ntvFFML9pVdK?MsOg+&8o)YGes+vod z$Jl%x6;qc=q$GCoJ)Dy^%y{OYDrJ zaaUDTY|=vrA@4yz1$$-iQ+_^kDGpf4Pz`(UyWhe!H3d#d;9|v+Q=_N_kbsbahoTY& zfBg#gWV?awk>W={s|nmrOo4+zM*FHxYu);8$O*85Z?WWw#R0G#6jaOGw4?gzdgwfu zPDAjHvRq>9Ys!^>X~?|KWO-Gxq^gdD&dfA~T3?RLo-SJ1c@78c6f2c;o#M4eQq zl4zk5}Q)yT`o^=Wd>_PLNO=P7qFEX0{uY7FJ{^N{9CqJ{s{OAslqM_0n>j z>A?PENOnJFgYmGJa{{)|s{V(7IWE_@#$bHsuU;s_1h;AM0%bJdpDC1@Mmsitb=v;P zlC|>JkLSx?=KU0X7~mNLBxe#C4>O&8pOU`kA}PHD#)uzql?|o{UaAaIu`sJ`I<#{Hqrg!*0f7JH{b$DteL3*^L zGW1V^4^isr{r=+$y^+Bl`9r9~&U3mGq^P>}m)WcC;=de=kg_Ybux zB@MQ{lp8hHi~_My6Jb;9WM)UUEbc|WYCLo3j|~Y1Xk_M!>vD5X(MyF+r})&*BlMWRj*EyN~+Lb*avT%wDj$t_AOE3;VBg- zW*Ur7S}BZkY^L;+_SPqKuc4mZo$8_LRBURVSrxJ(el~QcbXM2Q8KyneA6A&t`$vcv z_Tt6*E`{TmRy^*GSQb6~=}dA_XAbmB)J6sp_iY2|EV62VTH5!CD&l4{bzauPJ1R#sQ>?bEZg*{Y=dNp}-N!}uq@|2~Iz zsWW0&v3infRFr|p9h<4gNh@rVkA?6d<2S&wRpNi{R(~4eKmE5l>c?}`>@-44UY*$zF zB8j;TKmYgd<`CYM!3Vl;i@o+ZNUN4E@inW+$qf0!w(b&{8)m=pu3*7v<~@Z{N;Uc1 z=%pm4#&t$bEg93W9a~Upb{R|yb3bbf)H?9;_90#|JMn5YUP)oTF1sr(a+K!Cx7<5TVb$mbV(=X-6DOIuR zHxonmfy5IotH1$W`evsP!|2q^VkIUzoHr}cUTKh8?35Y5AHoE2B#0H)RsgGM&1)9hA<+joxV;spn2Y%W@s zMP;bC{w{eU#8np%#Fqn23Meq+Xw!r@rZ4@@M=P|yzqq99Om%#(!INRdpe-i`NSl}o z7E`q#d|dgJzBmUD(1&%eAZ=HIeeSA&u>g%YOhSf!Rl&OY&*NHQUa~5SMlm)40o~`v zH21e`8o{3AVCpsU;RP>r!sh9Y(*N;gbNpeZ)fuU1)dF^zaRslvNFk-9`P>th3qv0? z8H#%M-`X3>yR=Fv?2@U7iqkzcVahG>!e}W41U5lZ>!lE=tk_7HQvf^@1({}JR@Whd zFwpbQIzvd8%$py9v#Wa4HdO|q$enz|76L+q{g0rhDyj<{o*vNww9(8)?X{|g|&*A%e|NIyE6B?<~!qOs$mR@ZC5t? z{dRT+-q;~%LCio1u*{Do@w8c-Lc{6SIo~uhp_RUo4;J}BX-4(=0O zNCMJYj$-^j%T>xYIzu%NVnSxJM{Tmg)311bJ1?R29;Eg~zAInZMK*?gx1(VzsHj@pjCQPWJF-u@VCd*T# z5P;)`sPl&cJD$(ZBdpjsLhHm#=$ijp>x3`axy!4va~bJYH(3L>se=fZ+O&`0i}n{o z!$VK84TK#s)%Mw}BExi;+Rq6B{ovej^J^xKs5J9y-t(n4XA7TeQ`R1hWQ7G>0*#4N z*2P-B%?b+fxO=b2f_B^rxVXYPyh$dY-FHbBK*lmX;69FFkW~JR>VRrNu1|v-N`b1fycd%y#62FaLS4s|QGvzlN(VNKKsJ zDItF4vZfHRmDzO>Q;tYh70(Hgih7Stad}qoDMEfCk4tdW8 z5i|0g#pl~RNR%-@yD@#MdT+<`szbpU8^QXoylN?1=w8kAB2VO$a)+BOe)3~9 z;ne4;9Dp>_=H;zp@$4%DIQQ8#hOW%TD;`{-YyJx@?)!qxuBiwg= z4_rnZ&x3c)6l;rZs)CJIivtVmeFr`$c#G%x-1BDs$?dS36^gsM26P1Qr&3UO2fl*nn`WPa<`} z3x4Z3YJ_QiAlXFhiExnlHhxg1MhsX|kDM}JvdmAs#2H`dzNGHRrGV7p8GcndAROta zM~Lb2^z_Np>VMGwk;|L_EG_DEbGAwg?^d^AHg3YX9VN5e8n?;qIRdkbCO3D5)v_mw zY8>8E#xL{tjud6s(dP}0^+E)#H%r6s-vi3uc10^#PJj(NC$J8HFDjtAq5s|(YV$iH z?;cE3t@Jhp%-Y>6RdrNcP!o3C{AAP(RA4E%>FvGJDxkaj`$FS{tx9U@qf{Wd>c9(- zbKb&LJpT5TZ0|h?owo=B=ET@Wy3Ut#vhJtVPP{Bs8d$_Cvb%LL#EBM2RI8X&47A$D z5137Qw!SK>N^iv~nRh+V>3R?uQPKR7OX_3dWw%cSo+V8D4xZ;Ob0#)y{rbM@@lEeseIf#r;?PZG3x<>?WD_UUD-M~L{5t>^|cUJ=P_&7IM|M~p+#U3ui zHohV@CNxPzQEFhf0@AIcUYgWtjRb!UnlBbT^mhOz7 zxB%FbhnaiL?@YHVdE_p8JXl8|I3?{z>*WQ@drNXJNDhiVbh+KKXj5|QR^r&-=2d#u z$~{Ky#n&1gi%+C5|C|V~uV>)e38VbyGP2F|sZHNg{?Cx;at|(xY@Wx}Qxy6;of`sd z_XplzzMZ2f5-w%<&W+XT-&&TspO~|4qU7Yr)1QBthbD_$j)UBvd!hfM9)!L$#)hXQ zE2xc)jWGy2x;=i(Wam78>jds_V--pU1Itjj!hh*Xu_1x^f40_7XMap29bNn_AL&)hn8HU3OM`m4WY1sQ+{?Nse2^C!IC1&m(+4@!QXusthh2f3Q`x~$lzeVG31Ue(;LEXrk zo_}~S+weO`o0sd`(H2?S{{~NJj6HbIa$G|-pDcIoT#W5T*#5AUDt94U3;|c`moFRt zTB-vfs)h&5;l~eJ`}D@LQnCC8nx$NTb?~|t{ocF7{su08%4QT=mS})} F|6c$NGtU43 delta 13018 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

%Ce0Hh$^<@MK>E}#`qp~B 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 S?_gk1(bCXUFS=*-=Kld}XY=di`h4J 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 CCN|~( delta 10068 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 diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 74dade9bb5f39f014521629ba8346a167ba14991..b8a8ca55290ad11bfa43aa9ffd8a1dabbf544e2c 100644 GIT binary patch literal 18826 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 literal 18530 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 o4HeaY3jaqQ1dtaFpa=#4002GFwMt@%9`pW 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 Date: Fri, 27 Mar 2015 20:56:30 +1100 Subject: [PATCH 42/65] Fixes a wrong name. (Copypasta is bad) --- code/modules/holiday/easter.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index c61d6b41b8c..2998816b06e 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -3,7 +3,7 @@ return "Greetings! Have a Happy Easter and keep an eye out for Easter Bunnies!" /datum/round_event_control/easter - name = "2 SPOOKY! (Halloween)" + name = "Easter Eggselence" holidayID = EASTER typepath = /datum/round_event/easter weight = -1 From 530b7dc7f0e53e62937c23aad9447c58b1e1ce55 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Fri, 27 Mar 2015 09:57:22 +0000 Subject: [PATCH 43/65] Monkey Hat Changelog --- html/changelogs/RemieRichards-PR-8554.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/RemieRichards-PR-8554.yml diff --git a/html/changelogs/RemieRichards-PR-8554.yml b/html/changelogs/RemieRichards-PR-8554.yml new file mode 100644 index 00000000000..580c5c98167 --- /dev/null +++ b/html/changelogs/RemieRichards-PR-8554.yml @@ -0,0 +1,5 @@ +author: RemieRichards +delete-after: True +changes: + - rscadd: "Monkeys can now wear ANY mask, not just ones they had specific icons for." + - rscadd: "Monkeys can now wear HATS, That's right, Monkey Hats!" From 094e97479884f96b2b369bfe8b430d5e5d102a16 Mon Sep 17 00:00:00 2001 From: Sawu Date: Fri, 27 Mar 2015 23:14:33 +1100 Subject: [PATCH 44/65] * Adds some delicious easter food (Mammi, Chocolate Bunnies, Hot cross buns and Brioche) * Fixes invisible suits * Adds rabbit ears to the egg drops. --- code/modules/holiday/easter.dm | 100 +++++++++++++++++++++++++++++++-- icons/obj/clothing/hats.dmi | Bin 53514 -> 53749 bytes icons/obj/clothing/masks.dmi | Bin 18826 -> 18530 bytes icons/obj/clothing/suits.dmi | Bin 79317 -> 79313 bytes icons/obj/food.dmi | Bin 98105 -> 100266 bytes 5 files changed, 94 insertions(+), 6 deletions(-) diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 2998816b06e..840bf20ebad 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -94,9 +94,8 @@ //Bunny Suit /obj/item/clothing/head/bunnyhead name = "Easter Bunny Head" - icon = 'icons/mob/Easter.dmi' icon_state = "bunnyhead" - item_state = "bunnyhead-i" + item_state = "bunnyhead" desc = "Considerably more cute than 'Frank'" slowdown = -1 flags = BLOCKHAIR @@ -105,9 +104,8 @@ /obj/item/clothing/suit/bunnysuit name = "Easter Bunny Suit" desc = "Hop Hop Hop!" - icon = 'icons/mob/Easter.dmi' icon_state = "bunnysuit" - item_state = "bunnysuit-i" + item_state = "bunnysuit" slowdown = -1 body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT @@ -137,7 +135,8 @@ /obj/item/toy/prize/ripley, /obj/item/toy/prize/honk, /obj/item/toy/carpplushie, - /obj/item/toy/redbutton) + /obj/item/toy/redbutton, + /obj/item/clothing/head/collectable/rabbitears) new won(where) new/obj/item/weapon/reagent_containers/food/snacks/chocolateegg(where) @@ -151,4 +150,93 @@ /obj/effect/spawner/lootdrop/maintenance/New() ..() - loot += list(/obj/item/weapon/reagent_containers/food/snacks/egg/loaded = 15, /obj/item/weapon/storage/bag/easterbasket = 15) \ No newline at end of file + loot += list(/obj/item/weapon/reagent_containers/food/snacks/egg/loaded = 15, /obj/item/weapon/storage/bag/easterbasket = 15) + +//Easter Recipes + food +/obj/item/weapon/reagent_containers/food/snacks/hotcrossbun + bitesize = 2 + name = "hot-cross bun" + desc = "The Cross represents the Assistants that died for your sins." + icon_state = "hotcrossbun" + +/datum/table_recipe/hotcrossbun + name = "Hot-Cross Bun" + reqs = list( + /obj/item/weapon/reagent_containers/food/snacks/store/bread/plain = 1, + /datum/reagent/consumable/sugar = 1 + ) + result = /obj/item/weapon/reagent_containers/food/snacks/hotcrossbun + + +/obj/item/weapon/reagent_containers/food/snacks/store/cake/brioche + name = "brioche cake" + desc = "A ring of sweet, glazed buns." + icon_state = "briochecake" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/brioche + slices_num = 6 + bonus_reagents = list("nutriment" = 10, "vitamin" = 2) + +/obj/item/weapon/reagent_containers/food/snacks/cakeslice/brioche + name = "brioche cake slice" + desc = "Delicious sweet-bread. Who needs anything else?" + icon_state = "briochecake_slice" + filling_color = "#FFD700" + +/datum/table_recipe/briochecake + name = "Brioche cake" + reqs = list( + /obj/item/weapon/reagent_containers/food/snacks/store/cake/plain = 1, + /datum/reagent/consumable/sugar = 2 + ) + result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/brioche + +/obj/item/weapon/reagent_containers/food/snacks/scotchegg + name = "scotch egg" + desc = "A boiled egg wrapped in a delicious, seasoned meatball." + icon_state = "scotchegg" + bonus_reagents = list("nutriment" = 2, "vitamin" = 2) + bitesize = 3 + filling_color = "#FFFFF0" + list_reagents = list("nutriment" = 6) + +/datum/table_recipe/scotchegg + name = "Scotch egg" + reqs = list( + /datum/reagent/consumable/sodiumchloride = 1, + /datum/reagent/consumable/blackpepper = 1, + /obj/item/weapon/reagent_containers/food/snacks/boiledegg = 1, + /obj/item/weapon/reagent_containers/food/snacks/faggot = 1 + ) + result = /obj/item/weapon/reagent_containers/food/snacks/scotchegg + +/obj/item/weapon/reagent_containers/food/snacks/soup/mammi + name = "Mämmi" + desc = "A bowl of mushy bread and milk. It reminds you, not too fondly, of a bowel movement." + icon_state = "mammi" + bonus_reagents = list("nutriment" = 3, "vitamin" = 1) + list_reagents = list("nutriment" = 8, "vitamin" = 1) + +/datum/table_recipe/mammi + name = "Mämmi" + reqs = list( + /obj/item/weapon/reagent_containers/food/snacks/store/bread/plain = 1, + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 1, + /datum/reagent/consumable/milk = 5 + ) + result = /obj/item/weapon/reagent_containers/food/snacks/soup/mammi + +/obj/item/weapon/reagent_containers/food/snacks/chocolatebunny + name = "chocolate bunny" + desc = "Contains less than 10% real rabbit!" + icon_state = "chocolatebunny" + bonus_reagents = list("nutriment" = 1, "vitamin" = 1) + list_reagents = list("nutriment" = 4, "sugar" = 2, "cocoa" = 2) + filling_color = "#A0522D" + +/datum/table_recipe/chocolatebunny + name = "Chocolate bunny" + reqs = list( + /datum/reagent/consumable/sugar = 2, + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 1 + ) + result = /obj/item/weapon/reagent_containers/food/snacks/chocolatebunny \ No newline at end of file diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 312f4a40f5088c5d18a9b593d8901b8ffb545081..9e67d990c48e0cc3f5e6fe5b6805228f93e959f2 100644 GIT binary patch delta 17051 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 WsfdF6;sAtr$x10oR(&)M{@(zYVdO>t delta 16814 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

NYr8lYHa5Pp zae93IW!gFVOPVjX_@Z8e(R!_8<+)0O5$37CAC0Wf%ggI#($6mm^lF}*flrwHRzE8( zAt6!Lus{i~kp5XptxsE1Q_AEwfR&VzVpK~fMhXi9RFn>ceXsqlfHtSD&gBU=Gk*ut z_xj$r0I0~i=xR7e7GjSL4aLLkmch}{--Tz~mak)=IG=AlpYG0WD#TC{naywvhK3n< zX=(btNQWaSH$~Yu#}^l)=H*ewmO3J0fw2w>ieMECd!0H+HY_{FqrE7~JuB#F(dF!q zUb~W%R9F#nJq~V|gZS5Ar(S|VEF)@|{;C2{|4~d?3`)inXe4wc5FizZZXWT z>8^c-Tk=&WrOyT-u0RS3qTj3ZR~M0o4-BwUQuX{*ekUR7LM$akg18FtI&Dv}S!%fV zS%zJ~+d*kk-sI)3qr$XI)5jbAza7u`H%AL{qFq?b&Bn32$7F84>1LXzt8S!7e&J>kGJoz;otz9OCluiDr3gv>*3w>lvC`~B ztJ~u2Anbaw{4d#_d;o@>a(vRbQ%{P|Cwlr`)7l@knsoH^#yu%RVUp60j%7FPIIf~) z7pko(8Q5j?dLdM2RB(Dz=zf58M&u!F@~M<4xgy7K9!?uF%wuVDz3>;Ugh`a1R~#0U z!NtYhcU|*m22p=He__zTfc-d6VetUeDW>MQ^N^bQJ(c1-vJZ5!L8{-oHV28de|m6@C&Ts|fbT@zkf^DZ{Du z{;1_4Kk@qNRe4nvzzQ=o6={xIb!09sF5!9XzmMN)BO633f22qz(;oH@^rWY!FD@=7 z=i+MUTe4Q`%uWN1no_Z|$Jf<;2C>78aoAb_n-M%0!sMH$&i?=ftHoJ*=B$TzR``P6 z-HwKnZ0Uo|%{Cs)WV}Z3M9GXZ)P*dBgoIb8YdHbx!j^!etAp*iopZV`2^jKFwtF!; z%+O`)wn?n>Ws{YErOK#N{=-9VFN)SOWI1?YPz#5Y^y^*hhZc+k`@Ei+iJQv({c!Q7 z_TaPdD!*RjNyv2dvkWO%F8$$e#>Fr?J}dO36}FABj?1OOZES>ln-F&QblL7fc7_*P zTo|12nSu4OqGU^7WsLDK4F!SgprQ3GMQ&U2s+JB*%F8Ke`jn2Vv*@9}w1Ul{|5hOPG2=!jMwhA3JAq*9m7!z+0$kon zw`Nhet&OU!>qC80GN5*p1TFQnnfd~tM;l9zTv~&BY<&FwY9pHy4GT5~^~%IQF=Q<2 zDk`yYlM&}QzMYp}iD7wn+q);ODK`IHGum*y<&+*|L%G#X7o zbeX^LOP|mOm>^M`6oe-n_2J>+YR9PbZxbXQ5Y5)v&^<@fE7VWdfJCv7@M@ta4#Qp4 zApy^sy70C46*hpEY1hN!8!p>rS0f1t+`hh~_p5ipnIy*1_5^;+&VYnIO}Y;HU?1)JTkclz{93fDaFbDhDG!68yzO@#eK&{L}#h_~YR z(;%0A61M@#XyRWoKninjUte(C84}$db~F=PqEpy>Y?A< zAijJoJQx;pnS!DFjPZ$|7(<6S<*}Y#4>i(TG;TGR2EAQ;KVt4ewUHC1Kh>n8A^INX z4yji-&}=@fi)q1`C6;7n=qjIn!%h}g}9^jV3`;(oeOz*7I~hdSqPZ%RN6%H&cx2A za|wVY`9m$aookGQoyamIzkWqdiE3KT`d20>*WBDZ0(g_&2iwBOvAD+|nLVdXpKv8w ze)PUA7ki&bm*VewK(L`Vzj$1~uQ!qKQO=Tj!(iq7AYI!w<$9wcql@g*dA+M^?X>OI zw42^^IrCP3Op1|_k(8{g^Z1R5Vv0qa2bTkFIdBk1WoA>Sbr@G*|N8Z71UxWZz^v~X zlrWOyal$fd%y0PjR^!^urZYV)xo3N{kdG&9f3j~T_I^75avMbeH)<=+<_k;bfQbpg z#F7`@=XE{Ty~i+^JVa7R4pt?e^^DUDyro@_m+$X%V%$#F(5U{1xRbcs>u2!z2aHiGY0$-GC{`^!4LyViowhD;^}mFOLR~DDHZ- zy3r%crhy)_UdQm*IG1N-0n1U3BS>iZ-12@A!>b-f76pH~5Ge7W3yR9Rr)V71W1$C}VvKRkc;%TBE{|R8@q4{rl zoQaYB?*n__JOdg@G8MhvHV7mxC5r^0ctDPdIULaUgg8Fpb+Td;30HSo%MS4CV@D z90sZ#a|iU+Tntu=Vv7JI?CaHJ(S$ytc7lTfCCTUUs`)4D4c|F;h)kQnEFt z?BcTTpEJANs=&gUm;CjAx;2rlX408`QPH5~FslxiTh@rsL_-`Zdp8vk{H@d-{%gz! z;9tG(^_~?S3rmXE?LV<_8ok;(n0qxbC4~c)zza*I-pJqo z-y^O#2~gXyV*l`O7R&(G3e+px)LZKDDqKiQ@2m=XexH741|z(Jt@nJd^^oO&3^)0e z3Vgc4U`4aBzi&P?JRAlKRS5&aWU2vbIX54ozQU>8mz>V>K^FF$5!O2)S|G=ND|v8t zJ7zXphyr(yy6l}C?f5d;Aoy(WCOE$;OyNYhgZ`)lLH(CQ2c5zd2LYAE#hvkRIJV!6 z%uU$`r99&kuHKBwns&dn(7;Y)_czY{M~IxB{cDZT?7LCL?>|~HU=Co+o@G9Lq1H^s z@}ox|u6k@vj)JeR(ARvdgu$Re<8JfMEh+jAeYk${&12butt;3UkvW_;ta!t0jLAj? zZV`_C3a5BGdfA*dRfXqdPtVK?%WL9$3`{Q_z6b=b(YSR?eSy{C-f*W8*s?1M+h*#( zz5>g}o0)p;%ap*&*$sa{i*X&c*WGucw>aE~zA_z+q^0bZzIEQu#=yc-gH`t~u+Vhe zMY%`&17?r7*+hBwi(>Bn$TT3zjmHXY62W2PFkYQZBD%MX!v)8uZ_(xXch^^Us+of(i=SiJ*b&V9iRrhpcU$bs z`H;_IW$f$Sc|WWh_%MiPE+>2jN1C=?n=U&bVXmZ%z_dwN!|RA}L{)Wel#aI8Kt*6& zxlt&h5-ST7FJoyS4@DxWQliW1VqFEF4Qi+ephH0qntNE%=P44&@ z%|QnTmf?m4#UIufi7@zMd7L~?6a#stcHU- ziRgFXNb-2AYJqpF77=ac$&zgS^9C=88&Fw2r=+5DJKx$t<9Nf56#!KqKixwT4XI&xPbi(&`FtZ#qs2 zU(&za?6ku{^y5+5z3*a&y>m>rHB}h!?c4$}9n}pvtqc?du=z)mp~8amV!B8$A2KSM z4L0j1Y&8&f1cxM}qia#?Cl=+IHo5OKtofYJ zOK#LL3iEg}f@G}qJn5Q@vVTQ`a9@1r>&`ogxU9tEL4k4iuMq;@Rk^=B&HEd`Y^uuj z>kbI`t}gbUbT_r>!W=3A&8Dk73d&1d7#F+f2I;c?+xag0Qp*2>qhEedOhUSXjk|D; RS~%FBl!Ux^Fye8kb!xJ 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 diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 87932bf3b6fcefe25cc50fb076f1db565783115a..ccda4d6b1cd231c1e92e1824cec8f794acf99a64 100644 GIT binary patch delta 255 zcmVjcs31dt>FL6Idt0Zg%Fc>#ZoL3Z zng`Z%sdSulNdbCbvLGI~Tb#ijGu$SMFLeTP_l8}u343Wv@(sIYdjq$d*Dbu}ko85^ z8WxK@8ADs=g18-L$j=3h;^{b>FklmDHqDS5N}6|kgqGlzSWO3Rx79%uYLtOWUD|1L zQ^WIO^I9G_i7>r&Aou^*v!VjE0T=$`eg0$j{pVx%_~U8wAH#J=hO_J2DuZ$aw{ipl FV=)-}eAEB{ delta 259 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 XG?(E+QC*i6=;=|AQI)Qc{1E&<%yd2B From 38772cef2be7c50adaa890b5b2ca115778546966 Mon Sep 17 00:00:00 2001 From: Sawu Date: Sat, 28 Mar 2015 02:41:32 +1100 Subject: [PATCH 45/65] * Updated to use new sprites by @Nienhaus --- icons/mob/Easter.dmi | Bin 14296 -> 3323 bytes icons/obj/food.dmi | Bin 100266 -> 100111 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/Easter.dmi b/icons/mob/Easter.dmi index 8e070c7fa006dbd6ccdbb0b76c2dc165b4d805ae..f2c97d95ebc3c98419e3f2fbc6d6e2766e334d69 100644 GIT binary patch literal 3323 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 a0ifYid}qDRt};IK0Aqb~SiPQ0{C@xrpqP>X literal 14296 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 diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index 1b0165323577cfe3f815691f913dfbb658e840a2..89112e632d9fa87cafaba5da6f8bc66be78ec6dc 100644 GIT binary patch delta 6509 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 LJDD;mlYsvL`i<3o delta 6665 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 J64<*>{{y0G6L0_k From e80a50f1c78900794b7326d31ba5c13e12ca11f8 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 28 Mar 2015 00:12:06 +0100 Subject: [PATCH 46/65] Fixes not being able to put unlit welding tool in open closets and not being able to open a closet with an unlit welding tool in your hand. --- .../structures/crates_lockers/closets.dm | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 5709612e257..d657f0e1b25 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -155,7 +155,7 @@ /obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(src.opened) + if(opened) if(istype(W, /obj/item/weapon/grab)) if(src.large) var/obj/item/weapon/grab/G = W @@ -173,13 +173,13 @@ user << "You begin cutting \the [src] apart..." playsound(loc, 'sound/items/Welder.ogg', 40, 1) if(do_after(user,40,5,1)) - if( !src.opened || !istype(src, /obj/structure/closet) || !user || !WT || !WT.isOn() || !user.loc ) + if( !opened || !istype(src, /obj/structure/closet) || !user || !WT || !WT.isOn() || !user.loc ) return playsound(loc, 'sound/items/Welder2.ogg', 50, 1) new /obj/item/stack/sheet/metal(src.loc) visible_message("[user] has cut \the [src] apart with \the [WT].", "You hear welding.") qdel(src) - return + return if(isrobot(user)) return @@ -187,25 +187,25 @@ if(user.drop_item()) W.Move(loc) - else if(istype(W, /obj/item/stack/packageWrap)) - return - else if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - if(WT.remove_fuel(0,user)) - user << "You begin [welded ? "unwelding":"welding"] \the [src]..." - playsound(loc, 'sound/items/Welder2.ogg', 40, 1) - if(do_after(user,40,5,1)) - if(src.opened || !istype(src, /obj/structure/closet) || !user || !WT || !WT.isOn() || !user.loc ) - return - playsound(loc, 'sound/items/welder.ogg', 50, 1) - welded = !welded - user << "You [welded ? "welded [src] shut":"unwelded [src]"]." - update_icon() - user.visible_message("[user.name] has [welded ? "welded [src] shut":"unwelded [src]"].") - return - else if(!place(user, W)) - src.attack_hand(user) - return + else + if(istype(W, /obj/item/stack/packageWrap)) + return + if(istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if(WT.remove_fuel(0,user)) + user << "You begin [welded ? "unwelding":"welding"] \the [src]..." + playsound(loc, 'sound/items/Welder2.ogg', 40, 1) + if(do_after(user,40,5,1)) + if(opened || !istype(src, /obj/structure/closet) || !user || !WT || !WT.isOn() || !user.loc ) + return + playsound(loc, 'sound/items/welder.ogg', 50, 1) + welded = !welded + user << "You [welded ? "welded [src] shut":"unwelded [src]"]." + update_icon() + user.visible_message("[user.name] has [welded ? "welded [src] shut":"unwelded [src]"].") + return + if(!place(user, W)) + src.attack_hand(user) /obj/structure/closet/proc/place(var/mob/user, var/obj/item/I) return 0 From 3dc6a83198792b4d0e8e9b79c6b722e92370b9be Mon Sep 17 00:00:00 2001 From: Sawu Date: Sun, 29 Mar 2015 06:17:25 +1100 Subject: [PATCH 47/65] Fix-it-Phil Fixes the broken spacebbits --- code/modules/holiday/easter.dm | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 840bf20ebad..d6cfdca9759 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -59,14 +59,7 @@ icon_state = "s_rabbit" icon_living = "s_rabbit" icon_dead = "s_rabbit_dead" - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = 1500 unsuitable_atmos_damage = 0 //This damage is taken when atmos doesn't fit all the requirements above @@ -210,14 +203,14 @@ result = /obj/item/weapon/reagent_containers/food/snacks/scotchegg /obj/item/weapon/reagent_containers/food/snacks/soup/mammi - name = "Mämmi" + name = "Mämmi" desc = "A bowl of mushy bread and milk. It reminds you, not too fondly, of a bowel movement." icon_state = "mammi" bonus_reagents = list("nutriment" = 3, "vitamin" = 1) list_reagents = list("nutriment" = 8, "vitamin" = 1) /datum/table_recipe/mammi - name = "Mämmi" + name = "Mämmi" reqs = list( /obj/item/weapon/reagent_containers/food/snacks/store/bread/plain = 1, /obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 1, @@ -239,4 +232,4 @@ /datum/reagent/consumable/sugar = 2, /obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 1 ) - result = /obj/item/weapon/reagent_containers/food/snacks/chocolatebunny \ No newline at end of file + result = /obj/item/weapon/reagent_containers/food/snacks/chocolatebunny From 2ef01a61c56e77470e77cd07154f222eb44a0a54 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 28 Mar 2015 23:02:44 +0100 Subject: [PATCH 48/65] Fixes alien nest not blocking the victim from instantly unbuckling. The victim now needs to click the nest or resist, then wait 2 minutes before being free. Fixes alien nest buckling pixel offset. Removes resist unbuckling 'success' message so there's not two unbuckling messages. Fixes objects with buckling not unbuckling its buckled mob when the mob is gibbed (Fixes alien nest overlay not disappearing when larva burst and gib its host). --- .../stool_bed_chair_nest/alien_nests.dm | 50 ++++++++++++------- .../structures/stool_bed_chair_nest/bed.dm | 4 +- code/modules/mob/living/death.dm | 2 + code/modules/mob/living/living.dm | 7 ++- 4 files changed, 38 insertions(+), 25 deletions(-) diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm index 594ce58d2d4..5a7cb5c8f2d 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm @@ -7,23 +7,32 @@ icon_state = "nest" var/health = 100 -/* -/obj/structure/stool/bed/nest/unbuckle_other(mob/user as mob) - buckled_mob.visible_message(\ - "[user.name] pulls [buckled_mob.name] free from the sticky nest!",\ - "[user.name] pulls you free from the gelatinous resin.",\ - "You hear squelching...") - unbuckle() +/obj/structure/stool/bed/nest/user_unbuckle_mob(mob/user as mob) + if(buckled_mob && buckled_mob.buckled == src) + var/mob/living/M = buckled_mob + if(M != user) + M.visible_message(\ + "[user.name] pulls [M.name] free from the sticky nest!",\ + "[user.name] pulls you free from the gelatinous resin.",\ + "You hear squelching...") + else + M.visible_message(\ + "[M.name] struggles to break free from the gelatinous resin!",\ + "You struggle to break free from the gelatinous resin. (Stay still for two minutes.)",\ + "You hear squelching...") + if(!do_after(M, 1200)) + if(M && M.buckled) + M << "You fail to unbuckle yourself!" + return + if(!M.buckled) + return + M.visible_message(\ + "[M.name] breaks free from the gelatinous resin!",\ + "You break free from the gelatinous resin!",\ + "You hear squelching...") -/obj/structure/stool/bed/nest/unbuckle_myself(mob/user as mob) - buckled_mob.visible_message(\ - "[buckled_mob.name] struggles to break free of the gelatinous resin...",\ - "You struggle to break free from the gelatinous resin...",\ - "You hear squelching...") - spawn(600) - if(user && buckled_mob && user.buckled == src) - unbuckle() -*/ + unbuckle_mob() + add_fingerprint(user) /obj/structure/stool/bed/nest/user_buckle_mob(mob/M as mob, mob/user as mob) if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || user.stat || M.buckled || istype(user, /mob/living/silicon/pai) ) @@ -44,12 +53,15 @@ /obj/structure/stool/bed/nest/post_buckle_mob(mob/living/M) if(M == buckled_mob) - M.pixel_y += 6 - M.pixel_x += 2 + M.pixel_y = 0 + M.pixel_x = initial(M.pixel_x) + 2 overlays += image('icons/mob/alien.dmi', "nestoverlay", layer=6) else - M.pixel_x -= 2 + M.pixel_x = initial(M.pixel_x) M.pixel_y = initial(M.pixel_y) + if(M.lying) + var/lying_pixel_y_offset = -6 + M.pixel_y += lying_pixel_y_offset overlays.Cut() /obj/structure/stool/bed/nest/attackby(obj/item/weapon/W as obj, mob/user as mob, params) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index b81baa63d7b..e99a06209bf 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -59,7 +59,6 @@ icon = 'icons/obj/rollerbed.dmi' icon_state = "down" anchored = 0 - var/const/buckled_pixel_y_offset = 6 //Mobs buckled will have their pixel_y offset by this much /obj/structure/stool/bed/roller/post_buckle_mob(mob/M) @@ -72,7 +71,8 @@ icon_state = "down" M.pixel_y = initial(M.pixel_y) if(M.lying) - M.pixel_y -= buckled_pixel_y_offset + var/lying_pixel_y_offset = -6 + M.pixel_y += lying_pixel_y_offset /obj/item/roller diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index a41939c595d..c0eddd775b7 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -38,6 +38,8 @@ living_mob_list -= src if(!gibbed) dead_mob_list += src + else if(buckled) + buckled.unbuckle_mob() /mob/living/proc/setup_animation(var/animation, var/prev_lying) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 8ad4fa5796c..fd28cd22c86 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -693,13 +693,12 @@ Sorry Giacom. Please don't be mad :( if(do_after(usr, 600)) if(!C.buckled) return - C.visible_message("[C] manages to unbuckle themself!", \ - "You successfully unbuckle yourself.") C.buckled.user_unbuckle_mob(C,C) else - C << "You fail to unbuckle yourself!" + if(C && C.buckled) + C << "You fail to unbuckle yourself!" else - L.buckled.user_unbuckle_mob(L,L) + C.buckled.user_unbuckle_mob(C,C) else L.buckled.user_unbuckle_mob(L,L) From 89defc1d8ba429fdbd83ae51c1174d598d8bc25a Mon Sep 17 00:00:00 2001 From: NikNakFlak Date: Sat, 28 Mar 2015 19:24:13 -0700 Subject: [PATCH 49/65] Adds the ability to shave all types of corgis, including ian, lisa, regular corgis, and corgi puppies. --- .../living/simple_animal/friendly/corgi.dm | 24 +++++++++++++++++- icons/mob/pets.dmi | Bin 24890 -> 28406 bytes 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 1521cf8602e..aee646e51ea 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -58,6 +58,8 @@ see_in_dark = 5 childtype = /mob/living/simple_animal/pet/corgi/puppy species = /mob/living/simple_animal/pet/corgi + var/shaved_state = "corgi_shaved" + var/shaved = 0 var/obj/item/inventory_head var/obj/item/inventory_back var/facehugger @@ -67,6 +69,7 @@ ..() regenerate_icons() + /mob/living/simple_animal/pet/corgi/death(gibbed) ..(gibbed) regenerate_icons() @@ -75,7 +78,23 @@ ..() regenerate_icons() -/mob/living/simple_animal/pet/corgi/sac_act(var/obj/effect/rune/R, victim) +/mob/living/simple_animal/pet/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(user.stat == CONSCIOUS && istype(O, /obj/item/weapon/razor)) + if (shaved) + user << "You can't shave this corgi, it's already been shaved." + return + user.visible_message("[user] starts to shave [src] using \the [O].") + if(do_after(user, 50)) + user.visible_message("[user] shaves [src]'s hair using \the [O]. ") + playsound(loc, 'sound/items/Welder2.ogg', 20, 1) + shaved = 1 + icon_state = "[shaved_state]" + icon_living = "[shaved_state]" + icon_dead = "[shaved_state]_dead" + return + ..() + +/mob/living/simple_animal/pet/corgi/sac_act(var/obj/effect/rune/R, victim) //Still the best thing in this game usr << "Even dark gods from another plane have standards, sicko." usr.reagents.add_reagent("hell_water", 2) R.stone_or_gib(victim) @@ -507,6 +526,8 @@ icon_state = "puppy" icon_living = "puppy" icon_dead = "puppy_dead" + shaved_state = "puppy_shaved" + shaved = 0 mob_size = MOB_SIZE_SMALL accept_collar = 1 @@ -532,6 +553,7 @@ response_harm = "kicks" var/turns_since_scan = 0 var/puppies = 0 + shaved_state = "lisa_shaved" accept_collar = 1 //Lisa already has a cute bow! diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi index 8179f08d3626a5058479ed3085d560169bf32596..466ca058d4a08468357d223c06a96e627b405cb0 100644 GIT binary patch literal 28406 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 Ns!E!QKjp37{ttmQ!a)E4 From 4f43fff19924ecd86b51ca80812e02b204246eee Mon Sep 17 00:00:00 2001 From: Fayrik Date: Sat, 28 Mar 2015 01:31:44 +0000 Subject: [PATCH 50/65] Issue fixes! All that, and more! --- _maps/map_files/generic/z2.dmm | 158 +++++++++++------- code/game/communications.dm | 6 +- code/game/machinery/telecomms/broadcaster.dm | 4 +- .../objects/items/devices/radio/headset.dm | 13 +- code/game/say.dm | 2 +- code/modules/admin/verbs/debug.dm | 45 +++-- code/modules/clothing/under/miscellaneous.dm | 2 - config/admins.txt | 3 +- .../changelogs/Fayrik-CentcomExpansionTwo.yml | 9 + icons/mob/ears.dmi | Bin 810 -> 881 bytes icons/mob/uniform.dmi | Bin 205273 -> 207704 bytes icons/obj/radio.dmi | Bin 7691 -> 7825 bytes interface/stylesheet.dm | 2 +- 13 files changed, 163 insertions(+), 81 deletions(-) create mode 100644 html/changelogs/Fayrik-CentcomExpansionTwo.yml diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index e160a9e1d29..950e7c8cb57 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -215,12 +215,12 @@ "eg" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating,/area/space) "eh" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/simulated/shuttle/plating,/area/space) "ei" = (/turf/unsimulated/wall,/area/centcom/control) -"ej" = (/obj/machinery/door/airlock/centcom{name = "Centcom Customs"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) +"ej" = (/obj/machinery/door/airlock/centcom{name = "Centcom Customs"; opacity = 1; req_access_txt = "109"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) "ek" = (/turf/unsimulated/wall,/area/centcom/evac) "el" = (/obj/machinery/vending/clothing,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry) "em" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) -"en" = (/obj/machinery/door/poddoor/preopen{id = "CentComPort"; name = "security door"},/turf/unsimulated/floor{dir = 8; heat_capacity = 1; icon_state = "warning"},/area/centcom/control) -"eo" = (/obj/machinery/door/airlock/centcom{name = "Centcom Docks"; opacity = 1; req_access_txt = "109"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) +"en" = (/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/control) +"eo" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) "ep" = (/turf/unsimulated/wall,/area/centcom/prison) "eq" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 1; icon_state = "rightsecure"; name = "Centcom Customs"; req_access_txt = "109"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) "er" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 1},/area/centcom/control) @@ -239,10 +239,10 @@ "eE" = (/obj/machinery/computer/emergency_shuttle,/turf/simulated/shuttle/floor,/area/space) "eF" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) "eG" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall/interior{icon_state = "swall_f6"},/area/space) -"eH" = (/obj/structure/table,/obj/item/weapon/paper_bin,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/suppy) +"eH" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (SOUTHWEST)"; icon_state = "fakewindows"; dir = 10},/area/centcom/evac) "eI" = (/obj/structure/closet/crate,/turf/unsimulated/floor{tag = "icon-plating"; icon_state = "plating"},/area/centcom/suppy) "eJ" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac) -"eK" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac) +"eK" = (/turf/unsimulated/floor{tag = "icon-darkgreen (EAST)"; icon_state = "darkgreen"; dir = 4},/area/centcom/ferry) "eL" = (/obj/machinery/computer/atmos_alert,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) "eM" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/space) "eN" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/space) @@ -258,7 +258,7 @@ "eX" = (/turf/unsimulated/floor{dir = 8; icon_state = "vault"},/area/centcom/control) "eY" = (/turf/unsimulated/floor,/area/centcom/suppy) "eZ" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) -"fa" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac) +"fa" = (/turf/unsimulated/floor{tag = "icon-warndark (WEST)"; icon_state = "warndark"; dir = 8},/area/centcom/ferry) "fb" = (/obj/structure/stool/bed/chair/office/dark,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac) "fc" = (/obj/structure/showcase/fakesec,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac) "fd" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/space) @@ -269,9 +269,9 @@ "fi" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) "fj" = (/obj/structure/table,/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stamp/denied{pixel_x = 4; pixel_y = -2},/obj/item/weapon/paper/centcom,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) "fk" = (/obj/machinery/door/window/northleft{dir = 2; name = "Centcom Security"; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac) -"fl" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac) -"fm" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac) -"fn" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac) +"fl" = (/turf/unsimulated/floor{tag = "icon-yellowsiding (WEST)"; icon_state = "yellowsiding"; dir = 8},/area/centcom/evac) +"fm" = (/obj/structure/stool/bed/chair/office/dark,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac) +"fn" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/evac) "fo" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor4,/area/space) "fp" = (/obj/machinery/flasher{id = "cockpit_flasher"; pixel_x = 6; pixel_y = 24},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) "fq" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) @@ -313,8 +313,8 @@ "ga" = (/turf/simulated/shuttle/wall{icon_state = "swallc4"; dir = 2},/area/space) "gb" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) "gc" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/ferry) -"gd" = (/turf/unsimulated/floor{dir = 8; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry) -"ge" = (/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/ferry) +"gd" = (/obj/effect/landmark{name = "Deathsquad"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry) +"ge" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor{dir = 1; icon_state = "green"},/area/centcom/evac) "gf" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 8},/area/centcom/control) "gg" = (/turf/unsimulated/floor{icon_state = "greencorner"},/area/centcom/control) "gh" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/evac) @@ -330,7 +330,7 @@ "gr" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/space) "gs" = (/turf/unsimulated/floor{name = "plating"},/area/space) "gt" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/ferry) -"gu" = (/obj/effect/landmark{name = "Deathsquad"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry) +"gu" = (/obj/structure/flora/kirbyplants,/turf/unsimulated/floor{icon_state = "green"; dir = 9},/area/centcom/evac) "gv" = (/turf/unsimulated/wall/fakeglass,/area/centcom/control) "gw" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) "gx" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) @@ -343,7 +343,7 @@ "gE" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor,/area/space) "gF" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/centcom/ferry) "gG" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (SOUTHEAST)"; icon_state = "fakewindows"; dir = 6},/area/centcom/ferry) -"gH" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner"; dir = 1},/area/centcom/evac) +"gH" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/shotgun/toy/crossbow,/obj/item/toy/foamblade,/turf/unsimulated/floor{dir = 1; icon_state = "green"},/area/centcom/evac) "gI" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership) "gJ" = (/obj/structure/flora/grass/brown,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership) "gK" = (/obj/structure/flora/tree/pine,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership) @@ -356,9 +356,9 @@ "gR" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/surgical_drapes,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "gS" = (/obj/item/weapon/shard{color = "#008000"; icon_state = "small"},/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/unsimulated/floor/plating,/area/wizard_station) "gT" = (/obj/machinery/door/airlock/shuttle,/obj/docking_port/mobile{dir = 8; dwidth = 2; height = 12; id = "ferry"; name = "ferry shuttle"; travelDir = 180; width = 5},/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 12; id = "ferry_away"; name = "unknown"; turf_type = /turf/unsimulated/floor; width = 5},/turf/simulated/shuttle/floor,/area/space) -"gU" = (/obj/machinery/door/airlock/external{name = "Ferry Airlock"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/ferry) -"gV" = (/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/ferry) -"gW" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 4},/area/centcom/ferry) +"gU" = (/turf/unsimulated/floor{dir = 1; icon_state = "green"},/area/centcom/evac) +"gV" = (/obj/structure/rack,/obj/item/weapon/storage/fancy/crayons,/obj/item/toy/sword,/turf/unsimulated/floor{dir = 1; icon_state = "green"},/area/centcom/evac) +"gW" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/evac) "gX" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/unsimulated/wall,/area/centcom/evac) "gY" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/unsimulated/floor/plating,/area/wizard_station) "gZ" = (/obj/machinery/door/poddoor/preopen,/obj/effect/decal/cleanable/blood/splatter,/turf/unsimulated/floor/plating,/area/wizard_station) @@ -371,8 +371,8 @@ "hg" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor/plating,/area/wizard_station) "hh" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry) "hi" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/space) -"hj" = (/turf/unsimulated/floor{icon_state = "greencorner"},/area/centcom/ferry) -"hk" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner"; dir = 8},/area/centcom/evac) +"hj" = (/turf/unsimulated/floor{tag = "icon-warndark (EAST)"; icon_state = "warndark"; dir = 4},/area/centcom/evac) +"hk" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/evac) "hl" = (/turf/unsimulated/floor{dir = 1; icon_state = "green"},/area/centcom/control) "hm" = (/turf/unsimulated/wall/fakeglass,/area/centcom/ferry) "hn" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/simulated/shuttle/plating,/area/space) @@ -407,6 +407,7 @@ "hQ" = (/turf/unsimulated/floor{name = "plating"},/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/space) "hR" = (/obj/machinery/door/airlock/centcom{name = "Transport Shuttle"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry) "hS" = (/obj/machinery/door/airlock/centcom{name = "briefing room"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry) +"hT" = (/obj/machinery/door/poddoor/preopen{id = "CentComPort"; name = "security door"},/turf/unsimulated/floor{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/area/centcom/control) "hU" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry) "hV" = (/obj/structure/dresser,/obj/structure/mirror{pixel_x = 0; pixel_y = 30},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry) "hW" = (/obj/structure/closet/secure_closet/ertCom,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry) @@ -430,6 +431,7 @@ "io" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 4},/area/syndicate_mothership) "ip" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/grass/both,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"},/area/syndicate_mothership) "iq" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/tree/pine,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"},/area/syndicate_mothership) +"ir" = (/turf/unsimulated/floor{dir = 8; heat_capacity = 1; icon_state = "warning"},/area/centcom/evac) "is" = (/obj/structure/closet/secure_closet/ertMed,/turf/unsimulated/floor{tag = "icon-darkblue (EAST)"; icon_state = "darkblue"; dir = 4},/area/centcom/ferry) "it" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeobserve) "iu" = (/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeobserve) @@ -464,6 +466,7 @@ "iX" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/evac) "iY" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac) "iZ" = (/obj/structure/filingcabinet/filingcabinet,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac) +"ja" = (/obj/machinery/door/airlock/centcom{name = "Centcom Docks"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) "jb" = (/turf/unsimulated/wall/fakeglass{color = "#008000"; dir = 8; icon_state = "fakewindows2"},/area/wizard_station) "jc" = (/turf/unsimulated/wall/fakeglass{color = "#008000"; dir = 4; icon_state = "fakewindows"},/area/wizard_station) "jd" = (/turf/unsimulated/wall/normal{tag = "icon-uranium2"; icon_state = "uranium2"},/area/wizard_station) @@ -499,7 +502,11 @@ "jH" = (/obj/structure/closet/secure_closet/ertMed,/turf/unsimulated/floor{tag = "icon-darkblue"; icon_state = "darkblue"; dir = 2},/area/centcom/ferry) "jI" = (/obj/structure/closet/secure_closet/ertSec,/turf/unsimulated/floor{tag = "icon-darkred"; icon_state = "darkred"; dir = 2},/area/centcom/ferry) "jJ" = (/obj/structure/closet/secure_closet/ertEngi,/obj/structure/extinguisher_cabinet{pixel_y = -28},/turf/unsimulated/floor{tag = "icon-darkbrown"; icon_state = "darkbrown"; dir = 2},/area/centcom/ferry) +"jK" = (/turf/unsimulated/floor{tag = "icon-yellowcornersiding (WEST)"; icon_state = "yellowcornersiding"; dir = 8},/area/centcom/evac) "jL" = (/obj/structure/table/reinforced,/obj/item/weapon/c4,/obj/item/weapon/c4{pixel_x = 7},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry) +"jM" = (/turf/unsimulated/floor{tag = "icon-yellowsiding"; icon_state = "yellowsiding"},/area/centcom/evac) +"jN" = (/turf/unsimulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/centcom/evac) +"jO" = (/turf/unsimulated/floor{tag = "icon-darkgreencorners"; icon_state = "darkgreencorners"},/area/centcom/ferry) "jP" = (/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/tdome/tdomeobserve) "jQ" = (/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/tdome/tdomeobserve) "jR" = (/turf/unsimulated/floor{dir = 10; icon_state = "green"},/area/centcom/evac) @@ -520,12 +527,15 @@ "kg" = (/obj/machinery/computer/telecrystals/uplinker,/turf/unsimulated/floor{tag = "icon-podhatch (NORTHWEST)"; icon_state = "podhatch"; dir = 9},/area/syndicate_mothership) "kh" = (/obj/structure/dresser,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership) "ki" = (/obj/structure/table/wood,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership) +"kj" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 1},/area/centcom/evac) +"kk" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/unsimulated/floor{icon_state = "green"},/area/centcom/evac) "kl" = (/turf/unsimulated/floor{icon_state = "red"; dir = 10},/area/tdome/tdomeobserve) "km" = (/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/tdome/tdomeobserve) "kn" = (/turf/unsimulated/floor{icon_state = "green"},/area/tdome/tdomeobserve) "ko" = (/turf/unsimulated/floor{icon_state = "green"; dir = 6},/area/tdome/tdomeobserve) "kp" = (/turf/unsimulated/wall/fakedoor{name = "Centcom"},/area/centcom/evac) "kq" = (/obj/structure/showcase{desc = "A strange machine supposedly from another world. The Wizard Federation has been meddling with it for years."; icon_state = "processor"; name = "byond random number generator"},/turf/unsimulated/floor{tag = "icon-cultdamage7"; icon_state = "cultdamage7"},/area/wizard_station) +"kr" = (/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/control) "ks" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "kt" = (/obj/structure/showcase{desc = "A historical figure of great importance to the wizard federation. He spent his long life learning magic, stealing artifacts, and harassing idiots with swords. May he rest forever, Rodney."; icon = 'icons/mob/mob.dmi'; icon_state = "nim"; name = "wizard of yendor showcase"},/turf/unsimulated/floor{tag = "icon-cultdamage4"; icon_state = "cultdamage4"},/area/wizard_station) "ku" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) @@ -535,6 +545,13 @@ "ky" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/snacks/pizzaslice/mushroompizza,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "kz" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/beer{pixel_x = 5; pixel_y = -2; step_x = 0},/obj/item/toy/cards/deck/syndicate{icon_state = "deck_syndicate_full"; pixel_x = -6; pixel_y = 6},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "kA" = (/obj/machinery/computer/telecrystals/uplinker,/turf/unsimulated/floor{tag = "icon-podhatch (WEST)"; icon_state = "podhatch"; dir = 8},/area/syndicate_mothership) +"kB" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "green"},/area/centcom/evac) +"kC" = (/obj/structure/table/reinforced,/obj/item/toy/carpplushie,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "green"; dir = 6},/area/centcom/evac) +"kD" = (/turf/unsimulated/floor{tag = "icon-yellowcornersiding (NORTH)"; icon_state = "yellowcornersiding"; dir = 1},/area/centcom/evac) +"kE" = (/turf/unsimulated/floor{tag = "icon-yellowsiding (NORTH)"; icon_state = "yellowsiding"; dir = 1},/area/centcom/evac) +"kF" = (/turf/unsimulated/floor{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/centcom/evac) +"kG" = (/turf/unsimulated/floor{tag = "icon-warndark (EAST)"; icon_state = "warndark"; dir = 4},/area/centcom/ferry) +"kH" = (/obj/machinery/door/airlock/external{name = "Ferry Airlock"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry) "kI" = (/turf/unsimulated/wall/fakeglass{color = "#008000"; dir = 6; icon_state = "fakewindows2"},/area/wizard_station) "kJ" = (/obj/effect/forcefield,/obj/structure/door_assembly{anchored = 1; icon_state = "door_as_uranium1"; name = "Bridge"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "kK" = (/turf/unsimulated/wall/normal{tag = "icon-uranium6"; icon_state = "uranium6"},/area/wizard_station) @@ -542,8 +559,11 @@ "kM" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/syndicate_mothership) "kN" = (/turf/unsimulated/floor,/area/syndicate_mothership) "kO" = (/obj/machinery/door/poddoor/shutters{id = "nukeop_ready"; name = "shuttle dock"},/turf/unsimulated/floor,/area/syndicate_mothership) +"kP" = (/turf/unsimulated/floor{tag = "icon-darkgreencorners (EAST)"; icon_state = "darkgreencorners"; dir = 4},/area/centcom/ferry) +"kQ" = (/obj/structure/table,/obj/item/weapon/paper_bin,/turf/unsimulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/centcom/suppy) "kR" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{tag = "icon-cultdamage6"; icon_state = "cultdamage6"},/area/wizard_station) "kS" = (/obj/effect/decal/cleanable/blood/splatter,/turf/unsimulated/floor{tag = "icon-cultdamage"; icon_state = "cultdamage"},/area/wizard_station) +"kT" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/turf/unsimulated/floor{tag = "icon-darkred (WEST)"; icon_state = "darkred"; dir = 8},/area/centcom/evac) "kU" = (/obj/machinery/suit_storage_unit/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "kV" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "kW" = (/turf/unsimulated/wall/fakeglass,/area/syndicate_mothership) @@ -552,6 +572,11 @@ "kZ" = (/obj/machinery/computer/telecrystals/uplinker,/turf/unsimulated/floor{tag = "icon-podhatch (SOUTHWEST)"; icon_state = "podhatch"; dir = 10},/area/syndicate_mothership) "la" = (/obj/structure/urinal{pixel_y = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "lb" = (/obj/structure/toilet{pixel_y = 8},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/machinery/door/window{name = "Tactical Toilet"; opacity = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) +"lc" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/unsimulated/floor{tag = "icon-darkred"; icon_state = "darkred"; dir = 2},/area/centcom/evac) +"ld" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/unsimulated/floor{tag = "icon-darkred"; icon_state = "darkred"; dir = 2},/area/centcom/evac) +"le" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/area/centcom/evac) +"lf" = (/turf/unsimulated/floor{tag = "icon-darkred (NORTHWEST)"; icon_state = "darkred"; dir = 9},/area/centcom/evac) +"lg" = (/turf/unsimulated/floor{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/centcom/evac) "lh" = (/turf/simulated/shuttle/wall{icon_state = "swall0"; dir = 2},/area/wizard_station) "li" = (/turf/unsimulated/wall/fakedoor{name = "Squad 4 Pod"},/area/wizard_station) "lj" = (/turf/simulated/shuttle/wall{icon_state = "swall4"; dir = 2},/area/wizard_station) @@ -573,8 +598,10 @@ "lz" = (/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 2},/area/tdome/tdomeobserve) "lA" = (/obj/structure/stool/bed/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 2},/area/tdome/tdomeobserve) "lB" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space/transit,/area/wizard_station) +"lC" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{tag = "icon-darkred (NORTHEAST)"; icon_state = "darkred"; dir = 5},/area/centcom/evac) "lD" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/unsimulated/floor{icon_state = "floor"},/area/wizard_station) "lE" = (/turf/unsimulated/floor{icon_state = "floor"},/area/wizard_station) +"lF" = (/obj/structure/closet,/turf/unsimulated/floor{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/centcom/suppy) "lG" = (/turf/unsimulated/floor{tag = "icon-cultdamage"; icon_state = "cultdamage"},/area/wizard_station) "lH" = (/obj/effect/forcefield,/turf/unsimulated/floor{tag = "icon-cultdamage7"; icon_state = "cultdamage7"},/area/wizard_station) "lI" = (/obj/effect/forcefield,/turf/unsimulated/floor{tag = "icon-cultdamage5"; icon_state = "cultdamage5"},/area/wizard_station) @@ -605,6 +632,7 @@ "mh" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/shuttle/plating,/area/space) "mi" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "mj" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 10},/area/syndicate_mothership) +"mk" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/centcom/evac) "ml" = (/obj/machinery/mech_bay_recharge_port,/turf/unsimulated/floor/plating,/area/syndicate_mothership) "mm" = (/turf/unsimulated/floor{icon_state = "recharge_floor"; name = "mech bay recharge floor"; tag = "icon-recharge_floor"},/area/syndicate_mothership) "mn" = (/obj/machinery/computer/mech_bay_power_console,/turf/unsimulated/floor/plating,/area/syndicate_mothership) @@ -620,6 +648,7 @@ "mx" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{tag = "icon-gravsnow_corner (NORTH)"; icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 1},/area/syndicate_mothership) "my" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/bush,/turf/unsimulated/floor{tag = "icon-gravsnow_corner (NORTH)"; icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 1},/area/syndicate_mothership) "mz" = (/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mA" = (/obj/structure/table/reinforced,/obj/item/toy/AI,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/centcom/evac) "mB" = (/turf/unsimulated/wall,/area/tdome/arena) "mC" = (/obj/machinery/igniter,/turf/simulated/floor/plasteel,/area/tdome/arena) "mD" = (/turf/simulated/floor/plasteel,/area/tdome/arena) @@ -627,6 +656,7 @@ "mF" = (/obj/structure/stool/bed/chair/wood/wings,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "mG" = (/obj/structure/table/wood,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "mH" = (/obj/structure/table/wood,/obj/item/weapon/retractor,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) +"mI" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/centcom/evac) "mJ" = (/obj/structure/table/wood,/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "mK" = (/obj/structure/rack,/obj/item/clothing/head/helmet/space/hardsuit/wizard,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "mL" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/unsimulated/floor{tag = "icon-cultdamage"; icon_state = "cultdamage"},/area/wizard_station) @@ -641,6 +671,8 @@ "mU" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "mV" = (/obj/structure/table,/obj/item/weapon/weldingtool/largetank{pixel_y = 3},/obj/item/device/multitool,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "mW" = (/obj/structure/stool,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"mX" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/unsimulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/centcom/evac) +"mY" = (/turf/unsimulated/floor{tag = "icon-redcorner (WEST)"; icon_state = "redcorner"; dir = 8},/area/centcom/evac) "mZ" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/saber/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) "na" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) "nb" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2) @@ -664,11 +696,14 @@ "nt" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1) "nu" = (/turf/unsimulated/wall/fakeglass{color = "#008000"; dir = 1; icon_state = "fakewindows2"},/area/wizard_station) "nv" = (/obj/structure/bookcase,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) +"nw" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/unsimulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/centcom/evac) "nx" = (/obj/structure/cult/talisman{desc = "A altar dedicated to the Wizard's Federation"},/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "ny" = (/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "nz" = (/obj/effect/decal/cleanable/blood/splatter,/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) +"nA" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 9},/area/centcom/evac) "nB" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/remains/human,/turf/unsimulated/floor{icon_state = "floor"},/area/wizard_station) "nC" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/unsimulated/floor{icon_state = "floor"},/area/wizard_station) +"nD" = (/turf/unsimulated/wall/fakeglass,/area/centcom/evac) "nE" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/space/transit,/area/wizard_station) "nF" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "nG" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) @@ -678,6 +713,7 @@ "nK" = (/obj/machinery/flasher{id = "tdomeflash"; name = "Thunderdome Flash"},/turf/simulated/floor/bluegrid,/area/tdome/arena) "nL" = (/obj/machinery/camera{pixel_x = 12; pixel_y = -10; network = list("thunder"); c_tag = "Green Team"},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1) "nM" = (/turf/unsimulated/wall/fakeglass{color = "#008000"},/area/wizard_station) +"nN" = (/obj/structure/rack,/obj/item/weapon/storage/fancy/crayons,/obj/item/toy/sword,/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/centcom/evac) "nO" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{tag = "icon-cultdamage5"; icon_state = "cultdamage5"},/area/wizard_station) "nP" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "nQ" = (/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/wizard_station) @@ -697,9 +733,14 @@ "oe" = (/turf/unsimulated/floor{tag = "icon-cultdamage4"; icon_state = "cultdamage4"},/area/wizard_station) "of" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "og" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) +"oh" = (/obj/structure/flora/kirbyplants,/turf/unsimulated/floor{icon_state = "red"; dir = 10},/area/centcom/evac) +"oi" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/centcom/evac) "oj" = (/obj/structure/door_assembly{anchored = 1; icon_state = "door_as_uranium1"; name = "Corridor A"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "ok" = (/turf/unsimulated/wall/normal{tag = "icon-uranium15"; icon_state = "uranium15"},/area/wizard_station) "ol" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'; name = "Corridor A"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) +"om" = (/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/centcom/evac) +"on" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/shotgun/toy/crossbow,/obj/item/toy/katana,/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/centcom/evac) +"oo" = (/obj/structure/table,/obj/item/weapon/gun/projectile/automatic/toy/pistol,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/holding) "op" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/space) "oq" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) "or" = (/obj/machinery/teleport/hub/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) @@ -747,6 +788,7 @@ "ph" = (/turf/unsimulated/wall/fakedoor{name = "Squad 2 Pod"},/area/wizard_station) "pi" = (/turf/unsimulated/wall/normal{tag = "icon-uranium13"; icon_state = "uranium13"},/area/wizard_station) "pj" = (/turf/simulated/shuttle/wall,/area/wizard_station) +"pk" = (/obj/structure/rack,/obj/item/weapon/storage/fancy/crayons,/obj/item/weapon/gun/projectile/shotgun/toy/crossbow,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/holding) "pl" = (/obj/structure/table/wood,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "pm" = (/obj/structure/table/wood,/obj/item/weapon/gun/magic/wand{desc = "Used in emergency's to reignite magma engines. This one appears spent."; name = "wand of emergency engine ignition"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station) "pn" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/wizard_station) @@ -779,13 +821,13 @@ "pO" = (/obj/structure/rack,/obj/item/clothing/head/that,/obj/item/clothing/under/suit_jacket,/obj/item/clothing/tie/waistcoat,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/holding) "pP" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand,/area/centcom/holding) "pQ" = (/obj/structure/shuttle/engine/heater,/turf/unsimulated/floor{tag = "icon-lava"; icon_state = "lava"},/area/wizard_station) -"pR" = (/obj/structure/rack,/obj/item/weapon/storage/fancy/crayons,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/holding) +"pR" = (/obj/structure/rack,/obj/item/weapon/storage/fancy/crayons,/obj/item/weapon/gun/projectile/automatic/toy/pistol,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/holding) "pS" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/holding) "pT" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/space) "pU" = (/turf/unsimulated/beach/coastline,/area/centcom/holding) "pV" = (/obj/item/clothing/head/collectable/paper,/turf/unsimulated/beach/coastline,/area/centcom/holding) "pW" = (/obj/structure/rack,/obj/item/clothing/shoes/laceup,/obj/item/clothing/under/suit_jacket/female{desc = "A black trouser suit for women. Very formal."; name = "black suit"; pixel_x = 3; pixel_y = 1},/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/holding) -"pX" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/holding) +"pX" = (/obj/structure/table,/obj/item/ammo_box/foambox,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) "pY" = (/turf/unsimulated/beach/water,/area/centcom/holding) "pZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) "qa" = (/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/holding) @@ -928,41 +970,41 @@ abababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdwdwdwdwdwdwdwdwababababababababababababepepepepepepepepepababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdAdBdBdBdBdBdCdwababababababababababababepeuepeuepeuepeuepababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdGdwdwdwdwdwdwdwababababababepepepepepepepepepababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdGdwhrhChthChrdwababababababepeuepeuepeuepeuepababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdMhqfvetetetetdwababababababepepepepepepepepepababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdThEfvetetetetdNabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdUdGhqhFetetetetdwababababababepepepepepepepepepababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdVhEfvetetetetdwababababababepeuepeuepeuepeuepababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdWhDfvetetetetdwdwdwdwdwababepepepepepepepepepababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdGfwfvetetetetdweIeIeIdwababepeuepeuepeuepeuepababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdXeBdHdHdHeGeafEfvetetetetfGeIeIeIdwababepepepepepepepepepababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwebecedededeceedweHeyexeteYdweIeIeIdwababababababababababababababdAezezezezezdCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdwefegegegehdwdwdwdwdwdwfudwdwdwdwdwababababekekeAekekekabababdAdZeCeDeEeDeFdYdCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdwdwdwdwdwdweifXfXfXfHhlfHfXfXfXeiababababekeJeJeJeKekabababdGeLeMdHdHdHeNeOdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhfhfheifXhpfXfVemfVfXhpfXeiababababekeJeJeJeJekabababdGeSeTeUeVdHeNeWdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhftfFfWfIfhfXfXfXgvemgvfXfXfXeiababababekeJfafbfcekababdAfddBdBfedBfffgdBfddCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfYhhfFfFfheQeieQeiemeieQeieQeiababababekfkflfmfnekababdGfofofoezfpdHfqfrfsezababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfFfFfFelfhfJfHgfemememggeQfJeiababababekeJeJeJeJfxfyfzdGfAfBfBfCdHdHdHdHfqdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhfhfhfhfhfhfhfhfhfhfhfhfhfhfUfhfhfJfVevemememeseieQeieieieieiekeJeJeJeJfKfLfKfMfBfNfNezfOfPfQdHfqezababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgbgbgbgbgbgbgbgbgbgbgbgbgbgcgdfSgefhfJfVevememememememejePePePeiekfxfzfZfxfyfyfzdXdBdBdBgafQfQfQdHfqdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgbhHdBdBgqdBdBdBezdBdBgrgsgtgdgugefhfJfVevemememggeieQeieiePfieiekghgigigjfKfLfKgkdHgldHdHdHdHdHdHgmdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzababababababababababababababababababababababababababababfhhHhIeNgDgEgEgEgEgEgEgEgqgFgGgdgugefhfJgvevemememeseQfJeieReZfjeiekghgigigjfxfyfzdGfPdHgwgxdHgwgxdHgydGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgJgIgIgIgKgLgIgIgIgKgIgIgIgIgIgIgKgIgIgzababababababababababababababababababababababababababababfhgodHdHdHdHdHdHdHdHdHdHgTgUgVgdgugWfhgAfherememememeieQeieQeqeQeiekgHgigigjekababezfPdHgwgxdHgwgxdHgyezababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgJgIgIgIgIgIgIgIgIgIgIgIgKgIgIgIgIgIgKgIgIgIgIgIgzababababababababababababababababababababababababababababfhhQeBgMgMeDeDeDeDeDeDeDgqgFhagdgufShRfSfSemememememememeoePeXePengigigigigjgXababezfPdHgwgxdHgwgxdHgyezababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhcgIgIgIgIgIgJgIgIgLgKgIgIgKgIgIgKgLgIgKgIgzababababababababababababababababababababababababababababfhgbhQdBdBgqdBdBdBezdBdBhigsgtgdguhjfhgAfhgfemememggeieQeieieieieiekhkgigigjekababezfPdHgwgxdHgwgxdHgyezababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgJgIgIgKgLgIgIgKgIgLgzababababababababababababababababababababababababababababfhgbgbgbgbgbgbgbgbgbgbgbgbgbhmgdfSgefhfJfHevemememewfHfJeiababababekghgigigjfxfyfzdGfPdHgwgxdHgwgxdHgydGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgJgIgIgIgIgIgLgIgKgLgIgKgIgzababababababababababababababababababababababababababababfhfhfhfhfhfhfhhzhAhAhBfhfhfhfhfhhSfhfhfJfVevemememewfVfJeiababababekghgigigjfKfLfKhndHhodHdHdHdHdHdHgmdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIhyhyhyhyhyhyhygIgIgIgIgIgIgIgKgIgIhcgLgIgIgIgzabababababababababababababababababababababababababababababababfhhUhVhUhUhUhUhUhUhWhYhXhUhUhUfhfJgvevemememewgvfJeiababababekfxfzhufxfyfyfzdXdBdBhvdBhwezhxezezeaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhMhNhOhOhOhOhOhNhPgIgIgIgIhcgIhygJhygJgIgKgIgKgzabababababababababababababababababababababababababababababababfhhUhUhUhUfDhUfDhUhUhUhUhUhUisfhhZhZiaibicidiehZhZhZababababekgigigigjfKfLfKhnhJhJhJhKdGfrfqfqhLezababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNigihiiijikililhNimgIgIhygzgziniogzgzhyipiqhygzabababababababababababababababababababababababababababababababfhiJhUhUiKiKiKiKfRhUhUhUhUhUiLfhitiuiviwixiyiviuiuhZababababekgigigigjfxfyfzdGhJhJhJhJdGfqfqfqifdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNiEihihiFihihihhNimgIiGgzgziHiIiIiHgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababfhiMhUfTiKiNiOiKhUhUhUhUhUhUiPfhiuiUiViwixiyiViWiuhZababababekgiiziAiBekababdGiCiCiDiDdGfrfqfqhLezababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagSjbjcjdaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNjeihihihjfihjghNimhciGgzjhjijijijijjjkjljmjnjojpgzabababababababababababababababababababababababababababababfhiQhUhUiKiKiKiKfRhUhUhUhUhUiRfhjriujriwixiyjriujrhZababababekgiiXiYiZekababebfeedededededededfeeeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajsaajtjujvjwjxaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIjyhNhNhNjzhNhNhNjAgIgIjBgzjCjijDjDjEjijijijFjGjGjGgzabababababababababababababababababababababababababababababfhiShUhUgnhUgnhUhUhUhUhUhUhUiTfhjPiuiuiwixiyiuiujQhZababababekgigigigiekabababebegegegegegegegeeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajsjUjVjWjvjXjYaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhNjZihkahNkbhyhyhykcgzjijDkdkejDjikfkgjmkhkigzgzabababababababababababababababababababababababababababababfhjqhUhUhUhUhUhUhUjHjJjIgpiTjLfhklkmkmiwixiyknknkohZababababekjRjSjSjTekabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajYkqlGjXksktjYaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhNkuihkvhNkwkxkxkxiogzjijDkykzjDjikfkAgzgzgzgzababababababababababababababababababababababababababababababfhfhfhfhfhgBfhfhfhfhfhfhfhfhfhfhhZhZhZhZixhZhZhZhZhZababababekekkpekekekabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdwdwdwdwdwdwdwdwabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdAdBdBdBdBdBdCdwabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdGdwdwdwdwdwdwdwabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdGdwlFhChthChrdwabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdMhqfvetetetetdwabababababepepepepepepepepepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdThEfvetetetetdNabababababepeuepeuepeuepeuepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdUdGhqhFetetetetdwabababababepepepepepepepepepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdVhEfvetetetetdwabababababepeuepeuepeuepeuepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdWhDfvetetetetdwdwdwdwdwabepepepepepepepepepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdGfwfvetetetetdweIeIeIdwabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdXeBdHdHdHeGeafEfvetetetetfGeIeIeIdwabepepepepepepepepepabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwebecedededeceedwkQeyexeteYdweIeIeIdwabepeuepeuepeuepeuepabababababababababababdAezezezezezdCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdwefegegegehdwdwdwdwdwdwfudwdwdwdwdwabepepepepepepepepepabekekekekekekabababdAdZeCeDeEeDeFdYdCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdwdwdwdwdwdweifXfXfXfHhlfHfXfXfXeiabepeuepeuepeuepeuepabeklflglglCekabababdGeLeMdHdHdHeNeOdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhfhfheifXhpfXfVemfVfXhpfXeiabepepepepepepepepepabeAeJeJeJeJekabababdGeSeTeUeVdHeNeWdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhftfFfWfIfhfXfXfXgvemgvfXfXfXeiabababababababababababekeJkTfbfcekababdAfddBdBfedBfffgdBfddCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfYhhfFfFfheQeieQeiemeieQeieQeiabababekekekekekekekekekfklelcldekababdGfofofoezfpdHfqfrfsezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfFfFfFelfhfJfHgfemememggeQfJeiabababekgugegegegUgHgVgWeJeJeJhjfxfyfzdGfAfBfBfCdHdHdHdHfqdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhfhfhfhfhfhfhfhfhfhfhfhfhfhfUfhfhfJfVevemememeseieQeieieieiekghgigigigigigihkeJeJeJhjfKfLfKfMfBfNfNezfOfPfQdHfqezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgbgbgbgbgbgbgbgbgbgbgbgbgbgcfahUeKfhfJfVevemememememenejePePeoekghgigigigigigieHfyfzfZfxfyfyfzdXdBdBdBgafQfQfQdHfqdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgbhHdBdBgqdBdBdBezdBdBgrgsgtfagdeKfhfJfVevemememggeieQeieiePfiekghgigigigigifmfnflgigigjfKfLfKgkdHgldHdHdHdHdHdHgmdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzababababababababababababababababababababababababababababfhhHhIeNgDgEgEgEgEgEgEgEgqgFgGfagdeKfhfJgvevemememkreQfJeieReZfjekkjgigigigikkkBkCflgigigjfxfyfzdGfPdHgwgxdHgwgxdHgydGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgJgIgIgIgKgLgIgIgIgKgIgIgIgIgIgIgKgIgIgzababababababababababababababababababababababababababababfhgodHdHdHdHdHdHdHdHdHdHgTkHkGfagdkPfhgAfheremememeseieQeieQeqeQekkFgigigigikEkEkEkDgigigjekababezfPdHgwgxdHgwgxdHgyezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgJgIgIgIgIgIgIgIgIgIgIgIgKgIgIgIgIgIgKgIgIgIgIgIgzababababababababababababababababababababababababababababfhhQeBgMgMeDeDeDeDeDeDeDgqgFhafagdhUhRfSfSememememememenjaePeXePhTirgigigigigigigigigigigjgXababezfPdHgwgxdHgwgxdHgyezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhcgIgIgIgIgIgJgIgIgLgKgIgIgKgIgIgKgLgIgKgIgzababababababababababababababababababababababababababababfhgbhQdBdBgqdBdBdBezdBdBhigsgtfagdjOfhgAfhgfemememggeieQeieieieiekjNgigigigijMjMjMjKgigigjekababezfPdHgwgxdHgwgxdHgyezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgJgIgIgKgLgIgIgKgIgLgzababababababababababababababababababababababababababababfhgbgbgbgbgbgbgbgbgbgbgbgbgbhmfahUeKfhfJfHevemememewfHfJeiabababekmYgigigiginwmXmIflgigigjfxfyfzdGfPdHgwgxdHgwgxdHgydGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgJgIgIgIgIgIgLgIgKgLgIgKgIgzababababababababababababababababababababababababababababfhfhfhfhfhfhfhhzhAhAhBfhfhfhfhfhhSfhfhfJfVevemememewfVfJeiabababekmkgigigigigiiYmAflgigigjfKfLfKhndHhodHdHdHdHdHdHgmdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIhyhyhyhyhyhyhygIgIgIgIgIgIgIgKgIgIhcgLgIgIgIgzabababababababababababababababababababababababababababababababfhhUhVhUhUhUhUhUhUhWhYhXhUhUhUfhfJgvevemememewgvfJeiabababekmkgigigigigiginAfyfzhufxfyfyfzdXdBdBhvdBhwezhxezezeaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhMhNhOhOhOhOhOhNhPgIgIgIgIhcgIhygJhygJgIgKgIgKgzabababababababababababababababababababababababababababababababfhhUhUhUhUfDhUfDhUhUhUhUhUhUisfhhZhZiaibicidiehZhZhZabababekmkgigigigigigihkgigigigjfKfLfKhnhJhJhJhKdGfrfqfqhLezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNigihiiijikililhNimgIgIhygzgziniogzgzhyipiqhygzabababababababababababababababababababababababababababababababfhiJhUhUiKiKiKiKfRhUhUhUhUhUiLfhitiuiviwixiyiviuiuhZabababekohoioioiomonnNnDgigigigjfxfyfzdGhJhJhJhJdGfqfqfqifdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNiEihihiFihihihhNimgIiGgzgziHiIiIiHgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababfhiMhUfTiKiNiOiKhUhUhUhUhUhUiPfhiuiUiViwixiyiViWiuhZabababekekekekekekekekekgiiziAiBekababdGiCiCiDiDdGfrfqfqhLezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagSjbjcjdaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNjeihihihjfihjghNimhciGgzjhjijijijijjjkjljmjnjojpgzabababababababababababababababababababababababababababababfhiQhUhUiKiKiKiKfRhUhUhUhUhUiRfhjriujriwixiyjriujrhZabababababababababababekgiiXiYiZekababebfeedededededededfeeeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajsaajtjujvjwjxaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIjyhNhNhNjzhNhNhNjAgIgIjBgzjCjijDjDjEjijijijFjGjGjGgzabababababababababababababababababababababababababababababfhiShUhUgnhUgnhUhUhUhUhUhUhUiTfhjPiuiuiwixiyiuiujQhZabababababababababababkpgigigigiekabababebegegegegegegegeeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajsjUjVjWjvjXjYaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhNjZihkahNkbhyhyhykcgzjijDkdkejDjikfkgjmkhkigzgzabababababababababababababababababababababababababababababfhjqhUhUhUhUhUhUhUjHjJjIgpiTjLfhklkmkmiwixiyknknkohZabababababababababababekjRjSjSjTekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajYkqlGjXksktjYaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhNkuihkvhNkwkxkxkxiogzjijDkykzjDjikfkAgzgzgzgzababababababababababababababababababababababababababababababfhfhfhfhfhgBfhfhfhfhfhfhfhfhfhfhhZhZhZhZixhZhZhZhZhZabababababababababababekekekekekekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajwjxkIkJkIkKkLaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhMhNhNhNhNhNkuihkvhNkMkNkNkNkNkOjijijijijijikfkAgzgzgzgzabababababababababababababababababababababababababababababababababababababababababababababababababhZixhZabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajsjskLkRkSjvjwaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhNkUihihkVhNkuihkvhNkWkXinkxiogzkYjDjDjDjijikfkZgzlalbgzgzabababababababababababababababababababababababababababababababababababababababababhZhZhZhZhZhZhZhZichZhZhZhZhZhZhZhZababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaalhliljlklllmjvlnjsaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhNkUihlolphNkuihkvhNhNnrlrhPlsgzltlulvlulujijijilwlxlxlygzabababababababababababababababababababababababababababababababababababababababababhZlzlAlAlAlAlAlzlzlzlAlAlAlAlAlzhZababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab @@ -986,11 +1028,11 @@ ababababababababababaaaaaaaaaaaaaaaaaaaaaaaalmjsjdpepfpgjdjWphlEpdaajsaaaaaaaaaa ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajsmupimqkImspimupjhgpdaajsaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhshshshshshshshshshshshshshshshshshshsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajsmEjvplpmpljvmEaapnaaaajsaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspopppqprprpppsptpupvpwpxpypxpxpxpzhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaajslGpAjvjvjvjvjvpAaaaaaaaalGaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspopppppppppppBpwpwpwpCpxpxpxpDpxpxhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaajsjslmjvjdpEjvjvjvpEjdaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspopppFpopGpHpIpwpwpwpwpxpxpJpxpKpyhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaajsjslmjvjdpEjvjvjvpEjdaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspXpppFpopGpHpIpwpwpwpwpxpxpJpxpKpyhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaajsmtmtpLpMpMpMpMpMpNaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspOpwpCpCpCpCpCpwpwpwpwpxpxpxpPpxpxhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajwmqpQpQpQmskLaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspRpwpwpwpwpwpwpwpwpwpwpSpxpxpxpxpxhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapTpTpTaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspRpwpwpwpwpwpwpwpwpCpwpSpUpUpUpVpUhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspWpwpwpwpwpwpwpwpCpXpCpSpYpYpYpYpYhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapTpTpTaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspkpwpwpwpwpwpwpwpwpCpwpSpUpUpUpVpUhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhspWpwpwpwpwpwpwpwpCoopCpSpYpYpYpYpYhsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhshspZqaqaqbhshshshshshshshshshshshshsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhsqcqcqcqchsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhsqcqcqcqchsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab diff --git a/code/game/communications.dm b/code/game/communications.dm index 08a79d05af5..16cd14b7fb7 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -130,7 +130,7 @@ var/list/radiochannels = list( "Medical" = 1355, "Engineering" = 1357, "Security" = 1359, - "Deathsquad" = 1441, + "Centcom" = 1441, "Syndicate" = 1213, "Supply" = 1347, "Service" = 1349, @@ -144,7 +144,7 @@ var/list/radiochannelsreverse = list( "1355" = "Medical", "1357" = "Engineering", "1359" = "Security", - "1441" = "Deathsquad", + "1441" = "Centcom", "1213" = "Syndicate", "1347" = "Supply", "1349" = "Service", @@ -160,7 +160,7 @@ var/const/COMM_FREQ = 1353 //command, colored gold in chat window var/const/MED_FREQ = 1355 //medical, coloured blue in chat window var/const/ENG_FREQ = 1357 //engineering, coloured orange in chat window var/const/SEC_FREQ = 1359 //security, coloured red in chat window -var/const/DSQUAD_FREQ = 1441 //death squad frequency, coloured grey in chat window +var/const/CENTCOM_FREQ = 1441 //centcom frequency, coloured grey in chat window var/const/AIPRIV_FREQ = 1447 //AI private, colored magenta in chat window #define TRANSMISSION_WIRE 0 diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 18e8a4c94e2..27f39329e7c 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -466,8 +466,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept part_a = "" else if (display_freq==SUPP_FREQ) part_a = "" - else if (display_freq==DSQUAD_FREQ) - part_a = "" + else if (display_freq==CENTCOM_FREQ) + part_a = "" else if (display_freq==AIPRIV_FREQ) part_a = "" diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index e87eb6da388..c054a5de007 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -188,11 +188,22 @@ /obj/item/device/radio/headset/headset_cent name = "\improper Centcom headset" - desc = "A headset used by the upper echelons of Nanotrasen. \nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science." + desc = "A headset used by the upper echelons of Nanotrasen. \nTo access the command channel, use :c." icon_state = "cent_headset" item_state = "headset" + keyslot = new /obj/item/device/encryptionkey/headset_com + +/obj/item/device/radio/headset/headset_cent/commander keyslot = new /obj/item/device/encryptionkey/heads/captain +/obj/item/device/radio/headset/headset_cent/alt + name = "\improper Centcom bowman headset" + desc = "A headset especially for emergency response personnel. Protects ears from flashbangs." + flags = EARBANGPROTECT + icon_state = "cent_headset_alt" + item_state = "cent_headset_alt" + keyslot = null + /obj/item/device/radio/headset/ai name = "\proper Integrated Subspace Transceiver " keyslot2 = new /obj/item/device/encryptionkey/ai diff --git a/code/game/say.dm b/code/game/say.dm index 368488b2831..040f26c8d84 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -13,7 +13,7 @@ var/list/freqtospan = list( "1353" = "comradio", "1447" = "aiprivradio", "1213" = "syndradio", - "1441" = "dsquadradio" + "1441" = "centcomradio" ) /atom/movable/proc/say(message) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 1e49686bd0e..c2eb6d8bddd 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -863,17 +863,18 @@ var/global/list/g_fancy_list_of_types = null equip_emergencyresponsesquad(M, "sec") if("Engineer") equip_emergencyresponsesquad(M, "eng") - if("Medic") + if("Medical") equip_emergencyresponsesquad(M, "med") if("centcom official") M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_com(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cent(M), slot_ears) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt) M.equip_to_slot_or_del(new /obj/item/weapon/pen(M), slot_l_store) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(M), slot_back) var/obj/item/device/pda/heads/pda = new(M) pda.owner = M.real_name @@ -895,16 +896,17 @@ var/global/list/g_fancy_list_of_types = null if("centcom commander") M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_commander(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/bulletproof(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cent(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cent/commander(M), slot_ears) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask) M.equip_to_slot_or_del(new /obj/item/clothing/head/centhat(M), slot_head) M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt) M.equip_to_slot_or_del(new /obj/item/weapon/lighter/zippo(M), slot_r_store) M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_l_store) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) var/obj/item/weapon/card/id/W = new(M) W.icon_state = "centcom" @@ -916,7 +918,7 @@ var/global/list/g_fancy_list_of_types = null M.equip_to_slot_or_del(W, slot_wear_id) if("special ops officer") - var/obj/item/device/radio/headset/R = new /obj/item/device/radio/headset/headset_cent(M) + var/obj/item/device/radio/headset/R = new /obj/item/device/radio/headset/headset_cent/commander(M) R.set_frequency(1441) M.equip_to_slot_or_del(R, slot_ears) @@ -1103,7 +1105,7 @@ var/global/list/g_fancy_list_of_types = null //Deathsquad /proc/equip_deathsquad(var/mob/living/carbon/human/M, var/officer) - var/obj/item/device/radio/R = new /obj/item/device/radio/headset(M) + var/obj/item/device/radio/R = new /obj/item/device/radio/headset/headset_cent/alt(M) R.set_frequency(1441) M.equip_to_slot_or_del(R, slot_ears) @@ -1147,22 +1149,24 @@ var/global/list/g_fancy_list_of_types = null W.access += get_centcom_access("Death Commando")//Let's add their alloted Centcom access. W.assignment = "Death Commando" W.registered_name = M.real_name - W.update_label(M.real_name) + W.update_label(W.registered_name, W.assignment) M.equip_to_slot_or_del(W, slot_wear_id) //Emergency Response Team /proc/equip_emergencyresponsesquad(var/mob/living/carbon/human/M, var/ertrole) - var/obj/item/device/radio/R = new /obj/item/device/radio/headset(M) + var/obj/item/weapon/card/id/W = null + var/obj/item/device/radio/R = new /obj/item/device/radio/headset/headset_cent/alt(M) R.set_frequency(1441) M.equip_to_slot_or_del(R, slot_ears) switch(ertrole) if("commander") + W = new /obj/item/weapon/card/id/ert(M) M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/ert(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert(M), slot_wear_id) + M.equip_to_slot_or_del(W, slot_wear_id) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(M), slot_back) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) @@ -1173,12 +1177,15 @@ var/global/list/g_fancy_list_of_types = null M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/full(M), slot_belt) M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store) + R.keyslot = new /obj/item/device/encryptionkey/heads/captain + if("sec") + W = new /obj/item/weapon/card/id/ert/Security(M) M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/ert/sec(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert/Security(M), slot_wear_id) + M.equip_to_slot_or_del(W, slot_wear_id) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) @@ -1189,12 +1196,15 @@ var/global/list/g_fancy_list_of_types = null M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/full(M), slot_belt) + R.keyslot = new /obj/item/device/encryptionkey/heads/hos + if("med") + W = new /obj/item/weapon/card/id/ert/Medical(M) M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/ert/med(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert/Medical(M), slot_wear_id) + M.equip_to_slot_or_del(W, slot_wear_id) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(M), slot_back) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(M), slot_glasses) @@ -1207,12 +1217,15 @@ var/global/list/g_fancy_list_of_types = null M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(M), slot_r_hand) + R.keyslot = new /obj/item/device/encryptionkey/heads/cmo + if("eng") + W = new /obj/item/weapon/card/id/ert/Engineer(M) M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/ert/engi(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert/Engineer(M), slot_wear_id) + M.equip_to_slot_or_del(W, slot_wear_id) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(M), slot_back) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson/engine(M), slot_glasses) @@ -1224,7 +1237,15 @@ var/global/list/g_fancy_list_of_types = null M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(M), slot_belt) M.equip_to_slot_or_del(new /obj/item/weapon/rcd_ammo/large(M), slot_l_store) + R.keyslot = new /obj/item/device/encryptionkey/heads/ce + + R.recalculateChannels() + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M) L.imp_in = M L.implanted = 1 M.sec_hud_set_implants() + + if (W) + W.registered_name = M.real_name + W.update_label(W.registered_name, W.assignment) \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index c0d55ed45e4..4ce2dc6849c 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -92,7 +92,6 @@ icon_state = "officer" item_state = "g_suit" item_color = "officer" - can_adjust = 0 /obj/item/clothing/under/rank/centcom_commander desc = "It's a jumpsuit worn by Centcom's highest-tier Commanders." @@ -100,7 +99,6 @@ icon_state = "centcom" item_state = "dg_suit" item_color = "centcom" - can_adjust = 0 /obj/item/clothing/under/space name = "\improper NASA jumpsuit" diff --git a/config/admins.txt b/config/admins.txt index aff7eb7fb37..fc8ed81b264 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -79,4 +79,5 @@ dannno = Game Master allura = Game Master lo6a4evskiy = Game Master vekter = Game Master -Ahammer18 = Game Master \ No newline at end of file +Ahammer18 = Game Master +Fayrik = Game Master \ No newline at end of file diff --git a/html/changelogs/Fayrik-CentcomExpansionTwo.yml b/html/changelogs/Fayrik-CentcomExpansionTwo.yml new file mode 100644 index 00000000000..36b2a0173b6 --- /dev/null +++ b/html/changelogs/Fayrik-CentcomExpansionTwo.yml @@ -0,0 +1,9 @@ +author: Fayrik + +delete-after: True + +changes: + - rscadd: "Added a bowman headset for death squads and ERTs." + - tweak: "Deathsquad radio channel is now called the Centcom radio channel." + - bugfix: "Fixed the admin buttons not spawning ERT Medic gear properly." + - tweak: "Expanded Emergency Shuttle dock to allow for more round end griff." \ No newline at end of file diff --git a/icons/mob/ears.dmi b/icons/mob/ears.dmi index fe9e2b691e701844e88028acb7fe8c0171513cbd..f87713f7a1f665cfb6208eab710e1700a872943b 100644 GIT binary patch delta 802 zcmV+-1Ks?p2Jr@v7Y@J(0{{R3WdfWv0000~ktIogGnoM8<>fQ~GuqnPz`(#jgJ_Ka z0004WQchCV=-0C=30k(F8*D; zNK5I#zCsAe!~{$W*;VoFZB_7^-e%yN*@daqx$XKvHJ4sKkSR{1I;rDkE5$Q94zoGz zr3i?B*T7#xY#6hw0*oVYC54NbmY5Vin}kL0{v1qBckihLEa@Xy{kyHrt$=@xE<%^S zYp1lT-eTlcfdp5=*QybX6g{QYe` z4V{COecl#bM&;p2Il8Ex(zA1tvd`P1OLaWJs=BD2UfiR^o&FYG!k3VDys|HL1^@s6 z0000$Ci(OIVxZ>lRyjrU{n&h0_O5J+=likwDLsj~sb^0(oDI(3Ch%hP?${I0_ha*a z(>8%Gh3MV0r>c)ngnYl!>(TjJ!At0H29Zms7HjtW9@O^y8?*ob0000003Ocx)wn_N zI@TMQxthKqI)BnUrb>NU%--}4@9H7eyA9WzzuWa86h5XC^TqS#M=eXuTk{t}Vd0p+ zQ%dXh$<+MhE5~e8B{Xkac3*_`(mA8H^8E<0d25UGPvi^U zubR(0nsa{u000000093|=6pXo{}%ba9+Ai9Cr7?7h4(+E(s%R>`?$Ygd;yT1?>n;B zK)&D0d{sTNJ4Ew+b$&Fxjs)a=1n0ry&zip*6`20Z5e7`vfWxhFnZzZhvlJ85+e~i~cL0Uhv+H@}WlJBoJ_8F|Zk5pJbcinv7 zKK}YkC`jukFX!_E00000006-4h2OuQTloF^xyAGSyzG469n#;a_1YJ5-z_n`e+-28 g00000000NyTU!t#1Civ~0000907*qoM6N<$f(Jd2{Qv*} delta 730 zcmV<00ww+N2C4>-7Y?8Z0{{R3ZT6FI0000^ktIogz`(%e<>lJi+AedrfB*mh0d!JM zQvg8b*k%9#0GWDJSad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP1%m2RAA^#$v?Ce+{1yoT7^v#XRWGf+KBm@xOREOIr_@WE{rG!tJy;b@B8+fvUjD$pYQwjhcFX!Q%jFKoOSL$C-7qQZs_sn`@a3*oWM6i^ls^CD2QAWv$QHamG@myN=l%cy00000 z0RE-I`M!7mGxB{sBKPeNhJ0TN@4v03@93H5xWAD20-$uhZ^&L9`F@uDs<=o`@aFsK zes6m13CME<=g#vlo$qt=000000001gRQY`0r`v97HQ(s9{>OV006+^69z*KNKeP;+5i9m M07*qoM6N<$g0VGdFaQ7m diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 00fdce1a4316d1fc3e540c60209b63b30387ce93..6b1fab51883d385a7bcfed5732f92c1213cbfb33 100644 GIT binary patch literal 207704 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�=zY`Ll3pLR%MaD+JAKk)WH@q-})@*>gkb# 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
PCexK% z)$in+2z;{}vjZ_uKDd&7lL3Ua#kTr{_Gf_lCE3!u1<6>SvX2*fv+i_QodX zeupRKm`9CvIQoQB!W1Se*a}eCfsDy;4djUR^M; z_O)PgNxWxtkHirE=2GHu`sx(02JUpFRYlzf5c<`?}M z${TQsTiirIG^6$S8fn~UGupTJq63Q}DbU+*4xJh)tTG2SZ&?TjY&)|%h;G2#&qdTz zQCQ*PtbWm}{G)R*^+dHTT|aLk3k)mN+k%SjMRS%MAA6l0w+hud7;Z$$5XjM&MST?^ z8fDz0`E|Nuk^45<#1z}XTGL3mh}H7(A8+h!v-RvSUmv@ZeKgpglD7OvX%(S~ea21u zHr-#<>Y%!-Y}LkGHE}~Y;%oDV5m|x}IUNMtP>i{=^X4y~%E0(TD{ZQu&3Tyvsh~(f z5u-qDg}0B59nCV6_L3m49wN<$hU~@Ss(Z2$#$u219A%&$cqwap#AQlvr2A)kM{a z{pvpZ%h~$wWyM*FZp#fOC9LTRM1x)Js>X4h;NQ((SS(fz19Buh)w;8Vfq|W|*uC!T zBW=g<&JRUJ0uQ0GFzeP+Q&ZDFot*<~lHrF#1I@8wuFarbTM__&EQ|FI4s3hAQ*7_< zx{SNOw8Fv~unN_}iJc$np8Z^=rwSQ<=}UjQ#LISg%eXeB)3OolUE8QyEAM)8re;Z7 z?XmF*v@OTS$ADXD3ba^7BX-+6I}d>R2<+l25Q9JpvE_q|^z^?aRvLZY%F4=f#`EIG z%NgN+VSMU{dQ3}`;2ehaoZ<5m+}RRLZL7-FNA`4?-MTCn=Qw$en5`?cdyTv5i>)Op z)ctV5%7pf}87V0IfdTwsN@g4ur+uFvgDAQ#H9)Ga_qs{#4O-)If7S5Z}sHZtzN z?hbnr)IY}V%7GNKxuc*9t9zb6;6~e+iYtxbM~C25hs>B7WUB-0(}QdZnx?&5CSpQ1 zKKk39bi;>W!)NbWT-Re1YN%*vfWyJHRB86lFWzORPR_ zaALx*VtGTbydbNo`L_T+KR>+I5bXgW zgQ@xPArLq6Z=s<+syD97-n<&FC;b=QS9-#ff2*8K})zhHdi<>Qk$ zsI`4~C^kTOP+Plz+m(SYhFF&A_rUnVLYYKA(Sj6^`p%~zXSN!O^iYc}vy9EnHD>CT z7p49etqYDjmR0%j4amC? zGI6HbM=xWl%lKtKDe1>w7uyjXTMgBUt;_*()@0Yw!xS~<)O%UFj@KMGPZY$aoMf-U zoay_RFbO{!&xKpC>e%aFhEfyj%D=75T-zu{eGzk}hdr33=gXIdSWwL$lN9_GmF&gebF$mgQXV8PWG zb35VOy7HJg3n`A_cmdBb6SJfdJTe$AxM?Qtxg+L9c(k0*sbp^dKTGsc@6J$v`J=*Ff zHz><%vQ2%gF=S?Lw*S|bbi5fxP_RpAmu?AS_}g90o+c4XRAYWaXrs{-*VNtJ{bI^}sOUk0{IO^>N6_a_(1Zl~~95)|4w193i9N;=tL;R?H>nSL(lsyG6#Ubeku=dPmgFxx(+PLgy zckVFSlYiU#Q|ajJZOC|T1`}yDXgX2terS^PVWl_E)!N$H`%0?x8=*-b>mS&M$hgTz z)=iD4c(4VDM`%~_z3UDoxaXTfk5)y8A!LZ*H+V*Xp|6eihjDs=Wlp@1(WAu&<9_z# zH_~Ij!GAjA%QX>S5gbj{GJNa5X)>-pXJ=t0sjk{5fj z#(zM;iT6+qTAsW0mY++AwXjqBLH}v3((N#9s%=WVfiSVQLjLSzW>jIrgoDv`j|gN@ zIo7FqaVOgYG1a)X7DFSdgH79epchYwUxYU^)iECy{#t#m^U=0M>v~x>MtiPNNE{P{ zyjmM7WE;*XrH!bw9pZy?NkZ#m6&mC#KMbl|vb00FbqX6gJJnVXrjT>Dkr1d!!;0Z_Is4@wvXiPZ1ZgENW90&Cx`bJDBcIO zCGQSI6#aFwJKeo9S{?(##$I>X^WN(d)>p=X)T$4c$teym1W*%b&$X6Tn|B&V&R14a zKSrDfZLi3ZU3_1ZV~3j)!9RpfIOV6#_CpqXEJ!6M?^6*l8zGqyb^$#aXlBG2#l>ov zr+R==oS@AkoH;eY3<1LsGJnuoV*lB8k>6R5wO1o9`*N{;iOA>0?P}23QWc0F+@i9m zxn_z*_A;!@ph4@$RCb{F+4d!_U{Z}WuL-nWCop+Pjo)k?Of|=TiKqE@A*b+d1GZ|^(!i0U_v{MYCyoveW#&u zQtOY>+5}RHnUvf|=WBj2(I=bu{cVsOB4Dc?$AmfDXard4tJu7_#6@$vmbuQzYN zb(6rS1bCTeSgdKW?i2Q@=4i?vG`1iHCg{hGF_=cn5*6|(0E*QQqOyCmth zY%)6dRe>mkMo?Y_&Yswrjkta>vhl`N6nRWYs&&W>1HbW)TF1JIkjoXtf zAuJZ9!)Mc+kf#obh>o|C`Zp&w;5Cp3lG}oFc3J}5t;BSFxOjQ0zCH>@kW_6GGgyy6 zgaCs_q2zay?yGs*tI4QWE<#Lwt@s+@kN1PGDOtpv!G2DE|B*+BHEWz%c@`9}ZsUMd zyi!$_EDIkMSs4Aa)B%tN0R z+21s+$J3{W`Sl53&gg!0dbh?=!tq_P+Ev=d!-{j-w$(?}0e8vA9?d#z&vMv(<&%B< ztD@+aha9E&OGF4z?yL)@K6R&xJr!-#&Rkw)BEt{lbcz<2~ z3M=^e(>a%rlScWkl`E{7D|eCqUAg)c;`~p!n`w~xKL>!HyK;C*|33W6GbFym#d$9F zr9+pU{&S*-cvq+YbL>a_n+?SODRlY&#|!uo=+)WLVt6sFp`l>NTRuxGGF%_J!6`0g zzpzV)sVK(IH+vv3m#-Z$szv{id*-$>qxi@1h{i19I zN7PA&=Xve~mw_**h`Dnmin-_Qdwk2&WZp3vs(A5itWq6|x^;k<$W}{kJJqo29qU0z z+76sk<5kpUeHv{(Si9raoqAOak$3jbQ4~&VFY~_H8`K-gSBP!h%kK1feD0I>O&$KQ zp};XWz1$h=O+3*!s%8%UM^BPzxv#S0JHS<`%0kzMRG0m(?+w3;=d5MSTkTi6G=3V( zWkWxNiu)@w<|&!DA!X<-rC%NP(v>VMEKCf3MMGU(Yy$zpgUqb0jmfL!gWw>!>l>oB zB6DK3GCAs|Ki^)CC+wHZzO!~g(F8%^d)GL+zhvBJX3wv?m@WTbCe7|6-*Bkz^DS7i zU=rc%gk>9#kKqw+rmt1vW(&dYQNHNCEd*{Qgz*!B)3QB}@vSi%EDXU#!?(MzjTh!V zQcW%pxE&PTiHWPlFLmTZouB2J1P?XrPp)oMUAe7>x0rDV+zK%3t3`eV8Jp{I9sl?z z`W9uHBBC4P{P9k!-R#*rS$(&?_Rft<{5uqYgJaK9xcpVXO6|Z{bTone=-gkZIktvt z0XqbaDzy%OSBs4`itBtVR*@4XR$gklkuCUQ!CV(@{arP&5I8Bm+E;_o-nX=eedo+} zQ|zd-kkZqO_m1YTv-fs9IDD}%M;=>mLi2PjKK46~sNHzm?|jXBf|vT1byv%uJbvkq zRx}a8L_4IxEi7=u@99qaPR^(uZEUzM6atN39yXt+9#=4C!~1bIr?3Jps{GSTwgN7#Eu4aL zWiAF*Jm&J7adzt+Pv9)FQbEqFVxbL$z7#f@Ad(ndlJ1N{m+vgh>L6z_)=dr4r(g~5 zDqN2Vy`b1mFMJj_bNp*njE6K$d$}Jk>dtER7H~W)K7s5PTs|~FEgvG;Pj-K+)cM-n zyUs+ml2H=rEbS!~=%@&0@ul#bcriV|t6JcnT;Qi5{& z{E$TVHK_5^c$4$a!)W{Py2&Q1E3d-4CVM=19$mgOc;UVnC`s(-g*q~}RnZ$(wY5ZP z6-Ur9TJNIDd)Mkyagt{fJlEahJjPHJ;Leb_Uhgi?-GXE9@mzv3XUySP+1q1{mC~95 zl<#(wfs+9u_^SxqAsg7kJThQWs^+iWBQ|P z^(WtJZNJsY_Hp7tPNl2w>n2+Yh+c)`hws-ghM%0(X@hKw!A z5rhQ0uT-f<8XoV$B~s86sq32<-WS*$4Sw zEc0@!ar_4JramLwzVKrBeVlc!1^tVsf0%!iIkqUx^d0$ArQneeFOI#tma!?Ml={!q zotW@yH!|ygaQD`6QFU$G@TO5fK&7Mv0}%mHDMBTGYm7kX05gNI?rPt$8m1W@jW!|h9GEu z9#w=tT=K;86Fi{8?vJ`vB#76$!Im@8@*xys4KIEz;8dT`ES$k;j=#Y({Eco5+?|}Z zC-7x#NVPG%nz4$>YL)$6TOO5cb^4BOUS-g4bAiXX`R}+f?1!~l3}YDrpPa{glHQH| zdMh9dLDt)jYWw-2CrqC_Hyg`90ytO$pG`Qk+MUyH0jg zP|VOv&}ZlH&V;eA8HHg|D#6~}rvg2j-Q64&vxe&EA>|~$Bx%!#3V>QMpZnR<%qnNA z_~5~-!<~gAyDsx4nE_7?LoaVqPpJxi zJl8y$XZ$X*dA!G+mF!?^lU%GJ;}7IuHFgvV6nJMnjq=|WuJm()v-@KVQ-7_($j0o= z`}9+<%*(Fn2wnTVX@l?yeP(Smjdt2^sZe6ypZg}-{3FtYYTqQ(j~{dQky-=6odlf9 zK9mvGl7X1PGOoyN%vsz)lt@fx5hZ*mW0uaD3Ul`6Qe!=H_L1H1b2G+*Qv=B`znU%h zGYdg)a_C9Zna8X8S>0ri=BOGZ&kgS2X2%faJVD37g<8Nh*D4z6dHF##`0BraTT!J~ z>L2(;_NqgI>yH=LDUh0LySdoC{ouN-y2Zl5Jc~vW1Kl2dV)P93iub3rL_UH=4^&OAHeH#)(!#RAE z<1zF+t8hhjli^Gd*kEDd-pSJ6@3|uMJ-skj6d%Segu#c4>7)bBkrmUf>QbZ{}=;O6D30v}D5)`WT?CxK{L|j;#W|;V4sL$LV zT;f5k@XMvtNF91wvlavqTeaT{K#ullvs=G+(e4N3XYEc;e>NO9l0|eVrL+IF1^0Gw zM$l)5w;6jU&Mn~{vxzQKzVngVPG1QwDTGXd#wc-;3M$>2 zy)Ydd`GbDki7~Byt6*+}go6)y`5Axumfg*=&(;y6P<|?kSB@mgdyMP*C8Q^vFNw4* z7xDxyK~TKi_BJB;M#quU^iCuO*>8XcD ztqmr}3_7F1pFP5ec9r_-o(n|XF8JB+%fpUK-{#m?3~PmE$F}NS>GedYAqGE{pR0&> zT4Vm7JAw{4{Hx~tmHT_t#(izBQ>acq?WrGe^2{Ar*@AkfM9)UL5xCTynLK`~DuFN0 zw&ErQakXBUl!Bf*Y*ZFC)@Ys)zqi{j{qc!cp{jK`Q{*9v0OqxtjFqjf8cJQyY35D% zG)aCczQk&@M1k8&yA0f0UxNo$4(Ii?J{-?bj*p@6sd+FoTYww+Hm7}ZUv3}4xR0nI z*sOlf`NcT0sd7_LQTk26LLIE4IV_^j^b!ecT@b4o+$FK*45ZAd_3<{T0BL2G=mw%J z2(9FDnG=(Q42%Ndn%qGDc6ncIx$9bfX-vXZ10btgEWy2SmgV@SZe{^*135$-rn zAiLgJNXBwuL+%sjOJ~xQ>=(5rDkLnvIr+BEO^g=!P==cY*e+1Ko z3pP97;o%NcyHu43V1iqoXJKy-QoW=^XLK~{DC4R|l&+p~47(g0F}Sc{P{Y|NMgCcosJ%Jialh z0K#;Qz6`LLfoXpI*YaK_lwcQxh8tuswX9kymCw1!0AINEl@2j~cOpRWrA6jNPa1*8 z8Wyv!ExyuyRqh(h<6j2$OKqd2rtFiKkB7)Nn9bNret!NVhf(gP-9IU|z+Wl$C*3b; zgu-{AiC|Ha#M%l;!a6Gy?&GFs`9crr7H`Q%Ps+zG_vFN!==N_IHuOVdXmxpIwmpHv zR0^>WPhgzt5CcWWQIpV>Pp_n+n~x{IH?f z_J||*>C>ze;lprPC%9#}$xV0ZpIn`~_b#03U)enmUE2QzY5#u)E>g5eJl7u=Axn}c zM#@G7*w>Nm=nw4UQHTK1zd(VCCGLHjzw`edm6KL~zl1mNRW%W;Eaj?;1wGqJ|9(l~ z+>rU_W%fo88;Q+h3=6%Q74Pb;OSrJ$95F_x|Nj6%XjXp=N|-BWY~XYpXQKj0;`u)~ zyj$aUq>rZ(vrPIANxvOe|K;uvM6N3UL-;Rfz=6+28ulpT=>L)PCy8`NcCjw~hos+R z$5;$JRyLlhWyomSOME3 z6U9l@*Iz6K!M*kj<%Eu>pUJFdr59(%)xmB1w#t0TfR1<~SyjS_Pu%ZUX8Yx#yR05A zp~s2)i_c`?`m}U^GTDyhwno$4{Tj=*Yh8z|TKj<{kC=m$23ezw4XyCHdrqU$c-<#F zb-OJy8F+-ZH;G2R=PyqhAq!z=LilKsW2}cJVqt>Ut{{o z#ed0f7-^Rfk}p@y5M{G|uQi}lLKi*5^Nyh2%u<%5#Irx`Cp!#&8Xr?T3{C~C8Gn56 zCMBLf0O(%cj3MTf1a{s64h7u#`4yci9#sb*csBf~!zePZ@PuS!%xUdg9r49w)z^T! z^nGeKLBFy9En#C}7V1yRnm726<80$?x2ol}l0)~Z&v#v$ZRPq2!swBw+B|^yVD}Un zuOgNlx1mvfdlmAKhw)D%avw;^SrWQ)hP~!G@BY<{qd%-zg|7cnv2LMMs9jwvQE+q= z2}DKrkAFrdPw0oPUvtCDNmbM76xU7sfnyq@_7eDBll>u5JnC_Kg%8u%uj!HXQv1`4 zO{_ICb@yVFWe(_8BIG4@V9WVw%2=y~FINO5`18FDmOM23s)d!etlkvfpGqnrB@Z}I zJP#n0pj&R_;QYOA)3R0DU5dG}6<{P&7AzC4bapC|%4P|q%p}n_1RUDWKrc@DYHgBT zJ0S6%0f>O}k%_+2K%)KkKCUk}Nx+H!CCo;rBdC^m63Y5hF+6auZ&V2Hii#-2 zbEjOs_SoF4QTk+Iy?03J*2R>qi{~XcFqRE_M;J@lLX*PWdT+3)(3>PdxJ%(~N0Q#U zj;_f#Gpy$Kdt8QRhCZ-oqJ`_6$4Zd2jNsw41y3_Is@$Z1ar?7ArqpJ44kk zdq*tjm{jE`f%}uixfk~T@EUMwgkL@5eMI`n&YsDnp8TQVv}WC7qJ*joOL+Bg`Ee$n z_3+C_$+;6g%EDCF`#wcgoFis8q4_b`7$z8#yS?eFAQS8yX zQ-Eb{?dTwbWP7+yK_MX_@}8d30Kq`7tOtgkA+-p!f!=UmBw~@Sq|+@i4_{jY!A%{Hk%TtB}NhEH25O(F#ik`!^&aR&tO)J&AD;;%xqVV|GiYkV0 zB@J8yonUi0sJN-VPNXVU{4P$n_)sc$?!d5(fKTd{XGLEcOh_X9>eyup{@Hxo#MqFYS3p)zNKDPI{Z%$hzkTLnlRc3v2A1>SphIeU zDH8L2hrg1qWQ&vFah-=4X<;xtBH&0F+=s=Xk>_=HZ)^#e4H3;`=b{F`zxUVFh% ziABuW=_1Ygysy|Dd%1wKXK((Bv!{_A>y~rv0xyo46*IBPY~F`jghv=KdfXqFkL=k) zQbi(BlViRv!O5_!e{IlaBW0$sUA|&v0UEmb{N6*IY=7?WPTc(1p4po)gd0zi0dbEKnSLjNzOOn`sM2iIr z1XBK_PoWqxmnO(Vgl!6<8xccB0;LpI1{rnyv|HD#-n-4?U4YuRZHf;yT=$BsI(n9rva|C?;Yq*7i$J-uGSQ=M!mvc=-ARqN?Z;=#FojX}-@$|Ex z&Ad)g*)Rjs##@yu4 zIZMaRe9-D`FCagYHqqX=af21Jp!^5V_(aT}t5$0QpoHMIJBjS+0zcr!l_0ElyZ!5f z@S_O*V-kgqh|sB>g4y$0tul>aavoQ?hGssR|0p=}mKguM9p`2{jubZC?y$V#ea zZeB-@Z2FF_bgW^|TJ;!+Wkg^eLn4%$6?i|p%@&S7TX>JijS+tK)}G=8D0r$gc(g_V zb=tx%Ie{aefbBrgGs6PSYP1F<9TK*5qYg|^?TW64l14_;4dwnp`Qy2NP?6BA6Z0wZ z;OJ9RKF=g`OCBK#Mxh%VGASC1DQ#kN#0g_n^d#z zmAoB!K2AFs(`3ijpx?iJT*NE~D+fi{L-vkv;tt>W0*LS|P z8iisbWu1S~Q_x%vzg(|AJ;q0r>hvMj2_?dJZYV*n6E-(^dWsHQMOM-pj$xkTc}EBH zmhVq*aB|G}^=QPdbv&{N_%KP#>rGw~`0QtscS&CuqQ#~Kzpr^!rW2qC`g$I}!v=E9 zHV3x1-Co%gq))=@*vVYjS;F*dt4T28Qew8r6npf!9!wCxrSr|K5}^X=J0 zpQ1?T;TYzYbfY|3AgeaY+hf$kIerfANj@dTWoEOJz4E@8sk97)Khrpu2oxtVz)0Qa zY8uOK+^chhXu8J3t*0-v^XAC|ST`EX^Y4sDY#ur8Re&u;HtI|3L^yCSPS1|oVK3w9;w{0kfL=qWnSlUkAvR~<40Blf_?cq~hXNbZV-@+3 zK5Gjty06W;`zy;}xcpW$h)l|B8rm3?a4&fPx17|^zZh^F+Bi#pSP>4Ul9O%4!s@s?Zhm=xhT+v-?al;}0WcDeRkRTOJcwx6k1`RXeGVF^O)3Qm z_szG2?*ci^Mc?3!^}Fy#`SrH@@cWju4^{J6NeBXti%SobjqNFFW+ z!lW3$h`2}!<{u^m>OH8$QyVjNl@|yU!A9flV|L^4~{Nu#rCWwyr25L6Ja%Q z)so^$Z9;nR7MQ5AieN-9!MOeGCaI|4hPS#YjI2e`HPllb39jha`2beoQ|X#ZT!$3!DAN= zVx@7Yw7-uWTwQny9wBy5IepOAcg?&X4>FZ^Rg+A`ljAMsT`$zfzYN9&%gLUNc)=%Z z(9vL?-H&9k{@$7kX29SyqWMfA3$!<=4OgzgA&QmyZroPH2nOu5PDP1_QYw9 zEq_g9u@N}2okqc*6&W|#OA4#veucp_r@2u68z)<)?wLHdaaHGLEIZ&5@UOaDuPW{| zv-D1wrW~X|>n_jqmj`p{c1{kw^OWionC8Ka6x(~c5Z)d)$?=2|-9Kqt9>9aentR>X zy~J2X@2wvi5>ZD~)5QvgL}Lu$dp?zBT)){yOUkB8YGyTGU#js2$(;3+yq
!lx0AZ5E=dH?4pAU`4&u@RgC|L;iz@^Tar?q_fMm@L^ zpjY9d-u{=qTqycOYphw`B<*z(2XdkJ=X?Uy;`7I7QS6i3(Qqd|X!WFP z$vx!$OGHE5aZ&?lY|jgc%*P}ZSH~RZ?}oaPV@ddC6g-jlxL5 zkAj!>XKtlhAq5&-AQM|1vO{C<7;+K}1RW*3V=2WP^yWN(3H^kFH}V{5<5 z0YO#A&|9M4Vb27P#&hpxYmeF^471oKBJW@OlK$bJOg+w`sy-KsUwz=`e?d1U*y@6v zxGSTl;KrX_71!yWd4X484|mCm%^r!1$T{hqkDyLaW72qLsjTrFsh)Hq#d(Bz9Ps&a zuXgV3*BP-FW)tH@DP*?Dqr?#rR(u8Nj=L-66+^|!sU^HA>;3JKFL+>vQsyNpBw9E* z`FCdH{QY9p`>G%ZzPi8f9K#%M(>N5jzVUQ>EUfhEvvtR`^4Yw{c-3hB>}0i27=6s( zSjO{b4=AFZ^~0ig73NpI8_SUnzlW$`6$Y=2wC?;mE( zA(6dH=fXd@-2WB)oBs^NO$VKvE_~pR{{+}KVtnWS0oTm@UyJ<>#C^H>`fs961zi|B z0Y5e3ZEutY?ogQ>sMuf*;1`a`I)^1De|S5EisCOJ8|D8`BF-P2jSt{#_XmzyJfi;< zsY{cDRgRKK7wyVi1CM-k@)L61V%+)mx`My?G&y5^V}%;vO;7&o17-iqyZ>g<>LOjs5jc+Czd$J zvn07+IBqKCZx;66NUCF^)i~U7ZmF?kv|eN&xWaY`l@Z_biRQOPUYHuX+W>0s%WZVs z+p%L>Ne6akn15B}q4;o4?mI!N95{4OSv2E_s^|?^KXLli$(c00Ur3ka!G~U>pU*J- z`lKgxi%IM3o0)e8gRC3PtI`0?i*z=`Y=F_LgxpE>R(e<@`IIOx&&q62bZO1E@N&mo8_kvHg4a4C1!^(Q)kN<(E zf+8rz_j8SP4TR568<1-IG*GK-eY6)sH_^=ocuiVtMvguKnYOgt#3O&R6>{d#x zMtrs|xK!Fu9Hg1EO8l0iJTfGh+C&(hnrN-O*S(cmGc`WBw!Tr_I3Ch=;yG3>+x*N> z?WJX>U}beAQM<5~&Axj(J(FG^()@`Ye7NFN`K!byGg2}jSRw9U>Gfm5!u^`~Vk4<8 zgw4jrqtS+QUQJ{>U;Rk=w}^gG3}Qto5dXNwn$swHa1lMw2Lww@HrId6beQPDy0TUm*ws>n%v+9;~1J;@xUmaB3>Bs<242HpODslU?*V$Z;CN z9;~rhu`Kj8-7`AtAC&1Qpzd%|_Q5l(gCCMPqP$3yvOEI7_GM2Cj{8p~#*Hj>l=>;VjKR<$8`AwIU3X#~6Z_E3^^ASQ76~LxtmAI>IOUty zHyYDp`l@%F=>OUGg3t7uBCoY3Fr3!=mr^DVcy9~ohU<@4@GR_px$$%DN!rG*NR#@C zQyodVf$+pv5`;Va?kaDlgnbs5C7W0}DKY5rsLWpU>rVTQD0qq#OcQ0M|{M|_FgD2W{jAoVq;!L z9IpK#b%J(alV~{S1Ab3!EDVEa@YIG|m*HGW9lO)+c)TmAQ@yJ};@fVPcDg{gpB%nS*_9(1S>%z3c zQp3P%oHy6aJyCW25A=~gOJ0koRD0L|Y(YDqpIzR@RpX_7DucFEa~i$O>WZ8a*~-gNa#n-CMqPJW~x?u&Q)K{e?x=qtKPzJL0Fes zS9rqtE+#9smf%nF%rDb~cNAEmnoME9PSDgDK zcg>WLn&>09+qH5@U;c>i;o)_bb^6na$)dSKxr(IzFxKZcI(XZOCsABJqXw7U*yOWu zXXO7X0}0CQW-KASv4Y_wdgeJdfE`V31~Ll7aaBuC*QG) zir^=Ddg#@2nYg&PG;3eeB?h{mI9bdNMgQF1ssaK%C~F5V6~kXs{=;{$wXImdRNZDt}ldlb1h^d`sfh4q~n zVuu6wTrS#Pl{6%J>H@^Q9Z}29|6D-qPIO(b#p$Upk8R8Lw6{M*aZT* zz_%r&XJ=9xxL9vZ$FcWvjG`N(E#^9@E|^ok-pBZS=Ac6IM6h?sGK-@S&!1bI8y8xmK5r@p``P;b`yOc#*&I*P0uq z5jIGrCxl}<5k82U)Blzz@zB1cn`gn5l;CD|`nQXEpn|>X7>haiFDaYybv~vrahDAYMNx7DT z@1AOuHOvG%B=E&g7>IQo4lT+xua)~%UCYi@H@j*2%fQeOSC%Q_h{a;(fK%#VdQGo`jFG#uu(kmY%*!g?8OoGt<0FZQm-5ly4ttA6 zL~3)&v2wY=L6h;EYjUus&jz2aQBBw3J5-0P&fQLWdY#&CFeBKSW9)<@dt)rrYXynH z_f8utlbVccShPQLeX)Fswl6bTO7+L5pZaH@C#dg*G2hi z@t2E1vF5R(F(eQ8qxyZPQmE}^sV)I#u^_A>JTNF|h^-0~D*VPhoKWbYOrnc8g&XR- zQsc;=5X)gWaTsUIMsN-nK3F2F#FBbRZSRkJEl~9tY4{kaAQw6!P%BFv1>f^!csR$X zL<}TjQ-~>SgCBz7f6+#L!*XILU|M{zz9(PjK6-JC)Xx5K3O?Zp}5tNUnSb z4_#f3Q=GRimRCreFqmKlP}#`1$blojEGJ+s$15n<<;V-vT_JQ#b+@g2^lFIq2f~?= zZASW8Q)?1ir47(rn#pZS5(n_#fgjx;#-^tdwyLZzvCa>2i?NMqtes~4$vNXPA~8jr z9kXP5pCe|74Rdg@bQ3Q6Tq!{xg4bdK@R1~lW4-Atly)|509`^jK}OqEo_ z%GDcd?nYN-?m(`}GfYXY?ZaD*@Yn+_bYvKfyLkVljo0l4$FJ%WlemlW)*0FFZYZ(v zuoS+bvLzub*M(E~WW{V5w; z_{f<|D1NuN1jNs2Z;dbLt&XJV>ql7BUzot$Yb!_kQCETSgz~zjsApxW=-|rUdV*ne zM(Vyp%LQwpqy4FT!z_dZcGt zl?1q~hr{)cSjUXGXVJqfKdz}2f_?|k1?1`3GCjwhQJ8z4)Y`S9TiP>L!W;8VdIAT7 zx=iw-^=AXYf(%o|rC=*SKlSAE^*e~ETG3;_l;a}H(`#!qFc{2BFK|FDw+yJ%?>~6J z3uNG8@%h{Ei=kbw?*ZJM_rir|`uajLo-8&CsW!`RxawXCO#QT==jR&j>i|if9p1hIiqbSkEVtXo~8*3sJM>aoFSna(Q z61TFYnivT9P!2-bQY3#b=wg55>^56+X#D{!TUvdCBiCLrJw6CtTXp3Np<&%V6>Y=9 z^0LNELVclNom~D!OX4qvk`wg0Z5*5fw|qfrTsANpB+A*diPe)Yajs44)p?-nrcO9)GgtJ34=a0( zFw2IJ(9qBJ2wEN9Xja}RUpj77eZ-r4u2B=UDeMbss99dyMYXD#m+xw%iVj~|`~;|& z4pv6>=Y|ZI_J$u5i}2MoB6v1W9TdtqCV@S(J?X<^$&zsQsQQV?LVu45z@aXq<>1WT z3m2i3xep&mx^gyKQeF?+YZ)68Greb~;L=P!y|IxmZOML!#gh3D z_S6!~?6_rtr2hr`{rH#POOhdG-wSKhs10V51;(kQNY4u9!dugXmnkFO?0&P) z4R#z>y@{&cr?iXlg*|6uQ5CM~**PkBqT}FWW91~L$vybcyq0Ut<0(3nd2z6;j3o;b z^l@jC_#!N`5|H6?YznOqC&sEgGUrGrW^`Pk-u6kU$pOlbTZ;PnT!4Sp-Pw6hJFbRX z9`Hbi&sMDM#2Xn0D)(_hO@&*|4c(HpC%>!Tr0yvcF1!IF6ROCLarhy!GdUJvoRzEA zn1f>LhX$a$2gnQ}y|I0!pJ@su+mX|h=)U!be9eA?x>I$ciHsXhQFCx4jQRYlDE5*A z4IYVJGFNVi-Da9A*K&F*!Q8g5O6cKrz_Xs;>PlZcvKJ-;)NmmskwF|5EwHm$rym&; zo$b1=FT9H_RPOz`Tul5rQNrWV*JiSzu@ik+84T(5+r{WPRlKWCG>(KifrlKRnl0u?B z(p%jhFI?-bw^5~k1p5IBx1KXq8mYdbhHF@U!pA0sjXH)&4V3_WvTa>pFIqKN^7eo8Gx#s%+Nr;{ zH1ro8?f$@{xLesx-g-BwEW0?0+9NKAXZ%a#W;Ek{b;{tyHf7oeNc&+rlTbt03CZ?)HLDuGSXV<}aQ<*)-y@|S2H3IZ%0K(^W+m+TkoSc+ut1< zz@10`v*@mzZ9{w>0aL?9@LsG_&_ce*EW7zEH%iIF7if@-9t?nEd8N>@)HpO)t zC~eMnij4S~>5*7|Qe$Ja=PRO&K#9z&>=Gs=;bc3A59)}51N4VsGB=NI4U+yQI8jb$ z1xpmX{)7r;syJB;=YKv%gy`eH&vf?6H%t)Qo?)kCf3Lbz#ofc?tA0L!xwBjmc(2a& zhf?@zQ>QNp593fc=$%4wc*N-8zeUCzARX494at;=qq*hY77JjnLm1;v046LizT`Az zOADtO38dRHyxK@<<4XQwo2!M=t~J@@;{)oiPk5xspJm`r*mN}^4ju|bg43oXkbURL z)`qm_E1MoS+V%^dPZo({NaM-#i^II(Q75rYjoWRw3^=FE+y1>|xAN zwTPnAZK19*D+?6)1PYr31d!9}GyC2040jDj3{~8^3Pw>-q=>5)^?kkT89*BLuy@C# z^Yfs&lV!*|s*?^;$;tF*7op zEB64d%K>{!hzujUv1lTXzJl5xBX-sZwxr&RI8X?xl9=x0G0+m<$IAgVrb0fDxC#^ zm|VIYe2&86P)1F6Ff~U?xf^S%k=!(=cyY3FAvJ451%QhP5I=UgP49~NV!@GJItC9C zgUIa-kA~u5eNry@OA(|U;j>PyEw#aiJb<2FeZiLOyBt^ZtYQ_9cL2Nl{c4h2-%EVB zZ-X%VW_nG!y^vYaIq(_LHDoGDRiEB?VPWC9d8FQnMb7WZTXNoKFHzK4PMv7T_jqF? zjS7~HlDW-(0htJ-W9Okq_wT&?UzvsAT2dm6ka&Ci@bE@b@$GuIrX=mC$kVR=u$b7z z$}%{;17b8&QfVpvnB!sQvCRcW2N*Jt570e8wk%w^Oi?D(cVY-n^YwJZuQjz48RiyVd$N#| zS<}}16@K+rGwKEGR(IYgWLxSttCBGJ>NDhoYkXkilinllz+umAU>H0zP8k>cMSM*p;?8$7vA&HAw2c7%n9u`FGMnsD; z-bT@G;StmbUQj_+)#AX20{qU{@$&LUefkuHXgIu##g+DG5(#(`$k*2w8X!H~YGV)F zAR<_7Ub_1B7@@b2+{th>8+I+;rUbZH0w0i&lZA$n(A&Zz%(mJp{*yvuC}$%(DUnv+ zV^>(hgL&*7cDWQWoz_F(6)Fl_ms7mqHG|z)a)!)(>ukO1i|`2W+)U%ib>=BM=^h;! zuh$~@A~(4yAX>fbf~C&-RI6n7GlI7mwfoqwFL;O<;UE6elsg@{{xobezL5JwbbXJ9 z`kfgH!Ud^;k()!213QP7O9#}-XPG8L51My6pdxno8Lop(Csn5^0(efH8oMk_B`@f> zAGr0%GmMp1p5pEKoC9{KVw(Oj#ajk{lAu>an=7VAK_q=#rAzE5Z6Mcv(~yb+KJS+f zchuECp)tVI5qg089J^Klsze(A2c5AUU~`(@N=HXWkprP?*+rH{i08$`n1K%gB?QV_ zG5)kbX4lV<{(>KwnQX*~UK0}P-uNMgWGT3JL&3a~=-*oIy}G|jpz<+gJK5cBR!O8M zJf2X5ORmEu72#VzDqPCC_{$7I?67R8IY8toxub^ec63AxtPtPBWZ*j5U%K^~rl zP`ikUh3h^q3rU58yu-xGdbI!G9SQir)3$(hrO4|t>@mx!-L(me{nDY%QGZyG&_7BPAtE%3MJ;{-L zNv@r%)zS<3P^GAMrd&{nQ9m0m<|P zk(<6tetG1nL1oq9w3i!k%hfTg7o%&lMHGo=nji5MO>M`^rC%fK@4ri;n}~&X<_Li5 zKqK8Ltr_~Lv}$Rn7!j_ZtqnY7F>tg-=0(fXEHK#Kstjh@pVNBx>=ZTdnvDWp0P=~! zgr9rEcK3e0yFMIC{jO({!Qn!LH;OZ96s==9UeSeWP!N~r5TA7Wl_yLItW z=FDY?aagc1`a&>Ch!p)80xpN%vXSfYXu26WS3ZnnWM+Y;#vAn9sQX!=d`y?77(KV; zAwO3llMlk$y7g=-8`KfD?&_!x6}jvGN7i=8_gi9vw6CeKWNU#Ik4Q5d{a_rs%6V5b)EE@NGiK-}y9ITtC@{z*vhEvV{P=Ucj53Gz?^j%4GraWIP2Lm9B9*qz%yzvF~X%uFhb!vMmDKGDulf)GtcI&D; z+PH2sB5MjxrWZanLhN)F0rSU8#6ELtm-Cut@)Ys?{?BbT#mC$C4E9Ch;_|+O(U6|bxBVm2O|#ZI zu@_Gq?cUl3mxDJ#WY=n2(G|`YpKUnaH!E;|CMMrKVI$-r6cZZO*l^gityRTOX<{au zCkEj*e76GW;Y<48y}3;SoprO!?<75Pyp_g-C%e9f9H^OVjlLW+oYjBbI+^vFV6a?+ z_E$@fP3^^{wZNGb!WDtCgP)#zU?$K?+#L{Knd>WpAm68c7rnCL6!oKdyY} zUWwFfOb@P;@*YTO;*@eeFCai;*-0&(cy#-|9$wc*O8;e&iWet%%h<%^krc_gb?&LEK zx#9Rq_MZ`oFShUFna7A;#>AzmDvIpf=RB*cOYW98V+Pc+zt=z8By3std-_4Fnj#Y^uU~@}z?i|F8W^t{d}8%?CsaKG<{c-*xd%uYm97^Th_TMl5lxFaKa@ za>=c^B%Ic)c*4xQgx6tQ<+H$ek$F1PT7@WekLhFurODu9fnOi3zE4#2_d@5NyLhN8 zpc{Am;ysq+!i#k)!-hOZ-1_i-vFFpFsnU}tx6Fi*^k#I>B`FH@-bw)1-rkrT|gJCdO`&wP0~WUTIKrPi;(=Slc>c9|NVy>Xdyn{;|afgz)p zh8jnAUnRR~KHl!K>Ii%5wP<+nlr$gPuh%!Br5_cemhF|uw+PbnvG3pW;*E8BoQOSn zG8fY^i<*m9OM$R-0;h^0V1@Uo=9x082c=-%LM?st;F4yLB0$ZO*o8|Cv4YQ<4KxV*W?26xVAgGDEf8`1A_**W_t$&=uG zq4X&oDag)dl*Q?6ac_CPt*e{+JzM?w;ZxxNkL_7E$mg`U5;*ew@u8F}cBQnEs03pa z|MM-k;z@V)ZiQZn!tI?ft9l!6jDDiaq^jO2<(L=ER4hWjPJV`F&6k&4({szOMk!y=c?^CYg>Ci?b)DgG=t-I!Deb`cZ<%(hk!F!Y^9!6EH+;8ucOs0Y zxCyzP3HPzfY4qEDiqG#=e2DiLv89J-$UEu|kI*dIH@RI1XGgn+BgsqJ+J;|wEz34s zb3xwxeSND&d|P_6L2=!b9)fWdPj_Bm2ARRlM#qlZ5rt2ye>!vwzf&}_?v|+>4;Jv$6coPCumOg`N zt5LZ}ukDylF=fQyigSialW+SJLgway1`}fJ!^K?h~c8V6Q8_@wEOi+xE+Ih7?Ce3PE)!y%JZE4{Fe^W*rX%%;MM?S-4dd z{upM}v@ieVGUO zb~@TK1I0ukaE?I(yyBo-7*qr&dWW-%tLV^Y-D?EZg5M72YIsO{gA!!S(bd z3<`4$^j71Z(Syd_d&Vwq_5AkL*MM6$SpchdFYgd~nh|Lu79aiP%V+`Lgz*iYn>Sz7 zvc~hx)&A`6ZpUoTkw72#RELI;PCYVN*|}#Jf2U*=s0cLdONMjHae~SOXM@03pgvFhMz%V+d%Bb->Q2RA#T^MmILr8tg^l#aWt9UP z4e-)xIf^H76IoF4p&@ge!qvrD7JEmF|;p@%XXN)QrK&`WM_Hfpp#}IV$-B`NciC6SM1=nL19EN zO4_(>g<9BFs)ohP?E$5O-lBM4aV@VvWW$a(sGoQm&>>lngM))t1O=^J)|Bf-XzMG3 z8g@x5(>$V&cRg(4eTK7E;D2mhN1dx4@9pM0-d7(!a8O*gt(t=OJ2GZX7w=cWLr&C6WZZQG0kYux9rsiA3lFxw|S8&z0E}1 zR@cuJL%t&DPN5mV9Wx3~LpZ74_xx%lZGS&2VWr-Rc{>q$7k>6a9 z?GtCqsZBGo+dU`dmmh(OaL|ZDXRMKA<9g>OL*Ux7E=dRor+t`A6n)GtG zqM{MVb}it<`dYmQU9zB!tLrKGXU`ZxhZdQzv4QO`u(9Q3Wl@t+()P}d>FCfEPb@6+ zXR0O-6$l-pL!c1DtDYp8E5gDojNMi^U}!i8E;q;ik`+@vd9KQ@_LZ&Ln|UJ(Nav zh5t&gsH}?n&!R(v0dgEt-)<(Ba5*#G=5iF5FM~kN7i2&!tP=Se#}RO%@AE4j$P){dKgo;xSJ$QOUP& zeTl~z*EyTkmN@v-@b~~#*OC){fx3hQP$Km9^`|<_T^${n{||9*9TwI1{f{2HOQbs# zkVd2%5l~W)Zba#j&Y?rn0+a?7kZzD}ltxNAgh7d!k(eQdxo6(*@8|pb-h2PL&vSqG zJ`ZtbpL6z{v)9^dul?Guz1EM5N!O;o$3|QiU?%Sd=tNr$hM5^mcM^H6(hd!hhyWv| zegFPlt`f7dv-qAJLvC(o#|egM4!xLEcwoDc_E7(M|0J|{?}HyWwIG)fJ$vpPZ#zZ= zu%w}OhK~Y@81XBp4EN6v~-r*-yEFT2!c3pYFWD@6yWYIG&3{PxKm#* z@$u6qmwi%F(%8XWgk}n3kubP;3sM5LEtLWevZqi0yp(`!5zGuE2-Ln9Bt1L+_0;3~ z+|)MwmO=!W+2p9}(i2ee@ewykV;`p%H7|y*+|MHxM(eU#ik~pnhUR_kGbH|#HB87r zDy-7f+Q}=oLL`kwMhqp}I62A29Bs3+SP_e_cO5#ix-;VE<5{v+0IrTbHTq~ZEvp?+ zfk=M4M!5+P5b6`^g_o@X{!9kQ?h#zEQ_3EtF?4gJmc6}fcvRIGD!W%yYt?&`-{1+q zLKi*HH6fhUY!^*BscWo0g4LQ3FXgJ9@E&Pmd5cO^pXZNE7RLT7fLIvdBaq@58%2)} zqs)PvMFE+d7)M6Y5M=D_x@Ejs(MZv%E>xDrRm~mD=vIuDC_xKRc`8+C$Lqy`iyLv! zcoT7gvaVw)0OURx{u6=xA)o^4mW72yEPbI0^c3W#)=c5DI@@Bv^w8lUOA8Ay1v7UCKsc)$iPfynb&l_AYD6bKrOj=vu~K%Ja(zb9 z8rWX$dY>X9kK1Ij{Wh%%tup<`EDQz9g;snITDMGjcR6wl|kGeUii20D~;62CvV;W(Q;M3j)c2r}l z6fo(+eGQGGFJB&py5FG>J5bN_S_M0^vangtb)y~5qX2=fU@oDVty_<7+U%8r8Bb+p z%|}a%ic}XTYnb3$Im(2&qqyNTGS&U3w)ko4olUwyl#v#DcLYb9MBD3n;}|c02*{vR zrS3~9)lQlS5GjugEf(nYF4{e>E3FiIZlT}docY*p@8R=JMZZrWlUboL`uQN93(o4} z3J~H(?B_G)VV7&46*Y`uf$a;s;^^o?g}=9qo`qFPWyB`3#W_B!3KF@wIPE|HC@_5a z2N14KEvnYND!@>CahxFk4(3nsno!gB-e4UJtUP*aYYc1IcRS7|!J*(!OtK4Adt(L> zwIxT;hf+>$?ERi&Sc}ZvYT)U(rWKZvVFYCye?bL+#M4G-qI=j>w^Vw04F)t+G_0&E zB?|{#UAa3h$F3J_e2fun3rC|2=$g z4x+`x`Knzb@Sq>VG=i?g8?Aej@Z@t4;$wvMXNS6S?S6pa{ZYcXf)Ggx69Qwx?s$t1 zV^x-ke2C&<^}9ceH9%`;@#+vVRBH_yH28Nq3!sG-CF)WnmwG67(>BA>tCKEp)t}*} zhAKFtll!$az0JbTF4BlxSX=sndiqQP0K@$f6;fh$@NNiP>1z^Q0_Ujz-_fYo?zfr2LNXWKVzmc zs8iVQ5{8}~(6B?mS;cp7O7U}CdR?d!wTm@Ll~#4pSOT~O<$Bn0Dtt@+M*z<=yRY+P zIl;$LV~bUuqd7>W_$mg5%ed~Gcb|Yuhglh3@)wF8aMfMqiY92%XrHsS%hxkhd31vK zS*cOvBtB&?QKK5fddcMK!?51Xbp+5O+p*lG-^roCBvW*aNiP!2ODC}7n0$gA3_q?F zRZlUjoZ0uZnKnU59`((|m821A%7=fTPD7HZ>{BqLA|qfe1h}=EdIc&9wl!yoN(`ij zb;OfPciv^;mM|4qmx;FacigM=DrBssO4}GaGh!*8YdsLfHgaEAH zmF5USUzTvOcv)Ku2Y?zY&Z%({P0O!ebvf6F0r^~l+C%7~*a#VDlX%=9Z)#=XtQ=7p zP2JiaC&X7-A-=zOOK_r*5e#&6QIpzw`uYnm`T7#JDF3=KV~x@A@H#u>B=gut)& z%&$O|7(gBqY{ZP^v~W$%@=Kn9mL)O=!q$;y`|Ns@{lHhpwc;hc<6MKA)^DSfkl zUYS@Ygp^2`TA6gC(6Rd5sD181y1sIiv?Tr&V(x~|Fhotx`^)UlW$Vle`b~>@yTgQ!_-81G7J37_YM4*#7<)th;dZEuodmP6}T?X4t zI5gE&8Zt{p7L7jZOtZt5n#iW7r>cq)7qd}m8KbQ z7i|#xMPJV3G<^~>0MC`{+ALgT?NFND-{1d*1?25Jl|7rna^;nLlBD@vnV<0Q1YxX1 z5a0Sn_?YAqLk9*4{-{U))DclcwLlhK%m&fXz z8e{@?>PD}rALg}}x)^-CrU?S73|}lVp1)=Z)xrSeXlV!t*6`@^*BI)zdKN4;*as>P zVX^jR#X#ZX$+$1gMxUCSNV?#X6VB5a7 zOx1wvf$B2Mg9(3K40!&yklD9ooN6Jof*>%Zpaa%xPC@q_>&o2bfTWPu7Iz>cG6;9< zP#PI*>(YdqmZ5LpYZ%ZuWtH>O`tA)&gS!NPbC|I2Rbyd#zo3Fw4$k0ym-u{`fYE2- z-{^%L38$B5Wc=WwAc%%*I6Crx{;-G(Dl~mJ60b+}3+2{ogyVFLt@6Qgcekm&OiSDs z23wX0aSpr*C}|#MyweoNsps5^ygQo;jO8x{Xicr=KPghIRho|1h(Oe(HIp%XWhlEO z_I*?j|MOU7c5d=Ce}!mg?$aNFp9aWR^8lwsU_!v?pQv|iqik!`bz$c(K)3;0v+(GM z0k~A&ln-B7v5_IU4X*MAA&*v_-QL_qn$=WQQMA{RAjbd01qg&?n#2YMI=75*Z5&IJ z9vmLV*Q?2=7d3&-NvyQye?*)KV)0_(qxB*go?0RP4>v9`kJ?+#fv+32ABbx_9RZ$TR*tppePNYLAOguXmf>^Ku zJd6Pa;EaHzurqAH&RCW!gvBC#HIL7UhfCtMKqwe_rx4BsS0MTc35$GGCtOaAUuZ*M z9Z*-ra7KID6%idWeRp3~U{D(QONqah-PrM%tQV2Xy8&8%K;+IHi4(0+Y$nKZ#0iS^ z1P6~0Fn~HH=Z985_wsmx@`mK&O=>qrN8|Qq@TuhC-MS#%v(oJE2-$AwQCCv~R8Y0@ zfk8U?F*=(16?MUN;b3bOL|BLlM;JshOk{_`SXJ0wP#MovD0eoBc(}C};L-kGR!%XR z|KxG+SC8-OZwB7;U8173;n`OXmNnhmxX#x_e>5hAK0Su!H>5-F)V}>vhgMIO)i#*_ z%pTgYA>`)P%V!b{f!N!;JaMp09~N;l)?71g5ij?h#5Qc$gzTj1E_8bKqu%M}V1SX) zo7rhIRaMo_$1v}(#m<%%X~3Vq>uqv@ocl_n_Rl7_EG{Cnab*4;g4!?Q@36kgmoHyL z1mNkLp6qH~K8j5AUw+@yG|2LIC|#4C3;!5;@GNifcY@y8!)=Wze4F47b%ooL>S~%J zplw{D>yjYbOxqe28FG@A@_PUgZ&oHv^9Lbmkm%Sv>Tl{A*6BE$wh1ne!I8*eNR6#% zCtm>8`zW9nvXc)y!UsU|0de~I4h>nCLUF!xo(!H&VC6PS&Tt~z(tFp)anr-i0rktM zO&t-8ci+~#tK+8+)e4u~VmTE~*xs`|-Xn+8p}7TXXb4%?-&RY7&jT)i?V<;&m>sYH z8to)Dnm7i;&>Iq2yC+L;WXJKFPiVQ|Yqgy%1(Y5N3kyG9 zljj=nbtabk=RJG`rEbSJH8yhIxkJju#bq%)4#Q@7o0*9Q={;QGau+Djih|j0m&QF? z$kHc&C&NH6`|x&-n>+YDRZ-E@FM|JruQ&E5FJ)&l8b5hb1ez&vadB)!FC887rKKf< zCr{$QQ~k#pgGdAdM>HCA$2PaOc_fvFlf8zrO;8`kpXDk;*paJ&1vZWgFcJnZSS}eB zq_Vcon6yeWyGgCe%;D=R5WOBUeSpkL8;J9Km}!En|uAF&U=Q|cOYK$wM@ zf~H`}aVR^})XXfqksS_x6$l;xVDdI!p4gM{ledGgN0 z{qH3l?rm&rOe_#KnXBlQ=v8M1FedaTr_=<3m}4lK%f&?qOdARMJ>2R6{2)^Xl>dk* zzkz`TDIiIdn=z`D9@4WQdcTw?5R3Ba{;X~OfnJ^qco7`R8KGTz*@A_YrJU5E>o98% zzN{9yqGb8iZt&2Q(96rKvAMa=wW+wNX-*7jNpBN-e7R=V@UwBNy}DZOI~2>9r|1XS z@d@M4XxZO{UZzcSueUGhiFh?)6k+vD(Q8=j`0395U%&MblV0^Nxc~b7-yq;sf$MW! z6Ft-Rk&zLbq+In%7hkBUq2W@3C-)uk z@Re-&G3<0q+wSVNARqVSyRVo~tH^(0Un|FxPsO2#ZM$R+hJu7j8MaLVPfetR!+zG~ z!|5uaka&UQd>Ras*2^C>HX8wcqCCwJZ8bMnX-f+1z+dY8|LZM^J~WF18e7L1bfr8U zJ%@WX58Tl&Yz4kTE5wQ=z%q$4~mEToEW z#kJ||;mX>}@le@w^blgm>6KM-MVGOk2P@T(a70Va8I9-_`wc92=gd!XEVX53|uMXe8ZP)-LN;xx`kR{bFic!T-nyj$2bJik2bj(A??D6MQs+nf$n~7}KQl>%3NC zp+ob+ja$!G4%&wP!DoZH8W_!P?SjqE)4AQ~H2pa24TT1Zrx(fC4D(dNF&dS%M_`4s zFPuYBP?bqlF_61ao=wykn#Q+1Ns|9EmBQR&<<_Yn-2yc6<@)SwESQkFzy8|hg!m! z7(dKj4)BY*v#t+K@hS)r#WG6gcWK=bfk=qDw2`zS2th7Z9^gbSW+6p8mdXoP@| zqAW=m1k1R4l(LF_t(&hB4$$3=G6d+0Q@q=3o-G*7Ze>!S5%!r$jO3f@z%?v@3Uv`@ z*YD{kqKxJ{jaV4|gZ`csC4Urna~pT{_-+$CK)4I1382>nvu;3u6zC0(D*B;fk8q>Z z!R=iR?_Hi3ypi?x!s<_BeFwvl<;daV*~{l9cu7grYw|e~7Q!9Y$zIwg6u|c=TAlX_ z1mAxNs5o#hveba1$y$&#I+xAo9UfoqIWa2fVZ{Ehmk2Dr4wH9qsv|ze>IUM+Vg(4zR;QgrU8zEy~QxuE7fiI zn3jf@?10bK^OnL+^(##&9`p-xcY9)|bu-Pus&K&X-}mC=)_D5#T^G(q9c%4k0dAc# zfg0^xpIKvc)~uPrk)!NH*!?toGn%j2gQ4<}=RtaKW1t6lw!QRMt6-CQRX)_VM>vQV zl^-xD4Ui+c9z1mhhHOx|+3sfsQyxM5dr|`e(~FB4w-m02;)THD4If{J`lhh^>G+I_ zyp#+gRw|a3EXBpejh5hlPey8ytLL@gCL!-1Q;dyGO+|HehV9_UV1H06Gdnv=oQhQ{ z?Gi${ZZAG^$1qAPj*W$`hlmR4)+6PJ&`~7)jbXP_nMZ;g6H7b8iOh12YTRbLPrFVW za+)jY9UZzcKZq*gvfL2D$>7d+-y4jRxBB#jQ#3+h8O+JU{^Od)D{E^Q(T^YCu9*I% zYgp6@2vM`P(%yPLm*boyprRx67LPC6bXwr^ zKslb48H)2zpg5%4+BRp{cq?qE=ZK_$nGl~8~*;$`*Cf=EuIO9e6KKgO)B+bvuN{EN> zGv$pshuYy6vxKjw?i)@&d1jIn$MvJh!Ph=OjlfP4PP~E5_%cn6lJEUfrS>kVbf&GHP#0xDA1b&>HXRO=P$&BmA8b`#+}o|^spteVQ?wq36^Q01NQ z;D(+t2++Py*mEEO*L(_V*muhjjB57;z|zqi0x3?bal?;mOPEK=M(|%h4N>Doh8EM- zSJ@=8RO~~0$T^2A>4XRNEi>jG-Qy+XNC?CCu4%K3=y>@~g4>;MsJvW7Jlii5l*mp!A$yzxmIPW)= z#GNOI&R%Zz=f)xLR>aY7f@6)wVO(Hi$R62|PYcfSyvrnQW~`eY$1{0`r{uj0!%NM2 zZZE-*UaxLsQo(iyk2W?)EH=jz9wgUq_mS>Ip>F-dbUmVm8H8Ci>4xUl@>;PrMU<{C zXfsAn&ix#1LXrWX`C0tdpqM}f^As_HZO7yB(O0A=RQoB>bAe1a0hXR1(Uz`_GiIt> z$lSStk2&Kz$VQlzC<0z1>fdFna!8W3sa7G^(VSo2Z>4!bKAcQ{3iGxf@dMG%M}JK3 z2&ysMT^p?uZKdr{N3_J}Egi?++T2pyH(hdUh~+|Em=#E}Pi1nDe$}-&$nAKn(|NfL z0M8$O7w1wW05VR0(va(<-C)NoeKfmSP%)K>4(njscQkk->Un_!7%$B78^JpAae9t& zkAal9K!4p-cz5TY56svZ$nR}-fv<_$B{jVtrx!T)lR08{HgYsei_<=F&HF!GksmclzW{G zC(`hU5&dNA==&rn_5SUcG3_G`a`H!nkJtUkwTZAMW*BPUm(ss=)-6T8W*9O?rCjOJ zK8uEE`}PFG0@ngvY4VlSth=@&p1%_LK7sLVpme4ABATeNkqQJ~_(LAEu%lMonSv_c ziB`n5UWY$&i3E{>xqIMkE4J3`N@M09lO4XhC{HfGEuqw2M|Mq3S@5U~4o~>-|0uw< zF$b`ipYZ(Mia9l_1!_(ZpJiCx{rrZJRY8^ILQy6tdP){d3F=>UDT=(j)Rn&Zi5va^ zK!}vGE+Uau zS?}8ZOr1PlIAtGV!Ku8=+pi9O>=Cr#+u*cO7hi2m<`b?SnLYPC0nE&}_oY;Fl>%wh zA3FkoZFt}fpXs6zL80DSRqgB$WH;A-15dG<8zMZsL(JXaM%Tp=?}x*HkDqQcHYaDE z4pM!`qm8dy{_*D32iBM^U%IlYCI{r^j~UW#P(hq#%A$l66tqTr*JfX`g&xO3#h^+} zKr-AYfkP8j-rpxX9p`)`fIRN_L6n?_p^#z0F{rQ%B&tQw`d`Hx#=ShuWPB8j}_5YjYkp8Brs(Zn@06}a$M4!|JG0FD42 zF|XH4c=@3^|3Hj~<5v|Qs5abz4EwcY1JvMD{6|?$yp#CkcdmFU5m6Iug&cWXL;7*YpkLjQW&9gYyBZe{bH_}P!-L5^ z>(?CjZNr2oFmfyFUUJ|dBJdJ!3Ju&Qc{5ZJoV;?7hb!KJ%h{pyc z6n`{?w?yzgWY%}N-0n~IB4xX#EbFhS34VNt({gab*1i2rcJ*4;?w51m1&ECP^exh{ z!k6;Slq2sr_s+uH&))4%L)+u(dC|*Xu>o71+iL?kOXd3%GVN{C{Prt5e~7#L$PGF0_F|rBV7S1{@2Qy5#YL<{$lkrm z!d7yZauO{t#>(3#{@2|3X}0E*TgB?12B067mZ*uFpo&}~G)+x$eU4w>P-hVrYK&?( zO4XSnf79C>?Bu_ozYJ5VC%+q@{!@nCea5?q&qNvD`ULK^z_|Oc2^fI(h z9x&#lcHna&-;#8CpRJc7F-Itu?3hEvkWSA@oPXJ|i}oTs!mtm|Qg*&tHzvQESbHu& zAU4a`QL1=c^B0RMHr#0>%4Aqkn5XSFm0K2B`4+a35kjYSHngt>h4{M931VT&Jx44| zd1y}e6R)D17|deg^XxO0Z;O>c=OpM7ng`*KmmT*6>t7n~2hRLkZ#|LJ$jZpm zp@qZZdmMz{**Z4~M3Y1#aqbaf$+Ds~IAH9F3hq$5;NJ1^GKmOGyC*|cWs}Xmf0iMD z_ea5d?Z>tDHqLJfpr5d*dnB@p;o@OB6>x21lSo0K=GY*bwwrg~P1N{vl?S=zv0icA zPlmc8RXFkwVkbA`*FyVOp5j53AvwgntdlD8()zcXDcIZEFQ*IAI= zE1tUcN{3-q5kI_-F`qU%50^u))3Vf+=Za?!Dbs)FP}iGSYb&+J;eB-Ie|v|qJ?r6So!Q@a%|~w1A6Kx*y-H=UsCRa0|SY7Gq-F}U2*jo(y z-k|gA6bKO7BId~l>*jiba6rCHi2}1|5dxxoB`q$sgBYY_p(5ct>^2NrFsuzv{_Z`?v zna^C6YJ1$%BC9J-A6exy>!LV z3YoN?o(%2M@UBE&>h{k_`-+8}IRCl{wIkFqv&bzLftKw*Kk+6G&_75kh&K(8+sgW7 zN2wF^iI<>#I}Z^mhky0B5|JODn>R7JIo#p(iArZ5OSb$cA8U1x17F&I9TRim1OEdV zz4`wGlxpQUBle-KT2LizhNX>K?N{-30rugP<7bX^im5I~FKpd@Uq`GhKQ!If7_2F; zvzvxEx%rr&y9I=}x$g&sd7jUFBL^}&;r0bGzu&y0QbtroGR1f&H+NAJQOC#t4*Id7 z@*u#fjNf7jA-B~&4`qy6UJCb+EKx;)ffj5vhLzbcrrQX8uyL#eL~_{S-IbVoETP+W zK+nYF3z}a9yHGO87GQGD%zJY6_tNqGT#(0$*Kua%G>x5U%@f4ekc8gNPEjaV? z!iYG(*LKk`XvF!A-cu^vz5RzbHw{9^hVi?yO&wMS(cc%h+Jr)S&cD?R&JY8{BqZ2J zL(IH%S7?7qdekPrT6?$=SgNo@y908^!Mx-kC`@W=>m@0@+;qyl1#$!Ro;iB4#ujoy z)H@VyuOp#ZPMhTfZ{m<@!nShnt1Qu6`Ibs_v|in7@b_j_x-uy1qG4YH{Rpp_%p7|> zps|P2R+Hs52X50LA3_)eLMqcI9WS}4$7@}X7pw|w1<4wu$?A|;E|OPiv>UF&Nr88n zrxTO=LVF)Xn>jg8uC1~?hPf|J zJ$;+C(C6xb3!>+#*+G{S@H5=oYY{O4H=LWKiaI*zV~B1!pg%y6TFZU5^Oz5xtXSM+ zrtu?ppUEGbne=~?o)q3$GV8B3)88)WFUnN|YjfB-T-a{gF{<-CO(<4#J>gs5*=dq_ zYverg?Z*jUH$@rIhQhQ{ElcKk65PL)M4R#G)ns=ADt81`jY}P;b-y>|Ms6PtphDfZ znE;p>3UYspqHBVy1JTr!fJ_{oSPA~C#23qgXO7c|b@qRRCj4JQ`*Tbn1AvrYZrFe< z*se=SHom^eoB3X&@;;Qp!e^AW6{VAJXGUc0^nFcr>O%hJ zz3>nMY%;7wdGqBj@@w9@ImQ*lN*A(^*B0RiFUcw6_fg@*zp~;rq_L-3|h5 z6`c56cd__zEptu;HXC!lG6%V}GLrL%AO(FD$F>}6G zSgx|^2PNysnqZ$hEDHQM>l`4ZCVS#-zpIDZqep^3;lo3374V>P{x(>O2mIB`?cY!( zF+1Lx<(MO@+Z`;&itf-qI4q+0TlU4@u)OQw{`lLNJ(Qw-on)V7-`dHUTKk%cA=n*0 zZ4esw;?t%zFCQ(@5&%+Wh6J>az5COT;$ARxGo@PSGc1s^e3;%tpsZc)g9nKYH~UC) z8rj7J-T5CBIWD^8Oa&e1UzffR7{+vzVt&7}uhkbFdn~epf`r&-&f2${ZXv)CNT%BA zI|5eDwNZ^|54}pxC7Q6N_;0x|*l+W-WA6%5t$=O1y13jEI)(;+ksh)J`(xyOuw2A* z+0$FaFC^3ttp$61ZjtoACzvBvecBE+H>gtdqV{}xwH_>|v=KpkM;Qm{7iOB;n&^<_ zA3+?+bW3fk&G7-r6?I|fa{zqcS~69HLv#CZ_a4ehbGW;7dtdkR)QuEap|ZPN?%t=( zf=_irIanE<9e-2{D+OF*%mULOuMkny=@9+lg-c49Ta7Z~g3RCFtJ}7D$DPcPa{AU5 z+@Luhar&Z^%=;h>}5RIqM%sQE{^> zw|$)4B!6K)WWI^Gj6Pz;NSu7yw#@_&injy(uSRFG(jeGz#m~0j2nSXvorDZ&%Ypqa zw<)W(DJ`M(GVHYD;<~Oi`#^5Ww03<4Gc(BOp5=}luD8e`hxvoHTZng{yC1S()B*kW z1n&>cL3YeY*69~-8=MKUq)9u?hNCV0i_OyfG}s+Vv~~3h_rBCL8!-r~hjMZ}{3wwv z0M$=qGF-p^{Nwe5TJ0eAJT^@Ih)9QZdQ~aIGlB5msKBfeVrw=Gw?7ocaElUMq})u3 z$eUS6gDkLOQ;g5pq=)uMrx7j7uy@Lhr4#^XWRfDI6GhS?-7DyU^aBOCmwelSiRbUq z&$XqypWo0^!YN!bG&^o9y!zE{q0+m$8unqDKb+Y0E_3LiqV4!F!(=JL+qUMOAsK#RaB+>8 znEd{~bm1xI1`v^?p)e67)i0nwySCo;mB8Lz7==fXP&62`0?I6$VQ+-&R`wy*$| z)fHOD?e=M?`!mQ8cZAU(W2oOn=hX6@`Lw_mtkd!(d?J;TF*_0)C3J^p$`SSW3~S~h zSH~Ri0cJA{Lg;m0C(T)br2$eoy#)Lw)$R}y4KIaN!As@qtkH}{m`3?!_tPu2mV%Z& z^!kS&p4WeTmk%+or~HDlBKWS3HUEw$*2uT$aC1M@BUWTn7Lme_=(2J4^szy|6U`YF?%URUfbXDRt&0;` zphxUDF6;pZnKx~(<#GiGTt5utM{1&CtaFHY`QoC6ukF0@Z~@vMc<)ET;XQdRwOj&q zY@U(bK4t|tT^3~)|A-bhwSCJ- zADP@RO*W}7iXqw@C|4tAQy_kqNq9d2-))pnk8X>jf}SiC({0iCdXSeFh~)D8^a%$r zFf_S+>pDI-ogWYjM6a9qX^G+DUHPCEeE@3a0w@5KJRnb~sv`j_0-s(v#*$CR4qSl- z7jLmE&>+u`nw7Ou*wol~1Kg+(*NMTNS5^JvAAaJ)!aR%iYO?q=fboOs5dcS>P#=6f#4<;_=ScFf_qngfZJ=r#letPQc~iI z8Hi#$U~GrpEN7q~49_*CSJw{u@DDW;P2%pZ$(5fP;~PWZ_mep(=k&`sqETWJaBo>o zMlLl4F!D`4X1X8TRFx}Oag#k16!}}Mz!k5jtjPh?H)%kCZ~cPxHEnUzq5_Axthe9Q z4+PZ|g35|*7y^n@t@wtan-rIrBxz>yCt~tcTp;%Tt(T;324Ep5ERXlYP=Z=5SyF?N?>GkQ?N!&sCPC_O68Kba3^ik+jU%^M4@a#eV`c&+JMW#w&&8GG zpg0yX@$jx*RSHIGTnv91{9Z#}^|XT;I@l7?Udalac53#U2dR7G-3P@J7B>5Oa5Y>< zC#7tP8B8~eugOE64w7c8>3X=sI|FN8fE!Fw7`8f4^Ilo+@Cv(-8yj|2@c0eFL_x$Q z=5=+n%@6XYN4QGLU)Cc2p7LMqPVp-Q2i(l0FSUBiy-LSK4?I#QCA zxVg`SaGavP1qS=a*qg^^a6-U_zpuB(1pLuPwbehoAOB4NHz3SMMWDu0EH@1LEAN#B z>Ik(J*|!dP8pN*_ef5bBzzPBD90gx3e9#5ENBT$mZM!zJmlh2qpcu56r6_L&UxIQ; zBBuf@gd+L|IrjCx-=AS1f ztgIvlmAkB}DsIkI10A7}V2R{8XpPjO@#N8g#Up#c`;Y2=qfDp4hEn!E zWy4&&smVpo-??}rW`1$26vvxBH|%|4sc09b&b6*sw9jc%@vvj#?ewvp@x|69*uCk( zX++3iE>MEfl>ETruQOfPHGEiF!DmG&(=Qr97j~MeU6wYYO_`#ABTkAcmzulafW4>dMh>+a)+@}YP&d~QzEbBV-~S+VudGGt(P-~ICBTf? zJ?q3GOA^0x@#$ms$|XvmbuUr=;S7JuNG*^pSQ+oXOIk52TX?iJ${zodMSRr<8Jsvf z9j0%7tWx2&AKGYh^AQIM?V|Tg#P14eqZ7D?f`xVRo9-j@Q=VE~Rf!HNnVQd)oaR4s z^TV{PO@~bXTUuS^4|xYon-Bf4>IwU=(waff`q@Uyz;c4x(kVatmxn)MN0y&;q5G&7E1|>b5dDTZ z+k@$lEps|gy^GZ<+QHShwL9Oxb6)?oJ#;)Hs6Vc?Se8EfYRUJqovhQm%A{Nto*f=_ zpiqq+dC`>r(6JJAu1af8PLz{&zFt2}hJ7HztXjVJIYpd~N<_qDQNK9-a|p9FM3n!# zE4Ymu{-&$zG5oA44BSll;y;WZ&~fALy=5Jn`rkN)qWb?9w%7lDKH2}{Z$O>=`bJBH zYEabBeYyYj!q8W&E{yDIXnY8yy&B71AoFXTH`V4lAhc%#N@-L5ESn-63;y{pek|6F z4G$B6`!s;a{pxl~KK*=r?9{Z!vt@fZhUj1CAQLa0LggXo+buwDFIWe%Np&OQr_jp# zNqmdn-tfs^b*zG00!e$=3BA2Xs8hx#htXc$sp$~3n@6x9Ku8>lxr>v@#*_r|&cKtJ z0Z(~98=G!#WN?ARuw@&>t5;=Ts-*^evr0;JSa!!r-*UCy65}9pSBEEOZwIwFv^M7s{jF21 zd9rxf9f9%=cx0ypY($Q~Pl#Bh8crumR^}B>-C?-NXoE=-UrT{f-(-ryTptvJp)nHL zOR}53J_ud+VwH$k19$wrRmCH!-zem?VquA1qPOMc<;7at%`RaXBTq2T&da_ZrJyT< z9klZVS~xj50Uvv%G7p4Cs~6dre}JTv)Yj4>^#M47)S_YtDW6uuyg;|y-Rz;zU!5I* z^8|ey1oSw59o00ZBtamA`1y%J{s=KS`2c*g-{%VD1Jc^fs!YJ2x7Mwk2k7=8=+i+C zxu?YPuL`_^&;zmf!ll^s?{}}am1B=EV;HpU*~}wR7g$SUZyClfQ-`-M^6iFikc7eA7o@vB@VN z7YH0Pp9FnH8b;>0*Bxje613u^t2iYbA141#{-A!pOZ6!z@GY~?rqoG+u#?RMAzohm=M%ZA1_o1@=dji7 zlCqgAjK2TZH%A|Tv}O2>5ZvGtS5*fby*r%@-!n zv@&siQyq0K>1U3tT_O6Wt<4J(HA6btfsGe!AEAI<%d$E%{#)L0_uCIj3_}jRWvE$L z1UrvlFwN4zzS&4T;9e`i`T6~dIc{teX1gYf-tSl69ksNy0L~+?ngtf>bOohPZ6G~c zOEoQc@zh_J{xcyebH4`MRUgxhR+nt_zq=sKH@MlZ9#`e+`iCPJr@(jY z^f|*#>YVZT=Cc4Cpt^fob;jnBMCUdw(DSSz>fQOfVa|n7{wwx?&Q3!hax8`1LE?S( zp!az($7?2rai)Oq?WB@LQL@z!20ir=i(vz;@~kf(tPS`MisiOF*% zqccg@He^QO!Q|z;l8bC2G8a`ih}x8>0t_GWyt|My`KmAoY{i=4P%(L3Jl_|%*C8E5 z7#VqzQu&FkRcqTc?NA*$IG$HGKe)lkS1ncM-umBD$MX(^3b>xCesxpkazcBEg?wE4 z);(d0Nauj(P-sb88&h&OCfr5VEp1_;q_NRBM9<&N)iv8KOVskVdrc)TtOG42&PXoC zoSL0ikX~Ia@?=aJP&h+v}Fh!d<(iIsQUC<8jf3Njpn50sq~ z7QQ^s9L{jnd(-Hm;5rD#RZ|v|oy6oDBVeiV<<3k8z0l!<)_O^j0*HM=WWG3LEqgd} zl;Wr`6ac0I4t$@CwI~o;_>_v{4}T^kqT(!farF-E9+=2q^F?;oX#bA2_#U!wLKkoVL!k5=w`WXHbqy_Gn^!|59 zE92hT@ZcXBH=V@9^Ia(BoB#FXJ^jIJ(F0V+XCheGSzy@tdjcspDy15l)WATb7TU4j zxA#r$r_wLJ8&suijyfsX*GLE)?+Jx6r^$xPPUi^+#t@`D4;@^E&E0{szEVnz*Vo-9 zNu&!5`KC%y${zJDsHq5S$WE;Tq<8IsrxGh+jOqtWRDkrtZ$BJIHQ9qAWz-3`j_@7< z5%4>@pOFR6(dy~nng=^h+^%?bORJa5g;YRHOw60dIm}9~eRI*wdcf<=w>kDrh7AaN zZkOZZ?vbZ*n1Xu0!e69yMLb-+Nk)8balNXdq|l+1%e$f@k;9C%(@=w&3)->wB7%e$ zp*)`_L5u!|Ne<`N(;xX`*>47tGqhOjg2^Rsr-k^L%RMI`b^Q< zum50l)?q!a^?6nBEx3NE6;N z9pI7;K3L#pSRu$u8%)E0HFfmofSlSFYi6}({E_Bu6X zzURo~+0kUNUCUFY{FABrPld_7#Ut-j7g<5D(>^(Upf+xXI=6i)k&n?gm$Pe-^A=f( znvd{Vkw&{Uq}5Q1e>R_z-8z8w`UM2UTUTdB`1;=ckdyOdnu;Oe18wcMdo89WH}17` zQWd>Pjk7$np3CAXKv<{#oQw&krS{BRB@~YMC@rYfN@krtT=MYN{Qha*{%L;Td*+}{ z8y9Ywdwg~!Q$MF%$X#iw=d8ywQSr@3hQdZMNd{5PCyP(^BSbJ0>5T{NUpU6@m#KVV zQdvPZ^?+a`oniiuioMN{P+ZQdDd`} zF+ZqFBuFb1Uah1X!e;l?Y1DjgbUTB+o=oZ9c(>IfVC1PwB-Xa2NDfJ9Za7*O4>u0LD0dZjptJ zB%;S&9IHf5z)xqLG!)XVMBLmpw@gkyZHVk%i!berm^2qf?}I?F-G%@ln8Zl6=~sG3 zY&j0hF>d9cJ1^rw0BlJ^h1kW-lx{3)`$D#yD9j zafG8%GG_eH^z!T#*xp>9v)++pLXMJI0txrJTYdO^!@uXYExht_b^9jW)PzHUxN{*+xd+AOV5f z=N$^5fCwu~E-*h=$8`$+s^q@k^OL*Me9lKs7;|F4(sl;%3s5Wlu^H7`$I#P?gQ4eS za@Xge&bxW7o3DiE?TIDIasMrP%USlvgUCHzt@NvR#W;kCZBWH0I;|Pqk7xhxb3<b-h9l<9@Vn9T-Jk8qSyI2<@6tU9er9}AiuujAc9QZhCPSmZUr)6=pagHfH#Ec% zpN2k^rX17NQjad|^-HA(r3k1I6LU3broV0@amlWp=2o2&6W^TOfZo#4NPCddTbcBl z{l`6vo6g0&z7yXQP57KLwmyZJEZqdZjg8?0C+lZCl9uvZ z>E&|T=Xa*S-tsyxk7B9E984Lr&MuciwWPn%l0aF~(P0(h1%}nxdiM6uzMmWrsaL8F zZi$kRkf8RI9eoff59^=>L*x$qnXAA7MzcgUvj)|k1r`_$#)|R_a5c0~7L7V^f#pPi zKt6cw8*TDIGEZ)xaA6-Ye@0wqyW5SuF&Mlkq1;FvKc6rnP0dz;c48e;Et{tw#zIxNaJY8ys}Zb6Z5MUn1KMJ1%9r9&DdrD2fn5Tr{&T0l~2 zXi&OAVhAbeW{8>Z;`hAIKK6SY`_KIyqr=>D=iK+Y*0thX=PFj@jh+j3#gOX2Zr#7;2%j+h(3DZ5qk~dE!%+yXe;}o#|wlZwV zl9@v2=;)ZV4yi;%3-a@We%4Q{e^!e9^&a2aO`bnPVZZ#{;DzkQ!^e2jf@w;o=9=je z5Lbu?y9f8?ilSnE^#_xuSa(OEd>*KWRSdH$P|55o z$YVha^2V4*^*Dr{hP7}T46c1jhi_AJ+Io+)zv@R zig_*Zre>`bLlhqO#$z})uk*5D3BuadFtz|OL0IL$K_@2_#mdfcv(w_o8MJ`+qhAC% zTyDoY$AgQ$MgDXb%X-GnE~}+Q21>9G%edRRxlc88<*^S5ZXe$Ki{i$p%~G+Fu~$@Y zS$^tr^n{@5=u2Fo1rR2Hgh!zXwH@=)x1ex5?XIzH7JGH1dV5kh)CMsrxEmvqI4

n)!)9k`;wnjW$yAf7YI}_N`f35)QQ(0xono~f~M9Aqz-&7PlV2q zy8#T%yoLq}NbVHq2xGf)f&dQp=*$dG(L_lx-n}A_A>#Ji%u-=lU0X}r9`MrGOfDS; zwtXB+6s#E}pGLRcoPO#Wg@iX6Z~=V@T{!jAFkW5F9zY#6?Zdz8J;d00o{Lws0RRF_-Zgnl|YbS@I+T@{iiZB`f5Q8T|I!YJd#9dh>>W)KC=E zncfLR^8p70v->ln^{Bnpxd%v%D*pRNH;A*xf^H-yC->%{qO?@q0KRqV7hQQ~(nYo5^|K^62`>lqd zRT^JbUO4Y&RHkknp#G7Tbl!H>c;J-hSDtxGom%znOh&xCId=>QQ}-S;3ws$QoB!78 zf3X1O<;H6$pQqMdhjxOqwq)GcyWL@qzVx+3Z2Dfb5%nFQU zbx}5hVpB+a-eXyKPuH|c?PW_pX&zT2ek&SdVZ=7tRW&lM;EU%~3YWC~9?%O9D>?^w zFVFJUG)6JUb}3ja+7~^@4=8>(271G)D1j_IQ~50unERa6H#}AqFI-tceaI5f9N}we zY3Vk(u`YZN2F2-zp87Z+el_C8HGIqk>p=M8O$ry5pJVA3gF;Plk{~=Qrhy!>gUjHQ8jDnNSMch0Z{ zAix3Hrp+xtA{c|)*N$?Vn`w+Hb?WdNXLeqBcnC|-kHn*>S-^-lS<>_1T)JA9&~$7g zC_ri*;S4#}rf}+qmY0{4@XP-*CMy+&hcx($5<6BjyD$9V{xB;eR6f|JuWAr2>$o6Q zph`uHd&52F=+1zT@vM)=T7C$=KPI zHAeILG;qq+B3<8p3JncZt=RrW+ z6c`{J%vII0$n<|TrGXv+xpK)CdS2L!T7~ak2wFeM9)BEOUClUUPhR}hu+H|&`_4D; zlBB_lQmwKVO9L+$WZF|55yskANl)G+FAs|!bT4|qV}MZ^e^z*)`6FJk^7XrSRCi=; z3tpR9xYkF45;rwCx-AaLKybTk zTX|DAe$_FGjUy_Sbx$ZGCc;R>UP!-PlvqaQalh^|wr^l!c6MxVaB%!Ojqr!=v3$9% z`gV{akYD`F6&xK+I0%H7m6g@}3I;gI!GeA|ofhk#`T4uZKA;L&{mouUsGIWTOJVV} zJf@wY*ZP8TcVvDP+$k^D>`MuYHzg~jq;3S<~#KD5~cC9Wt z*D+97N9%2VgG9PTJ&ynlUI>SI1wr^)+&29%`e7|&J7zl;BV9X;pB}>yf0;4>L79Hm zLdbY>J1}L3B;Mi-N z?p{;i9>)`cw{YvV%K5#}t`!Jl`lBlY1?w~Y3KT)8Hf-t&Hs+MKA5c8znVHsW{grn# zHR*3*o765HX1274ir(w8B^PVK%;TG%uCwCLkkSNxl`{lI6L=Ncckh)m123ghn?+jTBlnP;XSPLjt;^5#M{TK)V>+JV-x(u_c&#>u?`##390eD(r zm(lDUJ->+OVeaK4>qkGlPBx7Xu~tTA%JEQCZ;`)^HKTQJlbiB((Bfw4SozuC^kec| zya=M?$}W6^7Jg4A^@IRDeDUq%R+#^~mJS|BJU%Q(m+)hh%b{SDAckC0^!~{rk2-uP z!*$*ugd%BYxZR0GGm#|vqkMJ-*sCGckmb0p6&F)!NbxK_UikHz3@>2qXjhDSCAj!l zE^bu|b@GKxD=Xz{$byz=cNVfSZl}Hh+u}82u_m8l|Ce8>pnw3xuz_s}J#S_@FWy@v!vDyjyjswaoPm=tw)UmK zk$Ns!3yUYMq(t(ImhDRq{wQaX)y|6w!k;gWzT+KFJr0jUE83x43f-0Am46xl70fuQ zwB#SZfug4Dd)Y1dm-sW@DPTbAQLh^jl(BJ#TzB97PQ2>5-vc zb4bw;u(~&$KBPI~=ij4+8wz2du>L-Jk;bVQFqv$Sn+qpr5~T zYA_-17YsacIz9aG=}an~STM;$QpX%O4{*-M&>1#X=MzZf5Wk7b2_D%@Oit5k!OlND zJL_0GDqg}`TswNkw|$W6&*@?{^vHE{kSQf4DIUtf`Gx-O!%x=@9vG2YIU~kiV((&nQn6FoGrba`se*NJHKnl zqW0QcnU0=SSUr)_l{qw3%@An28WZ&h%p_+Cd{k6+xRohh==_J_ytZSt@&S7xF(j%y z3!O(`F8#}8L713DGa7>)ca#C-Tq2M{1$P%e8-S9x$lQws`St7(&MXnuAvIV!)QGvKSx-)GrF8 zdDW>11C_?KWfp1_9eQ)s^lT%xu?h#0r5@*$fmNVGNwu7oW0=~qm zs%JD9L1U@HL&4D^=yoVZZ%G{Ry(`nx^##)e6r?_06P1@krW*o`wnLZVH zND;LLw-?F~*pF5T?EE*a>o)BgIb<0$upT(DjxVwe!k0?Q@xIp}n(4A;!%rXC9&8O< zPQZ(dHa}nsH^#31<7=CGHtAj^cD+bI@~2gT08)Y0e<3Eg;$>pqS@N@$vi-F=A1g+` znK|FSP@!4-G?pAxxQ)2}DVW^hILliHy#W;j9vSM@v#HU10rmn<6QhF6TGfhIzVGa{ z4=JS0LgM8%7w}GJG1!*3s@H(jnPJF$Q2G7R&{3|x+lC^Kfgq3w@>S~t#Ocye@@b_z zm<)Qb1G)pB2{rmgcK#AaZ|2cYw|EV1N$$DqvRDj&ua16;+ z&KY-)2E`-at&hApxWkq;Ap+h_iyyQsAzUC-aA(UkA4ruOwd#2E{9_n!ZQiiv)A!uTHy*R)ah4zqO1}2O3HzK zYaMnI{5((@geYZTn)GrzSXw^vtl|}9WzMelUrJ3URCy;hxf?LGVh>S1QAN1|O%i0u-NSk_3W=(|Lf8U)sOP zvY07=iFD5ebhi}8$$<|Exv{qq5oWq|qHXoH=d}N4$Tjjo51=q#+O8Onm zY{u1#%r`+D4YTLR*8>iOo=~q}zppBe%`NE(17!S)<#~Tog2W&En^L(JqJh#&g1&$Kt6dXvdLdqU|u|4%PB@UGn^1Z+kmLfSPEsg{Yhn7o1Ezzz z5=?EFKlbcn7f_!sJXDEKPM{vDaq)!llarbX;_s%HrKTx+-?!r|9F6wbR@+&zFYKd1 z(3k%B5sr=V@^tqy%}9_Ho6i&N0?B)!GW@EbL=K~i*ST5xYB>oc!pCRTSOza4%ufXA z&iZgO?-3b%*PWcI=7$GZ2daR!L{)=k)$OY}0k(exrY9J&((R+{SJ?%7q48HbAp$jN zx}TAFP8aP9C-nX|=FVc}fSs>ckYxj~zyppP9GQg=Z^oq~Mtqjcg&w;@q0)r#a2EI* zZcfYq64HJ5=7iMLaBz@kRADW@X}(7hRRm8EkfJdLcZ3wXkD|$%rB9M&^{T6@2ZCO3 zjFOzOncKVXy$Qb+72aoHddBvU<_k-;}&tLZlUZ6MLlX*vZLPYpcIYk(a z6RTez|8MS~qr@k*6Neyc5mp5gyY>=9+pnbX^!l&1n^gKNihP!g6Z@|+c&Ws%n~&l< z|3E`U&c*rJ@D-fBGe58Y{8oV`Y%$o4+BxW*-KXI7ek}lh2*WdWJ%uLC_)75fUXHCyJ1 z&K5Qg+z%uKrsHTR0-xfaaPj9MDLVoNB2ul-RA2Ls-R9LV1$d=URbN#8R{6;g3j(j* zy}fxwaxIhJaAW{l52QeAGsyxO3B`M-%&HkL&y_epTa|!U0*l99l_gBt7(b_-j-Dx` z&nb<<79lyRi5Ao?JV#y^INW zfC|Khq->dmY|_Kro=oew6-jC^Ophiu>I88`Qjltd1!fqF306O92p8Y6w&OGgqLajX~UwUB_5K04;Zt4 zsiLCN?_+CccLbUUQi&8d-l);iST3(d4UmA4^SL*AmB)e6?tBBWi8!VpW9R@kDg|=e z)+U8&(=n<9NttKtvicdih65lTK&na@b8+U~IxcqQ|Ky-Y`OGFr+`+!6h7sda%#q^G zfH_E0l9w&>0Rbwgp5dqsGS_YM^^zxqXhxV0k&K6V-v&F!=v7Ke1f*IYz0lpo zr++MIWr&6okh&#BS^n0qCcoM$+wet8 zJoGrwHJh+VTTy~cnB-BwCA0Q0iRyXu-HHeAOD0ehZXO;%w&<%^&s|*jazEn%JdbgF zRb{-=MQrw77`!hCoM9bkx~G2XZc2W+xfOxb;}<=Y`*|uM)TZ7wAlt$~xSWi}-a}tYyFT zd58LeIvT_wDCqKn63uEPYYm1$YuV58D8EX`&p`T^x4(}%toQMGfQcwlZ2U?fRDK7e z>i{G9>JHNhAYarjvo_Utv-L}0REUXDyEkXq=Eop;g4J z0Dxk5PtTa}vu~<+R&8+qO}drXc}JGo2j8(LeKj2P@PspltZi-8HQ%&(jJ%LAo!|hO zPAhDPn3yOrg%tUXK==M83z~s=R)Q5x- zATP?`bR;ZhWiBGjq~BjzpZQ=1Fm(5>l7+1WmMvRA6vC|AqCne6_Am@D+zS5&Y)-q7 zA6kb=tQ!4`o5Q9}aNoW^O(qy5dzDfG%nazS`GB``?s@`_Aj(~0#Xso zUQzduG3A$0TrbdVSU2Wj7#>uFo)gWnr3iBqb8gI_2PIBJ;MR_)H=~)AG50NO)@Kc;^dcOrrsb+5|kNZgZGb3_I%% zLzS4}gzd;jxo`6Hw-Eb%IcwIat`#N9Nm9<&;QaB*FZDeAnNc*N~ zup8&s^5=g*U2VGg(`7-Y}-nx&&;c;0EPzfeIyf1fP?imBuq2hB{ z=0+e~zp^EL9@=0wQZUw_?b2IH($PpIC!9Zpn3n__7khnMYp3BweqSDmBk3a0_=efy zZ=agh=Kw*PM_-|E7`uj!rSuFTmspj7uKxkl@B(T66P5o3cxeWB{9o8LIjlys|8FeY z|NG0e3HMAS-dnzpU$$`A+k3%m_J85y1fomOvrYICq_@tPJKjG^qoTUQB5CCU3l0Ua zIS_dzr6hV_ie3g8sdiGiYCHdZZxtpnIf@X9G2^zo5nj%#y!rTmf=1);#a8afQPsf;igz$2w|iC__QR+0#w-IlcejPXMuU$dHxg`IJRYZ{JO9Y;vJo zkxYt3JcE)Dd;2U=S@}}h#^#y$PPgM8`BPr-gFn9#tL}Q)l}kK7{4xJqjn*^efk*7$ zn9VJdW|L1!`l8N0)U9_W7yMs^%{=6ZcVu?l|?rIiKCY-S~CpTn!+4FNaZAO?qGRa^s8Bprs|+ z$jy-qxs9QWFhGRL(cl(Fi*ig&OaLWjvSIgDmcPnI0@Oe3+nT*R@w!Bw+ zkY}q}zQ_XEnkWkk%JFWoc550HdmM$RA87D7ykwnpt5*~QkCfTgeZOD`S`Y`VI~j?C z`rn+aL0#xj1HT7;0a|9~#j}~!eCfTHa1G*IHSXN$S0tzdSPzjfSMRof8}SxxXT86d3ixz=5L>Qquqguf#rb? z0fwWRhUf8Lg;xMm1goqhh5-9K4jAIw+=jg`a$XEI0GxY=Njr>QG;s6Q*-L_63wTs; zkPn0$MkTTw0l<++mI{D?KYi+JH0FCu^Ww0ikKiXBv=>Cey!`?YmPh8y!p1I~krLn1 z-csL`F)oiL1Su&kZw>z! z3vfgkcp`0pG5CHMb-tlddV{M$^oKwu=H|eY;{9)p6ZB+3!mIeh!TY*79G_iYh+Z6o zRs9uuMvgJX;DG!xU6f?C`FT&dD0KA?TFbRO7i3u~F(K_cZ4-C>ET9o=Xm!JXliY7M z_>0JzRzp3JPaT7UNA!fDWX(9{2G-=o&+3WrKpUXO_S4lplPVqfKqQLX@jurnH>gvr zrYuHUpH$XL6@pPIVR##HdNl$?@}EmwqeG4^bC4bP{tl*g2%wZ>VhYxipNt9=ZBAaRjy?aj^(Mn`{l z@W2@wBa06@a+3a7p0e(sMSpdmYg!sqDsfe@fPN6+y+#`}Rf7;##&fu{2%bN{t;LYJ<4|XD2@qaEApH3P zJk)Ciq-I^Ys(LW_q7ZdMvmo}Iq%>;fc4G(_rd6H$GDb#18)QQ|Qm7BY$HzYsz!9tr zxORVtJNX%KfD!!pzD5ujo#0cW6c>5(?mdY$7X|0mZOa@K5UBFh&(RBM6bjO9iIS+U zk3&|^z1+FpvZE$%lITU5>8=AjZz}aEtlNNAcqZwBtC5|KQ`ppvy%qNe1zg9UdxaXs ztm$Ftd0xe-hT$FzzrGy9dZyz(?nEXf6PhkIJu2Dk0qVf>BEdj&kSl4m3GA?misvQa zLY-a$)r!v5#^Q>+)1^07c3;3Q$eKE|KIxqsjT8RcAUdW#R7JxQwabkv$^-}B2uYXp z?*UD&bmR?t1@~sUu~cZXesV4li&^)sq1lsN0<{0OFRgu#+py$q*M0=soTI4P3(Y8O z{Ek>RkNg)hAT5c^pr(v-?|3Mgio!LpVQU4!|(S15PA_y?ex3;$8sh=nH zPR@k{;ly=VN6Xd>gg9(A9TlwGxBFz*X7<#(E?T?)L|6H&_UARRI}}S zZx9shrNRctbs`=K6nyap22_D!9PJA)6|M)_qUaD2+R0IQV-^Wl%yrS#Ya0tS*4xOr zkW`fYUN|BLWzWfGNs)Kj&qRA;@%7QwiWw`Ar<0rtvM{NaHU&3jSVO46XGC{X4$8jb zVT$^77T^Cll^Jr%HsCEk$|u_oZ9;nXQyl>e=R%ekLW#WekUoV>bKTH?gI39w60#M- zz{5^B>koRoA-$7;Qw^4Qff!l)+2r4yF%77b_maoU!J^0-dM~xeHzl_!R9vWIY|3mX zFUnT19n4fR0vTj>IrzHTpqHHYv^zbU+d@iFo~Z_qHN^SbIgY3(u4T!7b@6uU5)F4JLL|2}DZVTaCzH$xyL+m;?(2 zm<9f|P+S~HJ!-3zkSixNvaSq>41D2|^Xpk!CD06Xyr=`I&+KVDPkc<(KKN`uL|%V> zH2H9dV2&c8UwVB}&gHF!05Qr>Az_tlbZ@9A_~@^3$%pv)3{||fU(!+Ea}zm%&MUcOTTKpu*=j#P(cvaO6MdGEyJIiD#svG*cE!J+a(;PFTT@&^f+jP({9@y_-Y`D7cc??pnU0tyQdtx&jjb41H`y z?auYJx-XMpw5K#>XaM_QY-wrurLoHT`CezF&;EUDS((KnZvjDJ0Lb~?c`I!gqBk?E zDx7~cebc}G;IDZp5jF-kHZ}<zJ-whE|Nk zxig}g;44nZ`w}$nSMIR^^7q9@Rp~W{svqvGUl>&`ZP7k*+=#7 z*|f0eRA3#O1R^Uq4fQp}ouM%$HDoA1=lcbUzUtVeD^b>$wvEG{eh?@-QK7~_I+?UCWxbQ1Jku0b|q9acd z%DWNbL%>Zuf(F@!Qak2Cp_Oom8h0T}$F5t9uK}0Mt zyvyB)WR##+%Hdkh{f({EfEm)GO8|hf*;4u&AhMJZiv|PcK_Q#S8+^-697;zSfmN)U z`LrEwc5asAxhb6m*SIQ&9qnyTpO&a-L<_$q#{LO{8ROZ3_rAsoBcLp}e4ZgfezrDP zqU(Lbyp;MShDN-pz+y|?|F|$Ax8a3G&HVs(j{|d&u?6{lN1W%za%`dU?r7+tDoERm zs^xbbQ_~xWi#}ew6Y2ZQh|T}=%E>&uDa%2zYQf|}cF$m%D71lOtnXG8s7Mszi;lq) z&Y}iP^9qL8fB$SXb#%-Xrw)$BMUYS>?3RVKu08;oKwen3@UqirZF;{IdU9Xd#=3*1 z=EvK8)9a9}|G`|W68s0axWD73IB-Rkap1Jp!XReVLjxKzgMDvY&CoUcAhRsiN2qkY zquz3R3AbUfQpzs{O+^$j-XK7dieVB3{i(O;TIS>3!=(dp|CKCP>f>~XG#LUq=-;)$ zy%DIjMB)?F_1Rl%shJqj26*7BD4~_Z2S-NzIsQ%5a&QDBxm#r8N-N6&+{VU#450b2 z&&6tK+4s(+Rv*)9T@#^0h+I?1^$zBu=|(Po#hXhnQ4aou+zQnPKC zR?={3aA|>?P?t^A#ZXbeu7R(^Xs5l<8r=U%<7VFj7Svv{y9jx{EjYc&FZC7J`5|2o+aX zuW~W~;Ce#pv*ET~Cy{0M<}sUUo(Wa3AEdxR3H$-%0RQktr>1(`u1hR!ZP_5syM9n8 zR7T?XGU=NDXH>sc^SAz#>Rlw~3~?JOU+-$pyLECeY$?w9+iT!KgqiU}vx&vT9fDLd ztzXlt)(rI6GaTNi?%!xEu9&nEZy~WeH;vo4b=A_7Unwf#sS9gT6Yo8^ELi85IADlb zp>o9!_=;D$B~ofnd-<7DK&m-M?6l>84F_w0TF@Y#ugO1Mv29PLIPn9wwH05`76H+N zY?ML;*hW82?7b>RfHt_`rPT&{H$RJCQVu zl~f5LbmFV8U=~%nhbJ~V`CyAm1}O=yJ!c{Vr~ggdg7hu;yoN}12979mjdIzdSQeLw zgxH(nj+kIjHb1(4@WGLXvf$m=R5TjoN6-hkuh?Lw8lPqGZca#hn_g8@Sd$AvM8J6{ zNHc24+UW&9!FEbjCezbAs)7LoklxgEms+%~gXcedBTRTT%CptQ)hz4%9XOb=RR|q( zY!egfz@p`-O8LJGBrJcwYB6O)&+mRGh6G9imB@|qkedS@aus;qaQAN^SAP;}H zh#iFHAy-X@q_**c=#I~z2XzD}w@rZIu1>f%)s~xvF)8Gm8G#|WJxcmX54f*{CdJL9 zl1JZDKbMy>4NmVIMT=t9imNf_UM28!f>Viu$78j%F08v-CcXZ`)t|saovG%D6wT}(c`1=*^*kFF+?5ZWNETsWv4Wp@=v}Fc zM|Gi5q^U&od}|5sh8V3%k*m_cyH!wpGBJ_g z#8p^SgrlIKP`aHp0#SY%^s@O@2@^O-rGw!^C(_;T2c=o!v2#?@zeqm-b_hCB0Z;T_ z7f>}Th@1tb`Wx7!GN#zDS0fB=acfkjrKYF9m@#9>XjDl7+PS$m8w3p@Av7dM@G=8CQ#Z&oX{3J${v#C4cZ=QS+l#)Lj|Am%{-0 zqjKh#ji%=9{^TEK<%7Qjx71q@Ox$uWR3+fDOA%BuSc*=FXpU18+4el%Xh>~|T!nBR zedIm4fkm3Rm{8t24ZQ39nmlc-#-2S>Z_iZL#`U!Gw+yGL1@F5v!Rs3W_NZSL8C^SJ z`ckDMnvcv7#Hzpp3Pfk1(l!U(@9sh-M`Jnec?TspYQ+?4JCDLq7x2|k8Vd7^@37pa zrgQ~D&72=*J@~*dzcVlE9p;~M0#I*Ukd##kKl!5s6!D)ZH6BU&kDPvuPu6fppqT$@ z$C0VuC>9zOlco{~XT6xOwVzw$-|8#}^E9DpR<{Dk2cCW7luuEB>!-~fAI2H$+ISI$dE-oM%{ljMBsk)$Y z*Gtz&o6w`goTHoT6Vzc@nAQNQtCD^LOgeF%$dp0v)J=E}Dr^Imr-x)nN8yi1kHBmZ z@E;ZgqJCGkr|pU_oVs4W2*0FYS7^WD)USUA(inY2G-0Pf^v7q4I}65K3V zgJB^QJB;h8F6#$=ZSuq~#$}1na*pKFAO=9QGsfV`Gg5><9+8smyG?xm_N|&2nx^^A zbOjpARjCd2Bh=eG>CfP9DUDGUxB2RK-9iT7eWxH%KPCZMs(qHoVdIg8$o-Zkko@`D z3CZApb_nLBe?HG<7~UY?8HSHXWjP^?ZJWAqAdGk-S95)#UrI zZqixEh&O}xgrueAT4-zXv7hWuf^!_cx@#>`Fa<> zR;xZ|^+om=P102|?DWM%vRAg~73*GWw*UD3TXC`}{2|6&1gr7*cNy7Upv>7wgWt!# zowThmM%-~EC`s(Ti&vcO%;c+$wBh`ALWD8$kdE~C%QW81)SZS5K>+~(>FwBtF({9S z8G+44IU%@H=|_}O)OjTR!R_c;hyI{PB@9BDV^QS#bkax*M9v2`lW%X*KCq?o^r4&( zIpuv&<`dwn8_)c}1#QiHhO@-S#>XFVO1IXNrJnO2Rpx*K%-w~bq<1Tul3zvs6BZIu z9Qan@%l-GcjlI35rtxs{=b0+cBQr?*{vt3?((nKQ&=LLQ&AdU+S!n(Sd?Rn85Agb= zrKQcb`Upczj#hhS)sNHj^n@#}dF+w;s<5yxNZ3O!q@&)&*SxFa8@FbD8CmVWO!;3RDHeuK zVj|K2^j?Kki7}5j10+6CQdVziav}Wu+~V9>NySMK>@zgI@xM!!H7GOUYKv1 zC zctjog2n>SX(gSNb_RV@E+P<%+S2Q5)r`r=~;ZG^IPk0^HpJ)1OwLqlYcPan;`BU}X z;(ou71@-e{DR*e(;GmKMJ1uDct7%{yxt5QE#dOPmjB4;WIC}fV1KBQ(!^G1rqxb<6 z>oZwJe__@A^+%~>+DGHYZ_Dcfe=NM{ac}KDRxjr(kJQGq)qkv066#jQULImwLSS$7 z33FB?!wr{)Yuq4%+45O5ZE#b3ld1heVp9Sq zjG$G2!vtPI1PPd()isA&d)(?3H{H{3-kCukOXS^|O7^3tp@~`#>+7t0JuOJSsyf|z zA<`(=$cWs!k_t#ZLfQY7=tgsj%M5F7Rc@q3`55|~=G5>pc-MF}l&oB^^ud4ovZ8$$ zYW2;3*7q9H-U=zbxP1^Hh3x{hf1RoJk?!2GJ3<7q|4xwWw9 z1+oXf!F}Rs_yKCj<3_GcfY{l&UH(GiA#7P3>63S{97Q%g$#~){!vIYq3#Ua5|MjrJ zHb90L>*?Xkp!!UHjTb7$UHyjrofsciQ%j8t?DYLBgu7;kh|4L368_!!;On8$egH~3 zxuYNTnOxOU)ei++$H5feBy&wAa~PIlQKLv-fqaWGGCJ}mHX8N?;V{L#!y5-P7>CEp{O81B%9&>1*~`j6N*w^bDSZxRz=)8+TCbvT>OQjOk!ZRtF8KVf?O%s z?N(2JD}69tbFoPlhCLq^o-sv20yZ`*$==dEs==7DC=_WFuR~RQ@DIvz{N8ngb{c&| zteNtqO?T|)t)te7gPea6&EWzznvC>68bZ)2H=K$tDs`;dlV>OTsLm@yeG2gz@vPAh z@u|N$-aKDjl^W%d60>}nZ^5DRaE>3tcDRn!nX_ec_cnxP0k) z6ZExS8+Bdec_NWpZt+z6LjyZ3e_l(>ZHojn1V-B`3d!ftpJV$QAVm=O!+y=}0+1cv zb&}UIka3ZQ8{Xh8ERAgJxvzV;H7jl$F=Qa0E~qu&i?&qmom--H(4kf-q(03PnZLeL zq(i9)FPE_eKUMwtxhN|QR(WNV+AxA-S+hI&Xu7e-w#akdEQLBmzmo1go)q|UbFufi z@J$`57t32cy-4s7%S%aq$F;fM`0QVzwk>*Q=+Q4H1{z#$M3J=6#B4rf^KeU{?~O;6 zSJc|b5%Hf(@hlZj33`YOU`R!SfIPw1uV2~B{f;rJAHz{neJEdh$4i^ z8HMWCM_@m(b3evt^T(lv=B~~*XrX>Ls!w{^D_1nleB-E4yM5npjt))*0jK%7v{6*4 z4>>wS)97TKdv}7)bL{l;YptflRq?@v)~4gBKc{LJdca^8)$HZ|({;orP)5qc$w_3I zvmanMz=LUbb8=)!@ZoJHGfG;T28n7-jVw}$bP7ztV~ux z0dJDQ-8NF7PXzkVm~0!dV;6q_xFA*46o0))%@eNTILcTa&8!Ix~evDIiofI znYfl08F_+{um&w3Zj<)u`*&_St`-ZU0-Nv6H#`P09}o`;kB)u`vd`n=<4*evqDd(! z`G8$?psfeNUjM$q`&OYO>OHxQu z>>+Ti?OCxbD@UGARwp%AR(*-!N>h3Iuk=xvzZsInF~H#)R|ezm4sZIC-~N}Xs%qch z{S&`lRDvlDNW~>tWhhe$;D9TPBb;C6NAk-JZeFra&i6^XZpBq=EQI~7nOHfFetuJ_ zxD5Ur&u!1L?#phBGO!Qq;~^lqL%zea@IQty@-(;~nRu7fYnKyoCpsdH>;p0C(7ziV zRs6f=@BJ^d{47o(btP5LYVMEhakPK_o8LH7hZD3$>Rf3@oXpJ7<0?)7R=&0H9X&z& ze`@>AfF_!*(G5rw5fDXseG~-&=}1?wA|N0g1f_SBE+s)kQJN@%)SyTWJ@ghp0i^|` zw}f5-7$8CjkmN3}&wIZg_x`+heq?uNXJ;le=ggco=Y(B&Mi@hNdwlOwW!}=?G1QT$ z+f7Bej0rS-2t6x^ztUPJ%WE}~Bdh8gDthwwrPe__e@E7;`W>~@X!XGmpFbhD4SjAy zWV;YERPmka(v6CN&)OZL32HRp82YaCe{N~P>^}lcV~WslvuBb|d1JFg9N;0uEDM%2#-oie@=;YiD@KmIB{qd6YJiWb_4UTGo?a3G)6 zmHSlF$S5*AMAFs^cv_N`?<8EA^-gf5FKPa0X9mMMQY*}yIpxrT{fdmX@bD6o~%RY>FL2<4384r4nH-xoi+PkN+=G9d!(`?8q^3^wK^N zvyHzjm)+LQ086yRg0A}_g1=>H|67|D-XokdF){Iz(#AEgo!Fy;i%a!6li90-D#`7q{R~ z>(mP2x_#Y5kS-5{$nVuUp(;4wtO@*y=4OMTs9zs}TRC%pMk^MIv#Dwfmt<47@P0l; zD)yk~aZ%!hH5>`GQ0>O-vLIe~WD&QEpAhd!LL`Y2X%m^uCN@8B>69r=v=}+1JP@vE zH*_lK-o29)8KMyA$LA_>`YxzxkbpySF`FPV=QK3%MCNP8fW8c@`H&|-#|B(#WDBsw z6gc9&p;~arM}?%1AGsCA)oI1CPz#IHZHfsRW`tLKJirGQ6K!(h1CR0eto1N{{rXi1 zd@4d9JX0YoP8!*0ST_&YWGv4{7UUxyRb1Q~MD2FgDhyoLTF8HRJI&zZ3o<3rTKhJS z=0}xZp+#pmh=LnD;2mN(krv1t$>sJD`I~SVQhhKE_WvZqm2!yK-|R{V?|)11{$Dfy zumnJKu3tFeePSTpl?QKeUk6MzbElO5R+Y#y{@+?BU@ZTyG7kclURS+Th5%2HR>+!+ z(h5XYiB(OsymCV#7*{RI9P3%NXAi#6_45hZDK(C=D+7A%MD?I(bvCo@}$aQjl-bM=B7KXB0r zC;~qOU=7_hNho;Tk~vEA&}q-mgD+FW6m zv4zdDvbJ}XR}a5trgSfT(QH&nRwftO{5cdFvG8*uoiD;0vLs| zx}X~xx^!>586U<9Y^9)%I`T=OV1|tE^8KXbfoD;qVAIa>JkY%FipoLIA+S%TvCIoB)RTUVdtD&0x&D$^~5Y zSp<^8O^Fjaan=>Kb>$@~= zUWD~4&Sko_I(|!kH`^FSaMJQPpaEqECR0akQ=yVp^qw7hkaeKgyS>(HLS(r=(_O74 zFVsPoGM`*e|jW7(3JTpL>rkjS|R7I_G$?wJKO4-bX016fr7uL7EtX zQ2B%AFN72FYU3nI^$(tZEOaeRb0ziaJX#zV zB(b#)yKS#kFX}`G8#KMzw(oiZI&3d!462wx*9QmhFK#+-lPcbNjR_MVv&nUJ0fdBx z8Nkk>B~^`W7VfSA_ z3SY?#jKxb@H9Wk_;pNqGVd7j}V#}y#v=C-} zoEoVTda?oBBhH+GU7pZvn=YvTfkt;l&@z1Obx$_dWglc8cT7v#Qy_ z@Po{Ta68cMrjEQf#SXINmyP#C+;?udM01!b%(>f0RSXY@(qf#H9y_!y^8(=9##BqC zm@ho@Z>0AP|H&+=SEES?kRY(+4Q-ISY=1M4*s}u1=xWguNA?n+HXH9fnOFoJ=Le}g zXB&TdRg{t8z5`Os*`_NemwnGWlnh76V(&YKXY*-SgxlGHOW~cKqVG>G6iWW86qgBK zWV6r1o*v;|PmFOMNVHg;Zc=;bTwJRr2*l5G1B~Xc)#xxd59qS-X08?e=@Y>4$jIeB zMQ89rSKQ&o`~LlRG7+2L`bOrHfEDb%-ZyOw>P23|%=}%{vZ|aW{ZJO?IKU{8w#9Py zE{(U}=1Q>|BLE;$__`#@R{H`$l`UtBkAy7Y!*+d7RF_%l*{%Lth=-uD%kh1pu(0{3 zj8mHii1LM8ZS!(FNR8LjtAZ7HR|B!rB3UdQ|H@a7i*4fBtZ~2cp;Cl1qUh?{!FmOL z`10eM98&3cq=^Za0O#m$0&l;9uwT2~{TX@v0+&}y;V#N!FPTZZAdX&=;#A_&tF!5K z<~zm8{B5iJYDP&>Wi|c59>Kc>vf39g>O6pHzAc0}TWd{dLKFFkGb}7@{I2b){w(`R z8*r`u6N1V(#VeyZhcVjdVTb)5$6Y#CLJF`&(@ATjSIFrdggZ zf&)zbTT*eMzVY>W1p|~Ch4%NoF()?@c5t1h3WZxgr_eM8P4tUPkHM8#BTfidc(`GJ z3Fq8ay39qD7MCdve4ac#ZSAlu zJ&diDp!Ww2qbrffkDzO6o+vPEhW$WhAkSfF;BVwTIdIZGf3~J_v7MVAiq-`uH%S4u zQ|-thP{5v|Fu8OiT%Ep4CAMn^_7e2Hr~c}7)SS-Eo3Bsnv-z8lq2cuRxglK&AAnW8 zJ$ME+wy~5{mb{X*2w3E9d5=rye`Bc|-x&3JJ9SAheA&}0C&IRqas~jS48$Z#_i0;a zXc(8`R6Hbw^}lzl#f5J(!?`ASr9HoAq4)NO-7Hp5y0|OWf1gCv1FbHt$BQl-gY|+} zYVe+Gid;q^^`sARpQl^E@Z#6_ zRUS}+PHkT!TV~OCWwF%S}qG=qnR$j?1S90)d<6#}0hli370y@rh*Kcy9MMg?w8(q;Q|PzJj{ zGQLS5y0$><#!7AKsFcG-b!I672lmItAGBqn;GJWnzhVxwdPAqVBSD9VC9x+98uB{x zNg5eRCxTdyzUJjwrYZOjDa!~Ik^PluxCJ<0g=y6~wH+_orHaY4Uv4DzzaYwIkT0J5 z9x{=3@qAOSI9(HqGEh88xw-{g%RpTrQ#CWM(KQ>_3Lid+vXX-WTE4!%&X3xSWK|#7 zBwIrCvidXOaKWw1&klJ~bdgOYmVlPR({R?mvb!^zlH(&0bj_u!M| zKE14ZQp+@sryHMpbdNVs*WDgSMi7Wn#%C?_UOY(LHkdk;zCj z1#O&YJJA`EG*!~inj~u5_@(KmSXaOC0GS}sojy6OGy^hI5a4(#1ho9ZHDn39dA^UI zRSq)V3ZareqCaSk*;EY4&Oyn6jeK&TkT$xB!V7pc&C!FS^d;|><~U)DUp1Ee6yM;V z>{zpe@n4S(qkvfe0NUK#(bMaQQ<`QgUoL$wk*<`aM6#Zm_9^}8a)a#LvhvWxb!U6Y zR07XPB7oQxT6$T@In5pNCu(5veqAwE98IwbMtI6%LDDbu77R7^D7LcXG>-px$UO?y zb)Us>Y#jE>R_ly$x0?Yv(+?PV5zyB6UfK#gP`8o|TT*=43n07R6dH1d2}vAUDjI)&gr|(WO)*-`^df~gPhZMk3a0dO2j{zQ zgP99t0qM#;eCtX4y6LCA91kso+~`8Vl&3s)d0Bb@ZSk>eXGKM1OqC-04GJw-Mxpzv z7cJE&$5B_nWBQ;+AA66fYWMRxw_XkUIW2c-IXG}37d^?=W+1Cb&}d?S)U*%AUl%-{<8H&gUV>$&BXrhCpD zTDmUMzYBGWZRQM1)1 zP-Q#pAi$!UJm-bFm0t=WqDF>6@Kq%ZXww|aL;X6n@$JKR{W^KaZuIa-ndN|DGBGs) z){FWX(HUKp?59Cdln}^$+GlrkZl0Ds0YFIbTSE`3O zl{M__hQggMoIh5_F)GDDv;WVUhmUJEUTBY+7PNZw-16t{m=k#A(QFEPS%F3}>&9AM zOb~Ee+fVlv+dKWf0&@2WZn%(3=E;e7@Pyv+|L{T=94A1+L9s>c5oE~V3 zMVM;UyLazQ%Nm6*-vtKJeR%ct-}lunLRFP5a?ULl6Ee<8%9TKmHrW;w?GB|tp?QB0 zfN{@mu3btqHpxwe<{@Y@HCn>aT=s3q6tSiDCXt}i{WTru%czJZlFu?0Gpb@W6^dHqe$9H}b7QiauZ1Ct8}d zpK8=o=+0B(%C|QgRusYem7tv)t$%03Y$m&n{AY#P2!-eXM6st1CZ$>fzWJ;^k|w}a zLU$zMbU-7n@)Y+kT9Zg6HEN%|@g>58m7r^sJ+|b~@33vFad? z(H8Q_w3{<-Jb4;f!u*Z|t{qITK#HqoOb83TT6!}DIqex{n#RA9{<-7&57v>1&B1x0 zXPO(sHYJV!5Va*&@wF}gFzjBqW?oHxys%!18$PuU63r!E3cK?$(jxy`7`*XJn19Jn zWg8@;zBD!QIXXIinu*{ksSG;|fD?JZlWA2|@)@du{ROv|O6p!@qOKrzar5e)N3;e;sr&9yjkM19J?J| z-Az-RG?#Qo^BWa_p(Zr4fppIKyvyX)!^Gf#>#g|oS_8qXqGD3Zww4eGBAKK}8+jr+)S=`Me{^bLMn!snY;8z~#(&VPpa)Lj(trW?G;2^51El~W6Ob_5mYtw`^v3wlVv%bZ`WKM9`d==G{(gSKj0C@*t1t zx?fWX%9BubO_0HaU`_gWO@8vSbDF`N&bC%_n-8s>QRy;iU|?d>;)2mAWycXqZaW5a z?%xl~^NtsP z%zee?9f8@Mhdzx?pZg}>7hlh!Dfy-T;mgYm*KqqbWkbWM=!&tml#W=0Kh3q0^SFv% zb%y#cSy``xH0xq!X~(g2286bJYmD6Gdn7!{VQ=P6Bn`QtUy{BUj44p}vkzl#qz{iD28&`NGDsbKc4xRjX=;J`_j~4=&CV0wfKsaNyhXATGb|IED&0Fq-h6~tG!j>S zP-9Q&)${uPj%~rzp$OZU8qD{rWy{7xf5~y=DwS(q9oF-#X-H5#in~C?-@OKY?LnmO3B6@v90bm{YAtCJr z@p;&%Fz#-{M(D!ntrQf7S*3YZWkGBgj0mdPePhl?PtUXl>S2|cviYpB@`&)W;$dk4Rz6@stcz))2;gK~G=Tk|C?*L{0r2*rUq4;k|$ zEt&bOi>^R19A(_hsGqN_6c_Eglw~|SE$vbpLbbeo#1aI==eweKkpn}VB{#eGa%E}TF5^)hHZ`W#DmNaMxiR)-el0O~X99TS6mB^HRFitm> z=H1$;jB$&;J7&w8?P%h+B)7E$L-6^8J!0O7(BPF!$KQ@S<-80glPyb_kQFwF6;>y;akbxwCT zS{rqoDxWWDE&%sZa41VaDns=>Q%9- z-wC>%Dkn#<-wKAU51Am5Ya4G!&57*Z6+(TL^=L}E+>-cUg_Zo!17}&HQZwoljKLn~W*QQM-#GqJdSGa@E5+Pmt}Jp6Fs%3g*k$)EtrZ zKQE2bbAFUnp{MwwSs06ohf-HXby&Q^)bsc$vL3*IhY+bl0!Ir{Eo}7^X{j|FJ04Q@i2emUl6q3#&TmJmY-ceo0RU zhw|O&7v|CV*&OWt53Fhhkn70~ZT(8TDnZ##G(_DqeIvuhquE1YDWv|QJ}$O40@rc zNZdZ1pV+pC_I7itRM2EoJ#Q!H9N=IQgfL++U%f9ydpz}|ArnaHKuW`>I#kYAU3Vl?65s1NiG;1a?`}GAXmD1w3Jby&Dd<^2P#FTK< z3X2}=v2apZFZ5Z=?8gCs&h@U&^@qnwDjgjMTE*GFcRGr*mshWM5^Uc@AE)OG{r?}d zR{x_3%l3B8YT{)30H_@;dYr1G2H1yuE2Z6^u{unowPVS)u(nV4KWcqd9KTO1wDBDO zw~u~~xUExl9?$b>8B?z@u{56M5)_sbd#nPxi&-fYA4SD8EThj0$K){rtMH)4U)FM| z=PF&^2H8(618TCp1Toe{cmqS$Z_Q0E&M3j9K0mWp8lN8Z{ z5O>rPvhBDg$>}%Yni;gfr^8pgAx~Of6cpbaI<&B)exJH&{|l0f9FWx>-66lg+u_j* z0ANe)(#T1UZxP7v{dX8&2ROGn5?EUEN%Sy{`0E-8OT>o^;N;a^&T5VVpodfZG)f=38?1B^_W^%YPLnFiaIirAh1J8dai*hVsuc0y? zaAwwT_=3L?HPkz`F}UbuQPMzrCIF*bV*P?2HV>sBYm-*O!QX*Ew=0}Unv4MW+C}4i znOe$!<~h35V^gZ#lsFph`Hncb?5%H>ZTmy(4-@Ncdu({8?|~9DPWR(S7Y!Q-(5-)+ z0mf`>##^>NU2e_@gk3bC0g9g!AM=^8yH&a!ep@As8^m=9nEUg>SKC*ou z2?^W1`x_FbFr2bzZu!t^Q33ltxO!XTgV=;3t&~A9u?*s3Bl=fG%RUgty;XLyGA_Z+ ztzYwXxZ?_>wT9aVSTzd}=p(Hpt^6%ESgYL_Q=V!AH;rOVUIc@^I@x`XX1^pUsi1*6 z^r9D-kuM~lUyBE7xp@iK6+xui8n>rLJ&qZI5f?rtZyn5I=kU4PLBtv8t(%|-*6p8T z#1s+vrGj)IW{Ww;#9;aD)B-3h1=)haffz=rmncGA?ztx_=P-Eov&}wFoT{&ib)+X^%+>!k6-ofLB7E4+VCZ|JbwLsV|(G)r$`@}1$ zcGc~gJEwd9?JQ1RWd;@#K^`EwoNlSlR+<9QrOs^&h;|9#6#SsKZ{k~8+e}h)+j4I| zq}g}EURK2ZotNP}ed+d5HJs%_m2YrE@aD)tz|{9saxJlak`V>P)zVYC4@X55YyYv+ z`!9%JX=Dw$`h7V$yYS$~z)pIR^uFTUzwbQjzVL44;g~NS!L9$e)@U{w$UWHC1P?3& zT7OHJ#e;TuAk&;VS!#4=)eeBU>`(4_q+WIx`ujH;GV~?e0}3lSX`9BZY#VwNRpkYL zcHLd1jYkapp-?AV_AM6r`6R&seY#`E31~6bICuyPGiqqrfz*YCSmi j-?h@_^8YMxvsBu5tRbxq=Ibc{nC{-x*D1YW_u_v6<{V~Z literal 205273 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 Hb;SPwueJ54 diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi index a7d44844008e7733b01a1891a39824d7e4c7171c..44ad56c7cac033e027a09aa36cf20ee9c1e5d923 100644 GIT binary patch literal 7825 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 literal 7691 zcma)h1yoeuxBm>?ErK8^At8+j(nCor(hbs5gQN_NASD6<((#qkePNbHG5;4Ie0uTs9tfCBg4YbRDe|R{+{SmLj z3J3(&@zv4yfV_iRx!b#X*t-uoJ4)Rjlwn*sQ3NLa8uE=hwqMa@L8;H(?3|wuLz#ml7}4OL@b#{1_(QHV5(B zKPP*(s+@rsV&>~(sEbLV&cI)Lfl!p6@q}6_v`AekUdfRzl^IC$cLvC5jZn2b13&;_8lZ+~J1me$M3_ z2!}d{x%qLc_wR|w&k6cIAs>P(e3_>k0_9-HumcV08^ zY%@QZz_Os515!f6hh8?9*N4c|RNKu0as_fM*(2uYOB}Lp>u@4vGJ0lA3M{2Rfmj{n zg64Q%zI{`)9Sf!sG!N9#)pd8d?N8?0g5!6KF=OKV`TT%exJA8i(jj&C{cLUIO_oL> z83qo|{D2>!ZmE9GOoI#KxZ=+ALG6qa&p(aKc)=;vcJZ8e7|GHgkuyxu<*v9-Znw{Q z=83YsSyGOMB#_oNoo78iA^;gmYPu;Yx9wEqAj|4$Gzl`mJtZkInh9@p!D}gI?&RdC z#0*VPs?LcQ?A>!=>$cVvm$R0nM>S459T?!Jpk*oXTV=G|0ZI^LcooS z+r_@-TSTNPzc0Fa?mL}G;6iA#=K;lYm&HM?uvxAF zt_h|RZ-TFkDJ+I}w`HrdltF-ymMb4@2E){_e^iqN5%;T;(w$DCUDkp*s2SS_*8|zl znFv=YqI0eJ&32s@TMSO;p~I1L4K8{Uc(Wx3j9xj4kk|UuSh9gkc!eY-it_5%AoD9a zwg(*4qG`k>B5x|EZMv$gdVX#@k}&?ZOd}5aCc3Y;EYurl#iY<$#gg4D&UbjrNKO+O z`-&yC0uFynOG|54Sgd8($$c8*me(3L^}GH{bc@4k19*IVJfrohu#nSdrZ<7(?LAn3 zw}*}9*PlX~`JaclYj@FcOFrWTc)Ns>Z&@sL=cE+{vxIGbeY8sV-jgqpEN7)eeKNyQ z)6{$@Bq#_1>8bB|HJhqao{UK&W_CS&;?4<)22)o(7tT(XSY8z@W4o*W_$gu`W!nFe z5XAZPX^=*Nyq}*$sV+Ae*du_QC0aJi#%z>>Y^~shi)sJ6ZGMxtCJDV*`319EpfmA| zV&C$7+X~Ej=el9=_Bkq0db}db(cBya(lRlL=?+zXdETw-vyh-E%~zpEXo{L@HBFba zlC{<$LisicxX22EvTZ9#CPt4CphlXO=)fqyRl=2!IY0


Fj(y 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 UIWjm3IOGMXC}=>+<;;Ws4Gj(7xBvhE diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 98df3b72e06..824d72b31a1 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -35,7 +35,7 @@ em {font-style: normal; font-weight: bold;} .suppradio {color: #a8732b;} .servradio {color: #6eaa2c;} .syndradio {color: #6d3f40;} -.dsquadradio {color: #686868;} +.centcomradio {color: #686868;} .aiprivradio {color: #ff00ff;} .yell { font-weight: bold;} From 7336e6ecb85edc8f09094d8bca6b0d40c8b702e0 Mon Sep 17 00:00:00 2001 From: Fayrik Date: Sun, 29 Mar 2015 03:43:16 +0100 Subject: [PATCH 51/65] Call Centcom! ERTs got fixed! --- .../game/objects/items/weapons/power_cells.dm | 4 +- code/modules/admin/topic.dm | 3 ++ code/modules/admin/verbs/debug.dm | 3 +- code/modules/admin/verbs/one_click_antag.dm | 39 +++++++++++++------ .../changelogs/Fayrik-CentcomExpansionTwo.yml | 6 ++- 5 files changed, 40 insertions(+), 15 deletions(-) diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index 7cbdc8f8261..e3538aeb232 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -45,9 +45,9 @@ ..() charge = 0 -/obj/item/weapon/stock_parts/cell/pulse //40 pulse shots +/obj/item/weapon/stock_parts/cell/pulse //80 pulse shots name = "pulse rifle power cell" - maxcharge = 8000 + maxcharge = 16000 rating = 3 chargerate = 1500 diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 4c5ff2617bc..f2c2f08e0a1 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -7,6 +7,9 @@ return if(href_list["makeAntag"]) + if (!ticker.mode) + usr << "Not until the round starts!" + return switch(href_list["makeAntag"]) if("1") message_admins("[key_name_admin(usr)] created traitors.") diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index c2eb6d8bddd..0e7532d5ffa 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -1136,12 +1136,13 @@ var/global/list/g_fancy_list_of_types = null M.equip_to_slot_or_del(new /obj/item/weapon/tank/internals/emergency_oxygen(M), slot_s_store) M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse(M), slot_r_hand) + M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/loyalpin(M), slot_r_hand) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)//Here you go Deuryn L.imp_in = M L.implanted = 1 + M.sec_hud_set_implants() var/obj/item/weapon/card/id/W = new(M) W.icon_state = "centcom" diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index e5c3b465337..b8041bc269e 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -353,8 +353,10 @@ client/proc/one_click_antag() //Pick the lucky players var/numagents = min(5,candidates.len) //How many commandos to spawn var/list/spawnpoints = deathsquadspawn - while(numagents && spawnpoints.len && candidates.len) - var/spawnloc = spawnpoints[1] + while(numagents && candidates.len) + if (numagents > spawnpoints.len) + continue // This guy's unlucky, not enough spawn points, we skip him. + var/spawnloc = spawnpoints[numagents] var/mob/dead/observer/chosen_candidate = pick(candidates) candidates -= chosen_candidate if(!chosen_candidate.key) @@ -396,10 +398,12 @@ client/proc/one_click_antag() if(numagents == 1) message_admins("The deathsquad has spawned with the mission: [mission].") log_game("[key_name(Commando)] has been selected as a Death Commando") - spawnpoints -= spawnloc numagents-- - return 1 + if (numagents == candidates.len) + return 0 // No one got spawned! + else + return 1 return @@ -464,8 +468,10 @@ client/proc/one_click_antag() //Pick the (un)lucky players var/numagents = min(7,candidates.len) //How many officers to spawn var/list/spawnpoints = emergencyresponseteamspawn - while(numagents && spawnpoints.len && candidates.len) - var/spawnloc = spawnpoints[1] + while(numagents && candidates.len) + if (candidates.len > spawnpoints.len) + continue // This guy's unlucky, not enough spawn points, we skip him. + var/spawnloc = spawnpoints[numagents] var/mob/dead/observer/chosen_candidate = pick(candidates) candidates -= chosen_candidate if(!chosen_candidate.key) @@ -480,13 +486,22 @@ client/proc/one_click_antag() if(1) ERTOperative.real_name = "Commander [pick(lastname)]" equip_emergencyresponsesquad(ERTOperative, "commander") - if(2 || 5) + if(2) ERTOperative.real_name = "Security Officer [pick(lastname)]" equip_emergencyresponsesquad(ERTOperative, "sec") - if(3 || 6) + if(3) ERTOperative.real_name = "Medical Officer [pick(lastname)]" equip_emergencyresponsesquad(ERTOperative, "med") - if(4 || 7) + if(4) + ERTOperative.real_name = "Engineer [pick(lastname)]" + equip_emergencyresponsesquad(ERTOperative, "eng") + if(5) + ERTOperative.real_name = "Security Officer [pick(lastname)]" + equip_emergencyresponsesquad(ERTOperative, "sec") + if(6) + ERTOperative.real_name = "Medical Officer [pick(lastname)]" + equip_emergencyresponsesquad(ERTOperative, "med") + if(7) ERTOperative.real_name = "Engineer [pick(lastname)]" equip_emergencyresponsesquad(ERTOperative, "eng") ERTOperative.key = chosen_candidate.key @@ -515,10 +530,12 @@ client/proc/one_click_antag() if(numagents == 1) message_admins("The emergency response team has spawned with the mission: [mission].") log_game("[key_name(ERTOperative)] has been selected as an Emergency Response Officer") - spawnpoints -= spawnloc numagents-- - return 1 + if (numagents == candidates.len) + return 0 // No one got spawned! + else + return 1 return diff --git a/html/changelogs/Fayrik-CentcomExpansionTwo.yml b/html/changelogs/Fayrik-CentcomExpansionTwo.yml index 36b2a0173b6..2fa8bfa76a5 100644 --- a/html/changelogs/Fayrik-CentcomExpansionTwo.yml +++ b/html/changelogs/Fayrik-CentcomExpansionTwo.yml @@ -6,4 +6,8 @@ changes: - rscadd: "Added a bowman headset for death squads and ERTs." - tweak: "Deathsquad radio channel is now called the Centcom radio channel." - bugfix: "Fixed the admin buttons not spawning ERT Medic gear properly." - - tweak: "Expanded Emergency Shuttle dock to allow for more round end griff." \ No newline at end of file + - tweak: "Expanded Emergency Shuttle dock to allow for more round end griff." + - bugfix: "All 7 ERT members now spawn geared, not just the first 4." + - bugfix: "Spawning an ERT or Deathsquad no longer stops a second ERT or Deathsquad from being spawned." + - tweak: "Pulse rifles now have 80 shots, not 40." + - tweak: "Deathsquads now use loyalty pinned Pulse rifles." \ No newline at end of file From e2eda9cda8fbc48dac68583d66195d444f78dcea Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 29 Mar 2015 15:15:49 +0200 Subject: [PATCH 52/65] Fixes growing rice stalk being invisible at later stages. Fixes empty trays not receiving the nutrient/reagents/water you give it. --- code/modules/hydroponics/hydroponics.dm | 3 ++- code/modules/hydroponics/seeds.dm | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 7294b806112..d3a74ed88be 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -405,7 +405,8 @@ obj/machinery/hydroponics/proc/mutatepest() obj/machinery/hydroponics/proc/applyChemicals(var/datum/reagents/S) - myseed.on_chem_reaction(S) //In case seeds have some special interactions with special chems, currently only used by vines + if(myseed) + myseed.on_chem_reaction(S) //In case seeds have some special interactions with special chems, currently only used by vines // Requires 5 mutagen to possibly change species.// Poor man's mutagen. if(S.has_reagent("mutagen", 5) || S.has_reagent("radium", 10) || S.has_reagent("uranium", 10)) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 4c42141cd91..56c309a95fc 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -577,7 +577,7 @@ potency = 15 oneharvest = 1 plant_type = 0 - growthstages = 6 + growthstages = 3 /obj/item/seeds/carrotseed name = "pack of carrot seeds" From 2dec0e8fa47402bd64841a3e4a8995f05362a5a4 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Sun, 29 Mar 2015 14:45:09 +0100 Subject: [PATCH 53/65] Fixes Hat removal code by reticking carbon/inventory and moving carbon inventory code back there. (Mystery coder who undid this, Curse you!) --- code/modules/mob/living/carbon/carbon.dm | 21 -------------------- code/modules/mob/living/carbon/inventory.dm | 22 ++++++++++++++++++--- tgstation.dme | 1 + 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index f66371e3005..22a879adae3 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -294,27 +294,6 @@ /mob/living/carbon/proc/canBeHandcuffed() return 0 -/mob/living/carbon/unEquip(obj/item/I) //THIS PROC DID NOT CALL ..() AND THAT COST ME AN ENTIRE DAY OF DEBUGGING. - . = ..() //Sets the default return value to what the parent returns. - if(!. || !I) //We don't want to set anything to null if the parent returned 0. - return - - if(I == back) - back = null - update_inv_back(0) - else if(I == wear_mask) - if(istype(src, /mob/living/carbon/human)) //If we don't do this hair won't be properly rebuilt. - return - wear_mask = null - update_inv_wear_mask(0) - else if(I == handcuffed) - handcuffed = null - if(buckled && buckled.buckle_requires_restraints) - buckled.unbuckle_mob() - update_inv_handcuffed(0) - else if(I == legcuffed) - legcuffed = null - update_inv_legcuffed(0) /mob/living/carbon/show_inv(mob/user) user.set_machine(src) diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 8dc0e485288..876f23fc37a 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -17,9 +17,9 @@ return null -/mob/living/carbon/unEquip(obj/item/I) - . = ..() - if(!. || !I) +/mob/living/carbon/unEquip(obj/item/I) //THIS PROC DID NOT CALL ..() AND THAT COST ME AN ENTIRE DAY OF DEBUGGING. + . = ..() //Sets the default return value to what the parent returns. + if(!. || !I) //We don't want to set anything to null if the parent returned 0. return if(I == head) @@ -27,4 +27,20 @@ if(I.flags & BLOCKHAIR) update_hair(0) update_inv_head(0) + else if(I == back) + back = null + update_inv_back(0) + else if(I == wear_mask) + if(istype(src, /mob/living/carbon/human)) //If we don't do this hair won't be properly rebuilt. + return + wear_mask = null + update_inv_wear_mask(0) + else if(I == handcuffed) + handcuffed = null + if(buckled && buckled.buckle_requires_restraints) + buckled.unbuckle_mob() + update_inv_handcuffed(0) + else if(I == legcuffed) + legcuffed = null + update_inv_legcuffed(0) diff --git a/tgstation.dme b/tgstation.dme index 2780021997d..4be5be7fb80 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1059,6 +1059,7 @@ #include "code\modules\mob\living\carbon\carbon_defines.dm" #include "code\modules\mob\living\carbon\death.dm" #include "code\modules\mob\living\carbon\emote.dm" +#include "code\modules\mob\living\carbon\inventory.dm" #include "code\modules\mob\living\carbon\life.dm" #include "code\modules\mob\living\carbon\say.dm" #include "code\modules\mob\living\carbon\update_icons.dm" From 7f624b5beac8c6c33f4496b71d39b0657f3c5a1e Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 29 Mar 2015 15:48:31 +0200 Subject: [PATCH 54/65] Readds carbon/inventory.dm, sorry about that... --- tgstation.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/tgstation.dme b/tgstation.dme index 2780021997d..4be5be7fb80 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1059,6 +1059,7 @@ #include "code\modules\mob\living\carbon\carbon_defines.dm" #include "code\modules\mob\living\carbon\death.dm" #include "code\modules\mob\living\carbon\emote.dm" +#include "code\modules\mob\living\carbon\inventory.dm" #include "code\modules\mob\living\carbon\life.dm" #include "code\modules\mob\living\carbon\say.dm" #include "code\modules\mob\living\carbon\update_icons.dm" From c2dec1e970ebdc8493d8786afa17ef119565ee4b Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 29 Mar 2015 17:11:42 +0200 Subject: [PATCH 55/65] Fixes runtimes linked to acquiring and losing mutations . Moves goon mutations to mutations.dm . --- code/datums/goon_mutations_disabilities.dm | 184 -------------- code/datums/goon_mutations_powers.dm | 43 ---- code/datums/mutations.dm | 269 ++++++++++++++++++++- tgstation.dme | 2 - 4 files changed, 259 insertions(+), 239 deletions(-) delete mode 100644 code/datums/goon_mutations_disabilities.dm delete mode 100644 code/datums/goon_mutations_powers.dm diff --git a/code/datums/goon_mutations_disabilities.dm b/code/datums/goon_mutations_disabilities.dm deleted file mode 100644 index 9da8e51307e..00000000000 --- a/code/datums/goon_mutations_disabilities.dm +++ /dev/null @@ -1,184 +0,0 @@ -/datum/mutation/human/wacky - name = "Wacky" - quality = MINOR_NEGATIVE - text_gain_indication = "You feel an off sensation in your voicebox." - text_lose_indication = "The off sensation passes." - -/datum/mutation/human/wacky/get_spans() - return list(SPAN_SANS) - -/datum/mutation/human/mute - name = "Mute" - quality = NEGATIVE - text_gain_indication = "You feel unable to express yourself at all." - text_lose_indication = "You feel able to speak freely again." - -/datum/mutation/human/mute/on_acquiring(mob/living/carbon/human/owner) - if(..()) return - owner.disabilities |= MUTE - -/datum/mutation/human/mute/on_losing(mob/living/carbon/human/owner) - if(..()) return - owner.disabilities &= ~MUTE - -/datum/mutation/human/smile - name = "Smile" - quality = MINOR_NEGATIVE - text_gain_indication = "You feel so happy. Nothing can be wrong with anything. :)" - text_lose_indication = "Everything is terrible again. :(" - -/datum/mutation/human/smile/say_mod(var/message) - if(message) - message = " [message] " - //Time for a friendly game of SS13 - message = replacetext(message," stupid "," smart ") - message = replacetext(message," retard "," genius ") - message = replacetext(message," unrobust "," robust ") - message = replacetext(message," dumb "," smart ") - message = replacetext(message," awful "," great ") - message = replacetext(message," gay ",pick(" nice "," ok "," alright ")) - message = replacetext(message," horrible "," fun ") - message = replacetext(message," terrible "," terribly fun ") - message = replacetext(message," terrifying "," wonderful ") - message = replacetext(message," gross "," cool ") - message = replacetext(message," disgusting "," amazing ") - message = replacetext(message," loser "," winner ") - message = replacetext(message," useless "," useful ") - message = replacetext(message," oh god "," cheese and crackers ") - message = replacetext(message," jesus "," gee wiz ") - message = replacetext(message," weak "," strong ") - message = replacetext(message," kill "," hug ") - message = replacetext(message," murder "," tease ") - message = replacetext(message," ugly "," beautiful ") - message = replacetext(message," douchbag "," nice guy ") - message = replacetext(message," whore "," lady ") - message = replacetext(message," nerd "," smart guy ") - message = replacetext(message," moron "," fun person ") - message = replacetext(message," IT'S LOOSE "," EVERYTHING IS FINE ") - message = replacetext(message," sex "," hug fight ") - message = replacetext(message," idiot "," genius ") - message = replacetext(message," fat "," thin ") - message = replacetext(message," beer "," water with ice ") - message = replacetext(message," drink "," water ") - message = replacetext(message," feminist "," empowered woman ") - message = replacetext(message," i hate you "," you're mean ") - message = replacetext(message," nigger "," african american ") - message = replacetext(message," jew "," jewish ") - message = replacetext(message," shit "," shiz ") - message = replacetext(message," crap "," poo ") - message = replacetext(message," slut "," tease ") - message = replacetext(message," ass "," butt ") - message = replacetext(message," damn "," dang ") - message = replacetext(message," fuck "," ") - message = replacetext(message," penis "," privates ") - message = replacetext(message," cunt "," privates ") - message = replacetext(message," dick "," jerk ") - message = replacetext(message," vagina "," privates ") - return trim(message) - -/datum/mutation/human/unintelligable - name = "Unintelligable" - quality = NEGATIVE - text_gain_indication = "You can't seem to form any coherent thoughts!" - text_lose_indication = "Your mind feels more clear." - -/datum/mutation/human/unintelligable/say_mod(var/message) - if(message) - var/prefix=copytext(message,1,2) - if(prefix == ";") - message = copytext(message,2) - else if(prefix in list(":","#")) - prefix += copytext(message,2,3) - message = copytext(message,3) - else - prefix="" - - var/list/words = text2list(message," ") - var/list/rearranged = list() - for(var/i=1;i<=words.len;i++) - var/cword = pick(words) - words.Remove(cword) - var/suffix = copytext(cword,length(cword)-1,length(cword)) - while(length(cword)>0 && suffix in list(".",",",";","!",":","?")) - cword = copytext(cword,1 ,length(cword)-1) - suffix = copytext(cword,length(cword)-1,length(cword) ) - if(length(cword)) - rearranged += cword - message = "[prefix][uppertext(list2text(rearranged," "))]!!" - return message - -/datum/mutation/human/swedish - name = "Swedish" - quality = MINOR_NEGATIVE - text_gain_indication = "You feel Swedish, however that works." - text_lose_indication = "The feeling of Swedishness passes." - -/datum/mutation/human/swedish/say_mod(var/message) - if(message) - message = replacetext(message,"w","v") - if(prob(30)) - message += " Bork[pick("",", bork",", bork, bork")]!" - return message - -/datum/mutation/human/chav - name = "Chav" - quality = MINOR_NEGATIVE - text_gain_indication = "Ye feel like a reet prat like, innit?" - text_lose_indication = "You no longer feel like being rude and sassy." - -/datum/mutation/human/chav/say_mod(var/message) - if(message) - message = " [message] " - message = replacetext(message," looking at "," gawpin' at ") - message = replacetext(message," great "," bangin' ") - message = replacetext(message," man "," mate ") - message = replacetext(message," friend ",pick(" mate "," bruv "," bledrin ")) - message = replacetext(message," what "," wot ") - message = replacetext(message," drink "," wet ") - message = replacetext(message," get "," giz ") - message = replacetext(message," what "," wot ") - message = replacetext(message," no thanks "," wuddent fukken do one ") - message = replacetext(message," i don't know "," wot mate ") - message = replacetext(message," no "," naw ") - message = replacetext(message," robust "," chin ") - message = replacetext(message," hi "," how what how ") - message = replacetext(message," hello "," sup bruv ") - message = replacetext(message," kill "," bang ") - message = replacetext(message," murder "," bang ") - message = replacetext(message," windows "," windies ") - message = replacetext(message," window "," windy ") - message = replacetext(message," break "," do ") - message = replacetext(message," your "," yer ") - message = replacetext(message," security "," coppers ") - return trim(message) - -/datum/mutation/human/elvis - name = "Elvis" - quality = MINOR_NEGATIVE - text_gain_indication = "You feel pretty good, honeydoll." - text_lose_indication = "You feel a little less conversation would be great." - -/datum/mutation/human/elvis/on_life(mob/living/carbon/human/owner) - switch(pick(1,2)) - if(1) - if(prob(15)) - var/list/dancetypes = list("swinging", "fancy", "stylish", "20'th century", "jivin'", "rock and roller", "cool", "salacious", "bashing", "smashing") - var/dancemoves = pick(dancetypes) - owner.visible_message("[owner] busts out some [dancemoves] moves!") - if(2) - if(prob(15)) - owner.visible_message("[owner] [pick("jiggles their hips", "rotates their hips", "gyrates their hips", "taps their foot", "dances to an imaginary song", "jiggles their legs", "snaps their fingers")]!") - -/datum/mutation/human/elvis/say_mod(var/message) - if(message) - message = " [message] " - message = replacetext(message," i'm not "," I aint ") - message = replacetext(message," girl ",pick(" honey "," baby "," baby doll ")) - message = replacetext(message," man ",pick(" son "," buddy "," brother"," pal "," friendo ")) - message = replacetext(message," out of "," outta ") - message = replacetext(message," thank you "," thank you, thank you very much ") - message = replacetext(message," what are you "," whatcha ") - message = replacetext(message," yes ",pick(" sure", "yea ")) - message = replacetext(message," faggot "," square ") - message = replacetext(message," muh valids "," getting my kicks ") - return trim(message) diff --git a/code/datums/goon_mutations_powers.dm b/code/datums/goon_mutations_powers.dm deleted file mode 100644 index a2e64ff37ee..00000000000 --- a/code/datums/goon_mutations_powers.dm +++ /dev/null @@ -1,43 +0,0 @@ -/datum/mutation/human/stealth - name = "Cloak Of Darkness" - quality = POSITIVE - get_chance = 10 - lowest_value = 256 * 14 - text_gain_indication = "You begin to fade into the shadows." - text_lose_indication = "You become fully visible." - - -/datum/mutation/human/stealth/on_life(mob/living/carbon/human/owner) - var/turf/simulated/T = get_turf(owner) - if(!istype(T)) - return - if(T.lighting_lumcount <= 2) - owner.alpha -= 25 - else - owner.alpha = round(255 * 0.80) - -/datum/mutation/human/stealth/on_losing(mob/living/carbon/human/owner) - ..() - owner.alpha = 255 - -/datum/mutation/human/chameleon - name = "Chameleon" - quality = POSITIVE - get_chance = 10 - lowest_value = 256 * 14 - text_gain_indication = "You feel one with your surroundings." - text_lose_indication = "You feel oddly exposed." - var/last_location - -/datum/mutation/human/chameleon/on_life(mob/living/carbon/human/owner) - if(owner.loc != last_location) - owner.alpha = round(255 * 0.80) - last_location = owner.loc - if((world.time - owner.next_move) >= 30 && !owner.stat && owner.canmove && !owner.restrained()) - owner.alpha -= 25 - else - owner.alpha = round(255 * 0.80) - -/datum/mutation/human/chameleon/on_losing(mob/living/carbon/human/owner) - ..() - owner.alpha = 255 \ No newline at end of file diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm index 1548615ddd0..ec466f65e72 100644 --- a/code/datums/mutations.dm +++ b/code/datums/mutations.dm @@ -50,7 +50,7 @@ . = on_losing(owner) /datum/mutation/human/proc/on_acquiring(mob/living/carbon/human/owner) - if(src in owner.dna.mutations) + if(!owner || (src in owner.dna.mutations)) return 1 owner.dna.mutations.Add(src) gain_indication(owner) @@ -78,7 +78,7 @@ return /datum/mutation/human/proc/on_losing(mob/living/carbon/human/owner) - if(owner.dna.mutations.Remove(src)) + if(owner && (owner.dna.mutations.Remove(src))) lose_indication(owner) owner << text_lose_indication return 0 @@ -124,7 +124,8 @@ owner.emote("collapse") /datum/mutation/human/hulk/on_losing(mob/living/carbon/human/owner) - ..() + if(..()) + return owner.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH /datum/mutation/human/hulk/say_mod(var/message) @@ -181,7 +182,8 @@ owner.see_in_dark = 8 /datum/mutation/human/x_ray/on_losing(mob/living/carbon/human/owner) - if(..()) return + if(..()) + return if((SEE_MOBS & owner.permanent_sight_flags) && (SEE_OBJS & owner.permanent_sight_flags) && (SEE_TURFS & owner.permanent_sight_flags)) //Xray flag combo return owner.see_in_dark = initial(owner.see_in_dark) @@ -194,11 +196,13 @@ text_gain_indication = "You can't see very well." /datum/mutation/human/nearsight/on_acquiring(mob/living/carbon/human/owner) - if(..()) return + if(..()) + return owner.disabilities |= NEARSIGHT /datum/mutation/human/nearsight/on_losing(mob/living/carbon/human/owner) - if(..()) return + if(..()) + return owner.disabilities &= ~NEARSIGHT /datum/mutation/human/epilepsy @@ -256,7 +260,8 @@ owner.disabilities |= CLUMSY /datum/mutation/human/clumsy/on_losing(mob/living/carbon/human/owner) - if(..()) return + if(..()) + return owner.disabilities &= ~CLUMSY /datum/mutation/human/tourettes @@ -301,7 +306,8 @@ owner.disabilities |= DEAF /datum/mutation/human/deaf/on_losing(mob/living/carbon/human/owner) - if(..()) return + if(..()) + return owner.disabilities &= ~DEAF /datum/mutation/human/blind @@ -315,7 +321,8 @@ owner.disabilities |= BLIND /datum/mutation/human/blind/on_losing(mob/living/carbon/human/owner) - if(..()) return + if(..()) + return owner.disabilities &= ~BLIND /datum/mutation/human/race @@ -334,7 +341,8 @@ return /datum/mutation/human/race/on_losing(mob/living/carbon/monkey/owner) - if(..()) return + if(..()) + return . = owner.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE) /datum/mutation/human/laser_eyes @@ -347,3 +355,244 @@ /datum/mutation/human/laser_eyes/on_ranged_attack(mob/living/carbon/human/owner, atom/target) if(owner.a_intent == "harm") owner.LaserEyes(target) + + + +////////////////////////////// Goon powers ///////////////////////////////////////// + +/datum/mutation/human/stealth + name = "Cloak Of Darkness" + quality = POSITIVE + get_chance = 10 + lowest_value = 256 * 14 + text_gain_indication = "You begin to fade into the shadows." + text_lose_indication = "You become fully visible." + + +/datum/mutation/human/stealth/on_life(mob/living/carbon/human/owner) + var/turf/simulated/T = get_turf(owner) + if(!istype(T)) + return + if(T.lighting_lumcount <= 2) + owner.alpha -= 25 + else + owner.alpha = round(255 * 0.80) + +/datum/mutation/human/stealth/on_losing(mob/living/carbon/human/owner) + if(..()) + return + owner.alpha = 255 + +/datum/mutation/human/chameleon + name = "Chameleon" + quality = POSITIVE + get_chance = 10 + lowest_value = 256 * 14 + text_gain_indication = "You feel one with your surroundings." + text_lose_indication = "You feel oddly exposed." + var/last_location + +/datum/mutation/human/chameleon/on_life(mob/living/carbon/human/owner) + if(owner.loc != last_location) + owner.alpha = round(255 * 0.80) + last_location = owner.loc + if((world.time - owner.next_move) >= 30 && !owner.stat && owner.canmove && !owner.restrained()) + owner.alpha -= 25 + else + owner.alpha = round(255 * 0.80) + +/datum/mutation/human/chameleon/on_losing(mob/living/carbon/human/owner) + if(..()) + return + owner.alpha = 255 + + + +//////////////////// Goon disabilities ////////////////////////////////////////// + +/datum/mutation/human/wacky + name = "Wacky" + quality = MINOR_NEGATIVE + text_gain_indication = "You feel an off sensation in your voicebox." + text_lose_indication = "The off sensation passes." + +/datum/mutation/human/wacky/get_spans() + return list(SPAN_SANS) + +/datum/mutation/human/mute + name = "Mute" + quality = NEGATIVE + text_gain_indication = "You feel unable to express yourself at all." + text_lose_indication = "You feel able to speak freely again." + +/datum/mutation/human/mute/on_acquiring(mob/living/carbon/human/owner) + if(..()) + return + owner.disabilities |= MUTE + +/datum/mutation/human/mute/on_losing(mob/living/carbon/human/owner) + if(..()) + return + owner.disabilities &= ~MUTE + +/datum/mutation/human/smile + name = "Smile" + quality = MINOR_NEGATIVE + text_gain_indication = "You feel so happy. Nothing can be wrong with anything. :)" + text_lose_indication = "Everything is terrible again. :(" + +/datum/mutation/human/smile/say_mod(var/message) + if(message) + message = " [message] " + //Time for a friendly game of SS13 + message = replacetext(message," stupid "," smart ") + message = replacetext(message," retard "," genius ") + message = replacetext(message," unrobust "," robust ") + message = replacetext(message," dumb "," smart ") + message = replacetext(message," awful "," great ") + message = replacetext(message," gay ",pick(" nice "," ok "," alright ")) + message = replacetext(message," horrible "," fun ") + message = replacetext(message," terrible "," terribly fun ") + message = replacetext(message," terrifying "," wonderful ") + message = replacetext(message," gross "," cool ") + message = replacetext(message," disgusting "," amazing ") + message = replacetext(message," loser "," winner ") + message = replacetext(message," useless "," useful ") + message = replacetext(message," oh god "," cheese and crackers ") + message = replacetext(message," jesus "," gee wiz ") + message = replacetext(message," weak "," strong ") + message = replacetext(message," kill "," hug ") + message = replacetext(message," murder "," tease ") + message = replacetext(message," ugly "," beautiful ") + message = replacetext(message," douchbag "," nice guy ") + message = replacetext(message," whore "," lady ") + message = replacetext(message," nerd "," smart guy ") + message = replacetext(message," moron "," fun person ") + message = replacetext(message," IT'S LOOSE "," EVERYTHING IS FINE ") + message = replacetext(message," sex "," hug fight ") + message = replacetext(message," idiot "," genius ") + message = replacetext(message," fat "," thin ") + message = replacetext(message," beer "," water with ice ") + message = replacetext(message," drink "," water ") + message = replacetext(message," feminist "," empowered woman ") + message = replacetext(message," i hate you "," you're mean ") + message = replacetext(message," nigger "," african american ") + message = replacetext(message," jew "," jewish ") + message = replacetext(message," shit "," shiz ") + message = replacetext(message," crap "," poo ") + message = replacetext(message," slut "," tease ") + message = replacetext(message," ass "," butt ") + message = replacetext(message," damn "," dang ") + message = replacetext(message," fuck "," ") + message = replacetext(message," penis "," privates ") + message = replacetext(message," cunt "," privates ") + message = replacetext(message," dick "," jerk ") + message = replacetext(message," vagina "," privates ") + return trim(message) + +/datum/mutation/human/unintelligable + name = "Unintelligable" + quality = NEGATIVE + text_gain_indication = "You can't seem to form any coherent thoughts!" + text_lose_indication = "Your mind feels more clear." + +/datum/mutation/human/unintelligable/say_mod(var/message) + if(message) + var/prefix=copytext(message,1,2) + if(prefix == ";") + message = copytext(message,2) + else if(prefix in list(":","#")) + prefix += copytext(message,2,3) + message = copytext(message,3) + else + prefix="" + + var/list/words = text2list(message," ") + var/list/rearranged = list() + for(var/i=1;i<=words.len;i++) + var/cword = pick(words) + words.Remove(cword) + var/suffix = copytext(cword,length(cword)-1,length(cword)) + while(length(cword)>0 && suffix in list(".",",",";","!",":","?")) + cword = copytext(cword,1 ,length(cword)-1) + suffix = copytext(cword,length(cword)-1,length(cword) ) + if(length(cword)) + rearranged += cword + message = "[prefix][uppertext(list2text(rearranged," "))]!!" + return message + +/datum/mutation/human/swedish + name = "Swedish" + quality = MINOR_NEGATIVE + text_gain_indication = "You feel Swedish, however that works." + text_lose_indication = "The feeling of Swedishness passes." + +/datum/mutation/human/swedish/say_mod(var/message) + if(message) + message = replacetext(message,"w","v") + if(prob(30)) + message += " Bork[pick("",", bork",", bork, bork")]!" + return message + +/datum/mutation/human/chav + name = "Chav" + quality = MINOR_NEGATIVE + text_gain_indication = "Ye feel like a reet prat like, innit?" + text_lose_indication = "You no longer feel like being rude and sassy." + +/datum/mutation/human/chav/say_mod(var/message) + if(message) + message = " [message] " + message = replacetext(message," looking at "," gawpin' at ") + message = replacetext(message," great "," bangin' ") + message = replacetext(message," man "," mate ") + message = replacetext(message," friend ",pick(" mate "," bruv "," bledrin ")) + message = replacetext(message," what "," wot ") + message = replacetext(message," drink "," wet ") + message = replacetext(message," get "," giz ") + message = replacetext(message," what "," wot ") + message = replacetext(message," no thanks "," wuddent fukken do one ") + message = replacetext(message," i don't know "," wot mate ") + message = replacetext(message," no "," naw ") + message = replacetext(message," robust "," chin ") + message = replacetext(message," hi "," how what how ") + message = replacetext(message," hello "," sup bruv ") + message = replacetext(message," kill "," bang ") + message = replacetext(message," murder "," bang ") + message = replacetext(message," windows "," windies ") + message = replacetext(message," window "," windy ") + message = replacetext(message," break "," do ") + message = replacetext(message," your "," yer ") + message = replacetext(message," security "," coppers ") + return trim(message) + +/datum/mutation/human/elvis + name = "Elvis" + quality = MINOR_NEGATIVE + text_gain_indication = "You feel pretty good, honeydoll." + text_lose_indication = "You feel a little less conversation would be great." + +/datum/mutation/human/elvis/on_life(mob/living/carbon/human/owner) + switch(pick(1,2)) + if(1) + if(prob(15)) + var/list/dancetypes = list("swinging", "fancy", "stylish", "20'th century", "jivin'", "rock and roller", "cool", "salacious", "bashing", "smashing") + var/dancemoves = pick(dancetypes) + owner.visible_message("[owner] busts out some [dancemoves] moves!") + if(2) + if(prob(15)) + owner.visible_message("[owner] [pick("jiggles their hips", "rotates their hips", "gyrates their hips", "taps their foot", "dances to an imaginary song", "jiggles their legs", "snaps their fingers")]!") + +/datum/mutation/human/elvis/say_mod(var/message) + if(message) + message = " [message] " + message = replacetext(message," i'm not "," I aint ") + message = replacetext(message," girl ",pick(" honey "," baby "," baby doll ")) + message = replacetext(message," man ",pick(" son "," buddy "," brother"," pal "," friendo ")) + message = replacetext(message," out of "," outta ") + message = replacetext(message," thank you "," thank you, thank you very much ") + message = replacetext(message," what are you "," whatcha ") + message = replacetext(message," yes ",pick(" sure", "yea ")) + message = replacetext(message," faggot "," square ") + message = replacetext(message," muh valids "," getting my kicks ") + return trim(message) diff --git a/tgstation.dme b/tgstation.dme index 2780021997d..78ec543eb6e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -152,8 +152,6 @@ #include "code\datums\datacore.dm" #include "code\datums\datumvars.dm" #include "code\datums\gas_mixture.dm" -#include "code\datums\goon_mutations_disabilities.dm" -#include "code\datums\goon_mutations_powers.dm" #include "code\datums\hud.dm" #include "code\datums\mind.dm" #include "code\datums\mixed.dm" From 66c47c98e1fe1053014ab857a73ce2c94262aa92 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Sun, 29 Mar 2015 16:15:13 +0100 Subject: [PATCH 56/65] Added check for inbuilt jetpack in movement_delay proc. --- code/modules/mob/living/carbon/human/species.dm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 46f561695db..d66d73d0e1c 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -660,10 +660,21 @@ var/grav = has_gravity(H) var/hasjetpack = 0 if(!grav) + var/obj/item/weapon/tank/jetpack/J + var/obj/item/weapon/tank/jetpack/P + if(istype(H.back, /obj/item/weapon/tank/jetpack)) - var/obj/item/weapon/tank/jetpack/J = H.back + J = H.back + if(istype(H.wear_suit,/obj/item/clothing/suit/space/hardsuit)) //copypasta but faster implementation currently + var/obj/item/clothing/suit/space/hardsuit/engine/C = H.wear_suit + P = C.jetpack + if(J) if(J.allow_thrust(0.01, H)) hasjetpack = 1 + else if(P) + if(P.allow_thrust(0.01, H)) + hasjetpack = 1 + mspeed = 1 - hasjetpack if(grav || !hasjetpack) From c0be1d015387c9bf352e7b5fd889b19bcbf7351a Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Mon, 30 Mar 2015 02:38:37 +1100 Subject: [PATCH 57/65] adds --- html/changelogs/tedward bsa.yml | 6 ++++++ html/changelogs/xxalpha-jetpack.yml | 6 ++++++ 2 files changed, 12 insertions(+) create mode 100644 html/changelogs/tedward bsa.yml create mode 100644 html/changelogs/xxalpha-jetpack.yml diff --git a/html/changelogs/tedward bsa.yml b/html/changelogs/tedward bsa.yml new file mode 100644 index 00000000000..57ebd7c4e27 --- /dev/null +++ b/html/changelogs/tedward bsa.yml @@ -0,0 +1,6 @@ +author: tedward1337 + +delete-after: True + +changes: + - rscadd: "Admins now have a button to use Bluespace Artillery at their will." diff --git a/html/changelogs/xxalpha-jetpack.yml b/html/changelogs/xxalpha-jetpack.yml new file mode 100644 index 00000000000..a352d877f36 --- /dev/null +++ b/html/changelogs/xxalpha-jetpack.yml @@ -0,0 +1,6 @@ +author: xxalpha + +delete-after: True + +changes: + - rscadd: "Engineering hardsuits come with an inbuilt jetpack. Requires an internals tank in suit storage and is slower than a normal jetpack." From fc0263b133c4f998917d7e28e82db167d9ed2acb Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Mon, 30 Mar 2015 02:38:54 +1100 Subject: [PATCH 58/65] compiles --- html/changelog.html | 45 +++++++++++++++++++ html/changelogs/.all_changelog.yml | 28 ++++++++++++ html/changelogs/AnturK-LightningBolt.yml | 6 --- html/changelogs/Iamgoofball-Flipping.yml | 7 --- html/changelogs/RemieRichards-PR-8554.yml | 5 --- html/changelogs/dannno-gavel.yml | 6 --- html/changelogs/phil235-SlimeAnimal.yml | 7 --- html/changelogs/pudl-resprite.yml | 10 ----- .../szunti-mining-mobs-night-vision.yml | 36 --------------- html/changelogs/tedward bsa.yml | 6 --- html/changelogs/xxalpha-fasterspace.yml | 6 --- html/changelogs/xxalpha-jetpack.yml | 6 --- 12 files changed, 73 insertions(+), 95 deletions(-) delete mode 100644 html/changelogs/AnturK-LightningBolt.yml delete mode 100644 html/changelogs/Iamgoofball-Flipping.yml delete mode 100644 html/changelogs/RemieRichards-PR-8554.yml delete mode 100644 html/changelogs/dannno-gavel.yml delete mode 100644 html/changelogs/phil235-SlimeAnimal.yml delete mode 100644 html/changelogs/pudl-resprite.yml delete mode 100644 html/changelogs/szunti-mining-mobs-night-vision.yml delete mode 100644 html/changelogs/tedward bsa.yml delete mode 100644 html/changelogs/xxalpha-fasterspace.yml delete mode 100644 html/changelogs/xxalpha-jetpack.yml diff --git a/html/changelog.html b/html/changelog.html index 5d1d06ac242..9a06efc9c18 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,51 @@ -->
+

30 March 2015

+

AnturK updated:

+
    +
  • Added new wizard spell : Lightning Bolt
  • +
+

Dannno updated:

+
    +
  • Added a hammer and gavel. Court is now in session.
  • +
+

Iamgoofball updated:

+
    +
  • You can now *flip.
  • +
  • Objects now spin when thrown. Please report any oddities.
  • +
+

RemieRichards updated:

+
    +
  • Monkeys can now wear ANY mask, not just ones they had specific icons for.
  • +
  • Monkeys can now wear HATS, That's right, Monkey Hats!
  • +
+

Szunti updated:

+
    +
  • Mining mobs vision adapted to darkness of the asteroids.
  • +
+

phil235 updated:

+
    +
  • All slimes are now simple animals instead of carbon life forms.
  • +
  • Remove crit status from brain and slimes.
  • +
  • Simple animal aliens can now see in the dark like regular aliens.
  • +
+

pudl updated:

+
    +
  • The detective's forensic scanner has been resprited.
  • +
  • So has the cargo tagger.
  • +
  • And the RPED.
  • +
+

tedward1337 updated:

+
    +
  • Admins now have a button to use Bluespace Artillery at their will.
  • +
+

xxalpha updated:

+
    +
  • You will no longer be slowed down by anything if you use a jetpack in zero gravity.
  • +
  • Engineering hardsuits come with an inbuilt jetpack. Requires an internals tank in suit storage and is slower than a normal jetpack.
  • +
+

25 March 2015

AnturK updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index fe2e446ccca..adb0d03ffb0 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1961,3 +1961,31 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: Added a buildable Chem Master, board is in Circuit Imprinter. Wjohnston: - bugfix: Finally fixed the gulag shuttle missing a redemption console. +2015-03-30: + AnturK: + - rscadd: 'Added new wizard spell : Lightning Bolt' + Dannno: + - rscadd: Added a hammer and gavel. Court is now in session. + Iamgoofball: + - rscadd: You can now *flip. + - experiment: Objects now spin when thrown. Please report any oddities. + RemieRichards: + - rscadd: Monkeys can now wear ANY mask, not just ones they had specific icons for. + - rscadd: Monkeys can now wear HATS, That's right, Monkey Hats! + Szunti: + - rscadd: Mining mobs vision adapted to darkness of the asteroids. + phil235: + - tweak: All slimes are now simple animals instead of carbon life forms. + - rscdel: Remove crit status from brain and slimes. + - rscadd: Simple animal aliens can now see in the dark like regular aliens. + pudl: + - rscadd: The detective's forensic scanner has been resprited. + - rscadd: So has the cargo tagger. + - rscadd: And the RPED. + tedward1337: + - rscadd: Admins now have a button to use Bluespace Artillery at their will. + xxalpha: + - tweak: You will no longer be slowed down by anything if you use a jetpack in zero + gravity. + - rscadd: Engineering hardsuits come with an inbuilt jetpack. Requires an internals + tank in suit storage and is slower than a normal jetpack. diff --git a/html/changelogs/AnturK-LightningBolt.yml b/html/changelogs/AnturK-LightningBolt.yml deleted file mode 100644 index c5d672d4ab7..00000000000 --- a/html/changelogs/AnturK-LightningBolt.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: AnturK - -delete-after: True - -changes: - - rscadd: "Added new wizard spell : Lightning Bolt" diff --git a/html/changelogs/Iamgoofball-Flipping.yml b/html/changelogs/Iamgoofball-Flipping.yml deleted file mode 100644 index c92481bd5b4..00000000000 --- a/html/changelogs/Iamgoofball-Flipping.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Iamgoofball - -delete-after: True - -changes: - - rscadd: "You can now *flip." - - experiment: "Objects now spin when thrown. Please report any oddities." \ No newline at end of file diff --git a/html/changelogs/RemieRichards-PR-8554.yml b/html/changelogs/RemieRichards-PR-8554.yml deleted file mode 100644 index 580c5c98167..00000000000 --- a/html/changelogs/RemieRichards-PR-8554.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: RemieRichards -delete-after: True -changes: - - rscadd: "Monkeys can now wear ANY mask, not just ones they had specific icons for." - - rscadd: "Monkeys can now wear HATS, That's right, Monkey Hats!" diff --git a/html/changelogs/dannno-gavel.yml b/html/changelogs/dannno-gavel.yml deleted file mode 100644 index 3ab904e6626..00000000000 --- a/html/changelogs/dannno-gavel.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Dannno - -delete-after: True - -changes: - - rscadd: "Added a hammer and gavel. Court is now in session." diff --git a/html/changelogs/phil235-SlimeAnimal.yml b/html/changelogs/phil235-SlimeAnimal.yml deleted file mode 100644 index 416a7460cab..00000000000 --- a/html/changelogs/phil235-SlimeAnimal.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: phil235 -delete-after: True - -changes: - - tweak: "All slimes are now simple animals instead of carbon life forms." - - rscdel: "Remove crit status from brain and slimes." - - rscadd: "Simple animal aliens can now see in the dark like regular aliens." diff --git a/html/changelogs/pudl-resprite.yml b/html/changelogs/pudl-resprite.yml deleted file mode 100644 index 052adc0ed1c..00000000000 --- a/html/changelogs/pudl-resprite.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: pudl - - -delete-after: True - - -changes: - - rscadd: "The detective's forensic scanner has been resprited." - - rscadd: "So has the cargo tagger." - - rscadd: "And the RPED." \ No newline at end of file diff --git a/html/changelogs/szunti-mining-mobs-night-vision.yml b/html/changelogs/szunti-mining-mobs-night-vision.yml deleted file mode 100644 index a1dfef5ae13..00000000000 --- a/html/changelogs/szunti-mining-mobs-night-vision.yml +++ /dev/null @@ -1,36 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# spellcheck (typo fixes) -# experiment -# tgs (TG-ported fixes?) -################################# - -# Your name. -author: Szunti - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - rscadd: "Mining mobs vision adapted to darkness of the asteroids." diff --git a/html/changelogs/tedward bsa.yml b/html/changelogs/tedward bsa.yml deleted file mode 100644 index 57ebd7c4e27..00000000000 --- a/html/changelogs/tedward bsa.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: tedward1337 - -delete-after: True - -changes: - - rscadd: "Admins now have a button to use Bluespace Artillery at their will." diff --git a/html/changelogs/xxalpha-fasterspace.yml b/html/changelogs/xxalpha-fasterspace.yml deleted file mode 100644 index cbbff3df300..00000000000 --- a/html/changelogs/xxalpha-fasterspace.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: xxalpha - -delete-after: True - -changes: - - tweak: "You will no longer be slowed down by anything if you use a jetpack in zero gravity." diff --git a/html/changelogs/xxalpha-jetpack.yml b/html/changelogs/xxalpha-jetpack.yml deleted file mode 100644 index a352d877f36..00000000000 --- a/html/changelogs/xxalpha-jetpack.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: xxalpha - -delete-after: True - -changes: - - rscadd: "Engineering hardsuits come with an inbuilt jetpack. Requires an internals tank in suit storage and is slower than a normal jetpack." From ab776cf0143fe82d9ffde5891dde3709c1b42728 Mon Sep 17 00:00:00 2001 From: Sawu Date: Mon, 30 Mar 2015 02:50:21 +1100 Subject: [PATCH 59/65] Updates the NPCPool to current branch. see #7012 * NPCPool will co-ordinate and organize all SNPCs, making them stronger and more intelligent. * SNPCs can use the botPool system to co-ordinate and delegate with each other. * SNPCs have been given factions to allow interoperability between certain types of SNPCs. * Bots (machinery/bot) can use the system too for basic help and coordination. --- code/__DEFINES/misc.dm | 23 ++++++ code/controllers/subsystem/npcpool.dm | 114 ++++++++++++++++++++++++++ code/game/machinery/bots/bots.dm | 9 +- code/modules/mob/interactive.dm | 87 ++++++++++---------- tgstation.dme | 1 + 5 files changed, 189 insertions(+), 45 deletions(-) create mode 100644 code/controllers/subsystem/npcpool.dm diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 60a0f565f24..61aa9962d6b 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -134,3 +134,26 @@ #define PEN_FONT "Verdana" #define CRAYON_FONT "Comic Sans MS" #define SIGNFONT "Times New Roman" + + +//NPC DEFINES +#define INTERACTING 2 +#define TRAVEL 4 +#define FIGHTING 8 + +//TRAITS + +#define TRAIT_ROBUST 2 +#define TRAIT_UNROBUST 4 +#define TRAIT_SMART 8 +#define TRAIT_DUMB 16 +#define TRAIT_MEAN 32 +#define TRAIT_FRIENDLY 64 +#define TRAIT_THIEVING 128 + +//defines +#define MAX_RANGE_FIND 32 +#define MIN_RANGE_FIND 16 +#define FUZZY_CHANCE_HIGH 85 +#define FUZZY_CHANCE_LOW 50 +#define CHANCE_TALK 15 diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm new file mode 100644 index 00000000000..16326980e2f --- /dev/null +++ b/code/controllers/subsystem/npcpool.dm @@ -0,0 +1,114 @@ +var/datum/subsystem/npcpool/SSbp + +/datum/subsystem/npcpool + name = "NPCPool" + priority = 27 + + var/list/canBeUsed = list() + var/list/canBeUsed_non = list() + var/list/needsDelegate = list() + var/list/needsAssistant = list() + var/list/needsHelp_non = list() + var/list/botPool_l = list() //list of all npcs using the pool + var/list/botPool_l_non = list() //list of all non SNPC mobs using the pool + +/datum/subsystem/npcpool/proc/insertBot(var/toInsert) + if(istype(toInsert,/mob/living/carbon/human/interactive)) + botPool_l |= toInsert + else if(istype(toInsert,/obj/machinery/bot)) + botPool_l_non |= toInsert + +/datum/subsystem/npcpool/New() + NEW_SS_GLOBAL(SSbp) + + +/datum/subsystem/npcpool/stat_entry() + stat(name, "[round(cost,0.001)]ds (CPU:[round(cpu,1)]%) (T:[botPool_l.len + botPool_l_non] | D: [needsDelegate.len] | A: [needsAssistant.len + needsHelp_non.len] | U: [canBeUsed.len + canBeUsed_non.len])") + + +/datum/subsystem/npcpool/fire() + //bot delegation and coordination systems + //General checklist/Tasks for delegating a task or coordinating it (for SNPCs) + // 1. Bot proximity to task target: if too far, delegate, if close, coordinate + // 2. Bot Health/status: check health with bots in local area, if their health is higher, delegate task to them, else coordinate + // 3. Process delegation: if a bot (or bots) has been delegated, assign them to the task. + // 4. Process coordination: if a bot(or bots) has been asked to coordinate, assign them to help. + // 5. Do all assignments: goes through the delegated/coordianted bots and assigns the right variables/tasks to them. + var/npcCount = 1 + + //bot handling + for(var/obj/machinery/bot/check in botPool_l_non) + if(!check) + botPool_l_non.Cut(npcCount,npcCount+1) + + if(check.hacked) + needsHelp_non |= check + else if(check.frustration > 5) //average for most bots + needsHelp_non |= check + else if(check.mode == 0) + canBeUsed_non |= check + npcCount++ + + npcCount = 1 //reset the count + + //SNPC handling + for(var/mob/living/carbon/human/interactive/check in botPool_l) + var/checkInRange = view(MAX_RANGE_FIND,check) + if(!check) + botPool_l.Cut(npcCount,npcCount+1) + if(!(locate(check.TARGET) in checkInRange)) + needsDelegate |= check + + else if(check.isnotfunc(FALSE)) + needsDelegate |= check + + else if(check.doing & FIGHTING) + needsAssistant |= check + + else + canBeUsed |= check + npcCount++ + + if(needsDelegate.len) + for(var/mob/living/carbon/human/interactive/check in needsDelegate) + if(canBeUsed.len) + var/mob/living/carbon/human/interactive/candidate = pick(canBeUsed) + var/facCount = 0 + var/helpProb = 0 + for(var/C in check.faction) + if(candidate.faction[facCount] == C) + helpProb = min(100,helpProb + 25) + facCount++ + if(facCount == 1 && helpProb > 0) + helpProb = 100 + if(prob(helpProb)) + if(candidate.takeDelegate(check)) + needsDelegate -= check + canBeUsed -= candidate + candidate.eye_color = "red" + + if(needsAssistant.len) + for(var/mob/living/carbon/human/interactive/check in needsAssistant) + if(canBeUsed.len) + var/mob/living/carbon/human/interactive/candidate = pick(canBeUsed) + var/facCount = 0 + var/helpProb = 0 + for(var/C in check.faction) + if(candidate.faction[facCount] == C) + helpProb = min(100,helpProb + 10) + facCount++ + if(facCount == 1 && helpProb > 0) + helpProb = 100 + if(prob(helpProb)) + if(candidate.takeDelegate(check,FALSE)) + needsAssistant -= check + canBeUsed -= candidate + candidate.eye_color = "yellow" + + if(needsHelp_non.len) + for(var/obj/machinery/bot/B in needsHelp_non) + if(canBeUsed_non.len) + var/obj/machinery/bot/candidate = pick(canBeUsed_non.len) + candidate.call_bot(B,get_turf(B),FALSE) + canBeUsed_non -= B + needsHelp_non -= candidate \ No newline at end of file diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index a749f95c488..e63bb8b5bee 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -98,6 +98,7 @@ /obj/machinery/bot/New() ..() SSbot.processing += src //Global bot list + SSbp.insertBot(src) botcard = new /obj/item/weapon/card/id(src) set_custom_texts() Radio = new /obj/item/device/radio(src) @@ -439,7 +440,7 @@ obj/machinery/bot/proc/bot_step(var/dest) if(mode != BOT_SUMMON && mode != BOT_RESPONDING) botcard.access = prev_access -/obj/machinery/bot/proc/call_bot(var/caller, var/turf/waypoint) +/obj/machinery/bot/proc/call_bot(var/caller, var/turf/waypoint, var/message=TRUE) bot_reset() //Reset a bot before setting it to call mode. var/area/end_area = get_area(waypoint) @@ -456,12 +457,14 @@ obj/machinery/bot/proc/bot_step(var/dest) if(!on) turn_on() //Saves the AI the hassle of having to activate a bot manually. botcard = all_access //Give the bot all-access while under the AI's command. - calling_ai << "\icon[src] [name] called to [end_area.name]. [path.len-1] meters to destination." + if(message) + calling_ai << "\icon[src] [name] called to [end_area.name]. [path.len-1] meters to destination." pathset = 1 mode = BOT_RESPONDING tries = 0 else - calling_ai << "Failed to calculate a valid route. Ensure destination is clear of obstructions and within range." + if(message) + calling_ai << "Failed to calculate a valid route. Ensure destination is clear of obstructions and within range." calling_ai = null path = list() diff --git a/code/modules/mob/interactive.dm b/code/modules/mob/interactive.dm index c7d0cd73725..cd7dd65d019 100644 --- a/code/modules/mob/interactive.dm +++ b/code/modules/mob/interactive.dm @@ -1,24 +1,3 @@ -#define INTERACTING 2 -#define TRAVEL 4 -#define FIGHTING 8 - -//TRAITS - -#define TRAIT_ROBUST 2 -#define TRAIT_UNROBUST 4 -#define TRAIT_SMART 8 -#define TRAIT_DUMB 16 -#define TRAIT_MEAN 32 -#define TRAIT_FRIENDLY 64 -#define TRAIT_THIEVING 128 - -//defines -#define MAX_RANGE_FIND 32 -#define MIN_RANGE_FIND 16 -#define FUZZY_CHANCE_HIGH 85 -#define FUZZY_CHANCE_LOW 50 -#define CHANCE_TALK 15 - /* NPC VAR EXPLANATIONS (for modules and other things) @@ -69,6 +48,7 @@ var/obj/item/other_hand var/TRAITS = 0 var/datum/job/myjob + faction = list("station") //trait vars var/robustness = 50 var/smartness = 50 @@ -79,6 +59,31 @@ //modules var/list/functions = list("nearbyscan","combat","doorscan","shitcurity","chatter") +//botPool funcs +/mob/living/carbon/human/interactive/proc/takeDelegate(var/mob/living/carbon/human/interactive/from,var/doReset=TRUE) + eye_color = "red" + if(from == src) + return FALSE + TARGET = from.TARGET + LAST_TARGET = from.LAST_TARGET + retal = from.retal + retal_target = from.retal_target + doing = from.doing + // + timeout = 0 + inactivity_period = 0 + interest = 100 + // + if(doReset) + from.TARGET = null + from.LAST_TARGET = null + from.retal = 0 + from.retal_target = null + from.doing = 0 + return TRUE + +//end pool funcs + /mob/living/carbon/human/interactive/proc/random() //this is here because this has no client/prefs/brain whatever. underwear = random_underwear(gender) @@ -87,7 +92,7 @@ facial_hair_style = random_facial_hair_style(gender) hair_color = random_short_color() facial_hair_color = hair_color - eye_color = random_eye_color() + eye_color = "blue" age = rand(AGE_MIN,AGE_MAX) ready_dna(src,random_blood_type()) //job handling @@ -106,6 +111,12 @@ retal = 1 retal_target = user +/mob/living/carbon/human/interactive/bullet_act(var/obj/item/projectile/P) + var/potentialAssault = locate(/mob/living) in view(2,P.starting) + if(potentialAssault) + attacked_by(P,potentialAssault) + ..() + /mob/living/carbon/human/interactive/New() ..() gender = pick(MALE,FEMALE) @@ -133,29 +144,29 @@ //arms if(prob((FUZZY_CHANCE_LOW+FUZZY_CHANCE_HIGH)/2)) var/obj/item/organ/limb/r_arm/R = locate(/obj/item/organ/limb/r_arm) in organs - del(R) + qdel(R) organs += new /obj/item/organ/limb/robot/r_arm else var/obj/item/organ/limb/l_arm/L = locate(/obj/item/organ/limb/l_arm) in organs - del(L) + qdel(L) organs += new /obj/item/organ/limb/robot/l_arm //legs if(prob((FUZZY_CHANCE_LOW+FUZZY_CHANCE_HIGH)/2)) var/obj/item/organ/limb/r_leg/R = locate(/obj/item/organ/limb/r_leg) in organs - del(R) + qdel(R) organs += new /obj/item/organ/limb/robot/r_leg else var/obj/item/organ/limb/l_leg/L = locate(/obj/item/organ/limb/l_leg) in organs - del(L) + qdel(L) organs += new /obj/item/organ/limb/robot/l_leg //chest and head if(prob((FUZZY_CHANCE_LOW+FUZZY_CHANCE_HIGH)/2)) var/obj/item/organ/limb/chest/R = locate(/obj/item/organ/limb/chest) in organs - del(R) + qdel(R) organs += new /obj/item/organ/limb/robot/chest else var/obj/item/organ/limb/head/L = locate(/obj/item/organ/limb/head) in organs - del(L) + qdel(L) organs += new /obj/item/organ/limb/robot/head for(var/obj/item/organ/limb/LIMB in organs) LIMB.owner = src @@ -220,10 +231,10 @@ toReturn = "Excited" return toReturn //END DEBUG -/mob/living/carbon/human/interactive/proc/isnotfunc() +/mob/living/carbon/human/interactive/proc/isnotfunc(var/checkDead = TRUE) if(!canmove) return 1 - if(health <= 0) + if(health <= 0 && checkDead) return 1 if(restrained()) return 1 @@ -634,12 +645,14 @@ New() TRAITS |= TRAIT_ROBUST TRAITS |= TRAIT_MEAN + faction = list("bot_angry") ..() /mob/living/carbon/human/interactive/friendly New() TRAITS |= TRAIT_FRIENDLY TRAITS |= TRAIT_UNROBUST + faction = list("bot_friendly") ..() /mob/living/carbon/human/interactive/greytide @@ -648,16 +661,6 @@ TRAITS |= TRAIT_MEAN TRAITS |= TRAIT_THIEVING TRAITS |= TRAIT_DUMB + faction = list("bot_grey") graytide = 1 - ..() - -#undef INTERACTING -#undef TRAVEL -#undef FIGHTING -#undef TRAIT_ROBUST -#undef TRAIT_UNROBUST -#undef TRAIT_SMART -#undef TRAIT_DUMB -#undef TRAIT_MEAN -#undef TRAIT_FRIENDLY -#undef TRAIT_THIEVING \ No newline at end of file + ..() \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index 2780021997d..eb812c58ed6 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -134,6 +134,7 @@ #include "code\controllers\subsystem\machines.dm" #include "code\controllers\subsystem\mobs.dm" #include "code\controllers\subsystem\nanoUI.dm" +#include "code\controllers\subsystem\npcpool.dm" #include "code\controllers\subsystem\objects.dm" #include "code\controllers\subsystem\pai.dm" #include "code\controllers\subsystem\pipenets.dm" From a4c870669dc38eef6b90454fdee1ff47de014742 Mon Sep 17 00:00:00 2001 From: NikNakFlak Date: Sun, 29 Mar 2015 12:44:42 -0700 Subject: [PATCH 60/65] Code changes to corgi.dm and changelog --- .../living/simple_animal/friendly/corgi.dm | 33 ++++++++----------- html/changelogs/NikNakFlak-PR-8604.yml | 6 ++++ 2 files changed, 20 insertions(+), 19 deletions(-) create mode 100644 html/changelogs/NikNakFlak-PR-8604.yml diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index aee646e51ea..301e1ff6d0b 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -58,7 +58,6 @@ see_in_dark = 5 childtype = /mob/living/simple_animal/pet/corgi/puppy species = /mob/living/simple_animal/pet/corgi - var/shaved_state = "corgi_shaved" var/shaved = 0 var/obj/item/inventory_head var/obj/item/inventory_back @@ -78,22 +77,6 @@ ..() regenerate_icons() -/mob/living/simple_animal/pet/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(user.stat == CONSCIOUS && istype(O, /obj/item/weapon/razor)) - if (shaved) - user << "You can't shave this corgi, it's already been shaved." - return - user.visible_message("[user] starts to shave [src] using \the [O].") - if(do_after(user, 50)) - user.visible_message("[user] shaves [src]'s hair using \the [O]. ") - playsound(loc, 'sound/items/Welder2.ogg', 20, 1) - shaved = 1 - icon_state = "[shaved_state]" - icon_living = "[shaved_state]" - icon_dead = "[shaved_state]_dead" - return - ..() - /mob/living/simple_animal/pet/corgi/sac_act(var/obj/effect/rune/R, victim) //Still the best thing in this game usr << "Even dark gods from another plane have standards, sicko." usr.reagents.add_reagent("hell_water", 2) @@ -142,6 +125,20 @@ else ..() + if (shaved) + user << "You can't shave this corgi, it's already been shaved." + return + user.visible_message("[user] starts to shave [src] using \the [O].") + if(do_after(user, 50)) + user.visible_message("[user] shaves [src]'s hair using \the [O]. ") + playsound(loc, 'sound/items/Welder2.ogg', 20, 1) + shaved = 1 + icon_state = "[initial(icon_living)]_shaved" + icon_living = "[initial(icon_living)]_shaved" + icon_dead = "[initial(icon_living)]_saved_dead" + return +..() + /mob/living/simple_animal/pet/corgi/Topic(href, href_list) if(usr.stat) return @@ -526,7 +523,6 @@ icon_state = "puppy" icon_living = "puppy" icon_dead = "puppy_dead" - shaved_state = "puppy_shaved" shaved = 0 mob_size = MOB_SIZE_SMALL accept_collar = 1 @@ -553,7 +549,6 @@ response_harm = "kicks" var/turns_since_scan = 0 var/puppies = 0 - shaved_state = "lisa_shaved" accept_collar = 1 //Lisa already has a cute bow! diff --git a/html/changelogs/NikNakFlak-PR-8604.yml b/html/changelogs/NikNakFlak-PR-8604.yml new file mode 100644 index 00000000000..83c7f69ef3e --- /dev/null +++ b/html/changelogs/NikNakFlak-PR-8604.yml @@ -0,0 +1,6 @@ +author: NikNakFlak + +delete-after: True + +changes: + - rscadd: "Adds the ability to shave corgis." From 306adf7d95c83ad20e5278df00bef00205bb704b Mon Sep 17 00:00:00 2001 From: NikNakFlak Date: Sun, 29 Mar 2015 13:21:56 -0700 Subject: [PATCH 61/65] Corgi fixes. --- .../living/simple_animal/friendly/corgi.dm | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 301e1ff6d0b..b0059eb7d2f 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -122,22 +122,21 @@ for(var/i in list(1,2,4,8,4,2,1,2)) dir = i sleep(1) - else - ..() - if (shaved) - user << "You can't shave this corgi, it's already been shaved." + if (istype(O, /obj/item/weapon/razor)) + if (shaved) + user << "You can't shave this corgi, it's already been shaved." + return + user.visible_message("[user] starts to shave [src] using \the [O].") + if(do_after(user, 50)) + user.visible_message("[user] shaves [src]'s hair using \the [O]. ") + playsound(loc, 'sound/items/Welder2.ogg', 20, 1) + shaved = 1 + icon_state = "[initial(icon_living)]_shaved" + icon_living = "[initial(icon_living)]_shaved" + icon_dead = "[initial(icon_living)]_saved_dead" return - user.visible_message("[user] starts to shave [src] using \the [O].") - if(do_after(user, 50)) - user.visible_message("[user] shaves [src]'s hair using \the [O]. ") - playsound(loc, 'sound/items/Welder2.ogg', 20, 1) - shaved = 1 - icon_state = "[initial(icon_living)]_shaved" - icon_living = "[initial(icon_living)]_shaved" - icon_dead = "[initial(icon_living)]_saved_dead" - return -..() + ..() /mob/living/simple_animal/pet/corgi/Topic(href, href_list) From 85ed447129589a2730f749194a32361a9f5b058f Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 29 Mar 2015 22:23:19 +0200 Subject: [PATCH 62/65] Fix goon mutations not being initialized somehow... --- code/datums/mutations.dm | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm index ec466f65e72..4b435d4b09c 100644 --- a/code/datums/mutations.dm +++ b/code/datums/mutations.dm @@ -5,7 +5,6 @@ var/name /datum/mutation/New() - mutations_list[name] = src /datum/mutation/human @@ -345,20 +344,6 @@ return . = owner.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE) -/datum/mutation/human/laser_eyes - - name = "Laser Eyes" - quality = POSITIVE - dna_block = NON_SCANNABLE - text_gain_indication = "You feel pressure building up behind your eyes." - -/datum/mutation/human/laser_eyes/on_ranged_attack(mob/living/carbon/human/owner, atom/target) - if(owner.a_intent == "harm") - owner.LaserEyes(target) - - - -////////////////////////////// Goon powers ///////////////////////////////////////// /datum/mutation/human/stealth name = "Cloak Of Darkness" @@ -406,10 +391,6 @@ return owner.alpha = 255 - - -//////////////////// Goon disabilities ////////////////////////////////////////// - /datum/mutation/human/wacky name = "Wacky" quality = MINOR_NEGATIVE @@ -596,3 +577,16 @@ message = replacetext(message," faggot "," square ") message = replacetext(message," muh valids "," getting my kicks ") return trim(message) + + +/datum/mutation/human/laser_eyes + + name = "Laser Eyes" + quality = POSITIVE + dna_block = NON_SCANNABLE + text_gain_indication = "You feel pressure building up behind your eyes." + +/datum/mutation/human/laser_eyes/on_ranged_attack(mob/living/carbon/human/owner, atom/target) + if(owner.a_intent == "harm") + owner.LaserEyes(target) + From 010fed04c6af1a1a21e84c3454625e091fdec245 Mon Sep 17 00:00:00 2001 From: NikNakFlak Date: Sun, 29 Mar 2015 15:30:58 -0700 Subject: [PATCH 63/65] Spelling --- code/modules/mob/living/simple_animal/friendly/corgi.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index b0059eb7d2f..d01b0412edb 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -134,7 +134,7 @@ shaved = 1 icon_state = "[initial(icon_living)]_shaved" icon_living = "[initial(icon_living)]_shaved" - icon_dead = "[initial(icon_living)]_saved_dead" + icon_dead = "[initial(icon_living)]_shaved_dead" return ..() From 1142cbd355da2c6c1375afdb0faa6c5eaa48ebb0 Mon Sep 17 00:00:00 2001 From: Sawu Date: Mon, 30 Mar 2015 09:35:33 +1100 Subject: [PATCH 64/65] Fixes NPCPool stat runtime --- code/controllers/subsystem/npcpool.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm index 16326980e2f..436f1ba8e76 100644 --- a/code/controllers/subsystem/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -23,7 +23,7 @@ var/datum/subsystem/npcpool/SSbp /datum/subsystem/npcpool/stat_entry() - stat(name, "[round(cost,0.001)]ds (CPU:[round(cpu,1)]%) (T:[botPool_l.len + botPool_l_non] | D: [needsDelegate.len] | A: [needsAssistant.len + needsHelp_non.len] | U: [canBeUsed.len + canBeUsed_non.len])") + stat(name, "[round(cost,0.001)]ds (CPU:[round(cpu,1)]%) (T:[botPool_l.len + botPool_l_non.len] | D: [needsDelegate.len] | A: [needsAssistant.len + needsHelp_non.len] | U: [canBeUsed.len + canBeUsed_non.len])") /datum/subsystem/npcpool/fire() @@ -111,4 +111,4 @@ var/datum/subsystem/npcpool/SSbp var/obj/machinery/bot/candidate = pick(canBeUsed_non.len) candidate.call_bot(B,get_turf(B),FALSE) canBeUsed_non -= B - needsHelp_non -= candidate \ No newline at end of file + needsHelp_non -= candidate From e88e8a4ed51a83d3a26bce516cd092f955dda1ca Mon Sep 17 00:00:00 2001 From: phil235 Date: Tue, 31 Mar 2015 00:27:32 +0200 Subject: [PATCH 65/65] Fixes drowsyness never going down. --- code/modules/mob/living/carbon/life.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 7cfa8b72f96..daebf276b12 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -333,7 +333,7 @@ dizziness = max(dizziness - restingpwr, 0) if(drowsyness) - dizziness = max(drowsyness - restingpwr, 0) + drowsyness = max(drowsyness - restingpwr, 0) eye_blurry = max(2, eye_blurry) if(prob(5)) sleeping += 1

+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