From 7dd9580adf7f640dc558e8da22bc93c5593e6d5c Mon Sep 17 00:00:00 2001 From: datlo Date: Sun, 6 Jan 2019 16:19:31 +0000 Subject: [PATCH 01/80] port icon and module --- .../mob/living/silicon/robot/robot_modules.dm | 41 ++++++++++++++++++ icons/mob/robots.dmi | Bin 263078 -> 265351 bytes 2 files changed, 41 insertions(+) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 2330d0ecd64..c8a9f60290d 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -432,6 +432,47 @@ fix_modules() +/obj/item/robot_module/syndicate_saboteur + name = "syndicate saboteur module" + module_type = "Malf" + module_actions = list( + /datum/action/innate/robot_sight/meson, + /datum/action/innate/robot_sight/thermal, + ) + stacktypes = list( + /obj/item/stack/sheet/metal/cyborg = 50, + /obj/item/stack/sheet/glass/cyborg = 50, + /obj/item/stack/sheet/rglass/cyborg = 50, + /obj/item/stack/cable_coil/cyborg = 50, + /obj/item/stack/rods/cyborg = 60, + /obj/item/stack/tile/plasteel = 20 + ) + +/obj/item/robot_module/syndicate_saboteur/New() + ..() + modules += new /obj/item/assembly/flash/cyborg(src) + modules += new /obj/item/construction/rcd/borg/syndicate(src) + modules += new /obj/item/pipe_dispenser(src) + modules += new /obj/item/extinguisher(src) + modules += new /obj/item/weldingtool/largetank/cyborg(src) + modules += new /obj/item/screwdriver/nuke(src) + modules += new /obj/item/wrench/cyborg(src) + modules += new /obj/item/crowbar/cyborg(src) + modules += new /obj/item/wirecutters/cyborg(src) + modules += new /obj/item/multitool/cyborg(src) + modules += new /obj/item/destTagger/borg(src) + modules += new /obj/item/stack/cable_coil/cyborg(src) + modules += new /obj/item/pinpointer/operative(src) + modules += new /obj/item/borg_chameleon(src) + emag = null + + for(var/T in stacktypes) + var/obj/item/stack/sheet/W = new T(src) + W.amount = stacktypes[T] + modules += W + + fix_modules() + /obj/item/robot_module/combat name = "combat robot module" module_type = "Malf" diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index 653dfd5dfa964051c8349d9070d7ca5c3cfa3014..d35638a6d19f72fdd58f2bda1bebd9e1a9121f73 100644 GIT binary patch delta 10024 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 delta 7717 zcmY*;1ymf%)^!L0Vt8-}AvhOz*8m~NAi){j-5r_$!GgO57zpm}5NvRQ1$Q3?cb}i! z_wv5=_v-G|U1y)#r>b^UpY9G$!O9E9ilzcYJU?qVe=u<}aGEatJ@z}OQBer;__jcX zoZ$Mgx2YSf%W)XLc+(ye$}nj?V%shk6c7+=JGiw+LxfS66;^76(4Zx);JbA;W0e3d zEqJ2`G`P*`yE^PB87izt^2jxcUgaW%k4r}1x5seiM2Rm$Wc?RjQuQo+vS0-ysJp%d zDsw*K)?xOFt8W=b%X)wAgw~Djzz7m!p|O4F8v;2x5>JM8H$^u)^(fMCqOpT0I+b7a zjG!YyX6Ugu@!j}I?=YP=UWZhO1_4Gi^lWjf$uggYjCoCCaX2g#J(h%1NKLRe`6>th ziDn?69)6`8GpOwuUb$lFTrpH3CByZN zo|njoz2f_+QZZz-+|5dnBdvQ26Eflo!L6TusEqllcIH1%Lc)bsJqp80t2w!5zsfIt zi@mf_UjyJktH-2SXhSUoX;2noLalRU&6}NL=$25>+4RKVbxSmEpV>Q0FcarP+!PWY z0DfCbR~moMj6Gb_9-m?O0=*exP|s;C)zvm$0r+b`s_c1RCVUN0DqtiH6E|5EeZ%l7 z7^0}j`~2&`M+&UGY<*3cu!Qb_JbP+)jB_Jvb+kfSNP@(ggMu*AlBl7bPAGwDVb$k0 z!`~+Jap(SBi)!ZV84CPbxgCOEiX|W9fIapR>L20&)i(=;VlxnMXfe$%4w6`YAcxVPa=71?LH#?TZ!#8F{F5!5W(X}Wx_%*FC@ztdY6M=1^7W0CtB$&G_ z!Q&wwFFh=)hZM+wy%==6s?D+9_ zYO|%(xo}ff>;Bd`yBz8@s`u}@cS?M%}QUDaympyM6M85<6Pa> zbHyxpBV?!u27`SaT_@W>Z9`4%D*qHai=8vJ(#FE()>G^dZOlgjyDz7*3_O@P198t= zF*g)Lv!94(eoz_Z?{gK#+3%`k3|S^g5DB34$>woQU`{l?I&SA8Q<%ndcCXdR$3B$q z!+6x7I?Al$WI}=Tn>K>)-|mufeldbsW(;ddACM4}gH~c&o|gfh&w@RlAw3>X>ph<# zyRJSZE2}@*M8fT*#3v$Ha;Y?LfF+OFktz)jQt-D+ze){aGl;o^6lScRE zORecT{GwJAKo=mWRfUB0gh?7J8Dop%JY99IR&x|M$DvDKpcYv|NxM0xt=*#}-M;my0u=Cy@yK*3g7pU~zVxjFBp{I{(V z?RtgZjqs0hGE{F~t_rQ?8avUqIg+=Q!-suXh`qg3b-H@uUd)eVqvt)C8$0R; z3*=MO_UCbq_owfLrZ1jnN$Z;g5-n*NJ^1@StKoZsx{m*X0zj{pkref&n z1sEU&0KTq91G-ax?+@tD8KrHJ7i_Mdn-n6D9!pv(>`5eRW9q(^eAEW-S7gUoNQ{m@ zvx!*rf8ZfIO2MEY5w{^kLOvQR!*ShXHl5xcqs2j7^l#tYuix*n6k2N^Nd;jO%^C=# ze#(^Zb38(`k(=lkOD$R5&PW|!stUsV9XXW@nEqg*7=(4&br{m>bbcB=k4UPkHDyOLFPvlro#ye(L&PKv6(3l)`!9v8y1UTi{N zEcCfZvwN{fpIEA0uhf+9|7dzd0HM1=UWN2?(u*DU8!UGwX;HVWEj*ud5h{@=!Yi#U zB2wVxn>%U-;{>ItBW$Zv{Mt4I4~t6O{<=oRQ;_vp+_g}p@NOp;uY#Zd@S}jNx}eJi zS$J6#lYTsky(2})&*VjNT?A%)jY%k)6JDX$i1l4m-uH2Tg1cgI-tUzF{Es+kiGnX# zc>0g7HP;R5c66VqUF?6nRoj+ozwMe^5Z}b?dLVXplYqNL%xEYU$dL^A_*r&fTAC>C zN9l0dGMe9(;lWQ{CHx9Z#rk}+Y8U)oCedt}#pD6wd5uB5v=s_tay#WXY9^kAO0LMb zR3?#yleUpH-AqY~m^|R~F-{xneizY*lBPNnWP}uqt`x4to8~|Kb-?vKB?xCNN2Hgg zyBEh?uKSI(?d^87UWH}~#{ln*I5$OyeVd2G2a zgw5#4>wYIXPv1o>O(eKw`ZS)1^~EHb`4P8bOFkioxpHlBSoXeT@|U{h4Rd-9edU_g zkRq^ZvRK@jP!Fd&$@57xR%9BF@_O4v0*XMaHE+eQU%$$?vARsSf-jSV&KM9Jy5&hL zxj8Zqm*thL!2Pai`%IqgjiMLA4DDF5k&2d9C4oD<+Y0R@*kHP5_m#uV8Eg)IUgdt= z7`&XhcQJ1_-QV9ol*UuO*d7A#ddWl;AvYJ7C_Ybu^y%H{>GdVuhs*Sv(@-lTWV)eL(bgHwuMWh82seVMQVFk?7rv--uXUf#;mxO_B9RmmzyT zxX$M6Pa!yHe!z{8Dh!*kG191ZJez2Lej7|}&l1obDd)$c3mv_^^pu$%529kxBuZn^0SxEor@jy3)`Nm^R!fFrMBc>NdZm^SG&#l(F8p+Lk(Dxr+E^we5*9llY@Zs2m8VC*eC?st9$%-xIv6xyx zhr%IqQ!CtAZrNi_W2yeGa6~8v?XIYYpRdFHk!R~<&s5AP&zIclw8P-gYMR}jt50NB zsbb^e_>AAaFY_WD%&-N&zZ!IZ$h^r^@roy-E3Oj9XYP_*ie=d{6gfppnRB&Xs03`4 z(Q+@m_xq>kN)cbN#6uz{jh`A0tcm-qZ?!*lVzKr6l!PZxZvKLQl`fgczQ2jR#SD zK3K&nA4igTWw*q#FidWyU|y9Gj1O$Vi^~<(hkMDp*N<0Rn?s|bXm9gDN0*owC-WAX zr4JC+kJjP1U%uA{sbErNHA${tNv|sH6{;&17~d#nm#Ld z;a9|rgPkVl26sJfae7*P*{V@onwJ}C8B@!L9PwP4?f&b9o%^mi0YVKfM~fQ?_!aKM z>q@m2H%!0a9T|rwZW$uEi1y4oUV#9VmPS+8xN|x3+m^Sar(j2`Ous9h}}$daQ0A?kN9%|y9>{l(9J4nF{H5ZxP%x~(tphRXw{ z7>dovfPHga;9g7DW5;JJo!S?cGn<;J(@W;|W`+Gtkim)r$q?W{CwNPHbDwwalnq>T zIk%P*Gw&mjtAAh?1UnoD-XU??YhL!f|DK3^nj<)p*mOAMywCl<3+|>K@YE1@tug?~ z8eRRuUr2g&?Ep9$N-MSND%B*qiM6#AE@Fj^=W;+QBw4Xmw0#8k1TBv*G-F@Xo0{xU zfET@$EpRfiK-S?Tb~ZxlmlqYyb8FwzcVe;XBS%Jq45BBgiGZI}##(`L-<~A}*zlDs z*e6~^Y~Iz0mGsI#?#lTZkz~akm1Ij6COFSlf@izVfJ#4!OZR}6nE}f7Jw1iqRXkNt z#VGf$Ig~lJOOYqM+Lk(MLELW$Uq+(7&v|I~kYNzGNPuviec~*@;C24SnH4|LusM;pswJY9zW`nG>^r1&u*&AiYjuDz~pIn|la4pT@KlA+bh9O}r& z$Z&iBWn{?Nh%w1#T5ICKjpNMZr&OhjKFY|iemusm$STig3Esv0g64Sv4_)WwP3#I= zb{#6iT?g28No@zP8-~II=JkOcKuaCgOOuS|}*r1!9SNTYQi4 zYuLOd6{6#c8TgLIr`3{l4kYJ1sj@|+9I#!%&u(s>gk4Nm?H;F1rflNSEj#$_26*** ztXrV4-bAJ}_5PHF-A8mDq!*u$K+Hlw$WkL;w#oi*gdw_3vxx?<$ z#gO`0eOc?%q`{tP<>rc;)_u~s`d6SHHA6$g=a(&Ex&h@YsX%M8Z~qJH>v<%M{pH~S zGjiJ`a-@2}lXL|VZ=z|y4J%hyWF7%jMTOl9gcRO{*z<kQhr3Em%w42@b%)9JZ@Z#weAhALHaS626N|X0V;rlF!sW9Ay9?L5Lyqdo zuz4BztmO2F81h0*N}An+V}h7**dN45Gv6=>y@48TAjImyy4i-)0{IjKTqFk}m9QYl zgm7-hc^sbHTDey7Urq{W_YRU>kZlwkKJW6BM|u6=edZFo?m5QefQ8oLrIB)~^Gzg< zgq?hH`m7OOqLGLYz$O`7+O)s-6=bXJ?(P;X5b1XSH@@Fo-r0wZ)a^!a2Hr7hEjnla z$jw_glU=0e{$l4wuF$9n3`Y)#tfNnfTFd-Ebb)u~Jy^R`dL3Dh_#*2bleT{jH*39# zp+DGQH*g_H4MrsA&pBxGtr7c#OQr(ryBETRfp~CG>(B3;G+@0YoahxA6 zGhH3jeS!#+AT0`*#`i%}l*_yjrhjp?vGUCH;N%p_x5l%%6$88JIdlo0A-q~m7<%YO z4YT~o`uerRSii{x2e#?rHTsnl1B*!8m!@|u?uj2{WEVx4!L&Uct)M7>&|q@)kxG&G zsD86OF)pV>QzyUz2)tanBNR6{Kv;1VYq8pFHLy{#JAd-;B$?t2JPU2UO(BwS$=8rn z4$mGxtPn;_Ha{3i8SiAg2y3DlaEVl<>ZN12OLe&()=Q7-CoO7*5?yr?w->@v31{n@ ztCnc!)yC+h92iGG+(8}DDdfQ#apUyLWl+1g9VIF#Awc?Su4K^a+Wf0hSMcs670(mq z`i?QrxYR5fwh;;IaJ2ScAb;sGu8xRRNIa*KSm z9AH!z2ymC1GP+n8pC48u4V3s4Km$Z6nD9rQ}$Hl9LHb4)8<4 zxI{;X$RTjNUPz0?vt49HpbYjwURK`S-9Pe>6r^QJ+!6M!2Vj7zuXlm>X-F|}BVSF} z=<_hA*%P@m!$%WM5mWaYjMn#Of70M=N-n;qhG$V`7Aqf4RvSv@fjqWw-2Sf&r`oKqYY;AKy5_!>+)9D9$;2mB!3yqRT-#>M90fmIfs)u}G;4pmedGY0&tt zqsMs+;&HsXC$`CX0jd2;(+!oE1$kdk27{)wNC*caAZsBmy~nmA3$FW!O3kRFb%>6>B*kU{X;Z zr&IeoY z8=L;H%3bLuH@lFiVdr@NjUhw0cE$Qvrn}FKVky@KkE(*0Zaf^oF~+b8SE!N@s!OBg2dH9csQ1>V zFTH*)*ZTrYMnfTel@??c0q;-v$n7McqmUc-c5+N_PmvE+8#6J)J)s+24kJz7c}MkJJ-WiOpLHzOtF-LwRa1ny2(O1WbrMJ$3G)D zz}-iiRGKt38|9RBcFKE%YsLU+W+5I!5tuVImXBJ+N;`)M-PO2w%wH9ScBC~0m%TP1 zV3l2w?IkEZ_)^zmxloU1!6|?{fQG-s!5R%Ypk>p8b`D_O+cMDdc+()-h&Pbir%eSH zeNGX0<;V{w##+1k2m&Fp)BfZHkA+y`&b+h5GXGxvIgyRrOY&q<3Z1P4c#dX$vu_r> z>pe@9m%dtTxt^<%#~{5*-v%Zwn9v_zEB-!V7R-oa%bZfHDM$09H{M3pNhZp;4CBvskJ>)c>hKt?6C9zFf0Y>RS<8QZ1`a z1Kf$a=V_*sn_Z?xDHWkpsmG7Qvp-_dgq+6s*GXrTx#3y&p5Cu9bzK)ch(6X}4cjnQ zhkmsFJ3<#SphGlTpEblHs6sAHk+m;D9o+K>jiLJM{e0{tfzH!T&aT&_tWV}0M$P3W zI=4?(Pp`Af)~{~mC&Y6q$%4Niqw1%wVpuo+H_qn{t4%9Yeg(%%a5M;mWh{SLThBkEpLh)&`jWGU+s=k|7=Ufyl2#cs8>jWpDR+c_RZ%Qj<-S z73soFw3Ma|Qt%;)gcGlgQfMOAv&e#jnr{9-PD^g2<2?jW2X^&!U-^PIqWzw71yg?> zBhtb^n|rlFhK{haDu*1&U^a$*wIbAJHm1os81NGr{lfI;yXC)eFzc9o_kZlcW@pDs z=4ZrDV`?$q_-*}0Dd$d$Zvddkb2W0hzSnLq^`Sl!E{5KQw{=ZK$hYUc4%Yq#5du(o zRzh>qF|7B#JBmJ~%GR?rh5bei!juwrzf(thl2%T6RxTPy;4cGQ31`X?9s(E?fxv&d zY)yQ8<9W!u?d_L?_{kUbgAwz7>U!WTU2ugc{mMb}p`|Nl*Eg2dtVmk&w?1ds`=Q@* zosvG#$R*qBN{M;bnbAh>f0**AU?lB@a&}Gr{*67;qRD2zGW!aX^rQZ%sj9kqutksq zXm8{ya+p0`RX|VTw64lD=)0#B`^HV7%K4vL(RDAp z$ecC@|4ky6;5-7zWNMCd)CqjHdOls?s)xlFB7C!xQ>TVo zi|#=(Ic_pI8VOx@#eE%Ap)l`%di61QE2CO2PMO|&Lc;T%+aj#<{MyjhnLn<9sh6bsTm`B5%ME4 zJTYDTMlYc0$jf1SKYQtRpF|UJWWyA8IWpk(=I74#QmpF#F}vDB--HKZyjDw2$lF;c zMW#&ehjCTF2*ScreM#jt|41JASNJu3^e;kut)_OmF_L{9svMFo_xpB#>0>rz!w7`$ zDqy{1@pyly$cJy~v3?b@pZEp!5gU=DMh-NmCxF0uBYb=0xAvnrKV+K>=0p`u)UOF@ z|4Z>7hIEH1fS)lNzHn$k3u;7261d)84KeWmpijb_mpTUZQNL9VfEbtmwKs&DpL!c> zuDO1lGNX;m6fM=lXLJijwXYQXS4+pLZUfAOsw^#|5Q2HwX40X;yM-p From d66b8d9f2046497a8b0087ac4c2c06832dd2c8e5 Mon Sep 17 00:00:00 2001 From: datlo Date: Sun, 6 Jan 2019 21:51:22 +0000 Subject: [PATCH 02/80] functional --- code/datums/uplink_item.dm | 2 +- .../objects/items/devices/chameleonproj.dm | 97 +++++++++++++ code/game/objects/items/weapons/RCD.dm | 14 +- .../antagonists/_common/antag_spawner.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 55 -------- .../mob/living/silicon/robot/robot_modules.dm | 23 ++-- .../mob/living/silicon/robot/syndicate.dm | 129 ++++++++++++++++++ icons/mob/robots.dmi | Bin 265351 -> 265350 bytes paradise.dme | 3 +- 9 files changed, 252 insertions(+), 75 deletions(-) create mode 100644 code/modules/mob/living/silicon/robot/syndicate.dm diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 9eace6f7c1d..3671dc34c62 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -560,7 +560,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /datum/uplink_item/dangerous/syndieborg name = "Syndicate Cyborg" - desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel." + desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel. Comes in Assault, Medical, or Saboteur variants." reference = "SC" item = /obj/item/antag_spawner/borg_tele refund_path = /obj/item/antag_spawner/borg_tele diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 7a25f4ece1b..2572f826735 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -148,3 +148,100 @@ /obj/effect/dummy/chameleon/Destroy() master.disrupt(0) return ..() + +/obj/item/borg_chameleon + name = "cyborg chameleon projector" + icon = 'icons/obj/device.dmi' + icon_state = "shield0" + item_state = "electronic" + w_class = WEIGHT_CLASS_SMALL + var/active = FALSE + var/activationCost = 300 + var/activationUpkeep = 50 + var/disguise = "landmate" + var/datum/component/mobhook // need this to deal with unregistration properly + var/mob/living/silicon/robot/syndicate/saboteur/user // needed for process() + +/obj/item/borg_chameleon/Destroy() + QDEL_NULL(mobhook) + return ..() + +/obj/item/borg_chameleon/dropped(mob/user) + . = ..() + disrupt(user) + +/obj/item/borg_chameleon/equipped(mob/user) + . = ..() + disrupt(user) + +/obj/item/borg_chameleon/attack_self(mob/living/silicon/robot/syndicate/saboteur/user) + if (user && user.cell && user.cell.charge > activationCost) + if (isturf(user.loc)) + toggle(user) + else + to_chat(user, "You can't use [src] while inside something!") + else + to_chat(user, "You need at least [activationCost] charge in your cell to use [src]!") + +/obj/item/borg_chameleon/proc/toggle(mob/living/silicon/robot/syndicate/saboteur/user) + if(active) + playsound(src, 'sound/effects/pop.ogg', 100, 1, -6) + to_chat(user, "You deactivate \the [src].") + deactivate(user) + else + to_chat(user, "You activate \the [src].") + var/start = user.filters.len + var/X,Y,rsq,i,f + for(i=1, i<=7, ++i) + do + X = 60*rand() - 30 + Y = 60*rand() - 30 + rsq = X*X + Y*Y + while(rsq<100 || rsq>900) + user.filters += filter(type="wave", x=X, y=Y, size=rand()*2.5+0.5, offset=rand()) + for(i=1, i<=7, ++i) + f = user.filters[start+i] + animate(f, offset=f:offset, time=0, loop=3, flags=ANIMATION_PARALLEL) + animate(offset=f:offset-1, time=rand()*20+10) + if (do_after(user, 50, target=user) && user.cell.use(activationCost)) + playsound(src, 'sound/effects/bamf.ogg', 100, 1, -6) + to_chat(user, "You are now disguised as a Nanotrasen engineering cyborg.") + activate(user) + else + to_chat(user, "The chameleon field fizzles.") + do_sparks(3, FALSE, user) + for(i=1, i<=min(7, user.filters.len), ++i) // removing filters that are animating does nothing, we gotta stop the animations first + f = user.filters[start+i] + animate(f) + user.filters = null + +/obj/item/borg_chameleon/process() + if (user) + if (!user.cell || !user.cell.use(activationUpkeep)) + disrupt(user) + else + return PROCESS_KILL + +/obj/item/borg_chameleon/proc/activate(mob/living/silicon/robot/syndicate/saboteur/user) + processing_objects.Add(src) + src.user = user + user.base_icon = disguise + user.icon_state = disguise + active = TRUE + user.active_proj = src + user.update_icons() + +/obj/item/borg_chameleon/proc/deactivate(mob/living/silicon/robot/syndicate/saboteur/user) + processing_objects.Remove(src) + QDEL_NULL(mobhook) + user.base_icon = initial(user.base_icon) + user.icon_state = initial(user.icon_state) + active = FALSE + user.active_proj = null + user.update_icons() + src.user = user + +/obj/item/borg_chameleon/proc/disrupt(mob/living/silicon/robot/syndicate/saboteur/user) + if(active) + to_chat(user, "Your chameleon field deactivates.") + deactivate(user) \ No newline at end of file diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index e4624a00ba6..2bf94ff465a 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -456,20 +456,24 @@ GLOBAL_LIST_INIT(rcd_door_types, list( /obj/item/rcd/proc/checkResource(amount, mob/user) return matter >= amount +/obj/item/rcd/borg + canRwall = 1 + var/use_multiplier = 160 + +/obj/item/rcd/borg/syndicate + use_multiplier = 80 + /obj/item/rcd/borg/useResource(amount, mob/user) if(!isrobot(user)) return 0 var/mob/living/silicon/robot/R = user - return R.cell.use(amount * 160) + return R.cell.use(amount * use_multiplier) /obj/item/rcd/borg/checkResource(amount, mob/user) if(!isrobot(user)) return 0 var/mob/living/silicon/robot/R = user - return R.cell.charge >= (amount * 160) - -/obj/item/rcd/borg - canRwall = 1 + return R.cell.charge >= (amount * use_multiplier) /obj/item/rcd/proc/detonate_pulse() audible_message("[src] begins to vibrate and \ diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 80a62f9c818..3ced0d5ceb0 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -19,7 +19,7 @@ var/checking = FALSE var/TC_cost = 0 var/borg_to_spawn - var/list/possible_types = list("Assault", "Medical") + var/list/possible_types = list("Assault", "Medical", "Saboteur") /obj/item/antag_spawner/borg_tele/attack_self(mob/user) if(used) @@ -57,6 +57,8 @@ switch(borg_to_spawn) if("Medical") R = new /mob/living/silicon/robot/syndicate/medical(T) + else if("Saboteur") + R = new /mob/living/silicon/robot/syndicate/saboteur(T) else R = new /mob/living/silicon/robot/syndicate(T) //Assault borg by default R.key = C.key diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 2f4056f6149..a546e299cd6 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1293,61 +1293,6 @@ var/list/robot_verbs_default = list( playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0) - - -/mob/living/silicon/robot/syndicate - base_icon = "syndie_bloodhound" - icon_state = "syndie_bloodhound" - lawupdate = 0 - scrambledcodes = 1 - pdahide = 1 - faction = list("syndicate") - designation = "Syndicate Assault" - modtype = "Syndicate" - req_access = list(access_syndicate) - ionpulse = 1 - magpulse = 1 - lawchannel = "State" - var/playstyle_string = "You are a Syndicate assault cyborg!
\ - You are armed with powerful offensive tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ - Your cyborg LMG will slowly produce ammunition from your power supply, and your operative pinpointer will find and locate fellow nuclear operatives. \ - Help the operatives secure the disk at all costs!" - -/mob/living/silicon/robot/syndicate/New(loc) - ..() - cell.maxcharge = 25000 - cell.charge = 25000 - -/mob/living/silicon/robot/syndicate/init() - laws = new /datum/ai_laws/syndicate_override - module = new /obj/item/robot_module/syndicate(src) - - aiCamera = new/obj/item/camera/siliconcam/robot_camera(src) - radio = new /obj/item/radio/borg/syndicate(src) - radio.recalculateChannels() - - spawn(5) - if(playstyle_string) - to_chat(src, playstyle_string) - - playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0) - -/mob/living/silicon/robot/syndicate/medical - base_icon = "syndi-medi" - icon_state = "syndi-medi" - modtype = "Syndicate Medical" - designation = "Syndicate Medical" - playstyle_string = "You are a Syndicate medical cyborg!
\ - You are armed with powerful medical tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ - Your hypospray will produce Restorative Nanites, a wonder-drug that will heal most types of bodily damages, including clone and brain damage. It also produces morphine for offense. \ - Your defibrillator paddles can revive operatives through their hardsuits, or can be used on harm intent to shock enemies! \ - Your energy saw functions as a circular saw, but can be activated to deal more damage, and your operative pinpointer will find and locate fellow nuclear operatives. \ - Help the operatives secure the disk at all costs!" - -/mob/living/silicon/robot/syndicate/medical/init() - ..() - module = new /obj/item/robot_module/syndicate_medical(src) - /mob/living/silicon/robot/combat base_icon = "droidcombat" icon_state = "droidcombat" diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index c8a9f60290d..ee0cf0db06f 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -433,12 +433,9 @@ fix_modules() /obj/item/robot_module/syndicate_saboteur - name = "syndicate saboteur module" + name = "engineering robot module" //to disguise in examine module_type = "Malf" - module_actions = list( - /datum/action/innate/robot_sight/meson, - /datum/action/innate/robot_sight/thermal, - ) + stacktypes = list( /obj/item/stack/sheet/metal/cyborg = 50, /obj/item/stack/sheet/glass/cyborg = 50, @@ -450,20 +447,22 @@ /obj/item/robot_module/syndicate_saboteur/New() ..() - modules += new /obj/item/assembly/flash/cyborg(src) - modules += new /obj/item/construction/rcd/borg/syndicate(src) - modules += new /obj/item/pipe_dispenser(src) + modules += new /obj/item/rcd/borg/syndicate(src) + modules += new /obj/item/rpd(src) modules += new /obj/item/extinguisher(src) modules += new /obj/item/weldingtool/largetank/cyborg(src) - modules += new /obj/item/screwdriver/nuke(src) + modules += new /obj/item/screwdriver/cyborg(src) modules += new /obj/item/wrench/cyborg(src) modules += new /obj/item/crowbar/cyborg(src) modules += new /obj/item/wirecutters/cyborg(src) modules += new /obj/item/multitool/cyborg(src) - modules += new /obj/item/destTagger/borg(src) - modules += new /obj/item/stack/cable_coil/cyborg(src) - modules += new /obj/item/pinpointer/operative(src) + modules += new /obj/item/t_scanner(src) + modules += new /obj/item/analyzer(src) + modules += new /obj/item/gripper(src) + modules += new /obj/item/melee/energy/sword/cyborg(src) + modules += new /obj/item/card/emag(src) modules += new /obj/item/borg_chameleon(src) + modules += new /obj/item/pinpointer/operative(src) emag = null for(var/T in stacktypes) diff --git a/code/modules/mob/living/silicon/robot/syndicate.dm b/code/modules/mob/living/silicon/robot/syndicate.dm new file mode 100644 index 00000000000..25cf1dd184d --- /dev/null +++ b/code/modules/mob/living/silicon/robot/syndicate.dm @@ -0,0 +1,129 @@ +/mob/living/silicon/robot/syndicate + base_icon = "syndie_bloodhound" + icon_state = "syndie_bloodhound" + lawupdate = 0 + scrambledcodes = 1 + pdahide = 1 + faction = list("syndicate") + designation = "Syndicate Assault" + modtype = "Syndicate" + req_access = list(access_syndicate) + ionpulse = 1 + magpulse = 1 + lawchannel = "State" + var/playstyle_string = "You are a Syndicate assault cyborg!
\ + You are armed with powerful offensive tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ + Your cyborg LMG will slowly produce ammunition from your power supply, and your operative pinpointer will find and locate fellow nuclear operatives. \ + Help the operatives secure the disk at all costs!" + +/mob/living/silicon/robot/syndicate/New(loc) + ..() + cell.maxcharge = 25000 + cell.charge = 25000 + +/mob/living/silicon/robot/syndicate/init() + laws = new /datum/ai_laws/syndicate_override + module = new /obj/item/robot_module/syndicate(src) + + aiCamera = new/obj/item/camera/siliconcam/robot_camera(src) + radio = new /obj/item/radio/borg/syndicate(src) + radio.recalculateChannels() + + spawn(5) + if(playstyle_string) + to_chat(src, playstyle_string) + + playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0) + +/mob/living/silicon/robot/syndicate/medical + base_icon = "syndi-medi" + icon_state = "syndi-medi" + modtype = "Syndicate Medical" + designation = "Syndicate Medical" + playstyle_string = "You are a Syndicate medical cyborg!
\ + You are armed with powerful medical tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ + Your hypospray will produce Restorative Nanites, a wonder-drug that will heal most types of bodily damages, including clone and brain damage. It also produces morphine for offense. \ + Your defibrillator paddles can revive operatives through their hardsuits, or can be used on harm intent to shock enemies! \ + Your energy saw functions as a circular saw, but can be activated to deal more damage, and your operative pinpointer will find and locate fellow nuclear operatives. \ + Help the operatives secure the disk at all costs!" + +/mob/living/silicon/robot/syndicate/medical/init() + ..() + module = new /obj/item/robot_module/syndicate_medical(src) + +/mob/living/silicon/robot/syndicate/saboteur + base_icon = "syndi-engi" + icon_state = "syndi-engi" + modtype = "Syndicate Saboteur" + designation = "Syndicate Saboteur" + var/mail_destination = 0 + var/obj/item/borg_chameleon/active_proj = null + playstyle_string = "You are a Syndicate saboteur cyborg!
\ + You are equipped with robust engineering tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ + Your destination tagger will allow you to stealthily traverse the disposal network across the station \ + Your cyborg chameleon projector allows you to assume the appearance of a Nanotrasen engineering cyborg, and undertake covert actions on the station. \ + You are able to hijack Nanotrasen cyborgs by emagging their internal components, make sure to flash them first. \ + You are armed with a standard energy sword, use it to ambush key targets if needed.\ + Be aware that taking damage or being touched will break your disguise. \ + Help the operatives secure the disk at all costs!" + +/mob/living/silicon/robot/syndicate/saboteur/init() + ..() + module = new /obj/item/robot_module/syndicate_saboteur(src) + +/mob/living/silicon/robot/verb/modify_name() + set name = "Modify name" + set category = "Saboteur" + rename_self(braintype, 1) + +/mob/living/silicon/robot/syndicate/saboteur/verb/set_mail_tag() + set name = "Set mail tag" + set desc = "Tag yourself for delivery through the disposals system." + set category = "Saboteur" + + var/tag = input("Select the desired destination.", "Set Mail Tag", null) as null|anything in GLOB.TAGGERLOCATIONS + + if(!tag || GLOB.TAGGERLOCATIONS[tag]) + mail_destination = 0 + return + + to_chat(src, "You configure your internal beacon, tagging yourself for delivery to '[tag]'.") + mail_destination = GLOB.TAGGERLOCATIONS.Find(tag) + + //Auto flush if we use this verb inside a disposal chute. + var/obj/machinery/disposal/D = src.loc + if(istype(D)) + to_chat(src, "\The [D] acknowledges your signal.") + D.flush_count = D.flush_every_ticks + + return + +/mob/living/silicon/robot/syndicate/saboteur/attackby() + if(active_proj) + active_proj.disrupt(src) + ..() + +/mob/living/silicon/robot/syndicate/saboteur/attack_hand() + if(active_proj) + active_proj.disrupt(src) + ..() + +/mob/living/silicon/robot/syndicate/saboteur/ex_act() + if(active_proj) + active_proj.disrupt(src) + ..() + +/mob/living/silicon/robot/syndicate/saboteur/emp_act() + if(active_proj) + active_proj.disrupt(src) + ..() + +/mob/living/silicon/robot/syndicate/saboteur/bullet_act() + if(active_proj) + active_proj.disrupt(src) + ..() + +/mob/living/silicon/robot/syndicate/saboteur/attackby() + if(active_proj) + active_proj.disrupt(src) + ..() diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index d35638a6d19f72fdd58f2bda1bebd9e1a9121f73..eb59b0288b34baf880c7447e20ddbfa0a24e97bb 100644 GIT binary patch delta 1093 zcmV-L1iJf&nGlAV5RfE)OnOvUbVOxyV{&P5bZKvH004NLrI^8T;y4h7&+rtgnImWl zoG`l=4x8Z0l3F+nTYH_7tsbMqR=Xqt@!RjgNiblc7E>+`RDFM|-B!0+{gpkWPs=r1 ztd_$)7^_gTIlKQh84eCgx-FZtyJR@nf-1JI{bQYQz~=1BgTV}c-Iw7&Dr4E4-46%9 zjHtk}Ih!7_R2NDE7^RCK`*$O0MxTX#K$ir$6-bJ?mC|5-hf0P638iS*oK45m;h@4j zRG?jtfzb3v%PWv77bVRLUXjvX z8dNgJDih&C(qXy5lITcKaDNdPUy143vs(qex^PyoKJ`$EPMMx|6yJM4&Tvp7)~!JU z2c_kyKk#1tX=NQ6usr6#fCen5Rc~m(@`#K*<9Vryt+O;X*_BP+i<0+kSK@!`KfQU> zXNkDAp#jTFp=Bjp_-r_#qhfcHsKUAcVGO*H6Ub*EYF#Zf{*05?0Um#KBbbb*vvYBy zrGn^KT*#t4cBo2l-pUg4`BNUXD6N$JDiO`Jzm%S12@SiWVfQp_M#H|-us?!Wp|Wr| z3YCR}QK&2&ib7@KKolwqhoMkeI0%KxNFflWqF`A`ij~BJrf?;A4)s%PR|lyVp_N18 zaZWxhK0sn`T!}YTsj`1mzGBs7+mrQ*!`)VBGM-L4TBX6ffU8CRO6)Q&C8R=sB8zEG zt5;8d?`hXMLQg~A2}d&ST=#$Hh`mAU>2G5XT-o$n$|!>eX8?aVgl`jrEjnAHV{?{F z#?x7M*MFEPce!V9(#@C2ct)}oX!j{5?A2*b=LRqvpFCHMTgWps;cM5&;=tA&1FSP3Uc=o%%Y~b% zmJ9b&Ef;R7S}s4_RYhGkZk2foUHn}o@}hARzJbOJO~I`b4!8(!{YFd0E0DhZ?p;b6 zRI&y^nA{%Gh$&Twj~r69=5Cr%eU6i{0~mjwg^r*%VD=GyD@`2akR!OptOWk}&zeYX ze*8xy7t5!9a(2?bPrl8%zjG_AbV2njeI%0U+T)pT|GqEqFVz*SLGxN@2q)@iAIPB+ zMFE69iKd`+knMaV+J{qF5Pvi(e+5VSL?7%bT`bA)^IvN^oUWhf@M^hEBi@gY9nh0V z1Pvs*6cH{*?b!#E0(l%B-oyt6eqUL-Ua-Y#Is6}TqxZ3Z71+FkdIX1h1ObP71OkV8 L1OvBv1OyET+gk$V delta 1094 zcmV-M1iAZ$nGlDW5RfE)O?p&VbVOxyV{&P5bZKvH004NLrI;Pw!ee@oaFLcp}@B=G(tRS{fk6V^$Fdq~Cu$nRv$I`O5Cnhvk|r zR?Fcl7^_gTIlKKf84mVJx-FZtn`AiHf-1JI{bQYQz~=1Boxu!$-Iw7&Dr4E4-3|x8 zji|t~Ih%fBsVuT)Vf+|e2SCT0Um#JBbbb*vr}=S zrGn^KoXMg*cBo2l-pUg4`5=#4lvc`qmxyNCUrJB0gofSFuv;27qha4^*pDDqs4N_g zLS^A#6e`osw{t%uUK{2_GG=_aJLnjjHi>1R%tNL;A)Y-5W9?X38~N@$zqz* z>c!LFd)l>*(9_U&!jX(S*Zn^^Vz1D8`rFt87hgHnplhL_WTQNi-^cMhY~Mg7l(r|^ z(UWWjYM~4z(*h)IJV8rpgBiLJc4O&tza=@9+yf0HWt73aGXQ@a!ncXR7M-opu{ld7 zp#qtyWBH4>E_F1JR?~PwEGkj_Tn_Ba|4)-kDiOhE#w)R@U`n>aoUctwUS^m zbUfb*YgM?<-*NW z%Z2-?mJ7F3Ef+uTs-i9%*UCJFF8;0(dC~Y3zJbOJO~I`b4!8(!{YFd0E0DhZ?p;b6 zRI&y^nB0D%5mTxVA33CI&0RI4I*gOC0~miFg^r*%U|u8qR+>1-AxChHSqc39pEZ%( z{Q8ebE|w4d4NH6dQT+NwZ}8x{(WEIU#crugXXo+5Kh!XAIPB+ zMFE69iKd`+knMaV+J|FV5WhDne*s7OL?7%bT`bA)<6mn!oUR|}@M^hEBi@gY9nh0V z1PvuR7ZEN;w$btlDE09$JG=%DO#8mFbiH7U)pGbhpm_HT&-8dAgLwppc?1E6c?1H7 Mc?1Kuc?1Lv2$zl$9{>OV diff --git a/paradise.dme b/paradise.dme index f80ea688c86..45a4f96f7d7 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1797,6 +1797,7 @@ #include "code\modules\mob\living\silicon\robot\robot_module_actions.dm" #include "code\modules\mob\living\silicon\robot\robot_modules.dm" #include "code\modules\mob\living\silicon\robot\robot_movement.dm" +#include "code\modules\mob\living\silicon\robot\syndicate.dm" #include "code\modules\mob\living\silicon\robot\update_status.dm" #include "code\modules\mob\living\silicon\robot\drone\drone.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_abilities.dm" @@ -2350,4 +2351,4 @@ #include "goon\code\datums\browserOutput.dm" #include "interface\interface.dm" #include "interface\skin.dmf" -// END_INCLUDE \ No newline at end of file +// END_INCLUDE From b8fac2681fdffb0644f1e990bb6e0a6a66870de8 Mon Sep 17 00:00:00 2001 From: datlo Date: Mon, 7 Jan 2019 06:35:22 +0000 Subject: [PATCH 03/80] add verb to cham, general improvements --- .../objects/items/devices/chameleonproj.dm | 12 ++--- .../mob/living/silicon/robot/syndicate.dm | 48 +++++++++++-------- code/modules/mob/mob_helpers.dm | 9 ++-- 3 files changed, 41 insertions(+), 28 deletions(-) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 2572f826735..d4e41a824fc 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -159,11 +159,14 @@ var/activationCost = 300 var/activationUpkeep = 50 var/disguise = "landmate" - var/datum/component/mobhook // need this to deal with unregistration properly - var/mob/living/silicon/robot/syndicate/saboteur/user // needed for process() + var/mob/living/silicon/robot/syndicate/saboteur/user + +/obj/item/borg_chameleon/New() + ..() + user.cham_proj = src /obj/item/borg_chameleon/Destroy() - QDEL_NULL(mobhook) + user.cham_proj = null return ..() /obj/item/borg_chameleon/dropped(mob/user) @@ -228,16 +231,13 @@ user.base_icon = disguise user.icon_state = disguise active = TRUE - user.active_proj = src user.update_icons() /obj/item/borg_chameleon/proc/deactivate(mob/living/silicon/robot/syndicate/saboteur/user) processing_objects.Remove(src) - QDEL_NULL(mobhook) user.base_icon = initial(user.base_icon) user.icon_state = initial(user.icon_state) active = FALSE - user.active_proj = null user.update_icons() src.user = user diff --git a/code/modules/mob/living/silicon/robot/syndicate.dm b/code/modules/mob/living/silicon/robot/syndicate.dm index 25cf1dd184d..13cbed08ec0 100644 --- a/code/modules/mob/living/silicon/robot/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/syndicate.dm @@ -57,27 +57,37 @@ modtype = "Syndicate Saboteur" designation = "Syndicate Saboteur" var/mail_destination = 0 - var/obj/item/borg_chameleon/active_proj = null + var/obj/item/borg_chameleon/cham_proj = null playstyle_string = "You are a Syndicate saboteur cyborg!
\ You are equipped with robust engineering tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ - Your destination tagger will allow you to stealthily traverse the disposal network across the station \ + Your built-in mail tagger will allow you to stealthily traverse the disposal network across the station. \ Your cyborg chameleon projector allows you to assume the appearance of a Nanotrasen engineering cyborg, and undertake covert actions on the station. \ You are able to hijack Nanotrasen cyborgs by emagging their internal components, make sure to flash them first. \ You are armed with a standard energy sword, use it to ambush key targets if needed.\ - Be aware that taking damage or being touched will break your disguise. \ + Be aware that taking damage will break your disguise. \ Help the operatives secure the disk at all costs!" /mob/living/silicon/robot/syndicate/saboteur/init() ..() module = new /obj/item/robot_module/syndicate_saboteur(src) -/mob/living/silicon/robot/verb/modify_name() - set name = "Modify name" +/mob/living/silicon/robot/syndicate/saboteur/verb/modify_name() + set name = "Modify Name" + set desc = "Change your systems' registered name to fool Nanotrasen systems. No cost." set category = "Saboteur" - rename_self(braintype, 1) + rename_self(braintype, TRUE, TRUE) + +/mob/living/silicon/robot/syndicate/saboteur/verb/toggle_chameleon() + set name = "Toggle Chameleon Projector" + set desc = "Change your appearance to a Nanotrasen cyborg. Costs power to use and maintain." + set category = "Saboteur" + if(cham_proj) + cham_proj.attack_self(src) + else + to_chat("Error : No chameleon projector system found.") /mob/living/silicon/robot/syndicate/saboteur/verb/set_mail_tag() - set name = "Set mail tag" + set name = "Set Mail Tag" set desc = "Tag yourself for delivery through the disposals system." set category = "Saboteur" @@ -99,31 +109,31 @@ return /mob/living/silicon/robot/syndicate/saboteur/attackby() - if(active_proj) - active_proj.disrupt(src) + if(cham_proj) + cham_proj.disrupt(src) ..() /mob/living/silicon/robot/syndicate/saboteur/attack_hand() - if(active_proj) - active_proj.disrupt(src) + if(cham_proj) + cham_proj.disrupt(src) ..() /mob/living/silicon/robot/syndicate/saboteur/ex_act() - if(active_proj) - active_proj.disrupt(src) + if(cham_proj) + cham_proj.disrupt(src) ..() /mob/living/silicon/robot/syndicate/saboteur/emp_act() - if(active_proj) - active_proj.disrupt(src) + if(cham_proj) + cham_proj.disrupt(src) ..() /mob/living/silicon/robot/syndicate/saboteur/bullet_act() - if(active_proj) - active_proj.disrupt(src) + if(cham_proj) + cham_proj.disrupt(src) ..() /mob/living/silicon/robot/syndicate/saboteur/attackby() - if(active_proj) - active_proj.disrupt(src) + if(cham_proj) + cham_proj.disrupt(src) ..() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 46b7d1141b8..8115e4d9ff0 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -560,7 +560,7 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM) objective.explanation_text = copytext(objective.explanation_text, 1, pos)+newname+copytext(objective.explanation_text, pos+length) return 1 -/mob/proc/rename_self(var/role, var/allow_numbers=0) +/mob/proc/rename_self(var/role, var/allow_numbers = FALSE, var/force = FALSE) spawn(0) var/oldname = real_name @@ -568,8 +568,11 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM) var/newname for(var/i=1,i<=3,i++) //we get 3 attempts to pick a suitable name. - newname = input(src, "You are a [role]. Would you like to change your name to something else? (You have 3 minutes to select a new name.)", "Name Change", oldname) as text - if((world.time - time_passed) > 1800) + if(force) + newname = input(src, "Pick a new name.", "Name Change", oldname) as text + else + newname = input(src, "You are a [role]. Would you like to change your name to something else? (You have 3 minutes to select a new name.)", "Name Change", oldname) as text + if(((world.time - time_passed) > 1800) && !force) alert(src, "Unfortunately, more than 3 minutes have passed for selecting your name. If you are a robot, use the Namepick verb; otherwise, adminhelp.", "Name Change") return //took too long newname = reject_bad_name(newname,allow_numbers) //returns null if the name doesn't meet some basic requirements. Tidies up a few other things like bad-characters. From 52f753f5b883b7462d10b6c7f33062b3163dc21f Mon Sep 17 00:00:00 2001 From: datlo Date: Mon, 7 Jan 2019 10:17:23 +0000 Subject: [PATCH 04/80] fix disposal mailing and chameleon verb, add self repair --- .../objects/items/devices/chameleonproj.dm | 16 ++++++-------- .../mob/living/silicon/robot/syndicate.dm | 22 ++++++++++++++----- code/modules/recycling/disposal.dm | 14 ++++++++---- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index d4e41a824fc..aedbcccd5f9 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -161,12 +161,9 @@ var/disguise = "landmate" var/mob/living/silicon/robot/syndicate/saboteur/user -/obj/item/borg_chameleon/New() - ..() - user.cham_proj = src - /obj/item/borg_chameleon/Destroy() - user.cham_proj = null + if(user) + user.cham_proj = null return ..() /obj/item/borg_chameleon/dropped(mob/user) @@ -178,8 +175,8 @@ disrupt(user) /obj/item/borg_chameleon/attack_self(mob/living/silicon/robot/syndicate/saboteur/user) - if (user && user.cell && user.cell.charge > activationCost) - if (isturf(user.loc)) + if(user && user.cell && user.cell.charge > activationCost) + if(isturf(user.loc)) toggle(user) else to_chat(user, "You can't use [src] while inside something!") @@ -219,8 +216,8 @@ user.filters = null /obj/item/borg_chameleon/process() - if (user) - if (!user.cell || !user.cell.use(activationUpkeep)) + if(user) + if(!user.cell || !user.cell.use(activationUpkeep)) disrupt(user) else return PROCESS_KILL @@ -230,6 +227,7 @@ src.user = user user.base_icon = disguise user.icon_state = disguise + user.cham_proj = src active = TRUE user.update_icons() diff --git a/code/modules/mob/living/silicon/robot/syndicate.dm b/code/modules/mob/living/silicon/robot/syndicate.dm index 13cbed08ec0..48179e8d374 100644 --- a/code/modules/mob/living/silicon/robot/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/syndicate.dm @@ -63,13 +63,18 @@ Your built-in mail tagger will allow you to stealthily traverse the disposal network across the station. \ Your cyborg chameleon projector allows you to assume the appearance of a Nanotrasen engineering cyborg, and undertake covert actions on the station. \ You are able to hijack Nanotrasen cyborgs by emagging their internal components, make sure to flash them first. \ - You are armed with a standard energy sword, use it to ambush key targets if needed.\ - Be aware that taking damage will break your disguise. \ + You are armed with a standard energy sword, use it to ambush key targets if needed. Your pinpointer will let you locate fellow nuclear operatives to regroup.\ + Be aware that physical contact or taking damage will break your disguise. \ Help the operatives secure the disk at all costs!
" /mob/living/silicon/robot/syndicate/saboteur/init() ..() module = new /obj/item/robot_module/syndicate_saboteur(src) + var/obj/item/borg/upgrade/selfrepair/SR = new /obj/item/borg/upgrade/selfrepair(src) + SR.cyborg = src + SR.icon_state = "selfrepair_off" + var/datum/action/A = new /datum/action/item_action/toggle(SR) + A.Grant(src) /mob/living/silicon/robot/syndicate/saboteur/verb/modify_name() set name = "Modify Name" @@ -81,10 +86,15 @@ set name = "Toggle Chameleon Projector" set desc = "Change your appearance to a Nanotrasen cyborg. Costs power to use and maintain." set category = "Saboteur" - if(cham_proj) - cham_proj.attack_self(src) - else - to_chat("Error : No chameleon projector system found.") + if(!cham_proj) + for(var/obj/item/borg_chameleon/C in contents) + cham_proj = C + for(var/obj/item/borg_chameleon/C in module.contents) + cham_proj = C + if(!cham_proj) + to_chat(src, "Error : No chameleon projector system found.") + return + cham_proj.attack_self(src) /mob/living/silicon/robot/syndicate/saboteur/verb/set_mail_tag() set name = "Set Mail Tag" diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index d0007ab7266..ef002caa1ec 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -417,6 +417,9 @@ for(var/mob/living/silicon/robot/drone/D in src) wrapcheck = 1 + for(var/mob/living/silicon/robot/syndicate/saboteur/R in src) + wrapcheck = 1 + for(var/obj/item/smallDelivery/O in src) wrapcheck = 1 @@ -461,7 +464,7 @@ AM.loc = src.loc AM.pipe_eject(0) - if(!istype(AM,/mob/living/silicon/robot/drone)) //Poor drones kept smashing windows and taking system damage being fired out of disposals. ~Z + if(!istype(AM, /mob/living/silicon/robot/drone) && !istype(AM, /mob/living/silicon/robot/syndicate/saboteur)) //Poor drones kept smashing windows and taking system damage being fired out of disposals. ~Z spawn(1) if(AM) AM.throw_at(target, 5, 1) @@ -523,7 +526,7 @@ //Check for any living mobs trigger hasmob. //hasmob effects whether the package goes to cargo or its tagged destination. for(var/mob/living/M in D) - if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone)) + if(M && M.stat != 2 && !istype(M, /mob/living/silicon/robot/drone) && !istype(M, /mob/living/silicon/robot/syndicate/saboteur)) hasmob = 1 //Checks 1 contents level deep. This means that players can be sent through disposals... @@ -531,7 +534,7 @@ for(var/obj/O in D) if(O.contents) for(var/mob/living/M in O.contents) - if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone)) + if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone) && !istype(M, /mob/living/silicon/robot/syndicate/saboteur)) hasmob = 1 // now everything inside the disposal gets put into the holder @@ -553,6 +556,9 @@ if(istype(AM, /mob/living/silicon/robot/drone)) var/mob/living/silicon/robot/drone/drone = AM destinationTag = drone.mail_destination + if(istype(AM, /mob/living/silicon/robot/syndicate/saboteur)) + var/mob/living/silicon/robot/syndicate/saboteur/S = AM + destinationTag = S.mail_destination if(istype(AM, /obj/item/shippingPackage) && !hasmob) var/obj/item/shippingPackage/sp = AM if(sp.sealed) //only sealed packages get delivered to their intended destination @@ -1304,7 +1310,7 @@ for(var/atom/movable/AM in contents) AM.forceMove(loc) AM.pipe_eject(dir) - if(istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z + if(istype(AM,/mob/living/silicon/robot/drone) || istype(AM, /mob/living/silicon/robot/syndicate/saboteur)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z return spawn(5) if(QDELETED(AM)) From f293ef1354ac4b48254895cea60bdc227392181e Mon Sep 17 00:00:00 2001 From: datlo Date: Mon, 7 Jan 2019 19:51:27 +0000 Subject: [PATCH 05/80] fix exploit --- code/modules/antagonists/_common/antag_spawner.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 3ced0d5ceb0..c51201aaf28 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -43,6 +43,7 @@ var/mob/M = pick(borg_candidates) var/client/C = M.client spawn_antag(C, get_turf(src.loc), "syndieborg") + qdel(src) else checking = FALSE to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or refund your teleporter through your uplink.") From 4e10283b00b7a7cf8a564e46e54b74fd721a2e64 Mon Sep 17 00:00:00 2001 From: datlo Date: Mon, 7 Jan 2019 20:20:00 +0000 Subject: [PATCH 06/80] fix indentation dream maker wtf --- code/modules/antagonists/_common/antag_spawner.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index c51201aaf28..c8809ed98bf 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -43,7 +43,7 @@ var/mob/M = pick(borg_candidates) var/client/C = M.client spawn_antag(C, get_turf(src.loc), "syndieborg") - qdel(src) + qdel(src) else checking = FALSE to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or refund your teleporter through your uplink.") From 276064d35c4a101014ff53897209dabe13be24ff Mon Sep 17 00:00:00 2001 From: datlo Date: Tue, 8 Jan 2019 07:57:57 +0000 Subject: [PATCH 07/80] Remove default ID check on ED --- code/modules/mob/living/simple_animal/bot/ed209bot.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 70725deef6a..935fc7da530 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -36,7 +36,7 @@ var/target_lastloc //Loc of target when arrested. var/last_found //There's a delay var/declare_arrests = 1 //When making an arrest, should it notify everyone wearing sechuds? - var/idcheck = 1 //If true, arrest people with no IDs + var/idcheck = 0 //If true, arrest people with no IDs var/weaponscheck = 1 //If true, arrest people for weapons if they don't have access var/check_records = 1 //Does it check security records? var/arrest_type = 0 //If true, don't handcuff From 35f13a850f0a17d9a319c972bc87ab2d9e4bc087 Mon Sep 17 00:00:00 2001 From: datlo Date: Tue, 8 Jan 2019 09:34:41 +0000 Subject: [PATCH 08/80] somebody toucha mah spaghet --- .../objects/items/devices/chameleonproj.dm | 54 ++++++++++--------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index aedbcccd5f9..0b3ea4076a8 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -45,7 +45,7 @@ eject_all() playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) QDEL_NULL(active_dummy) - to_chat(usr, "You deactivate \the [src].") + to_chat(usr, "You deactivate [src].") var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' flick("emppulse",T) @@ -58,7 +58,7 @@ var/obj/effect/dummy/chameleon/C = new/obj/effect/dummy/chameleon(usr.loc) C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, saved_underlays, src) qdel(O) - to_chat(usr, "You activate \the [src].") + to_chat(usr, "You activate [src].") var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' flick("emppulse",T) @@ -159,11 +159,11 @@ var/activationCost = 300 var/activationUpkeep = 50 var/disguise = "landmate" - var/mob/living/silicon/robot/syndicate/saboteur/user + var/mob/living/silicon/robot/syndicate/saboteur/S /obj/item/borg_chameleon/Destroy() - if(user) - user.cham_proj = null + if(S) + S.cham_proj = null return ..() /obj/item/borg_chameleon/dropped(mob/user) @@ -186,45 +186,49 @@ /obj/item/borg_chameleon/proc/toggle(mob/living/silicon/robot/syndicate/saboteur/user) if(active) playsound(src, 'sound/effects/pop.ogg', 100, 1, -6) - to_chat(user, "You deactivate \the [src].") + to_chat(user, "You deactivate [src].") deactivate(user) else - to_chat(user, "You activate \the [src].") + to_chat(user, "You activate [src].") var/start = user.filters.len - var/X,Y,rsq,i,f - for(i=1, i<=7, ++i) + var/X + var/Y + var/rsq + var/i + var/f + for(i in 1 to 7) do - X = 60*rand() - 30 - Y = 60*rand() - 30 - rsq = X*X + Y*Y - while(rsq<100 || rsq>900) - user.filters += filter(type="wave", x=X, y=Y, size=rand()*2.5+0.5, offset=rand()) - for(i=1, i<=7, ++i) + X = 60 * rand() - 30 + Y = 60 * rand() - 30 + rsq = X * X + Y * Y + while(rsq < 100 || rsq > 900) + user.filters += filter(type = "wave", x = X, y = Y, size = rand() * 2.5 + 0.5, offset = rand()) + for(i in 1 to 7) f = user.filters[start+i] - animate(f, offset=f:offset, time=0, loop=3, flags=ANIMATION_PARALLEL) - animate(offset=f:offset-1, time=rand()*20+10) - if (do_after(user, 50, target=user) && user.cell.use(activationCost)) + animate(f, offset = f:offset, time = 0, loop = 3, flags = ANIMATION_PARALLEL) + animate(offset = f:offset - 1, time = rand() * 20 + 10) + if (do_after(user, 50, target = user) && user.cell.use(activationCost)) playsound(src, 'sound/effects/bamf.ogg', 100, 1, -6) to_chat(user, "You are now disguised as a Nanotrasen engineering cyborg.") activate(user) else to_chat(user, "The chameleon field fizzles.") do_sparks(3, FALSE, user) - for(i=1, i<=min(7, user.filters.len), ++i) // removing filters that are animating does nothing, we gotta stop the animations first - f = user.filters[start+i] + for(i in 1 to min(7, user.filters.len)) // removing filters that are animating does nothing, we gotta stop the animations first + f = user.filters[start + i] animate(f) user.filters = null /obj/item/borg_chameleon/process() - if(user) - if(!user.cell || !user.cell.use(activationUpkeep)) - disrupt(user) + if(S) + if(!S.cell || !S.cell.use(activationUpkeep)) + disrupt(S) else return PROCESS_KILL /obj/item/borg_chameleon/proc/activate(mob/living/silicon/robot/syndicate/saboteur/user) processing_objects.Add(src) - src.user = user + S = user user.base_icon = disguise user.icon_state = disguise user.cham_proj = src @@ -233,11 +237,11 @@ /obj/item/borg_chameleon/proc/deactivate(mob/living/silicon/robot/syndicate/saboteur/user) processing_objects.Remove(src) + S = user user.base_icon = initial(user.base_icon) user.icon_state = initial(user.icon_state) active = FALSE user.update_icons() - src.user = user /obj/item/borg_chameleon/proc/disrupt(mob/living/silicon/robot/syndicate/saboteur/user) if(active) From 8d75384efad3491a109cfffd074f3262151d6e84 Mon Sep 17 00:00:00 2001 From: datlo Date: Wed, 9 Jan 2019 08:45:37 +0000 Subject: [PATCH 09/80] Make nuke ops spawn with their pinpointer --- code/game/gamemodes/nuclear/nuclear.dm | 2 +- .../objects/structures/crates_lockers/closets/syndicate.dm | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index c9dcd9f18fb..5d167c37b79 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -266,7 +266,7 @@ proc/issyndicate(mob/living/M as mob) synd_mob.equip_to_slot_or_del(new /obj/item/storage/backpack(synd_mob), slot_back) synd_mob.equip_to_slot_or_del(new /obj/item/gun/projectile/automatic/pistol(synd_mob), slot_belt) synd_mob.equip_to_slot_or_del(new /obj/item/storage/box/survival_syndi(synd_mob.back), slot_in_backpack) - + synd_mob.equip_to_slot_or_del(new /obj/item/pinpointer/nukeop(synd_mob), slot_wear_pda) var/obj/item/radio/uplink/nuclear/U = new /obj/item/radio/uplink/nuclear(synd_mob) U.hidden_uplink.uplink_owner="[synd_mob.key]" U.hidden_uplink.uses = 20 diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index b4b801a3a6b..eb160c8186d 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -47,11 +47,6 @@ new /obj/item/gun/projectile/automatic/shotgun/bulldog(src) new /obj/item/gun/projectile/automatic/shotgun/bulldog(src) new /obj/item/gun/projectile/automatic/shotgun/bulldog(src) - new /obj/item/pinpointer/nukeop(src) - new /obj/item/pinpointer/nukeop(src) - new /obj/item/pinpointer/nukeop(src) - new /obj/item/pinpointer/nukeop(src) - new /obj/item/pinpointer/nukeop(src) new /obj/item/pda/syndicate(src) /obj/structure/closet/syndicate/resources/ From e157970b6dba8bc734dd83714a91f378ac90b670 Mon Sep 17 00:00:00 2001 From: Superhats Date: Thu, 10 Jan 2019 15:15:30 +0100 Subject: [PATCH 10/80] Dionas --- code/modules/mob/living/carbon/human/species/diona.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species/diona.dm b/code/modules/mob/living/carbon/human/species/diona.dm index 6f53be4d3c8..82def809a4b 100644 --- a/code/modules/mob/living/carbon/human/species/diona.dm +++ b/code/modules/mob/living/carbon/human/species/diona.dm @@ -34,6 +34,7 @@ species_traits = list(NO_BREATHE, RADIMMUNE, IS_PLANT, NO_BLOOD, NO_PAIN) clothing_flags = HAS_SOCKS default_hair_colour = "#000000" + has_gender = FALSE dietflags = 0 //Diona regenerate nutrition in light and water, no diet necessary taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE skinned_type = /obj/item/stack/sheet/wood @@ -110,4 +111,4 @@ H.adjustFireLoss(-(light_amount/4)) if(H.nutrition < NUTRITION_LEVEL_STARVING+50) H.take_overall_damage(10,0) - ..() \ No newline at end of file + ..() From ab216026e7bb08fbf8a8389106d7195a3a6c9a31 Mon Sep 17 00:00:00 2001 From: Superhats Date: Thu, 10 Jan 2019 15:16:01 +0100 Subject: [PATCH 11/80] Vox --- code/modules/mob/living/carbon/human/species/vox.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm index 5b498e700f9..b3ac08580aa 100644 --- a/code/modules/mob/living/carbon/human/species/vox.dm +++ b/code/modules/mob/living/carbon/human/species/vox.dm @@ -39,6 +39,7 @@ flesh_color = "#808D11" //Default styles for created mobs. default_hair = "Short Vox Quills" + has_gender = FALSE default_hair_colour = "#614f19" //R: 97, G: 79, B: 25 butt_sprite = "vox" @@ -201,4 +202,4 @@ "is huffing oxygen!") /datum/species/vox/armalis/handle_reagents() //Skip the Vox oxygen reagent toxicity. Armalis are above such things. - return TRUE \ No newline at end of file + return TRUE From 5b6357e384e93cdd8e94cbd715c16e08f11955e8 Mon Sep 17 00:00:00 2001 From: Superhats Date: Thu, 10 Jan 2019 15:16:32 +0100 Subject: [PATCH 12/80] Drask --- code/modules/mob/living/carbon/human/species/drask.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species/drask.dm b/code/modules/mob/living/carbon/human/species/drask.dm index 7914c4e7d70..ca008ce10a8 100644 --- a/code/modules/mob/living/carbon/human/species/drask.dm +++ b/code/modules/mob/living/carbon/human/species/drask.dm @@ -35,6 +35,7 @@ species_traits = list(LIPS, IS_WHITELISTED) clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS + has_gender = FALSE dietflags = DIET_OMNI cold_level_1 = -1 //Default 260 - Lower is better @@ -59,4 +60,4 @@ "metabolic strainer" = /obj/item/organ/internal/liver/drask, "eyes" = /obj/item/organ/internal/eyes/drask, //5 darksight. "brain" = /obj/item/organ/internal/brain/drask - ) \ No newline at end of file + ) From 90ed52132291d2361729d9211beedf8a864ca1d4 Mon Sep 17 00:00:00 2001 From: Superhats Date: Thu, 10 Jan 2019 15:17:55 +0100 Subject: [PATCH 13/80] Grey --- code/modules/mob/living/carbon/human/species/grey.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm index dda521b702a..f17d1d729ca 100644 --- a/code/modules/mob/living/carbon/human/species/grey.dm +++ b/code/modules/mob/living/carbon/human/species/grey.dm @@ -25,6 +25,7 @@ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_BODY_MARKINGS dietflags = DIET_HERB + has_gender = FALSE reagent_tag = PROCESS_ORG blood_color = "#A200FF" @@ -57,4 +58,4 @@ if(R.id == "sacid") H.reagents.del_reagent(R.id) return 0 - return ..() \ No newline at end of file + return ..() From 61e888cd2bd019a921fd4958b76d9b8c6561206a Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 10 Jan 2019 14:40:24 -0800 Subject: [PATCH 14/80] adjusts experimental KA --- code/modules/projectiles/guns/energy/kinetic_accelerator.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 18eb7a6c17e..89acad55c7c 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -142,11 +142,10 @@ /obj/item/gun/energy/kinetic_accelerator/experimental name = "experimental kinetic accelerator" - desc = "A modified, far more dangerous version of the proto-kinetic accelerator, with half the cooldown and twice the modkit space of the standard version." + desc = "A modified version of the proto-kinetic accelerator, with twice the modkit space of the standard version." icon_state = "kineticgun_h" item_state = "kineticgun_h" origin_tech = "combat=5;powerstorage=3;engineering=5" - overheat_time = 8 max_mod_capacity = 200 //Casing From e06b8f39cc1b01cc8830cc7d65339daeaced7aa0 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 10 Jan 2019 14:42:36 -0800 Subject: [PATCH 15/80] adds hand labeller to trader default items --- code/datums/outfits/outfit_admin.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 0f650e2bd0d..5dcf5d0b247 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -708,7 +708,8 @@ id = /obj/item/card/id/supply pda = /obj/item/pda backpack_contents = list( - /obj/item/storage/box/survival = 1 + /obj/item/storage/box/survival = 1, + /obj/item/hand_labeler = 1 ) /datum/outfit/admin/sol_trader/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) From 787aee9655cd331a03265f7fbcf1a499db439fef Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 10 Jan 2019 15:16:59 -0800 Subject: [PATCH 16/80] replace trade objectives with 15 plasma bars & 10,000c --- code/game/gamemodes/objective.dm | 51 ++++--------------- .../game/objects/effects/spawners/lootdrop.dm | 5 +- code/modules/events/traders.dm | 19 +++---- 3 files changed, 18 insertions(+), 57 deletions(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 51fc6ed8030..a50d3efac6a 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -724,51 +724,18 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu if(vox_total_kills > vox_allowed_kills) return 0 return 1 -// Traders -/datum/objective/trade // Yes, I know there's no check_completion. The objectives exist only to tell the traders what to get. -/datum/objective/trade/proc/choose_target(var/station) +// Traders +// These objectives have no check_completion, they exist only to tell Sol Traders what to aim for. + +/datum/objective/trade/proc/choose_target() return -/datum/objective/trade/stock // Stock or spare parts. - var/target_rating = 1 -/datum/objective/trade/stock/choose_target(var/station) - var/itemname - switch(rand(1,8)) - if(1) - target = /obj/item/stock_parts/cell - target_amount = 10 - target_rating = 3 - itemname = "ten high-capacity power cells" - if(2) - target = /obj/item/stock_parts/manipulator - target_amount = 20 - itemname = "twenty micro manipulators" - if(3) - target = /obj/item/stock_parts/matter_bin - target_amount = 20 - itemname = "twenty matter bins" - if(4) - target = /obj/item/stock_parts/micro_laser - target_amount = 15 - itemname = "fifteen micro-lasers" - if(5) - target = /obj/item/stock_parts/capacitor - target_amount = 15 - itemname = "fifteen capacitors" - if(6) - target = /obj/item/stock_parts/subspace/filter - target_amount = 4 - itemname = "four hyperwave filters" - if(7) - target = /obj/item/solar_assembly - target_amount = 10 - itemname = "ten solar panel assemblies" - if(8) - target = /obj/item/flash - target_amount = 6 - itemname = "six flashes" - explanation_text = "We are running low on spare parts. Trade for [itemname]." +/datum/objective/trade/plasma/choose_target() + explanation_text = "Acquire at least 15 sheets of plasma through trade." + +/datum/objective/trade/credits/choose_target() + explanation_text = "Acquire at least 10,000 credits through trade." //wizard diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index ce9becd5a6e..6cd5572782c 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -192,23 +192,20 @@ /obj/item/clothing/under/psyjump = 50 ) - /obj/effect/spawner/lootdrop/trade_sol/minerals name = "2. minerals" lootdoubles = 1 loot = list( // Common stuff you get from mining which isn't already present on the station + // Note that plasma and derived hybrid materials are NOT included in this list because plasma is the trader's objective! /obj/item/stack/sheet/mineral/silver = 50, /obj/item/stack/sheet/mineral/gold = 50, - /obj/item/stack/sheet/mineral/plasma = 50, /obj/item/stack/sheet/mineral/uranium = 50, /obj/item/stack/sheet/mineral/diamond = 50, /obj/item/stack/sheet/mineral/titanium = 50, /obj/item/stack/sheet/plasteel = 50, // Hybrid stuff you could in theory get from mining - /obj/item/stack/sheet/plasmaglass = 50, - /obj/item/stack/sheet/plasmarglass = 50, /obj/item/stack/sheet/titaniumglass = 50, // Rare stuff you can't get from mining diff --git a/code/modules/events/traders.dm b/code/modules/events/traders.dm index 2d198200422..5ca48bfa589 100644 --- a/code/modules/events/traders.dm +++ b/code/modules/events/traders.dm @@ -55,17 +55,14 @@ var/global/list/unused_trade_stations = list("sol") show_objectives(M.mind) /datum/event/traders/proc/forge_trader_objectives() - var/i = 1 - var/max_objectives = pick(2, 2, 2, 2, 3, 3, 3, 4) var/list/objs = list() - var/list/goals = list("stockparts") - while(i<= max_objectives) - var/goal = pick(goals) - var/datum/objective/trade/O - if(goal == "stockparts") - O = new /datum/objective/trade/stock(station) - O.choose_target() - objs += O - i++ + var/datum/objective/trade/plasma/P = new /datum/objective/trade/plasma + P.choose_target() + objs += P + + var/datum/objective/trade/credits/C = new /datum/objective/trade/credits + C.choose_target() + objs += C + return objs From 51279caafdd18137e42114d0aa9d239115a8e807 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 10 Jan 2019 15:19:41 -0800 Subject: [PATCH 17/80] adds healgland, cycler shotgun, enforcers, oxytank --- .../game/objects/effects/spawners/lootdrop.dm | 7 +++++- .../objects/items/weapons/storage/boxes.dm | 22 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 6cd5572782c..769a0e8a296 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -276,6 +276,7 @@ // Surgery /obj/item/scalpel/laser/manager = 100, /obj/item/organ/internal/heart/gland/ventcrawling = 50, + /obj/item/organ/internal/heart/gland/heals = 50, // Genetics Research (should really be under science, but I was stuck for items to put in medical) /obj/item/dnainjector/regenerate = 50, // regeneration @@ -300,15 +301,19 @@ /obj/item/clothing/mask/gas/sechailer/swat = 50, // Ranged weapons + /obj/item/storage/box/enforcer_rubber = 50, + /obj/item/storage/box/enforcer_lethal = 50, /obj/item/gun/projectile/shotgun/automatic/combat = 50, // combat shotgun, between riot and bulldog in robustness. Not illegal, can be obtained from cargo. + /obj/item/gun/projectile/shotgun/automatic/dual_tube = 50, // cycler shotgun, not normally available to crew ) /obj/effect/spawner/lootdrop/trade_sol/eng name = "7. eng gear" - lootcount = 3 loot = list( /obj/item/storage/belt/utility/chief/full = 25, /obj/item/rcd/combat = 25, + /obj/item/tank/emergency_oxygen/double/full = 25, + ) /obj/effect/spawner/lootdrop/trade_sol/largeitem diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index d8d748efb99..516b0fa79c5 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -680,6 +680,28 @@ new /obj/item/clothing/head/syndicatefake(src) new /obj/item/clothing/suit/syndicatefake(src) +/obj/item/storage/box/enforcer_rubber + name = "enforcer pistol kit (rubber)" + desc = "A box marked with pictures of an enforcer pistol, two ammo clips, and the word 'NON-LETHAL'." + icon_state = "box_ert" + +/obj/item/storage/box/enforcer_rubber/New() + ..() + new /obj/item/gun/projectile/automatic/pistol/enforcer(src) // loaded with rubber by default + new /obj/item/ammo_box/magazine/enforcer(src) + new /obj/item/ammo_box/magazine/enforcer(src) + +/obj/item/storage/box/enforcer_lethal + name = "enforcer pistol kit (lethal)" + desc = "A box marked with pictures of an enforcer pistol, two ammo clips, and the word 'LETHAL'." + icon_state = "box_ert" + +/obj/item/storage/box/enforcer_lethal/New() + ..() + new /obj/item/gun/projectile/automatic/pistol/enforcer/lethal(src) + new /obj/item/ammo_box/magazine/enforcer/lethal(src) + new /obj/item/ammo_box/magazine/enforcer/lethal(src) + /obj/item/storage/box/mousetraps name = "box of Pest-B-Gon mousetraps" desc = "WARNING: Keep out of reach of children." From 520d880140ab186ba327b89d2a292fc456f8b757 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 10 Jan 2019 15:20:08 -0800 Subject: [PATCH 18/80] makes 9mm rubber ammo clip say its rubber --- code/modules/projectiles/ammunition/magazines.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 89eab0ca882..f4500c7ce6d 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -221,7 +221,7 @@ multiple_sprites = 1 /obj/item/ammo_box/magazine/enforcer - name = "handgun magazine (9mm)" + name = "handgun magazine (9mm rubber)" icon_state = "enforcer" ammo_type = /obj/item/ammo_casing/rubber9mm max_ammo = 8 @@ -250,6 +250,7 @@ return 0 /obj/item/ammo_box/magazine/enforcer/lethal + name = "handgun magazine (9mm)" ammo_type = /obj/item/ammo_casing/c9mm /obj/item/ammo_box/magazine/wt550m9 From dd2808313e89307d61716d813f73191364299202 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 10 Jan 2019 15:36:12 -0800 Subject: [PATCH 19/80] adds bluespace rpd, removes strange object --- code/game/objects/effects/spawners/lootdrop.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 769a0e8a296..9b94715ad18 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -256,7 +256,6 @@ /obj/item/autoimplanter = 50, // Research / Experimentor - /obj/item/relic = 150, // strange object /obj/item/paper/researchnotes = 150, // papers that give random R&D levels // Xenobio @@ -312,8 +311,8 @@ loot = list( /obj/item/storage/belt/utility/chief/full = 25, /obj/item/rcd/combat = 25, + /obj/item/rpd/bluespace = 25, /obj/item/tank/emergency_oxygen/double/full = 25, - ) /obj/effect/spawner/lootdrop/trade_sol/largeitem From 2549ced1e70878543f2d7cc7fe60cbebe8156996 Mon Sep 17 00:00:00 2001 From: Shadow-Quill <44811257+Shadow-Quill@users.noreply.github.com> Date: Tue, 8 Jan 2019 22:40:57 -0600 Subject: [PATCH 20/80] Removes a ! --- code/modules/pda/cart_apps.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/pda/cart_apps.dm b/code/modules/pda/cart_apps.dm index 56ca42154bd..ffa4d139f70 100644 --- a/code/modules/pda/cart_apps.dm +++ b/code/modules/pda/cart_apps.dm @@ -316,7 +316,7 @@ if(SSshuttle.supply.mode == SHUTTLE_CALL) supplyData["shuttle_moving"] = 1 - if(!is_station_level(SSshuttle.supply.z)) + if(is_station_level(SSshuttle.supply.z)) supplyData["shuttle_loc"] = "station" else supplyData["shuttle_loc"] = "centcom" From e69c74259aa46704ff7e8ea9f53e2ffef87fa222 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 10 Jan 2019 16:01:46 -0800 Subject: [PATCH 21/80] adds BoH/nvmeson/matscanner/thermals, moves speed potion --- code/game/objects/effects/spawners/lootdrop.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 9b94715ad18..068b2ef363e 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -261,7 +261,6 @@ // Xenobio /obj/item/slimepotion/sentience = 50, // Low-value, but we want to encourage getting more players back in the round. /obj/item/slimepotion/transference = 50, - /obj/item/slimepotion/speed = 50, ) /obj/effect/spawner/lootdrop/trade_sol/med @@ -298,6 +297,7 @@ // Utility /obj/item/storage/belt/military/assault = 50, /obj/item/clothing/mask/gas/sechailer/swat = 50, + /obj/item/clothing/glasses/thermal = 50, // see heat-source mobs through walls. Less powerful than already-available xray. // Ranged weapons /obj/item/storage/box/enforcer_rubber = 50, @@ -313,6 +313,10 @@ /obj/item/rcd/combat = 25, /obj/item/rpd/bluespace = 25, /obj/item/tank/emergency_oxygen/double/full = 25, + /obj/item/slimepotion/speed = 25, + /obj/item/storage/backpack/holding = 25, + /obj/item/clothing/glasses/meson/night = 25, // NV mesons + /obj/item/clothing/glasses/material = 25, // shows objects, but not mobs, through walls ) /obj/effect/spawner/lootdrop/trade_sol/largeitem From 62fddd54ad137909b020e71a4fcb988559cce8b4 Mon Sep 17 00:00:00 2001 From: Shadow Date: Thu, 10 Jan 2019 18:01:57 -0600 Subject: [PATCH 22/80] Changes centcom to CentCom and station to Station --- code/modules/pda/cart_apps.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/pda/cart_apps.dm b/code/modules/pda/cart_apps.dm index ffa4d139f70..46e8e1d257c 100644 --- a/code/modules/pda/cart_apps.dm +++ b/code/modules/pda/cart_apps.dm @@ -317,9 +317,9 @@ supplyData["shuttle_moving"] = 1 if(is_station_level(SSshuttle.supply.z)) - supplyData["shuttle_loc"] = "station" + supplyData["shuttle_loc"] = "Station" else - supplyData["shuttle_loc"] = "centcom" + supplyData["shuttle_loc"] = "CentCom" supplyData["shuttle_time"] = "([SSshuttle.supply.timeLeft(600)] Mins)" From 28ae61ee2cfc0144c7a1f466ea8a9b1ad697c9c0 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 10 Jan 2019 17:24:55 -0800 Subject: [PATCH 23/80] +talisman, -midgitSE, +cluster grenades, -goliathhide, +KAmodkit, +bartenderkit, +chefkit, -bananade --- .../game/objects/effects/spawners/lootdrop.dm | 31 ++++++++++++------- .../items/weapons/grenades/clusterbuster.dm | 2 +- .../objects/items/weapons/storage/boxes.dm | 28 +++++++++++++++++ 3 files changed, 49 insertions(+), 12 deletions(-) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 068b2ef363e..057c52a2a4c 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -189,7 +189,9 @@ /obj/item/soap/syndie = 50, /obj/item/lighter/zippo/gonzofist = 50, /obj/item/stack/nanopaste = 50, - /obj/item/clothing/under/psyjump = 50 + /obj/item/clothing/under/psyjump = 50, + /obj/item/immortality_talisman = 50, + /obj/item/grenade/clusterbuster/smoke = 50 ) /obj/effect/spawner/lootdrop/trade_sol/minerals @@ -213,8 +215,7 @@ /obj/item/stack/sheet/mineral/bananium = 50, /obj/item/stack/sheet/wood = 50, /obj/item/stack/sheet/plastic = 50, - /obj/item/stack/sheet/mineral/sandstone = 50, - + /obj/item/stack/sheet/mineral/sandstone = 50 ) /obj/effect/spawner/lootdrop/trade_sol/minerals/New() @@ -241,7 +242,7 @@ /obj/item/gun/projectile/automatic/toy/pistol/enforcer = 50, /obj/item/gun/projectile/shotgun/toy = 50, /obj/item/gun/projectile/shotgun/toy/crossbow = 50, - /obj/item/gun/projectile/shotgun/toy/tommygun = 50, + /obj/item/gun/projectile/shotgun/toy/tommygun = 50 ) @@ -260,7 +261,7 @@ // Xenobio /obj/item/slimepotion/sentience = 50, // Low-value, but we want to encourage getting more players back in the round. - /obj/item/slimepotion/transference = 50, + /obj/item/slimepotion/transference = 50 ) /obj/effect/spawner/lootdrop/trade_sol/med @@ -279,12 +280,11 @@ // Genetics Research (should really be under science, but I was stuck for items to put in medical) /obj/item/dnainjector/regenerate = 50, // regeneration /obj/item/dnainjector/nobreath = 50, - /obj/item/dnainjector/midgit = 50, /obj/item/dnainjector/telemut = 50, // Virology /obj/item/reagent_containers/glass/bottle/regeneration = 50, - /obj/item/reagent_containers/glass/bottle/sensory_restoration = 50, + /obj/item/reagent_containers/glass/bottle/sensory_restoration = 50 ) /obj/effect/spawner/lootdrop/trade_sol/sec @@ -304,6 +304,10 @@ /obj/item/storage/box/enforcer_lethal = 50, /obj/item/gun/projectile/shotgun/automatic/combat = 50, // combat shotgun, between riot and bulldog in robustness. Not illegal, can be obtained from cargo. /obj/item/gun/projectile/shotgun/automatic/dual_tube = 50, // cycler shotgun, not normally available to crew + + // Cluster grenades + /obj/item/grenade/clusterbuster = 50, // cluster flashbang + /obj/item/grenade/clusterbuster/teargas = 50 ) /obj/effect/spawner/lootdrop/trade_sol/eng @@ -317,6 +321,7 @@ /obj/item/storage/backpack/holding = 25, /obj/item/clothing/glasses/meson/night = 25, // NV mesons /obj/item/clothing/glasses/material = 25, // shows objects, but not mobs, through walls + /obj/item/grenade/clusterbuster/metalfoam = 25 // cluster metal foam grenade ) /obj/effect/spawner/lootdrop/trade_sol/largeitem @@ -324,7 +329,7 @@ lootcount = 1 loot = list( /obj/machinery/disco = 20, - /obj/mecha/combat/durand/old = 20, + /obj/mecha/combat/durand/old = 20 ) /obj/effect/spawner/lootdrop/trade_sol/vehicle @@ -353,18 +358,22 @@ // Mining /obj/item/mining_voucher = 100, /obj/item/pickaxe/drill/jackhammer = 100, - /obj/item/stack/sheet/animalhide/goliath_hide = 100, /obj/item/gun/energy/kinetic_accelerator/experimental = 100, + /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs = 100, // Botanist /obj/item/seeds/random/labelled = 100, // Clown - /obj/item/grenade/bananade = 100, + /obj/item/grenade/clusterbuster/honk = 100, /obj/item/bikehorn/golden = 100, + // Bartender + /obj/item/storage/box/bartender_rare_ingredients_kit = 100, - // It would be nice to also have items for other service jobs: Bartender, Mime, Chef, Librarian, Chaplain, etc + // Chef + /obj/item/storage/box/chef_rare_ingredients_kit = 100 + // It would be nice to also have items for other service jobs: Mime, Librarian, Chaplain, etc ) diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm index 46cc71f257d..09822143a34 100644 --- a/code/game/objects/items/weapons/grenades/clusterbuster.dm +++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm @@ -104,7 +104,7 @@ payload = /obj/item/grenade/chem_grenade/cleaner /obj/item/grenade/clusterbuster/teargas - name = "Oignon Grenade" + name = "Oignon Teargas Grenade" payload = /obj/item/grenade/chem_grenade/teargas /obj/item/grenade/clusterbuster/facid diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 516b0fa79c5..1ca94de01dc 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -702,6 +702,34 @@ new /obj/item/ammo_box/magazine/enforcer/lethal(src) new /obj/item/ammo_box/magazine/enforcer/lethal(src) +/obj/item/storage/box/bartender_rare_ingredients_kit + name = "bartender rare reagents kit" + desc = "A box intended for experienced bartenders." + +/obj/item/storage/box/bartender_rare_ingredients_kit/New() + ..() + var/list/reagent_list = list("sacid", "radium", "ether", "methamphetamine", "plasma", "gold", "silver", "capsaicin", "psilocybin") + for(var/reag in reagent_list) + var/obj/item/reagent_containers/glass/bottle/B = new(src) + B.reagents.add_reagent(reag, 30) + B.name = "[reag] bottle" + +/obj/item/storage/box/chef_rare_ingredients_kit + name = "chef rare reagents kit" + desc = "A box intended for experienced chefs." + +/obj/item/storage/box/chef_rare_ingredients_kit/New() + ..() + new /obj/item/reagent_containers/food/condiment/soysauce(src) + new /obj/item/reagent_containers/food/condiment/enzyme(src) + new /obj/item/reagent_containers/food/condiment/pack/hotsauce(src) + new /obj/item/kitchen/knife/butcher(src) + var/list/reagent_list = list("msg", "triple_citrus", "salglu_solution", "nutriment", "gravy", "honey", "vitfro") + for(var/reag in reagent_list) + var/obj/item/reagent_containers/glass/bottle/B = new(src) + B.reagents.add_reagent(reag, 30) + B.name = "[reag] bottle" + /obj/item/storage/box/mousetraps name = "box of Pest-B-Gon mousetraps" desc = "WARNING: Keep out of reach of children." From f77e85810e881bc07844fd3f2a46fb8cdb20775f Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 10 Jan 2019 17:43:56 -0800 Subject: [PATCH 24/80] enable event, but make it fail with msg on red+ alert --- code/modules/events/event_container.dm | 2 +- code/modules/events/traders.dm | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index abe41483bc6..f56f43193b3 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -194,7 +194,7 @@ var/list/event_last_fired = list() new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 5), 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Abductor Visit", /datum/event/abductor, 80, is_one_shot = 1), new /datum/event_meta/alien(EVENT_LEVEL_MAJOR, "Alien Infestation", /datum/event/alien_infestation, 0, list(ASSIGNMENT_SECURITY = 15), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Traders", /datum/event/traders, 0, is_one_shot = 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Traders", /datum/event/traders, 15, is_one_shot = 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Terror Spiders", /datum/event/spider_terror, 0, list(ASSIGNMENT_SECURITY = 15), is_one_shot = 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Slaughter Demon", /datum/event/spawn_slaughter, 15, is_one_shot = 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Floor Cluwne", /datum/event/spawn_floor_cluwne, 15, is_one_shot = 1) diff --git a/code/modules/events/traders.dm b/code/modules/events/traders.dm index 5ca48bfa589..1a76f3d3597 100644 --- a/code/modules/events/traders.dm +++ b/code/modules/events/traders.dm @@ -16,6 +16,10 @@ var/global/list/unused_trade_stations = list("sol") /datum/event/traders/start() if(!station) // If there are no unused stations, just no. return + if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED) + event_announcement.Announce("A trading shuttle from Jupiter Station has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused") + return + var/list/spawnlocs = list() for(var/obj/effect/landmark/landmark in GLOB.landmarks_list) if(landmark.name == "traderstart_[station]") @@ -44,7 +48,9 @@ var/global/list/unused_trade_stations = list("sol") M.mind.objectives += trader_objectives greet_trader(M) success_spawn = 1 - if(!success_spawn) + if(success_spawn) + event_announcement.Announce("A trading shuttle from Jupiter Station has been granted docking permission at [station_name()] arrivals port 4.", "Trader Shuttle Docking Request Accepted") + else unused_trade_stations += station // Return the station to the list of usable stations. /datum/event/traders/proc/greet_trader(var/mob/living/carbon/human/M) From 3cfce8eca5808e4932c9ce43c8f2bb6028041384 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 10 Jan 2019 19:42:30 -0800 Subject: [PATCH 25/80] trader event static weight 180, based on convo with neca --- code/modules/events/event_container.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index f56f43193b3..6cc12faf1b4 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -194,7 +194,7 @@ var/list/event_last_fired = list() new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 5), 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Abductor Visit", /datum/event/abductor, 80, is_one_shot = 1), new /datum/event_meta/alien(EVENT_LEVEL_MAJOR, "Alien Infestation", /datum/event/alien_infestation, 0, list(ASSIGNMENT_SECURITY = 15), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Traders", /datum/event/traders, 15, is_one_shot = 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Traders", /datum/event/traders, 180, is_one_shot = 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Terror Spiders", /datum/event/spider_terror, 0, list(ASSIGNMENT_SECURITY = 15), is_one_shot = 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Slaughter Demon", /datum/event/spawn_slaughter, 15, is_one_shot = 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Floor Cluwne", /datum/event/spawn_floor_cluwne, 15, is_one_shot = 1) From 645e242ea613b0573c607d238c40f580db32245c Mon Sep 17 00:00:00 2001 From: datlo Date: Fri, 11 Jan 2019 19:20:46 +0000 Subject: [PATCH 26/80] Fix disability removing on ERT/Nuke ops/ayy --- code/game/gamemodes/miniantags/abduction/abduction.dm | 2 +- code/game/gamemodes/nuclear/nuclear.dm | 2 +- code/modules/response_team/ert.dm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index 513bdeb4357..e26983454b9 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -123,7 +123,7 @@ S = H.dna.species S.team = team_number H.real_name = team_name + " Agent" - H.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ayys. + H.dna.ResetSE() //No fat/blind/colourblind/epileptic/whatever ayys. H.overeatduration = 0 H.equipOutfit(/datum/outfit/abductor/agent) greet_agent(agent,team_number) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index c9dcd9f18fb..0452e37991e 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -169,7 +169,7 @@ proc/issyndicate(mob/living/M as mob) M.set_species(/datum/species/human, TRUE) M.dna.ready_dna(M) // Quadriplegic Nuke Ops won't be participating in the paralympics M.dna.species.create_organs(M) - M.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ops. + M.dna.ResetSE() //No fat/blind/colourblind/epileptic/whatever ops. M.overeatduration = 0 var/obj/item/organ/external/head/head_organ = M.get_organ("head") diff --git a/code/modules/response_team/ert.dm b/code/modules/response_team/ert.dm index e8c91920cb8..05a331ea27d 100644 --- a/code/modules/response_team/ert.dm +++ b/code/modules/response_team/ert.dm @@ -145,7 +145,7 @@ var/ert_request_answered = FALSE M.set_species(/datum/species/human, TRUE) M.dna.ready_dna(M) - M.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ERT. + M.dna.ResetSE() //No fat/blind/colourblind/epileptic/whatever ERT. M.overeatduration = 0 var/hair_c = pick("#8B4513","#000000","#FF4500","#FFD700") // Brown, black, red, blonde From dc4ae3f0e9edc7d13a954564ac075944f9cdc7f2 Mon Sep 17 00:00:00 2001 From: AzuleUtama <44248086+AzuleUtama@users.noreply.github.com> Date: Fri, 11 Jan 2019 19:45:31 +0000 Subject: [PATCH 27/80] Updated uplink description for chef's sauce --- code/datums/uplink_item.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 03f4f47838e..ca59a03fd35 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -202,7 +202,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) //Chef /datum/uplink_item/jobspecific/specialsauce name = "Chef Excellence's Special Sauce" - desc = "A custom made sauce made from the toxin glands of 1000 space carp, if somebody ingests enough they'll be dead in 3 minutes or less guaranteed." + desc = "A custom sauce made from the highly poisonous fly amanita mushrooms. Anyone who ingests it will take variable toxin damage depending on how long it has been in their system, with a higher dosage taking longer to metabolize." reference = "CESS" item = /obj/item/reagent_containers/food/condiment/syndisauce cost = 2 From aeb1ed6007c19a6babeed842069929a40bac5b67 Mon Sep 17 00:00:00 2001 From: datlo Date: Fri, 11 Jan 2019 20:55:12 +0000 Subject: [PATCH 28/80] make new proc that actually works --- code/game/gamemodes/miniantags/abduction/abduction.dm | 2 +- code/game/gamemodes/nuclear/nuclear.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 8 +++++++- code/modules/response_team/ert.dm | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index e26983454b9..f72b91224d7 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -123,7 +123,7 @@ S = H.dna.species S.team = team_number H.real_name = team_name + " Agent" - H.dna.ResetSE() //No fat/blind/colourblind/epileptic/whatever ayys. + H.cleanSE() //No fat/blind/colourblind/epileptic/whatever ayys. H.overeatduration = 0 H.equipOutfit(/datum/outfit/abductor/agent) greet_agent(agent,team_number) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 0452e37991e..e65b2ebb839 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -169,7 +169,7 @@ proc/issyndicate(mob/living/M as mob) M.set_species(/datum/species/human, TRUE) M.dna.ready_dna(M) // Quadriplegic Nuke Ops won't be participating in the paralympics M.dna.species.create_organs(M) - M.dna.ResetSE() //No fat/blind/colourblind/epileptic/whatever ops. + M.cleanSE() //No fat/blind/colourblind/epileptic/whatever ops. M.overeatduration = 0 var/obj/item/organ/external/head/head_organ = M.get_organ("head") diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f681d9e1158..100eefbf517 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -733,7 +733,7 @@ found_record = 1 if(R.fields["criminal"] == "*Execute*") to_chat(usr, "Unable to modify the sec status of a person with an active Execution order. Use a security computer instead.") - else + else var/rank if(ishuman(usr)) var/mob/living/carbon/human/U = usr @@ -1942,3 +1942,9 @@ Eyes need to have significantly high darksight to shine unless the mob has the X /mob/living/carbon/human/proc/special_post_clone_handling() if(mind && mind.assigned_role == "Cluwne") //HUNKE your suffering never stops makeCluwne() + +/mob/living/carbon/human/proc/cleanSE() //remove all disabilities/powers + for(var/block = 1; block <= DNA_SE_LENGTH; block++) + src.dna.SetSEState(block, FALSE, TRUE) + genemutcheck(src, block, null, MUTCHK_FORCED) + src.dna.UpdateSE() diff --git a/code/modules/response_team/ert.dm b/code/modules/response_team/ert.dm index 05a331ea27d..d9510d28114 100644 --- a/code/modules/response_team/ert.dm +++ b/code/modules/response_team/ert.dm @@ -145,7 +145,7 @@ var/ert_request_answered = FALSE M.set_species(/datum/species/human, TRUE) M.dna.ready_dna(M) - M.dna.ResetSE() //No fat/blind/colourblind/epileptic/whatever ERT. + M.cleanSE() //No fat/blind/colourblind/epileptic/whatever ERT. M.overeatduration = 0 var/hair_c = pick("#8B4513","#000000","#FF4500","#FFD700") // Brown, black, red, blonde From 0399863feaee7c73fd5517f709dff10f972763f0 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 11 Jan 2019 20:27:07 -0500 Subject: [PATCH 29/80] Automatic changelog generation for PR #10637 [ci skip] --- html/changelogs/AutoChangeLog-pr-10637.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10637.yml diff --git a/html/changelogs/AutoChangeLog-pr-10637.yml b/html/changelogs/AutoChangeLog-pr-10637.yml new file mode 100644 index 00000000000..1155c703ac9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10637.yml @@ -0,0 +1,4 @@ +author: "AzuleUtama" +delete-after: True +changes: + - spellcheck: "Chef Excellence's Special Sauce uplink description updated to be more accurate." From 952da3395404affaf20e362c68c6ec961dd8a86d Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 11 Jan 2019 20:27:47 -0500 Subject: [PATCH 30/80] Automatic changelog generation for PR #10631 [ci skip] --- html/changelogs/AutoChangeLog-pr-10631.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10631.yml diff --git a/html/changelogs/AutoChangeLog-pr-10631.yml b/html/changelogs/AutoChangeLog-pr-10631.yml new file mode 100644 index 00000000000..fe3fb8e7400 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10631.yml @@ -0,0 +1,5 @@ +author: "Shadow-Quill" +delete-after: True +changes: + - bugfix: "Fixed the QMs PDA supply app not showing the correct cargo shuttle location." + - tweak: "Changed the capitalization of CentCom and Station in the supply PDA cartridge." From fc07fa4798fc7bba3a2f7b30d9f983519b803732 Mon Sep 17 00:00:00 2001 From: Kyep Date: Fri, 11 Jan 2019 18:21:33 -0800 Subject: [PATCH 31/80] doubles sec/iaa playtime reqs, adds dept tracking --- code/__DEFINES/preferences.dm | 11 ++++++++++- code/game/jobs/job/engineering.dm | 2 +- code/game/jobs/job/medical.dm | 2 +- code/game/jobs/job/science.dm | 2 +- code/game/jobs/job/security.dm | 8 ++++---- code/game/jobs/job/supervisor.dm | 4 ++-- code/game/jobs/jobs.dm | 11 ++++++++++- 7 files changed, 29 insertions(+), 11 deletions(-) diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index f465317db9c..4043f5ddae4 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -40,4 +40,13 @@ #define EXP_TYPE_CREW "Crew" #define EXP_TYPE_SPECIAL "Special" #define EXP_TYPE_GHOST "Ghost" -#define EXP_TYPE_EXEMPT "Exempt" \ No newline at end of file +#define EXP_TYPE_EXEMPT "Exempt" +#define EXP_TYPE_COMMAND "Command" +#define EXP_TYPE_ENGINEERING "Engineering" +#define EXP_TYPE_MEDICAL "Medical" +#define EXP_TYPE_SCIENCE "Science" +#define EXP_TYPE_SUPPLY "Supply" +#define EXP_TYPE_SECURITY "Security" +#define EXP_TYPE_SILICON "Silicon" +#define EXP_TYPE_SERVICE "Service" +#define EXP_TYPE_WHITELIST "Whitelist" \ No newline at end of file diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 8c5f7eb7a56..e2cffabcfd0 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -18,7 +18,7 @@ access_heads, access_construction, access_sec_doors, access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_minisat, access_mechanic, access_mineral_storeroom) minimal_player_age = 21 - exp_requirements = 600 + exp_requirements = 1200 exp_type = EXP_TYPE_CREW outfit = /datum/outfit/job/chief_engineer diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index cfb2de566ce..aaf1a61a2a1 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -16,7 +16,7 @@ access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, access_keycard_auth, access_sec_doors, access_psychiatrist, access_maint_tunnels, access_paramedic, access_mineral_storeroom) minimal_player_age = 21 - exp_requirements = 600 + exp_requirements = 1200 exp_type = EXP_TYPE_CREW outfit = /datum/outfit/job/cmo diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index c5a86a9c6a1..a1711bf4fd8 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -18,7 +18,7 @@ access_research, access_robotics, access_xenobiology, access_ai_upload, access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_minisat, access_maint_tunnels, access_mineral_storeroom, access_network) minimal_player_age = 21 - exp_requirements = 600 + exp_requirements = 1200 exp_type = EXP_TYPE_CREW // All science-y guys get bonuses for maxing out their tech. required_objectives = list( diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index c8726e08305..b425532bf30 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -18,7 +18,7 @@ access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_pilot, access_weapons) minimal_player_age = 21 - exp_requirements = 600 + exp_requirements = 1200 exp_type = EXP_TYPE_CREW disabilities_allowed = 0 outfit = /datum/outfit/job/hos @@ -63,7 +63,7 @@ access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons) minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_weapons) minimal_player_age = 21 - exp_requirements = 300 + exp_requirements = 600 exp_type = EXP_TYPE_CREW outfit = /datum/outfit/job/warden @@ -109,7 +109,7 @@ minimal_access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_weapons) alt_titles = list("Forensic Technician") minimal_player_age = 14 - exp_requirements = 300 + exp_requirements = 600 exp_type = EXP_TYPE_CREW outfit = /datum/outfit/job/detective @@ -166,7 +166,7 @@ access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_morgue, access_weapons) minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_weapons) minimal_player_age = 14 - exp_requirements = 300 + exp_requirements = 600 exp_type = EXP_TYPE_CREW outfit = /datum/outfit/job/officer diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index ce5fbd847bc..57369dd337c 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -13,7 +13,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) access = list() //See get_access() minimal_access = list() //See get_access() minimal_player_age = 30 - exp_requirements = 1200 + exp_requirements = 2400 exp_type = EXP_TYPE_CREW disabilities_allowed = 0 outfit = /datum/outfit/job/captain @@ -68,7 +68,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) req_admin_notify = 1 is_command = 1 minimal_player_age = 21 - exp_requirements = 600 + exp_requirements = 1200 exp_type = EXP_TYPE_CREW access = list(access_security, access_sec_doors, access_brig, access_court, access_forensics_lockers, access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads, diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index fbb8fa9123d..f45f8f5a22b 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -193,5 +193,14 @@ var/global/list/exp_jobsmap = list( EXP_TYPE_CREW = list(titles = command_positions | engineering_positions | medical_positions | science_positions | support_positions | supply_positions | security_positions | civilian_positions | list("AI","Cyborg") | whitelisted_positions), // crew positions EXP_TYPE_SPECIAL = list(), // antags, ERT, etc EXP_TYPE_GHOST = list(), // dead people, observers - EXP_TYPE_EXEMPT = list() // special grandfather setting + EXP_TYPE_EXEMPT = list(), // special grandfather setting + EXP_TYPE_COMMAND = list(titles = command_positions), + EXP_TYPE_ENGINEERING = list(titles = engineering_positions), + EXP_TYPE_MEDICAL = list(titles = medical_positions), + EXP_TYPE_SCIENCE = list(titles = science_positions), + EXP_TYPE_SUPPLY = list(titles = supply_positions), + EXP_TYPE_SECURITY = list(titles = security_positions), + EXP_TYPE_SILICON = list(titles = list("AI","Cyborg")), + EXP_TYPE_SERVICE = list(titles = service_positions), + EXP_TYPE_WHITELIST = list(titles = whitelisted_positions) // karma-locked jobs ) From 77a1589f757ed3f95a60ce5a7f10647bf2e975e1 Mon Sep 17 00:00:00 2001 From: Kyep Date: Fri, 11 Jan 2019 18:32:15 -0800 Subject: [PATCH 32/80] removes %s --- code/game/jobs/job_exp.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index 81fed448594..82c170a1997 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -176,10 +176,7 @@ var/global/list/role_playtime_requirements = list( if(dep == EXP_TYPE_EXEMPT) return_text += "
  • Exempt (all jobs auto-unlocked)
  • " else if(exp_data[EXP_TYPE_LIVING] > 0) - var/my_pc = num2text(round(exp_data[dep]/exp_data[EXP_TYPE_LIVING]*100)) - return_text += "
  • [dep]: [get_exp_format(exp_data[dep])] ([my_pc]%)
  • " - else - return_text += "
  • [dep]: [get_exp_format(exp_data[dep])]
  • " + return_text += "
  • [dep]: [get_exp_format(exp_data[dep])]
  • " if(config.use_exp_restrictions_admin_bypass && check_rights(R_ADMIN, 0, mob)) return_text += "
  • Admin
  • " return_text += "" From 53691a7bb0d1e5e1d3cdbf8bbcc0757bec6cbd9f Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sat, 12 Jan 2019 03:14:19 +0000 Subject: [PATCH 33/80] Automatic changelog compile, [ci skip] --- html/changelog.html | 11 +++++++++++ html/changelogs/.all_changelog.yml | 7 +++++++ html/changelogs/AutoChangeLog-pr-10631.yml | 5 ----- html/changelogs/AutoChangeLog-pr-10637.yml | 4 ---- 4 files changed, 18 insertions(+), 9 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-10631.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10637.yml diff --git a/html/changelog.html b/html/changelog.html index 418de44f23c..73b7de3cbf5 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,17 @@ -->
    +

    12 January 2019

    +

    AzuleUtama updated:

    +
      +
    • Chef Excellence's Special Sauce uplink description updated to be more accurate.
    • +
    +

    Shadow-Quill updated:

    +
      +
    • Fixed the QMs PDA supply app not showing the correct cargo shuttle location.
    • +
    • Changed the capitalization of CentCom and Station in the supply PDA cartridge.
    • +
    +

    10 January 2019

    Aurorablade updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 0788932c38b..4a62d526bfd 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -8644,3 +8644,10 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. Aurorablade: - bugfix: Cap guns was checking for claiber type 'cap' when the ammo was set to caliber typer 'caps'. Fixed. +2019-01-12: + AzuleUtama: + - spellcheck: Chef Excellence's Special Sauce uplink description updated to be more + accurate. + Shadow-Quill: + - bugfix: Fixed the QMs PDA supply app not showing the correct cargo shuttle location. + - tweak: Changed the capitalization of CentCom and Station in the supply PDA cartridge. diff --git a/html/changelogs/AutoChangeLog-pr-10631.yml b/html/changelogs/AutoChangeLog-pr-10631.yml deleted file mode 100644 index fe3fb8e7400..00000000000 --- a/html/changelogs/AutoChangeLog-pr-10631.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Shadow-Quill" -delete-after: True -changes: - - bugfix: "Fixed the QMs PDA supply app not showing the correct cargo shuttle location." - - tweak: "Changed the capitalization of CentCom and Station in the supply PDA cartridge." diff --git a/html/changelogs/AutoChangeLog-pr-10637.yml b/html/changelogs/AutoChangeLog-pr-10637.yml deleted file mode 100644 index 1155c703ac9..00000000000 --- a/html/changelogs/AutoChangeLog-pr-10637.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "AzuleUtama" -delete-after: True -changes: - - spellcheck: "Chef Excellence's Special Sauce uplink description updated to be more accurate." From f3da8e2a1d9399c969a941469c957023e3488753 Mon Sep 17 00:00:00 2001 From: datlo Date: Sat, 12 Jan 2019 07:44:31 +0000 Subject: [PATCH 34/80] remove implied src --- code/modules/mob/living/carbon/human/human.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 100eefbf517..49c3db77341 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1945,6 +1945,6 @@ Eyes need to have significantly high darksight to shine unless the mob has the X /mob/living/carbon/human/proc/cleanSE() //remove all disabilities/powers for(var/block = 1; block <= DNA_SE_LENGTH; block++) - src.dna.SetSEState(block, FALSE, TRUE) + dna.SetSEState(block, FALSE, TRUE) genemutcheck(src, block, null, MUTCHK_FORCED) - src.dna.UpdateSE() + dna.UpdateSE() From 451bf81dedf3cbee844a0dcee858288310c7e453 Mon Sep 17 00:00:00 2001 From: datlo Date: Sat, 12 Jan 2019 07:51:32 +0000 Subject: [PATCH 35/80] spacing --- code/game/objects/items/devices/chameleonproj.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 0b3ea4076a8..27132b75346 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -207,7 +207,7 @@ f = user.filters[start+i] animate(f, offset = f:offset, time = 0, loop = 3, flags = ANIMATION_PARALLEL) animate(offset = f:offset - 1, time = rand() * 20 + 10) - if (do_after(user, 50, target = user) && user.cell.use(activationCost)) + if(do_after(user, 50, target = user) && user.cell.use(activationCost)) playsound(src, 'sound/effects/bamf.ogg', 100, 1, -6) to_chat(user, "You are now disguised as a Nanotrasen engineering cyborg.") activate(user) @@ -246,4 +246,4 @@ /obj/item/borg_chameleon/proc/disrupt(mob/living/silicon/robot/syndicate/saboteur/user) if(active) to_chat(user, "Your chameleon field deactivates.") - deactivate(user) \ No newline at end of file + deactivate(user) From a395f47db1a7c0a4b62fd5692b396ef37067f64c Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sat, 12 Jan 2019 05:44:11 -0500 Subject: [PATCH 36/80] Automatic changelog generation for PR #10636 [ci skip] --- html/changelogs/AutoChangeLog-pr-10636.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10636.yml diff --git a/html/changelogs/AutoChangeLog-pr-10636.yml b/html/changelogs/AutoChangeLog-pr-10636.yml new file mode 100644 index 00000000000..27b4c23bc14 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10636.yml @@ -0,0 +1,4 @@ +author: "datlo" +delete-after: True +changes: + - bugfix: "Nuke ops, ERT, and ayyybductors will now properly lose disabilities on spawn." From 30f60d5cc6b81340fd2f6771ccb608d46aac094d Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sat, 12 Jan 2019 11:36:56 +0000 Subject: [PATCH 37/80] Automatic changelog compile, [ci skip] --- html/changelog.html | 4 ++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-10636.yml | 4 ---- 3 files changed, 7 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-10636.yml diff --git a/html/changelog.html b/html/changelog.html index 73b7de3cbf5..3ecf3f69f96 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -66,6 +66,10 @@
    • Fixed the QMs PDA supply app not showing the correct cargo shuttle location.
    • Changed the capitalization of CentCom and Station in the supply PDA cartridge.
    +

    datlo updated:

    +
      +
    • Nuke ops, ERT, and ayyybductors will now properly lose disabilities on spawn.
    • +

    10 January 2019

    Aurorablade updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 4a62d526bfd..b71114f6720 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -8651,3 +8651,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. Shadow-Quill: - bugfix: Fixed the QMs PDA supply app not showing the correct cargo shuttle location. - tweak: Changed the capitalization of CentCom and Station in the supply PDA cartridge. + datlo: + - bugfix: Nuke ops, ERT, and ayyybductors will now properly lose disabilities on + spawn. diff --git a/html/changelogs/AutoChangeLog-pr-10636.yml b/html/changelogs/AutoChangeLog-pr-10636.yml deleted file mode 100644 index 27b4c23bc14..00000000000 --- a/html/changelogs/AutoChangeLog-pr-10636.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "datlo" -delete-after: True -changes: - - bugfix: "Nuke ops, ERT, and ayyybductors will now properly lose disabilities on spawn." From a39a0df1f9b12949b6de05059637d819fe1ac169 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 12 Jan 2019 15:22:29 -0800 Subject: [PATCH 38/80] limit traders spawned to 2 --- code/modules/events/traders.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/events/traders.dm b/code/modules/events/traders.dm index 1a76f3d3597..2b49bd51bfc 100644 --- a/code/modules/events/traders.dm +++ b/code/modules/events/traders.dm @@ -6,7 +6,7 @@ var/global/list/unused_trade_stations = list("sol") /datum/event/traders var/success_spawn = 0 var/station = null - var/spawn_count = 3 + var/spawn_count = 2 var/list/trader_objectives = list() /datum/event/traders/setup() @@ -39,6 +39,7 @@ var/global/list/unused_trade_stations = list("sol") var/turf/picked_loc = spawnlocs[index] index++ var/mob/C = pick_n_take(candidates) + spawn_count-- if(C) GLOB.respawnable_list -= C.client var/mob/living/carbon/human/M = new /mob/living/carbon/human(picked_loc) From 8b5ec57eb310ec16719a57a3d73a381a0210bbe4 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sat, 12 Jan 2019 19:17:44 -0500 Subject: [PATCH 39/80] Automatic changelog generation for PR #10610 [ci skip] --- html/changelogs/AutoChangeLog-pr-10610.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10610.yml diff --git a/html/changelogs/AutoChangeLog-pr-10610.yml b/html/changelogs/AutoChangeLog-pr-10610.yml new file mode 100644 index 00000000000..f4cf3d9d03a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10610.yml @@ -0,0 +1,5 @@ +author: "datlo" +delete-after: True +changes: + - rscadd: "Nuclear operatives can now select the Saboteur module when picking a cyborg, a modified engineering module designed around stealth and sabotage." + - bugfix: "Fixed an exploit allowing you to get free syndicate cyborgs." From 20de73ea231b9d15293606ec32040fd9f6b655be Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sun, 13 Jan 2019 00:21:35 +0000 Subject: [PATCH 40/80] Automatic changelog compile, [ci skip] --- html/changelog.html | 7 +++++++ html/changelogs/.all_changelog.yml | 5 +++++ html/changelogs/AutoChangeLog-pr-10610.yml | 5 ----- 3 files changed, 12 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-10610.yml diff --git a/html/changelog.html b/html/changelog.html index 3ecf3f69f96..8a976a4aa29 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,13 @@ -->
    +

    13 January 2019

    +

    datlo updated:

    +
      +
    • Nuclear operatives can now select the Saboteur module when picking a cyborg, a modified engineering module designed around stealth and sabotage.
    • +
    • Fixed an exploit allowing you to get free syndicate cyborgs.
    • +
    +

    12 January 2019

    AzuleUtama updated: