From 950029dc4a85275180ee7f0747d70a3d6f9921f6 Mon Sep 17 00:00:00 2001 From: Segrain Date: Fri, 9 Aug 2013 07:08:10 +0300 Subject: [PATCH 01/16] Moving box out of wrong slot. --- code/modules/admin/verbs/vox_raiders.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm index 65a0f65ad2c..4b6e2271599 100644 --- a/code/modules/admin/verbs/vox_raiders.dm +++ b/code/modules/admin/verbs/vox_raiders.dm @@ -32,7 +32,7 @@ var/global/vox_tick = 1 equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/pressure(src), slot_head) equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt) equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE. - equip_to_slot_or_del(new /obj/item/weapon/storage/box/emps(src), slot_l_store) + equip_to_slot_or_del(new /obj/item/weapon/storage/box/emps(src), slot_r_hand) equip_to_slot_or_del(new /obj/item/device/multitool(src), slot_l_hand) From 907f9311ba37efabd2868a8d8f1a5e7707b24d5a Mon Sep 17 00:00:00 2001 From: Segrain Date: Fri, 9 Aug 2013 07:09:50 +0300 Subject: [PATCH 02/16] Vox flavor text. --- code/game/gamemodes/heist/heist.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 935e0974c75..72f5f1a77d6 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -102,6 +102,7 @@ var/global/vox_kills = 0 //Used to check the Inviolate. vox.set_species("Vox") vox.add_language("Vox-pidgin") vox.h_style = "Short Vox Quills" + vox.flavor_text = "" vox.equip_vox_raider() vox.regenerate_icons() From cfd0e9f7e2ece186e392617e9209328ccd9659ae Mon Sep 17 00:00:00 2001 From: Segrain Date: Fri, 9 Aug 2013 07:11:58 +0300 Subject: [PATCH 03/16] Vox suit sensors. --- code/modules/clothing/spacesuits/alien.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index 0115eef3113..250935d61ad 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -92,6 +92,9 @@ return ..() +/obj/item/clothing/under/vox + has_sensor = 0 + /obj/item/clothing/under/vox/vox_casual name = "alien clothing" desc = "This doesn't look very comfortable." From 1f6896975e5b0016ef9aa1583044966b0b18a46d Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 9 Aug 2013 13:43:15 -0700 Subject: [PATCH 04/16] Added cortex borer sprites. --- icons/mob/animal.dmi | Bin 185597 -> 186274 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 88fb1e19fcfe5e1a9565d630e9ae858a6fcb1ee9..e269d169aa79e882a03ad20b517de73d173e7d84 100644 GIT binary patch delta 23777 zcmb5VbyQVhxb90MAR;Zfq#Hy!7a=X3f`lL`UD8upKvE?HX+dcOL2`+7mxy$ifgmF@-$(X7cHYjOzRn)* zSXco$l^GrGMGx-AjIQuhoX4ABr)dWF*-yDlDPI$h<1yB_xV~_W|Eh~1oQT4E(`)?R zu=o&$LB8odXS+T*zBv0RhiK!>W2_vD-~Y2YE&b%I(3^CwmQ~k;l-6%82L3yI&9#?V za{TUynLap){3aRjUG|Cb)1PtsX6Yjs)l{tE*6LOI zPwEoRsTC;~O2#jBut>*6@}E3tvl5jfo_u{AS$>1>uE90?^SHQSy?i0i)|MCg_-&f71gm>U8HG9X(55y;41(iZmL)2yzfPeTj+mXbn2%!WVgjQ z6z{p}_)h#D`wkE5&M2Oey{5}EP0!%<-;?^;$m0#?^v(8{iwn({IzQf)JtB&d^JcLS zY$AkFOX!}^2}G1htvqkpNQ{2?J73Hyadd+`>IHkFzg0t)@4*}2f}Vt+#Bcsdv2({t z6U{_2W-stRM}N?MW}Euv$A)`mP1g@NRTD)vF&O zOuH^rqsYYkz`+$6O?e0{ohrrP-LH_TVPZpJ{w~3NFKH&Gr~47tm_M zvG3M5?fja@@V~o>UrBhVj&qdRcDMy-)X&yD9{6H?zi0Qd(;y8JT{-znV1NCcNlsmm>Yb?aS*%>7SIuAA&COU#&!LCEcB&zwx5l3g*5A`S}iN_ zjPW-Q)f;7fd>eZdpdZzhLXqI|sp;n4q&HV;%KPpz723LQ1-X9J?HUHHOr1xW@m!zZ zZ>UTgT1ir8Oea*KdNcy?a`N5-kyU12d?d|UPbp-DD%Er!v%l)v# z&u1-uM7+Jdx4H$Mu}yF}430FcJ*yrzJEr}mDHV_Iti-3^uA4+N_~(XsNTOS$t!~lv zT2rfVc*`EgB6k7s;mRnOMuLbiFkm#s6bxA3$B>~{lrcspI$db%*#JN&&+00X1+Cmo z)&nMa2tM-}NE1Oh%3t4xC$It_M;gJR%-k8g3k_$!f#)NCV+fzd@VFUNh5YS^{WJMT z!NivMvFGQ%(r_*^+%L1<}W_W z81~eWf!HU#AYY~w^=EfW|KL__*{kw6^LQ(%it8j3cHdR+{!ykuVfb)o_vI^Zm#1&2 z{`d-6ebE#4qlbwe*zS%AI($j%J#HF9nC1KF{^^YYC+TspeZTLO>H8I$cyiVeeNj-+oqS+^jt4M}{ z;n1T#T)cR=SsXyaSJV&BvBg|C^P|ZeV}Z}dFaeCI=$@i_XFaHl%tQ7ry=7Lx6#UH_ zU-#GyJc4$BHJIFZ4!6OPmJmts8ls;Kl2xi`K7L2?{(s6I=Q>2#$8I_NMcRq!(ei)79+* z%tXeYR(l4MZ0dx9f^uGZX_HO~kueF$x%-PWqcI;|{+X#yj<&B01k{*r+=c1}HD7DJ zUaP$h>jiGYh}5|`Eb!$%DBheUtzu!_$I^JDXq2O->?EzeBEw~=rpH&ey4EMeyWY)4 zxHG-S-yVX`UzzY-}t3qqiC)~Ec5c9*kLzaBKmR=nUKeX*2sU`wWO$NN7Qq_I_OSS9c*HQ;BPJ8;Hc!*WX7-mr z50Pw%w$7ZL?q4t`b`HTL<$br)ruh;C&=+$RBqHiPN5_sMhU(P zd|XezziQPoSvBUkX0#F=z98w-W4B7CEnr|TEj}KzOV+D%F4}SYp|p<95I_^34G%*v z`tpu2rsERVsX0UaQq6l&7`#69S^?McT6?azkr_rLe;X)y!0DwcjtdOBk{k)ZJ{PIJ z1!{skkFF!kpU_2s9tVMxV(^QcW!MRbLV{eCH?#%>+EH1VsVt*>U-Hk^y-IZW9CVy{ zg2|X|dK;vPkB^Unp!0*_$i-OTmzbD=SSUd=j>Su{l#Fzh#!dEqlI(1HHeMpy^x=1v zBko@*IF}WR>Z)U(blW?P$OB8!>Fr`)LqsYS^7HeqQaMCF25Jeej)l|Qk@$t|8Tr^L z7|kbyFv6T9zS!R1QB9@LR*#C3y#6Bg_4W#1c>IqY|F`LxL(N-x1+`V-6~At~ygXcg zWE$IqOpa_`D^G~G@6K`2)J*V{UXZWNXp#oOGOW4KY#oe1& zvaeo;?!xw0zJa3)FMam69DVvXmR8=M3B^>p5+Wpyg6dJR31pj>h~tB{3UklkN9f^P zp#Czu>1MM!^{A1H!{?BVj9}fv1X`e>;59{Aa2)FV2NE`&{C7ITk-R?_0|NH>F*~f1Jmwin zFs95VK=kV%@eJll)#XCX6lDnQ^cs~t{Wy5 zP0vJ%N#))Iz`8>KoE~3?{Uy{BMZ@BOVhrW40g`xkTTxUm+QUj1?41S2UBOPyd@Nc4 zD}GbU5b`Q{E;6}uQwJKF8m|j0iZxfW=!nkp)bz9;kc`ODN&Go~dp7uLT<84QU3uX( z@sIhRwsaDKtm4iox$hJVgUJX#+_9-O$JYC#gaD=$1HH%%4JNm}PbZ7$`t0^Y0-V6t zBulSo1kAYkczM4gXMy!>5b1V@N%~QmZRZ;Dl}f?rzOCjnYy=vUY<96%$M^@4kzqY| zS0Am;TcU9p?fq;xQ?UzL(R~V{H=(dUIkyJo=N6W&{K+Rvb{u2Y_likf-)(mI|RY>7q6WSO9p# zBqvat4VIc+WS!vL7--6R(rVrqYK9!9Qc|oO8o41%&ohmiC=wU~g+YK!O&BCw z*nB&I$<|RIEPoyp=PSdsZGvB3u}D%z=l<|IyBiHJjd?M z^QDg7d*xRWCCJKJLBO%-CYd82hO1(brCPL_*bQ%7?Gq_1bD;0q3L&zX%nDFcx+b+jWeDE^TN5(Xu%Thri$xnMt845&o}wU zxnj_oAHbOPay<^QMY8GrQ1iM&dey&=lf+Zv`M->yXU{vfUSu4^;Wk~Q4mk;Z` z{n19{s~dke{58xKnA0`ChNnEn*DA*A)6+2dexpVYpTD@bj~bT*^NE~3 zYu>m%-XS|3^k!FmEv6)_Qs|VPRkx8<``W{yUDjvH1kJQ{su0W>cC;y7fN8=VdDZE8@DjJ7J?~ z>HL%YL;=weD#TZocXHael+RUF%9XNm-m|$Oy#lClr(W13>)IT)Z_A#sP*6YSO>v*E zZ)nJ!`U5R6H0Z(CFf!3Yf3fMv14b%fsJ!p748jkX)L*HC5Xk3yt z90nYNGth~~VZM0@0KPfuX%cmFsy*-^WNa_|NcepL0|9|w|Io}sNay2i?@X)L_fk4G z8ps#D(OH?34Yh4(b=7$S?>7PtB=v;zZ<8U}f%9{{S+72Le3SZ^r}v)@+1EC7cZv z{Kr}Ew1avcNwElMhdmpve8@8*|5uBI>iJgR-vK)Qk0RM|O@T$s9^cVLpElmV_hv^A z^Xgr~mI1}7{YL}9_l+e0TEr1YXu?C82^8A~+yGSji6}eeL|+ohlsxH1!!hVXYm>54 z%TZ6%^)$fNiOd7rBO4Q<0QL=_wGj-b__T7h1WHnLDF~Hip>Upm-tU|SZ%c!Ht7Kt- zB>H9zKLJq1p|3cqG_QTCWBom)lsV*eS)k7+wPvTogHJ_u2~4EH3NL*+B1qQjlI3;6 z{KOJy_)ke(7o$2>N3#vsgDKP0`_(_Sdh%|K0@-{r*H<%vsCz9*4RvdM!p%X~U#dO` zIqD2@iLsHYIY|4EB&g*?S(%9&a_S5fyEx!8SI4I9L>HI#)Rpc__UfM3RwA)rzYZP3 zG|1!51HOtFT>h3gTrKQQQ2VA|QzqWJ{as8b-i2vck8Kr3s*(Um;`0K~dr3Qnm9Y>5 zz3`Oe7zVgGnl0`Slv5p80yBj{wJPK`7!DTo1K;xjG$KfmMyal$4y+XPGOsi_g3PFP0I#vHEFpel&z?kTaV*NV?!F%` z3m!Ld%xN3VEniDDW2z`oJt~syms4*u(;k0te>RDU5pj>q6uXKjd^l5bVQ8fnRnJq; z?ABS;^H#zOXBYnGvAZ{~75fLZtqGN_x`S^LmlLzuHD>&xVoa+W)7D#$Oo86l9wfs# zVp`^V{^y5t%DSe>SeZE=IYho5>s6+0vI+Qp%e#v;WmwX0ckgpqJ~vCag#Q7fK6-o^ z7FXC0e}}UmDAEalE2VuOQDo%EgaM?__V&f-9rr;K1D1J4gu{FuA{w0SQ=_9x%2 zwWu4G~6f=k&Ogx?vSf(cNE1iNB-=m^aU68Cu1-{74TC&U|9_#&kNxfHmre z%eV3QiJuiG4h9eX=q+9zZZ3zba%%TE%q@Pb_q&ZCHxIo0betrX*Sj!1I1Qlf?(ENT z(WJi{=t6&)M*kf!=0}ldqeEs6%Tl696Je{BIB0+&I`az`s{8oB}Q${9vJ3 zG}|RMJ=8~>fbq0=>!8 z?|t^GCK$I z{r$Ob=dYJM#>c0kJ9oOK4)c4*b(4!Siq!6S^?n!?@%dd*v$hf;b_)`*|5^g6d8%~a zJ@Ri0!ahht*ib8hhx=nkJ>4g&cSAN%D`btH2le!ghtscuIN3Q;^Ua-hTuNK>Zw*F0 z-_+rgT5C}FT!ni7Y2%^$@uREYAY{INN>(?ajDJc>&d?vL+-gf_ec8PE+5TN;?40r^*Me{W>~Tz96Y16sm&8F+5Q9*%GIKMl57-t zsmsT6X8>@~h;zn7iWN_g{Qz!atRE!;HOKJpkCSKs5sXDWN(ToC{&YL}2^=HN8k$Nk zO-IaS*e_2(xLJr|5(j{W!D0LD|JN%I$6}<7NCP7$?W8%JmmxOBw=feZ?-(dLKwTFl~1{P9 zXmQP0z#jLB$erRcn{Q9_-xwl}1^nyNmG@AS*6O13P6h=vBn}PXe8o6>z^=u4nu{I#Roa*jIpa*C1vU%npW+A{LPfUFgp4q)PyO zxwJ%E)W5WMl)Q38`)eTn0eZMA=^NN_S>5`a16b5A2ZfD6A)ayt3xDKil=Z8}Z|eR{ zR?arTV+D`z2b@nsbwrgNp@x678q_^qof;An+}cUZmJBH-O%{C+^+<(KS>+b~@NUlw z@>|LsdhE%FQyeatq&(@`zKmymiYqe+xulf%!=Gim{WR|{=8{v%^Ws_BxSOdh&kBhF zd@^E9rH3Dxxdv(Ze~!;}<_w655;0Kvlw=Z-D&)EAWxjhgT`64t{f)rc*}7wKs(XUn zS!Y>8Yr6DV95=xKIiTZJ>KM1m^~;$8QSs^?DbEd~2td_GyCL1bPZpJ<;* ztaT)lfH{atyN?ibHNf*l47I7%)7Z$gDXK(@f>ZSe5s-~_!=s|JiL3w@z6 zF5@j4hX2L@-e}mK3HXZrwb0X-Z)Ghojd=9I$6Y?UZ=I4$M|UAD{ptZKZ{HJ^iW|<9t~E>`P%eFn~SzRE<*{{ z2;zM>D%6bQEm)dSyIEnT$pH{4DhV_vlS_-rRzZSgmNhSzFq6HvBxqc9*O>J!#jJI7 zw3U3$y>9-NKWW4SGTtzYDtBynrKV*L4VCfwyH<5?_}Z9O{DQgJkEV)mn!fwG9ns`_ zc9E9*q2F@pTHLZyP5UCO^<{mu$ITw?-u&dNsj@<><}%wU9S-s@l-~iraam~?K+xD2 zTbB0lY9zb6aL4}POkv@D9U+hVev$Q2kId(EGD+c4U`~9NudjdRCQKla1_1DRaXU8< zURy-N<%C>X)u#&d!dr@D%c z*D1S@xupkb(JKJ0_808+xW@gcI{yT6yP9rd|FX1skFO%GHW@B=*#KrE@R~vaoEwW= zgX&OqdrK-``qK~sP@xlxpf|YzDpPH^NC8+IQlCYSia~^gq;K$JSC5+?ONY^W`DlFym-y~X{g@U+02-~ zjJk2Mo0`wmQ|0I7=OlTmFUzkR$Eh=3mze91y{_vrlK7O25ERoV zccOX@Y>aIozlMyfoL*eKP0t;9;n6x$P~zZScl=zlFnVEl_*u1@_ zlT&9I8>=2L$2-PQ*}&6<(O|kPXs>UkQfIfSOnMsx)?;h$p97_2pCO#9C!?}u7Xfi z-k79a5@W@X$p%XFW`wcb2aUB5adM8fzfgoO-wTJW30C0wnP6`zWSlUgVzutt?IWZx z67wMAxk|$>|Z*f`nTjIqQFub{zrfI9fv`j^*3lBf(1i1 zwI;nz6ViW5@x<6_sOM^d9VXee_m#rjA~`KbI8{r?>doNJkGs76>Tfcvu#yR%DdY?f zBtkA_c*ddw@@qovy7tQ1w3VZ`fBIv+HRNCB56Q9O;499}O%0WAtKMhc!|zQWv;;_V zEiH7d+-Ms~wKAH4>>_?~1x})X`QG|s5Z^}{5*nfpRV&`XpZU3el)tC|ZDfc{WIjpF zFz)XVF~|rDhC>!kkR`K`vC4^hRN)vD31kpRQzRU4Sk|R2&1mUX$6|;~ZX4(CSjkTO z*zrme#JflFBIhG}FyoUi{iiJ-pRJj0()Q`FD7-uw;H&=X+i!ctbf+Q)P|%Fr%aN_n zp%qNd0FXg?t$Nkm_0m_FDJeJx`8>Fd7NmMq{$dA?E>^j+6HAG|rx?;Y0yf}!JXtH? z+*0)h?MqCc5z2JkTD$75_XF^7@sgX2a0T9L*g0B#(|;FJPBVW88CQZL%K>dL8CGag z^JJA+uw!jkc`m zIB4Xld^9XktN3g{OKlwtw;I642q6rW54u|WP)p~dviY;n>CBGpC&Ofh&)zdrV`kK9 zMb_Wnza5h_xbtY5!+m9i3t`on%p8>Iadu&Awv1h#2#oaRtBKv2{{6Vi~J_Rmdi5<%?~At%6I%5VNY1N^Iq8w8M}iP^^FxBdT7{ z`9Ln1HK}v42045@x^p%*9fZzVL+p2w=~F{#832Ik*5fyOK3lgzH42)EuuFK35BhNN z$j-q8J?V^j+)Qttt(-(C(g}*YQ8v3ND*S7lWYBQ;f6|ahX}}4Ixcogc-*DOa`3UT& zcIO1MN=KJH_LriV8=pT$0TZ)eIG!szrg{dEJRkA%*|l{9x9M%EOt1~SSz=@Y>_M_q zgF8o~S??0M9Y{MsAZB<8Oh>2S88!0O=ShYebDNQ?^Q0OS-omdg@mg#R{7xM?9o7;j zz(^ZxHV0^2W zFe~GU>OX;_B?WT^deI4*ryDbCRBq=w0j3qcZ9=O`-DjHKJninsc=Q>X4IN&ntLO zzf-#+#bI0v@ht2ySX4`5W6|Lb0myh3T`MNmI`oN5@XYaivj{4fQSMKri6J`DxfoqZ zL!$ZylVXVH1vKDuSh1HR!q7JiDI2 z7rG~8XSklNP{kwCzmK_qpFViG7#3^>X3)MLyB0=*KTxA9Cy1A~fI7?tf&DN;ZClNnTj&zr5vTmt^z8{`LaCR#bQZ`oU9`uVHQ3TMSh%nEpH+M9 zmeTl~R=z|v^(Gi$WhY{Y;<{M$iglib$d(mO%*|;T=sf(OR=Tv-!Pmi@ceeq{*ZIyl zlSk3gt^z<#jFVFOiuY%HMAuz{_-ELikDVH z6YP}0G6>L%BBsG-3FT11l8&h+f0q`ftbF;)o;`Q3bhTBpf%(tqco<>XyX`Vs=Vgn` znUvRt6#`1#tes2PbVQ(Y-W8R_xp?L(>~Y>BOkymMSLiVy#&VgL%V?JdzVydrEzMu` zeun6Rfe4>>;DrZ}!ez*%HUy5XlxpZ$h(-OI%}vnfE$DO&`~aZ&-en^DDu@S;@}qfM zw2#TeFy5jlM+fV0d+!lvOhFh{&n#GgMtt`tRkbzvg+5%ul{9mN8tS(xh24N827sl# z3d#}mmzggv<*cc9;=B9M*~{4A9V-EP2~SfsXMA=A0<<6%iMmGDhVt;jeC}ptLr3; z$28(@q@b%_s6)M1^QE==bJt8oz}lMR;+T@HCZ|>RMbzz#xr^6jS8XkU9+SZ(Rgndq zspn7?jGo?*4<&&D@MLXnGb6ru!5x*cTvs*@xvUXo8qukEQff=oZ{U&4%C;JL`zKb> z>Wq>koh!?v8f0%8_=@1f`ajto{WX|6uD$I8Fhk-dNvP^3FBNI+DRao=Li}eEz?K>cwuK z>h`WsvKzRlGK+{jHktI*7k76)UM?oNp{z{Zi~eP72uGoTaFn`jdWc665)m+V*ji_i zwW4AXF77HccXo&O)X!_MKew-S8Si#=`|P*?lzXI6d6br~MW=Y7jiFd*kfe0=IB1-D zX{}HeXJm9h5fb-OjQmzXM7bHii?}$`TGm<5e~0wNRk;gGN$8sEksGk$L%JM!0$!2t zP}bQy&LL|Y81?WwBK`+Ukje2x%%kdQtuLM2h&%-)WnkH+v$?MSGirhhGQN!7fq1Hx0T#8=<$A!Ce$@imODw#=Pw`N9BUetHVu^(8s+1oyhq$^)P z`Wxk&_3q;^z6oF1>OV!Qy4{W>wMtN!^1B@}s`8DK>nMW@Gl1U|SW-}|J@8&v4s|z} zo}o{3a5b9LV+>fB>2RbKwAt#w{Z1<6g(Ui(qqCGBY|Jr26RRT3Ju>hkMLM}UIKFH^ zGwR^e1HNdwZjtre9=Q_YSU6a=Bl7u6pbRgX?fnx>JcRssIANF;uesJx+4vB zx86JYVs$vBqJ5SaQt`b%ivI_OX6t`vXn@v(eg&4tU;eKUjgg`n;zYO0`XwoY%i=S~ zNqL&|;msQ+ztfhsAwfPCL6)T6gKMUXYw90*nhnH3qLGrxF=M_dKVRxJd-&(b$tR%; zm8@jFQ^JNvRtHUMR?Z|sX@BdDQ4M|x{}E9i1yK1P%xet)7AWCcffCk=;PWR{t*hS5 zn3GOX*YYA4RVfCB1`$7Rc^s1J)+dqf+uTZu627Z@;xsvkl*nQ2;@Q>yA$5B-J6z*Q zt(`rel;Ri|AbuafGz-queA%4eOjc|a2pdBE-?$p!zrY%2en{3`qk9Ly2=gp4CCo~0 zmsln^1p6&4g9m;{MA+`6wLC^joIEN-&SJ>epRJ(t#CS5$Ck|u@;PP{!lpz$@0>2_B zq2;Hi1Ys^No7U~AZ zz$zg?lF@k~I~y+C^5MY#XEaG)3-Fx7%J}Q(ippdN;?-@H)w2NdW<_sJUWhNaC6+C& z>Pv1_IVWgRX(nhL(5+-=iTgfUr4>=0TlNHUb8R_=rdyRg)EJ;9L!BqCaptqfeCI`b z5UrS)N8K|+(r&3HZVevSMdQ(5JCpslEH_8>-T=?h0Q&8;8H@vy=AyU&__J<+R~Cr% z#XJPm>*6L(LX^aBEP@YoPyZW>18tMyT`M{sP@P!?`m`rOD24je@n9U(-42=VkN}`dYq`K=&@j`e_S+<6TVnDhbcV7qU^&zG%Q+ z#J;>PyCMprEVuV|pP6{keW)9KS@6jtvBGq*EyI|^T@3?u?G1Mh0W2O??G(HV-i93PJoz)gW#rxqYns^7wv{r^bvhE=0b>pZ3Xx* zMu;vQB(zF~fF6}=7`GIC+Z9}am1eo^A8t51@Fr~)3*FfZ(+015i9fu;`ER@q@IQf_ z=>G=nNZjEuN)=VWGPOE$ZaR+BKtzAwww0n1RQ(5iY*L?qGZzSiY9#1%34r~kVFQrq`|L715uQ5>+O$O$b;1L1BvEzaN5FSH z-(|o08`w6ZE?0hJ$L-c!3p4&TPTej}(uubePA-Ql3X|CUCVW_BM%x$C+(Lr3nlAK~ zNnt^vxPcWP$;kGTp(1iNQ;1JuucCr4VRfAxasqE3E>MnDH*gJ*Wv&6ZPn#?s^YAZc zEP>>^xuNN}*B8gfFBnvRp`s>=(MnAw>~;&tVIrA==B;K`%_vsL6=x3G zs~+O#w^=)A`)4;0pZ*tG_rc`nb2T5YtQ^S`C3eRfXN~cdR@N zog46+W0*E3wFkxnfO-k;YTjzmX z^2TdEhg8E?{`i-Y6mG^ye| zrX#~ct5ePUr5&;&87n_P_R@9BpE%N?YAKj@flzjoZpq)ps>|Pisd#7PgA# z-`#UyxBodtRbP=DD#fYH8C{#W!9~X(p+2KH{vGIPn<>Dyf>OKUgU^ePFT>|i5cp&K zPk&ASt2rO9$?zZ)2aj)FoNWcxKURl409l9(Qr3l2AX1{nfnwff?olZQW`*8Hk_i)> z4v{KH#_Q(Zr(B~Li|XPfZ5CAZnlJH@yL*6Wj3@$xJzaskV5qreR*dM$?HB4Y9N}rc0KLbFZ%}c@F_((^LBH^#VlXf3T9EIZ77(3ei?qWe zJMW49LzaMwHA-j=r?n#~;LC4Ql**-#E#(yf`e58Qhp3C#I51j22}BeH9+{zQ;yE&f z6F(JNVxnH7JXeC2RV`{!wJ7}rh=pUi7Tm5qh)C{+4Wcj_j^FV_(%kHjaAu@kJWolc z?bSNZ5PNYgGaf_G-P$Z7x`K0<2D(n}R_J#Tq9SVeynjd4xcVv?yGRE`*7cY71wb0a z1|^Gzxq?5gZ@a=LP{Q4(8q*J;$R>X0EgO&h4?vwKGL&WqvBF5wBo&Wjga7X3koT@* zY<2sNh@}MBr|l%KF^Bn~1R#?;9NZs1U=XybS&Nbht6wF%SaRx4ey6c#4Sg+Tfwu9^ zvV46?r|Ke&vm$kztJK6aJizu#DbMrV+v5y$m`s=(L#vv$fdHrDhPp)vqgA)U8U3F% z%0D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 plW5g;o}Gc6 Date: Fri, 9 Aug 2013 18:10:18 -0700 Subject: [PATCH 05/16] Added cortical borers. --- baystation12.dme | 1 + .../modules/mob/living/simple_animal/borer.dm | 233 ++++++++++++++++++ 2 files changed, 234 insertions(+) create mode 100644 code/modules/mob/living/simple_animal/borer.dm diff --git a/baystation12.dme b/baystation12.dme index 9348f106ce0..b82ce97a578 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1005,6 +1005,7 @@ #include "code\modules\mob\living\silicon\robot\robot_movement.dm" #include "code\modules\mob\living\silicon\robot\say.dm" #include "code\modules\mob\living\silicon\robot\wires.dm" +#include "code\modules\mob\living\simple_animal\borer.dm" #include "code\modules\mob\living\simple_animal\constructs.dm" #include "code\modules\mob\living\simple_animal\corpse.dm" #include "code\modules\mob\living\simple_animal\parrot.dm" diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm new file mode 100644 index 00000000000..c0354ed07e5 --- /dev/null +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -0,0 +1,233 @@ +/mob/living/captive_brain + name = "host brain" + real_name = "host brain" + +/mob/living/captive_brain/say(var/message) + + if (src.client) + if(client.prefs.muted & MUTE_IC) + src << "\red You cannot speak in IC (muted)." + return + if (src.client.handle_spam_prevention(message,MUTE_IC)) + return + + if(istype(src.loc,/mob/living/simple_animal/borer)) + var/mob/living/simple_animal/borer/B = src.loc + src << "You whisper silently, \"[message]\"" + B.host << "The captive mind of [src] whispers, \"[message]\"" + +/mob/living/captive_brain/emote(var/message) + return + +/mob/living/simple_animal/borer + name = "cortical borer" + real_name = "cortical borer" + desc = "A small, quivering sluglike creature." + speak_emote = list("chirrups") + emote_hear = list("chirrups") + response_help = "pokes the" + response_disarm = "prods the" + response_harm = "stomps on the" + icon_state = "brainslug" + icon_living = "brainslug" + icon_dead = "brainslug_dead" + speed = 5 + a_intent = "harm" + stop_automated_movement = 1 + status_flags = CANPUSH + attacktext = "nips" + friendly = "prods" + wander = 0 + + var/mob/living/carbon/human/host // Human host for the brain worm. + var/truename // Name used for brainworm-speak. + var/bonded // Var for full bonding with the host brain. + var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. + var/controlling // Used in human death check. + +/mob/living/simple_animal/borer/New() + ..() + truename = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]" + host_brain = new/mob/living/captive_brain(src) + +/mob/living/simple_animal/borer/say(var/message) + + message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) + message = capitalize(message) + + if(!message) + return + + if (stat == 2) + return say_dead(message) + + if (stat) + return + + if (src.client) + if(client.prefs.muted & MUTE_IC) + src << "\red You cannot speak in IC (muted)." + return + if (src.client.handle_spam_prevention(message,MUTE_IC)) + return + + /*if (copytext(message, 1, 2) == "*") + return emote(copytext(message, 2)) + + if (copytext(message, 1, 2) == ";") //Brain borer hivemind. + return borer_speak(message)*/ + + if(!host) + src << "You have no host to speak to." + return //No host, no audible speech. + + src << "You drop words into [host]'s mind: \"[message]\"" + host << "Your own thoughts speak: \"[message]\"" + +/mob/living/simple_animal/borer/proc/borer_speak(var/message) + if(!message) + return + + for(var/mob/M in mob_list) + if(M.mind && (istype(M, /mob/living/simple_animal/borer) || istype(M, /mob/dead/observer))) + M << "Cortical link, [truename]: [copytext(message, 2)]" + +/mob/living/simple_animal/borer/verb/bond_brain() + set category = "Alien" + set name = "Assume Control" + set desc = "Fully connect to the brain of your host." + + if(!host) + src << "You are not inside a host body." + return + + if(src.stat) + src << "You cannot do that in your current state." + return + + src << "You begin delicately adjusting your connection to the host brain..." + + spawn(100) + + if(!host || !src) return + + else + src << "\red You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system." + host << "\red You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours." + + host_brain.ckey = host.ckey + host.ckey = src.ckey + controlling = 1 + + host.verbs += /mob/living/carbon/human/proc/release_control + +mob/living/simple_animal/borer/verb/release_host() + set category = "Alien" + set name = "Release Host" + set desc = "Slither out of your host." + + if(!host) + src << "You are not inside a host body." + return + + if(stat) + src << "You cannot leave your host in your current state." + + + if(!host || !src) return + + src << "You begin disconnecting from [host]'s synapses and prodding at their internal ear canal." + bonded = 0 + + if(!host.stat) + host << "An odd, uncomfortable pressure begins to build inside your skull, behind your ear..." + + spawn(200) + + if(!host || !src) return + + if(src.stat) + src << "You cannot infest a target in your current state." + return + + src << "You wiggle out of [host]'s ear and plop to the ground." + if(!host.stat) + host << "Something slimy wiggles out of your ear and plops to the ground!" + + detatch() + +mob/living/simple_animal/borer/proc/detatch() + + if(!host) return + + var/datum/organ/external/head = host.get_organ("head") + head.implants -= src + src.loc = get_turf(host) + controlling = 0 + + if(host_brain.ckey) + src.ckey = host.ckey + host.ckey = host_brain.ckey + host_brain.ckey = null + host_brain.name = "host brain" + host_brain.real_name = "host brain" + + host = null + +/mob/living/simple_animal/borer/verb/infest(var/mob/living/carbon/human/H) + set category = "Alien" + set name = "Infest" + set desc = "Infest a suitable humanoid host." + + if(host) + src << "You are already within a host." + return + + if(stat) + src << "You cannot infest a target in your current state." + return + + var/list/choices = list() + for(var/mob/living/C in view(1,src)) + if(istype(C,/mob/living/carbon/human) && C.stat != 2) + choices += C + + var/mob/living/carbon/human/M = input(src,"Who do you wish to infest?") in null|choices + + if(!M || !src) return + + M << "Something slimy begins probing at the opening of your ear canal..." + src << "You slither up [M] and begin probing at their ear canal..." + + if(!do_after(src,50)) + src << "As [M] moves away, you are dislodged and fall to the ground." + return + + if(!M || !src) return + + if(src.stat) + src << "You cannot infest a target in your current state." + return + + if(M.stat == 2) + src << "That is not an appropriate target." + return + + if(M in view(1, src)) + src << "You wiggle into [M]'s ear." + if(!M.stat) + M << "Something disgusting and slimy wiggles into your ear!" + + src.host = M + var/datum/organ/external/head = M.get_organ("head") + head.implants += src + src.loc = M + bonded = 0 + + host_brain.name = M.name + host_brain.real_name = M.real_name + + return + else + src << "They are no longer in range!" + return \ No newline at end of file From 7aa8d00e70b116a098020dbf3c9576e3f5e66b48 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 9 Aug 2013 18:10:55 -0700 Subject: [PATCH 06/16] Borer removal, control, release of control, host death. --- code/modules/mob/living/carbon/human/death.dm | 19 ++++++++++++ code/modules/mob/living/carbon/human/human.dm | 29 +++++++++++++++++++ code/modules/mob/screen.dm | 26 +++++++++++++++++ code/modules/surgery/implant.dm | 7 ++++- 4 files changed, 80 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index e20829aab85..095695e23d8 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -54,6 +54,25 @@ dizziness = 0 jitteriness = 0 + //Handle brain slugs. + var/datum/organ/external/head = get_organ("head") + var/mob/living/simple_animal/borer/B + + for(var/I in head.implants) + if(istype(I,/mob/living/simple_animal/borer)) + B = I + if(B) + if(!B.ckey && ckey && B.controlling) + B.ckey = ckey + B.controlling = 0 + if(B.host_brain.ckey) + ckey = B.host_brain.ckey + B.host_brain.ckey = null + B.host_brain.name = "host brain" + B.host_brain.real_name = "host brain" + + verbs -= /mob/living/carbon/human/proc/release_control + //Check for heist mode kill count. if(ticker.mode && ( istype( ticker.mode,/datum/game_mode/heist) ) ) //Check for last assailant's mutantrace. diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index df8dec56156..cb96be329dc 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1274,3 +1274,32 @@ mob/living/carbon/human/yank_out_object() return 1 else return 0 + +//Brain slug proc for voluntary removal of control. +/mob/living/carbon/human/proc/release_control() + + set category = "Alien" + set name = "Release Control" + set desc = "Release control of your host's body." + + var/datum/organ/external/head = get_organ("head") + var/mob/living/simple_animal/borer/B + + for(var/I in head.implants) + if(istype(I,/mob/living/simple_animal/borer)) + B = I + if(!B) + return + + if(!B.ckey && ckey && B.controlling) + src << "\red You withdraw your probosci, releasing control of [B.host_brain]" + B.host_brain << "\red Your vision swims as the alien parasite releases control of your body." + B.ckey = ckey + B.controlling = 0 + if(B.host_brain.ckey) + ckey = B.host_brain.ckey + B.host_brain.ckey = null + B.host_brain.name = "host brain" + B.host_brain.real_name = "host brain" + + verbs -= /mob/living/carbon/human/proc/release_control \ No newline at end of file diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm index 514872db379..22775a6c8cd 100644 --- a/code/modules/mob/screen.dm +++ b/code/modules/mob/screen.dm @@ -606,6 +606,32 @@ var/mob/living/L = usr + //Resisting control by an alien mind. + if(istype(src.loc,/mob/living/simple_animal/borer)) + var/mob/living/simple_animal/borer/B = src.loc + var/mob/living/captive_brain/H = src + + H << "\red You begin doggedly resisting the parasite's control." + B.host << "\red You feel the captive mind of [src] begin to resist your control." + + spawn(50) + + if(!B || !H || !H.ckey) + return + + H << "\red With an immense exertion of will, you regain control of your body!" + B.host << "\red You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you." + B.controlling = 0 + + B.ckey = B.host.ckey + B.host.ckey = H.ckey + + H.ckey = null + H.name = "host brain" + H.real_name = "host brain" + + return + //resisting grabs (as if it helps anyone...) if ((!( L.stat ) && L.canmove && !( L.restrained() ))) var/resisting = 0 diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 0d67881f242..7e240f737e3 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -166,7 +166,7 @@ if (affected.implants.len) - var/obj/item/weapon/obj = affected.implants[1] + var/obj/item/obj = affected.implants[1] if(istype(obj,/obj/item/weapon/implant)) var/obj/item/weapon/implant/imp = obj @@ -181,6 +181,11 @@ user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.display_name] with \the [tool].", \ "\blue You take [obj] out of incision on [target]'s [affected.display_name]s with \the [tool]." ) affected.implants -= obj + + //Handle possessive brain borers. + if(istype(obj,/mob/living/simple_animal/borer)) + target.release_control() + obj.loc = get_turf(target) if(istype(obj,/obj/item/weapon/implant)) var/obj/item/weapon/implant/imp = obj From 1146676491661b3b1cc1fa0d008f9d47fd448fe3 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 9 Aug 2013 18:16:10 -0700 Subject: [PATCH 07/16] Minor adjustment to release_control() proc. --- code/modules/mob/living/carbon/human/human.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index cb96be329dc..ba8718d0239 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1291,7 +1291,7 @@ mob/living/carbon/human/yank_out_object() if(!B) return - if(!B.ckey && ckey && B.controlling) + if(B.controlling) src << "\red You withdraw your probosci, releasing control of [B.host_brain]" B.host_brain << "\red Your vision swims as the alien parasite releases control of your body." B.ckey = ckey From c14c74472e6f8accd3c18d60f461ee6842a29475 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 9 Aug 2013 19:40:43 -0700 Subject: [PATCH 08/16] Additional cortex borer verbs, reproduction. --- code/modules/mob/living/carbon/human/human.dm | 50 ++++++++++++++++++- .../modules/mob/living/simple_animal/borer.dm | 23 +++++++++ code/modules/mob/screen.dm | 6 +-- 3 files changed, 75 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ba8718d0239..f57e26f5463 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1302,4 +1302,52 @@ mob/living/carbon/human/yank_out_object() B.host_brain.name = "host brain" B.host_brain.real_name = "host brain" - verbs -= /mob/living/carbon/human/proc/release_control \ No newline at end of file + verbs -= /mob/living/carbon/human/proc/release_control + verbs -= /mob/living/carbon/human/proc/punish_host + verbs -= /mob/living/carbon/human/proc/spawn_larvae + +//Brain slug proc for tormenting the host. +/mob/living/carbon/human/proc/punish_host() + set category = "Alien" + set name = "Torment host" + set desc = "Punish your host with agony." + + var/datum/organ/external/head = get_organ("head") + var/mob/living/simple_animal/borer/B + + for(var/I in head.implants) + if(istype(I,/mob/living/simple_animal/borer)) + B = I + if(!B) + return + + if(B.host_brain.ckey) + src << "\red You send a punishing spike of psychic agony lancing into your host's brain." + B.host_brain << "\red Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!" + +/mob/living/carbon/human/proc/spawn_larvae() + set category = "Alien" + set name = "Reproduce" + set desc = "Spawn several young." + + var/datum/organ/external/head = get_organ("head") + var/mob/living/simple_animal/borer/B + + for(var/I in head.implants) + if(istype(I,/mob/living/simple_animal/borer)) + B = I + if(!B) + return + + if(B.chemicals >= 100) + src << "\red Your host twitches and quivers as you rapdly excrete several larvae from your sluglike body." + visible_message("\red [src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!") + B.chemicals -= 100 + + new /obj/effect/decal/cleanable/vomit(get_turf(src)) + playsound(loc, 'sound/effects/splat.ogg', 50, 1) + new /mob/living/simple_animal/borer(get_turf(src)) + + else + src << "You do not have enough chemicals stored to reproduce." + return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index c0354ed07e5..3dff4b7bde2 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -39,17 +39,34 @@ friendly = "prods" wander = 0 + var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin. var/mob/living/carbon/human/host // Human host for the brain worm. var/truename // Name used for brainworm-speak. var/bonded // Var for full bonding with the host brain. var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. var/controlling // Used in human death check. +/mob/living/simple_animal/borer/Life() + + ..() + if(host) + if(!stat && !host.stat && chemicals < 250) + chemicals++ + /mob/living/simple_animal/borer/New() ..() truename = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]" host_brain = new/mob/living/captive_brain(src) + for(var/mob/M in player_list) + if(istype(M,/mob/dead/observer)) + var/mob/dead/observer/O = M + if(O.client) + if(O.client.prefs.be_special & BE_ALIEN) + src.ckey = O.ckey + break + + /mob/living/simple_animal/borer/say(var/message) message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) @@ -120,6 +137,8 @@ controlling = 1 host.verbs += /mob/living/carbon/human/proc/release_control + host.verbs += /mob/living/carbon/human/proc/punish_host + host.verbs += /mob/living/carbon/human/proc/spawn_larvae mob/living/simple_animal/borer/verb/release_host() set category = "Alien" @@ -165,6 +184,10 @@ mob/living/simple_animal/borer/proc/detatch() src.loc = get_turf(host) controlling = 0 + host.verbs -= /mob/living/carbon/human/proc/release_control + host.verbs -= /mob/living/carbon/human/proc/punish_host + host.verbs -= /mob/living/carbon/human/proc/spawn_larvae + if(host_brain.ckey) src.ckey = host.ckey host.ckey = host_brain.ckey diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm index 22775a6c8cd..a2299d63c72 100644 --- a/code/modules/mob/screen.dm +++ b/code/modules/mob/screen.dm @@ -611,12 +611,12 @@ var/mob/living/simple_animal/borer/B = src.loc var/mob/living/captive_brain/H = src - H << "\red You begin doggedly resisting the parasite's control." + H << "\red You begin doggedly resisting the parasite's control (this will take approximately sixty seconds)." B.host << "\red You feel the captive mind of [src] begin to resist your control." - spawn(50) + spawn(rand(400,500)) - if(!B || !H || !H.ckey) + if(!B || !B.controlling) return H << "\red With an immense exertion of will, you regain control of your body!" From 02d1a4740f99976de1a03ea858e1672d3e8a3189 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 10 Aug 2013 00:17:11 -0700 Subject: [PATCH 09/16] Brainslug language translation for hosts. --- code/modules/mob/living/carbon/human/human.dm | 25 +++++++++++-------- code/modules/mob/living/say.dm | 6 +++++ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f57e26f5463..f70d3956b03 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1312,30 +1312,33 @@ mob/living/carbon/human/yank_out_object() set name = "Torment host" set desc = "Punish your host with agony." - var/datum/organ/external/head = get_organ("head") - var/mob/living/simple_animal/borer/B + var/mob/living/simple_animal/borer/B = has_brain_worms() - for(var/I in head.implants) - if(istype(I,/mob/living/simple_animal/borer)) - B = I if(!B) return if(B.host_brain.ckey) src << "\red You send a punishing spike of psychic agony lancing into your host's brain." - B.host_brain << "\red Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!" + B.host_brain << "\red Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!" + +//Check for brain worms in head. +/mob/living/carbon/human/proc/has_brain_worms() + + var/datum/organ/external/head = get_organ("head") + + for(var/I in head.implants) + if(istype(I,/mob/living/simple_animal/borer)) + return I + + return 0 /mob/living/carbon/human/proc/spawn_larvae() set category = "Alien" set name = "Reproduce" set desc = "Spawn several young." - var/datum/organ/external/head = get_organ("head") - var/mob/living/simple_animal/borer/B + var/mob/living/simple_animal/borer/B = has_brain_worms() - for(var/I in head.implants) - if(istype(I,/mob/living/simple_animal/borer)) - B = I if(!B) return diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index b7ac6233556..a73e7230bf1 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -384,6 +384,12 @@ var/list/department_radio_keys = list( if(understood || P.universal_speak) //world << "[M] understood [src] (1)." heard_a += M + else if(istype(P,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = P + if(H.has_brain_worms()) // Brain worms act like Babelfish. + heard_a += M + else + heard_b += M else //world << "[M] didn't understand [src]." heard_b += M From 4e5a17b94a3f8170f7d9437f1c3f55516c969f15 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 10 Aug 2013 00:20:09 -0700 Subject: [PATCH 10/16] Lowered age for pod plants. --- code/game/machinery/podmen.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/podmen.dm b/code/game/machinery/podmen.dm index 2fe409dcfb5..1e8eb4e5368 100644 --- a/code/game/machinery/podmen.dm +++ b/code/game/machinery/podmen.dm @@ -12,7 +12,7 @@ Growing it to term with nothing injected will grab a ghost from the observers. * productname = "/mob/living/carbon/human" //verrry special -- Urist lifespan = 50 //no idea what those do endurance = 8 - maturation = 10 + maturation = 5 production = 10 yield = 1 //seeds if there isn't a dna inside oneharvest = 1 From 23947fd2c8ae2ee95d20e203c471cee94464f6ef Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 10 Aug 2013 01:20:36 -0700 Subject: [PATCH 11/16] Added cumulative brainloss for borer infestations. --- code/modules/mob/living/simple_animal/borer.dm | 15 ++++++++++++--- code/modules/mob/screen.dm | 3 ++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index 3dff4b7bde2..84aebe98c46 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -50,8 +50,17 @@ ..() if(host) - if(!stat && !host.stat && chemicals < 250) - chemicals++ + if(!stat && !host.stat) + if(chemicals < 250) + chemicals++ + if(controlling) + if(rand(0,3)) + host.adjustBrainLoss(rand(1,2)) + + if(prob(host.brainloss)) + host.say("*"[pick("blink","blink_r","choke","aflap","drool","twitch","twitch_s","gasp")]) + + //if(host.brainloss > 100) /mob/living/simple_animal/borer/New() ..() @@ -124,7 +133,7 @@ src << "You begin delicately adjusting your connection to the host brain..." - spawn(100) + spawn(300+(host.brainloss*5)) if(!host || !src) return diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm index a2299d63c72..c83ba829a9d 100644 --- a/code/modules/mob/screen.dm +++ b/code/modules/mob/screen.dm @@ -614,11 +614,12 @@ H << "\red You begin doggedly resisting the parasite's control (this will take approximately sixty seconds)." B.host << "\red You feel the captive mind of [src] begin to resist your control." - spawn(rand(400,500)) + spawn(rand(350,450)+B.host.brainloss) if(!B || !B.controlling) return + B.host.adjustBrainLoss(rand(5,10)) H << "\red With an immense exertion of will, you regain control of your body!" B.host << "\red You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you." B.controlling = 0 From 1d533de46a79a6b8762c8ce206985811cc3d984f Mon Sep 17 00:00:00 2001 From: Segrain Date: Sat, 10 Aug 2013 06:16:47 +0300 Subject: [PATCH 12/16] Vox limbs. --- code/game/gamemodes/heist/heist.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 72f5f1a77d6..878f600e44b 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -103,6 +103,8 @@ var/global/vox_kills = 0 //Used to check the Inviolate. vox.add_language("Vox-pidgin") vox.h_style = "Short Vox Quills" vox.flavor_text = "" + for(var/datum/organ/external/limb in vox.organs) + limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT) vox.equip_vox_raider() vox.regenerate_icons() From 4c26922e7b88324c1f65a4be046d10043f0858d1 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 10 Aug 2013 12:36:23 -0700 Subject: [PATCH 13/16] Compile fix. --- code/modules/mob/living/simple_animal/borer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index 84aebe98c46..136b6f5baf2 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -58,7 +58,7 @@ host.adjustBrainLoss(rand(1,2)) if(prob(host.brainloss)) - host.say("*"[pick("blink","blink_r","choke","aflap","drool","twitch","twitch_s","gasp")]) + host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_s","gasp"))]") //if(host.brainloss > 100) From 6c266e08e46f76eb530891b898762eaca50128a1 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 10 Aug 2013 13:15:30 -0700 Subject: [PATCH 14/16] Fixed double worms, lowered chance of emoting. --- code/modules/mob/living/simple_animal/borer.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index 136b6f5baf2..977c4e15355 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -54,7 +54,7 @@ if(chemicals < 250) chemicals++ if(controlling) - if(rand(0,3)) + if(prob(5)) host.adjustBrainLoss(rand(1,2)) if(prob(host.brainloss)) @@ -97,11 +97,11 @@ if (src.client.handle_spam_prevention(message,MUTE_IC)) return - /*if (copytext(message, 1, 2) == "*") + if (copytext(message, 1, 2) == "*") return emote(copytext(message, 2)) if (copytext(message, 1, 2) == ";") //Brain borer hivemind. - return borer_speak(message)*/ + return borer_speak(message) if(!host) src << "You have no host to speak to." @@ -228,6 +228,9 @@ mob/living/simple_animal/borer/proc/detatch() if(!M || !src) return + if(M.has_brain_worms()) + src << "You cannot infest someone who is already infested!" + M << "Something slimy begins probing at the opening of your ear canal..." src << "You slither up [M] and begin probing at their ear canal..." From 857cce2da53842f172574053d9d49c70a8dec4ad Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 10 Aug 2013 13:22:35 -0700 Subject: [PATCH 15/16] Brainloss emoting tweak. --- code/modules/mob/living/simple_animal/borer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index 977c4e15355..46ff70493c9 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -57,7 +57,7 @@ if(prob(5)) host.adjustBrainLoss(rand(1,2)) - if(prob(host.brainloss)) + if(prob(host.brainloss/20)) host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_s","gasp"))]") //if(host.brainloss > 100) From a8c892a938ec477648f46bfeab142e3579a11701 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 11 Aug 2013 14:03:46 -0700 Subject: [PATCH 16/16] Fixes Heist check_antag verb. --- code/game/gamemodes/heist/heist.dm | 4 +++- code/modules/admin/player_panel.dm | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 878f600e44b..5a1e12a191b 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -7,6 +7,9 @@ VOX HEIST ROUNDTYPE var/global/vox_kills = 0 //Used to check the Inviolate. +/datum/game_mode/ + var/list/datum/mind/raiders = list() //Antags. + /datum/game_mode/heist name = "heist" config_tag = "heist" @@ -19,7 +22,6 @@ var/global/vox_kills = 0 //Used to check the Inviolate. var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) var/list/raid_objectives = list() //Raid objectives. - var/list/datum/mind/raiders = list() //Antags. var/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective. /datum/game_mode/heist/announce() diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index e932ab856eb..44f1cfdd820 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -469,6 +469,13 @@ dat += "Wizard not found!" dat += "" + if(ticker.mode.raiders.len > 0) + for(var/datum/mind/raider in ticker.mode.raiders) + var/mob/M = raider.current + if(M) + dat += "[M.real_name][M.client ? "" : " (logged out)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "PM" + dat += "Show Objective" /* if(ticker.mode.ninjas.len > 0) dat += "
"
Ninjas