!Jx>UR_B*dvSR?-=antXr*Z0{=xUz545V1%J9imG5?GwcIBDp@P^0G6E%yo>wba)%IJwM>wHn-N
z14zVq<=S>TC{n;>Sc$zzsnRTZz1kXVFPud)3`+aI@tJ$+xGgl~C(6o~|7_L0k-O;Q
zKFbHYc5bS>`nc^nac;t;fsrGMz3Z=j2@`;U<}z0t`gz!-Ez-zy%#{Y#q%HP8hkYhX
zj{x8ZRVAvIw9)_`1@lWep)ac5ZIoDJHF|?nP0T^nqE1@7Er`vM2e^?=QDLH~!hL?I
z{cYQ`3-T%5SH_--jn&XJ*HQ*9iM1EUS(ESyhV(?KS9;Tj2lw3-MpUadushle6uNqf
zdP}dJVkS@`Lcv6Wx8PFh_QTDK-R%HfJ}@rc3^*9|?2f~}Z)cU)95!a@|%ms(gGm!vkc$OkL(z;7$t*8Z|_6!?h>dM{YIc}TQ%V6UP4
z_d3^Z@4}jqaiEj+qFS~8y2^qZ9$NP42f&K#HW6m3n|N;c&H{@yd_KiQofU*#$@^33
zX=Be9vy{r3L}kKwlLw3^=a<=Bo&MzR+MjJDtyJA0p@nM4!V?j8G&a$Qv~)E`wNwef
ziZN-;n_Sb?EI*bIM#?-=-du(iyA10cEJhrtU2aE7N3_|5+JpQQMhBVz=@LmVSWO#>
z>D2o-IMBE?d>S_0*)L1Br)axhy9>l%TWHjyA_{{d%WI0NlXPOb$o)ZVz+@R?JnUtA
z@mr|84!(uMth4K;J7CiL7jLdg-JVvQcIInZ&E$I|i~E
zu>ND3l824wW{1N_Q@fCb!*t4}pnkJCIBTqZ1Ln)KXG7rp)J#uQ10v7{B(+X~?jhPt
z4N7THGE&N^TE&p!226yCnJ14Tnq%)LV>&2ICj)xQUCAkVbYA$-rY+d`3ugj{-@f}<
zT=6jD1DW`>GR}?kc0S-d510HLybmAhDuWS&3l?Bp?xNp+rZA@O3LhD{C>zJQxqfL=
z&!$5_IpN^rkt9%(K7${X1y5KbREpUZAQ3Nw2VhV~veD-xuHM=wnqDUrh^vU0UDJ
zK%mk9MU!voo076%f-uE@^|B5fm5807;(@h%t*X_YPoQ97c51!_E%*iRt5XpRJ=p2k
z97LStew+GSRJHQ3F4KkvtaMDgb&!Bsgw^Nf&wzw65JR)<$plA8=~b~BC2NM-_*Bgr
z87_w2uxG;pwHi~&D4-9f1!?7;fK*Qf1R<^#u*SxCL3pGy`1{x~!1WbT3M+*r5kD+T
zG=>6pvWFe0Qvz=d-wa=h7{PO3zGA_dv`AdKT{YK+-Bz3f?ljpbRR=rgEq<1ERm^e5
z3(0voWb<5TAgWv8iPjy3_97`A>7H<3iIq2nbq2J3Vw(`ND11n;8rJX2(%&87y
zFWAp)V9cyun)?EP-$(Q@$kN*S`95#QN{QP0`bIYa9q+q$R
z`PT72fcf4HU~Sp*Fh!xe#4OmgahlC(34earjER;fy}h9OOceChjK`u78M9uVtiCp}tp@mx
z4~>G6S*#|uj^O#KCZZ~d(eoLj-5dJ5&l+@q8oSPhJ})>gf=K1f%M8SixC2GnF(`6<
zIxbhE)E#ZL-uy`HZb#_^T4h>(wwp#>s^ip0(lMH9$J8lW4I*GRa31ZRN%EZC9E(5g
z0BsmFesy|~Ze?tqwuCKKfRuap9L^v;#*3PtepcQ1ap9Ot0B6X5KkTyMcUFniV*kw9
ztZ@f7Zp-)vot73%At`sa`E})F40w1{@BOEE%4c^V}(
zhX;aPBY^z!VzA%`q+Pkikgo=qFRGR|a-(3#1jN1vOyv=&Szjal;^9~4Y*4}#unWh#
zyOH_E3h0J+G^#4I(!u6a1i4Cla?q-P-WWJhAwyCaO^sRS%}_-po5|>C*~(X!Dr2jM
z-7peYCo^K2@#YhupW>;9lDfhte7A>&-Vk?4={Xqdfa{iRK61O+lnXX!5RMf}tRd?A
z0~$-dX*8n_BeqyYKR=96e}zxEl7Nl>Mai-rZajCd;c?`s&4-ArAO4A{9Dwf$x7nEK
zQwRY5ig7tGZp0eKP@G2WM;IeMu(D$!tnsk>T-D(S<11rk{k-hZ7Ua^ldxw7?Inh-3
z$K%q0w(B>*N&I1or4fmVof5_E2NBizfqT5YGI}t
z5Fm=~V8sNj)fDZJ4P&Bm5$GgZVJeD+H;qBWto%;38F1`ziHC_UR{NzgSp&P(zz24@
zm|`pM^vayT9e?fQv9da9w(Y$H6Hl#msXNmeQscPKCQgI01L#a1sF+zcXa#x*nB=`+F<5rWS7hrJGl;gH@cYo
z$>4E){`w<7>CU`f@;>Bm;djSWJ@5IG-wb#k`BXO}Y2TwWqX0ez6z`X9hM`&68XMwk
zoi74H>>Fzx$2a*E+bXYwjP00{U?P<8d_4i9V9564xj_v;+oh+f5a1KVWP@a~XQxi@
zwpI({V5n9Fz*rHP@Hz
z>_SJaQ*4bD^b%~ow$-pqJ;l1vGxagulIWh28Twm6Z>j^HMix$ehrKQ=st($AFUaVP
zSs<&|RfRgcVe5C_EZZ`{i_V#)@p(A$%B@Rw%C`qno(0Xl#T#_|Y2goZp61**xFPxL
z)W0BEU>;Hu2?OO}qYk&)7`eC9FQxryr9&a1okLy;<4x$vHx8XhQ?Lt;T7}wz8m0Q0
z76VGJW$tD`i|UgkQY(Z`(iS^+KYS^Von#p>W^1P2`v8Viv#|OocO9v*A#$QGV#>+I
zZs#h~Jy<{@ODT^L7!^MIkCCZ48}-YUrdTQJYGh3oB6f!uWEd3X9Dx+68l4XO*&Vy7*=^5?e61)HF=hIYZai~a6TgMh-{FXTQpEOeZ`_!z+`<{;Z$Ais3Spv1N7rJ6e@
z?NhLrv%p9jH0TncgK|Gr&c{1N@5$~=o1#qbNt|qoU#7e@;YL}RmI}1;#<`TnR=JSL
zZZt&JaexC@nxC^7y}#+1V~7FQ;4ljOh|I7ARDWUM_QWHW?n;l`HB1=db5y-uD-Krpa~eU#bCM#y8M
z$OttscJ&T$^}7#?do_Wp;y^oP^Jb)r=l6(2`J`I*$4@V=E!ntwu<1f=I;a7
zZtc6@`qR5d>&nkk#{N(+?UV^{!|E;w>QTX@1IymJ6~B{qC|lIKqD}U!DuqQPxB(a@
z3j1LKAz$eH0uZT(XRPE}1*DVdc7tJ!ViL1%(CS^iXY3e)?L;rcSWmOvvQaZM>OEHq
zf#uG49*>6)lmrpw%WN4AQb3V1m{JO8QP!Q;mDZ@!?N`jGZU*Yu?QVpHmPP~GwnkUG
zl!-dMu3ydLXAilL$A}ocEB1t{s$>B_>zo}!FpV>JtR2YXYr4`Y(vuhV9b3US<2yN=
z+iKU%z)J})UJSz%i|I4QP%```iU-Ke#R?BlxtT{N}AAHv`{2%D-awedDsKX@YaMYu|;;
z^dZ6?RWVtXK%JuwUMb3)#v->7T!UISppxc>goZACM+RHiE@)ASDx6}3My)Z3{>WRO
z7ez!+7(QVXob0)*Wot}~kA%SnEe3#b0a&>NX=QbKUv4}=Qw%_#OVSa*2K{7-#33BH
zWhwPEM2V#xX6_~PFu=$^iG^jLdqYU>^o^Iuz!vHl;67Fk{CWGT7tfHQ^cWmipsr?#&&_a~)ev8py_#
zk0*m}dVMRwc2;xket@~`#n6piu}*3q>*}@-70WKSY%SCI#_)?y-BG5~{TMFN09?p&
z5F=!v=Q0ampAqD)R)UlU1!UExh9?Z6R9Y|d3fe+VWWgfr)$(&dX(`^B0xD(RbrzZJxBsrfWWm3vjs-G`q5b9BunV4
zB(ed61PflXQ2CKkkEw=}z?ex--)iKQpESdG2MI<>lUi@X&%sv(hJc0^HIJ
zfw*$)pjla!p~1x3!3h}IYenJd30mn>Fcdme~-BjJvsNs=AZyz$)i)y
z+Jsq@xXy|#>((qPGWl@5>Puvxjmi~y${ON43e;*BEvzQYrx=He-@JS?yyafgX5#er
zt_hhFo$^obFgsDK_i(pjw>BbkBw>ZEDGOrl`SPJtEh-*IXU51^!rZ_4lIbY|iR`3)
z5L0F-@ILi|m$o5hxHITN0nzzLEbUb0160QZP0QU3$`}EI%_1o)y@)PMeKbH?zrjLP
z!H@DJJZyFY+?D}`l!&%4it@E;2jvlO{|_5egiM8)^Bg71M!yri(zQt?sw8VsXC9`X!W;{SOD`@!Lp{I+}PyK
zMs+${o5xOO3dz8zmQ&hwb`nPW1u`a-X1b==d%Du+xC^B93pl8X{b>o&OSBr4IExao
zXTD&-jN${@y(v=3<)isg<|ldffQbl7mzdxcsFTrkzOOXwtuN`0uPc)xP;P%kwKoNWCgc#Hzzve-VUu-DS>rl;JduVkhY
z=$oyWsqWE11o-}If1QmV0LCsRK`KT+sTLjh#!P?I>95W7?*i@DuRAgSY3fHWe88&j
z;_2tURfRhrLZ=phjqtGj?{J4RC_48cM9huq$4+~9IYFBP@WEbt3m|3?cx_JXHdse7
zbTwMgP}AV1HPG|}A}aMwjT^N0(&EXk;TpoTID!!Sx@>DlZi^=ciUc{HqtO{Ft>p*M
zY@b$7_(1_rb%Uh^jQd|Z$_MmG<$PW`++t&|MUV^c&Ml3}9lP4+qeO}boi+SHwb@ut
zZgS6chO}WYCSSi6G3x?F)RnJ!VH@_|3CVtLpv2rWW|pT*i>S
z(iMlM;nz5L3X-<$aX4
zQ{IP_an2eKL)WyCmQ^8ZdKs+pN0(_q*TB|q64#BM6dY#m2|55Cz*!GKp@pksE}
z-|yv9vIhcEC=DDY&aMq`X+)SdV~}QK1w$|80&qor~SfzjoQ~4M_to>zPX%eDnz3;G^n{L2*}#_Kh7mESHyUC{^jp
zW#ZPdY-&64;_&dQ>W~l%acnXf!B?y2cD8x5!zg5ycmWR<-;{vTsQO)c0~d7lFGE4%
zYMK%uwIu>3d7k5<-w&^#5AQi~c($w^ezrmdQFA=(p0b)K(8GKxmI8<2J@UwWN{K21
zu9SLg#yw6jEEmN8(H`Virq3b(iV?h?)L<(X8r?
zH%J;}<+>eA0&3(9Gavl1aPg7ogFpNJvKW5Zck{~s)bbW`jR_SsD!yOg@Ac=3hDpyl
za$FKnr5T(*kH-eMCfEZ)VBSx?_VXi9=QAct>vd47d5aq>y*f9tb%x+nyf
zB$S7a!PckY76YlPE^cslR9{(kG`)yh65u%%DkP%Jg9~dLyA3G85p-~1`igOR5JxDo
zPQ5`RYf=yC@#8cuN@RiA#p)^C%=Er$XbnOHD-Y_vFoU4Iwc?-(Pk4FiwP?jJ%a(>gW
z9rR?q(kWJEAgfE=3K*p*C#N^O^^SK%0ICRaZhFN&Mt11Q`Rg{K^O!-A(+EF|JZ^{k
zNC^26;64A;OEM$>tC-|>lQet@d_c|w+r*n@eFZ;Xv4O=Tjw9p|7Az@Yk5J)%^AWQr
zu)%SJej;Y<{#%`$k1p8!HpTM75A1zTiFE@j|B9UKn=tw0+=Ii%=Knb+
zvY36fzgOQL+4eIg>
zjHLDeGn=K3&e6gEvq=67m`QnVQJ~+6|9pxDDm^_(U5hPFq8Zu@&N2BD-gzrw<}MGe
z-IHTyVeYo`hCF?onc(r7w=-K;z>h~im6bpI#^>UV-$NcsqA6i}5+CI&+%);V97RS_I@^-$nG)fJ
z&bP)V0)OM6hWu?-ExFO0$VylH)TJv76$Y;SwDg|L`RgH9tg-5-+#7xs1cC-aGuSOy
zkdQ>EtWZCOs*zf#NTw5l4lL$t0;aRrP>p+X>Z~$9#9v)RlEZA*C5A|Z;(|+20xyEi
zCPJ#B9`>Tk=Eb~uUa`s#^wKy)EG`CnH$3b4L+N@yls{$!JZYW$OYTbQOYV&C
za*w~H{s>JGeeOzZkFt2w~MJ4mga2Fbj$l#@P4n?acsW&xwwu
zsWocaRif6eW=*@M)K@M6a{!;;HQL6d7>4u79SMP*o(=l4>a3b41V{IB`vBZuZU&)Ao>`0ukfopq_IwNIA#%!^%e
z=EX+44bLY2uuX0FOqGWW=H+mh08-nz?>_t>XojPsI>|MxE)Is>VKJZ;lpn27BS~f^
zU)BqNH-*so67t{bb%5AmV>=v}7fbE&1QhN4NG9U66>PDb1OzK%&&DF5eu}l%L&LyH
zGbSz;Krde+%Xr85c;K2P9}Kyq8vqC7_SI@yl`Qy)jV!W$7ojMtDMih$+dEu;c&nP8
ziGpN6M%dAc1(^cU)?1AIHbqD2tK%JO*JLMZdiq<&*dDC{3{Ir?ugSi4z`ekql?ZT9
zO&T>$?I9ISNNp!rmKhAL9oZ&zdVlX~HHj)NzRL0%+A1v;{a*^HR_nncl;(c5oRVK>#cfwQr&qQAhJBmRv0T8`_Ob})I
za(&W-npjD$!YV4C2iF9=Q=;kVXgzgjJgig?&C>IBHWp7lH%J;HH+fPz7!FpVa0%$+
z$x}%6{8MUGhsL^2tvXn;M1(~92fvK%JesD?;>qQdz!c`{@dS@cvO4KO#w}5d2edjG
z#*JZQ1;)A1S#imTuswwqJ7fk@J;34BK#P-l;d34ucTR_T
z_Frhn+O0kPducj_
zrw_5E!ulqW6p@zu%OvFM=!&@jXIZKZeS^OV_KO7#@Sz@y8-|LM@I
z4ZXcSzh^mX08-*}JzlYog^Nyvjh;(fFOXY4I-m2jAT-Y=ox3ng;R%Oe#V`=aC1Dc*
zKEMqcFd(*qj=`4EMpiBt)2j^@m@=2ABx%YFZBgy`fE^g+S+DlQMbw=zY|6Xc4BB@p
zvOptu;Q@Uk*wS-5mD-s47P;4O`_0WcP=#S@i>tCVXnJgCL_?B9Bm@~K=u++o=vZ9}
zFuYlW;2VDDeUnnMdJU#&ILTEkmHy`0|MAe&){zhRrjz`y2uE0TrBFO~?7qga1Qj3v
z6r+oZ+Xo
zO-Q9jAuzDz-oY58^7YRgGQ~R_U99uiRm(~z%W!^NA_i!QrXu+9wZ3^8PAH%>)oQZy
z)!OsX9M&g}synnP&OJ2*FG5{?lxib&2FQf8BjU-2${TtVRbKN7EUGSgFTVr_f+xS9bbMHtE8_kLF>rP7o-!
zE*6*&Y5gSU(8TYBt5;5A#emD>gZ*YskGK2-7OmTJ!A%c?3(qIwJ8du`BLA3ak8|+j
zzY=B~+U7j8;_ijjiz;V-CoQwHc^27M_q*%PkyjBf2Ba$Uj4Ip
zxoV#y{jqJa=Z#^B>*N-Me;qC_sswYs;a=21%T`GRKGeWKF+YVo|Cp#FS{Sxy)q!BB
z_z6HlRqMK}NeG3)Td4|AFExZIxU$9&-8dv_A!#u3AOSf-Hb>B11{;U#h-BSHw#t~r
zK0C*&^ewAOjYK#x(LW6Re>SM(Bn;M3ZHT&61K;ijj~Z&o7O*{qzhSZ@pi&A(
zTwHbkBvK49DM;l>bprtyQAE=UaI70lGg6I2Nt&1pSOC#zSf4-yFYyVi$LQC6&T|up
z0_Iu*Ip=Y3fcaXnzyujMv2qc_u)NzVxEg7mSR(X6_WoO3JDT9mW~9(Q4E$S6_1jy3
z`^LO72$zf2(CZ|kOuAvh2U0<)NU{ra+JJ955w-1t^ks$-3#vO%=Hds696re_{jTCl
z@H7ey+>CND=7-!ye8NH79biwC`&oERt2VM-p)uCz?taTrfT^rDh$>&&T!hG~L^@E9^g8rH?3
zCk-ctQD+Tt%jm0aSm-sVYE|r3nS1R7FTR@^)7k!OquHuy7rup6gzsAB0(uH6ciytZ
z6>@yXfH^6F+GvIY-oiBiK1fH2A*0Dk2##nvy)4?*_%%3a3Nkl(6N|m@Lm$<_DnYZ4
zG1g?9Shdl51oJdaw@`&HFaqP26D?@=NfL0^fT*_Ack$!_H_PSA$2R&sYwbSl!W~Lm
zurT^}YnU+$R)-4BKf^i?c;4NMV#V^#l7MoxLodKU&=V3*RvQ9IgF4(MNdgsXP^Lqn
z@LF
zE!YP)vw%MgJF+SkyT`Evnt(u2SA|!{_y-knKvcpfL9y_1m;@;O^rveLmyO#(a<2K!MpI$fo~B;
zz?a*~IP2t5pVxOF>$eASGy7Gc54o{GFF5U`pzJl}=Y4hu*A-+1PQV`#z&wNHtBgjW
z8eTr`0P-+E1}Ho|Vsp!s3~oF-8E2fl+YbB^e)sP7{IdSws@LW7mK@u4c5nE?uiK}&
z7gzh=ontq(W!vd#zrr!1Ki0~UqqnxKr}TEMjkVrw5sjM+0ib1u
z`9Ng(@PjGPK!Xg9_0`|(y&QIV71}A}0tDqL^4y{c6&wgS0Sua$$f>EmlC5aKXhM!c
zs2!+Bfm~)LXsUJq42xV791XB!#Aj~ZP&?u7?9zm5YEoCagQ|1ufPJkh{A62ThxCRp`AAQCXP+u$-;?qOYw!caF;XYR4w4DiOfNG~eT|z<_C%
zUSa~XLk}J)_hBqqGN^nQWaSaCast5LM^Zhtg0A>?AB(=+Ach~jM5j&s4A3JSLiyh34c%OWH
zGT@CFDs6Z;cF3(E9QMk_
zESKv1MaP(OVs-+38iFMdFJITUIn*ALhUm*wO6m1Pejc%Zn@g%J$ZSz!JeQiq#^bNH
z%8%7rPy`Ptd^B@xPn$;=Ggt|(*;aZZIW{RFOe3LdwMfPx*%m-KBuX0JRCoN~Jkxd6
zX9s4z?pShh-nii=_wW&-#ZSPBEn=P7s~`U#3^Hr-4gU`YfqPLhZUwm?)4${X{`WiS+pX^giyR~G{NBH7a8&c;)FSJDuDSeoKm5P@caux(7NL96
zF{CQ*px-Ws-E*l+8XmfP72@RZPgKE>^$`w2#mBUyBwGt~=B4+Z3$kHp+p&(%vY%yb
zf?(L0a^regdl{b5+N_3+QplSjjiyMtZrq4-Qs717`WtZ}60R|oTHY1B&_L}2-qzEF
zLTY!VmYpEY2Sk(^>$kB{N;WRoYkW2-3t?FvuUL&>bdOmH)UzA3ziv>-_oqiQOQT-|
zovrneBNUr$7Eax!zHZ8kivKrx
z+LGUKk!>F(}lsZ>>ot#$Bav6>P>cu?(L#WFO7Go%TEN{|%%pT+La
z6_muA+ViE3t(z1Uj1WXuD93LhW4)k`!UqlR-)FI>cjkg9Ain~fvNzUi-J1$fd@oZr
zJJ865+^x=X*7@7ua(ylmOod1GWrm8|RVYhMBrykT8R+||)v?1Hs){~0L)!^$Z9;?4
zN7Al#_I2KSqh`a%Y`!s@4-EBK3JEFd5D2ziqy@&fPZh<^@yVdq4M2
z0Vpx{{Kfz^_f6nsjQ4A@=`QDDzEyPSzD!#poBJJq4)FZ5sI9=E)Fe54ZOricKPD^N~V
zFRXyPeT-YK^SUjXTs%C&-GH)Nou8a*^vYzR2e&OOtd91)6lE0LjVw
zR6x;t__K5kV%Y*b_~I_=AvT@U~U>d*VrlUXHy_#b)7Ilt-4o89h|fp=Bc*Z)W~Q5%ur&=TrvV(9Ae!oL?KRi(5-7>w
zs1r+*_EoFZCe4oXHmZSAR)0&wBxulDlWX!W*p8vnZDh41nb}f-z!?q2^H@xcpaSw}
zM%aU6YWGfUPNKA4O=9=q(wm%3=lT+HITBu;YMEZal~H$j0bt7^M;A~j%{`m|rClPu
zs0%QgX|~xI!34|ir9L*DlAfyJ9%;tRZC<(h7#c|I1anFR0Zd!ryCq#JDtA*mlz7N2
zA7KEG^%l|+R-+igBrJXB$=Qf~_0Jb9TQSt5-RM!i=I5Xj+V%4zgZ^8Wp!zzvx~zF9
zC*;hsD#`|iBhGL#HL(NmAXdpW2F-{l>cj@u_gSZ5u?Vb9R;lp=Co)g?l<}}uNVQKv
zFC{UP6bb}RwQLnZn88udZ2~K;*J@<~$)HLG9_jid_(2l7%tecjaAL7lI=&yvEC869
zGP83^lU#ghAwHXIZmbK*^5;*$CPVIo*gZ5MvRPDLkpXfCaVJVr8Bdyun4lXqG)~8>
z?sr&7G@LAHn~a7M^c5ERpZ991em0_I5{FIxy*3d484d&b3_LiE%zm4L(9-xQvS?l^
zjEe{C=E(g=x+a>h|GN2((C4h{z>lctdIi_60cBB;d~nD=GCaPNhMSBENC7Nx=V!xJ
z_@Fkw!P>DEwWhEGI4cT!gGnR|F|F>jrohukSLszWlimIl1(c^vH#~7q9b7Nq%-3Bo
z&`k`7(*>CsPt|1}(CnbXo>d9WV>s-dmB4nTEHAQ2t-QA>dIMWauVNLX0dY7ODKbWiuJbUfP2IvkE1AUsfZFRs{M;49K4KoECpB8H)#9G?UKeb}z`N
zFv1rMVjz7)c=@FZMpYV`c|A1f`d+G#Du8&{d6dad1W|h*PbOIC%iK(r_8yz!gsr8!HK6&R-!0c39RNt
zK4=`8^;_)u+jdv$ahc0je16e9U>EjgQ_gHB?2k>HQHE#ozO*mCPakGY@B+N0g_EDV
z?-m4P@svakR64~Utz=9yYZ*JnRG{6V>F81++q-=~d
z|4al2<|yHm@#FAdeArzZe3+Q`ju|7BBhk!TwK#18y`j>e2Q0P4hjL;UXhY5&u}T1O
zF4@=w%fXTJ4P5hN>lm`gd!m4%(YO68Y8a0Ee47*1ES1iMT$S?Ia}t(eSV?!s5_9t~
zmfy_pK5JZ9XBHZ5HDjs`;(GY{!Ed+r&5Nc#dAGJ{K6v|Mg+;+%*PJUqD#S#@@!wEq2q$BU!Qw_5&(kj;Uf
zlseW3?G5W*SA^6?GKuE^cesbAP{NQ{Grdn!lY1&nAgmY{z#;?T*SR5xbFsab0O|*B
zoZjK3Ck0y{;yo}$F(MaXcUkmO+R1l|`!T+GoKbb+*u&ohe83x>
zIdDb@K5MN%96a4ePi(wr6J5`*1l_T=Tpp#WB2||E;HQ~=ruaURMN(zLE+R~M8hHSU
z+_0`e^Z;TKc}O`GtC9Hnbb}2@-bh+XMU~*XV|bHP*vyvm^_58yn|zzj
zRTxwtc2~&}n(%t1(5B{bNM&BcnslNZQAB6Zv0f19P2e-4s{&Vt{t>vM@#`sX*}{E0
zm`a4qjng3W&Tq;QWb-t4Lve4;l@g+fnK*($MQ;JEfK?cfBS|pO2a`c54m&8(l|qv=
zIamj2iVM3?d_ueO)=5tTK%l9yQ4Y?J4)?w0pK-rnYAS*^Z{W@Lq#abVABkd4ZCw@%
z*?Gn$ihsa#xL#vk-OobckaJ-30NWQXq8_PKxiFkaic<8}Em`VI=Z=aFwxVc>xd^3P
zU^&^@_G3Eg3z${u2|mziL(zrF4qw5?xi?@4TNQk%R5)U-z+dht-o5XcmWe)Q=5m8x
zD70TMF)H{)x<967c8n57!%vOfes?ZYfLQ|0;Vkf0sU+_{FMP@oZ+Aqa!-$`2)x^@l
z`oTe8%y7~<&;$w|FkyR1xEyM>W+4WAF9!>_pYW{e#u7f=e1trAS@@(xg^S8y8hQdN
z$H?}-e2om3ZYv|1&NMDQJ|2JM4BCCW=-s>e;G;G5@aeu~?<0$y9|VBw;ry@mU9sEd
z?M>3on#}W*Zk1L_1$IeZ!KUCyC`54Rba$>S2*(HAJbZ40TvJngqIw=Kt=*K0%vvfN
z)ndX+lWyH;a~2JYhJdI%)wgNBW?eKyi2%_uz0SjC|H+@RH3*oOKgPsW&4%U8*Jz<|
zrot%dh?G1Q%6%ww!%V+$%3byij@5z$?9tp32`N*Y)ckox&o
zk22QM#22~H(3aEk;QP%4HMgqnr`F?+KLX*(v)#d085)n99!0^$aP)v*4ER`9`WW*#
znQg_KvQ$d$)EZ}J!ObJI9IF$gNP~=C
zRLW~H!HWwTtNyiyoEi*KM!gasS^>Mg<9(IhqHa`(N}J^%6(c0SU}02R$60PlR*5>_
z4%hJM^H&Sdp)BpHAoZY(vIqw9U~
zr+b%DHh@3*`t;;Oa6E1deFoNGCMAuCH7c0Yq}{#0_bi*z%5}eg^8bJH0SiP9&x?f=
z)8)@4+7Y%O`woMfX1jZHx7fOfjYB85SbPZ(QKc@UiUzSwXahAlk4cXiL2dMYYQy&&
zgx}tz(2a6J@zCE$ow(6QGU8_JLgf-w(Bj=bMAQQP01GyLA*!QC+LUU;1)gl|IW_fI
zI1-C~o@MUVHwg5^f`aKj33O|GE>&zu+^eA^6K`Fx#MXwlDY$@d(s+E<3qmo;;owi$
zPjalCX?2WeG9Z9I5kSU*3l2dq*POFFcH`a`_Qz!&)j6qFtFomI%XdCFJOl6l#1Aa$CbfyIFUjWCX@h}CIjc@_g`RJc=U4baLKOzTs051eY}9%~UlLNk
zmhap8(sQ@jG)rboiZc_-g-LqxS~{eH<~30<_)KHQS|Qy)l}k(V=@qOb$Mt6&N&yS{
zFltesD8_QXdEn{TaK215j#i1|39avFHKr>`k9u%pc*qS@VaL<>?Hqs#qj^AvoifPl
z9m-3S{|~g-1P1`GB`g3rF#v3|37XIN_wC5N?}pzoAIEO=41DbQj(`02JL#WAbA!6x
zXiNgy@<+D2{`YlwTmJ7mf7IcSM#e{nLQMQvlWi7
zw^zem49YRim^x9Fqh)dXQ~^{7nsj8i5i{s!^1m@V90NJ5S^0ix0zPL3Z6#5q$#zGi
z5(C^Rb1G;K7mlc9Irf|O0~b0%E?<-u(ZJGH5-oBW;z1g-3!nxNS7U;@(i9Yno(RSOf8VpP@w;J?6@RCyo?)?S+4a4|yRATE3_gP#FGV`{KKZwdyZFJ&WPr(JwS)
z@mJnn_ESi4Z6G^i54%hKc#tHDLj(+haR}xvRmBtVPtzB(-`Vzq`
zKVkaQFao-9$0+e*y1*V%)ewzj6{ddf3(}S!0Wj%MhoD$eR9WQPCj)y5N@J2-t$Ecq
z@!!LKDeAI}*cZ%m{gL`|$1;!XwLG-m%$x|dYRBi)FKBU
z0^!>%Q(UqOt}q5nilqL!>?E8{v@+qKHmO1V^WgJAO_qKy1vNg8W8uDF#!RFy4W~oX
zrTn6fpCepG3Yf6l6+O)e&~|4o1ECz}3ApY7IH;~CIT4iNg^|@RMR8M`wmzi#tX{Sv
z@nz|chiIfa5p0J1b2%h+G*HX3hLjn24fX*RB1J_y#fWS;DP-UQ#Sr=-AtH+40*y$2
z`hLp}f05t50vxp+H_bWaMBE5vNCGu#ZFC`iMKU8)ES7>?sJ32aq;jcDaFOc)^Vn!D
zz?AOi(XlCmW@x(0IKbDBnbIiKWBmaolq7LiW#RMMEr12yD#WsisWd_bpHZ@UmtpSO
z=X?aDZ(q6D$@#q>WJKyM^w{0Az*~7bW(%}Ea+sd;YmJq_Y``rA9~&~y^n2h!rF}`_
z7^!axU|p&rS8@j0rc4;@r+6K7O`C#(-ImpXYrl$4ilmcJ2{7LeYDcvyCY|1dN{6**
zemK2dr@-TL!=>FKG7a)m>T60FLje4oLr6ooQ}}yS%6gRWx%#jY)_0gE8d<
zO#KJtHiT||>^4*Wv
z6cP5~oJE_HS$Y?y#^B7ZyYjU+=JNSdEKII;mLpzLuVRB*$8n|Q`*TyK&O(}=ay=Uc
zw(8C04&AS9E#Ibrn7`r9Cbhy4bI;-6_^;6`2Ct+}r#vfK_V(}t;zUpLGW74s{fXz!
zdFqq=2{e5oSX)Z=tYB
z*Y3GvT_S8f38`GzqZ|RMjp4Mvti6fTB91u9eQf&GLQ>wKf=cr8VIJ=(JYcoUjX*)%
z3A*KZEyq+6#1zXuxjrCtwtn|Jw{GQws9unl
z5ySQ5DlxExUNkSV{YltT!TD3t=|_g>DTi8U!%tf+cKztloGSoz_r`*AP7WO@+h3+3
znHEfLT{Q$iHG~IR`8HuNDi^kcwWFh-49Ibrc2!#>KB7#(vLxK7I<1hMy6J1wq_9Rw
zm`aZ^mJ+tLfS_4ZSvg{n%u{ke9reqT=lfU~X1|CoZg1vy#~tfujio39v?jBP5NK(Z
z%rQ(ka$Q0nso99Dz%eseyS+tNEO8whQ4-=xB&XUE7D_Ow$A(d)t*nxt+PjK!4g>+
z%CrNXMNWNoY__tJTp`aqvr+(GfUwyDX;8?s$TPvd&h^$Rk_y8CNgVXbJV^nbLY86p
z!y<60(m~NTM!^S4rGYsb=|VKeejm|I=_ohnIpu4)7#S(|MKN$21cSg5(f{t{Xk2AR
za~dYbaptO|AP|9|+#3Mo@CRzZ$G~w-94@U{Q2zc-VP${qN6oK_viB+d>z6u8yQTn5
zUj0#i4JImVO&ozg7F=UY-_l`PPh8Ff9C~4)
zebPwV#!iV*r$h>=KqCBbT&EjIHU_OkS-l0-8RZ7wBoHg{G$>+XHZk!=9_X{jgLQyG
zqjK4pgI8GBekGf&6!5MDCUsX7fD*a8wfBydXr_fH@XXVDCWNY)wtBWNIKU7>8()4W
z7R3WgIecsY912^g-`wnUR<(ZMty9FMdaLpI^NJ(8T33HAKE5D6Y!6wpti=zYo5gF+
z2eaE-(92c8sOZM-7VgeLz#YS{Xfp^
zz?h9I7R~h9knq=^5kCK|C9`HNIop@sUt}r~5GUgeu#6y<Fo
zi@?A-TMkyl7)waZP=_~N;6xb+dW8s;3MnHlaO_1b76!BH7dZ@6TaDj|hJ
zzyilwJS!<m@79&-pH91oCp
z|ID8StRX%7R$x1F2)L!ez8;?iC*&9N$ic&R8d0;|2hICeZxH;d{)d`&qiN}x|A2K@
z4d;YCF45HU{etiix3L=Nrk6o&<4t{FaXje08UCa9|IC{}u2kK)}
zUR>Csm@exZU0n{Hrd}24N@K@S8u>+b3tN`Uyt&U~lN0ba*7z8g>&306ezNjS
zmmfG6{nmqBvxMG3ZQDs69}*?V*RtL`4#d7S1)gu=szb>1Qa3xaL92BL
z^)}v4H$x~-bP|b5`PgOrL}pSG21Of)s4&+};RXd@Jhiba1@(R;8&z{%*zK7UcteCc
z(F*KUdRrO>+$^-Se0tpQY-IyKS1?A{nnZ_t*A0D&ZSTTISdO+7pZh=*xlunJBM22LLM2sE&uIr)RZsQ;}*yb%2DLCakk+A&|mngaly;&
zUDp=ihEpECqKHoF8*AaK7-fF4mnkw{ccwM;tg*r->tA5>|}w@?Kzv>%`q+{`WGq?48=M$mR{
zx05}a->&A322v=H-YHsIPFYG%al`S@<*GN!fLLs-GSNlq)sEUij|4huU8H1L#jrFS
zJN1yWI>DJiqZlE`7N|`CVBY-s)1OT&)0}OjdjC64Sn{A@PxON4(QEYB7h6y)ABg1b
zlN%He?2}~u8@-`_f4F#M&W_`E-mEL;&3kn|zn{M4
z_$8K&S_8kyE+=|51RuEc8pc~Gk8JbF2cncyjTDmkuKu<_^gD}GcpBuCnWMk&x3~a|x
zgxjLM0;e!&SBED~q4UZbbCn4ih$=&Zo>n<$*L6nau+&`B)GX7|n
ze{cVW!OS9F`!tfVO@7WC#S!E#{}@@lK`dd-fj&Uw`!R3EjZVW!ckmQ^8Mg>
z2<#h~cDO8u$HCTK8bm)2TH<%NHfu|u3@H#$a7&$P!052)=k>shB0WN4`AXKz`z0xT
zR1KiHiW3`>m;JCDNrdm1dQ?R#aShbo0gbpk1S^nn3~yNVENx+|6Sw5H@u--~^?Z*c
zY)x**^z9^0?`0X1{OHlkAeWt(={J$PK~(5P9?28wdtR(
z-yb)xUSnt+UW%l}e7b_QH@UkeBjc}C?>cT9tXwCLKiApfnRWu)o6R-h{XMq$@SX*K
zyhfPZOIuCq?_1C}Zsw%-An_7^8kt@BIpPl))WMojiZ6EF^J
zn~+pX1;&=0dy}fQ&}s`O;i};tg}jB{c~7xNJEHDJr7cRABq6;!$wGlf-$FM=$Q?C+
z;oC!a+o7}|DXXu9@^Hd*YyxFObG?ENEzh+WGM+^P)xZZjzl%b->C?7y6ce)&mM7kA
zyPM@(Cv2?qkM_xGVk~F0%nC|=D>M$)3VzyR$XWR)aCv;B_e={O_RqF|HY}TAnsPnj
zcJ{TMQ@h6wE?oMOc6+ydNeuD*)RUsV`TsE2&$jx$1Aq52+5f37IKJlJ%iDXSR$kd5
z-+h1KuAPJ_-(_iG%})-`9?y%Pe$C(vWsz>z&6wh{>4Zcd)L{HFhPkMJNBQCa?+RL7
z>Um)@InVX}lRYxWLFr;@q$wBU2+$%ubxX
zOe!$0&lzRHsmArqgjCHHEp7D-B|q7MCyp+zbuc=c2%VZahJ-1#4s-RT39ddP)+JYo
ze|f6>3(WQ%V1C=QS+;=u=0NYwcq24Af9hX3y@{*L$74Pj)X!P}05^oaaMk5I|Bg<2
z@zDA-(dgx|_i+awQjVO)VtaST??2c}uOB%7uIIi^Uk`4a`zl}~wg5(o8;lgMoU&In
zm3+>Jp|8QaId+b_%hl|zlP5G9Zjx$p7rIcHhvTy>=iZ18lS+f6#goCv3GLFr6Qy*}
zNZUb1jmgLO>Lt1I(ofmRstPs^)p0skZ-G()jL&nw0&`V@yO!y56bjW*Z)plrK>I^2
zNng)4>%g$+4X(s_!x;aGK88E5#UN0=_Nz?x`{p_}+&4j-`Z|U{eA?Lxi&E}`CFh&MOS8rQr2!&adW=6cZ
zb#FJ1mv(oiF~*MqJvf(WkdYf3yN<>}iZJ(Xes#Maw&!8+>xQQnT@PMa{^8(9&aB7x
zwtbUMibJbZt}k*ptLWCNf#>Osrec^@s&SKpN8wu8ZsDFZqSCtegwvB#FgA{SnZ;>^
zB+v&XzR!{|nlK(=D~3eHc?$EGPN0*ryD=XFB6h1%byOPU!N5t
zJIzMpe;)5txS*>(cW!_EKn8f8o*-}bxm~>%)3b~SQ#YsmqBq^N0Fa5}TVaKW{dVT7
zM*i;#_^4E(MqZz7X=GJh>VgMOc3;e1XPrjpN`9W@mqbCwOJ^}aG$Eb0>`_4
z)e-OG31Q@aO>1NhFZXVJxy!gMn%b?$lT8M0FCRb-8*z2twtxe8Jx69NN&{A9ckb+n{Y80i;qIlg)S32k<{aMN
zsQIfk^1a_%UaBu<@BXlc_Evej+m*|b5sB3QN8el46_xtRc&J&`-E)Zq9{m#m*7x8aA0
zF1CPcNu4>Xdw}BWaP};%VYTSW`9CI1rW|+NV3c}o4c@?u|ILCB*z`=;57B6D9knv*HfmjaWaST-GTb
z!^5opaoV-fe;%E=_D4LS$Li4HPe$LigxuLqYA~3Xhkz0y_5kLd>T7#r*Rd_k8jquX
zHt!7a**1Vv^)=auq^d-Vzc}iA+`nhB%Ziv=Zh!5ZBmFhP_`H!;ffD_i
zpVhK?j;hFwtg|{NReGMBaAN+x*V89XjnJZ-E~mUFlNa}_T`@(s<~Eb@bp2uDi=}I`
zcF*4QldLpw6ZdrLmiWUT$P6;>cSQD4A07Da`0l4@%iFhGfFBM_@56%*CrC)a-rM^1
z*FWP=XI+>RxZ-Ep#DZ`4|26-m;*EP}v6K27&XFoS*tWOpkdfPtIEHkD=kE%qg@tl_
zxy*Lh+;oP10MJa+sMEe&r%UQ4)LV?Enx=$`@Oa^HnS-`nwt+;%uoS`w_Td%
z%Zr37w?9AEHh!}#eDn9|CtZYIU*}$#lRS3r%ee#FUc|p%T(H6Z>#5Du+hG1wgGH2!z;<%_b{`L($>`_8$Yd$s(6)ovu4tOG%XA$QNW
zwV@wkZr@+qa>HhaK@eL}i#=bvo;>ewmi|xURp8M6uiuB4p78byz2Z$M+%|jP_ru%#
zTXC1PTl)AGjgl)TO19axhm1;0#X*!P+K~zvK#o7&A+*Vt$M)^gsw`aW&3P=9G&xBd
zF2+)mM~$0R!MEx*;xlXui7uXQ8fioxU5YCpY%xurVCdBt!mendA7=#1^)y!r&I{O=eRpHu{rp>R?wzPbi!P#P7r!B!@WzeZ-+W8|>E+3^mm^W*@5k>B
zoBRRfm$3%fShKn*REk5(gdT{UA*Nab6%Xiif*OYzJ${xMm@a_JG>MK#=
z=OXuCrOr?2!*%(bVEesK$B>UM5~-mfi9|9DoZOWIcZlqVPoC3Q-&!kGWH&&z;4K+f
zmlQ+}lyd8}Ih<;OQvx-^cubHoE#1z*MAo49EQ!T|s^9y4hrx+aXJQg822%6LVKIYV
z!HY#YAjsu$8K;RJZZ3^)D|zYYS2s2Bj}y#!hhatkZvH9=*iAZ&&J+H@zUu(2|QK
z^8he`kq+@Ey*J>$u!y15)y85fTUqhs)8N~sufNv+HnyC&rt@vK%MRD?GhWzzGV8d_
zJNJzIMlww}%-+Yw7OwD375AeQ%bX;*3fj@wP)-1^T#YX-h8LQjsFi}^Eqq;)NbDr&
zRIvLfzYTf}ci2n8`p
zxx<0JO=Tm|uEL*e2b+(|qRU_877p-wUQcy?<2-+NXX^z)`0H5R?YZ14B0DsBkfL)_6VBh;PB#rFG;~Z+WIKN#rwt9<%7o*QaZ*bC-1A
z-t%ln=cD((?rw;~I^H`}^X2WV=T|QK#rCO?19R}si_XCjibSKZaR`9EvWJ9A9wsF<
z*3yq@>DZrY4|bE{Jlb`qdbQp{H>f_5h?M|mbL?0A9Q%3{Fg6_Gj
zSdkPr-oIeYl=4l7gLuR@7H16x%%N(-3RuBfm;e^QktAS@k)+Jhb`R^pp94Kyat$;H
z4O~!t-Fz|eR^`JNn+{x~k#(v&JK(KX_wSpAd%>Hs%6qm-jYlEwsolpk+RzSfX;8P3
zY4ButqAsDsvTh3-X1fII-B4DhRx>{_x=m7EIx}*knMXqCI4NJ;G8nj2T?;fW-WlfU
zc(+VV$2z?U?g_G?>O4c!a8)2z-OjtY#xXbX>LJT7{Xd^IXko>j`NQ$q-n5drH^pxM
z)M4ath`rN3PPBGwYhumwFviAp2V-dY)qlkeor_$*zqH}sRL>^|lE*tClgyHF8pDjF
zZ+!Jx4DHa{>Q!JM9N)twl!!!og`;(Z6a0_kFAK}d
z%j}OGTm5~_C;I(QGggiqzI`|;YSB%gb?)4_zPq)NF*K7w1xc|;xIJX9k
zi~mi~pX^|EZ_(4oeIbVNkT!bhc3iZ%Rs89Pm)4WV5hFQlM107VEwE`*YnP&bQgchF
zmaV#WP~tMqi7GmbMx04Kpc+fNnEjy_+$R}Z0(Ee16R1Kni+
z4CL+L>mnT!Oc}!&fM4K{mo;4eAi8HBA?=&}Z85ZV;}&i13N?b}QpfRKPt)*o=ko)O!~I)&DWZ{e~)DRTmSmPVgEwo$lDQ%|3$@_loqolGr
zkG|cZ{cQNmqSdzMVHy5~v&mhj7+N+RM>Hg1CZ8@@t?}h0i3Gz6tfnq{TUM#HsJV1>
zn|O7zM#UL*IncLj%gLB#D8V;3&pwae+VlNs^KX4Mfn&*UgQxAM7m!*5M*<z8-V>c0N6
z_9p)B*oftqA&ZcEyKgr!w-M5e>sK3vuY4L`BMQv*|KyhMGP2uv+*ubfZPT{X@ki$n
z&f()^fs_?9ZU;H6F^7o>Oj!g!^X}cQxxpqW@~fY}TTWm7r2397ef##lkqE}zYHboc
z#qGzX(W)Cbq0^38WOp}*%pVeUny$&Oiy>pb1jN0#apU;ZrbE?UVea^0v^V>8=vn3h
z`Tkxz!XJ%kjc+dR%8fjo?%sOunrnUZne<(2H+{SCIcCe9BNT8tmp?C#4`bPnRkWL@rrqd=rpy0#
z4N+cp`814GYB-hD?og?;<+>>@*P_uR)i1vC?kN$)Pw|r1DiG-WJjtDdSxS}+XVS^@
z;HVjfDYpq(6&s|~vp3${r?K?R5U+|2D@w=}3D}Ovgsh$84xU)ZAy|FqD`!R-Fwy<*
z3;pFlm&s85amin-cvACW;O>TBF4au_ENR#g=XCgHfc=@+b?nu}u2
Date: Mon, 27 May 2024 18:26:31 -0400
Subject: [PATCH 32/59] 3 flashes to stun instead of 4
---
code/modules/mob/living/silicon/robot/robot_defense.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index b16445c479bf..c2ad3180b411 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -58,7 +58,7 @@
/mob/living/silicon/robot/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/stretch/flash/noise)
if(affect_silicon)
- var/software_damage = (intensity * 30)
+ var/software_damage = (intensity * 35)
adjustStaminaLoss(software_damage)
to_chat(src, "Error: Optical sensors overstimulated.")
..()
From c9ce676660e9d669fc580744914c28569e934d28 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Mon, 27 May 2024 18:26:39 -0400
Subject: [PATCH 33/59] Slightly longer stun
---
code/modules/mob/living/silicon/robot/robot_damage.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index 970e315572ca..862cdc991aaf 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -186,7 +186,7 @@ Begins the stamcrit reboot process for borgs. Stuns them, and warns people if th
"[src]'s lights suddenly go dark and [p_they()] seem to shut down.",
"A critical neural connection error has occurred. Beginning emergency reboot..."
)
- var/stun_time = rand(10 SECONDS, 15 SECONDS)
+ var/stun_time = rand(13 SECONDS, 18 SECONDS) //Slightly longer than old flash timer
Weaken(stun_time)
addtimer(CALLBACK(src, PROC_REF(end_emergency_reboot)), stun_time)
/*
From 17733dcc1a92206072c2a684700984298e9e0120 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Thu, 30 May 2024 23:25:02 -0400
Subject: [PATCH 34/59] SPEEDING UP BORGS JUST FOR THE TM SINCE CONFIG DONT
WORK
---
code/modules/mob/living/silicon/robot/robot_movement.dm | 1 +
1 file changed, 1 insertion(+)
diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm
index ae80cc421698..56055bc87325 100644
--- a/code/modules/mob/living/silicon/robot/robot_movement.dm
+++ b/code/modules/mob/living/silicon/robot/robot_movement.dm
@@ -12,6 +12,7 @@
. += speed
. += get_total_component_slowdown()
. += get_stamina_slowdown()
+ . = . - 1 //FOR THE TESTMERGE ONLY DO NOT LET THIS ACTUALLY STAY IN WHEN CONFIG PROPERLY CHANGES
// Counteract magboot slow in 0G.
if(!has_gravity(src) && HAS_TRAIT(src, TRAIT_MAGPULSE))
. -= 2 // The slowdown value on the borg magpulse.
From aba43e4ed57d02deedd329699a5c294eedb6e922 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Fri, 31 May 2024 17:49:33 -0400
Subject: [PATCH 35/59] Keep borgs stunned forever
---
.../mob/living/silicon/robot/robot_damage.dm | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index 862cdc991aaf..42ee97de55b0 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -32,11 +32,6 @@
heal_overall_damage(0, -amount, updating_health)
return STATUS_UPDATE_HEALTH
-/mob/living/silicon/robot/adjustStaminaLoss(amount, updating)
- if(rebooting) //There's no active operating system to overload
- return
- ..()
-
/mob/living/silicon/robot/update_stamina()
if(rebooting)
return
@@ -187,17 +182,25 @@ Begins the stamcrit reboot process for borgs. Stuns them, and warns people if th
"A critical neural connection error has occurred. Beginning emergency reboot..."
)
var/stun_time = rand(13 SECONDS, 18 SECONDS) //Slightly longer than old flash timer
+ setStaminaLoss(0) //Have you tried turning it off and on again?
Weaken(stun_time)
addtimer(CALLBACK(src, PROC_REF(end_emergency_reboot)), stun_time)
/*
Finishes the stamcrit process. If the borg doesn't have a power source for the reboot, they die.
*/
/mob/living/silicon/robot/proc/end_emergency_reboot()
- rebooting = FALSE
- setStaminaLoss(0) //Have you tried turning it off and on again?
if(!has_power_source()) //Can't turn itself back on
+ rebooting = FALSE
death()
return
+ if(getStaminaLoss()) //If someone has been chain-flashing a borg then the ride never ends
+ var/restun_time = rand(7 SECONDS, 10 SECONDS)
+ to_chat(src, "Error: Continual sensor overstimulation resulted in faulty reboot. Retrying in [restun_time / 10] seconds.")
+ setStaminaLoss(0) //Just keep trying to turn it off and on again, surely it'll work eventually
+ Weaken(restun_time)
+ addtimer(CALLBACK(src, PROC_REF(end_emergency_reboot)), restun_time)
+ return
+ rebooting = FALSE
if(!stat)
return
playsound(src, 'sound/machines/reboot_chime.ogg' , 100, FALSE, SOUND_RANGE_SET(10))
From 5ee535505bd760cb9b47b93c72c407f9a6cb2211 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Fri, 31 May 2024 17:49:44 -0400
Subject: [PATCH 36/59] Power loss is more dangerous
---
code/modules/mob/living/silicon/robot/robot_life.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_life.dm b/code/modules/mob/living/silicon/robot/robot_life.dm
index 42c5d870de45..7a57faa17ee8 100644
--- a/code/modules/mob/living/silicon/robot/robot_life.dm
+++ b/code/modules/mob/living/silicon/robot/robot_life.dm
@@ -36,7 +36,7 @@
if(is_component_functioning("power cell"))
low_power_mode = FALSE
return
- adjustStaminaLoss(1)
+ adjustStaminaLoss(3)
/mob/living/silicon/robot/proc/enter_low_power_mode()
low_power_mode = TRUE
From b3d6085d341dca718a5c09a2956e05daabd3d375 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Sat, 1 Jun 2024 21:52:27 -0400
Subject: [PATCH 37/59] Adds a stamina hud to borgs
---
code/_onclick/hud/robot_hud.dm | 2 ++
code/modules/mob/living/silicon/robot/robot_damage.dm | 6 +++---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/code/_onclick/hud/robot_hud.dm b/code/_onclick/hud/robot_hud.dm
index 60310611b71f..95c2861049e4 100644
--- a/code/_onclick/hud/robot_hud.dm
+++ b/code/_onclick/hud/robot_hud.dm
@@ -176,6 +176,8 @@
//Health
mymob.healths = new /atom/movable/screen/healths/robot()
infodisplay += mymob.healths
+ mymob.staminas = new /atom/movable/screen/healths/stamina()
+ infodisplay += mymob.staminas
//Installed Module
mymobR.hands = new /atom/movable/screen/robot/module()
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index 42ee97de55b0..c357ea8b4293 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -45,7 +45,7 @@
update_stamina()
if(staminaloss && !rebooting)
setStaminaLoss(0, FALSE)
- update_health_hud()
+ update_stamina_hud()
/mob/living/silicon/robot/proc/get_damaged_components(get_brute, get_burn, get_borked = FALSE, get_missing = FALSE)
var/list/datum/robot_component/parts = list()
@@ -173,7 +173,7 @@ Begins the stamcrit reboot process for borgs. Stuns them, and warns people if th
playsound(src, 'sound/machines/shut_down.ogg', 100, FALSE, SOUND_RANGE_SET(10))
if(!has_power_source())
visible_message(
- "[src]'s system sounds an alarm, ERROR: NO POWER SOURCE DETECTED. SYSTEM SHUTDOWN IMMINENT.\"",
+ "[src]'s system sounds an alarm, \"ERROR: NO POWER SOURCE DETECTED. SYSTEM SHUTDOWN IMMINENT.\"",
"EMERGENCY: FULL SYSTEM SHUTDOWN IMMINENT.")
playsound(src, 'sound/machines/buzz-two.ogg' , 50, FALSE, SOUND_RANGE_SET(10))
else
@@ -204,5 +204,5 @@ Finishes the stamcrit process. If the borg doesn't have a power source for the r
if(!stat)
return
playsound(src, 'sound/machines/reboot_chime.ogg' , 100, FALSE, SOUND_RANGE_SET(10))
- update_health_hud()
+ update_stamina_hud()
to_chat(src, "Reboot complete, neural interface operational.")
From 0be1d19d255e5d2222b4b268318213cccaa350da Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Sun, 2 Jun 2024 14:49:52 -0400
Subject: [PATCH 38/59] Cyborgs now heal up properly
---
code/modules/mob/living/silicon/robot/component.dm | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index 58d7608508d3..f5b7273502ea 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -58,7 +58,7 @@
brute_damage += brute
electronics_damage += electronics
- current_slowdown_factor = clamp((current_slowdown_factor + ((brute_damage + electronics_damage) / 100)), min_slowdown_factor, max_slowdown_factor)
+ current_slowdown_factor = clamp((current_slowdown_factor + ((brute + electronics) / 100)), min_slowdown_factor, max_slowdown_factor)
if(brute_damage + electronics_damage >= max_damage)
break_component()
@@ -71,10 +71,11 @@
if(owner && updating_health)
owner.updatehealth("component '[src]' heal damage")
-
- current_slowdown_factor = clamp((current_slowdown_factor - ((brute_damage + electronics_damage) / 100)), min_slowdown_factor, max_slowdown_factor)
- brute_damage = max(0, brute_damage - brute)
- electronics_damage = max(0, electronics_damage - electronics)
+ var/burn_damage_healed = clamp(electronics, 0, electronics_damage)
+ var/brute_damage_healed = clamp(brute, 0, brute_damage)
+ current_slowdown_factor = clamp((current_slowdown_factor - ((burn_damage_healed + brute_damage_healed) / 100)), min_slowdown_factor, max_slowdown_factor)
+ brute_damage -= brute_damage_healed
+ electronics_damage -= burn_damage_healed
SStgui.update_uis(owner.self_diagnosis)
/datum/robot_component/proc/is_powered()
From 3e8312df436e9422fa37bd93fda20b4986408b58 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Mon, 3 Jun 2024 13:43:58 -0400
Subject: [PATCH 39/59] Removes an outdated comment
---
code/modules/mob/living/silicon/robot/robot_movement.dm | 1 -
1 file changed, 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm
index 56055bc87325..33d536f30cf8 100644
--- a/code/modules/mob/living/silicon/robot/robot_movement.dm
+++ b/code/modules/mob/living/silicon/robot/robot_movement.dm
@@ -5,7 +5,6 @@
return TRUE
return FALSE
- //No longer needed, but I'll leave it here incase we plan to re-use it.
/mob/living/silicon/robot/movement_delay()
. = ..()
. += GLOB.configuration.movement.robot_delay
From e50c9b90d88939a2f44d8b98446d3886b5f071cd Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Mon, 3 Jun 2024 16:44:53 -0400
Subject: [PATCH 40/59] Replacing parts works better now
---
code/game/objects/items/robot/robot_parts.dm | 1 -
.../mob/living/silicon/robot/component.dm | 4 +++
.../mob/living/silicon/robot/robot_mob.dm | 30 +++++++------------
3 files changed, 15 insertions(+), 20 deletions(-)
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 82282c1f96cd..6cb40e0e3262 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -296,7 +296,6 @@
var/datum/robot_component/cell_component = O.components["power cell"]
cell_component.install(chest.cell)
- chest.cell.forceMove(O)
chest.cell = null
M.forceMove(O) //Should fix cybros run time erroring when blown up. It got deleted before, along with the frame.
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index f5b7273502ea..46a5c860db5e 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -33,6 +33,8 @@
/datum/robot_component/proc/install(obj/item/I, update_health = TRUE)
wrapped = I
installed = TRUE
+ I.forceMove(owner)
+ current_slowdown_factor = (brute_damage + electronics_damage) / 100
go_online()
if(update_health)
owner.updatehealth("component '[src]' installed")
@@ -122,6 +124,8 @@
return
/datum/robot_component/proc/get_movement_delay()
+ if(is_missing())
+ return 0
return (is_destroyed() ? max_slowdown_factor : current_slowdown_factor)
/datum/robot_component/armour
diff --git a/code/modules/mob/living/silicon/robot/robot_mob.dm b/code/modules/mob/living/silicon/robot/robot_mob.dm
index 196c1636160b..ce93e482269c 100644
--- a/code/modules/mob/living/silicon/robot/robot_mob.dm
+++ b/code/modules/mob/living/silicon/robot/robot_mob.dm
@@ -887,21 +887,17 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
if(istype(W, /obj/item/robot_parts/robot_component) && opened)
for(var/V in components)
var/datum/robot_component/C = components[V]
- if(C.is_missing() && istype(W, C.external_type))
- if(!user.drop_item())
- to_chat(user, "[W] seems to be stuck in your hand!")
- return
- C.install(W)
- W.loc = null
-
- var/obj/item/robot_parts/robot_component/WC = W
- if(istype(WC))
- C.brute_damage = WC.brute
- C.electronics_damage = WC.burn
-
- to_chat(usr, "You install [W].")
-
+ if(!C.is_missing() || !istype(W, C.external_type))
+ continue
+ if(!user.drop_item())
+ to_chat(user, "[W] seems to be stuck in your hand!")
return
+ var/obj/item/robot_parts/robot_component/WC = W
+ C.brute_damage = WC.brute
+ C.electronics_damage = WC.burn
+ C.install(WC)
+ to_chat(usr, "You install [W].")
+ return
if(istype(W, /obj/item/stack/cable_coil) && user.a_intent == INTENT_HELP && (wiresexposed || isdrone(src)))
user.changeNext_move(CLICK_CD_MELEE)
@@ -926,12 +922,8 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
to_chat(user, "There is a power cell already installed.")
else
user.drop_item()
- W.loc = src
to_chat(user, "You insert the power cell.")
C.install(W)
- //This will mean that removing and replacing a power cell will repair the mount, but I don't care at this point. ~Z
- C.brute_damage = 0
- C.electronics_damage = 0
var/been_hijacked = FALSE
for(var/mob/living/simple_animal/demon/pulse_demon/demon in cell)
@@ -1098,7 +1090,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
thing.burn = C.electronics_damage
C.uninstall()
- thing.loc = loc
+ thing.forceMove(loc)
From 8888f8a5147e47e492d5be2abd8c63bc1509500c Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Tue, 4 Jun 2024 18:23:08 -0400
Subject: [PATCH 41/59] EMPs disable components for a brief time
---
code/modules/mob/living/silicon/robot/component.dm | 10 ++++++++++
code/modules/mob/living/silicon/robot/robot_mob.dm | 8 ++++----
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index 46a5c860db5e..8b55b103cc1d 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -162,6 +162,9 @@
..()
owner.cell = null
+/datum/robot_component/cell/disable() //This can't be manually disabled, and shouldn't be accidentally disabled
+ return
+
/datum/robot_component/radio
name = "radio"
external_type = /obj/item/robot_parts/robot_component/radio
@@ -205,6 +208,13 @@
var/datum/robot_component/C = components[module_name]
return C && C.installed && C.toggled && C.is_powered() && !C.component_disabled
+///Disables a random component for the duration, or until manually turned back on.
+/mob/living/silicon/robot/proc/disable_random_component(number_disabled, duration)
+ var/list/random_components = pick_multiple_unique(components, number_disabled)
+ for(var/component in random_components)
+ disable_component(component, duration)
+ log_debug("[component] disabled for [duration]")
+
/mob/living/silicon/robot/proc/disable_component(module_name, duration)
var/datum/robot_component/D = get_component(module_name)
D.disable()
diff --git a/code/modules/mob/living/silicon/robot/robot_mob.dm b/code/modules/mob/living/silicon/robot/robot_mob.dm
index ce93e482269c..b6d5163c105a 100644
--- a/code/modules/mob/living/silicon/robot/robot_mob.dm
+++ b/code/modules/mob/living/silicon/robot/robot_mob.dm
@@ -1485,10 +1485,10 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
..()
adjustStaminaLoss((30 / severity)) //They also get flashed for an additional 30
switch(severity)
- if(1)
- disable_component("comms", 16 SECONDS)
- if(2)
- disable_component("comms", 6 SECONDS)
+ if(EMP_HEAVY)
+ disable_random_component(2, 20 SECONDS)
+ if(EMP_LIGHT)
+ disable_random_component(1, 10 SECONDS)
/mob/living/silicon/robot/deathsquad
base_icon = "nano_bloodhound"
From 5de650d57328e6ef62b4da7c1720ae4f88049829 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Tue, 4 Jun 2024 18:24:06 -0400
Subject: [PATCH 42/59] More missed rebalances
---
code/game/objects/items/devices/laserpointer.dm | 3 +--
code/game/objects/items/devices/traitordevices.dm | 3 ++-
code/modules/antagonists/changeling/powers/shriek.dm | 4 +++-
3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index 51107e2eba9c..bc8f1a0cc05a 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -117,8 +117,7 @@
var/mob/living/silicon/S = target
//20% chance to actually hit the sensors
if(prob(effectchance * diode.rating))
- S.flash_eyes(affect_silicon = 1)
- S.Weaken(rand(10 SECONDS, 20 SECONDS))
+ S.flash_eyes(affect_silicon = TRUE)
to_chat(S, "Your sensors were overloaded by a laser!")
outmsg = "You overload [S] by shining [src] at [S.p_their()] sensors."
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index 464886db05ec..b1b9b32c17dc 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -346,7 +346,8 @@
if(!M.client)
continue
if(issilicon(M))
- M.Weaken(10 SECONDS)
+ var/mob/living/silicon/robot/R = M
+ R.flash_eyes(3, affect_silicon = TRUE) //Enough stamina damage to instantly force a reboot
else
M.Confused(45 SECONDS)
M.adjustBrainLoss(10)
diff --git a/code/modules/antagonists/changeling/powers/shriek.dm b/code/modules/antagonists/changeling/powers/shriek.dm
index 5372ffb8c1c2..e3fa668a4a5d 100644
--- a/code/modules/antagonists/changeling/powers/shriek.dm
+++ b/code/modules/antagonists/changeling/powers/shriek.dm
@@ -27,8 +27,10 @@
SEND_SOUND(M, sound('sound/effects/clingscream.ogg'))
if(issilicon(M))
+ var/mob/living/silicon/robot/R = M
+ R.disable_component("actuator", 7 SECONDS)
SEND_SOUND(M, sound('sound/weapons/flash.ogg'))
- M.Weaken(rand(10 SECONDS, 20 SECONDS))
+ R.flash_eyes(2, affect_silicon = TRUE) //70 Stamina damage
for(var/obj/machinery/light/L in range(4, user))
L.on = TRUE
From 96076936ba0babae30d45a19626eb96b14b74f6d Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Tue, 4 Jun 2024 21:00:14 -0400
Subject: [PATCH 43/59] When you forget to remove debug messages
---
code/modules/mob/living/silicon/robot/component.dm | 1 -
1 file changed, 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index 8b55b103cc1d..f409f7a01598 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -213,7 +213,6 @@
var/list/random_components = pick_multiple_unique(components, number_disabled)
for(var/component in random_components)
disable_component(component, duration)
- log_debug("[component] disabled for [duration]")
/mob/living/silicon/robot/proc/disable_component(module_name, duration)
var/datum/robot_component/D = get_component(module_name)
From d57ec6694b87f0142b229b4b682834968535f9f1 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Tue, 4 Jun 2024 22:07:56 -0400
Subject: [PATCH 44/59] WHAT
---
code/modules/mob/living/silicon/robot/component.dm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index f409f7a01598..053f4d45b9c9 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -8,7 +8,7 @@
var/brute_damage = 0
var/electronics_damage = 0
var/max_damage = 30
- var/component_disabled = 0
+ var/component_disabled = FALSE
var/mob/living/silicon/robot/owner
var/external_type = null // The actual device object that has to be installed for this.
var/obj/item/wrapped = null // The wrapped device(e.g. radio), only set if external_type isn't null
@@ -101,12 +101,12 @@
/datum/robot_component/proc/disable()
if(!component_disabled)
go_offline()
- component_disabled++
+ component_disabled = TRUE
/datum/robot_component/proc/enable()
- component_disabled--
- if(!component_disabled)
+ if(component_disabled)
go_online()
+ component_disabled = FALSE
/datum/robot_component/proc/toggle()
toggled = !toggled
From d9c8d533d30a92fbbc0752cdb31fd8672c4ca858 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Tue, 4 Jun 2024 22:08:48 -0400
Subject: [PATCH 45/59] Cult magic works + borgs can be silenced
---
code/datums/status_effects/debuffs.dm | 5 ++---
code/game/gamemodes/cult/blood_magic.dm | 10 +++++-----
code/modules/mob/language.dm | 3 +++
code/modules/mob/living/living_say.dm | 2 +-
4 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index 1a93201a1d95..86b3dda5a9c6 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -239,11 +239,10 @@
/datum/status_effect/cult_stun_mark/on_apply()
. = ..()
- if(!ishuman(owner))
+ if(!isliving(owner))
return
overlay = mutable_appearance('icons/effects/cult_effects.dmi', "cult-mark", ABOVE_MOB_LAYER)
- var/mob/living/carbon/human/H = owner
- H.add_overlay(overlay)
+ owner.add_overlay(overlay)
/datum/status_effect/cult_stun_mark/on_remove()
owner.cut_overlay(overlay)
diff --git a/code/game/gamemodes/cult/blood_magic.dm b/code/game/gamemodes/cult/blood_magic.dm
index 5a62abbd8c18..152e80f948d8 100644
--- a/code/game/gamemodes/cult/blood_magic.dm
+++ b/code/game/gamemodes/cult/blood_magic.dm
@@ -483,20 +483,20 @@
else
to_chat(user, "In a brilliant flash of red, [L] falls to the ground!")
- L.KnockDown(10 SECONDS)
- L.apply_damage(60, STAMINA)
L.apply_status_effect(STATUS_EFFECT_CULT_STUN)
- L.flash_eyes(1, TRUE)
+ L.Silence(6 SECONDS)
if(issilicon(target))
var/mob/living/silicon/S = L
S.emp_act(EMP_HEAVY)
else if(iscarbon(target))
var/mob/living/carbon/C = L
- C.Silence(6 SECONDS)
+ C.KnockDown(10 SECONDS)
+ C.apply_damage(60, STAMINA)
+ C.flash_eyes(1, TRUE)
C.Stuttering(16 SECONDS)
C.CultSlur(20 SECONDS)
C.Jitter(16 SECONDS)
- to_chat(user, "Stun mark applied! Stab them with a dagger, sword or blood spear to stun them fully!")
+ to_chat(user, "Stun mark applied! Stab them with a dagger, sword or blood spear to stun them fully!")
user.do_attack_animation(target)
uses--
..()
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index 984f2d1d1388..e1e2b50ad120 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -605,6 +605,9 @@
if(!message)
return
+ if(HAS_TRAIT(speaker, TRAIT_MUTE))
+ return
+
var/log_message = "(ROBOT) [message]"
log_say(log_message, speaker)
speaker.create_log(SAY_LOG, log_message)
diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm
index 8ea0776852e3..78dd7c847147 100644
--- a/code/modules/mob/living/living_say.dm
+++ b/code/modules/mob/living/living_say.dm
@@ -86,7 +86,7 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key)
S.message = cultslur(S.message)
verb = "slurs"
- if(!IsVocal())
+ if(!IsVocal() || HAS_TRAIT(src, TRAIT_MUTE))
S.message = ""
return list("verb" = verb)
From bb5ed3b42f1e1086ca4db1be97a3366bee48e94f Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Fri, 7 Jun 2024 19:41:36 -0400
Subject: [PATCH 46/59] 2 flashes to stun, flashes confuse now
---
code/game/objects/items/devices/flash.dm | 2 +-
code/modules/antagonists/changeling/powers/shriek.dm | 2 +-
code/modules/mob/living/silicon/robot/robot_defense.dm | 3 ++-
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index 8a0509844859..d57f3b96000b 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -132,7 +132,7 @@
return TRUE
else if(issilicon(M))
add_attack_logs(user, M, "Flashed with [src]")
- if(M.flash_eyes(affect_silicon = 1))
+ if(M.flash_eyes(intensity = 1.25, affect_silicon = 1)) // 40 * 1.25 = 50 stamina damage
user.visible_message("[user] overloads [M]'s sensors with [src]!", "You overload [M]'s sensors with [src]!")
return TRUE
user.visible_message("[user] fails to blind [M] with [src]!", "You fail to blind [M] with [src]!")
diff --git a/code/modules/antagonists/changeling/powers/shriek.dm b/code/modules/antagonists/changeling/powers/shriek.dm
index e3fa668a4a5d..d89a2f11793a 100644
--- a/code/modules/antagonists/changeling/powers/shriek.dm
+++ b/code/modules/antagonists/changeling/powers/shriek.dm
@@ -30,7 +30,7 @@
var/mob/living/silicon/robot/R = M
R.disable_component("actuator", 7 SECONDS)
SEND_SOUND(M, sound('sound/weapons/flash.ogg'))
- R.flash_eyes(2, affect_silicon = TRUE) //70 Stamina damage
+ R.flash_eyes(2, affect_silicon = TRUE) //80 Stamina damage
for(var/obj/machinery/light/L in range(4, user))
L.on = TRUE
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index c2ad3180b411..6aabfcc9ac58 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -58,7 +58,8 @@
/mob/living/silicon/robot/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/stretch/flash/noise)
if(affect_silicon)
- var/software_damage = (intensity * 35)
+ Confused(intensity * 4 SECONDS)
+ var/software_damage = (intensity * 40)
adjustStaminaLoss(software_damage)
to_chat(src, "Error: Optical sensors overstimulated.")
..()
From c473010bec094c8edd3743a1bd071c6f832a79d0 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Sat, 8 Jun 2024 04:43:10 -0400
Subject: [PATCH 47/59] Update code/game/objects/items/devices/flash.dm
Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
---
code/game/objects/items/devices/flash.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index d57f3b96000b..6a96e40bc1b7 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -132,7 +132,7 @@
return TRUE
else if(issilicon(M))
add_attack_logs(user, M, "Flashed with [src]")
- if(M.flash_eyes(intensity = 1.25, affect_silicon = 1)) // 40 * 1.25 = 50 stamina damage
+ if(M.flash_eyes(intensity = 1.25, affect_silicon = TRUE)) // 40 * 1.25 = 50 stamina damage
user.visible_message("[user] overloads [M]'s sensors with [src]!", "You overload [M]'s sensors with [src]!")
return TRUE
user.visible_message("[user] fails to blind [M] with [src]!", "You fail to blind [M] with [src]!")
From dbc6ea434be2942c38588887bbbe20f18a8617b9 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Wed, 12 Jun 2024 18:25:13 -0400
Subject: [PATCH 48/59] Abductors can stun borgs
---
code/game/gamemodes/miniantags/abduction/abduction_gear.dm | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
index 6e7eefce904f..fbcf5632843d 100644
--- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
+++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
@@ -288,9 +288,6 @@ CONTENTS:
if(!isabductor(user))
return
- if(isrobot(target))
- ..()
- return
if(!isliving(target))
return
@@ -299,6 +296,10 @@ CONTENTS:
user.do_attack_animation(L)
+ if(isrobot(L))
+ L.apply_damage(120, STAMINA) //Force a reboot instantly
+ return
+
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
From 0ccd1ebe0877c11e832dbc301fe51264e8d05950 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Wed, 12 Jun 2024 20:10:22 -0400
Subject: [PATCH 49/59] Watcher/cyro rays deal stam to brog
---
.../mob/living/simple_animal/hostile/mining/basilisk.dm | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm
index 9ca58f640a4a..d9ceb43cf2e5 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm
@@ -44,6 +44,12 @@
flag = ENERGY
temperature = 50
+/obj/item/projectile/temp/basilisk/on_hit(atom/target, blocked)
+ ..()
+ if(isrobot(target))
+ var/mob/living/silicon/robot/cyborg = target
+ cyborg.apply_damage(35, STAMINA)
+
/mob/living/simple_animal/hostile/asteroid/basilisk/GiveTarget(new_target)
if(..()) //we have a target
if(isliving(target) && !target.Adjacent(targets_from) && ranged_cooldown <= world.time)//No more being shot at point blank or spammed with RNG beams
From 4a92ea8e87fafdef6864b06c27ed86aa13b691ea Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Sat, 22 Jun 2024 21:19:34 -0400
Subject: [PATCH 50/59] Fixes a rounding error when healing borgs back to full
HP
---
code/modules/mob/living/silicon/robot/component.dm | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index 053f4d45b9c9..51848c123d79 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -76,10 +76,16 @@
var/burn_damage_healed = clamp(electronics, 0, electronics_damage)
var/brute_damage_healed = clamp(brute, 0, brute_damage)
current_slowdown_factor = clamp((current_slowdown_factor - ((burn_damage_healed + brute_damage_healed) / 100)), min_slowdown_factor, max_slowdown_factor)
+ rounding_error_check()
brute_damage -= brute_damage_healed
electronics_damage -= burn_damage_healed
SStgui.update_uis(owner.self_diagnosis)
+///There tends to be some desync between slowdown and damage when being healed up slowly like through self-repair or upgraded rechargers.
+/datum/robot_component/proc/rounding_error_check()
+ if(current_slowdown_factor < (min_slowdown_factor) + 0.0001) //Within .0001 of the minimum, just set it to the minimum
+ current_slowdown_factor = min_slowdown_factor
+
/datum/robot_component/proc/is_powered()
return installed && (brute_damage + electronics_damage < max_damage) && (powered)
From 3de5424c3c24b4a0cd64174efbcde59566bb8ccf Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Thu, 27 Jun 2024 01:32:36 -0400
Subject: [PATCH 51/59] Fixed span
Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>
Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
---
code/modules/mob/living/silicon/robot/robot_damage.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index c357ea8b4293..36f1385526e7 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -205,4 +205,4 @@ Finishes the stamcrit process. If the borg doesn't have a power source for the r
return
playsound(src, 'sound/machines/reboot_chime.ogg' , 100, FALSE, SOUND_RANGE_SET(10))
update_stamina_hud()
- to_chat(src, "Reboot complete, neural interface operational.")
+ to_chat(src, "Reboot complete, neural interface operational.")
From ab89e14ac45d64a3a9b3d3bec7a6fa0cabb80b45 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Thu, 27 Jun 2024 01:32:50 -0400
Subject: [PATCH 52/59] Fixed whitespace
Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>
Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
---
code/modules/mob/living/silicon/robot/robot_life.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_life.dm b/code/modules/mob/living/silicon/robot/robot_life.dm
index 7a57faa17ee8..c25b202e3f20 100644
--- a/code/modules/mob/living/silicon/robot/robot_life.dm
+++ b/code/modules/mob/living/silicon/robot/robot_life.dm
@@ -27,7 +27,7 @@
use_power()
/mob/living/silicon/robot/proc/use_power()
- var/amt = clamp((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell.
+ var/amt = clamp((lamp_intensity - 2) * 2, 1, cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell.
cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick
diag_hud_set_borgcell()
From 8d17b85d1331fa2a890a515b82056618d2bca0d0 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Thu, 27 Jun 2024 01:34:12 -0400
Subject: [PATCH 53/59] Guard clausify
---
.../mob/living/silicon/robot/robot_defense.dm | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index 6aabfcc9ac58..9129dd97b27d 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -57,9 +57,10 @@
step_away(src, user, 15)
/mob/living/silicon/robot/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/stretch/flash/noise)
- if(affect_silicon)
- Confused(intensity * 4 SECONDS)
- var/software_damage = (intensity * 40)
- adjustStaminaLoss(software_damage)
- to_chat(src, "Error: Optical sensors overstimulated.")
- ..()
+ if(!affect_silicon)
+ return
+ Confused(intensity * 4 SECONDS)
+ var/software_damage = (intensity * 40)
+ adjustStaminaLoss(software_damage)
+ to_chat(src, "Error: Optical sensors overstimulated.")
+ ..()
From f9e4f68c88dfe0faf3515d53e3fd27ba4637b83b Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Thu, 27 Jun 2024 01:38:35 -0400
Subject: [PATCH 54/59] Indents a message
---
code/modules/mob/living/silicon/robot/robot_damage.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index 36f1385526e7..52b43a7ee1de 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -173,8 +173,8 @@ Begins the stamcrit reboot process for borgs. Stuns them, and warns people if th
playsound(src, 'sound/machines/shut_down.ogg', 100, FALSE, SOUND_RANGE_SET(10))
if(!has_power_source())
visible_message(
- "[src]'s system sounds an alarm, \"ERROR: NO POWER SOURCE DETECTED. SYSTEM SHUTDOWN IMMINENT.\"",
- "EMERGENCY: FULL SYSTEM SHUTDOWN IMMINENT.")
+ "[src]'s system sounds an alarm, \"ERROR: NO POWER SOURCE DETECTED. SYSTEM SHUTDOWN IMMINENT.\"",
+ "EMERGENCY: FULL SYSTEM SHUTDOWN IMMINENT.")
playsound(src, 'sound/machines/buzz-two.ogg' , 50, FALSE, SOUND_RANGE_SET(10))
else
visible_message(
From 1e946ec5cb19bb0b00110877d6b1b4845b3bb73d Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Mon, 8 Jul 2024 19:23:31 -0400
Subject: [PATCH 55/59] Update
code/modules/mob/living/silicon/robot/robot_damage.dm
Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com>
Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
---
code/modules/mob/living/silicon/robot/robot_damage.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index 52b43a7ee1de..067d3227e33a 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -83,7 +83,7 @@
if(!LAZYLEN(components))
return FALSE
var/datum/robot_component/C = components["power cell"]
- if(C && C.installed)
+ if(C?.installed)
return C
return FALSE
From 3da20a4bdf92fdb6495583bc439051022f784e87 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Mon, 8 Jul 2024 19:25:42 -0400
Subject: [PATCH 56/59] Update
code/modules/mob/living/silicon/robot/component.dm
Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com>
Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
---
code/modules/mob/living/silicon/robot/component.dm | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index 51848c123d79..643d344c9f5f 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -132,7 +132,9 @@
/datum/robot_component/proc/get_movement_delay()
if(is_missing())
return 0
- return (is_destroyed() ? max_slowdown_factor : current_slowdown_factor)
+ if(is_destroyed())
+ return max_slowdown_factor
+ return current_slowdown_factor
/datum/robot_component/armour
name = "armour plating"
From 36244a78c8ace6a18ab8cd1787622eba0fc5e6f4 Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Mon, 8 Jul 2024 19:32:01 -0400
Subject: [PATCH 57/59] Update
code/modules/mob/living/silicon/robot/robot_damage.dm
Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com>
Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
---
code/modules/mob/living/silicon/robot/robot_damage.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index 067d3227e33a..f7ae689c15bd 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -36,7 +36,7 @@
if(rebooting)
return
var/current_stam_damage = getStaminaLoss()
- if(current_stam_damage > DAMAGE_PRECISION && (maxHealth - current_stam_damage) <= HEALTH_THRESHOLD_CRIT && !stat)
+ if(current_stam_damage > DAMAGE_PRECISION && (maxHealth - current_stam_damage) <= HEALTH_THRESHOLD_CRIT && stat == CONSCIOUS)
start_emergency_reboot()
/mob/living/silicon/robot/handle_status_effects()
From 07fa921ea53a8f4f188cc3a995e38c1ae9659c2e Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Mon, 8 Jul 2024 19:33:45 -0400
Subject: [PATCH 58/59] that's not what stat does
---
code/modules/mob/living/silicon/robot/robot_damage.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index f7ae689c15bd..f4cb598acfcb 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -201,7 +201,7 @@ Finishes the stamcrit process. If the borg doesn't have a power source for the r
addtimer(CALLBACK(src, PROC_REF(end_emergency_reboot)), restun_time)
return
rebooting = FALSE
- if(!stat)
+ if(stat != CONSCIOUS)
return
playsound(src, 'sound/machines/reboot_chime.ogg' , 100, FALSE, SOUND_RANGE_SET(10))
update_stamina_hud()
From ffd4d20640a0de1b5faa26db2ff87be67326f4da Mon Sep 17 00:00:00 2001
From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com>
Date: Tue, 9 Jul 2024 13:18:32 -0400
Subject: [PATCH 59/59] No more hardcoded speed, don't TM this branch
---
code/modules/mob/living/silicon/robot/robot_movement.dm | 1 -
1 file changed, 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm
index 33d536f30cf8..e4670796e411 100644
--- a/code/modules/mob/living/silicon/robot/robot_movement.dm
+++ b/code/modules/mob/living/silicon/robot/robot_movement.dm
@@ -11,7 +11,6 @@
. += speed
. += get_total_component_slowdown()
. += get_stamina_slowdown()
- . = . - 1 //FOR THE TESTMERGE ONLY DO NOT LET THIS ACTUALLY STAY IN WHEN CONFIG PROPERLY CHANGES
// Counteract magboot slow in 0G.
if(!has_gravity(src) && HAS_TRAIT(src, TRAIT_MAGPULSE))
. -= 2 // The slowdown value on the borg magpulse.