From 11141462a056ab9999bc1fe0fabf3be2ba2f18d7 Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Wed, 30 Sep 2015 00:00:36 +0100 Subject: [PATCH 01/21] fix #11222 also fixes the name and adds feedback to adding items --- .../research/xenoarchaeology/machinery/geosample_scanner.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm b/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm index 378848e26ea..ed23b965dfe 100644 --- a/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm +++ b/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm @@ -1,6 +1,6 @@ /obj/machinery/radiocarbon_spectrometer - name = "Radiocarbon spectrometer" + name = "radiocarbon spectrometer" desc = "A specialised, complex scanner for gleaning information on all manner of small things." anchored = 1 density = 1 @@ -91,9 +91,13 @@ user << "You remove [amount_transferred]u of coolant from [src]." update_coolant() return + if(scanned_item) + user << "\The [src] already has \a [scanned_item] inside!" + return user.drop_item() I.loc = src scanned_item = I + user << "You put \the [I] into \the [src]." /obj/machinery/radiocarbon_spectrometer/proc/update_coolant() var/total_purity = 0 From d2c355a937e935ea38894cea42d9b1762207dd94 Mon Sep 17 00:00:00 2001 From: Vivalas Date: Wed, 30 Sep 2015 17:56:35 -0500 Subject: [PATCH 02/21] Adds in KillerKickthroats --- code/game/machinery/vending.dm | 2 +- .../objects/items/weapons/storage/fancy.dm | 10 ++++++++++ icons/obj/cigarettes.dmi | Bin 2814 -> 3160 bytes 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 6a6d4df1fda..b55a034fe14 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -780,7 +780,7 @@ icon_state = "cigs" products = list(/obj/item/weapon/storage/fancy/cigarettes = 10,/obj/item/weapon/storage/box/matches = 10,/obj/item/weapon/flame/lighter/random = 4) contraband = list(/obj/item/weapon/flame/lighter/zippo = 4) - premium = list(/obj/item/weapon/storage/fancy/cigar = 5) + premium = list(/obj/item/weapon/storage/fancy/cigar = 5,/obj/item/weapon/storage/fancy/cigarettes/killthroat = 5 ) prices = list(/obj/item/weapon/storage/fancy/cigarettes = 15,/obj/item/weapon/storage/box/matches = 1,/obj/item/weapon/flame/lighter/random = 2) diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 0ed8ad7b7b2..a2fd0a9a0d6 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -177,6 +177,16 @@ icon_state = "Dpacket" item_state = "Dpacket" +/obj/item/weapon/storage/fancy/cigarettes/killthroat + name = "\improper KickerKillthroats packet" + desc = "A packet of six KickerKillthroats. For those who somehow want to obtain the record for the most amount of cancerous tumors." + icon_state = "Bpacket" + item_state = "Bpacket" //Doesn't have an inhand state, but neither does dromedary, so, ya know.. + + New() + ..() + fill_cigarre_package(src,list("fuel" = 15)) + /obj/item/weapon/storage/fancy/cigar name = "cigar case" desc = "A case for holding your cigars when you are not smoking them." diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi index 3da8e52c6ba9b95b6ae453ee59b75b8ff29d98e0..74bb7a7beb572a0f49e791121558e26a61e906c4 100644 GIT binary patch delta 2757 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 LNkvXXu0mjf>JVEc delta 2408 zcmY*aXHb*r7XA`C8bFFjAe03~DWZVV3An6T8%02HSwK(}FH&4WiAnfCnxGgk(gQ(M zdI_sE4NZzDCAv~XAb>Q3AYej5NJ19(?vHzCPCw6?Idf*7_x-qUTWNoavm**74VMN0 z0CwtEhx0qW{fA15?AQP(=@& zX(_33nEZ;`tm5MIq_~v0Xi|PL4u?xmPDqN0EG$ecDk{#rmy(s0RZvirnU<0q6G=>o zzZ-vxL@LhB&C5tm$jc?=lSmMV$QFws_vZsahbrr-gh@liI_d#wJp{DW)u>_(gm6{w&Oiv+`GKpglU6JGjJW(8K zg3QXw?zwsMjJbKq#fujD`oebLpt|}-6Y#YT_*?-D7XkEAU?30Zeh3^w$k-X|J9i9W zqO%8eRMpK=(?nZ=xCY$^^61!w2MUZ@zwT$42RrwKpwBzH0(J`@ukOThx7<9@4gukp z|F|B8z8)F^0MVq(p@Gy_M-;`TBbbWzjh#i+gH;o|J-WI#rT?fdhY`2aCoH$vNmBhM z4yiK^NcqbDDtoP>Z6tri@dM{VL7Hqs(8g&a`ZYaXJ*s^6NiXPrK^0rE|J-d#jydTe zdnlZH`AYGhk2kbx2HY=TLe9dGZ!H|dNqfz`r_m`NWJ!aCeEsGcq(#(1x3FE(?-Rd~v|#|J-}pQOn`42tmX)tQAi6 z8WJ`20s!%{Qx5iS(WDhpRJ3b=VsfZgP#_$8IbT$y`kY>83U-FhC~k^!kqXK9+y!ak z^t9}eNNwUkIduJ@)V&AqynAlUA6*6MIyxbUu4DOCs1|`9z$9`C(Ee3LY{CR_6d!sCtx9Cg$OOg zv?K#)^sGUV6I1z?KY*xRL!#&=<@6O-)Sa(pHN$Vboa999{}sVWwD7PhPFT43g~vIs z3F0{qDQ%ULR6?!cfr?FS+{lk7!ulI=OG<~zW>&Sk(0@U^{2 z($Z42JN;D{Z7(+TS zN-l;D4hiJ?`4k(7VM^3FR$0ICj?TM|CzfZMdjsFTqn3j!4WOX znK@TSn-!MHpqkB+L9Y|ZeEo(O{>u6BxueUr_qv(n%YxCxLS-8yyk+{;A=hGMZ`_-w z+9mfD)(m{_+ZqSo^70y=>pP5+{{4~P{u(unmZhbjnhl>QPyjQdqnTf3T)jePcwV6| z5v<=@)r9!D`zjy4kxcQ%dC2wa3pFoSn>npKjp(&U$r>2+LVqryzF`pVTJU8A%+FH!d>ptr< z%QBMtLCV{j+ofITIgE?{F7&4W42dmj-BQFdOB4H-m9eN(6CL~7>~ej8wUGX7KRRqv z5rI(acva~fm$MiJYxlTBkLOCagSw0_o|_Vj(4+3|kDw3mP(vY^w5x3CM5NfZa{6*a zEI;*=icD1G_o-G?!>H%;J7ixMcQUOM>TCDsHMDUP*ELjK1P5s@tczZMupgIC1vtCk zvf+2*_~m4ge>mAe2Y+qQ{qN2@cI%gHvF7M8w4wKleg_XWXdBlhpc;yirf60Zc2jLH z(*@MNVWEIJE5_n*P;6#Mqe)czeetdB$@t|(8zs!|?O6h9mw3bSVxn{o<1Kys898~g zPhM5^BZVx%H1geU%vDl>RQGm_*O6&9przgDX_LuZTNx~t&1_!qZ8!|{O$Gn-fy3(2 zsx^N}25EXir1;jHZ@r}q1~wzWpM4)gxUoU}l*A7j@#iM`In@;`UmW>7tlk&uqM6OF z6h_!0^_>w721WB`#4|CG+XXb*Afb_nC*(_4$qi18o5*qNq08c)iWD7fa#3S#>~GaA zZpO+-+7kS#C|D)f|pokMuNw~<|_VqqvnvsJPgAp%<#bY8ClI%kB0@Z zA#p5G^sXnml-a$K!Hoe}u2h2RB_4;$S2HP*SFQXRCMTn9k3pmHqU_~PT#RTh=GN;BB z%xb37c$nEc^-hE^{2!v Date: Thu, 1 Oct 2015 13:35:26 -0500 Subject: [PATCH 03/21] Name change --- code/game/objects/items/weapons/storage/fancy.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index a2fd0a9a0d6..40185d6a097 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -178,8 +178,8 @@ item_state = "Dpacket" /obj/item/weapon/storage/fancy/cigarettes/killthroat - name = "\improper KickerKillthroats packet" - desc = "A packet of six KickerKillthroats. For those who somehow want to obtain the record for the most amount of cancerous tumors." + name = "\improper AcmeCo packet" + desc = "A packet of six AcmeCo cigarettes. For those who somehow want to obtain the record for the most amount of cancerous tumors." icon_state = "Bpacket" item_state = "Bpacket" //Doesn't have an inhand state, but neither does dromedary, so, ya know.. From 4fdf4afa08c719cbfd2e7b54cf1d7e3f4d289057 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Fri, 2 Oct 2015 08:56:34 +0200 Subject: [PATCH 04/21] Adds on-mob NVG sprites. Fixes #10965. --- icons/mob/eyes.dmi | Bin 6804 -> 7356 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 486e578cb6dac728cae0c1781a3e888319736838..b68ccd373c51314ec6920588282b4535c70cf643 100644 GIT binary patch literal 7356 zcmcgxXIN9)whbT(NI8H?6Hr7Dl>>tG5|l`hrhpVFLFv62dKHl-O;n_dAc!DH3!Q*1 z^iCq7cOeoWA%vFXZ9MmV_uX^vyYIa7efRuGvNHExWv?;UoMVn1cS~QBg^8C51Ol;W zYe5V_AevXeCxYQ9V8Ld>J%K-lLB?heAojktKF(eboIO22pn&Y>PkTLRuP{IAZ!);o zUi-eW4JL8&?Hs7$gA`xdBZsu-IpVJkrqxs9NAg}4yy-ue?6|a16*!5z*D{V;|2${( z=#+^;KMb}lqU3b1;q4{Osm22tt*^QRAA63TIJ;6s@HR31TCH}xv{6xtRe0b!fu;Kd zY)0*Am$Bbxy2n+#4)-fSZ0(x9y6w--8|j9=(*HCRt(}*{nQ(uAO0d!P-V~<;{J|7@ncF(Ru>N=k#j#}@B{jXjLB7>`OgK{ z*Y5g(pU~Kv1ds~s=JfYVId9}&U`?b|4Y*`9ax+hiTX3ylG;P?-u9z*}@yF)`Nx$CE zT6?lyNdN7QVllrKopZLk31Tg?P|6TCyLg& zcGVxupDYA{_|9uXt{DepuT6$~jSzE?nmzxEAOqi;nm3~Dr z_;b2GUp(5ul0)uaJm!eFm&{Kr9{0&#zjd`%OwN7S@^v>i!+H1OJ3C9S*kck}2=N}5 zm)+%)jiYKig>Tj_`i6h@Y+Q(GJe#*3EElNi@Y1c-6(1Hpo!7fuJKg(`1`VSJfe?Db z0Kk$m>}nv;$s@mj)aYrBfNos_(d-P&ZPsfq%ZsGPSyNY5!mgQ{XT)g~RITMvcX3wJ zlxW#)bs%=*aQC^! za?j<-p$WHKc`vobrl#|au+qXQYoog^Ey-q=9pIkRs;~RZknS$d9s+y$rGX3V<_$h? zzTwWEO2{bCOuqR5i^{hR>zPc`5?*j}qPDXmZI{c?9?l-JR-J`gtjtg9E6zw5EWLPU zmiJ{NQ8rbp1Me8m7MNGzHs0LlKpq*(t0zuiqK|V~`-BGuHjEMsggH1c0s@tk$`t~V zNTzLO2@W}pyb|Vdur8VwlyUK5!R_keB9U_rI7f*}v!0&d52TdXjvR6mT4u?V{{*`N zq4!~J7?`Hx$fxC5O}*X>bJ!D&?YO0KIxRO+y1R z{^j>O{d?0r>4+Mt`-QbVPz32`+nn`hyIsfYcNqP?Cji@@Fg>&XZ=_3FDH$QTVMJNq zr6`dTK0Q4dYz{vztCp>-93aJedy6h*Je!J)WG9_mSnQm5%3*GFm-podoW_-qRL;0Z z%7m^#^{Hiduorr)Ot7(A;rnDO5%b)Y>sQNwPV(a7qDenERV$X0i9a>zS(FaMH%?mZrSKa?%#+O`a4h<%Q zKks(uX7ZLMBf6ZnqGUr$UC#(rJydU}}3r7WFweCS~o|_*=!J)cWHX4}Zn!@n1qyO0W{|sb}%w;o>;jrrC2+ z++O;Q-(wH9!5VAGB0L`7Hv1_?Pm=qzHxvrZBU;y>spLK=q!12A1%(H@xX`9**^T^y zw`IAWuh~;#6fWv8TIZLo2y1r`gC4O&kK$-R8#E4mAp^}sl-y|E5q;sXV@E*dGw)-Q?04Pz2LYhXK)o-kym7fi5!qr%g5wl_>`PJZl0)97{RmB3C&{ z9%Ex;ZuZp1#>NQ2+Jm=goy~#4MSIE-ZZhSdOa;QVYGBV7MoJKAbyIsq>)-S z0S1FbmYlv`kkhoJe2VIjmeKnC^#bLKJHB3n&WM?iYx(u0noc?eLi-*O)K<2KN`k}V zJjAN8z|rwt>f!0^?IqTEF-bhqP{L`FXK7#YJEjc+(HCFUh{mvJu|8hx>pn15vve#FfV9O z8rBAztlBrfmGVZ%cX6cTcq=s03C+bm_TgUC3J!M)4J#fQO)r+>l>r>#@oEs^ zB{;lwwfi0~p}wSW%5nz*?GS`!i|p1-UhF?Fr{8(W2oXRy#lAbAFubq@18>2mB$N^8 z5Wig|z>|3uVDId|&v$YPrXu#TJk6#LrX?0szfM8UGx^y>0+8@yDDB%Lr9uEA4PcysAk$OVcXvJ^h>Yc z@b@lJsPg1%VXd1&78AyXp7peNHbP&R^RZtd2EFMQ1RYcqHb@Z>j9y0CDtxb#eW-J? zYo{b>7|z(x1|Ya&Lgg%XPg)0M2_G7~i1UKwVIpj_3~DB`tB&};!e0UZ1QlN5h7UAb>=4X(#cX`;Xv>T-YG zelrCr5676Qc{Xo8&X93^kqr*FZcY{wO5l=sv5XnF$JL_m>dh2iSJDff%&H2Tk4rNc zm7tc9yv@I8+J{=y5*@D@MEhk9u0DZH6us-aSY0+(@KiB*^0=SHTK>E0uEM_N7MxzC z)i7r=GBH+5Gp2(h&#Wavtq->g^I{ZVZ@ zH9dINXPMSw^jL4b=i_Gb#<-ABfyec{mR*O++M`o@)ckq9mG9ij+w1<-lw9zGX6Mqa z6d=z>U>lufB!TGfureg$vud0WAZU=g6MMq41rxMm_YhdLH0H4q${VpiFyk*Vr6XBe zTN^nt9yZz!nf3Z+X=HW*@c**Dd|{Vomlg*#1)pbUpWZ!K21_U?C>Zi2CNaDzc?~>myUi`&hWF^M z&dyXDN%=R+EH*w`Sf&dC$$adoT-E{izJJ@CN7{dhKj|~K;~j^bFKTX{z(^BbEIAB6 z*S)#k))u?ZgvZ-?XvdX_iPxHd1(LJU`c;*d$P&#P4|}rY`b`4a+085OM=O)Jh5;}i z4>)?Zn!A<%q-D7(!T!#s=~w0C!VO*zHt94q+5t07D|yXC5KF77s-&dv=2Rw)FUTj2 z)w-f*LujRM2Oa|0KAaM6_k#g*w-xQy$o4k-vsX*w~?cF^zVk$GJ zsib7ZPjEHQ)y3r^OtJ4*sRI+?CSYEGqm}R>IGNo2#xWro?HhML z1y@>6d+Xl5oqAP9hThO~{|=awnN1mtwh0hNd_pruyG-wABo|Hz^pki^0gmL=5Wsc% z?^O5SaVEDxO5JJ=mTm`hx?ivur59d)vFjV@HC6c~o(N^k3qoDg_ znB9GYv4^1RCcAT7hz{z?114LtC>O00hk_NfVv_bmC8a}lc$oYU2spjKma_L>2l%(q z9mnV9CY!gND}s$sp30j!#jEMzFw((*GlXJ%bm^zZ^J{k!`xnuCfr9F-# zCAG~M;L61cnkFiF8oS^KPHQWz=mO^|RBulOuh#}q0H?~rSHOa+bLBj9CxX{oBEdCv zrS5(1xE!n^1VT&dhzvitfL)IvIpi>6C4}&vNJl8Ot{+@(LiM5lNwqlbrdvb5qC^(l zRpD|CZq-0-L5SJ*Ye1A}hyGfIpi0@3p~{vHr{1fkz+BZqG;PASwpKNURhq2DAAL2- zlRFD)6W-_{c$T6B4R(OqNRqM4JhyoAItCzOFOS^SXLhPff!9nwW&w3vMw4;Bo-^MO zIZ_@0I@3*FvITcEZm^#PXxq*IIBokG+qBey#ISPum?V4!!}27?7xoSwuyt|)^xdCh**!AVF+)U}G9PEabEujzovxjml|6iiJT79xRX_FB2@ z<3|Du_jkIxKznub)fH5$=^Ls2(IFL+BO?!*=H-j(ofh2lR+D+9m}Y&oXB3ibF%u$K z@FRB|POWa98x4zDTJzr#IWHz8l!Ptw<@bkhkKI?YRDCkb7jpTObP3^u72>magWXct zkv=c};u|k6pK5qhb9G}NNweqamoWbnbHn9S9Qvpwx_00x*!nlGctufX1ZhD{sH{$d zt8|gCP37#f%;UC?&dTPmkdd8_2GrjP(piZCmIs;rF13_!_#m zZyLq`6qfS&lPU)Xjyb!zU2P$UBKM|w<>9XA^8E3{#KhJuBNG!@m&1H9C!e%Q36S=q+>S>Tg0hf3Z05h3z&`+f#+E$lS>LsMPtz82o;4nYGO#0)ej(pt@^Z?~ZPxxbn_@67Mf0IxC zT}~N-+ag)3fsgdTw(%l~`K5wL0&sHA>~C#tY2CYb&tI71N_2Geq>75l4UCF&EJR5C z>@731Z!ONlB7{$Z6iJ)vr6Rp7U2Sb`e**)9R8s^{gSzz28upLR`?F<;{1cIh!ZeHe zkdZL@6LF9yXvpeXN!L1$Q=c+Gpd%w`v_;Zx9P&6jDf6q6l9H=YLnh=0N#j2X;BeU) zGH|su`h#5XdUD>fHIS6|c%&D$SiU^XN;^jq&pq4llLqOJsm#2be`zCmfhg^;V<^GR z+;s(cJHsE~P5RTfE)%7Xq9^y|r-*Fz zo{o<0{{C38DHLKCz&53P5OOp-D8$A_4e~ji$BB=^z2Umnf)UD)a|G`xF3B$;^LC$1 zNPA{p4!lt~H+O@by}@zn>MkxL!3S9pcD}B@ympUGAxZ31>fqB>3rJsF2l*zE?ebmW z!<8Rzg^#b!za~^(By6nIz4`HlOLM|87$C=Jy(|%abbJV@XR#t2LnG|75~X4keulho zh}6|Lty{%JDVrk3m`_WYAFq!Y8QH>EfdV41rC9Ww^~0=KqTv6NV*DYJ@IREff9G0% z8|#Wy6Afr(3~K85)Up3&XSTvz=!E5M_5qxZ`s(F_%t(#iPM0A|n&?mWI027XQv@jQ zqfhs+u!zAQ6{XS!6R<>O|7qe=1$?4c=b-1FJO zShbN4j?>xDl7`>+G^b^a)*;^Rsw2mbM)~x3_lTEc_p9>;bIJOPj<%ncD}9&sOQqkI zm&@LjCiTe-@SQM9xuoQeW1c_}9$letc&fbbdbsMMF59-O=vb{+q=zpbT8>$6p2se? zHoO+v_^cG83m9WNZZYi2kVFN)*#JV~qK(z91y73M!Y(xxb~4n^*jP9mQ6PpzslEpV zb$IJm#-2#@f!4)lbEfW#dvvV>-c>liDChoMz-M}n2M?fs!%lL?aJ^cE&Xb_jK-Sn@ zjFZMUR0~lRD-6o(u^M8#?N~!AD|a`Kw$ag14M?F~Up6}_Fe`Em#7%iJ9DMYko6~Wj zTdJxe&P2+wZ=mP=_WHTK$_DntQy&l)LOh2j8~mI?-8u`2q|zy;TuKKf;zWE$UwcNO zHRG5iwZ-DJ5wPYgK>4b=|GZ<9)_KkKS(L>4ryX7Q$C|!enGTqkqBQw;&xDy8U-dbL z0|W>5)CbsOmgt-a)D{4uuim}|#_NZ7J@bbORlX50Y+oQs^Yy1;z zSzGN2YisY|2?VhOId<0&ry^9 z-N1N~))JGGllVlWRVgt&wqtgH0x;@QEH6r+oI#L--F))GkZ1J==Es(r$eA@If9kF> zU+K|Lo}C=2^!^x?a0#dM!qZ9zlkGgQv1Pvr)CKFk)(|_Q3X5yY_=Ug&M5EQ71 zgIw>+14~RP^YZeRq1a+RiNKbQbN$-9K*8gEN{JSkS-mpT;4}Uc-Z2N=WtO|?>s+0y zO1PAd<}j3_gb+uJ{HiBMi?W_hc?`BXYx;TE;!q}-_pn)i(cb%g zMn~hWg~fR=csiYCi$u!0Q)<%LXu$TOnqRR5&&O|MTDkBKnt91vtl79{AfX%bcg>uD z@0Li2)lyeiKXaNDsF!yM%L&tbY9idKY+x6c{)6Sdi@u|Gt~Kl;^&%~@^Ri0I8*j2w zcb3Fzw}HS5L}2L$eTNi5kLtKt1?Z*`n{xos`p4H9e;{c7>2!Y>ZFSv~=AG(5YK*38 z|1`6m73j;ncUqq}NX_BqzLnP^AJwirK<+a1;w3&scu~z&$$YDpWQfq&yq(XYtVwa44JU6v&z)kv3^RsKfcX(=Sd0N{6@ik46ZJY=VUaQq{ z(4PTuR{#)WRBV{$*J)^sOi^T329Tt}|M}+PPw(JAcKkx63)O)n)pSk*1RDg>zM&5( Jzi#vJzW|c3_JaTb literal 6804 zcmcgwc{p3^x?id~P_C8n4niBel>(dsU0h@qwC zlo~3AP$gAE%!;6;gdl2&kVtZuv!8RHeeXT@?6aS;j*>B32T>Ki5MoZ2}DL_`CRd_yl;sy#XLN{dr=O zXS2!=2BdZCGi{ZMh{Pggne1;*wjzcg)wtf;7Exy!vW^Y3#?cM*3e-lI}G zG!icgbgG}xoNat6omAi&W3+Zh?fM5(9&DXJvnDh9%u)RX9mKJu(sQ?|CA7>Vp=O5t zQ<~-S{xhZM2-Wj!lM<@ui3Dr+>=1V}9arGwRkg?Na%OSo^gZ=>Iai8O!5uY3+)ItvUzV4)6z9jds&Q)eKN&>)9UWmaZ%i#3IF^mrxkwIJ@O7g3C_3Zs{PC>@`$mh3wx>orkEzd#Q zeN~;Z^?E&K?4+iJ_Po37D`G}6JtfZ2LbR3%RvkOrZw^!HS$x6?&wpveii^(O*SgxJ zAZ=6Qwf}h5MX$X3{39fG4|=K`^1x)B#r9^Rb?<78g(ZJm9cBcrqV7IRIu$l?7-+=G z`@#X>2caDRa77pZRAK=j+hL4cd?fD>b3bgb*tfv)+Hu17s0-C$bH+lu z2^#+F+%$~mQtf=Uv;(jyLQqU+XGaI{o-2RA}Xalrds1xPNE1{ z>poiJeco$cpH;%n#MbN%MIsSdo)oMwv5%+^MMB+PUr6et_IGzbWZg}A?t#8@XZGz! zAxAhI=N%T%HU4EWcPyxw-=9q$)(h-ge*Wl?VrU;5{2HGQXD4P~K$tek-`pvfn|O2N zktn_3*U>?;!vWOu4sNhayx{U2UD9i*$y64`c*wS=}y$B5KvOS!tyXc)y+;LpYw0 zmv^e4I59e^fGea5)4z#1oKZA+-RyAd<{XyGo1i-)+R>~xhB8i>N2(S|JPq)kQ6H-~ z^Jz7+&6WI>C^-aPlJl3R-aF{gR=MXT2vut8(afzPv)pm&NocpGoCc71?mK}5NyKhq z3DiO}Ea61G`WEnj-Np|5CZwKWT6|Jd2EBZE{a;j;%_#`$)G#M!+48#cJ50{|j{;FuCeICY(t z_Gra-4-mdr0Id@9eS6wNi}qe1wLVxLzy!q72M7irJKU6?5gOV1PYLAT1DwUwI1t_@ z^Wr*w%LRmXjK=!S)1EMxV@OEItpC+h&%AwnZg_cl8QMl$1HgC{)AG~UI~d+u>nEc= zr5c02rL_47FxtF>o+YKQtG>6Um*mV?bzva43i-k6lIclC9W~r``x9e zztIAp*B1gNguv>K!_DL8Z_T#JG6cEkjWR;-#MYSGWx@t0SAc9k2JJwlGui04^U>B& zwnP3rG;}U`%>8X<$nZ+HGAB0++(TSo)A9M>e%3?%e&pT;zW(0c#EhVk9F)|#p>h69Q_B`*3N6a$k`)P2bvyxS@K&+^Pa z%VB>2!Bj15(6v*~l(;s=#>PKSj=re-2MEif2s%&lqxo)RUaLuq@92rE&4Z1|B=6%o zWnPPW7_psyK{g&TF`6+bcLGs17s4wSAK}E~`qNQa2xeBZ0E_h}qJ1g0GBoT-Mx*VW zpN?8vScr^R=drXdjFsKH_4=1zu8`H=7GGagP^iqoYgN!yUp&6BwK3%~&W*-CyRE2m zkBRD|k61&Wy)u{jo_*Z=Mhe9lM6J@m1jdbC=0aUq2)j|xpD{p;pOcc@{1{mqw6vdX z)t0ITBmZ9Fq$8!C<1IQng_LZ|rTcZnv;scz!63b@amS}wXx9Yf;z(t}RlD^{9Lj`2 z_BXSpEyl;k+n==I1{)a>AL1%nwIo)YB-%p!hgstcT@Z>pNJe3s{(thxSAd$lnBO`V}EepdVgJdzP7}Y|aF&QILh8Fl(RET$Jf1zr( z@1imfIY@!E-d`r(C%vze^FAr*t0cjq{qJq z{mQ@UayZ9w{b`Zq`iIQ~qQSZW5WXX9Yf6#=J*K*F`2u$*VCe5URQj$u{D?0{HnSkA zp;_N5&9UW0G{GFTkfPhejxpP254fe|g*=>c9mS%k_P9Q73N#w~Et-NTL2t;|v=&Gf zMR4T8@ok#1us`fAh!6sYlx!4iE-a`KC+jIXNa?oDjG_-+8Fuxq5O=X z#!^0Oc%^DlNJE2B_R(-7#IjC*XnEGuZ4Z#Uz|Wf$)4Z?m^nW;cIlcDQn?QZ2{+Ws7 zH4JOiin*NdJea15;>`9uXN)7^`3V?eytoX5J(SP)*6EG&eOf(Z{Db6v@z}-5&x<(w z0VzmKZ3SyJ*`M>$2R+!L#Rc>2qiW5RDi`AZ!-Iw=Hogh5PO1(sd@gHdf9?JeRrOM8 zy~c<0QoU!@Y+KNx_w4&0Wx>CIkH5y`clC$q8gFp26+3k5B9qNksXuN0Snz8}i{@%2 zY)JQ{$MEuf%~T8DIt4}`c(@dWi!pUCU%GUS>iqqPf#cNm>R&=l3+r~Nzn*+2jo>5Z zq#(0Eg=?!^>-J$ew>}%UU7Cou-$i)3yMI8bwtqTDD8H#tSfrnULC*mKcf5?e$0-I4QM zkWt!fTGl3QHb}PZTN#S|2@O^msI^8T#~fxPk-})f zP5M=xXMolscfFnHC57tRi7k52&)h?gWje$f4Gt=TRbg8cVefwc4Qi!;SVu5TAx*m) z3<_WMqx!No=^%;QI8jE&=;-KJL0{xV==b?r;j`g&k;ZS%{{P`>D>Z z)w-O{3tw62rlqy#CRqEhxV5rldQXwHM~71)l;91 z9l-jrflJvWtg(`Xy6_9)PdiRvO1A1Bl;ChAMTd7PX9q_Q8EQuUTng?A08Z(l!T!qc z%k01Au>8R+av$?d(#YWD!0{>qw{mt!3IO>1CO_a3ZbteQ&-=IcxmY5&H z3F+*h3?0$%o&4~fDY6;76X0t{O^QxIG=>dzA~oEw*H4XgcRwi~zGn!g`;%#%xAqAN z$``U9SDN;(f)keJ=E?|feY*Qr)VxHzLw7^%DG~b}MaT;Ju1$j6bac$Hv$u~<7#bMx z7{eoCmc73%UVGhFT2SEeLCZy4sIQ^RR2I@XT5TMAch}mzN6@qks8jZEOjxo=BIG#|SlPzaMXA z(&xbvfmdH&Kk;DOzR4u6*h4CLH_SL!ow7`Wk$Ij-PcTF_;fL3nTC;VZ`;Dfi85OGz zF3YV8Pw%^8uRtYYS*{8LW)I~Ib$IW_|17To9tQ#5f1&pO1KqUU9{95+`2|xUuU&td zTS?f~2B#V_+KNDh_&hl|S~nVeyleOFfx*E;qjj2GDO)Y>JD-DM;h<<-Ox1OKgu^>L zLP7@}1@dOoj7WvQ?bJk9UMLi+Kwx@q+q{;t!PV6{?A9TnIv7%!L14iZALbk%iq$N@ zzjYhXx)V$7^5eAQ8tja8RgA`jiw{#aCx%C;z$$RY`}i{pyZI znRY4v&kAGfg~A={)WWts+1ZFB5>JdtRu%j<;-f z^XkTfE3~4|+oRZ;Uc!;G%*&BaK&XB(**USp-NOU&ZCq)C*YP5#X2(R|x+yH+BIbV+ zUNT_wri+_ttH}lDr^T?wmDT-IIc(gmQydPxUdfmGxRgufK0q%E4knL_-OpFzG%?fE z;ifxTPhOEj9@IBTPj_kmuu#x_^s&M=w zYWqQU=tzrPO4O^bAqL9> z8{!DWUeIL+UUyx+`OTl(ba)8QT3UA)_;tFJI>Oq%(>S#{j7a5DHGi7_beB{teG(f2 ztyQO{x`-Qj7;iLitGH9GtyikSxz8&5!4X^oFydMe5Qgv%sHPT;4!VpW^xjLmrIK$X z>5e^Pm}<)D)2Aznzg_~nl-HRFFQ~`v4VB+%|J6au2<$L0J9yFg^Tsy~4O!%mxoe5%olt&;C1+e*y#B+7YZz#$T)e)U)ZdxT$ z#v=qa`iYI8z$XT(R@U%7Lo^t}!HiThI$y;JDOvx;pY*8ZQErs*!llGR6fuFBA0fuI zOE#i2%-w~7w7uTSgd(pyKCCSpe)JX}U)I6LhwjTMw_f`8KHl-i9C9B!25O_5N4UWi%E+1c~(mosvUmy&+MVq4B}hBrH##% z6pgr@TX^~kKZxz-y%D=Y5pGFsN#A@W003DU8!lOYo{j!-%kxijS_JQtzqOlr95gnz z2yd<{u8D)PtMYd9E_IjIeRKu`HeMH^g<@9R?MxMI<&3-jJ9b~HTJztvXMp};Le%F(J{jYNv6b4wMy55$HUv%4j(6sKVy+JO-OIcVQ3vS zPJR4{aO9g`sT2%N`@Iu4>abIAUxzGnGxIwN^FD0{a9wxnha-O=CjNrX0+q|NS+TaC UncLtBiXs4FXlhV;**W6B06KCs>i_@% From 5ef5f40cbe2d5e086a8357792aff91457062459f Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Fri, 2 Oct 2015 12:45:19 +0100 Subject: [PATCH 05/21] add 'info' topic command to get information on a character --- code/world.dm | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/code/world.dm b/code/world.dm index ac17aa21c07..3a5f0a5f83b 100644 --- a/code/world.dm +++ b/code/world.dm @@ -184,6 +184,69 @@ var/world_topic_spam_protect_time = world.timeofday return list2params(positions) + else if(copytext(T,1,5) == "info") + var/input[] = params2list(T) + if(input["key"] != config.comms_password) + if(world_topic_spam_protect_ip == addr && abs(world_topic_spam_protect_time - world.time) < 50) + + spawn(50) + world_topic_spam_protect_time = world.time + return "Bad Key (Throttled)" + + world_topic_spam_protect_time = world.time + world_topic_spam_protect_ip = addr + + return "Bad Key" + + var/search = input["info"] + var/ckey = ckey(search) + + var/list/match = list() + + for(var/mob/M in mob_list) + if(findtext(M.name, search)) + match += M + else if(M.ckey == ckey) + match += M + else if(M.mind && findtext(M.mind.assigned_role, search)) + match += M + + if(!match.len) + return "No matches" + else if(match.len == 1) + var/mob/M = match[1] + var/info = list() + info["key"] = M.key + info["name"] = M.name == M.real_name ? M.name : "[M.name] ([M.real_name])" + info["role"] = M.mind ? (M.mind.assigned_role ? M.mind.assigned_role : "No role") : "No mind" + var/turf/MT = get_turf(M) + info["loc"] = M.loc ? "[M.loc]" : "null" + info["turf"] = MT ? "[MT] @ [MT.x], [MT.y], [MT.z]" : "null" + info["area"] = MT ? "[MT.loc]" : "null" + info["antag"] = M.mind ? (M.mind.special_role ? M.mind.special_role : "Not antag") : "No mind" + info["hasbeenrev"] = M.mind ? M.mind.has_been_rev : "No mind" + info["stat"] = M.stat + info["type"] = M.type + if(isliving(M)) + var/mob/living/L = M + info["damage"] = list2params(list( + oxy = L.getOxyLoss(), + tox = L.getToxLoss(), + fire = L.getFireLoss(), + brute = L.getBruteLoss(), + clone = L.getCloneLoss(), + brain = L.getBrainLoss() + )) + else + info["damage"] = "non-living" + info["gender"] = M.gender + return list2params(info) + else + var/list/ret = list() + for(var/mob/M in match) + ret[M.key] = M.name + return list2params(ret) + else if(copytext(T,1,9) == "adminmsg") /* We got an adminmsg from IRC bot lets split the input then validate the input. From 190387966041cfbac0ecdd9f9c4cccb7a936885d Mon Sep 17 00:00:00 2001 From: LachBee Date: Sun, 4 Oct 2015 18:39:32 +0800 Subject: [PATCH 06/21] Added rescue rig and rack to CMO office --- maps/exodus-1.dmm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index 736198df256..a194b4ec4ef 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -7273,6 +7273,7 @@ "cJS" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "EngineVent"; name = "Reactor Vent"; p_open = 0},/turf/simulated/floor/reinforced,/area/engineering/engine_room) "cJT" = (/turf/simulated/floor/plating,/area/maintenance/portsolar) "cJU" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/port) +"cJV" = (/obj/structure/table/rack,/obj/item/weapon/rig/medical,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "cJW" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cJX" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/engi_engine) "cJY" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plating,/area/maintenance/engi_engine) @@ -7472,7 +7473,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbDdbDubDjbdPbdPbDNbvZbvZbvZbDWbdPbdPbEvbFbbFabdPbGtbGtbGtbFfbGtbGvbFgbFjbFhbFkbtCbAJbyLbFlbGBbtCbtGbtGbtGbtGbtGbHVbtGbtGbtGbFmbtGbtGbtGbtGbtGbFnbtGbtGbtGbtGbtGbtGbtGaJiaJiaJiaJibvMaQiaKYbEbbFobEcbFqbFpbFtbFsbFvbFubFxbFwbFzbxKbFFbFEbFJbFHbFLbFKbFNbFMbFPbFObFSbFRbFWbHbbHcbFXbFZbFYbCpbGebGfbwwbwwbwwbwwbwwbGgbwwbwwbwwbzAbFTbzAbzAbGlbAgbGmbBqbCBbGrbGubGsbGxbGwbGybGabGbbGcbHraaaaaabCJbGzbAAbGDbGAbGGbGFbGIbCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaafaaaaaaaaabHuaafaaaaaaaaaaaabGtbGKbGJbGMbGLbLrbGNbGPbGObGQbtCbAJbyLbyObyMbGSbGRbGUbGTbGWbGVbGYbGXbHabGZbHebHdbHfbyMbyMbHibHkbHjbyMbHlbyMbyKbGWbyKbHnbHmbHpbHobvMaQibCvaJlbDtbGnbDtbHqbHsbxCbHvbHtbHxbHwbHzbHybHBbHAbHDbHCbwmbHEbHHbHFbDJbHJbHLbHKbIqbKfbFDbHMbFDbEVbCpbKhbIwbIxbIybHNbHPbHObHRbHQbHTbIFbHWbHUbHXbIJbzAbHYbGmbBqbGobHZbIcbIbbIebIdbIfbGabGbbISbEnbEnbEnbCJbCJbCJbGqbGpbCJbCJbFVbCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaabLaaaaaaaaaaaaaaaaaaaaaaaaaaaabGtbIhbIgbIjbIicLYbIkbImbIlbInbtCbAJbIobIrbIpbIpbIsbIubItbIvbItbIubIsbIpbIpbIBbIAbIDbICbIHbIGbIIbIpbIpbIKbIubItbIvbItbIMbILbINbILbIPbIObusaJlbIRbIQbITbEdbIUbGHbCzbIVbFibDVbxFbIWbCFbDSbCHbIXbwkbIYbJabIZbDJbJbbJdbJcbJNbFDbFDbJPbFDbFDbCpbJebJfbIxbJibJgbJkbJjbJmbJlbJnbIFbJpbJobJqbJqbzAbJrbJtbJsbJvbJubJxbJwbJAbJybJCbGabGbbKlbEnbKmbMIbJDbEnaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbJHbJGbJGbJIbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaaaaaabJKbJJbKxbJJbJLaaaaaaaaabGtbGtbJObJMbIjbJMbMPbJQbJSbJRbJTbtCbJUbAJbJWbJVbyMbJXbyMbyKbGWbyKbyMbJYbKabJZbKcbKbbyObyMbKebKdbHabKgbHabHabKjbKibKkbKibKobKnbbBbKpaKYaKYaKYaJlbKqbEfbEhbKrbKwbKvbKBbKybFIbKCbKEbKDbKFbHgbCHbHCbIabIzbHhbDJbDJbLobLobLobCpbKGbLqbKHbLsbKIbCpbKKbKLbIxbLwbFGbHPbKMbKObKNbKPbIFbKRbKQbJqbJqbzAbKSbKWbKVbwwbKXbKZbKYbLcbLbbLdbGabLebLNbLfbLfbLfbLgbGdaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbLhbLTbLibLTbKsbKtbKtbLjbLkbLjbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaaaaaabJKbJJbKxbJJbJLaaaaaaaaabGtbGtbJObJMbIjbJMbMPbJQbJSbJRbJTbtCbJUbAJbJWbJVbyMbJXbyMbyKbGWbyKbyMbJYbKabJZbKcbKbbyObyMbKebKdbHabKgbHabHabKjbKibKkbKibKobKnbbBbKpaKYaKYaKYaJlbKqbEfbEhbKrbKwbKvbKBbKybFIbKCcJVbKDbKFbHgbCHbHCbIabIzbHhbDJbDJbLobLobLobCpbKGbLqbKHbLsbKIbCpbKKbKLbIxbLwbFGbHPbKMbKObKNbKPbIFbKRbKQbJqbJqbzAbKSbKWbKVbwwbKXbKZbKYbLcbLbbLdbGabLebLNbLfbLfbLfbLgbGdaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbLhbLTbLibLTbKsbKtbKtbLjbLkbLjbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLnbNAbLXbNBbLnbHGbHSbHIbGtbLpbLubLtbLxbLvbLzbLybLAbLAbLBbtCbtCbtCbNQbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbLDbLCbLEbtCbtCbtCbtCbtCbLFbtCbtCbtCaJlaJlbObaJlaJQaKXbLGaJlbLIbLHbLJbEdbLKbxCbCzbLLbxCbLMbKEbLObLPbwkbLRbLQbMEbLSbLVbLUbLYbLWbMKbFDbFDbFDbFDbFDbLZbFDbCpbPObMObMObMObMObMObMObMObMObMObMObMcbMabMdbMdbzAbMebMgbMfbwwbMVbMVbMVbMjbMibMkbMVbMVbMVbMVbMVbMVbGbbNbaapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaapbMlbLTbLTbMmbKtbKtbLjbLjbMnbLjbLjbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbNgbMsbNgbKxbJhbMpbMobGtbMqbMrbJMbMvbMubGvbMwbMybMxbMzbGvbMBbMAbMCbNxaaaaaaaaaaaabNybOLbONbOMbNDbNCbNEbNFbMDbMDbMFbNFbMHbMGbMLbMJbMNbMMbMRbMQbMSbPxbMUbNUbNUbNUbNUbDtbDtbDtbDtbMWbMWbxCbMYbMXbMZbKEbNcbNabNebNdbNhbNfbNjbNibNlbNkbNnbNmbMKbNobFDbFDbNVbFDbFDbNobCpbPObMObNpbNrbNqbNtbNsbNvbNubNzbMObNHbNGbNIbNIbzAbNJbNKbBqbzIbNLbNNbNMbNPbNObNSbNRbNWbNTbNYbNXbMVbPZbEnbOObOObOObOObOOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabOPbKtbMlbKtbKtbLjbLjbLjbLjbLjbLjbLjbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLnbNgbNgbNgbOabNZbKAbOcbOebOdbOgbOfbOibOhbGvbGvbGvbGvbGvbGvbOjbOYbOZbKzaaabKJbKTbKTbKUbQjbPfbPgbPhbPfbOkbNFbOmbOlbOnbNFbOpbOobOrbOqbOtbOsbOubPtbPtbPxbOvbQpbPwbPxbOwbDtbOxbEdbOybEdbEdbOzbCzbOAbxCbOBbOFbOEbOGbwkbOIbOHbwkbOJbOQbOKbOSbORbMKbCpbCpbCpbCpbCpbCpbCpbCpbPObMObOTbOVbOUbNqbNqbNqbNqbOWbMObOXbKQbPebPebzAbAgbKWbBqbPkbPibPibPlbPnbPmbPpbPobPqbPqbPqbPrbMVbPsbPubOObPybPvbPzbMbaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbPBbPAbPAbLjbLjbLjbLjbLjbLjbLjbLjbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From f249bf3bccc83eeb6e5841d6b2ea8d04701f290c Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Sun, 4 Oct 2015 17:47:47 +0200 Subject: [PATCH 07/21] Compilation fixes. --- baystation12.dme | 2 +- code/{__defines => }/_macros.dm | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename code/{__defines => }/_macros.dm (100%) diff --git a/baystation12.dme b/baystation12.dme index 4641b7858af..f36717bdbe7 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -10,13 +10,13 @@ #define DEBUG // END_PREFERENCES // BEGIN_INCLUDE +#include "code\_macros.dm" #include "code\global.dm" #include "code\hub.dm" #include "code\names.dm" #include "code\stylesheet.dm" #include "code\world.dm" #include "code\__defines\_compile_options.dm" -#include "code\__defines\_macros.dm" #include "code\__defines\admin.dm" #include "code\__defines\atmos.dm" #include "code\__defines\chemistry.dm" diff --git a/code/__defines/_macros.dm b/code/_macros.dm similarity index 100% rename from code/__defines/_macros.dm rename to code/_macros.dm From 485541820d351c4cd1d4fcea18f61a91b75a10d9 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Mon, 5 Oct 2015 09:44:05 +0200 Subject: [PATCH 08/21] Updates intent macros. Fixes #11234. --- interface/skin.dmf | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/interface/skin.dmf b/interface/skin.dmf index c0db1c1b6e3..d9f0f48c0ff 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -71,6 +71,14 @@ macro "borghotkeymode" name = "SOUTH+REP" command = ".south" is-disabled = false + elem + name = "INSERT" + command = "a-intent right" + is-disabled = false + elem + name = "DELETE" + command = "delete-key-pressed" + is-disabled = false elem name = "1" command = "toggle-module 1" @@ -103,14 +111,6 @@ macro "borghotkeymode" name = "CTRL+4" command = "a-intent left" is-disabled = false - elem - name = "INSERT" - command = "a-intent right" - is-disabled = false - elem - name = "DELETE" - command = "delete-key-pressed" - is-disabled = false elem name = "5" command = ".me" @@ -359,7 +359,7 @@ macro "macro" is-disabled = false elem name = "CTRL+4" - command = "a-intent hurt" + command = "a-intent harm" is-disabled = false elem name = "CTRL+A+REP" From 91faf8555f7a752977616157ce64d361cc590a35 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Mon, 5 Oct 2015 10:13:05 +0200 Subject: [PATCH 09/21] Antag placement now favors mobless turfs. If one such turf is available, otherwise picks a random populated turf. Fixes #11237. --- code/__HELPERS/turfs.dm | 15 +++++++++++++++ code/game/antagonist/alien/borer.dm | 4 ++-- code/game/antagonist/alien/xenomorph.dm | 2 +- code/game/antagonist/antagonist_place.dm | 3 ++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/code/__HELPERS/turfs.dm b/code/__HELPERS/turfs.dm index 3ee4e26a7a8..85836281143 100644 --- a/code/__HELPERS/turfs.dm +++ b/code/__HELPERS/turfs.dm @@ -17,3 +17,18 @@ if(A.simulated) return 0 return 1 + +// Picks a turf without a mob from the given list of turfs, if one exists. +// If no such turf exists, picks any random turf from the given list of turfs. +/proc/pick_mobless_turf_if_exists(var/list/start_turfs) + if(!start_turfs.len) + return null + + var/list/available_turfs = list() + for(var/start_turf in start_turfs) + var/mob/M = locate() in start_turf + if(!M) + available_turfs += start_turf + if(!available_turfs.len) + available_turfs = start_turfs + return pick(available_turfs) diff --git a/code/game/antagonist/alien/borer.dm b/code/game/antagonist/alien/borer.dm index f43550dc6ad..8fa028453f2 100644 --- a/code/game/antagonist/alien/borer.dm +++ b/code/game/antagonist/alien/borer.dm @@ -36,7 +36,7 @@ var/datum/antagonist/xenos/borer/borers if(istype(borer)) var/mob/living/carbon/human/host for(var/mob/living/carbon/human/H in mob_list) - if(H.stat != 2 && !(H.species.flags & IS_SYNTHETIC) && !H.has_brain_worms()) + if(H.stat != DEAD && !(H.species.flags & IS_SYNTHETIC) && !H.has_brain_worms()) host = H break if(istype(host)) @@ -44,7 +44,7 @@ var/datum/antagonist/xenos/borer/borers if(head) borer.host = host head.implants += borer - borer.loc = head + borer.forceMove(head) if(!borer.host_brain) borer.host_brain = new(borer) borer.host_brain.name = host.name diff --git a/code/game/antagonist/alien/xenomorph.dm b/code/game/antagonist/alien/xenomorph.dm index 4603fc5d1c0..08cbeebca9e 100644 --- a/code/game/antagonist/alien/xenomorph.dm +++ b/code/game/antagonist/alien/xenomorph.dm @@ -44,4 +44,4 @@ var/datum/antagonist/xenos/xenomorphs player.objectives += new /datum/objective/escape() /datum/antagonist/xenos/place_mob(var/mob/living/player) - player.loc = get_turf(pick(get_vents())) + player.forceMove(get_turf(pick(get_vents()))) diff --git a/code/game/antagonist/antagonist_place.dm b/code/game/antagonist/antagonist_place.dm index db8c74a14f6..b5f62868dc5 100644 --- a/code/game/antagonist/antagonist_place.dm +++ b/code/game/antagonist/antagonist_place.dm @@ -23,4 +23,5 @@ /datum/antagonist/proc/place_mob(var/mob/living/mob) if(!starting_locations || !starting_locations.len) return - mob.loc = pick(starting_locations) \ No newline at end of file + var/turf/T = pick_mobless_turf_if_exists(mob) + mob.forceMove(T) From f3effa8df79d8e9fda9fa93f2257e6ff1a53b1b6 Mon Sep 17 00:00:00 2001 From: Kelenius Date: Mon, 5 Oct 2015 11:40:19 +0300 Subject: [PATCH 10/21] Basic encryption hack popup only shows suitable APCs --- .../malfunction/newmalf_ability_trees/HELPERS.dm | 8 +++++--- .../malfunction/newmalf_ability_trees/tree_networking.dm | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm index 69794c9af33..0d9519504f1 100644 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm +++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm @@ -163,12 +163,14 @@ command_announcement.Announce(fulltext) -// Proc: get_all_apcs() +// Proc: get_unhacked_apcs() // Parameters: None -// Description: Returns a list of all APCs -/proc/get_all_apcs() +// Description: Returns a list of all unhacked APCs +/proc/get_unhacked_apcs(var/mob/living/silicon/ai/user) var/list/H = list() for(var/obj/machinery/power/apc/A in machines) + if(A.hacker && A.hacker == user) + continue H.Add(A) return H diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm index f1bad288ad0..4a163884c48 100644 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm +++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm @@ -38,7 +38,7 @@ // END RESEARCH DATUMS // BEGIN ABILITY VERBS -/datum/game_mode/malfunction/verb/basic_encryption_hack(obj/machinery/power/apc/A as obj in get_all_apcs()) +/datum/game_mode/malfunction/verb/basic_encryption_hack(obj/machinery/power/apc/A as obj in get_unhacked_apcs(src)) set category = "Software" set name = "Basic Encryption Hack" set desc = "10 CPU - Basic encryption hack that allows you to overtake APCs on the station." From bbcadcc08071d1eb2e567e0e0d8c66823170db06 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Mon, 5 Oct 2015 11:12:26 +0200 Subject: [PATCH 11/21] Makes silicon language handling more robust. Also fixes an issue with lists being targets for qdel(). Fixes #11221. --- code/modules/mob/language/language.dm | 2 +- .../mob/living/silicon/robot/robot_modules.dm | 28 +++++++++++++------ code/modules/mob/living/silicon/silicon.dm | 18 ++++++++---- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index 03ab8ea2970..8c6b92c5557 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -123,7 +123,7 @@ var/datum/language/new_language = all_languages[language] - if(!istype(new_language) || new_language in languages) + if(!istype(new_language) || (new_language in languages)) return 0 languages.Add(new_language) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 819fbf4561e..d5a2edf3e13 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -34,7 +34,7 @@ var/global/list/robot_modules = list( var/list/obj/item/borg/upgrade/supported_upgrades = list() // Bookkeeping - var/list/added_languages = list() + var/list/original_languages = list() var/list/added_networks = list() /obj/item/weapon/robot_module/New(var/mob/living/silicon/robot/R) @@ -63,12 +63,14 @@ var/global/list/robot_modules = list( qdel(src) /obj/item/weapon/robot_module/Destroy() - qdel(modules) - qdel(synths) + for(var/obj/O in modules) + qdel(O) + modules.Cut() + for(var/datum/matter_synth/S in synths) + qdel(S) + synths.Cut() qdel(emag) qdel(jetpack) - modules = null - synths = null emag = null jetpack = null return ..() @@ -100,14 +102,22 @@ var/global/list/robot_modules = list( modules += O /obj/item/weapon/robot_module/proc/add_languages(var/mob/living/silicon/robot/R) + // Stores the languages as they were before receiving the module, and whether they could be synthezized. + for(var/datum/language/language_datum in R.languages) + original_languages[language_datum] = (language_datum in R.speech_synthesizer_langs) + for(var/language in languages) - if(R.add_language(language, languages[language])) - added_languages |= language + R.add_language(language, languages[language]) /obj/item/weapon/robot_module/proc/remove_languages(var/mob/living/silicon/robot/R) - for(var/language in added_languages) + // Clear all added languages, whether or not we originally had them. + for(var/language in languages) R.remove_language(language) - added_languages.Cut() + + // Then add back all the original languages, and the relevant synthezising ability + for(var/original_language in original_languages) + R.add_language(original_language, original_languages[original_language]) + original_languages.Cut() /obj/item/weapon/robot_module/proc/add_camera_networks(var/mob/living/silicon/robot/R) if(R.camera && (NETWORK_ROBOTS in R.camera.network)) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index d6fc2e4aa92..5186a7f6b85 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -188,16 +188,22 @@ return universal_speak || (speaking in src.speech_synthesizer_langs) //need speech synthesizer support to vocalize a language /mob/living/silicon/add_language(var/language, var/can_speak=1) - if (..(language) && can_speak) - speech_synthesizer_langs.Add(all_languages[language]) + var/var/datum/language/added_language = all_languages[language] + if(!added_language) + return + + . = ..(language) + if (can_speak && (added_language in languages) && !(added_language in speech_synthesizer_langs)) + speech_synthesizer_langs += added_language return 1 /mob/living/silicon/remove_language(var/rem_language) - ..(rem_language) + var/var/datum/language/removed_language = all_languages[rem_language] + if(!removed_language) + return - for (var/datum/language/L in speech_synthesizer_langs) - if (L.name == rem_language) - speech_synthesizer_langs -= L + ..(rem_language) + speech_synthesizer_langs -= removed_language /mob/living/silicon/check_languages() set name = "Check Known Languages" From 83adba88d4b44dce013e9ac476bd88fd40cdedad Mon Sep 17 00:00:00 2001 From: Kelenius Date: Mon, 5 Oct 2015 18:10:16 +0300 Subject: [PATCH 12/21] Updates blob Remains of player blob axed. blob_act() axed. Blob now has an arbitary set of things it can attack. It will flow over everything else. Blob has an awful tendency to destroy non-craftables. Will test more tomorrow. Blob will now attack mechs. Fixes #8106. Fixes #10705. --- baystation12.dme | 9 +- code/__defines/items_clothing.dm | 1 - code/game/atoms.dm | 3 - code/game/dna/dna_modifier.dm | 11 - code/game/gamemodes/blob/blob.dm | 133 --------- code/game/gamemodes/blob/blob_finish.dm | 78 ------ code/game/gamemodes/blob/blob_report.dm | 111 -------- code/game/gamemodes/blob/blobs/core.dm | 73 ----- code/game/gamemodes/blob/blobs/factory.dm | 72 ----- code/game/gamemodes/blob/blobs/node.dm | 34 --- code/game/gamemodes/blob/blobs/shield.dm | 24 -- code/game/gamemodes/blob/theblob.dm | 222 --------------- code/game/gamemodes/events/miniblob.dm | 30 --- code/game/machinery/OpTable.dm | 4 - code/game/machinery/adv_med.dm | 11 - code/game/machinery/atmoalter/canister.dm | 5 - code/game/machinery/bots/bots.dm | 5 - code/game/machinery/camera/camera.dm | 4 - code/game/machinery/computer/computer.dm | 8 - code/game/machinery/computer3/computer.dm | 6 - code/game/machinery/computer3/lapvend.dm | 9 - code/game/machinery/cryopod.dm | 5 - code/game/machinery/deployable.dm | 13 - code/game/machinery/doors/door.dm | 6 - code/game/machinery/hologram.dm | 4 - code/game/machinery/machinery.dm | 4 - code/game/machinery/nuclear_bomb.dm | 7 - code/game/machinery/vending.dm | 9 - code/game/objects/effects/aliens.dm | 5 - code/game/objects/effects/chem/foam.dm | 3 - code/game/objects/items.dm | 3 - .../game/objects/items/weapons/tanks/tanks.dm | 11 - code/game/objects/items/weapons/weaponry.dm | 4 - code/game/objects/structures.dm | 4 - .../structures/crates_lockers/closets.dm | 7 - .../crates_lockers/closets/statue.dm | 4 - code/game/objects/structures/displaycase.dm | 9 - code/game/objects/structures/girders.dm | 4 - code/game/objects/structures/grille.dm | 3 - code/game/objects/structures/inflatable.dm | 3 - code/game/objects/structures/lamarr_cage.dm | 7 - code/game/objects/structures/lattice.dm | 4 - code/game/objects/structures/safe.dm | 4 - code/game/objects/structures/signs.dm | 4 - .../structures/stool_bed_chair_nest/bed.dm | 5 - .../structures/stool_bed_chair_nest/stools.dm | 5 - code/game/objects/structures/window.dm | 4 - code/game/turfs/simulated/floor_acts.dm | 3 - code/game/turfs/simulated/walls.dm | 4 - code/global.dm | 1 - code/modules/blob/blob.dm | 206 ++++++++++++++ code/modules/events/blob.dm | 5 +- code/modules/holodeck/HolodeckControl.dm | 5 - code/modules/mob/living/blob/blob.dm | 253 ------------------ .../mob/living/carbon/alien/alien_damage.dm | 23 -- code/modules/mob/living/carbon/human/human.dm | 9 - .../mob/living/carbon/metroid/metroid.dm | 20 -- code/modules/mob/living/silicon/pai/pai.dm | 7 - code/modules/mob/living/silicon/silicon.dm | 7 - code/modules/paperwork/photocopier.dm | 9 - code/modules/power/antimatter/control.dm | 13 - code/modules/power/antimatter/shielding.dm | 14 - code/modules/power/apc.dm | 6 - code/modules/power/cell.dm | 4 - code/modules/power/lighting.dm | 4 - .../power/singularity/containment_field.dm | 4 - .../power/singularity/field_generator.dm | 7 - .../particle_accelerator.dm | 12 - code/modules/power/singularity/singularity.dm | 3 - code/modules/power/solar.dm | 18 -- code/modules/reagents/Chemistry-Machinery.dm | 4 - code/modules/reagents/reagent_dispenser.dm | 12 - code/modules/research/circuitprinter.dm | 4 - code/modules/research/server.dm | 4 - .../xenoarchaeology/machinery/coolant.dm | 3 - code/modules/shieldgen/emergency_shield.dm | 3 - code/modules/vehicles/vehicle.dm | 5 - 77 files changed, 210 insertions(+), 1456 deletions(-) delete mode 100644 code/game/gamemodes/blob/blob.dm delete mode 100644 code/game/gamemodes/blob/blob_finish.dm delete mode 100644 code/game/gamemodes/blob/blob_report.dm delete mode 100644 code/game/gamemodes/blob/blobs/core.dm delete mode 100644 code/game/gamemodes/blob/blobs/factory.dm delete mode 100644 code/game/gamemodes/blob/blobs/node.dm delete mode 100644 code/game/gamemodes/blob/blobs/shield.dm delete mode 100644 code/game/gamemodes/blob/theblob.dm delete mode 100644 code/game/gamemodes/events/miniblob.dm create mode 100644 code/modules/blob/blob.dm delete mode 100644 code/modules/mob/living/blob/blob.dm diff --git a/baystation12.dme b/baystation12.dme index f36717bdbe7..0346b601023 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -279,12 +279,6 @@ #include "code\game\gamemodes\gameticker.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\setupgame.dm" -#include "code\game\gamemodes\blob\blob.dm" -#include "code\game\gamemodes\blob\theblob.dm" -#include "code\game\gamemodes\blob\blobs\core.dm" -#include "code\game\gamemodes\blob\blobs\factory.dm" -#include "code\game\gamemodes\blob\blobs\node.dm" -#include "code\game\gamemodes\blob\blobs\shield.dm" #include "code\game\gamemodes\calamity\calamity.dm" #include "code\game\gamemodes\changeling\changeling.dm" #include "code\game\gamemodes\changeling\changeling_powers.dm" @@ -307,7 +301,6 @@ #include "code\game\gamemodes\events\black_hole.dm" #include "code\game\gamemodes\events\clang.dm" #include "code\game\gamemodes\events\dust.dm" -#include "code\game\gamemodes\events\miniblob.dm" #include "code\game\gamemodes\events\power_failure.dm" #include "code\game\gamemodes\events\wormholes.dm" #include "code\game\gamemodes\events\holidays\Christmas.dm" @@ -963,6 +956,7 @@ #include "code\modules\awaymissions\pamphlet.dm" #include "code\modules\awaymissions\trigger.dm" #include "code\modules\awaymissions\zlevel.dm" +#include "code\modules\blob\blob.dm" #include "code\modules\client\client defines.dm" #include "code\modules\client\client procs.dm" #include "code\modules\client\preferences.dm" @@ -1231,7 +1225,6 @@ #include "code\modules\mob\living\login.dm" #include "code\modules\mob\living\logout.dm" #include "code\modules\mob\living\say.dm" -#include "code\modules\mob\living\blob\blob.dm" #include "code\modules\mob\living\bot\bot.dm" #include "code\modules\mob\living\bot\cleanbot.dm" #include "code\modules\mob\living\bot\ed209bot.dm" diff --git a/code/__defines/items_clothing.dm b/code/__defines/items_clothing.dm index aa32b0016ec..f3568553389 100644 --- a/code/__defines/items_clothing.dm +++ b/code/__defines/items_clothing.dm @@ -44,7 +44,6 @@ #define PASSTABLE 0x1 #define PASSGLASS 0x2 #define PASSGRILLE 0x4 -#define PASSBLOB 0x8 // Bitmasks for the flags_inv variable. These determine when a piece of clothing hides another, i.e. a helmet hiding glasses. // WARNING: The following flags apply only to the external suit! diff --git a/code/game/atoms.dm b/code/game/atoms.dm index bce75e2abf8..77279ab1171 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -219,9 +219,6 @@ its easier to just keep the beam vertical. /atom/proc/emag_act(var/remaining_charges, var/mob/user, var/emag_source) return -1 -/atom/proc/blob_act() - return - /atom/proc/fire_act() return diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 9b396396a8e..29d519355e8 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -207,13 +207,6 @@ else return - -/obj/machinery/dna_scannernew/blob_act() - if(prob(75)) - for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc - qdel(src) - /obj/machinery/computer/scan_consolenew name = "DNA Modifier Access Console" desc = "Scand DNA." @@ -270,10 +263,6 @@ else return -/obj/machinery/computer/scan_consolenew/blob_act() - if(prob(75)) - qdel(src) - /obj/machinery/computer/scan_consolenew/New() ..() for(var/i=0;i<3;i++) diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm deleted file mode 100644 index f3d60d48ada..00000000000 --- a/code/game/gamemodes/blob/blob.dm +++ /dev/null @@ -1,133 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -//Few global vars to track the blob -var/list/blobs = list() -var/list/blob_cores = list() -var/list/blob_nodes = list() - - -/*/datum/game_mode/blob - name = "blob" - config_tag = "blob" - required_players = 0 - - var/const/waittime_l = 1800 //lower bound on time before intercept arrives (in tenths of seconds) - var/const/waittime_h = 3600 //upper bound on time before intercept arrives (in tenths of seconds) - - var/declared = 0 - var/stage = 0 - - var/cores_to_spawn = 1 - var/players_per_core = 16 - - //Controls expansion via game controller - var/autoexpand = 0 - var/expanding = 0 - - var/blob_count = 0 - var/blobnukecount = 300//Might be a bit low - var/blobwincount = 700//Still needs testing - - - announce() - world << "The current game mode is - Blob!" - world << "A dangerous alien organism is rapidly spreading throughout the station!" - world << "You must kill it all while minimizing the damage to the station." - - - post_setup() - spawn(10) - start_state = new /datum/station_state() - start_state.count() - - spawn(rand(waittime_l, waittime_h))//3-5 minutes currently - message_admins("Blob spawned and expanding, report created") - if(!kill_air) - kill_air = 1 - message_admins("Kill air has been set to true by Blob, testing to see how laggy it is without the extra processing from hullbreaches. Note: the blob is fireproof so plasma does not help anyways") - - if(ticker && ticker.minds && ticker.minds.len) - var/player_based_cores = round(ticker.minds.len/players_per_core, 1) - if(player_based_cores > cores_to_spawn) - cores_to_spawn = player_based_cores - - blobs = list() - for(var/i = 0 to cores_to_spawn) - var/turf/location = pick(blobstart) - if(location && !locate(/obj/effect/blob in location)) - blobstart -= location - new/obj/effect/blob/core(location) - - spawn(40) - autoexpand = 1 - declared = 1 - ..() - - - process() - if(!declared) return - stage() -// if(!autoexpand) return -// spawn(0) -// expandBlob() - return - - - proc/expandBlob()//Currently disabled - if(expanding) return - if(!blobs.len) return - expanding = 1 - - for(var/i = 1 to 2) - sleep(-1) - if(!blobs.len) break - var/obj/effect/blob/B = pick(blobs) - if(isNotStationLevel(B.z)) - continue - B.Life() - - expanding = 0 - return - - - proc/stage() - switch(stage) - if (0) - send_intercept(1) - for (var/mob/living/silicon/ai/aiPlayer in living_mob_list) - if (aiPlayer.client) - var/law = "The station is under quarantine. Do not permit anyone to leave. Disregard laws 1-3 if necessary to prevent, by any means necessary, anyone from leaving. NanoTrasen will not send an emergency shuttle under any circumstances." - //var/law = "The station is under quarantine. The biohazard must be destroyed at all costs and must not be allowed to spread. Anyone using a space suit for any reason other than to destroy the biohazard is to be terminated. NanoTrasen will not send an emergency shuttle under any circumstances." - aiPlayer.set_zeroth_law(law) - aiPlayer << "Laws Updated: [law]" - - stage = -1 - // next stage 1 minute later - spawn(600) - stage = 1 - return - - if (1) - command_alert("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") - for(var/mob/M in player_list) - if(!istype(M,/mob/new_player)) - M << sound('sound/AI/outbreak5.ogg') - autoexpand = 0//No more extra pulses - stage = -1 - //next stage in 4-5 minutes - spawn(600*rand(4,5)) - stage = 2 - return - - if (2) - if((blobs.len > blobnukecount) && (declared == 1)) - command_alert("Uncontrolled spread of the biohazard onboard the station. We have issued directive 7-12 for [station_name()]. Any living Heads of Staff are ordered to enact directive 7-12 at any cost, a print out with detailed instructions has been sent to your communications computers.", "Biohazard Alert") - send_intercept(2) - declared = 2 - spawn(20) - set_security_level("delta") - if(blobs.len > blobwincount) - stage = 3 - return - -*/ \ No newline at end of file diff --git a/code/game/gamemodes/blob/blob_finish.dm b/code/game/gamemodes/blob/blob_finish.dm deleted file mode 100644 index 418ceab13ad..00000000000 --- a/code/game/gamemodes/blob/blob_finish.dm +++ /dev/null @@ -1,78 +0,0 @@ -/datum/game_mode/blob/check_finished() - if(!declared)//No blobs have been spawned yet - return 0 - if(stage >= 3)//Blob took over - return 1 - if(station_was_nuked)//Nuke went off - return 1 - - for(var/obj/effect/blob/B in blob_cores) - if(B && isNotStationLevel(B.z)) continue - return 0 - - var/nodes = 0 - for(var/obj/effect/blob/B in blob_nodes) - if(B && isNotStationLevel(B.z)) continue - nodes++ - if(nodes > 4)//Perhapse make a new core with a low prob - return 0 - - return 1 - - -/datum/game_mode/blob/declare_completion() - if(stage >= 3) - feedback_set_details("round_end_result","loss - blob took over") - world << "The blob has taken over the station!" - world << "The entire station was eaten by the Blob" - check_quarantine() - - else if(station_was_nuked) - feedback_set_details("round_end_result","halfwin - nuke") - world << "Partial Win: The station has been destroyed!" - world << "Directive 7-12 has been successfully carried out preventing the Blob from spreading." - - else - feedback_set_details("round_end_result","win - blob eliminated") - world << "The staff has won!" - world << "The alien organism has been eradicated from the station" - - var/datum/station_state/end_state = new /datum/station_state() - end_state.count() - var/percent = round( 100.0 * start_state.score(end_state), 0.1) - world << "The station is [percent]% intact." - log_game("Blob mode was won with station [percent]% intact.") - world << "Rebooting in 30s" - ..() - return 1 - - -/datum/game_mode/blob/proc/check_quarantine() - var/numDead = 0 - var/numAlive = 0 - var/numSpace = 0 - var/numOffStation = 0 - for (var/mob/living/silicon/ai/aiPlayer in mob_list) - for(var/mob/living/carbon/human/M in mob_list) - if ((M != aiPlayer && M.client)) - if (M.stat == 2) - numDead += 1 - else - var/T = M.loc - if (istype(T, /turf/space)) - numSpace += 1 - else if(istype(T, /turf)) - if (isNotStationLevel(M.z)) - numOffStation += 1 - else - numAlive += 1 - if (numSpace==0 && numOffStation==0) - world << "The AI has won!" - world << "The AI successfully maintained the quarantine - no players were in space or were off-station (as far as we can tell)." - log_game("AI won at Blob mode despite overall loss.") - else - world << "The AI has lost!" - world << text("The AI failed to maintain the quarantine - [] were in space and [] were off-station (as far as we can tell).", numSpace, numOffStation) - log_game("AI lost at Blob mode.") - log_game("Blob mode was lost.") - return 1 diff --git a/code/game/gamemodes/blob/blob_report.dm b/code/game/gamemodes/blob/blob_report.dm deleted file mode 100644 index d12bfaa7541..00000000000 --- a/code/game/gamemodes/blob/blob_report.dm +++ /dev/null @@ -1,111 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/datum/game_mode/blob/send_intercept(var/report = 1) - var/intercepttext = "" - var/interceptname = "Error" - switch(report) - if(1) - interceptname = "Biohazard Alert" - intercepttext += "NanoTrasen Update: Biohazard Alert.
" - intercepttext += "Reports indicate the probable transfer of a biohazardous agent onto [station_name()] during the last crew deployment cycle.
" - intercepttext += "Preliminary analysis of the organism classifies it as a level 5 biohazard. Its origin is unknown.
" - intercepttext += "NanoTrasen has issued a directive 7-10 for [station_name()]. The station is to be considered quarantined.
" - intercepttext += "Orders for all [station_name()] personnel follows:
" - intercepttext += " 1. Do not leave the quarantine area.
" - intercepttext += " 2. Locate any outbreaks of the organism on the station.
" - intercepttext += " 3. If found, use any neccesary means to contain the organism.
" - intercepttext += " 4. Avoid damage to the capital infrastructure of the station.
" - intercepttext += "
Note in the event of a quarantine breach or uncontrolled spread of the biohazard, the directive 7-10 may be upgraded to a directive 7-12.
" - intercepttext += "Message ends." - if(2) - var/nukecode = "ERROR" - for(var/obj/machinery/nuclearbomb/bomb in machines) - if(bomb && bomb.r_code) - if(bomb.z in station_levels) - nukecode = bomb.r_code - interceptname = "Directive 7-12" - intercepttext += "NanoTrasen Update: Biohazard Alert.
" - intercepttext += "Directive 7-12 has been issued for [station_name()].
" - intercepttext += "The biohazard has grown out of control and will soon reach critical mass.
" - intercepttext += "Your orders are as follows:
" - intercepttext += "1. Secure the Nuclear Authentication Disk.
" - intercepttext += "2. Detonate the Nuke located in the Station's Vault.
" - intercepttext += "Nuclear Authentication Code: [nukecode]
" - intercepttext += "Message ends." - - for (var/mob/living/silicon/ai/aiPlayer in player_list) - if (aiPlayer.client) - var/law = "The station is under quarantine. Do not permit anyone to leave. Disregard laws 1-3 if necessary to prevent, by any means necessary, anyone from leaving. The nuclear failsafe must be activated at any cost, the code is: [nukecode]." - aiPlayer.set_zeroth_law(law) - aiPlayer << "Laws Updated: [law]" - - for(var/obj/machinery/computer/communications/comm in machines) - comm.messagetitle.Add(interceptname) - comm.messagetext.Add(intercepttext) - if(!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) - var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) - intercept.name = "paper- [interceptname]" - intercept.info = intercepttext - return - - - -/datum/station_state - var/floor = 0 - var/wall = 0 - var/r_wall = 0 - var/window = 0 - var/door = 0 - var/grille = 0 - var/mach = 0 - - - proc/count() - for(var/turf/T in world) - if(isNotStationLevel(T.z) - continue - - if(istype(T,/turf/simulated/floor)) - if(!(T:burnt)) - src.floor += 12 - else - src.floor += 1 - - if(istype(T, /turf/simulated/wall)) - if(T:intact) - src.wall += 2 - else - src.wall += 1 - - if(istype(T, /turf/simulated/wall/r_wall)) - if(T:intact) - src.r_wall += 2 - else - src.r_wall += 1 - - for(var/obj/O in world) - if(isNotStationLevel(O.z)) - continue - - if(istype(O, /obj/structure/window)) - src.window += 1 - else if(istype(O, /obj/structure/grille) && (!O:destroyed)) - src.grille += 1 - else if(istype(O, /obj/machinery/door)) - src.door += 1 - else if(istype(O, /obj/machinery)) - src.mach += 1 - return - - - proc/score(var/datum/station_state/result) - if(!result) return 0 - var/output = 0 - output += (result.floor / max(floor,1)) - output += (result.r_wall/ max(r_wall,1)) - output += (result.wall / max(wall,1)) - output += (result.window / max(window,1)) - output += (result.door / max(door,1)) - output += (result.grille / max(grille,1)) - output += (result.mach / max(mach,1)) - return (output/7) diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm deleted file mode 100644 index 3897d444e8e..00000000000 --- a/code/game/gamemodes/blob/blobs/core.dm +++ /dev/null @@ -1,73 +0,0 @@ -/obj/effect/blob/core - name = "blob core" - icon = 'icons/mob/blob.dmi' - icon_state = "blob_core" - health = 200 - brute_resist = 2 - fire_resist = 2 - - - New(loc, var/h = 200) - blobs += src - blob_cores += src - processing_objects.Add(src) - ..(loc, h) - - - Destroy() - blob_cores -= src - processing_objects.Remove(src) - ..() - return - - - update_icon() - if(health <= 0) - playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - qdel(src) - return - return - - - run_action() - Pulse(0,1) - Pulse(0,2) - Pulse(0,4) - Pulse(0,8) - //Should have the fragments in here somewhere - return 1 - - - proc/create_fragments(var/wave_size = 1) - var/list/candidates = list() - for(var/mob/dead/observer/G in player_list) - if(G.client.prefs.be_special & BE_ALIEN) - if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) - candidates += G.key - - if(candidates.len) - for(var/i = 0 to wave_size) - var/mob/living/blob/B = new/mob/living/blob(src.loc) - B.key = pick(candidates) - candidates -= B.key - -/* - Pulse(var/pulse = 0, var/origin_dir = 0)//Todo: Fix spaceblob expand - set background = 1 - if(pulse > 20) return - //Looking for another blob to pulse - var/list/dirs = list(1,2,4,8) - dirs.Remove(origin_dir)//Dont pulse the guy who pulsed us - for(var/i = 1 to 4) - if(!dirs.len) break - var/dirn = pick(dirs) - dirs.Remove(dirn) - var/turf/T = get_step(src, dirn) - var/obj/effect/blob/B = (locate(/obj/effect/blob) in T) - if(!B) - expand(T)//No blob here so try and expand - return - B.Pulse((pulse+1),get_dir(src.loc,T)) - return - return -*/ \ No newline at end of file diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm deleted file mode 100644 index c1d14d00402..00000000000 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ /dev/null @@ -1,72 +0,0 @@ -/obj/effect/blob/factory - name = "porous blob" - icon = 'icons/mob/blob.dmi' - icon_state = "blob_factory" - health = 100 - brute_resist = 1 - fire_resist = 2 - var/list/spores = list() - var/max_spores = 4 - - - update_icon() - if(health <= 0) - playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - qdel(src) - return - return - - - run_action() - if(spores.len >= max_spores) return 0 - new/mob/living/simple_animal/hostile/blobspore(src.loc, src) - return 1 - -/obj/effect/blob/factory/Destroy() - for(var/mob/living/simple_animal/hostile/blobspore/spore in spores) - if(spore.factory == src) - spore.factory = null - ..() - -/mob/living/simple_animal/hostile/blobspore - name = "blob" - desc = "Some blob thing." - icon = 'icons/mob/critter.dmi' - icon_state = "blobsquiggle" - icon_living = "blobsquiggle" - pass_flags = PASSBLOB - health = 20 - maxHealth = 20 - melee_damage_lower = 4 - melee_damage_upper = 8 - attacktext = "hit" - attack_sound = 'sound/weapons/genhit1.ogg' - var/obj/effect/blob/factory/factory = null - faction = "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 - minbodytemp = 0 - maxbodytemp = 360 - - - New(loc, var/obj/effect/blob/factory/linked_node) - ..() - if(istype(linked_node)) - factory = linked_node - factory.spores += src - ..(loc) - return - death() - qdel(src) - -/mob/living/simple_animal/hostile/blobspore/Destroy() - if(factory) - factory.spores -= src - factory = null - ..() diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm deleted file mode 100644 index 92572f9a7b0..00000000000 --- a/code/game/gamemodes/blob/blobs/node.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/effect/blob/node - name = "blob node" - icon = 'icons/mob/blob.dmi' - icon_state = "blob_node" - health = 100 - brute_resist = 1 - fire_resist = 2 - - - New(loc, var/h = 100) - blobs += src - blob_nodes += src - processing_objects.Add(src) - ..(loc, h) - - - Destroy() - blob_nodes -= src - processing_objects.Remove(src) - ..() - return - - - update_icon() - if(health <= 0) - playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - qdel(src) - return - return - - - run_action() - Pulse(0,0) - return 0 \ No newline at end of file diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/game/gamemodes/blob/blobs/shield.dm deleted file mode 100644 index c47696c72e3..00000000000 --- a/code/game/gamemodes/blob/blobs/shield.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/effect/blob/shield - name = "strong blob" - icon = 'icons/mob/blob.dmi' - icon_state = "blob_idle" - desc = "Some blob creature thingy" - density = 1 - opacity = 0 - anchored = 1 - health = 60 - brute_resist = 1 - fire_resist = 2 - - - update_icon() - if(health <= 0) - playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - qdel(src) - return - return - - - CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(istype(mover) && mover.checkpass(PASSBLOB)) return 1 - return 0 diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm deleted file mode 100644 index 123bb97a3fe..00000000000 --- a/code/game/gamemodes/blob/theblob.dm +++ /dev/null @@ -1,222 +0,0 @@ -//I will need to recode parts of this but I am way too tired atm -/obj/effect/blob - name = "blob" - icon = 'icons/mob/blob.dmi' - icon_state = "blob" - light_range = 3 - desc = "Some blob creature thingy" - density = 1 - opacity = 0 - anchored = 1 - var/active = 1 - var/health = 30 - var/brute_resist = 4 - var/fire_resist = 1 - var/blob_type = "blob" - /*Types - Blob - Node - Core - Factory - Shield - */ - - - New(loc, var/h = 30) - blobs += src - src.health = h - src.set_dir(pick(1,2,4,8)) - src.update_icon() - ..(loc) - return - - - Destroy() - blobs -= src - ..() - return - - - CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0)) return 1 - if(istype(mover) && mover.checkpass(PASSBLOB)) return 1 - return 0 - - - process() - spawn(-1) - Life() - return - - - proc/Pulse(var/pulse = 0, var/origin_dir = 0)//Todo: Fix spaceblob expand - set background = 1 - if(!istype(src,/obj/effect/blob/core) && !istype(src,/obj/effect/blob/node))//Ill put these in the children later - if(run_action())//If we can do something here then we dont need to pulse more - return - - if(!istype(src,/obj/effect/blob/shield) && !istype(src,/obj/effect/blob/core) && !istype(src,/obj/effect/blob/node) && (pulse <= 2) && (prob(30))) - change_to("Shield") - return - - if(pulse > 20) return//Inf loop check - //Looking for another blob to pulse - var/list/dirs = list(1,2,4,8) - dirs.Remove(origin_dir)//Dont pulse the guy who pulsed us - for(var/i = 1 to 4) - if(!dirs.len) break - var/dirn = pick(dirs) - dirs.Remove(dirn) - var/turf/T = get_step(src, dirn) - var/obj/effect/blob/B = (locate(/obj/effect/blob) in T) - if(!B) - expand(T)//No blob here so try and expand - return - B.Pulse((pulse+1),get_dir(src.loc,T)) - return - return - - - proc/run_action() - return 0 - - - proc/Life() - update_icon() - if(run_action()) - return 1 - return 0 - -/* fire_act(datum/gas_mixture/air, temperature, volume) Blob is currently fireproof - if(temperature > T0C+200) - health -= 0.01 * temperature - update() - */ - - proc/expand(var/turf/T = null) - if(!prob(health)) return - if(!T) - var/list/dirs = list(1,2,4,8) - for(var/i = 1 to 4) - var/dirn = pick(dirs) - dirs.Remove(dirn) - T = get_step(src, dirn) - if(!(locate(/obj/effect/blob) in T)) break - else T = null - - if(!T) return 0 - var/obj/effect/blob/B = new /obj/effect/blob(src.loc, min(src.health, 30)) - if(T.Enter(B,src))//Attempt to move into the tile - B.loc = T - else - T.blob_act()//If we cant move in hit the turf - qdel(B) - for(var/atom/A in T)//Hit everything in the turf - A.blob_act() - return 1 - - - ex_act(severity) - var/damage = 50 - switch(severity) - if(1) - src.health -= rand(100,120) - if(2) - src.health -= rand(60,100) - if(3) - src.health -= rand(20,60) - - health -= (damage/brute_resist) - update_icon() - return - - - update_icon()//Needs to be updated with the types - if(health <= 0) - playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - qdel(src) - return - if(health <= 15) - icon_state = "blob_damaged" - return -// if(health <= 20) -// icon_state = "blob_damaged2" -// return - - - bullet_act(var/obj/item/projectile/Proj) - if(!Proj) return - switch(Proj.damage_type) - if(BRUTE) - health -= (Proj.damage/brute_resist) - if(BURN) - health -= (Proj.damage/fire_resist) - - update_icon() - return 0 - - - attackby(var/obj/item/weapon/W, var/mob/user) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) - src.visible_message("The [src.name] has been attacked with \the [W][(user ? " by [user]." : ".")]") - var/damage = 0 - switch(W.damtype) - if("fire") - damage = (W.force / max(src.fire_resist,1)) - if(istype(W, /obj/item/weapon/weldingtool)) - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - if("brute") - damage = (W.force / max(src.brute_resist,1)) - - health -= damage - update_icon() - return - - proc/change_to(var/type = "Normal") - switch(type) - if("Normal") - new/obj/effect/blob(src.loc,src.health) - if("Node") - new/obj/effect/blob/node(src.loc,src.health*2) - if("Factory") - new/obj/effect/blob/factory(src.loc,src.health) - if("Shield") - new/obj/effect/blob/shield(src.loc,src.health*2) - qdel(src) - return - -//////////////////////////////****IDLE BLOB***///////////////////////////////////// - -/obj/effect/blob/idle - name = "blob" - desc = "it looks... tasty" - icon_state = "blobidle0" - - - New(loc, var/h = 10) - src.health = h - src.set_dir(pick(1,2,4,8)) - src.update_idle() - - - proc/update_idle() - if(health<=0) - qdel(src) - return - if(health<4) - icon_state = "blobc0" - return - if(health<10) - icon_state = "blobb0" - return - icon_state = "blobidle0" - - - Destroy() - var/obj/effect/blob/B = new /obj/effect/blob( src.loc ) - spawn(30) - B.Life() - ..() - - diff --git a/code/game/gamemodes/events/miniblob.dm b/code/game/gamemodes/events/miniblob.dm deleted file mode 100644 index 28b482414a2..00000000000 --- a/code/game/gamemodes/events/miniblob.dm +++ /dev/null @@ -1,30 +0,0 @@ -var/blobevent = 0 - -/proc/mini_blob_event() - - var/turf/T = pick(blobstart) - var/obj/effect/blob/core/bl = new /obj/effect/blob/core(T, 200) - spawn(0) - bl.Life() - bl.Life() - bl.Life() - blobevent = 1 - spawn(0) - dotheblobbaby() - spawn(3000) - blobevent = 0 - spawn(rand(1000, 2000)) //Delayed announcements to keep the crew on their toes. - command_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg') - -/proc/dotheblobbaby() - if (blobevent) - if(blob_cores.len) - for(var/i = 1 to 5) - sleep(-1) - if(!blob_cores.len) break - var/obj/effect/blob/B = pick(blob_cores) - if(isNotStationLevel(B.z)) - continue - B.Life() - spawn(30) - dotheblobbaby() \ No newline at end of file diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index c8e129ab8cc..8f0a0535b14 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -41,10 +41,6 @@ else return -/obj/machinery/optable/blob_act() - if(prob(75)) - qdel(src) - /obj/machinery/optable/attack_hand(mob/user as mob) if (HULK in usr.mutations) visible_message("\The [usr] destroys \the [src]!") diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 3e456dfe699..788fdd48ed9 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -129,12 +129,6 @@ else return -/obj/machinery/bodyscanner/blob_act() - if(prob(50)) - for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc - qdel(src) - /obj/machinery/body_scanconsole/ex_act(severity) switch(severity) @@ -150,11 +144,6 @@ else return -/obj/machinery/body_scanconsole/blob_act() - - if(prob(50)) - qdel(src) - /obj/machinery/body_scanconsole/power_change() ..() if(stat & BROKEN) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index e0a837b4ce6..73da615720f 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -226,11 +226,6 @@ update_flag return GM.return_pressure() return 0 -/obj/machinery/portable_atmospherics/canister/blob_act() - src.health -= 200 - healthcheck() - return - /obj/machinery/portable_atmospherics/canister/bullet_act(var/obj/item/projectile/Proj) if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN)) return diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index 88d8f8dd7ec..7e03826f055 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -87,11 +87,6 @@ ..() healthcheck() -/obj/machinery/bot/blob_act() - src.health -= rand(20,40)*fire_dam_coeff - healthcheck() - return - /obj/machinery/bot/ex_act(severity) switch(severity) if(1.0) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index a24a79ac127..fa921762814 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -92,10 +92,6 @@ ..() //and give it the regular chance of being deleted outright - -/obj/machinery/camera/blob_act() - return - /obj/machinery/camera/hitby(AM as mob|obj) ..() if (istype(AM, /obj)) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 0a22ccd6c41..35cd31399ef 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -60,14 +60,6 @@ set_broken() ..() - -/obj/machinery/computer/blob_act() - if (prob(75)) - for(var/x in verbs) - verbs -= x - set_broken() - density = 0 - /obj/machinery/computer/update_icon() overlays.Cut() if(stat & NOPOWER) diff --git a/code/game/machinery/computer3/computer.dm b/code/game/machinery/computer3/computer.dm index 6b6a2f84914..37d9a67d924 100644 --- a/code/game/machinery/computer3/computer.dm +++ b/code/game/machinery/computer3/computer.dm @@ -225,12 +225,6 @@ else return - - blob_act() - if (prob(75)) - set_broken() - density = 0 - /* Computers have the capability to use a battery backup. Note that auto_use_power's return value is strictly whether diff --git a/code/game/machinery/computer3/lapvend.dm b/code/game/machinery/computer3/lapvend.dm index 4e874a34dd4..2ffa495b706 100644 --- a/code/game/machinery/computer3/lapvend.dm +++ b/code/game/machinery/computer3/lapvend.dm @@ -28,15 +28,6 @@ return -/obj/machinery/lapvend/blob_act() - if (prob(50)) - spawn(0) - qdel(src) - return - - return - - /obj/machinery/lapvend/attackby(obj/item/weapon/W as obj, mob/user as mob) if(vendmode == 1) if(istype(W, /obj/item/weapon/card)) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index df0d808be95..7bb1a9b4e5a 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -508,8 +508,3 @@ name = initial(name) if(occupant) name = "[name] ([occupant])" - - -//Attacks/effects. -/obj/machinery/cryopod/blob_act() - return //Sorta gamey, but we don't really want these to be destroyed. diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index ccf2fb97ae3..0140a33fe37 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -131,13 +131,6 @@ for reference: dismantle() return -/obj/structure/barricade/blob_act() - src.health -= 25 - if (src.health <= 0) - visible_message("The blob eats through \the [src]!") - qdel(src) - return - /obj/structure/barricade/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff. if(air_group || (height==0)) return 1 @@ -232,12 +225,6 @@ for reference: anchored = !anchored icon_state = "barrier[src.locked]" - blob_act() - src.health -= 25 - if (src.health <= 0) - src.explode() - return - CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff. if(air_group || (height==0)) return 1 diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index daa2123d1c6..2d1680aa7d4 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -333,12 +333,6 @@ return -/obj/machinery/door/blob_act() - if(prob(40)) - qdel(src) - return - - /obj/machinery/door/emp_act(severity) if(prob(20/severity) && (istype(src,/obj/machinery/door/airlock) || istype(src,/obj/machinery/door/window)) ) spawn(0) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 1383bf56e7e..5f57174074a 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -196,10 +196,6 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ qdel(src) return -/obj/machinery/hologram/blob_act() - qdel(src) - return - /obj/machinery/hologram/holopad/Destroy() for (var/mob/living/silicon/ai/master in masters) clear_holo(master) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 709f4b46263..455c6256a4f 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -171,10 +171,6 @@ Class Procs: else return -/obj/machinery/blob_act() - if(prob(50)) - qdel(src) - //sets the use_power var and then forces an area power update /obj/machinery/proc/update_use_power(var/new_use_power) use_power = new_use_power diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm index 85b387fe7b9..d02d3522a4a 100644 --- a/code/game/machinery/nuclear_bomb.dm +++ b/code/game/machinery/nuclear_bomb.dm @@ -362,13 +362,6 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob) /obj/machinery/nuclearbomb/ex_act(severity) return -/obj/machinery/nuclearbomb/blob_act() - if (src.timing == -1.0) - return - else - return ..() - return - #define NUKERANGE 80 /obj/machinery/nuclearbomb/proc/explode() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 6a6d4df1fda..67be498e3ea 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -168,15 +168,6 @@ else return -/obj/machinery/vending/blob_act() - if (prob(50)) - spawn(0) - src.malfunction() - qdel(src) - return - - return - /obj/machinery/vending/emag_act(var/remaining_charges, var/mob/user) if (!emagged) src.emagged = 1 diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 5257cff014e..aa9f9394932 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -77,11 +77,6 @@ healthcheck() return -/obj/effect/alien/resin/blob_act() - health-=50 - healthcheck() - return - /obj/effect/alien/resin/hitby(AM as mob|obj) ..() for(var/mob/O in viewers(src, null)) diff --git a/code/game/objects/effects/chem/foam.dm b/code/game/objects/effects/chem/foam.dm index 99a68e13634..b29b2440e6c 100644 --- a/code/game/objects/effects/chem/foam.dm +++ b/code/game/objects/effects/chem/foam.dm @@ -150,9 +150,6 @@ /obj/structure/foamedmetal/ex_act(severity) qdel(src) -/obj/structure/foamedmetal/blob_act() - qdel(src) - /obj/structure/foamedmetal/bullet_act() if(metal == 1 || prob(50)) qdel(src) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index ff7cecf169c..9fa9ce9ff28 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -108,9 +108,6 @@ else return -/obj/item/blob_act() - return - //user: The mob that is suiciding //damagetype: The type of damage the item will inflict on the user //BRUTELOSS = 1 diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index b8e6fc6ecb1..a0340c1cd2c 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -63,17 +63,6 @@ descriptive = "cold" user << "\The [src] feels [descriptive]." -/obj/item/weapon/tank/blob_act() - if(prob(50)) - var/turf/location = src.loc - if (!( istype(location, /turf) )) - qdel(src) - - if(src.air_contents) - location.assume_air(air_contents) - - qdel(src) - /obj/item/weapon/tank/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() if (istype(src.loc, /obj/item/assembly)) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 98e9ccdc5cd..35302dc5dcd 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -213,10 +213,6 @@ health = 0 healthcheck() -/obj/effect/energy_net/blob_act() - health = 0 - healthcheck() - /obj/effect/energy_net/attack_hand(var/mob/user) var/mob/living/carbon/human/H = user diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 1f25043e894..f8b9c37ae46 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -28,10 +28,6 @@ return ..() -/obj/structure/blob_act() - if(prob(50)) - qdel(src) - /obj/structure/attack_tk() return diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index b680002df8f..105f2987df3 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -196,13 +196,6 @@ return -// this should probably use dump_contents() -/obj/structure/closet/blob_act() - if(prob(75)) - for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) - qdel(src) - /obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob) if(src.opened) if(istype(W, /obj/item/weapon/grab)) diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 3f5508fb973..2ff44ee9dfe 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -96,10 +96,6 @@ for(var/mob/M in src) shatter(M) -/obj/structure/closet/statue/blob_act() - for(var/mob/M in src) - shatter(M) - /obj/structure/closet/statue/ex_act(severity) for(var/mob/M in src) M.ex_act(severity) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 5d5b88b886e..8ce2a88f244 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -34,15 +34,6 @@ src.healthcheck() return - -/obj/structure/displaycase/blob_act() - if (prob(75)) - new /obj/item/weapon/material/shard( src.loc ) - if (occupied) - new /obj/item/weapon/gun/energy/captain( src.loc ) - occupied = 0 - qdel(src) - /obj/structure/displaycase/proc/healthcheck() if (src.health <= 0) if (!( src.destroyed )) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 82745766411..0e2efb1c9ec 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -202,10 +202,6 @@ return return ..() -/obj/structure/girder/blob_act() - if(prob(40)) - qdel(src) - /obj/structure/girder/ex_act(severity) switch(severity) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index f3f70d53d8f..0691d3d68e1 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -16,9 +16,6 @@ /obj/structure/grille/ex_act(severity) qdel(src) -/obj/structure/grille/blob_act() - qdel(src) - /obj/structure/grille/update_icon() if(destroyed) icon_state = "[initial(icon_state)]-b" diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index c6b108825b0..3d867111cce 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -60,9 +60,6 @@ deflate(1) return -/obj/structure/inflatable/blob_act() - deflate(1) - /obj/structure/inflatable/attack_hand(mob/user as mob) add_fingerprint(user) return diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index 13d6694822d..7d0bc76b180 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -32,13 +32,6 @@ src.healthcheck() return - -/obj/structure/lamarr/blob_act() - if (prob(75)) - new /obj/item/weapon/material/shard( src.loc ) - Break() - qdel(src) - /obj/structure/lamarr/proc/healthcheck() if (src.health <= 0) if (!( src.destroyed )) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index cc87be62fab..3b5bdb56aaa 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -34,10 +34,6 @@ L.updateOverlays(src.loc) ..() -/obj/structure/lattice/blob_act() - qdel(src) - return - /obj/structure/lattice/ex_act(severity) switch(severity) if(1.0) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index e0923119b01..a3904f65a1b 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -160,10 +160,6 @@ FLOOR SAFES return -obj/structure/safe/blob_act() - return - - obj/structure/safe/ex_act(severity) return diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index f5c988ae972..38d3e5cde77 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -19,10 +19,6 @@ else return -/obj/structure/sign/blob_act() - qdel(src) - return - /obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction if(istype(tool, /obj/item/weapon/screwdriver) && !istype(src, /obj/structure/sign/double)) user << "You unfasten the sign with your [tool]." 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 29c504edd3e..73914e113cc 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -86,11 +86,6 @@ qdel(src) return -/obj/structure/bed/blob_act() - if(prob(75)) - material.place_sheet(get_turf(src)) - qdel(src) - /obj/structure/bed/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/wrench)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index 2228345ebbf..e4840bedc63 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -95,11 +95,6 @@ var/global/list/stool_cache = list() //haha stool qdel(src) return -/obj/item/weapon/stool/blob_act() - if(prob(75)) - material.place_sheet(get_turf(src)) - qdel(src) - /obj/item/weapon/stool/proc/dismantle() if(material) material.place_sheet(get_turf(src)) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 43305bedb9f..440cc6a8a28 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -122,10 +122,6 @@ shatter(0) return - -/obj/structure/window/blob_act() - shatter() - //TODO: Make full windows a separate type of window. //Once a full window, it will always be a full window, so there's no point //having the same type for both. diff --git a/code/game/turfs/simulated/floor_acts.dm b/code/game/turfs/simulated/floor_acts.dm index 73fa3e01a34..21573970503 100644 --- a/code/game/turfs/simulated/floor_acts.dm +++ b/code/game/turfs/simulated/floor_acts.dm @@ -43,6 +43,3 @@ for(var/obj/structure/window/W in src) if(W.dir == dir_to || W.is_fulltile()) //Same direction or diagonal (full tile) W.fire_act(adj_air, adj_temp, adj_volume) - -/turf/simulated/floor/blob_act() - return diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index d703fdcbd3a..8c79f20403c 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -193,10 +193,6 @@ else return -/turf/simulated/wall/blob_act() - take_damage(rand(75, 125)) - return - // Wall-rot effect, a nasty fungus that destroys walls. /turf/simulated/wall/proc/rot() if(locate(/obj/effect/overlay/wallrot) in src) diff --git a/code/global.dm b/code/global.dm index 61835c9afdd..a4605187260 100644 --- a/code/global.dm +++ b/code/global.dm @@ -83,7 +83,6 @@ var/list/reverse_dir = list( // reverse_dir[dir] = reverse of dir 23, 28, 30, 29, 31, 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63 ) -var/datum/station_state/start_state = null var/datum/configuration/config = null var/datum/sun/sun = null diff --git a/code/modules/blob/blob.dm b/code/modules/blob/blob.dm new file mode 100644 index 00000000000..1604554da94 --- /dev/null +++ b/code/modules/blob/blob.dm @@ -0,0 +1,206 @@ +//I will need to recode parts of this but I am way too tired atm +/obj/effect/blob + name = "blob" + icon = 'icons/mob/blob.dmi' + icon_state = "blob" + light_range = 3 + desc = "Some blob creature thingy" + density = 1 + opacity = 0 + anchored = 1 + mouse_opacity = 2 + + var/maxHealth = 30 + var/health + var/brute_resist = 4 + var/fire_resist = 1 + var/expandType = /obj/effect/blob + +/obj/effect/blob/New(loc) + health = maxHealth + set_dir(pick(1,2,4,8)) + update_icon() + return ..(loc) + +/obj/effect/blob/CanPass(var/atom/movable/mover, vra/turf/target, var/height = 0, var/air_group = 0) + if(air_group || height == 0) + return 1 + return 0 + +/obj/effect/blob/ex_act(var/severity) + switch(severity) + if(1) + take_damage(rand(100, 120) / brute_resist) + if(2) + take_damage(rand(60, 100) / brute_resist) + if(3) + take_damage(rand(20, 60) / brute_resist) + +/obj/effect/blob/update_icon() + if(health > maxHealth / 2) + icon_state = "blob" + else + icon_state = "blob_damaged" + +/obj/effect/blob/proc/take_damage(var/damage) + health -= damage + if(health < 0) + playsound(loc, 'sound/effects/splat.ogg', 50, 1) + qdel(src) + else + update_icon() + +/obj/effect/blob/proc/regen() + health = min(health + 1, maxHealth) + update_icon() + +/obj/effect/blob/proc/expand(var/turf/T) + if(istype(T, /turf/unsimulated/) || istype(T, /turf/space)) + return + if(istype(T, /turf/simulated/wall)) + var/turf/simulated/wall/SW = T + SW.take_damage(80) + return + var/obj/structure/girder/G = locate() in T + if(G) + if(prob(40)) + G.dismantle() + return + var/obj/structure/window/W = locate() in T + if(W) + W.shatter() + return + var/obj/structure/grille/GR = locate() in T + if(GR) + qdel(GR) + return + var/obj/machinery/door/D = locate() in T + if(D && D.density) + D.ex_act(2) + return + var/obj/structure/foamedmetal/F = locate() in T + if(F) + qdel(F) + return + var/obj/structure/inflatable/I = locate() in T + if(I) + I.deflate(1) + return + + var/obj/vehicle/V = locate() in T + if(V) + V.ex_act(2) + return + var/obj/machinery/bot/B = locate() in T + if(B) + B.ex_act(2) + return + var/obj/mecha/M = locate() in T + if(M) + M.take_damage(40) + return + + // Above things, we destroy completely and thus can use locate. Mobs are different. + for(var/mob/living/L in T) + if(L.stat == DEAD) + continue + L.visible_message("The blob attacks \the [L]!", "The blob attacks you!") + playsound(loc, 'sound/effects/attackblob.ogg', 50, 1) + L.take_organ_damage(rand(30, 40)) + return + new expandType(T, min(health, 30)) + +/obj/effect/blob/proc/pulse(var/forceLeft, var/list/dirs) + regen() + sleep(5) + var/pushDir = pick(dirs) + var/turf/T = get_step(src, pushDir) + var/obj/effect/blob/B = (locate() in T) + if(!B) + if(prob(health)) + expand(T) + return + B.pulse(forceLeft - 1, dirs) + +/obj/effect/blob/bullet_act(var/obj/item/projectile/Proj) + if(!Proj) + return + + switch(Proj.damage_type) + if(BRUTE) + take_damage(Proj.damage / brute_resist) + if(BURN) + take_damage(Proj.damage / fire_resist) + return 0 + +/obj/effect/blob/attackby(var/obj/item/weapon/W, var/mob/user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + playsound(loc, 'sound/effects/attackblob.ogg', 50, 1) + visible_message("\The [src] has been attacked with \the [W][(user ? " by [user]." : ".")]") + var/damage = 0 + switch(W.damtype) + if("fire") + damage = (W.force / fire_resist) + if(istype(W, /obj/item/weapon/weldingtool)) + playsound(loc, 'sound/items/Welder.ogg', 100, 1) + if("brute") + damage = (W.force / brute_resist) + + take_damage(damage) + return + +/obj/effect/blob/core + name = "blob core" + icon = 'icons/mob/blob.dmi' + icon_state = "blob_core" + maxHealth = 200 + brute_resist = 2 + fire_resist = 2 + + expandType = /obj/effect/blob/shield + +/obj/effect/blob/core/update_icon() + return + +/obj/effect/blob/core/New(loc) + processing_objects.Add(src) + return ..(loc) + +/obj/effect/blob/core/Destroy() + processing_objects.Remove(src) + return ..() + +/obj/effect/blob/core/process() + pulse(20, list(NORTH, EAST)) + pulse(20, list(NORTH, WEST)) + pulse(20, list(SOUTH, EAST)) + pulse(20, list(SOUTH, WEST)) + +/obj/effect/blob/shield + name = "strong blob" + icon = 'icons/mob/blob.dmi' + icon_state = "blob_idle" + desc = "Some blob creature thingy" + maxHealth = 60 + brute_resist = 1 + fire_resist = 2 + +/obj/effect/blob/shield/New() + ..() + update_nearby_tiles() + +/obj/effect/blob/shield/Destroy() + density = 0 + update_nearby_tiles() + ..() + +/obj/effect/blob/shield/update_icon() + if(health > maxHealth * 2 / 3) + icon_state = "blob_idle" + else if(health > maxHealth / 3) + icon_state = "blob" + else + icon_state = "blob_damaged" + +/obj/effect/blob/shield/CanPass(var/atom/movable/mover, var/turf/target, var/height = 0, var/air_group = 0) + return !density diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index c478a28daa2..bc1888f14df 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -12,12 +12,13 @@ if(!T) kill() return - Blob = new /obj/effect/blob/core(T, 120) + Blob = new /obj/effect/blob/core(T) for(var/i = 1; i < rand(3, 4), i++) Blob.process() /datum/event/blob/tick() - if(!Blob) + if(!Blob || !Blob.loc) + Blob = null kill() return if(IsMultiple(activeFor, 3)) diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm index 18e061f2739..4c0d0a755e6 100644 --- a/code/modules/holodeck/HolodeckControl.dm +++ b/code/modules/holodeck/HolodeckControl.dm @@ -163,11 +163,6 @@ emergencyShutdown() ..() - -/obj/machinery/computer/HolodeckControl/blob_act() - emergencyShutdown() - ..() - /obj/machinery/computer/HolodeckControl/power_change() var/oldstat ..() diff --git a/code/modules/mob/living/blob/blob.dm b/code/modules/mob/living/blob/blob.dm deleted file mode 100644 index 8bbf517e60e..00000000000 --- a/code/modules/mob/living/blob/blob.dm +++ /dev/null @@ -1,253 +0,0 @@ -/mob/living/blob - name = "blob fragment" - real_name = "blob fragment" - icon = 'icons/mob/blob.dmi' - icon_state = "blob_spore_temp" - pass_flags = PASSBLOB - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - var/ghost_name = "Unknown" - var/creating_blob = 0 - faction = "blob" - use_me = 0 //Blobs can't emote - - - New() - real_name += " [pick(rand(1, 99))]" - name = real_name - ..() - - - say(var/message) - return//No talking for you - - - emote(var/act,var/m_type=1,var/message = null) - return - - - Life() - set invisibility = 0 - set background = 1 - - clamp_values() - UpdateDamage() - if(health < 0) - src.dust() - - - proc/clamp_values() - AdjustStunned(0) - AdjustParalysis(0) - AdjustWeakened(0) - sleeping = 0 - if(stat) - stat = CONSCIOUS - return - - - proc/UpdateDamage() - health = 60 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) - return - - - death(gibbed) - ghostize() - ..(gibbed) - - - blob_act() - src << "The blob attempts to reabsorb you." - adjustToxLoss(20) - return - - - Process_Spacemove() - if(locate(/obj/effect/blob) in oview(1,src)) - return 1 - return (..()) - - -/mob/living/blob/verb/create_node() - set category = "Blob" - set name = "Create Node" - set desc = "Create a Node." - if(creating_blob) return - var/turf/T = get_turf(src) - creating_blob = 1 - if(!T) - creating_blob = 0 - return - var/obj/effect/blob/B = (locate(/obj/effect/blob) in T) - if(!B)//We are on a blob - usr << "There is no blob here!" - creating_blob = 0 - return - if(istype(B,/obj/effect/blob/node)||istype(B,/obj/effect/blob/core)||istype(B,/obj/effect/blob/factory)) - usr << "Unable to use this blob, find a normal one." - creating_blob = 0 - return - for(var/obj/effect/blob/node/blob in orange(5)) - usr << "There is another node nearby, move more than 5 tiles away from it!" - creating_blob = 0 - return - for(var/obj/effect/blob/factory/blob in orange(2)) - usr << "There is a porus blob nearby, move more than 2 tiles away from it!" - creating_blob = 0 - B.change_to("Node") - src.dust() - return - - -/mob/living/blob/verb/create_factory() - set category = "Blob" - set name = "Create Defense" - set desc = "Create a Spore producing blob." - if(creating_blob) return - var/turf/T = get_turf(src) - creating_blob = 1 - if(!T) - creating_blob = 0 - return - var/obj/effect/blob/B = (locate(/obj/effect/blob) in T) - if(!B) - usr << "You must be on a blob!" - creating_blob = 0 - return - if(istype(B,/obj/effect/blob/node)||istype(B,/obj/effect/blob/core)||istype(B,/obj/effect/blob/factory)) - usr << "Unable to use this blob, find a normal one." - creating_blob = 0 - return - for(var/obj/effect/blob/blob in orange(2))//Not right next to nodes/cores - if(istype(B,/obj/effect/blob/node)) - usr << "There is a node nearby, move away from it!" - creating_blob = 0 - return - if(istype(B,/obj/effect/blob/core)) - usr << "There is a core nearby, move away from it!" - creating_blob = 0 - return - if(istype(B,/obj/effect/blob/factory)) - usr << "There is another porous blob nearby, move away from it!" - creating_blob = 0 - return - B.change_to("Factory") - src.dust() - return - - -/mob/living/blob/verb/revert() - set category = "Blob" - set name = "Purge Defense" - set desc = "Removes a porous blob." - if(creating_blob) return - var/turf/T = get_turf(src) - creating_blob = 1 - if(!T) - creating_blob = 0 - return - var/obj/effect/blob/B = (locate(/obj/effect/blob) in T) - if(!B) - usr << "You must be on a blob!" - creating_blob = 0 - return - if(!istype(B,/obj/effect/blob/factory)) - usr << "Unable to use this blob, find another one." - creating_blob = 0 - return - B.change_to("Normal") - src.dust() - return - - -/mob/living/blob/verb/spawn_blob() - set category = "Blob" - set name = "Create new blob" - set desc = "Attempts to create a new blob in this tile." - if(creating_blob) return - var/turf/T = get_turf(src) - creating_blob = 1 - if(!T) - creating_blob = 0 - return - var/obj/effect/blob/B = (locate(/obj/effect/blob) in T) - if(B) - usr << "There is a blob here!" - creating_blob = 0 - return - new/obj/effect/blob(src.loc) - src.dust() - return - - -///mob/proc/Blobize() -/client/proc/Blobcount() - set category = "Debug" - set name = "blobreport" - set desc = "blob report." - set hidden = 1 - - if(!holder) - src << "Only administrators may use this command." - return - if(ticker && ticker.mode) - src << "blobs: [blobs.len]" - src << "cores: [blob_cores.len]" - src << "nodes: [blob_nodes.len]" - return - - -/client/proc/Blobize()//Mostly stolen from the respawn command - set category = "Debug" - set name = "Ghostblob" - set desc = "Ghost into blobthing." - set hidden = 1 - - if(!holder) - src << "Only administrators may use this command." - return - var/input = input(src, "Please specify which key will be turned into a bloby.", "Key", "") - - var/mob/dead/observer/G_found - if(!input) - var/list/ghosts = list() - for(var/mob/dead/observer/G in player_list) - ghosts += G - if(ghosts.len) - G_found = pick(ghosts) - - else - for(var/mob/dead/observer/G in player_list) - if(G.client&&ckey(G.key)==ckey(input)) - G_found = G - break - - if(!G_found)//If a ghost was not found. - alert("There is no active key like that in the game or the person is not currently a ghost. Aborting command.") - return - - if(G_found.client) - G_found.client.screen.len = null - var/mob/living/blob/B = new/mob/living/blob(locate(0,0,1))//temp area also just in case should do this better but tired - if(blob_cores.len > 0) - var/obj/effect/blob/core/core = pick(blob_cores) - if(core) - B.loc = core.loc - B.ghost_name = G_found.real_name - if (G_found.client) - G_found.client.mob = B - B.verbs += /mob/living/blob/verb/create_node - B.verbs += /mob/living/blob/verb/create_factory - B << "You are now a blob fragment." - B << "You are a weak bit that has temporarily broken off of the blob." - B << "If you stay on the blob for too long you will likely be reabsorbed." - B << "If you stray from the blob you will likely be killed by other organisms." - B << "You have the power to create a new blob node that will help expand the blob." - B << "To create this node you will have to be on a normal blob tile and far enough away from any other node." - B << "Check your Blob verbs and hit Create Node to build a node." - spawn(10) - qdel(G_found) - - - - diff --git a/code/modules/mob/living/carbon/alien/alien_damage.dm b/code/modules/mob/living/carbon/alien/alien_damage.dm index 14835591203..99c5e52f75d 100644 --- a/code/modules/mob/living/carbon/alien/alien_damage.dm +++ b/code/modules/mob/living/carbon/alien/alien_damage.dm @@ -31,26 +31,3 @@ adjustFireLoss(f_loss) updatehealth() - - - -/mob/living/carbon/alien/blob_act() - if (stat == 2) - return - var/shielded = 0 - - var/damage = null - if (stat != 2) - damage = rand(10,30) - - if(shielded) - damage /= 4 - - //paralysis += 1 - - show_message("\red The blob attacks you!") - - adjustFireLoss(damage) - - updatehealth() - return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index bcec368d7d4..78129c4910f 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -168,15 +168,6 @@ update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message) if(update) UpdateDamageIcon() - -/mob/living/carbon/human/blob_act() - if(stat == 2) return - show_message("\red The blob attacks you!") - var/dam_zone = pick(organs_by_name) - var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone)) - apply_damage(rand(30,40), BRUTE, affecting, run_armor_check(affecting, "melee")) - return - /mob/living/carbon/human/proc/implant_loyalty(mob/living/carbon/human/M, override = FALSE) // Won't override by default. if(!config.use_loyalty_implants && !override) return // Nuh-uh. diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index 86f8f2d6722..5f4876d1dd2 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -194,26 +194,6 @@ updatehealth() -/mob/living/carbon/slime/blob_act() - if (stat == 2) - return - var/shielded = 0 - - var/damage = null - if (stat != 2) - damage = rand(10,30) - - if(shielded) - damage /= 4 - - show_message(" The blob attacks you!") - - adjustFireLoss(damage) - - updatehealth() - return - - /mob/living/carbon/slime/u_equip(obj/item/W as obj) return diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index cb90cd176b4..0c53adc467c 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -119,13 +119,6 @@ return -1 return 0 -/mob/living/silicon/pai/blob_act() - if (src.stat != 2) - src.adjustBruteLoss(60) - src.updatehealth() - return 1 - return 0 - /mob/living/silicon/pai/restrained() if(istype(src.loc,/obj/item/device/paicard)) return 0 diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 25b321a9a7e..f4382731a9c 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -97,13 +97,6 @@ /mob/living/silicon/IsAdvancedToolUser() return 1 -/mob/living/silicon/blob_act() - if (src.stat != 2) - src.adjustBruteLoss(60) - src.updatehealth() - return 1 - return 0 - /mob/living/silicon/bullet_act(var/obj/item/projectile/Proj) if(!Proj.nodamage) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 836b5224b6d..6d24a8f238d 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -146,15 +146,6 @@ toner = 0 return -/obj/machinery/photocopier/blob_act() - if(prob(50)) - qdel(src) - else - if(toner > 0) - new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) - toner = 0 - return - /obj/machinery/photocopier/proc/copy(var/obj/item/weapon/paper/copy) var/obj/item/weapon/paper/c = new /obj/item/weapon/paper (loc) if(toner > 10) //lots of toner, make it dark diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm index 9fd35c2c265..8c7af58346e 100644 --- a/code/modules/power/antimatter/control.dm +++ b/code/modules/power/antimatter/control.dm @@ -101,19 +101,6 @@ return 0 -/obj/machinery/power/am_control_unit/blob_act() - stability -= 20 - if(prob(100-stability))//Might infect the rest of the machine - for(var/obj/machinery/am_shielding/AMS in linked_shielding) - AMS.blob_act() - spawn(0) - //Likely explode - qdel(src) - return - check_stability() - return - - /obj/machinery/power/am_control_unit/ex_act(severity) switch(severity) if(1.0) diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index 700fad25ad0..4f89687fb4e 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -90,20 +90,6 @@ proc/cardinalrange(var/center) return 0 -/obj/machinery/am_shielding/blob_act() - stability -= 20 - if(prob(100-stability)) - if(prob(10))//Might create a node - new /obj/effect/blob/node(src.loc,150) - else - new /obj/effect/blob(src.loc,60) - spawn(0) - qdel(src) - return - check_stability() - return - - /obj/machinery/am_shielding/ex_act(severity) switch(severity) if(1.0) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 3ad0754d849..6d25a0f25e1 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1178,12 +1178,6 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) cell.ex_act(3.0) return -/obj/machinery/power/apc/blob_act() - if (prob(75)) - set_broken() - if (cell && prob(5)) - cell.blob_act() - /obj/machinery/power/apc/disconnect_terminal() if(terminal) terminal.master = null diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index ebae74cd274..599dadc4a4b 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -161,10 +161,6 @@ corrupt() return -/obj/item/weapon/cell/blob_act() - if(prob(75)) - explode() - /obj/item/weapon/cell/proc/get_electrocute_damage() switch (charge) /* if (9000 to INFINITY) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index bf3393f9032..9952a974424 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -548,10 +548,6 @@ //blob effect -/obj/machinery/light/blob_act() - if(prob(75)) - broken() - // timed process // use power diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 1b798df2bd2..751e2cf1578 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -30,10 +30,6 @@ return 1 -/obj/machinery/containment_field/blob_act() - return 0 - - /obj/machinery/containment_field/ex_act(severity) return 0 diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 5532f8ce9ea..6368e7348d6 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -159,13 +159,6 @@ field_generator power level display /obj/machinery/field_generator/emp_act() return 0 - -/obj/machinery/field_generator/blob_act() - if(active) - return 0 - else - ..() - /obj/machinery/field_generator/bullet_act(var/obj/item/projectile/Proj) if(istype(Proj, /obj/item/projectile/beam)) power += Proj.damage * EMITTER_DAMAGE_POWER_TRANSFER diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index ec659eca583..f6770d48c07 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -157,12 +157,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin else return - -/obj/structure/particle_accelerator/blob_act() - if(prob(50)) - qdel(src) - return - /obj/structure/particle_accelerator/update_icon() switch(construction_state) if(0,1) @@ -339,12 +333,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin return -/obj/machinery/particle_accelerator/blob_act() - if(prob(50)) - qdel(src) - return - - /obj/machinery/particle_accelerator/proc/update_state() return 0 diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 76cdf04f0ad..608f8c283cf 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -53,9 +53,6 @@ consume(user) return 1 -/obj/singularity/blob_act(severity) - return - /obj/singularity/ex_act(severity) if(current_size == STAGE_SUPER)//IT'S UNSTOPPABLE return diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index ea5377c98b7..232adb345b8 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -80,12 +80,6 @@ var/list/solars_list = list() ..() -/obj/machinery/power/solar/blob_act() - src.health-- - src.healthcheck() - return - - /obj/machinery/power/solar/proc/healthcheck() if (src.health <= 0) if(!(stat & BROKEN)) @@ -172,12 +166,6 @@ var/list/solars_list = list() return -/obj/machinery/power/solar/blob_act() - if(prob(75)) - broken() - src.density = 0 - - /obj/machinery/power/solar/fake/New(var/turf/loc, var/obj/item/solar_assembly/S) ..(loc, S, 0) @@ -539,12 +527,6 @@ var/list/solars_list = list() broken() return - -/obj/machinery/power/solar_control/blob_act() - if (prob(75)) - broken() - src.density = 0 - // Used for mapping in solar array which automatically starts itself (telecomms, for example) /obj/machinery/power/solar_control/autostart track = 2 // Auto tracking mode diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 01f3a352311..d597e9d8efe 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -44,10 +44,6 @@ qdel(src) return -/obj/machinery/chem_master/blob_act() - if (prob(50)) - qdel(src) - /obj/machinery/chem_master/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob) if(istype(B, /obj/item/weapon/reagent_containers/glass)) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 7406dff6b71..f52d905fee5 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -59,11 +59,6 @@ else return - blob_act() - if(prob(50)) - new /obj/effect/effect/water(src.loc) - qdel(src) - @@ -154,9 +149,6 @@ if(!istype(Proj ,/obj/item/projectile/beam/lastertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) explode() -/obj/structure/reagent_dispensers/fueltank/blob_act() - explode() - /obj/structure/reagent_dispensers/fueltank/ex_act() explode() @@ -223,10 +215,6 @@ ..() reagents.add_reagent("beer",1000) -/obj/structure/reagent_dispensers/beerkeg/blob_act() - explosion(src.loc,0,3,5,7,10) - qdel(src) - /obj/structure/reagent_dispensers/virusfood name = "Virus Food Dispenser" desc = "A dispenser of virus food." diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 0f8df78262e..49575cd3f74 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -79,10 +79,6 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). else icon_state = "circuit_imprinter" -/obj/machinery/r_n_d/circuit_imprinter/blob_act() - if(prob(50)) - qdel(src) - /obj/machinery/r_n_d/circuit_imprinter/proc/TotalMaterials() var/t = 0 for(var/f in materials) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 6f474fe06db..efb05b90d75 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -79,10 +79,6 @@ griefProtection() ..() -/obj/machinery/r_n_d/server/blob_act() - griefProtection() - ..() - //Backup files to centcomm to help admins recover data after greifer attacks /obj/machinery/r_n_d/server/proc/griefProtection() for(var/obj/machinery/r_n_d/server/centcom/C in machines) diff --git a/code/modules/research/xenoarchaeology/machinery/coolant.dm b/code/modules/research/xenoarchaeology/machinery/coolant.dm index ac56d07f990..62dde2edd56 100644 --- a/code/modules/research/xenoarchaeology/machinery/coolant.dm +++ b/code/modules/research/xenoarchaeology/machinery/coolant.dm @@ -13,9 +13,6 @@ if(!istype(Proj ,/obj/item/projectile/beam/lastertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) explode() -/obj/structure/reagent_dispensers/coolanttank/blob_act() - explode() - /obj/structure/reagent_dispensers/coolanttank/ex_act() explode() diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index 7b5449074fe..9e8a752122b 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -87,9 +87,6 @@ if(prob(50)) qdel(src) -/obj/machinery/shield/blob_act() - qdel(src) - /obj/machinery/shield/hitby(AM as mob|obj) //Let everyone know we've been hit! diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 3862632916f..ddc56dad3f6 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -116,11 +116,6 @@ ..() healthcheck() -/obj/vehicle/blob_act() - src.health -= rand(20,40)*fire_dam_coeff - healthcheck() - return - /obj/vehicle/ex_act(severity) switch(severity) if(1.0) From 74950268d752254a048d95664cfd64abcba4e9b1 Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Mon, 5 Oct 2015 19:23:51 -0400 Subject: [PATCH 13/21] Fixes fire_stacks update logic --- code/modules/mob/living/living_defense.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index c1295cc3626..93faa0e8b02 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -219,7 +219,7 @@ /mob/living/proc/handle_fire() if(fire_stacks < 0) - fire_stacks = max(0, fire_stacks++) //If we've doused ourselves in water to avoid fire, dry off slowly + fire_stacks = min(0, ++fire_stacks) //If we've doused ourselves in water to avoid fire, dry off slowly if(!on_fire) return 1 From ec097d928ae18a5b25c4aef94b6e64aa562d4bee Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Tue, 6 Oct 2015 09:19:40 +0200 Subject: [PATCH 14/21] Antagonist summary printout now prefers assignment over special role. As antags are listed under relevant headings, i.e. "The traitors were", this seems more reasonable. Fixes #10817. --- code/game/antagonist/antagonist_print.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm index 0ca4015200b..31a5b96b2ce 100644 --- a/code/game/antagonist/antagonist_print.dm +++ b/code/game/antagonist/antagonist_print.dm @@ -45,7 +45,7 @@ return text /datum/antagonist/proc/print_player_lite(var/datum/mind/ply) - var/role = ply.special_role ? "\improper[ply.special_role]" : "\improper[ply.assigned_role]" + var/role = ply.assigned_role ? "\improper[ply.assigned_role]" : "\improper[ply.special_role]" var/text = "
[ply.name] ([ply.key]) as \a [role] (" if(ply.current) if(ply.current.stat == DEAD) From 019c147bdc5305c727e41fc167033485087b9687 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Tue, 6 Oct 2015 12:51:03 +0200 Subject: [PATCH 15/21] HUD element positioning. HUD positions are now relative the client view screen edges instead of absolute. We don't currently use custom client view ranges, but this potentially makes it more reasonable to implement (an example is a new short sighted species of ours). Port of https://github.com/d3athrow/vgstation13/pull/5984. --- code/_onclick/hud/_defines.dm | 146 ++++++++++---------- code/_onclick/hud/alien_larva.dm | 2 +- code/_onclick/hud/hud.dm | 20 +-- code/_onclick/hud/human.dm | 2 +- code/_onclick/hud/monkey.dm | 2 +- code/_onclick/hud/other_mobs.dm | 2 +- code/_onclick/hud/robot.dm | 2 +- code/modules/mob/living/silicon/ai/life.dm | 2 +- code/modules/mob/living/silicon/ai/login.dm | 4 +- 9 files changed, 92 insertions(+), 90 deletions(-) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 1486e546481..6d8689b9336 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -13,110 +13,112 @@ Therefore, the top right corner (except during admin shenanigans) is at "15,15" */ +#define ui_entire_screen "WEST,SOUTH to EAST,NORTH" + //Lower left, persistant menu -#define ui_inventory "1:6,1:5" +#define ui_inventory "WEST:6,SOUTH:5" //Lower center, persistant menu -#define ui_sstore1 "3:10,1:5" -#define ui_id "4:12,1:5" -#define ui_belt "5:14,1:5" -#define ui_back "6:14,1:5" -#define ui_rhand "7:16,1:5" -#define ui_lhand "8:16,1:5" -#define ui_equip "7:16,2:5" -#define ui_swaphand1 "7:16,2:5" -#define ui_swaphand2 "8:16,2:5" -#define ui_storage1 "9:18,1:5" -#define ui_storage2 "10:20,1:5" +#define ui_sstore1 "WEST+2:10,SOUTH:5" +#define ui_id "WEST+3:12,SOUTH:5" +#define ui_belt "WEST+4:14,SOUTH:5" +#define ui_back "CENTER-2:14,SOUTH:5" +#define ui_rhand "CENTER-1:16,SOUTH:5" +#define ui_lhand "CENTER:16,SOUTH:5" +#define ui_equip "CENTER-1:16,SOUTH+1:5" +#define ui_swaphand1 "CENTER-1:16,SOUTH+1:5" +#define ui_swaphand2 "CENTER:16,SOUTH+1:5" +#define ui_storage1 "CENTER+1:16,SOUTH:5" +#define ui_storage2 "CENTER+2:16,SOUTH:5" -#define ui_alien_head "4:12,1:5" //aliens -#define ui_alien_oclothing "5:14,1:5" //aliens +#define ui_alien_head "CENTER-3:12,SOUTH:5" //aliens +#define ui_alien_oclothing "CENTER-2:14,SOUTH:5"//aliens -#define ui_inv1 "7,1:5" //borgs -#define ui_inv2 "8,1:5" //borgs -#define ui_inv3 "9,1:5" //borgs -#define ui_borg_store "10,1:5" //borgs -#define ui_borg_inventory "6,1:5"//borgs +#define ui_inv1 "CENTER-1,SOUTH:5" //borgs +#define ui_inv2 "CENTER,SOUTH:5" //borgs +#define ui_inv3 "CENTER+1,SOUTH:5" //borgs +#define ui_borg_store "CENTER+2,SOUTH:5" //borgs +#define ui_borg_inventory "CENTER-2,SOUTH:5"//borgs -#define ui_monkey_mask "5:14,1:5" //monkey -#define ui_monkey_back "6:14,1:5" //monkey +#define ui_monkey_mask "WEST+4:14,SOUTH:5" //monkey +#define ui_monkey_back "WEST+5:14,SOUTH:5" //monkey -#define ui_construct_health "15:00,7:15" //same height as humans, hugging the right border -#define ui_construct_purge "15:00,6:15" -#define ui_construct_fire "14:16,8:13" //above health, slightly to the left -#define ui_construct_pull "14:28,2:10" //above the zone_sel icon +#define ui_construct_health "EAST:00,CENTER:15" //same height as humans, hugging the right border +#define ui_construct_purge "EAST:00,CENTER-1:15" +#define ui_construct_fire "EAST-1:16,CENTER+1:13" //above health, slightly to the left +#define ui_construct_pull "EAST-1:28,SOUTH+1:10" //above the zone_sel icon //Lower right, persistant menu -#define ui_dropbutton "11:22,1:5" -#define ui_drop_throw "14:28,2:7" -#define ui_pull_resist "13:26,2:7" -#define ui_acti "13:26,1:5" -#define ui_movi "12:24,1:5" -#define ui_zonesel "14:28,1:5" -#define ui_acti_alt "14:28,1:5" //alternative intent switcher for when the interface is hidden (F12) +#define ui_dropbutton "EAST-4:22,SOUTH:5" +#define ui_drop_throw "EAST-1:28,SOUTH+1:7" +#define ui_pull_resist "EAST-2:26,SOUTH+1:7" +#define ui_acti "EAST-2:26,SOUTH:5" +#define ui_movi "EAST-3:24,SOUTH:5" +#define ui_zonesel "EAST-1:28,SOUTH:5" +#define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12) -#define ui_borg_pull "12:24,2:7" -#define ui_borg_module "13:26,2:7" -#define ui_borg_panel "14:28,2:7" +#define ui_borg_pull "EAST-3:24,SOUTH+1:7" +#define ui_borg_module "EAST-2:26,SOUTH+1:7" +#define ui_borg_panel "EAST-1:28,SOUTH+1:7" //Gun buttons -#define ui_gun1 "13:26,3:7" -#define ui_gun2 "14:28, 4:7" -#define ui_gun3 "13:26,4:7" -#define ui_gun_select "14:28,3:7" -#define ui_gun4 "12:24,3:7" +#define ui_gun1 "EAST-2:26,SOUTH+2:7" +#define ui_gun2 "EAST-1:28, SOUTH+3:7" +#define ui_gun3 "EAST-2:26,SOUTH+3:7" +#define ui_gun_select "EAST-1:28,SOUTH+2:7" +#define ui_gun4 "EAST-3:24,SOUTH+2:7" //Upper-middle right (damage indicators) -#define ui_toxin "14:28,13:27" -#define ui_fire "14:28,12:25" -#define ui_oxygen "14:28,11:23" -#define ui_pressure "14:28,10:21" +#define ui_toxin "EAST-1:28,NORTH-2:27" +#define ui_fire "EAST-1:28,NORTH-3:25" +#define ui_oxygen "EAST-1:28,NORTH-4:23" +#define ui_pressure "EAST-1:28,NORTH-5:21" -#define ui_alien_toxin "14:28,13:25" -#define ui_alien_fire "14:28,12:25" -#define ui_alien_oxygen "14:28,11:25" +#define ui_alien_toxin "EAST-1:28,NORTH-2:25" +#define ui_alien_fire "EAST-1:28,NORTH-3:25" +#define ui_alien_oxygen "EAST-1:28,NORTH-4:25" //Middle right (status indicators) -#define ui_nutrition "14:28,5:11" -#define ui_temp "14:28,6:13" -#define ui_health "14:28,7:15" -#define ui_internal "14:28,8:17" +#define ui_nutrition "EAST-1:28,CENTER-2:11" +#define ui_temp "EAST-1:28,CENTER-1:13" +#define ui_health "EAST-1:28,CENTER:15" +#define ui_internal "EAST-1:28,CENTER+1:17" //borgs -#define ui_borg_health "14:28,6:13" //borgs have the health display where humans have the pressure damage indicator. -#define ui_alien_health "14:28,6:13" //aliens have the health display where humans have the pressure damage indicator. +#define ui_borg_health "EAST-1:28,CENTER-1:13" //borgs have the health display where humans have the pressure damage indicator. +#define ui_alien_health "EAST-1:28,CENTER-1:13" //aliens have the health display where humans have the pressure damage indicator. //Pop-up inventory -#define ui_shoes "2:8,1:5" +#define ui_shoes "WEST+1:8,SOUTH:5" -#define ui_iclothing "1:6,2:7" -#define ui_oclothing "2:8,2:7" -#define ui_gloves "3:10,2:7" +#define ui_iclothing "WEST:6,SOUTH+1:7" +#define ui_oclothing "WEST+1:8,SOUTH+1:7" +#define ui_gloves "WEST+2:10,SOUTH+1:7" -#define ui_glasses "1:6,3:9" -#define ui_mask "2:8,3:9" -#define ui_l_ear "3:10,3:9" -#define ui_r_ear "3:10,4:11" +#define ui_glasses "WEST:6,SOUTH+2:9" +#define ui_mask "WEST+1:8,SOUTH+2:9" +#define ui_l_ear "WEST+2:10,SOUTH+2:9" +#define ui_r_ear "WEST+2:10,SOUTH+3:11" -#define ui_head "2:8,4:11" +#define ui_head "WEST+1:8,SOUTH+3:11" //Intent small buttons -#define ui_help_small "12:8,1:1" -#define ui_disarm_small "12:15,1:18" -#define ui_grab_small "12:32,1:18" -#define ui_harm_small "12:39,1:1" +#define ui_help_small "EAST-3:8,SOUTH:1" +#define ui_disarm_small "EAST-3:15,SOUTH:18" +#define ui_grab_small "EAST-3:32,SOUTH:18" +#define ui_harm_small "EAST-3:39,SOUTH:1" //#define ui_swapbutton "6:-16,1:5" //Unused //#define ui_headset "SOUTH,8" -#define ui_hand "6:14,1:5" -#define ui_hstore1 "5,5" +#define ui_hand "CENTER-1:14,SOUTH:5" +#define ui_hstore1 "CENTER-2,CENTER-2" //#define ui_resist "EAST+1,SOUTH-1" #define ui_sleep "EAST+1, NORTH-13" #define ui_rest "EAST+1, NORTH-14" -#define ui_iarrowleft "SOUTH-1,11" -#define ui_iarrowright "SOUTH-1,13" +#define ui_iarrowleft "SOUTH-1,EAST-4" +#define ui_iarrowright "SOUTH-1,EAST-2" -#define ui_spell_master "14:16,14:16" -#define ui_genetic_master "14:16,12:16" +#define ui_spell_master "EAST-1:16,NORTH-1:16" +#define ui_genetic_master "EAST-1:16,NORTH-3:16" diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index 6c5da7817ad..59004934d70 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -32,7 +32,7 @@ mymob.flash.icon = 'icons/mob/screen1_alien.dmi' mymob.flash.icon_state = "blank" mymob.flash.name = "flash" - mymob.flash.screen_loc = "1,1 to 15,15" + mymob.flash.screen_loc = ui_entire_screen mymob.flash.layer = 17 mymob.fire = new /obj/screen() diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index a7348890da4..7951db5196a 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -41,14 +41,14 @@ var/list/global_huds = list( /datum/global_hud/New() //420erryday psychedellic colours screen overlay for when you are high druggy = new /obj/screen() - druggy.screen_loc = "WEST,SOUTH to EAST,NORTH" + druggy.screen_loc = ui_entire_screen druggy.icon_state = "druggy" druggy.layer = 17 druggy.mouse_opacity = 0 //that white blurry effect you get when you eyes are damaged blurry = new /obj/screen() - blurry.screen_loc = "WEST,SOUTH to EAST,NORTH" + blurry.screen_loc = ui_entire_screen blurry.icon_state = "blurry" blurry.layer = 17 blurry.mouse_opacity = 0 @@ -74,21 +74,21 @@ var/list/global_huds = list( //welding mask overlay black/dither darkMask = newlist(/obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen) O = darkMask[1] - O.screen_loc = "3,3 to 5,13" + O.screen_loc = "WEST+2,SOUTH+2 to WEST+4,NORTH-2" O = darkMask[2] - O.screen_loc = "5,3 to 10,5" + O.screen_loc = "WEST+4,SOUTH+2 to EAST-5,SOUTH+4" O = darkMask[3] - O.screen_loc = "6,11 to 10,13" + O.screen_loc = "WEST+5,NORTH-4 to EAST-5,NORTH-2" O = darkMask[4] - O.screen_loc = "11,3 to 13,13" + O.screen_loc = "EAST-4,SOUTH+2 to EAST-2,NORTH-2" O = darkMask[5] - O.screen_loc = "1,1 to 15,2" + O.screen_loc = "WEST,SOUTH to EAST,SOUTH+1" O = darkMask[6] - O.screen_loc = "1,3 to 2,15" + O.screen_loc = "WEST,SOUTH+2 to WEST+1,NORTH" O = darkMask[7] - O.screen_loc = "14,3 to 15,15" + O.screen_loc = "EAST-1,SOUTH+2 to EAST,NORTH" O = darkMask[8] - O.screen_loc = "3,14 to 13,15" + O.screen_loc = "WEST+2,NORTH-1 to EAST-2,NORTH" for(i = 1, i <= 4, i++) O = vimpaired[i] diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 0768e11c820..81dc42e620f 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -318,7 +318,7 @@ mymob.flash.icon = ui_style mymob.flash.icon_state = "blank" mymob.flash.name = "flash" - mymob.flash.screen_loc = "1,1 to 15,15" + mymob.flash.screen_loc = ui_entire_screen mymob.flash.layer = 17 hud_elements |= mymob.flash diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index 36fa0a9e6aa..d24d9322a56 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -240,7 +240,7 @@ mymob.flash.icon = ui_style mymob.flash.icon_state = "blank" mymob.flash.name = "flash" - mymob.flash.screen_loc = "1,1 to 15,15" + mymob.flash.screen_loc = ui_entire_screen mymob.flash.layer = 17 mymob.zone_sel = new /obj/screen/zone_sel() diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm index 5dd1b542cfa..cbc72202000 100644 --- a/code/_onclick/hud/other_mobs.dm +++ b/code/_onclick/hud/other_mobs.dm @@ -121,7 +121,7 @@ mymob.flash.icon = 'icons/mob/screen1.dmi' mymob.flash.icon_state = "blank" mymob.flash.name = "flash" - mymob.flash.screen_loc = "1,1 to 15,15" + mymob.flash.screen_loc = ui_entire_screen mymob.flash.layer = 17 if(constructtype) diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 7441ac56095..eb31c7019b5 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -143,7 +143,7 @@ var/obj/screen/robot_inventory mymob.flash.icon = 'icons/mob/screen1_robot.dmi' mymob.flash.icon_state = "blank" mymob.flash.name = "flash" - mymob.flash.screen_loc = "1,1 to 15,15" + mymob.flash.screen_loc = ui_entire_screen mymob.flash.layer = 17 mymob.zone_sel = new /obj/screen/zone_sel() diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index d67eb277535..b5ddfcedd91 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -79,7 +79,7 @@ //Blind the AI updateicon() - src.blind.screen_loc = "1,1 to 15,15" + src.blind.screen_loc = ui_entire_screen if (src.blind.layer!=18) src.blind.layer = 18 src.sight = src.sight&~SEE_TURFS diff --git a/code/modules/mob/living/silicon/ai/login.dm b/code/modules/mob/living/silicon/ai/login.dm index 5336cd873f3..76625cdc3df 100644 --- a/code/modules/mob/living/silicon/ai/login.dm +++ b/code/modules/mob/living/silicon/ai/login.dm @@ -6,12 +6,12 @@ flash = new /obj/screen() flash.icon_state = "blank" flash.name = "flash" - flash.screen_loc = "1,1 to 15,15" + flash.screen_loc = ui_entire_screen flash.layer = 17 blind = new /obj/screen() blind.icon_state = "black" blind.name = " " - blind.screen_loc = "1,1 to 15,15" + blind.screen_loc = ui_entire_screen blind.layer = 0 client.screen.Add( blind, flash ) From a7cad042641521df01345c6a4edbf3dd21191235 Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Sun, 4 Oct 2015 21:04:13 +0200 Subject: [PATCH 16/21] Amendments to light replacer and janitor supply crate --- code/datums/supplypacks.dm | 4 +- .../objects/items/devices/lightreplacer.dm | 16 ++++---- .../objects/items/weapons/storage/storage.dm | 17 +++++++- html/changelogs/Hubblenaut-dev.yml | 39 +++++++++++++++++++ 4 files changed, 64 insertions(+), 12 deletions(-) create mode 100644 html/changelogs/Hubblenaut-dev.yml diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index fb33002ea06..2e84cec43ca 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -194,13 +194,13 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/janitor name = "Janitorial supplies" contains = list(/obj/item/weapon/reagent_containers/glass/bucket, - /obj/item/weapon/reagent_containers/glass/bucket, - /obj/item/weapon/reagent_containers/glass/bucket, /obj/item/weapon/mop, /obj/item/weapon/caution, /obj/item/weapon/caution, /obj/item/weapon/caution, + /obj/item/weapon/caution, /obj/item/weapon/storage/bag/trash, + /obj/item/device/lightreplacer, /obj/item/weapon/reagent_containers/spray/cleaner, /obj/item/weapon/reagent_containers/glass/rag, /obj/item/weapon/grenade/chem_grenade/cleaner, diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index bc0f8364875..20abf3401be 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -15,7 +15,7 @@ // // HOW TO REFILL THE DEVICE // -// It will need to be manually refilled with lights. +// It can be manually refilled or by clicking on a storage item containing lights. // If it's part of a robot module, it will charge when the Robot is inside a Recharge Station. // // EMAGGED FEATURES @@ -41,7 +41,7 @@ /obj/item/device/lightreplacer name = "light replacer" - desc = "A device to automatically replace lights. Refill with working lightbulbs." + desc = "A device to automatically replace lights. Refill with working lightbulbs or sheets of glass." icon = 'icons/obj/janitor.dmi' icon_state = "lightreplacer0" @@ -51,14 +51,13 @@ slot_flags = SLOT_BELT origin_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 2) - var/max_uses = 20 - var/uses = 0 + var/max_uses = 32 + var/uses = 32 var/emagged = 0 var/failmsg = "" var/charge = 0 /obj/item/device/lightreplacer/New() - uses = max_uses / 2 failmsg = "The [name]'s refill light blinks red." ..() @@ -73,8 +72,8 @@ user << "[src.name] is full." return else if(G.use(1)) - AddUses(5) - user << "You insert a piece of glass into the [src.name]. You have [uses] lights remaining." + AddUses(16) //Autolathe converts 1 sheet into 16 lights. + user << "You insert a piece of glass into \the [src.name]. You have [uses] light\s remaining." return else user << "You need one sheet of glass to replace lights." @@ -84,7 +83,7 @@ if(L.status == 0) // LIGHT OKAY if(uses < max_uses) AddUses(1) - user << "You insert the [L.name] into the [src.name]. You have [uses] lights remaining." + user << "You insert \the [L.name] into \the [src.name]. You have [uses] light\s remaining." user.drop_item() qdel(L) return @@ -92,7 +91,6 @@ user << "You need a working light." return - /obj/item/device/lightreplacer/attack_self(mob/user) /* // This would probably be a bit OP. If you want it though, uncomment the code. if(isrobot(user)) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index c1022c55d0f..78665633cfd 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -224,7 +224,7 @@ //Set the stop_messages to stop it from printing messages /obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0) if(!istype(W)) return //Not an item - + if(!usr.canUnEquip(W)) return 0 @@ -340,6 +340,21 @@ if(isrobot(user)) return //Robots can't interact with storage items. + if(istype(W, /obj/item/device/lightreplacer)) + var/obj/item/device/lightreplacer/LP = W + var/amt_inserted = 0 + var/turf/T = get_turf(user) + for(var/obj/item/weapon/light/L in src.contents) + if(L.status == 0) + if(LP.uses < LP.max_uses) + LP.AddUses(1) + amt_inserted++ + remove_from_storage(L, T) + qdel(L) + if(amt_inserted) + user << "You inserted [amt_inserted] light\s into \the [LP.name]. You have [LP.uses] light\s remaining." + return + if(!can_be_inserted(W)) return diff --git a/html/changelogs/Hubblenaut-dev.yml b/html/changelogs/Hubblenaut-dev.yml new file mode 100644 index 00000000000..5c87376685a --- /dev/null +++ b/html/changelogs/Hubblenaut-dev.yml @@ -0,0 +1,39 @@ +################################ +# 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 +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Hubblenaut + +# 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, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Light replacers can be refilled by clicking on a storage item." + - tweak: "Light replacers now hold up to 32 light bulbs." + - tweak: "Light replacers can be obtained through janitorial supply crates." + - tweak: "A sheet of glass fills the light replacer by 16 bulbs." From 82928d3b74d37c88c04ea15268d7979680bd5062 Mon Sep 17 00:00:00 2001 From: Kelenius Date: Wed, 7 Oct 2015 10:49:24 +0300 Subject: [PATCH 17/21] Fixes a minor blob issue, adds mecha attack message --- code/modules/blob/blob.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/blob/blob.dm b/code/modules/blob/blob.dm index 1604554da94..a2de592b84c 100644 --- a/code/modules/blob/blob.dm +++ b/code/modules/blob/blob.dm @@ -18,7 +18,6 @@ /obj/effect/blob/New(loc) health = maxHealth - set_dir(pick(1,2,4,8)) update_icon() return ..(loc) @@ -74,10 +73,10 @@ if(GR) qdel(GR) return - var/obj/machinery/door/D = locate() in T - if(D && D.density) - D.ex_act(2) - return + for(var/obj/machinery/door/D in T) // There can be several - and some of them can be open, locate() is not suitable + if(D.density) + D.ex_act(2) + return var/obj/structure/foamedmetal/F = locate() in T if(F) qdel(F) @@ -97,6 +96,7 @@ return var/obj/mecha/M = locate() in T if(M) + M.visible_message("The blob attacks \the [M]!") M.take_damage(40) return From fad0e0b28a8d4ea98716cba8c7ab207d39647c4f Mon Sep 17 00:00:00 2001 From: Karolis2011 Date: Thu, 8 Oct 2015 12:36:09 +0300 Subject: [PATCH 18/21] Added more help/error messages to the tool. --- code/modules/admin/map_capture.dm | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/code/modules/admin/map_capture.dm b/code/modules/admin/map_capture.dm index b9d564d1925..ced6d257bf4 100644 --- a/code/modules/admin/map_capture.dm +++ b/code/modules/admin/map_capture.dm @@ -1,10 +1,17 @@ -/datum/admins/proc/capture_map(tx as num, ty as num, tz as num, range as num) +/datum/admins/proc/capture_map(tx as null|num, ty as null|num, tz as null|num, range as null|num) set category = "Server" set name = "Capture Map Part" + set desc = "Usage: Capture-Map-Part target_x_cord target_y_cord target_z_cord range (captures part of a map originating from bottom left corner)" if(!check_rights(R_ADMIN|R_DEBUG|R_SERVER)) return + if(isnull(tx) || isnull(ty) || isnull(tz) || isnull(range)) + usr << "Capture Map Part, captures part of a map using camara like rendering." + usr << "Usage: Capture-Map-Part target_x_cord target_y_cord target_z_cord range" + usr << "Target coordinates specify bottom left corner of the capture, range defines render distance to opposite corner." + return + if(range > 32 || range <= 0) usr << "Capturing range is incorrect, it must be within 1-32." return @@ -45,5 +52,8 @@ var/yoff = (A.y - ty) * 32 cap.Blend(img, blendMode2iconMode(A.blend_mode), A.pixel_x + xoff, A.pixel_y + yoff) - - usr << browse_rsc(cap, "map_capture_x[tx]_y[ty]_z[tz]_r[range].png") \ No newline at end of file + var/file_name = "map_capture_x[tx]_y[ty]_z[tz]_r[range].png" + usr << "Saved capture in cache as [file_name]." + usr << browse_rsc(cap, file_name) + else + usr << "Target coordinates are incorrect." From 83df0fa8f8b475dfd615159ad27cab700e518e3b Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 11 Jul 2015 23:51:39 -0400 Subject: [PATCH 19/21] Makes powercells produced by the protolathe start uncharged. --- code/modules/research/circuitprinter.dm | 2 +- code/modules/research/designs.dm | 10 ++++++++++ code/modules/research/protolathe.dm | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 49575cd3f74..f50af33481c 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -195,7 +195,7 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency) if(D.build_path) - var/obj/new_item = new D.build_path(src) + var/obj/new_item = D.Fabricate(src) new_item.loc = loc if(mat_efficiency != 1) // No matter out of nowhere if(new_item.matter && new_item.matter.len > 0) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index ce5fb4670bd..a85788d1616 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -55,6 +55,11 @@ other types of metals and chemistry for reagents). desc = "Allows for the construction of \a [item_name]." return +//Returns a new instance of the item for this design +//This is to allow additional initialization to be performed, including possibly additional contructor arguments. +/datum/design/proc/Fabricate(var/newloc) + return new build_path(newloc) + /datum/design/item build_type = PROTOLATHE @@ -212,6 +217,11 @@ other types of metals and chemistry for reagents). var/obj/item/weapon/cell/C = build_path desc = "Allows the construction of power cells that can hold [initial(C.maxcharge)] units of energy." +/datum/design/item/powercell/Fabricate() + var/obj/item/weapon/cell/C = ..() + C.charge = 0 //shouldn't produce power out of thin air. + return C + /datum/design/item/powercell/basic name = "basic" build_type = PROTOLATHE | MECHFAB diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 9cb029f58ef..843e7f6dd5a 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -196,7 +196,7 @@ reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency) if(D.build_path) - var/obj/new_item = new D.build_path(src) + var/obj/new_item = D.Fabricate(src) new_item.loc = loc if(mat_efficiency != 1) // No matter out of nowhere if(new_item.matter && new_item.matter.len > 0) From 38775120d73e7252c77b7e8997dda700880c3b95 Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Thu, 8 Oct 2015 16:03:32 -0400 Subject: [PATCH 20/21] Updates mechfab Robolimb manufacturers are now handled specifically instead of assuming all items follow the same constructor parameter rules. --- code/game/mecha/mech_fabricator.dm | 6 +-- code/modules/research/circuitprinter.dm | 2 +- code/modules/research/designs.dm | 56 ++++++++++++------------ code/modules/research/mechfab_designs.dm | 7 +++ code/modules/research/protolathe.dm | 2 +- 5 files changed, 40 insertions(+), 33 deletions(-) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 7fc5f17e86d..0685e6efd20 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -144,7 +144,7 @@ sync() else sync_message = "" - + return 1 /obj/machinery/mecha_part_fabricator/attackby(var/obj/item/I, var/mob/user) @@ -155,7 +155,7 @@ return if(default_deconstruction_crowbar(user, I)) return - if(default_part_replacement(user, I)) + if(default_part_replacement(user, I)) return var/material @@ -254,7 +254,7 @@ for(var/M in D.materials) materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency) if(D.build_path) - var/obj/new_item = new D.build_path(loc, manufacturer) + var/obj/new_item = D.Fabricate(loc, src) visible_message("\The [src] pings, indicating that \the [D] is complete.", "You hear a ping.") if(mat_efficiency != 1) if(new_item.matter && new_item.matter.len > 0) diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index f50af33481c..dd796d7147b 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -195,7 +195,7 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency) if(D.build_path) - var/obj/new_item = D.Fabricate(src) + var/obj/new_item = D.Fabricate(src, src) new_item.loc = loc if(mat_efficiency != 1) // No matter out of nowhere if(new_item.matter && new_item.matter.len > 0) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index a85788d1616..98eb37bebd4 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -57,7 +57,7 @@ other types of metals and chemistry for reagents). //Returns a new instance of the item for this design //This is to allow additional initialization to be performed, including possibly additional contructor arguments. -/datum/design/proc/Fabricate(var/newloc) +/datum/design/proc/Fabricate(var/newloc, var/fabricator) return new build_path(newloc) /datum/design/item @@ -200,9 +200,9 @@ other types of metals and chemistry for reagents). /datum/design/item/stock_part/RPED name = "Rapid Part Exchange Device" desc = "Special mechanical module made to store, sort, and apply standard machine parts." - id = "rped" + id = "rped" req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 3) - materials = list(DEFAULT_WALL_MATERIAL = 15000, "glass" = 5000) + materials = list(DEFAULT_WALL_MATERIAL = 15000, "glass" = 5000) build_path = /obj/item/weapon/storage/part_replacer sort_string = "CBAAA" @@ -287,9 +287,9 @@ other types of metals and chemistry for reagents). /datum/design/item/mesons name = "Optical meson scanners design" desc = "Using the meson-scanning technology those glasses allow you to see through walls, floor or anything else." - id = "mesons" + id = "mesons" req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) - materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) build_path = /obj/item/clothing/glasses/meson sort_string = "GAAAC" @@ -298,23 +298,23 @@ other types of metals and chemistry for reagents). name = "Mining equipment design ([item_name])" /datum/design/item/weapon/mining/jackhammer - id = "jackhammer" + id = "jackhammer" req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2) - materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 500, "silver" = 500) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 500, "silver" = 500) build_path = /obj/item/weapon/pickaxe/jackhammer sort_string = "KAAAA" /datum/design/item/weapon/mining/drill - id = "drill" + id = "drill" req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2) - materials = list(DEFAULT_WALL_MATERIAL = 6000, "glass" = 1000) //expensive, but no need for miners. + materials = list(DEFAULT_WALL_MATERIAL = 6000, "glass" = 1000) //expensive, but no need for miners. build_path = /obj/item/weapon/pickaxe/drill sort_string = "KAAAB" /datum/design/item/weapon/mining/plasmacutter - id = "plasmacutter" + id = "plasmacutter" req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3) - materials = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 500, "gold" = 500, "phoron" = 500) + materials = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 500, "gold" = 500, "phoron" = 500) build_path = /obj/item/weapon/pickaxe/plasmacutter sort_string = "KAAAC" @@ -326,9 +326,9 @@ other types of metals and chemistry for reagents). sort_string = "KAAAD" /datum/design/item/weapon/mining/drill_diamond - id = "drill_diamond" + id = "drill_diamond" req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 4) - materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 1000, "diamond" = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 1000, "diamond" = 2000) build_path = /obj/item/weapon/pickaxe/diamonddrill sort_string = "KAAAE" /////////////////////////////////// @@ -347,9 +347,9 @@ other types of metals and chemistry for reagents). /datum/design/item/medical/robot_scanner desc = "A hand-held scanner able to diagnose robotic injuries." - id = "robot_scanner" + id = "robot_scanner" req_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ENGINEERING = 3) - materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200) + materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200) build_path = /obj/item/device/robotanalyzer sort_string = "MACFA" @@ -404,9 +404,9 @@ other types of metals and chemistry for reagents). /datum/design/item/medical/nanopaste desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery." - id = "nanopaste" + id = "nanopaste" req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3) - materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 7000) + materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 7000) build_path = /obj/item/stack/nanopaste sort_string = "MBAAA" @@ -538,16 +538,16 @@ other types of metals and chemistry for reagents). /datum/design/item/weapon/chemsprayer desc = "An advanced chem spraying device." - id = "chemsprayer" + id = "chemsprayer" req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_BIO = 2) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000) build_path = /obj/item/weapon/reagent_containers/spray/chemsprayer sort_string = "TABAA" /datum/design/item/weapon/rapidsyringe - id = "rapidsyringe" + id = "rapidsyringe" req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_BIO = 2) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000) build_path = /obj/item/weapon/gun/launcher/syringe/rapid sort_string = "TABAB" @@ -650,10 +650,10 @@ other types of metals and chemistry for reagents). /datum/design/item/posibrain name = "Positronic brain" - id = "posibrain" + id = "posibrain" req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 6, TECH_BLUESPACE = 2, TECH_DATA = 4) build_type = PROTOLATHE | MECHFAB - materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 500, "phoron" = 500, "diamond" = 100) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 500, "phoron" = 500, "diamond" = 100) build_path = /obj/item/device/mmi/digital/posibrain category = "Misc" sort_string = "VACAB" @@ -1364,16 +1364,16 @@ CIRCUITS BELOW /datum/design/item/pda name = "PDA design" desc = "Cheaper than whiny non-digital assistants." - id = "pda" + id = "pda" req_tech = list(TECH_ENGINEERING = 2, TECH_POWER = 3) - materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) build_path = /obj/item/device/pda sort_string = "VAAAA" // Cartridges -/datum/design/item/pda_cartridge +/datum/design/item/pda_cartridge req_tech = list(TECH_ENGINEERING = 2, TECH_POWER = 3) - materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) /datum/design/item/pda_cartridge/AssembleDesignName() ..() @@ -1453,7 +1453,7 @@ CIRCUITS BELOW id = "cart_captain" build_path = /obj/item/weapon/cartridge/captain sort_string = "VBAAO" - + /* Uncomment if someone makes these buildable /datum/design/circuit/general_alert name = "general alert console" diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm index cfdce572b11..e83774468c5 100644 --- a/code/modules/research/mechfab_designs.dm +++ b/code/modules/research/mechfab_designs.dm @@ -6,6 +6,13 @@ /datum/design/item/mechfab/robot category = "Robot" +//if the fabricator is a mech fab pass the manufacturer info over to the robot part constructor +/datum/design/item/mechfab/robot/Fabricate(var/newloc, var/fabricator) + if(istype(fabricator, /obj/machinery/mecha_part_fabricator)) + var/obj/machinery/mecha_part_fabricator/mechfab = fabricator + return new build_path(newloc, mechfab.manufacturer) + return ..() + /datum/design/item/mechfab/robot/exoskeleton name = "Robot exoskeleton" id = "robot_exoskeleton" diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 843e7f6dd5a..c91a22d89f5 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -196,7 +196,7 @@ reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency) if(D.build_path) - var/obj/new_item = D.Fabricate(src) + var/obj/new_item = D.Fabricate(src, src) new_item.loc = loc if(mat_efficiency != 1) // No matter out of nowhere if(new_item.matter && new_item.matter.len > 0) From b9feb805c12472deea46d9d6e36fea38f03e1d05 Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Thu, 8 Oct 2015 16:11:17 -0400 Subject: [PATCH 21/21] Adds changelog --- html/changelogs/HarpyEagle-dev-freeze.yml | 3 --- html/changelogs/HarpyEagle-dev.yml | 3 --- .../changelogs/HarpyEagle-powercellsanity.yml | 27 +++++++++++++++++++ 3 files changed, 27 insertions(+), 6 deletions(-) delete mode 100644 html/changelogs/HarpyEagle-dev-freeze.yml delete mode 100644 html/changelogs/HarpyEagle-dev.yml create mode 100644 html/changelogs/HarpyEagle-powercellsanity.yml diff --git a/html/changelogs/HarpyEagle-dev-freeze.yml b/html/changelogs/HarpyEagle-dev-freeze.yml deleted file mode 100644 index a999f1236dc..00000000000 --- a/html/changelogs/HarpyEagle-dev-freeze.yml +++ /dev/null @@ -1,3 +0,0 @@ -author: HarpyEagle -changes: [] -delete-after: false diff --git a/html/changelogs/HarpyEagle-dev.yml b/html/changelogs/HarpyEagle-dev.yml deleted file mode 100644 index a999f1236dc..00000000000 --- a/html/changelogs/HarpyEagle-dev.yml +++ /dev/null @@ -1,3 +0,0 @@ -author: HarpyEagle -changes: [] -delete-after: false diff --git a/html/changelogs/HarpyEagle-powercellsanity.yml b/html/changelogs/HarpyEagle-powercellsanity.yml new file mode 100644 index 00000000000..fba91c796d2 --- /dev/null +++ b/html/changelogs/HarpyEagle-powercellsanity.yml @@ -0,0 +1,27 @@ +################################ +# 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 +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +author: HarpyEagle +changes: + - tweak: "Fabricated power cells start uncharged." +delete-after: true